Loading
iommupt: Fix the end_index calculation in __map_range_leaf()
Sashiko noticed a mismatch of units in this math: num_leaves is actually the number of leaf *entries* (so a 16-item contiguous leaf is one num_leaves), while index is in items. The mismatch in maths causes __map_range_leaf() to exit early instead of efficiently filling a larger range of contiguous PTEs. The early exit is caught by the functions above and then __map_range_leaf() is re-invoked, so there is no functional issue. Correct the misuse of units by adjusting num_leaves with the leaf size and avoid the performance cost of looping externally. There are also some mismatched types for num_leaves; simplify things to remove the duplicated calculations. Fixes: d6c65b0f ("iommupt: Avoid rewalking during map") Signed-off-by:Jason Gunthorpe <jgg@nvidia.com> Reviewed-by:
Samiullah Khawaja <skhawaja@google.com> Reviewd-by:
Pranjal Shrivastava <praan@google.com> Tested-by:
Josua Mayer <josua@solid-run.com> Signed-off-by:
Joerg Roedel <joerg.roedel@amd.com>