For the dirty-tracking part in my patch series, the major difference
between this patch and Alex's patch is that the dirty-tracking logic in
my patch will only mark the page being written dirty instead of marking
the whole memory slot dirty, and will only restore the write permission
to the page being written instead of the whole memory slot.
When memory regions overlap, "region_add" in memory listeners may be
called with structure MemoryRegionSection containing non-zero
offset_within_region. This makes the start address of memory slots
(member "start" in struct hvf_slot) not the same as the start address of
the memory region. However, the dirty-tracking logics in both
target/i386/hvf and Alex's patch assume that they are the same.
Currently, there is a bug in the dirty-tracking logic in
target/i386/hvf. I modified codes in target/i386/hvf to fix the problem.
On the x86 platform, Ubuntu ISO boot menu did not show properly.
The link of the bug is https://bugs.launchpad.net/qemu/+bug/1827005
The modified codes use the new function, "hvf_access_memory",
introduced in this patch series to handle dirty-tracking.
Following is the dirty-tracking logic in original codes in
target/i386/hvf.
if (write && slot) {
if (slot->flags & HVF_SLOT_LOG) {
memory_region_set_dirty(slot->region, gpa - slot->start, 1);
hv_vm_protect((hv_gpaddr_t)slot->start, (size_t)slot->size,
HV_MEMORY_READ | HV_MEMORY_WRITE);
}
}
The problem of the above code is:
'memory_region_set_dirty' sets only the page that is being written
dirty, but hv_vm_protect makes the whole memory slot writable.
Any write to the memory slot excluding the previous written page
and before the next call to "log_sync" in memory listener
will not be correctly tracked.
On Mon, Feb 28, 2022 at 10:11 PM Peter Maydell
<peter.mayd...@linaro.org> wrote:
On Mon, 28 Feb 2022 at 14:07, ~ubzeme <ubz...@git.sr.ht> wrote:
>
> I recently bought a Mac with M1 Pro chip, and use QEMU to setup a Linux
> virtual machine. QEMU crashed when I started a VM with HVF accelerator
> enabled and with the device, bochs-display, added.
>
> After digging into the source code, I found that dirty-tracking in HVF
> did not work properly, which made QEMU crashed. Therefore I made this
> series of patches to fix the problem.
How does this series compare with Alex's patch to enable
hvf dirty tracking for target/arm/hvf ?
https://patchew.org/QEMU/20220203142320.33022-1-ag...@csgraf.de/
thanks
-- PMM