Sign Up
Log In
Log In
or
Sign Up
Places
All Projects
Status Monitor
Collapse sidebar
openSUSE:Step:15-SP4
irqbalance
get-irq-module-relationship-from-sys-bus-pci-dr...
Overview
Repositories
Revisions
Requests
Users
Attributes
Meta
File get-irq-module-relationship-from-sys-bus-pci-driver.patch of Package irqbalance
From: Chao Liu <liuchao173@huawei.com> Subject: get irq->module relationship from /sys/bus/pci/*/driver References: bsc#1204961 Patch-Mainline: v1.9.1 Git-commit: ff48ac9c84f0b318dfce665605d72e86dfcfe008 Git-repo: https://github.com/Irqbalance/irqbalance.git.git Signed-off-by: Chao Liu <liuchao173@huawei.com> Signed-off-by: <trenn@suse.com> diff --git a/classify.c b/classify.c index 9b4640c..526a66b 100644 --- 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 *name) 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, GList *proc_interrupts) /* * 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, struct irq_info *hint, GList *proc_interrupt 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
Locations
Projects
Search
Status Monitor
Help
OpenBuildService.org
Documentation
API Documentation
Code of Conduct
Contact
Support
@OBShq
Terms
openSUSE Build Service is sponsored by
The Open Build Service is an
openSUSE project
.
Sign Up
Log In
Places
Places
All Projects
Status Monitor