From: Peter Xu <peterx@redhat.com>
To: Peter Maydell <peter.maydell@linaro.org>
Cc: "Michael S. Tsirkin" <mst@redhat.com>,
qemu-devel@nongnu.org,
"Zhenzhong Duan" <zhenzhong.duan@intel.com>,
"Jason Wang" <jasowang@redhat.com>,
"Marcel Apfelbaum" <marcel.apfelbaum@gmail.com>,
"Paolo Bonzini" <pbonzini@redhat.com>,
"Richard Henderson" <richard.henderson@linaro.org>,
"Eduardo Habkost" <eduardo@habkost.net>,
"David Hildenbrand" <david@redhat.com>,
"Philippe Mathieu-Daudé" <philmd@linaro.org>
Subject: Re: [PULL 36/53] memory: Optimize replay of guest mapping
Date: Tue, 4 Apr 2023 16:37:10 -0400 [thread overview]
Message-ID: <ZCyKdktyAMiH/eKQ@x1n> (raw)
In-Reply-To: <CAFEAcA_SN91x3W+QG-_wFAK4GgQkEW1CPYktK_JoELTG8uvo1g@mail.gmail.com>
[-- Attachment #1: Type: text/plain, Size: 2762 bytes --]
On Tue, Apr 04, 2023 at 09:23:21PM +0100, Peter Maydell wrote:
> On Tue, 4 Apr 2023 at 20:13, Michael S. Tsirkin <mst@redhat.com> wrote:
> >
> > On Tue, Apr 04, 2023 at 07:00:04PM +0100, Peter Maydell wrote:
> > > On Thu, 2 Mar 2023 at 08:26, Michael S. Tsirkin <mst@redhat.com> wrote:
> > > >
> > > > From: Zhenzhong Duan <zhenzhong.duan@intel.com>
> > > >
> > > > On x86, there are two notifiers registered due to vtd-ir memory region
> > > > splitting the whole address space. During replay of the address space
> > > > for each notifier, the whole address space is scanned which is
> > > > unnecessory.
> > > >
> > > > We only need to scan the space belong to notifier montiored space.
> > > >
> > > > Assert when notifier is used to monitor beyond iommu memory region's
> > > > address space.
> > >
> > > Hi. This patch seems to have regressed the mps3-an547 board,
> > > which now asserts on startup:
> > >
> > > $ ./build/x86/qemu-system-arm --machine mps3-an547 -serial stdio
> > > -kernel /tmp/an547-mwe/build/test.elf
> > > qemu-system-arm: ../../softmmu/memory.c:1903:
> > > memory_region_register_iommu_notifier: Assertion `n->end <=
> > > memory_region_size(mr)' failed.
> > > Aborted (core dumped)
> > >
> > > (reported under https://gitlab.com/qemu-project/qemu/-/issues/1488)
> > >
> > > Since this commit says it's just an optimization, for the 8.0
> > > release can we simply revert it without breaking anything?
>
> > Fine to revert by me. Zhenzhong Duan can you pls fix up
> > this regression and repost? Maybe fix typos in commit log
> > when reposting. Thanks!
>
> Would somebody also like to send the 'revert' patch, please?
> I had that all ready to go, but my git send-email setup
> seems to have mysteriously broken and I don't have time to
> fix it this evening :-(
Attached.
>
> This is the commit message I wrote:
>
>
> Revert "memory: Optimize replay of guest mapping"
>
> This reverts commit 6da24341866fa940fd7d575788a2319514941c77
> ("memory: Optimize replay of guest mapping").
>
> This change breaks the mps3-an547 board under TCG (and
> probably other TCG boards using an IOMMU), which now
> assert:
>
> $ ./build/x86/qemu-system-arm --machine mps3-an547 -serial stdio
> -kernel /tmp/an547-mwe/build/test.elf
> qemu-system-arm: ../../softmmu/memory.c:1903:
> memory_region_register_iommu_notifier: Assertion `n->end <=
> memory_region_size(mr)' failed.
>
> This is because tcg_register_iommu_notifier() registers
> an IOMMU notifier which covers the entire address space,
> so the assertion added in this commit is not correct.
>
> For the 8.0 release, just revert this commit as it is
> only an optimization.
>
> Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
>
>
> thanks
> -- PMM
>
--
Peter Xu
[-- Attachment #2: 0001-Revert-memory-Optimize-replay-of-guest-mapping.patch --]
[-- Type: text/plain, Size: 3066 bytes --]
From 8fd48876a6910341dfcbe1b8bf1185d2cea851cd Mon Sep 17 00:00:00 2001
From: Peter Maydell <peter.maydell@linaro.org>
Date: Tue, 4 Apr 2023 16:34:22 -0400
Subject: [PATCH] Revert "memory: Optimize replay of guest mapping"
This reverts commit 6da24341866fa940fd7d575788a2319514941c77
("memory: Optimize replay of guest mapping").
This change breaks the mps3-an547 board under TCG (and
probably other TCG boards using an IOMMU), which now
assert:
$ ./build/x86/qemu-system-arm --machine mps3-an547 -serial stdio
-kernel /tmp/an547-mwe/build/test.elf
qemu-system-arm: ../../softmmu/memory.c:1903:
memory_region_register_iommu_notifier: Assertion `n->end <=
memory_region_size(mr)' failed.
This is because tcg_register_iommu_notifier() registers
an IOMMU notifier which covers the entire address space,
so the assertion added in this commit is not correct.
For the 8.0 release, just revert this commit as it is
only an optimization.
Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
Signed-off-by: Peter Xu <peterx@redhat.com>
---
hw/i386/intel_iommu.c | 2 +-
softmmu/memory.c | 4 ++--
2 files changed, 3 insertions(+), 3 deletions(-)
diff --git a/hw/i386/intel_iommu.c b/hw/i386/intel_iommu.c
index faade7def8..a62896759c 100644
--- a/hw/i386/intel_iommu.c
+++ b/hw/i386/intel_iommu.c
@@ -3850,7 +3850,7 @@ static void vtd_iommu_replay(IOMMUMemoryRegion *iommu_mr, IOMMUNotifier *n)
.domain_id = vtd_get_domain_id(s, &ce, vtd_as->pasid),
};
- vtd_page_walk(s, &ce, n->start, n->end, &info, vtd_as->pasid);
+ vtd_page_walk(s, &ce, 0, ~0ULL, &info, vtd_as->pasid);
}
} else {
trace_vtd_replay_ce_invalid(bus_n, PCI_SLOT(vtd_as->devfn),
diff --git a/softmmu/memory.c b/softmmu/memory.c
index 5305aca7ca..b1a6cae6f5 100644
--- a/softmmu/memory.c
+++ b/softmmu/memory.c
@@ -1900,7 +1900,6 @@ int memory_region_register_iommu_notifier(MemoryRegion *mr,
iommu_mr = IOMMU_MEMORY_REGION(mr);
assert(n->notifier_flags != IOMMU_NOTIFIER_NONE);
assert(n->start <= n->end);
- assert(n->end <= memory_region_size(mr));
assert(n->iommu_idx >= 0 &&
n->iommu_idx < memory_region_iommu_num_indexes(iommu_mr));
@@ -1924,6 +1923,7 @@ uint64_t memory_region_iommu_get_min_page_size(IOMMUMemoryRegion *iommu_mr)
void memory_region_iommu_replay(IOMMUMemoryRegion *iommu_mr, IOMMUNotifier *n)
{
+ MemoryRegion *mr = MEMORY_REGION(iommu_mr);
IOMMUMemoryRegionClass *imrc = IOMMU_MEMORY_REGION_GET_CLASS(iommu_mr);
hwaddr addr, granularity;
IOMMUTLBEntry iotlb;
@@ -1936,7 +1936,7 @@ void memory_region_iommu_replay(IOMMUMemoryRegion *iommu_mr, IOMMUNotifier *n)
granularity = memory_region_iommu_get_min_page_size(iommu_mr);
- for (addr = n->start; addr < n->end; addr += granularity) {
+ for (addr = 0; addr < memory_region_size(mr); addr += granularity) {
iotlb = imrc->translate(iommu_mr, addr, IOMMU_NONE, n->iommu_idx);
if (iotlb.perm != IOMMU_NONE) {
n->notify(n, &iotlb);
--
2.39.1
next prev parent reply other threads:[~2023-04-04 20:38 UTC|newest]
Thread overview: 72+ messages / expand[flat|nested] mbox.gz Atom feed top
2023-03-02 8:24 [PULL 00/53] virtio,pc,pci: features, cleanups, fixes Michael S. Tsirkin
2023-03-02 8:24 ` [PULL 01/53] hw/smbios: fix field corruption in type 4 table Michael S. Tsirkin
2023-03-02 8:24 ` [PULL 02/53] Revert "x86: don't let decompressed kernel image clobber setup_data" Michael S. Tsirkin
2023-03-02 8:24 ` [PULL 03/53] Revert "x86: do not re-randomize RNG seed on snapshot load" Michael S. Tsirkin
2023-03-02 8:24 ` [PULL 04/53] Revert "x86: re-initialize RNG seed when selecting kernel" Michael S. Tsirkin
2023-03-02 8:24 ` [PULL 05/53] Revert "x86: reinitialize RNG seed on system reboot" Michael S. Tsirkin
2023-03-02 8:24 ` [PULL 06/53] Revert "x86: use typedef for SetupData struct" Michael S. Tsirkin
2023-03-02 8:24 ` [PULL 07/53] Revert "x86: return modified setup_data only if read as memory, not as file" Michael S. Tsirkin
2023-03-02 8:24 ` [PULL 08/53] Revert "hw/i386: pass RNG seed via setup_data entry" Michael S. Tsirkin
2023-03-02 8:24 ` [PULL 09/53] virtio-net: clear guest_announce feature if no cvq backend Michael S. Tsirkin
2023-03-02 8:25 ` [PULL 10/53] backends/vhost-user: remove the ioeventfd check Michael S. Tsirkin
2023-03-02 8:25 ` [PULL 11/53] vhost-user-gpio: Configure vhost_dev when connecting Michael S. Tsirkin
2023-03-02 8:25 ` [PULL 12/53] vhost-user-i2c: Back up vqs before cleaning up vhost_dev Michael S. Tsirkin
2023-03-02 8:25 ` [PULL 13/53] vhost-user-rng: " Michael S. Tsirkin
2023-03-02 8:25 ` [PULL 14/53] virtio-rng-pci: fix transitional migration compat for vectors Michael S. Tsirkin
2023-03-04 20:03 ` Michael Tokarev
2023-03-05 10:25 ` Michael S. Tsirkin
2023-03-06 12:12 ` Dr. David Alan Gilbert
2023-03-02 8:25 ` [PULL 15/53] hw/timer/hpet: Fix expiration time overflow Michael S. Tsirkin
2023-03-02 8:25 ` [PULL 16/53] docs: vhost-user: replace _SLAVE_ with _BACKEND_ Michael S. Tsirkin
2023-03-02 8:25 ` [PULL 17/53] libvhost-user: Adopt new backend naming Michael S. Tsirkin
2023-03-02 8:25 ` [PULL 18/53] vhost-user: " Michael S. Tsirkin
2023-03-02 8:25 ` [PULL 19/53] vdpa: stop all svq on device deletion Michael S. Tsirkin
2023-03-02 8:25 ` [PULL 20/53] pci/shpc: set attention led to OFF on reset Michael S. Tsirkin
2023-03-02 8:25 ` [PULL 21/53] pci/shpc: change shpc_get_status() return type to uint8_t Michael S. Tsirkin
2023-03-02 8:25 ` [PULL 22/53] pci/shpc: shpc_slot_command(): handle PWRONLY -> ENABLED transition Michael S. Tsirkin
2023-03-02 8:25 ` [PULL 23/53] pci/shpc: more generic handle hot-unplug in shpc_slot_command() Michael S. Tsirkin
2023-03-02 8:25 ` [PULL 24/53] pci/shpc: pass PCIDevice pointer to shpc_slot_command() Michael S. Tsirkin
2023-03-02 8:25 ` [PULL 25/53] pci/shpc: refactor shpc_device_plug_common() Michael S. Tsirkin
2023-03-02 8:25 ` [PULL 26/53] pcie: pcie_cap_slot_write_config(): use correct macro Michael S. Tsirkin
2023-03-02 8:25 ` [PULL 27/53] pcie_regs: drop duplicated indicator value macros Michael S. Tsirkin
2023-03-02 8:25 ` [PULL 28/53] pcie: drop unused PCIExpressIndicator Michael S. Tsirkin
2023-03-02 8:25 ` [PULL 29/53] pcie: pcie_cap_slot_enable_power() use correct helper Michael S. Tsirkin
2023-03-02 8:26 ` [PULL 30/53] pcie: introduce pcie_sltctl_powered_off() helper Michael S. Tsirkin
2023-03-02 8:26 ` [PULL 31/53] pcie: set power indicator to off on reset by default Michael S. Tsirkin
2023-03-02 11:34 ` Vladimir Sementsov-Ogievskiy
2023-03-02 11:42 ` Michael S. Tsirkin
2023-03-03 0:15 ` Michael S. Tsirkin
2023-03-02 8:26 ` [PULL 32/53] vhost: avoid a potential use of an uninitialized variable in vhost_svq_poll() Michael S. Tsirkin
2023-03-02 8:26 ` [PULL 33/53] libvhost-user: check for NULL when allocating a virtqueue element Michael S. Tsirkin
2023-03-02 8:26 ` [PULL 34/53] hw/pci: Trace IRQ routing on PCI topology Michael S. Tsirkin
2023-03-02 8:26 ` [PULL 35/53] chardev/char-socket: set s->listener = NULL in char_socket_finalize Michael S. Tsirkin
2023-03-02 11:49 ` Michael Tokarev
2023-03-03 0:15 ` Michael S. Tsirkin
2023-03-02 8:26 ` [PULL 36/53] memory: Optimize replay of guest mapping Michael S. Tsirkin
2023-04-04 18:00 ` Peter Maydell
2023-04-04 19:13 ` Michael S. Tsirkin
2023-04-04 20:23 ` Peter Maydell
2023-04-04 20:37 ` Peter Xu [this message]
2023-04-04 20:38 ` Michael S. Tsirkin
2023-04-06 3:46 ` Duan, Zhenzhong
2023-03-02 8:26 ` [PULL 37/53] intel-iommu: fail MAP notifier without caching mode Michael S. Tsirkin
2023-03-02 8:26 ` [PULL 38/53] intel-iommu: fail DEVIOTLB_UNMAP without dt mode Michael S. Tsirkin
2023-03-02 8:26 ` [PULL 39/53] memory: introduce memory_region_unmap_iommu_notifier_range() Michael S. Tsirkin
2023-03-02 8:26 ` [PULL 40/53] smmu: switch to use memory_region_unmap_iommu_notifier_range() Michael S. Tsirkin
2023-03-02 8:26 ` [PULL 41/53] intel-iommu: send UNMAP notifications for domain or global inv desc Michael S. Tsirkin
2023-03-02 8:26 ` [PULL 42/53] MAINTAINERS: Add Fan Ni as Compute eXpress Link QEMU reviewer Michael S. Tsirkin
2023-03-02 8:26 ` [PULL 43/53] hw/mem/cxl_type3: Improve error handling in realize() Michael S. Tsirkin
2023-03-02 8:26 ` [PULL 44/53] hw/pci-bridge/cxl_downstream: Fix type naming mismatch Michael S. Tsirkin
2023-03-02 8:26 ` [PULL 45/53] hw/cxl: set cxl-type3 device type to PCI_CLASS_MEMORY_CXL Michael S. Tsirkin
2023-03-02 8:26 ` [PULL 46/53] hw/cxl: Add CXL_CAPACITY_MULTIPLIER definition Michael S. Tsirkin
2023-03-02 8:26 ` [PULL 47/53] tests/acpi: Allow update of q35/DSDT.cxl Michael S. Tsirkin
2023-03-02 8:27 ` [PULL 48/53] hw/i386/acpi: Drop duplicate _UID entry for CXL root bridge Michael S. Tsirkin
2023-03-02 8:27 ` [PULL 49/53] tests: acpi: Update q35/DSDT.cxl for removed duplicate UID Michael S. Tsirkin
2023-03-02 8:27 ` [PULL 50/53] qemu/bswap: Add const_le64() Michael S. Tsirkin
2023-03-02 8:27 ` [PULL 51/53] qemu/uuid: Add UUID static initializer Michael S. Tsirkin
2023-03-02 8:27 ` [PULL 52/53] hw/cxl/mailbox: Use new UUID network order define for cel_uuid Michael S. Tsirkin
2023-03-02 8:27 ` [PULL 53/53] tests/data/acpi/virt: drop (most) duplicate files Michael S. Tsirkin
2023-03-02 12:16 ` [PULL 00/53] virtio,pc,pci: features, cleanups, fixes Michael Tokarev
2023-03-02 23:23 ` Michael S. Tsirkin
2023-03-03 0:15 ` Michael S. Tsirkin
2023-03-03 17:09 ` Peter Maydell
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=ZCyKdktyAMiH/eKQ@x1n \
--to=peterx@redhat.com \
--cc=david@redhat.com \
--cc=eduardo@habkost.net \
--cc=jasowang@redhat.com \
--cc=marcel.apfelbaum@gmail.com \
--cc=mst@redhat.com \
--cc=pbonzini@redhat.com \
--cc=peter.maydell@linaro.org \
--cc=philmd@linaro.org \
--cc=qemu-devel@nongnu.org \
--cc=richard.henderson@linaro.org \
--cc=zhenzhong.duan@intel.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).