From: Jan Beulich Date: Mon, 12 Dec 2016 08:34:09 +0000 (+0100) Subject: make tlbflush_filter()'s first parameter a pointer X-Git-Tag: archive/raspbian/4.11.1-1+rpi1~1^2~66^2~3201 X-Git-Url: https://dgit.raspbian.org/?a=commitdiff_plain;h=e556d3a17aef3c2f7a52ebf93f5e7ddd8c05946c;p=xen.git make tlbflush_filter()'s first parameter a pointer This brings it in line with most other functions dealing with CPU masks. Convert both implementations to inline functions at once. Signed-off-by: Jan Beulich Reviewed-by: Andrew Cooper Reviewed-by: Wei Liu Acked-by: Julien Grall --- diff --git a/xen/arch/x86/mm.c b/xen/arch/x86/mm.c index 3ff0e9737d..c5dd6f22af 100644 --- a/xen/arch/x86/mm.c +++ b/xen/arch/x86/mm.c @@ -2514,7 +2514,7 @@ static int __get_page_type(struct page_info *page, unsigned long type, cpumask_copy(&mask, d->domain_dirty_cpumask); /* Don't flush if the timestamp is old enough */ - tlbflush_filter(mask, page->tlbflush_timestamp); + tlbflush_filter(&mask, page->tlbflush_timestamp); if ( unlikely(!cpumask_empty(&mask)) && /* Shadow mode: track only writable pages. */ diff --git a/xen/arch/x86/mm/shadow/common.c b/xen/arch/x86/mm/shadow/common.c index 39be564e5d..acb35c2eb8 100644 --- a/xen/arch/x86/mm/shadow/common.c +++ b/xen/arch/x86/mm/shadow/common.c @@ -1471,7 +1471,7 @@ mfn_t shadow_alloc(struct domain *d, /* Before we overwrite the old contents of this page, * we need to be sure that no TLB holds a pointer to it. */ cpumask_copy(&mask, d->domain_dirty_cpumask); - tlbflush_filter(mask, sp->tlbflush_timestamp); + tlbflush_filter(&mask, sp->tlbflush_timestamp); if ( unlikely(!cpumask_empty(&mask)) ) { perfc_incr(shadow_alloc_tlbflush); diff --git a/xen/include/asm-arm/flushtlb.h b/xen/include/asm-arm/flushtlb.h index 329fbb427e..a8e8a05363 100644 --- a/xen/include/asm-arm/flushtlb.h +++ b/xen/include/asm-arm/flushtlb.h @@ -8,9 +8,7 @@ * TLB since @page_timestamp. */ /* XXX lazy implementation just doesn't clear anything.... */ -#define tlbflush_filter(mask, page_timestamp) \ -do { \ -} while ( 0 ) +static inline void tlbflush_filter(cpumask_t *mask, uint32_t page_timestamp) {} #define tlbflush_current_time() (0) diff --git a/xen/include/asm-x86/flushtlb.h b/xen/include/asm-x86/flushtlb.h index 2e7ed6b562..4dc506a50a 100644 --- a/xen/include/asm-x86/flushtlb.h +++ b/xen/include/asm-x86/flushtlb.h @@ -50,13 +50,14 @@ static inline int NEED_FLUSH(u32 cpu_stamp, u32 lastuse_stamp) * Filter the given set of CPUs, removing those that definitely flushed their * TLB since @page_timestamp. */ -#define tlbflush_filter(mask, page_timestamp) \ -do { \ - unsigned int cpu; \ - for_each_cpu ( cpu, &(mask) ) \ - if ( !NEED_FLUSH(per_cpu(tlbflush_time, cpu), page_timestamp) ) \ - cpumask_clear_cpu(cpu, &(mask)); \ -} while ( 0 ) +static inline void tlbflush_filter(cpumask_t *mask, uint32_t page_timestamp) +{ + unsigned int cpu; + + for_each_cpu ( cpu, mask ) + if ( !NEED_FLUSH(per_cpu(tlbflush_time, cpu), page_timestamp) ) + cpumask_clear_cpu(cpu, mask); +} void new_tlbflush_clock_period(void); diff --git a/xen/include/xen/mm.h b/xen/include/xen/mm.h index 76fbb82333..88de3c1fa6 100644 --- a/xen/include/xen/mm.h +++ b/xen/include/xen/mm.h @@ -588,9 +588,10 @@ static inline void accumulate_tlbflush(bool *need_tlbflush, static inline void filtered_flush_tlb_mask(uint32_t tlbflush_timestamp) { - cpumask_t mask = cpu_online_map; + cpumask_t mask; - tlbflush_filter(mask, tlbflush_timestamp); + cpumask_copy(&mask, &cpu_online_map); + tlbflush_filter(&mask, tlbflush_timestamp); if ( !cpumask_empty(&mask) ) { perfc_incr(need_flush_tlb_flush);