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

Re: [PATCH 1/2] xen/evtchn: avoid WARN() when unbinding an event channel


  • To: Juergen Gross <jgross@xxxxxxxx>, "linux-kernel@xxxxxxxxxxxxxxx" <linux-kernel@xxxxxxxxxxxxxxx>
  • From: Oleksandr Tyshchenko <Oleksandr_Tyshchenko@xxxxxxxx>
  • Date: Sun, 17 Mar 2024 15:45:07 +0000
  • Accept-language: en-US, ru-RU
  • Arc-authentication-results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=epam.com; dmarc=pass action=none header.from=epam.com; dkim=pass header.d=epam.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=6SLbOqfradRDs2Wlbhbhjele5KQOavepKjZl/yDqo40=; b=l+2Hk2eqQwxGmMeCXZN/sjSbsKT5vjdKBoycD4MH0C11WuOqOWZbCKBK/iQkfx1fuktA+HmRAJIeJ0Wfggy8aP95SHUxRmK8g3eA2Usk8hiTSadxihD58XEffVJal2QY+fYjYFKaq/iFzkGyCo3E1PyeSMlKcuhsh6Z0CdQ0Kr4StFPKhsstYg/lzlWViy664aEgQMFZRngRL9Vblkxt6MqNHX17TnuH4TV7MgrcMh1JK3ScfyrqwZwlIIGlOY48ErkqyFKYP4JuAXfvNb7vg0JxG50VTkbs5j+iiHg3/uzDKn33LB9BR8O9P9PhpRW/TTNi5IeS+zvqkP6YhMdwFw==
  • Arc-seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=eTxXyClXLhL8BrH4P3Oom+POK4GHGUMRGPRJgau915EZLu63K62Om6LB5mMNR/wQT+ZYL5L24AFO26LHjY70sxLawArdPblIPfNQm7ARIKsZZnaYKIH8UuTAw4mUkYZ85Bc6BtWie1WZCzh0VBjKzWcsdGYqncWQ3Gq9ENBL0q6Q+xPIu3hELcEQqGUa5HFB2feRn7wHeO9OtL7JOgUE+V8Xt4tEtY6CNS9603OLZJ8iwfcA0SeV7MUi0nOL3AryrAcXHAto9CeFoLPvApH2ldQeGhHR0wjYPq/kcyju+/eXNiAOSc1nn400qISWIE0NCdkRC6lez74TnUg0Zi4uIg==
  • Cc: Stefano Stabellini <sstabellini@xxxxxxxxxx>, "xen-devel@xxxxxxxxxxxxxxxxxxxx" <xen-devel@xxxxxxxxxxxxxxxxxxxx>, Demi Marie Obenour <demi@xxxxxxxxxxxxxxxxxxxxxx>
  • Delivery-date: Sun, 17 Mar 2024 15:45:30 +0000
  • List-id: Xen developer discussion <xen-devel.lists.xenproject.org>
  • Thread-index: AQHadRYXv0kOlvmk5E2hHL7QAKtBUrE8GfkA
  • Thread-topic: [PATCH 1/2] xen/evtchn: avoid WARN() when unbinding an event channel


On 13.03.24 09:14, Juergen Gross wrote:

Hello Juergen


> When unbinding a user event channel, the related handler might be
> called a last time in case the kernel was built with
> CONFIG_DEBUG_SHIRQ. This might cause a WARN() in the handler.
> 
> Avoid that by adding an "unbinding" flag to struct user_event which
> will short circuit the handler.
> 
> Fixes: 9e90e58c11b7 ("xen: evtchn: Allow shared registration of IRQ handers")
> Reported-by: Demi Marie Obenour <demi@xxxxxxxxxxxxxxxxxxxxxx>
> Tested-by: Demi Marie Obenour <demi@xxxxxxxxxxxxxxxxxxxxxx>
> Signed-off-by: Juergen Gross <jgross@xxxxxxxx>


Reviewed-by: Oleksandr Tyshchenko <oleksandr_tyshchenko@xxxxxxxx>


> ---
>   drivers/xen/evtchn.c | 6 ++++++
>   1 file changed, 6 insertions(+)
> 
> diff --git a/drivers/xen/evtchn.c b/drivers/xen/evtchn.c
> index 59717628ca42..f6a2216c2c87 100644
> --- a/drivers/xen/evtchn.c
> +++ b/drivers/xen/evtchn.c
> @@ -85,6 +85,7 @@ struct user_evtchn {
>       struct per_user_data *user;
>       evtchn_port_t port;
>       bool enabled;
> +     bool unbinding;
>   };
>   
>   static void evtchn_free_ring(evtchn_port_t *ring)
> @@ -164,6 +165,10 @@ static irqreturn_t evtchn_interrupt(int irq, void *data)
>       struct per_user_data *u = evtchn->user;
>       unsigned int prod, cons;
>   
> +     /* Handler might be called when tearing down the IRQ. */
> +     if (evtchn->unbinding)
> +             return IRQ_HANDLED;
> +
>       WARN(!evtchn->enabled,
>            "Interrupt for port %u, but apparently not enabled; per-user %p\n",
>            evtchn->port, u);
> @@ -421,6 +426,7 @@ static void evtchn_unbind_from_user(struct per_user_data 
> *u,
>   
>       BUG_ON(irq < 0);
>   
> +     evtchn->unbinding = true;
>       unbind_from_irqhandler(irq, evtchn);
>   
>       del_evtchn(u, evtchn);

 


Rackspace

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