qemu-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Qemu-devel] [PATCH] intel_iommu: fix and simplify size calculation


From: Paolo Bonzini
Subject: Re: [Qemu-devel] [PATCH] intel_iommu: fix and simplify size calculation in process_device_iotlb_desc()
Date: Fri, 20 Jan 2017 14:38:52 +0100
User-agent: Mozilla/5.0 (X11; Linux x86_64; rv:45.0) Gecko/20100101 Thunderbird/45.5.1


On 20/01/2017 07:35, Jason Wang wrote:
> We don't use 1ULL which is wrong during size calculation. Fix it, and
> while at it, switch to use cto64() and adds a comments to make it
> simpler and easier to be understood.
> 
> Reported-by: Paolo Bonzini <address@hidden>
> Cc: Paolo Bonzini <address@hidden>
> Signed-off-by: Jason Wang <address@hidden>
> ---
>  hw/i386/intel_iommu.c | 10 +++++++++-
>  1 file changed, 9 insertions(+), 1 deletion(-)
> 
> diff --git a/hw/i386/intel_iommu.c b/hw/i386/intel_iommu.c
> index ec62239..3270fb9 100644
> --- a/hw/i386/intel_iommu.c
> +++ b/hw/i386/intel_iommu.c
> @@ -1485,8 +1485,16 @@ static bool 
> vtd_process_device_iotlb_desc(IntelIOMMUState *s,
>          goto done;
>      }
>  
> +    /* According to ATS spec table 2.4:
> +     * S = 0, bits 15:12 = xxxx     range size: 4K
> +     * S = 1, bits 15:12 = xxx0     range size: 8K
> +     * S = 1, bits 15:12 = xx01     range size: 16K
> +     * S = 1, bits 15:12 = x011     range size: 32K
> +     * S = 1, bits 15:12 = 0111     range size: 64K
> +     * ...
> +     */
>      if (size) {
> -        sz = 1 << (ctz64(~(addr | (VTD_PAGE_MASK_4K - 1))) + 1);
> +        sz = (VTD_PAGE_SIZE * 2) << cto64(addr >> VTD_PAGE_SHIFT);
>          addr &= ~(sz - 1);
>      } else {
>          sz = VTD_PAGE_SIZE;
> 


Reviewed-by: Paolo Bonzini <address@hidden>



reply via email to

[Prev in Thread] Current Thread [Next in Thread]