[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [PATCH v10 6/7] vtd: use a bit field for context_entry
On 20.11.2020 14:24, Paul Durrant wrote: > @@ -121,21 +119,22 @@ static int context_set_domain_id(struct context_entry > *context, > } > > set_bit(i, iommu->domid_bitmap); > - context->hi |= (i & ((1 << DID_FIELD_WIDTH) - 1)) << DID_HIGH_OFFSET; > + context->did = i; > + > return 0; > } > > static int context_get_domain_id(struct context_entry *context, > struct vtd_iommu *iommu) > { > - unsigned long dom_index, nr_dom; > int domid = -1; > > if (iommu && context) > { > - nr_dom = cap_ndoms(iommu->cap); > + unsigned long dom_index, nr_dom; unsigned int will do here. > - dom_index = context_domain_id(*context); > + nr_dom = cap_ndoms(iommu->cap); > + dom_index = context->did; These could also become the initializers of the variables now. > --- a/xen/drivers/passthrough/vtd/iommu.h > +++ b/xen/drivers/passthrough/vtd/iommu.h > @@ -198,37 +198,34 @@ struct root_entry { > }; > }; > }; > +#define ROOT_ENTRY_NR (PAGE_SIZE_4K / sizeof(struct root_entry)) > > struct context_entry { > - u64 lo; > - u64 hi; > -}; > -#define ROOT_ENTRY_NR (PAGE_SIZE_4K/sizeof(struct root_entry)) > -#define context_present(c) ((c).lo & 1) > -#define context_fault_disable(c) (((c).lo >> 1) & 1) > -#define context_translation_type(c) (((c).lo >> 2) & 3) > -#define context_address_root(c) ((c).lo & PAGE_MASK_4K) > -#define context_address_width(c) ((c).hi & 7) > -#define context_domain_id(c) (((c).hi >> 8) & ((1 << 16) - 1)) > + union { > + __uint128_t val; > + struct { uint64_t lo, hi; }; > + struct { > + /* 0 - 63 */ > + bool p:1; > + bool fpd:1; > + uint64_t tt:2; unsigned int With these taken care of Reviewed-by: Jan Beulich <jbeulich@xxxxxxxx> Jan
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |