Re: [PATCH 0/2] Fix double allocation in swiotlb_alloc()

From: Petr Tesařík
Date: Fri Jan 26 2024 - 11:21:16 EST


Hi Will,

On Fri, 26 Jan 2024 15:19:54 +0000
Will Deacon <will@xxxxxxxxxx> wrote:

> Hi folks,
>
> These two patches fix a nasty double allocation problem in swiotlb_alloc()
> and add a diagnostic to help catch any similar issues in future. This was
> a royal pain to track down and I've had to make a bit of a leap at the
> correct alignment semantics (i.e. iotlb_align_mask vs alloc_align_mask).

Welcome to the club. I believe you had to re-discover what I described here:

https://lore.kernel.org/linux-iommu/20231108101347.77cab795@xxxxxxxxxxxxxxxxxxxx/

The relevant part would be this:

To sum it up, there are two types of alignment:

1. specified by a device's min_align_mask; this says how many low
bits of a buffer's physical address must be preserved,

2. specified by allocation size and/or the alignment parameter;
this says how many low bits in the first IO TLB slot's physical
address must be zero.

Fix for that has been sitting on my TODO list for too long. :-(

Petr T

> Without these changes, we've been observing random vsock hangs when
> communicating with virtual machines in Android.
>
> Please have a look!
>
> Cheers,
>
> Will
>
> Cc: iommu@xxxxxxxxxxxxxxx
> Cc: Christoph Hellwig <hch@xxxxxx>
> Cc: Marek Szyprowski <m.szyprowski@xxxxxxxxxxx>
> Cc: Robin Murphy <robin.murphy@xxxxxxx>
> Cc: Petr Tesarik <petr.tesarik1@xxxxxxxxxxxxxxxxxxx>
> Cc: Dexuan Cui <decui@xxxxxxxxxxxxx>
>
> --->8
>
> Will Deacon (2):
> swiotlb: Fix allocation alignment requirement when searching slots
> swiotlb: Enforce page alignment in swiotlb_alloc()
>
> kernel/dma/swiotlb.c | 32 ++++++++++++++++++++++----------
> 1 file changed, 22 insertions(+), 10 deletions(-)
>