Message ID | 20230710094931.84402-5-philmd@linaro.org |
---|---|
State | New |
Headers | show |
Series | hw/virtio: Build vhost-vdpa.o once for all targets | expand |
ping? On 10/7/23 11:49, Philippe Mathieu-Daudé wrote: > Similarly to commit e414ed2c47 ("virtio-iommu: Use > target-agnostic qemu_target_page_mask"), Replace the > target-specific TARGET_PAGE_SIZE and TARGET_PAGE_MASK > definitions by a call to the runtime qemu_target_page_size() > helper which is target agnostic. > > Signed-off-by: Philippe Mathieu-Daudé <philmd@linaro.org> > --- > hw/virtio/vhost-vdpa.c | 26 +++++++++++++++----------- > 1 file changed, 15 insertions(+), 11 deletions(-) > > diff --git a/hw/virtio/vhost-vdpa.c b/hw/virtio/vhost-vdpa.c > index a3dd7c712a..2717edf51d 100644 > --- a/hw/virtio/vhost-vdpa.c > +++ b/hw/virtio/vhost-vdpa.c > @@ -14,6 +14,7 @@ > #include <linux/vfio.h> > #include <sys/eventfd.h> > #include <sys/ioctl.h> > +#include "exec/target_page.h" > #include "hw/virtio/vhost.h" > #include "hw/virtio/vhost-backend.h" > #include "hw/virtio/virtio-net.h" > @@ -23,7 +24,6 @@ > #include "migration/blocker.h" > #include "qemu/cutils.h" > #include "qemu/main-loop.h" > -#include "cpu.h" > #include "trace.h" > #include "qapi/error.h" > > @@ -313,9 +313,11 @@ static void vhost_vdpa_listener_region_add(MemoryListener *listener, > Int128 llend, llsize; > void *vaddr; > int ret; > + int page_size = qemu_target_page_size(); > + int page_mask = -page_size; > > if (vhost_vdpa_listener_skipped_section(section, v->iova_range.first, > - v->iova_range.last, TARGET_PAGE_MASK)) { > + v->iova_range.last, page_mask)) { > return; > } > if (memory_region_is_iommu(section->mr)) { > @@ -323,14 +325,14 @@ static void vhost_vdpa_listener_region_add(MemoryListener *listener, > return; > } > > - if (unlikely((section->offset_within_address_space & ~TARGET_PAGE_MASK) != > - (section->offset_within_region & ~TARGET_PAGE_MASK))) { > + if (unlikely((section->offset_within_address_space & ~page_mask) != > + (section->offset_within_region & ~page_mask))) { > error_report("%s received unaligned region", __func__); > return; > } > > - iova = ROUND_UP(section->offset_within_address_space, TARGET_PAGE_SIZE); > - llend = vhost_vdpa_section_end(section, TARGET_PAGE_MASK); > + iova = ROUND_UP(section->offset_within_address_space, page_size); > + llend = vhost_vdpa_section_end(section, page_mask); > if (int128_ge(int128_make64(iova), llend)) { > return; > } > @@ -396,23 +398,25 @@ static void vhost_vdpa_listener_region_del(MemoryListener *listener, > hwaddr iova; > Int128 llend, llsize; > int ret; > + int page_size = qemu_target_page_size(); > + int page_mask = -page_size; > > if (vhost_vdpa_listener_skipped_section(section, v->iova_range.first, > - v->iova_range.last, TARGET_PAGE_MASK)) { > + v->iova_range.last, page_mask)) { > return; > } > if (memory_region_is_iommu(section->mr)) { > vhost_vdpa_iommu_region_del(listener, section); > } > > - if (unlikely((section->offset_within_address_space & ~TARGET_PAGE_MASK) != > - (section->offset_within_region & ~TARGET_PAGE_MASK))) { > + if (unlikely((section->offset_within_address_space & ~page_mask) != > + (section->offset_within_region & ~page_mask))) { > error_report("%s received unaligned region", __func__); > return; > } > > - iova = ROUND_UP(section->offset_within_address_space, TARGET_PAGE_SIZE); > - llend = vhost_vdpa_section_end(section, TARGET_PAGE_MASK); > + iova = ROUND_UP(section->offset_within_address_space, page_size); > + llend = vhost_vdpa_section_end(section, page_mask); > > trace_vhost_vdpa_listener_region_del(v, iova, > int128_get64(int128_sub(llend, int128_one())));
On 18/8/23 13:00, Philippe Mathieu-Daudé wrote: > ping? > > On 10/7/23 11:49, Philippe Mathieu-Daudé wrote: >> Similarly to commit e414ed2c47 ("virtio-iommu: Use >> target-agnostic qemu_target_page_mask"), Replace the >> target-specific TARGET_PAGE_SIZE and TARGET_PAGE_MASK >> definitions by a call to the runtime qemu_target_page_size() >> helper which is target agnostic. >> >> Signed-off-by: Philippe Mathieu-Daudé <philmd@linaro.org> >> --- >> hw/virtio/vhost-vdpa.c | 26 +++++++++++++++----------- >> 1 file changed, 15 insertions(+), 11 deletions(-) >> >> diff --git a/hw/virtio/vhost-vdpa.c b/hw/virtio/vhost-vdpa.c >> index a3dd7c712a..2717edf51d 100644 >> --- a/hw/virtio/vhost-vdpa.c >> +++ b/hw/virtio/vhost-vdpa.c >> @@ -14,6 +14,7 @@ >> #include <linux/vfio.h> >> #include <sys/eventfd.h> >> #include <sys/ioctl.h> >> +#include "exec/target_page.h" >> #include "hw/virtio/vhost.h" >> #include "hw/virtio/vhost-backend.h" >> #include "hw/virtio/virtio-net.h" >> @@ -23,7 +24,6 @@ >> #include "migration/blocker.h" >> #include "qemu/cutils.h" >> #include "qemu/main-loop.h" >> -#include "cpu.h" >> #include "trace.h" >> #include "qapi/error.h" >> @@ -313,9 +313,11 @@ static void >> vhost_vdpa_listener_region_add(MemoryListener *listener, >> Int128 llend, llsize; >> void *vaddr; >> int ret; >> + int page_size = qemu_target_page_size(); >> + int page_mask = -page_size; Richard, this is the change you asked here: https://lore.kernel.org/qemu-devel/f877dda3-a3d9-5081-c2b3-c10eeb7b6814@linaro.org/ Did I miss something else? >> if (vhost_vdpa_listener_skipped_section(section, >> v->iova_range.first, >> - v->iova_range.last, >> TARGET_PAGE_MASK)) { >> + v->iova_range.last, >> page_mask)) { >> return; >> } >> if (memory_region_is_iommu(section->mr)) { >> @@ -323,14 +325,14 @@ static void >> vhost_vdpa_listener_region_add(MemoryListener *listener, >> return; >> } >> - if (unlikely((section->offset_within_address_space & >> ~TARGET_PAGE_MASK) != >> - (section->offset_within_region & ~TARGET_PAGE_MASK))) { >> + if (unlikely((section->offset_within_address_space & ~page_mask) != >> + (section->offset_within_region & ~page_mask))) { >> error_report("%s received unaligned region", __func__); >> return; >> } >> - iova = ROUND_UP(section->offset_within_address_space, >> TARGET_PAGE_SIZE); >> - llend = vhost_vdpa_section_end(section, TARGET_PAGE_MASK); >> + iova = ROUND_UP(section->offset_within_address_space, page_size); >> + llend = vhost_vdpa_section_end(section, page_mask); >> if (int128_ge(int128_make64(iova), llend)) { >> return; >> } >> @@ -396,23 +398,25 @@ static void >> vhost_vdpa_listener_region_del(MemoryListener *listener, >> hwaddr iova; >> Int128 llend, llsize; >> int ret; >> + int page_size = qemu_target_page_size(); >> + int page_mask = -page_size; >> if (vhost_vdpa_listener_skipped_section(section, >> v->iova_range.first, >> - v->iova_range.last, >> TARGET_PAGE_MASK)) { >> + v->iova_range.last, >> page_mask)) { >> return; >> } >> if (memory_region_is_iommu(section->mr)) { >> vhost_vdpa_iommu_region_del(listener, section); >> } >> - if (unlikely((section->offset_within_address_space & >> ~TARGET_PAGE_MASK) != >> - (section->offset_within_region & ~TARGET_PAGE_MASK))) { >> + if (unlikely((section->offset_within_address_space & ~page_mask) != >> + (section->offset_within_region & ~page_mask))) { >> error_report("%s received unaligned region", __func__); >> return; >> } >> - iova = ROUND_UP(section->offset_within_address_space, >> TARGET_PAGE_SIZE); >> - llend = vhost_vdpa_section_end(section, TARGET_PAGE_MASK); >> + iova = ROUND_UP(section->offset_within_address_space, page_size); >> + llend = vhost_vdpa_section_end(section, page_mask); >> trace_vhost_vdpa_listener_region_del(v, iova, >> int128_get64(int128_sub(llend, int128_one()))); >
On 8/18/23 04:00, Philippe Mathieu-Daudé wrote: > ping? > > On 10/7/23 11:49, Philippe Mathieu-Daudé wrote: >> Similarly to commit e414ed2c47 ("virtio-iommu: Use >> target-agnostic qemu_target_page_mask"), Replace the >> target-specific TARGET_PAGE_SIZE and TARGET_PAGE_MASK >> definitions by a call to the runtime qemu_target_page_size() >> helper which is target agnostic. >> >> Signed-off-by: Philippe Mathieu-Daudé <philmd@linaro.org> Reviewed-by: Richard Henderson <richard.henderson@linaro.org> r~ >> --- >> hw/virtio/vhost-vdpa.c | 26 +++++++++++++++----------- >> 1 file changed, 15 insertions(+), 11 deletions(-) >> >> diff --git a/hw/virtio/vhost-vdpa.c b/hw/virtio/vhost-vdpa.c >> index a3dd7c712a..2717edf51d 100644 >> --- a/hw/virtio/vhost-vdpa.c >> +++ b/hw/virtio/vhost-vdpa.c >> @@ -14,6 +14,7 @@ >> #include <linux/vfio.h> >> #include <sys/eventfd.h> >> #include <sys/ioctl.h> >> +#include "exec/target_page.h" >> #include "hw/virtio/vhost.h" >> #include "hw/virtio/vhost-backend.h" >> #include "hw/virtio/virtio-net.h" >> @@ -23,7 +24,6 @@ >> #include "migration/blocker.h" >> #include "qemu/cutils.h" >> #include "qemu/main-loop.h" >> -#include "cpu.h" >> #include "trace.h" >> #include "qapi/error.h" >> @@ -313,9 +313,11 @@ static void vhost_vdpa_listener_region_add(MemoryListener *listener, >> Int128 llend, llsize; >> void *vaddr; >> int ret; >> + int page_size = qemu_target_page_size(); >> + int page_mask = -page_size; >> if (vhost_vdpa_listener_skipped_section(section, v->iova_range.first, >> - v->iova_range.last, TARGET_PAGE_MASK)) { >> + v->iova_range.last, page_mask)) { >> return; >> } >> if (memory_region_is_iommu(section->mr)) { >> @@ -323,14 +325,14 @@ static void vhost_vdpa_listener_region_add(MemoryListener *listener, >> return; >> } >> - if (unlikely((section->offset_within_address_space & ~TARGET_PAGE_MASK) != >> - (section->offset_within_region & ~TARGET_PAGE_MASK))) { >> + if (unlikely((section->offset_within_address_space & ~page_mask) != >> + (section->offset_within_region & ~page_mask))) { >> error_report("%s received unaligned region", __func__); >> return; >> } >> - iova = ROUND_UP(section->offset_within_address_space, TARGET_PAGE_SIZE); >> - llend = vhost_vdpa_section_end(section, TARGET_PAGE_MASK); >> + iova = ROUND_UP(section->offset_within_address_space, page_size); >> + llend = vhost_vdpa_section_end(section, page_mask); >> if (int128_ge(int128_make64(iova), llend)) { >> return; >> } >> @@ -396,23 +398,25 @@ static void vhost_vdpa_listener_region_del(MemoryListener *listener, >> hwaddr iova; >> Int128 llend, llsize; >> int ret; >> + int page_size = qemu_target_page_size(); >> + int page_mask = -page_size; >> if (vhost_vdpa_listener_skipped_section(section, v->iova_range.first, >> - v->iova_range.last, TARGET_PAGE_MASK)) { >> + v->iova_range.last, page_mask)) { >> return; >> } >> if (memory_region_is_iommu(section->mr)) { >> vhost_vdpa_iommu_region_del(listener, section); >> } >> - if (unlikely((section->offset_within_address_space & ~TARGET_PAGE_MASK) != >> - (section->offset_within_region & ~TARGET_PAGE_MASK))) { >> + if (unlikely((section->offset_within_address_space & ~page_mask) != >> + (section->offset_within_region & ~page_mask))) { >> error_report("%s received unaligned region", __func__); >> return; >> } >> - iova = ROUND_UP(section->offset_within_address_space, TARGET_PAGE_SIZE); >> - llend = vhost_vdpa_section_end(section, TARGET_PAGE_MASK); >> + iova = ROUND_UP(section->offset_within_address_space, page_size); >> + llend = vhost_vdpa_section_end(section, page_mask); >> trace_vhost_vdpa_listener_region_del(v, iova, >> int128_get64(int128_sub(llend, int128_one()))); >
diff --git a/hw/virtio/vhost-vdpa.c b/hw/virtio/vhost-vdpa.c index a3dd7c712a..2717edf51d 100644 --- a/hw/virtio/vhost-vdpa.c +++ b/hw/virtio/vhost-vdpa.c @@ -14,6 +14,7 @@ #include <linux/vfio.h> #include <sys/eventfd.h> #include <sys/ioctl.h> +#include "exec/target_page.h" #include "hw/virtio/vhost.h" #include "hw/virtio/vhost-backend.h" #include "hw/virtio/virtio-net.h" @@ -23,7 +24,6 @@ #include "migration/blocker.h" #include "qemu/cutils.h" #include "qemu/main-loop.h" -#include "cpu.h" #include "trace.h" #include "qapi/error.h" @@ -313,9 +313,11 @@ static void vhost_vdpa_listener_region_add(MemoryListener *listener, Int128 llend, llsize; void *vaddr; int ret; + int page_size = qemu_target_page_size(); + int page_mask = -page_size; if (vhost_vdpa_listener_skipped_section(section, v->iova_range.first, - v->iova_range.last, TARGET_PAGE_MASK)) { + v->iova_range.last, page_mask)) { return; } if (memory_region_is_iommu(section->mr)) { @@ -323,14 +325,14 @@ static void vhost_vdpa_listener_region_add(MemoryListener *listener, return; } - if (unlikely((section->offset_within_address_space & ~TARGET_PAGE_MASK) != - (section->offset_within_region & ~TARGET_PAGE_MASK))) { + if (unlikely((section->offset_within_address_space & ~page_mask) != + (section->offset_within_region & ~page_mask))) { error_report("%s received unaligned region", __func__); return; } - iova = ROUND_UP(section->offset_within_address_space, TARGET_PAGE_SIZE); - llend = vhost_vdpa_section_end(section, TARGET_PAGE_MASK); + iova = ROUND_UP(section->offset_within_address_space, page_size); + llend = vhost_vdpa_section_end(section, page_mask); if (int128_ge(int128_make64(iova), llend)) { return; } @@ -396,23 +398,25 @@ static void vhost_vdpa_listener_region_del(MemoryListener *listener, hwaddr iova; Int128 llend, llsize; int ret; + int page_size = qemu_target_page_size(); + int page_mask = -page_size; if (vhost_vdpa_listener_skipped_section(section, v->iova_range.first, - v->iova_range.last, TARGET_PAGE_MASK)) { + v->iova_range.last, page_mask)) { return; } if (memory_region_is_iommu(section->mr)) { vhost_vdpa_iommu_region_del(listener, section); } - if (unlikely((section->offset_within_address_space & ~TARGET_PAGE_MASK) != - (section->offset_within_region & ~TARGET_PAGE_MASK))) { + if (unlikely((section->offset_within_address_space & ~page_mask) != + (section->offset_within_region & ~page_mask))) { error_report("%s received unaligned region", __func__); return; } - iova = ROUND_UP(section->offset_within_address_space, TARGET_PAGE_SIZE); - llend = vhost_vdpa_section_end(section, TARGET_PAGE_MASK); + iova = ROUND_UP(section->offset_within_address_space, page_size); + llend = vhost_vdpa_section_end(section, page_mask); trace_vhost_vdpa_listener_region_del(v, iova, int128_get64(int128_sub(llend, int128_one())));
Similarly to commit e414ed2c47 ("virtio-iommu: Use target-agnostic qemu_target_page_mask"), Replace the target-specific TARGET_PAGE_SIZE and TARGET_PAGE_MASK definitions by a call to the runtime qemu_target_page_size() helper which is target agnostic. Signed-off-by: Philippe Mathieu-Daudé <philmd@linaro.org> --- hw/virtio/vhost-vdpa.c | 26 +++++++++++++++----------- 1 file changed, 15 insertions(+), 11 deletions(-)