]>
Commit | Line | Data |
---|---|---|
4d67412c AM |
1 | From ak@suse.de Mon Oct 6 01:11:13 2003 |
2 | Date: 03 Oct 2003 10:24:23 +0200 | |
3 | From: Andi Kleen <ak@suse.de> | |
4 | To: Sylvain Pasche <sylvain_pasche@yahoo.fr> | |
5 | Cc: linux-kernel@vger.kernel.org | |
6 | Subject: Re: 2.4.22 ACPI power off via sysrq not working | |
7 | ||
8 | Sylvain Pasche <sylvain_pasche@yahoo.fr> writes: | |
9 | ||
10 | > Hi, | |
11 | > | |
12 | > If I want to halt the system using sys-rq - o key, I get an oops instead | |
13 | > of a power down. | |
14 | > Inside pm.c:159, there is: | |
15 | > | |
16 | > if (in_interrupt()) | |
17 | > BUG(); | |
18 | > | |
19 | > But if we look at the trace, we are in the interrupt of the keyboard | |
20 | > handler. | |
21 | > One fix would be to comment out the BUG line, but there's certainly "a | |
22 | > better way to do it". | |
23 | ||
24 | Use this patch. | |
25 | ||
26 | diff -u linux/drivers/acpi/system.c-o linux/drivers/acpi/system.c | |
27 | --- linux/drivers/acpi/system.c-o 2003-09-07 16:20:44.000000000 +0200 | |
28 | +++ linux/drivers/acpi/system.c 2003-09-08 21:04:46.000000000 +0200 | |
29 | @@ -1192,11 +1192,21 @@ | |
30 | ||
31 | #if defined(CONFIG_MAGIC_SYSRQ) && defined(CONFIG_PM) | |
32 | ||
33 | +static int po_cb_active; | |
34 | + | |
35 | +static void acpi_po_tramp(void *x) | |
36 | +{ | |
37 | + acpi_power_off(); | |
38 | +} | |
39 | + | |
40 | /* Simple wrapper calling power down function. */ | |
41 | static void acpi_sysrq_power_off(int key, struct pt_regs *pt_regs, | |
42 | struct kbd_struct *kbd, struct tty_struct *tty) | |
43 | -{ | |
44 | - acpi_power_off(); | |
45 | +{ | |
46 | + static struct tq_struct tq = { .routine = acpi_po_tramp }; | |
47 | + if (po_cb_active++) | |
48 | + return; | |
49 | + schedule_task(&tq); | |
50 | } | |
51 | ||
52 | struct sysrq_key_op sysrq_acpi_poweroff_op = { | |
53 | ||
54 | ||
55 | -Andi | |
56 | ||
57 | ||
58 | - | |
59 | To unsubscribe from this list: send the line "unsubscribe linux-kernel" in | |
60 | the body of a message to majordomo@vger.kernel.org | |
61 | More majordomo info at http://vger.kernel.org/majordomo-info.html | |
62 | Please read the FAQ at http://www.tux.org/lkml/ | |
63 | From zzz@anda.ru Tue Oct 7 09:07:20 2003 | |
64 | Date: Fri, 3 Oct 2003 00:50:16 +0600 | |
65 | From: Denis Zaitsev <zzz@anda.ru> | |
66 | To: linux-scsi@vger.kernel.org | |
67 | Cc: linux-kernel@vger.kernel.org, gibbs@scsiguy.com, dledford@redhat.com, | |
68 | marcelo@conectiva.com.br | |
69 | Subject: [PATCH][TRIVIAL] (2.4.22) Allow aic7xxx_osm.c to be compiled | |
70 | without CONFIG_PCI | |
71 | ||
72 | This is the trivial #ifdef patch for CONFIG_PCI/EISA. In my case it | |
73 | allows the Adaptec SCSI driver (the "new" one) to be compiled for | |
74 | non-PCI (EISA) system. Else there are an <undefined symbol> errors. | |
75 | The 2.6 branch needs the same patch, as I understand. | |
76 | ||
77 | Please, apply it. (I don't know who is the maintainer for now!) | |
78 | ||
79 | ||
80 | --- linux-2.4.22.orig/drivers/scsi/aic7xxx/aic7xxx_osm.c Mon Aug 25 05:44:42 2003 | |
81 | +++ linux-2.4.22/drivers/scsi/aic7xxx/aic7xxx_osm.c Mon Oct 6 01:05:04 2003 | |
82 | @@ -1552,6 +1552,7 @@ | |
83 | ||
84 | /* Still equal. Sort by BIOS address, ioport, or bus/slot/func. */ | |
85 | switch (rvalue) { | |
86 | +#ifdef CONFIG_PCI | |
87 | case AHC_PCI: | |
88 | { | |
89 | char primary_channel; | |
90 | @@ -1584,6 +1585,8 @@ | |
91 | value = 1; | |
92 | break; | |
93 | } | |
94 | +#endif | |
95 | +#ifdef CONFIG_EISA | |
96 | case AHC_EISA: | |
97 | if ((rahc->flags & AHC_BIOS_ENABLED) != 0) { | |
98 | value = rahc->platform_data->bios_address | |
99 | @@ -1593,6 +1596,7 @@ | |
100 | - lahc->bsh.ioport; | |
101 | } | |
102 | break; | |
103 | +#endif | |
104 | default: | |
105 | panic("ahc_softc_sort: invalid bus type"); | |
106 | } | |
107 | - | |
108 | To unsubscribe from this list: send the line "unsubscribe linux-kernel" in | |
109 | the body of a message to majordomo@vger.kernel.org | |
110 | More majordomo info at http://vger.kernel.org/majordomo-info.html | |
111 | Please read the FAQ at http://www.tux.org/lkml/ | |
112 | [PATCH] Compile fix for ACPI in 2.4.22/x86-64 | |
113 | ||
114 | Marcelo unfortunately added an last minute ACPI update that changed | |
115 | ACPI interfaces and broke x86-64 compilation. I didn't catch it in | |
116 | time, so 2.4.22 does not compile out of the box for AMD64. | |
117 | ||
118 | This patch fixes it. | |
119 | You'll have to apply it when compiling 2.4.22 for x86-64 | |
120 | ||
121 | -Andi | |
122 | ||
123 | All diffs for ChangeSet 1.1074 | |
124 | ||
125 | diff -Nru a/arch/x86_64/kernel/io_apic.c b/arch/x86_64/kernel/io_apic.c | |
126 | ||
127 | --- a/arch/x86_64/kernel/io_apic.c Tue Jun 24 13:45:14 2003 | |
128 | +++ b/arch/x86_64/kernel/io_apic.c Fri Aug 22 03:38:16 2003 | |
129 | @@ -1762,7 +1762,7 @@ | |
130 | } | |
131 | ||
132 | ||
133 | -int io_apic_set_pci_routing (int ioapic, int pin, int irq) | |
134 | +int io_apic_set_pci_routing (int ioapic, int pin, int irq, int edge_level ,int active_high_low) | |
135 | { | |
136 | struct IO_APIC_route_entry entry; | |
137 | unsigned long flags; | |
138 | @@ -1785,18 +1785,21 @@ | |
139 | entry.dest_mode = INT_DELIVERY_MODE; | |
140 | entry.dest.logical.logical_dest = TARGET_CPUS; | |
141 | entry.mask = 1; /* Disabled (masked) */ | |
142 | - entry.trigger = 1; /* Level sensitive */ | |
143 | - entry.polarity = 1; /* Low active */ | |
144 | + entry.trigger = edge_level; | |
145 | + entry.polarity = active_high_low; | |
146 | ||
147 | add_pin_to_irq(irq, ioapic, pin); | |
148 | ||
149 | entry.vector = assign_irq_vector(irq); | |
150 | ||
151 | printk(KERN_DEBUG "IOAPIC[%d]: Set PCI routing entry (%d-%d -> 0x%x -> " | |
152 | - "IRQ %d)\n", ioapic, | |
153 | - mp_ioapics[ioapic].mpc_apicid, pin, entry.vector, irq); | |
154 | + "IRQ %d) Mode:%i Active:%i\n", ioapic, | |
155 | + mp_ioapics[ioapic].mpc_apicid, pin, entry.vector, irq, edge_level, active_high_low); | |
156 | ||
157 | - irq_desc[irq].handler = &ioapic_level_irq_type; | |
158 | + if (edge_level) | |
159 | + irq_desc[irq].handler = &ioapic_level_irq_type; | |
160 | + else | |
161 | + irq_desc[irq].handler = &ioapic_edge_irq_type; | |
162 | ||
163 | set_intr_gate(entry.vector, interrupt[irq]); | |
164 | ||
165 | diff -Nru a/arch/x86_64/kernel/mpparse.c b/arch/x86_64/kernel/mpparse.c | |
166 | ||
167 | --- a/arch/x86_64/kernel/mpparse.c Tue Jun 24 14:01:06 2003 | |
168 | +++ b/arch/x86_64/kernel/mpparse.c Fri Aug 22 03:29:25 2003 | |
169 | @@ -923,7 +923,7 @@ | |
170 | ||
171 | ioapic_pin = irq - mp_ioapic_routing[ioapic].irq_start; | |
172 | ||
173 | - io_apic_set_pci_routing(ioapic, ioapic_pin, irq); | |
174 | + io_apic_set_pci_routing(ioapic, ioapic_pin, irq, 1, 1); | |
175 | } | |
176 | ||
177 | #endif /*CONFIG_ACPI_HT_ONLY*/ | |
178 | @@ -939,6 +939,8 @@ | |
179 | int ioapic_pin = 0; | |
180 | int irq = 0; | |
181 | int idx, bit = 0; | |
182 | + int edge_level = 0; | |
183 | + int active_high_low = 0; | |
184 | ||
185 | /* | |
186 | * Parsing through the PCI Interrupt Routing Table (PRT) and program | |
187 | @@ -949,11 +951,14 @@ | |
188 | ||
189 | /* Need to get irq for dynamic entry */ | |
190 | if (entry->link.handle) { | |
191 | - irq = acpi_pci_link_get_irq(entry->link.handle, entry->link.index); | |
192 | + irq = acpi_pci_link_get_irq(entry->link.handle, entry->link.index, &edge_level, &active_high_low); | |
193 | if (!irq) | |
194 | continue; | |
195 | - } else | |
196 | + } else { | |
197 | + edge_level = 1; | |
198 | + active_high_low = 1; | |
199 | irq = entry->link.index; | |
200 | + } | |
201 | ||
202 | irq = entry->link.index; | |
203 | ioapic = mp_find_ioapic(irq); | |
204 | @@ -983,7 +988,7 @@ | |
205 | ||
206 | mp_ioapic_routing[ioapic].pin_programmed[idx] |= (1<<bit); | |
207 | ||
208 | - vector = io_apic_set_pci_routing(ioapic, ioapic_pin, irq); | |
209 | + vector = io_apic_set_pci_routing(ioapic, ioapic_pin, irq, edge_level, active_high_low); | |
210 | if (vector) | |
211 | entry->irq = irq; | |
212 | ||
213 | diff -Nru a/include/asm-x86_64/io_apic.h b/include/asm-x86_64/io_apic.h | |
214 | ||
215 | --- a/include/asm-x86_64/io_apic.h Sat Aug 9 13:32:28 2003 | |
216 | +++ b/include/asm-x86_64/io_apic.h Fri Aug 22 03:29:25 2003 | |
217 | @@ -148,6 +148,6 @@ | |
218 | extern int io_apic_get_unique_id (int ioapic, int apic_id); | |
219 | extern int io_apic_get_version (int ioapic); | |
220 | extern int io_apic_get_redir_entries (int ioapic); | |
221 | -extern int io_apic_set_pci_routing (int ioapic, int pin, int irq); | |
222 | +extern int io_apic_set_pci_routing (int ioapic, int pin, int irq, int, int); | |
223 | ||
224 | #endif | |
225 | ||
226 | <http://www.bitkeeper.com> | |
227 | ||
228 | ChangeSet@1.1065.1.36 03-08-25 13:58:04-03:00 willy@ods.org | |
229 | all diffs | |
230 | ||
231 | [PATCH] Fix amd67x_pm.c crash with no chipsets / CONFIG_HOTPLUG | |
232 | ||
233 | amd76x_pm.c will crash if no chipsets are found and CONFIG_HOTPLUG is | |
234 | turned on. This patch makes it return with a failure instead. | |
235 | ||
236 | <patch@1.1065.1.36??nav=index.html|ChangeSet@-3d|cset@1.1065.1.36> | |
237 | ||
238 | diff -Nru a/drivers/char/amd76x_pm.c b/drivers/char/amd76x_pm.c | |
239 | ||
240 | --- a/drivers/char/amd76x_pm.c Mon Aug 25 09:51:20 2003 | |
241 | +++ b/drivers/char/amd76x_pm.c Mon Aug 25 04:22:01 2003 | |
242 | @@ -577,16 +577,18 @@ | |
243 | int found; | |
244 | ||
245 | /* Find northbridge */ | |
246 | - found = pci_module_init(&amd_nb_driver); | |
247 | - if (found < 0) { | |
248 | + found = pci_register_driver(&amd_nb_driver); | |
249 | + if (found <= 0) { | |
250 | printk(KERN_ERR "amd76x_pm: Could not find northbridge\n"); | |
251 | + pci_unregister_driver(&amd_nb_driver); | |
252 | return 1; | |
253 | } | |
254 | ||
255 | /* Find southbridge */ | |
256 | - found = pci_module_init(&amd_sb_driver); | |
257 | - if (found < 0) { | |
258 | + found = pci_register_driver(&amd_sb_driver); | |
259 | + if (found <= 0) { | |
260 | printk(KERN_ERR "amd76x_pm: Could not find southbridge\n"); | |
261 | + pci_unregister_driver(&amd_sb_driver); | |
262 | pci_unregister_driver(&amd_nb_driver); | |
263 | return 1; | |
264 | } | |
265 | @@ -620,6 +622,8 @@ | |
266 | #ifndef AMD76X_NTH | |
267 | if (!amd76x_pm_cfg.curr_idle) { | |
268 | printk(KERN_ERR "amd76x_pm: Idle function not changed\n"); | |
269 | + pci_unregister_driver(&amd_nb_driver); | |
270 | + pci_unregister_driver(&amd_sb_driver); | |
271 | return 1; | |
272 | } | |
273 | ||
274 | ||
275 | <http://www.bitkeeper.com> | |
276 | ||
277 | From chas@cmf.nrl.navy.mil Sat Aug 30 01:03:00 2003 | |
278 | Date: Thu, 28 Aug 2003 16:03:23 -0400 | |
279 | From: chas williams <chas@cmf.nrl.navy.mil> | |
280 | To: Krzysztof Sierota <krzysiek@mediaone.pl> | |
281 | Cc: linux-kernel@vger.kernel.org, linux-atm@vger.rutgers.edu | |
282 | Subject: Re: 2.4.22 oops in ATM 2.4.21 works fine | |
283 | ||
284 | >the 2.4.22 kernel is oopsing at start scripts, machine stays alive, but A= | |
285 | >TM=20 | |
286 | >does not work. 2.4.21 works just fine. | |
287 | ||
288 | try this patch: | |
289 | ||
290 | --- linux-2.4.22/net/atm/common.c.000 Tue Aug 26 10:40:30 2003 | |
291 | +++ linux-2.4.22/net/atm/common.c Tue Aug 26 13:12:35 2003 | |
292 | @@ -672,7 +672,8 @@ | |
293 | } | |
294 | if (try_atm_clip_ops()) { | |
295 | ret_val = atm_clip_ops->clip_create(arg); | |
296 | - __MOD_DEC_USE_COUNT(atm_clip_ops->owner); | |
297 | + if (atm_clip_ops->owner) | |
298 | + __MOD_DEC_USE_COUNT(atm_clip_ops->owner); | |
299 | } else | |
300 | ret_val = -ENOSYS; | |
301 | goto done; | |
302 | @@ -687,7 +688,8 @@ | |
303 | #endif | |
304 | if (try_atm_clip_ops()) { | |
305 | error = atm_clip_ops->atm_init_atmarp(vcc); | |
306 | - __MOD_DEC_USE_COUNT(atm_clip_ops->owner); | |
307 | + if (atm_clip_ops->owner) | |
308 | + __MOD_DEC_USE_COUNT(atm_clip_ops->owner); | |
309 | if (!error) | |
310 | sock->state = SS_CONNECTED; | |
311 | ret_val = error; | |
312 | @@ -701,7 +703,8 @@ | |
313 | } | |
314 | if (try_atm_clip_ops()) { | |
315 | ret_val = atm_clip_ops->clip_mkip(vcc, arg); | |
316 | - __MOD_DEC_USE_COUNT(atm_clip_ops->owner); | |
317 | + if (atm_clip_ops->owner) | |
318 | + __MOD_DEC_USE_COUNT(atm_clip_ops->owner); | |
319 | } else | |
320 | ret_val = -ENOSYS; | |
321 | goto done; | |
322 | @@ -712,7 +715,8 @@ | |
323 | } | |
324 | if (try_atm_clip_ops()) { | |
325 | ret_val = atm_clip_ops->clip_setentry(vcc, arg); | |
326 | - __MOD_DEC_USE_COUNT(atm_clip_ops->owner); | |
327 | + if (atm_clip_ops->owner) | |
328 | + __MOD_DEC_USE_COUNT(atm_clip_ops->owner); | |
329 | } else | |
330 | ret_val = -ENOSYS; | |
331 | goto done; | |
332 | @@ -723,7 +727,8 @@ | |
333 | } | |
334 | if (try_atm_clip_ops()) { | |
335 | ret_val = atm_clip_ops->clip_encap(vcc, arg); | |
336 | - __MOD_DEC_USE_COUNT(atm_clip_ops->owner); | |
337 | + if (atm_clip_ops->owner) | |
338 | + __MOD_DEC_USE_COUNT(atm_clip_ops->owner); | |
339 | } else | |
340 | ret_val = -ENOSYS; | |
341 | goto done; | |
342 | --- linux-2.4.22/net/atm/proc.c.000 Tue Aug 26 13:30:23 2003 | |
343 | +++ linux-2.4.22/net/atm/proc.c Tue Aug 26 13:31:58 2003 | |
344 | @@ -358,7 +358,7 @@ | |
345 | spin_unlock_irqrestore(&dev->lock, flags); | |
346 | spin_unlock(&atm_dev_lock); | |
347 | #if defined(CONFIG_ATM_CLIP) || defined(CONFIG_ATM_CLIP_MODULE) | |
348 | - if (clip_info) | |
349 | + if (clip_info && atm_clip_ops->owner) | |
350 | __MOD_DEC_USE_COUNT(atm_clip_ops->owner); | |
351 | #endif | |
352 | return strlen(buf); | |
353 | @@ -367,8 +367,8 @@ | |
354 | } | |
355 | spin_unlock(&atm_dev_lock); | |
356 | #if defined(CONFIG_ATM_CLIP) || defined(CONFIG_ATM_CLIP_MODULE) | |
357 | - if (clip_info) | |
358 | - __MOD_DEC_USE_COUNT(atm_clip_ops->owner); | |
359 | + if (clip_info && atm_clip_ops->owner) | |
360 | + __MOD_DEC_USE_COUNT(atm_clip_ops->owner); | |
361 | #endif | |
362 | return 0; | |
363 | } | |
364 | @@ -458,7 +458,8 @@ | |
365 | if (--count) continue; | |
366 | atmarp_info(n->dev,entry,NULL,buf); | |
367 | read_unlock_bh(&clip_tbl_hook->lock); | |
368 | - __MOD_DEC_USE_COUNT(atm_clip_ops->owner); | |
369 | + if (atm_clip_ops->owner) | |
370 | + __MOD_DEC_USE_COUNT(atm_clip_ops->owner); | |
371 | return strlen(buf); | |
372 | } | |
373 | for (vcc = entry->vccs; vcc; | |
374 | @@ -466,12 +467,14 @@ | |
375 | if (--count) continue; | |
376 | atmarp_info(n->dev,entry,vcc,buf); | |
377 | read_unlock_bh(&clip_tbl_hook->lock); | |
378 | - __MOD_DEC_USE_COUNT(atm_clip_ops->owner); | |
379 | + if (atm_clip_ops->owner) | |
380 | + __MOD_DEC_USE_COUNT(atm_clip_ops->owner); | |
381 | return strlen(buf); | |
382 | } | |
383 | } | |
384 | read_unlock_bh(&clip_tbl_hook->lock); | |
385 | - __MOD_DEC_USE_COUNT(atm_clip_ops->owner); | |
386 | + if (atm_clip_ops->owner) | |
387 | + __MOD_DEC_USE_COUNT(atm_clip_ops->owner); | |
388 | return 0; | |
389 | } | |
390 | #endif | |
391 | - | |
392 | To unsubscribe from this list: send the line "unsubscribe linux-kernel" in | |
393 | the body of a message to majordomo@vger.kernel.org | |
394 | More majordomo info at http://vger.kernel.org/majordomo-info.html | |
395 | Please read the FAQ at http://www.tux.org/lkml/ | |
396 | From linux-kernel@vger.kernel.org Wed Aug 27 15:59:09 2003 | |
397 | Date: Wed, 27 Aug 2003 14:07:03 +0000 | |
398 | From: Linux Kernel Mailing List <linux-kernel@vger.kernel.org> | |
399 | To: bk-commits-24@vger.kernel.org | |
400 | Subject: Fix possible IRQ handling SMP race: Kudos to TeJun Huh | |
401 | ||
402 | ChangeSet 1.1084, 2003/08/27 11:07:03-03:00, marcelo@logos.cnet | |
403 | ||
404 | Fix possible IRQ handling SMP race: Kudos to TeJun Huh | |
405 | ||
406 | ||
407 | # This patch includes the following deltas: | |
408 | # ChangeSet 1.1083 -> 1.1084 | |
409 | # include/asm-i386/hardirq.h 1.4 -> 1.5 | |
410 | # | |
411 | ||
412 | hardirq.h | 2 ++ | |
413 | 1 files changed, 2 insertions(+) | |
414 | ||
415 | ||
416 | diff -Nru a/include/asm-i386/hardirq.h b/include/asm-i386/hardirq.h | |
417 | --- a/include/asm-i386/hardirq.h Wed Aug 27 08:02:39 2003 | |
418 | +++ b/include/asm-i386/hardirq.h Wed Aug 27 08:02:39 2003 | |
419 | @@ -67,6 +67,8 @@ | |
420 | { | |
421 | ++local_irq_count(cpu); | |
422 | ||
423 | + smp_mb(); | |
424 | + | |
425 | while (test_bit(0,&global_irq_lock)) { | |
426 | cpu_relax(); | |
427 | } | |
428 | - | |
429 | To unsubscribe from this list: send the line "unsubscribe bk-commits-24" in | |
430 | the body of a message to majordomo@vger.kernel.org | |
431 | More majordomo info at http://vger.kernel.org/majordomo-info.html | |
432 | [PATCH] Fix initrd with netboot | |
433 | ||
434 | From "Martin Persson" | |
435 | ||
436 | we've encountered a problem when trying to netboot 2.4.21 and above. After | |
437 | /linuxrc has been executed and the kernel tries to remount the root, it | |
438 | panics with the all too well known message "Unable to mount root fs on ...". | |
439 | ||
440 | The kernel bugs out in mount_block_root in the file init/do_mounts.c, to be | |
441 | more precise in the for-loop. What happens is that it tries to mount the | |
442 | file system as type ext2 (which happens to be first in the list in our | |
443 | case), but instead of returning -EINVAL it returns -EBUSY, the loop exits | |
444 | instead of trying the next (correct) fs-type and the kernel panics. | |
445 | ||
446 | In -wolk for some time and maybe others. | |
447 | ||
448 | All diffs for ChangeSet 1.1065.1.42 | |
449 | ||
450 | diff -Nru a/init/do_mounts.c b/init/do_mounts.c | |
451 | ||
452 | --- a/init/do_mounts.c Mon Jul 21 13:13:12 2003 | |
453 | +++ b/init/do_mounts.c Thu Jul 10 06:46:36 2003 | |
454 | @@ -360,6 +360,7 @@ | |
455 | flags |= MS_RDONLY; | |
456 | goto retry; | |
457 | case -EINVAL: | |
458 | + case -EBUSY: | |
459 | continue; | |
460 | } | |
461 | /* | |
462 | ||
463 | <http://www.bitkeeper.com> | |
464 | ||
465 | pcwd.c: fix oops on unload | |
466 | ||
467 | From Arkadiusz Miskiewicz <arekm@pld-linux.org> | |
468 | ||
469 | This patch is from Alan Cox and fixes problems when pcwd driver is loaded | |
470 | while there is no pcwd hardware installed. | |
471 | No idea why it was not feeded to you. | |
472 | Problem is described here | |
473 | http://www.ussg.iu.edu/hypermail/linux/kernel/0308.1/0178.html and tracked | |
474 | down in private conversation with Cox. | |
475 | ||
476 | ||
477 | <patch@1.1065.1.38??nav=index.html|ChangeSet@-3d|cset@1.1065.1.38> | |
478 | ||
479 | diff -Nru a/drivers/char/pcwd.c b/drivers/char/pcwd.c | |
480 | ||
481 | --- a/drivers/char/pcwd.c Sun Sep 29 12:29:59 2002 | |
482 | +++ b/drivers/char/pcwd.c Mon Aug 25 10:20:56 2003 | |
483 | @@ -933,8 +933,7 @@ | |
484 | ||
485 | release_region (pcwd_info.io_addr, pcwd_info.card_info->io_size); | |
486 | ||
487 | - if (pcwd_info.flags & PCWD_PCI_REG) | |
488 | - pci_unregister_driver (&pcwd_driver); | |
489 | + pci_unregister_driver (&pcwd_driver); | |
490 | ||
491 | return; | |
492 | } | |
493 | ||
494 | <http://www.bitkeeper.com> | |
495 | ||
496 | From greg@kroah.com Tue Sep 16 23:06:43 2003 | |
497 | Date: Fri, 5 Sep 2003 08:24:36 -0700 | |
498 | From: Greg KH <greg@kroah.com> | |
499 | To: Ingo Oeser <ingo@oeser-vu.de> | |
500 | Cc: linux-kernel@vger.kernel.org | |
501 | Subject: Re: [OOPS] 2.4.22, USB visor module crashing on HotSync. | |
502 | ||
503 | On Fri, Sep 05, 2003 at 01:30:22PM +0200, Ingo Oeser wrote: | |
504 | > Hi Greg, | |
505 | > | |
506 | > there seems to be a problem with the visor module and usb_serial. | |
507 | > | |
508 | > Please look at __serial_close() and usb_disconnect() calling it | |
509 | > in line 1406 vs. line 1408. I would suggest removing 1408 or | |
510 | > folding it into __serial_close(). | |
511 | > | |
512 | > Formal Bug-Reporting follows: | |
513 | > | |
514 | > [1.] One line summary of the problem: | |
515 | > | |
516 | > USB visor module and usb_serial crashing on HotSync in usb_disconnect | |
517 | > | |
518 | > [2.] Full description of the problem/report: | |
519 | > | |
520 | > usb_disconnect calls __serial_close() which sets the tty = NULL | |
521 | > and afterwards trys to set tty->private_data = NULL | |
522 | > which will crash | |
523 | ||
524 | Nice, someone else reported this yesterday for the ftdi_sio driver. | |
525 | ||
526 | Can you test the patch below and let me know if this fixes it? | |
527 | ||
528 | thanks, | |
529 | ||
530 | greg k-h | |
531 | ||
532 | ||
533 | --- a/drivers/usb/serial/usbserial.c Sat Aug 30 23:27:18 2003 | |
534 | +++ b/drivers/usb/serial/usbserial.c Thu Sep 4 13:48:45 2003 | |
535 | @@ -556,7 +556,10 @@ | |
536 | else | |
537 | generic_close(port, filp); | |
538 | port->open_count = 0; | |
539 | - port->tty = NULL; | |
540 | + if (port->tty) { | |
541 | + port->tty->driver_data = NULL; | |
542 | + port->tty = NULL; | |
543 | + } | |
544 | } | |
545 | ||
546 | if (port->serial->type->owner) | |
547 | @@ -1401,12 +1404,9 @@ | |
548 | for (i = 0; i < serial->num_ports; ++i) { | |
549 | port = &serial->port[i]; | |
550 | down (&port->sem); | |
551 | - if (port->tty != NULL) { | |
552 | - while (port->open_count > 0) { | |
553 | + if (port->tty != NULL) | |
554 | + while (port->open_count > 0) | |
555 | __serial_close(port, NULL); | |
556 | - } | |
557 | - port->tty->driver_data = NULL; | |
558 | - } | |
559 | up (&port->sem); | |
560 | } | |
561 | ||
562 | - | |
563 | To unsubscribe from this list: send the line "unsubscribe linux-kernel" in | |
564 | the body of a message to majordomo@vger.kernel.org | |
565 | More majordomo info at http://vger.kernel.org/majordomo-info.html | |
566 | Please read the FAQ at http://www.tux.org/lkml/ |