From nobody Fri May 3 08:30:58 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zohomail.com: domain of redhat.com designates 63.128.21.124 as permitted sender) client-ip=63.128.21.124; envelope-from=libvir-list-bounces@redhat.com; helo=us-smtp-delivery-124.mimecast.com; Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of redhat.com designates 63.128.21.124 as permitted sender) smtp.mailfrom=libvir-list-bounces@redhat.com; dmarc=pass(p=none dis=none) header.from=redhat.com ARC-Seal: i=1; a=rsa-sha256; t=1610719960; cv=none; d=zohomail.com; s=zohoarc; b=FV0qvgJm/zi7VaCPw+oGNGsj4Z3hYajz9WfS9f0o7qpVxlwlAp0+QY5oyiwdleZn6ew9DlBzdLP99R78N2rxyJFYTap+jFlm9i34Do24bN9B20QafnSddGECLO8klcG8r19rzhDpWS2exZQYivC6hJv1+qIGTLvyJeh4dQP8V9w= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1610719960; h=Content-Type:Content-Transfer-Encoding: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=bP3qHCINjg8TE235PAjYaGFNBCcjSmSNdJONOYMleUU=; b=mPBe4IijQJe+4WntikXjy+ohQPGW+Gxt+X6LqA/R32Gpf66WKIpiGrxE1aVVcmzfSX7k+RDVU3B4LN0VOsyv9A8leShS3W5k/QyUVWotX4GQyLrv4A68VSp2mVob5gv5m3nFByQRYfEhgjSOe611U9o1RVrtaN0WfrYrc/dZ9Y0= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of redhat.com designates 63.128.21.124 as permitted sender) smtp.mailfrom=libvir-list-bounces@redhat.com; dmarc=pass header.from= (p=none dis=none) header.from= Return-Path: Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [63.128.21.124]) by mx.zohomail.com with SMTPS id 1610719960393439.70187334042123; Fri, 15 Jan 2021 06:12:40 -0800 (PST) Received: from mimecast-mx01.redhat.com (mimecast-mx01.redhat.com [209.132.183.4]) (Using TLS) by relay.mimecast.com with ESMTP id us-mta-260-ZMSJAeyDOOyccMgbC7eezg-1; Fri, 15 Jan 2021 09:12:37 -0500 Received: from smtp.corp.redhat.com (int-mx07.intmail.prod.int.phx2.redhat.com [10.5.11.22]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mimecast-mx01.redhat.com (Postfix) with ESMTPS id DF1058066E3; Fri, 15 Jan 2021 14:12:31 +0000 (UTC) Received: from colo-mx.corp.redhat.com (colo-mx02.intmail.prod.int.phx2.redhat.com [10.5.11.21]) by smtp.corp.redhat.com (Postfix) with ESMTPS id 2DA0D100AE32; Fri, 15 Jan 2021 14:12:31 +0000 (UTC) Received: from lists01.pubmisc.prod.ext.phx2.redhat.com (lists01.pubmisc.prod.ext.phx2.redhat.com [10.5.19.33]) by colo-mx.corp.redhat.com (Postfix) with ESMTP id 1EF3A4BB7B; Fri, 15 Jan 2021 14:12:30 +0000 (UTC) Received: from smtp.corp.redhat.com (int-mx02.intmail.prod.int.phx2.redhat.com [10.5.11.12]) by lists01.pubmisc.prod.ext.phx2.redhat.com (8.13.8/8.13.8) with ESMTP id 10FECQkV025924 for ; Fri, 15 Jan 2021 09:12:26 -0500 Received: by smtp.corp.redhat.com (Postfix) id A164F60C6B; Fri, 15 Jan 2021 14:12:26 +0000 (UTC) Received: from localhost.localdomain (unknown [10.40.194.52]) by smtp.corp.redhat.com (Postfix) with ESMTP id 2331560BF3 for ; Fri, 15 Jan 2021 14:12:25 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1610719959; h=from:from:sender:sender:reply-to:subject:subject:date:date: message-id:message-id:to:to:cc:mime-version:mime-version: content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references:list-id:list-help: list-unsubscribe:list-subscribe:list-post; bh=bP3qHCINjg8TE235PAjYaGFNBCcjSmSNdJONOYMleUU=; b=hsUl+pwZstphh5MahG5lZyRyKABKwr92jIXrcLo7Se9Z765ED+y3bapxm9/E7fjcTmjKph PEnLO8uBdJnxzVXNKs/OnNvuaSD7Gzlbzh7UjGXWg7sR5XhNZ3ylOM3pcqFShLK+c8JGrt piB+iQ1nq0/Mhbxaf9j/VZivNySWGuM= X-MC-Unique: ZMSJAeyDOOyccMgbC7eezg-1 From: Michal Privoznik To: libvir-list@redhat.com Subject: [PATCH 1/6] qemu_capabilities: Introduce QEMU_CAPS_DEVICE_VIRTIO_PMEM_PCI Date: Fri, 15 Jan 2021 15:12:15 +0100 Message-Id: <263b15696e1901eedbc52de99475d9d102677abf.1610719802.git.mprivozn@redhat.com> In-Reply-To: References: MIME-Version: 1.0 X-Scanned-By: MIMEDefang 2.79 on 10.5.11.12 X-loop: libvir-list@redhat.com X-BeenThere: libvir-list@redhat.com X-Mailman-Version: 2.1.12 Precedence: junk List-Id: Development discussions about the libvirt library & tools List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: libvir-list-bounces@redhat.com Errors-To: libvir-list-bounces@redhat.com X-Scanned-By: MIMEDefang 2.84 on 10.5.11.22 Authentication-Results: relay.mimecast.com; auth=pass smtp.auth=CUSA124A263 smtp.mailfrom=libvir-list-bounces@redhat.com X-Mimecast-Spam-Score: 0 X-Mimecast-Originator: redhat.com Content-Transfer-Encoding: quoted-printable X-ZohoMail-DKIM: pass (identity @redhat.com) Content-Type: text/plain; charset="utf-8" In this commit a new capability is introduced that reflect device support by given qemu: QEMU_CAPS_DEVICE_VIRTIO_PMEM_PCI, /* -device virtio-pmem-pci */ The virtio-pmem-pci device was introduced in QEMU 4.1. Signed-off-by: Michal Privoznik Reviewed-by: Daniel Henrique Barboza --- src/qemu/qemu_capabilities.c | 2 ++ src/qemu/qemu_capabilities.h | 1 + tests/qemucapabilitiesdata/caps_4.1.0.x86_64.xml | 1 + tests/qemucapabilitiesdata/caps_4.2.0.x86_64.xml | 1 + tests/qemucapabilitiesdata/caps_5.0.0.x86_64.xml | 1 + tests/qemucapabilitiesdata/caps_5.1.0.x86_64.xml | 1 + tests/qemucapabilitiesdata/caps_5.2.0.x86_64.xml | 1 + 7 files changed, 8 insertions(+) diff --git a/src/qemu/qemu_capabilities.c b/src/qemu/qemu_capabilities.c index 4d132defbd..d656732c3e 100644 --- a/src/qemu/qemu_capabilities.c +++ b/src/qemu/qemu_capabilities.c @@ -609,6 +609,7 @@ VIR_ENUM_IMPL(virQEMUCaps, "ncr53c90", "dc390", "am53c974", + "virtio-pmem-pci", ); =20 =20 @@ -1325,6 +1326,7 @@ struct virQEMUCapsStringFlags virQEMUCapsObjectTypes[= ] =3D { */ { "dc390", QEMU_CAPS_SCSI_DC390 }, { "am53c974", QEMU_CAPS_SCSI_AM53C974 }, + { "virtio-pmem-pci", QEMU_CAPS_DEVICE_VIRTIO_PMEM_PCI }, }; =20 =20 diff --git a/src/qemu/qemu_capabilities.h b/src/qemu/qemu_capabilities.h index 0f90efa459..a14a78f959 100644 --- a/src/qemu/qemu_capabilities.h +++ b/src/qemu/qemu_capabilities.h @@ -589,6 +589,7 @@ typedef enum { /* virQEMUCapsFlags grouping marker for = syntax-check */ QEMU_CAPS_SCSI_NCR53C90, /* built-in SCSI */ QEMU_CAPS_SCSI_DC390, /* -device dc-390 */ QEMU_CAPS_SCSI_AM53C974, /* -device am53c974 */ + QEMU_CAPS_DEVICE_VIRTIO_PMEM_PCI, /* -device virtio-pmem-pci */ =20 QEMU_CAPS_LAST /* this must always be the last item */ } virQEMUCapsFlags; diff --git a/tests/qemucapabilitiesdata/caps_4.1.0.x86_64.xml b/tests/qemuc= apabilitiesdata/caps_4.1.0.x86_64.xml index 58774fddcc..28a4b0ede0 100644 --- a/tests/qemucapabilitiesdata/caps_4.1.0.x86_64.xml +++ b/tests/qemucapabilitiesdata/caps_4.1.0.x86_64.xml @@ -231,6 +231,7 @@ + 4001000 0 43100241 diff --git a/tests/qemucapabilitiesdata/caps_4.2.0.x86_64.xml b/tests/qemuc= apabilitiesdata/caps_4.2.0.x86_64.xml index 1ba8c09374..e150741f11 100644 --- a/tests/qemucapabilitiesdata/caps_4.2.0.x86_64.xml +++ b/tests/qemucapabilitiesdata/caps_4.2.0.x86_64.xml @@ -240,6 +240,7 @@ + 4002000 0 43100242 diff --git a/tests/qemucapabilitiesdata/caps_5.0.0.x86_64.xml b/tests/qemuc= apabilitiesdata/caps_5.0.0.x86_64.xml index 849727eb40..7c56d110f4 100644 --- a/tests/qemucapabilitiesdata/caps_5.0.0.x86_64.xml +++ b/tests/qemucapabilitiesdata/caps_5.0.0.x86_64.xml @@ -247,6 +247,7 @@ + 5000000 0 43100241 diff --git a/tests/qemucapabilitiesdata/caps_5.1.0.x86_64.xml b/tests/qemuc= apabilitiesdata/caps_5.1.0.x86_64.xml index ff5f42a563..07466093c9 100644 --- a/tests/qemucapabilitiesdata/caps_5.1.0.x86_64.xml +++ b/tests/qemucapabilitiesdata/caps_5.1.0.x86_64.xml @@ -249,6 +249,7 @@ + 5001000 0 43100242 diff --git a/tests/qemucapabilitiesdata/caps_5.2.0.x86_64.xml b/tests/qemuc= apabilitiesdata/caps_5.2.0.x86_64.xml index cebacc249d..dea2ff4b54 100644 --- a/tests/qemucapabilitiesdata/caps_5.2.0.x86_64.xml +++ b/tests/qemucapabilitiesdata/caps_5.2.0.x86_64.xml @@ -250,6 +250,7 @@ + 5002000 0 43100243 --=20 2.26.2 From nobody Fri May 3 08:30:58 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zohomail.com: domain of redhat.com designates 216.205.24.124 as permitted sender) client-ip=216.205.24.124; envelope-from=libvir-list-bounces@redhat.com; helo=us-smtp-delivery-124.mimecast.com; Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of redhat.com designates 216.205.24.124 as permitted sender) smtp.mailfrom=libvir-list-bounces@redhat.com; dmarc=pass(p=none dis=none) header.from=redhat.com ARC-Seal: i=1; a=rsa-sha256; t=1610719973; cv=none; d=zohomail.com; s=zohoarc; b=XL0JkM39NSzMNSedyLfbG28mp3FdBmppKIsOqQT/Q7ScqgOF143oMf2GZTg4S4WgZ0zZPJ82dcpN9GY5CjXN1Ki9WQmK3Hs2O7cVsmtZFvSkEKWMCVXNxO2kPZw87paXbudrSl2Zzuudhdp9Mh/Ab5HlTG7J8DBI9vgoyoAjBYs= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1610719973; h=Content-Type:Content-Transfer-Encoding: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=H718X7EaPwQ+9ALw/fgmjk5PNjGvqpCUwaxuRvMzHxI=; b=juqEj4PaH9LKGinuHamJ3A5WXqfr1MSeB2zZIPZj4cQBuzpCN+uEOheQsGgrsG0YKpnqlTpGs5qk3FdX7FR8wRlXpVP+bkalF9a8u19JNmgRZBuPKuj2DboLbFGkyIJ8m/n/nXi7SlPUsWdplwe5EiCNgipy77hO5AwYgwWB7X0= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of redhat.com designates 216.205.24.124 as permitted sender) smtp.mailfrom=libvir-list-bounces@redhat.com; dmarc=pass header.from= (p=none dis=none) header.from= Return-Path: Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [216.205.24.124]) by mx.zohomail.com with SMTPS id 1610719973251716.1125384812234; Fri, 15 Jan 2021 06:12:53 -0800 (PST) Received: from mimecast-mx01.redhat.com (mimecast-mx01.redhat.com [209.132.183.4]) (Using TLS) by relay.mimecast.com with ESMTP id us-mta-529-4fWY-BBzOGCM-5RddrF-jA-1; Fri, 15 Jan 2021 09:12:49 -0500 Received: from smtp.corp.redhat.com (int-mx07.intmail.prod.int.phx2.redhat.com [10.5.11.22]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mimecast-mx01.redhat.com (Postfix) with ESMTPS id 3E9F78066E3; Fri, 15 Jan 2021 14:12:43 +0000 (UTC) Received: from colo-mx.corp.redhat.com (colo-mx01.intmail.prod.int.phx2.redhat.com [10.5.11.20]) by smtp.corp.redhat.com (Postfix) with ESMTPS id 1248C10429F8; Fri, 15 Jan 2021 14:12:43 +0000 (UTC) Received: from lists01.pubmisc.prod.ext.phx2.redhat.com (lists01.pubmisc.prod.ext.phx2.redhat.com [10.5.19.33]) by colo-mx.corp.redhat.com (Postfix) with ESMTP id D05B61809CA0; Fri, 15 Jan 2021 14:12:42 +0000 (UTC) Received: from smtp.corp.redhat.com (int-mx02.intmail.prod.int.phx2.redhat.com [10.5.11.12]) by lists01.pubmisc.prod.ext.phx2.redhat.com (8.13.8/8.13.8) with ESMTP id 10FECROb025934 for ; Fri, 15 Jan 2021 09:12:27 -0500 Received: by smtp.corp.redhat.com (Postfix) id A5C2760C6B; Fri, 15 Jan 2021 14:12:27 +0000 (UTC) Received: from localhost.localdomain (unknown [10.40.194.52]) by smtp.corp.redhat.com (Postfix) with ESMTP id F30B060BF3 for ; Fri, 15 Jan 2021 14:12:26 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1610719972; h=from:from:sender:sender:reply-to:subject:subject:date:date: message-id:message-id:to:to:cc:mime-version:mime-version: content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references:list-id:list-help: list-unsubscribe:list-subscribe:list-post; bh=H718X7EaPwQ+9ALw/fgmjk5PNjGvqpCUwaxuRvMzHxI=; b=f6Xc0zmzYHFVamm5BnuspqWmGnQxjZwA3Hl3wwNUD+Llq9NqQKT9OjZkKuZDuV4dmZwI2H q/X+o5OiJf6bwhM6gYS+xehb/ZGUDY7x3lrKIuq0cjYEjIxJGO515mqqF8pZiMymKz6O34 kEtKUoSsUhfoh9mBW31R8do+HSrlFBA= X-MC-Unique: 4fWY-BBzOGCM-5RddrF-jA-1 From: Michal Privoznik To: libvir-list@redhat.com Subject: [PATCH 2/6] conf: Introduce virtio-pmem model Date: Fri, 15 Jan 2021 15:12:16 +0100 Message-Id: <34dd4dae4fd93ab93f6a54cf6964824cebbeb21a.1610719802.git.mprivozn@redhat.com> In-Reply-To: References: MIME-Version: 1.0 X-Scanned-By: MIMEDefang 2.79 on 10.5.11.12 X-loop: libvir-list@redhat.com X-BeenThere: libvir-list@redhat.com X-Mailman-Version: 2.1.12 Precedence: junk List-Id: Development discussions about the libvirt library & tools List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: libvir-list-bounces@redhat.com Errors-To: libvir-list-bounces@redhat.com X-Scanned-By: MIMEDefang 2.84 on 10.5.11.22 Authentication-Results: relay.mimecast.com; auth=pass smtp.auth=CUSA124A263 smtp.mailfrom=libvir-list-bounces@redhat.com X-Mimecast-Spam-Score: 0 X-Mimecast-Originator: redhat.com Content-Transfer-Encoding: quoted-printable X-ZohoMail-DKIM: pass (identity @redhat.com) Content-Type: text/plain; charset="utf-8" The virtio-pmem is a virtio variant of NVDIMM and just like NVDIMM virtio-pmem also allows accessing host pages bypassing guest page cache. The difference is that if a regular file is used to back guest's NVDIMM (model=3D'nvdimm') the persistence of guest writes might not be guaranteed while with virtio-pmem it is. To express this new model at domain XML level, I've chosen the following: /tmp/virtio_pmem 524288
Another difference between NVDIMM and virtio-pmem is that while the former supports NUMA node locality the latter doesn't. And also, the latter goes onto PCI bus and not into a DIMM module. Signed-off-by: Michal Privoznik Reviewed-by: Daniel Henrique Barboza --- docs/formatdomain.rst | 29 ++++-- docs/schemas/domaincommon.rng | 1 + src/conf/domain_conf.c | 41 ++++++++- src/conf/domain_conf.h | 3 +- src/conf/domain_validate.c | 40 ++++++++- src/qemu/qemu_command.c | 1 + src/qemu/qemu_domain.c | 25 ++++++ src/qemu/qemu_domain_address.c | 88 +++++++++++++++---- src/qemu/qemu_domain_address.h | 3 +- src/qemu/qemu_hotplug.c | 2 +- src/qemu/qemu_validate.c | 8 ++ src/security/security_apparmor.c | 1 + src/security/security_dac.c | 2 + src/security/security_selinux.c | 2 + .../memory-hotplug-virtio-pmem.xml | 53 +++++++++++ ...mory-hotplug-virtio-pmem.x86_64-latest.xml | 1 + tests/qemuxml2xmltest.c | 1 + 17 files changed, 274 insertions(+), 27 deletions(-) create mode 100644 tests/qemuxml2argvdata/memory-hotplug-virtio-pmem.xml create mode 120000 tests/qemuxml2xmloutdata/memory-hotplug-virtio-pmem.x86= _64-latest.xml diff --git a/docs/formatdomain.rst b/docs/formatdomain.rst index 6100b88e99..dd197d8f6a 100644 --- a/docs/formatdomain.rst +++ b/docs/formatdomain.rst @@ -7257,20 +7257,30 @@ Example: usage of the memory devices + + + /tmp/virtio_pmem + + + 524288 + + ... =20 ``model`` Provide ``dimm`` to add a virtual DIMM module to the guest. :since:`Sin= ce - 1.2.14` Provide ``nvdimm`` model adds a Non-Volatile DIMM module. - :since:`Since 3.2.0` + 1.2.14` Provide ``nvdimm`` model that adds a Non-Volatile DIMM module. + :since:`Since 3.2.0` Provide ``virtio-pmem`` model to add a paravirtual= ized + persistent memory device. :since:`Since 7.1.0` =20 ``access`` An optional attribute ``access`` ( :since:`since 3.2.0` ) that provides capability to fine tune mapping of the memory on per module basis. Valu= es are the same as `Memory Backing <#elementsMemoryBacking>`__: ``shared`` and ``private``. For ``nvdimm`` model, if using real NVDIMM DAX device as - backend, ``shared`` is required. + backend, ``shared`` is required. For ``virtio-pmem`` model ``shared`` is + required. =20 ``discard`` An optional attribute ``discard`` ( :since:`since 4.4.0` ) that provides @@ -7299,9 +7309,9 @@ Example: usage of the memory devices This element can be used to override the default set of NUMA nodes w= here the memory would be allocated. =20 - For model ``nvdimm`` this element is mandatory. The mandatory child ele= ment - ``path`` represents a path in the host that backs the nvdimm module in = the - guest. The following optional elements may be used: + For model ``nvdimm`` the ``source`` element is mandatory. The mandatory + child element ``path`` represents a path in the host that backs the nvd= imm + module in the guest. The following optional elements may be used: =20 ``alignsize`` The ``alignsize`` element defines the page size alignment used to mm= ap the @@ -7315,6 +7325,13 @@ Example: usage of the memory devices to guarantee the persistence of writes to the vNVDIMM backend, then = use the ``pmem`` element in order to utilize the feature. :since:`Since = 5.0.0` =20 + For model ``virtio-pmem`` the ``source`` element is mandatory. The foll= owing + optional elements may be used: + + ``path`` + Represents a path in the host that backs the virtio memory module in = the + guest. It is mandatory. + ``target`` The mandatory ``target`` element configures the placement and sizing of= the added memory from the perspective of the guest. diff --git a/docs/schemas/domaincommon.rng b/docs/schemas/domaincommon.rng index 7dc419bcc3..a4bddcf132 100644 --- a/docs/schemas/domaincommon.rng +++ b/docs/schemas/domaincommon.rng @@ -6019,6 +6019,7 @@ dimm nvdimm + virtio-pmem diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c index 01b7187637..ff3b7cbfc8 100644 --- a/src/conf/domain_conf.c +++ b/src/conf/domain_conf.c @@ -1309,6 +1309,7 @@ VIR_ENUM_IMPL(virDomainMemoryModel, "", "dimm", "nvdimm", + "virtio-pmem", ); =20 VIR_ENUM_IMPL(virDomainShmemModel, @@ -5331,6 +5332,28 @@ virDomainVsockDefPostParse(virDomainVsockDefPtr vsoc= k) } =20 =20 +static int +virDomainMemoryDefPostParse(virDomainMemoryDefPtr mem) +{ + switch (mem->model) { + case VIR_DOMAIN_MEMORY_MODEL_VIRTIO_PMEM: + /* Virtio-pmem mandates shared access so that guest writes get + * reflected in the underlying file. */ + if (mem->access =3D=3D VIR_DOMAIN_MEMORY_ACCESS_DEFAULT) + mem->access =3D VIR_DOMAIN_MEMORY_ACCESS_SHARED; + break; + + case VIR_DOMAIN_MEMORY_MODEL_NVDIMM: + case VIR_DOMAIN_MEMORY_MODEL_DIMM: + case VIR_DOMAIN_MEMORY_MODEL_NONE: + case VIR_DOMAIN_MEMORY_MODEL_LAST: + break; + } + + return 0; +} + + static int virDomainDeviceDefPostParseCommon(virDomainDeviceDefPtr dev, const virDomainDef *def, @@ -5376,6 +5399,10 @@ virDomainDeviceDefPostParseCommon(virDomainDeviceDef= Ptr dev, ret =3D 0; break; =20 + case VIR_DOMAIN_DEVICE_MEMORY: + ret =3D virDomainMemoryDefPostParse(dev->data.memory); + break; + case VIR_DOMAIN_DEVICE_LEASE: case VIR_DOMAIN_DEVICE_FS: case VIR_DOMAIN_DEVICE_INPUT: @@ -5390,7 +5417,6 @@ virDomainDeviceDefPostParseCommon(virDomainDeviceDefP= tr dev, case VIR_DOMAIN_DEVICE_SHMEM: case VIR_DOMAIN_DEVICE_TPM: case VIR_DOMAIN_DEVICE_PANIC: - case VIR_DOMAIN_DEVICE_MEMORY: case VIR_DOMAIN_DEVICE_IOMMU: case VIR_DOMAIN_DEVICE_AUDIO: ret =3D 0; @@ -15310,6 +15336,10 @@ virDomainMemorySourceDefParseXML(xmlNodePtr node, =20 break; =20 + case VIR_DOMAIN_MEMORY_MODEL_VIRTIO_PMEM: + def->nvdimmPath =3D virXPathString("string(./path)", ctxt); + break; + case VIR_DOMAIN_MEMORY_MODEL_NONE: case VIR_DOMAIN_MEMORY_MODEL_LAST: break; @@ -17194,6 +17224,11 @@ virDomainMemoryFindByDefInternal(virDomainDefPtr d= ef, continue; break; =20 + case VIR_DOMAIN_MEMORY_MODEL_VIRTIO_PMEM: + if (STRNEQ(tmp->nvdimmPath, mem->nvdimmPath)) + continue; + break; + case VIR_DOMAIN_MEMORY_MODEL_NONE: case VIR_DOMAIN_MEMORY_MODEL_LAST: break; @@ -26486,6 +26521,10 @@ virDomainMemorySourceDefFormat(virBufferPtr buf, virBufferAddLit(&childBuf, "\n"); break; =20 + case VIR_DOMAIN_MEMORY_MODEL_VIRTIO_PMEM: + virBufferEscapeString(&childBuf, "%s\n", def->nvdimmP= ath); + break; + case VIR_DOMAIN_MEMORY_MODEL_NONE: case VIR_DOMAIN_MEMORY_MODEL_LAST: break; diff --git a/src/conf/domain_conf.h b/src/conf/domain_conf.h index ec43bbe186..f59d972c85 100644 --- a/src/conf/domain_conf.h +++ b/src/conf/domain_conf.h @@ -2307,6 +2307,7 @@ typedef enum { VIR_DOMAIN_MEMORY_MODEL_NONE, VIR_DOMAIN_MEMORY_MODEL_DIMM, /* dimm hotpluggable memory device */ VIR_DOMAIN_MEMORY_MODEL_NVDIMM, /* nvdimm memory device */ + VIR_DOMAIN_MEMORY_MODEL_VIRTIO_PMEM, /* virtio-pmem memory device */ =20 VIR_DOMAIN_MEMORY_MODEL_LAST } virDomainMemoryModel; @@ -2318,7 +2319,7 @@ struct _virDomainMemoryDef { /* source */ virBitmapPtr sourceNodes; unsigned long long pagesize; /* kibibytes */ - char *nvdimmPath; + char *nvdimmPath; /* valid for NVDIMM an VIRTIO_PMEM */ unsigned long long alignsize; /* kibibytes; valid only for NVDIMM */ bool nvdimmPmem; /* valid only for NVDIMM */ =20 diff --git a/src/conf/domain_validate.c b/src/conf/domain_validate.c index 988aff8dd7..ecef22c31c 100644 --- a/src/conf/domain_validate.c +++ b/src/conf/domain_validate.c @@ -1389,7 +1389,8 @@ static int virDomainMemoryDefValidate(const virDomainMemoryDef *mem, const virDomainDef *def) { - if (mem->model =3D=3D VIR_DOMAIN_MEMORY_MODEL_NVDIMM) { + switch (mem->model) { + case VIR_DOMAIN_MEMORY_MODEL_NVDIMM: if (!mem->nvdimmPath) { virReportError(VIR_ERR_XML_DETAIL, "%s", _("path is required for model 'nvdimm'")); @@ -1407,6 +1408,43 @@ virDomainMemoryDefValidate(const virDomainMemoryDef = *mem, _("label size is required for NVDIMM device")); return -1; } + break; + + case VIR_DOMAIN_MEMORY_MODEL_VIRTIO_PMEM: + if (!mem->nvdimmPath) { + virReportError(VIR_ERR_XML_DETAIL, + _("path is required for model '%s'"), + virDomainMemoryModelTypeToString(mem->model)); + return -1; + } + + if (mem->discard =3D=3D VIR_TRISTATE_BOOL_YES) { + virReportError(VIR_ERR_CONFIG_UNSUPPORTED, + _("discard is not supported for model '%s'"), + virDomainMemoryModelTypeToString(mem->model)); + return -1; + } + + if (mem->access !=3D VIR_DOMAIN_MEMORY_ACCESS_SHARED) { + virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s", + _("shared access mode required for virtio-pmem = device")); + return -1; + } + + if (mem->targetNode !=3D -1) { + virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s", + _("virtio-pmem does not support NUMA nodes")); + return -1; + } + + case VIR_DOMAIN_MEMORY_MODEL_DIMM: + break; + + case VIR_DOMAIN_MEMORY_MODEL_NONE: + case VIR_DOMAIN_MEMORY_MODEL_LAST: + default: + virReportEnumRangeError(virDomainMemoryModel, mem->model); + return -1; } =20 return 0; diff --git a/src/qemu/qemu_command.c b/src/qemu/qemu_command.c index 6f970a3128..6a4ad6c412 100644 --- a/src/qemu/qemu_command.c +++ b/src/qemu/qemu_command.c @@ -3325,6 +3325,7 @@ qemuBuildMemoryDeviceStr(const virDomainDef *def, return NULL; break; =20 + case VIR_DOMAIN_MEMORY_MODEL_VIRTIO_PMEM: case VIR_DOMAIN_MEMORY_MODEL_NONE: case VIR_DOMAIN_MEMORY_MODEL_LAST: break; diff --git a/src/qemu/qemu_domain.c b/src/qemu/qemu_domain.c index 0765dc72d2..dd79cfd9d9 100644 --- a/src/qemu/qemu_domain.c +++ b/src/qemu/qemu_domain.c @@ -8605,6 +8605,8 @@ static int qemuDomainDefValidateMemoryHotplugDevice(const virDomainMemoryDef *mem, const virDomainDef *def) { + bool needsNuma =3D true; + switch (mem->model) { case VIR_DOMAIN_MEMORY_MODEL_DIMM: case VIR_DOMAIN_MEMORY_MODEL_NVDIMM: @@ -8640,11 +8642,34 @@ qemuDomainDefValidateMemoryHotplugDevice(const virD= omainMemoryDef *mem, } break; =20 + case VIR_DOMAIN_MEMORY_MODEL_VIRTIO_PMEM: + if (mem->info.type !=3D VIR_DOMAIN_DEVICE_ADDRESS_TYPE_PCI && + mem->info.type !=3D VIR_DOMAIN_DEVICE_ADDRESS_TYPE_NONE) { + virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s", + _("only 'pci' addresses are supported for the " + "virtio-pmem device")); + return -1; + } + + /* virtio-pmem doesn't have .node attribute. */ + needsNuma =3D false; + break; + case VIR_DOMAIN_MEMORY_MODEL_NONE: case VIR_DOMAIN_MEMORY_MODEL_LAST: return -1; } =20 + if (needsNuma && + virDomainNumaGetNodeCount(def->numa) !=3D 0) { + if (mem->targetNode =3D=3D -1) { + virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s", + _("target NUMA node needs to be specified for " + "memory device")); + return -1; + } + } + return 0; } =20 diff --git a/src/qemu/qemu_domain_address.c b/src/qemu/qemu_domain_address.c index f0ba318cc8..d40edadb4d 100644 --- a/src/qemu/qemu_domain_address.c +++ b/src/qemu/qemu_domain_address.c @@ -313,11 +313,11 @@ qemuDomainPrimeVirtioDeviceAddresses(virDomainDefPtr = def, virDomainDeviceAddressType type) { /* - declare address-less virtio devices to be of address type 'type' - disks, networks, videos, consoles, controllers, memballoon and rng - in this order - if type is ccw filesystem and vsock devices are declared to be of - address type ccw + Declare address-less virtio devices to be of address type 'type' + disks, networks, videos, consoles, controllers, hostdevs, memballoo= n, + rngs and memories in this order. + If type is ccw filesystem and vsock devices are declared to be of + address type ccw. */ size_t i; =20 @@ -379,6 +379,12 @@ qemuDomainPrimeVirtioDeviceAddresses(virDomainDefPtr d= ef, def->rngs[i]->info.type =3D type; } =20 + for (i =3D 0; i < def->nmems; i++) { + if (def->mems[i]->model =3D=3D VIR_DOMAIN_MEMORY_MODEL_VIRTIO_PMEM= && + def->mems[i]->info.type =3D=3D VIR_DOMAIN_DEVICE_ADDRESS_TYPE_= NONE) + def->mems[i]->info.type =3D type; + } + if (type =3D=3D VIR_DOMAIN_DEVICE_ADDRESS_TYPE_CCW) { for (i =3D 0; i < def->nfss; i++) { if (def->fss[i]->info.type =3D=3D VIR_DOMAIN_DEVICE_ADDRESS_TY= PE_NONE) @@ -1005,11 +1011,23 @@ qemuDomainDeviceCalculatePCIConnectFlags(virDomainD= eviceDefPtr dev, } break; =20 + case VIR_DOMAIN_DEVICE_MEMORY: + switch (dev->data.memory->model) { + case VIR_DOMAIN_MEMORY_MODEL_VIRTIO_PMEM: + return virtioFlags; + + case VIR_DOMAIN_MEMORY_MODEL_NONE: + case VIR_DOMAIN_MEMORY_MODEL_DIMM: + case VIR_DOMAIN_MEMORY_MODEL_NVDIMM: + case VIR_DOMAIN_MEMORY_MODEL_LAST: + return 0; + } + break; + /* These devices don't ever connect with PCI */ case VIR_DOMAIN_DEVICE_NVRAM: case VIR_DOMAIN_DEVICE_TPM: case VIR_DOMAIN_DEVICE_PANIC: - case VIR_DOMAIN_DEVICE_MEMORY: case VIR_DOMAIN_DEVICE_HUB: case VIR_DOMAIN_DEVICE_REDIRDEV: case VIR_DOMAIN_DEVICE_SMARTCARD: @@ -2420,6 +2438,17 @@ qemuDomainAssignDevicePCISlots(virDomainDefPtr def, return -1; } =20 + for (i =3D 0; i < def->nmems; i++) { + virDomainMemoryDefPtr mem =3D def->mems[i]; + + if (mem->model !=3D VIR_DOMAIN_MEMORY_MODEL_VIRTIO_PMEM || + !virDeviceInfoPCIAddressIsWanted(&mem->info)) + continue; + + if (qemuDomainPCIAddressReserveNextAddr(addrs, &mem->info) < 0) + return -1; + } + return 0; } =20 @@ -3067,19 +3096,32 @@ qemuAssignMemoryDeviceSlot(virDomainMemoryDefPtr me= m, =20 =20 int -qemuDomainAssignMemoryDeviceSlot(virDomainDefPtr def, +qemuDomainAssignMemoryDeviceSlot(virQEMUDriverPtr driver, + virDomainObjPtr vm, virDomainMemoryDefPtr mem) { - virBitmapPtr slotmap =3D NULL; - int ret; + g_autoptr(virBitmap) slotmap =3D NULL; + virDomainDeviceDef dev =3D {.type =3D VIR_DOMAIN_DEVICE_MEMORY, .data.= memory =3D mem}; =20 - if (!(slotmap =3D qemuDomainGetMemorySlotMap(def))) - return -1; + switch (mem->model) { + case VIR_DOMAIN_MEMORY_MODEL_DIMM: + case VIR_DOMAIN_MEMORY_MODEL_NVDIMM: + if (!(slotmap =3D qemuDomainGetMemorySlotMap(vm->def))) + return -1; =20 - ret =3D qemuAssignMemoryDeviceSlot(mem, slotmap); + return qemuAssignMemoryDeviceSlot(mem, slotmap); + break; =20 - virBitmapFree(slotmap); - return ret; + case VIR_DOMAIN_MEMORY_MODEL_VIRTIO_PMEM: + return qemuDomainEnsurePCIAddress(vm, &dev, driver); + break; + + case VIR_DOMAIN_MEMORY_MODEL_NONE: + case VIR_DOMAIN_MEMORY_MODEL_LAST: + break; + } + + return 0; } =20 =20 @@ -3097,8 +3139,22 @@ qemuDomainAssignMemorySlots(virDomainDefPtr def) return -1; =20 for (i =3D 0; i < def->nmems; i++) { - if (qemuAssignMemoryDeviceSlot(def->mems[i], slotmap) < 0) - goto cleanup; + virDomainMemoryDefPtr mem =3D def->mems[i]; + + switch (mem->model) { + case VIR_DOMAIN_MEMORY_MODEL_DIMM: + case VIR_DOMAIN_MEMORY_MODEL_NVDIMM: + if (qemuAssignMemoryDeviceSlot(def->mems[i], slotmap) < 0) + goto cleanup; + break; + + case VIR_DOMAIN_MEMORY_MODEL_VIRTIO_PMEM: + /* handled in qemuDomainAssignPCIAddresses() */ + break; + case VIR_DOMAIN_MEMORY_MODEL_NONE: + case VIR_DOMAIN_MEMORY_MODEL_LAST: + break; + } } =20 ret =3D 0; diff --git a/src/qemu/qemu_domain_address.h b/src/qemu/qemu_domain_address.h index 7ef3308246..20a46160d5 100644 --- a/src/qemu/qemu_domain_address.h +++ b/src/qemu/qemu_domain_address.h @@ -56,7 +56,8 @@ void qemuDomainFillDeviceIsolationGroup(virDomainDefPtr d= ef, void qemuDomainReleaseDeviceAddress(virDomainObjPtr vm, virDomainDeviceInfoPtr info); =20 -int qemuDomainAssignMemoryDeviceSlot(virDomainDefPtr def, +int qemuDomainAssignMemoryDeviceSlot(virQEMUDriverPtr driver, + virDomainObjPtr vm, virDomainMemoryDefPtr mem); =20 int qemuDomainEnsureVirtioAddress(bool *releaseAddr, diff --git a/src/qemu/qemu_hotplug.c b/src/qemu/qemu_hotplug.c index f336a90c8e..0096e8bf64 100644 --- a/src/qemu/qemu_hotplug.c +++ b/src/qemu/qemu_hotplug.c @@ -2412,7 +2412,7 @@ qemuDomainAttachMemory(virQEMUDriverPtr driver, if (qemuDomainDefValidateMemoryHotplug(vm->def, mem) < 0) goto cleanup; =20 - if (qemuDomainAssignMemoryDeviceSlot(vm->def, mem) < 0) + if (qemuDomainAssignMemoryDeviceSlot(driver, vm, mem) < 0) goto cleanup; =20 /* in cases where we are using a VM with aliases generated according t= o the diff --git a/src/qemu/qemu_validate.c b/src/qemu/qemu_validate.c index eadf3af8b3..a060bd98ba 100644 --- a/src/qemu/qemu_validate.c +++ b/src/qemu/qemu_validate.c @@ -4624,6 +4624,14 @@ qemuValidateDomainDeviceDefMemory(virDomainMemoryDef= Ptr mem, } break; =20 + case VIR_DOMAIN_MEMORY_MODEL_VIRTIO_PMEM: + if (!virQEMUCapsGet(qemuCaps, QEMU_CAPS_DEVICE_VIRTIO_PMEM_PCI)) { + virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s", + _("virtio-pmem isn't supported by this QEMU bin= ary")); + return -1; + } + break; + case VIR_DOMAIN_MEMORY_MODEL_NONE: case VIR_DOMAIN_MEMORY_MODEL_LAST: break; diff --git a/src/security/security_apparmor.c b/src/security/security_appar= mor.c index 1b035cce2f..1d828ce0d8 100644 --- a/src/security/security_apparmor.c +++ b/src/security/security_apparmor.c @@ -690,6 +690,7 @@ AppArmorSetMemoryLabel(virSecurityManagerPtr mgr, return -1; } return reload_profile(mgr, def, mem->nvdimmPath, true); + case VIR_DOMAIN_MEMORY_MODEL_VIRTIO_PMEM: case VIR_DOMAIN_MEMORY_MODEL_NONE: case VIR_DOMAIN_MEMORY_MODEL_DIMM: case VIR_DOMAIN_MEMORY_MODEL_LAST: diff --git a/src/security/security_dac.c b/src/security/security_dac.c index 4f4a0a069e..0acdc2a52d 100644 --- a/src/security/security_dac.c +++ b/src/security/security_dac.c @@ -1892,6 +1892,7 @@ virSecurityDACRestoreMemoryLabel(virSecurityManagerPt= r mgr, ret =3D virSecurityDACRestoreFileLabel(mgr, mem->nvdimmPath); break; =20 + case VIR_DOMAIN_MEMORY_MODEL_VIRTIO_PMEM: case VIR_DOMAIN_MEMORY_MODEL_DIMM: case VIR_DOMAIN_MEMORY_MODEL_LAST: case VIR_DOMAIN_MEMORY_MODEL_NONE: @@ -2074,6 +2075,7 @@ virSecurityDACSetMemoryLabel(virSecurityManagerPtr mg= r, user, group, true); break; =20 + case VIR_DOMAIN_MEMORY_MODEL_VIRTIO_PMEM: case VIR_DOMAIN_MEMORY_MODEL_DIMM: case VIR_DOMAIN_MEMORY_MODEL_LAST: case VIR_DOMAIN_MEMORY_MODEL_NONE: diff --git a/src/security/security_selinux.c b/src/security/security_selinu= x.c index 2fc6ef2616..bbffbccb17 100644 --- a/src/security/security_selinux.c +++ b/src/security/security_selinux.c @@ -1581,6 +1581,7 @@ virSecuritySELinuxSetMemoryLabel(virSecurityManagerPt= r mgr, return -1; break; =20 + case VIR_DOMAIN_MEMORY_MODEL_VIRTIO_PMEM: case VIR_DOMAIN_MEMORY_MODEL_NONE: case VIR_DOMAIN_MEMORY_MODEL_DIMM: case VIR_DOMAIN_MEMORY_MODEL_LAST: @@ -1608,6 +1609,7 @@ virSecuritySELinuxRestoreMemoryLabel(virSecurityManag= erPtr mgr, ret =3D virSecuritySELinuxRestoreFileLabel(mgr, mem->nvdimmPath, t= rue); break; =20 + case VIR_DOMAIN_MEMORY_MODEL_VIRTIO_PMEM: case VIR_DOMAIN_MEMORY_MODEL_DIMM: case VIR_DOMAIN_MEMORY_MODEL_NONE: case VIR_DOMAIN_MEMORY_MODEL_LAST: diff --git a/tests/qemuxml2argvdata/memory-hotplug-virtio-pmem.xml b/tests/= qemuxml2argvdata/memory-hotplug-virtio-pmem.xml new file mode 100644 index 0000000000..23729ed799 --- /dev/null +++ b/tests/qemuxml2argvdata/memory-hotplug-virtio-pmem.xml @@ -0,0 +1,53 @@ + + QEMUGuest1 + c7a5fdbd-edaf-9455-926a-d65c16db1809 + 1099511627776 + 2095104 + 2095104 + 2 + + hvm + + + + qemu64 + + + + + + + destroy + restart + destroy + + /usr/bin/qemu-system-i386 + + + + +
+ + +
+ + +
+ + + + + +
+ + + + /tmp/virtio_pmem + + + 524288 + +
+ + + diff --git a/tests/qemuxml2xmloutdata/memory-hotplug-virtio-pmem.x86_64-lat= est.xml b/tests/qemuxml2xmloutdata/memory-hotplug-virtio-pmem.x86_64-latest= .xml new file mode 120000 index 0000000000..904425abe4 --- /dev/null +++ b/tests/qemuxml2xmloutdata/memory-hotplug-virtio-pmem.x86_64-latest.xml @@ -0,0 +1 @@ +../qemuxml2argvdata/memory-hotplug-virtio-pmem.xml \ No newline at end of file diff --git a/tests/qemuxml2xmltest.c b/tests/qemuxml2xmltest.c index ed8e22bdb1..9553a8a4f8 100644 --- a/tests/qemuxml2xmltest.c +++ b/tests/qemuxml2xmltest.c @@ -1261,6 +1261,7 @@ mymain(void) QEMU_CAPS_OBJECT_MEMORY_FILE, QEMU_CAPS_DEVICE_NVDIMM, QEMU_CAPS_LAST); + DO_TEST_CAPS_LATEST("memory-hotplug-virtio-pmem"); =20 DO_TEST("net-udp", NONE); =20 --=20 2.26.2 From nobody Fri May 3 08:30:58 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zohomail.com: domain of redhat.com designates 63.128.21.124 as permitted sender) client-ip=63.128.21.124; envelope-from=libvir-list-bounces@redhat.com; helo=us-smtp-delivery-124.mimecast.com; Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of redhat.com designates 63.128.21.124 as permitted sender) smtp.mailfrom=libvir-list-bounces@redhat.com; dmarc=pass(p=none dis=none) header.from=redhat.com ARC-Seal: i=1; a=rsa-sha256; t=1610719984; cv=none; d=zohomail.com; s=zohoarc; b=f7HSRD76LZLJWQzpYd9kvETYrpS4ZZ5dcH++aoOmyWGQrRFNY6L1278NguxjEEkv0EmrrJP+QVfu+eDf8CZAMXyBYFJ31xwFg/pAD5cE8oTE8dcV5o+IUyMBFIqM8zYbhpyZck7ei5+wY91BHCd0JXTwO+flhhDWEdY3UxBoo8s= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1610719984; h=Content-Type:Content-Transfer-Encoding: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=5vufR2bIm/33cj5EVk+NNbebWDv80IvrNLtvNgh3KFU=; b=Hn4r9KwBrTGzSGKHOqq9jNx3h6YixyCq8SCLtA2UwfOQWejX5roy40rXMINT2AKbG9sp9wYcX/A7jlBJ8HnPYUpuw+i/AYYFSfJ2udMtNOFqAAfElTNMhCM1k3eErvs0ATRmibEUjybVuLjqM5jJt2OSSYhKIlG5w2pww7dwRVA= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of redhat.com designates 63.128.21.124 as permitted sender) smtp.mailfrom=libvir-list-bounces@redhat.com; dmarc=pass header.from= (p=none dis=none) header.from= Return-Path: Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [63.128.21.124]) by mx.zohomail.com with SMTPS id 1610719984368570.5289471796558; Fri, 15 Jan 2021 06:13:04 -0800 (PST) Received: from mimecast-mx01.redhat.com (mimecast-mx01.redhat.com [209.132.183.4]) (Using TLS) by relay.mimecast.com with ESMTP id us-mta-529-ybtCVGD3OtWdLTgiFdxAKw-1; Fri, 15 Jan 2021 09:12:49 -0500 Received: from smtp.corp.redhat.com (int-mx05.intmail.prod.int.phx2.redhat.com [10.5.11.15]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mimecast-mx01.redhat.com (Postfix) with ESMTPS id 2AE0C1922963; Fri, 15 Jan 2021 14:12:43 +0000 (UTC) Received: from colo-mx.corp.redhat.com (colo-mx02.intmail.prod.int.phx2.redhat.com [10.5.11.21]) by smtp.corp.redhat.com (Postfix) with ESMTPS id 062B666A08; Fri, 15 Jan 2021 14:12:43 +0000 (UTC) Received: from lists01.pubmisc.prod.ext.phx2.redhat.com (lists01.pubmisc.prod.ext.phx2.redhat.com [10.5.19.33]) by colo-mx.corp.redhat.com (Postfix) with ESMTP id C32A84EA6C; Fri, 15 Jan 2021 14:12:42 +0000 (UTC) Received: from smtp.corp.redhat.com (int-mx02.intmail.prod.int.phx2.redhat.com [10.5.11.12]) by lists01.pubmisc.prod.ext.phx2.redhat.com (8.13.8/8.13.8) with ESMTP id 10FECSNg025939 for ; Fri, 15 Jan 2021 09:12:28 -0500 Received: by smtp.corp.redhat.com (Postfix) id 810BB60C6B; Fri, 15 Jan 2021 14:12:28 +0000 (UTC) Received: from localhost.localdomain (unknown [10.40.194.52]) by smtp.corp.redhat.com (Postfix) with ESMTP id 037C860BF3 for ; Fri, 15 Jan 2021 14:12:27 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1610719983; h=from:from:sender:sender:reply-to:subject:subject:date:date: message-id:message-id:to:to:cc:mime-version:mime-version: content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references:list-id:list-help: list-unsubscribe:list-subscribe:list-post; bh=5vufR2bIm/33cj5EVk+NNbebWDv80IvrNLtvNgh3KFU=; b=JBxtHB6D+N/5W0DITuMGY2FP9B9InFwztXXfMFp0SiQz4NUozX5Fpxwg+ITfibV/BhgAXp uIc251HKprAxPpxy4Ct2UW+geJn2StM+cfhJLexgtzjQl6lLjDW//BJVDOO8ti8pfprVIq KpfTXhgkiQjwkpTQEXxGPs0IXvskZ2Y= X-MC-Unique: ybtCVGD3OtWdLTgiFdxAKw-1 From: Michal Privoznik To: libvir-list@redhat.com Subject: [PATCH 3/6] security: Relabel virtio-pmem Date: Fri, 15 Jan 2021 15:12:17 +0100 Message-Id: In-Reply-To: References: MIME-Version: 1.0 X-Scanned-By: MIMEDefang 2.79 on 10.5.11.12 X-loop: libvir-list@redhat.com X-BeenThere: libvir-list@redhat.com X-Mailman-Version: 2.1.12 Precedence: junk List-Id: Development discussions about the libvirt library & tools List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: libvir-list-bounces@redhat.com Errors-To: libvir-list-bounces@redhat.com X-Scanned-By: MIMEDefang 2.79 on 10.5.11.15 Authentication-Results: relay.mimecast.com; auth=pass smtp.auth=CUSA124A263 smtp.mailfrom=libvir-list-bounces@redhat.com X-Mimecast-Spam-Score: 0 X-Mimecast-Originator: redhat.com Content-Transfer-Encoding: quoted-printable X-ZohoMail-DKIM: pass (identity @redhat.com) Content-Type: text/plain; charset="utf-8" Just like with NVDIMM model, we have to relabel the path to virtio-pmem so that QEMU can access it. Signed-off-by: Michal Privoznik Reviewed-by: Daniel Henrique Barboza --- src/security/security_apparmor.c | 2 +- src/security/security_dac.c | 4 ++-- src/security/security_selinux.c | 4 ++-- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/src/security/security_apparmor.c b/src/security/security_appar= mor.c index 1d828ce0d8..29f0956d22 100644 --- a/src/security/security_apparmor.c +++ b/src/security/security_apparmor.c @@ -683,6 +683,7 @@ AppArmorSetMemoryLabel(virSecurityManagerPtr mgr, { switch (mem->model) { case VIR_DOMAIN_MEMORY_MODEL_NVDIMM: + case VIR_DOMAIN_MEMORY_MODEL_VIRTIO_PMEM: if (!virFileExists(mem->nvdimmPath)) { virReportError(VIR_ERR_INTERNAL_ERROR, _("%s: \'%s\' does not exist"), @@ -690,7 +691,6 @@ AppArmorSetMemoryLabel(virSecurityManagerPtr mgr, return -1; } return reload_profile(mgr, def, mem->nvdimmPath, true); - case VIR_DOMAIN_MEMORY_MODEL_VIRTIO_PMEM: case VIR_DOMAIN_MEMORY_MODEL_NONE: case VIR_DOMAIN_MEMORY_MODEL_DIMM: case VIR_DOMAIN_MEMORY_MODEL_LAST: diff --git a/src/security/security_dac.c b/src/security/security_dac.c index 0acdc2a52d..71d58758c4 100644 --- a/src/security/security_dac.c +++ b/src/security/security_dac.c @@ -1889,10 +1889,10 @@ virSecurityDACRestoreMemoryLabel(virSecurityManager= Ptr mgr, =20 switch (mem->model) { case VIR_DOMAIN_MEMORY_MODEL_NVDIMM: + case VIR_DOMAIN_MEMORY_MODEL_VIRTIO_PMEM: ret =3D virSecurityDACRestoreFileLabel(mgr, mem->nvdimmPath); break; =20 - case VIR_DOMAIN_MEMORY_MODEL_VIRTIO_PMEM: case VIR_DOMAIN_MEMORY_MODEL_DIMM: case VIR_DOMAIN_MEMORY_MODEL_LAST: case VIR_DOMAIN_MEMORY_MODEL_NONE: @@ -2063,6 +2063,7 @@ virSecurityDACSetMemoryLabel(virSecurityManagerPtr mg= r, =20 switch (mem->model) { case VIR_DOMAIN_MEMORY_MODEL_NVDIMM: + case VIR_DOMAIN_MEMORY_MODEL_VIRTIO_PMEM: seclabel =3D virDomainDefGetSecurityLabelDef(def, SECURITY_DAC_NAM= E); if (seclabel && !seclabel->relabel) return 0; @@ -2075,7 +2076,6 @@ virSecurityDACSetMemoryLabel(virSecurityManagerPtr mg= r, user, group, true); break; =20 - case VIR_DOMAIN_MEMORY_MODEL_VIRTIO_PMEM: case VIR_DOMAIN_MEMORY_MODEL_DIMM: case VIR_DOMAIN_MEMORY_MODEL_LAST: case VIR_DOMAIN_MEMORY_MODEL_NONE: diff --git a/src/security/security_selinux.c b/src/security/security_selinu= x.c index bbffbccb17..3563dbfb86 100644 --- a/src/security/security_selinux.c +++ b/src/security/security_selinux.c @@ -1572,6 +1572,7 @@ virSecuritySELinuxSetMemoryLabel(virSecurityManagerPt= r mgr, =20 switch (mem->model) { case VIR_DOMAIN_MEMORY_MODEL_NVDIMM: + case VIR_DOMAIN_MEMORY_MODEL_VIRTIO_PMEM: seclabel =3D virDomainDefGetSecurityLabelDef(def, SECURITY_SELINUX= _NAME); if (!seclabel || !seclabel->relabel) return 0; @@ -1581,7 +1582,6 @@ virSecuritySELinuxSetMemoryLabel(virSecurityManagerPt= r mgr, return -1; break; =20 - case VIR_DOMAIN_MEMORY_MODEL_VIRTIO_PMEM: case VIR_DOMAIN_MEMORY_MODEL_NONE: case VIR_DOMAIN_MEMORY_MODEL_DIMM: case VIR_DOMAIN_MEMORY_MODEL_LAST: @@ -1602,6 +1602,7 @@ virSecuritySELinuxRestoreMemoryLabel(virSecurityManag= erPtr mgr, =20 switch (mem->model) { case VIR_DOMAIN_MEMORY_MODEL_NVDIMM: + case VIR_DOMAIN_MEMORY_MODEL_VIRTIO_PMEM: seclabel =3D virDomainDefGetSecurityLabelDef(def, SECURITY_SELINUX= _NAME); if (!seclabel || !seclabel->relabel) return 0; @@ -1609,7 +1610,6 @@ virSecuritySELinuxRestoreMemoryLabel(virSecurityManag= erPtr mgr, ret =3D virSecuritySELinuxRestoreFileLabel(mgr, mem->nvdimmPath, t= rue); break; =20 - case VIR_DOMAIN_MEMORY_MODEL_VIRTIO_PMEM: case VIR_DOMAIN_MEMORY_MODEL_DIMM: case VIR_DOMAIN_MEMORY_MODEL_NONE: case VIR_DOMAIN_MEMORY_MODEL_LAST: --=20 2.26.2 From nobody Fri May 3 08:30:58 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zohomail.com: domain of redhat.com designates 63.128.21.124 as permitted sender) client-ip=63.128.21.124; envelope-from=libvir-list-bounces@redhat.com; helo=us-smtp-delivery-124.mimecast.com; Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of redhat.com designates 63.128.21.124 as permitted sender) smtp.mailfrom=libvir-list-bounces@redhat.com; dmarc=pass(p=none dis=none) header.from=redhat.com ARC-Seal: i=1; a=rsa-sha256; t=1610719975; cv=none; d=zohomail.com; s=zohoarc; b=NhTZrOXnL+YvfvJBR1MzFMH/YyXVwz1QY94u2oVdSQDWsgkq9/L/C0jw03ncfosh4BIgtGzeDTYqp4hXGflYt6wxusuBIaDeQLZ1k2p2KpLgw4yJRlp1OFZxe62xnz/V7dGn3iVfhWwqD/P0CLKnDqxD4u7GE8PhjDdraB8J8hA= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1610719975; h=Content-Type:Content-Transfer-Encoding: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=NUQak3/OtAq3NOueiNcUUobX/Yam33tMK0Icqb5w5N4=; b=L75+XClxhYguUAgTQlk+JrK3lSgqrqcLdUsuw14kuJxAAlT5Fb8cq+upxhTFIkoda7B3C0obItW5QRTHYzTZIuq7G+W7J2fm9hn9VFH669+PIXLV89qk80KjiBNUIt/UYNsVbxc/OUJkUsZpaT3kofaRoR+Zpbs4GmNCD8MIwpQ= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of redhat.com designates 63.128.21.124 as permitted sender) smtp.mailfrom=libvir-list-bounces@redhat.com; dmarc=pass header.from= (p=none dis=none) header.from= Return-Path: Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [63.128.21.124]) by mx.zohomail.com with SMTPS id 1610719975726820.6736687426427; Fri, 15 Jan 2021 06:12:55 -0800 (PST) Received: from mimecast-mx01.redhat.com (mimecast-mx01.redhat.com [209.132.183.4]) (Using TLS) by relay.mimecast.com with ESMTP id us-mta-460-N-JhRjqjM4mCOJi86iu3Cw-1; Fri, 15 Jan 2021 09:12:51 -0500 Received: from smtp.corp.redhat.com (int-mx03.intmail.prod.int.phx2.redhat.com [10.5.11.13]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mimecast-mx01.redhat.com (Postfix) with ESMTPS id DE9EF1922964; Fri, 15 Jan 2021 14:12:45 +0000 (UTC) Received: from colo-mx.corp.redhat.com (colo-mx01.intmail.prod.int.phx2.redhat.com [10.5.11.20]) by smtp.corp.redhat.com (Postfix) with ESMTPS id BDE88779D1; Fri, 15 Jan 2021 14:12:45 +0000 (UTC) Received: from lists01.pubmisc.prod.ext.phx2.redhat.com (lists01.pubmisc.prod.ext.phx2.redhat.com [10.5.19.33]) by colo-mx.corp.redhat.com (Postfix) with ESMTP id 84F461809CA3; Fri, 15 Jan 2021 14:12:45 +0000 (UTC) Received: from smtp.corp.redhat.com (int-mx02.intmail.prod.int.phx2.redhat.com [10.5.11.12]) by lists01.pubmisc.prod.ext.phx2.redhat.com (8.13.8/8.13.8) with ESMTP id 10FECTZt025944 for ; Fri, 15 Jan 2021 09:12:29 -0500 Received: by smtp.corp.redhat.com (Postfix) id 5CF4260C6B; Fri, 15 Jan 2021 14:12:29 +0000 (UTC) Received: from localhost.localdomain (unknown [10.40.194.52]) by smtp.corp.redhat.com (Postfix) with ESMTP id D30D460BF3 for ; Fri, 15 Jan 2021 14:12:28 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1610719974; h=from:from:sender:sender:reply-to:subject:subject:date:date: message-id:message-id:to:to:cc:mime-version:mime-version: content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references:list-id:list-help: list-unsubscribe:list-subscribe:list-post; bh=NUQak3/OtAq3NOueiNcUUobX/Yam33tMK0Icqb5w5N4=; b=ehqnie1QEs13mBktfBwbnA9tr1oO8Jm5iAP94+c6QTUjuW+pj1pta6mduzpdMJUn47ica0 lmd6OAOYScOcwxaNpTiQDkwZ7//iNedWqEa5AXF+EkMzRD+TNtkanhCVrIUzuyu9f8UHhU U96vfRlyzi2AqvL/wFOH18WjISp0ct0= X-MC-Unique: N-JhRjqjM4mCOJi86iu3Cw-1 From: Michal Privoznik To: libvir-list@redhat.com Subject: [PATCH 4/6] qemu: Allow virtio-pmem in CGroups Date: Fri, 15 Jan 2021 15:12:18 +0100 Message-Id: In-Reply-To: References: MIME-Version: 1.0 X-Scanned-By: MIMEDefang 2.79 on 10.5.11.12 X-loop: libvir-list@redhat.com X-BeenThere: libvir-list@redhat.com X-Mailman-Version: 2.1.12 Precedence: junk List-Id: Development discussions about the libvirt library & tools List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: libvir-list-bounces@redhat.com Errors-To: libvir-list-bounces@redhat.com X-Scanned-By: MIMEDefang 2.79 on 10.5.11.13 Authentication-Results: relay.mimecast.com; auth=pass smtp.auth=CUSA124A263 smtp.mailfrom=libvir-list-bounces@redhat.com X-Mimecast-Spam-Score: 0 X-Mimecast-Originator: redhat.com Content-Transfer-Encoding: quoted-printable X-ZohoMail-DKIM: pass (identity @redhat.com) Content-Type: text/plain; charset="utf-8" Some users might want to have virtio-pmem backed by a block device in which case we have to allow the device in CGroups. Signed-off-by: Michal Privoznik Reviewed-by: Daniel Henrique Barboza --- src/qemu/qemu_cgroup.c | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/qemu/qemu_cgroup.c b/src/qemu/qemu_cgroup.c index f7146a71c9..cb8112ea90 100644 --- a/src/qemu/qemu_cgroup.c +++ b/src/qemu/qemu_cgroup.c @@ -502,7 +502,8 @@ qemuSetupMemoryDevicesCgroup(virDomainObjPtr vm, qemuDomainObjPrivatePtr priv =3D vm->privateData; int rv; =20 - if (mem->model !=3D VIR_DOMAIN_MEMORY_MODEL_NVDIMM) + if (mem->model !=3D VIR_DOMAIN_MEMORY_MODEL_NVDIMM && + mem->model !=3D VIR_DOMAIN_MEMORY_MODEL_VIRTIO_PMEM) return 0; =20 if (!virCgroupHasController(priv->cgroup, VIR_CGROUP_CONTROLLER_DEVICE= S)) @@ -525,7 +526,8 @@ qemuTeardownMemoryDevicesCgroup(virDomainObjPtr vm, qemuDomainObjPrivatePtr priv =3D vm->privateData; int rv; =20 - if (mem->model !=3D VIR_DOMAIN_MEMORY_MODEL_NVDIMM) + if (mem->model !=3D VIR_DOMAIN_MEMORY_MODEL_NVDIMM && + mem->model !=3D VIR_DOMAIN_MEMORY_MODEL_VIRTIO_PMEM) return 0; =20 if (!virCgroupHasController(priv->cgroup, VIR_CGROUP_CONTROLLER_DEVICE= S)) --=20 2.26.2 From nobody Fri May 3 08:30:58 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zohomail.com: domain of redhat.com designates 216.205.24.124 as permitted sender) client-ip=216.205.24.124; envelope-from=libvir-list-bounces@redhat.com; helo=us-smtp-delivery-124.mimecast.com; Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of redhat.com designates 216.205.24.124 as permitted sender) smtp.mailfrom=libvir-list-bounces@redhat.com; dmarc=pass(p=none dis=none) header.from=redhat.com ARC-Seal: i=1; a=rsa-sha256; t=1610719986; cv=none; d=zohomail.com; s=zohoarc; b=bF0S0aUrEjb92MVyw1fSWmaNulanJojf0eBxvU6QQJ+6h+nbJ/Ykq7mp7sOtL8JNKQ6U+yYAeGf1nBGR4+htgnqyTbYpZUQy3+FqE9IRoKh1cbNLDWyKQcztsxwKu1LVvjpGmuX1VKf/wazs9eNJLJhUSsleGO2lMP/bLEusWg8= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1610719986; h=Content-Type:Content-Transfer-Encoding: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=FtaBEs2Hde2Cvu9dkf4+dH46nBup26dyNYwx5/DbNCs=; b=cqrdd3OWXjXGohghSzNwOv3m2JuoMTg8F1bkb1ZmdZaXDF/WZPSEeKLddGmFKO2pQkbZdWjpVzBeZxD+0RmAvlwDnBR5CE+9yGeAip173a14TBaqbTDucsg5SJtoh1CNu2NHyI/NnklUPFlBSFAklzZ9Xnb5Gb/P/Ux2jDS0NlI= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of redhat.com designates 216.205.24.124 as permitted sender) smtp.mailfrom=libvir-list-bounces@redhat.com; dmarc=pass header.from= (p=none dis=none) header.from= Return-Path: Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [216.205.24.124]) by mx.zohomail.com with SMTPS id 161071998651186.08862349211074; Fri, 15 Jan 2021 06:13:06 -0800 (PST) Received: from mimecast-mx01.redhat.com (mimecast-mx01.redhat.com [209.132.183.4]) (Using TLS) by relay.mimecast.com with ESMTP id us-mta-130-Qb_I5mVxOkCI6qjNQk4nTQ-1; Fri, 15 Jan 2021 09:12:54 -0500 Received: from smtp.corp.redhat.com (int-mx02.intmail.prod.int.phx2.redhat.com [10.5.11.12]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mimecast-mx01.redhat.com (Postfix) with ESMTPS id E8798192296A; Fri, 15 Jan 2021 14:12:47 +0000 (UTC) Received: from colo-mx.corp.redhat.com (colo-mx01.intmail.prod.int.phx2.redhat.com [10.5.11.20]) by smtp.corp.redhat.com (Postfix) with ESMTPS id C6BFC60C7C; Fri, 15 Jan 2021 14:12:47 +0000 (UTC) Received: from lists01.pubmisc.prod.ext.phx2.redhat.com (lists01.pubmisc.prod.ext.phx2.redhat.com [10.5.19.33]) by colo-mx.corp.redhat.com (Postfix) with ESMTP id 91A771809CA2; Fri, 15 Jan 2021 14:12:47 +0000 (UTC) Received: from smtp.corp.redhat.com (int-mx02.intmail.prod.int.phx2.redhat.com [10.5.11.12]) by lists01.pubmisc.prod.ext.phx2.redhat.com (8.13.8/8.13.8) with ESMTP id 10FECUX2025952 for ; Fri, 15 Jan 2021 09:12:30 -0500 Received: by smtp.corp.redhat.com (Postfix) id 37A1A60C6E; Fri, 15 Jan 2021 14:12:30 +0000 (UTC) Received: from localhost.localdomain (unknown [10.40.194.52]) by smtp.corp.redhat.com (Postfix) with ESMTP id AE6CC60BF3 for ; Fri, 15 Jan 2021 14:12:29 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1610719985; h=from:from:sender:sender:reply-to:subject:subject:date:date: message-id:message-id:to:to:cc:mime-version:mime-version: content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references:list-id:list-help: list-unsubscribe:list-subscribe:list-post; bh=FtaBEs2Hde2Cvu9dkf4+dH46nBup26dyNYwx5/DbNCs=; b=aH6Bripgr1QL9sDy1HqkV7qOU9LoEph+YX8HVWn6Gj3H8jdD0/9ZBQPmHcgPyyH1QcImU/ gcDsTcb6CTG6tFjxzS85RwSKRm4KGylyG+TRtP4u8OQ4oFBZlDk8tO78Vp0/qqFMYGMSjv dR6ruCUI4G/Jzeeemwt+gxywtBJ3pXc= X-MC-Unique: Qb_I5mVxOkCI6qjNQk4nTQ-1 From: Michal Privoznik To: libvir-list@redhat.com Subject: [PATCH 5/6] qemu: Create virtio-pmem in namespace Date: Fri, 15 Jan 2021 15:12:19 +0100 Message-Id: In-Reply-To: References: MIME-Version: 1.0 X-Scanned-By: MIMEDefang 2.79 on 10.5.11.12 X-loop: libvir-list@redhat.com X-BeenThere: libvir-list@redhat.com X-Mailman-Version: 2.1.12 Precedence: junk List-Id: Development discussions about the libvirt library & tools List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: libvir-list-bounces@redhat.com Errors-To: libvir-list-bounces@redhat.com X-Scanned-By: MIMEDefang 2.79 on 10.5.11.12 Authentication-Results: relay.mimecast.com; auth=pass smtp.auth=CUSA124A263 smtp.mailfrom=libvir-list-bounces@redhat.com X-Mimecast-Spam-Score: 0 X-Mimecast-Originator: redhat.com Content-Transfer-Encoding: quoted-printable X-ZohoMail-DKIM: pass (identity @redhat.com) Content-Type: text/plain; charset="utf-8" Some users might want to have virtio-pmem backed by a block device in which case we have to create the device in the domain private namespace. Signed-off-by: Michal Privoznik Reviewed-by: Daniel Henrique Barboza --- src/qemu/qemu_namespace.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/qemu/qemu_namespace.c b/src/qemu/qemu_namespace.c index 1002455ddf..35fe177bef 100644 --- a/src/qemu/qemu_namespace.c +++ b/src/qemu/qemu_namespace.c @@ -351,7 +351,8 @@ static int qemuDomainSetupMemory(virDomainMemoryDefPtr mem, char ***paths) { - if (mem->model !=3D VIR_DOMAIN_MEMORY_MODEL_NVDIMM) + if (mem->model !=3D VIR_DOMAIN_MEMORY_MODEL_NVDIMM && + mem->model !=3D VIR_DOMAIN_MEMORY_MODEL_VIRTIO_PMEM) return 0; =20 return virStringListAdd(paths, mem->nvdimmPath); --=20 2.26.2 From nobody Fri May 3 08:30:58 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zohomail.com: domain of redhat.com designates 63.128.21.124 as permitted sender) client-ip=63.128.21.124; envelope-from=libvir-list-bounces@redhat.com; helo=us-smtp-delivery-124.mimecast.com; Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of redhat.com designates 63.128.21.124 as permitted sender) smtp.mailfrom=libvir-list-bounces@redhat.com; dmarc=pass(p=none dis=none) header.from=redhat.com ARC-Seal: i=1; a=rsa-sha256; t=1610719984; cv=none; d=zohomail.com; s=zohoarc; b=FzV96Htl6DcOz2nQJsewsp8XJE91yoB9pg8GQDvOPz2bOqTF0NUQwUbQqZD1HmRcEHs2sCCcdgTXg+WnBhqLosvZVm2GwsM0wyXV9upkED+hjJEo2OpRBufNRUIBSM+JVytHwB5GV8YQR/RP9leh8G2aqWch8WJPd+aV82Clk40= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1610719984; h=Content-Type:Content-Transfer-Encoding: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=We3cUTnPPT4zSDibpQsnt2y32UrwjSBJg5tLuZOrIVg=; b=a1nN0J4TI6vLhlVygLIxsnr1ox6iGgu0CMtYJ2FQS+3GqGLu8yvxqnZjR7yibkT+9rTZV9+rFNUrz0dnFUVRiujT/fd/8RgwfRGZk171IX2A+3xcbU4g7C03ZM4/zr0YcB5/ex9jaFh7gao51YQS/9gNVcAVSgod8SMRAju9xq8= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of redhat.com designates 63.128.21.124 as permitted sender) smtp.mailfrom=libvir-list-bounces@redhat.com; dmarc=pass header.from= (p=none dis=none) header.from= Return-Path: Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [63.128.21.124]) by mx.zohomail.com with SMTPS id 1610719984164368.8370735336109; Fri, 15 Jan 2021 06:13:04 -0800 (PST) Received: from mimecast-mx01.redhat.com (mimecast-mx01.redhat.com [209.132.183.4]) (Using TLS) by relay.mimecast.com with ESMTP id us-mta-207-0dGvhowePgSzWwFY0MWtvQ-1; Fri, 15 Jan 2021 09:12:57 -0500 Received: from smtp.corp.redhat.com (int-mx05.intmail.prod.int.phx2.redhat.com [10.5.11.15]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mimecast-mx01.redhat.com (Postfix) with ESMTPS id B20A6192296B; Fri, 15 Jan 2021 14:12:50 +0000 (UTC) Received: from colo-mx.corp.redhat.com (colo-mx01.intmail.prod.int.phx2.redhat.com [10.5.11.20]) by smtp.corp.redhat.com (Postfix) with ESMTPS id 910F1629DA; Fri, 15 Jan 2021 14:12:50 +0000 (UTC) Received: from lists01.pubmisc.prod.ext.phx2.redhat.com (lists01.pubmisc.prod.ext.phx2.redhat.com [10.5.19.33]) by colo-mx.corp.redhat.com (Postfix) with ESMTP id 5CAA01809CA8; Fri, 15 Jan 2021 14:12:50 +0000 (UTC) Received: from smtp.corp.redhat.com (int-mx02.intmail.prod.int.phx2.redhat.com [10.5.11.12]) by lists01.pubmisc.prod.ext.phx2.redhat.com (8.13.8/8.13.8) with ESMTP id 10FECVBu025967 for ; Fri, 15 Jan 2021 09:12:31 -0500 Received: by smtp.corp.redhat.com (Postfix) id 13DB860C6E; Fri, 15 Jan 2021 14:12:31 +0000 (UTC) Received: from localhost.localdomain (unknown [10.40.194.52]) by smtp.corp.redhat.com (Postfix) with ESMTP id 89A5B60BF3 for ; Fri, 15 Jan 2021 14:12:30 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1610719982; h=from:from:sender:sender:reply-to:subject:subject:date:date: message-id:message-id:to:to:cc:mime-version:mime-version: content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references:list-id:list-help: list-unsubscribe:list-subscribe:list-post; bh=We3cUTnPPT4zSDibpQsnt2y32UrwjSBJg5tLuZOrIVg=; b=awpzfR9qDjbSv1sJ+wK+vHluAXR0iwSNL/GAPcitKTjKjzQ/bqelFVAPOK03UFuhWZ0fzf 6+Ae8CvWBCexVuuTV7l7wORKTiMJV1SWQCFinNBXUcTN2VT8C1TGpv80+B0Ili1hUADku+ CZRpbnm64qzP4yD/W20i6Bxml4jI8+s= X-MC-Unique: 0dGvhowePgSzWwFY0MWtvQ-1 From: Michal Privoznik To: libvir-list@redhat.com Subject: [PATCH 6/6] qemu: Build command line for virtio-pmem Date: Fri, 15 Jan 2021 15:12:20 +0100 Message-Id: <2e692e2b61222229c8cdeab6dc52ff398f1a696b.1610719802.git.mprivozn@redhat.com> In-Reply-To: References: MIME-Version: 1.0 X-Scanned-By: MIMEDefang 2.79 on 10.5.11.12 X-loop: libvir-list@redhat.com X-BeenThere: libvir-list@redhat.com X-Mailman-Version: 2.1.12 Precedence: junk List-Id: Development discussions about the libvirt library & tools List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: libvir-list-bounces@redhat.com Errors-To: libvir-list-bounces@redhat.com X-Scanned-By: MIMEDefang 2.79 on 10.5.11.15 Authentication-Results: relay.mimecast.com; auth=pass smtp.auth=CUSA124A263 smtp.mailfrom=libvir-list-bounces@redhat.com X-Mimecast-Spam-Score: 0 X-Mimecast-Originator: redhat.com Content-Transfer-Encoding: quoted-printable X-ZohoMail-DKIM: pass (identity @redhat.com) Content-Type: text/plain; charset="utf-8" Now we have everything prepared for generating the command line. The device alias prefix was chosen to be 'virtiopmem'. Since virtio-pmem-pci device goes onto PCI bus generating device alias must have been changed slightly because qemuAssignDeviceMemoryAlias() might have used DIMM slot number to generate the alias. This obviously won't work and thus the "old" way (which includes qemuDomainDeviceAliasIndex()) must be used. Resolves: https://bugzilla.redhat.com/show_bug.cgi?id=3D1735375 Signed-off-by: Michal Privoznik Reviewed-by: Daniel Henrique Barboza --- src/qemu/qemu_alias.c | 58 ++++++++++----- src/qemu/qemu_command.c | 72 ++++++++++--------- ...ory-hotplug-virtio-pmem.x86_64-latest.args | 45 ++++++++++++ tests/qemuxml2argvtest.c | 1 + 4 files changed, 126 insertions(+), 50 deletions(-) create mode 100644 tests/qemuxml2argvdata/memory-hotplug-virtio-pmem.x86_6= 4-latest.args diff --git a/src/qemu/qemu_alias.c b/src/qemu/qemu_alias.c index dcb6c7156d..b3492d6e85 100644 --- a/src/qemu/qemu_alias.c +++ b/src/qemu/qemu_alias.c @@ -466,6 +466,29 @@ qemuAssignDeviceRNGAlias(virDomainDefPtr def, } =20 =20 +static int +qemuDeviceMemoryGetAliasID(virDomainDefPtr def, + virDomainMemoryDefPtr mem, + bool oldAlias, + const char *prefix) +{ + size_t i; + int maxidx =3D 0; + + /* virtio-pmem goes onto PCI bus and thus DIMM address is not valid */ + if (!oldAlias && mem->model !=3D VIR_DOMAIN_MEMORY_MODEL_VIRTIO_PMEM) + return mem->info.addr.dimm.slot; + + for (i =3D 0; i < def->nmems; i++) { + int idx; + if ((idx =3D qemuDomainDeviceAliasIndex(&def->mems[i]->info, prefi= x)) >=3D maxidx) + maxidx =3D idx + 1; + } + + return maxidx; +} + + /** * qemuAssignDeviceMemoryAlias: * @def: domain definition. Necessary only if @oldAlias is true. @@ -483,29 +506,32 @@ qemuAssignDeviceMemoryAlias(virDomainDefPtr def, virDomainMemoryDefPtr mem, bool oldAlias) { - size_t i; - int maxidx =3D 0; - int idx; - const char *prefix; + const char *prefix =3D NULL; + int idx =3D 0; =20 if (mem->info.alias) return 0; =20 - if (mem->model =3D=3D VIR_DOMAIN_MEMORY_MODEL_DIMM) + switch (mem->model) { + case VIR_DOMAIN_MEMORY_MODEL_DIMM: prefix =3D "dimm"; - else + break; + case VIR_DOMAIN_MEMORY_MODEL_NVDIMM: prefix =3D "nvdimm"; - - if (oldAlias) { - for (i =3D 0; i < def->nmems; i++) { - if ((idx =3D qemuDomainDeviceAliasIndex(&def->mems[i]->info, p= refix)) >=3D maxidx) - maxidx =3D idx + 1; - } - } else { - maxidx =3D mem->info.addr.dimm.slot; + break; + case VIR_DOMAIN_MEMORY_MODEL_VIRTIO_PMEM: + prefix =3D "virtiopmem"; + break; + case VIR_DOMAIN_MEMORY_MODEL_NONE: + case VIR_DOMAIN_MEMORY_MODEL_LAST: + default: + virReportEnumRangeError(virDomainMemoryModel, mem->model); + return -1; + break; } =20 - mem->info.alias =3D g_strdup_printf("%s%d", prefix, maxidx); + idx =3D qemuDeviceMemoryGetAliasID(def, mem, oldAlias, prefix); + mem->info.alias =3D g_strdup_printf("%s%d", prefix, idx); =20 return 0; } @@ -680,7 +706,7 @@ qemuAssignDeviceAliases(virDomainDefPtr def, virQEMUCap= sPtr qemuCaps) return -1; } for (i =3D 0; i < def->nmems; i++) { - if (qemuAssignDeviceMemoryAlias(NULL, def->mems[i], false) < 0) + if (qemuAssignDeviceMemoryAlias(def, def->mems[i], false) < 0) return -1; } if (def->vsock) { diff --git a/src/qemu/qemu_command.c b/src/qemu/qemu_command.c index 6a4ad6c412..64b189fd11 100644 --- a/src/qemu/qemu_command.c +++ b/src/qemu/qemu_command.c @@ -3087,8 +3087,9 @@ qemuBuildMemoryBackendProps(virJSONValuePtr *backendP= rops, if (mem->nvdimmPath) { memPath =3D g_strdup(mem->nvdimmPath); /* If the NVDIMM is a real device then there's nothing to prea= lloc. - * If anything, we would be only wearing off the device. */ - if (!mem->nvdimmPmem) + * If anything, we would be only wearing off the device. + * Simirarly, virtio-pmem-pci doesn't need prealloc either. */ + if (!mem->nvdimmPmem && mem->model !=3D VIR_DOMAIN_MEMORY_MODE= L_VIRTIO_PMEM) prealloc =3D true; } else if (useHugepage) { if (qemuGetDomainHupageMemPath(priv->driver, def, pagesize, &m= emPath) < 0) @@ -3282,7 +3283,7 @@ qemuBuildMemoryDeviceStr(const virDomainDef *def, virQEMUCapsPtr qemuCaps) { g_auto(virBuffer) buf =3D VIR_BUFFER_INITIALIZER; - const char *device; + const char *device =3D NULL; =20 if (!mem->info.alias) { virReportError(VIR_ERR_INTERNAL_ERROR, "%s", @@ -3291,47 +3292,50 @@ qemuBuildMemoryDeviceStr(const virDomainDef *def, } =20 switch (mem->model) { - case VIR_DOMAIN_MEMORY_MODEL_NVDIMM: case VIR_DOMAIN_MEMORY_MODEL_DIMM: - - if (mem->model =3D=3D VIR_DOMAIN_MEMORY_MODEL_DIMM) - device =3D "pc-dimm"; - else - device =3D "nvdimm"; - - virBufferAsprintf(&buf, "%s,", device); - - if (mem->targetNode >=3D 0) - virBufferAsprintf(&buf, "node=3D%d,", mem->targetNode); - - if (mem->labelsize) - virBufferAsprintf(&buf, "label-size=3D%llu,", mem->labelsize *= 1024); - - if (virUUIDIsValid(mem->uuid)) { - char uuidstr[VIR_UUID_STRING_BUFLEN]; - - virUUIDFormat(mem->uuid, uuidstr); - virBufferAsprintf(&buf, "uuid=3D%s,", uuidstr); - } - - if (mem->readonly) { - virBufferAddLit(&buf, "unarmed=3Don,"); - } - - virBufferAsprintf(&buf, "memdev=3Dmem%s,id=3D%s", - mem->info.alias, mem->info.alias); - - if (qemuBuildDeviceAddressStr(&buf, def, &mem->info, qemuCaps) < 0) - return NULL; + device =3D "pc-dimm"; + break; + case VIR_DOMAIN_MEMORY_MODEL_NVDIMM: + device =3D "nvdimm"; break; =20 case VIR_DOMAIN_MEMORY_MODEL_VIRTIO_PMEM: + device =3D "virtio-pmem-pci"; + break; + case VIR_DOMAIN_MEMORY_MODEL_NONE: case VIR_DOMAIN_MEMORY_MODEL_LAST: + default: + virReportEnumRangeError(virDomainMemoryModel, mem->model); + return NULL; break; + } + + virBufferAsprintf(&buf, "%s,", device); + + if (mem->targetNode >=3D 0) + virBufferAsprintf(&buf, "node=3D%d,", mem->targetNode); + + if (mem->labelsize) + virBufferAsprintf(&buf, "label-size=3D%llu,", mem->labelsize * 102= 4); + + if (virUUIDIsValid(mem->uuid)) { + char uuidstr[VIR_UUID_STRING_BUFLEN]; =20 + virUUIDFormat(mem->uuid, uuidstr); + virBufferAsprintf(&buf, "uuid=3D%s,", uuidstr); } =20 + if (mem->readonly) { + virBufferAddLit(&buf, "unarmed=3Don,"); + } + + virBufferAsprintf(&buf, "memdev=3Dmem%s,id=3D%s", + mem->info.alias, mem->info.alias); + + if (qemuBuildDeviceAddressStr(&buf, def, &mem->info, qemuCaps) < 0) + return NULL; + return virBufferContentAndReset(&buf); } =20 diff --git a/tests/qemuxml2argvdata/memory-hotplug-virtio-pmem.x86_64-lates= t.args b/tests/qemuxml2argvdata/memory-hotplug-virtio-pmem.x86_64-latest.ar= gs new file mode 100644 index 0000000000..e2f5097424 --- /dev/null +++ b/tests/qemuxml2argvdata/memory-hotplug-virtio-pmem.x86_64-latest.args @@ -0,0 +1,45 @@ +LC_ALL=3DC \ +PATH=3D/bin \ +HOME=3D/tmp/lib/domain--1-QEMUGuest1 \ +USER=3Dtest \ +LOGNAME=3Dtest \ +XDG_DATA_HOME=3D/tmp/lib/domain--1-QEMUGuest1/.local/share \ +XDG_CACHE_HOME=3D/tmp/lib/domain--1-QEMUGuest1/.cache \ +XDG_CONFIG_HOME=3D/tmp/lib/domain--1-QEMUGuest1/.config \ +QEMU_AUDIO_DRV=3Dnone \ +/usr/bin/qemu-system-i386 \ +-name guest=3DQEMUGuest1,debug-threads=3Don \ +-S \ +-object secret,id=3DmasterKey0,format=3Draw,\ +file=3D/tmp/lib/domain--1-QEMUGuest1/master-key.aes \ +-machine pc,accel=3Dkvm,usb=3Doff,dump-guest-core=3Doff \ +-cpu qemu64 \ +-m size=3D2095104k,slots=3D16,maxmem=3D1099511627776k \ +-overcommit mem-lock=3Doff \ +-smp 2,sockets=3D2,dies=3D1,cores=3D1,threads=3D1 \ +-object memory-backend-ram,id=3Dram-node0,size=3D2145386496 \ +-numa node,nodeid=3D0,cpus=3D0-1,memdev=3Dram-node0 \ +-object memory-backend-file,id=3Dmemvirtiopmem0,mem-path=3D/tmp/virtio_pme= m,\ +share=3Dyes,size=3D536870912 \ +-device virtio-pmem-pci,memdev=3Dmemvirtiopmem0,id=3Dvirtiopmem0,bus=3Dpci= .0,\ +addr=3D0x5 \ +-uuid c7a5fdbd-edaf-9455-926a-d65c16db1809 \ +-display none \ +-no-user-config \ +-nodefaults \ +-chardev socket,id=3Dcharmonitor,fd=3D1729,server,nowait \ +-mon chardev=3Dcharmonitor,id=3Dmonitor,mode=3Dcontrol \ +-rtc base=3Dutc \ +-no-shutdown \ +-no-acpi \ +-boot strict=3Don \ +-device piix3-usb-uhci,id=3Dusb,bus=3Dpci.0,addr=3D0x1.0x2 \ +-blockdev '{"driver":"host_device","filename":"/dev/HostVG/QEMUGuest1",\ +"node-name":"libvirt-1-storage","auto-read-only":true,"discard":"unmap"}' \ +-blockdev '{"node-name":"libvirt-1-format","read-only":false,"driver":"raw= ",\ +"file":"libvirt-1-storage"}' \ +-device ide-hd,bus=3Dide.0,unit=3D0,drive=3Dlibvirt-1-format,id=3Dide0-0-0= ,bootindex=3D1 \ +-device virtio-balloon-pci,id=3Dballoon0,bus=3Dpci.0,addr=3D0x3 \ +-sandbox on,obsolete=3Ddeny,elevateprivileges=3Ddeny,spawn=3Ddeny,\ +resourcecontrol=3Ddeny \ +-msg timestamp=3Don diff --git a/tests/qemuxml2argvtest.c b/tests/qemuxml2argvtest.c index 4a2ab6bec1..cf77224fc3 100644 --- a/tests/qemuxml2argvtest.c +++ b/tests/qemuxml2argvtest.c @@ -3053,6 +3053,7 @@ mymain(void) QEMU_CAPS_OBJECT_MEMORY_FILE, QEMU_CAPS_DEVICE_NVDIMM, QEMU_CAPS_LAST); + DO_TEST_CAPS_LATEST("memory-hotplug-virtio-pmem"); =20 DO_TEST("machine-aeskeywrap-on-caps", QEMU_CAPS_AES_KEY_WRAP, --=20 2.26.2