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

Re: [PATCH v8 07/13] xen/arm: ffa: fix notification SRI across CPU hotplug/suspend


  • To: Mykola Kvach <xakep.amatop@xxxxxxxxx>
  • From: Bertrand Marquis <Bertrand.Marquis@xxxxxxx>
  • Date: Mon, 27 Apr 2026 08:20:53 +0000
  • Accept-language: en-GB, en-US
  • Arc-authentication-results: i=2; mx.microsoft.com 1; spf=pass (sender ip is 4.158.2.129) smtp.rcpttodomain=gmail.com smtp.mailfrom=arm.com; dmarc=pass (p=none sp=none pct=100) action=none header.from=arm.com; dkim=pass (signature was verified) header.d=arm.com; arc=pass (0 oda=1 ltdi=1 spf=[1,1,smtp.mailfrom=arm.com] dkim=[1,1,header.d=arm.com] dmarc=[1,1,header.from=arm.com])
  • 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=2; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector10001; 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=zCNkNqsMqJk6cgMVRtnwyoi0rKOTto9ucmjvwaDAVQM=; b=uUjiMiWHPwWMfu+PwntiHuibuPgkDixttQbXQIi45M4dWRxPMUJ27KS+5UjVGRodEWWkmxIkS0EoAXQKGuCd6YIr1grTW1KskqFx6g6qM/vEkGxYiArkSKhC+UHEY2yefIM6XbNnT0+Eh578rI2jlAnbI9JcdHtRakIugW6wCGj/+cVNy2jkqOTTBQfAcySeirmxpAh0Ul1UeNixljMBMoHo+VoAu9pJME8M2oi55LQOdfF5Syr9quz7BA4O9YuxaoatSLD91n6hxAVeMNQS44CEpBXBcb6s9f34aNcasvSdyWF21vWINdt7Afzc1PwWBtnKZLd+lirIbkyAxDIXoA==
  • Arc-message-signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector10001; 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=zCNkNqsMqJk6cgMVRtnwyoi0rKOTto9ucmjvwaDAVQM=; b=YFF23TnGr0GDPmivj0L6H4UXgZxAlTQXfpiLfAMEWeSG0V0e28hUauH5+zbYjJVG4pWw50jWWuB6nLQzuXYCwiudQDEvzdxubGtHcsLPc16Bl1A3wJfShn4elDrRA8YQH0lJPHXY43ROL4qtTkRufc27oTXqsre2WT9j1Tc6KHSvbgp3J8wWvej3054zgx5jRMyTGZTEQJqGx5xbCF4Yt/IWZSaJ89G6nByKHgCp6lFdXl05qy37/hNmlsYtm817zqiMfBC3aQoxBQo8H5y1mVAUPA9sujbg+5ZCbbyLjp/a0yPSgSgKLNkUxqmTHUY8407xmyoVam7vBlR6G7VCHw==
  • Arc-seal: i=2; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=pass; b=Ban5M/CvdRWQOfyYs0fgpBKYIt/UzoEyeMOkkiHmQ1HwAHj64uVP/ITLBehntABl8ZTmbY0LO3hQedTBhezkr28WvJBYTTLq8faFw4wlfAKR/5lbV/smX/heo/KV3L2ICdYQgOIpBT7pjo4/eShQJ51EHWwrFRyK2uHiVoNR9jzB5V6WTw6ZePeUYhBDUrbg3L+y7Uly5Qj4JhPhNDe424p/9Za4JpDbFYafqIQRnJneRBRSK/kQtP8UX0Xh4IRHpyqnqlpxUkzTxTueBW2I00rXIto1wKyKDjXFh1hDbLat0MAvLMu+bm9Jg64Xq04eFoSYyOyWSwV1OOJwsWuhYw==
  • Arc-seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=NPd8MvcSP5d4GJ+ViHL1hi9Xe9W9gkeYVaI91QabGECwIk+uD4p90R14aXE4TiVS27zoqPX57YQHsrBam1JbEObxArZCHa4bJJsiVdX6VMBhGvC4YTDB++hBMQ66rjiJ2F/RS3Xl5bqx+sJEmfrJPqFhYuZBdxOD8IQsIJcP8luf+CB24xChI8/3gjcmk3JRTQMzR1f2IO8bs9yyfU+fWw0/47a75g8baYOPDAxE3IXgAIVFCP9+oQF2gOubgLM5OHWRXSXqYiJfrrMaHrY+V/YE0jpKNyScL8adBGzEFpDM0TgwDWhXB1eRYg2dtHvPxSYNqTwppqTl0qkF5rD1xQ==
  • Authentication-results: eu.smtp.expurgate.cloud; dkim=pass header.s=selector1 header.d=arm.com header.i="@arm.com" header.h="From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck"; dkim=pass header.s=selector1 header.d=arm.com header.i="@arm.com" header.h="From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck"
  • Authentication-results-original: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=arm.com;
  • Cc: "xen-devel@xxxxxxxxxxxxxxxxxxxx" <xen-devel@xxxxxxxxxxxxxxxxxxxx>, Mykola Kvach <mykola_kvach@xxxxxxxx>, Volodymyr Babchuk <volodymyr_babchuk@xxxxxxxx>, Jens Wiklander <jens.wiklander@xxxxxxxxxx>, Stefano Stabellini <sstabellini@xxxxxxxxxx>, Julien Grall <julien@xxxxxxx>, Michal Orzel <michal.orzel@xxxxxxx>
  • Delivery-date: Mon, 27 Apr 2026 08:22:07 +0000
  • List-id: Xen developer discussion <xen-devel.lists.xenproject.org>
  • Nodisclaimer: true
  • Thread-index: AQHcwo4hEZKVR+1qn0ekNt1kpsRBuLXyuF0A
  • Thread-topic: [PATCH v8 07/13] xen/arm: ffa: fix notification SRI across CPU hotplug/suspend

Hi Mykola,

> On 2 Apr 2026, at 12:45, Mykola Kvach <xakep.amatop@xxxxxxxxx> wrote:
> 
> From: Mykola Kvach <mykola_kvach@xxxxxxxx>
> 
> The FF-A notification SRI interrupt handler was not correctly tied to
> CPU hotplug and suspend/resume. As a result, CPUs going offline and
> back online could end up with stale or missing handlers, breaking
> delivery of FF-A notifications.
> 
> Signed-off-by: Mykola Kvach <mykola_kvach@xxxxxxxx>

This will probably need a rebase if the harden notification and VM to VM 
notification
serie in FF-A is merged first.

Anyway, changes look good so:

Reviewed-by: Bertrand Marquis <bertrand.marquis@xxxxxxx>

Cheers
Bertrand

> ---
> xen/arch/arm/tee/ffa_notif.c | 63 ++++++++++++++++++++++++++++--------
> 1 file changed, 50 insertions(+), 13 deletions(-)
> 
> diff --git a/xen/arch/arm/tee/ffa_notif.c b/xen/arch/arm/tee/ffa_notif.c
> index 186e726412..513c399594 100644
> --- a/xen/arch/arm/tee/ffa_notif.c
> +++ b/xen/arch/arm/tee/ffa_notif.c
> @@ -360,10 +360,28 @@ static int32_t ffa_notification_bitmap_destroy(uint16_t 
> vm_id)
>     return ffa_simple_call(FFA_NOTIFICATION_BITMAP_DESTROY, vm_id, 0, 0, 0);
> }
> 
> -void ffa_notif_init_interrupt(void)
> +static DEFINE_PER_CPU_READ_MOSTLY(struct irqaction, sri_irq);
> +
> +static int request_sri_irq(void)
> {
>     int ret;
> +    struct irqaction *sri_action = &this_cpu(sri_irq);
> +
> +    sri_action->name = "FF-A notif";
> +    sri_action->handler = notif_irq_handler;
> +    sri_action->dev_id = NULL;
> +    sri_action->free_on_release = 0;
> +
> +    ret = setup_irq(notif_sri_irq, 0, sri_action);
> +    if ( ret )
> +        printk(XENLOG_ERR "ffa: setup_irq irq %u failed: error %d\n",
> +               notif_sri_irq, ret);
> 
> +    return ret;
> +}
> +
> +void ffa_notif_init_interrupt(void)
> +{
>     if ( fw_notif_enabled && notif_sri_irq < NR_GIC_SGI )
>     {
>         /*
> @@ -376,14 +394,36 @@ void ffa_notif_init_interrupt(void)
>          * pending, while the SPMC in the secure world will not notice that
>          * the interrupt was lost.
>          */
> -        ret = request_irq(notif_sri_irq, 0, notif_irq_handler, "FF-A notif",
> -                          NULL);
> -        if ( ret )
> -            printk(XENLOG_ERR "ffa: request_irq irq %u failed: error %d\n",
> -                   notif_sri_irq, ret);
> +        request_sri_irq();
>     }
> }
> 
> +static void deinit_ffa_notif_interrupt(void)
> +{
> +    if ( fw_notif_enabled && notif_sri_irq < NR_GIC_SGI )
> +        release_irq(notif_sri_irq, NULL);
> +}
> +
> +static int cpu_ffa_notif_callback(struct notifier_block *nfb,
> +                                  unsigned long action,
> +                                  void *hcpu)
> +{
> +    switch ( action )
> +    {
> +    case CPU_DYING:
> +        deinit_ffa_notif_interrupt();
> +        break;
> +    default:
> +        break;
> +    }
> +
> +    return NOTIFY_DONE;
> +}
> +
> +static struct notifier_block cpu_ffa_notif_nfb = {
> +    .notifier_call = cpu_ffa_notif_callback,
> +};
> +
> void ffa_notif_init(void)
> {
>     const struct arm_smccc_1_2_regs arg = {
> @@ -392,7 +432,6 @@ void ffa_notif_init(void)
>     };
>     struct arm_smccc_1_2_regs resp;
>     unsigned int irq;
> -    int ret;
> 
>     /* Only enable fw notification if all ABIs we need are supported */
>     if ( ffa_fw_supports_fid(FFA_NOTIFICATION_BITMAP_CREATE) &&
> @@ -408,13 +447,11 @@ void ffa_notif_init(void)
>         notif_sri_irq = irq;
>         if ( irq >= NR_GIC_SGI )
>             irq_set_type(irq, IRQ_TYPE_EDGE_RISING);
> -        ret = request_irq(irq, 0, notif_irq_handler, "FF-A notif", NULL);
> -        if ( ret )
> -        {
> -            printk(XENLOG_ERR "ffa: request_irq irq %u failed: error %d\n",
> -                   irq, ret);
> +
> +        if ( request_sri_irq() )
>             return;
> -        }
> +
> +        register_cpu_notifier(&cpu_ffa_notif_nfb);
>         fw_notif_enabled = true;
>     }
> }
> -- 
> 2.43.0
> 




 


Rackspace

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