From nobody Tue Feb 10 03:39:45 2026 Delivered-To: importer@patchew.org Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Authentication-Results: mx.zohomail.com; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org ARC-Seal: i=1; a=rsa-sha256; t=1575857039; cv=none; d=zohomail.com; s=zohoarc; b=kH+rWgEcpDtss84YodpbXUqsLkQTi2YMlCnQkFnbf9LJitn/KQxWWkT/Owz6uya5VI+3yEp/7tuKMmWWLMQBv+Yn4hnKBN3G8ICyin4dovjiosdQfOZougC9T2IZOY+nUB4dRu9qiXNEFyuX+/kc0IByAK9jzDvpVw41XAFd1bs= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1575857039; h=Content-Type:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=0vxuPFWytMIW8mYjQljpJyE2qu0FMaJpXzhcZnMs/qw=; b=YxXwJwlIJUxYAnyJULhiUbLl2HxUX+6Lk0AOcvDuWAqu3qoGde+AB87FnLr8wdOfTf9q5Uu9WX0yl/CTP1uLla1fKXIvz1mwSaxhVmi1tMfI/zysrNbVCdsQDGzllRv+9dIddd38yBogm2nRVhJ2TWh9PDl7TEDRnok5eiDdqYM= ARC-Authentication-Results: i=1; mx.zohomail.com; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1575857039314161.39472639239887; Sun, 8 Dec 2019 18:03:59 -0800 (PST) Received: from localhost ([::1]:35080 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1ie8Oz-0005fp-Mi for importer@patchew.org; Sun, 08 Dec 2019 21:03:57 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]:53204) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1ie8MH-0004IO-TH for qemu-devel@nongnu.org; Sun, 08 Dec 2019 21:01:11 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1ie8Ly-00085N-Cw for qemu-devel@nongnu.org; Sun, 08 Dec 2019 21:01:01 -0500 Received: from szxga04-in.huawei.com ([45.249.212.190]:2216 helo=huawei.com) by eggs.gnu.org with esmtps (TLS1.0:DHE_RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1ie8Lw-0007zd-7t for qemu-devel@nongnu.org; Sun, 08 Dec 2019 21:00:50 -0500 Received: from DGGEMS404-HUB.china.huawei.com (unknown [172.30.72.59]) by Forcepoint Email with ESMTP id 8C14555946C97999D62A; Mon, 9 Dec 2019 10:00:41 +0800 (CST) Received: from HGHY2P002143101.china.huawei.com (10.184.39.213) by DGGEMS404-HUB.china.huawei.com (10.3.19.204) with Microsoft SMTP Server id 14.3.439.0; Mon, 9 Dec 2019 10:00:31 +0800 From: To: Subject: [PATCH v3 1/3] virtio: add ability to delete vq through a pointer Date: Mon, 9 Dec 2019 10:00:08 +0800 Message-ID: <1575856810-9388-2-git-send-email-pannengyuan@huawei.com> X-Mailer: git-send-email 2.7.2.windows.1 In-Reply-To: <1575856810-9388-1-git-send-email-pannengyuan@huawei.com> References: <1575856810-9388-1-git-send-email-pannengyuan@huawei.com> MIME-Version: 1.0 X-Originating-IP: [10.184.39.213] X-CFilter-Loop: Reflected X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.2.x-3.x [generic] [fuzzy] X-Received-From: 45.249.212.190 X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: liyiting@huawei.com, zhang.zhanghailiang@huawei.com, Amit Shah , Pan Nengyuan , qemu-devel@nongnu.org, kuhn.chenqun@huawei.com Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" From: Michael S. Tsirkin =20 Devices tend to maintain vq pointers, allow deleting them through a vq pointer. Signed-off-by: Michael S. Tsirkin Signed-off-by: Pan Nengyuan [PMM: change function name to virtio_queue_cleanup; set used_elems to NULL = after free] Cc: Amit Shah Reviewed-by: Pankaj Gupta Reviewed-by: Laurent Vivier Reviewed-by: David Hildenbrand --- Changes v2 to v1: - use virtio_delete_queue to cleanup vq through a vq pointer --- Changes v3 to v2: - change function name from virtio_delete_queue to virtio_queue_cleanup --- hw/virtio/virtio.c | 16 +++++++++++----- include/hw/virtio/virtio.h | 2 ++ 2 files changed, 13 insertions(+), 5 deletions(-) diff --git a/hw/virtio/virtio.c b/hw/virtio/virtio.c index 04716b5..2743258 100644 --- a/hw/virtio/virtio.c +++ b/hw/virtio/virtio.c @@ -2330,17 +2330,23 @@ VirtQueue *virtio_add_queue(VirtIODevice *vdev, int= queue_size, return &vdev->vq[i]; } =20 +void virtio_queue_cleanup(VirtQueue *vq) +{ + vq->vring.num =3D 0; + vq->vring.num_default =3D 0; + vq->handle_output =3D NULL; + vq->handle_aio_output =3D NULL; + g_free(vq->used_elems); + vq->used_elems =3D NULL; +} + void virtio_del_queue(VirtIODevice *vdev, int n) { if (n < 0 || n >=3D VIRTIO_QUEUE_MAX) { abort(); } =20 - vdev->vq[n].vring.num =3D 0; - vdev->vq[n].vring.num_default =3D 0; - vdev->vq[n].handle_output =3D NULL; - vdev->vq[n].handle_aio_output =3D NULL; - g_free(vdev->vq[n].used_elems); + virtio_queue_cleanup(&vdev->vq[n]); } =20 static void virtio_set_isr(VirtIODevice *vdev, int value) diff --git a/include/hw/virtio/virtio.h b/include/hw/virtio/virtio.h index c32a815..cc0b3f0 100644 --- a/include/hw/virtio/virtio.h +++ b/include/hw/virtio/virtio.h @@ -183,6 +183,8 @@ VirtQueue *virtio_add_queue(VirtIODevice *vdev, int que= ue_size, =20 void virtio_del_queue(VirtIODevice *vdev, int n); =20 +void virtio_queue_cleanup(VirtQueue *vq); + void virtqueue_push(VirtQueue *vq, const VirtQueueElement *elem, unsigned int len); void virtqueue_flush(VirtQueue *vq, unsigned int count); --=20 2.7.2.windows.1