|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] [V2 PATCH 7/9] x86/hvm: pkeys, add pkeys support for guest_walk_tables
>>> On 27.11.15 at 10:52, <huaitong.han@xxxxxxxxx> wrote:
> @@ -90,6 +92,53 @@ static uint32_t set_ad_bits(void *guest_p, void *walk_p,
> int set_dirty)
> return 0;
> }
>
> +#if GUEST_PAGING_LEVELS >= 4
> +uint32_t leaf_pte_pkeys_check(struct vcpu *vcpu, uint32_t pfec,
> + uint32_t pte_access, uint32_t pte_pkeys)
> +{
> + bool_t pkru_ad, pkru_wd;
> + bool_t ff, wf, uf, rsvdf, pkuf;
> + unsigned int pkru = 0;
Pointless initializer.
> + uf = pfec & PFEC_user_mode;
> + wf = pfec & PFEC_write_access;
> + rsvdf = pfec & PFEC_reserved_bit;
> + ff = pfec & PFEC_insn_fetch;
> + pkuf = pfec & PFEC_prot_key;
> +
> + if ( !cpu_has_xsave || !pkuf || is_pv_vcpu(vcpu) )
> + return 0;
> +
> + vcpu_save_fpu(vcpu);
> + pkru = *(unsigned int*)get_xsave_addr(vcpu->arch.xsave_area,
> XSTATE_PKRU);
I.e. you really want to _only_ save that one component.
> @@ -106,6 +155,7 @@ guest_walk_tables(struct vcpu *v, struct p2m_domain *p2m,
> #if GUEST_PAGING_LEVELS >= 4 /* 64-bit only... */
> guest_l3e_t *l3p = NULL;
> guest_l4e_t *l4p;
> + uint32_t pkeys;
No reason I can see to use a fixed width type here - unsigned int
ought to be fine.
> @@ -199,6 +250,9 @@ guest_walk_tables(struct vcpu *v, struct p2m_domain *p2m,
>
> pse1G = (gflags & _PAGE_PSE) && guest_supports_1G_superpages(v);
>
> + if (pse1G && leaf_pte_pkeys_check(v, pfec, gflags, pkeys))
Coding style (more further down).
Jan
_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxx
http://lists.xen.org/xen-devel
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |