[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [PATCH v14 06/12] swiotlb: Use is_swiotlb_force_bounce for swiotlb data bouncing
- To: Will Deacon <will@xxxxxxxxxx>, Robin Murphy <robin.murphy@xxxxxxx>
- From: Qian Cai <quic_qiancai@xxxxxxxxxxx>
- Date: Thu, 24 Jun 2021 10:10:51 -0400
- Cc: Claire Chang <tientzu@xxxxxxxxxxxx>, Christoph Hellwig <hch@xxxxxx>, Rob Herring <robh+dt@xxxxxxxxxx>, <mpe@xxxxxxxxxxxxxx>, Joerg Roedel <joro@xxxxxxxxxx>, Frank Rowand <frowand.list@xxxxxxxxx>, Konrad Rzeszutek Wilk <konrad.wilk@xxxxxxxxxx>, <boris.ostrovsky@xxxxxxxxxx>, <jgross@xxxxxxxx>, Marek Szyprowski <m.szyprowski@xxxxxxxxxxx>, <heikki.krogerus@xxxxxxxxxxxxxxx>, <thomas.hellstrom@xxxxxxxxxxxxxxx>, <peterz@xxxxxxxxxxxxx>, <benh@xxxxxxxxxxxxxxxxxxx>, <joonas.lahtinen@xxxxxxxxxxxxxxx>, <dri-devel@xxxxxxxxxxxxxxxxxxxxx>, <chris@xxxxxxxxxxxxxxxxxx>, <grant.likely@xxxxxxx>, <paulus@xxxxxxxxx>, <mingo@xxxxxxxxxx>, Jianxiong Gao <jxgao@xxxxxxxxxx>, Stefano Stabellini <sstabellini@xxxxxxxxxx>, Saravana Kannan <saravanak@xxxxxxxxxx>, <xypron.glpk@xxxxxx>, "Rafael J . Wysocki" <rafael.j.wysocki@xxxxxxxxx>, Bartosz Golaszewski <bgolaszewski@xxxxxxxxxxxx>, <bskeggs@xxxxxxxxxx>, <linux-pci@xxxxxxxxxxxxxxx>, <xen-devel@xxxxxxxxxxxxxxxxxxxx>, Thierry Reding <treding@xxxxxxxxxx>, <intel-gfx@xxxxxxxxxxxxxxxxxxxxx>, <matthew.auld@xxxxxxxxx>, linux-devicetree <devicetree@xxxxxxxxxxxxxxx>, Daniel Vetter <daniel@xxxxxxxx>, <airlied@xxxxxxxx>, <maarten.lankhorst@xxxxxxxxxxxxxxx>, <linuxppc-dev@xxxxxxxxxxxxxxxx>, <jani.nikula@xxxxxxxxxxxxxxx>, Nicolas Boichat <drinkcat@xxxxxxxxxxxx>, <rodrigo.vivi@xxxxxxxxx>, Bjorn Helgaas <bhelgaas@xxxxxxxxxx>, Dan Williams <dan.j.williams@xxxxxxxxx>, Andy Shevchenko <andriy.shevchenko@xxxxxxxxxxxxxxx>, Greg KH <gregkh@xxxxxxxxxxxxxxxxxxx>, Randy Dunlap <rdunlap@xxxxxxxxxxxxx>, lkml <linux-kernel@xxxxxxxxxxxxxxx>, "list@xxxxxxx:IOMMU DRIVERS" <iommu@xxxxxxxxxxxxxxxxxxxxxxxxxx>, Jim Quinlan <james.quinlan@xxxxxxxxxxxx>, Tom Lendacky <thomas.lendacky@xxxxxxx>, <bauerman@xxxxxxxxxxxxx>
- Delivery-date: Thu, 24 Jun 2021 14:11:07 +0000
- List-id: Xen developer discussion <xen-devel.lists.xenproject.org>
On 6/24/2021 7:48 AM, Will Deacon wrote:
> Ok, diff below which attempts to tackle the offset issue I mentioned as
> well. Qian Cai -- please can you try with these changes?
This works fine.
>
> Will
>
> --->8
>
> diff --git a/include/linux/swiotlb.h b/include/linux/swiotlb.h
> index 175b6c113ed8..39284ff2a6cd 100644
> --- a/include/linux/swiotlb.h
> +++ b/include/linux/swiotlb.h
> @@ -116,7 +116,9 @@ static inline bool is_swiotlb_buffer(struct device *dev,
> phys_addr_t paddr)
>
> static inline bool is_swiotlb_force_bounce(struct device *dev)
> {
> - return dev->dma_io_tlb_mem->force_bounce;
> + struct io_tlb_mem *mem = dev->dma_io_tlb_mem;
> +
> + return mem && mem->force_bounce;
> }
>
> void __init swiotlb_exit(void);
> diff --git a/kernel/dma/swiotlb.c b/kernel/dma/swiotlb.c
> index 44be8258e27b..0ffbaae9fba2 100644
> --- a/kernel/dma/swiotlb.c
> +++ b/kernel/dma/swiotlb.c
> @@ -449,6 +449,7 @@ static int swiotlb_find_slots(struct device *dev,
> phys_addr_t orig_addr,
> dma_get_min_align_mask(dev) & ~(IO_TLB_SIZE - 1);
> unsigned int nslots = nr_slots(alloc_size), stride;
> unsigned int index, wrap, count = 0, i;
> + unsigned int offset = swiotlb_align_offset(dev, orig_addr);
> unsigned long flags;
>
> BUG_ON(!nslots);
> @@ -497,7 +498,7 @@ static int swiotlb_find_slots(struct device *dev,
> phys_addr_t orig_addr,
> for (i = index; i < index + nslots; i++) {
> mem->slots[i].list = 0;
> mem->slots[i].alloc_size =
> - alloc_size - ((i - index) << IO_TLB_SHIFT);
> + alloc_size - (offset + ((i - index) << IO_TLB_SHIFT));
> }
> for (i = index - 1;
> io_tlb_offset(i) != IO_TLB_SEGSIZE - 1 &&
>
|