mirror of https://gitee.com/openkylin/linux.git
dmaengine: idxd: Enable IDXD performance monitor support
Add the code needed in the main IDXD driver to interface with the IDXD perfmon implementation. [ Based on work originally by Jing Lin. ] Reviewed-by: Dave Jiang <dave.jiang@intel.com> Reviewed-by: Kan Liang <kan.liang@linux.intel.com> Signed-off-by: Tom Zanussi <tom.zanussi@linux.intel.com> Link: https://lore.kernel.org/r/a5564a5583911565d31c2af9234218c5166c4b2c.1619276133.git.zanussi@kernel.org Signed-off-by: Vinod Koul <vkoul@kernel.org>
This commit is contained in:
parent
81dd4d4d61
commit
0bde4444ec
|
@ -21,6 +21,7 @@
|
|||
#include "../dmaengine.h"
|
||||
#include "registers.h"
|
||||
#include "idxd.h"
|
||||
#include "perfmon.h"
|
||||
|
||||
MODULE_VERSION(IDXD_DRIVER_VERSION);
|
||||
MODULE_LICENSE("GPL v2");
|
||||
|
@ -541,6 +542,10 @@ static int idxd_probe(struct idxd_device *idxd)
|
|||
|
||||
idxd->major = idxd_cdev_get_major(idxd);
|
||||
|
||||
rc = perfmon_pmu_init(idxd);
|
||||
if (rc < 0)
|
||||
dev_warn(dev, "Failed to initialize perfmon. No PMU support: %d\n", rc);
|
||||
|
||||
dev_dbg(dev, "IDXD device %d probed successfully\n", idxd->id);
|
||||
return 0;
|
||||
|
||||
|
@ -720,6 +725,7 @@ static void idxd_remove(struct pci_dev *pdev)
|
|||
if (device_pasid_enabled(idxd))
|
||||
idxd_disable_system_pasid(idxd);
|
||||
idxd_unregister_devices(idxd);
|
||||
perfmon_pmu_remove(idxd);
|
||||
iommu_dev_disable_feature(&pdev->dev, IOMMU_DEV_FEAT_SVA);
|
||||
}
|
||||
|
||||
|
@ -749,6 +755,8 @@ static int __init idxd_init_module(void)
|
|||
else
|
||||
support_enqcmd = true;
|
||||
|
||||
perfmon_init();
|
||||
|
||||
err = idxd_register_bus_type();
|
||||
if (err < 0)
|
||||
return err;
|
||||
|
@ -782,5 +790,6 @@ static void __exit idxd_exit_module(void)
|
|||
pci_unregister_driver(&idxd_pci_driver);
|
||||
idxd_cdev_remove();
|
||||
idxd_unregister_bus_type();
|
||||
perfmon_exit();
|
||||
}
|
||||
module_exit(idxd_exit_module);
|
||||
|
|
|
@ -156,11 +156,8 @@ static int process_misc_interrupts(struct idxd_device *idxd, u32 cause)
|
|||
}
|
||||
|
||||
if (cause & IDXD_INTC_PERFMON_OVFL) {
|
||||
/*
|
||||
* Driver does not utilize perfmon counter overflow interrupt
|
||||
* yet.
|
||||
*/
|
||||
val |= IDXD_INTC_PERFMON_OVFL;
|
||||
perfmon_counter_overflow(idxd);
|
||||
}
|
||||
|
||||
val ^= cause;
|
||||
|
|
Loading…
Reference in New Issue