From: Robin Murphy <robin.murphy@arm.com>
To: Srinath Mannam <srinath.mannam@broadcom.com>,
Joerg Roedel <joro@8bytes.org>,
Lorenzo Pieralisi <lorenzo.pieralisi@arm.com>,
Bjorn Helgaas <bhelgaas@google.com>,
poza@codeaurora.org
Cc: iommu@lists.linux-foundation.org,
bcm-kernel-feedback-list@broadcom.com,
linux-kernel@vger.kernel.org
Subject: Re: [PATCH] iommu/dma: Fix IOVA reserve dma ranges
Date: Wed, 9 Sep 2020 13:05:49 +0100 [thread overview]
Message-ID: <1996b772-774c-3475-05cc-77ae87176c3f@arm.com> (raw)
In-Reply-To: <20200909053234.17027-1-srinath.mannam@broadcom.com>
On 2020-09-09 06:32, Srinath Mannam wrote:
> Fix IOVA reserve failure for memory regions listed in dma-ranges in the
> following cases.
>
> - start address of memory region is 0x0.
That's fair enough, and in fact generalises to the case of zero-sized
gaps between regions, which is indeed an oversight.
> - end address of a memory region is equal to start address of next memory
> region.
This part doesn't make much sense, however - if the regions described in
bridge->dma_ranges overlap, that's a bug in whoever created a malformed
list to begin with. Possibly it's just poor wording, and you're using
"memory regions" to refer to any or all of the dma_ranges, the reserved
IOVA ranges, and what "start" and "end" in this function represent which
isn't quite either of those.
> Fixes: aadad097cd46f ("iommu/dma: Reserve IOVA for PCIe inaccessible DMA address")
> Signed-off-by: Srinath Mannam <srinath.mannam@broadcom.com>
> ---
> drivers/iommu/dma-iommu.c | 15 +++++++++++----
> 1 file changed, 11 insertions(+), 4 deletions(-)
>
> diff --git a/drivers/iommu/dma-iommu.c b/drivers/iommu/dma-iommu.c
> index 5141d49a046b..0a3f67a4f9ae 100644
> --- a/drivers/iommu/dma-iommu.c
> +++ b/drivers/iommu/dma-iommu.c
> @@ -213,14 +213,21 @@ static int iova_reserve_pci_windows(struct pci_dev *dev,
> resource_list_for_each_entry(window, &bridge->dma_ranges) {
> end = window->res->start - window->offset;
> resv_iova:
> + if (end < start) {
> + /* dma_ranges list should be sorted */
> + dev_err(&dev->dev, "Failed to reserve IOVA\n");
> + return -EINVAL;
> + }
> + /*
> + * Skip the cases when start address of first memory region is
> + * 0x0 and end address of one memory region and start address
> + * of next memory region are equal. Reserve IOVA for rest of
> + * addresses fall in between given memory ranges.
> + */
> if (end > start) {
> lo = iova_pfn(iovad, start);
> hi = iova_pfn(iovad, end);
> reserve_iova(iovad, lo, hi);
> - } else {
Surely this only needs to be a one-liner?
- } else {
+ } else if (end < start) {
(or possibly "end != start"; I can't quite decide which expresses the
semantic intent better)
The rest just looks like unnecessary churn - I don't think it needs
commenting that a sorted list may simply not have gaps between entries,
and as above I think the wording of that comment is actively misleading.
Robin.
> - /* dma_ranges list should be sorted */
> - dev_err(&dev->dev, "Failed to reserve IOVA\n");
> - return -EINVAL;
> }
>
> start = window->res->end - window->offset + 1;
>
_______________________________________________
iommu mailing list
iommu@lists.linux-foundation.org
https://lists.linuxfoundation.org/mailman/listinfo/iommu
next prev parent reply other threads:[~2020-09-09 12:06 UTC|newest]
Thread overview: 3+ messages / expand[flat|nested] mbox.gz Atom feed top
2020-09-09 5:32 [PATCH] iommu/dma: Fix IOVA reserve dma ranges Srinath Mannam via iommu
2020-09-09 12:05 ` Robin Murphy [this message]
2020-09-10 8:26 ` Srinath Mannam via iommu
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=1996b772-774c-3475-05cc-77ae87176c3f@arm.com \
--to=robin.murphy@arm.com \
--cc=bcm-kernel-feedback-list@broadcom.com \
--cc=bhelgaas@google.com \
--cc=iommu@lists.linux-foundation.org \
--cc=joro@8bytes.org \
--cc=linux-kernel@vger.kernel.org \
--cc=lorenzo.pieralisi@arm.com \
--cc=poza@codeaurora.org \
--cc=srinath.mannam@broadcom.com \
/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;
as well as URLs for NNTP newsgroup(s).