Message ID | 20230707151719.70613-2-philmd@linaro.org |
---|---|
State | Superseded |
Headers | show |
Series | hw/virtio: Build vhost-vdpa.o once for all targets | expand |
On 7/7/23 16:17, Philippe Mathieu-Daudé wrote: > In order to make vhost-vdpa.c a target-agnostic source unit, > we need to remove the TARGET_PAGE_SIZE / TARGET_PAGE_MASK / > TARGET_PAGE_ALIGN uses. TARGET_PAGE_SIZE will be replaced by > the runtime qemu_target_page_size(). The other ones will be > deduced from TARGET_PAGE_SIZE. > > Since the 3 macros are used in 3 related functions (sharing > the same call tree), we'll refactor them to only depend on > TARGET_PAGE_SIZE. TARGET_PAGE_MASK? The code looks fine, Reviewed-by: Richard Henderson <richard.henderson@linaro.org> r~ > > Having the following call tree: > > vhost_vdpa_listener_region_del() > -> vhost_vdpa_listener_skipped_section() > -> vhost_vdpa_section_end() > > The first step is to propagate TARGET_PAGE_MASK to > vhost_vdpa_listener_skipped_section(). > > Signed-off-by: Philippe Mathieu-Daudé <philmd@linaro.org> > --- > hw/virtio/vhost-vdpa.c | 7 ++++--- > 1 file changed, 4 insertions(+), 3 deletions(-) > > diff --git a/hw/virtio/vhost-vdpa.c b/hw/virtio/vhost-vdpa.c > index 3c575a9a6e..87653bf841 100644 > --- a/hw/virtio/vhost-vdpa.c > +++ b/hw/virtio/vhost-vdpa.c > @@ -42,7 +42,8 @@ static Int128 vhost_vdpa_section_end(const MemoryRegionSection *section) > > static bool vhost_vdpa_listener_skipped_section(MemoryRegionSection *section, > uint64_t iova_min, > - uint64_t iova_max) > + uint64_t iova_max, > + int page_mask) > { > Int128 llend; > > @@ -313,7 +314,7 @@ static void vhost_vdpa_listener_region_add(MemoryListener *listener, > int ret; > > if (vhost_vdpa_listener_skipped_section(section, v->iova_range.first, > - v->iova_range.last)) { > + v->iova_range.last, TARGET_PAGE_MASK)) { > return; > } > if (memory_region_is_iommu(section->mr)) { > @@ -396,7 +397,7 @@ static void vhost_vdpa_listener_region_del(MemoryListener *listener, > int ret; > > if (vhost_vdpa_listener_skipped_section(section, v->iova_range.first, > - v->iova_range.last)) { > + v->iova_range.last, TARGET_PAGE_MASK)) { > return; > } > if (memory_region_is_iommu(section->mr)) {
diff --git a/hw/virtio/vhost-vdpa.c b/hw/virtio/vhost-vdpa.c index 3c575a9a6e..87653bf841 100644 --- a/hw/virtio/vhost-vdpa.c +++ b/hw/virtio/vhost-vdpa.c @@ -42,7 +42,8 @@ static Int128 vhost_vdpa_section_end(const MemoryRegionSection *section) static bool vhost_vdpa_listener_skipped_section(MemoryRegionSection *section, uint64_t iova_min, - uint64_t iova_max) + uint64_t iova_max, + int page_mask) { Int128 llend; @@ -313,7 +314,7 @@ static void vhost_vdpa_listener_region_add(MemoryListener *listener, int ret; if (vhost_vdpa_listener_skipped_section(section, v->iova_range.first, - v->iova_range.last)) { + v->iova_range.last, TARGET_PAGE_MASK)) { return; } if (memory_region_is_iommu(section->mr)) { @@ -396,7 +397,7 @@ static void vhost_vdpa_listener_region_del(MemoryListener *listener, int ret; if (vhost_vdpa_listener_skipped_section(section, v->iova_range.first, - v->iova_range.last)) { + v->iova_range.last, TARGET_PAGE_MASK)) { return; } if (memory_region_is_iommu(section->mr)) {
In order to make vhost-vdpa.c a target-agnostic source unit, we need to remove the TARGET_PAGE_SIZE / TARGET_PAGE_MASK / TARGET_PAGE_ALIGN uses. TARGET_PAGE_SIZE will be replaced by the runtime qemu_target_page_size(). The other ones will be deduced from TARGET_PAGE_SIZE. Since the 3 macros are used in 3 related functions (sharing the same call tree), we'll refactor them to only depend on TARGET_PAGE_SIZE. Having the following call tree: vhost_vdpa_listener_region_del() -> vhost_vdpa_listener_skipped_section() -> vhost_vdpa_section_end() The first step is to propagate TARGET_PAGE_MASK to vhost_vdpa_listener_skipped_section(). Signed-off-by: Philippe Mathieu-Daudé <philmd@linaro.org> --- hw/virtio/vhost-vdpa.c | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-)