|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] [PATCH v2 8/9] x86/pagewalk: Improve the logic behind setting access and dirty bits
>>> On 16.03.17 at 17:31, <andrew.cooper3@xxxxxxxxxx> wrote:
> @@ -413,24 +417,33 @@ guest_walk_tables(struct vcpu *v, struct p2m_domain
> *p2m,
> * success. Although the PRMs say higher-level _PAGE_ACCESSED bits
> * get set whenever a lower-level PT is used, at least some hardware
> * walkers behave this way. */
> -#if GUEST_PAGING_LEVELS == 4 /* 64-bit only... */
> - if ( set_ad_bits(l4p + guest_l4_table_offset(va), &gw->l4e, 0) )
> - paging_mark_dirty(d, gw->l4mfn);
> - if ( set_ad_bits(l3p + guest_l3_table_offset(va), &gw->l3e,
> - (pse1G && (walk & PFEC_write_access))) )
> - paging_mark_dirty(d, gw->l3mfn);
> -#endif
> - if ( !pse1G )
> + switch ( leaf_level )
> {
> + default:
> + ASSERT_UNREACHABLE();
> + break;
> +
> + case 1:
> + if ( set_ad_bits(l1p + guest_l1_table_offset(va), &gw->l1e,
> + (walk & PFEC_write_access) && leaf_level == 1) )
The comparison on leaf_level is pointless here (other than further
down).
> + paging_mark_dirty(d, gw->l1mfn);
> + /* Fallthrough */
> +
> + case 2:
> if ( set_ad_bits(l2p + guest_l2_table_offset(va), &gw->l2e,
> - (pse2M && (walk & PFEC_write_access))) )
> + (walk & PFEC_write_access) && leaf_level == 2) )
> paging_mark_dirty(d, gw->l2mfn);
> - if ( !pse2M )
> - {
> - if ( set_ad_bits(l1p + guest_l1_table_offset(va), &gw->l1e,
> - (walk & PFEC_write_access)) )
> - paging_mark_dirty(d, gw->l1mfn);
> - }
> + /* Fallthrough */
> +
> +#if GUEST_PAGING_LEVELS == 4 /* 64-bit only... */
> + case 3:
> + if ( set_ad_bits(l3p + guest_l3_table_offset(va), &gw->l3e,
> + (walk & PFEC_write_access) && leaf_level == 3) )
> + paging_mark_dirty(d, gw->l3mfn);
> +
> + if ( set_ad_bits(l4p + guest_l4_table_offset(va), &gw->l4e, 0) )
false
Other than that,
Reviewed-by: Jan Beulich <jbeulich@xxxxxxxx>
Personally I also think the fall through behavior would be more
immediately visible if you omitted the blank lines between the case
blocks.
Jan
_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxx
https://lists.xen.org/xen-devel
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |