From nobody Sat May 18 15:49:38 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=fail; 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=fail(p=none dis=none) header.from=redhat.com ARC-Seal: i=1; a=rsa-sha256; t=1612978486; cv=none; d=zohomail.com; s=zohoarc; b=kTYTG8qAG19VwEEW6S1I6axH/xiLZgMfLDZyCTXExFwuKPWYuuXv3gp8LbFUqAznz9X7QYWc262G3My6eoBF8TcsKF2/Hf5Bi5VrvYnehosox9mUX3ffhIOAfFXFqSQKYRgA14vJZFPljwzc4bGbwGqnO0UB/o6eiNCZe02DVBU= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1612978486; h=Content-Type:Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=VKVoAt4z7Eiuw9GxM7NvedLWusbN/4tTwk/YVJYp63U=; b=ABRht50H3Nb5Fxl0QvAe7OP/r1Litls63VdWdw8WXMovjV30746Il9CKMxoLe6pS9rwl+RyNZWc/7wHlrAu7Tl9joVw2XtrqBgu8DL0gpxZygR7tk7EzOBVyEOAyNJAne7+WM+TQjs6OE1yFsYuiPbetX2AwvwlmHfgv/4tqb0g= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=fail; 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=fail header.from= (p=none dis=none) header.from= Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1612978485649439.11912913310516; Wed, 10 Feb 2021 09:34:45 -0800 (PST) Received: from localhost ([::1]:53552 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1l9tO0-0005Nu-Hb for importer@patchew.org; Wed, 10 Feb 2021 12:34:44 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]:50752) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1l9t5y-000370-F0 for qemu-devel@nongnu.org; Wed, 10 Feb 2021 12:16:06 -0500 Received: from us-smtp-delivery-124.mimecast.com ([216.205.24.124]:29133) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_CBC_SHA1:256) (Exim 4.90_1) (envelope-from ) id 1l9t5u-0001Xf-1j for qemu-devel@nongnu.org; Wed, 10 Feb 2021 12:16:06 -0500 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-549-VgL3Yp2_PXGd3ca8H4NQ4Q-1; Wed, 10 Feb 2021 12:15:59 -0500 Received: from smtp.corp.redhat.com (int-mx01.intmail.prod.int.phx2.redhat.com [10.5.11.11]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mimecast-mx01.redhat.com (Postfix) with ESMTPS id 5409A1052BA2; Wed, 10 Feb 2021 17:15:58 +0000 (UTC) Received: from t480s.redhat.com (ovpn-113-218.ams2.redhat.com [10.36.113.218]) by smtp.corp.redhat.com (Postfix) with ESMTP id A0DA618AA1; Wed, 10 Feb 2021 17:15:55 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1612977361; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=VKVoAt4z7Eiuw9GxM7NvedLWusbN/4tTwk/YVJYp63U=; b=FUX6CwVTFzUxuOHi4zr8TVaczGqCP/x70pPjH9UjEaQAM0KrdVgGIBzPcXEDDih+9S+86+ DpWJzmRcdwrCI5gl5alDQlydhQb3sGoHdvADFI1rZkNHIKGXZjuXlOt/uAF8azZyeHseTr YS3jcjW97O07XUAd12H7QUqA8pPIdkA= X-MC-Unique: VgL3Yp2_PXGd3ca8H4NQ4Q-1 From: David Hildenbrand To: qemu-devel@nongnu.org Subject: [PATCH v1 1/5] tpm: mark correct memory region range dirty when clearing RAM Date: Wed, 10 Feb 2021 18:15:33 +0100 Message-Id: <20210210171537.32932-2-david@redhat.com> In-Reply-To: <20210210171537.32932-1-david@redhat.com> References: <20210210171537.32932-1-david@redhat.com> MIME-Version: 1.0 X-Scanned-By: MIMEDefang 2.79 on 10.5.11.11 Authentication-Results: relay.mimecast.com; auth=pass smtp.auth=CUSA124A263 smtp.mailfrom=david@redhat.com X-Mimecast-Spam-Score: 0 X-Mimecast-Originator: redhat.com Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable 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=216.205.24.124; envelope-from=david@redhat.com; helo=us-smtp-delivery-124.mimecast.com X-Spam_score_int: -33 X-Spam_score: -3.4 X-Spam_bar: --- X-Spam_report: (-3.4 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_HIGH=-0.568, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_LOW=-0.7, RCVD_IN_MSPIKE_H3=0.001, RCVD_IN_MSPIKE_WL=0.001, 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.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Laurent Vivier , Thomas Huth , Stefan Berger , "Michael S. Tsirkin" , David Hildenbrand , "Dr . David Alan Gilbert" , Peter Xu , Alex Williamson , Claudio Fontana , Paolo Bonzini , =?UTF-8?q?Marc-Andr=C3=A9=20Lureau?= , =?UTF-8?q?Alex=20Benn=C3=A9e?= , Igor Mammedov Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: fail (Header signature does not verify) We might not start at the beginning of the memory region. We could also calculate via the difference in the host address; however, memory_region_set_dirty() also relies on memory_region_get_ram_addr() internally, so let's just use that. Fixes: ffab1be70692 ("tpm: clear RAM when "memory overwrite" requested") Cc: Marc-Andr=C3=A9 Lureau Cc: Paolo Bonzini Cc: "Michael S. Tsirkin" Cc: Alex Williamson Cc: Dr. David Alan Gilbert Cc: Igor Mammedov Cc: Claudio Fontana Cc: Thomas Huth Cc: "Alex Benn=C3=A9e" Cc: Peter Xu Cc: Laurent Vivier Cc: Stefan Berger Signed-off-by: David Hildenbrand Acked-by: Stefan Berger --- hw/tpm/tpm_ppi.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/hw/tpm/tpm_ppi.c b/hw/tpm/tpm_ppi.c index 72d7a3d926..e0e2d2c8e1 100644 --- a/hw/tpm/tpm_ppi.c +++ b/hw/tpm/tpm_ppi.c @@ -30,11 +30,13 @@ void tpm_ppi_reset(TPMPPI *tpmppi) guest_phys_blocks_init(&guest_phys_blocks); guest_phys_blocks_append(&guest_phys_blocks); QTAILQ_FOREACH(block, &guest_phys_blocks.head, next) { + ram_addr_t mr_start =3D memory_region_get_ram_addr(block->mr); + trace_tpm_ppi_memset(block->host_addr, block->target_end - block->target_start); memset(block->host_addr, 0, block->target_end - block->target_start); - memory_region_set_dirty(block->mr, 0, + memory_region_set_dirty(block->mr, block->target_start - mr_st= art, block->target_end - block->target_star= t); } guest_phys_blocks_free(&guest_phys_blocks); --=20 2.29.2 From nobody Sat May 18 15:49:38 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=fail; 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=fail(p=none dis=none) header.from=redhat.com ARC-Seal: i=1; a=rsa-sha256; t=1612978459; cv=none; d=zohomail.com; s=zohoarc; b=KcAsrywjomhhR58bXUiUbiZF3vtF+O3/3LfO//N1TjYYKSPVWu9hj7jl1ZdAWHqmIwaUesJHOGySdg/UcjAubRcgM0V817U5geitg8Z90KyPaQohOiXAjPZPuZpSjQqr7Sxitt4DBmTB/IQrT39FWsoIn5OG+2wbcVmdgzzgIwM= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1612978459; h=Content-Type:Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=aj7TDM+GffPL0On5vU7UxKhInV5rzYZa5xE0HJ/LCoM=; b=dE1Uh4Pu5L9UdBwllEZUKuVZGO0k10uO1FuHHeTdR+ZFtii3qiG3MvujX5UCCcfWHjex0eF9SHLHbtlwb51gFhqaSMTC9oIkSzPqnCWDPxgspMpAo3A8rhvA59N8KGiUm8P/lEcTrXx/OkF2GYr6R5Jq0X5uix97fwRFWmowHv4= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=fail; 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=fail header.from= (p=none dis=none) header.from= Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 16129784586611019.2961282878856; Wed, 10 Feb 2021 09:34:18 -0800 (PST) Received: from localhost ([::1]:41572 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1l9t8P-0004yo-0C for importer@patchew.org; Wed, 10 Feb 2021 12:18:37 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]:50814) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1l9t67-0003Ir-BE for qemu-devel@nongnu.org; Wed, 10 Feb 2021 12:16:20 -0500 Received: from us-smtp-delivery-124.mimecast.com ([63.128.21.124]:36296) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_CBC_SHA1:256) (Exim 4.90_1) (envelope-from ) id 1l9t64-0001aq-Ho for qemu-devel@nongnu.org; Wed, 10 Feb 2021 12:16:15 -0500 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-546-Pr8d8VgJNx6j45_K7tqbyw-1; Wed, 10 Feb 2021 12:16:08 -0500 Received: from smtp.corp.redhat.com (int-mx01.intmail.prod.int.phx2.redhat.com [10.5.11.11]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mimecast-mx01.redhat.com (Postfix) with ESMTPS id 25BC5193578B; Wed, 10 Feb 2021 17:16:07 +0000 (UTC) Received: from t480s.redhat.com (ovpn-113-218.ams2.redhat.com [10.36.113.218]) by smtp.corp.redhat.com (Postfix) with ESMTP id A17B76F43F; Wed, 10 Feb 2021 17:15:58 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1612977371; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=aj7TDM+GffPL0On5vU7UxKhInV5rzYZa5xE0HJ/LCoM=; b=HgtuDgiqGvQcnazmU4so6QAJJh4Y2OvB63CC9cLqxyM87PCFVlXkFtmCCZUeYC79xo4CCK pRCxw94rnDEatR/enL9hl2aO9/CKoXrIzbJ0OohZf7KFJvmrkSzdXbT/vwhX+WwHiU0v3M kaGfiCwuv21FswqLjT4NFtSj3M4JzCg= X-MC-Unique: Pr8d8VgJNx6j45_K7tqbyw-1 From: David Hildenbrand To: qemu-devel@nongnu.org Subject: [PATCH v1 2/5] softmmu/memory_mapping: reuse qemu_get_guest_simple_memory_mapping() Date: Wed, 10 Feb 2021 18:15:34 +0100 Message-Id: <20210210171537.32932-3-david@redhat.com> In-Reply-To: <20210210171537.32932-1-david@redhat.com> References: <20210210171537.32932-1-david@redhat.com> MIME-Version: 1.0 X-Scanned-By: MIMEDefang 2.79 on 10.5.11.11 Authentication-Results: relay.mimecast.com; auth=pass smtp.auth=CUSA124A263 smtp.mailfrom=david@redhat.com X-Mimecast-Spam-Score: 0 X-Mimecast-Originator: redhat.com Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable 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=63.128.21.124; envelope-from=david@redhat.com; helo=us-smtp-delivery-124.mimecast.com X-Spam_score_int: -33 X-Spam_score: -3.4 X-Spam_bar: --- X-Spam_report: (-3.4 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_HIGH=-0.568, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_LOW=-0.7, RCVD_IN_MSPIKE_H4=0.001, RCVD_IN_MSPIKE_WL=0.001, 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.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Laurent Vivier , Thomas Huth , "Michael S. Tsirkin" , David Hildenbrand , "Dr . David Alan Gilbert" , Peter Xu , Alex Williamson , Claudio Fontana , Paolo Bonzini , =?UTF-8?q?Marc-Andr=C3=A9=20Lureau?= , =?UTF-8?q?Alex=20Benn=C3=A9e?= , Igor Mammedov Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: fail (Header signature does not verify) Let's reuse qemu_get_guest_simple_memory_mapping(), which does exactly what we want. Cc: Marc-Andr=C3=A9 Lureau Cc: Paolo Bonzini Cc: "Michael S. Tsirkin" Cc: Alex Williamson Cc: Dr. David Alan Gilbert Cc: Igor Mammedov Cc: Claudio Fontana Cc: Thomas Huth Cc: "Alex Benn=C3=A9e" Cc: Peter Xu Cc: Laurent Vivier Signed-off-by: David Hildenbrand --- softmmu/memory_mapping.c | 8 +------- 1 file changed, 1 insertion(+), 7 deletions(-) diff --git a/softmmu/memory_mapping.c b/softmmu/memory_mapping.c index 18d0b8067c..2677392de7 100644 --- a/softmmu/memory_mapping.c +++ b/softmmu/memory_mapping.c @@ -289,8 +289,6 @@ void qemu_get_guest_memory_mapping(MemoryMappingList *l= ist, Error **errp) { CPUState *cpu, *first_paging_enabled_cpu; - GuestPhysBlock *block; - ram_addr_t offset, length; =20 first_paging_enabled_cpu =3D find_paging_enabled_cpu(first_cpu); if (first_paging_enabled_cpu) { @@ -310,11 +308,7 @@ void qemu_get_guest_memory_mapping(MemoryMappingList *= list, * If the guest doesn't use paging, the virtual address is equal to ph= ysical * address. */ - QTAILQ_FOREACH(block, &guest_phys_blocks->head, next) { - offset =3D block->target_start; - length =3D block->target_end - block->target_start; - create_new_memory_mapping(list, offset, offset, length); - } + qemu_get_guest_simple_memory_mapping(list, guest_phys_blocks); } =20 void qemu_get_guest_simple_memory_mapping(MemoryMappingList *list, --=20 2.29.2 From nobody Sat May 18 15:49:38 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=fail; 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=fail(p=none dis=none) header.from=redhat.com ARC-Seal: i=1; a=rsa-sha256; t=1612978095; cv=none; d=zohomail.com; s=zohoarc; b=TjN1NHbAJT22+V6pHVus3UVDkRjQjriLhV9o+UL4t4UbtO7VwlNdC+/dRdUn7HrBH8ReUFf6r9yCh3+y6gDvHpixM7ptXxS8Ey7V1L3xUPI0jkslrWxtsDBFp+QQsiJDkIjZwL7nslV1+nZI19QDVF63nR1oeOArc8xebzpcWdA= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1612978095; h=Content-Type:Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=N3Od6yn4E5nItU4s+EnNaNhzybF0mIJWT0TgDHE67Jk=; b=QTxdu2Mm87jFJlw2HXsSCBdJ+pck+5Z3UZ17aqc35Wozni/lPRA2NZNpIyqJphmI2dMpDPh1JLK0qIBy0KyFYRO/aXNkHZfIVVI/DGCd3eIbSGEd3xRBtbtGa4SRbbdT5hBHie3wiAGNG/+52DdLIpHYO5cLRohIwmGe/o/SGog= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=fail; 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=fail header.from= (p=none dis=none) header.from= Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 161297809466491.79362346059679; Wed, 10 Feb 2021 09:28:14 -0800 (PST) Received: from localhost ([::1]:36024 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1l9tHh-00060n-Ib for importer@patchew.org; Wed, 10 Feb 2021 12:28:13 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]:50884) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1l9t6N-0003UJ-L7 for qemu-devel@nongnu.org; Wed, 10 Feb 2021 12:16:32 -0500 Received: from us-smtp-delivery-124.mimecast.com ([216.205.24.124]:58548) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_CBC_SHA1:256) (Exim 4.90_1) (envelope-from ) id 1l9t6H-0001e2-QM for qemu-devel@nongnu.org; Wed, 10 Feb 2021 12:16:30 -0500 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-271-2ZksoJg-N2y-G_vpe68CZw-1; Wed, 10 Feb 2021 12:16:20 -0500 Received: from smtp.corp.redhat.com (int-mx01.intmail.prod.int.phx2.redhat.com [10.5.11.11]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mimecast-mx01.redhat.com (Postfix) with ESMTPS id 0592C80197B; Wed, 10 Feb 2021 17:16:19 +0000 (UTC) Received: from t480s.redhat.com (ovpn-113-218.ams2.redhat.com [10.36.113.218]) by smtp.corp.redhat.com (Postfix) with ESMTP id 7509850C0B; Wed, 10 Feb 2021 17:16:07 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1612977384; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=N3Od6yn4E5nItU4s+EnNaNhzybF0mIJWT0TgDHE67Jk=; b=GzGJ5otasMbt333XCSv5DYBNC00z/tL0IPMMioV2+y33flJA4/9mHj7fgAH8SFBg1aaTAU W/InBdolQBvN7j5RW7XLFIGphL70Y8OEy4ovnc1UlrMjnj0LZZatKj03xtyHX+DR1fcb63 MBXRtSIXQwCnG1NbhRnSNYHFcou06Ak= X-MC-Unique: 2ZksoJg-N2y-G_vpe68CZw-1 From: David Hildenbrand To: qemu-devel@nongnu.org Subject: [PATCH v1 3/5] softmmu/memory_mapping: never merge ranges accross memory regions Date: Wed, 10 Feb 2021 18:15:35 +0100 Message-Id: <20210210171537.32932-4-david@redhat.com> In-Reply-To: <20210210171537.32932-1-david@redhat.com> References: <20210210171537.32932-1-david@redhat.com> MIME-Version: 1.0 X-Scanned-By: MIMEDefang 2.79 on 10.5.11.11 Authentication-Results: relay.mimecast.com; auth=pass smtp.auth=CUSA124A263 smtp.mailfrom=david@redhat.com X-Mimecast-Spam-Score: 0 X-Mimecast-Originator: redhat.com Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable 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=216.205.24.124; envelope-from=david@redhat.com; helo=us-smtp-delivery-124.mimecast.com X-Spam_score_int: -33 X-Spam_score: -3.4 X-Spam_bar: --- X-Spam_report: (-3.4 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_HIGH=-0.568, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_LOW=-0.7, RCVD_IN_MSPIKE_H3=0.001, RCVD_IN_MSPIKE_WL=0.001, 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.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Laurent Vivier , Thomas Huth , "Michael S. Tsirkin" , David Hildenbrand , "Dr . David Alan Gilbert" , Peter Xu , Alex Williamson , Claudio Fontana , Paolo Bonzini , =?UTF-8?q?Marc-Andr=C3=A9=20Lureau?= , =?UTF-8?q?Alex=20Benn=C3=A9e?= , Igor Mammedov Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: fail (Header signature does not verify) Let's make sure to not merge when different memory regions are involved. Unlikely, but theoretically possible. Cc: Marc-Andr=C3=A9 Lureau Cc: Paolo Bonzini Cc: "Michael S. Tsirkin" Cc: Alex Williamson Cc: Dr. David Alan Gilbert Cc: Igor Mammedov Cc: Claudio Fontana Cc: Thomas Huth Cc: "Alex Benn=C3=A9e" Cc: Peter Xu Cc: Laurent Vivier Signed-off-by: David Hildenbrand --- softmmu/memory_mapping.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/softmmu/memory_mapping.c b/softmmu/memory_mapping.c index 2677392de7..ad4911427a 100644 --- a/softmmu/memory_mapping.c +++ b/softmmu/memory_mapping.c @@ -230,7 +230,8 @@ static void guest_phys_blocks_region_add(MemoryListener= *listener, =20 /* we want continuity in both guest-physical and host-virtual memo= ry */ if (predecessor->target_end < target_start || - predecessor->host_addr + predecessor_size !=3D host_addr) { + predecessor->host_addr + predecessor_size !=3D host_addr || + predecessor->mr !=3D section->mr) { predecessor =3D NULL; } } --=20 2.29.2 From nobody Sat May 18 15:49:38 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=fail; 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=fail(p=none dis=none) header.from=redhat.com ARC-Seal: i=1; a=rsa-sha256; t=1612977783; cv=none; d=zohomail.com; s=zohoarc; b=XDmrALHiruEjm/QP0vhmjkTlXy5KLLpuEsHVGBlm0CpsUesGBd5rGM6k6ppmNnnXwNl/ZVyH1yF4gLjfIXOjxnrS1lOIZx117oabKzhw4HkHBgzfoovebFVOLh4VBkL4P4nYt694PCMyPytzmVcF2vfbBxkk6mJZsrX9od03rIE= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1612977783; h=Content-Type:Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=I1GegRRsYAOEmXogjdvduSgztiri02UqI880GVRk4zo=; b=S4bBz/odCimAfuKncocDvOManM2NwmglHzhvcSOwj7uMt0lyWLY9BAAKEXkW1bp/JbbXE4FhP3MkHbNEJdjrLig3jQSkcOrM/68DdaLrdHOf78oS61aTdzwitRe3zHoMDaUEM7sYVfy8UXW3HFLGT5Ohtw1WixrgZPUwHhxSXRI= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=fail; 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=fail header.from= (p=none dis=none) header.from= Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1612977782973844.8412361004195; Wed, 10 Feb 2021 09:23:02 -0800 (PST) Received: from localhost ([::1]:50712 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1l9tCf-0000JK-7q for importer@patchew.org; Wed, 10 Feb 2021 12:23:01 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]:50896) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1l9t6Q-0003XA-7m for qemu-devel@nongnu.org; Wed, 10 Feb 2021 12:16:34 -0500 Received: from us-smtp-delivery-124.mimecast.com ([216.205.24.124]:44990) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_CBC_SHA1:256) (Exim 4.90_1) (envelope-from ) id 1l9t6N-0001ex-Pq for qemu-devel@nongnu.org; Wed, 10 Feb 2021 12:16:33 -0500 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-281-StGjyNspPYW3UH82bEo_fQ-1; Wed, 10 Feb 2021 12:16:29 -0500 Received: from smtp.corp.redhat.com (int-mx01.intmail.prod.int.phx2.redhat.com [10.5.11.11]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mimecast-mx01.redhat.com (Postfix) with ESMTPS id 8863984E243; Wed, 10 Feb 2021 17:16:28 +0000 (UTC) Received: from t480s.redhat.com (ovpn-113-218.ams2.redhat.com [10.36.113.218]) by smtp.corp.redhat.com (Postfix) with ESMTP id 72D592BFEB; Wed, 10 Feb 2021 17:16:19 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1612977391; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=I1GegRRsYAOEmXogjdvduSgztiri02UqI880GVRk4zo=; b=VJYkhOHVWuT9lhj4427EAtObrAaXt+AyWhghw9qRVhizQKnwyKWbh5nYwgNxewSp6vsg81 w8jjFh8uytVshKEVhlNLHHn4kvmFiePrSPjFRFZPrGMHPKqpbdJJa6unaw0KbAhQpw8bYN KtfHrJQ1kh/OSQkm341zYkJ/9HdMGcQ= X-MC-Unique: StGjyNspPYW3UH82bEo_fQ-1 From: David Hildenbrand To: qemu-devel@nongnu.org Subject: [PATCH v1 4/5] softmmu/memory_mapping: factor out adding physical memory ranges Date: Wed, 10 Feb 2021 18:15:36 +0100 Message-Id: <20210210171537.32932-5-david@redhat.com> In-Reply-To: <20210210171537.32932-1-david@redhat.com> References: <20210210171537.32932-1-david@redhat.com> MIME-Version: 1.0 X-Scanned-By: MIMEDefang 2.79 on 10.5.11.11 Authentication-Results: relay.mimecast.com; auth=pass smtp.auth=CUSA124A263 smtp.mailfrom=david@redhat.com X-Mimecast-Spam-Score: 0 X-Mimecast-Originator: redhat.com Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable 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=216.205.24.124; envelope-from=david@redhat.com; helo=us-smtp-delivery-124.mimecast.com X-Spam_score_int: -33 X-Spam_score: -3.4 X-Spam_bar: --- X-Spam_report: (-3.4 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_HIGH=-0.568, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_LOW=-0.7, RCVD_IN_MSPIKE_H3=0.001, RCVD_IN_MSPIKE_WL=0.001, 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.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Laurent Vivier , Thomas Huth , "Michael S. Tsirkin" , David Hildenbrand , "Dr . David Alan Gilbert" , Peter Xu , Alex Williamson , Claudio Fontana , Paolo Bonzini , =?UTF-8?q?Marc-Andr=C3=A9=20Lureau?= , =?UTF-8?q?Alex=20Benn=C3=A9e?= , Igor Mammedov Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: fail (Header signature does not verify) Let's factor out adding an item to the list, to be reused in RamDiscardMgr context next. Cc: Marc-Andr=C3=A9 Lureau Cc: Paolo Bonzini Cc: "Michael S. Tsirkin" Cc: Alex Williamson Cc: Dr. David Alan Gilbert Cc: Igor Mammedov Cc: Claudio Fontana Cc: Thomas Huth Cc: "Alex Benn=C3=A9e" Cc: Peter Xu Cc: Laurent Vivier Signed-off-by: David Hildenbrand --- softmmu/memory_mapping.c | 64 +++++++++++++++++++++------------------- 1 file changed, 34 insertions(+), 30 deletions(-) diff --git a/softmmu/memory_mapping.c b/softmmu/memory_mapping.c index ad4911427a..05e8270edc 100644 --- a/softmmu/memory_mapping.c +++ b/softmmu/memory_mapping.c @@ -194,35 +194,17 @@ typedef struct GuestPhysListener { MemoryListener listener; } GuestPhysListener; =20 -static void guest_phys_blocks_region_add(MemoryListener *listener, - MemoryRegionSection *section) +static void guest_phys_block_add(GuestPhysBlockList *list, MemoryRegion *m= r, + hwaddr target_start, hwaddr target_end, + uint8_t *host_addr) { - GuestPhysListener *g; - uint64_t section_size; - hwaddr target_start, target_end; - uint8_t *host_addr; - GuestPhysBlock *predecessor; - - /* we only care about RAM */ - if (!memory_region_is_ram(section->mr) || - memory_region_is_ram_device(section->mr) || - memory_region_is_nonvolatile(section->mr)) { - return; - } - - g =3D container_of(listener, GuestPhysListener, listener); - section_size =3D int128_get64(section->size); - target_start =3D section->offset_within_address_space; - target_end =3D target_start + section_size; - host_addr =3D memory_region_get_ram_ptr(section->mr) + - section->offset_within_region; - predecessor =3D NULL; + GuestPhysBlock *predecessor =3D NULL; =20 /* find continuity in guest physical address space */ - if (!QTAILQ_EMPTY(&g->list->head)) { + if (!QTAILQ_EMPTY(&list->head)) { hwaddr predecessor_size; =20 - predecessor =3D QTAILQ_LAST(&g->list->head); + predecessor =3D QTAILQ_LAST(&list->head); predecessor_size =3D predecessor->target_end - predecessor->target= _start; =20 /* the memory API guarantees monotonically increasing traversal */ @@ -231,7 +213,7 @@ static void guest_phys_blocks_region_add(MemoryListener= *listener, /* we want continuity in both guest-physical and host-virtual memo= ry */ if (predecessor->target_end < target_start || predecessor->host_addr + predecessor_size !=3D host_addr || - predecessor->mr !=3D section->mr) { + predecessor->mr !=3D mr) { predecessor =3D NULL; } } @@ -243,11 +225,11 @@ static void guest_phys_blocks_region_add(MemoryListen= er *listener, block->target_start =3D target_start; block->target_end =3D target_end; block->host_addr =3D host_addr; - block->mr =3D section->mr; - memory_region_ref(section->mr); + block->mr =3D mr; + memory_region_ref(mr); =20 - QTAILQ_INSERT_TAIL(&g->list->head, block, next); - ++g->list->num; + QTAILQ_INSERT_TAIL(&list->head, block, next); + ++list->num; } else { /* expand predecessor until @target_end; predecessor's start doesn= 't * change @@ -258,10 +240,32 @@ static void guest_phys_blocks_region_add(MemoryListen= er *listener, #ifdef DEBUG_GUEST_PHYS_REGION_ADD fprintf(stderr, "%s: target_start=3D" TARGET_FMT_plx " target_end=3D" TARGET_FMT_plx ": %s (count: %u)\n", __func__, target_start, - target_end, predecessor ? "joined" : "added", g->list->num); + target_end, predecessor ? "joined" : "added", list->num); #endif } =20 +static void guest_phys_blocks_region_add(MemoryListener *listener, + MemoryRegionSection *section) +{ + GuestPhysListener *g =3D container_of(listener, GuestPhysListener, lis= tener); + hwaddr target_start, target_end; + uint8_t *host_addr; + + /* we only care about RAM */ + if (!memory_region_is_ram(section->mr) || + memory_region_is_ram_device(section->mr) || + memory_region_is_nonvolatile(section->mr)) { + return; + } + + target_start =3D section->offset_within_address_space; + target_end =3D target_start + int128_get64(section->size); + host_addr =3D memory_region_get_ram_ptr(section->mr) + + section->offset_within_region; + guest_phys_block_add(g->list, section->mr, target_start, target_end, + host_addr); +} + void guest_phys_blocks_append(GuestPhysBlockList *list) { GuestPhysListener g =3D { 0 }; --=20 2.29.2 From nobody Sat May 18 15:49:38 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=fail; 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=fail(p=none dis=none) header.from=redhat.com ARC-Seal: i=1; a=rsa-sha256; t=1612977997; cv=none; d=zohomail.com; s=zohoarc; b=ff4WMn+8WOrA8LGOxJL0E9vMibfnevU8tIATS2OmsZsirFr1W+I8BmRRnpLxave2K/9/Y0XH7fFv8uf9LhCWSXmY2q9RqAdMMLZKqa9ikLOTsWkwqsJucX4HTN8BV6esausZfCijAMhp53/ys95eE4hEpw3flDL69gs3Y03r2cU= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1612977997; h=Content-Type:Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=hxPeKm8BLovfCxogO+cgDUCCtCt6oX5cZ4BQNTWesMs=; b=LgBHlaIVr1NbLP5u/YZFmA3KqCwsVQ/5woKrBWQtkwtnkke5f6HGgBSHS/L9xj3uPpkPtsm2B+Fm5GXg8oHgpKJXVP2mB7pEzKJhgw8hA0bELPQZ7lC0epoVSPh7nzpNw8BGSQ5f/iuxgBqHHuaHKzWYQJgyQUt4jGtKvffleFI= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=fail; 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=fail header.from= (p=none dis=none) header.from= Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1612977996821202.87001767275387; Wed, 10 Feb 2021 09:26:36 -0800 (PST) Received: from localhost ([::1]:59516 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1l9tG7-0003zr-Bf for importer@patchew.org; Wed, 10 Feb 2021 12:26:35 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]:50980) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1l9t6c-0003vY-KV for qemu-devel@nongnu.org; Wed, 10 Feb 2021 12:16:47 -0500 Received: from us-smtp-delivery-124.mimecast.com ([216.205.24.124]:26781) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_CBC_SHA1:256) (Exim 4.90_1) (envelope-from ) id 1l9t6a-0001li-4y for qemu-devel@nongnu.org; Wed, 10 Feb 2021 12:16:46 -0500 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-239-nMzY3dxNPgqPrZXzuxZq4w-1; Wed, 10 Feb 2021 12:16:41 -0500 Received: from smtp.corp.redhat.com (int-mx01.intmail.prod.int.phx2.redhat.com [10.5.11.11]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mimecast-mx01.redhat.com (Postfix) with ESMTPS id 7FF4584E243; Wed, 10 Feb 2021 17:16:40 +0000 (UTC) Received: from t480s.redhat.com (ovpn-113-218.ams2.redhat.com [10.36.113.218]) by smtp.corp.redhat.com (Postfix) with ESMTP id 3A86260657; Wed, 10 Feb 2021 17:16:29 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1612977403; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=hxPeKm8BLovfCxogO+cgDUCCtCt6oX5cZ4BQNTWesMs=; b=ifOqGZxQu0FqUKdIdA4p+hvbpVnRCMraQfOVG/IrVTYqgef3JoJvHQI9+sIwOl2Pkvtggr BMML45Y1VGtdE1b59brYXT9xDsWfzZbUtKnKghCBzUOYVidxMGcyrgFXefSEoAWVEDUjwc cjJfFmn7YBdLrojIPVwRljrco+nuacc= X-MC-Unique: nMzY3dxNPgqPrZXzuxZq4w-1 From: David Hildenbrand To: qemu-devel@nongnu.org Subject: [PATCH v1 5/5] softmmu/memory_mapping: optimize for RamDiscardMgr sections Date: Wed, 10 Feb 2021 18:15:37 +0100 Message-Id: <20210210171537.32932-6-david@redhat.com> In-Reply-To: <20210210171537.32932-1-david@redhat.com> References: <20210210171537.32932-1-david@redhat.com> MIME-Version: 1.0 X-Scanned-By: MIMEDefang 2.79 on 10.5.11.11 Authentication-Results: relay.mimecast.com; auth=pass smtp.auth=CUSA124A263 smtp.mailfrom=david@redhat.com X-Mimecast-Spam-Score: 0 X-Mimecast-Originator: redhat.com Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable 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=216.205.24.124; envelope-from=david@redhat.com; helo=us-smtp-delivery-124.mimecast.com X-Spam_score_int: -33 X-Spam_score: -3.4 X-Spam_bar: --- X-Spam_report: (-3.4 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_HIGH=-0.568, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_LOW=-0.7, RCVD_IN_MSPIKE_H3=0.001, RCVD_IN_MSPIKE_WL=0.001, 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.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Laurent Vivier , Thomas Huth , "Michael S. Tsirkin" , David Hildenbrand , "Dr . David Alan Gilbert" , Peter Xu , Alex Williamson , Claudio Fontana , Paolo Bonzini , =?UTF-8?q?Marc-Andr=C3=A9=20Lureau?= , =?UTF-8?q?Alex=20Benn=C3=A9e?= , Igor Mammedov Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: fail (Header signature does not verify) virtio-mem logically plugs/unplugs memory within a sparse memory region and notifies via the RamDiscardMgr interface when parts become plugged (populated) or unplugged (discarded). Currently, we end up (via the two users) 1) zeroing all logically unplugged/discarded memory during TPM resets. 2) reading all logically unplugged/discarded memory when dumping, to figure out the content is zero. 1) is always bad, because we assume unplugged memory stays discarded (and is already implicitly zero). 2) isn't that bad with anonymous memory, we end up reading the zero page (slow and unnecessary, though). However, once we use some file-backed memory (future use case), even reading will populate memory. Let's cut out all parts marked as not-populated (discarded) via the RamDiscardMgr. As virtio-mem is the single user, this now means that logically unplugged memory ranges will no longer be included in the dump, which results in smaller dump files and faster dumping. virtio-mem has a minimum granularity of 1 MiB (and the default is usually 2 MiB). Theoretically, we can see quite some fragmentation, in practice we won't have it completely fragmented in 1 MiB pieces. Still, we might end up with many physical ranges. Both, the ELF format and kdump seem to be ready to support many individual ranges (e.g., for ELF it seems to be UINT32_MAX, kdump has a linear bitmap). Cc: Marc-Andr=C3=A9 Lureau Cc: Paolo Bonzini Cc: "Michael S. Tsirkin" Cc: Alex Williamson Cc: Dr. David Alan Gilbert Cc: Igor Mammedov Cc: Claudio Fontana Cc: Thomas Huth Cc: "Alex Benn=C3=A9e" Cc: Peter Xu Cc: Laurent Vivier Signed-off-by: David Hildenbrand --- softmmu/memory_mapping.c | 45 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 45 insertions(+) diff --git a/softmmu/memory_mapping.c b/softmmu/memory_mapping.c index 05e8270edc..c9a3da6b54 100644 --- a/softmmu/memory_mapping.c +++ b/softmmu/memory_mapping.c @@ -244,6 +244,35 @@ static void guest_phys_block_add(GuestPhysBlockList *l= ist, MemoryRegion *mr, #endif } =20 +typedef struct GuestPhysRDL { + GuestPhysBlockList *list; + RamDiscardListener listener; + MemoryRegionSection *section; +} GuestPhysRDL; + +static int guest_phys_ram_discard_notify_populate(RamDiscardListener *list= ener, + const MemoryRegion *cons= t_mr, + ram_addr_t offset, + ram_addr_t size) +{ + GuestPhysRDL *rdl =3D container_of(listener, GuestPhysRDL, listener); + MemoryRegionSection *s =3D rdl->section; + const hwaddr mr_start =3D MAX(offset, s->offset_within_region); + const hwaddr mr_end =3D MIN(offset + size, + s->offset_within_region + int128_get64(s->si= ze)); + uint8_t *host_addr; + + if (mr_start >=3D mr_end) { + return 0; + } + + host_addr =3D memory_region_get_ram_ptr(s->mr) + mr_start; + guest_phys_block_add(rdl->list, s->mr, + mr_start + s->offset_within_address_space, + mr_end + s->offset_within_address_space, host_add= r); + return 0; +} + static void guest_phys_blocks_region_add(MemoryListener *listener, MemoryRegionSection *section) { @@ -258,6 +287,22 @@ static void guest_phys_blocks_region_add(MemoryListene= r *listener, return; } =20 + /* for special sparse regions, only add populated parts */ + if (memory_region_has_ram_discard_mgr(section->mr)) { + RamDiscardMgr *rdm =3D memory_region_get_ram_discard_mgr(section->= mr); + RamDiscardMgrClass *rdmc =3D RAM_DISCARD_MGR_GET_CLASS(rdm); + GuestPhysRDL rdl =3D { + .list =3D g->list, + .section =3D section, + }; + + ram_discard_listener_init(&rdl.listener, + guest_phys_ram_discard_notify_populate, = NULL, + NULL); + rdmc->replay_populated(rdm, section->mr, &rdl.listener); + return; + } + target_start =3D section->offset_within_address_space; target_end =3D target_start + int128_get64(section->size); host_addr =3D memory_region_get_ram_ptr(section->mr) + --=20 2.29.2