[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-Id: <cfa98a44dd90a40a1bb776bcb9b76c2cfb1ad232.1619033785.git.zanussi@kernel.org>
Date: Wed, 21 Apr 2021 16:04:55 -0500
From: Tom Zanussi <tom.zanussi@...ux.intel.com>
To: vkoul@...nel.org
Cc: peterz@...radead.org, acme@...nel.org, mingo@...nel.org,
kan.liang@...ux.intel.com, dave.jiang@...el.com,
tony.luck@...el.com, dan.j.williams@...el.com,
linux-kernel@...r.kernel.org, dmaengine@...r.kernel.org
Subject: [PATCH v3 2/2] 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@...el.com>
Reviewed-by: Kan Liang <kan.liang@...ux.intel.com>
Signed-off-by: Tom Zanussi <tom.zanussi@...ux.intel.com>
---
drivers/dma/idxd/init.c | 9 +++++++++
drivers/dma/idxd/irq.c | 5 +----
2 files changed, 10 insertions(+), 4 deletions(-)
diff --git a/drivers/dma/idxd/init.c b/drivers/dma/idxd/init.c
index e8f64324bb3a..4c6ea15cb641 100644
--- a/drivers/dma/idxd/init.c
+++ b/drivers/dma/idxd/init.c
@@ -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");
@@ -489,6 +490,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;
@@ -636,6 +641,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);
}
static struct pci_driver idxd_pci_driver = {
@@ -664,6 +670,8 @@ static int __init idxd_init_module(void)
else
support_enqcmd = true;
+ perfmon_init();
+
err = idxd_register_bus_type();
if (err < 0)
return err;
@@ -697,5 +705,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);
diff --git a/drivers/dma/idxd/irq.c b/drivers/dma/idxd/irq.c
index fc0781e3f36d..ae6738470fab 100644
--- a/drivers/dma/idxd/irq.c
+++ b/drivers/dma/idxd/irq.c
@@ -165,11 +165,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;
--
2.17.1
Powered by blists - more mailing lists