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