From: Andreas Herrmann <herrmann.der.user-gM/Ye1E23mwN+BqQ9rBEUg@public.gmane.org>
To: Will Deacon <will.deacon-5wv7dgnIgG8@public.gmane.org>
Cc: Nicolas Pitre
<nicolas.pitre-QSEj5FYQhm4dnm+yROfE0A@public.gmane.org>,
Russell King <linux-lFZ/pmaqli7XmaaqVzeoHQ@public.gmane.org>,
"iommu-cunTk1MwBs9QetFLy7KEm3xJsTq8ys+cHZ5vskTnxNA@public.gmane.org"
<iommu-cunTk1MwBs9QetFLy7KEm3xJsTq8ys+cHZ5vskTnxNA@public.gmane.org>,
Andreas Herrmann
<andreas.herrmann-bsGFqQB8/DxBDgjK7y7TUQ@public.gmane.org>,
"linux-arm-kernel-IAPFreCvJWM7uuMidbF8XUB+6BGkLq7r@public.gmane.org"
<linux-arm-kernel-IAPFreCvJWM7uuMidbF8XUB+6BGkLq7r@public.gmane.org>
Subject: Re: [PATCH 11/11] arm: dma-mapping: Add support to extend DMA IOMMU mappings
Date: Thu, 23 Jan 2014 22:50:46 +0100 [thread overview]
Message-ID: <20140123215046.GF26399@alberich> (raw)
In-Reply-To: <20140122161010.GH14108-MRww78TxoiP5vMa5CHWGZ34zcgK1vI+I0E9HWUfgJXw@public.gmane.org>
On Wed, Jan 22, 2014 at 04:10:11PM +0000, Will Deacon wrote:
> On Thu, Jan 16, 2014 at 12:44:23PM +0000, Andreas Herrmann wrote:
> > Instead of using just one bitmap to keep track of IO virtual addresses
> > (handed out for IOMMU use) introduce a list of iova_ranges (each
> > having its own bitmap). This allows us to extend existing mappings
> > when running out of iova space for a mapping.
> >
> > If there is not enough space in the mapping to service an IO virtual
> > address allocation request, __alloc_iova() tries to extend the mapping
> > -- by allocating another bitmap -- and makes another allocation
> > attempt using the freshly allocated bitmap.
> >
> > This allows arm iommu drivers to start with a decent initial size when
> > an dma_iommu_mapping is created and still to avoid running out of IO
> > virtual addresses for the mapping.
> >
> > Tests were done on Calxeda ECX-2000 with smmu for sata and xgmac.
> > I've used SZ_512K both for initial mapping size and grow_size.
>
> Aha, I thought grow_size was the *maximum* size, rather than the incremental
> size. In which case, you probably want to pick the maximum supported IOMMU
> page size that satisfies a fixed limit on the bitmap size.
>
> > +static int extend_iommu_mapping(struct dma_iommu_mapping *mapping)
> > +{
> > + struct dma_iommu_iova_range *iovar;
> > + unsigned int count = mapping->grow_size >> (PAGE_SHIFT + mapping->order);
> > + unsigned int bitmap_size = BITS_TO_LONGS(count) * sizeof(long);
> > +
> > + if (!mapping->grow_size ||
> > + (mapping->size + mapping->grow_size) >= mapping->max_size)
> > + return -EINVAL;
> > +
> > + iovar = kzalloc(sizeof(struct dma_iommu_iova_range), GFP_ATOMIC);
> > + if (!iovar)
> > + return -ENOMEM;
> > +
> > + iovar->bitmap = kzalloc(bitmap_size, GFP_ATOMIC);
>
> Do these allocation really need to be atomic? I worry that's going to have
> severe restrictions on our ability to allocate large address spaces.
Say some code acquired a lock before calling dma_map_single.
If we have to extend the mapping in such a path we should not sĺeep.
Andreas
_______________________________________________
iommu mailing list
iommu@lists.linux-foundation.org
https://lists.linuxfoundation.org/mailman/listinfo/iommu
WARNING: multiple messages have this Message-ID (diff)
From: herrmann.der.user@googlemail.com (Andreas Herrmann)
To: linux-arm-kernel@lists.infradead.org
Subject: [PATCH 11/11] arm: dma-mapping: Add support to extend DMA IOMMU mappings
Date: Thu, 23 Jan 2014 22:50:46 +0100 [thread overview]
Message-ID: <20140123215046.GF26399@alberich> (raw)
In-Reply-To: <20140122161010.GH14108@mudshark.cambridge.arm.com>
On Wed, Jan 22, 2014 at 04:10:11PM +0000, Will Deacon wrote:
> On Thu, Jan 16, 2014 at 12:44:23PM +0000, Andreas Herrmann wrote:
> > Instead of using just one bitmap to keep track of IO virtual addresses
> > (handed out for IOMMU use) introduce a list of iova_ranges (each
> > having its own bitmap). This allows us to extend existing mappings
> > when running out of iova space for a mapping.
> >
> > If there is not enough space in the mapping to service an IO virtual
> > address allocation request, __alloc_iova() tries to extend the mapping
> > -- by allocating another bitmap -- and makes another allocation
> > attempt using the freshly allocated bitmap.
> >
> > This allows arm iommu drivers to start with a decent initial size when
> > an dma_iommu_mapping is created and still to avoid running out of IO
> > virtual addresses for the mapping.
> >
> > Tests were done on Calxeda ECX-2000 with smmu for sata and xgmac.
> > I've used SZ_512K both for initial mapping size and grow_size.
>
> Aha, I thought grow_size was the *maximum* size, rather than the incremental
> size. In which case, you probably want to pick the maximum supported IOMMU
> page size that satisfies a fixed limit on the bitmap size.
>
> > +static int extend_iommu_mapping(struct dma_iommu_mapping *mapping)
> > +{
> > + struct dma_iommu_iova_range *iovar;
> > + unsigned int count = mapping->grow_size >> (PAGE_SHIFT + mapping->order);
> > + unsigned int bitmap_size = BITS_TO_LONGS(count) * sizeof(long);
> > +
> > + if (!mapping->grow_size ||
> > + (mapping->size + mapping->grow_size) >= mapping->max_size)
> > + return -EINVAL;
> > +
> > + iovar = kzalloc(sizeof(struct dma_iommu_iova_range), GFP_ATOMIC);
> > + if (!iovar)
> > + return -ENOMEM;
> > +
> > + iovar->bitmap = kzalloc(bitmap_size, GFP_ATOMIC);
>
> Do these allocation really need to be atomic? I worry that's going to have
> severe restrictions on our ability to allocate large address spaces.
Say some code acquired a lock before calling dma_map_single.
If we have to extend the mapping in such a path we should not s?eep.
Andreas
next prev parent reply other threads:[~2014-01-23 21:50 UTC|newest]
Thread overview: 134+ messages / expand[flat|nested] mbox.gz Atom feed top
2014-01-16 12:44 [PATCH v4 0/11] iommu/arm-smmu: Misc modifications to support SMMUs on Calxeda ECX-2000 Andreas Herrmann
2014-01-16 12:44 ` Andreas Herrmann
[not found] ` <1389876263-25759-1-git-send-email-andreas.herrmann-bsGFqQB8/DxBDgjK7y7TUQ@public.gmane.org>
2014-01-16 12:44 ` [PATCH 01/11] iommu/arm-smmu: Introduce driver option handling Andreas Herrmann
2014-01-16 12:44 ` Andreas Herrmann
[not found] ` <1389876263-25759-2-git-send-email-andreas.herrmann-bsGFqQB8/DxBDgjK7y7TUQ@public.gmane.org>
2014-01-22 11:51 ` Will Deacon
2014-01-22 11:51 ` Will Deacon
[not found] ` <20140122115143.GI1621-MRww78TxoiP5vMa5CHWGZ34zcgK1vI+I0E9HWUfgJXw@public.gmane.org>
2014-01-23 20:16 ` Andreas Herrmann
2014-01-23 20:16 ` Andreas Herrmann
2014-01-16 12:44 ` [PATCH 02/11] iommu/arm-smmu: Introduce bus notifier block Andreas Herrmann
2014-01-16 12:44 ` Andreas Herrmann
[not found] ` <1389876263-25759-3-git-send-email-andreas.herrmann-bsGFqQB8/DxBDgjK7y7TUQ@public.gmane.org>
2014-01-18 20:59 ` Varun Sethi
2014-01-18 20:59 ` Varun Sethi
[not found] ` <419c2609cab14842b5258f7048ce6d43-AZ66ij2kwaacCcN9WK45f+O6mTEJWrR4XA4E9RH9d+qIuWR1G4zioA@public.gmane.org>
2014-01-20 21:29 ` Andreas Herrmann
2014-01-20 21:29 ` Andreas Herrmann
2014-01-20 21:53 ` [PATCH v2 02/11] iommu/arm-smmu: Introduce iommu_group " Andreas Herrmann
2014-01-20 21:53 ` Andreas Herrmann
2014-01-20 21:56 ` Andreas Herrmann
2014-01-20 21:56 ` Andreas Herrmann
2014-01-20 22:28 ` [PATCH v3 " Andreas Herrmann
2014-01-20 22:28 ` Andreas Herrmann
2014-01-21 17:48 ` Varun Sethi
2014-01-21 17:48 ` Varun Sethi
[not found] ` <e92c5fd617fb4068b4ec5de696527ee3-AZ66ij2kwaacCcN9WK45f+O6mTEJWrR4XA4E9RH9d+qIuWR1G4zioA@public.gmane.org>
2014-01-22 12:25 ` Will Deacon
2014-01-22 12:25 ` Will Deacon
[not found] ` <20140122122550.GA14108-MRww78TxoiP5vMa5CHWGZ34zcgK1vI+I0E9HWUfgJXw@public.gmane.org>
2014-01-22 13:14 ` Varun Sethi
2014-01-22 13:14 ` Varun Sethi
2014-01-22 13:40 ` Will Deacon
2014-01-22 13:40 ` Will Deacon
[not found] ` <20140122134028.GB14108-MRww78TxoiP5vMa5CHWGZ34zcgK1vI+I0E9HWUfgJXw@public.gmane.org>
2014-01-22 13:54 ` Varun Sethi
2014-01-22 13:54 ` Varun Sethi
[not found] ` <aeebc7cf4084486790a5166cf83cb332-AZ66ij2kwaacCcN9WK45f+O6mTEJWrR4XA4E9RH9d+qIuWR1G4zioA@public.gmane.org>
2014-01-22 15:33 ` Will Deacon
2014-01-22 15:33 ` Will Deacon
[not found] ` <20140122153352.GE14108-MRww78TxoiP5vMa5CHWGZ34zcgK1vI+I0E9HWUfgJXw@public.gmane.org>
2014-01-22 19:07 ` Varun Sethi
2014-01-22 19:07 ` Varun Sethi
[not found] ` <3d0a888e122f490ba6bbc80b1aaa977c-AZ66ij2kwaacCcN9WK45f+O6mTEJWrR4XA4E9RH9d+qIuWR1G4zioA@public.gmane.org>
2014-01-23 19:57 ` Andreas Herrmann
2014-01-23 19:57 ` Andreas Herrmann
2014-01-28 11:00 ` Varun Sethi
2014-01-28 11:00 ` Varun Sethi
[not found] ` <991cc0024ea54cdb964f31de89c0b0ea-AZ66ij2kwaacCcN9WK45f+O6mTEJWrR4XA4E9RH9d+qIuWR1G4zioA@public.gmane.org>
2014-01-29 14:14 ` Andreas Herrmann
2014-01-29 14:14 ` Andreas Herrmann
2014-01-29 19:19 ` Varun Sethi
2014-01-29 19:19 ` Varun Sethi
2014-01-23 19:24 ` Andreas Herrmann
2014-01-23 19:24 ` Andreas Herrmann
2014-01-24 9:48 ` Andreas Herrmann
2014-01-24 9:48 ` Andreas Herrmann
2014-01-16 12:44 ` [PATCH 03/11] iommu/arm-smmu: Support buggy implementation where all config accesses are secure Andreas Herrmann
2014-01-16 12:44 ` Andreas Herrmann
2014-01-16 12:44 ` [PATCH 04/11] iommu/arm-smmu: Introduce automatic stream-id-masking Andreas Herrmann
2014-01-16 12:44 ` Andreas Herrmann
[not found] ` <1389876263-25759-5-git-send-email-andreas.herrmann-bsGFqQB8/DxBDgjK7y7TUQ@public.gmane.org>
2014-01-22 15:26 ` Will Deacon
2014-01-22 15:26 ` Will Deacon
[not found] ` <20140122152622.GD14108-MRww78TxoiP5vMa5CHWGZ34zcgK1vI+I0E9HWUfgJXw@public.gmane.org>
2014-01-22 20:15 ` Andreas Herrmann
2014-01-22 20:15 ` Andreas Herrmann
2014-01-16 12:44 ` [PATCH 05/11] iommu/arm-smmu: Check for duplicate stream IDs when registering master devices Andreas Herrmann
2014-01-16 12:44 ` Andreas Herrmann
[not found] ` <1389876263-25759-6-git-send-email-andreas.herrmann-bsGFqQB8/DxBDgjK7y7TUQ@public.gmane.org>
2014-01-22 15:53 ` Will Deacon
2014-01-22 15:53 ` Will Deacon
[not found] ` <20140122155302.GF14108-MRww78TxoiP5vMa5CHWGZ34zcgK1vI+I0E9HWUfgJXw@public.gmane.org>
2014-01-23 21:17 ` Andreas Herrmann
2014-01-23 21:17 ` Andreas Herrmann
2014-01-16 12:44 ` [PATCH 06/11] documentation/iommu: Update description of ARM System MMU binding Andreas Herrmann
2014-01-16 12:44 ` Andreas Herrmann
[not found] ` <1389876263-25759-7-git-send-email-andreas.herrmann-bsGFqQB8/DxBDgjK7y7TUQ@public.gmane.org>
2014-01-16 14:31 ` Rob Herring
2014-01-16 14:31 ` Rob Herring
2014-01-16 12:44 ` [PATCH 07/11] iommu/arm-smmu: Set MAX_MASTER_STREAMIDS to MAX_PHANDLE_ARGS Andreas Herrmann
2014-01-16 12:44 ` Andreas Herrmann
2014-01-16 12:44 ` [PATCH 08/11] of: Increase MAX_PHANDLE_ARGS Andreas Herrmann
2014-01-16 12:44 ` Andreas Herrmann
[not found] ` <1389876263-25759-9-git-send-email-andreas.herrmann-bsGFqQB8/DxBDgjK7y7TUQ@public.gmane.org>
2014-01-16 14:25 ` Rob Herring
2014-01-16 14:25 ` Rob Herring
[not found] ` <CAL_Jsq+fDUYne1OQAd4AeQw-JAoFBf0TCv4YVpy6Vt_UmdkA8A-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
2014-01-17 11:00 ` Andreas Herrmann
2014-01-17 11:00 ` Andreas Herrmann
2014-01-17 11:08 ` [PATCH v2 " Andreas Herrmann
2014-01-17 11:08 ` Andreas Herrmann
2014-01-29 16:11 ` Suravee Suthikulanit
2014-01-29 16:11 ` Suravee Suthikulanit
[not found] ` < CAL_JsqLhzp5jUJPA91rNkQ07kCDYCDZLxw8LxxFEVP9b12e1Jw@mail.gmail.com>
[not found] ` <52E92842.3000001-5C7GfCeVMHo@public.gmane.org>
2014-01-29 16:57 ` Rob Herring
2014-01-29 16:57 ` Rob Herring
[not found] ` <CAL_JsqLhzp5jUJPA91rNkQ07kCDYCDZLxw8LxxFEVP9b12e1Jw-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
2014-01-29 16:59 ` Suravee Suthikulanit
2014-01-29 16:59 ` Suravee Suthikulanit
[not found] ` <52E93360.1000904-5C7GfCeVMHo@public.gmane.org>
2014-01-29 17:16 ` Andreas Herrmann
2014-01-29 17:16 ` Andreas Herrmann
2014-01-29 17:26 ` Suravee Suthikulanit
2014-01-29 17:26 ` Suravee Suthikulanit
[not found] ` <52E939CB.1020705-5C7GfCeVMHo@public.gmane.org>
2014-01-29 17:29 ` Will Deacon
2014-01-29 17:29 ` Will Deacon
[not found] ` <20140129172932.GQ26622-MRww78TxoiP5vMa5CHWGZ34zcgK1vI+I0E9HWUfgJXw@public.gmane.org>
2014-01-29 17:57 ` Suravee Suthikulanit
2014-01-29 17:57 ` Suravee Suthikulanit
[not found] ` <52E940FC.9050602-5C7GfCeVMHo@public.gmane.org>
2014-01-29 18:03 ` Will Deacon
2014-01-29 18:03 ` Will Deacon
[not found] ` <20140129180350.GS26622-MRww78TxoiP5vMa5CHWGZ34zcgK1vI+I0E9HWUfgJXw@public.gmane.org>
2014-01-30 22:53 ` Suravee Suthikulanit
2014-01-30 22:53 ` Suravee Suthikulanit
[not found] ` <52EAD7EF.3040305-5C7GfCeVMHo@public.gmane.org>
2014-01-31 0:18 ` Will Deacon
2014-01-31 0:18 ` Will Deacon
2014-01-30 17:45 ` Andreas Herrmann
2014-01-30 17:45 ` Andreas Herrmann
2014-01-31 16:24 ` Rob Herring
2014-01-31 16:24 ` Rob Herring
[not found] ` <CAL_Jsq+=dm4kPk=e0h_up9=wvED4fd3MBtSNFxm2NEz_yag-uA-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
2014-02-03 16:44 ` Will Deacon
2014-02-03 16:44 ` Will Deacon
2014-02-04 17:33 ` Grant Likely
2014-02-04 17:33 ` Grant Likely
2014-02-04 17:36 ` Grant Likely
2014-02-04 17:36 ` Grant Likely
2014-01-16 12:44 ` [PATCH 09/11] ARM: dts: Add nodes for SMMUs on Calxeda ECX-2000 Andreas Herrmann
2014-01-16 12:44 ` Andreas Herrmann
[not found] ` <1389876263-25759-10-git-send-email-andreas.herrmann-bsGFqQB8/DxBDgjK7y7TUQ@public.gmane.org>
2014-01-16 14:30 ` Rob Herring
2014-01-16 14:30 ` Rob Herring
[not found] ` <CAL_JsqK2JUBEvCb-=eHFE_T=2AD0K_+V=NAeijzK2DrCwkaCOA-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
2014-01-17 11:01 ` Andreas Herrmann
2014-01-17 11:01 ` Andreas Herrmann
2014-01-17 11:16 ` [PATCH v2 " Andreas Herrmann
2014-01-17 11:16 ` Andreas Herrmann
2014-01-16 12:44 ` [PATCH 10/11] arm: dma-mapping: Add additional parameters to arm_iommu_create_mapping Andreas Herrmann
2014-01-16 12:44 ` Andreas Herrmann
[not found] ` <1389876263-25759-11-git-send-email-andreas.herrmann-bsGFqQB8/DxBDgjK7y7TUQ@public.gmane.org>
2014-01-22 16:01 ` Will Deacon
2014-01-22 16:01 ` Will Deacon
2014-01-16 12:44 ` [PATCH 11/11] arm: dma-mapping: Add support to extend DMA IOMMU mappings Andreas Herrmann
2014-01-16 12:44 ` Andreas Herrmann
[not found] ` <1389876263-25759-12-git-send-email-andreas.herrmann-bsGFqQB8/DxBDgjK7y7TUQ@public.gmane.org>
2014-01-22 16:10 ` Will Deacon
2014-01-22 16:10 ` Will Deacon
[not found] ` <20140122161010.GH14108-MRww78TxoiP5vMa5CHWGZ34zcgK1vI+I0E9HWUfgJXw@public.gmane.org>
2014-01-23 21:50 ` Andreas Herrmann [this message]
2014-01-23 21:50 ` Andreas Herrmann
2014-01-29 10:57 ` Marek Szyprowski
2014-01-29 10:57 ` Marek Szyprowski
[not found] ` <52E8DE7D.5020801-Sze3O3UU22JBDgjK7y7TUQ@public.gmane.org>
2014-01-29 11:05 ` Will Deacon
2014-01-29 11:05 ` Will Deacon
[not found] ` <20140129110537.GG26622-MRww78TxoiP5vMa5CHWGZ34zcgK1vI+I0E9HWUfgJXw@public.gmane.org>
2014-01-29 14:40 ` Andreas Herrmann
2014-01-29 14:40 ` Andreas Herrmann
2014-01-30 8:28 ` Marek Szyprowski
2014-01-30 8:28 ` Marek Szyprowski
[not found] ` <52EA0D43.1010802-Sze3O3UU22JBDgjK7y7TUQ@public.gmane.org>
2014-01-30 8:44 ` Andreas Herrmann
2014-01-30 8:44 ` Andreas Herrmann
2014-01-31 17:23 ` [PATCH] " Andreas Herrmann
2014-01-31 17:23 ` Andreas Herrmann
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=20140123215046.GF26399@alberich \
--to=herrmann.der.user-gm/ye1e23mwn+bqq9rbeug@public.gmane.org \
--cc=andreas.herrmann-bsGFqQB8/DxBDgjK7y7TUQ@public.gmane.org \
--cc=iommu-cunTk1MwBs9QetFLy7KEm3xJsTq8ys+cHZ5vskTnxNA@public.gmane.org \
--cc=linux-arm-kernel-IAPFreCvJWM7uuMidbF8XUB+6BGkLq7r@public.gmane.org \
--cc=linux-lFZ/pmaqli7XmaaqVzeoHQ@public.gmane.org \
--cc=nicolas.pitre-QSEj5FYQhm4dnm+yROfE0A@public.gmane.org \
--cc=will.deacon-5wv7dgnIgG8@public.gmane.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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.