On 6/3/24 08:10, Zhenzhong Duan wrote:
> Suggested-by: Cédric Le Goater <c...@redhat.com>
> Signed-off-by: Zhenzhong Duan <zhenzhong.d...@intel.com>
> ---
> backends/iommufd.c | 23 +++++++++++++++++++++++
> 1 file changed, 23 insertions(+)
>
> diff --git a/backends/iommufd.c b/backends/iommufd.c
> index c7e969d6f7..f2f7a762a0 100644
> --- a/backends/iommufd.c
> +++ b/backends/iommufd.c
> @@ -230,6 +230,28 @@ bool iommufd_backend_get_device_info(IOMMUFDBackend *be,
> uint32_t devid,
> return true;
> }
>
> +static int hiod_iommufd_get_cap(HostIOMMUDevice *hiod, int cap, Error **errp)
> +{
> + HostIOMMUDeviceCaps *caps = &hiod->caps;
> +
> + switch (cap) {
> + case HOST_IOMMU_DEVICE_CAP_IOMMU_TYPE:
> + return caps->type;
> + case HOST_IOMMU_DEVICE_CAP_AW_BITS:
> + return caps->aw_bits;
> + default:
> + error_setg(errp, "Not support get cap %x", cap);
can't you add details about the faulting HostIOMMUDevice by tracing the
devid for instance?
I would rephrase the error message into No support for capability 0x%x
Eric
> + return -EINVAL;
> + }
> +}
> +
> +static void hiod_iommufd_class_init(ObjectClass *oc, void *data)
> +{
> + HostIOMMUDeviceClass *hioc = HOST_IOMMU_DEVICE_CLASS(oc);
> +
> + hioc->get_cap = hiod_iommufd_get_cap;
> +};
> +
> static const TypeInfo types[] = {
> {
> .name = TYPE_IOMMUFD_BACKEND,
> @@ -246,6 +268,7 @@ static const TypeInfo types[] = {
> }, {
> .name = TYPE_HOST_IOMMU_DEVICE_IOMMUFD,
> .parent = TYPE_HOST_IOMMU_DEVICE,
> + .class_init = hiod_iommufd_class_init,
> .abstract = true,
> }
> };