From: Clément Mathieu--Drif <clement.mathieu--drif@eviden.com>
The 'level' field in vtd_iotlb_key is an unsigned integer.
We don't need to store level as an int in vtd_lookup_iotlb.
VTDIOTLBPageInvInfo.mask is used in binary operations with addresses.
Signed-off-by: Clément Mathieu--Drif <clement.mathieu--drif@eviden.com>
---
hw/i386/intel_iommu.c | 2 +-
hw/i386/intel_iommu_internal.h | 2 +-
2 files changed, 2 insertions(+), 2 deletions(-)
diff --git a/hw/i386/intel_iommu.c b/hw/i386/intel_iommu.c
index 37c21a0aec..be0cb39b5c 100644
--- a/hw/i386/intel_iommu.c
+++ b/hw/i386/intel_iommu.c
@@ -358,7 +358,7 @@ static VTDIOTLBEntry *vtd_lookup_iotlb(IntelIOMMUState *s, uint16_t source_id,
{
struct vtd_iotlb_key key;
VTDIOTLBEntry *entry;
- int level;
+ unsigned level;
for (level = VTD_SL_PT_LEVEL; level < VTD_SL_PML4_LEVEL; level++) {
key.gfn = vtd_get_iotlb_gfn(addr, level);
diff --git a/hw/i386/intel_iommu_internal.h b/hw/i386/intel_iommu_internal.h
index cbc4030031..5fcbe2744f 100644
--- a/hw/i386/intel_iommu_internal.h
+++ b/hw/i386/intel_iommu_internal.h
@@ -436,7 +436,7 @@ struct VTDIOTLBPageInvInfo {
uint16_t domain_id;
uint32_t pasid;
uint64_t addr;
- uint8_t mask;
+ uint64_t mask;
};
typedef struct VTDIOTLBPageInvInfo VTDIOTLBPageInvInfo;
--
2.45.2
On Thu, Jul 04, 2024 at 03:12:48PM +0000, CLEMENT MATHIEU--DRIF wrote: > From: Clément Mathieu--Drif <clement.mathieu--drif@eviden.com> > > The 'level' field in vtd_iotlb_key is an unsigned integer. > We don't need to store level as an int in vtd_lookup_iotlb. > > VTDIOTLBPageInvInfo.mask is used in binary operations with addresses. this last sentence is a bit opaque. is there a bug ? E.g. can mask ever get so big it does not fit in u8? > Signed-off-by: Clément Mathieu--Drif <clement.mathieu--drif@eviden.com> > --- > hw/i386/intel_iommu.c | 2 +- > hw/i386/intel_iommu_internal.h | 2 +- > 2 files changed, 2 insertions(+), 2 deletions(-) > > diff --git a/hw/i386/intel_iommu.c b/hw/i386/intel_iommu.c > index 37c21a0aec..be0cb39b5c 100644 > --- a/hw/i386/intel_iommu.c > +++ b/hw/i386/intel_iommu.c > @@ -358,7 +358,7 @@ static VTDIOTLBEntry *vtd_lookup_iotlb(IntelIOMMUState *s, uint16_t source_id, > { > struct vtd_iotlb_key key; > VTDIOTLBEntry *entry; > - int level; > + unsigned level; > > for (level = VTD_SL_PT_LEVEL; level < VTD_SL_PML4_LEVEL; level++) { > key.gfn = vtd_get_iotlb_gfn(addr, level); > diff --git a/hw/i386/intel_iommu_internal.h b/hw/i386/intel_iommu_internal.h > index cbc4030031..5fcbe2744f 100644 > --- a/hw/i386/intel_iommu_internal.h > +++ b/hw/i386/intel_iommu_internal.h > @@ -436,7 +436,7 @@ struct VTDIOTLBPageInvInfo { > uint16_t domain_id; > uint32_t pasid; > uint64_t addr; > - uint8_t mask; > + uint64_t mask; > }; > typedef struct VTDIOTLBPageInvInfo VTDIOTLBPageInvInfo; > > -- > 2.45.2
On 2024/7/5 06:13, Michael S. Tsirkin wrote: > On Thu, Jul 04, 2024 at 03:12:48PM +0000, CLEMENT MATHIEU--DRIF wrote: >> From: Clément Mathieu--Drif <clement.mathieu--drif@eviden.com> >> >> The 'level' field in vtd_iotlb_key is an unsigned integer. >> We don't need to store level as an int in vtd_lookup_iotlb. >> >> VTDIOTLBPageInvInfo.mask is used in binary operations with addresses. > > this last sentence is a bit opaque. is there a bug ? E.g. > can mask ever get so big it does not fit in u8? yes, this looks to be a bug. It's initialized and used by below code. The am is a u8. So it may make more sense to split this patch. One is to make type match, another is to fix a bug. info.mask = ~((1 << am) - 1); uint64_t gfn = (info->addr >> VTD_PAGE_SHIFT_4K) & info->mask; >> Signed-off-by: Clément Mathieu--Drif <clement.mathieu--drif@eviden.com> >> --- >> hw/i386/intel_iommu.c | 2 +- >> hw/i386/intel_iommu_internal.h | 2 +- >> 2 files changed, 2 insertions(+), 2 deletions(-) >> >> diff --git a/hw/i386/intel_iommu.c b/hw/i386/intel_iommu.c >> index 37c21a0aec..be0cb39b5c 100644 >> --- a/hw/i386/intel_iommu.c >> +++ b/hw/i386/intel_iommu.c >> @@ -358,7 +358,7 @@ static VTDIOTLBEntry *vtd_lookup_iotlb(IntelIOMMUState *s, uint16_t source_id, >> { >> struct vtd_iotlb_key key; >> VTDIOTLBEntry *entry; >> - int level; >> + unsigned level; >> >> for (level = VTD_SL_PT_LEVEL; level < VTD_SL_PML4_LEVEL; level++) { >> key.gfn = vtd_get_iotlb_gfn(addr, level); >> diff --git a/hw/i386/intel_iommu_internal.h b/hw/i386/intel_iommu_internal.h >> index cbc4030031..5fcbe2744f 100644 >> --- a/hw/i386/intel_iommu_internal.h >> +++ b/hw/i386/intel_iommu_internal.h >> @@ -436,7 +436,7 @@ struct VTDIOTLBPageInvInfo { >> uint16_t domain_id; >> uint32_t pasid; >> uint64_t addr; >> - uint8_t mask; >> + uint64_t mask; >> }; >> typedef struct VTDIOTLBPageInvInfo VTDIOTLBPageInvInfo; >> >> -- >> 2.45.2 > -- Regards, Yi Liu
© 2016 - 2024 Red Hat, Inc.