On Tue, 29 Nov 2022 13:12:35 +0000 Joao Martins <joao.m.martins@xxxxxxxxxx> wrote: > Commit f38044e5ef58 ("vfio/iova_bitmap: Fix PAGE_SIZE unaligned bitmaps") > had fixed the unaligned bitmaps by capping the remaining iterable set at > the start of the bitmap. Although, that mistakenly worked around > iova_bitmap_set() incorrectly setting bits across page boundary. > > Fix this by reworking the loop inside iova_bitmap_set() to iterate over a > range of bits to set (cur_bit .. last_bit) which may span different pinned > pages, thus updating @page_idx and @offset as it sets the bits. The > previous cap to the first page is now adjusted to be always accounted > rather than when there's only a non-zero pgoff. > > While at it, make @page_idx , @offset and @nbits to be unsigned int given > that it won't be more than 512 and 4096 respectively (even a bigger > PAGE_SIZE or a smaller struct page size won't make this bigger than the > above 32-bit max). Also, delete the stale kdoc on Return type. > > Cc: Avihai Horon <avihaih@xxxxxxxxxx> > Fixes: f38044e5ef58 ("vfio/iova_bitmap: Fix PAGE_SIZE unaligned bitmaps") > Co-developed-by: Jason Gunthorpe <jgg@xxxxxxxxxx> > Signed-off-by: Jason Gunthorpe <jgg@xxxxxxxxxx> > Signed-off-by: Joao Martins <joao.m.martins@xxxxxxxxxx> > Reviewed-by: Jason Gunthorpe <jgg@xxxxxxxxxx> > --- > Changes since v1: > * Add Reviewed-by by Jason Gunthorpe > * Add Fixes tag (Alex Williamson) > > It passes my tests but to be extra sure: Avihai could you take this > patch a spin in your rig/tests as well? Thanks! > --- > drivers/vfio/iova_bitmap.c | 30 +++++++++++++----------------- > 1 file changed, 13 insertions(+), 17 deletions(-) Applied to vfio next branch for v6.2 with Avihai's tested-by. Thanks, Alex