From nobody Sat May 18 12:12:21 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; 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; dmarc=pass(p=none dis=none) header.from=redhat.com ARC-Seal: i=1; a=rsa-sha256; t=1686668884; cv=none; d=zohomail.com; s=zohoarc; b=GL32ACpaG+lDAjsfoMsuJPflPjZxDX7GVTiVUozGHRZA3JvQ8LZSi0T9xPrOfwyY3e7SAtbhFWVc+K3ICNazj/naqhiuOl5uqbK96WxLgnF8EfvmxL0KsZ8Hjl2kZmehf65IE7okzFhCH/Mcpj7++1jzz1RiaaYvwOxhzw6CYkc= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1686668884; h=Content-Transfer-Encoding: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=C3q1VOCi3VSeulPig7kmaGVgtQD3yY/HQD0PCA5v3u8=; b=f+rmzWACv/uQhSCcdP8d9m+9sVi6bfH4y3a5zfVKiYyb87B/71YMQ5Zc1waqmy3oWy5K0hsm27eMXyvpxNDE28zKWICdbujFdBDZTbk+X72dHVKwiJlhS4xt6zWX/31sAUoxnuu12YB9mT2JgsT5RQoh3mL0kGiXNpFTSll33PQ= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; 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; dmarc=pass header.from= (p=none dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1686668884136735.9367159778913; Tue, 13 Jun 2023 08:08:04 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1q95Yu-0004sV-Ge; Tue, 13 Jun 2023 11:04:00 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1q95Y5-0003xE-86 for qemu-devel@nongnu.org; Tue, 13 Jun 2023 11:03:11 -0400 Received: from us-smtp-delivery-124.mimecast.com ([170.10.129.124]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1q95Xd-0008U6-Is for qemu-devel@nongnu.org; Tue, 13 Jun 2023 11:02:42 -0400 Received: from mimecast-mx02.redhat.com (mimecast-mx02.redhat.com [66.187.233.88]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id us-mta-623-DNgGdphGP1WvPmgYP5F72w-1; Tue, 13 Jun 2023 11:02:15 -0400 Received: from smtp.corp.redhat.com (int-mx01.intmail.prod.int.rdu2.redhat.com [10.11.54.1]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mimecast-mx02.redhat.com (Postfix) with ESMTPS id 8F85080349B; Tue, 13 Jun 2023 15:02:14 +0000 (UTC) Received: from t480s.fritz.box (unknown [10.39.192.249]) by smtp.corp.redhat.com (Postfix) with ESMTP id E66A140B4CD6; Tue, 13 Jun 2023 15:02:12 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1686668551; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=C3q1VOCi3VSeulPig7kmaGVgtQD3yY/HQD0PCA5v3u8=; b=MYRauKCNx8v4RbRA7p2Zyj61lBIHWKy+RuGd4EhoSRt5evc/xAVBQ5DMThDJEF7O3wbkui nvJW3yE5I4MfGpFQa2c1i2T8A1Xv4yH62Dmp0tdl75q17Gh48rIrwB3/t5ZyuLq5+yTJW3 StlD937s88mqqtgvQXTQmzeHtiw+B3c= X-MC-Unique: DNgGdphGP1WvPmgYP5F72w-1 From: David Hildenbrand To: qemu-devel@nongnu.org Cc: David Hildenbrand , Peter Maydell , Paolo Bonzini , Richard Henderson , Eduardo Habkost , "Michael S. Tsirkin" , Marcel Apfelbaum , Igor Mammedov , qemu-arm@nongnu.org, Gavin Shan Subject: [PATCH v1 1/5] pc: Properly handle unplug of virtio based memory devices Date: Tue, 13 Jun 2023 17:02:06 +0200 Message-Id: <20230613150210.449406-2-david@redhat.com> In-Reply-To: <20230613150210.449406-1-david@redhat.com> References: <20230613150210.449406-1-david@redhat.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-Scanned-By: MIMEDefang 3.1 on 10.11.54.1 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; Received-SPF: pass client-ip=170.10.129.124; envelope-from=david@redhat.com; helo=us-smtp-delivery-124.mimecast.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_HIGH=-0.001, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001, T_SCC_BODY_TEXT_LINE=-0.01 autolearn=unavailable autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @redhat.com) X-ZM-MESSAGEID: 1686668936080100001 Content-Type: text/plain; charset="utf-8" While we fence unplug requests from the outside, the VM can still trigger unplug of virtio based memory devices, for example, in Linux doing: # echo 0 > /sys/bus/pci/slots/3/power While doing that is not really expected to work without harming the guest OS (e.g., removing a virtio-mem device while it still provides memory), let's make sure that we properly handle it on the QEMU side. We'll support unplugging of virtio-mem devices in some configurations next. Signed-off-by: David Hildenbrand --- hw/i386/pc.c | 20 +++++++++++++++++++- 1 file changed, 19 insertions(+), 1 deletion(-) diff --git a/hw/i386/pc.c b/hw/i386/pc.c index fc52772fdd..fdd7062929 100644 --- a/hw/i386/pc.c +++ b/hw/i386/pc.c @@ -1559,7 +1559,25 @@ static void pc_virtio_md_pci_unplug_request(HotplugH= andler *hotplug_dev, static void pc_virtio_md_pci_unplug(HotplugHandler *hotplug_dev, DeviceState *dev, Error **errp) { - /* We don't support hot unplug of virtio based memory devices */ + HotplugHandler *hotplug_dev2 =3D qdev_get_bus_hotplug_handler(dev); + Error *local_err =3D NULL; + + /* Unplug the memory device while it is still realized. */ + memory_device_unplug(MEMORY_DEVICE(dev), MACHINE(hotplug_dev)); + + if (hotplug_dev2) { + hotplug_handler_unplug(hotplug_dev2, dev, &local_err); + if (local_err) { + /* Not expected to fail ... but still try to recover. */ + memory_device_plug(MEMORY_DEVICE(dev), MACHINE(hotplug_dev)); + error_propagate(errp, local_err); + return; + } + } else { + /* Very unexpected, but let's just try to do the right thing. */ + warn_report("Unexpected unplug of virtio based memory device"); + qdev_unrealize(dev); + } } =20 static void pc_machine_device_pre_plug_cb(HotplugHandler *hotplug_dev, --=20 2.40.1 From nobody Sat May 18 12:12:21 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; 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; dmarc=pass(p=none dis=none) header.from=redhat.com ARC-Seal: i=1; a=rsa-sha256; t=1686668778; cv=none; d=zohomail.com; s=zohoarc; b=Lktt3XH994P7mgANkg1j2o4bNDDkJ0L6DSR0iF5fld/25jwjEeKUNVvsOygJqnfkVH/LJaHwK1DaXU/US9fL2Y1IiysPr+o3sGnTaDW3KCIzZ+LkIIRxuMeEplRhf38g6vEopF7Ok/QpwBMZ4fngVe/uFdHxwRyFDa96+sblWS4= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1686668778; h=Content-Transfer-Encoding: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=Bahah386mm2D+G3KkVQO5tZBeu6vtnpcbnvTurX56Iw=; b=F26WLdU/LnMhY99ag/BWBqfTSbZekxZy2TdLOJZLF7/yXzGUFeYcE8cZP21Y2fobhGn1FG37cTKifo9oQHBzJnxTyuUfdOEtN8C3PNDeTTS60FrjohgiaOSxyPsHAbWPCrluK79ppxTjq0NLbVOh3GZ1onNhAKITB1Msej8VXKI= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; 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; dmarc=pass header.from= (p=none dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 16866687784699.870609526144449; Tue, 13 Jun 2023 08:06:18 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1q95ZU-00069m-KV; Tue, 13 Jun 2023 11:04:36 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1q95Y5-0003xL-87 for qemu-devel@nongnu.org; Tue, 13 Jun 2023 11:03:11 -0400 Received: from us-smtp-delivery-124.mimecast.com ([170.10.129.124]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1q95Xf-00007L-Hq for qemu-devel@nongnu.org; Tue, 13 Jun 2023 11:02:44 -0400 Received: from mimecast-mx02.redhat.com (mimecast-mx02.redhat.com [66.187.233.88]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id us-mta-571-gCXSHHdDMsmRNrSC_DHu6g-1; Tue, 13 Jun 2023 11:02:38 -0400 Received: from smtp.corp.redhat.com (int-mx01.intmail.prod.int.rdu2.redhat.com [10.11.54.1]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mimecast-mx02.redhat.com (Postfix) with ESMTPS id 738C98117B4; Tue, 13 Jun 2023 15:02:16 +0000 (UTC) Received: from t480s.fritz.box (unknown [10.39.192.249]) by smtp.corp.redhat.com (Postfix) with ESMTP id C91A740C20F5; Tue, 13 Jun 2023 15:02:14 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1686668562; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=Bahah386mm2D+G3KkVQO5tZBeu6vtnpcbnvTurX56Iw=; b=PX3Jojt3KF9hn2AdDc80a1j3GKGrRjhzyRhQR9yuRQJD7jdQF7mWeJiuZegUvdfnb1T/k4 6Kquj9R405cWPIz55ySUPjM7+HYfDZ5lyEI/qwzQdhhEdEinic9g0vU+CvtuyDfsylo74z 9T6wsybw32r10mKd86FDU1lHnD87ExA= X-MC-Unique: gCXSHHdDMsmRNrSC_DHu6g-1 From: David Hildenbrand To: qemu-devel@nongnu.org Cc: David Hildenbrand , Peter Maydell , Paolo Bonzini , Richard Henderson , Eduardo Habkost , "Michael S. Tsirkin" , Marcel Apfelbaum , Igor Mammedov , qemu-arm@nongnu.org, Gavin Shan Subject: [PATCH v1 2/5] arm/virt: Properly handle unplug of virtio based memory devices Date: Tue, 13 Jun 2023 17:02:07 +0200 Message-Id: <20230613150210.449406-3-david@redhat.com> In-Reply-To: <20230613150210.449406-1-david@redhat.com> References: <20230613150210.449406-1-david@redhat.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-Scanned-By: MIMEDefang 3.1 on 10.11.54.1 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; Received-SPF: pass client-ip=170.10.129.124; envelope-from=david@redhat.com; helo=us-smtp-delivery-124.mimecast.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_HIGH=-0.001, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001, T_SCC_BODY_TEXT_LINE=-0.01 autolearn=unavailable autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @redhat.com) X-ZM-MESSAGEID: 1686668849719100001 Content-Type: text/plain; charset="utf-8" While we fence unplug requests from the outside, the VM can still trigger unplug of virtio based memory devices, for example, in Linux doing: # echo 0 > /sys/bus/pci/slots/3/power While doing that is not really expected to work without harming the guest OS (e.g., removing a virtio-mem device while it still provides memory), let's make sure that we properly handle it on the QEMU side. We'll support unplugging of virtio-mem devices in some configurations next. Signed-off-by: David Hildenbrand --- hw/arm/virt.c | 26 ++++++++++++++++++++++++++ 1 file changed, 26 insertions(+) diff --git a/hw/arm/virt.c b/hw/arm/virt.c index 9b9f7d9c68..ed5c3c8fc4 100644 --- a/hw/arm/virt.c +++ b/hw/arm/virt.c @@ -2794,6 +2794,30 @@ static void virt_virtio_md_pci_plug(HotplugHandler *= hotplug_dev, error_propagate(errp, local_err); } =20 +static void virt_virtio_md_pci_unplug(HotplugHandler *hotplug_dev, + DeviceState *dev, Error **errp) +{ + HotplugHandler *hotplug_dev2 =3D qdev_get_bus_hotplug_handler(dev); + Error *local_err =3D NULL; + + /* Unplug the memory device while it is still realized. */ + memory_device_unplug(MEMORY_DEVICE(dev), MACHINE(hotplug_dev)); + + if (hotplug_dev2) { + hotplug_handler_unplug(hotplug_dev2, dev, &local_err); + if (local_err) { + /* Not expected to fail ... but still try to recover. */ + memory_device_plug(MEMORY_DEVICE(dev), MACHINE(hotplug_dev)); + error_propagate(errp, local_err); + return; + } + } else { + /* Very unexpected, but let's just try to do the right thing. */ + warn_report("Unexpected unplug of virtio based memory device"); + qdev_unrealize(dev); + } +} + static void virt_virtio_md_pci_unplug_request(HotplugHandler *hotplug_dev, DeviceState *dev, Error **er= rp) { @@ -2932,6 +2956,8 @@ static void virt_machine_device_unplug_cb(HotplugHand= ler *hotplug_dev, { if (object_dynamic_cast(OBJECT(dev), TYPE_PC_DIMM)) { virt_dimm_unplug(hotplug_dev, dev, errp); + } else if (object_dynamic_cast(OBJECT(dev), TYPE_VIRTIO_MEM_PCI)) { + virt_virtio_md_pci_unplug(hotplug_dev, dev, errp); } else { error_setg(errp, "virt: device unplug for unsupported device" " type: %s", object_get_typename(OBJECT(dev))); --=20 2.40.1 From nobody Sat May 18 12:12:21 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; 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; dmarc=pass(p=none dis=none) header.from=redhat.com ARC-Seal: i=1; a=rsa-sha256; t=1686668851; cv=none; d=zohomail.com; s=zohoarc; b=CKdWVmriXjQUcIoJWyztNs7b93gfAJQ7e4BE4+M0pAxtiEnKe5Z/afMkcqAIC/gnUDxvV5im2wIeDw3pL0LkxnHEY56vNigVtApd/xbUwrJA6iNyFV5At2CgNCEsH6m33QI08carGQj/Wd/4qzkLhzNx7S4uWmkgWWh5AGkWfA4= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1686668851; h=Content-Transfer-Encoding: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=jkgkzyAEJq6i0w/j5i3XRakJ/Drp2xLIfOdnzodnXsY=; b=CrCqY4nJ1WOPFJpRs0x2x0k4Clis/eodz0SGKCCiU5UpdI48YIijTR7tHUbcv1fhbQ9R48fngio8Hl/fhX4bO4ccOIOpm794b+X3IZS1Oww5Gu2yh8sMdKLPULsmFqlB6mzvcrthjWjTSRHPUEPy1zbk5SKPv+ZTsxVS7zO1zHE= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; 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; dmarc=pass header.from= (p=none dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1686668851287918.2994119961772; Tue, 13 Jun 2023 08:07:31 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1q95Z2-0005Zv-K2; Tue, 13 Jun 2023 11:04:08 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1q95Y5-0003wa-1W for qemu-devel@nongnu.org; Tue, 13 Jun 2023 11:03:11 -0400 Received: from us-smtp-delivery-124.mimecast.com ([170.10.133.124]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1q95XZ-00004z-T7 for qemu-devel@nongnu.org; Tue, 13 Jun 2023 11:02:39 -0400 Received: from mimecast-mx02.redhat.com (mimecast-mx02.redhat.com [66.187.233.88]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id us-mta-648-z_6vgX5XPFWRAwLcar3Ynw-1; Tue, 13 Jun 2023 11:02:30 -0400 Received: from smtp.corp.redhat.com (int-mx01.intmail.prod.int.rdu2.redhat.com [10.11.54.1]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mimecast-mx02.redhat.com (Postfix) with ESMTPS id 5CCCA101B057; Tue, 13 Jun 2023 15:02:18 +0000 (UTC) Received: from t480s.fritz.box (unknown [10.39.192.249]) by smtp.corp.redhat.com (Postfix) with ESMTP id ADAFA40C20F5; Tue, 13 Jun 2023 15:02:16 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1686668556; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=jkgkzyAEJq6i0w/j5i3XRakJ/Drp2xLIfOdnzodnXsY=; b=QMftkjwtC+nQh7cvAz9BtUsgUJqd1CSPCqMuBSv+tNDETYQnrhzM+2KQlBnE0IDCEpIswG CJHnuvo/m5vW19UTCUJNibTBvRlybz7pc1eozUVRPFiUMuWUYnoMaYEERLQasVN3gAvcdj d0lVhzBpKbOYKDOI47yIEtzlMs85RjM= X-MC-Unique: z_6vgX5XPFWRAwLcar3Ynw-1 From: David Hildenbrand To: qemu-devel@nongnu.org Cc: David Hildenbrand , Peter Maydell , Paolo Bonzini , Richard Henderson , Eduardo Habkost , "Michael S. Tsirkin" , Marcel Apfelbaum , Igor Mammedov , qemu-arm@nongnu.org, Gavin Shan Subject: [PATCH v1 3/5] virtio-mem: Prepare for unplug support of virtio-mem-pci devices Date: Tue, 13 Jun 2023 17:02:08 +0200 Message-Id: <20230613150210.449406-4-david@redhat.com> In-Reply-To: <20230613150210.449406-1-david@redhat.com> References: <20230613150210.449406-1-david@redhat.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-Scanned-By: MIMEDefang 3.1 on 10.11.54.1 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; Received-SPF: pass client-ip=170.10.133.124; envelope-from=david@redhat.com; helo=us-smtp-delivery-124.mimecast.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_HIGH=-0.001, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, RCVD_IN_MSPIKE_H5=0.001, RCVD_IN_MSPIKE_WL=0.001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001, T_SCC_BODY_TEXT_LINE=-0.01 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @redhat.com) X-ZM-MESSAGEID: 1686668853486100001 Content-Type: text/plain; charset="utf-8" In many cases, blindly unplugging a virtio-mem device is problematic. We can only safely remove a device once: * The guest is not expecting to be able to read unplugged memory (unplugged-inaccessible =3D=3D on) * The virtio-mem device does not have memory plugged (size =3D=3D 0) * The virtio-mem device does not have outstanding requests to the VM to plug memory (requested-size =3D=3D 0) So let's add a helper to check for that from the unplug-request code from relevant machine hotplug handlers and disallow changing the requested-size once an unplug request is pending. Disallowing requested-size changes handles corner cases such as (1) pausing the VM (2) requesting device unplug and (3) adjusting the requested size. If the VM would plug memory (due to the requested size change) before processing the unplug request, we would be in trouble. Signed-off-by: David Hildenbrand --- hw/virtio/virtio-mem-pci.c | 42 +++++++++++++++++++++++++++++++--- hw/virtio/virtio-mem-pci.h | 2 ++ hw/virtio/virtio-mem.c | 24 +++++++++++++++++++ include/hw/virtio/virtio-mem.h | 2 ++ 4 files changed, 67 insertions(+), 3 deletions(-) diff --git a/hw/virtio/virtio-mem-pci.c b/hw/virtio/virtio-mem-pci.c index b85c12668d..dcbab9713c 100644 --- a/hw/virtio/virtio-mem-pci.c +++ b/hw/virtio/virtio-mem-pci.c @@ -93,6 +93,42 @@ static void virtio_mem_pci_size_change_notify(Notifier *= notifier, void *data) g_free(qom_path); } =20 +void virtio_mem_pci_unplug_request_check(VirtIOMEMPCI *pci_mem, Error **er= rp) +{ + virtio_mem_unplug_request_check(&pci_mem->vdev, errp); +} + +static void virtio_mem_pci_get_requested_size(Object *obj, Visitor *v, + const char *name, void *opaq= ue, + Error **errp) +{ + VirtIOMEMPCI *pci_mem =3D VIRTIO_MEM_PCI(obj); + + object_property_get(OBJECT(&pci_mem->vdev), name, v, errp); +} + +static void virtio_mem_pci_set_requested_size(Object *obj, Visitor *v, + const char *name, void *opaq= ue, + Error **errp) +{ + VirtIOMEMPCI *pci_mem =3D VIRTIO_MEM_PCI(obj); + DeviceState *dev =3D DEVICE(obj); + + /* + * If we passed virtio_mem_pci_unplug_request_check(), making sure that + * the requested size is 0, don't allow modifying the requested size + * anymore, otherwise the VM might end up hotplugging memory before + * handling the unplug request. + */ + if (dev->pending_deleted_event) { + error_setg(errp, "'%s' cannot be changed if the device is in the" + " process of unplug", name); + return; + } + + object_property_set(OBJECT(&pci_mem->vdev), name, v, errp); +} + static void virtio_mem_pci_class_init(ObjectClass *klass, void *data) { DeviceClass *dc =3D DEVICE_CLASS(klass); @@ -135,9 +171,9 @@ static void virtio_mem_pci_instance_init(Object *obj) OBJECT(&dev->vdev), VIRTIO_MEM_BLOCK_SIZE_PR= OP); object_property_add_alias(obj, VIRTIO_MEM_SIZE_PROP, OBJECT(&dev->vdev= ), VIRTIO_MEM_SIZE_PROP); - object_property_add_alias(obj, VIRTIO_MEM_REQUESTED_SIZE_PROP, - OBJECT(&dev->vdev), - VIRTIO_MEM_REQUESTED_SIZE_PROP); + object_property_add(obj, VIRTIO_MEM_REQUESTED_SIZE_PROP, "size", + virtio_mem_pci_get_requested_size, + virtio_mem_pci_set_requested_size, NULL, NULL); } =20 static const VirtioPCIDeviceTypeInfo virtio_mem_pci_info =3D { diff --git a/hw/virtio/virtio-mem-pci.h b/hw/virtio/virtio-mem-pci.h index e636e1a48d..f8e8bc523a 100644 --- a/hw/virtio/virtio-mem-pci.h +++ b/hw/virtio/virtio-mem-pci.h @@ -32,4 +32,6 @@ struct VirtIOMEMPCI { Notifier size_change_notifier; }; =20 +void virtio_mem_pci_unplug_request_check(VirtIOMEMPCI *pci_mem, Error **er= rp); + #endif /* QEMU_VIRTIO_MEM_PCI_H */ diff --git a/hw/virtio/virtio-mem.c b/hw/virtio/virtio-mem.c index 538b695c29..e0dc7f04ea 100644 --- a/hw/virtio/virtio-mem.c +++ b/hw/virtio/virtio-mem.c @@ -1468,6 +1468,30 @@ static void virtio_mem_rdm_unregister_listener(RamDi= scardManager *rdm, QLIST_REMOVE(rdl, next); } =20 +void virtio_mem_unplug_request_check(VirtIOMEM *vmem, Error **errp) +{ + if (vmem->unplugged_inaccessible =3D=3D ON_OFF_AUTO_OFF) { + /* + * We could allow it with a usable region size of 0, but let's just + * not care about that legacy setting. + */ + error_setg(errp, "virtio-mem device cannot get unplugged while" + " '" VIRTIO_MEM_UNPLUGGED_INACCESSIBLE_PROP "' !=3D 'on= '"); + return; + } + + if (vmem->size) { + error_setg(errp, "virtio-mem device cannot get unplugged while" + " '" VIRTIO_MEM_SIZE_PROP "' !=3D '0'"); + return; + } + if (vmem->requested_size) { + error_setg(errp, "virtio-mem device cannot get unplugged while" + " '" VIRTIO_MEM_REQUESTED_SIZE_PROP "' !=3D '0'"); + return; + } +} + static void virtio_mem_class_init(ObjectClass *klass, void *data) { DeviceClass *dc =3D DEVICE_CLASS(klass); diff --git a/include/hw/virtio/virtio-mem.h b/include/hw/virtio/virtio-mem.h index f15e561785..dd5aec98f5 100644 --- a/include/hw/virtio/virtio-mem.h +++ b/include/hw/virtio/virtio-mem.h @@ -100,4 +100,6 @@ struct VirtIOMEMClass { void (*remove_size_change_notifier)(VirtIOMEM *vmem, Notifier *notifie= r); }; =20 +void virtio_mem_unplug_request_check(VirtIOMEM *vmem, Error **errp); + #endif --=20 2.40.1 From nobody Sat May 18 12:12:21 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; 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; dmarc=pass(p=none dis=none) header.from=redhat.com ARC-Seal: i=1; a=rsa-sha256; t=1686668797; cv=none; d=zohomail.com; s=zohoarc; b=Lq6mKChXxHjGtzTymikv2GAIn2esux/o9Mdcmwe74/qSyxiAcyFlIePck/TT1hZKLPoHQ4Ik3jFNKblkBDE4/uO/kvBhDEC4QD9wLt1pimkopR2r7SgCmVQMNlJo875irjiaX04o3rur84pA/DM13LduV9xGyChCN3kJuU43y/c= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1686668797; h=Content-Transfer-Encoding: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=Z2POMW3TMVP/4Qu6yG9T5YmMR7W9tPy57BNy9w0vSDA=; b=NAoHpfA4oNl6uJZpbSOJHvzLnQalEZ8likKyAjMApJ8QYlvzNzTwCTY7YwfpXEZ1UxsMswFTnhTOHGA+i7ktUi3ugAghGaPpjNXsqDviLSfTn9LROA3mzbkYB8MEhyOaSFCyVRuGnB+1ns43ntP0MhDE/tbyr4TAN4mrc+yziAY= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; 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; dmarc=pass header.from= (p=none dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1686668797786491.45137028991826; Tue, 13 Jun 2023 08:06:37 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1q95Z0-0005Sh-Ev; Tue, 13 Jun 2023 11:04:06 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1q95Y5-0003wn-5S for qemu-devel@nongnu.org; Tue, 13 Jun 2023 11:03:11 -0400 Received: from us-smtp-delivery-124.mimecast.com ([170.10.133.124]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1q95Xa-000057-Cf for qemu-devel@nongnu.org; Tue, 13 Jun 2023 11:02:40 -0400 Received: from mimecast-mx02.redhat.com (mimecast-mx02.redhat.com [66.187.233.88]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id us-mta-130-SpyaN_TvN6eBM_TmvdEteA-1; Tue, 13 Jun 2023 11:02:28 -0400 Received: from smtp.corp.redhat.com (int-mx01.intmail.prod.int.rdu2.redhat.com [10.11.54.1]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mimecast-mx02.redhat.com (Postfix) with ESMTPS id 41F06811E97; Tue, 13 Jun 2023 15:02:20 +0000 (UTC) Received: from t480s.fritz.box (unknown [10.39.192.249]) by smtp.corp.redhat.com (Postfix) with ESMTP id 96BE140C20F5; Tue, 13 Jun 2023 15:02:18 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1686668557; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=Z2POMW3TMVP/4Qu6yG9T5YmMR7W9tPy57BNy9w0vSDA=; b=GanX0qFoSM48Stg411gFt6pobEWQGMZSEFzbsaM8+0qK9WAgGWp7KZCbNBWWLCVjFW8SaM Lw3z85mdOYB9QJ4rRB5D4QK7kbalNWiK3krjYp9agaseKEcTPmcaZeDQEYgYmKXmASLU4K CMt5p475T9oBl97LK5lWAnSWOVL4uj4= X-MC-Unique: SpyaN_TvN6eBM_TmvdEteA-1 From: David Hildenbrand To: qemu-devel@nongnu.org Cc: David Hildenbrand , Peter Maydell , Paolo Bonzini , Richard Henderson , Eduardo Habkost , "Michael S. Tsirkin" , Marcel Apfelbaum , Igor Mammedov , qemu-arm@nongnu.org, Gavin Shan Subject: [PATCH v1 4/5] pc: Support unplug of virtio-mem-pci devices Date: Tue, 13 Jun 2023 17:02:09 +0200 Message-Id: <20230613150210.449406-5-david@redhat.com> In-Reply-To: <20230613150210.449406-1-david@redhat.com> References: <20230613150210.449406-1-david@redhat.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-Scanned-By: MIMEDefang 3.1 on 10.11.54.1 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; Received-SPF: pass client-ip=170.10.133.124; envelope-from=david@redhat.com; helo=us-smtp-delivery-124.mimecast.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_HIGH=-0.001, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, RCVD_IN_MSPIKE_H5=0.001, RCVD_IN_MSPIKE_WL=0.001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001, T_SCC_BODY_TEXT_LINE=-0.01 autolearn=unavailable autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @redhat.com) X-ZM-MESSAGEID: 1686668798870100003 Content-Type: text/plain; charset="utf-8" Let's support unplug of virtio-mem-pci devices by granting (forwarding) unplug requests if it's safe to unplug a virtio-mem device. Signed-off-by: David Hildenbrand --- hw/i386/pc.c | 48 +++++++++++++++++++++++++++++++++++++++++------- 1 file changed, 41 insertions(+), 7 deletions(-) diff --git a/hw/i386/pc.c b/hw/i386/pc.c index fdd7062929..996757794e 100644 --- a/hw/i386/pc.c +++ b/hw/i386/pc.c @@ -1549,13 +1549,6 @@ static void pc_virtio_md_pci_plug(HotplugHandler *ho= tplug_dev, error_propagate(errp, local_err); } =20 -static void pc_virtio_md_pci_unplug_request(HotplugHandler *hotplug_dev, - DeviceState *dev, Error **errp) -{ - /* We don't support hot unplug of virtio based memory devices */ - error_setg(errp, "virtio based memory devices cannot be unplugged."); -} - static void pc_virtio_md_pci_unplug(HotplugHandler *hotplug_dev, DeviceState *dev, Error **errp) { @@ -1580,6 +1573,47 @@ static void pc_virtio_md_pci_unplug(HotplugHandler *= hotplug_dev, } } =20 +static void pc_virtio_md_pci_unplug_request(HotplugHandler *hotplug_dev, + DeviceState *dev, Error **errp) +{ + HotplugHandler *hotplug_dev2 =3D qdev_get_bus_hotplug_handler(dev); + HotplugHandlerClass *hdc; + Error *local_err =3D NULL; + + if (object_dynamic_cast(OBJECT(dev), TYPE_VIRTIO_PMEM_PCI)) { + error_setg(errp, "virtio-pmem devices cannot be unplugged."); + return; + } + + if (!hotplug_dev2) { + error_setg(errp, "hotunplug of virtio based memory devices not" + "supported on this bus"); + return; + } + + /* Verify whether it is *currently* safe to unplug the virtio-mem devi= ce. */ + g_assert(object_dynamic_cast(OBJECT(dev), TYPE_VIRTIO_MEM_PCI)); + virtio_mem_pci_unplug_request_check(VIRTIO_MEM_PCI(dev), &local_err); + if (local_err) { + error_propagate(errp, local_err); + return; + } + + /* + * Forward the async request or turn it into a sync request (handling = it + * like qdev_unplug()). + */ + hdc =3D HOTPLUG_HANDLER_GET_CLASS(hotplug_dev2); + if (hdc->unplug_request) { + hotplug_handler_unplug_request(hotplug_dev2, dev, &local_err); + } else { + pc_virtio_md_pci_unplug(hotplug_dev, dev, &local_err); + if (!local_err) { + object_unparent(OBJECT(dev)); + } + } +} + static void pc_machine_device_pre_plug_cb(HotplugHandler *hotplug_dev, DeviceState *dev, Error **errp) { --=20 2.40.1 From nobody Sat May 18 12:12:21 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; 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; dmarc=pass(p=none dis=none) header.from=redhat.com ARC-Seal: i=1; a=rsa-sha256; t=1686668803; cv=none; d=zohomail.com; s=zohoarc; b=YZ83qAH5uCwKz0MtoQrmwWxld4R8dAz/cc/F5JGXb+3s45dHe0VSSYxJZyOrb4kS7iANxCikoJVw8CsD6vW+HTlGtE69z/Cz0SNYSVo50gzSXc5Z3LFirE1rlTG639b6EJ6zAjXUqD4ZS0HyzFZU1+b3wG7xT1qNbuyaKGmgTXs= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1686668803; h=Content-Transfer-Encoding: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=SLByoKSRUNv3dV7dNizYLggVY51+m+xD/k+DONQgaeA=; b=D1ceZtnGiRuZNMeDi8FAR2aqFwsEmDndGF70wbU1Q6jrFyOjHRncjrkb4J2T5CLwcukiUR3JOMPUvO2DNCzBJrUzkP6dUj3ybRFZNZpJjpPx4WwIqclStf1sMcNZmny5G7SvKpxDpKtOnUftk3GNZMWXhKie+83JqSwbhG61MJ4= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; 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; dmarc=pass header.from= (p=none dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 168666880379170.5245116195232; Tue, 13 Jun 2023 08:06:43 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1q95Z0-0005SW-Dt; Tue, 13 Jun 2023 11:04:06 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1q95Y5-0003x8-85 for qemu-devel@nongnu.org; Tue, 13 Jun 2023 11:03:11 -0400 Received: from us-smtp-delivery-124.mimecast.com ([170.10.129.124]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1q95Xb-00006E-Jg for qemu-devel@nongnu.org; Tue, 13 Jun 2023 11:02:41 -0400 Received: from mimecast-mx02.redhat.com (mx3-rdu2.redhat.com [66.187.233.73]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id us-mta-261-9lta-VWbPByDon_FjtwYdA-1; Tue, 13 Jun 2023 11:02:32 -0400 Received: from smtp.corp.redhat.com (int-mx01.intmail.prod.int.rdu2.redhat.com [10.11.54.1]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mimecast-mx02.redhat.com (Postfix) with ESMTPS id 2637E38117F8; Tue, 13 Jun 2023 15:02:22 +0000 (UTC) Received: from t480s.fritz.box (unknown [10.39.192.249]) by smtp.corp.redhat.com (Postfix) with ESMTP id 7BE9940B4CD6; Tue, 13 Jun 2023 15:02:20 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1686668558; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=SLByoKSRUNv3dV7dNizYLggVY51+m+xD/k+DONQgaeA=; b=WBmAVLYP4HgmaedWZXlDD1JpB5uyHiOxJzQmS8vCoyxYC3VN+NDSkVvCXBqgJNB0b4mVlD TacDiQHSyydbSXqx+9gv3qieoa/RXid2ebt/YtfKCTtOuHg7dLSq0fGjL/VBlGHS1bLFkJ DJkIIE4zb0x28MyZZNb8MQhDNfPgcFk= X-MC-Unique: 9lta-VWbPByDon_FjtwYdA-1 From: David Hildenbrand To: qemu-devel@nongnu.org Cc: David Hildenbrand , Peter Maydell , Paolo Bonzini , Richard Henderson , Eduardo Habkost , "Michael S. Tsirkin" , Marcel Apfelbaum , Igor Mammedov , qemu-arm@nongnu.org, Gavin Shan Subject: [PATCH v1 5/5] arm/virt: Support unplug of virtio-mem-pci devices Date: Tue, 13 Jun 2023 17:02:10 +0200 Message-Id: <20230613150210.449406-6-david@redhat.com> In-Reply-To: <20230613150210.449406-1-david@redhat.com> References: <20230613150210.449406-1-david@redhat.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-Scanned-By: MIMEDefang 3.1 on 10.11.54.1 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; Received-SPF: pass client-ip=170.10.129.124; envelope-from=david@redhat.com; helo=us-smtp-delivery-124.mimecast.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_HIGH=-0.001, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001, T_SCC_BODY_TEXT_LINE=-0.01 autolearn=unavailable autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @redhat.com) X-ZM-MESSAGEID: 1686668804859100001 Content-Type: text/plain; charset="utf-8" Let's support unplug of virtio-mem-pci devices by granting (forwarding) unplug requests if it's safe to unplug a virtio-mem device. Signed-off-by: David Hildenbrand --- hw/arm/virt.c | 34 +++++++++++++++++++++++++++++++--- 1 file changed, 31 insertions(+), 3 deletions(-) diff --git a/hw/arm/virt.c b/hw/arm/virt.c index ed5c3c8fc4..08d4eef4c1 100644 --- a/hw/arm/virt.c +++ b/hw/arm/virt.c @@ -2821,10 +2821,38 @@ static void virt_virtio_md_pci_unplug(HotplugHandle= r *hotplug_dev, static void virt_virtio_md_pci_unplug_request(HotplugHandler *hotplug_dev, DeviceState *dev, Error **er= rp) { - /* We don't support hot unplug of virtio based memory devices */ - error_setg(errp, "virtio based memory devices cannot be unplugged."); -} + HotplugHandler *hotplug_dev2 =3D qdev_get_bus_hotplug_handler(dev); + HotplugHandlerClass *hdc; + Error *local_err =3D NULL; + + if (!hotplug_dev2) { + error_setg(errp, "hotunplug of virtio based memory devices not" + "supported on this bus"); + return; + } + + /* Verify whether it is *currently* safe to unplug the virtio-mem devi= ce. */ + g_assert(object_dynamic_cast(OBJECT(dev), TYPE_VIRTIO_MEM_PCI)); + virtio_mem_pci_unplug_request_check(VIRTIO_MEM_PCI(dev), &local_err); + if (local_err) { + error_propagate(errp, local_err); + return; + } =20 + /* + * Forward the async request or turn it into a sync request (handling = it + * like qdev_unplug()). + */ + hdc =3D HOTPLUG_HANDLER_GET_CLASS(hotplug_dev2); + if (hdc->unplug_request) { + hotplug_handler_unplug_request(hotplug_dev2, dev, &local_err); + } else { + virt_virtio_md_pci_unplug(hotplug_dev, dev, &local_err); + if (!local_err) { + object_unparent(OBJECT(dev)); + } + } +} =20 static void virt_machine_device_pre_plug_cb(HotplugHandler *hotplug_dev, DeviceState *dev, Error **errp) --=20 2.40.1