Received: by 2002:a05:6a10:1d13:0:0:0:0 with SMTP id pp19csp1003943pxb; Wed, 1 Sep 2021 15:03:23 -0700 (PDT) X-Google-Smtp-Source: ABdhPJy1CWY83zS+fmuR+gOUE985zhGpTXQGzdSKiEln6cw6CoBdxOvR/qsGI53/xD65dLqmdIFg X-Received: by 2002:a5d:9ada:: with SMTP id x26mr35039ion.50.1630533803822; Wed, 01 Sep 2021 15:03:23 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1630533803; cv=none; d=google.com; s=arc-20160816; b=zCUTOxDxOLnwD/B+SYCEokgATxMx3gEg57odn0j8y3SksVrfp6qsdts8BpIG1FU/SD fnEjjGfcUNRR2dvDdQuAs4yRWy4WOAISzxKJzx9WeARZxSJaPzUrzqCtOhpAFduFMQN7 2oSJH5nHMVK9jx+7z/e2fhUB84G6+BBUD1UlFEFoaJmXF/8VxVn6AUMLcUtp23q+5BW1 jDGh4zs6n9G4512IpwKIRJY1KCDVY6twWYucbDLzVd57FbATXv95oyoJ/09Ib4i04gKm 9ycXZXdw9zYCIrw1AiTRZEzsia8csSxDJMYxxs3/p7d0yZksxsw8kkLOzXrX8ZebJNZ6 zN2w== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:mime-version :user-agent:references:in-reply-to:message-id:date:subject:cc:to :from:dkim-signature; bh=TS5XQIwnFfZwjk1VrNqW3c8thOLM1nXFRmEd/2Pv9rU=; b=YyVo7fMUFf+6Yx4zO2zypcAkG2ZdypLDhX0BgIlAs6ZmfdTF6q+TghbwsasG7TBenU rti4Mmf8ZMgmP6NpoSnG2OYtzOS+voPu0m5nG1J7c3RqDCKgK+4m+QMTFfybXtjBxtvx 1DCMamORJ/Dlq6UepPvHkuwtJH6yYrZS0XLfltAY+W1Vk84qJ643FTYwJg42a37PpsB3 XjKo5O2r6K0RroOrzsm80yRY+zw6QdoaT8t9WFR/di+Oym4UmBjefaXuNS1mOlxbJvG3 iKvEeRLwYkwqk5QxxuPjLsr3lijqpqQtgg0dbOhfyafcapN4Csywy+XmoABrvLWi9HaI 1CfQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@linuxfoundation.org header.s=korg header.b="yqe5i/v6"; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linuxfoundation.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id t7si633143jac.1.2021.09.01.15.03.12; Wed, 01 Sep 2021 15:03:23 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) client-ip=23.128.96.18; Authentication-Results: mx.google.com; dkim=pass header.i=@linuxfoundation.org header.s=korg header.b="yqe5i/v6"; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linuxfoundation.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1344668AbhIAMmk (ORCPT + 99 others); Wed, 1 Sep 2021 08:42:40 -0400 Received: from mail.kernel.org ([198.145.29.99]:42974 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1344548AbhIAMji (ORCPT ); Wed, 1 Sep 2021 08:39:38 -0400 Received: by mail.kernel.org (Postfix) with ESMTPSA id C37C26115B; Wed, 1 Sep 2021 12:35:19 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=linuxfoundation.org; s=korg; t=1630499720; bh=3RyVr52Scbm+6zErqN/+kNzLJPXHXbPHyDQWw6xT7wc=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=yqe5i/v6TOxJzqyKYl/M5TKpax5K/K1fnKPqSeHZqj/FS3SGR1fGzQKwMNQ29iuKI Jpm2KCcowcC40Jt8zkjX6xuJMPTKnYmb2JHriyRnuuMLzuyp81F/xDYWhsQUVnyu1K zaJHraEXUyF+pd3s/WpSEtUbEe7aB+TE0RN0wGHY= From: Greg Kroah-Hartman To: linux-kernel@vger.kernel.org Cc: Greg Kroah-Hartman , stable@vger.kernel.org, Parav Pandit , "Michael S. Tsirkin" , Sasha Levin Subject: [PATCH 5.10 058/103] virtio_pci: Support surprise removal of virtio pci device Date: Wed, 1 Sep 2021 14:28:08 +0200 Message-Id: <20210901122302.520588260@linuxfoundation.org> X-Mailer: git-send-email 2.33.0 In-Reply-To: <20210901122300.503008474@linuxfoundation.org> References: <20210901122300.503008474@linuxfoundation.org> User-Agent: quilt/0.66 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org From: Parav Pandit [ Upstream commit 43bb40c5b92659966bdf4bfe584fde0a3575a049 ] When a virtio pci device undergo surprise removal (aka async removal in PCIe spec), mark the device as broken so that any upper layer drivers can abort any outstanding operation. When a virtio net pci device undergo surprise removal which is used by a NetworkManager, a below call trace was observed. kernel:watchdog: BUG: soft lockup - CPU#1 stuck for 26s! [kworker/1:1:27059] watchdog: BUG: soft lockup - CPU#1 stuck for 52s! [kworker/1:1:27059] CPU: 1 PID: 27059 Comm: kworker/1:1 Tainted: G S W I L 5.13.0-hotplug+ #8 Hardware name: Dell Inc. PowerEdge R640/0H28RR, BIOS 2.9.4 11/06/2020 Workqueue: events linkwatch_event RIP: 0010:virtnet_send_command+0xfc/0x150 [virtio_net] Call Trace: virtnet_set_rx_mode+0xcf/0x2a7 [virtio_net] ? __hw_addr_create_ex+0x85/0xc0 __dev_mc_add+0x72/0x80 igmp6_group_added+0xa7/0xd0 ipv6_mc_up+0x3c/0x60 ipv6_find_idev+0x36/0x80 addrconf_add_dev+0x1e/0xa0 addrconf_dev_config+0x71/0x130 addrconf_notify+0x1f5/0xb40 ? rtnl_is_locked+0x11/0x20 ? __switch_to_asm+0x42/0x70 ? finish_task_switch+0xaf/0x2c0 ? raw_notifier_call_chain+0x3e/0x50 raw_notifier_call_chain+0x3e/0x50 netdev_state_change+0x67/0x90 linkwatch_do_dev+0x3c/0x50 __linkwatch_run_queue+0xd2/0x220 linkwatch_event+0x21/0x30 process_one_work+0x1c8/0x370 worker_thread+0x30/0x380 ? process_one_work+0x370/0x370 kthread+0x118/0x140 ? set_kthread_struct+0x40/0x40 ret_from_fork+0x1f/0x30 Hence, add the ability to abort the command on surprise removal which prevents infinite loop and system lockup. Signed-off-by: Parav Pandit Link: https://lore.kernel.org/r/20210721142648.1525924-5-parav@nvidia.com Signed-off-by: Michael S. Tsirkin Signed-off-by: Sasha Levin --- drivers/virtio/virtio_pci_common.c | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/drivers/virtio/virtio_pci_common.c b/drivers/virtio/virtio_pci_common.c index 222d630c41fc..b35bb2d57f62 100644 --- a/drivers/virtio/virtio_pci_common.c +++ b/drivers/virtio/virtio_pci_common.c @@ -576,6 +576,13 @@ static void virtio_pci_remove(struct pci_dev *pci_dev) struct virtio_pci_device *vp_dev = pci_get_drvdata(pci_dev); struct device *dev = get_device(&vp_dev->vdev.dev); + /* + * Device is marked broken on surprise removal so that virtio upper + * layers can abort any ongoing operation. + */ + if (!pci_device_is_present(pci_dev)) + virtio_break_device(&vp_dev->vdev); + pci_disable_sriov(pci_dev); unregister_virtio_device(&vp_dev->vdev); -- 2.30.2