[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [PULL 10/11] exec: Do not resolve subpage in mru_section
From: |
Paolo Bonzini |
Subject: |
[Qemu-devel] [PULL 10/11] exec: Do not resolve subpage in mru_section |
Date: |
Thu, 16 Nov 2017 12:59:25 +0100 |
This fixes a crash caused by picking the wrong memory region in
address_space_lookup_region seen with client code accessing a device
model that uses alias memory regions. The expensive part of
address_space_lookup_region anyway is phys_page_find; performance-wise
it is okay to repeat the subsequent subpage lookup.
Signed-off-by: BALATON Zoltan <address@hidden>
Message-Id: <address@hidden>
Signed-off-by: Paolo Bonzini <address@hidden>
---
exec.c | 12 +++---------
1 file changed, 3 insertions(+), 9 deletions(-)
diff --git a/exec.c b/exec.c
index 97a24a875e..3bb9fcf257 100644
--- a/exec.c
+++ b/exec.c
@@ -410,22 +410,16 @@ static MemoryRegionSection
*address_space_lookup_region(AddressSpaceDispatch *d,
{
MemoryRegionSection *section = atomic_read(&d->mru_section);
subpage_t *subpage;
- bool update;
- if (section && section != &d->map.sections[PHYS_SECTION_UNASSIGNED] &&
- section_covers_addr(section, addr)) {
- update = false;
- } else {
+ if (!section || section == &d->map.sections[PHYS_SECTION_UNASSIGNED] ||
+ !section_covers_addr(section, addr)) {
section = phys_page_find(d, addr);
- update = true;
+ atomic_set(&d->mru_section, section);
}
if (resolve_subpage && section->mr->subpage) {
subpage = container_of(section->mr, subpage_t, iomem);
section = &d->map.sections[subpage->sub_section[SUBPAGE_IDX(addr)]];
}
- if (update) {
- atomic_set(&d->mru_section, section);
- }
return section;
}
--
2.14.3
- [Qemu-devel] [PULL 00/11] Miscellaneous patches for QEMU 2.11-rc2, Paolo Bonzini, 2017/11/16
- [Qemu-devel] [PULL 01/11] Enable 8-byte wide MMIO for 16550 serial devices, Paolo Bonzini, 2017/11/16
- [Qemu-devel] [PULL 03/11] Makefile: simpler/faster "make help", Paolo Bonzini, 2017/11/16
- [Qemu-devel] [PULL 04/11] thread-posix: fix qemu_rec_mutex_trylock macro, Paolo Bonzini, 2017/11/16
- [Qemu-devel] [PULL 02/11] ioapic/tracing: Remove last DPRINTFs, Paolo Bonzini, 2017/11/16
- [Qemu-devel] [PULL 06/11] vhost-user-scsi: add missing virtqueue_size param, Paolo Bonzini, 2017/11/16
- [Qemu-devel] [PULL 05/11] target-i386: adds PV_TLB_FLUSH CPUID feature bit, Paolo Bonzini, 2017/11/16
- [Qemu-devel] [PULL 07/11] cpu-exec: don't overwrite exception_index, Paolo Bonzini, 2017/11/16
- [Qemu-devel] [PULL 09/11] util/stats64: Fix min/max comparisons, Paolo Bonzini, 2017/11/16
- [Qemu-devel] [PULL 08/11] cpu-exec: avoid cpu_exec_nocache infinite loop with record/replay, Paolo Bonzini, 2017/11/16
- [Qemu-devel] [PULL 10/11] exec: Do not resolve subpage in mru_section,
Paolo Bonzini <=
- [Qemu-devel] [PULL 11/11] fix scripts/update-linux-headers.sh here document, Paolo Bonzini, 2017/11/16
- Re: [Qemu-devel] [PULL 00/11] Miscellaneous patches for QEMU 2.11-rc2, Peter Maydell, 2017/11/16