Message ID | 20210720195735.3934473-1-aaron@os.amperecomputing.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | plugins: Fix physical address calculation for IO regions | expand |
For reference, this patch is intended to address this conversation: https://lists.nongnu.org/archive/html/qemu-devel/2021-07/msg01293.html This appears to be better than the previous version in my testing, but I absolutely welcome being told there is a better way to solve this! Thanks! -Aaron On Jul 20 15:57, Aaron Lindsay wrote: > The address calculation for IO regions introduced by > > commit 787148bf928a54b5cc86f5b434f9399e9737679c > Author: Aaron Lindsay <aaron@os.amperecomputing.com> > plugins: Expose physical addresses instead of device offsets > > is not always accurate. Use the more correct > MemoryRegionSection.offset_within_address_space. Whoops, forgot my: Signed-off-by: Aaron Lindsay <aaron@os.amperecomputing.com> > --- > plugins/api.c | 2 +- > 1 file changed, 1 insertion(+), 1 deletion(-) > > diff --git a/plugins/api.c b/plugins/api.c > index 5c1a413928..ba14e6f2b2 100644 > --- a/plugins/api.c > +++ b/plugins/api.c > @@ -319,7 +319,7 @@ uint64_t qemu_plugin_hwaddr_phys_addr(const struct qemu_plugin_hwaddr *haddr) > return block->offset + offset + block->mr->addr; > } else { > MemoryRegionSection *mrs = haddr->v.io.section; > - return haddr->v.io.offset + mrs->mr->addr; > + return mrs->offset_within_address_space + haddr->v.io.offset; > } > } > #endif > -- > 2.17.1 >
Aaron Lindsay <aaron@os.amperecomputing.com> writes: > The address calculation for IO regions introduced by > > commit 787148bf928a54b5cc86f5b434f9399e9737679c > Author: Aaron Lindsay <aaron@os.amperecomputing.com> > plugins: Expose physical addresses instead of device offsets Queued to for-6.1/fixes-for-rc1, thanks. > > is not always accurate. Use the more correct > MemoryRegionSection.offset_within_address_space. > --- > plugins/api.c | 2 +- > 1 file changed, 1 insertion(+), 1 deletion(-) > > diff --git a/plugins/api.c b/plugins/api.c > index 5c1a413928..ba14e6f2b2 100644 > --- a/plugins/api.c > +++ b/plugins/api.c > @@ -319,7 +319,7 @@ uint64_t qemu_plugin_hwaddr_phys_addr(const struct qemu_plugin_hwaddr *haddr) > return block->offset + offset + block->mr->addr; > } else { > MemoryRegionSection *mrs = haddr->v.io.section; > - return haddr->v.io.offset + mrs->mr->addr; > + return mrs->offset_within_address_space + haddr->v.io.offset; > } > } > #endif
diff --git a/plugins/api.c b/plugins/api.c index 5c1a413928..ba14e6f2b2 100644 --- a/plugins/api.c +++ b/plugins/api.c @@ -319,7 +319,7 @@ uint64_t qemu_plugin_hwaddr_phys_addr(const struct qemu_plugin_hwaddr *haddr) return block->offset + offset + block->mr->addr; } else { MemoryRegionSection *mrs = haddr->v.io.section; - return haddr->v.io.offset + mrs->mr->addr; + return mrs->offset_within_address_space + haddr->v.io.offset; } } #endif