[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [PATCH v4 2/3] hw/ufs: Support for Query Transfer Requests
From: |
Stefan Hajnoczi |
Subject: |
Re: [PATCH v4 2/3] hw/ufs: Support for Query Transfer Requests |
Date: |
Tue, 18 Jul 2023 16:42:03 -0400 |
On Tue, Jul 04, 2023 at 05:33:58PM +0900, Jeuk Kim wrote:
> +static MemTxResult ufs_dma_read_prdt(UfsRequest *req)
> +{
> + UfsHc *u = req->hc;
> + uint16_t prdt_len = le16_to_cpu(req->utrd.prd_table_length);
> + uint16_t prdt_byte_off =
> + le16_to_cpu(req->utrd.prd_table_offset) * sizeof(uint32_t);
> + uint32_t prdt_size = prdt_len * sizeof(UfshcdSgEntry);
> + g_autofree UfshcdSgEntry *prd_entries = NULL;
> + hwaddr req_upiu_base_addr, prdt_base_addr;
> + int err;
> +
> + assert(!req->sg);
> +
> + if (prdt_len == 0) {
> + return MEMTX_OK;
> + }
> +
> + prd_entries = g_new(UfshcdSgEntry, prdt_size);
> + if (!prd_entries) {
g_new() never returns NULL. The process aborts if there is not enough
memory available.
Use g_try_new() if you want to handle memory allocation failure.
> + trace_ufs_err_memory_allocation();
> + return MEMTX_ERROR;
> + }
> +
> + req_upiu_base_addr = ufs_get_req_upiu_base_addr(&req->utrd);
> + prdt_base_addr = req_upiu_base_addr + prdt_byte_off;
> +
> + err = ufs_addr_read(u, prdt_base_addr, prd_entries, prdt_size);
> + if (err) {
> + trace_ufs_err_dma_read_prdt(req->slot, prdt_base_addr);
> + return err;
> + }
> +
> + req->sg = g_malloc0(sizeof(QEMUSGList));
> + if (!req->sg) {
g_malloc0() never returns NULL. The process aborts if there is not
enough memory available.
signature.asc
Description: PGP signature