[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [PATCH] swiotlb-xen: provide the "max_mapping_size" method



On Mon, Nov 06, 2023 at 03:59:40PM +0100, Mikulas Patocka wrote:
> There's a bug that when using the XEN hypervisor with dm-crypt on NVMe, 
> the kernel deadlocks [1].
> 
> The deadlocks are caused by inability to map a large bio vector -
> dma_map_sgtable always returns an error, this gets propagated to the block
> layer as BLK_STS_RESOURCE and the block layer retries the request
> indefinitely.
> 
> XEN uses the swiotlb framework to map discontiguous pages into contiguous
> runs that are submitted to the PCIe device. The swiotlb framework has a
> limitation on the length of a mapping - this needs to be announced with
> the max_mapping_size method to make sure that the hardware drivers do not
> create larger mappings.
> 
> Without max_mapping_size, the NVMe block driver would create large
> mappings that overrun the maximum mapping size.
> 
> [1] https://lore.kernel.org/stable/ZTNH0qtmint%2FzLJZ@mail-itl/

This should be a "Link:" tag.

> Signed-off-by: Mikulas Patocka <mpatocka@xxxxxxxxxx>
> Reported-by: Marek Marczykowski-G'orecki <marmarek@xxxxxxxxxxxxxxxxxxxxxx>
> Tested-by: Marek Marczykowski-G'orecki <marmarek@xxxxxxxxxxxxxxxxxxxxxx>
> Suggested-by: Keith Busch <kbusch@xxxxxxxxxx>

I was about to send the same thing. I did a little more than suggest
this: it's is the very patch I wrote for testing, minus the redundant
nvme bits! But since you already have a commit message for it...

Acked-by: Keith Busch <kbusch@xxxxxxxxxx>

> Suggested-by: Christoph Hellwig <hch@xxxxxx>
> Cc: stable@xxxxxxxxxxxxxxx
> 
> ---
>  drivers/xen/swiotlb-xen.c |    1 +
>  1 file changed, 1 insertion(+)
> 
> Index: linux-stable/drivers/xen/swiotlb-xen.c
> ===================================================================
> --- linux-stable.orig/drivers/xen/swiotlb-xen.c       2023-11-03 
> 17:57:18.000000000 +0100
> +++ linux-stable/drivers/xen/swiotlb-xen.c    2023-11-06 15:30:59.000000000 
> +0100
> @@ -405,4 +405,5 @@ const struct dma_map_ops xen_swiotlb_dma
>       .get_sgtable = dma_common_get_sgtable,
>       .alloc_pages = dma_common_alloc_pages,
>       .free_pages = dma_common_free_pages,
> +     .max_mapping_size = swiotlb_max_mapping_size,
>  };




 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.