On Feb 23 15:53, Aaron Lindsay wrote: > On Feb 22 15:48, Aaron Lindsay wrote: > > On Feb 22 19:30, Alex Bennée wrote: > > > Aaron Lindsay <aa...@os.amperecomputing.com> writes: > > > That said I think we could add an additional helper to translate a > > > hwaddr to a global address space address. I'm open to suggestions of the > > > best way to structure this. > > > > Haven't put a ton of thought into it, but what about something like this > > (untested): > > > > uint64_t qemu_plugin_hwaddr_phys_addr(const struct qemu_plugin_hwaddr > > *haddr) > > { > > #ifdef CONFIG_SOFTMMU > > if (haddr) { > > if (!haddr->is_io) { > > RAMBlock *block; > > ram_addr_t offset; > > > > block = qemu_ram_block_from_host((void *) > > haddr->v.ram.hostaddr, false, &offset); > > if (!block) { > > error_report("Bad ram pointer %"PRIx64"", > > haddr->v.ram.hostaddr); > > abort(); > > } > > > > return block->offset + offset + block->mr->addr; > > } else { > > MemoryRegionSection *mrs = haddr->v.io.section; > > return haddr->v.io.offset + mrs->mr->addr; > > } > > } > > #endif > > return 0; > > } > > This appears to successfully return correct physical addresses for RAM > at least, though I've not tested it thoroughly for MMIO yet. > > If it ends up being desirable based on the discussion elsewhere on this > thread I am willing to perform more complete testing, turn this into a > patch, and submit it.
Ping - Is this something worth me pursuing? -Aaron