Skip to content

Commit 9a536d5

Browse files
nikita-youshgregkh
authored andcommitted
swiotlb: ensure that page-sized mappings are page-aligned
[ Upstream commit 602d9858f07c72eab64f5f00e2fae55f9902cfbe ] Some drivers do depend on page mappings to be page aligned. Swiotlb already enforces such alignment for mappings greater than page, extend that to page-sized mappings as well. Without this fix, nvme hits BUG() in nvme_setup_prps(), because that routine assumes page-aligned mappings. Signed-off-by: Nikita Yushchenko <nikita.yoush@cogentembedded.com> Reviewed-by: Christoph Hellwig <hch@lst.de> Reviewed-by: Sagi Grimberg <sagi@grimberg.me> Signed-off-by: Konrad Rzeszutek Wilk <konrad@kernel.org> Signed-off-by: Sasha Levin <alexander.levin@verizon.com> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
1 parent 878f37e commit 9a536d5

1 file changed

Lines changed: 3 additions & 3 deletions

File tree

lib/swiotlb.c

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -452,11 +452,11 @@ phys_addr_t swiotlb_tbl_map_single(struct device *hwdev,
452452
: 1UL << (BITS_PER_LONG - IO_TLB_SHIFT);
453453

454454
/*
455-
* For mappings greater than a page, we limit the stride (and
456-
* hence alignment) to a page size.
455+
* For mappings greater than or equal to a page, we limit the stride
456+
* (and hence alignment) to a page size.
457457
*/
458458
nslots = ALIGN(size, 1 << IO_TLB_SHIFT) >> IO_TLB_SHIFT;
459-
if (size > PAGE_SIZE)
459+
if (size >= PAGE_SIZE)
460460
stride = (1 << (PAGE_SHIFT - IO_TLB_SHIFT));
461461
else
462462
stride = 1;

0 commit comments

Comments
 (0)