{"id":1839910,"url":"http://patchwork.ozlabs.org/api/patches/1839910/?format=json","web_url":"http://patchwork.ozlabs.org/project/qemu-devel/patch/20230926185738.277351-14-david@redhat.com/","project":{"id":14,"url":"http://patchwork.ozlabs.org/api/projects/14/?format=json","name":"QEMU Development","link_name":"qemu-devel","list_id":"qemu-devel.nongnu.org","list_email":"qemu-devel@nongnu.org","web_url":"","scm_url":"","webscm_url":"","list_archive_url":"","list_archive_url_format":"","commit_url_format":""},"msgid":"<20230926185738.277351-14-david@redhat.com>","list_archive_url":null,"date":"2023-09-26T18:57:33","name":"[v4,13/18] memory: Clarify mapping requirements for RamDiscardManager","commit_ref":null,"pull_url":null,"state":"new","archived":false,"hash":"8c0871d14ffe1df433c0d5cfb6a3f4562563895b","submitter":{"id":70402,"url":"http://patchwork.ozlabs.org/api/people/70402/?format=json","name":"David Hildenbrand","email":"david@redhat.com"},"delegate":null,"mbox":"http://patchwork.ozlabs.org/project/qemu-devel/patch/20230926185738.277351-14-david@redhat.com/mbox/","series":[{"id":374991,"url":"http://patchwork.ozlabs.org/api/series/374991/?format=json","web_url":"http://patchwork.ozlabs.org/project/qemu-devel/list/?series=374991","date":"2023-09-26T18:57:23","name":"virtio-mem: Expose device memory through multiple memslots","version":4,"mbox":"http://patchwork.ozlabs.org/series/374991/mbox/"}],"comments":"http://patchwork.ozlabs.org/api/patches/1839910/comments/","check":"pending","checks":"http://patchwork.ozlabs.org/api/patches/1839910/checks/","tags":{},"related":[],"headers":{"Return-Path":"<qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org>","X-Original-To":"incoming@patchwork.ozlabs.org","Delivered-To":"patchwork-incoming@legolas.ozlabs.org","Authentication-Results":["legolas.ozlabs.org;\n\tdkim=pass (1024-bit key;\n unprotected) header.d=redhat.com header.i=@redhat.com header.a=rsa-sha256\n header.s=mimecast20190719 header.b=BbLieDgb;\n\tdkim-atps=neutral","legolas.ozlabs.org;\n spf=pass (sender SPF authorized) smtp.mailfrom=nongnu.org\n (client-ip=209.51.188.17; helo=lists.gnu.org;\n envelope-from=qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org;\n receiver=patchwork.ozlabs.org)"],"Received":["from lists.gnu.org (lists.gnu.org [209.51.188.17])\n\t(using TLSv1.2 with cipher ECDHE-ECDSA-AES256-GCM-SHA384 (256/256 bits))\n\t(No client certificate requested)\n\tby legolas.ozlabs.org (Postfix) with ESMTPS id 4Rw8GX4XPGz1ynX\n\tfor <incoming@patchwork.ozlabs.org>; Wed, 27 Sep 2023 05:01:08 +1000 (AEST)","from localhost ([::1] helo=lists1p.gnu.org)\n\tby lists.gnu.org with esmtp (Exim 4.90_1)\n\t(envelope-from <qemu-devel-bounces@nongnu.org>)\n\tid 1qlDI9-0001q2-13; Tue, 26 Sep 2023 15:00:17 -0400","from eggs.gnu.org ([2001:470:142:3::10])\n by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256)\n (Exim 4.90_1) (envelope-from <david@redhat.com>) id 1qlDHj-0001LQ-LU\n for qemu-devel@nongnu.org; Tue, 26 Sep 2023 14:59:52 -0400","from us-smtp-delivery-124.mimecast.com ([170.10.133.124])\n by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256)\n (Exim 4.90_1) (envelope-from <david@redhat.com>) id 1qlDHf-0003Dl-NE\n for qemu-devel@nongnu.org; Tue, 26 Sep 2023 14:59:51 -0400","from mimecast-mx02.redhat.com (mimecast-mx02.redhat.com\n [66.187.233.88]) by relay.mimecast.com with ESMTP with STARTTLS\n (version=TLSv1.2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id\n us-mta-558-5lnrPmILMWqhoyXc1N9-GA-1; Tue, 26 Sep 2023 14:59:41 -0400","from smtp.corp.redhat.com (int-mx04.intmail.prod.int.rdu2.redhat.com\n [10.11.54.4])\n (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits))\n (No client certificate requested)\n by mimecast-mx02.redhat.com (Postfix) with ESMTPS id 13CCA8007A4;\n Tue, 26 Sep 2023 18:59:41 +0000 (UTC)","from t14s.fritz.box (unknown [10.39.192.33])\n by smtp.corp.redhat.com (Postfix) with ESMTP id 474612026D4B;\n Tue, 26 Sep 2023 18:59:35 +0000 (UTC)"],"DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com;\n s=mimecast20190719; t=1695754786;\n h=from:from:reply-to:subject:subject:date:date:message-id:message-id:\n to:to:cc:cc:mime-version:mime-version:\n content-transfer-encoding:content-transfer-encoding:\n in-reply-to:in-reply-to:references:references;\n bh=kAjWTObzNlBTuzJ6Kx6X0lhS4kVtRiZ5bCIIKZx09sc=;\n b=BbLieDgbq/mAb4zx9xeJV8g/D+IgFwHedh+FV/o1DPlRwlvdhYqrxG5SJMKqNZEu5Qd4s8\n ypOVtlVWj/gbiAFGTgpZqqQw1i1eHjIYAKDnTChvcttzAWus4LJ9/BlL1K11zaDD0xzGqL\n Z80GeWxB2TZpT6sNPcrxl6Or3YV5dMA=","X-MC-Unique":"5lnrPmILMWqhoyXc1N9-GA-1","From":"David Hildenbrand <david@redhat.com>","To":"qemu-devel@nongnu.org","Cc":"David Hildenbrand <david@redhat.com>, Paolo Bonzini <pbonzini@redhat.com>,\n Igor Mammedov <imammedo@redhat.com>,\n Xiao Guangrong <xiaoguangrong.eric@gmail.com>,\n \"Michael S. Tsirkin\" <mst@redhat.com>, Peter Xu <peterx@redhat.com>,\n\t=?utf-8?q?Philippe_Mathieu-Daud=C3=A9?= <philmd@linaro.org>,\n Eduardo Habkost <eduardo@habkost.net>,\n Marcel Apfelbaum <marcel.apfelbaum@gmail.com>,\n Yanan Wang <wangyanan55@huawei.com>, Michal Privoznik <mprivozn@redhat.com>,\n\t=?utf-8?q?Daniel_P_=2E_Berrang=C3=A9?= <berrange@redhat.com>,\n Gavin Shan <gshan@redhat.com>, Alex Williamson <alex.williamson@redhat.com>,\n Stefan Hajnoczi <stefanha@redhat.com>,\n \"Maciej S . Szmigiero\" <mail@maciej.szmigiero.name>, kvm@vger.kernel.org,\n \"Maciej S . Szmigiero\" <maciej.szmigiero@oracle.com>","Subject":"[PATCH v4 13/18] memory: Clarify mapping requirements for\n RamDiscardManager","Date":"Tue, 26 Sep 2023 20:57:33 +0200","Message-ID":"<20230926185738.277351-14-david@redhat.com>","In-Reply-To":"<20230926185738.277351-1-david@redhat.com>","References":"<20230926185738.277351-1-david@redhat.com>","MIME-Version":"1.0","Content-Transfer-Encoding":"8bit","X-Scanned-By":"MIMEDefang 3.1 on 10.11.54.4","Received-SPF":"pass client-ip=170.10.133.124; envelope-from=david@redhat.com;\n helo=us-smtp-delivery-124.mimecast.com","X-Spam_score_int":"-20","X-Spam_score":"-2.1","X-Spam_bar":"--","X-Spam_report":"(-2.1 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_HIGH=-0.001,\n DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1,\n RCVD_IN_DNSWL_NONE=-0.0001, RCVD_IN_MSPIKE_H3=0.001, RCVD_IN_MSPIKE_WL=0.001,\n SPF_HELO_NONE=0.001, SPF_PASS=-0.001 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":"<qemu-devel.nongnu.org>","List-Unsubscribe":"<https://lists.nongnu.org/mailman/options/qemu-devel>,\n <mailto:qemu-devel-request@nongnu.org?subject=unsubscribe>","List-Archive":"<https://lists.nongnu.org/archive/html/qemu-devel>","List-Post":"<mailto:qemu-devel@nongnu.org>","List-Help":"<mailto:qemu-devel-request@nongnu.org?subject=help>","List-Subscribe":"<https://lists.nongnu.org/mailman/listinfo/qemu-devel>,\n <mailto:qemu-devel-request@nongnu.org?subject=subscribe>","Errors-To":"qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org","Sender":"qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org"},"content":"We really only care about the RAM memory region not being mapped into\nan address space yet as long as we're still setting up the\nRamDiscardManager. Once mapped into an address space, memory notifiers\nwould get notified about such a region and any attempts to modify the\nRamDiscardManager would be wrong.\n\nWhile \"mapped into an address space\" is easy to check for RAM regions that\nare mapped directly (following the ->container links), it's harder to\ncheck when such regions are mapped indirectly via aliases. For now, we can\nonly detect that a region is mapped through an alias (->mapped_via_alias),\nbut we don't have a handle on these aliases to follow all their ->container\nlinks to test if they are eventually mapped into an address space.\n\nSo relax the assertion in memory_region_set_ram_discard_manager(),\nremove the check in memory_region_get_ram_discard_manager() and clarify\nthe doc.\n\nReviewed-by: Maciej S. Szmigiero <maciej.szmigiero@oracle.com>\nSigned-off-by: David Hildenbrand <david@redhat.com>\n---\n include/exec/memory.h | 5 +++--\n softmmu/memory.c      | 4 ++--\n 2 files changed, 5 insertions(+), 4 deletions(-)","diff":"diff --git a/include/exec/memory.h b/include/exec/memory.h\nindex ef23d65afc..73062edf49 100644\n--- a/include/exec/memory.h\n+++ b/include/exec/memory.h\n@@ -599,8 +599,9 @@ typedef void (*ReplayRamDiscard)(MemoryRegionSection *section, void *opaque);\n  * populated (consuming memory), to be used/accessed by the VM.\n  *\n  * A #RamDiscardManager can only be set for a RAM #MemoryRegion while the\n- * #MemoryRegion isn't mapped yet; it cannot change while the #MemoryRegion is\n- * mapped.\n+ * #MemoryRegion isn't mapped into an address space yet (either directly\n+ * or via an alias); it cannot change while the #MemoryRegion is\n+ * mapped into an address space.\n  *\n  * The #RamDiscardManager is intended to be used by technologies that are\n  * incompatible with discarding of RAM (e.g., VFIO, which may pin all\ndiff --git a/softmmu/memory.c b/softmmu/memory.c\nindex c0383a163d..9d491d488b 100644\n--- a/softmmu/memory.c\n+++ b/softmmu/memory.c\n@@ -2085,7 +2085,7 @@ int memory_region_iommu_num_indexes(IOMMUMemoryRegion *iommu_mr)\n \n RamDiscardManager *memory_region_get_ram_discard_manager(MemoryRegion *mr)\n {\n-    if (!memory_region_is_mapped(mr) || !memory_region_is_ram(mr)) {\n+    if (!memory_region_is_ram(mr)) {\n         return NULL;\n     }\n     return mr->rdm;\n@@ -2094,7 +2094,7 @@ RamDiscardManager *memory_region_get_ram_discard_manager(MemoryRegion *mr)\n void memory_region_set_ram_discard_manager(MemoryRegion *mr,\n                                            RamDiscardManager *rdm)\n {\n-    g_assert(memory_region_is_ram(mr) && !memory_region_is_mapped(mr));\n+    g_assert(memory_region_is_ram(mr));\n     g_assert(!rdm || !mr->rdm);\n     mr->rdm = rdm;\n }\n","prefixes":["v4","13/18"]}