diff options
| author | Joshua Bakita <bakitajoshua@gmail.com> | 2023-10-05 14:58:19 -0400 |
|---|---|---|
| committer | Joshua Bakita <bakitajoshua@gmail.com> | 2023-10-05 14:58:19 -0400 |
| commit | aa06f84f03cba7ad1aae5cd527355bb3d8c152a6 (patch) | |
| tree | 7e894c28e5f0e5311b8738cd195da8313733f095 | |
| parent | ef96c6b7ebc32b0f839fd5339f11d8f25b8e6d62 (diff) | |
Only log interrupts if explictly enabled
| -rw-r--r-- | nvdebug_entry.c | 12 |
1 files changed, 9 insertions, 3 deletions
diff --git a/nvdebug_entry.c b/nvdebug_entry.c index 8e8266c..4eb44a2 100644 --- a/nvdebug_entry.c +++ b/nvdebug_entry.c | |||
| @@ -12,6 +12,9 @@ | |||
| 12 | #include "nvdebug.h" | 12 | #include "nvdebug.h" |
| 13 | #include "stubs.h" | 13 | #include "stubs.h" |
| 14 | 14 | ||
| 15 | // Enable to intercept and log GPU interrupts | ||
| 16 | #define INTERRUPT_DEBUG 0 | ||
| 17 | |||
| 15 | // MIT is GPL-compatible. We need to be GPL-compatible for symbols like | 18 | // MIT is GPL-compatible. We need to be GPL-compatible for symbols like |
| 16 | // platform_bus_type or bus_find_device_by_name... | 19 | // platform_bus_type or bus_find_device_by_name... |
| 17 | MODULE_LICENSE("Dual MIT/GPL"); | 20 | MODULE_LICENSE("Dual MIT/GPL"); |
| @@ -50,11 +53,12 @@ const struct file_operations* compat_ops(const struct file_operations* ops) { | |||
| 50 | } | 53 | } |
| 51 | #endif | 54 | #endif |
| 52 | 55 | ||
| 53 | // TEMP | 56 | #if INTERRUPT_DEBUG |
| 54 | irqreturn_t nvdebug_irq_tap(int irq_num, void * dev) { | 57 | irqreturn_t nvdebug_irq_tap(int irq_num, void * dev) { |
| 55 | printk(KERN_INFO "[nvdebug] Interrupt tap triggered on IRQ %d.\n", irq_num); | 58 | printk(KERN_INFO "[nvdebug] Interrupt tap triggered on IRQ %d.\n", irq_num); |
| 56 | return IRQ_NONE; // We don't actually handle any interrupts. Pass them on. | 59 | return IRQ_NONE; // We don't actually handle any interrupts. Pass them on. |
| 57 | } | 60 | } |
| 61 | #endif // INTERRUPT_DEBUG | ||
| 58 | 62 | ||
| 59 | // Find any and all NVIDIA GPUs in the system | 63 | // Find any and all NVIDIA GPUs in the system |
| 60 | // Note: This function fails if any of them are in a bad state | 64 | // Note: This function fails if any of them are in a bad state |
| @@ -125,10 +129,11 @@ int probe_and_cache_device(void) { | |||
| 125 | g_nvdebug_state[i].chip_id = ids.chip_id; | 129 | g_nvdebug_state[i].chip_id = ids.chip_id; |
| 126 | printk(KERN_INFO "[nvdebug] Chip ID %x (architecture %s) detected on PCI bus and initialized.", | 130 | printk(KERN_INFO "[nvdebug] Chip ID %x (architecture %s) detected on PCI bus and initialized.", |
| 127 | ids.chip_id, ARCH2NAME(ids.architecture)); | 131 | ids.chip_id, ARCH2NAME(ids.architecture)); |
| 128 | // TEMP | 132 | #if INTERRUPT_DEBUG |
| 129 | if (request_irq(pcid->irq, nvdebug_irq_tap, IRQF_SHARED, "nvdebug tap", pcid)) { | 133 | if (request_irq(pcid->irq, nvdebug_irq_tap, IRQF_SHARED, "nvdebug tap", pcid)) { |
| 130 | printk(KERN_WARNING "[nvdebug] Unable to initialize IRQ tap\n"); | 134 | printk(KERN_WARNING "[nvdebug] Unable to initialize IRQ tap\n"); |
| 131 | } | 135 | } |
| 136 | #endif // INTERRUPT_DEBUG | ||
| 132 | i++; | 137 | i++; |
| 133 | } | 138 | } |
| 134 | // Return the number of devices we found | 139 | // Return the number of devices we found |
| @@ -294,8 +299,9 @@ static void __exit nvdebug_exit(void) { | |||
| 294 | pci_iounmap(g->pcid, g->regs); | 299 | pci_iounmap(g->pcid, g->regs); |
| 295 | if (g && g->bar2) | 300 | if (g && g->bar2) |
| 296 | pci_iounmap(g->pcid, g->bar2); | 301 | pci_iounmap(g->pcid, g->bar2); |
| 297 | // TEMP | 302 | #if INTERRUPT_DEBUG |
| 298 | free_irq(g->pcid->irq, g->pcid); | 303 | free_irq(g->pcid->irq, g->pcid); |
| 304 | #endif // INTERRUPT_DEBUG | ||
| 299 | } | 305 | } |
| 300 | printk(KERN_INFO "[nvdebug] Chip ID %x deinitialized.", g->chip_id); | 306 | printk(KERN_INFO "[nvdebug] Chip ID %x deinitialized.", g->chip_id); |
| 301 | } | 307 | } |
