vdpa: Add vhost_vdpa_section_end
Abstract this operation, that will be reused when validating the region against the iova range that the device supports. Signed-off-by: Eugenio Pérez <eperezma@redhat.com> Acked-by: Jason Wang <jasowang@redhat.com> Message-Id: <20211014141236.923287-3-eperezma@redhat.com> Reviewed-by: Michael S. Tsirkin <mst@redhat.com> Signed-off-by: Michael S. Tsirkin <mst@redhat.com> Reviewed-by: Stefano Garzarella <sgarzare@redhat.com>
This commit is contained in:
parent
c64038c93e
commit
032e4d686e
@ -24,6 +24,19 @@
|
|||||||
#include "trace.h"
|
#include "trace.h"
|
||||||
#include "qemu-common.h"
|
#include "qemu-common.h"
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Return one past the end of the end of section. Be careful with uint64_t
|
||||||
|
* conversions!
|
||||||
|
*/
|
||||||
|
static Int128 vhost_vdpa_section_end(const MemoryRegionSection *section)
|
||||||
|
{
|
||||||
|
Int128 llend = int128_make64(section->offset_within_address_space);
|
||||||
|
llend = int128_add(llend, section->size);
|
||||||
|
llend = int128_and(llend, int128_exts64(TARGET_PAGE_MASK));
|
||||||
|
|
||||||
|
return llend;
|
||||||
|
}
|
||||||
|
|
||||||
static bool vhost_vdpa_listener_skipped_section(MemoryRegionSection *section)
|
static bool vhost_vdpa_listener_skipped_section(MemoryRegionSection *section)
|
||||||
{
|
{
|
||||||
return (!memory_region_is_ram(section->mr) &&
|
return (!memory_region_is_ram(section->mr) &&
|
||||||
@ -160,10 +173,7 @@ static void vhost_vdpa_listener_region_add(MemoryListener *listener,
|
|||||||
}
|
}
|
||||||
|
|
||||||
iova = TARGET_PAGE_ALIGN(section->offset_within_address_space);
|
iova = TARGET_PAGE_ALIGN(section->offset_within_address_space);
|
||||||
llend = int128_make64(section->offset_within_address_space);
|
llend = vhost_vdpa_section_end(section);
|
||||||
llend = int128_add(llend, section->size);
|
|
||||||
llend = int128_and(llend, int128_exts64(TARGET_PAGE_MASK));
|
|
||||||
|
|
||||||
if (int128_ge(int128_make64(iova), llend)) {
|
if (int128_ge(int128_make64(iova), llend)) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@ -221,9 +231,7 @@ static void vhost_vdpa_listener_region_del(MemoryListener *listener,
|
|||||||
}
|
}
|
||||||
|
|
||||||
iova = TARGET_PAGE_ALIGN(section->offset_within_address_space);
|
iova = TARGET_PAGE_ALIGN(section->offset_within_address_space);
|
||||||
llend = int128_make64(section->offset_within_address_space);
|
llend = vhost_vdpa_section_end(section);
|
||||||
llend = int128_add(llend, section->size);
|
|
||||||
llend = int128_and(llend, int128_exts64(TARGET_PAGE_MASK));
|
|
||||||
|
|
||||||
trace_vhost_vdpa_listener_region_del(v, iova, int128_get64(llend));
|
trace_vhost_vdpa_listener_region_del(v, iova, int128_get64(llend));
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user