From nobody Tue Nov 18 16:02:12 2025 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=none dis=none) header.from=redhat.com ARC-Seal: i=1; a=rsa-sha256; t=1716912993; cv=none; d=zohomail.com; s=zohoarc; b=jGrtBfT1EmjTRMlJ3OJWAlzk52T3Edwb1KIyAHifKTr/fbipp1M9frDxryG36xNAD7J+e26ynu3wKr/1001LdArw2QG1yFL7+xOGxJiq7XKLO4r8uTgkwPAPTSYxVfHU/D8OxLxdXlUBuRSBf++GWjzpPBYOu+6eiR19841yQns= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1716912993; h=Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=a8S6mW08ZFnf4Hy8qt0xgV8FecjvZuL0DLHEmVYF3fI=; b=bEZv61HrMPAiyQG9zQlvw+YnO+kv4oUo6GrXqQBPx1sUIX88xHvoN9h2kFRodS+cnmJfjHys5auh0Za1R/XRIzddCsDNYprtdeAHnaYUfNom8ckZj0s7lQRxKmgVAM+50rMQMdMnwRruiUF2ypfgPSWt+czqi2jSOMpdSQXdzHk= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=none dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1716912993918414.3706893965059; Tue, 28 May 2024 09:16:33 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1sBzTu-0003T5-U9; Tue, 28 May 2024 12:15:22 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1sBzTt-0003SD-59 for qemu-devel@nongnu.org; Tue, 28 May 2024 12:15:21 -0400 Received: from us-smtp-delivery-124.mimecast.com ([170.10.129.124]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1sBzTr-0001ib-IC for qemu-devel@nongnu.org; Tue, 28 May 2024 12:15:20 -0400 Received: from mimecast-mx02.redhat.com (mimecast-mx02.redhat.com [66.187.233.88]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-139-YcXACB2fO6226lg_b1INYg-1; Tue, 28 May 2024 12:15:16 -0400 Received: from smtp.corp.redhat.com (int-mx08.intmail.prod.int.rdu2.redhat.com [10.11.54.8]) (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 4A6CB80118E for ; Tue, 28 May 2024 16:15:16 +0000 (UTC) Received: from maggie.brq.redhat.com (unknown [10.43.3.102]) by smtp.corp.redhat.com (Postfix) with ESMTP id 75D02C15BC3; Tue, 28 May 2024 16:15:15 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1716912918; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=a8S6mW08ZFnf4Hy8qt0xgV8FecjvZuL0DLHEmVYF3fI=; b=eqWupJN81U1gzmuy8KtagtgvjwoxYa+LPojZQFxV+RnWLNoGPcjg5m8A2PSHgsq7dK85Ze kdtRh84lIRdG/aAid72rXt2kTPu4Cg5xo+Xmpn4RGxuPKyngo71UydG3TlbQIeZrirHAr4 qvKOV5Rks+MMM1lL8EVkJxbtwUYNErg= X-MC-Unique: YcXACB2fO6226lg_b1INYg-1 From: Michal Privoznik To: qemu-devel@nongnu.org Cc: david@redhat.com, imammedo@redhat.com Subject: [PATCH 1/3] osdep: Make qemu_madvise() to set errno in all cases Date: Tue, 28 May 2024 18:15:07 +0200 Message-ID: <4d8a74a512bf55f39c5d1be115b1c52b6a632e09.1716912651.git.mprivozn@redhat.com> In-Reply-To: References: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-Scanned-By: MIMEDefang 3.4.1 on 10.11.54.8 Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=170.10.129.124; envelope-from=mprivozn@redhat.com; helo=us-smtp-delivery-124.mimecast.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_HIGH=-0.034, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, RCVD_IN_MSPIKE_H4=0.001, RCVD_IN_MSPIKE_WL=0.001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001, T_SCC_BODY_TEXT_LINE=-0.01 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @redhat.com) X-ZM-MESSAGEID: 1716912995173100001 Content-Type: text/plain; charset="utf-8" The unspoken premise of qemu_madvise() is that errno is set on error. And it is mostly the case except for posix_madvise() which is documented to return either zero (on success) or a positive error number. This means, we must set errno ourselves. And while at it, make the function return a negative value on error, just like other error paths do. Signed-off-by: Michal Privoznik Reviewed-by: David Hildenbrand --- util/osdep.c | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/util/osdep.c b/util/osdep.c index e996c4744a..e42f4e8121 100644 --- a/util/osdep.c +++ b/util/osdep.c @@ -57,7 +57,12 @@ int qemu_madvise(void *addr, size_t len, int advice) #if defined(CONFIG_MADVISE) return madvise(addr, len, advice); #elif defined(CONFIG_POSIX_MADVISE) - return posix_madvise(addr, len, advice); + int rc =3D posix_madvise(addr, len, advice); + if (rc) { + errno =3D rc; + return -1; + } + return 0; #else errno =3D EINVAL; return -1; --=20 2.44.1 From nobody Tue Nov 18 16:02:12 2025 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=none dis=none) header.from=redhat.com ARC-Seal: i=1; a=rsa-sha256; t=1716912994; cv=none; d=zohomail.com; s=zohoarc; b=ZpN21xmnJeWGKzk/2JpVZVVHYWFt6AU1Ya7EfSHA5982rQNB+rrg4sctBe7xz6L8zy7c8jEMeOtMeD10ITEArRs1FZsm+i0RRYEoFH60xMFU6f6ctkli5nWFuYp9vWh8jbmmmgPQ4PcTS/DaWAqzftr4+FlJMh0vvJhhcvS1T34= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1716912994; h=Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=0bOdMPqUA+lkNbcV85HXskFJU4DMfBPjohOMFYIhyoQ=; b=A9LHtQiNrgBhRyWCtrDsLpMIypR/GRjGhAEr7DteVP1I6ZBX/EfYrCX1i3Z4KchbDZnsC8ZNCl61JzTZsJQONLhMUTiRkoCPiZardqV47VgzmwkT4J9zqqh6Df5JTohjrkaxnCfeU1kp6I8YEgVLncfOapL260UHoZ1EjAMZPGg= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=none dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1716912994701318.32018335874557; Tue, 28 May 2024 09:16:34 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1sBzTv-0003Ta-Ps; Tue, 28 May 2024 12:15:23 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1sBzTu-0003St-Mh for qemu-devel@nongnu.org; Tue, 28 May 2024 12:15:22 -0400 Received: from us-smtp-delivery-124.mimecast.com ([170.10.129.124]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1sBzTt-0001ir-5U for qemu-devel@nongnu.org; Tue, 28 May 2024 12:15:22 -0400 Received: from mimecast-mx02.redhat.com (mx-ext.redhat.com [66.187.233.73]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-657-6eNjhpCPOwCxwV3KYzG0Tw-1; Tue, 28 May 2024 12:15:17 -0400 Received: from smtp.corp.redhat.com (int-mx08.intmail.prod.int.rdu2.redhat.com [10.11.54.8]) (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 4CEA51C0512D for ; Tue, 28 May 2024 16:15:17 +0000 (UTC) Received: from maggie.brq.redhat.com (unknown [10.43.3.102]) by smtp.corp.redhat.com (Postfix) with ESMTP id 7B1A7C15BB9; Tue, 28 May 2024 16:15:16 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1716912920; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=0bOdMPqUA+lkNbcV85HXskFJU4DMfBPjohOMFYIhyoQ=; b=PHq/RjAjrXLDuM9zvZ27BhNGegdj9mTA00c5UJ6Bau6of+iWvdC/8vspS7lTs3dd3fkHEf 0vo1WIPhV6r2i6e9o7UUlvaOpp5Q8ndAdbm2w+veK4o+juERyFZN4BLUmZ30rJNuwY6lvM r8XsO9ymlwRbEONPu1n84+mn/otYhU0= X-MC-Unique: 6eNjhpCPOwCxwV3KYzG0Tw-1 From: Michal Privoznik To: qemu-devel@nongnu.org Cc: david@redhat.com, imammedo@redhat.com Subject: [PATCH 2/3] backends/hostmem: Warn on qemu_madvise() failures Date: Tue, 28 May 2024 18:15:08 +0200 Message-ID: In-Reply-To: References: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-Scanned-By: MIMEDefang 3.4.1 on 10.11.54.8 Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=170.10.129.124; envelope-from=mprivozn@redhat.com; helo=us-smtp-delivery-124.mimecast.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_HIGH=-0.034, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, RCVD_IN_MSPIKE_H4=0.001, RCVD_IN_MSPIKE_WL=0.001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001, T_SCC_BODY_TEXT_LINE=-0.01 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @redhat.com) X-ZM-MESSAGEID: 1716912995332100003 Content-Type: text/plain; charset="utf-8" If user sets .merge or .dump attributes qemu_madvise() is called with corresponding advice. But it is never checked for failure which may mislead users into thinking the attribute is set correctly.I believe at this point it's too late to report errors in that case but let's report a warning at least. Signed-off-by: Michal Privoznik --- backends/hostmem.c | 27 +++++++++++++++++++-------- 1 file changed, 19 insertions(+), 8 deletions(-) diff --git a/backends/hostmem.c b/backends/hostmem.c index eb9682b4a8..1a6fd1c714 100644 --- a/backends/hostmem.c +++ b/backends/hostmem.c @@ -14,6 +14,7 @@ #include "sysemu/hostmem.h" #include "hw/boards.h" #include "qapi/error.h" +#include "qemu/error-report.h" #include "qapi/qapi-builtin-visit.h" #include "qapi/visitor.h" #include "qemu/config-file.h" @@ -178,8 +179,11 @@ static void host_memory_backend_set_merge(Object *obj,= bool value, Error **errp) void *ptr =3D memory_region_get_ram_ptr(&backend->mr); uint64_t sz =3D memory_region_size(&backend->mr); =20 - qemu_madvise(ptr, sz, - value ? QEMU_MADV_MERGEABLE : QEMU_MADV_UNMERGEABLE); + if (qemu_madvise(ptr, sz, + value ? QEMU_MADV_MERGEABLE : QEMU_MADV_UNMERGEAB= LE)) { + warn_report("Couldn't change property 'merge' on '%s': %s", + object_get_typename(obj), strerror(errno)); + } backend->merge =3D value; } } @@ -204,8 +208,11 @@ static void host_memory_backend_set_dump(Object *obj, = bool value, Error **errp) void *ptr =3D memory_region_get_ram_ptr(&backend->mr); uint64_t sz =3D memory_region_size(&backend->mr); =20 - qemu_madvise(ptr, sz, - value ? QEMU_MADV_DODUMP : QEMU_MADV_DONTDUMP); + if (qemu_madvise(ptr, sz, + value ? QEMU_MADV_DODUMP : QEMU_MADV_DONTDUMP)) { + warn_report("Couldn't change property 'dump' on '%s': %s", + object_get_typename(obj), strerror(errno)); + } backend->dump =3D value; } } @@ -337,11 +344,15 @@ host_memory_backend_memory_complete(UserCreatable *uc= , Error **errp) ptr =3D memory_region_get_ram_ptr(&backend->mr); sz =3D memory_region_size(&backend->mr); =20 - if (backend->merge) { - qemu_madvise(ptr, sz, QEMU_MADV_MERGEABLE); + if (backend->merge && + qemu_madvise(ptr, sz, QEMU_MADV_MERGEABLE)) { + warn_report("Couldn't set property 'merge' on '%s': %s", + object_get_typename(OBJECT(uc)), strerror(errno)); } - if (!backend->dump) { - qemu_madvise(ptr, sz, QEMU_MADV_DONTDUMP); + if (!backend->dump && + qemu_madvise(ptr, sz, QEMU_MADV_DONTDUMP)) { + warn_report("Couldn't set property 'dump' on '%s': %s", + object_get_typename(OBJECT(uc)), strerror(errno)); } #ifdef CONFIG_NUMA unsigned long lastbit =3D find_last_bit(backend->host_nodes, MAX_NODES= ); --=20 2.44.1 From nobody Tue Nov 18 16:02:12 2025 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=none dis=none) header.from=redhat.com ARC-Seal: i=1; a=rsa-sha256; t=1716912986; cv=none; d=zohomail.com; s=zohoarc; b=keRvQ6+YDkiD5M0D3N3yEhCGSG80KfKZJ9QFczYNE5jtcRmioNLHckzylQeqL3knjze2mx39WLxSqe0+dw3/wVK+K9TRWBu60VK1+1NWpg8n2AFHw7pil+IEKr7WI+D9RB8GRm+9dEGF9/xKhCMXz1E0/UOhioRTVJ2sTSwZLAY= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1716912986; h=Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=daoFMEShlBnxsuXyynDFlX5cEjXfkBVlaBMEp7a2wDo=; b=SoffZikon7qnOK5csTOiFqjRGpNujLGCzdFRRWuOBuimkVwF5+VwHbrL69TZsMQXRmcNhbdHM+6Bi3itymawVrukkwghgqfWzrUpREl99hf7d2GQoS4TiBadBVSkhiqDiRh6pW80mTlhWExmIXqqhqLmheB4T0Xk9HKHeJgXwco= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=none dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1716912986213302.65210161113043; Tue, 28 May 2024 09:16:26 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1sBzTw-0003Tp-Gj; Tue, 28 May 2024 12:15:24 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1sBzTu-0003T2-NZ for qemu-devel@nongnu.org; Tue, 28 May 2024 12:15:22 -0400 Received: from us-smtp-delivery-124.mimecast.com ([170.10.129.124]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1sBzTt-0001iy-6a for qemu-devel@nongnu.org; Tue, 28 May 2024 12:15:22 -0400 Received: from mimecast-mx02.redhat.com (mimecast-mx02.redhat.com [66.187.233.88]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-615-Q6iOy824MzGkPufIyvQsyw-1; Tue, 28 May 2024 12:15:18 -0400 Received: from smtp.corp.redhat.com (int-mx08.intmail.prod.int.rdu2.redhat.com [10.11.54.8]) (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 528BE185A780 for ; Tue, 28 May 2024 16:15:18 +0000 (UTC) Received: from maggie.brq.redhat.com (unknown [10.43.3.102]) by smtp.corp.redhat.com (Postfix) with ESMTP id 7FD73C15BC3; Tue, 28 May 2024 16:15:17 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1716912920; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=daoFMEShlBnxsuXyynDFlX5cEjXfkBVlaBMEp7a2wDo=; b=GkRYAmbQJer3+Vo0UQcpTJcOmCZ0whaPHIBkqXl/UU93wmO8lgLY6lCs9TMKU4KRmiz/BM 9ndPYXpVguXu51v+stx8w7btOFXCPZDMahHFx7zro3NlPjZkvCtR2wecJPAbYSdT68EhIb 2Ljnu0h5DlnfdhAz2U1hOB+oCFb88Hw= X-MC-Unique: Q6iOy824MzGkPufIyvQsyw-1 From: Michal Privoznik To: qemu-devel@nongnu.org Cc: david@redhat.com, imammedo@redhat.com Subject: [PATCH 3/3] backends/hostmem: Round up memory size for qemu_madvise() and mbind() Date: Tue, 28 May 2024 18:15:09 +0200 Message-ID: In-Reply-To: References: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-Scanned-By: MIMEDefang 3.4.1 on 10.11.54.8 Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=170.10.129.124; envelope-from=mprivozn@redhat.com; helo=us-smtp-delivery-124.mimecast.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_HIGH=-0.034, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, RCVD_IN_MSPIKE_H4=0.001, RCVD_IN_MSPIKE_WL=0.001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001, T_SCC_BODY_TEXT_LINE=-0.01 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @redhat.com) X-ZM-MESSAGEID: 1716912987289100003 Content-Type: text/plain; charset="utf-8" Simple reproducer: qemu.git $ ./build/qemu-system-x86_64 \ -m size=3D8389632k,slots=3D16,maxmem=3D25600000k \ -object '{"qom-type":"memory-backend-file","id":"ram-node0","mem-path":"/hugepages2= M/","prealloc":true,"size":8590983168,"host-nodes":[0],"policy":"bind"}' \ -numa node,nodeid=3D0,cpus=3D0,memdev=3Dram-node0 With current master I get: qemu-system-x86_64: cannot bind memory to host NUMA nodes: Invalid argument The problem is that memory size (8193MiB) is not an integer multiple of underlying pagesize (2MiB) which triggers a check inside of mbind(), since we can't really set policy just to a fraction of a page. As qemu_madvise() has the same expectation, round size passed to underlying pagesize. Signed-off-by: Michal Privoznik --- backends/hostmem.c | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/backends/hostmem.c b/backends/hostmem.c index 1a6fd1c714..9b727699f6 100644 --- a/backends/hostmem.c +++ b/backends/hostmem.c @@ -179,6 +179,8 @@ static void host_memory_backend_set_merge(Object *obj, = bool value, Error **errp) void *ptr =3D memory_region_get_ram_ptr(&backend->mr); uint64_t sz =3D memory_region_size(&backend->mr); =20 + sz =3D ROUND_UP(sz, qemu_ram_pagesize(backend->mr.ram_block)); + if (qemu_madvise(ptr, sz, value ? QEMU_MADV_MERGEABLE : QEMU_MADV_UNMERGEAB= LE)) { warn_report("Couldn't change property 'merge' on '%s': %s", @@ -208,6 +210,8 @@ static void host_memory_backend_set_dump(Object *obj, b= ool value, Error **errp) void *ptr =3D memory_region_get_ram_ptr(&backend->mr); uint64_t sz =3D memory_region_size(&backend->mr); =20 + sz =3D ROUND_UP(sz, qemu_ram_pagesize(backend->mr.ram_block)); + if (qemu_madvise(ptr, sz, value ? QEMU_MADV_DODUMP : QEMU_MADV_DONTDUMP)) { warn_report("Couldn't change property 'dump' on '%s': %s", @@ -344,6 +348,13 @@ host_memory_backend_memory_complete(UserCreatable *uc,= Error **errp) ptr =3D memory_region_get_ram_ptr(&backend->mr); sz =3D memory_region_size(&backend->mr); =20 + /* + * Round up size to be an integer multiple of pagesize, because + * both madvise() and mbind() does not really like setting + * advice/policy to just a fraction of a page. + */ + sz =3D ROUND_UP(sz, qemu_ram_pagesize(backend->mr.ram_block)); + if (backend->merge && qemu_madvise(ptr, sz, QEMU_MADV_MERGEABLE)) { warn_report("Couldn't set property 'merge' on '%s': %s", --=20 2.44.1