From nobody Wed May 1 23:28:11 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of gnu.org designates 208.118.235.17 as permitted sender) client-ip=208.118.235.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Authentication-Results: mx.zohomail.com; spf=pass (zoho.com: domain of gnu.org designates 208.118.235.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org Return-Path: Received: from lists.gnu.org (lists.gnu.org [208.118.235.17]) by mx.zohomail.com with SMTPS id 1543418488495221.08862851834874; Wed, 28 Nov 2018 07:21:28 -0800 (PST) Received: from localhost ([::1]:48303 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1gS1eY-0002Y4-RN for importer@patchew.org; Wed, 28 Nov 2018 10:21:26 -0500 Received: from eggs.gnu.org ([2001:4830:134:3::10]:55749) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1gRvyJ-0003LA-G5 for qemu-devel@nongnu.org; Wed, 28 Nov 2018 04:17:28 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1gRvyG-0006ta-B2 for qemu-devel@nongnu.org; Wed, 28 Nov 2018 04:17:27 -0500 Received: from ms2.toshiba-tops.co.jp ([61.200.21.4]:40308 helo=dmz-ms2.toshiba-tops.co.jp) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1gRvyF-0006o2-RH for qemu-devel@nongnu.org; Wed, 28 Nov 2018 04:17:24 -0500 Received: from [192.168.254.254] ([192.168.254.254]) by dmz-ms2.toshiba-tops.co.jp ([192.168.254.3]) with ESMTP id 1543396631.951563.45517728.dmz-ms2 for <>; Wed, 28 Nov 2018 18:17:11 +0900 (JST) Received: from localhost (172.17.28.65) by TPSSRV64.toshiba-tops.co.jp (172.16.4.164) with Microsoft SMTP Server id 14.2.318.1; Wed, 28 Nov 2018 18:16:59 +0900 Date: Wed, 28 Nov 2018 18:17:00 +0900 Message-ID: <20181128.181700.1038782556965887223.atsushi.nemoto@sord.co.jp> To: X-TERRACE-DUMMYSUBJECT: Terrace Spam system * From: Atsushi Nemoto X-Fingerprint: 6ACA 1623 39BD 9A94 9B1A B746 CA77 FE94 2874 D52F X-Pgp-Public-Key: http://wwwkeys.pgp.net:11371/pks/lookup?op=get&search=0x2874D52F X-Mailer: Mew version 6.7 on Emacs 24.5 / Mule 6.0 (HANACHIRUSATO) MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-TERRACE-SPAMMARK: NO (SR:22.30) (by Terrace) X-TERRACE-SID: 1543396631.951563.45517728.dmz-ms2 X-TERRACE-CLASSID: Terrace Spam system X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.4.x [fuzzy] X-Received-From: 61.200.21.4 X-Mailman-Approved-At: Wed, 28 Nov 2018 10:20:19 -0500 Subject: [Qemu-devel] [PATCH] memory: update coalesced_range on transaction_commit X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Paolo Bonzini Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" Content-Type: text/plain; charset="utf-8" The e1000 driver calls memory_region_add_coalescing but kvm_coalesce_mmio_region never been called for those regions. Update coalesced_range on memory_region_transaction_commit to fix this. It seems very old bug since memory region API was merged on commit 093bc2cd885e ("Hierarchical memory region API"). Signed-off-by: Atsushi Nemoto --- memory.c | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/memory.c b/memory.c index d14c6dec1d..f773b0be50 100644 --- a/memory.c +++ b/memory.c @@ -1021,6 +1021,8 @@ void memory_region_transaction_begin(void) ++memory_region_transaction_depth; } =20 +static void memory_region_update_coalesced_range_as(MemoryRegion *mr, Addr= essSpace *as); + void memory_region_transaction_commit(void) { AddressSpace *as; @@ -1038,6 +1040,7 @@ void memory_region_transaction_commit(void) QTAILQ_FOREACH(as, &address_spaces, address_spaces_link) { address_space_set_flatview(as); address_space_update_ioeventfds(as); + memory_region_update_coalesced_range_as(NULL, as); } memory_region_update_pending =3D false; ioeventfd_update_pending =3D false; @@ -2142,7 +2145,7 @@ static void memory_region_update_coalesced_range_as(M= emoryRegion *mr, AddressSpa =20 view =3D address_space_get_flatview(as); FOR_EACH_FLAT_RANGE(fr, view) { - if (fr->mr =3D=3D mr) { + if (fr->mr =3D=3D mr || (!mr && !QTAILQ_EMPTY(&fr->mr->coalesced))= ) { section =3D (MemoryRegionSection) { .fv =3D view, .offset_within_address_space =3D int128_get64(fr->addr.sta= rt), @@ -2152,7 +2155,7 @@ static void memory_region_update_coalesced_range_as(M= emoryRegion *mr, AddressSpa MEMORY_LISTENER_CALL(as, coalesced_io_del, Reverse, §ion, int128_get64(fr->addr.start), int128_get64(fr->addr.size)); - QTAILQ_FOREACH(cmr, &mr->coalesced, link) { + QTAILQ_FOREACH(cmr, &fr->mr->coalesced, link) { tmp =3D addrrange_shift(cmr->addr, int128_sub(fr->addr.start, int128_make64(fr->offset_= in_region))); --=20 2.11.0