RE: [RFC 5/5] vfio/qat: Add vfio_pci driver for Intel QAT VF devices

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Thanks for the comments, Alex.
On Thursday, July 27, 2023 3:37 AM, Alex Williamson wrote:
> >  drivers/vfio/pci/Kconfig                 |   2 +
> >  drivers/vfio/pci/Makefile                |   1 +
> >  drivers/vfio/pci/qat/Kconfig             |  13 +
> >  drivers/vfio/pci/qat/Makefile            |   4 +
> >  drivers/vfio/pci/qat/qat_vfio_pci_main.c | 518
> +++++++++++++++++++++++
> 
> Rename to main.c.

Will do in next version.

> 
> >  5 files changed, 538 insertions(+)
> >  create mode 100644 drivers/vfio/pci/qat/Kconfig
> >  create mode 100644 drivers/vfio/pci/qat/Makefile
> >  create mode 100644 drivers/vfio/pci/qat/qat_vfio_pci_main.c
> >
> > diff --git a/drivers/vfio/pci/Kconfig b/drivers/vfio/pci/Kconfig
> > index f9d0c908e738..47c9773cf0c7 100644
> > --- a/drivers/vfio/pci/Kconfig
> > +++ b/drivers/vfio/pci/Kconfig
> > @@ -59,4 +59,6 @@ source "drivers/vfio/pci/mlx5/Kconfig"
> >
> >  source "drivers/vfio/pci/hisilicon/Kconfig"
> >
> > +source "drivers/vfio/pci/qat/Kconfig"
> > +
> >  endif
> > diff --git a/drivers/vfio/pci/Makefile b/drivers/vfio/pci/Makefile
> > index 24c524224da5..dcc6366df8fa 100644
> > --- a/drivers/vfio/pci/Makefile
> > +++ b/drivers/vfio/pci/Makefile
> > @@ -11,3 +11,4 @@ obj-$(CONFIG_VFIO_PCI) += vfio-pci.o
> >  obj-$(CONFIG_MLX5_VFIO_PCI)           += mlx5/
> >
> >  obj-$(CONFIG_HISI_ACC_VFIO_PCI) += hisilicon/
> > +obj-$(CONFIG_QAT_VFIO_PCI) += qat/
> > diff --git a/drivers/vfio/pci/qat/Kconfig b/drivers/vfio/pci/qat/Kconfig
> > new file mode 100644
> > index 000000000000..38e5b4a0ca9c
> > --- /dev/null
> > +++ b/drivers/vfio/pci/qat/Kconfig
> > @@ -0,0 +1,13 @@
> > +# SPDX-License-Identifier: GPL-2.0-only
> > +config QAT_VFIO_PCI
> > +	tristate "VFIO support for QAT VF PCI devices"
> > +	depends on X86
> 
> What specific X86 dependency exists here?  CRYPTO_DEV_QAT and the
> various versions of the QAT driver don't seem to have an explicit arch
> dependency, therefore this shouldn't either.

You are right. Will remove it.

> 
> > +	depends on VFIO_PCI_CORE
> 
> select VFIO_PCI_CORE, this was updated for all vfio-pci variant drivers
> for v6.5.

Will update it.

> 
> > +
> > diff --git a/drivers/vfio/pci/qat/qat_vfio_pci_main.c
> b/drivers/vfio/pci/qat/qat_vfio_pci_main.c
> > new file mode 100644
> > index 000000000000..af971fd05fd2
> > --- /dev/null
> > +++ b/drivers/vfio/pci/qat/qat_vfio_pci_main.c
> > @@ -0,0 +1,518 @@
> > +// SPDX-License-Identifier: GPL-2.0-only
> > +/* Copyright(c) 2023 Intel Corporation */
> > +#include <linux/anon_inodes.h>
> > +#include <linux/container_of.h>
> > +#include <linux/device.h>
> > +#include <linux/file.h>
> > +#include <linux/init.h>
> > +#include <linux/kernel.h>
> > +#include <linux/module.h>
> > +#include <linux/mutex.h>
> > +#include <linux/pci.h>
> > +#include <linux/sizes.h>
> > +#include <linux/types.h>
> > +#include <linux/uaccess.h>
> > +#include <linux/vfio_pci_core.h>
> > +#include <linux/qat/qat_vf_mig.h>
> > +
> > +struct qat_vf_mig_data {
> > +	u8 state[SZ_4K];
> > +};
> > +
> > +struct qat_vf_migration_file {
> > +	struct file *filp;
> > +	struct mutex lock; /* protect migration region context */
> > +	bool disabled;
> > +
> > +	size_t total_length;
> > +	struct qat_vf_mig_data mig_data;
> > +};
> > +
> > +static void qat_vf_vfio_pci_remove(struct pci_dev *pdev)
> > +{
> > +	struct qat_vf_core_device *qat_vdev = qat_vf_drvdata(pdev);
> > +
> > +	vfio_pci_core_unregister_device(&qat_vdev->core_device);
> > +	vfio_put_device(&qat_vdev->core_device.vdev);
> > +}
> > +
> > +static const struct pci_device_id qat_vf_vfio_pci_table[] = {
> > +	/* Intel QAT GEN4 4xxx VF device */
> > +	{ PCI_DRIVER_OVERRIDE_DEVICE_VFIO(PCI_VENDOR_ID_INTEL,
> 0x4941) },
> 
> Should this driver depend on CRYPTO_DEV_QAT_4XXX if that's the only
> supported PF driver?

This module has not any dependency to QAT_4XXX module at build time, but it indeed has implicit
dependency on QAT_4XXX runtime to enable SRIOV and complete the QAT 4xxx VF migration,
do you think we still need to put this dependency explicitly in Kconfig?

> 
> > +	{}
> > +};
> > +MODULE_DEVICE_TABLE(pci, qat_vf_vfio_pci_table);
> > +
> > +static struct pci_driver qat_vf_vfio_pci_driver = {
> > +	.name = "qat_vfio_pci",
> > +	.id_table = qat_vf_vfio_pci_table,
> > +	.probe = qat_vf_vfio_pci_probe,
> > +	.remove = qat_vf_vfio_pci_remove,
> > +	.driver_managed_dma = true,
> > +};
> > +module_pci_driver(qat_vf_vfio_pci_driver)
> > +
> > +MODULE_LICENSE("GPL");
> > +MODULE_AUTHOR("Intel Corporation");
> > +MODULE_DESCRIPTION("QAT VFIO PCI - VFIO PCI driver with live
> migration support for Intel(R) QAT device family");
> 
> Or at least one version of the QAT device family ;)  Thanks,

Will update it. 

> 
> Alex





[Index of Archives]     [KVM ARM]     [KVM ia64]     [KVM ppc]     [Virtualization Tools]     [Spice Development]     [Libvirt]     [Libvirt Users]     [Linux USB Devel]     [Linux Audio Users]     [Yosemite Questions]     [Linux Kernel]     [Linux SCSI]     [XFree86]

  Powered by Linux