[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [PATCH] x86/flushtlb: remove flush_area check on system state


  • To: Roger Pau Monne <roger.pau@xxxxxxxxxx>
  • From: Jan Beulich <jbeulich@xxxxxxxx>
  • Date: Wed, 18 May 2022 10:49:22 +0200
  • Arc-authentication-results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=suse.com; dmarc=pass action=none header.from=suse.com; dkim=pass header.d=suse.com; arc=none
  • Arc-message-signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=oZuqxjQFW6dzwz5YDCHXMLasPk9MsOfkJ0ZHTIOeRjk=; b=Eqxta5624khUXXv+6Dass3sxlktLQAN7HSOlwhDNnWX8CP0BE+DrZgfsfxdZVOKXQf5bntUuCZsw9en9SDd10V1ubMo/LQMVmWntSif7mBfKB8ZZEOYYEbUjIEKb7N/CPrjpJqYDJ3VfhJ5p+AYdkzt4BFA2B0hzYmh1fwUmCb7JiUY9qrhLP0x9UaShoeZ0E35v+ZFBonqKTKmqTMGNPhG4TVatkiF2/MJCBlXORcRlWD3wRGEFYCrAgwYylNkRK1oWMiAXa31u8VH0YD2Tf/Oa807BUiuocz6ZCe49XZkkmsozf0le20D75IBIPYaNv8f9IoQ9noieFY0JFc9kAg==
  • Arc-seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=OTDZARfsCtNf/ZiuTNkw0I83VIFC8hi00Hx7t2qSURSYe/lJPykRIwKg5gqb7qdUCdLaHxo2rewLvYl4vuZX+RISPiGJhU7BS2NQ+trrw0bgAOIUq3wyK229M/GOZ/Mc//Rc1oZxBdVzJwSD9RpDB0yJdBl2KGj/KkdnJYivlK4W4CcZcRuhUVnTII+n+3fjjTkUPD6TKn/oYQzri5Pv9NFb8a5TSYoYMiDdDV0cgqXiKW8rxcRDPKIRpwOpEauORCnSmpcSFkcogiu8mEId69fWJ1VBLNOrzBad1r73uXxflg0Xl2Wj7S9M3TLnBN2W06Vv5xAnJJPBqMGXTclUXA==
  • Authentication-results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=suse.com;
  • Cc: Andrew Cooper <andrew.cooper3@xxxxxxxxxx>, Wei Liu <wl@xxxxxxx>, xen-devel@xxxxxxxxxxxxxxxxxxxx
  • Delivery-date: Wed, 18 May 2022 08:49:48 +0000
  • List-id: Xen developer discussion <xen-devel.lists.xenproject.org>

On 16.05.2022 16:31, Roger Pau Monne wrote:
> --- a/xen/arch/x86/include/asm/flushtlb.h
> +++ b/xen/arch/x86/include/asm/flushtlb.h
> @@ -146,7 +146,8 @@ void flush_area_mask(const cpumask_t *, const void *va, 
> unsigned int flags);
>  #define flush_mask(mask, flags) flush_area_mask(mask, NULL, flags)
>  
>  /* Flush all CPUs' TLBs/caches */
> -#define flush_area_all(va, flags) flush_area_mask(&cpu_online_map, va, flags)
> +#define flush_area(va, flags) \
> +    flush_area_mask(&cpu_online_map, (const void *)(va), flags)

I have to admit that I would prefer if we kept the "_all" name suffix,
to continue to clearly express the scope of the flush. I'm also not
really happy to see the cast being added globally now.

> --- a/xen/arch/x86/smp.c
> +++ b/xen/arch/x86/smp.c
> @@ -262,7 +262,8 @@ void flush_area_mask(const cpumask_t *mask, const void 
> *va, unsigned int flags)
>  {
>      unsigned int cpu = smp_processor_id();
>  
> -    ASSERT(local_irq_is_enabled());
> +    /* Local flushes can be performed with interrupts disabled. */
> +    ASSERT(local_irq_is_enabled() || cpumask_equal(mask, cpumask_of(cpu)));

Further down we use cpumask_subset(mask, cpumask_of(cpu)),
apparently to also cover the case where mask is empty. I think
you want to do so here as well.

>      if ( (flags & ~(FLUSH_VCPU_STATE | FLUSH_ORDER_MASK)) &&
>           cpumask_test_cpu(cpu, mask) )

I suppose we want a further precaution here: Despite the
!cpumask_subset(mask, cpumask_of(cpu)) below I think we want to
extend what c64bf2d2a625 ("x86: make CPU state flush requests
explicit") and later changes (isolating uses of FLUSH_VCPU_STATE
from other FLUSH_*) did and exclude the use of FLUSH_VCPU_STATE
for the local CPU altogether. That's because if such somehow made
it into the conditional below here, it would still involve an IPI.
E.g.

    ASSERT(local_irq_is_enabled() ||
           (cpumask_subset(mask, cpumask_of(cpu)) &&
            !(flags & FLUSH_VCPU_STATE)));

Jan




 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.