mirror of
https://github.com/Motorhead1991/qemu.git
synced 2025-08-04 08:13:54 -06:00
vfio/container: Introduce vfio_get_iommu_class_name()
Rework vfio_get_iommu_class() to return a literal class name instead of a class object. We will need this name to instantiate the object later on. Since the default case asserts, remove the error report as QEMU will simply abort before. Reviewed-by: Zhenzhong Duan <zhenzhong.duan@intel.com> Reviewed-by: Eric Auger <eric.auger@redhat.com> Tested-by: Eric Auger <eric.auger@redhat.com> Signed-off-by: Cédric Le Goater <clg@redhat.com>
This commit is contained in:
parent
55974f35ea
commit
17401879c4
1 changed files with 6 additions and 12 deletions
|
@ -373,24 +373,20 @@ static int vfio_get_iommu_type(int container_fd,
|
||||||
/*
|
/*
|
||||||
* vfio_get_iommu_ops - get a VFIOIOMMUClass associated with a type
|
* vfio_get_iommu_ops - get a VFIOIOMMUClass associated with a type
|
||||||
*/
|
*/
|
||||||
static const VFIOIOMMUClass *vfio_get_iommu_class(int iommu_type, Error **errp)
|
static const char *vfio_get_iommu_class_name(int iommu_type)
|
||||||
{
|
{
|
||||||
ObjectClass *klass = NULL;
|
|
||||||
|
|
||||||
switch (iommu_type) {
|
switch (iommu_type) {
|
||||||
case VFIO_TYPE1v2_IOMMU:
|
case VFIO_TYPE1v2_IOMMU:
|
||||||
case VFIO_TYPE1_IOMMU:
|
case VFIO_TYPE1_IOMMU:
|
||||||
klass = object_class_by_name(TYPE_VFIO_IOMMU_LEGACY);
|
return TYPE_VFIO_IOMMU_LEGACY;
|
||||||
break;
|
break;
|
||||||
case VFIO_SPAPR_TCE_v2_IOMMU:
|
case VFIO_SPAPR_TCE_v2_IOMMU:
|
||||||
case VFIO_SPAPR_TCE_IOMMU:
|
case VFIO_SPAPR_TCE_IOMMU:
|
||||||
klass = object_class_by_name(TYPE_VFIO_IOMMU_SPAPR);
|
return TYPE_VFIO_IOMMU_SPAPR;
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
g_assert_not_reached();
|
g_assert_not_reached();
|
||||||
};
|
};
|
||||||
|
|
||||||
return VFIO_IOMMU_CLASS(klass);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static bool vfio_set_iommu(VFIOContainer *container, int group_fd,
|
static bool vfio_set_iommu(VFIOContainer *container, int group_fd,
|
||||||
|
@ -398,6 +394,7 @@ static bool vfio_set_iommu(VFIOContainer *container, int group_fd,
|
||||||
{
|
{
|
||||||
int iommu_type;
|
int iommu_type;
|
||||||
const VFIOIOMMUClass *vioc;
|
const VFIOIOMMUClass *vioc;
|
||||||
|
const char *vioc_name;
|
||||||
|
|
||||||
iommu_type = vfio_get_iommu_type(container->fd, errp);
|
iommu_type = vfio_get_iommu_type(container->fd, errp);
|
||||||
if (iommu_type < 0) {
|
if (iommu_type < 0) {
|
||||||
|
@ -426,11 +423,8 @@ static bool vfio_set_iommu(VFIOContainer *container, int group_fd,
|
||||||
|
|
||||||
container->iommu_type = iommu_type;
|
container->iommu_type = iommu_type;
|
||||||
|
|
||||||
vioc = vfio_get_iommu_class(iommu_type, errp);
|
vioc_name = vfio_get_iommu_class_name(iommu_type);
|
||||||
if (!vioc) {
|
vioc = VFIO_IOMMU_CLASS(object_class_by_name(vioc_name));
|
||||||
error_setg(errp, "No available IOMMU models");
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
vfio_container_init(&container->bcontainer, vioc);
|
vfio_container_init(&container->bcontainer, vioc);
|
||||||
return true;
|
return true;
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue