[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [xen master] x86/mm: re-arrange type check around _get_page_type()'s TLB flush
commit 8eb15275cd5d945acbc0f70a358255dea94117cf Author: Jan Beulich <jbeulich@xxxxxxxx> AuthorDate: Mon Aug 15 08:53:11 2022 +0200 Commit: Jan Beulich <jbeulich@xxxxxxxx> CommitDate: Mon Aug 15 08:53:11 2022 +0200 x86/mm: re-arrange type check around _get_page_type()'s TLB flush Checks dependent on only d and x can be pulled out, thus allowing to skip the flush mask calculation. (Also-)Suggested-by: Andrew Cooper <andrew.cooper3@xxxxxxxxxx> Signed-off-by: Jan Beulich <jbeulich@xxxxxxxx> Reviewed-by: Andrew Cooper <andrew.cooper3@xxxxxxxxxx> --- xen/arch/x86/mm.c | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/xen/arch/x86/mm.c b/xen/arch/x86/mm.c index 40e132b9ba..db1817b691 100644 --- a/xen/arch/x86/mm.c +++ b/xen/arch/x86/mm.c @@ -3020,7 +3020,10 @@ static int _get_page_type(struct page_info *page, unsigned long type, if ( d && shadow_mode_enabled(d) ) shadow_prepare_page_type_change(d, page); - if ( (x & PGT_type_mask) != type ) + if ( (x & PGT_type_mask) != type && + /* Shadow mode: track only writable pages. */ + (!shadow_mode_enabled(d) || + ((x & PGT_type_mask) == PGT_writable_page)) ) { /* * On type change we check to flush stale TLB entries. It is @@ -3035,10 +3038,7 @@ static int _get_page_type(struct page_info *page, unsigned long type, /* Don't flush if the timestamp is old enough */ tlbflush_filter(mask, page->tlbflush_timestamp); - if ( unlikely(!cpumask_empty(mask)) && - /* Shadow mode: track only writable pages. */ - (!shadow_mode_enabled(d) || - ((x & PGT_type_mask) == PGT_writable_page)) ) + if ( unlikely(!cpumask_empty(mask)) ) { perfc_incr(need_flush_tlb_flush); /* -- generated by git-patchbot for /home/xen/git/xen.git#master
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |