Received: by 2002:a25:7ec1:0:0:0:0:0 with SMTP id z184csp5979262ybc; Wed, 27 Nov 2019 12:47:59 -0800 (PST) X-Google-Smtp-Source: APXvYqzjyBLu3EHCG7ehyp0F+eNQ5GwkN/DeNi9TWFKfeX+UyX8AosrRRn2u0l/FSaos3sBkLtxF X-Received: by 2002:a17:906:b343:: with SMTP id cd3mr25655254ejb.187.1574887679056; Wed, 27 Nov 2019 12:47:59 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1574887679; cv=none; d=google.com; s=arc-20160816; b=jwP/yRqJnMHNw0wVKbXr85xij2GwWFkRiCecwwVhKnF+7n0YNb4ngTkpXqO18DVoCc cELjWkgjClThPU0H3vDZ4s1uW/ALRBxkWu1ZrWd9jgzRvP5sGaOANTCWjSGHVxHMUoOL UQmNB9omET0ldPUpAwcBlAGvXu9HfCxZQH2AwuamKstWtyYhV46Hq79bVjUGy/Z2B/NT TlrMFzMTlPnZiMJi3rjyphBdGEDs1xoEkG0uzquimIxfRCUMXk52/UY37E3joWCaFilb nwaOP89XpvKUle5mDsgE/d83RL3fXicrIi+lfh/wJAauju7knzbS3SBRjAJxTAu1s2hQ 4yZg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:content-transfer-encoding:mime-version :user-agent:references:in-reply-to:message-id:date:subject:cc:to :from:dkim-signature; bh=YSyd8sEnQNM4cyY5VdUNiMAfXs1vUuU2JMgO0RE6LzE=; b=qNnYc/GfvEW1pISRsTNWHq5b0oMZPtna+vGCAMsfgPHDZzlSoFjW+DHHktRJ3Hhs/E XyfQUfYnDG1YiHZTudc3SI0GAJOGqEVjRqtKEBAfib6PCJIDjibXDc6YK2cCe4VeEejF 0wqXddwkLkzHrYYbWR+a/62Gnq/vecyi6SpLAi11eko54tvJV1jWWfxhQimKQ8P51Er0 H+2YR+aqg/PaNBU8MLBXhTxYQSqO+Y7KbLVQq9a85vnWVtVw9v3dkJqObWi3/1XPyHfS MXws7lNgCCSRY4v1Cg3T1I/503Srhi8B4p5bBXOM3BBgTYTggj+xocRnzVTsEAjfhbrC R7lw== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@kernel.org header.s=default header.b=pH8dzSAy; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id c16si10241598ejb.343.2019.11.27.12.47.35; Wed, 27 Nov 2019 12:47:59 -0800 (PST) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; dkim=pass header.i=@kernel.org header.s=default header.b=pH8dzSAy; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1728950AbfK0UpN (ORCPT + 99 others); Wed, 27 Nov 2019 15:45:13 -0500 Received: from mail.kernel.org ([198.145.29.99]:55566 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1729706AbfK0UpK (ORCPT ); Wed, 27 Nov 2019 15:45:10 -0500 Received: from localhost (83-86-89-107.cable.dynamic.v4.ziggo.nl [83.86.89.107]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPSA id 1718521780; Wed, 27 Nov 2019 20:45:08 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=default; t=1574887509; bh=YnZvOSCW0bD6fm1Fzv00QuMQnTGHaT7OrBMOg3XzLII=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=pH8dzSAyqegLgGlBsR7ZJ6nlvlzYhn1ssk4wRaut6xQGrHkpJkn8q7uJd/EHBBdga QWjJsQ+C+BOmVU/BYmV8xZxC264OcSC0mjHtaX9cSeGj5128joafnmQtA/a5g0Ch93 q3gKJh+sDrHAB0Q/Qo0cmZkQgskJAvH/mwVNWsI0= From: Greg Kroah-Hartman To: linux-kernel@vger.kernel.org Cc: Greg Kroah-Hartman , stable@vger.kernel.org, "Michael S. Tsirkin" , Sasha Levin Subject: [PATCH 4.9 138/151] virtio_console: move removal code Date: Wed, 27 Nov 2019 21:32:01 +0100 Message-Id: <20191127203046.926583668@linuxfoundation.org> X-Mailer: git-send-email 2.24.0 In-Reply-To: <20191127203000.773542911@linuxfoundation.org> References: <20191127203000.773542911@linuxfoundation.org> User-Agent: quilt/0.66 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org From: Michael S. Tsirkin [ Upstream commit aa44ec867030a72e8aa127977e37dec551d8df19 ] Will make it reusable for error handling. Cc: stable@vger.kernel.org Signed-off-by: Michael S. Tsirkin Signed-off-by: Sasha Levin --- drivers/char/virtio_console.c | 72 +++++++++++++++++------------------ 1 file changed, 36 insertions(+), 36 deletions(-) diff --git a/drivers/char/virtio_console.c b/drivers/char/virtio_console.c index 8975ea08d6c01..34548d3b4d13c 100644 --- a/drivers/char/virtio_console.c +++ b/drivers/char/virtio_console.c @@ -1993,6 +1993,42 @@ static void remove_vqs(struct ports_device *portdev) kfree(portdev->out_vqs); } +static void virtcons_remove(struct virtio_device *vdev) +{ + struct ports_device *portdev; + struct port *port, *port2; + + portdev = vdev->priv; + + spin_lock_irq(&pdrvdata_lock); + list_del(&portdev->list); + spin_unlock_irq(&pdrvdata_lock); + + /* Disable interrupts for vqs */ + vdev->config->reset(vdev); + /* Finish up work that's lined up */ + if (use_multiport(portdev)) + cancel_work_sync(&portdev->control_work); + else + cancel_work_sync(&portdev->config_work); + + list_for_each_entry_safe(port, port2, &portdev->ports, list) + unplug_port(port); + + unregister_chrdev(portdev->chr_major, "virtio-portsdev"); + + /* + * When yanking out a device, we immediately lose the + * (device-side) queues. So there's no point in keeping the + * guest side around till we drop our final reference. This + * also means that any ports which are in an open state will + * have to just stop using the port, as the vqs are going + * away. + */ + remove_vqs(portdev); + kfree(portdev); +} + /* * Once we're further in boot, we get probed like any other virtio * device. @@ -2121,42 +2157,6 @@ fail: return err; } -static void virtcons_remove(struct virtio_device *vdev) -{ - struct ports_device *portdev; - struct port *port, *port2; - - portdev = vdev->priv; - - spin_lock_irq(&pdrvdata_lock); - list_del(&portdev->list); - spin_unlock_irq(&pdrvdata_lock); - - /* Disable interrupts for vqs */ - vdev->config->reset(vdev); - /* Finish up work that's lined up */ - if (use_multiport(portdev)) - cancel_work_sync(&portdev->control_work); - else - cancel_work_sync(&portdev->config_work); - - list_for_each_entry_safe(port, port2, &portdev->ports, list) - unplug_port(port); - - unregister_chrdev(portdev->chr_major, "virtio-portsdev"); - - /* - * When yanking out a device, we immediately lose the - * (device-side) queues. So there's no point in keeping the - * guest side around till we drop our final reference. This - * also means that any ports which are in an open state will - * have to just stop using the port, as the vqs are going - * away. - */ - remove_vqs(portdev); - kfree(portdev); -} - static struct virtio_device_id id_table[] = { { VIRTIO_ID_CONSOLE, VIRTIO_DEV_ANY_ID }, { 0 }, -- 2.20.1