-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathreset-irq-affinities-properly.patch
115 lines (99 loc) · 4.18 KB
/
reset-irq-affinities-properly.patch
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
From [email protected] Thu Mar 17 13:46:44 2005
Date: Thu, 17 Mar 2005 13:46:45 -0800
From: Jason Uhlenkott <[email protected]>
Subject: [PATCH] Reset irq affinities properly
Message-ID: <[email protected]>
Mime-Version: 1.0
Content-Type: text/plain; charset=us-ascii
Content-Disposition: inline
User-Agent: Mutt/1.5.6i
Status: RO
Content-Length: 3847
Lines: 100
set_irq_affinity() and reset_irq_affinity() contain an implicit
assumption that sizeof(cpumask_t) == sizeof(unsigned long), which
isn't true when NR_CPUS > BITS_PER_LONG. This was causing us to reset
the affinities of some irqs to the empty set, which can indirectly
lead to various kinds of nastiness (e.g. MCAs on ia64 under certain
conditions).
This is only a problem for interrupt-driven dumps. When dumping with
polling I/O we avoid this entire code path since we don't need to care
about irq affinities at all.
Index: linux/drivers/dump/dump_ia64.c
===================================================================
--- linux.orig/drivers/dump/dump_ia64.c 2005-03-07 18:39:25.852141476 -0800
+++ linux/drivers/dump/dump_ia64.c 2005-03-13 22:39:34.572815788 -0800
@@ -147,7 +147,7 @@
cpumask_t cpu = CPU_MASK_NONE;
cpu_set(smp_processor_id(), cpu);
- memcpy(saved_affinity, irq_affinity, NR_IRQS * sizeof(unsigned long));
+ memcpy(saved_affinity, irq_affinity, sizeof(saved_affinity));
for (i = 0; i < NR_IRQS; i++) {
if (irq_desc[i].handler == NULL)
continue;
@@ -165,7 +165,7 @@
{
int i;
- memcpy(irq_affinity, saved_affinity, NR_IRQS * sizeof(unsigned long));
+ memcpy(irq_affinity, saved_affinity, sizeof(saved_affinity));
for (i = 0; i < NR_IRQS; i++) {
if (irq_desc[i].handler == NULL)
continue;
Index: linux/drivers/dump/dump_x8664.c
===================================================================
--- linux.orig/drivers/dump/dump_x8664.c 2005-03-02 18:48:52.338271063 -0800
+++ linux/drivers/dump/dump_x8664.c 2005-03-16 17:16:13.949162566 -0800
@@ -184,7 +184,7 @@
cpumask_t cpu = CPU_MASK_NONE;
cpu_set(smp_processor_id(), cpu);
- memcpy(saved_affinity, irq_affinity, NR_IRQS * sizeof(unsigned long));
+ memcpy(saved_affinity, irq_affinity, sizeof(saved_affinity));
for (i = 0; i < NR_IRQS; i++) {
if (irq_desc[i].handler == NULL)
continue;
@@ -202,7 +202,7 @@
{
int i;
- memcpy(irq_affinity, saved_affinity, NR_IRQS * sizeof(unsigned long));
+ memcpy(irq_affinity, saved_affinity, sizeof(saved_affinity));
for (i = 0; i < NR_IRQS; i++) {
if (irq_desc[i].handler == NULL)
continue;
Index: linux/drivers/dump/dump_i386.c
===================================================================
--- linux.orig/drivers/dump/dump_i386.c 2005-03-02 18:48:52.311903658 -0800
+++ linux/drivers/dump/dump_i386.c 2005-03-16 17:15:32.996672346 -0800
@@ -198,7 +198,7 @@
cpumask_t cpu = CPU_MASK_NONE;
cpu_set(smp_processor_id(), cpu);
- memcpy(saved_affinity, irq_affinity, NR_IRQS * sizeof(unsigned long));
+ memcpy(saved_affinity, irq_affinity, sizeof(saved_affinity));
for (i = 0; i < NR_IRQS; i++) {
if (irq_desc[i].handler == NULL)
continue;
@@ -216,7 +216,7 @@
{
int i;
- memcpy(irq_affinity, saved_affinity, NR_IRQS * sizeof(unsigned long));
+ memcpy(irq_affinity, saved_affinity, sizeof(saved_affinity));
for (i = 0; i < NR_IRQS; i++) {
if (irq_desc[i].handler == NULL)
continue;
Index: linux/drivers/dump/dump_ppc64.c
===================================================================
--- linux.orig/drivers/dump/dump_ppc64.c 2005-03-02 18:48:52.324599076 -0800
+++ linux/drivers/dump/dump_ppc64.c 2005-03-16 17:17:24.574752077 -0800
@@ -154,7 +154,7 @@
int i;
irq_desc_t *irq_d;
- memcpy(irq_affinity, saved_affinity, NR_IRQS * sizeof(unsigned long));
+ memcpy(irq_affinity, saved_affinity, sizeof(saved_affinity));
for_each_irq(i) {
irq_d = get_irq_desc(i);
@@ -182,7 +182,7 @@
cpu_set(smp_processor_id(), cpu);
- memcpy(saved_affinity, irq_affinity, NR_IRQS * sizeof(unsigned long));
+ memcpy(saved_affinity, irq_affinity, sizeof(saved_affinity));
for_each_irq(i) {
irq_d = get_irq_desc(i);