[PATCH 16/19] iommu/amd: Use roundup_pow_two() instead of get_order()
Robin Murphy
robin.murphy at arm.com
Wed Feb 5 08:11:00 PST 2025
On 2025-02-04 6:34 pm, Jason Gunthorpe wrote:
> 1 << (get_order(x) + PAGE_SHIFT) == roundup_pow_two()
...unless x < 2048, which does seem possible here if last_bdf is
sufficiently small. Not too significant in the cases where the result is
only rounded back up again for an allocation or remap anyway, but I do
wonder about the use of dev_table_size in iommu_set_device_table(), and
whether this change might break it, or whether it's already wrong for
that case and this might actually fix it...
Thanks,
Robin.
> Use the shorter version.
>
> Signed-off-by: Jason Gunthorpe <jgg at nvidia.com>
> ---
> drivers/iommu/amd/init.c | 5 +----
> 1 file changed, 1 insertion(+), 4 deletions(-)
>
> diff --git a/drivers/iommu/amd/init.c b/drivers/iommu/amd/init.c
> index f1c5041647173c..7d77929bc63af3 100644
> --- a/drivers/iommu/amd/init.c
> +++ b/drivers/iommu/amd/init.c
> @@ -247,10 +247,7 @@ static void init_translation_status(struct amd_iommu *iommu)
>
> static inline unsigned long tbl_size(int entry_size, int last_bdf)
> {
> - unsigned shift = PAGE_SHIFT +
> - get_order((last_bdf + 1) * entry_size);
> -
> - return 1UL << shift;
> + return roundup_pow_of_two((last_bdf + 1) * entry_size);
> }
>
> int amd_iommu_get_num_iommus(void)
More information about the linux-riscv
mailing list