From: Frank Li <Frank.li@nxp.com>
To: Adrian Hunter <adrian.hunter@intel.com>
Cc: alexandre.belloni@bootlin.com, linux-i3c@lists.infradead.org,
linux-kernel@vger.kernel.org
Subject: Re: [PATCH V4 16/17] i3c: mipi-i3c-hci: Consolidate DMA ring allocation
Date: Tue, 2 Jun 2026 12:49:52 -0400 [thread overview]
Message-ID: <ah8JsHRiZxlQoB4b@lizhi-Precision-Tower-5810> (raw)
In-Reply-To: <20260515162621.57719-17-adrian.hunter@intel.com>
On Fri, May 15, 2026 at 07:26:20PM +0300, Adrian Hunter wrote:
> dma_alloc_coherent() allocates memory in whole pages, which can waste
> space when command and response queues are allocated separately.
>
> Allocate the DMA command and response queues from a single coherent
> allocation instead, while preserving the required 4-byte alignment.
>
> This reduces memory overhead without changing behavior.
>
> Signed-off-by: Adrian Hunter <adrian.hunter@intel.com>
> ---
Reviewed-by: Frank Li <Frank.Li@nxp.com>
>
>
> Changes in V4:
>
> Cache allocation size in rh->xfer_alloc_sz to avoid recomputing in
> hci_dma_free()
>
> Changes in V3:
>
> None
>
> Changes in V2:
>
> Check for failed allocation before assignments to avoid doing
> arithmetic with NULL pointers
>
>
> drivers/i3c/master/mipi-i3c-hci/dma.c | 21 ++++++++-------------
> 1 file changed, 8 insertions(+), 13 deletions(-)
>
> diff --git a/drivers/i3c/master/mipi-i3c-hci/dma.c b/drivers/i3c/master/mipi-i3c-hci/dma.c
> index 9a01c740760f..0136f3064ada 100644
> --- a/drivers/i3c/master/mipi-i3c-hci/dma.c
> +++ b/drivers/i3c/master/mipi-i3c-hci/dma.c
> @@ -130,7 +130,7 @@ struct hci_rh_data {
> dma_addr_t xfer_dma, resp_dma, ibi_status_dma, ibi_data_dma;
> unsigned int xfer_entries, ibi_status_entries, ibi_chunks_total;
> unsigned int xfer_struct_sz, resp_struct_sz, ibi_status_sz, ibi_chunk_sz;
> - unsigned int done_ptr, ibi_chunk_ptr, xfer_space;
> + unsigned int xfer_alloc_sz, done_ptr, ibi_chunk_ptr, xfer_space;
> struct hci_xfer **src_xfers;
> struct completion op_done;
> };
> @@ -187,13 +187,7 @@ static void hci_dma_free(void *data)
> rh = &rings->headers[i];
>
> if (rh->xfer)
> - dma_free_coherent(rings->sysdev,
> - rh->xfer_struct_sz * rh->xfer_entries,
> - rh->xfer, rh->xfer_dma);
> - if (rh->resp)
> - dma_free_coherent(rings->sysdev,
> - rh->resp_struct_sz * rh->xfer_entries,
> - rh->resp, rh->resp_dma);
> + dma_free_coherent(rings->sysdev, rh->xfer_alloc_sz, rh->xfer, rh->xfer_dma);
> kfree(rh->src_xfers);
> if (rh->ibi_status)
> dma_free_coherent(rings->sysdev,
> @@ -359,18 +353,19 @@ static int hci_dma_init(struct i3c_hci *hci)
> dev_dbg(&hci->master.dev,
> "xfer_struct_sz = %d, resp_struct_sz = %d",
> rh->xfer_struct_sz, rh->resp_struct_sz);
> - xfers_sz = rh->xfer_struct_sz * rh->xfer_entries;
> + xfers_sz = round_up(rh->xfer_struct_sz * rh->xfer_entries, 4);
> resps_sz = rh->resp_struct_sz * rh->xfer_entries;
> + rh->xfer_alloc_sz = xfers_sz + resps_sz;
>
> - rh->xfer = dma_alloc_coherent(rings->sysdev, xfers_sz,
> + rh->xfer = dma_alloc_coherent(rings->sysdev, rh->xfer_alloc_sz,
> &rh->xfer_dma, GFP_KERNEL);
> - rh->resp = dma_alloc_coherent(rings->sysdev, resps_sz,
> - &rh->resp_dma, GFP_KERNEL);
> rh->src_xfers =
> kzalloc_objs(*rh->src_xfers, rh->xfer_entries);
> ret = -ENOMEM;
> - if (!rh->xfer || !rh->resp || !rh->src_xfers)
> + if (!rh->xfer || !rh->src_xfers)
> goto err_out;
> + rh->resp = rh->xfer + xfers_sz;
> + rh->resp_dma = rh->xfer_dma + xfers_sz;
>
> /* IBIs */
>
> --
> 2.51.0
>
next prev parent reply other threads:[~2026-06-02 16:50 UTC|newest]
Thread overview: 26+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-05-15 16:26 [PATCH V4 00/17] i3c: mipi-i3c-hci: DMA abort, recovery and related improvements Adrian Hunter
2026-05-15 16:26 ` [PATCH V4 01/17] i3c: mipi-i3c-hci: Fix suspend behavior when bus disable falls back to software reset Adrian Hunter
2026-05-15 16:26 ` [PATCH V4 02/17] i3c: mipi-i3c-hci: Preserve RUN bit when aborting DMA ring Adrian Hunter
2026-05-15 16:26 ` [PATCH V4 03/17] i3c: mipi-i3c-hci: Prevent DMA enqueue while ring is aborting or in error Adrian Hunter
2026-05-15 16:26 ` [PATCH V4 04/17] i3c: mipi-i3c-hci: Wait for DMA ring restart to complete Adrian Hunter
2026-05-15 16:26 ` [PATCH V4 05/17] i3c: mipi-i3c-hci: Move hci_dma_xfer_done() definition Adrian Hunter
2026-05-15 16:26 ` [PATCH V4 06/17] i3c: mipi-i3c-hci: Call hci_dma_xfer_done() from dequeue path Adrian Hunter
2026-05-15 16:26 ` [PATCH V4 07/17] i3c: mipi-i3c-hci: Complete transfer lists immediately on error Adrian Hunter
2026-05-15 16:26 ` [PATCH V4 08/17] i3c: mipi-i3c-hci: Avoid restarting DMA ring after aborting wrong transfer Adrian Hunter
2026-06-02 2:49 ` Frank Li
2026-05-15 16:26 ` [PATCH V4 09/17] i3c: mipi-i3c-hci: Add DMA ring abort/reset quirk for Intel controllers Adrian Hunter
2026-06-02 2:52 ` Frank Li
2026-05-15 16:26 ` [PATCH V4 10/17] i3c: mipi-i3c-hci: Factor out hci_dma_abort() Adrian Hunter
2026-06-02 2:53 ` Frank Li
2026-05-15 16:26 ` [PATCH V4 11/17] i3c: mipi-i3c-hci: Add DMA ring abort quirk for Intel controllers Adrian Hunter
2026-06-02 2:56 ` Frank Li
2026-05-15 16:26 ` [PATCH V4 12/17] i3c: mipi-i3c-hci: Factor out reset-and-restore helper Adrian Hunter
2026-05-15 16:26 ` [PATCH V4 13/17] i3c: mipi-i3c-hci: Add DMA-mode recovery for internal controller errors Adrian Hunter
2026-06-02 16:45 ` Frank Li
2026-05-15 16:26 ` [PATCH V4 14/17] i3c: mipi-i3c-hci: Wait for NoOp commands to complete Adrian Hunter
2026-05-15 16:26 ` [PATCH V4 15/17] i3c: mipi-i3c-hci: Base timeouts on actual transfer start time Adrian Hunter
2026-06-02 16:47 ` Frank Li
2026-05-15 16:26 ` [PATCH V4 16/17] i3c: mipi-i3c-hci: Consolidate DMA ring allocation Adrian Hunter
2026-06-02 16:49 ` Frank Li [this message]
2026-05-15 16:26 ` [PATCH V4 17/17] i3c: mipi-i3c-hci: Increase DMA transfer ring size to maximum Adrian Hunter
2026-06-01 10:32 ` [PATCH V4 00/17] i3c: mipi-i3c-hci: DMA abort, recovery and related improvements Adrian Hunter
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=ah8JsHRiZxlQoB4b@lizhi-Precision-Tower-5810 \
--to=frank.li@nxp.com \
--cc=adrian.hunter@intel.com \
--cc=alexandre.belloni@bootlin.com \
--cc=linux-i3c@lists.infradead.org \
--cc=linux-kernel@vger.kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox
all inboxes | Powered by JetHome®