|
|
- From ff48ac9c84f0b318dfce665605d72e86dfcfe008 Mon Sep 17 00:00:00 2001
- From: Chao Liu <liuchao173@huawei.com>
- Date: Tue, 7 Jun 2022 15:15:15 +0800
- Subject: [PATCH] get irq->module relationship from /sys/bus/pci/*/driver
-
- Signed-off-by: Chao Liu <liuchao173@huawei.com>
- ---
- classify.c | 19 +++++++++++++++++--
- 1 file changed, 17 insertions(+), 2 deletions(-)
-
- --- a/classify.c
- +++ b/classify.c
- @@ -7,6 +7,7 @@
- #include <dirent.h>
- #include <assert.h>
- #include <errno.h>
- +#include <libgen.h>
-
- #include "irqbalance.h"
- #include "types.h"
- @@ -578,7 +579,7 @@ static int check_for_module_ban(char *na
- return 0;
- }
-
- -static int check_for_irq_ban(int irq, GList *proc_interrupts)
- +static int check_for_irq_ban(int irq, char *mod, GList *proc_interrupts)
- {
- struct irq_info find, *res;
- GList *entry;
- @@ -594,6 +595,9 @@ static int check_for_irq_ban(int irq, GL
- /*
- * Check to see if we banned module which the irq belongs to.
- */
- + if (mod != NULL && strlen(mod) > 0 && check_for_module_ban(mod))
- + return 1;
- +
- entry = g_list_find_custom(proc_interrupts, &find, compare_ints);
- if (entry) {
- res = entry->data;
- @@ -609,14 +613,25 @@ static void add_new_irq(char *path, stru
- struct irq_info *new;
- struct user_irq_policy pol;
- int irq = hint->irq;
- + char buf[PATH_MAX], drvpath[PATH_MAX];
- + char *mod = NULL;
- + int ret;
-
- new = get_irq_info(irq);
- if (new)
- return;
-
- + if (path) {
- + sprintf(buf, "%s/driver", path);
- + ret = readlink(buf, drvpath, PATH_MAX);
- + if (ret > 0 && ret < PATH_MAX) {
- + drvpath[ret] = '\0';
- + mod = basename(drvpath);
- + }
- + }
- /* Set NULL devpath for the irq has no sysfs entries */
- get_irq_user_policy(path, irq, &pol);
- - if ((pol.ban == 1) || check_for_irq_ban(irq, proc_interrupts)) { /*FIXME*/
- + if ((pol.ban == 1) || check_for_irq_ban(irq, mod, proc_interrupts)) { /*FIXME*/
- __add_banned_irq(irq, &banned_irqs);
- new = get_irq_info(irq);
- } else
|