|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] [PATCH v2 4/4] iommu / pci: re-implement XEN_DOMCTL_get_device_group...
On Mon, Jul 15, 2019 at 01:37:10PM +0100, Paul Durrant wrote:
> ... using the new iommu_group infrastructure.
>
> Because 'sibling' devices are now members of the same iommu_group,
> implement the domctl by looking up the iommu_group of the pdev with the
> matching SBDF and then finding all the assigned pdevs that are in the
> group.
>
> Signed-off-by: Paul Durrant <paul.durrant@xxxxxxxxxx>
> ---
> Cc: Jan Beulich <jbeulich@xxxxxxxx>
>
> v2:
> - Re-implement in the absence of a per-group devs list.
> - Make use of pci_sbdf_t.
> ---
> xen/drivers/passthrough/groups.c | 44 ++++++++++++++++++++++++++++++++++
> xen/drivers/passthrough/pci.c | 51
> ++--------------------------------------
> xen/include/xen/iommu.h | 2 ++
> 3 files changed, 48 insertions(+), 49 deletions(-)
>
> diff --git a/xen/drivers/passthrough/groups.c
> b/xen/drivers/passthrough/groups.c
> index 1a2f461c87..6d8064e4f4 100644
> --- a/xen/drivers/passthrough/groups.c
> +++ b/xen/drivers/passthrough/groups.c
> @@ -12,8 +12,12 @@
> * GNU General Public License for more details.
> */
>
> +#include <xen/guest_access.h>
> #include <xen/iommu.h>
> +#include <xen/pci.h>
> #include <xen/radix-tree.h>
> +#include <xen/sched.h>
> +#include <xsm/xsm.h>
>
> struct iommu_group {
> unsigned int id;
> @@ -81,6 +85,46 @@ int iommu_group_assign(struct pci_dev *pdev, void *arg)
> return 0;
> }
>
> +int iommu_get_device_group(struct domain *d, pci_sbdf_t sbdf,
> + XEN_GUEST_HANDLE_64(uint32) buf, int max_sdevs)
max_sdevs should be unsigned AFAICT, but it seems to be completely
unused. I think you want to do...
> +{
> + struct iommu_group *grp = NULL;
> + struct pci_dev *pdev;
> + unsigned int i = 0;
> +
> + pcidevs_lock();
> +
> + for_each_pdev ( d, pdev )
> + {
> + if ( pdev->sbdf.sbdf == sbdf.sbdf )
> + {
> + grp = pdev->grp;
> + break;
> + }
> + }
> +
> + if ( !grp )
> + goto out;
> +
> + for_each_pdev ( d, pdev )
> + {
if ( i == max_sdevs )
{
pcidevs_unlock();
return -ENOSPC;
}
Thanks, Roger.
_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxxxxxxxxx
https://lists.xenproject.org/mailman/listinfo/xen-devel
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |