vfio: Make VFIOContainerBase poiner parameter const in VFIOIOMMUOps callbacks

Some of the callbacks in VFIOIOMMUOps pass VFIOContainerBase poiner,
those callbacks only need read access to the sub object of VFIOContainerBase.
So make VFIOContainerBase, VFIOContainer and VFIOIOMMUFDContainer as const
in these callbacks.

Local functions called by those callbacks also need same changes to avoid
build error.

Suggested-by: Cédric Le Goater <clg@redhat.com>
Signed-off-by: Zhenzhong Duan <zhenzhong.duan@intel.com>
Reviewed-by: Cédric Le Goater <clg@redhat.com>
Reviewed-by: Eric Auger <eric.auger@redhat.com>
Tested-by: Eric Auger <eric.auger@redhat.com>
Tested-by: Nicolin Chen <nicolinc@nvidia.com>
Signed-off-by: Cédric Le Goater <clg@redhat.com>
This commit is contained in:
Zhenzhong Duan 2023-11-21 16:44:17 +08:00 committed by Cédric Le Goater
parent 909a6254ed
commit 4517c33c31
6 changed files with 42 additions and 35 deletions

View File

@ -204,7 +204,7 @@ static bool vfio_devices_all_dirty_tracking(VFIOContainerBase *bcontainer)
return true; return true;
} }
bool vfio_devices_all_device_dirty_tracking(VFIOContainerBase *bcontainer) bool vfio_devices_all_device_dirty_tracking(const VFIOContainerBase *bcontainer)
{ {
VFIODevice *vbasedev; VFIODevice *vbasedev;
@ -221,7 +221,8 @@ bool vfio_devices_all_device_dirty_tracking(VFIOContainerBase *bcontainer)
* Check if all VFIO devices are running and migration is active, which is * Check if all VFIO devices are running and migration is active, which is
* essentially equivalent to the migration being in pre-copy phase. * essentially equivalent to the migration being in pre-copy phase.
*/ */
bool vfio_devices_all_running_and_mig_active(VFIOContainerBase *bcontainer) bool
vfio_devices_all_running_and_mig_active(const VFIOContainerBase *bcontainer)
{ {
VFIODevice *vbasedev; VFIODevice *vbasedev;
@ -1139,7 +1140,7 @@ static int vfio_device_dma_logging_report(VFIODevice *vbasedev, hwaddr iova,
return 0; return 0;
} }
int vfio_devices_query_dirty_bitmap(VFIOContainerBase *bcontainer, int vfio_devices_query_dirty_bitmap(const VFIOContainerBase *bcontainer,
VFIOBitmap *vbmap, hwaddr iova, VFIOBitmap *vbmap, hwaddr iova,
hwaddr size) hwaddr size)
{ {
@ -1162,7 +1163,7 @@ int vfio_devices_query_dirty_bitmap(VFIOContainerBase *bcontainer,
return 0; return 0;
} }
int vfio_get_dirty_bitmap(VFIOContainerBase *bcontainer, uint64_t iova, int vfio_get_dirty_bitmap(const VFIOContainerBase *bcontainer, uint64_t iova,
uint64_t size, ram_addr_t ram_addr) uint64_t size, ram_addr_t ram_addr)
{ {
bool all_device_dirty_tracking = bool all_device_dirty_tracking =

View File

@ -63,7 +63,7 @@ int vfio_container_set_dirty_page_tracking(VFIOContainerBase *bcontainer,
return bcontainer->ops->set_dirty_page_tracking(bcontainer, start); return bcontainer->ops->set_dirty_page_tracking(bcontainer, start);
} }
int vfio_container_query_dirty_bitmap(VFIOContainerBase *bcontainer, int vfio_container_query_dirty_bitmap(const VFIOContainerBase *bcontainer,
VFIOBitmap *vbmap, VFIOBitmap *vbmap,
hwaddr iova, hwaddr size) hwaddr iova, hwaddr size)
{ {

View File

@ -61,11 +61,11 @@ static int vfio_ram_block_discard_disable(VFIOContainer *container, bool state)
} }
} }
static int vfio_dma_unmap_bitmap(VFIOContainer *container, static int vfio_dma_unmap_bitmap(const VFIOContainer *container,
hwaddr iova, ram_addr_t size, hwaddr iova, ram_addr_t size,
IOMMUTLBEntry *iotlb) IOMMUTLBEntry *iotlb)
{ {
VFIOContainerBase *bcontainer = &container->bcontainer; const VFIOContainerBase *bcontainer = &container->bcontainer;
struct vfio_iommu_type1_dma_unmap *unmap; struct vfio_iommu_type1_dma_unmap *unmap;
struct vfio_bitmap *bitmap; struct vfio_bitmap *bitmap;
VFIOBitmap vbmap; VFIOBitmap vbmap;
@ -117,10 +117,11 @@ unmap_exit:
/* /*
* DMA - Mapping and unmapping for the "type1" IOMMU interface used on x86 * DMA - Mapping and unmapping for the "type1" IOMMU interface used on x86
*/ */
static int vfio_legacy_dma_unmap(VFIOContainerBase *bcontainer, hwaddr iova, static int vfio_legacy_dma_unmap(const VFIOContainerBase *bcontainer,
ram_addr_t size, IOMMUTLBEntry *iotlb) hwaddr iova, ram_addr_t size,
IOMMUTLBEntry *iotlb)
{ {
VFIOContainer *container = container_of(bcontainer, VFIOContainer, const VFIOContainer *container = container_of(bcontainer, VFIOContainer,
bcontainer); bcontainer);
struct vfio_iommu_type1_dma_unmap unmap = { struct vfio_iommu_type1_dma_unmap unmap = {
.argsz = sizeof(unmap), .argsz = sizeof(unmap),
@ -174,10 +175,10 @@ static int vfio_legacy_dma_unmap(VFIOContainerBase *bcontainer, hwaddr iova,
return 0; return 0;
} }
static int vfio_legacy_dma_map(VFIOContainerBase *bcontainer, hwaddr iova, static int vfio_legacy_dma_map(const VFIOContainerBase *bcontainer, hwaddr iova,
ram_addr_t size, void *vaddr, bool readonly) ram_addr_t size, void *vaddr, bool readonly)
{ {
VFIOContainer *container = container_of(bcontainer, VFIOContainer, const VFIOContainer *container = container_of(bcontainer, VFIOContainer,
bcontainer); bcontainer);
struct vfio_iommu_type1_dma_map map = { struct vfio_iommu_type1_dma_map map = {
.argsz = sizeof(map), .argsz = sizeof(map),
@ -207,10 +208,11 @@ static int vfio_legacy_dma_map(VFIOContainerBase *bcontainer, hwaddr iova,
return -errno; return -errno;
} }
static int vfio_legacy_set_dirty_page_tracking(VFIOContainerBase *bcontainer, static int
vfio_legacy_set_dirty_page_tracking(const VFIOContainerBase *bcontainer,
bool start) bool start)
{ {
VFIOContainer *container = container_of(bcontainer, VFIOContainer, const VFIOContainer *container = container_of(bcontainer, VFIOContainer,
bcontainer); bcontainer);
int ret; int ret;
struct vfio_iommu_type1_dirty_bitmap dirty = { struct vfio_iommu_type1_dirty_bitmap dirty = {
@ -233,11 +235,11 @@ static int vfio_legacy_set_dirty_page_tracking(VFIOContainerBase *bcontainer,
return ret; return ret;
} }
static int vfio_legacy_query_dirty_bitmap(VFIOContainerBase *bcontainer, static int vfio_legacy_query_dirty_bitmap(const VFIOContainerBase *bcontainer,
VFIOBitmap *vbmap, VFIOBitmap *vbmap,
hwaddr iova, hwaddr size) hwaddr iova, hwaddr size)
{ {
VFIOContainer *container = container_of(bcontainer, VFIOContainer, const VFIOContainer *container = container_of(bcontainer, VFIOContainer,
bcontainer); bcontainer);
struct vfio_iommu_type1_dirty_bitmap *dbitmap; struct vfio_iommu_type1_dirty_bitmap *dbitmap;
struct vfio_iommu_type1_dirty_bitmap_get *range; struct vfio_iommu_type1_dirty_bitmap_get *range;

View File

@ -26,10 +26,10 @@
#include "qemu/chardev_open.h" #include "qemu/chardev_open.h"
#include "pci.h" #include "pci.h"
static int iommufd_cdev_map(VFIOContainerBase *bcontainer, hwaddr iova, static int iommufd_cdev_map(const VFIOContainerBase *bcontainer, hwaddr iova,
ram_addr_t size, void *vaddr, bool readonly) ram_addr_t size, void *vaddr, bool readonly)
{ {
VFIOIOMMUFDContainer *container = const VFIOIOMMUFDContainer *container =
container_of(bcontainer, VFIOIOMMUFDContainer, bcontainer); container_of(bcontainer, VFIOIOMMUFDContainer, bcontainer);
return iommufd_backend_map_dma(container->be, return iommufd_backend_map_dma(container->be,
@ -37,11 +37,11 @@ static int iommufd_cdev_map(VFIOContainerBase *bcontainer, hwaddr iova,
iova, size, vaddr, readonly); iova, size, vaddr, readonly);
} }
static int iommufd_cdev_unmap(VFIOContainerBase *bcontainer, static int iommufd_cdev_unmap(const VFIOContainerBase *bcontainer,
hwaddr iova, ram_addr_t size, hwaddr iova, ram_addr_t size,
IOMMUTLBEntry *iotlb) IOMMUTLBEntry *iotlb)
{ {
VFIOIOMMUFDContainer *container = const VFIOIOMMUFDContainer *container =
container_of(bcontainer, VFIOIOMMUFDContainer, bcontainer); container_of(bcontainer, VFIOIOMMUFDContainer, bcontainer);
/* TODO: Handle dma_unmap_bitmap with iotlb args (migration) */ /* TODO: Handle dma_unmap_bitmap with iotlb args (migration) */

View File

@ -244,12 +244,14 @@ bool vfio_migration_realize(VFIODevice *vbasedev, Error **errp);
void vfio_migration_exit(VFIODevice *vbasedev); void vfio_migration_exit(VFIODevice *vbasedev);
int vfio_bitmap_alloc(VFIOBitmap *vbmap, hwaddr size); int vfio_bitmap_alloc(VFIOBitmap *vbmap, hwaddr size);
bool vfio_devices_all_running_and_mig_active(VFIOContainerBase *bcontainer); bool
bool vfio_devices_all_device_dirty_tracking(VFIOContainerBase *bcontainer); vfio_devices_all_running_and_mig_active(const VFIOContainerBase *bcontainer);
int vfio_devices_query_dirty_bitmap(VFIOContainerBase *bcontainer, bool
vfio_devices_all_device_dirty_tracking(const VFIOContainerBase *bcontainer);
int vfio_devices_query_dirty_bitmap(const VFIOContainerBase *bcontainer,
VFIOBitmap *vbmap, hwaddr iova, VFIOBitmap *vbmap, hwaddr iova,
hwaddr size); hwaddr size);
int vfio_get_dirty_bitmap(VFIOContainerBase *bcontainer, uint64_t iova, int vfio_get_dirty_bitmap(const VFIOContainerBase *bcontainer, uint64_t iova,
uint64_t size, ram_addr_t ram_addr); uint64_t size, ram_addr_t ram_addr);
/* Returns 0 on success, or a negative errno. */ /* Returns 0 on success, or a negative errno. */

View File

@ -82,7 +82,7 @@ void vfio_container_del_section_window(VFIOContainerBase *bcontainer,
MemoryRegionSection *section); MemoryRegionSection *section);
int vfio_container_set_dirty_page_tracking(VFIOContainerBase *bcontainer, int vfio_container_set_dirty_page_tracking(VFIOContainerBase *bcontainer,
bool start); bool start);
int vfio_container_query_dirty_bitmap(VFIOContainerBase *bcontainer, int vfio_container_query_dirty_bitmap(const VFIOContainerBase *bcontainer,
VFIOBitmap *vbmap, VFIOBitmap *vbmap,
hwaddr iova, hwaddr size); hwaddr iova, hwaddr size);
@ -93,18 +93,20 @@ void vfio_container_destroy(VFIOContainerBase *bcontainer);
struct VFIOIOMMUOps { struct VFIOIOMMUOps {
/* basic feature */ /* basic feature */
int (*dma_map)(VFIOContainerBase *bcontainer, int (*dma_map)(const VFIOContainerBase *bcontainer,
hwaddr iova, ram_addr_t size, hwaddr iova, ram_addr_t size,
void *vaddr, bool readonly); void *vaddr, bool readonly);
int (*dma_unmap)(VFIOContainerBase *bcontainer, int (*dma_unmap)(const VFIOContainerBase *bcontainer,
hwaddr iova, ram_addr_t size, hwaddr iova, ram_addr_t size,
IOMMUTLBEntry *iotlb); IOMMUTLBEntry *iotlb);
int (*attach_device)(const char *name, VFIODevice *vbasedev, int (*attach_device)(const char *name, VFIODevice *vbasedev,
AddressSpace *as, Error **errp); AddressSpace *as, Error **errp);
void (*detach_device)(VFIODevice *vbasedev); void (*detach_device)(VFIODevice *vbasedev);
/* migration feature */ /* migration feature */
int (*set_dirty_page_tracking)(VFIOContainerBase *bcontainer, bool start); int (*set_dirty_page_tracking)(const VFIOContainerBase *bcontainer,
int (*query_dirty_bitmap)(VFIOContainerBase *bcontainer, VFIOBitmap *vbmap, bool start);
int (*query_dirty_bitmap)(const VFIOContainerBase *bcontainer,
VFIOBitmap *vbmap,
hwaddr iova, hwaddr size); hwaddr iova, hwaddr size);
/* PCI specific */ /* PCI specific */
int (*pci_hot_reset)(VFIODevice *vbasedev, bool single); int (*pci_hot_reset)(VFIODevice *vbasedev, bool single);