|
[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 |