mirror of https://github.com/xemu-project/xemu.git
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:
parent
909a6254ed
commit
4517c33c31
|
@ -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 =
|
||||||
|
|
|
@ -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)
|
||||||
{
|
{
|
||||||
|
|
|
@ -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;
|
||||||
|
|
|
@ -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) */
|
||||||
|
|
|
@ -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. */
|
||||||
|
|
|
@ -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);
|
||||||
|
|
Loading…
Reference in New Issue