|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] [PATCH 2/2] x86/shadow: Move shadow pagetable fields into struct shadow_vcpu
>>> On 30.01.17 at 18:26, <andrew.cooper3@xxxxxxxxxx> wrote:
> @@ -1680,7 +1688,7 @@ static mfn_t emulate_gva_to_mfn(struct vcpu *v,
> unsigned long vaddr,
> mfn = page_to_mfn(page);
> ASSERT(mfn_valid(mfn));
>
> - v->arch.paging.last_write_was_pt = !!sh_mfn_is_a_page_table(mfn);
> + v->arch.paging.shadow.last_write_was_pt = !!sh_mfn_is_a_page_table(mfn);
Please drop the now unnecessary !! (and use true/false instead of
1/0 in other places).
> @@ -797,15 +797,15 @@ static inline unsigned long vtlb_lookup(struct vcpu *v,
> unsigned long frame_number = gfn_x(INVALID_GFN);
> int i = vtlb_hash(page_number);
>
> - spin_lock(&v->arch.paging.vtlb_lock);
> - if ( v->arch.paging.vtlb[i].pfec != 0
> - && v->arch.paging.vtlb[i].page_number == page_number
> + spin_lock(&v->arch.paging.shadow.vtlb_lock);
> + if ( v->arch.paging.shadow.vtlb[i].pfec != 0
> + && v->arch.paging.shadow.vtlb[i].page_number == page_number
> /* Any successful walk that had at least these pfec bits is OK */
> - && (v->arch.paging.vtlb[i].pfec & pfec) == pfec )
> + && (v->arch.paging.shadow.vtlb[i].pfec & pfec) == pfec )
> {
> - frame_number = v->arch.paging.vtlb[i].frame_number;
> + frame_number = v->arch.paging.shadow.vtlb[i].frame_number;
> }
> - spin_unlock(&v->arch.paging.vtlb_lock);
> + spin_unlock(&v->arch.paging.shadow.vtlb_lock);
> return frame_number;
> }
Since you need to touch all these vtlb_lock accessing lines anyway,
would it perhaps make sense to switch to an r/w lock at once?
> --- a/xen/include/asm-x86/domain.h
> +++ b/xen/include/asm-x86/domain.h
> @@ -147,7 +147,16 @@ struct shadow_vcpu {
> unsigned long off[SHADOW_OOS_FIXUPS];
> } oos_fixup[SHADOW_OOS_PAGES];
>
> - bool_t pagetable_dying;
> + /* Translated guest: virtual TLB */
> + struct shadow_vtlb *vtlb;
> + spinlock_t vtlb_lock;
> +
> + /* HVM guest: last emulate was to a pagetable */
> + bool last_write_was_pt;
> + /* HVM guest: last write emulation succeeds */
> + bool last_write_emul_ok;
> +
> + bool pagetable_dying;
Perhaps make all of these bools bit fields?
Jan
_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxx
https://lists.xen.org/xen-devel
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |