Hi Jacob,

On 03/05/2019 23:32, Jacob Pan wrote:
> +/**
> + * struct gpasid_bind_data - Information about device and guest PASID binding
> + * @gcr3:    Guest CR3 value from guest mm
> + * @pasid:   Process address space ID used for the guest mm
> + * @addr_width:      Guest address width. Paging mode can also be derived.
> + */
> +struct gpasid_bind_data {
> +     __u64 gcr3;
> +     __u32 pasid;
> +     __u32 addr_width;
> +     __u32 flags;
> +#define      IOMMU_SVA_GPASID_SRE    BIT(0) /* supervisor request */
> +     __u8 padding[4];
> +};

Could you wrap this structure into a generic one like we now do for
bind_pasid_table? It would make the API easier to extend, because if we
ever add individual PASID bind on Arm (something I'd like to do for
virtio-iommu, eventually) it will have different parameters, as our
PASID table entry has a lot of fields describing the page table format.

Maybe something like the following would do?

struct gpasid_bind_data {
#define IOMMU_GPASID_BIND_VERSION_1 1
        __u32 version;
#define IOMMU_GPASID_BIND_FORMAT_INTEL_VTD      1
        __u32 format;
        union {
                // the current gpasid_bind_data:
                struct gpasid_bind_intel_vtd vtd;
        };
};

Thanks,
Jean

Reply via email to