ACK/Cmnt: [SRU][PATCH v4 0/13][f/gcp] Fix nvme errors w/ swiotlb in confidential VMs

Stefan Bader stefan.bader at canonical.com
Wed Oct 13 10:20:03 UTC 2021


On 13.10.21 08:49, Khalid Elmously wrote:
> BugLink: https://bugs.launchpad.net/bugs/1943902
> 
> 
> 
> [Impact]
> Using nvme with swiotlb in confidential VMs can encounter hardware read/write errors.
> 
> [Fix]
> The following upstream patches from v5.12 address this:
> 
> 3d2d861eb03e nvme-pci: set min_align_mask
> 1f221a0d0dbf swiotlb: respect min_align_mask
> 16fc3cef33a0 swiotlb: don't modify orig_addr in swiotlb_tbl_sync_single
> 26a7e094783d swiotlb: refactor swiotlb_tbl_map_single
> ca10d0f8e530 swiotlb: clean up swiotlb_tbl_unmap_single
> c32a77fd1878 swiotlb: factor out a nr_slots helper
> c7fbeca757fe swiotlb: factor out an io_tlb_offset helper
> b5d7ccb7aac3 swiotlb: add a IO_TLB_SIZE define
> 
> [Test]
> Using a confidential VM, with 'swiotlb=force' set on the kernel command line, and an additional nvme device attached:
> 
> $ sudo mkfs.xfs -f /dev/nvme2n1
> meta-data=/dev/nvme2n1 isize=512 agcount=4, agsize=131072 blks
>           = sectsz=512 attr=2, projid32bit=1
>           = crc=1 finobt=1, sparse=0, rmapbt=0, refl
> ink=0
> data = bsize=4096 blocks=524288, imaxpct=25
>           = sunit=0 swidth=0 blks
> naming =version 2 bsize=4096 ascii-ci=0 ftype=1
> log =internal log bsize=4096 blocks=2560, version=2
>           = sectsz=512 sunit=0 blks, lazy-count=1
> realtime =none extsz=4096 blocks=0, rtextents=0
> mkfs.xfs: pwrite failed: Input/output error
> 
> 
> Note the input/output error
> 
> The error no longer happens with the fixes applied.
> 
> [Regression Potential]
> Potential regression in swiotlb could cause hardware read/write errors
> 
> 
> 
> 
> 
> 
> 
> v2:
>    Merged the NVME_CTRL_PAGE_[SIZE|SHIFT] definitions into last patch
> 
> v3:
>    Included further follow-up fixes.
> 
> v4:
>    Re-ordered the commits - no code changes from v3
> 
> 
> Bumyong Lee (1):
>    swiotlb: manipulate orig_addr when tlb_addr has offset
> 
> Christoph Hellwig (9):
>    swiotlb: add a IO_TLB_SIZE define
>    swiotlb: factor out an io_tlb_offset helper
>    swiotlb: factor out a nr_slots helper
>    swiotlb: clean up swiotlb_tbl_unmap_single
>    swiotlb: refactor swiotlb_tbl_map_single
>    swiotlb: don't modify orig_addr in swiotlb_tbl_sync_single
>    swiotlb: respect min_align_mask
>    swiotlb: remove the tbl_dma_addr argument to swiotlb_tbl_map_single
>    swiotlb: move orig addr and size validation into swiotlb_bounce
> 
> Claire Chang (1):
>    swiotlb: Fix the type of index
> 
> Jianxiong Gao (2):
>    driver core: add a min_align_mask field to struct
>      device_dma_parameters
>    nvme-pci: set min_align_mask
> 
>   drivers/iommu/intel-iommu.c |   1 -
>   drivers/nvme/host/pci.c     |   9 ++
>   drivers/xen/swiotlb-xen.c   |   3 +-
>   include/linux/device.h      |   1 +
>   include/linux/dma-mapping.h |  16 ++
>   include/linux/swiotlb.h     |  11 +-
>   kernel/dma/swiotlb.c        | 306 ++++++++++++++++++++----------------
>   7 files changed, 199 insertions(+), 148 deletions(-)
> 
This looks better from what a review(er) can do. The previous version maybe was 
correct in the end but not sure it would have been bisectable. Also it is really 
hard to keep that much context in ones head.


Acked-by: Stefan Bader <stefan.bader at canonical.com>

-------------- next part --------------
A non-text attachment was scrubbed...
Name: OpenPGP_signature
Type: application/pgp-signature
Size: 833 bytes
Desc: OpenPGP digital signature
URL: <https://lists.ubuntu.com/archives/kernel-team/attachments/20211013/62029b68/attachment.sig>


More information about the kernel-team mailing list