Magellan Linux

Annotation of /trunk/kernel26-alx/patches-2.6.27-r3/0104-2.6.27.5-all-fixes.patch

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1176 - (hide annotations) (download)
Thu Oct 14 15:11:06 2010 UTC (13 years, 7 months ago) by niro
File size: 82542 byte(s)
-2.6.27-alx-r3: new magellan 0.5.2 kernel
1 niro 1176 diff --git a/Documentation/i2c/busses/i2c-sis96x b/Documentation/i2c/busses/i2c-sis96x
2     index 266481f..70e6a0c 100644
3     --- a/Documentation/i2c/busses/i2c-sis96x
4     +++ b/Documentation/i2c/busses/i2c-sis96x
5     @@ -42,7 +42,7 @@ I suspect that this driver could be made to work for the following SiS
6     chipsets as well: 635, and 635T. If anyone owns a board with those chips
7     AND is willing to risk crashing & burning an otherwise well-behaved kernel
8     in the name of progress... please contact me at <mhoffman@lightlink.com> or
9     -via the project's mailing list: <i2c@lm-sensors.org>. Please send bug
10     +via the linux-i2c mailing list: <linux-i2c@vger.kernel.org>. Please send bug
11     reports and/or success stories as well.
12    
13    
14     diff --git a/MAINTAINERS b/MAINTAINERS
15     index 8dae455..ff24d01 100644
16     --- a/MAINTAINERS
17     +++ b/MAINTAINERS
18     @@ -360,7 +360,7 @@ S: Maintained
19     ALI1563 I2C DRIVER
20     P: Rudolf Marek
21     M: r.marek@assembler.cz
22     -L: i2c@lm-sensors.org
23     +L: linux-i2c@vger.kernel.org
24     S: Maintained
25    
26     ALPHA PORT
27     @@ -1681,7 +1681,7 @@ FREESCALE I2C CPM DRIVER
28     P: Jochen Friedrich
29     M: jochen@scram.de
30     L: linuxppc-dev@ozlabs.org
31     -L: i2c@lm-sensors.org
32     +L: linux-i2c@vger.kernel.org
33     S: Maintained
34    
35     FREESCALE SOC FS_ENET DRIVER
36     @@ -1982,7 +1982,7 @@ S: Maintained
37     I2C/SMBUS STUB DRIVER
38     P: Mark M. Hoffman
39     M: mhoffman@lightlink.com
40     -L: i2c@lm-sensors.org
41     +L: linux-i2c@vger.kernel.org
42     S: Maintained
43    
44     I2C SUBSYSTEM
45     @@ -1990,14 +1990,14 @@ P: Jean Delvare (PC drivers, core)
46     M: khali@linux-fr.org
47     P: Ben Dooks (embedded platforms)
48     M: ben-linux@fluff.org
49     -L: i2c@lm-sensors.org
50     +L: linux-i2c@vger.kernel.org
51     T: quilt http://khali.linux-fr.org/devel/linux-2.6/jdelvare-i2c/
52     S: Maintained
53    
54     I2C-TINY-USB DRIVER
55     P: Till Harbaum
56     M: till@harbaum.org
57     -L: i2c@lm-sensors.org
58     +L: linux-i2c@vger.kernel.org
59     T: http://www.harbaum.org/till/i2c_tiny_usb
60     S: Maintained
61    
62     @@ -3070,7 +3070,7 @@ S: Maintained
63     OPENCORES I2C BUS DRIVER
64     P: Peter Korsgaard
65     M: jacmet@sunsite.dk
66     -L: i2c@lm-sensors.org
67     +L: linux-i2c@vger.kernel.org
68     S: Maintained
69    
70     ORACLE CLUSTER FILESYSTEM 2 (OCFS2)
71     @@ -3144,7 +3144,7 @@ S: Maintained
72     PA SEMI SMBUS DRIVER
73     P: Olof Johansson
74     M: olof@lixom.net
75     -L: i2c@lm-sensors.org
76     +L: linux-i2c@vger.kernel.org
77     S: Maintained
78    
79     PARALLEL PORT SUPPORT
80     @@ -3280,7 +3280,7 @@ S: Maintained
81     PNXxxxx I2C DRIVER
82     P: Vitaly Wool
83     M: vitalywool@gmail.com
84     -L: i2c@lm-sensors.org
85     +L: linux-i2c@vger.kernel.org
86     S: Maintained
87    
88     PPP PROTOCOL DRIVERS AND COMPRESSORS
89     @@ -3725,7 +3725,7 @@ S: Maintained
90     SIS 96X I2C/SMBUS DRIVER
91     P: Mark M. Hoffman
92     M: mhoffman@lightlink.com
93     -L: i2c@lm-sensors.org
94     +L: linux-i2c@vger.kernel.org
95     S: Maintained
96    
97     SIS FRAMEBUFFER DRIVER
98     @@ -4445,7 +4445,7 @@ S: Maintained
99     VIAPRO SMBUS DRIVER
100     P: Jean Delvare
101     M: khali@linux-fr.org
102     -L: i2c@lm-sensors.org
103     +L: linux-i2c@vger.kernel.org
104     S: Maintained
105    
106     VIA VELOCITY NETWORK DRIVER
107     diff --git a/arch/powerpc/configs/linkstation_defconfig b/arch/powerpc/configs/linkstation_defconfig
108     index 6fc4c21..d0846ec 100644
109     --- a/arch/powerpc/configs/linkstation_defconfig
110     +++ b/arch/powerpc/configs/linkstation_defconfig
111     @@ -1,7 +1,7 @@
112     #
113     # Automatically generated make config: don't edit
114     -# Linux kernel version: 2.6.27-rc4
115     -# Thu Aug 21 00:52:05 2008
116     +# Linux kernel version: 2.6.27
117     +# Fri Oct 24 00:42:39 2008
118     #
119     # CONFIG_PPC64 is not set
120    
121     @@ -934,7 +934,7 @@ CONFIG_SERIAL_8250_RUNTIME_UARTS=4
122     CONFIG_SERIAL_CORE=y
123     CONFIG_SERIAL_CORE_CONSOLE=y
124     # CONFIG_SERIAL_JSM is not set
125     -CONFIG_SERIAL_OF_PLATFORM=y
126     +# CONFIG_SERIAL_OF_PLATFORM is not set
127     CONFIG_UNIX98_PTYS=y
128     CONFIG_LEGACY_PTYS=y
129     CONFIG_LEGACY_PTY_COUNT=256
130     @@ -1211,7 +1211,6 @@ CONFIG_USB_STORAGE=m
131     # CONFIG_USB_STORAGE_ALAUDA is not set
132     # CONFIG_USB_STORAGE_ONETOUCH is not set
133     # CONFIG_USB_STORAGE_KARMA is not set
134     -# CONFIG_USB_STORAGE_SIERRA is not set
135     # CONFIG_USB_STORAGE_CYPRESS_ATACB is not set
136     # CONFIG_USB_LIBUSUAL is not set
137    
138     diff --git a/arch/powerpc/mm/hash_utils_64.c b/arch/powerpc/mm/hash_utils_64.c
139     index 8920eea..16319a5 100644
140     --- a/arch/powerpc/mm/hash_utils_64.c
141     +++ b/arch/powerpc/mm/hash_utils_64.c
142     @@ -381,8 +381,10 @@ static int __init htab_dt_scan_hugepage_blocks(unsigned long node,
143     printk(KERN_INFO "Huge page(16GB) memory: "
144     "addr = 0x%lX size = 0x%lX pages = %d\n",
145     phys_addr, block_size, expected_pages);
146     - lmb_reserve(phys_addr, block_size * expected_pages);
147     - add_gpage(phys_addr, block_size, expected_pages);
148     + if (phys_addr + (16 * GB) <= lmb_end_of_DRAM()) {
149     + lmb_reserve(phys_addr, block_size * expected_pages);
150     + add_gpage(phys_addr, block_size, expected_pages);
151     + }
152     return 0;
153     }
154    
155     diff --git a/arch/powerpc/mm/numa.c b/arch/powerpc/mm/numa.c
156     index d9a1813..b5ae97e 100644
157     --- a/arch/powerpc/mm/numa.c
158     +++ b/arch/powerpc/mm/numa.c
159     @@ -89,6 +89,48 @@ static int __cpuinit fake_numa_create_new_node(unsigned long end_pfn,
160     return 0;
161     }
162    
163     +/*
164     + * get_active_region_work_fn - A helper function for get_node_active_region
165     + * Returns datax set to the start_pfn and end_pfn if they contain
166     + * the initial value of datax->start_pfn between them
167     + * @start_pfn: start page(inclusive) of region to check
168     + * @end_pfn: end page(exclusive) of region to check
169     + * @datax: comes in with ->start_pfn set to value to search for and
170     + * goes out with active range if it contains it
171     + * Returns 1 if search value is in range else 0
172     + */
173     +static int __init get_active_region_work_fn(unsigned long start_pfn,
174     + unsigned long end_pfn, void *datax)
175     +{
176     + struct node_active_region *data;
177     + data = (struct node_active_region *)datax;
178     +
179     + if (start_pfn <= data->start_pfn && end_pfn > data->start_pfn) {
180     + data->start_pfn = start_pfn;
181     + data->end_pfn = end_pfn;
182     + return 1;
183     + }
184     + return 0;
185     +
186     +}
187     +
188     +/*
189     + * get_node_active_region - Return active region containing start_pfn
190     + * Active range returned is empty if none found.
191     + * @start_pfn: The page to return the region for.
192     + * @node_ar: Returned set to the active region containing start_pfn
193     + */
194     +static void __init get_node_active_region(unsigned long start_pfn,
195     + struct node_active_region *node_ar)
196     +{
197     + int nid = early_pfn_to_nid(start_pfn);
198     +
199     + node_ar->nid = nid;
200     + node_ar->start_pfn = start_pfn;
201     + node_ar->end_pfn = start_pfn;
202     + work_with_active_regions(nid, get_active_region_work_fn, node_ar);
203     +}
204     +
205     static void __cpuinit map_cpu_to_node(int cpu, int node)
206     {
207     numa_cpu_lookup_table[cpu] = node;
208     @@ -837,38 +879,53 @@ void __init do_init_bootmem(void)
209     start_pfn, end_pfn);
210    
211     free_bootmem_with_active_regions(nid, end_pfn);
212     + }
213    
214     - /* Mark reserved regions on this node */
215     - for (i = 0; i < lmb.reserved.cnt; i++) {
216     - unsigned long physbase = lmb.reserved.region[i].base;
217     - unsigned long size = lmb.reserved.region[i].size;
218     - unsigned long start_paddr = start_pfn << PAGE_SHIFT;
219     - unsigned long end_paddr = end_pfn << PAGE_SHIFT;
220     -
221     - if (early_pfn_to_nid(physbase >> PAGE_SHIFT) != nid &&
222     - early_pfn_to_nid((physbase+size-1) >> PAGE_SHIFT) != nid)
223     - continue;
224     -
225     - if (physbase < end_paddr &&
226     - (physbase+size) > start_paddr) {
227     - /* overlaps */
228     - if (physbase < start_paddr) {
229     - size -= start_paddr - physbase;
230     - physbase = start_paddr;
231     - }
232     -
233     - if (size > end_paddr - physbase)
234     - size = end_paddr - physbase;
235     -
236     - dbg("reserve_bootmem %lx %lx\n", physbase,
237     - size);
238     - reserve_bootmem_node(NODE_DATA(nid), physbase,
239     - size, BOOTMEM_DEFAULT);
240     - }
241     + /* Mark reserved regions */
242     + for (i = 0; i < lmb.reserved.cnt; i++) {
243     + unsigned long physbase = lmb.reserved.region[i].base;
244     + unsigned long size = lmb.reserved.region[i].size;
245     + unsigned long start_pfn = physbase >> PAGE_SHIFT;
246     + unsigned long end_pfn = ((physbase + size) >> PAGE_SHIFT);
247     + struct node_active_region node_ar;
248     +
249     + get_node_active_region(start_pfn, &node_ar);
250     + while (start_pfn < end_pfn &&
251     + node_ar.start_pfn < node_ar.end_pfn) {
252     + unsigned long reserve_size = size;
253     + /*
254     + * if reserved region extends past active region
255     + * then trim size to active region
256     + */
257     + if (end_pfn > node_ar.end_pfn)
258     + reserve_size = (node_ar.end_pfn << PAGE_SHIFT)
259     + - (start_pfn << PAGE_SHIFT);
260     + dbg("reserve_bootmem %lx %lx nid=%d\n", physbase,
261     + reserve_size, node_ar.nid);
262     + reserve_bootmem_node(NODE_DATA(node_ar.nid), physbase,
263     + reserve_size, BOOTMEM_DEFAULT);
264     + /*
265     + * if reserved region is contained in the active region
266     + * then done.
267     + */
268     + if (end_pfn <= node_ar.end_pfn)
269     + break;
270     +
271     + /*
272     + * reserved region extends past the active region
273     + * get next active region that contains this
274     + * reserved region
275     + */
276     + start_pfn = node_ar.end_pfn;
277     + physbase = start_pfn << PAGE_SHIFT;
278     + size = size - reserve_size;
279     + get_node_active_region(start_pfn, &node_ar);
280     }
281    
282     - sparse_memory_present_with_active_regions(nid);
283     }
284     +
285     + for_each_online_node(nid)
286     + sparse_memory_present_with_active_regions(nid);
287     }
288    
289     void __init paging_init(void)
290     diff --git a/arch/powerpc/platforms/embedded6xx/linkstation.c b/arch/powerpc/platforms/embedded6xx/linkstation.c
291     index eb5d74e..2ca7be6 100644
292     --- a/arch/powerpc/platforms/embedded6xx/linkstation.c
293     +++ b/arch/powerpc/platforms/embedded6xx/linkstation.c
294     @@ -13,6 +13,7 @@
295     #include <linux/kernel.h>
296     #include <linux/initrd.h>
297     #include <linux/mtd/physmap.h>
298     +#include <linux/of_platform.h>
299    
300     #include <asm/time.h>
301     #include <asm/prom.h>
302     @@ -54,6 +55,19 @@ static struct mtd_partition linkstation_physmap_partitions[] = {
303     },
304     };
305    
306     +static __initdata struct of_device_id of_bus_ids[] = {
307     + { .type = "soc", },
308     + { .compatible = "simple-bus", },
309     + {},
310     +};
311     +
312     +static int __init declare_of_platform_devices(void)
313     +{
314     + of_platform_bus_probe(NULL, of_bus_ids, NULL);
315     + return 0;
316     +}
317     +machine_device_initcall(linkstation, declare_of_platform_devices);
318     +
319     static int __init linkstation_add_bridge(struct device_node *dev)
320     {
321     #ifdef CONFIG_PCI
322     diff --git a/arch/s390/kernel/smp.c b/arch/s390/kernel/smp.c
323     index 00b9b4d..fdfca4f 100644
324     --- a/arch/s390/kernel/smp.c
325     +++ b/arch/s390/kernel/smp.c
326     @@ -1117,9 +1117,7 @@ out:
327     return rc;
328     }
329    
330     -static ssize_t __ref rescan_store(struct sys_device *dev,
331     - struct sysdev_attribute *attr,
332     - const char *buf,
333     +static ssize_t __ref rescan_store(struct sysdev_class *class, const char *buf,
334     size_t count)
335     {
336     int rc;
337     @@ -1127,12 +1125,10 @@ static ssize_t __ref rescan_store(struct sys_device *dev,
338     rc = smp_rescan_cpus();
339     return rc ? rc : count;
340     }
341     -static SYSDEV_ATTR(rescan, 0200, NULL, rescan_store);
342     +static SYSDEV_CLASS_ATTR(rescan, 0200, NULL, rescan_store);
343     #endif /* CONFIG_HOTPLUG_CPU */
344    
345     -static ssize_t dispatching_show(struct sys_device *dev,
346     - struct sysdev_attribute *attr,
347     - char *buf)
348     +static ssize_t dispatching_show(struct sysdev_class *class, char *buf)
349     {
350     ssize_t count;
351    
352     @@ -1142,9 +1138,8 @@ static ssize_t dispatching_show(struct sys_device *dev,
353     return count;
354     }
355    
356     -static ssize_t dispatching_store(struct sys_device *dev,
357     - struct sysdev_attribute *attr,
358     - const char *buf, size_t count)
359     +static ssize_t dispatching_store(struct sysdev_class *dev, const char *buf,
360     + size_t count)
361     {
362     int val, rc;
363     char delim;
364     @@ -1166,7 +1161,8 @@ out:
365     put_online_cpus();
366     return rc ? rc : count;
367     }
368     -static SYSDEV_ATTR(dispatching, 0644, dispatching_show, dispatching_store);
369     +static SYSDEV_CLASS_ATTR(dispatching, 0644, dispatching_show,
370     + dispatching_store);
371    
372     static int __init topology_init(void)
373     {
374     @@ -1176,13 +1172,11 @@ static int __init topology_init(void)
375     register_cpu_notifier(&smp_cpu_nb);
376    
377     #ifdef CONFIG_HOTPLUG_CPU
378     - rc = sysfs_create_file(&cpu_sysdev_class.kset.kobj,
379     - &attr_rescan.attr);
380     + rc = sysdev_class_create_file(&cpu_sysdev_class, &attr_rescan);
381     if (rc)
382     return rc;
383     #endif
384     - rc = sysfs_create_file(&cpu_sysdev_class.kset.kobj,
385     - &attr_dispatching.attr);
386     + rc = sysdev_class_create_file(&cpu_sysdev_class, &attr_dispatching);
387     if (rc)
388     return rc;
389     for_each_present_cpu(cpu) {
390     diff --git a/arch/sparc64/kernel/trampoline.S b/arch/sparc64/kernel/trampoline.S
391     index 704a3af..83abd5a 100644
392     --- a/arch/sparc64/kernel/trampoline.S
393     +++ b/arch/sparc64/kernel/trampoline.S
394     @@ -328,6 +328,12 @@ after_lock_tlb:
395    
396     wrpr %g0, 0, %wstate
397    
398     + sethi %hi(prom_entry_lock), %g2
399     +1: ldstub [%g2 + %lo(prom_entry_lock)], %g1
400     + membar #StoreLoad | #StoreStore
401     + brnz,pn %g1, 1b
402     + nop
403     +
404     /* As a hack, put &init_thread_union into %g6.
405     * prom_world() loads from here to restore the %asi
406     * register.
407     @@ -337,7 +343,7 @@ after_lock_tlb:
408    
409     sethi %hi(is_sun4v), %o0
410     lduw [%o0 + %lo(is_sun4v)], %o0
411     - brz,pt %o0, 1f
412     + brz,pt %o0, 2f
413     nop
414    
415     TRAP_LOAD_TRAP_BLOCK(%g2, %g3)
416     @@ -369,10 +375,10 @@ after_lock_tlb:
417     call %o1
418     add %sp, (2047 + 128), %o0
419    
420     - ba,pt %xcc, 2f
421     + ba,pt %xcc, 3f
422     nop
423    
424     -1: sethi %hi(sparc64_ttable_tl0), %o0
425     +2: sethi %hi(sparc64_ttable_tl0), %o0
426     set prom_set_trap_table_name, %g2
427     stx %g2, [%sp + 2047 + 128 + 0x00]
428     mov 1, %g2
429     @@ -386,7 +392,11 @@ after_lock_tlb:
430     call %o1
431     add %sp, (2047 + 128), %o0
432    
433     -2: ldx [%l0], %g6
434     +3: sethi %hi(prom_entry_lock), %g2
435     + stb %g0, [%g2 + %lo(prom_entry_lock)]
436     + membar #StoreStore | #StoreLoad
437     +
438     + ldx [%l0], %g6
439     ldx [%g6 + TI_TASK], %g4
440    
441     mov 1, %g5
442     diff --git a/arch/x86/kernel/process_64.c b/arch/x86/kernel/process_64.c
443     index e12e0e4..5a7c539 100644
444     --- a/arch/x86/kernel/process_64.c
445     +++ b/arch/x86/kernel/process_64.c
446     @@ -729,12 +729,12 @@ unsigned long get_wchan(struct task_struct *p)
447     if (!p || p == current || p->state==TASK_RUNNING)
448     return 0;
449     stack = (unsigned long)task_stack_page(p);
450     - if (p->thread.sp < stack || p->thread.sp > stack+THREAD_SIZE)
451     + if (p->thread.sp < stack || p->thread.sp >= stack+THREAD_SIZE)
452     return 0;
453     fp = *(u64 *)(p->thread.sp);
454     do {
455     if (fp < (unsigned long)stack ||
456     - fp > (unsigned long)stack+THREAD_SIZE)
457     + fp >= (unsigned long)stack+THREAD_SIZE)
458     return 0;
459     ip = *(u64 *)(fp+8);
460     if (!in_sched_functions(ip))
461     diff --git a/arch/x86/kernel/rtc.c b/arch/x86/kernel/rtc.c
462     index 05191bb..0a23b57 100644
463     --- a/arch/x86/kernel/rtc.c
464     +++ b/arch/x86/kernel/rtc.c
465     @@ -223,11 +223,25 @@ static struct platform_device rtc_device = {
466     static __init int add_rtc_cmos(void)
467     {
468     #ifdef CONFIG_PNP
469     - if (!pnp_platform_devices)
470     - platform_device_register(&rtc_device);
471     -#else
472     + static const char *ids[] __initconst =
473     + { "PNP0b00", "PNP0b01", "PNP0b02", };
474     + struct pnp_dev *dev;
475     + struct pnp_id *id;
476     + int i;
477     +
478     + pnp_for_each_dev(dev) {
479     + for (id = dev->id; id; id = id->next) {
480     + for (i = 0; i < ARRAY_SIZE(ids); i++) {
481     + if (compare_pnp_id(id, ids[i]) != 0)
482     + return 0;
483     + }
484     + }
485     + }
486     +#endif
487     +
488     platform_device_register(&rtc_device);
489     -#endif /* CONFIG_PNP */
490     + dev_info(&rtc_device.dev,
491     + "registered platform RTC device (no PNP device found)\n");
492     return 0;
493     }
494     device_initcall(add_rtc_cmos);
495     diff --git a/arch/x86/mm/pat.c b/arch/x86/mm/pat.c
496     index 2a50e0f..ac144c2 100644
497     --- a/arch/x86/mm/pat.c
498     +++ b/arch/x86/mm/pat.c
499     @@ -403,12 +403,16 @@ static inline int range_is_allowed(unsigned long pfn, unsigned long size)
500     return 1;
501     }
502     #else
503     +/* This check is needed to avoid cache aliasing when PAT is enabled */
504     static inline int range_is_allowed(unsigned long pfn, unsigned long size)
505     {
506     u64 from = ((u64)pfn) << PAGE_SHIFT;
507     u64 to = from + size;
508     u64 cursor = from;
509    
510     + if (!pat_enabled)
511     + return 1;
512     +
513     while (cursor < to) {
514     if (!devmem_is_allowed(pfn)) {
515     printk(KERN_INFO
516     diff --git a/drivers/acpi/button.c b/drivers/acpi/button.c
517     index 1dfec41..59352d9 100644
518     --- a/drivers/acpi/button.c
519     +++ b/drivers/acpi/button.c
520     @@ -262,6 +262,7 @@ static int acpi_lid_send_state(struct acpi_button *button)
521     return -ENODEV;
522     /* input layer checks if event is redundant */
523     input_report_switch(button->input, SW_LID, !state);
524     + input_sync(button->input);
525     return 0;
526     }
527    
528     @@ -285,8 +286,8 @@ static void acpi_button_notify(acpi_handle handle, u32 event, void *data)
529     input_report_key(input, keycode, 1);
530     input_sync(input);
531     input_report_key(input, keycode, 0);
532     + input_sync(input);
533     }
534     - input_sync(input);
535    
536     acpi_bus_generate_proc_event(button->device, event,
537     ++button->pushed);
538     diff --git a/drivers/acpi/ec.c b/drivers/acpi/ec.c
539     index 13593f9..444cd9e 100644
540     --- a/drivers/acpi/ec.c
541     +++ b/drivers/acpi/ec.c
542     @@ -1,7 +1,7 @@
543     /*
544     - * ec.c - ACPI Embedded Controller Driver (v2.0)
545     + * ec.c - ACPI Embedded Controller Driver (v2.1)
546     *
547     - * Copyright (C) 2006, 2007 Alexey Starikovskiy <alexey.y.starikovskiy@intel.com>
548     + * Copyright (C) 2006-2008 Alexey Starikovskiy <astarikovskiy@suse.de>
549     * Copyright (C) 2006 Denis Sadykov <denis.m.sadykov@intel.com>
550     * Copyright (C) 2004 Luming Yu <luming.yu@intel.com>
551     * Copyright (C) 2001, 2002 Andy Grover <andrew.grover@intel.com>
552     @@ -26,7 +26,7 @@
553     * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
554     */
555    
556     -/* Uncomment next line to get verbose print outs*/
557     +/* Uncomment next line to get verbose printout */
558     /* #define DEBUG */
559    
560     #include <linux/kernel.h>
561     @@ -38,6 +38,7 @@
562     #include <linux/seq_file.h>
563     #include <linux/interrupt.h>
564     #include <linux/list.h>
565     +#include <linux/spinlock.h>
566     #include <asm/io.h>
567     #include <acpi/acpi_bus.h>
568     #include <acpi/acpi_drivers.h>
569     @@ -65,22 +66,21 @@ enum ec_command {
570     ACPI_EC_COMMAND_QUERY = 0x84,
571     };
572    
573     -/* EC events */
574     -enum ec_event {
575     - ACPI_EC_EVENT_OBF_1 = 1, /* Output buffer full */
576     - ACPI_EC_EVENT_IBF_0, /* Input buffer empty */
577     -};
578     -
579     #define ACPI_EC_DELAY 500 /* Wait 500ms max. during EC ops */
580     #define ACPI_EC_UDELAY_GLK 1000 /* Wait 1ms max. to get global lock */
581     #define ACPI_EC_UDELAY 100 /* Wait 100us before polling EC again */
582    
583     +#define ACPI_EC_STORM_THRESHOLD 20 /* number of false interrupts
584     + per one transaction */
585     +
586     enum {
587     - EC_FLAGS_WAIT_GPE = 0, /* Don't check status until GPE arrives */
588     EC_FLAGS_QUERY_PENDING, /* Query is pending */
589     - EC_FLAGS_GPE_MODE, /* Expect GPE to be sent for status change */
590     + EC_FLAGS_GPE_MODE, /* Expect GPE to be sent
591     + * for status change */
592     EC_FLAGS_NO_GPE, /* Don't use GPE mode */
593     - EC_FLAGS_RESCHEDULE_POLL /* Re-schedule poll */
594     + EC_FLAGS_GPE_STORM, /* GPE storm detected */
595     + EC_FLAGS_HANDLERS_INSTALLED /* Handlers for GPE and
596     + * OpReg are installed */
597     };
598    
599     /* If we find an EC via the ECDT, we need to keep a ptr to its context */
600     @@ -95,6 +95,15 @@ struct acpi_ec_query_handler {
601     u8 query_bit;
602     };
603    
604     +struct transaction {
605     + const u8 *wdata;
606     + u8 *rdata;
607     + unsigned short irq_count;
608     + u8 command;
609     + u8 wlen;
610     + u8 rlen;
611     +};
612     +
613     static struct acpi_ec {
614     acpi_handle handle;
615     unsigned long gpe;
616     @@ -105,9 +114,8 @@ static struct acpi_ec {
617     struct mutex lock;
618     wait_queue_head_t wait;
619     struct list_head list;
620     - struct delayed_work work;
621     - atomic_t irq_count;
622     - u8 handlers_installed;
623     + struct transaction *curr;
624     + spinlock_t curr_lock;
625     } *boot_ec, *first_ec;
626    
627     /*
628     @@ -150,7 +158,7 @@ static inline u8 acpi_ec_read_data(struct acpi_ec *ec)
629     {
630     u8 x = inb(ec->data_addr);
631     pr_debug(PREFIX "---> data = 0x%2.2x\n", x);
632     - return inb(ec->data_addr);
633     + return x;
634     }
635    
636     static inline void acpi_ec_write_cmd(struct acpi_ec *ec, u8 command)
637     @@ -165,158 +173,172 @@ static inline void acpi_ec_write_data(struct acpi_ec *ec, u8 data)
638     outb(data, ec->data_addr);
639     }
640    
641     -static inline int acpi_ec_check_status(struct acpi_ec *ec, enum ec_event event)
642     +static int ec_transaction_done(struct acpi_ec *ec)
643     {
644     - if (test_bit(EC_FLAGS_WAIT_GPE, &ec->flags))
645     - return 0;
646     - if (event == ACPI_EC_EVENT_OBF_1) {
647     - if (acpi_ec_read_status(ec) & ACPI_EC_FLAG_OBF)
648     - return 1;
649     - } else if (event == ACPI_EC_EVENT_IBF_0) {
650     - if (!(acpi_ec_read_status(ec) & ACPI_EC_FLAG_IBF))
651     - return 1;
652     - }
653     -
654     - return 0;
655     + unsigned long flags;
656     + int ret = 0;
657     + spin_lock_irqsave(&ec->curr_lock, flags);
658     + if (!ec->curr || (!ec->curr->wlen && !ec->curr->rlen))
659     + ret = 1;
660     + spin_unlock_irqrestore(&ec->curr_lock, flags);
661     + return ret;
662     }
663    
664     -static void ec_schedule_ec_poll(struct acpi_ec *ec)
665     +static void gpe_transaction(struct acpi_ec *ec, u8 status)
666     {
667     - if (test_bit(EC_FLAGS_RESCHEDULE_POLL, &ec->flags))
668     - schedule_delayed_work(&ec->work,
669     - msecs_to_jiffies(ACPI_EC_DELAY));
670     + unsigned long flags;
671     + spin_lock_irqsave(&ec->curr_lock, flags);
672     + if (!ec->curr)
673     + goto unlock;
674     + if (ec->curr->wlen > 0) {
675     + if ((status & ACPI_EC_FLAG_IBF) == 0) {
676     + acpi_ec_write_data(ec, *(ec->curr->wdata++));
677     + --ec->curr->wlen;
678     + } else
679     + /* false interrupt, state didn't change */
680     + ++ec->curr->irq_count;
681     +
682     + } else if (ec->curr->rlen > 0) {
683     + if ((status & ACPI_EC_FLAG_OBF) == 1) {
684     + *(ec->curr->rdata++) = acpi_ec_read_data(ec);
685     + --ec->curr->rlen;
686     + } else
687     + /* false interrupt, state didn't change */
688     + ++ec->curr->irq_count;
689     + }
690     +unlock:
691     + spin_unlock_irqrestore(&ec->curr_lock, flags);
692     }
693    
694     -static void ec_switch_to_poll_mode(struct acpi_ec *ec)
695     +static int acpi_ec_wait(struct acpi_ec *ec)
696     {
697     + if (wait_event_timeout(ec->wait, ec_transaction_done(ec),
698     + msecs_to_jiffies(ACPI_EC_DELAY)))
699     + return 0;
700     + /* missing GPEs, switch back to poll mode */
701     + if (printk_ratelimit())
702     + pr_info(PREFIX "missing confirmations, "
703     + "switch off interrupt mode.\n");
704     set_bit(EC_FLAGS_NO_GPE, &ec->flags);
705     clear_bit(EC_FLAGS_GPE_MODE, &ec->flags);
706     - acpi_disable_gpe(NULL, ec->gpe, ACPI_NOT_ISR);
707     - set_bit(EC_FLAGS_RESCHEDULE_POLL, &ec->flags);
708     + return 1;
709     }
710    
711     -static int acpi_ec_wait(struct acpi_ec *ec, enum ec_event event, int force_poll)
712     +static void acpi_ec_gpe_query(void *ec_cxt);
713     +
714     +static int ec_check_sci(struct acpi_ec *ec, u8 state)
715     {
716     - atomic_set(&ec->irq_count, 0);
717     - if (likely(test_bit(EC_FLAGS_GPE_MODE, &ec->flags)) &&
718     - likely(!force_poll)) {
719     - if (wait_event_timeout(ec->wait, acpi_ec_check_status(ec, event),
720     - msecs_to_jiffies(ACPI_EC_DELAY)))
721     - return 0;
722     - clear_bit(EC_FLAGS_WAIT_GPE, &ec->flags);
723     - if (acpi_ec_check_status(ec, event)) {
724     - /* missing GPEs, switch back to poll mode */
725     - if (printk_ratelimit())
726     - pr_info(PREFIX "missing confirmations, "
727     - "switch off interrupt mode.\n");
728     - ec_switch_to_poll_mode(ec);
729     - ec_schedule_ec_poll(ec);
730     - return 0;
731     - }
732     - } else {
733     - unsigned long delay = jiffies + msecs_to_jiffies(ACPI_EC_DELAY);
734     - clear_bit(EC_FLAGS_WAIT_GPE, &ec->flags);
735     - while (time_before(jiffies, delay)) {
736     - if (acpi_ec_check_status(ec, event))
737     - return 0;
738     - msleep(1);
739     - }
740     - if (acpi_ec_check_status(ec,event))
741     + if (state & ACPI_EC_FLAG_SCI) {
742     + if (!test_and_set_bit(EC_FLAGS_QUERY_PENDING, &ec->flags))
743     + return acpi_os_execute(OSL_EC_BURST_HANDLER,
744     + acpi_ec_gpe_query, ec);
745     + }
746     + return 0;
747     +}
748     +
749     +static int ec_poll(struct acpi_ec *ec)
750     +{
751     + unsigned long delay = jiffies + msecs_to_jiffies(ACPI_EC_DELAY);
752     + msleep(1);
753     + while (time_before(jiffies, delay)) {
754     + gpe_transaction(ec, acpi_ec_read_status(ec));
755     + msleep(1);
756     + if (ec_transaction_done(ec))
757     return 0;
758     }
759     - pr_err(PREFIX "acpi_ec_wait timeout, status = 0x%2.2x, event = %s\n",
760     - acpi_ec_read_status(ec),
761     - (event == ACPI_EC_EVENT_OBF_1) ? "\"b0=1\"" : "\"b1=0\"");
762     return -ETIME;
763     }
764    
765     -static int acpi_ec_transaction_unlocked(struct acpi_ec *ec, u8 command,
766     - const u8 * wdata, unsigned wdata_len,
767     - u8 * rdata, unsigned rdata_len,
768     +static int acpi_ec_transaction_unlocked(struct acpi_ec *ec,
769     + struct transaction *t,
770     int force_poll)
771     {
772     - int result = 0;
773     - set_bit(EC_FLAGS_WAIT_GPE, &ec->flags);
774     + unsigned long tmp;
775     + int ret = 0;
776     pr_debug(PREFIX "transaction start\n");
777     - acpi_ec_write_cmd(ec, command);
778     - for (; wdata_len > 0; --wdata_len) {
779     - result = acpi_ec_wait(ec, ACPI_EC_EVENT_IBF_0, force_poll);
780     - if (result) {
781     - pr_err(PREFIX
782     - "write_cmd timeout, command = %d\n", command);
783     - goto end;
784     - }
785     - set_bit(EC_FLAGS_WAIT_GPE, &ec->flags);
786     - acpi_ec_write_data(ec, *(wdata++));
787     + /* disable GPE during transaction if storm is detected */
788     + if (test_bit(EC_FLAGS_GPE_STORM, &ec->flags)) {
789     + clear_bit(EC_FLAGS_GPE_MODE, &ec->flags);
790     + acpi_disable_gpe(NULL, ec->gpe, ACPI_NOT_ISR);
791     }
792     -
793     - if (!rdata_len) {
794     - result = acpi_ec_wait(ec, ACPI_EC_EVENT_IBF_0, force_poll);
795     - if (result) {
796     - pr_err(PREFIX
797     - "finish-write timeout, command = %d\n", command);
798     - goto end;
799     - }
800     - } else if (command == ACPI_EC_COMMAND_QUERY)
801     + /* start transaction */
802     + spin_lock_irqsave(&ec->curr_lock, tmp);
803     + /* following two actions should be kept atomic */
804     + t->irq_count = 0;
805     + ec->curr = t;
806     + acpi_ec_write_cmd(ec, ec->curr->command);
807     + if (ec->curr->command == ACPI_EC_COMMAND_QUERY)
808     clear_bit(EC_FLAGS_QUERY_PENDING, &ec->flags);
809     -
810     - for (; rdata_len > 0; --rdata_len) {
811     - result = acpi_ec_wait(ec, ACPI_EC_EVENT_OBF_1, force_poll);
812     - if (result) {
813     - pr_err(PREFIX "read timeout, command = %d\n", command);
814     - goto end;
815     - }
816     - /* Don't expect GPE after last read */
817     - if (rdata_len > 1)
818     - set_bit(EC_FLAGS_WAIT_GPE, &ec->flags);
819     - *(rdata++) = acpi_ec_read_data(ec);
820     - }
821     - end:
822     + spin_unlock_irqrestore(&ec->curr_lock, tmp);
823     + /* if we selected poll mode or failed in GPE-mode do a poll loop */
824     + if (force_poll ||
825     + !test_bit(EC_FLAGS_GPE_MODE, &ec->flags) ||
826     + acpi_ec_wait(ec))
827     + ret = ec_poll(ec);
828     pr_debug(PREFIX "transaction end\n");
829     - return result;
830     + spin_lock_irqsave(&ec->curr_lock, tmp);
831     + ec->curr = NULL;
832     + spin_unlock_irqrestore(&ec->curr_lock, tmp);
833     + if (test_bit(EC_FLAGS_GPE_STORM, &ec->flags)) {
834     + /* check if we received SCI during transaction */
835     + ec_check_sci(ec, acpi_ec_read_status(ec));
836     + /* it is safe to enable GPE outside of transaction */
837     + acpi_enable_gpe(NULL, ec->gpe, ACPI_NOT_ISR);
838     + } else if (test_bit(EC_FLAGS_GPE_MODE, &ec->flags) &&
839     + t->irq_count > ACPI_EC_STORM_THRESHOLD) {
840     + pr_debug(PREFIX "GPE storm detected\n");
841     + set_bit(EC_FLAGS_GPE_STORM, &ec->flags);
842     + }
843     + return ret;
844     +}
845     +
846     +static int ec_check_ibf0(struct acpi_ec *ec)
847     +{
848     + u8 status = acpi_ec_read_status(ec);
849     + return (status & ACPI_EC_FLAG_IBF) == 0;
850     }
851    
852     -static int acpi_ec_transaction(struct acpi_ec *ec, u8 command,
853     - const u8 * wdata, unsigned wdata_len,
854     - u8 * rdata, unsigned rdata_len,
855     +static int ec_wait_ibf0(struct acpi_ec *ec)
856     +{
857     + unsigned long delay = jiffies + msecs_to_jiffies(ACPI_EC_DELAY);
858     + /* interrupt wait manually if GPE mode is not active */
859     + unsigned long timeout = test_bit(EC_FLAGS_GPE_MODE, &ec->flags) ?
860     + msecs_to_jiffies(ACPI_EC_DELAY) : msecs_to_jiffies(1);
861     + while (time_before(jiffies, delay))
862     + if (wait_event_timeout(ec->wait, ec_check_ibf0(ec), timeout))
863     + return 0;
864     + return -ETIME;
865     +}
866     +
867     +static int acpi_ec_transaction(struct acpi_ec *ec, struct transaction *t,
868     int force_poll)
869     {
870     int status;
871     u32 glk;
872     -
873     - if (!ec || (wdata_len && !wdata) || (rdata_len && !rdata))
874     + if (!ec || (!t) || (t->wlen && !t->wdata) || (t->rlen && !t->rdata))
875     return -EINVAL;
876     -
877     - if (rdata)
878     - memset(rdata, 0, rdata_len);
879     -
880     + if (t->rdata)
881     + memset(t->rdata, 0, t->rlen);
882     mutex_lock(&ec->lock);
883     if (ec->global_lock) {
884     status = acpi_acquire_global_lock(ACPI_EC_UDELAY_GLK, &glk);
885     if (ACPI_FAILURE(status)) {
886     - mutex_unlock(&ec->lock);
887     - return -ENODEV;
888     + status = -ENODEV;
889     + goto unlock;
890     }
891     }
892     -
893     - status = acpi_ec_wait(ec, ACPI_EC_EVENT_IBF_0, 0);
894     - if (status) {
895     + if (ec_wait_ibf0(ec)) {
896     pr_err(PREFIX "input buffer is not empty, "
897     "aborting transaction\n");
898     + status = -ETIME;
899     goto end;
900     }
901     -
902     - status = acpi_ec_transaction_unlocked(ec, command,
903     - wdata, wdata_len,
904     - rdata, rdata_len,
905     - force_poll);
906     -
907     - end:
908     -
909     + status = acpi_ec_transaction_unlocked(ec, t, force_poll);
910     +end:
911     if (ec->global_lock)
912     acpi_release_global_lock(glk);
913     +unlock:
914     mutex_unlock(&ec->lock);
915     -
916     return status;
917     }
918    
919     @@ -327,21 +349,32 @@ static int acpi_ec_transaction(struct acpi_ec *ec, u8 command,
920     int acpi_ec_burst_enable(struct acpi_ec *ec)
921     {
922     u8 d;
923     - return acpi_ec_transaction(ec, ACPI_EC_BURST_ENABLE, NULL, 0, &d, 1, 0);
924     + struct transaction t = {.command = ACPI_EC_BURST_ENABLE,
925     + .wdata = NULL, .rdata = &d,
926     + .wlen = 0, .rlen = 1};
927     +
928     + return acpi_ec_transaction(ec, &t, 0);
929     }
930    
931     int acpi_ec_burst_disable(struct acpi_ec *ec)
932     {
933     - return acpi_ec_transaction(ec, ACPI_EC_BURST_DISABLE, NULL, 0, NULL, 0, 0);
934     + struct transaction t = {.command = ACPI_EC_BURST_DISABLE,
935     + .wdata = NULL, .rdata = NULL,
936     + .wlen = 0, .rlen = 0};
937     +
938     + return (acpi_ec_read_status(ec) & ACPI_EC_FLAG_BURST) ?
939     + acpi_ec_transaction(ec, &t, 0) : 0;
940     }
941    
942     static int acpi_ec_read(struct acpi_ec *ec, u8 address, u8 * data)
943     {
944     int result;
945     u8 d;
946     + struct transaction t = {.command = ACPI_EC_COMMAND_READ,
947     + .wdata = &address, .rdata = &d,
948     + .wlen = 1, .rlen = 1};
949    
950     - result = acpi_ec_transaction(ec, ACPI_EC_COMMAND_READ,
951     - &address, 1, &d, 1, 0);
952     + result = acpi_ec_transaction(ec, &t, 0);
953     *data = d;
954     return result;
955     }
956     @@ -349,8 +382,11 @@ static int acpi_ec_read(struct acpi_ec *ec, u8 address, u8 * data)
957     static int acpi_ec_write(struct acpi_ec *ec, u8 address, u8 data)
958     {
959     u8 wdata[2] = { address, data };
960     - return acpi_ec_transaction(ec, ACPI_EC_COMMAND_WRITE,
961     - wdata, 2, NULL, 0, 0);
962     + struct transaction t = {.command = ACPI_EC_COMMAND_WRITE,
963     + .wdata = wdata, .rdata = NULL,
964     + .wlen = 2, .rlen = 0};
965     +
966     + return acpi_ec_transaction(ec, &t, 0);
967     }
968    
969     /*
970     @@ -412,12 +448,13 @@ int ec_transaction(u8 command,
971     u8 * rdata, unsigned rdata_len,
972     int force_poll)
973     {
974     + struct transaction t = {.command = command,
975     + .wdata = wdata, .rdata = rdata,
976     + .wlen = wdata_len, .rlen = rdata_len};
977     if (!first_ec)
978     return -ENODEV;
979    
980     - return acpi_ec_transaction(first_ec, command, wdata,
981     - wdata_len, rdata, rdata_len,
982     - force_poll);
983     + return acpi_ec_transaction(first_ec, &t, force_poll);
984     }
985    
986     EXPORT_SYMBOL(ec_transaction);
987     @@ -426,7 +463,9 @@ static int acpi_ec_query(struct acpi_ec *ec, u8 * data)
988     {
989     int result;
990     u8 d;
991     -
992     + struct transaction t = {.command = ACPI_EC_COMMAND_QUERY,
993     + .wdata = NULL, .rdata = &d,
994     + .wlen = 0, .rlen = 1};
995     if (!ec || !data)
996     return -EINVAL;
997    
998     @@ -436,7 +475,7 @@ static int acpi_ec_query(struct acpi_ec *ec, u8 * data)
999     * bit to be cleared (and thus clearing the interrupt source).
1000     */
1001    
1002     - result = acpi_ec_transaction(ec, ACPI_EC_COMMAND_QUERY, NULL, 0, &d, 1, 0);
1003     + result = acpi_ec_transaction(ec, &t, 0);
1004     if (result)
1005     return result;
1006    
1007     @@ -513,46 +552,26 @@ static void acpi_ec_gpe_query(void *ec_cxt)
1008    
1009     static u32 acpi_ec_gpe_handler(void *data)
1010     {
1011     - acpi_status status = AE_OK;
1012     struct acpi_ec *ec = data;
1013     - u8 state = acpi_ec_read_status(ec);
1014     + u8 status;
1015    
1016     pr_debug(PREFIX "~~~> interrupt\n");
1017     - atomic_inc(&ec->irq_count);
1018     - if (atomic_read(&ec->irq_count) > 5) {
1019     - pr_err(PREFIX "GPE storm detected, disabling EC GPE\n");
1020     - ec_switch_to_poll_mode(ec);
1021     - goto end;
1022     - }
1023     - clear_bit(EC_FLAGS_WAIT_GPE, &ec->flags);
1024     - if (test_bit(EC_FLAGS_GPE_MODE, &ec->flags))
1025     + status = acpi_ec_read_status(ec);
1026     +
1027     + gpe_transaction(ec, status);
1028     + if (ec_transaction_done(ec) && (status & ACPI_EC_FLAG_IBF) == 0)
1029     wake_up(&ec->wait);
1030    
1031     - if (state & ACPI_EC_FLAG_SCI) {
1032     - if (!test_and_set_bit(EC_FLAGS_QUERY_PENDING, &ec->flags))
1033     - status = acpi_os_execute(OSL_EC_BURST_HANDLER,
1034     - acpi_ec_gpe_query, ec);
1035     - } else if (!test_bit(EC_FLAGS_GPE_MODE, &ec->flags) &&
1036     - !test_bit(EC_FLAGS_NO_GPE, &ec->flags) &&
1037     - in_interrupt()) {
1038     + ec_check_sci(ec, status);
1039     + if (!test_bit(EC_FLAGS_GPE_MODE, &ec->flags) &&
1040     + !test_bit(EC_FLAGS_NO_GPE, &ec->flags)) {
1041     /* this is non-query, must be confirmation */
1042     if (printk_ratelimit())
1043     pr_info(PREFIX "non-query interrupt received,"
1044     " switching to interrupt mode\n");
1045     set_bit(EC_FLAGS_GPE_MODE, &ec->flags);
1046     - clear_bit(EC_FLAGS_RESCHEDULE_POLL, &ec->flags);
1047     }
1048     -end:
1049     - ec_schedule_ec_poll(ec);
1050     - return ACPI_SUCCESS(status) ?
1051     - ACPI_INTERRUPT_HANDLED : ACPI_INTERRUPT_NOT_HANDLED;
1052     -}
1053     -
1054     -static void do_ec_poll(struct work_struct *work)
1055     -{
1056     - struct acpi_ec *ec = container_of(work, struct acpi_ec, work.work);
1057     - atomic_set(&ec->irq_count, 0);
1058     - (void)acpi_ec_gpe_handler(ec);
1059     + return ACPI_INTERRUPT_HANDLED;
1060     }
1061    
1062     /* --------------------------------------------------------------------------
1063     @@ -696,8 +715,7 @@ static struct acpi_ec *make_acpi_ec(void)
1064     mutex_init(&ec->lock);
1065     init_waitqueue_head(&ec->wait);
1066     INIT_LIST_HEAD(&ec->list);
1067     - INIT_DELAYED_WORK_DEFERRABLE(&ec->work, do_ec_poll);
1068     - atomic_set(&ec->irq_count, 0);
1069     + spin_lock_init(&ec->curr_lock);
1070     return ec;
1071     }
1072    
1073     @@ -736,22 +754,15 @@ ec_parse_device(acpi_handle handle, u32 Level, void *context, void **retval)
1074     return AE_CTRL_TERMINATE;
1075     }
1076    
1077     -static void ec_poll_stop(struct acpi_ec *ec)
1078     -{
1079     - clear_bit(EC_FLAGS_RESCHEDULE_POLL, &ec->flags);
1080     - cancel_delayed_work(&ec->work);
1081     -}
1082     -
1083     static void ec_remove_handlers(struct acpi_ec *ec)
1084     {
1085     - ec_poll_stop(ec);
1086     if (ACPI_FAILURE(acpi_remove_address_space_handler(ec->handle,
1087     ACPI_ADR_SPACE_EC, &acpi_ec_space_handler)))
1088     pr_err(PREFIX "failed to remove space handler\n");
1089     if (ACPI_FAILURE(acpi_remove_gpe_handler(NULL, ec->gpe,
1090     &acpi_ec_gpe_handler)))
1091     pr_err(PREFIX "failed to remove gpe handler\n");
1092     - ec->handlers_installed = 0;
1093     + clear_bit(EC_FLAGS_HANDLERS_INSTALLED, &ec->flags);
1094     }
1095    
1096     static int acpi_ec_add(struct acpi_device *device)
1097     @@ -846,17 +857,15 @@ ec_parse_io_ports(struct acpi_resource *resource, void *context)
1098     static int ec_install_handlers(struct acpi_ec *ec)
1099     {
1100     acpi_status status;
1101     - if (ec->handlers_installed)
1102     + if (test_bit(EC_FLAGS_HANDLERS_INSTALLED, &ec->flags))
1103     return 0;
1104     status = acpi_install_gpe_handler(NULL, ec->gpe,
1105     - ACPI_GPE_EDGE_TRIGGERED,
1106     - &acpi_ec_gpe_handler, ec);
1107     + ACPI_GPE_EDGE_TRIGGERED,
1108     + &acpi_ec_gpe_handler, ec);
1109     if (ACPI_FAILURE(status))
1110     return -ENODEV;
1111     -
1112     acpi_set_gpe_type(NULL, ec->gpe, ACPI_GPE_TYPE_RUNTIME);
1113     acpi_enable_gpe(NULL, ec->gpe, ACPI_NOT_ISR);
1114     -
1115     status = acpi_install_address_space_handler(ec->handle,
1116     ACPI_ADR_SPACE_EC,
1117     &acpi_ec_space_handler,
1118     @@ -866,7 +875,7 @@ static int ec_install_handlers(struct acpi_ec *ec)
1119     return -ENODEV;
1120     }
1121    
1122     - ec->handlers_installed = 1;
1123     + set_bit(EC_FLAGS_HANDLERS_INSTALLED, &ec->flags);
1124     return 0;
1125     }
1126    
1127     @@ -887,7 +896,6 @@ static int acpi_ec_start(struct acpi_device *device)
1128    
1129     /* EC is fully operational, allow queries */
1130     clear_bit(EC_FLAGS_QUERY_PENDING, &ec->flags);
1131     - ec_schedule_ec_poll(ec);
1132     return ret;
1133     }
1134    
1135     @@ -906,7 +914,7 @@ static int acpi_ec_stop(struct acpi_device *device, int type)
1136    
1137     int __init acpi_boot_ec_enable(void)
1138     {
1139     - if (!boot_ec || boot_ec->handlers_installed)
1140     + if (!boot_ec || test_bit(EC_FLAGS_HANDLERS_INSTALLED, &boot_ec->flags))
1141     return 0;
1142     if (!ec_install_handlers(boot_ec)) {
1143     first_ec = boot_ec;
1144     diff --git a/drivers/acpi/hardware/hwsleep.c b/drivers/acpi/hardware/hwsleep.c
1145     index ecb6ace..25dccdf 100644
1146     --- a/drivers/acpi/hardware/hwsleep.c
1147     +++ b/drivers/acpi/hardware/hwsleep.c
1148     @@ -612,6 +612,13 @@ acpi_status acpi_leave_sleep_state(u8 sleep_state)
1149     }
1150     /* TBD: _WAK "sometimes" returns stuff - do we want to look at it? */
1151    
1152     + /*
1153     + * Some BIOSes assume that WAK_STS will be cleared on resume and use
1154     + * it to determine whether the system is rebooting or resuming. Clear
1155     + * it for compatibility.
1156     + */
1157     + acpi_set_register(ACPI_BITREG_WAKE_STATUS, 1);
1158     +
1159     acpi_gbl_system_awake_and_running = TRUE;
1160    
1161     /* Enable power button */
1162     diff --git a/drivers/acpi/reboot.c b/drivers/acpi/reboot.c
1163     index a6b662c..755baf2 100644
1164     --- a/drivers/acpi/reboot.c
1165     +++ b/drivers/acpi/reboot.c
1166     @@ -15,9 +15,28 @@ void acpi_reboot(void)
1167    
1168     rr = &acpi_gbl_FADT.reset_register;
1169    
1170     - /* Is the reset register supported? */
1171     - if (!(acpi_gbl_FADT.flags & ACPI_FADT_RESET_REGISTER) ||
1172     - rr->bit_width != 8 || rr->bit_offset != 0)
1173     + /*
1174     + * Is the ACPI reset register supported?
1175     + *
1176     + * According to ACPI 3.0, FADT.flags.RESET_REG_SUP indicates
1177     + * whether the ACPI reset mechanism is supported.
1178     + *
1179     + * However, some boxes have this bit clear, yet a valid
1180     + * ACPI_RESET_REG & RESET_VALUE, and ACPI reboot is the only
1181     + * mechanism that works for them after S3.
1182     + *
1183     + * This suggests that other operating systems may not be checking
1184     + * the RESET_REG_SUP bit, and are using other means to decide
1185     + * whether to use the ACPI reboot mechanism or not.
1186     + *
1187     + * So when acpi reboot is requested,
1188     + * only the reset_register is checked. If the following
1189     + * conditions are met, it indicates that the reset register is supported.
1190     + * a. reset_register is not zero
1191     + * b. the access width is eight
1192     + * c. the bit_offset is zero
1193     + */
1194     + if (!(rr->address) || rr->bit_width != 8 || rr->bit_offset != 0)
1195     return;
1196    
1197     reset_value = acpi_gbl_FADT.reset_value;
1198     diff --git a/drivers/ata/libata-core.c b/drivers/ata/libata-core.c
1199     index 79e3a8e..8228ae3 100644
1200     --- a/drivers/ata/libata-core.c
1201     +++ b/drivers/ata/libata-core.c
1202     @@ -5259,6 +5259,8 @@ struct ata_port *ata_port_alloc(struct ata_host *host)
1203    
1204     #ifdef CONFIG_ATA_SFF
1205     INIT_DELAYED_WORK(&ap->port_task, ata_pio_task);
1206     +#else
1207     + INIT_DELAYED_WORK(&ap->port_task, NULL);
1208     #endif
1209     INIT_DELAYED_WORK(&ap->hotplug_task, ata_scsi_hotplug);
1210     INIT_WORK(&ap->scsi_rescan_task, ata_scsi_dev_rescan);
1211     diff --git a/drivers/ata/pata_it821x.c b/drivers/ata/pata_it821x.c
1212     index 0221c9a..35fd67d 100644
1213     --- a/drivers/ata/pata_it821x.c
1214     +++ b/drivers/ata/pata_it821x.c
1215     @@ -557,9 +557,8 @@ static unsigned int it821x_read_id(struct ata_device *adev,
1216     if (strstr(model_num, "Integrated Technology Express")) {
1217     /* Set feature bits the firmware neglects */
1218     id[49] |= 0x0300; /* LBA, DMA */
1219     - id[82] |= 0x0400; /* LBA48 */
1220     id[83] &= 0x7FFF;
1221     - id[83] |= 0x4000; /* Word 83 is valid */
1222     + id[83] |= 0x4400; /* Word 83 is valid and LBA48 */
1223     id[86] |= 0x0400; /* LBA48 on */
1224     id[ATA_ID_MAJOR_VER] |= 0x1F;
1225     }
1226     diff --git a/drivers/ata/sata_nv.c b/drivers/ata/sata_nv.c
1227     index 14601dc..8714c36 100644
1228     --- a/drivers/ata/sata_nv.c
1229     +++ b/drivers/ata/sata_nv.c
1230     @@ -307,10 +307,10 @@ static int nv_scr_write(struct ata_port *ap, unsigned int sc_reg, u32 val);
1231    
1232     static void nv_nf2_freeze(struct ata_port *ap);
1233     static void nv_nf2_thaw(struct ata_port *ap);
1234     +static int nv_nf2_hardreset(struct ata_link *link, unsigned int *class,
1235     + unsigned long deadline);
1236     static void nv_ck804_freeze(struct ata_port *ap);
1237     static void nv_ck804_thaw(struct ata_port *ap);
1238     -static int nv_hardreset(struct ata_link *link, unsigned int *class,
1239     - unsigned long deadline);
1240     static int nv_adma_slave_config(struct scsi_device *sdev);
1241     static int nv_adma_check_atapi_dma(struct ata_queued_cmd *qc);
1242     static void nv_adma_qc_prep(struct ata_queued_cmd *qc);
1243     @@ -405,17 +405,8 @@ static struct scsi_host_template nv_swncq_sht = {
1244     .slave_configure = nv_swncq_slave_config,
1245     };
1246    
1247     -/* OSDL bz3352 reports that some nv controllers can't determine device
1248     - * signature reliably and nv_hardreset is implemented to work around
1249     - * the problem. This was reported on nf3 and it's unclear whether any
1250     - * other controllers are affected. However, the workaround has been
1251     - * applied to all variants and there isn't much to gain by trying to
1252     - * find out exactly which ones are affected at this point especially
1253     - * because NV has moved over to ahci for newer controllers.
1254     - */
1255     static struct ata_port_operations nv_common_ops = {
1256     .inherits = &ata_bmdma_port_ops,
1257     - .hardreset = nv_hardreset,
1258     .scr_read = nv_scr_read,
1259     .scr_write = nv_scr_write,
1260     };
1261     @@ -429,12 +420,22 @@ static struct ata_port_operations nv_generic_ops = {
1262     .hardreset = ATA_OP_NULL,
1263     };
1264    
1265     +/* OSDL bz3352 reports that nf2/3 controllers can't determine device
1266     + * signature reliably. Also, the following thread reports detection
1267     + * failure on cold boot with the standard debouncing timing.
1268     + *
1269     + * http://thread.gmane.org/gmane.linux.ide/34098
1270     + *
1271     + * Debounce with hotplug timing and request follow-up SRST.
1272     + */
1273     static struct ata_port_operations nv_nf2_ops = {
1274     .inherits = &nv_common_ops,
1275     .freeze = nv_nf2_freeze,
1276     .thaw = nv_nf2_thaw,
1277     + .hardreset = nv_nf2_hardreset,
1278     };
1279    
1280     +/* CK804 finally gets hardreset right */
1281     static struct ata_port_operations nv_ck804_ops = {
1282     .inherits = &nv_common_ops,
1283     .freeze = nv_ck804_freeze,
1284     @@ -443,7 +444,7 @@ static struct ata_port_operations nv_ck804_ops = {
1285     };
1286    
1287     static struct ata_port_operations nv_adma_ops = {
1288     - .inherits = &nv_common_ops,
1289     + .inherits = &nv_ck804_ops,
1290    
1291     .check_atapi_dma = nv_adma_check_atapi_dma,
1292     .sff_tf_read = nv_adma_tf_read,
1293     @@ -467,7 +468,7 @@ static struct ata_port_operations nv_adma_ops = {
1294     };
1295    
1296     static struct ata_port_operations nv_swncq_ops = {
1297     - .inherits = &nv_common_ops,
1298     + .inherits = &nv_generic_ops,
1299    
1300     .qc_defer = ata_std_qc_defer,
1301     .qc_prep = nv_swncq_qc_prep,
1302     @@ -1553,6 +1554,17 @@ static void nv_nf2_thaw(struct ata_port *ap)
1303     iowrite8(mask, scr_addr + NV_INT_ENABLE);
1304     }
1305    
1306     +static int nv_nf2_hardreset(struct ata_link *link, unsigned int *class,
1307     + unsigned long deadline)
1308     +{
1309     + bool online;
1310     + int rc;
1311     +
1312     + rc = sata_link_hardreset(link, sata_deb_timing_hotplug, deadline,
1313     + &online, NULL);
1314     + return online ? -EAGAIN : rc;
1315     +}
1316     +
1317     static void nv_ck804_freeze(struct ata_port *ap)
1318     {
1319     void __iomem *mmio_base = ap->host->iomap[NV_MMIO_BAR];
1320     @@ -1605,21 +1617,6 @@ static void nv_mcp55_thaw(struct ata_port *ap)
1321     ata_sff_thaw(ap);
1322     }
1323    
1324     -static int nv_hardreset(struct ata_link *link, unsigned int *class,
1325     - unsigned long deadline)
1326     -{
1327     - int rc;
1328     -
1329     - /* SATA hardreset fails to retrieve proper device signature on
1330     - * some controllers. Request follow up SRST. For more info,
1331     - * see http://bugzilla.kernel.org/show_bug.cgi?id=3352
1332     - */
1333     - rc = sata_sff_hardreset(link, class, deadline);
1334     - if (rc)
1335     - return rc;
1336     - return -EAGAIN;
1337     -}
1338     -
1339     static void nv_adma_error_handler(struct ata_port *ap)
1340     {
1341     struct nv_adma_port_priv *pp = ap->private_data;
1342     diff --git a/drivers/ata/sata_promise.c b/drivers/ata/sata_promise.c
1343     index 030665b..b26885f 100644
1344     --- a/drivers/ata/sata_promise.c
1345     +++ b/drivers/ata/sata_promise.c
1346     @@ -153,6 +153,10 @@ static void pdc_freeze(struct ata_port *ap);
1347     static void pdc_sata_freeze(struct ata_port *ap);
1348     static void pdc_thaw(struct ata_port *ap);
1349     static void pdc_sata_thaw(struct ata_port *ap);
1350     +static int pdc_pata_softreset(struct ata_link *link, unsigned int *class,
1351     + unsigned long deadline);
1352     +static int pdc_sata_hardreset(struct ata_link *link, unsigned int *class,
1353     + unsigned long deadline);
1354     static void pdc_error_handler(struct ata_port *ap);
1355     static void pdc_post_internal_cmd(struct ata_queued_cmd *qc);
1356     static int pdc_pata_cable_detect(struct ata_port *ap);
1357     @@ -186,6 +190,7 @@ static struct ata_port_operations pdc_sata_ops = {
1358     .scr_read = pdc_sata_scr_read,
1359     .scr_write = pdc_sata_scr_write,
1360     .port_start = pdc_sata_port_start,
1361     + .hardreset = pdc_sata_hardreset,
1362     };
1363    
1364     /* First-generation chips need a more restrictive ->check_atapi_dma op */
1365     @@ -200,6 +205,7 @@ static struct ata_port_operations pdc_pata_ops = {
1366     .freeze = pdc_freeze,
1367     .thaw = pdc_thaw,
1368     .port_start = pdc_common_port_start,
1369     + .softreset = pdc_pata_softreset,
1370     };
1371    
1372     static const struct ata_port_info pdc_port_info[] = {
1373     @@ -691,6 +697,20 @@ static void pdc_sata_thaw(struct ata_port *ap)
1374     readl(host_mmio + hotplug_offset); /* flush */
1375     }
1376    
1377     +static int pdc_pata_softreset(struct ata_link *link, unsigned int *class,
1378     + unsigned long deadline)
1379     +{
1380     + pdc_reset_port(link->ap);
1381     + return ata_sff_softreset(link, class, deadline);
1382     +}
1383     +
1384     +static int pdc_sata_hardreset(struct ata_link *link, unsigned int *class,
1385     + unsigned long deadline)
1386     +{
1387     + pdc_reset_port(link->ap);
1388     + return sata_sff_hardreset(link, class, deadline);
1389     +}
1390     +
1391     static void pdc_error_handler(struct ata_port *ap)
1392     {
1393     if (!(ap->pflags & ATA_PFLAG_FROZEN))
1394     diff --git a/drivers/base/sys.c b/drivers/base/sys.c
1395     index 75dd6e2..70499cb 100644
1396     --- a/drivers/base/sys.c
1397     +++ b/drivers/base/sys.c
1398     @@ -488,7 +488,8 @@ ssize_t sysdev_store_ulong(struct sys_device *sysdev,
1399     if (end == buf)
1400     return -EINVAL;
1401     *(unsigned long *)(ea->var) = new;
1402     - return end - buf;
1403     + /* Always return full write size even if we didn't consume all */
1404     + return size;
1405     }
1406     EXPORT_SYMBOL_GPL(sysdev_store_ulong);
1407    
1408     @@ -511,7 +512,8 @@ ssize_t sysdev_store_int(struct sys_device *sysdev,
1409     if (end == buf || new > INT_MAX || new < INT_MIN)
1410     return -EINVAL;
1411     *(int *)(ea->var) = new;
1412     - return end - buf;
1413     + /* Always return full write size even if we didn't consume all */
1414     + return size;
1415     }
1416     EXPORT_SYMBOL_GPL(sysdev_store_int);
1417    
1418     diff --git a/drivers/char/agp/intel-agp.c b/drivers/char/agp/intel-agp.c
1419     index 016fdf0..f1fe749 100644
1420     --- a/drivers/char/agp/intel-agp.c
1421     +++ b/drivers/char/agp/intel-agp.c
1422     @@ -54,8 +54,7 @@
1423     agp_bridge->dev->device == PCI_DEVICE_ID_INTEL_82965Q_HB || \
1424     agp_bridge->dev->device == PCI_DEVICE_ID_INTEL_82965G_HB || \
1425     agp_bridge->dev->device == PCI_DEVICE_ID_INTEL_82965GM_HB || \
1426     - agp_bridge->dev->device == PCI_DEVICE_ID_INTEL_82965GME_HB || \
1427     - agp_bridge->dev->device == PCI_DEVICE_ID_INTEL_GM45_HB)
1428     + agp_bridge->dev->device == PCI_DEVICE_ID_INTEL_82965GME_HB)
1429    
1430     #define IS_G33 (agp_bridge->dev->device == PCI_DEVICE_ID_INTEL_G33_HB || \
1431     agp_bridge->dev->device == PCI_DEVICE_ID_INTEL_Q35_HB || \
1432     @@ -63,7 +62,8 @@
1433    
1434     #define IS_G4X (agp_bridge->dev->device == PCI_DEVICE_ID_INTEL_IGD_E_HB || \
1435     agp_bridge->dev->device == PCI_DEVICE_ID_INTEL_Q45_HB || \
1436     - agp_bridge->dev->device == PCI_DEVICE_ID_INTEL_G45_HB)
1437     + agp_bridge->dev->device == PCI_DEVICE_ID_INTEL_G45_HB || \
1438     + agp_bridge->dev->device == PCI_DEVICE_ID_INTEL_GM45_HB)
1439    
1440     extern int agp_memory_reserved;
1441    
1442     @@ -525,8 +525,10 @@ static void intel_i830_init_gtt_entries(void)
1443     size += 4;
1444     } else if (IS_G4X) {
1445     /* On 4 series hardware, GTT stolen is separate from graphics
1446     - * stolen, ignore it in stolen gtt entries counting */
1447     - size = 0;
1448     + * stolen, ignore it in stolen gtt entries counting. However,
1449     + * 4KB of the stolen memory doesn't get mapped to the GTT.
1450     + */
1451     + size = 4;
1452     } else {
1453     /* On previous hardware, the GTT size was just what was
1454     * required to map the aperture.
1455     diff --git a/drivers/char/ipmi/ipmi_devintf.c b/drivers/char/ipmi/ipmi_devintf.c
1456     index 64e1c16..ecaf369 100644
1457     --- a/drivers/char/ipmi/ipmi_devintf.c
1458     +++ b/drivers/char/ipmi/ipmi_devintf.c
1459     @@ -957,3 +957,4 @@ module_exit(cleanup_ipmi);
1460     MODULE_LICENSE("GPL");
1461     MODULE_AUTHOR("Corey Minyard <minyard@mvista.com>");
1462     MODULE_DESCRIPTION("Linux device interface for the IPMI message handler.");
1463     +MODULE_ALIAS("platform:ipmi_si");
1464     diff --git a/drivers/firewire/fw-cdev.c b/drivers/firewire/fw-cdev.c
1465     index 2e6d584..ed03234 100644
1466     --- a/drivers/firewire/fw-cdev.c
1467     +++ b/drivers/firewire/fw-cdev.c
1468     @@ -720,8 +720,8 @@ static int ioctl_create_iso_context(struct client *client, void *buffer)
1469     #define GET_PAYLOAD_LENGTH(v) ((v) & 0xffff)
1470     #define GET_INTERRUPT(v) (((v) >> 16) & 0x01)
1471     #define GET_SKIP(v) (((v) >> 17) & 0x01)
1472     -#define GET_TAG(v) (((v) >> 18) & 0x02)
1473     -#define GET_SY(v) (((v) >> 20) & 0x04)
1474     +#define GET_TAG(v) (((v) >> 18) & 0x03)
1475     +#define GET_SY(v) (((v) >> 20) & 0x0f)
1476     #define GET_HEADER_LENGTH(v) (((v) >> 24) & 0xff)
1477    
1478     static int ioctl_queue_iso(struct client *client, void *buffer)
1479     @@ -913,7 +913,7 @@ dispatch_ioctl(struct client *client, unsigned int cmd, void __user *arg)
1480     return -EFAULT;
1481     }
1482    
1483     - return 0;
1484     + return retval;
1485     }
1486    
1487     static long
1488     diff --git a/drivers/firewire/fw-sbp2.c b/drivers/firewire/fw-sbp2.c
1489     index aaff50e..4f73537 100644
1490     --- a/drivers/firewire/fw-sbp2.c
1491     +++ b/drivers/firewire/fw-sbp2.c
1492     @@ -172,6 +172,9 @@ struct sbp2_target {
1493     int blocked; /* ditto */
1494     };
1495    
1496     +/* Impossible login_id, to detect logout attempt before successful login */
1497     +#define INVALID_LOGIN_ID 0x10000
1498     +
1499     /*
1500     * Per section 7.4.8 of the SBP-2 spec, a mgt_ORB_timeout value can be
1501     * provided in the config rom. Most devices do provide a value, which
1502     @@ -791,9 +794,20 @@ static void sbp2_release_target(struct kref *kref)
1503     scsi_remove_device(sdev);
1504     scsi_device_put(sdev);
1505     }
1506     - sbp2_send_management_orb(lu, tgt->node_id, lu->generation,
1507     - SBP2_LOGOUT_REQUEST, lu->login_id, NULL);
1508     -
1509     + if (lu->login_id != INVALID_LOGIN_ID) {
1510     + int generation, node_id;
1511     + /*
1512     + * tgt->node_id may be obsolete here if we failed
1513     + * during initial login or after a bus reset where
1514     + * the topology changed.
1515     + */
1516     + generation = device->generation;
1517     + smp_rmb(); /* node_id vs. generation */
1518     + node_id = device->node_id;
1519     + sbp2_send_management_orb(lu, node_id, generation,
1520     + SBP2_LOGOUT_REQUEST,
1521     + lu->login_id, NULL);
1522     + }
1523     fw_core_remove_address_handler(&lu->address_handler);
1524     list_del(&lu->link);
1525     kfree(lu);
1526     @@ -808,19 +822,20 @@ static void sbp2_release_target(struct kref *kref)
1527    
1528     static struct workqueue_struct *sbp2_wq;
1529    
1530     +static void sbp2_target_put(struct sbp2_target *tgt)
1531     +{
1532     + kref_put(&tgt->kref, sbp2_release_target);
1533     +}
1534     +
1535     /*
1536     * Always get the target's kref when scheduling work on one its units.
1537     * Each workqueue job is responsible to call sbp2_target_put() upon return.
1538     */
1539     static void sbp2_queue_work(struct sbp2_logical_unit *lu, unsigned long delay)
1540     {
1541     - if (queue_delayed_work(sbp2_wq, &lu->work, delay))
1542     - kref_get(&lu->tgt->kref);
1543     -}
1544     -
1545     -static void sbp2_target_put(struct sbp2_target *tgt)
1546     -{
1547     - kref_put(&tgt->kref, sbp2_release_target);
1548     + kref_get(&lu->tgt->kref);
1549     + if (!queue_delayed_work(sbp2_wq, &lu->work, delay))
1550     + sbp2_target_put(lu->tgt);
1551     }
1552    
1553     static void
1554     @@ -993,6 +1008,7 @@ static int sbp2_add_logical_unit(struct sbp2_target *tgt, int lun_entry)
1555    
1556     lu->tgt = tgt;
1557     lu->lun = lun_entry & 0xffff;
1558     + lu->login_id = INVALID_LOGIN_ID;
1559     lu->retries = 0;
1560     lu->has_sdev = false;
1561     lu->blocked = false;
1562     @@ -1158,7 +1174,7 @@ static int sbp2_probe(struct device *dev)
1563    
1564     /* Do the login in a workqueue so we can easily reschedule retries. */
1565     list_for_each_entry(lu, &tgt->lu_list, link)
1566     - sbp2_queue_work(lu, 0);
1567     + sbp2_queue_work(lu, DIV_ROUND_UP(HZ, 5));
1568     return 0;
1569    
1570     fail_tgt_put:
1571     diff --git a/drivers/firewire/fw-topology.c b/drivers/firewire/fw-topology.c
1572     index c1b8107..5e20471 100644
1573     --- a/drivers/firewire/fw-topology.c
1574     +++ b/drivers/firewire/fw-topology.c
1575     @@ -413,7 +413,7 @@ static void
1576     update_tree(struct fw_card *card, struct fw_node *root)
1577     {
1578     struct list_head list0, list1;
1579     - struct fw_node *node0, *node1;
1580     + struct fw_node *node0, *node1, *next1;
1581     int i, event;
1582    
1583     INIT_LIST_HEAD(&list0);
1584     @@ -485,7 +485,9 @@ update_tree(struct fw_card *card, struct fw_node *root)
1585     }
1586    
1587     node0 = fw_node(node0->link.next);
1588     - node1 = fw_node(node1->link.next);
1589     + next1 = fw_node(node1->link.next);
1590     + fw_node_put(node1);
1591     + node1 = next1;
1592     }
1593     }
1594    
1595     diff --git a/drivers/firewire/fw-transaction.h b/drivers/firewire/fw-transaction.h
1596     index 2ae1b0d..81b15ba 100644
1597     --- a/drivers/firewire/fw-transaction.h
1598     +++ b/drivers/firewire/fw-transaction.h
1599     @@ -248,7 +248,7 @@ struct fw_card {
1600     struct fw_node *local_node;
1601     struct fw_node *root_node;
1602     struct fw_node *irm_node;
1603     - int color;
1604     + u8 color; /* must be u8 to match the definition in struct fw_node */
1605     int gap_count;
1606     bool beta_repeaters_present;
1607    
1608     diff --git a/drivers/hid/usbhid/hid-quirks.c b/drivers/hid/usbhid/hid-quirks.c
1609     index b15f882..49144cb 100644
1610     --- a/drivers/hid/usbhid/hid-quirks.c
1611     +++ b/drivers/hid/usbhid/hid-quirks.c
1612     @@ -247,8 +247,6 @@
1613     #define USB_DEVICE_ID_LD_MACHINETEST 0x2040
1614    
1615     #define USB_VENDOR_ID_LOGITECH 0x046d
1616     -#define USB_DEVICE_ID_LOGITECH_LX3 0xc044
1617     -#define USB_DEVICE_ID_LOGITECH_V150 0xc047
1618     #define USB_DEVICE_ID_LOGITECH_RECEIVER 0xc101
1619     #define USB_DEVICE_ID_LOGITECH_HARMONY 0xc110
1620     #define USB_DEVICE_ID_LOGITECH_HARMONY_2 0xc111
1621     @@ -603,8 +601,6 @@ static const struct hid_blacklist {
1622    
1623     { USB_VENDOR_ID_LOGITECH, USB_DEVICE_ID_LOGITECH_ELITE_KBD, HID_QUIRK_LOGITECH_IGNORE_DOUBLED_WHEEL | HID_QUIRK_LOGITECH_EXPANDED_KEYMAP },
1624     { USB_VENDOR_ID_LOGITECH, USB_DEVICE_ID_LOGITECH_CORDLESS_DESKTOP_LX500, HID_QUIRK_LOGITECH_IGNORE_DOUBLED_WHEEL | HID_QUIRK_LOGITECH_EXPANDED_KEYMAP },
1625     - { USB_VENDOR_ID_LOGITECH, USB_DEVICE_ID_LOGITECH_LX3, HID_QUIRK_INVERT_HWHEEL },
1626     - { USB_VENDOR_ID_LOGITECH, USB_DEVICE_ID_LOGITECH_V150, HID_QUIRK_INVERT_HWHEEL },
1627    
1628     { USB_VENDOR_ID_MICROSOFT, USB_DEVICE_ID_MS_NE4K, HID_QUIRK_MICROSOFT_KEYS },
1629     { USB_VENDOR_ID_MICROSOFT, USB_DEVICE_ID_MS_LK6K, HID_QUIRK_MICROSOFT_KEYS },
1630     diff --git a/drivers/i2c/busses/scx200_i2c.c b/drivers/i2c/busses/scx200_i2c.c
1631     index c3022a0..e4c9853 100644
1632     --- a/drivers/i2c/busses/scx200_i2c.c
1633     +++ b/drivers/i2c/busses/scx200_i2c.c
1634     @@ -81,6 +81,7 @@ static struct i2c_algo_bit_data scx200_i2c_data = {
1635    
1636     static struct i2c_adapter scx200_i2c_ops = {
1637     .owner = THIS_MODULE,
1638     + .class = I2C_CLASS_HWMON | I2C_CLASS_SPD,
1639     .id = I2C_HW_B_SCX200,
1640     .algo_data = &scx200_i2c_data,
1641     .name = "NatSemi SCx200 I2C",
1642     diff --git a/drivers/input/keyboard/atkbd.c b/drivers/input/keyboard/atkbd.c
1643     index b1ce10f..e32c24d 100644
1644     --- a/drivers/input/keyboard/atkbd.c
1645     +++ b/drivers/input/keyboard/atkbd.c
1646     @@ -834,10 +834,10 @@ static void atkbd_disconnect(struct serio *serio)
1647     }
1648    
1649     /*
1650     - * Most special keys (Fn+F?) on Dell Latitudes do not generate release
1651     + * Most special keys (Fn+F?) on Dell laptops do not generate release
1652     * events so we have to do it ourselves.
1653     */
1654     -static void atkbd_latitude_keymap_fixup(struct atkbd *atkbd)
1655     +static void atkbd_dell_laptop_keymap_fixup(struct atkbd *atkbd)
1656     {
1657     const unsigned int forced_release_keys[] = {
1658     0x85, 0x86, 0x87, 0x88, 0x89, 0x8a, 0x8b, 0x8f, 0x93,
1659     @@ -1461,13 +1461,13 @@ static int __init atkbd_setup_fixup(const struct dmi_system_id *id)
1660    
1661     static struct dmi_system_id atkbd_dmi_quirk_table[] __initdata = {
1662     {
1663     - .ident = "Dell Latitude series",
1664     + .ident = "Dell Laptop",
1665     .matches = {
1666     DMI_MATCH(DMI_SYS_VENDOR, "Dell Inc."),
1667     - DMI_MATCH(DMI_PRODUCT_NAME, "Latitude"),
1668     + DMI_MATCH(DMI_CHASSIS_TYPE, "8"), /* Portable */
1669     },
1670     .callback = atkbd_setup_fixup,
1671     - .driver_data = atkbd_latitude_keymap_fixup,
1672     + .driver_data = atkbd_dell_laptop_keymap_fixup,
1673     },
1674     {
1675     .ident = "HP 2133",
1676     diff --git a/drivers/media/dvb/frontends/s5h1411.c b/drivers/media/dvb/frontends/s5h1411.c
1677     index 2da1a37..a92ee16 100644
1678     --- a/drivers/media/dvb/frontends/s5h1411.c
1679     +++ b/drivers/media/dvb/frontends/s5h1411.c
1680     @@ -471,6 +471,20 @@ static int s5h1411_set_spectralinversion(struct dvb_frontend *fe, int inversion)
1681     return s5h1411_writereg(state, S5H1411_I2C_TOP_ADDR, 0x24, val);
1682     }
1683    
1684     +static int s5h1411_set_serialmode(struct dvb_frontend *fe, int serial)
1685     +{
1686     + struct s5h1411_state *state = fe->demodulator_priv;
1687     + u16 val;
1688     +
1689     + dprintk("%s(%d)\n", __func__, serial);
1690     + val = s5h1411_readreg(state, S5H1411_I2C_TOP_ADDR, 0xbd) & ~0x100;
1691     +
1692     + if (serial == 1)
1693     + val |= 0x100;
1694     +
1695     + return s5h1411_writereg(state, S5H1411_I2C_TOP_ADDR, 0xbd, val);
1696     +}
1697     +
1698     static int s5h1411_enable_modulation(struct dvb_frontend *fe,
1699     fe_modulation_t m)
1700     {
1701     @@ -535,7 +549,7 @@ static int s5h1411_set_gpio(struct dvb_frontend *fe, int enable)
1702     return s5h1411_writereg(state, S5H1411_I2C_TOP_ADDR, 0xe0, val);
1703     }
1704    
1705     -static int s5h1411_sleep(struct dvb_frontend *fe, int enable)
1706     +static int s5h1411_set_powerstate(struct dvb_frontend *fe, int enable)
1707     {
1708     struct s5h1411_state *state = fe->demodulator_priv;
1709    
1710     @@ -551,6 +565,11 @@ static int s5h1411_sleep(struct dvb_frontend *fe, int enable)
1711     return 0;
1712     }
1713    
1714     +static int s5h1411_sleep(struct dvb_frontend *fe)
1715     +{
1716     + return s5h1411_set_powerstate(fe, 1);
1717     +}
1718     +
1719     static int s5h1411_register_reset(struct dvb_frontend *fe)
1720     {
1721     struct s5h1411_state *state = fe->demodulator_priv;
1722     @@ -574,9 +593,6 @@ static int s5h1411_set_frontend(struct dvb_frontend *fe,
1723    
1724     s5h1411_enable_modulation(fe, p->u.vsb.modulation);
1725    
1726     - /* Allow the demod to settle */
1727     - msleep(100);
1728     -
1729     if (fe->ops.tuner_ops.set_params) {
1730     if (fe->ops.i2c_gate_ctrl)
1731     fe->ops.i2c_gate_ctrl(fe, 1);
1732     @@ -587,6 +603,10 @@ static int s5h1411_set_frontend(struct dvb_frontend *fe,
1733     fe->ops.i2c_gate_ctrl(fe, 0);
1734     }
1735    
1736     + /* Issue a reset to the demod so it knows to resync against the
1737     + newly tuned frequency */
1738     + s5h1411_softreset(fe);
1739     +
1740     return 0;
1741     }
1742    
1743     @@ -599,7 +619,7 @@ static int s5h1411_init(struct dvb_frontend *fe)
1744    
1745     dprintk("%s()\n", __func__);
1746    
1747     - s5h1411_sleep(fe, 0);
1748     + s5h1411_set_powerstate(fe, 0);
1749     s5h1411_register_reset(fe);
1750    
1751     for (i = 0; i < ARRAY_SIZE(init_tab); i++)
1752     @@ -612,10 +632,10 @@ static int s5h1411_init(struct dvb_frontend *fe)
1753    
1754     if (state->config->output_mode == S5H1411_SERIAL_OUTPUT)
1755     /* Serial */
1756     - s5h1411_writereg(state, S5H1411_I2C_TOP_ADDR, 0xbd, 0x1101);
1757     + s5h1411_set_serialmode(fe, 1);
1758     else
1759     /* Parallel */
1760     - s5h1411_writereg(state, S5H1411_I2C_TOP_ADDR, 0xbd, 0x1001);
1761     + s5h1411_set_serialmode(fe, 0);
1762    
1763     s5h1411_set_spectralinversion(fe, state->config->inversion);
1764     s5h1411_set_if_freq(fe, state->config->vsb_if);
1765     @@ -863,6 +883,7 @@ static struct dvb_frontend_ops s5h1411_ops = {
1766     },
1767    
1768     .init = s5h1411_init,
1769     + .sleep = s5h1411_sleep,
1770     .i2c_gate_ctrl = s5h1411_i2c_gate_ctrl,
1771     .set_frontend = s5h1411_set_frontend,
1772     .get_frontend = s5h1411_get_frontend,
1773     diff --git a/drivers/media/video/pvrusb2/pvrusb2-encoder.c b/drivers/media/video/pvrusb2/pvrusb2-encoder.c
1774     index a1252d6..273d2a1 100644
1775     --- a/drivers/media/video/pvrusb2/pvrusb2-encoder.c
1776     +++ b/drivers/media/video/pvrusb2/pvrusb2-encoder.c
1777     @@ -402,6 +402,10 @@ static int pvr2_encoder_prep_config(struct pvr2_hdw *hdw)
1778     ret |= pvr2_encoder_vcmd(hdw, CX2341X_ENC_MISC,4, 0,3,0,0);
1779     ret |= pvr2_encoder_vcmd(hdw, CX2341X_ENC_MISC,4,15,0,0,0);
1780    
1781     + /* prevent the PTSs from slowly drifting away in the generated
1782     + MPEG stream */
1783     + ret |= pvr2_encoder_vcmd(hdw, CX2341X_ENC_MISC, 2, 4, 1);
1784     +
1785     return ret;
1786     }
1787    
1788     diff --git a/drivers/net/atlx/atl1.c b/drivers/net/atlx/atl1.c
1789     index e23ce77..b46e599 100644
1790     --- a/drivers/net/atlx/atl1.c
1791     +++ b/drivers/net/atlx/atl1.c
1792     @@ -2317,7 +2317,8 @@ static void atl1_tx_queue(struct atl1_adapter *adapter, u16 count,
1793     if (tpd != ptpd)
1794     memcpy(tpd, ptpd, sizeof(struct tx_packet_desc));
1795     tpd->buffer_addr = cpu_to_le64(buffer_info->dma);
1796     - tpd->word2 = (cpu_to_le16(buffer_info->length) &
1797     + tpd->word2 &= ~(TPD_BUFLEN_MASK << TPD_BUFLEN_SHIFT);
1798     + tpd->word2 |= (cpu_to_le16(buffer_info->length) &
1799     TPD_BUFLEN_MASK) << TPD_BUFLEN_SHIFT;
1800    
1801     /*
1802     @@ -2426,8 +2427,8 @@ static int atl1_xmit_frame(struct sk_buff *skb, struct net_device *netdev)
1803     vlan_tag = (vlan_tag << 4) | (vlan_tag >> 13) |
1804     ((vlan_tag >> 9) & 0x8);
1805     ptpd->word3 |= 1 << TPD_INS_VL_TAG_SHIFT;
1806     - ptpd->word3 |= (vlan_tag & TPD_VL_TAGGED_MASK) <<
1807     - TPD_VL_TAGGED_SHIFT;
1808     + ptpd->word2 |= (vlan_tag & TPD_VLANTAG_MASK) <<
1809     + TPD_VLANTAG_SHIFT;
1810     }
1811    
1812     tso = atl1_tso(adapter, skb, ptpd);
1813     diff --git a/drivers/net/atlx/atl1.h b/drivers/net/atlx/atl1.h
1814     index a5015b1..ffa73fc 100644
1815     --- a/drivers/net/atlx/atl1.h
1816     +++ b/drivers/net/atlx/atl1.h
1817     @@ -504,7 +504,7 @@ struct rx_free_desc {
1818     #define TPD_PKTNT_MASK 0x0001
1819     #define TPD_PKTINT_SHIFT 15
1820     #define TPD_VLANTAG_MASK 0xFFFF
1821     -#define TPD_VLAN_SHIFT 16
1822     +#define TPD_VLANTAG_SHIFT 16
1823    
1824     /* tpd word 3 bits 0:13 */
1825     #define TPD_EOP_MASK 0x0001
1826     diff --git a/drivers/net/bonding/bond_alb.c b/drivers/net/bonding/bond_alb.c
1827     index b211486..4489e58 100644
1828     --- a/drivers/net/bonding/bond_alb.c
1829     +++ b/drivers/net/bonding/bond_alb.c
1830     @@ -167,11 +167,14 @@ static void tlb_clear_slave(struct bonding *bond, struct slave *slave, int save_
1831     /* clear slave from tx_hashtbl */
1832     tx_hash_table = BOND_ALB_INFO(bond).tx_hashtbl;
1833    
1834     - index = SLAVE_TLB_INFO(slave).head;
1835     - while (index != TLB_NULL_INDEX) {
1836     - u32 next_index = tx_hash_table[index].next;
1837     - tlb_init_table_entry(&tx_hash_table[index], save_load);
1838     - index = next_index;
1839     + /* skip this if we've already freed the tx hash table */
1840     + if (tx_hash_table) {
1841     + index = SLAVE_TLB_INFO(slave).head;
1842     + while (index != TLB_NULL_INDEX) {
1843     + u32 next_index = tx_hash_table[index].next;
1844     + tlb_init_table_entry(&tx_hash_table[index], save_load);
1845     + index = next_index;
1846     + }
1847     }
1848    
1849     tlb_init_slave(slave);
1850     diff --git a/drivers/net/wireless/libertas/scan.c b/drivers/net/wireless/libertas/scan.c
1851     index 4b27456..50927ea 100644
1852     --- a/drivers/net/wireless/libertas/scan.c
1853     +++ b/drivers/net/wireless/libertas/scan.c
1854     @@ -598,8 +598,8 @@ static int lbs_process_bss(struct bss_descriptor *bss,
1855    
1856     switch (elem->id) {
1857     case MFIE_TYPE_SSID:
1858     - bss->ssid_len = elem->len;
1859     - memcpy(bss->ssid, elem->data, elem->len);
1860     + bss->ssid_len = min_t(int, 32, elem->len);
1861     + memcpy(bss->ssid, elem->data, bss->ssid_len);
1862     lbs_deb_scan("got SSID IE: '%s', len %u\n",
1863     escape_essid(bss->ssid, bss->ssid_len),
1864     bss->ssid_len);
1865     diff --git a/drivers/pci/probe.c b/drivers/pci/probe.c
1866     index 36698e5..bcafbd6 100644
1867     --- a/drivers/pci/probe.c
1868     +++ b/drivers/pci/probe.c
1869     @@ -219,7 +219,7 @@ static inline enum pci_bar_type decode_bar(struct resource *res, u32 bar)
1870    
1871     res->flags = bar & ~PCI_BASE_ADDRESS_MEM_MASK;
1872    
1873     - if (res->flags == PCI_BASE_ADDRESS_MEM_TYPE_64)
1874     + if (res->flags & PCI_BASE_ADDRESS_MEM_TYPE_64)
1875     return pci_bar_mem64;
1876     return pci_bar_mem32;
1877     }
1878     diff --git a/drivers/rtc/rtc-cmos.c b/drivers/rtc/rtc-cmos.c
1879     index b184367..6ad46d7 100644
1880     --- a/drivers/rtc/rtc-cmos.c
1881     +++ b/drivers/rtc/rtc-cmos.c
1882     @@ -1030,29 +1030,32 @@ static struct platform_driver cmos_platform_driver = {
1883    
1884     static int __init cmos_init(void)
1885     {
1886     + int retval = 0;
1887     +
1888     #ifdef CONFIG_PNP
1889     - if (pnp_platform_devices)
1890     - return pnp_register_driver(&cmos_pnp_driver);
1891     - else
1892     - return platform_driver_probe(&cmos_platform_driver,
1893     - cmos_platform_probe);
1894     -#else
1895     - return platform_driver_probe(&cmos_platform_driver,
1896     - cmos_platform_probe);
1897     -#endif /* CONFIG_PNP */
1898     + pnp_register_driver(&cmos_pnp_driver);
1899     +#endif
1900     +
1901     + if (!cmos_rtc.dev)
1902     + retval = platform_driver_probe(&cmos_platform_driver,
1903     + cmos_platform_probe);
1904     +
1905     + if (retval == 0)
1906     + return 0;
1907     +
1908     +#ifdef CONFIG_PNP
1909     + pnp_unregister_driver(&cmos_pnp_driver);
1910     +#endif
1911     + return retval;
1912     }
1913     module_init(cmos_init);
1914    
1915     static void __exit cmos_exit(void)
1916     {
1917     #ifdef CONFIG_PNP
1918     - if (pnp_platform_devices)
1919     - pnp_unregister_driver(&cmos_pnp_driver);
1920     - else
1921     - platform_driver_unregister(&cmos_platform_driver);
1922     -#else
1923     + pnp_unregister_driver(&cmos_pnp_driver);
1924     +#endif
1925     platform_driver_unregister(&cmos_platform_driver);
1926     -#endif /* CONFIG_PNP */
1927     }
1928     module_exit(cmos_exit);
1929    
1930     diff --git a/drivers/scsi/sd.c b/drivers/scsi/sd.c
1931     index e5e7d78..b7ea69c 100644
1932     --- a/drivers/scsi/sd.c
1933     +++ b/drivers/scsi/sd.c
1934     @@ -1047,7 +1047,6 @@ static int sd_done(struct scsi_cmnd *SCpnt)
1935     good_bytes = sd_completed_bytes(SCpnt);
1936     break;
1937     case RECOVERED_ERROR:
1938     - case NO_SENSE:
1939     /* Inform the user, but make sure that it's not treated
1940     * as a hard error.
1941     */
1942     @@ -1056,6 +1055,15 @@ static int sd_done(struct scsi_cmnd *SCpnt)
1943     memset(SCpnt->sense_buffer, 0, SCSI_SENSE_BUFFERSIZE);
1944     good_bytes = scsi_bufflen(SCpnt);
1945     break;
1946     + case NO_SENSE:
1947     + /* This indicates a false check condition, so ignore it. An
1948     + * unknown amount of data was transferred so treat it as an
1949     + * error.
1950     + */
1951     + scsi_print_sense("sd", SCpnt);
1952     + SCpnt->result = 0;
1953     + memset(SCpnt->sense_buffer, 0, SCSI_SENSE_BUFFERSIZE);
1954     + break;
1955     case ABORTED_COMMAND:
1956     if (sshdr.asc == 0x10) { /* DIF: Disk detected corruption */
1957     scsi_print_result(SCpnt);
1958     diff --git a/drivers/usb/core/hcd.c b/drivers/usb/core/hcd.c
1959     index 706f3e6..7a4ccf5 100644
1960     --- a/drivers/usb/core/hcd.c
1961     +++ b/drivers/usb/core/hcd.c
1962     @@ -106,6 +106,9 @@ static DEFINE_SPINLOCK(hcd_root_hub_lock);
1963     /* used when updating an endpoint's URB list */
1964     static DEFINE_SPINLOCK(hcd_urb_list_lock);
1965    
1966     +/* used to protect against unlinking URBs after the device is gone */
1967     +static DEFINE_SPINLOCK(hcd_urb_unlink_lock);
1968     +
1969     /* wait queue for synchronous unlinks */
1970     DECLARE_WAIT_QUEUE_HEAD(usb_kill_urb_queue);
1971    
1972     @@ -1377,10 +1380,25 @@ static int unlink1(struct usb_hcd *hcd, struct urb *urb, int status)
1973     int usb_hcd_unlink_urb (struct urb *urb, int status)
1974     {
1975     struct usb_hcd *hcd;
1976     - int retval;
1977     + int retval = -EIDRM;
1978     + unsigned long flags;
1979    
1980     - hcd = bus_to_hcd(urb->dev->bus);
1981     - retval = unlink1(hcd, urb, status);
1982     + /* Prevent the device and bus from going away while
1983     + * the unlink is carried out. If they are already gone
1984     + * then urb->use_count must be 0, since disconnected
1985     + * devices can't have any active URBs.
1986     + */
1987     + spin_lock_irqsave(&hcd_urb_unlink_lock, flags);
1988     + if (atomic_read(&urb->use_count) > 0) {
1989     + retval = 0;
1990     + usb_get_dev(urb->dev);
1991     + }
1992     + spin_unlock_irqrestore(&hcd_urb_unlink_lock, flags);
1993     + if (retval == 0) {
1994     + hcd = bus_to_hcd(urb->dev->bus);
1995     + retval = unlink1(hcd, urb, status);
1996     + usb_put_dev(urb->dev);
1997     + }
1998    
1999     if (retval == 0)
2000     retval = -EINPROGRESS;
2001     @@ -1529,6 +1547,17 @@ void usb_hcd_disable_endpoint(struct usb_device *udev,
2002     hcd->driver->endpoint_disable(hcd, ep);
2003     }
2004    
2005     +/* Protect against drivers that try to unlink URBs after the device
2006     + * is gone, by waiting until all unlinks for @udev are finished.
2007     + * Since we don't currently track URBs by device, simply wait until
2008     + * nothing is running in the locked region of usb_hcd_unlink_urb().
2009     + */
2010     +void usb_hcd_synchronize_unlinks(struct usb_device *udev)
2011     +{
2012     + spin_lock_irq(&hcd_urb_unlink_lock);
2013     + spin_unlock_irq(&hcd_urb_unlink_lock);
2014     +}
2015     +
2016     /*-------------------------------------------------------------------------*/
2017    
2018     /* called in any context */
2019     diff --git a/drivers/usb/core/hcd.h b/drivers/usb/core/hcd.h
2020     index 2dcde61..9465e70 100644
2021     --- a/drivers/usb/core/hcd.h
2022     +++ b/drivers/usb/core/hcd.h
2023     @@ -232,6 +232,7 @@ extern void usb_hcd_flush_endpoint(struct usb_device *udev,
2024     struct usb_host_endpoint *ep);
2025     extern void usb_hcd_disable_endpoint(struct usb_device *udev,
2026     struct usb_host_endpoint *ep);
2027     +extern void usb_hcd_synchronize_unlinks(struct usb_device *udev);
2028     extern int usb_hcd_get_frame_number(struct usb_device *udev);
2029    
2030     extern struct usb_hcd *usb_create_hcd(const struct hc_driver *driver,
2031     diff --git a/drivers/usb/core/hub.c b/drivers/usb/core/hub.c
2032     index 875de9a..769f80f 100644
2033     --- a/drivers/usb/core/hub.c
2034     +++ b/drivers/usb/core/hub.c
2035     @@ -1349,6 +1349,7 @@ void usb_disconnect(struct usb_device **pdev)
2036     */
2037     dev_dbg (&udev->dev, "unregistering device\n");
2038     usb_disable_device(udev, 0);
2039     + usb_hcd_synchronize_unlinks(udev);
2040    
2041     usb_unlock_device(udev);
2042    
2043     diff --git a/drivers/usb/core/urb.c b/drivers/usb/core/urb.c
2044     index 47111e8..db72269 100644
2045     --- a/drivers/usb/core/urb.c
2046     +++ b/drivers/usb/core/urb.c
2047     @@ -465,6 +465,12 @@ EXPORT_SYMBOL_GPL(usb_submit_urb);
2048     * indicating that the request has been canceled (rather than any other
2049     * code).
2050     *
2051     + * Drivers should not call this routine or related routines, such as
2052     + * usb_kill_urb() or usb_unlink_anchored_urbs(), after their disconnect
2053     + * method has returned. The disconnect function should synchronize with
2054     + * a driver's I/O routines to insure that all URB-related activity has
2055     + * completed before it returns.
2056     + *
2057     * This request is always asynchronous. Success is indicated by
2058     * returning -EINPROGRESS, at which time the URB will probably not yet
2059     * have been given back to the device driver. When it is eventually
2060     @@ -541,6 +547,9 @@ EXPORT_SYMBOL_GPL(usb_unlink_urb);
2061     * This routine may not be used in an interrupt context (such as a bottom
2062     * half or a completion handler), or when holding a spinlock, or in other
2063     * situations where the caller can't schedule().
2064     + *
2065     + * This routine should not be called by a driver after its disconnect
2066     + * method has returned.
2067     */
2068     void usb_kill_urb(struct urb *urb)
2069     {
2070     @@ -568,6 +577,9 @@ EXPORT_SYMBOL_GPL(usb_kill_urb);
2071     *
2072     * this allows all outstanding URBs to be killed starting
2073     * from the back of the queue
2074     + *
2075     + * This routine should not be called by a driver after its disconnect
2076     + * method has returned.
2077     */
2078     void usb_kill_anchored_urbs(struct usb_anchor *anchor)
2079     {
2080     @@ -597,6 +609,9 @@ EXPORT_SYMBOL_GPL(usb_kill_anchored_urbs);
2081     * from the back of the queue. This function is asynchronous.
2082     * The unlinking is just tiggered. It may happen after this
2083     * function has returned.
2084     + *
2085     + * This routine should not be called by a driver after its disconnect
2086     + * method has returned.
2087     */
2088     void usb_unlink_anchored_urbs(struct usb_anchor *anchor)
2089     {
2090     diff --git a/drivers/usb/storage/unusual_devs.h b/drivers/usb/storage/unusual_devs.h
2091     index cd15547..061df9b 100644
2092     --- a/drivers/usb/storage/unusual_devs.h
2093     +++ b/drivers/usb/storage/unusual_devs.h
2094     @@ -1745,6 +1745,15 @@ UNUSUAL_DEV( 0x14cd, 0x6600, 0x0201, 0x0201,
2095     US_SC_DEVICE, US_PR_DEVICE, NULL,
2096     US_FL_IGNORE_RESIDUE ),
2097    
2098     +/* Reported by Alexandre Oliva <oliva@lsd.ic.unicamp.br>
2099     + * JMicron responds to USN and several other SCSI ioctls with a
2100     + * residue that causes subsequent I/O requests to fail. */
2101     +UNUSUAL_DEV( 0x152d, 0x2329, 0x0100, 0x0100,
2102     + "JMicron",
2103     + "USB to ATA/ATAPI Bridge",
2104     + US_SC_DEVICE, US_PR_DEVICE, NULL,
2105     + US_FL_IGNORE_RESIDUE ),
2106     +
2107     /* Reported by Robert Schedel <r.schedel@yahoo.de>
2108     * Note: this is a 'super top' device like the above 14cd/6600 device */
2109     UNUSUAL_DEV( 0x1652, 0x6600, 0x0201, 0x0201,
2110     diff --git a/fs/hfsplus/bitmap.c b/fs/hfsplus/bitmap.c
2111     index d128a25..ea30afc 100644
2112     --- a/fs/hfsplus/bitmap.c
2113     +++ b/fs/hfsplus/bitmap.c
2114     @@ -32,6 +32,10 @@ int hfsplus_block_allocate(struct super_block *sb, u32 size, u32 offset, u32 *ma
2115     mutex_lock(&HFSPLUS_SB(sb).alloc_file->i_mutex);
2116     mapping = HFSPLUS_SB(sb).alloc_file->i_mapping;
2117     page = read_mapping_page(mapping, offset / PAGE_CACHE_BITS, NULL);
2118     + if (IS_ERR(page)) {
2119     + start = size;
2120     + goto out;
2121     + }
2122     pptr = kmap(page);
2123     curr = pptr + (offset & (PAGE_CACHE_BITS - 1)) / 32;
2124     i = offset % 32;
2125     @@ -73,6 +77,10 @@ int hfsplus_block_allocate(struct super_block *sb, u32 size, u32 offset, u32 *ma
2126     break;
2127     page = read_mapping_page(mapping, offset / PAGE_CACHE_BITS,
2128     NULL);
2129     + if (IS_ERR(page)) {
2130     + start = size;
2131     + goto out;
2132     + }
2133     curr = pptr = kmap(page);
2134     if ((size ^ offset) / PAGE_CACHE_BITS)
2135     end = pptr + PAGE_CACHE_BITS / 32;
2136     @@ -120,6 +128,10 @@ found:
2137     offset += PAGE_CACHE_BITS;
2138     page = read_mapping_page(mapping, offset / PAGE_CACHE_BITS,
2139     NULL);
2140     + if (IS_ERR(page)) {
2141     + start = size;
2142     + goto out;
2143     + }
2144     pptr = kmap(page);
2145     curr = pptr;
2146     end = pptr + PAGE_CACHE_BITS / 32;
2147     diff --git a/fs/hfsplus/catalog.c b/fs/hfsplus/catalog.c
2148     index ba117c4..f6874ac 100644
2149     --- a/fs/hfsplus/catalog.c
2150     +++ b/fs/hfsplus/catalog.c
2151     @@ -168,6 +168,11 @@ int hfsplus_find_cat(struct super_block *sb, u32 cnid,
2152     return -EIO;
2153     }
2154    
2155     + if (be16_to_cpu(tmp.thread.nodeName.length) > 255) {
2156     + printk(KERN_ERR "hfs: catalog name length corrupted\n");
2157     + return -EIO;
2158     + }
2159     +
2160     hfsplus_cat_build_key_uni(fd->search_key, be32_to_cpu(tmp.thread.parentID),
2161     &tmp.thread.nodeName);
2162     return hfs_brec_find(fd);
2163     diff --git a/include/linux/sched.h b/include/linux/sched.h
2164     index 3d9120c..6bfb849 100644
2165     --- a/include/linux/sched.h
2166     +++ b/include/linux/sched.h
2167     @@ -1286,7 +1286,9 @@ struct task_struct {
2168     atomic_t fs_excl; /* holding fs exclusive resources */
2169     struct rcu_head rcu;
2170    
2171     - /*
2172     + struct list_head *scm_work_list;
2173     +
2174     +/*
2175     * cache last used pipe for splice
2176     */
2177     struct pipe_inode_info *splice_pipe;
2178     diff --git a/include/math-emu/op-common.h b/include/math-emu/op-common.h
2179     index bb46e76..408f743 100644
2180     --- a/include/math-emu/op-common.h
2181     +++ b/include/math-emu/op-common.h
2182     @@ -139,18 +139,27 @@ do { \
2183     if (X##_e <= _FP_WFRACBITS_##fs) \
2184     { \
2185     _FP_FRAC_SRS_##wc(X, X##_e, _FP_WFRACBITS_##fs); \
2186     - _FP_ROUND(wc, X); \
2187     if (_FP_FRAC_HIGH_##fs(X) \
2188     & (_FP_OVERFLOW_##fs >> 1)) \
2189     { \
2190     X##_e = 1; \
2191     _FP_FRAC_SET_##wc(X, _FP_ZEROFRAC_##wc); \
2192     - FP_SET_EXCEPTION(FP_EX_INEXACT); \
2193     } \
2194     else \
2195     { \
2196     - X##_e = 0; \
2197     - _FP_FRAC_SRL_##wc(X, _FP_WORKBITS); \
2198     + _FP_ROUND(wc, X); \
2199     + if (_FP_FRAC_HIGH_##fs(X) \
2200     + & (_FP_OVERFLOW_##fs >> 1)) \
2201     + { \
2202     + X##_e = 1; \
2203     + _FP_FRAC_SET_##wc(X, _FP_ZEROFRAC_##wc); \
2204     + FP_SET_EXCEPTION(FP_EX_INEXACT); \
2205     + } \
2206     + else \
2207     + { \
2208     + X##_e = 0; \
2209     + _FP_FRAC_SRL_##wc(X, _FP_WORKBITS); \
2210     + } \
2211     } \
2212     if ((FP_CUR_EXCEPTIONS & FP_EX_INEXACT) || \
2213     (FP_TRAPPING_EXCEPTIONS & FP_EX_UNDERFLOW)) \
2214     diff --git a/include/net/scm.h b/include/net/scm.h
2215     index 06df126..33e9986 100644
2216     --- a/include/net/scm.h
2217     +++ b/include/net/scm.h
2218     @@ -14,8 +14,9 @@
2219    
2220     struct scm_fp_list
2221     {
2222     - int count;
2223     - struct file *fp[SCM_MAX_FD];
2224     + struct list_head list;
2225     + int count;
2226     + struct file *fp[SCM_MAX_FD];
2227     };
2228    
2229     struct scm_cookie
2230     diff --git a/kernel/sched_clock.c b/kernel/sched_clock.c
2231     index e8ab096..8178724 100644
2232     --- a/kernel/sched_clock.c
2233     +++ b/kernel/sched_clock.c
2234     @@ -118,13 +118,13 @@ static u64 __update_sched_clock(struct sched_clock_data *scd, u64 now)
2235    
2236     /*
2237     * scd->clock = clamp(scd->tick_gtod + delta,
2238     - * max(scd->tick_gtod, scd->clock),
2239     - * scd->tick_gtod + TICK_NSEC);
2240     + * max(scd->tick_gtod, scd->clock),
2241     + * max(scd->clock, scd->tick_gtod + TICK_NSEC));
2242     */
2243    
2244     clock = scd->tick_gtod + delta;
2245     min_clock = wrap_max(scd->tick_gtod, scd->clock);
2246     - max_clock = scd->tick_gtod + TICK_NSEC;
2247     + max_clock = wrap_max(scd->clock, scd->tick_gtod + TICK_NSEC);
2248    
2249     clock = wrap_max(clock, min_clock);
2250     clock = wrap_min(clock, max_clock);
2251     diff --git a/kernel/sched_features.h b/kernel/sched_features.h
2252     index 9353ca7..c4c88ae 100644
2253     --- a/kernel/sched_features.h
2254     +++ b/kernel/sched_features.h
2255     @@ -5,7 +5,7 @@ SCHED_FEAT(START_DEBIT, 1)
2256     SCHED_FEAT(AFFINE_WAKEUPS, 1)
2257     SCHED_FEAT(CACHE_HOT_BUDDY, 1)
2258     SCHED_FEAT(SYNC_WAKEUPS, 1)
2259     -SCHED_FEAT(HRTICK, 1)
2260     +SCHED_FEAT(HRTICK, 0)
2261     SCHED_FEAT(DOUBLE_TICK, 0)
2262     SCHED_FEAT(ASYM_GRAN, 1)
2263     SCHED_FEAT(LB_BIAS, 1)
2264     diff --git a/net/core/scm.c b/net/core/scm.c
2265     index 10f5c65..ab242cc 100644
2266     --- a/net/core/scm.c
2267     +++ b/net/core/scm.c
2268     @@ -75,6 +75,7 @@ static int scm_fp_copy(struct cmsghdr *cmsg, struct scm_fp_list **fplp)
2269     if (!fpl)
2270     return -ENOMEM;
2271     *fplp = fpl;
2272     + INIT_LIST_HEAD(&fpl->list);
2273     fpl->count = 0;
2274     }
2275     fpp = &fpl->fp[fpl->count];
2276     @@ -106,9 +107,25 @@ void __scm_destroy(struct scm_cookie *scm)
2277    
2278     if (fpl) {
2279     scm->fp = NULL;
2280     - for (i=fpl->count-1; i>=0; i--)
2281     - fput(fpl->fp[i]);
2282     - kfree(fpl);
2283     + if (current->scm_work_list) {
2284     + list_add_tail(&fpl->list, current->scm_work_list);
2285     + } else {
2286     + LIST_HEAD(work_list);
2287     +
2288     + current->scm_work_list = &work_list;
2289     +
2290     + list_add(&fpl->list, &work_list);
2291     + while (!list_empty(&work_list)) {
2292     + fpl = list_first_entry(&work_list, struct scm_fp_list, list);
2293     +
2294     + list_del(&fpl->list);
2295     + for (i=fpl->count-1; i>=0; i--)
2296     + fput(fpl->fp[i]);
2297     + kfree(fpl);
2298     + }
2299     +
2300     + current->scm_work_list = NULL;
2301     + }
2302     }
2303     }
2304    
2305     @@ -284,6 +301,7 @@ struct scm_fp_list *scm_fp_dup(struct scm_fp_list *fpl)
2306    
2307     new_fpl = kmalloc(sizeof(*fpl), GFP_KERNEL);
2308     if (new_fpl) {
2309     + INIT_LIST_HEAD(&new_fpl->list);
2310     for (i=fpl->count-1; i>=0; i--)
2311     get_file(fpl->fp[i]);
2312     memcpy(new_fpl, fpl, sizeof(*fpl));
2313     diff --git a/net/ipv4/tcp_output.c b/net/ipv4/tcp_output.c
2314     index 8165f5a..d083f9a 100644
2315     --- a/net/ipv4/tcp_output.c
2316     +++ b/net/ipv4/tcp_output.c
2317     @@ -357,6 +357,17 @@ struct tcp_out_options {
2318     __u32 tsval, tsecr; /* need to include OPTION_TS */
2319     };
2320    
2321     +/* Beware: Something in the Internet is very sensitive to the ordering of
2322     + * TCP options, we learned this through the hard way, so be careful here.
2323     + * Luckily we can at least blame others for their non-compliance but from
2324     + * inter-operatibility perspective it seems that we're somewhat stuck with
2325     + * the ordering which we have been using if we want to keep working with
2326     + * those broken things (not that it currently hurts anybody as there isn't
2327     + * particular reason why the ordering would need to be changed).
2328     + *
2329     + * At least SACK_PERM as the first option is known to lead to a disaster
2330     + * (but it may well be that other scenarios fail similarly).
2331     + */
2332     static void tcp_options_write(__be32 *ptr, struct tcp_sock *tp,
2333     const struct tcp_out_options *opts,
2334     __u8 **md5_hash) {
2335     @@ -371,6 +382,12 @@ static void tcp_options_write(__be32 *ptr, struct tcp_sock *tp,
2336     *md5_hash = NULL;
2337     }
2338    
2339     + if (unlikely(opts->mss)) {
2340     + *ptr++ = htonl((TCPOPT_MSS << 24) |
2341     + (TCPOLEN_MSS << 16) |
2342     + opts->mss);
2343     + }
2344     +
2345     if (likely(OPTION_TS & opts->options)) {
2346     if (unlikely(OPTION_SACK_ADVERTISE & opts->options)) {
2347     *ptr++ = htonl((TCPOPT_SACK_PERM << 24) |
2348     @@ -387,12 +404,6 @@ static void tcp_options_write(__be32 *ptr, struct tcp_sock *tp,
2349     *ptr++ = htonl(opts->tsecr);
2350     }
2351    
2352     - if (unlikely(opts->mss)) {
2353     - *ptr++ = htonl((TCPOPT_MSS << 24) |
2354     - (TCPOLEN_MSS << 16) |
2355     - opts->mss);
2356     - }
2357     -
2358     if (unlikely(OPTION_SACK_ADVERTISE & opts->options &&
2359     !(OPTION_TS & opts->options))) {
2360     *ptr++ = htonl((TCPOPT_NOP << 24) |
2361     @@ -2266,6 +2277,11 @@ struct sk_buff *tcp_make_synack(struct sock *sk, struct dst_entry *dst,
2362     }
2363    
2364     memset(&opts, 0, sizeof(opts));
2365     +#ifdef CONFIG_SYN_COOKIES
2366     + if (unlikely(req->cookie_ts))
2367     + TCP_SKB_CB(skb)->when = cookie_init_timestamp(req);
2368     + else
2369     +#endif
2370     TCP_SKB_CB(skb)->when = tcp_time_stamp;
2371     tcp_header_size = tcp_synack_options(sk, req,
2372     dst_metric(dst, RTAX_ADVMSS),
2373     @@ -2292,11 +2308,6 @@ struct sk_buff *tcp_make_synack(struct sock *sk, struct dst_entry *dst,
2374    
2375     /* RFC1323: The window in SYN & SYN/ACK segments is never scaled. */
2376     th->window = htons(min(req->rcv_wnd, 65535U));
2377     -#ifdef CONFIG_SYN_COOKIES
2378     - if (unlikely(req->cookie_ts))
2379     - TCP_SKB_CB(skb)->when = cookie_init_timestamp(req);
2380     - else
2381     -#endif
2382     tcp_options_write((__be32 *)(th + 1), tp, &opts, &md5_hash_location);
2383     th->doff = (tcp_header_size >> 2);
2384     TCP_INC_STATS(sock_net(sk), TCP_MIB_OUTSEGS);
2385     diff --git a/net/ipv6/tcp_ipv6.c b/net/ipv6/tcp_ipv6.c
2386     index 10e22fd..245cbc5 100644
2387     --- a/net/ipv6/tcp_ipv6.c
2388     +++ b/net/ipv6/tcp_ipv6.c
2389     @@ -1087,7 +1087,7 @@ static void tcp_v6_send_ack(struct sk_buff *skb, u32 seq, u32 ack, u32 win, u32
2390     *topt++ = htonl((TCPOPT_NOP << 24) | (TCPOPT_NOP << 16) |
2391     (TCPOPT_TIMESTAMP << 8) | TCPOLEN_TIMESTAMP);
2392     *topt++ = htonl(tcp_time_stamp);
2393     - *topt = htonl(ts);
2394     + *topt++ = htonl(ts);
2395     }
2396    
2397     #ifdef CONFIG_TCP_MD5SIG
2398     diff --git a/net/sched/sch_generic.c b/net/sched/sch_generic.c
2399     index ec0a083..700ae9e 100644
2400     --- a/net/sched/sch_generic.c
2401     +++ b/net/sched/sch_generic.c
2402     @@ -319,6 +319,7 @@ struct Qdisc_ops noop_qdisc_ops __read_mostly = {
2403    
2404     static struct netdev_queue noop_netdev_queue = {
2405     .qdisc = &noop_qdisc,
2406     + .qdisc_sleeping = &noop_qdisc,
2407     };
2408    
2409     struct Qdisc noop_qdisc = {
2410     @@ -344,6 +345,7 @@ static struct Qdisc_ops noqueue_qdisc_ops __read_mostly = {
2411     static struct Qdisc noqueue_qdisc;
2412     static struct netdev_queue noqueue_netdev_queue = {
2413     .qdisc = &noqueue_qdisc,
2414     + .qdisc_sleeping = &noqueue_qdisc,
2415     };
2416    
2417     static struct Qdisc noqueue_qdisc = {
2418     diff --git a/scripts/package/mkspec b/scripts/package/mkspec
2419     index ffd61fe..62c5ffd 100755
2420     --- a/scripts/package/mkspec
2421     +++ b/scripts/package/mkspec
2422     @@ -64,8 +64,10 @@ fi
2423     echo "%install"
2424     echo "%ifarch ia64"
2425     echo 'mkdir -p $RPM_BUILD_ROOT/boot/efi $RPM_BUILD_ROOT/lib/modules'
2426     +echo 'mkdir -p $RPM_BUILD_ROOT/lib/firmware'
2427     echo "%else"
2428     echo 'mkdir -p $RPM_BUILD_ROOT/boot $RPM_BUILD_ROOT/lib/modules'
2429     +echo 'mkdir -p $RPM_BUILD_ROOT/lib/firmware'
2430     echo "%endif"
2431    
2432     echo 'INSTALL_MOD_PATH=$RPM_BUILD_ROOT make %{_smp_mflags} modules_install'
2433     @@ -92,5 +94,6 @@ echo "%files"
2434     echo '%defattr (-, root, root)'
2435     echo "%dir /lib/modules"
2436     echo "/lib/modules/$KERNELRELEASE"
2437     +echo "/lib/firmware"
2438     echo "/boot/*"
2439     echo ""
2440     diff --git a/security/commoncap.c b/security/commoncap.c
2441     index e4c4b3f..378172b 100644
2442     --- a/security/commoncap.c
2443     +++ b/security/commoncap.c
2444     @@ -279,10 +279,10 @@ static int get_file_caps(struct linux_binprm *bprm)
2445     struct vfs_cap_data vcaps;
2446     struct inode *inode;
2447    
2448     - if (bprm->file->f_vfsmnt->mnt_flags & MNT_NOSUID) {
2449     - bprm_clear_caps(bprm);
2450     + bprm_clear_caps(bprm);
2451     +
2452     + if (bprm->file->f_vfsmnt->mnt_flags & MNT_NOSUID)
2453     return 0;
2454     - }
2455    
2456     dentry = dget(bprm->file->f_dentry);
2457     inode = dentry->d_inode;
2458     diff --git a/sound/core/control.c b/sound/core/control.c
2459     index 281b2e2..236bbb1 100644
2460     --- a/sound/core/control.c
2461     +++ b/sound/core/control.c
2462     @@ -1427,12 +1427,12 @@ static int snd_ctl_dev_disconnect(struct snd_device *device)
2463     cardnum = card->number;
2464     snd_assert(cardnum >= 0 && cardnum < SNDRV_CARDS, return -ENXIO);
2465    
2466     - down_read(&card->controls_rwsem);
2467     + read_lock(&card->ctl_files_rwlock);
2468     list_for_each_entry(ctl, &card->ctl_files, list) {
2469     wake_up(&ctl->change_sleep);
2470     kill_fasync(&ctl->fasync, SIGIO, POLL_ERR);
2471     }
2472     - up_read(&card->controls_rwsem);
2473     + read_unlock(&card->ctl_files_rwlock);
2474    
2475     if ((err = snd_unregister_device(SNDRV_DEVICE_TYPE_CONTROL,
2476     card, -1)) < 0)
2477     diff --git a/sound/pci/hda/hda_intel.c b/sound/pci/hda/hda_intel.c
2478     index 1c53e33..0f014b1 100644
2479     --- a/sound/pci/hda/hda_intel.c
2480     +++ b/sound/pci/hda/hda_intel.c
2481     @@ -45,6 +45,7 @@
2482     #include <linux/slab.h>
2483     #include <linux/pci.h>
2484     #include <linux/mutex.h>
2485     +#include <linux/reboot.h>
2486     #include <sound/core.h>
2487     #include <sound/initval.h>
2488     #include "hda_codec.h"
2489     @@ -385,6 +386,9 @@ struct azx {
2490    
2491     /* for pending irqs */
2492     struct work_struct irq_pending_work;
2493     +
2494     + /* reboot notifier (for mysterious hangup problem at power-down) */
2495     + struct notifier_block reboot_notifier;
2496     };
2497    
2498     /* driver types */
2499     @@ -1890,12 +1894,36 @@ static int azx_resume(struct pci_dev *pci)
2500    
2501    
2502     /*
2503     + * reboot notifier for hang-up problem at power-down
2504     + */
2505     +static int azx_halt(struct notifier_block *nb, unsigned long event, void *buf)
2506     +{
2507     + struct azx *chip = container_of(nb, struct azx, reboot_notifier);
2508     + azx_stop_chip(chip);
2509     + return NOTIFY_OK;
2510     +}
2511     +
2512     +static void azx_notifier_register(struct azx *chip)
2513     +{
2514     + chip->reboot_notifier.notifier_call = azx_halt;
2515     + register_reboot_notifier(&chip->reboot_notifier);
2516     +}
2517     +
2518     +static void azx_notifier_unregister(struct azx *chip)
2519     +{
2520     + if (chip->reboot_notifier.notifier_call)
2521     + unregister_reboot_notifier(&chip->reboot_notifier);
2522     +}
2523     +
2524     +/*
2525     * destructor
2526     */
2527     static int azx_free(struct azx *chip)
2528     {
2529     int i;
2530    
2531     + azx_notifier_unregister(chip);
2532     +
2533     if (chip->initialized) {
2534     azx_clear_irq_pending(chip);
2535     for (i = 0; i < chip->num_streams; i++)
2536     @@ -2250,6 +2278,7 @@ static int __devinit azx_probe(struct pci_dev *pci,
2537     pci_set_drvdata(pci, card);
2538     chip->running = 1;
2539     power_down_all_codecs(chip);
2540     + azx_notifier_register(chip);
2541    
2542     dev++;
2543     return err;