57 lines
1.8 KiB
Diff
57 lines
1.8 KiB
Diff
From c8757c6d870c4788da4980abaf21cb7369702ee9 Mon Sep 17 00:00:00 2001
|
|
From: Paride Legovini <paride@debian.org>
|
|
Date: Tue, 25 Aug 2020 23:18:27 +0200
|
|
Subject: [PATCH] activate_mapping: activate only online CPUs
|
|
|
|
When echoing a mask to /proc/irq/N/smp_affinity make sure to activate
|
|
only CPUs which are online. Activating a CPU which is not online results
|
|
in a EOVERFLOW.
|
|
|
|
Originally fixed in Debian by Helge Deller <deller@gmx.de>.
|
|
|
|
Conflict:NA
|
|
Reference:https://github.com/Irqbalance/irqbalance/commit/c8757c6d870c4788da4980abaf21cb7369702ee9
|
|
---
|
|
activate.c | 8 ++++++--
|
|
1 file changed, 6 insertions(+), 2 deletions(-)
|
|
|
|
diff --git a/activate.c b/activate.c
|
|
index 065f880..62cfd08 100644
|
|
--- a/activate.c
|
|
+++ b/activate.c
|
|
@@ -49,6 +49,7 @@ static void activate_mapping(struct irq_info *info, void *data __attribute__((un
|
|
char buf[PATH_MAX];
|
|
FILE *file;
|
|
int ret = 0;
|
|
+ cpumask_t applied_mask;
|
|
|
|
/*
|
|
* only activate mappings for irqs that have moved
|
|
@@ -59,10 +60,13 @@ static void activate_mapping(struct irq_info *info, void *data __attribute__((un
|
|
if (!info->assigned_obj)
|
|
return;
|
|
|
|
+ /* activate only online cpus, otherwise writing to procfs returns EOVERFLOW */
|
|
+ cpus_and(applied_mask, cpu_online_map, info->assigned_obj->mask);
|
|
+
|
|
/*
|
|
* Don't activate anything for which we have an invalid mask
|
|
*/
|
|
- if (check_affinity(info, info->assigned_obj->mask))
|
|
+ if (check_affinity(info, applied_mask))
|
|
return;
|
|
|
|
sprintf(buf, "/proc/irq/%i/smp_affinity", info->irq);
|
|
@@ -70,7 +74,7 @@ static void activate_mapping(struct irq_info *info, void *data __attribute__((un
|
|
if (!file)
|
|
return;
|
|
|
|
- cpumask_scnprintf(buf, PATH_MAX, info->assigned_obj->mask);
|
|
+ cpumask_scnprintf(buf, PATH_MAX, applied_mask);
|
|
ret = fprintf(file, "%s", buf);
|
|
if (ret < 0) {
|
|
log(TO_ALL, LOG_WARNING, "cannot change irq %i's affinity, add it to banned list", info->irq);
|
|
--
|
|
2.23.0
|
|
|