From nobody Fri May 10 06:44:03 2024 Delivered-To: importer@patchew.org Received-SPF: none (zohomail.com: 8.43.85.245 is neither permitted nor denied by domain of lists.libvirt.org) client-ip=8.43.85.245; envelope-from=devel-bounces@lists.libvirt.org; helo=lists.libvirt.org; Authentication-Results: mx.zohomail.com; spf=none (zohomail.com: 8.43.85.245 is neither permitted nor denied by domain of lists.libvirt.org) smtp.mailfrom=devel-bounces@lists.libvirt.org; dmarc=fail(p=none dis=none) header.from=redhat.com Return-Path: Received: from lists.libvirt.org (lists.libvirt.org [8.43.85.245]) by mx.zohomail.com with SMTPS id 1699271047941471.604187386627; Mon, 6 Nov 2023 03:44:07 -0800 (PST) Received: by lists.libvirt.org (Postfix, from userid 996) id CDC2A19D4; Mon, 6 Nov 2023 06:44:06 -0500 (EST) Received: from lists.libvirt.org (localhost [IPv6:::1]) by lists.libvirt.org (Postfix) with ESMTP id 680441717; Mon, 6 Nov 2023 06:39:16 -0500 (EST) Received: by lists.libvirt.org (Postfix, from userid 996) id 531C41970; Mon, 6 Nov 2023 06:38:50 -0500 (EST) Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.133.124]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by lists.libvirt.org (Postfix) with ESMTPS id 69CFE197A for ; Mon, 6 Nov 2023 06:38:48 -0500 (EST) Received: from mimecast-mx02.redhat.com (mimecast-mx02.redhat.com [66.187.233.88]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-98-XZhiTKi-MJKDDhPfqudHuQ-1; Mon, 06 Nov 2023 06:38:46 -0500 Received: from smtp.corp.redhat.com (int-mx05.intmail.prod.int.rdu2.redhat.com [10.11.54.5]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256) (No client certificate requested) by mimecast-mx02.redhat.com (Postfix) with ESMTPS id 862C88F9206 for ; Mon, 6 Nov 2023 11:38:46 +0000 (UTC) Received: from maggie.brq.redhat.com (unknown [10.43.3.102]) by smtp.corp.redhat.com (Postfix) with ESMTP id 141F4502B for ; Mon, 6 Nov 2023 11:38:45 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.4.4 (2020-01-24) on lists.libvirt.org X-Spam-Level: X-Spam-Status: No, score=-0.8 required=5.0 tests=HEADER_FROM_DIFFERENT_DOMAINS, MAILING_LIST_MULTI,RCVD_IN_DNSWL_NONE,RCVD_IN_MSPIKE_H3, RCVD_IN_MSPIKE_WL,SPF_HELO_NONE,T_SCC_BODY_TEXT_LINE autolearn=unavailable autolearn_force=no version=3.4.4 X-MC-Unique: XZhiTKi-MJKDDhPfqudHuQ-1 From: Michal Privoznik To: devel@lists.libvirt.org Subject: [PATCH 1/5] domain_validate: Move memdevice address conflict check into a separate function Date: Mon, 6 Nov 2023 12:38:23 +0100 Message-ID: <97525b8c651ec978443cce53d2b3cde8fa0e697f.1699270649.git.mprivozn@redhat.com> In-Reply-To: References: MIME-Version: 1.0 X-Scanned-By: MIMEDefang 3.4.1 on 10.11.54.5 X-Mimecast-Spam-Score: 0 X-Mimecast-Originator: redhat.com Message-ID-Hash: M72ZGJBR2VTBGEL5KCXVNL24H4HOTUT2 X-Message-ID-Hash: M72ZGJBR2VTBGEL5KCXVNL24H4HOTUT2 X-MailFrom: mprivozn@redhat.com X-Mailman-Rule-Misses: dmarc-mitigation; no-senders; approved; emergency; loop; banned-address; member-moderation; header-match-config-1; header-match-config-2; header-match-config-3; header-match-devel.lists.libvirt.org-0; nonmember-moderation; administrivia; implicit-dest; max-recipients; max-size; news-moderation; no-subject; suspicious-header X-Mailman-Version: 3.2.2 Precedence: list List-Id: Development discussions about the libvirt library & tools Archived-At: List-Archive: List-Help: List-Post: List-Subscribe: List-Unsubscribe: Content-Type: text/plain; charset="utf-8"; x-default="true" Content-Transfer-Encoding: quoted-printable X-ZM-MESSAGEID: 1699271049794100001 At the end of virDomainMemoryDefValidate() there's a code that checks whether two virtio-mem/virtio-pmem devices don't overlap. Separate this code into its own function (virDomainMemoryDefCheckConflict()). Signed-off-by: Michal Privoznik Reviewed-by: Peter Krempa --- src/conf/domain_validate.c | 147 ++++++++++++++++++++++--------------- 1 file changed, 86 insertions(+), 61 deletions(-) diff --git a/src/conf/domain_validate.c b/src/conf/domain_validate.c index bc3d00f89c..b4ffef919a 100644 --- a/src/conf/domain_validate.c +++ b/src/conf/domain_validate.c @@ -2217,15 +2217,96 @@ virDomainHostdevDefValidate(const virDomainHostdevD= ef *hostdev) } =20 =20 +static int +virDomainMemoryDefCheckConflict(const virDomainMemoryDef *mem, + const virDomainDef *def) +{ + unsigned long long thisStart =3D 0; + unsigned long long thisEnd =3D 0; + size_t i; + + switch (mem->model) { + case VIR_DOMAIN_MEMORY_MODEL_VIRTIO_PMEM: + thisStart =3D mem->target.virtio_pmem.address; + break; + case VIR_DOMAIN_MEMORY_MODEL_VIRTIO_MEM: + thisStart =3D mem->target.virtio_mem.address; + break; + case VIR_DOMAIN_MEMORY_MODEL_DIMM: + case VIR_DOMAIN_MEMORY_MODEL_NVDIMM: + case VIR_DOMAIN_MEMORY_MODEL_SGX_EPC: + case VIR_DOMAIN_MEMORY_MODEL_NONE: + case VIR_DOMAIN_MEMORY_MODEL_LAST: + break; + } + + if (thisStart =3D=3D 0) { + return 0; + } + + /* thisStart and thisEnd are in bytes, mem->size in kibibytes */ + thisEnd =3D thisStart + mem->size * 1024; + + for (i =3D 0; i < def->nmems; i++) { + const virDomainMemoryDef *other =3D def->mems[i]; + unsigned long long otherStart =3D 0; + + if (other =3D=3D mem) + continue; + + /* In case we're updating an existing memory device (e.g. virtio-m= em), + * then pointers will be different. But addresses and aliases are = the + * same. However, STREQ_NULLABLE() returns true if both strings are + * NULL which is not what we want. */ + if (virDomainDeviceInfoAddressIsEqual(&other->info, + &mem->info)) { + continue; + } + + if (mem->info.alias && + STREQ_NULLABLE(other->info.alias, + mem->info.alias)) { + continue; + } + + switch (other->model) { + case VIR_DOMAIN_MEMORY_MODEL_NONE: + case VIR_DOMAIN_MEMORY_MODEL_DIMM: + case VIR_DOMAIN_MEMORY_MODEL_NVDIMM: + case VIR_DOMAIN_MEMORY_MODEL_SGX_EPC: + case VIR_DOMAIN_MEMORY_MODEL_LAST: + continue; + break; + + case VIR_DOMAIN_MEMORY_MODEL_VIRTIO_PMEM: + otherStart =3D other->target.virtio_pmem.address; + break; + case VIR_DOMAIN_MEMORY_MODEL_VIRTIO_MEM: + otherStart =3D other->target.virtio_mem.address; + break; + } + + if (otherStart =3D=3D 0) + continue; + + if (thisStart <=3D otherStart && thisEnd > otherStart) { + virReportError(VIR_ERR_CONFIG_UNSUPPORTED, + _("memory device address [0x%1$llx:0x%2$llx] ov= erlaps with other memory device (0x%3$llx)"), + thisStart, thisEnd, otherStart); + return -1; + } + } + + return 0; +} + + static int virDomainMemoryDefValidate(const virDomainMemoryDef *mem, const virDomainDef *def) { const long pagesize =3D virGetSystemPageSize(); unsigned long long thpSize; - unsigned long long thisStart =3D 0; - unsigned long long thisEnd =3D 0; - size_t i; =20 /* Guest NUMA nodes are continuous and indexed from zero. */ if (mem->targetNode !=3D -1) { @@ -2307,7 +2388,6 @@ virDomainMemoryDefValidate(const virDomainMemoryDef *= mem, pagesize); return -1; } - thisStart =3D mem->target.virtio_pmem.address; break; =20 case VIR_DOMAIN_MEMORY_MODEL_VIRTIO_MEM: @@ -2351,7 +2431,6 @@ virDomainMemoryDefValidate(const virDomainMemoryDef *= mem, _("memory device address must be aligned to blo= cksize")); return -1; } - thisStart =3D mem->target.virtio_mem.address; break; =20 case VIR_DOMAIN_MEMORY_MODEL_DIMM: @@ -2373,62 +2452,8 @@ virDomainMemoryDefValidate(const virDomainMemoryDef = *mem, return -1; } =20 - if (thisStart =3D=3D 0) { - return 0; - } - - /* thisStart and thisEnd are in bytes, mem->size in kibibytes */ - thisEnd =3D thisStart + mem->size * 1024; - - for (i =3D 0; i < def->nmems; i++) { - const virDomainMemoryDef *other =3D def->mems[i]; - unsigned long long otherStart =3D 0; - - if (other =3D=3D mem) - continue; - - /* In case we're updating an existing memory device (e.g. virtio-m= em), - * then pointers will be different. But addresses and aliases are = the - * same. However, STREQ_NULLABLE() returns true if both strings are - * NULL which is not what we want. */ - if (virDomainDeviceInfoAddressIsEqual(&other->info, - &mem->info)) { - continue; - } - - if (mem->info.alias && - STREQ_NULLABLE(other->info.alias, - mem->info.alias)) { - continue; - } - - switch (other->model) { - case VIR_DOMAIN_MEMORY_MODEL_NONE: - case VIR_DOMAIN_MEMORY_MODEL_DIMM: - case VIR_DOMAIN_MEMORY_MODEL_NVDIMM: - case VIR_DOMAIN_MEMORY_MODEL_SGX_EPC: - case VIR_DOMAIN_MEMORY_MODEL_LAST: - continue; - break; - - case VIR_DOMAIN_MEMORY_MODEL_VIRTIO_PMEM: - otherStart =3D other->target.virtio_pmem.address; - break; - case VIR_DOMAIN_MEMORY_MODEL_VIRTIO_MEM: - otherStart =3D other->target.virtio_mem.address; - break; - } - - if (otherStart =3D=3D 0) - continue; - - if (thisStart <=3D otherStart && thisEnd > otherStart) { - virReportError(VIR_ERR_CONFIG_UNSUPPORTED, - _("memory device address [0x%1$llx:0x%2$llx] ov= erlaps with other memory device (0x%3$llx)"), - thisStart, thisEnd, otherStart); - return -1; - } - } + if (virDomainMemoryDefCheckConflict(mem, def) < 0) + return -1; =20 return 0; } --=20 2.41.0 _______________________________________________ Devel mailing list -- devel@lists.libvirt.org To unsubscribe send an email to devel-leave@lists.libvirt.org From nobody Fri May 10 06:44:03 2024 Delivered-To: importer@patchew.org Received-SPF: none (zohomail.com: 8.43.85.245 is neither permitted nor denied by domain of lists.libvirt.org) client-ip=8.43.85.245; envelope-from=devel-bounces@lists.libvirt.org; helo=lists.libvirt.org; Authentication-Results: mx.zohomail.com; spf=none (zohomail.com: 8.43.85.245 is neither permitted nor denied by domain of lists.libvirt.org) smtp.mailfrom=devel-bounces@lists.libvirt.org; dmarc=fail(p=none dis=none) header.from=redhat.com Return-Path: Received: from lists.libvirt.org (lists.libvirt.org [8.43.85.245]) by mx.zohomail.com with SMTPS id 1699270953398118.02417725550049; Mon, 6 Nov 2023 03:42:33 -0800 (PST) Received: by lists.libvirt.org (Postfix, from userid 996) id 036721A05; Mon, 6 Nov 2023 06:42:31 -0500 (EST) Received: from lists.libvirt.org (localhost [IPv6:::1]) by lists.libvirt.org (Postfix) with ESMTP id 394601A1E; Mon, 6 Nov 2023 06:39:06 -0500 (EST) Received: by lists.libvirt.org (Postfix, from userid 996) id 3883F197C; Mon, 6 Nov 2023 06:38:50 -0500 (EST) Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.129.124]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by lists.libvirt.org (Postfix) with ESMTPS id 9F1A118DD for ; Mon, 6 Nov 2023 06:38:49 -0500 (EST) Received: from mimecast-mx02.redhat.com (mimecast-mx02.redhat.com [66.187.233.88]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-523-HM792ewCOFGhkUwp6F0Arg-1; Mon, 06 Nov 2023 06:38:47 -0500 Received: from smtp.corp.redhat.com (int-mx05.intmail.prod.int.rdu2.redhat.com [10.11.54.5]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256) (No client certificate requested) by mimecast-mx02.redhat.com (Postfix) with ESMTPS id A5BA38F8F6C for ; Mon, 6 Nov 2023 11:38:47 +0000 (UTC) Received: from maggie.brq.redhat.com (unknown [10.43.3.102]) by smtp.corp.redhat.com (Postfix) with ESMTP id 507C610E45 for ; Mon, 6 Nov 2023 11:38:47 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.4.4 (2020-01-24) on lists.libvirt.org X-Spam-Level: X-Spam-Status: No, score=-0.8 required=5.0 tests=HEADER_FROM_DIFFERENT_DOMAINS, MAILING_LIST_MULTI,RCVD_IN_DNSWL_NONE,RCVD_IN_MSPIKE_H4, RCVD_IN_MSPIKE_WL,SPF_HELO_NONE,T_SCC_BODY_TEXT_LINE autolearn=unavailable autolearn_force=no version=3.4.4 X-MC-Unique: HM792ewCOFGhkUwp6F0Arg-1 From: Michal Privoznik To: devel@lists.libvirt.org Subject: [PATCH 2/5] qemuxml2argvdata: Extend memory-hotplug-virtio-mem-overlap-address.xml Date: Mon, 6 Nov 2023 12:38:25 +0100 Message-ID: In-Reply-To: References: MIME-Version: 1.0 X-Scanned-By: MIMEDefang 3.4.1 on 10.11.54.5 X-Mimecast-Spam-Score: 0 X-Mimecast-Originator: redhat.com Message-ID-Hash: YPLNM6KGA4MNJURDEZOI2YRRUCCAI2OV X-Message-ID-Hash: YPLNM6KGA4MNJURDEZOI2YRRUCCAI2OV X-MailFrom: mprivozn@redhat.com X-Mailman-Rule-Misses: dmarc-mitigation; no-senders; approved; emergency; loop; banned-address; member-moderation; header-match-config-1; header-match-config-2; header-match-config-3; header-match-devel.lists.libvirt.org-0; nonmember-moderation; administrivia; implicit-dest; max-recipients; max-size; news-moderation; no-subject; suspicious-header X-Mailman-Version: 3.2.2 Precedence: list List-Id: Development discussions about the libvirt library & tools Archived-At: List-Archive: List-Help: List-Post: List-Subscribe: List-Unsubscribe: Content-Type: text/plain; charset="utf-8"; x-default="true" Content-Transfer-Encoding: quoted-printable X-ZM-MESSAGEID: 1699270955226100005 This test case of qemuxml2argvtest is used to check whether we correctly identify overlapping memory devices. Well, so far we consider just virtio-mem and virtio-pmem devices, but this is about to change and be extended for other models too. Extend the test case now to de-clutter next commit. Signed-off-by: Michal Privoznik --- ...ory-hotplug-virtio-mem-overlap-address.xml | 19 ++++++++++++++++++- 1 file changed, 18 insertions(+), 1 deletion(-) diff --git a/tests/qemuxml2argvdata/memory-hotplug-virtio-mem-overlap-addre= ss.xml b/tests/qemuxml2argvdata/memory-hotplug-virtio-mem-overlap-address.x= ml index 65999ccd99..f64931c225 100644 --- a/tests/qemuxml2argvdata/memory-hotplug-virtio-mem-overlap-address.xml +++ b/tests/qemuxml2argvdata/memory-hotplug-virtio-mem-overlap-address.xml @@ -1,7 +1,7 @@ QEMUGuest1 c7a5fdbd-edaf-9455-926a-d65c16db1809 - 1099511627776 + 1099511627776 8388608 8388608 2 @@ -22,6 +22,23 @@ destroy /usr/bin/qemu-system-x86_64 + + + 131072 + 0 + +
+ + + + /tmp/nvdimm + + + 131072 + 0 + +
+ 1048576 --=20 2.41.0 _______________________________________________ Devel mailing list -- devel@lists.libvirt.org To unsubscribe send an email to devel-leave@lists.libvirt.org From nobody Fri May 10 06:44:03 2024 Delivered-To: importer@patchew.org Received-SPF: none (zohomail.com: 8.43.85.245 is neither permitted nor denied by domain of lists.libvirt.org) client-ip=8.43.85.245; envelope-from=devel-bounces@lists.libvirt.org; helo=lists.libvirt.org; Authentication-Results: mx.zohomail.com; spf=none (zohomail.com: 8.43.85.245 is neither permitted nor denied by domain of lists.libvirt.org) smtp.mailfrom=devel-bounces@lists.libvirt.org; dmarc=fail(p=none dis=none) header.from=redhat.com Return-Path: Received: from lists.libvirt.org (lists.libvirt.org [8.43.85.245]) by mx.zohomail.com with SMTPS id 1699271129468332.7088862964282; Mon, 6 Nov 2023 03:45:29 -0800 (PST) Received: by lists.libvirt.org (Postfix, from userid 996) id 6382319B7; Mon, 6 Nov 2023 06:45:28 -0500 (EST) Received: from lists.libvirt.org (localhost [IPv6:::1]) by lists.libvirt.org (Postfix) with ESMTP id C3CFB198E; Mon, 6 Nov 2023 06:39:24 -0500 (EST) Received: by lists.libvirt.org (Postfix, from userid 996) id 75916197F; Mon, 6 Nov 2023 06:38:51 -0500 (EST) Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.133.124]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by lists.libvirt.org (Postfix) with ESMTPS id 950501970 for ; Mon, 6 Nov 2023 06:38:50 -0500 (EST) Received: from mimecast-mx02.redhat.com (mimecast-mx02.redhat.com [66.187.233.88]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-668-XyJ0qMG9MmySyRCz5OKZEw-1; Mon, 06 Nov 2023 06:38:48 -0500 Received: from smtp.corp.redhat.com (int-mx05.intmail.prod.int.rdu2.redhat.com [10.11.54.5]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256) (No client certificate requested) by mimecast-mx02.redhat.com (Postfix) with ESMTPS id 3BEC8821C23 for ; Mon, 6 Nov 2023 11:38:48 +0000 (UTC) Received: from maggie.brq.redhat.com (unknown [10.43.3.102]) by smtp.corp.redhat.com (Postfix) with ESMTP id DA57710E45 for ; Mon, 6 Nov 2023 11:38:47 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.4.4 (2020-01-24) on lists.libvirt.org X-Spam-Level: X-Spam-Status: No, score=-0.8 required=5.0 tests=HEADER_FROM_DIFFERENT_DOMAINS, MAILING_LIST_MULTI,RCVD_IN_DNSWL_NONE,RCVD_IN_MSPIKE_H3, RCVD_IN_MSPIKE_WL,SPF_HELO_NONE,T_SCC_BODY_TEXT_LINE autolearn=unavailable autolearn_force=no version=3.4.4 X-MC-Unique: XyJ0qMG9MmySyRCz5OKZEw-1 From: Michal Privoznik To: devel@lists.libvirt.org Subject: [PATCH 3/5] virDomainMemoryDefCheckConflict: Check dimm & nvdimm models too Date: Mon, 6 Nov 2023 12:38:26 +0100 Message-ID: In-Reply-To: References: MIME-Version: 1.0 X-Scanned-By: MIMEDefang 3.4.1 on 10.11.54.5 X-Mimecast-Spam-Score: 0 X-Mimecast-Originator: redhat.com Message-ID-Hash: 4IJ76WANESF77WNAUETZI3GGAJ2YVBLW X-Message-ID-Hash: 4IJ76WANESF77WNAUETZI3GGAJ2YVBLW X-MailFrom: mprivozn@redhat.com X-Mailman-Rule-Misses: dmarc-mitigation; no-senders; approved; emergency; loop; banned-address; member-moderation; header-match-config-1; header-match-config-2; header-match-config-3; header-match-devel.lists.libvirt.org-0; nonmember-moderation; administrivia; implicit-dest; max-recipients; max-size; news-moderation; no-subject; suspicious-header X-Mailman-Version: 3.2.2 Precedence: list List-Id: Development discussions about the libvirt library & tools Archived-At: List-Archive: List-Help: List-Post: List-Subscribe: List-Unsubscribe: Content-Type: text/plain; charset="utf-8"; x-default="true" Content-Transfer-Encoding: quoted-printable X-ZM-MESSAGEID: 1699271130206100001 So far we check whether virtio-mem and/or virtio-pmem memory devices do not overlap with each other. But we allow specifying address where dimm and nvdimm memory devices are mapped too. And there are left out from this collision check. Not anymore. This leaves just sgx model out, but that's expected since it can't have any address (see virDomainMemoryDefValidate()). Resolves: https://issues.redhat.com/browse/RHEL-4452 Signed-off-by: Michal Privoznik Reviewed-by: Peter Krempa --- src/conf/domain_validate.c | 12 ++++++++++-- ...plug-virtio-mem-overlap-address.x86_64-latest.err | 2 +- 2 files changed, 11 insertions(+), 3 deletions(-) diff --git a/src/conf/domain_validate.c b/src/conf/domain_validate.c index b4ffef919a..5d9602666e 100644 --- a/src/conf/domain_validate.c +++ b/src/conf/domain_validate.c @@ -2234,6 +2234,10 @@ virDomainMemoryDefCheckConflict(const virDomainMemor= yDef *mem, break; case VIR_DOMAIN_MEMORY_MODEL_DIMM: case VIR_DOMAIN_MEMORY_MODEL_NVDIMM: + if (mem->info.type =3D=3D VIR_DOMAIN_DEVICE_ADDRESS_TYPE_DIMM) { + thisStart =3D mem->info.addr.dimm.base; + } + break; case VIR_DOMAIN_MEMORY_MODEL_SGX_EPC: case VIR_DOMAIN_MEMORY_MODEL_NONE: case VIR_DOMAIN_MEMORY_MODEL_LAST: @@ -2271,13 +2275,17 @@ virDomainMemoryDefCheckConflict(const virDomainMemo= ryDef *mem, =20 switch (other->model) { case VIR_DOMAIN_MEMORY_MODEL_NONE: - case VIR_DOMAIN_MEMORY_MODEL_DIMM: - case VIR_DOMAIN_MEMORY_MODEL_NVDIMM: case VIR_DOMAIN_MEMORY_MODEL_SGX_EPC: case VIR_DOMAIN_MEMORY_MODEL_LAST: continue; break; =20 + case VIR_DOMAIN_MEMORY_MODEL_DIMM: + case VIR_DOMAIN_MEMORY_MODEL_NVDIMM: + if (other->info.type =3D=3D VIR_DOMAIN_DEVICE_ADDRESS_TYPE_DIM= M) { + otherStart =3D other->info.addr.dimm.base; + } + break; case VIR_DOMAIN_MEMORY_MODEL_VIRTIO_PMEM: otherStart =3D other->target.virtio_pmem.address; break; diff --git a/tests/qemuxml2argvdata/memory-hotplug-virtio-mem-overlap-addre= ss.x86_64-latest.err b/tests/qemuxml2argvdata/memory-hotplug-virtio-mem-ove= rlap-address.x86_64-latest.err index 36d5b8a6e6..6a1ad4556d 100644 --- a/tests/qemuxml2argvdata/memory-hotplug-virtio-mem-overlap-address.x86_= 64-latest.err +++ b/tests/qemuxml2argvdata/memory-hotplug-virtio-mem-overlap-address.x86_= 64-latest.err @@ -1 +1 @@ -unsupported configuration: memory device address [0x140000000:0x180000000]= overlaps with other memory device (0x170000000) +unsupported configuration: memory device address [0x170000000:0x178000000]= overlaps with other memory device (0x170000000) --=20 2.41.0 _______________________________________________ Devel mailing list -- devel@lists.libvirt.org To unsubscribe send an email to devel-leave@lists.libvirt.org From nobody Fri May 10 06:44:03 2024 Delivered-To: importer@patchew.org Received-SPF: none (zohomail.com: 8.43.85.245 is neither permitted nor denied by domain of lists.libvirt.org) client-ip=8.43.85.245; envelope-from=devel-bounces@lists.libvirt.org; helo=lists.libvirt.org; Authentication-Results: mx.zohomail.com; spf=none (zohomail.com: 8.43.85.245 is neither permitted nor denied by domain of lists.libvirt.org) smtp.mailfrom=devel-bounces@lists.libvirt.org; dmarc=fail(p=none dis=none) header.from=redhat.com Return-Path: Received: from lists.libvirt.org (lists.libvirt.org [8.43.85.245]) by mx.zohomail.com with SMTPS id 1699271209652427.46713317191245; Mon, 6 Nov 2023 03:46:49 -0800 (PST) Received: by lists.libvirt.org (Postfix, from userid 996) id 5B88918FA; Mon, 6 Nov 2023 06:46:48 -0500 (EST) Received: from lists.libvirt.org (localhost [IPv6:::1]) by lists.libvirt.org (Postfix) with ESMTP id F419C1A3A; Mon, 6 Nov 2023 06:39:32 -0500 (EST) Received: by lists.libvirt.org (Postfix, from userid 996) id 11B2A18DD; Mon, 6 Nov 2023 06:38:52 -0500 (EST) Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.133.124]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by lists.libvirt.org (Postfix) with ESMTPS id E8E2E197A for ; Mon, 6 Nov 2023 06:38:50 -0500 (EST) Received: from mimecast-mx02.redhat.com (mimecast-mx02.redhat.com [66.187.233.88]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-604-IxlQ98LEP2Wga13BtzVUfA-1; Mon, 06 Nov 2023 06:38:49 -0500 Received: from smtp.corp.redhat.com (int-mx05.intmail.prod.int.rdu2.redhat.com [10.11.54.5]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256) (No client certificate requested) by mimecast-mx02.redhat.com (Postfix) with ESMTPS id C60AA85A5B5 for ; Mon, 6 Nov 2023 11:38:48 +0000 (UTC) Received: from maggie.brq.redhat.com (unknown [10.43.3.102]) by smtp.corp.redhat.com (Postfix) with ESMTP id 70A6F502B for ; Mon, 6 Nov 2023 11:38:48 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.4.4 (2020-01-24) on lists.libvirt.org X-Spam-Level: X-Spam-Status: No, score=-0.8 required=5.0 tests=HEADER_FROM_DIFFERENT_DOMAINS, MAILING_LIST_MULTI,RCVD_IN_DNSWL_NONE,RCVD_IN_MSPIKE_H3, RCVD_IN_MSPIKE_WL,SPF_HELO_NONE,T_SCC_BODY_TEXT_LINE autolearn=unavailable autolearn_force=no version=3.4.4 X-MC-Unique: IxlQ98LEP2Wga13BtzVUfA-1 From: Michal Privoznik To: devel@lists.libvirt.org Subject: [PATCH 4/5] virDomainMemoryDefCheckConflict: Validate dimm slot too Date: Mon, 6 Nov 2023 12:38:27 +0100 Message-ID: In-Reply-To: References: MIME-Version: 1.0 X-Scanned-By: MIMEDefang 3.4.1 on 10.11.54.5 X-Mimecast-Spam-Score: 0 X-Mimecast-Originator: redhat.com Message-ID-Hash: PCAOBMZ4ETVDYJ6OVX4RUQ27LQHTRNAN X-Message-ID-Hash: PCAOBMZ4ETVDYJ6OVX4RUQ27LQHTRNAN X-MailFrom: mprivozn@redhat.com X-Mailman-Rule-Misses: dmarc-mitigation; no-senders; approved; emergency; loop; banned-address; member-moderation; header-match-config-1; header-match-config-2; header-match-config-3; header-match-devel.lists.libvirt.org-0; nonmember-moderation; administrivia; implicit-dest; max-recipients; max-size; news-moderation; no-subject; suspicious-header X-Mailman-Version: 3.2.2 Precedence: list List-Id: Development discussions about the libvirt library & tools Archived-At: List-Archive: List-Help: List-Post: List-Subscribe: List-Unsubscribe: Content-Type: text/plain; charset="utf-8"; x-default="true" Content-Transfer-Encoding: quoted-printable X-ZM-MESSAGEID: 1699271210665100001 Since we're iterating over def->mems array, might as well check for dimm slot duplicates. Signed-off-by: Michal Privoznik Reviewed-by: Peter Krempa --- src/conf/domain_validate.c | 36 +++++++++++++++++++++++------------- 1 file changed, 23 insertions(+), 13 deletions(-) diff --git a/src/conf/domain_validate.c b/src/conf/domain_validate.c index 5d9602666e..f45ee0a8a5 100644 --- a/src/conf/domain_validate.c +++ b/src/conf/domain_validate.c @@ -2221,6 +2221,7 @@ static int virDomainMemoryDefCheckConflict(const virDomainMemoryDef *mem, const virDomainDef *def) { + const virDomainDeviceDimmAddress *thisAddr =3D NULL; unsigned long long thisStart =3D 0; unsigned long long thisEnd =3D 0; size_t i; @@ -2235,6 +2236,7 @@ virDomainMemoryDefCheckConflict(const virDomainMemory= Def *mem, case VIR_DOMAIN_MEMORY_MODEL_DIMM: case VIR_DOMAIN_MEMORY_MODEL_NVDIMM: if (mem->info.type =3D=3D VIR_DOMAIN_DEVICE_ADDRESS_TYPE_DIMM) { + thisAddr =3D &mem->info.addr.dimm; thisStart =3D mem->info.addr.dimm.base; } break; @@ -2244,7 +2246,7 @@ virDomainMemoryDefCheckConflict(const virDomainMemory= Def *mem, break; } =20 - if (thisStart =3D=3D 0) { + if (thisStart =3D=3D 0 && !thisAddr) { return 0; } =20 @@ -2258,19 +2260,27 @@ virDomainMemoryDefCheckConflict(const virDomainMemo= ryDef *mem, if (other =3D=3D mem) continue; =20 - /* In case we're updating an existing memory device (e.g. virtio-m= em), - * then pointers will be different. But addresses and aliases are = the - * same. However, STREQ_NULLABLE() returns true if both strings are - * NULL which is not what we want. */ - if (virDomainDeviceInfoAddressIsEqual(&other->info, - &mem->info)) { - continue; - } + if (thisAddr && other->info.type =3D=3D VIR_DOMAIN_DEVICE_ADDRESS_= TYPE_DIMM && + thisAddr->slot =3D=3D other->info.addr.dimm.slot) { + virReportError(VIR_ERR_CONFIG_UNSUPPORTED, + _("memory device slot '%1$u' is already being u= sed by another memory device"), + thisAddr->slot); + return -1; + } else if (!thisAddr) { + /* In case we're updating an existing memory device (e.g. + * virtio-mem), then pointers will be different. But addresses= and + * aliases are the same. However, STREQ_NULLABLE() returns tru= e if + * both strings are NULL which is not what we want. */ + if (virDomainDeviceInfoAddressIsEqual(&other->info, + &mem->info)) { + continue; + } =20 - if (mem->info.alias && - STREQ_NULLABLE(other->info.alias, - mem->info.alias)) { - continue; + if (mem->info.alias && + STREQ_NULLABLE(other->info.alias, + mem->info.alias)) { + continue; + } } =20 switch (other->model) { --=20 2.41.0 _______________________________________________ Devel mailing list -- devel@lists.libvirt.org To unsubscribe send an email to devel-leave@lists.libvirt.org From nobody Fri May 10 06:44:03 2024 Delivered-To: importer@patchew.org Received-SPF: none (zohomail.com: 8.43.85.245 is neither permitted nor denied by domain of lists.libvirt.org) client-ip=8.43.85.245; envelope-from=devel-bounces@lists.libvirt.org; helo=lists.libvirt.org; Authentication-Results: mx.zohomail.com; spf=none (zohomail.com: 8.43.85.245 is neither permitted nor denied by domain of lists.libvirt.org) smtp.mailfrom=devel-bounces@lists.libvirt.org; dmarc=fail(p=none dis=none) header.from=redhat.com Return-Path: Received: from lists.libvirt.org (lists.libvirt.org [8.43.85.245]) by mx.zohomail.com with SMTPS id 1699271304440876.4810997801696; Mon, 6 Nov 2023 03:48:24 -0800 (PST) Received: by lists.libvirt.org (Postfix, from userid 996) id 5336A1A02; Mon, 6 Nov 2023 06:48:23 -0500 (EST) Received: from lists.libvirt.org (localhost [IPv6:::1]) by lists.libvirt.org (Postfix) with ESMTP id 6386A197A; Mon, 6 Nov 2023 06:39:41 -0500 (EST) Received: by lists.libvirt.org (Postfix, from userid 996) id 6CE2D1970; Mon, 6 Nov 2023 06:38:52 -0500 (EST) Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.133.124]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by lists.libvirt.org (Postfix) with ESMTPS id 24ED9197C for ; Mon, 6 Nov 2023 06:38:51 -0500 (EST) Received: from mimecast-mx02.redhat.com (mimecast-mx02.redhat.com [66.187.233.88]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-160-T53riOKnNe-68BPwxUyEGA-1; Mon, 06 Nov 2023 06:38:49 -0500 Received: from smtp.corp.redhat.com (int-mx05.intmail.prod.int.rdu2.redhat.com [10.11.54.5]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256) (No client certificate requested) by mimecast-mx02.redhat.com (Postfix) with ESMTPS id 5E5B58F9202 for ; Mon, 6 Nov 2023 11:38:49 +0000 (UTC) Received: from maggie.brq.redhat.com (unknown [10.43.3.102]) by smtp.corp.redhat.com (Postfix) with ESMTP id 062DC10E4E for ; Mon, 6 Nov 2023 11:38:48 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.4.4 (2020-01-24) on lists.libvirt.org X-Spam-Level: X-Spam-Status: No, score=-0.8 required=5.0 tests=HEADER_FROM_DIFFERENT_DOMAINS, MAILING_LIST_MULTI,RCVD_IN_DNSWL_NONE,RCVD_IN_MSPIKE_H3, RCVD_IN_MSPIKE_WL,SPF_HELO_NONE,T_SCC_BODY_TEXT_LINE autolearn=unavailable autolearn_force=no version=3.4.4 X-MC-Unique: T53riOKnNe-68BPwxUyEGA-1 From: Michal Privoznik To: devel@lists.libvirt.org Subject: [PATCH 5/5] qemu_domain: Drop qemuCheckMemoryDimmConflict() Date: Mon, 6 Nov 2023 12:38:28 +0100 Message-ID: In-Reply-To: References: MIME-Version: 1.0 X-Scanned-By: MIMEDefang 3.4.1 on 10.11.54.5 X-Mimecast-Spam-Score: 0 X-Mimecast-Originator: redhat.com Message-ID-Hash: 65MTQ7Q3QKVW4N44X54EEXS3PJ5R46GO X-Message-ID-Hash: 65MTQ7Q3QKVW4N44X54EEXS3PJ5R46GO X-MailFrom: mprivozn@redhat.com X-Mailman-Rule-Misses: dmarc-mitigation; no-senders; approved; emergency; loop; banned-address; member-moderation; header-match-config-1; header-match-config-2; header-match-config-3; header-match-devel.lists.libvirt.org-0; nonmember-moderation; administrivia; implicit-dest; max-recipients; max-size; news-moderation; no-subject; suspicious-header X-Mailman-Version: 3.2.2 Precedence: list List-Id: Development discussions about the libvirt library & tools Archived-At: List-Archive: List-Help: List-Post: List-Subscribe: List-Unsubscribe: Content-Type: text/plain; charset="utf-8"; x-default="true" Content-Transfer-Encoding: quoted-printable X-ZM-MESSAGEID: 1699271305322100001 The virDomainMemoryDefCheckConflict() already does the same set of checks. There's no need to duplicate them. Signed-off-by: Michal Privoznik Reviewed-by: Peter Krempa --- src/qemu/qemu_domain.c | 37 ------------------------------------- 1 file changed, 37 deletions(-) diff --git a/src/qemu/qemu_domain.c b/src/qemu/qemu_domain.c index ae19ce884b..413f67577e 100644 --- a/src/qemu/qemu_domain.c +++ b/src/qemu/qemu_domain.c @@ -9082,39 +9082,6 @@ qemuDomainSupportsPCI(virDomainDef *def, } =20 =20 -static bool -qemuCheckMemoryDimmConflict(const virDomainDef *def, - const virDomainMemoryDef *mem) -{ - size_t i; - - for (i =3D 0; i < def->nmems; i++) { - virDomainMemoryDef *tmp =3D def->mems[i]; - - if (tmp =3D=3D mem || - tmp->info.type !=3D VIR_DOMAIN_DEVICE_ADDRESS_TYPE_DIMM) - continue; - - if (mem->info.addr.dimm.slot =3D=3D tmp->info.addr.dimm.slot) { - virReportError(VIR_ERR_CONFIG_UNSUPPORTED, - _("memory device slot '%1$u' is already being = used by another memory device"), - mem->info.addr.dimm.slot); - return true; - } - - if (mem->info.addr.dimm.base !=3D 0 && - mem->info.addr.dimm.base =3D=3D tmp->info.addr.dimm.base) { - virReportError(VIR_ERR_CONFIG_UNSUPPORTED, - _("memory device base '0x%1$llx' is already be= ing used by another memory device"), - mem->info.addr.dimm.base); - return true; - } - } - - return false; -} - - static int qemuDomainDefValidateMemoryHotplugDevice(const virDomainMemoryDef *mem, const virDomainDef *def) @@ -9138,10 +9105,6 @@ qemuDomainDefValidateMemoryHotplugDevice(const virDo= mainMemoryDef *mem, mem->info.addr.dimm.slot, def->mem.memory_s= lots); return -1; } - - - if (qemuCheckMemoryDimmConflict(def, mem)) - return -1; } break; =20 --=20 2.41.0 _______________________________________________ Devel mailing list -- devel@lists.libvirt.org To unsubscribe send an email to devel-leave@lists.libvirt.org From nobody Fri May 10 06:44:03 2024 Delivered-To: importer@patchew.org Received-SPF: none (zohomail.com: 8.43.85.245 is neither permitted nor denied by domain of lists.libvirt.org) client-ip=8.43.85.245; envelope-from=devel-bounces@lists.libvirt.org; helo=lists.libvirt.org; Authentication-Results: mx.zohomail.com; spf=none (zohomail.com: 8.43.85.245 is neither permitted nor denied by domain of lists.libvirt.org) smtp.mailfrom=devel-bounces@lists.libvirt.org; dmarc=fail(p=none dis=none) header.from=redhat.com Return-Path: Received: from lists.libvirt.org (lists.libvirt.org [8.43.85.245]) by mx.zohomail.com with SMTPS id 1699270877938685.6299212483441; Mon, 6 Nov 2023 03:41:17 -0800 (PST) Received: by lists.libvirt.org (Postfix, from userid 996) id E06621A22; Mon, 6 Nov 2023 06:41:16 -0500 (EST) Received: from lists.libvirt.org (localhost [IPv6:::1]) by lists.libvirt.org (Postfix) with ESMTP id C052319C3; Mon, 6 Nov 2023 06:38:56 -0500 (EST) Received: by lists.libvirt.org (Postfix, from userid 996) id 769881970; Mon, 6 Nov 2023 06:38:49 -0500 (EST) Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.133.124]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by lists.libvirt.org (Postfix) with ESMTPS id BC743197C for ; Mon, 6 Nov 2023 06:38:48 -0500 (EST) Received: from mimecast-mx02.redhat.com (mimecast-mx02.redhat.com [66.187.233.88]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-336-9eHOJjFMMn2GaK2BfgJDQg-1; Mon, 06 Nov 2023 06:38:47 -0500 Received: from smtp.corp.redhat.com (int-mx05.intmail.prod.int.rdu2.redhat.com [10.11.54.5]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256) (No client certificate requested) by mimecast-mx02.redhat.com (Postfix) with ESMTPS id 1CCBF811E91 for ; Mon, 6 Nov 2023 11:38:47 +0000 (UTC) Received: from maggie.brq.redhat.com (unknown [10.43.3.102]) by smtp.corp.redhat.com (Postfix) with ESMTP id BA9D810EA1 for ; Mon, 6 Nov 2023 11:38:46 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.4.4 (2020-01-24) on lists.libvirt.org X-Spam-Level: X-Spam-Status: No, score=-0.8 required=5.0 tests=HEADER_FROM_DIFFERENT_DOMAINS, MAILING_LIST_MULTI,RCVD_IN_DNSWL_NONE,RCVD_IN_MSPIKE_H3, RCVD_IN_MSPIKE_WL,SPF_HELO_NONE,T_SCC_BODY_TEXT_LINE autolearn=unavailable autolearn_force=no version=3.4.4 X-MC-Unique: 9eHOJjFMMn2GaK2BfgJDQg-1 From: Michal Privoznik To: devel@lists.libvirt.org Subject: [PATCH] virhostmem: Get total memory on macOS properly Date: Mon, 6 Nov 2023 12:38:24 +0100 Message-ID: In-Reply-To: References: MIME-Version: 1.0 X-Scanned-By: MIMEDefang 3.4.1 on 10.11.54.5 X-Mimecast-Spam-Score: 0 X-Mimecast-Originator: redhat.com Message-ID-Hash: UG2FQ7MEEHFHDJ72CDJFPYZWNYIYGFXR X-Message-ID-Hash: UG2FQ7MEEHFHDJ72CDJFPYZWNYIYGFXR X-MailFrom: mprivozn@redhat.com X-Mailman-Rule-Misses: dmarc-mitigation; no-senders; approved; emergency; loop; banned-address; member-moderation; header-match-config-1; header-match-config-2; header-match-config-3; header-match-devel.lists.libvirt.org-0; nonmember-moderation; administrivia; implicit-dest; max-recipients; max-size; news-moderation; no-subject; suspicious-header X-Mailman-Version: 3.2.2 Precedence: list List-Id: Development discussions about the libvirt library & tools Archived-At: List-Archive: List-Help: List-Post: List-Subscribe: List-Unsubscribe: Content-Type: text/plain; charset="utf-8"; x-default="true" Content-Transfer-Encoding: quoted-printable X-ZM-MESSAGEID: 1699270878946100001 Problem with HW_PHYSMEM sysctl on 64-bit macOS is that it returns a 32-bit signed value. Thus it overflows. Switching to HW_MEMSIZE is recommended as it's of an uint_64 type [1]. 1: https://github.com/apple-oss-distributions/xnu/blob/xnu-10002.1.13/bsd/s= ys/sysctl.h Reported-by: Jaroslav Suchanek Signed-off-by: Michal Privoznik --- src/util/virhostmem.c | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/util/virhostmem.c b/src/util/virhostmem.c index 1da2759ac3..a7027af835 100644 --- a/src/util/virhostmem.c +++ b/src/util/virhostmem.c @@ -617,7 +617,10 @@ virHostMemGetTotal(void) unsigned long long physmem =3D 0; size_t len =3D sizeof(physmem); =20 - if (sysctlbyname("hw.physmem", &physmem, &len, NULL, 0) < 0) { + /* On macOS hw.physmem is int32_t which doesn't fly with >4GiB of memo= ry. + * But hw.memsize is uint64_t. */ + if (sysctlbyname("hw.memsize", &physmem, &len, NULL, 0) < 0 && + sysctlbyname("hw.physmem", &physmem, &len, NULL, 0) < 0) { virReportSystemError(errno, "%s", _("Unable to query memory total")); return 0; --=20 2.41.0 _______________________________________________ Devel mailing list -- devel@lists.libvirt.org To unsubscribe send an email to devel-leave@lists.libvirt.org