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

RE: [PATCH] xen/smp: Support NULL IPI function pointers


  • To: Andrew Cooper <amc96@xxxxxxxx>, Jan Beulich <jbeulich@xxxxxxxx>, Andrew Cooper <andrew.cooper3@xxxxxxxxxx>
  • From: Wei Chen <Wei.Chen@xxxxxxx>
  • Date: Mon, 22 Nov 2021 06:17:39 +0000
  • Accept-language: en-US
  • Arc-authentication-results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=arm.com; dmarc=pass action=none header.from=arm.com; dkim=pass header.d=arm.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=RWtEHi1TYYJnQrO6Z9kmB231k4cmmji7H4nQiIQ07QA=; b=Sr8pv7vhTPafbMEuqGW2+9/a12IEi397zZvYU59kOsCak9mQSc+X6MNC1iM7mTJ+yfdJgoJqv0T5VGdE9lAF3FDdwzCejQPICdabJJ1b/gmup/81QxhLa4CyfSoir6HL+UZR3G/9lAIm8pD5T2syemv6xDDnIrAAEnGLIvRrEjKeAsA4K8JzF1VmrJWn4eUgqwy9Co51UEQmCTQjE1TCyI0XUaBZU/s4j/qGstW49+ZSSwz1lEjmrmNnq2ya3U1dOfvTfCri7oVU/oe5wLa/aGib/evLArah2PpM1obdx+PS/dBV9pWdGSJelAZb+i2n097gi/M6XjqIHyE+PyQM5g==
  • Arc-seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=RZ80Lqg9C4H6avbTOtSVKyLU/po3ANfAF/5iIPLHJt63nYXCr5zfXtbnn+bXbknGCyGXfhU7X6AhpTdXWbq56uI1fU/Uz8iH0v1zrzyFbSuwOBqcZIC4xZ3XGhsIdqcqzVkyMXOJKEr3+URXpMoK7Q17eVuX3wLB3Vstg2JA6uU9VgTun4+tLopGJq2533vx0LYC/ZeejWiq1Xmu5GYo3U4cToiGeycM1tCGkvl5l/Nw7n2Ba1FLrM4IGuJWDkepE7UF+vBUtpGddw05LlwyBCPSNpqwwuSCSMH6y8yglDr4CcoJjuIcSbWzZhZqx6D6K2LiU10BfqALIC/fBdtZlA==
  • Authentication-results-original: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=arm.com;
  • Cc: Roger Pau Monné <roger.pau@xxxxxxxxxx>, Wei Liu <wl@xxxxxxx>, Xen-devel <xen-devel@xxxxxxxxxxxxxxxxxxxx>
  • Delivery-date: Mon, 22 Nov 2021 06:18:40 +0000
  • List-id: Xen developer discussion <xen-devel.lists.xenproject.org>
  • Nodisclaimer: true
  • Original-authentication-results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=arm.com;
  • Thread-index: AQHX29MbtakJhW21+kadE2GfQer0SKwJDiCAgAAKIICABfsJwA==
  • Thread-topic: [PATCH] xen/smp: Support NULL IPI function pointers

Hi Andrew,

> -----Original Message-----
> From: Andrew Cooper <amc96@xxxxxxxx>
> Sent: 2021年11月18日 18:35
> To: Jan Beulich <jbeulich@xxxxxxxx>; Andrew Cooper
> <andrew.cooper3@xxxxxxxxxx>; Wei Chen <Wei.Chen@xxxxxxx>
> Cc: Roger Pau Monné <roger.pau@xxxxxxxxxx>; Wei Liu <wl@xxxxxxx>; Xen-
> devel <xen-devel@xxxxxxxxxxxxxxxxxxxx>
> Subject: Re: [PATCH] xen/smp: Support NULL IPI function pointers
> 
> On 18/11/2021 09:58, Jan Beulich wrote:
> > On 17.11.2021 17:48, Andrew Cooper wrote:
> >> There are several cases where the act of interrupting a remote
> processor has
> >> the required side effect.  Explicitly allow NULL function pointers so
> the
> >> calling code doesn't have to provide a stub implementation.
> >>
> >> Signed-off-by: Andrew Cooper <andrew.cooper3@xxxxxxxxxx>
> >> ---
> >> CC: Jan Beulich <JBeulich@xxxxxxxx>
> >> CC: Roger Pau Monné <roger.pau@xxxxxxxxxx>
> >> CC: Wei Liu <wl@xxxxxxx>
> >>
> >> The wait parameter is a little weird.  It serves double duty and will
> confirm
> >> that the IPI has been taken.  All it does is let you control whether
> you also
> >> wait for the handler to complete first.  As such, it is effectively
> useless
> >> with a stub function.
> >>
> >> I don't particularly like folding into the .wait() path like that, but
> I
> >> dislike it less than an if()/else if() and adding a 3rd
> cpumask_clear_cpu()
> >> into the confusion which is this logic.
> > I can accept this, albeit personally I would have preferred the extra
> if()
> > over the goto.
> 
> Just so it's been posted.  This is what the if/else looks like:
> 
> diff --git a/xen/common/smp.c b/xen/common/smp.c
> index 79f4ebd14502..ff569bbe9d53 100644
> --- a/xen/common/smp.c
> +++ b/xen/common/smp.c
> @@ -87,7 +87,11 @@ void smp_call_function_interrupt(void)
> 
>      irq_enter();
> 
> -    if ( call_data.wait )
> +    if ( unlikely(!func) )
> +    {
> +        cpumask_clear_cpu(cpu, &call_data.selected);
> +    }
> +    else if ( call_data.wait )
>      {
>          (*func)(info);
>          smp_mb();
> 
> 
> GCC does manage to fold this into the goto version presented originally.
> 
> If everyone else thinks this version is clearer to read then I'll go
> with it.

This version is much clearer to read. But if there will be some code
comments in goto version to make it easy to read. I am ok for either.

> 
> ~Andrew

 


Rackspace

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