[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Plugin Address Translations Inconsistent/Incorrect?
From: |
Aaron Lindsay |
Subject: |
Plugin Address Translations Inconsistent/Incorrect? |
Date: |
Mon, 22 Feb 2021 12:07:31 -0500 |
Hello,
I've been doing some more work with plugins and found something I didn't
expect with regards to address translation.
If I call (inside a memory callback):
`uint64_t pa = qemu_plugin_hwaddr_device_offset(hwaddr);`
I see that `pa` takes the value 0xe0e58760. If, however, I plumb
`cpu_get_phys_page_debug` through to the plugin interface and call it
like:
`pa = cpu_get_phys_page_debug(current_cpu, va);`
I see it takes the value 0x120e58760.
I notice that 0x120e58760-0xe0e58760 is exactly one gigabyte, which is
also the offset of the beginning of RAM for the 'virt' AArch64 machine
I'm using. Furthermore, I see the name of the plugin function includes
"device_offset", so perhaps this discrepancy is by design. However, it
seems awkward to not be able to get a true physical address.
I've done some digging and found that inside `qemu_ram_addr_from_host`
(called by `qemu_plugin_hwaddr_device_offset`), `block->mr->addr`
appears to hold the offset of the beginning of RAM.
Do you think it would be reasonable to modify
`qemu_plugin_hwaddr_device_offset` to add the beginning of the RAM block
or otherwise return the true physical address (or at least expose a way
to find the beginning of it through the plugin interface)?
Thanks!
-Aaron
- Plugin Address Translations Inconsistent/Incorrect?,
Aaron Lindsay <=