From: robert.richter@cavium.com (Robert Richter)
To: linux-arm-kernel@lists.infradead.org
Subject: [PATCH v2 8/8] irqchip, gicv3-its, cma: Use CMA for allocation of large device tables
Date: Wed, 15 Mar 2017 19:37:34 +0100 [thread overview]
Message-ID: <20170315183734.GW16822@rric.localdomain> (raw)
In-Reply-To: <3c462655-fb2c-ede7-1dc0-ca5c7f64904f@codeaurora.org>
On 14.03.17 12:40:45, Shanker Donthineni wrote:
> I don't see anywhere in this patch, code calls explicitly CMA API to
> allocate memory for device table. The CMA feature is an optional in
> kernel, and will be handled transparently inside the the DMA
> layer. It would be nicer to not mention CMA word in the commit
> subject.
Still CMA is *essential* and used for large tables. IMO this needs to
be emphasized. That's the reason for using devm_alloc_coherent().
> On 03/06/2017 06:57 AM, Robert Richter wrote:
> > The gicv3-its device table may have a size of up to 16MB. With 4k
> > pagesize the maximum size of memory allocation is 4MB. Use CMA for
> > allocation of large tables.
> Just say use devm_alloc_coherent() to allocate memory.
>
> > We use the device managed version of dma_alloc_coherent(). Thus, we
> > don't need to release it manually on device removal.
> >
> > Signed-off-by: Robert Richter <rrichter@cavium.com>
> > ---
> > drivers/irqchip/irq-gic-v3-its.c | 69 +++++++++++++++++++++++-----------------
> > 1 file changed, 40 insertions(+), 29 deletions(-)
> >
> > diff --git a/drivers/irqchip/irq-gic-v3-its.c b/drivers/irqchip/irq-gic-v3-its.c
> > index 6625b3a505f0..6d293a0165b0 100644
> > --- a/drivers/irqchip/irq-gic-v3-its.c
> > +++ b/drivers/irqchip/irq-gic-v3-its.c
> > @@ -876,13 +878,26 @@ static int its_setup_baser(struct its_node *its, struct its_baser *baser,
> > order = get_order(GITS_BASER_PAGES_MAX * psz);
> > }
> >
> > - base = (void *)devm_get_free_pages(&its->dev, GFP_KERNEL | __GFP_ZERO,
> > - order);
> > - if (!base)
> > + base = dmam_alloc_coherent(&its->dev,
> > + PAGE_ORDER_TO_SIZE(order),
> > + &dma_handle,
> > + GFP_KERNEL | __GFP_ZERO);
> Not just for 1st level device table, you have do a similar code
> change when allocating memory for 2nd level device table.
The 2nd level tables are much smaller, so no need for
dmam_alloc_coherent() there.
Though, we could use device managed devm_get_free_pages() there too.
> > +
> > + if (!base && order >= MAX_ORDER) {
> > + order = MAX_ORDER - 1;
> > + dev_warn(&its->dev, "Device Table too large, reduce ids %u->%u, no CMA memory available\n",
> > + its->device_ids,
> > + ilog2(PAGE_ORDER_TO_SIZE(order) / (int)esz));
> > + goto retry_alloc_baser;
> > + }
> > +
> > + if (!base) {
> > + dev_err(&its->dev, "Failed to allocate device table\n");
> > return -ENOMEM;
> > + }
> > @@ -1698,6 +1706,9 @@ static int __init its_init_one(struct its_node *its)
> > return err;
> > }
> >
> > + /* Setup dma_ops for dmam_alloc_coherent() */
> > + arch_setup_dma_ops(&its->dev, 0, 0, NULL, true);
> > +
> Why you are hard-coding DMA coherent property to true here ? It
> breaks the MSI(x) functionally on systems where ITS hardware doesn't
> support coherency.
Aren't current ITS tables coherent only?
Thanks,
-Robert
next prev parent reply other threads:[~2017-03-15 18:37 UTC|newest]
Thread overview: 15+ messages / expand[flat|nested] mbox.gz Atom feed top
2017-03-06 12:57 [PATCH v2 0/8] irqchip/gic-v3-its: Implement ITS nodes as kernel devices and use CMA Robert Richter
2017-03-06 12:57 ` [PATCH v2 1/8] irqchip/gic-v3-its: Initialize its nodes in probe order Robert Richter
2017-03-06 12:57 ` [PATCH v2 2/8] irqchip/gic-v3-its: Initialize MSIs with subsys_initcalls Robert Richter
2017-03-06 12:57 ` [PATCH v2 3/8] irqchip/gic-v3-its: Split probing from its node initialization Robert Richter
2017-03-06 12:57 ` [PATCH v2 4/8] irqchip/gic-v3-its: Decouple its initialization from gic Robert Richter
2017-03-06 12:57 ` [PATCH v2 5/8] irqchip/gic-v3-its: Prevent its init ordering dependencies Robert Richter
2017-03-06 12:57 ` [PATCH v2 6/8] irqchip/gic-v3-its: Initialize its nodes later Robert Richter
2017-03-06 12:57 ` [PATCH v2 7/8] irqchip/gic-v3-its: Handle its nodes as kernel devices Robert Richter
2017-03-06 12:57 ` [PATCH v2 8/8] irqchip, gicv3-its, cma: Use CMA for allocation of large device tables Robert Richter
2017-03-14 17:40 ` Shanker Donthineni
2017-03-15 18:37 ` Robert Richter [this message]
2017-03-15 18:46 ` Marc Zyngier
2017-03-16 13:31 ` Robert Richter
2017-03-16 13:41 ` Marc Zyngier
2017-03-16 14:03 ` Shanker Donthineni
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=20170315183734.GW16822@rric.localdomain \
--to=robert.richter@cavium.com \
--cc=linux-arm-kernel@lists.infradead.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