Magellan Linux

Annotation of /trunk/kernel26-magellan/patches-2.6.31-r3/0104-2.6.31.5-all-fixes.patch

Parent Directory Parent Directory | Revision Log Revision Log


Revision 946 - (hide annotations) (download)
Thu Dec 10 13:02:09 2009 UTC (14 years, 5 months ago) by niro
File size: 84543 byte(s)
-2.6.31-magellan-r3: updated to linux-2.6.31.7

1 niro 946 diff --git a/Documentation/connector/cn_test.c b/Documentation/connector/cn_test.c
2     index 6a5be5d..473c589 100644
3     --- a/Documentation/connector/cn_test.c
4     +++ b/Documentation/connector/cn_test.c
5     @@ -32,10 +32,8 @@ static char cn_test_name[] = "cn_test";
6     static struct sock *nls;
7     static struct timer_list cn_test_timer;
8    
9     -void cn_test_callback(void *data)
10     +static void cn_test_callback(struct cn_msg *msg, struct netlink_skb_parms *nsp)
11     {
12     - struct cn_msg *msg = (struct cn_msg *)data;
13     -
14     printk("%s: %lu: idx=%x, val=%x, seq=%u, ack=%u, len=%d: %s.\n",
15     __func__, jiffies, msg->id.idx, msg->id.val,
16     msg->seq, msg->ack, msg->len, (char *)msg->data);
17     diff --git a/Documentation/connector/connector.txt b/Documentation/connector/connector.txt
18     index ad6e0ba..3e6dcc7 100644
19     --- a/Documentation/connector/connector.txt
20     +++ b/Documentation/connector/connector.txt
21     @@ -23,7 +23,7 @@ handling... Connector allows any kernelspace agents to use netlink
22     based networking for inter-process communication in a significantly
23     easier way:
24    
25     -int cn_add_callback(struct cb_id *id, char *name, void (*callback) (void *));
26     +int cn_add_callback(struct cb_id *id, char *name, void (*callback) (struct cn_msg *, struct netlink_skb_parms *));
27     void cn_netlink_send(struct cn_msg *msg, u32 __group, int gfp_mask);
28    
29     struct cb_id
30     @@ -53,15 +53,15 @@ struct cn_msg
31     Connector interfaces.
32     /*****************************************/
33    
34     -int cn_add_callback(struct cb_id *id, char *name, void (*callback) (void *));
35     +int cn_add_callback(struct cb_id *id, char *name, void (*callback) (struct cn_msg *, struct netlink_skb_parms *));
36    
37     Registers new callback with connector core.
38    
39     struct cb_id *id - unique connector's user identifier.
40     It must be registered in connector.h for legal in-kernel users.
41     char *name - connector's callback symbolic name.
42     -void (*callback) (void *) - connector's callback.
43     - Argument must be dereferenced to struct cn_msg *.
44     +void (*callback) (struct cn..) - connector's callback.
45     + cn_msg and the sender's credentials
46    
47     void cn_del_callback(struct cb_id *id);
48    
49     diff --git a/MAINTAINERS b/MAINTAINERS
50     index 2ccc21c..94138c4 100644
51     --- a/MAINTAINERS
52     +++ b/MAINTAINERS
53     @@ -1992,7 +1992,7 @@ S: Maintained
54     F: fs/*
55    
56     FINTEK F75375S HARDWARE MONITOR AND FAN CONTROLLER DRIVER
57     -M: Riku Voipio <riku.vipio@iki.fi>
58     +M: Riku Voipio <riku.voipio@iki.fi>
59     L: lm-sensors@lm-sensors.org
60     S: Maintained
61     F: drivers/hwmon/f75375s.c
62     diff --git a/Makefile b/Makefile
63     index 314a3aa..8190a1c 100644
64     --- a/Makefile
65     +++ b/Makefile
66     @@ -980,11 +980,6 @@ prepare0: archprepare FORCE
67     # All the preparing..
68     prepare: prepare0
69    
70     -# Leave this as default for preprocessing vmlinux.lds.S, which is now
71     -# done in arch/$(ARCH)/kernel/Makefile
72     -
73     -export CPPFLAGS_vmlinux.lds += -P -C -U$(ARCH)
74     -
75     # The asm symlink changes when $(ARCH) changes.
76     # Detect this and ask user to run make mrproper
77     # If asm is a stale symlink (point to dir that does not exist) remove it
78     diff --git a/arch/arm/Makefile b/arch/arm/Makefile
79     index c877d6d..41edaf2 100644
80     --- a/arch/arm/Makefile
81     +++ b/arch/arm/Makefile
82     @@ -14,7 +14,7 @@ LDFLAGS_vmlinux :=-p --no-undefined -X
83     ifeq ($(CONFIG_CPU_ENDIAN_BE8),y)
84     LDFLAGS_vmlinux += --be8
85     endif
86     -CPPFLAGS_vmlinux.lds = -DTEXT_OFFSET=$(TEXT_OFFSET)
87     +
88     OBJCOPYFLAGS :=-O binary -R .note -R .note.gnu.build-id -R .comment -S
89     GZFLAGS :=-9
90     #KBUILD_CFLAGS +=-pipe
91     diff --git a/arch/arm/kernel/Makefile b/arch/arm/kernel/Makefile
92     index ff89d0b..60be28d 100644
93     --- a/arch/arm/kernel/Makefile
94     +++ b/arch/arm/kernel/Makefile
95     @@ -2,7 +2,8 @@
96     # Makefile for the linux kernel.
97     #
98    
99     -AFLAGS_head.o := -DTEXT_OFFSET=$(TEXT_OFFSET)
100     +CPPFLAGS_vmlinux.lds := -DTEXT_OFFSET=$(TEXT_OFFSET)
101     +AFLAGS_head.o := -DTEXT_OFFSET=$(TEXT_OFFSET)
102    
103     ifdef CONFIG_DYNAMIC_FTRACE
104     CFLAGS_REMOVE_ftrace.o = -pg
105     diff --git a/arch/arm/mach-pxa/cpufreq-pxa2xx.c b/arch/arm/mach-pxa/cpufreq-pxa2xx.c
106     index 3a8ee22..983cc8c 100644
107     --- a/arch/arm/mach-pxa/cpufreq-pxa2xx.c
108     +++ b/arch/arm/mach-pxa/cpufreq-pxa2xx.c
109     @@ -155,7 +155,7 @@ MODULE_PARM_DESC(pxa255_turbo_table, "Selects the frequency table (0 = run table
110    
111     static pxa_freqs_t pxa27x_freqs[] = {
112     {104000, 104000, PXA27x_CCCR(1, 8, 2), 0, CCLKCFG2(1, 0, 1), 900000, 1705000 },
113     - {156000, 104000, PXA27x_CCCR(1, 8, 6), 0, CCLKCFG2(1, 1, 1), 1000000, 1705000 },
114     + {156000, 104000, PXA27x_CCCR(1, 8, 3), 0, CCLKCFG2(1, 0, 1), 1000000, 1705000 },
115     {208000, 208000, PXA27x_CCCR(0, 16, 2), 1, CCLKCFG2(0, 0, 1), 1180000, 1705000 },
116     {312000, 208000, PXA27x_CCCR(1, 16, 3), 1, CCLKCFG2(1, 0, 1), 1250000, 1705000 },
117     {416000, 208000, PXA27x_CCCR(1, 16, 4), 1, CCLKCFG2(1, 0, 1), 1350000, 1705000 },
118     diff --git a/arch/cris/Makefile b/arch/cris/Makefile
119     index 71e17d3..29c2ceb 100644
120     --- a/arch/cris/Makefile
121     +++ b/arch/cris/Makefile
122     @@ -42,8 +42,6 @@ LD = $(CROSS_COMPILE)ld -mcrislinux
123    
124     OBJCOPYFLAGS := -O binary -R .note -R .comment -S
125    
126     -CPPFLAGS_vmlinux.lds = -DDRAM_VIRTUAL_BASE=0x$(CONFIG_ETRAX_DRAM_VIRTUAL_BASE)
127     -
128     KBUILD_AFLAGS += -mlinux -march=$(arch-y) $(inc)
129     KBUILD_CFLAGS += -mlinux -march=$(arch-y) -pipe $(inc)
130     KBUILD_CPPFLAGS += $(inc)
131     diff --git a/arch/cris/kernel/Makefile b/arch/cris/kernel/Makefile
132     index ee7bcd4..b45640b 100644
133     --- a/arch/cris/kernel/Makefile
134     +++ b/arch/cris/kernel/Makefile
135     @@ -3,6 +3,7 @@
136     # Makefile for the linux kernel.
137     #
138    
139     +CPPFLAGS_vmlinux.lds := -DDRAM_VIRTUAL_BASE=0x$(CONFIG_ETRAX_DRAM_VIRTUAL_BASE)
140     extra-y := vmlinux.lds
141    
142     obj-y := process.o traps.o irq.o ptrace.o setup.o time.o sys_cris.o
143     diff --git a/arch/mips/Makefile b/arch/mips/Makefile
144     index 861da51..7d651d5 100644
145     --- a/arch/mips/Makefile
146     +++ b/arch/mips/Makefile
147     @@ -615,16 +615,6 @@ endif
148     cflags-y += -I$(srctree)/arch/mips/include/asm/mach-generic
149     drivers-$(CONFIG_PCI) += arch/mips/pci/
150    
151     -ifdef CONFIG_32BIT
152     -ifdef CONFIG_CPU_LITTLE_ENDIAN
153     -JIFFIES = jiffies_64
154     -else
155     -JIFFIES = jiffies_64 + 4
156     -endif
157     -else
158     -JIFFIES = jiffies_64
159     -endif
160     -
161     #
162     # Automatically detect the build format. By default we choose
163     # the elf format according to the load address.
164     @@ -648,8 +638,9 @@ ifdef CONFIG_64BIT
165     endif
166    
167     KBUILD_AFLAGS += $(cflags-y)
168     -KBUILD_CFLAGS += $(cflags-y) \
169     - -D"VMLINUX_LOAD_ADDRESS=$(load-y)"
170     +KBUILD_CFLAGS += $(cflags-y)
171     +KBUILD_CPPFLAGS += -D"VMLINUX_LOAD_ADDRESS=$(load-y)"
172     +KBUILD_CPPFLAGS += -D"DATAOFFSET=$(if $(dataoffset-y),$(dataoffset-y),0)"
173    
174     LDFLAGS += -m $(ld-emul)
175    
176     @@ -664,18 +655,6 @@ endif
177    
178     OBJCOPYFLAGS += --remove-section=.reginfo
179    
180     -#
181     -# Choosing incompatible machines durings configuration will result in
182     -# error messages during linking. Select a default linkscript if
183     -# none has been choosen above.
184     -#
185     -
186     -CPPFLAGS_vmlinux.lds := \
187     - $(KBUILD_CFLAGS) \
188     - -D"LOADADDR=$(load-y)" \
189     - -D"JIFFIES=$(JIFFIES)" \
190     - -D"DATAOFFSET=$(if $(dataoffset-y),$(dataoffset-y),0)"
191     -
192     head-y := arch/mips/kernel/head.o arch/mips/kernel/init_task.o
193    
194     libs-y += arch/mips/lib/
195     diff --git a/arch/mips/kernel/vmlinux.lds.S b/arch/mips/kernel/vmlinux.lds.S
196     index 58738c8..576f8fb 100644
197     --- a/arch/mips/kernel/vmlinux.lds.S
198     +++ b/arch/mips/kernel/vmlinux.lds.S
199     @@ -9,7 +9,16 @@ PHDRS {
200     text PT_LOAD FLAGS(7); /* RWX */
201     note PT_NOTE FLAGS(4); /* R__ */
202     }
203     -jiffies = JIFFIES;
204     +
205     +ifdef CONFIG_32BIT
206     + ifdef CONFIG_CPU_LITTLE_ENDIAN
207     + jiffies = jiffies_64;
208     + else
209     + jiffies = jiffies_64 + 4;
210     + endif
211     +else
212     + jiffies = jiffies_64;
213     +endif
214    
215     SECTIONS
216     {
217     @@ -28,7 +37,7 @@ SECTIONS
218     /* . = 0xa800000000300000; */
219     . = 0xffffffff80300000;
220     #endif
221     - . = LOADADDR;
222     + . = VMLINUX_LOAD_ADDRESS;
223     /* read-only */
224     _text = .; /* Text and read-only data */
225     .text : {
226     diff --git a/arch/powerpc/Makefile b/arch/powerpc/Makefile
227     index bc35f4e..39d44f7 100644
228     --- a/arch/powerpc/Makefile
229     +++ b/arch/powerpc/Makefile
230     @@ -158,8 +158,6 @@ drivers-$(CONFIG_OPROFILE) += arch/powerpc/oprofile/
231     # Default to zImage, override when needed
232     all: zImage
233    
234     -CPPFLAGS_vmlinux.lds := -Upowerpc
235     -
236     BOOT_TARGETS = zImage zImage.initrd uImage zImage% dtbImage% treeImage.% cuImage.% simpleImage.%
237    
238     PHONY += $(BOOT_TARGETS)
239     diff --git a/arch/sparc/Makefile b/arch/sparc/Makefile
240     index 2003ded..6c21179 100644
241     --- a/arch/sparc/Makefile
242     +++ b/arch/sparc/Makefile
243     @@ -31,7 +31,6 @@ export BITS := 32
244     #KBUILD_CFLAGS += -g -pipe -fcall-used-g5 -fcall-used-g7
245     KBUILD_CFLAGS += -m32 -pipe -mno-fpu -fcall-used-g5 -fcall-used-g7
246     KBUILD_AFLAGS += -m32
247     -CPPFLAGS_vmlinux.lds += -m32
248    
249     #LDFLAGS_vmlinux = -N -Ttext 0xf0004000
250     # Since 2.5.40, the first stage is left not btfix-ed.
251     @@ -49,9 +48,6 @@ else
252    
253     CHECKFLAGS += -D__sparc__ -D__sparc_v9__ -D__arch64__ -m64
254    
255     -# Undefine sparc when processing vmlinux.lds - it is used
256     -# And teach CPP we are doing 64 bit builds (for this case)
257     -CPPFLAGS_vmlinux.lds += -m64 -Usparc
258     LDFLAGS := -m elf64_sparc
259     export BITS := 64
260    
261     diff --git a/arch/sparc/kernel/Makefile b/arch/sparc/kernel/Makefile
262     index 475ce46..cbf5d0b 100644
263     --- a/arch/sparc/kernel/Makefile
264     +++ b/arch/sparc/kernel/Makefile
265     @@ -7,7 +7,11 @@ ccflags-y := -Werror
266    
267     extra-y := head_$(BITS).o
268     extra-y += init_task.o
269     -extra-y += vmlinux.lds
270     +
271     +# Undefine sparc when processing vmlinux.lds - it is used
272     +# And teach CPP we are doing $(BITS) builds (for this case)
273     +CPPFLAGS_vmlinux.lds := -Usparc -m$(BITS)
274     +extra-y += vmlinux.lds
275    
276     obj-$(CONFIG_SPARC32) += entry.o wof.o wuf.o
277     obj-$(CONFIG_SPARC32) += etrap_32.o
278     diff --git a/arch/um/Makefile b/arch/um/Makefile
279     index 0728def..fc633db 100644
280     --- a/arch/um/Makefile
281     +++ b/arch/um/Makefile
282     @@ -96,11 +96,10 @@ CFLAGS_NO_HARDENING := $(call cc-option, -fno-PIC,) $(call cc-option, -fno-pic,)
283     $(call cc-option, -fno-stack-protector,) \
284     $(call cc-option, -fno-stack-protector-all,)
285    
286     -CONFIG_KERNEL_STACK_ORDER ?= 2
287     -STACK_SIZE := $(shell echo $$[ 4096 * (1 << $(CONFIG_KERNEL_STACK_ORDER)) ] )
288     -
289     -CPPFLAGS_vmlinux.lds = -U$(SUBARCH) -DSTART=$(START) -DELF_ARCH=$(ELF_ARCH) \
290     - -DELF_FORMAT="$(ELF_FORMAT)" -DKERNEL_STACK_SIZE=$(STACK_SIZE)
291     +# Options used by linker script
292     +export LDS_START := $(START)
293     +export LDS_ELF_ARCH := $(ELF_ARCH)
294     +export LDS_ELF_FORMAT := $(ELF_FORMAT)
295    
296     # The wrappers will select whether using "malloc" or the kernel allocator.
297     LINK_WRAPS = -Wl,--wrap,malloc -Wl,--wrap,free -Wl,--wrap,calloc
298     diff --git a/arch/um/kernel/Makefile b/arch/um/kernel/Makefile
299     index 388ec0a..1119233 100644
300     --- a/arch/um/kernel/Makefile
301     +++ b/arch/um/kernel/Makefile
302     @@ -3,6 +3,9 @@
303     # Licensed under the GPL
304     #
305    
306     +CPPFLAGS_vmlinux.lds := -U$(SUBARCH) -DSTART=$(LDS_START) \
307     + -DELF_ARCH=$(LDS_ELF_ARCH) \
308     + -DELF_FORMAT=$(LDS_ELF_FORMAT)
309     extra-y := vmlinux.lds
310     clean-files :=
311    
312     diff --git a/arch/um/kernel/vmlinux.lds.S b/arch/um/kernel/vmlinux.lds.S
313     index f8aeb44..16e49bf 100644
314     --- a/arch/um/kernel/vmlinux.lds.S
315     +++ b/arch/um/kernel/vmlinux.lds.S
316     @@ -1,3 +1,6 @@
317     +
318     +KERNEL_STACK_SIZE = 4096 * (1 << CONFIG_KERNEL_STACK_ORDER);
319     +
320     #ifdef CONFIG_LD_SCRIPT_STATIC
321     #include "uml.lds.S"
322     #else
323     diff --git a/arch/x86/include/asm/paravirt.h b/arch/x86/include/asm/paravirt.h
324     index 4fb37c8..43b8adb 100644
325     --- a/arch/x86/include/asm/paravirt.h
326     +++ b/arch/x86/include/asm/paravirt.h
327     @@ -528,10 +528,11 @@ int paravirt_disable_iospace(void);
328     #define EXTRA_CLOBBERS
329     #define VEXTRA_CLOBBERS
330     #else /* CONFIG_X86_64 */
331     +/* [re]ax isn't an arg, but the return val */
332     #define PVOP_VCALL_ARGS \
333     unsigned long __edi = __edi, __esi = __esi, \
334     - __edx = __edx, __ecx = __ecx
335     -#define PVOP_CALL_ARGS PVOP_VCALL_ARGS, __eax
336     + __edx = __edx, __ecx = __ecx, __eax = __eax
337     +#define PVOP_CALL_ARGS PVOP_VCALL_ARGS
338    
339     #define PVOP_CALL_ARG1(x) "D" ((unsigned long)(x))
340     #define PVOP_CALL_ARG2(x) "S" ((unsigned long)(x))
341     @@ -543,6 +544,7 @@ int paravirt_disable_iospace(void);
342     "=c" (__ecx)
343     #define PVOP_CALL_CLOBBERS PVOP_VCALL_CLOBBERS, "=a" (__eax)
344    
345     +/* void functions are still allowed [re]ax for scratch */
346     #define PVOP_VCALLEE_CLOBBERS "=a" (__eax)
347     #define PVOP_CALLEE_CLOBBERS PVOP_VCALLEE_CLOBBERS
348    
349     @@ -617,8 +619,8 @@ int paravirt_disable_iospace(void);
350     VEXTRA_CLOBBERS, \
351     pre, post, ##__VA_ARGS__)
352    
353     -#define __PVOP_VCALLEESAVE(rettype, op, pre, post, ...) \
354     - ____PVOP_CALL(rettype, op.func, CLBR_RET_REG, \
355     +#define __PVOP_VCALLEESAVE(op, pre, post, ...) \
356     + ____PVOP_VCALL(op.func, CLBR_RET_REG, \
357     PVOP_VCALLEE_CLOBBERS, , \
358     pre, post, ##__VA_ARGS__)
359    
360     @@ -1565,42 +1567,22 @@ extern struct paravirt_patch_site __parainstructions[],
361    
362     static inline unsigned long __raw_local_save_flags(void)
363     {
364     - unsigned long f;
365     -
366     - asm volatile(paravirt_alt(PARAVIRT_CALL)
367     - : "=a"(f)
368     - : paravirt_type(pv_irq_ops.save_fl),
369     - paravirt_clobber(CLBR_EAX)
370     - : "memory", "cc");
371     - return f;
372     + return PVOP_CALLEE0(unsigned long, pv_irq_ops.save_fl);
373     }
374    
375     static inline void raw_local_irq_restore(unsigned long f)
376     {
377     - asm volatile(paravirt_alt(PARAVIRT_CALL)
378     - : "=a"(f)
379     - : PV_FLAGS_ARG(f),
380     - paravirt_type(pv_irq_ops.restore_fl),
381     - paravirt_clobber(CLBR_EAX)
382     - : "memory", "cc");
383     + PVOP_VCALLEE1(pv_irq_ops.restore_fl, f);
384     }
385    
386     static inline void raw_local_irq_disable(void)
387     {
388     - asm volatile(paravirt_alt(PARAVIRT_CALL)
389     - :
390     - : paravirt_type(pv_irq_ops.irq_disable),
391     - paravirt_clobber(CLBR_EAX)
392     - : "memory", "eax", "cc");
393     + PVOP_VCALLEE0(pv_irq_ops.irq_disable);
394     }
395    
396     static inline void raw_local_irq_enable(void)
397     {
398     - asm volatile(paravirt_alt(PARAVIRT_CALL)
399     - :
400     - : paravirt_type(pv_irq_ops.irq_enable),
401     - paravirt_clobber(CLBR_EAX)
402     - : "memory", "eax", "cc");
403     + PVOP_VCALLEE0(pv_irq_ops.irq_enable);
404     }
405    
406     static inline unsigned long __raw_local_irq_save(void)
407     diff --git a/arch/xtensa/kernel/Makefile b/arch/xtensa/kernel/Makefile
408     index fe3186d..6f56d95 100644
409     --- a/arch/xtensa/kernel/Makefile
410     +++ b/arch/xtensa/kernel/Makefile
411     @@ -27,7 +27,8 @@ sed-y = -e 's/(\(\.[a-z]*it\|\.ref\|\)\.text)/(\1.literal \1.text)/g' \
412     -e 's/(\(\.text\.[a-z]*\))/(\1.literal \1)/g'
413    
414     quiet_cmd__cpp_lds_S = LDS $@
415     - cmd__cpp_lds_S = $(CPP) $(cpp_flags) -D__ASSEMBLY__ $< | sed $(sed-y) >$@
416     + cmd__cpp_lds_S = $(CPP) $(cpp_flags) -P -C -Uxtensa -D__ASSEMBLY__ $< \
417     + | sed $(sed-y) >$@
418    
419     $(obj)/vmlinux.lds: $(src)/vmlinux.lds.S FORCE
420     $(call if_changed_dep,_cpp_lds_S)
421     diff --git a/drivers/char/tpm/tpm.c b/drivers/char/tpm/tpm.c
422     index b0603b2..47c2d27 100644
423     --- a/drivers/char/tpm/tpm.c
424     +++ b/drivers/char/tpm/tpm.c
425     @@ -696,8 +696,7 @@ int __tpm_pcr_read(struct tpm_chip *chip, int pcr_idx, u8 *res_buf)
426    
427     cmd.header.in = pcrread_header;
428     cmd.params.pcrread_in.pcr_idx = cpu_to_be32(pcr_idx);
429     - BUILD_BUG_ON(cmd.header.in.length > READ_PCR_RESULT_SIZE);
430     - rc = transmit_cmd(chip, &cmd, cmd.header.in.length,
431     + rc = transmit_cmd(chip, &cmd, READ_PCR_RESULT_SIZE,
432     "attempting to read a pcr value");
433    
434     if (rc == 0)
435     @@ -742,7 +741,7 @@ EXPORT_SYMBOL_GPL(tpm_pcr_read);
436     * the module usage count.
437     */
438     #define TPM_ORD_PCR_EXTEND cpu_to_be32(20)
439     -#define EXTEND_PCR_SIZE 34
440     +#define EXTEND_PCR_RESULT_SIZE 34
441     static struct tpm_input_header pcrextend_header = {
442     .tag = TPM_TAG_RQU_COMMAND,
443     .length = cpu_to_be32(34),
444     @@ -760,10 +759,9 @@ int tpm_pcr_extend(u32 chip_num, int pcr_idx, const u8 *hash)
445     return -ENODEV;
446    
447     cmd.header.in = pcrextend_header;
448     - BUILD_BUG_ON(be32_to_cpu(cmd.header.in.length) > EXTEND_PCR_SIZE);
449     cmd.params.pcrextend_in.pcr_idx = cpu_to_be32(pcr_idx);
450     memcpy(cmd.params.pcrextend_in.hash, hash, TPM_DIGEST_SIZE);
451     - rc = transmit_cmd(chip, &cmd, cmd.header.in.length,
452     + rc = transmit_cmd(chip, &cmd, EXTEND_PCR_RESULT_SIZE,
453     "attempting extend a PCR value");
454    
455     module_put(chip->dev->driver->owner);
456     diff --git a/drivers/char/tty_buffer.c b/drivers/char/tty_buffer.c
457     index 3108991..0296612 100644
458     --- a/drivers/char/tty_buffer.c
459     +++ b/drivers/char/tty_buffer.c
460     @@ -402,28 +402,26 @@ static void flush_to_ldisc(struct work_struct *work)
461     container_of(work, struct tty_struct, buf.work.work);
462     unsigned long flags;
463     struct tty_ldisc *disc;
464     - struct tty_buffer *tbuf, *head;
465     - char *char_buf;
466     - unsigned char *flag_buf;
467    
468     disc = tty_ldisc_ref(tty);
469     if (disc == NULL) /* !TTY_LDISC */
470     return;
471    
472     spin_lock_irqsave(&tty->buf.lock, flags);
473     - /* So we know a flush is running */
474     - set_bit(TTY_FLUSHING, &tty->flags);
475     - head = tty->buf.head;
476     - if (head != NULL) {
477     - tty->buf.head = NULL;
478     - for (;;) {
479     - int count = head->commit - head->read;
480     +
481     + if (!test_and_set_bit(TTY_FLUSHING, &tty->flags)) {
482     + struct tty_buffer *head;
483     + while ((head = tty->buf.head) != NULL) {
484     + int count;
485     + char *char_buf;
486     + unsigned char *flag_buf;
487     +
488     + count = head->commit - head->read;
489     if (!count) {
490     if (head->next == NULL)
491     break;
492     - tbuf = head;
493     - head = head->next;
494     - tty_buffer_free(tty, tbuf);
495     + tty->buf.head = head->next;
496     + tty_buffer_free(tty, head);
497     continue;
498     }
499     /* Ldisc or user is trying to flush the buffers
500     @@ -445,9 +443,9 @@ static void flush_to_ldisc(struct work_struct *work)
501     flag_buf, count);
502     spin_lock_irqsave(&tty->buf.lock, flags);
503     }
504     - /* Restore the queue head */
505     - tty->buf.head = head;
506     + clear_bit(TTY_FLUSHING, &tty->flags);
507     }
508     +
509     /* We may have a deferred request to flush the input buffer,
510     if so pull the chain under the lock and empty the queue */
511     if (test_bit(TTY_FLUSHPENDING, &tty->flags)) {
512     @@ -455,7 +453,6 @@ static void flush_to_ldisc(struct work_struct *work)
513     clear_bit(TTY_FLUSHPENDING, &tty->flags);
514     wake_up(&tty->read_wait);
515     }
516     - clear_bit(TTY_FLUSHING, &tty->flags);
517     spin_unlock_irqrestore(&tty->buf.lock, flags);
518    
519     tty_ldisc_deref(disc);
520     diff --git a/drivers/connector/cn_proc.c b/drivers/connector/cn_proc.c
521     index c5afc98..9ca20d0 100644
522     --- a/drivers/connector/cn_proc.c
523     +++ b/drivers/connector/cn_proc.c
524     @@ -202,9 +202,8 @@ static void cn_proc_ack(int err, int rcvd_seq, int rcvd_ack)
525     * cn_proc_mcast_ctl
526     * @data: message sent from userspace via the connector
527     */
528     -static void cn_proc_mcast_ctl(void *data)
529     +static void cn_proc_mcast_ctl(struct cn_msg *msg, struct netlink_skb_parms *nsp)
530     {
531     - struct cn_msg *msg = data;
532     enum proc_cn_mcast_op *mc_op = NULL;
533     int err = 0;
534    
535     diff --git a/drivers/connector/cn_queue.c b/drivers/connector/cn_queue.c
536     index 408c2af..210338e 100644
537     --- a/drivers/connector/cn_queue.c
538     +++ b/drivers/connector/cn_queue.c
539     @@ -78,16 +78,20 @@ void cn_queue_wrapper(struct work_struct *work)
540     struct cn_callback_entry *cbq =
541     container_of(work, struct cn_callback_entry, work);
542     struct cn_callback_data *d = &cbq->data;
543     + struct cn_msg *msg = NLMSG_DATA(nlmsg_hdr(d->skb));
544     + struct netlink_skb_parms *nsp = &NETLINK_CB(d->skb);
545    
546     - d->callback(d->callback_priv);
547     + d->callback(msg, nsp);
548    
549     - d->destruct_data(d->ddata);
550     - d->ddata = NULL;
551     + kfree_skb(d->skb);
552     + d->skb = NULL;
553    
554     kfree(d->free);
555     }
556    
557     -static struct cn_callback_entry *cn_queue_alloc_callback_entry(char *name, struct cb_id *id, void (*callback)(void *))
558     +static struct cn_callback_entry *
559     +cn_queue_alloc_callback_entry(char *name, struct cb_id *id,
560     + void (*callback)(struct cn_msg *, struct netlink_skb_parms *))
561     {
562     struct cn_callback_entry *cbq;
563    
564     @@ -120,7 +124,8 @@ int cn_cb_equal(struct cb_id *i1, struct cb_id *i2)
565     return ((i1->idx == i2->idx) && (i1->val == i2->val));
566     }
567    
568     -int cn_queue_add_callback(struct cn_queue_dev *dev, char *name, struct cb_id *id, void (*callback)(void *))
569     +int cn_queue_add_callback(struct cn_queue_dev *dev, char *name, struct cb_id *id,
570     + void (*callback)(struct cn_msg *, struct netlink_skb_parms *))
571     {
572     struct cn_callback_entry *cbq, *__cbq;
573     int found = 0;
574     diff --git a/drivers/connector/connector.c b/drivers/connector/connector.c
575     index 08b2500..f060246 100644
576     --- a/drivers/connector/connector.c
577     +++ b/drivers/connector/connector.c
578     @@ -129,21 +129,19 @@ EXPORT_SYMBOL_GPL(cn_netlink_send);
579     /*
580     * Callback helper - queues work and setup destructor for given data.
581     */
582     -static int cn_call_callback(struct cn_msg *msg, void (*destruct_data)(void *), void *data)
583     +static int cn_call_callback(struct sk_buff *skb)
584     {
585     struct cn_callback_entry *__cbq, *__new_cbq;
586     struct cn_dev *dev = &cdev;
587     + struct cn_msg *msg = NLMSG_DATA(nlmsg_hdr(skb));
588     int err = -ENODEV;
589    
590     spin_lock_bh(&dev->cbdev->queue_lock);
591     list_for_each_entry(__cbq, &dev->cbdev->queue_list, callback_entry) {
592     if (cn_cb_equal(&__cbq->id.id, &msg->id)) {
593     if (likely(!work_pending(&__cbq->work) &&
594     - __cbq->data.ddata == NULL)) {
595     - __cbq->data.callback_priv = msg;
596     -
597     - __cbq->data.ddata = data;
598     - __cbq->data.destruct_data = destruct_data;
599     + __cbq->data.skb == NULL)) {
600     + __cbq->data.skb = skb;
601    
602     if (queue_cn_work(__cbq, &__cbq->work))
603     err = 0;
604     @@ -156,10 +154,8 @@ static int cn_call_callback(struct cn_msg *msg, void (*destruct_data)(void *), v
605     __new_cbq = kzalloc(sizeof(struct cn_callback_entry), GFP_ATOMIC);
606     if (__new_cbq) {
607     d = &__new_cbq->data;
608     - d->callback_priv = msg;
609     + d->skb = skb;
610     d->callback = __cbq->data.callback;
611     - d->ddata = data;
612     - d->destruct_data = destruct_data;
613     d->free = __new_cbq;
614    
615     __new_cbq->pdev = __cbq->pdev;
616     @@ -191,7 +187,6 @@ static int cn_call_callback(struct cn_msg *msg, void (*destruct_data)(void *), v
617     */
618     static void cn_rx_skb(struct sk_buff *__skb)
619     {
620     - struct cn_msg *msg;
621     struct nlmsghdr *nlh;
622     int err;
623     struct sk_buff *skb;
624     @@ -208,8 +203,7 @@ static void cn_rx_skb(struct sk_buff *__skb)
625     return;
626     }
627    
628     - msg = NLMSG_DATA(nlh);
629     - err = cn_call_callback(msg, (void (*)(void *))kfree_skb, skb);
630     + err = cn_call_callback(skb);
631     if (err < 0)
632     kfree_skb(skb);
633     }
634     @@ -269,7 +263,8 @@ static void cn_notify(struct cb_id *id, u32 notify_event)
635     *
636     * May sleep.
637     */
638     -int cn_add_callback(struct cb_id *id, char *name, void (*callback)(void *))
639     +int cn_add_callback(struct cb_id *id, char *name,
640     + void (*callback)(struct cn_msg *, struct netlink_skb_parms *))
641     {
642     int err;
643     struct cn_dev *dev = &cdev;
644     @@ -351,9 +346,8 @@ static int cn_ctl_msg_equals(struct cn_ctl_msg *m1, struct cn_ctl_msg *m2)
645     *
646     * Used for notification of a request's processing.
647     */
648     -static void cn_callback(void *data)
649     +static void cn_callback(struct cn_msg *msg, struct netlink_skb_parms *nsp)
650     {
651     - struct cn_msg *msg = data;
652     struct cn_ctl_msg *ctl;
653     struct cn_ctl_entry *ent;
654     u32 size;
655     diff --git a/drivers/i2c/busses/i2c-amd756.c b/drivers/i2c/busses/i2c-amd756.c
656     index f7d6fe9..8f0b90e 100644
657     --- a/drivers/i2c/busses/i2c-amd756.c
658     +++ b/drivers/i2c/busses/i2c-amd756.c
659     @@ -364,7 +364,7 @@ static int __devinit amd756_probe(struct pci_dev *pdev,
660     error = acpi_check_region(amd756_ioport, SMB_IOSIZE,
661     amd756_driver.name);
662     if (error)
663     - return error;
664     + return -ENODEV;
665    
666     if (!request_region(amd756_ioport, SMB_IOSIZE, amd756_driver.name)) {
667     dev_err(&pdev->dev, "SMB region 0x%x already in use!\n",
668     diff --git a/drivers/i2c/busses/i2c-amd8111.c b/drivers/i2c/busses/i2c-amd8111.c
669     index a7c5990..5b4ad86 100644
670     --- a/drivers/i2c/busses/i2c-amd8111.c
671     +++ b/drivers/i2c/busses/i2c-amd8111.c
672     @@ -376,8 +376,10 @@ static int __devinit amd8111_probe(struct pci_dev *dev,
673     smbus->size = pci_resource_len(dev, 0);
674    
675     error = acpi_check_resource_conflict(&dev->resource[0]);
676     - if (error)
677     + if (error) {
678     + error = -ENODEV;
679     goto out_kfree;
680     + }
681    
682     if (!request_region(smbus->base, smbus->size, amd8111_driver.name)) {
683     error = -EBUSY;
684     diff --git a/drivers/i2c/busses/i2c-i801.c b/drivers/i2c/busses/i2c-i801.c
685     index 9d2c5ad..55edcfe 100644
686     --- a/drivers/i2c/busses/i2c-i801.c
687     +++ b/drivers/i2c/busses/i2c-i801.c
688     @@ -732,8 +732,10 @@ static int __devinit i801_probe(struct pci_dev *dev, const struct pci_device_id
689     }
690    
691     err = acpi_check_resource_conflict(&dev->resource[SMBBAR]);
692     - if (err)
693     + if (err) {
694     + err = -ENODEV;
695     goto exit;
696     + }
697    
698     err = pci_request_region(dev, SMBBAR, i801_driver.name);
699     if (err) {
700     diff --git a/drivers/i2c/busses/i2c-isch.c b/drivers/i2c/busses/i2c-isch.c
701     index 9f6b8e0..dba6eb0 100644
702     --- a/drivers/i2c/busses/i2c-isch.c
703     +++ b/drivers/i2c/busses/i2c-isch.c
704     @@ -281,7 +281,7 @@ static int __devinit sch_probe(struct pci_dev *dev,
705     return -ENODEV;
706     }
707     if (acpi_check_region(sch_smba, SMBIOSIZE, sch_driver.name))
708     - return -EBUSY;
709     + return -ENODEV;
710     if (!request_region(sch_smba, SMBIOSIZE, sch_driver.name)) {
711     dev_err(&dev->dev, "SMBus region 0x%x already in use!\n",
712     sch_smba);
713     diff --git a/drivers/i2c/busses/i2c-piix4.c b/drivers/i2c/busses/i2c-piix4.c
714     index 0249a7d..808e49e 100644
715     --- a/drivers/i2c/busses/i2c-piix4.c
716     +++ b/drivers/i2c/busses/i2c-piix4.c
717     @@ -168,7 +168,7 @@ static int __devinit piix4_setup(struct pci_dev *PIIX4_dev,
718     }
719    
720     if (acpi_check_region(piix4_smba, SMBIOSIZE, piix4_driver.name))
721     - return -EBUSY;
722     + return -ENODEV;
723    
724     if (!request_region(piix4_smba, SMBIOSIZE, piix4_driver.name)) {
725     dev_err(&PIIX4_dev->dev, "SMBus region 0x%x already in use!\n",
726     @@ -259,7 +259,7 @@ static int __devinit piix4_setup_sb800(struct pci_dev *PIIX4_dev,
727    
728     piix4_smba = ((smba_en_hi << 8) | smba_en_lo) & 0xffe0;
729     if (acpi_check_region(piix4_smba, SMBIOSIZE, piix4_driver.name))
730     - return -EBUSY;
731     + return -ENODEV;
732    
733     if (!request_region(piix4_smba, SMBIOSIZE, piix4_driver.name)) {
734     dev_err(&PIIX4_dev->dev, "SMBus region 0x%x already in use!\n",
735     diff --git a/drivers/i2c/busses/i2c-sis96x.c b/drivers/i2c/busses/i2c-sis96x.c
736     index 8295885..1649963 100644
737     --- a/drivers/i2c/busses/i2c-sis96x.c
738     +++ b/drivers/i2c/busses/i2c-sis96x.c
739     @@ -280,7 +280,7 @@ static int __devinit sis96x_probe(struct pci_dev *dev,
740    
741     retval = acpi_check_resource_conflict(&dev->resource[SIS96x_BAR]);
742     if (retval)
743     - return retval;
744     + return -ENODEV;
745    
746     /* Everything is happy, let's grab the memory and set things up. */
747     if (!request_region(sis96x_smbus_base, SMB_IOSIZE,
748     diff --git a/drivers/i2c/busses/i2c-viapro.c b/drivers/i2c/busses/i2c-viapro.c
749     index 54d810a..e4b1543 100644
750     --- a/drivers/i2c/busses/i2c-viapro.c
751     +++ b/drivers/i2c/busses/i2c-viapro.c
752     @@ -365,7 +365,7 @@ static int __devinit vt596_probe(struct pci_dev *pdev,
753     found:
754     error = acpi_check_region(vt596_smba, 8, vt596_driver.name);
755     if (error)
756     - return error;
757     + return -ENODEV;
758    
759     if (!request_region(vt596_smba, 8, vt596_driver.name)) {
760     dev_err(&pdev->dev, "SMBus region 0x%x already in use!\n",
761     diff --git a/drivers/macintosh/therm_adt746x.c b/drivers/macintosh/therm_adt746x.c
762     index fde377c..556f0fe 100644
763     --- a/drivers/macintosh/therm_adt746x.c
764     +++ b/drivers/macintosh/therm_adt746x.c
765     @@ -124,6 +124,8 @@ read_reg(struct thermostat* th, int reg)
766     return data;
767     }
768    
769     +static struct i2c_driver thermostat_driver;
770     +
771     static int
772     attach_thermostat(struct i2c_adapter *adapter)
773     {
774     @@ -148,7 +150,7 @@ attach_thermostat(struct i2c_adapter *adapter)
775     * Let i2c-core delete that device on driver removal.
776     * This is safe because i2c-core holds the core_lock mutex for us.
777     */
778     - list_add_tail(&client->detected, &client->driver->clients);
779     + list_add_tail(&client->detected, &thermostat_driver.clients);
780     return 0;
781     }
782    
783     diff --git a/drivers/macintosh/therm_pm72.c b/drivers/macintosh/therm_pm72.c
784     index a028598..ea32c7e 100644
785     --- a/drivers/macintosh/therm_pm72.c
786     +++ b/drivers/macintosh/therm_pm72.c
787     @@ -286,6 +286,8 @@ struct fcu_fan_table fcu_fans[] = {
788     },
789     };
790    
791     +static struct i2c_driver therm_pm72_driver;
792     +
793     /*
794     * Utility function to create an i2c_client structure and
795     * attach it to one of u3 adapters
796     @@ -318,7 +320,7 @@ static struct i2c_client *attach_i2c_chip(int id, const char *name)
797     * Let i2c-core delete that device on driver removal.
798     * This is safe because i2c-core holds the core_lock mutex for us.
799     */
800     - list_add_tail(&clt->detected, &clt->driver->clients);
801     + list_add_tail(&clt->detected, &therm_pm72_driver.clients);
802     return clt;
803     }
804    
805     diff --git a/drivers/macintosh/windfarm_lm75_sensor.c b/drivers/macintosh/windfarm_lm75_sensor.c
806     index 529886c..ed6426a 100644
807     --- a/drivers/macintosh/windfarm_lm75_sensor.c
808     +++ b/drivers/macintosh/windfarm_lm75_sensor.c
809     @@ -115,6 +115,8 @@ static int wf_lm75_probe(struct i2c_client *client,
810     return rc;
811     }
812    
813     +static struct i2c_driver wf_lm75_driver;
814     +
815     static struct i2c_client *wf_lm75_create(struct i2c_adapter *adapter,
816     u8 addr, int ds1775,
817     const char *loc)
818     @@ -157,7 +159,7 @@ static struct i2c_client *wf_lm75_create(struct i2c_adapter *adapter,
819     * Let i2c-core delete that device on driver removal.
820     * This is safe because i2c-core holds the core_lock mutex for us.
821     */
822     - list_add_tail(&client->detected, &client->driver->clients);
823     + list_add_tail(&client->detected, &wf_lm75_driver.clients);
824     return client;
825     fail:
826     return NULL;
827     diff --git a/drivers/macintosh/windfarm_max6690_sensor.c b/drivers/macintosh/windfarm_max6690_sensor.c
828     index e2a55ec..a67b349 100644
829     --- a/drivers/macintosh/windfarm_max6690_sensor.c
830     +++ b/drivers/macintosh/windfarm_max6690_sensor.c
831     @@ -88,6 +88,8 @@ static int wf_max6690_probe(struct i2c_client *client,
832     return rc;
833     }
834    
835     +static struct i2c_driver wf_max6690_driver;
836     +
837     static struct i2c_client *wf_max6690_create(struct i2c_adapter *adapter,
838     u8 addr, const char *loc)
839     {
840     @@ -119,7 +121,7 @@ static struct i2c_client *wf_max6690_create(struct i2c_adapter *adapter,
841     * Let i2c-core delete that device on driver removal.
842     * This is safe because i2c-core holds the core_lock mutex for us.
843     */
844     - list_add_tail(&client->detected, &client->driver->clients);
845     + list_add_tail(&client->detected, &wf_max6690_driver.clients);
846     return client;
847    
848     fail:
849     diff --git a/drivers/macintosh/windfarm_smu_sat.c b/drivers/macintosh/windfarm_smu_sat.c
850     index 5da729e..e20330a 100644
851     --- a/drivers/macintosh/windfarm_smu_sat.c
852     +++ b/drivers/macintosh/windfarm_smu_sat.c
853     @@ -194,6 +194,8 @@ static struct wf_sensor_ops wf_sat_ops = {
854     .owner = THIS_MODULE,
855     };
856    
857     +static struct i2c_driver wf_sat_driver;
858     +
859     static void wf_sat_create(struct i2c_adapter *adapter, struct device_node *dev)
860     {
861     struct i2c_board_info info;
862     @@ -222,7 +224,7 @@ static void wf_sat_create(struct i2c_adapter *adapter, struct device_node *dev)
863     * Let i2c-core delete that device on driver removal.
864     * This is safe because i2c-core holds the core_lock mutex for us.
865     */
866     - list_add_tail(&client->detected, &client->driver->clients);
867     + list_add_tail(&client->detected, &wf_sat_driver.clients);
868     }
869    
870     static int wf_sat_probe(struct i2c_client *client,
871     diff --git a/drivers/md/dm-log-userspace-transfer.c b/drivers/md/dm-log-userspace-transfer.c
872     index ba0edad..54abf9e 100644
873     --- a/drivers/md/dm-log-userspace-transfer.c
874     +++ b/drivers/md/dm-log-userspace-transfer.c
875     @@ -129,11 +129,13 @@ static int fill_pkg(struct cn_msg *msg, struct dm_ulog_request *tfr)
876     * This is the connector callback that delivers data
877     * that was sent from userspace.
878     */
879     -static void cn_ulog_callback(void *data)
880     +static void cn_ulog_callback(struct cn_msg *msg, struct netlink_skb_parms *nsp)
881     {
882     - struct cn_msg *msg = (struct cn_msg *)data;
883     struct dm_ulog_request *tfr = (struct dm_ulog_request *)(msg + 1);
884    
885     + if (!cap_raised(nsp->eff_cap, CAP_SYS_ADMIN))
886     + return;
887     +
888     spin_lock(&receiving_list_lock);
889     if (msg->len == 0)
890     fill_pkg(msg, NULL);
891     diff --git a/drivers/net/e1000e/82571.c b/drivers/net/e1000e/82571.c
892     index b53b40b..d1e0563 100644
893     --- a/drivers/net/e1000e/82571.c
894     +++ b/drivers/net/e1000e/82571.c
895     @@ -1803,7 +1803,7 @@ struct e1000_info e1000_82574_info = {
896     | FLAG_HAS_AMT
897     | FLAG_HAS_CTRLEXT_ON_LOAD,
898     .pba = 20,
899     - .max_hw_frame_size = ETH_FRAME_LEN + ETH_FCS_LEN,
900     + .max_hw_frame_size = DEFAULT_JUMBO,
901     .get_variants = e1000_get_variants_82571,
902     .mac_ops = &e82571_mac_ops,
903     .phy_ops = &e82_phy_ops_bm,
904     @@ -1820,7 +1820,7 @@ struct e1000_info e1000_82583_info = {
905     | FLAG_HAS_AMT
906     | FLAG_HAS_CTRLEXT_ON_LOAD,
907     .pba = 20,
908     - .max_hw_frame_size = DEFAULT_JUMBO,
909     + .max_hw_frame_size = ETH_FRAME_LEN + ETH_FCS_LEN,
910     .get_variants = e1000_get_variants_82571,
911     .mac_ops = &e82571_mac_ops,
912     .phy_ops = &e82_phy_ops_bm,
913     diff --git a/drivers/net/wireless/iwlwifi/iwl-eeprom.c b/drivers/net/wireless/iwlwifi/iwl-eeprom.c
914     index e8c0e82..eabe48a 100644
915     --- a/drivers/net/wireless/iwlwifi/iwl-eeprom.c
916     +++ b/drivers/net/wireless/iwlwifi/iwl-eeprom.c
917     @@ -335,7 +335,6 @@ static int iwl_find_otp_image(struct iwl_priv *priv,
918     u16 *validblockaddr)
919     {
920     u16 next_link_addr = 0, link_value = 0, valid_addr;
921     - int ret = 0;
922     int usedblocks = 0;
923    
924     /* set addressing mode to absolute to traverse the link list */
925     @@ -355,29 +354,29 @@ static int iwl_find_otp_image(struct iwl_priv *priv,
926     * check for more block on the link list
927     */
928     valid_addr = next_link_addr;
929     - next_link_addr = link_value;
930     + next_link_addr = link_value * sizeof(u16);
931     IWL_DEBUG_INFO(priv, "OTP blocks %d addr 0x%x\n",
932     usedblocks, next_link_addr);
933     if (iwl_read_otp_word(priv, next_link_addr, &link_value))
934     return -EINVAL;
935     if (!link_value) {
936     /*
937     - * reach the end of link list,
938     + * reach the end of link list, return success and
939     * set address point to the starting address
940     * of the image
941     */
942     - goto done;
943     + *validblockaddr = valid_addr;
944     + /* skip first 2 bytes (link list pointer) */
945     + *validblockaddr += 2;
946     + return 0;
947     }
948     /* more in the link list, continue */
949     usedblocks++;
950     - } while (usedblocks < priv->cfg->max_ll_items);
951     - /* OTP full, use last block */
952     - IWL_DEBUG_INFO(priv, "OTP is full, use last block\n");
953     -done:
954     - *validblockaddr = valid_addr;
955     - /* skip first 2 bytes (link list pointer) */
956     - *validblockaddr += 2;
957     - return ret;
958     + } while (usedblocks <= priv->cfg->max_ll_items);
959     +
960     + /* OTP has no valid blocks */
961     + IWL_DEBUG_INFO(priv, "OTP has no valid blocks\n");
962     + return -EINVAL;
963     }
964    
965     /**
966     diff --git a/drivers/pci/dmar.c b/drivers/pci/dmar.c
967     index 7b287cb..380b60e 100644
968     --- a/drivers/pci/dmar.c
969     +++ b/drivers/pci/dmar.c
970     @@ -632,20 +632,31 @@ int alloc_iommu(struct dmar_drhd_unit *drhd)
971     iommu->cap = dmar_readq(iommu->reg + DMAR_CAP_REG);
972     iommu->ecap = dmar_readq(iommu->reg + DMAR_ECAP_REG);
973    
974     + if (iommu->cap == (uint64_t)-1 && iommu->ecap == (uint64_t)-1) {
975     + /* Promote an attitude of violence to a BIOS engineer today */
976     + WARN(1, "Your BIOS is broken; DMAR reported at address %llx returns all ones!\n"
977     + "BIOS vendor: %s; Ver: %s; Product Version: %s\n",
978     + drhd->reg_base_addr,
979     + dmi_get_system_info(DMI_BIOS_VENDOR),
980     + dmi_get_system_info(DMI_BIOS_VERSION),
981     + dmi_get_system_info(DMI_PRODUCT_VERSION));
982     + goto err_unmap;
983     + }
984     +
985     #ifdef CONFIG_DMAR
986     agaw = iommu_calculate_agaw(iommu);
987     if (agaw < 0) {
988     printk(KERN_ERR
989     "Cannot get a valid agaw for iommu (seq_id = %d)\n",
990     iommu->seq_id);
991     - goto error;
992     + goto err_unmap;
993     }
994     msagaw = iommu_calculate_max_sagaw(iommu);
995     if (msagaw < 0) {
996     printk(KERN_ERR
997     "Cannot get a valid max agaw for iommu (seq_id = %d)\n",
998     iommu->seq_id);
999     - goto error;
1000     + goto err_unmap;
1001     }
1002     #endif
1003     iommu->agaw = agaw;
1004     @@ -665,7 +676,7 @@ int alloc_iommu(struct dmar_drhd_unit *drhd)
1005     }
1006    
1007     ver = readl(iommu->reg + DMAR_VER_REG);
1008     - pr_debug("IOMMU %llx: ver %d:%d cap %llx ecap %llx\n",
1009     + pr_info("IOMMU %llx: ver %d:%d cap %llx ecap %llx\n",
1010     (unsigned long long)drhd->reg_base_addr,
1011     DMAR_VER_MAJOR(ver), DMAR_VER_MINOR(ver),
1012     (unsigned long long)iommu->cap,
1013     @@ -675,7 +686,10 @@ int alloc_iommu(struct dmar_drhd_unit *drhd)
1014    
1015     drhd->iommu = iommu;
1016     return 0;
1017     -error:
1018     +
1019     + err_unmap:
1020     + iounmap(iommu->reg);
1021     + error:
1022     kfree(iommu);
1023     return -1;
1024     }
1025     diff --git a/drivers/scsi/scsi.c b/drivers/scsi/scsi.c
1026     index 2de5f3a..69397bb 100644
1027     --- a/drivers/scsi/scsi.c
1028     +++ b/drivers/scsi/scsi.c
1029     @@ -241,10 +241,7 @@ scsi_host_alloc_command(struct Scsi_Host *shost, gfp_t gfp_mask)
1030     */
1031     struct scsi_cmnd *__scsi_get_command(struct Scsi_Host *shost, gfp_t gfp_mask)
1032     {
1033     - struct scsi_cmnd *cmd;
1034     - unsigned char *buf;
1035     -
1036     - cmd = scsi_host_alloc_command(shost, gfp_mask);
1037     + struct scsi_cmnd *cmd = scsi_host_alloc_command(shost, gfp_mask);
1038    
1039     if (unlikely(!cmd)) {
1040     unsigned long flags;
1041     @@ -258,9 +255,15 @@ struct scsi_cmnd *__scsi_get_command(struct Scsi_Host *shost, gfp_t gfp_mask)
1042     spin_unlock_irqrestore(&shost->free_list_lock, flags);
1043    
1044     if (cmd) {
1045     + void *buf, *prot;
1046     +
1047     buf = cmd->sense_buffer;
1048     + prot = cmd->prot_sdb;
1049     +
1050     memset(cmd, 0, sizeof(*cmd));
1051     +
1052     cmd->sense_buffer = buf;
1053     + cmd->prot_sdb = prot;
1054     }
1055     }
1056    
1057     diff --git a/drivers/scsi/scsi_error.c b/drivers/scsi/scsi_error.c
1058     index a168935..c253e9c 100644
1059     --- a/drivers/scsi/scsi_error.c
1060     +++ b/drivers/scsi/scsi_error.c
1061     @@ -721,6 +721,9 @@ static int scsi_send_eh_cmnd(struct scsi_cmnd *scmd, unsigned char *cmnd,
1062     case NEEDS_RETRY:
1063     case FAILED:
1064     break;
1065     + case ADD_TO_MLQUEUE:
1066     + rtn = NEEDS_RETRY;
1067     + break;
1068     default:
1069     rtn = FAILED;
1070     break;
1071     diff --git a/drivers/scsi/sg.c b/drivers/scsi/sg.c
1072     index 4968c4c..dc0e3d4 100644
1073     --- a/drivers/scsi/sg.c
1074     +++ b/drivers/scsi/sg.c
1075     @@ -1708,11 +1708,6 @@ static int sg_finish_rem_req(Sg_request * srp)
1076     Sg_scatter_hold *req_schp = &srp->data;
1077    
1078     SCSI_LOG_TIMEOUT(4, printk("sg_finish_rem_req: res_used=%d\n", (int) srp->res_used));
1079     - if (srp->res_used)
1080     - sg_unlink_reserve(sfp, srp);
1081     - else
1082     - sg_remove_scat(req_schp);
1083     -
1084     if (srp->rq) {
1085     if (srp->bio)
1086     ret = blk_rq_unmap_user(srp->bio);
1087     @@ -1720,6 +1715,11 @@ static int sg_finish_rem_req(Sg_request * srp)
1088     blk_put_request(srp->rq);
1089     }
1090    
1091     + if (srp->res_used)
1092     + sg_unlink_reserve(sfp, srp);
1093     + else
1094     + sg_remove_scat(req_schp);
1095     +
1096     sg_remove_request(sfp, srp);
1097    
1098     return ret;
1099     diff --git a/drivers/staging/dst/dcore.c b/drivers/staging/dst/dcore.c
1100     index fad25b7..5546898 100644
1101     --- a/drivers/staging/dst/dcore.c
1102     +++ b/drivers/staging/dst/dcore.c
1103     @@ -846,15 +846,19 @@ static dst_command_func dst_commands[] = {
1104     /*
1105     * Configuration parser.
1106     */
1107     -static void cn_dst_callback(void *data)
1108     +static void cn_dst_callback(struct cn_msg *msg, struct netlink_skb_parms *nsp)
1109     {
1110     struct dst_ctl *ctl;
1111     - struct cn_msg *msg = data;
1112     int err;
1113     struct dst_ctl_ack ack;
1114     struct dst_node *n = NULL, *tmp;
1115     unsigned int hash;
1116    
1117     + if (!cap_raised(nsp->eff_cap, CAP_SYS_ADMIN)) {
1118     + err = -EPERM;
1119     + goto out;
1120     + }
1121     +
1122     if (msg->len < sizeof(struct dst_ctl)) {
1123     err = -EBADMSG;
1124     goto out;
1125     diff --git a/drivers/staging/pohmelfs/config.c b/drivers/staging/pohmelfs/config.c
1126     index a6eaa42..d8ec47a 100644
1127     --- a/drivers/staging/pohmelfs/config.c
1128     +++ b/drivers/staging/pohmelfs/config.c
1129     @@ -446,11 +446,13 @@ out_unlock:
1130     return err;
1131     }
1132    
1133     -static void pohmelfs_cn_callback(void *data)
1134     +static void pohmelfs_cn_callback(struct cn_msg *msg, struct netlink_skb_parms *nsp)
1135     {
1136     - struct cn_msg *msg = data;
1137     int err;
1138    
1139     + if (!cap_raised(nsp->eff_cap, CAP_SYS_ADMIN))
1140     + return;
1141     +
1142     switch (msg->flags) {
1143     case POHMELFS_FLAGS_ADD:
1144     case POHMELFS_FLAGS_DEL:
1145     diff --git a/drivers/staging/rt2860/common/cmm_data_2860.c b/drivers/staging/rt2860/common/cmm_data_2860.c
1146     index fb17355..857ff45 100644
1147     --- a/drivers/staging/rt2860/common/cmm_data_2860.c
1148     +++ b/drivers/staging/rt2860/common/cmm_data_2860.c
1149     @@ -363,6 +363,8 @@ int RtmpPCIMgmtKickOut(
1150     ULONG SwIdx = pAd->MgmtRing.TxCpuIdx;
1151    
1152     pTxD = (PTXD_STRUC) pAd->MgmtRing.Cell[SwIdx].AllocVa;
1153     + if (!pTxD)
1154     + return 0;
1155    
1156     pAd->MgmtRing.Cell[SwIdx].pNdisPacket = pPacket;
1157     pAd->MgmtRing.Cell[SwIdx].pNextNdisPacket = NULL;
1158     diff --git a/drivers/usb/serial/cp210x.c b/drivers/usb/serial/cp210x.c
1159     index b5275c4..a69457f 100644
1160     --- a/drivers/usb/serial/cp210x.c
1161     +++ b/drivers/usb/serial/cp210x.c
1162     @@ -114,6 +114,7 @@ static struct usb_device_id id_table [] = {
1163     { USB_DEVICE(0x166A, 0x0303) }, /* Clipsal 5500PCU C-Bus USB interface */
1164     { USB_DEVICE(0x16D6, 0x0001) }, /* Jablotron serial interface */
1165     { USB_DEVICE(0x18EF, 0xE00F) }, /* ELV USB-I2C-Interface */
1166     + { USB_DEVICE(0x413C, 0x9500) }, /* DW700 GPS USB interface */
1167     { } /* Terminating Entry */
1168     };
1169    
1170     diff --git a/drivers/usb/serial/digi_acceleport.c b/drivers/usb/serial/digi_acceleport.c
1171     index f480809..9bd82b4 100644
1172     --- a/drivers/usb/serial/digi_acceleport.c
1173     +++ b/drivers/usb/serial/digi_acceleport.c
1174     @@ -899,16 +899,16 @@ static void digi_rx_unthrottle(struct tty_struct *tty)
1175    
1176     spin_lock_irqsave(&priv->dp_port_lock, flags);
1177    
1178     - /* turn throttle off */
1179     - priv->dp_throttled = 0;
1180     - priv->dp_throttle_restart = 0;
1181     -
1182     /* restart read chain */
1183     if (priv->dp_throttle_restart) {
1184     port->read_urb->dev = port->serial->dev;
1185     ret = usb_submit_urb(port->read_urb, GFP_ATOMIC);
1186     }
1187    
1188     + /* turn throttle off */
1189     + priv->dp_throttled = 0;
1190     + priv->dp_throttle_restart = 0;
1191     +
1192     spin_unlock_irqrestore(&priv->dp_port_lock, flags);
1193    
1194     if (ret)
1195     diff --git a/drivers/usb/serial/ftdi_sio.c b/drivers/usb/serial/ftdi_sio.c
1196     index 0cc78f9..048b563 100644
1197     --- a/drivers/usb/serial/ftdi_sio.c
1198     +++ b/drivers/usb/serial/ftdi_sio.c
1199     @@ -76,13 +76,7 @@ struct ftdi_private {
1200     unsigned long last_dtr_rts; /* saved modem control outputs */
1201     wait_queue_head_t delta_msr_wait; /* Used for TIOCMIWAIT */
1202     char prev_status, diff_status; /* Used for TIOCMIWAIT */
1203     - __u8 rx_flags; /* receive state flags (throttling) */
1204     - spinlock_t rx_lock; /* spinlock for receive state */
1205     - struct delayed_work rx_work;
1206     struct usb_serial_port *port;
1207     - int rx_processed;
1208     - unsigned long rx_bytes;
1209     -
1210     __u16 interface; /* FT2232C, FT2232H or FT4232H port interface
1211     (0 for FT232/245) */
1212    
1213     @@ -737,10 +731,6 @@ static const char *ftdi_chip_name[] = {
1214     /* Constants for read urb and write urb */
1215     #define BUFSZ 512
1216    
1217     -/* rx_flags */
1218     -#define THROTTLED 0x01
1219     -#define ACTUALLY_THROTTLED 0x02
1220     -
1221     /* Used for TIOCMIWAIT */
1222     #define FTDI_STATUS_B0_MASK (FTDI_RS0_CTS | FTDI_RS0_DSR | FTDI_RS0_RI | FTDI_RS0_RLSD)
1223     #define FTDI_STATUS_B1_MASK (FTDI_RS_BI)
1224     @@ -764,7 +754,7 @@ static int ftdi_write_room(struct tty_struct *tty);
1225     static int ftdi_chars_in_buffer(struct tty_struct *tty);
1226     static void ftdi_write_bulk_callback(struct urb *urb);
1227     static void ftdi_read_bulk_callback(struct urb *urb);
1228     -static void ftdi_process_read(struct work_struct *work);
1229     +static void ftdi_process_read(struct usb_serial_port *port);
1230     static void ftdi_set_termios(struct tty_struct *tty,
1231     struct usb_serial_port *port, struct ktermios *old);
1232     static int ftdi_tiocmget(struct tty_struct *tty, struct file *file);
1233     @@ -1235,7 +1225,6 @@ static int set_serial_info(struct tty_struct *tty,
1234     (new_serial.flags & ASYNC_FLAGS));
1235     priv->custom_divisor = new_serial.custom_divisor;
1236    
1237     - tty->low_latency = (priv->flags & ASYNC_LOW_LATENCY) ? 1 : 0;
1238     write_latency_timer(port);
1239    
1240     check_and_exit:
1241     @@ -1528,7 +1517,6 @@ static int ftdi_sio_port_probe(struct usb_serial_port *port)
1242     }
1243    
1244     kref_init(&priv->kref);
1245     - spin_lock_init(&priv->rx_lock);
1246     spin_lock_init(&priv->tx_lock);
1247     init_waitqueue_head(&priv->delta_msr_wait);
1248     /* This will push the characters through immediately rather
1249     @@ -1550,7 +1538,6 @@ static int ftdi_sio_port_probe(struct usb_serial_port *port)
1250     port->read_urb->transfer_buffer_length = BUFSZ;
1251     }
1252    
1253     - INIT_DELAYED_WORK(&priv->rx_work, ftdi_process_read);
1254     priv->port = port;
1255    
1256     /* Free port's existing write urb and transfer buffer. */
1257     @@ -1687,6 +1674,26 @@ static int ftdi_sio_port_remove(struct usb_serial_port *port)
1258     return 0;
1259     }
1260    
1261     +static int ftdi_submit_read_urb(struct usb_serial_port *port, gfp_t mem_flags)
1262     +{
1263     + struct urb *urb = port->read_urb;
1264     + struct usb_serial *serial = port->serial;
1265     + int result;
1266     +
1267     + usb_fill_bulk_urb(urb, serial->dev,
1268     + usb_rcvbulkpipe(serial->dev,
1269     + port->bulk_in_endpointAddress),
1270     + urb->transfer_buffer,
1271     + urb->transfer_buffer_length,
1272     + ftdi_read_bulk_callback, port);
1273     + result = usb_submit_urb(urb, mem_flags);
1274     + if (result)
1275     + dev_err(&port->dev,
1276     + "%s - failed submitting read urb, error %d\n",
1277     + __func__, result);
1278     + return result;
1279     +}
1280     +
1281     static int ftdi_open(struct tty_struct *tty,
1282     struct usb_serial_port *port, struct file *filp)
1283     { /* ftdi_open */
1284     @@ -1702,12 +1709,6 @@ static int ftdi_open(struct tty_struct *tty,
1285     spin_lock_irqsave(&priv->tx_lock, flags);
1286     priv->tx_bytes = 0;
1287     spin_unlock_irqrestore(&priv->tx_lock, flags);
1288     - spin_lock_irqsave(&priv->rx_lock, flags);
1289     - priv->rx_bytes = 0;
1290     - spin_unlock_irqrestore(&priv->rx_lock, flags);
1291     -
1292     - if (tty)
1293     - tty->low_latency = (priv->flags & ASYNC_LOW_LATENCY) ? 1 : 0;
1294    
1295     write_latency_timer(port);
1296    
1297     @@ -1727,23 +1728,14 @@ static int ftdi_open(struct tty_struct *tty,
1298     ftdi_set_termios(tty, port, tty->termios);
1299    
1300     /* Not throttled */
1301     - spin_lock_irqsave(&priv->rx_lock, flags);
1302     - priv->rx_flags &= ~(THROTTLED | ACTUALLY_THROTTLED);
1303     - spin_unlock_irqrestore(&priv->rx_lock, flags);
1304     + spin_lock_irqsave(&port->lock, flags);
1305     + port->throttled = 0;
1306     + port->throttle_req = 0;
1307     + spin_unlock_irqrestore(&port->lock, flags);
1308    
1309     /* Start reading from the device */
1310     - priv->rx_processed = 0;
1311     - usb_fill_bulk_urb(port->read_urb, dev,
1312     - usb_rcvbulkpipe(dev, port->bulk_in_endpointAddress),
1313     - port->read_urb->transfer_buffer,
1314     - port->read_urb->transfer_buffer_length,
1315     - ftdi_read_bulk_callback, port);
1316     - result = usb_submit_urb(port->read_urb, GFP_KERNEL);
1317     - if (result)
1318     - dev_err(&port->dev,
1319     - "%s - failed submitting read urb, error %d\n",
1320     - __func__, result);
1321     - else
1322     + result = ftdi_submit_read_urb(port, GFP_KERNEL);
1323     + if (!result)
1324     kref_get(&priv->kref);
1325    
1326     return result;
1327     @@ -1789,10 +1781,6 @@ static void ftdi_close(struct usb_serial_port *port)
1328    
1329     dbg("%s", __func__);
1330    
1331     -
1332     - /* cancel any scheduled reading */
1333     - cancel_delayed_work_sync(&priv->rx_work);
1334     -
1335     /* shutdown our bulk read */
1336     usb_kill_urb(port->read_urb);
1337     kref_put(&priv->kref, ftdi_sio_priv_release);
1338     @@ -2015,271 +2003,121 @@ static int ftdi_chars_in_buffer(struct tty_struct *tty)
1339     return buffered;
1340     }
1341    
1342     -static void ftdi_read_bulk_callback(struct urb *urb)
1343     +static int ftdi_process_packet(struct tty_struct *tty,
1344     + struct usb_serial_port *port, struct ftdi_private *priv,
1345     + char *packet, int len)
1346     {
1347     - struct usb_serial_port *port = urb->context;
1348     - struct tty_struct *tty;
1349     - struct ftdi_private *priv;
1350     - unsigned long countread;
1351     - unsigned long flags;
1352     - int status = urb->status;
1353     -
1354     - if (urb->number_of_packets > 0) {
1355     - dev_err(&port->dev, "%s transfer_buffer_length %d "
1356     - "actual_length %d number of packets %d\n", __func__,
1357     - urb->transfer_buffer_length,
1358     - urb->actual_length, urb->number_of_packets);
1359     - dev_err(&port->dev, "%s transfer_flags %x\n", __func__,
1360     - urb->transfer_flags);
1361     - }
1362     + int i;
1363     + char status;
1364     + char flag;
1365     + char *ch;
1366    
1367     dbg("%s - port %d", __func__, port->number);
1368    
1369     - if (port->port.count <= 0)
1370     - return;
1371     -
1372     - tty = tty_port_tty_get(&port->port);
1373     - if (!tty) {
1374     - dbg("%s - bad tty pointer - exiting", __func__);
1375     - return;
1376     + if (len < 2) {
1377     + dbg("malformed packet");
1378     + return 0;
1379     }
1380    
1381     - priv = usb_get_serial_port_data(port);
1382     - if (!priv) {
1383     - dbg("%s - bad port private data pointer - exiting", __func__);
1384     - goto out;
1385     + /* Compare new line status to the old one, signal if different/
1386     + N.B. packet may be processed more than once, but differences
1387     + are only processed once. */
1388     + status = packet[0] & FTDI_STATUS_B0_MASK;
1389     + if (status != priv->prev_status) {
1390     + priv->diff_status |= status ^ priv->prev_status;
1391     + wake_up_interruptible(&priv->delta_msr_wait);
1392     + priv->prev_status = status;
1393     }
1394    
1395     - if (urb != port->read_urb)
1396     - dev_err(&port->dev, "%s - Not my urb!\n", __func__);
1397     -
1398     - if (status) {
1399     - /* This will happen at close every time so it is a dbg not an
1400     - err */
1401     - dbg("(this is ok on close) nonzero read bulk status received: %d", status);
1402     - goto out;
1403     + /*
1404     + * Although the device uses a bitmask and hence can have multiple
1405     + * errors on a packet - the order here sets the priority the error is
1406     + * returned to the tty layer.
1407     + */
1408     + flag = TTY_NORMAL;
1409     + if (packet[1] & FTDI_RS_OE) {
1410     + flag = TTY_OVERRUN;
1411     + dbg("OVERRRUN error");
1412     + }
1413     + if (packet[1] & FTDI_RS_BI) {
1414     + flag = TTY_BREAK;
1415     + dbg("BREAK received");
1416     + usb_serial_handle_break(port);
1417     + }
1418     + if (packet[1] & FTDI_RS_PE) {
1419     + flag = TTY_PARITY;
1420     + dbg("PARITY error");
1421     + }
1422     + if (packet[1] & FTDI_RS_FE) {
1423     + flag = TTY_FRAME;
1424     + dbg("FRAMING error");
1425     }
1426    
1427     - /* count data bytes, but not status bytes */
1428     - countread = urb->actual_length;
1429     - countread -= 2 * DIV_ROUND_UP(countread, priv->max_packet_size);
1430     - spin_lock_irqsave(&priv->rx_lock, flags);
1431     - priv->rx_bytes += countread;
1432     - spin_unlock_irqrestore(&priv->rx_lock, flags);
1433     -
1434     - ftdi_process_read(&priv->rx_work.work);
1435     -out:
1436     - tty_kref_put(tty);
1437     -} /* ftdi_read_bulk_callback */
1438     -
1439     + len -= 2;
1440     + if (!len)
1441     + return 0; /* status only */
1442     + ch = packet + 2;
1443     +
1444     + if (!(port->console && port->sysrq) && flag == TTY_NORMAL)
1445     + tty_insert_flip_string(tty, ch, len);
1446     + else {
1447     + for (i = 0; i < len; i++, ch++) {
1448     + if (!usb_serial_handle_sysrq_char(tty, port, *ch))
1449     + tty_insert_flip_char(tty, *ch, flag);
1450     + }
1451     + }
1452     + return len;
1453     +}
1454    
1455     -static void ftdi_process_read(struct work_struct *work)
1456     -{ /* ftdi_process_read */
1457     - struct ftdi_private *priv =
1458     - container_of(work, struct ftdi_private, rx_work.work);
1459     - struct usb_serial_port *port = priv->port;
1460     - struct urb *urb;
1461     +static void ftdi_process_read(struct usb_serial_port *port)
1462     +{
1463     + struct urb *urb = port->read_urb;
1464     struct tty_struct *tty;
1465     - char error_flag;
1466     - unsigned char *data;
1467     -
1468     + struct ftdi_private *priv = usb_get_serial_port_data(port);
1469     + char *data = (char *)urb->transfer_buffer;
1470     int i;
1471     - int result;
1472     - int need_flip;
1473     - int packet_offset;
1474     - unsigned long flags;
1475     -
1476     - dbg("%s - port %d", __func__, port->number);
1477     -
1478     - if (port->port.count <= 0)
1479     - return;
1480     + int len;
1481     + int count = 0;
1482    
1483     tty = tty_port_tty_get(&port->port);
1484     - if (!tty) {
1485     - dbg("%s - bad tty pointer - exiting", __func__);
1486     + if (!tty)
1487     return;
1488     - }
1489     -
1490     - priv = usb_get_serial_port_data(port);
1491     - if (!priv) {
1492     - dbg("%s - bad port private data pointer - exiting", __func__);
1493     - goto out;
1494     - }
1495     -
1496     - urb = port->read_urb;
1497     - if (!urb) {
1498     - dbg("%s - bad read_urb pointer - exiting", __func__);
1499     - goto out;
1500     - }
1501     -
1502     - data = urb->transfer_buffer;
1503    
1504     - if (priv->rx_processed) {
1505     - dbg("%s - already processed: %d bytes, %d remain", __func__,
1506     - priv->rx_processed,
1507     - urb->actual_length - priv->rx_processed);
1508     - } else {
1509     - /* The first two bytes of every read packet are status */
1510     - if (urb->actual_length > 2)
1511     - usb_serial_debug_data(debug, &port->dev, __func__,
1512     - urb->actual_length, data);
1513     - else
1514     - dbg("Status only: %03oo %03oo", data[0], data[1]);
1515     + for (i = 0; i < urb->actual_length; i += priv->max_packet_size) {
1516     + len = min_t(int, urb->actual_length - i, priv->max_packet_size);
1517     + count += ftdi_process_packet(tty, port, priv, &data[i], len);
1518     }
1519    
1520     -
1521     - /* TO DO -- check for hung up line and handle appropriately: */
1522     - /* send hangup */
1523     - /* See acm.c - you do a tty_hangup - eg tty_hangup(tty) */
1524     - /* if CD is dropped and the line is not CLOCAL then we should hangup */
1525     -
1526     - need_flip = 0;
1527     - for (packet_offset = priv->rx_processed;
1528     - packet_offset < urb->actual_length; packet_offset += priv->max_packet_size) {
1529     - int length;
1530     -
1531     - /* Compare new line status to the old one, signal if different/
1532     - N.B. packet may be processed more than once, but differences
1533     - are only processed once. */
1534     - char new_status = data[packet_offset + 0] &
1535     - FTDI_STATUS_B0_MASK;
1536     - if (new_status != priv->prev_status) {
1537     - priv->diff_status |=
1538     - new_status ^ priv->prev_status;
1539     - wake_up_interruptible(&priv->delta_msr_wait);
1540     - priv->prev_status = new_status;
1541     - }
1542     -
1543     - length = min_t(u32, priv->max_packet_size, urb->actual_length-packet_offset)-2;
1544     - if (length < 0) {
1545     - dev_err(&port->dev, "%s - bad packet length: %d\n",
1546     - __func__, length+2);
1547     - length = 0;
1548     - }
1549     -
1550     - if (priv->rx_flags & THROTTLED) {
1551     - dbg("%s - throttled", __func__);
1552     - break;
1553     - }
1554     - if (tty_buffer_request_room(tty, length) < length) {
1555     - /* break out & wait for throttling/unthrottling to
1556     - happen */
1557     - dbg("%s - receive room low", __func__);
1558     - break;
1559     - }
1560     -
1561     - /* Handle errors and break */
1562     - error_flag = TTY_NORMAL;
1563     - /* Although the device uses a bitmask and hence can have
1564     - multiple errors on a packet - the order here sets the
1565     - priority the error is returned to the tty layer */
1566     -
1567     - if (data[packet_offset+1] & FTDI_RS_OE) {
1568     - error_flag = TTY_OVERRUN;
1569     - dbg("OVERRRUN error");
1570     - }
1571     - if (data[packet_offset+1] & FTDI_RS_BI) {
1572     - error_flag = TTY_BREAK;
1573     - dbg("BREAK received");
1574     - usb_serial_handle_break(port);
1575     - }
1576     - if (data[packet_offset+1] & FTDI_RS_PE) {
1577     - error_flag = TTY_PARITY;
1578     - dbg("PARITY error");
1579     - }
1580     - if (data[packet_offset+1] & FTDI_RS_FE) {
1581     - error_flag = TTY_FRAME;
1582     - dbg("FRAMING error");
1583     - }
1584     - if (length > 0) {
1585     - for (i = 2; i < length+2; i++) {
1586     - /* Note that the error flag is duplicated for
1587     - every character received since we don't know
1588     - which character it applied to */
1589     - if (!usb_serial_handle_sysrq_char(tty, port,
1590     - data[packet_offset + i]))
1591     - tty_insert_flip_char(tty,
1592     - data[packet_offset + i],
1593     - error_flag);
1594     - }
1595     - need_flip = 1;
1596     - }
1597     -
1598     -#ifdef NOT_CORRECT_BUT_KEEPING_IT_FOR_NOW
1599     - /* if a parity error is detected you get status packets forever
1600     - until a character is sent without a parity error.
1601     - This doesn't work well since the application receives a
1602     - never ending stream of bad data - even though new data
1603     - hasn't been sent. Therefore I (bill) have taken this out.
1604     - However - this might make sense for framing errors and so on
1605     - so I am leaving the code in for now.
1606     - */
1607     - else {
1608     - if (error_flag != TTY_NORMAL) {
1609     - dbg("error_flag is not normal");
1610     - /* In this case it is just status - if that is
1611     - an error send a bad character */
1612     - if (tty->flip.count >= TTY_FLIPBUF_SIZE)
1613     - tty_flip_buffer_push(tty);
1614     - tty_insert_flip_char(tty, 0xff, error_flag);
1615     - need_flip = 1;
1616     - }
1617     - }
1618     -#endif
1619     - } /* "for(packet_offset=0..." */
1620     -
1621     - /* Low latency */
1622     - if (need_flip)
1623     + if (count)
1624     tty_flip_buffer_push(tty);
1625     + tty_kref_put(tty);
1626     +}
1627    
1628     - if (packet_offset < urb->actual_length) {
1629     - /* not completely processed - record progress */
1630     - priv->rx_processed = packet_offset;
1631     - dbg("%s - incomplete, %d bytes processed, %d remain",
1632     - __func__, packet_offset,
1633     - urb->actual_length - packet_offset);
1634     - /* check if we were throttled while processing */
1635     - spin_lock_irqsave(&priv->rx_lock, flags);
1636     - if (priv->rx_flags & THROTTLED) {
1637     - priv->rx_flags |= ACTUALLY_THROTTLED;
1638     - spin_unlock_irqrestore(&priv->rx_lock, flags);
1639     - dbg("%s - deferring remainder until unthrottled",
1640     - __func__);
1641     - goto out;
1642     - }
1643     - spin_unlock_irqrestore(&priv->rx_lock, flags);
1644     - /* if the port is closed stop trying to read */
1645     - if (port->port.count > 0)
1646     - /* delay processing of remainder */
1647     - schedule_delayed_work(&priv->rx_work, 1);
1648     - else
1649     - dbg("%s - port is closed", __func__);
1650     - goto out;
1651     - }
1652     -
1653     - /* urb is completely processed */
1654     - priv->rx_processed = 0;
1655     +static void ftdi_read_bulk_callback(struct urb *urb)
1656     +{
1657     + struct usb_serial_port *port = urb->context;
1658     + unsigned long flags;
1659    
1660     - /* if the port is closed stop trying to read */
1661     - if (port->port.count > 0) {
1662     - /* Continue trying to always read */
1663     - usb_fill_bulk_urb(port->read_urb, port->serial->dev,
1664     - usb_rcvbulkpipe(port->serial->dev,
1665     - port->bulk_in_endpointAddress),
1666     - port->read_urb->transfer_buffer,
1667     - port->read_urb->transfer_buffer_length,
1668     - ftdi_read_bulk_callback, port);
1669     + dbg("%s - port %d", __func__, port->number);
1670    
1671     - result = usb_submit_urb(port->read_urb, GFP_ATOMIC);
1672     - if (result)
1673     - dev_err(&port->dev,
1674     - "%s - failed resubmitting read urb, error %d\n",
1675     - __func__, result);
1676     + if (urb->status) {
1677     + dbg("%s - nonzero read bulk status received: %d",
1678     + __func__, urb->status);
1679     + return;
1680     }
1681     -out:
1682     - tty_kref_put(tty);
1683     -} /* ftdi_process_read */
1684    
1685     + usb_serial_debug_data(debug, &port->dev, __func__,
1686     + urb->actual_length, urb->transfer_buffer);
1687     + ftdi_process_read(port);
1688     +
1689     + spin_lock_irqsave(&port->lock, flags);
1690     + port->throttled = port->throttle_req;
1691     + if (!port->throttled) {
1692     + spin_unlock_irqrestore(&port->lock, flags);
1693     + ftdi_submit_read_urb(port, GFP_ATOMIC);
1694     + } else
1695     + spin_unlock_irqrestore(&port->lock, flags);
1696     +}
1697    
1698     static void ftdi_break_ctl(struct tty_struct *tty, int break_state)
1699     {
1700     @@ -2611,33 +2449,31 @@ static int ftdi_ioctl(struct tty_struct *tty, struct file *file,
1701     static void ftdi_throttle(struct tty_struct *tty)
1702     {
1703     struct usb_serial_port *port = tty->driver_data;
1704     - struct ftdi_private *priv = usb_get_serial_port_data(port);
1705     unsigned long flags;
1706    
1707     dbg("%s - port %d", __func__, port->number);
1708    
1709     - spin_lock_irqsave(&priv->rx_lock, flags);
1710     - priv->rx_flags |= THROTTLED;
1711     - spin_unlock_irqrestore(&priv->rx_lock, flags);
1712     + spin_lock_irqsave(&port->lock, flags);
1713     + port->throttle_req = 1;
1714     + spin_unlock_irqrestore(&port->lock, flags);
1715     }
1716    
1717     -
1718     -static void ftdi_unthrottle(struct tty_struct *tty)
1719     +void ftdi_unthrottle(struct tty_struct *tty)
1720     {
1721     struct usb_serial_port *port = tty->driver_data;
1722     - struct ftdi_private *priv = usb_get_serial_port_data(port);
1723     - int actually_throttled;
1724     + int was_throttled;
1725     unsigned long flags;
1726    
1727     dbg("%s - port %d", __func__, port->number);
1728    
1729     - spin_lock_irqsave(&priv->rx_lock, flags);
1730     - actually_throttled = priv->rx_flags & ACTUALLY_THROTTLED;
1731     - priv->rx_flags &= ~(THROTTLED | ACTUALLY_THROTTLED);
1732     - spin_unlock_irqrestore(&priv->rx_lock, flags);
1733     + spin_lock_irqsave(&port->lock, flags);
1734     + was_throttled = port->throttled;
1735     + port->throttled = port->throttle_req = 0;
1736     + spin_unlock_irqrestore(&port->lock, flags);
1737    
1738     - if (actually_throttled)
1739     - schedule_delayed_work(&priv->rx_work, 0);
1740     + /* Resubmit urb if throttled and open. */
1741     + if (was_throttled && test_bit(ASYNCB_INITIALIZED, &port->port.flags))
1742     + ftdi_submit_read_urb(port, GFP_KERNEL);
1743     }
1744    
1745     static int __init ftdi_init(void)
1746     diff --git a/drivers/usb/serial/generic.c b/drivers/usb/serial/generic.c
1747     index ce57f6a..7170b69 100644
1748     --- a/drivers/usb/serial/generic.c
1749     +++ b/drivers/usb/serial/generic.c
1750     @@ -530,7 +530,7 @@ void usb_serial_generic_unthrottle(struct tty_struct *tty)
1751    
1752     if (was_throttled) {
1753     /* Resume reading from device */
1754     - usb_serial_generic_resubmit_read_urb(port, GFP_KERNEL);
1755     + flush_and_resubmit_read_urb(port);
1756     }
1757     }
1758    
1759     diff --git a/drivers/usb/serial/ipaq.c b/drivers/usb/serial/ipaq.c
1760     index 2545d45..c4d0206 100644
1761     --- a/drivers/usb/serial/ipaq.c
1762     +++ b/drivers/usb/serial/ipaq.c
1763     @@ -971,6 +971,15 @@ static int ipaq_calc_num_ports(struct usb_serial *serial)
1764     static int ipaq_startup(struct usb_serial *serial)
1765     {
1766     dbg("%s", __func__);
1767     +
1768     + /* Some of the devices in ipaq_id_table[] are composite, and we
1769     + * shouldn't bind to all the interfaces. This test will rule out
1770     + * some obviously invalid possibilities.
1771     + */
1772     + if (serial->num_bulk_in < serial->num_ports ||
1773     + serial->num_bulk_out < serial->num_ports)
1774     + return -ENODEV;
1775     +
1776     if (serial->dev->actconfig->desc.bConfigurationValue != 1) {
1777     /*
1778     * FIXME: HP iPaq rx3715, possibly others, have 1 config that
1779     diff --git a/drivers/usb/serial/option.c b/drivers/usb/serial/option.c
1780     index 0101548..20b0788 100644
1781     --- a/drivers/usb/serial/option.c
1782     +++ b/drivers/usb/serial/option.c
1783     @@ -319,6 +319,7 @@ static int option_resume(struct usb_serial *serial);
1784     /* TOSHIBA PRODUCTS */
1785     #define TOSHIBA_VENDOR_ID 0x0930
1786     #define TOSHIBA_PRODUCT_HSDPA_MINICARD 0x1302
1787     +#define TOSHIBA_PRODUCT_G450 0x0d45
1788    
1789     #define ALINK_VENDOR_ID 0x1e0e
1790     #define ALINK_PRODUCT_3GU 0x9200
1791     @@ -582,6 +583,7 @@ static struct usb_device_id option_ids[] = {
1792     { USB_DEVICE(QISDA_VENDOR_ID, QISDA_PRODUCT_H21_4523) },
1793     { USB_DEVICE(QISDA_VENDOR_ID, QISDA_PRODUCT_H20_4515) },
1794     { USB_DEVICE(QISDA_VENDOR_ID, QISDA_PRODUCT_H20_4519) },
1795     + { USB_DEVICE(TOSHIBA_VENDOR_ID, TOSHIBA_PRODUCT_G450) },
1796     { USB_DEVICE(TOSHIBA_VENDOR_ID, TOSHIBA_PRODUCT_HSDPA_MINICARD ) }, /* Toshiba 3G HSDPA == Novatel Expedite EU870D MiniCard */
1797     { USB_DEVICE(ALINK_VENDOR_ID, 0x9000) },
1798     { USB_DEVICE_AND_INTERFACE_INFO(ALINK_VENDOR_ID, ALINK_PRODUCT_3GU, 0xff, 0xff, 0xff) },
1799     diff --git a/drivers/usb/serial/pl2303.c b/drivers/usb/serial/pl2303.c
1800     index 124d5ae..600097d 100644
1801     --- a/drivers/usb/serial/pl2303.c
1802     +++ b/drivers/usb/serial/pl2303.c
1803     @@ -995,13 +995,15 @@ static void pl2303_push_data(struct tty_struct *tty,
1804     /* overrun is special, not associated with a char */
1805     if (line_status & UART_OVERRUN_ERROR)
1806     tty_insert_flip_char(tty, 0, TTY_OVERRUN);
1807     - if (port->console && port->sysrq) {
1808     +
1809     + if (tty_flag == TTY_NORMAL && !(port->console && port->sysrq))
1810     + tty_insert_flip_string(tty, data, urb->actual_length);
1811     + else {
1812     int i;
1813     for (i = 0; i < urb->actual_length; ++i)
1814     if (!usb_serial_handle_sysrq_char(tty, port, data[i]))
1815     tty_insert_flip_char(tty, data[i], tty_flag);
1816     - } else
1817     - tty_insert_flip_string(tty, data, urb->actual_length);
1818     + }
1819     tty_flip_buffer_push(tty);
1820     }
1821    
1822     diff --git a/drivers/usb/serial/usb-serial.c b/drivers/usb/serial/usb-serial.c
1823     index a0702db..3292e03 100644
1824     --- a/drivers/usb/serial/usb-serial.c
1825     +++ b/drivers/usb/serial/usb-serial.c
1826     @@ -155,7 +155,8 @@ static void destroy_serial(struct kref *kref)
1827     if (serial->minor != SERIAL_TTY_NO_MINOR)
1828     return_serial(serial);
1829    
1830     - serial->type->release(serial);
1831     + if (serial->attached)
1832     + serial->type->release(serial);
1833    
1834     /* Now that nothing is using the ports, they can be freed */
1835     for (i = 0; i < serial->num_port_pointers; ++i) {
1836     @@ -1060,12 +1061,15 @@ int usb_serial_probe(struct usb_interface *interface,
1837     module_put(type->driver.owner);
1838     if (retval < 0)
1839     goto probe_error;
1840     + serial->attached = 1;
1841     if (retval > 0) {
1842     /* quietly accept this device, but don't bind to a
1843     serial port as it's about to disappear */
1844     serial->num_ports = 0;
1845     goto exit;
1846     }
1847     + } else {
1848     + serial->attached = 1;
1849     }
1850    
1851     if (get_free_serial(serial, num_ports, &minor) == NULL) {
1852     diff --git a/drivers/usb/storage/transport.c b/drivers/usb/storage/transport.c
1853     index e20dc52..589f6b4 100644
1854     --- a/drivers/usb/storage/transport.c
1855     +++ b/drivers/usb/storage/transport.c
1856     @@ -696,7 +696,7 @@ void usb_stor_invoke_transport(struct scsi_cmnd *srb, struct us_data *us)
1857     /* device supports and needs bigger sense buffer */
1858     if (us->fflags & US_FL_SANE_SENSE)
1859     sense_size = ~0;
1860     -
1861     +Retry_Sense:
1862     US_DEBUGP("Issuing auto-REQUEST_SENSE\n");
1863    
1864     scsi_eh_prep_cmnd(srb, &ses, NULL, 0, sense_size);
1865     @@ -720,6 +720,21 @@ void usb_stor_invoke_transport(struct scsi_cmnd *srb, struct us_data *us)
1866     srb->result = DID_ABORT << 16;
1867     goto Handle_Errors;
1868     }
1869     +
1870     + /* Some devices claim to support larger sense but fail when
1871     + * trying to request it. When a transport failure happens
1872     + * using US_FS_SANE_SENSE, we always retry with a standard
1873     + * (small) sense request. This fixes some USB GSM modems
1874     + */
1875     + if (temp_result == USB_STOR_TRANSPORT_FAILED &&
1876     + (us->fflags & US_FL_SANE_SENSE) &&
1877     + sense_size != US_SENSE_SIZE) {
1878     + US_DEBUGP("-- auto-sense failure, retry small sense\n");
1879     + sense_size = US_SENSE_SIZE;
1880     + goto Retry_Sense;
1881     + }
1882     +
1883     + /* Other failures */
1884     if (temp_result != USB_STOR_TRANSPORT_GOOD) {
1885     US_DEBUGP("-- auto-sense failure\n");
1886    
1887     @@ -768,17 +783,32 @@ void usb_stor_invoke_transport(struct scsi_cmnd *srb, struct us_data *us)
1888     /* set the result so the higher layers expect this data */
1889     srb->result = SAM_STAT_CHECK_CONDITION;
1890    
1891     - /* If things are really okay, then let's show that. Zero
1892     - * out the sense buffer so the higher layers won't realize
1893     - * we did an unsolicited auto-sense. */
1894     - if (result == USB_STOR_TRANSPORT_GOOD &&
1895     - /* Filemark 0, ignore EOM, ILI 0, no sense */
1896     + /* We often get empty sense data. This could indicate that
1897     + * everything worked or that there was an unspecified
1898     + * problem. We have to decide which.
1899     + */
1900     + if ( /* Filemark 0, ignore EOM, ILI 0, no sense */
1901     (srb->sense_buffer[2] & 0xaf) == 0 &&
1902     /* No ASC or ASCQ */
1903     srb->sense_buffer[12] == 0 &&
1904     srb->sense_buffer[13] == 0) {
1905     - srb->result = SAM_STAT_GOOD;
1906     - srb->sense_buffer[0] = 0x0;
1907     +
1908     + /* If things are really okay, then let's show that.
1909     + * Zero out the sense buffer so the higher layers
1910     + * won't realize we did an unsolicited auto-sense.
1911     + */
1912     + if (result == USB_STOR_TRANSPORT_GOOD) {
1913     + srb->result = SAM_STAT_GOOD;
1914     + srb->sense_buffer[0] = 0x0;
1915     +
1916     + /* If there was a problem, report an unspecified
1917     + * hardware error to prevent the higher layers from
1918     + * entering an infinite retry loop.
1919     + */
1920     + } else {
1921     + srb->result = DID_ERROR << 16;
1922     + srb->sense_buffer[2] = HARDWARE_ERROR;
1923     + }
1924     }
1925     }
1926    
1927     diff --git a/drivers/video/uvesafb.c b/drivers/video/uvesafb.c
1928     index ca5b464..e35232a 100644
1929     --- a/drivers/video/uvesafb.c
1930     +++ b/drivers/video/uvesafb.c
1931     @@ -67,12 +67,14 @@ static DEFINE_MUTEX(uvfb_lock);
1932     * find the kernel part of the task struct, copy the registers and
1933     * the buffer contents and then complete the task.
1934     */
1935     -static void uvesafb_cn_callback(void *data)
1936     +static void uvesafb_cn_callback(struct cn_msg *msg, struct netlink_skb_parms *nsp)
1937     {
1938     - struct cn_msg *msg = data;
1939     struct uvesafb_task *utask;
1940     struct uvesafb_ktask *task;
1941    
1942     + if (!cap_raised(nsp->eff_cap, CAP_SYS_ADMIN))
1943     + return;
1944     +
1945     if (msg->seq >= UVESAFB_TASKS_MAX)
1946     return;
1947    
1948     diff --git a/drivers/w1/w1_netlink.c b/drivers/w1/w1_netlink.c
1949     index fdf7285..45c126f 100644
1950     --- a/drivers/w1/w1_netlink.c
1951     +++ b/drivers/w1/w1_netlink.c
1952     @@ -306,9 +306,8 @@ static int w1_netlink_send_error(struct cn_msg *rcmsg, struct w1_netlink_msg *rm
1953     return error;
1954     }
1955    
1956     -static void w1_cn_callback(void *data)
1957     +static void w1_cn_callback(struct cn_msg *msg, struct netlink_skb_parms *nsp)
1958     {
1959     - struct cn_msg *msg = data;
1960     struct w1_netlink_msg *m = (struct w1_netlink_msg *)(msg + 1);
1961     struct w1_netlink_cmd *cmd;
1962     struct w1_slave *sl;
1963     diff --git a/fs/sysfs/file.c b/fs/sysfs/file.c
1964     index 561a9c0..f5ea468 100644
1965     --- a/fs/sysfs/file.c
1966     +++ b/fs/sysfs/file.c
1967     @@ -268,7 +268,7 @@ static int sysfs_get_open_dirent(struct sysfs_dirent *sd,
1968     struct sysfs_open_dirent *od, *new_od = NULL;
1969    
1970     retry:
1971     - spin_lock(&sysfs_open_dirent_lock);
1972     + spin_lock_irq(&sysfs_open_dirent_lock);
1973    
1974     if (!sd->s_attr.open && new_od) {
1975     sd->s_attr.open = new_od;
1976     @@ -281,7 +281,7 @@ static int sysfs_get_open_dirent(struct sysfs_dirent *sd,
1977     list_add_tail(&buffer->list, &od->buffers);
1978     }
1979    
1980     - spin_unlock(&sysfs_open_dirent_lock);
1981     + spin_unlock_irq(&sysfs_open_dirent_lock);
1982    
1983     if (od) {
1984     kfree(new_od);
1985     @@ -315,8 +315,9 @@ static void sysfs_put_open_dirent(struct sysfs_dirent *sd,
1986     struct sysfs_buffer *buffer)
1987     {
1988     struct sysfs_open_dirent *od = sd->s_attr.open;
1989     + unsigned long flags;
1990    
1991     - spin_lock(&sysfs_open_dirent_lock);
1992     + spin_lock_irqsave(&sysfs_open_dirent_lock, flags);
1993    
1994     list_del(&buffer->list);
1995     if (atomic_dec_and_test(&od->refcnt))
1996     @@ -324,7 +325,7 @@ static void sysfs_put_open_dirent(struct sysfs_dirent *sd,
1997     else
1998     od = NULL;
1999    
2000     - spin_unlock(&sysfs_open_dirent_lock);
2001     + spin_unlock_irqrestore(&sysfs_open_dirent_lock, flags);
2002    
2003     kfree(od);
2004     }
2005     @@ -456,8 +457,9 @@ static unsigned int sysfs_poll(struct file *filp, poll_table *wait)
2006     void sysfs_notify_dirent(struct sysfs_dirent *sd)
2007     {
2008     struct sysfs_open_dirent *od;
2009     + unsigned long flags;
2010    
2011     - spin_lock(&sysfs_open_dirent_lock);
2012     + spin_lock_irqsave(&sysfs_open_dirent_lock, flags);
2013    
2014     od = sd->s_attr.open;
2015     if (od) {
2016     @@ -465,7 +467,7 @@ void sysfs_notify_dirent(struct sysfs_dirent *sd)
2017     wake_up_interruptible(&od->poll);
2018     }
2019    
2020     - spin_unlock(&sysfs_open_dirent_lock);
2021     + spin_unlock_irqrestore(&sysfs_open_dirent_lock, flags);
2022     }
2023     EXPORT_SYMBOL_GPL(sysfs_notify_dirent);
2024    
2025     diff --git a/include/linux/connector.h b/include/linux/connector.h
2026     index b68d278..3a14615 100644
2027     --- a/include/linux/connector.h
2028     +++ b/include/linux/connector.h
2029     @@ -132,11 +132,8 @@ struct cn_callback_id {
2030     };
2031    
2032     struct cn_callback_data {
2033     - void (*destruct_data) (void *);
2034     - void *ddata;
2035     -
2036     - void *callback_priv;
2037     - void (*callback) (void *);
2038     + struct sk_buff *skb;
2039     + void (*callback) (struct cn_msg *, struct netlink_skb_parms *);
2040    
2041     void *free;
2042     };
2043     @@ -167,11 +164,11 @@ struct cn_dev {
2044     struct cn_queue_dev *cbdev;
2045     };
2046    
2047     -int cn_add_callback(struct cb_id *, char *, void (*callback) (void *));
2048     +int cn_add_callback(struct cb_id *, char *, void (*callback) (struct cn_msg *, struct netlink_skb_parms *));
2049     void cn_del_callback(struct cb_id *);
2050     int cn_netlink_send(struct cn_msg *, u32, gfp_t);
2051    
2052     -int cn_queue_add_callback(struct cn_queue_dev *dev, char *name, struct cb_id *id, void (*callback)(void *));
2053     +int cn_queue_add_callback(struct cn_queue_dev *dev, char *name, struct cb_id *id, void (*callback)(struct cn_msg *, struct netlink_skb_parms *));
2054     void cn_queue_del_callback(struct cn_queue_dev *dev, struct cb_id *id);
2055    
2056     int queue_cn_work(struct cn_callback_entry *cbq, struct work_struct *work);
2057     diff --git a/include/linux/usb/serial.h b/include/linux/usb/serial.h
2058     index 73f121e..20b12f3 100644
2059     --- a/include/linux/usb/serial.h
2060     +++ b/include/linux/usb/serial.h
2061     @@ -148,6 +148,7 @@ struct usb_serial {
2062     struct usb_interface *interface;
2063     unsigned char disconnected:1;
2064     unsigned char suspending:1;
2065     + unsigned char attached:1;
2066     unsigned char minor;
2067     unsigned char num_ports;
2068     unsigned char num_port_pointers;
2069     diff --git a/include/net/bluetooth/hci_core.h b/include/net/bluetooth/hci_core.h
2070     index c4ca422..25b8a03 100644
2071     --- a/include/net/bluetooth/hci_core.h
2072     +++ b/include/net/bluetooth/hci_core.h
2073     @@ -187,6 +187,7 @@ struct hci_conn {
2074     struct work_struct work_del;
2075    
2076     struct device dev;
2077     + atomic_t devref;
2078    
2079     struct hci_dev *hdev;
2080     void *l2cap_data;
2081     @@ -339,6 +340,9 @@ int hci_conn_switch_role(struct hci_conn *conn, __u8 role);
2082     void hci_conn_enter_active_mode(struct hci_conn *conn);
2083     void hci_conn_enter_sniff_mode(struct hci_conn *conn);
2084    
2085     +void hci_conn_hold_device(struct hci_conn *conn);
2086     +void hci_conn_put_device(struct hci_conn *conn);
2087     +
2088     static inline void hci_conn_hold(struct hci_conn *conn)
2089     {
2090     atomic_inc(&conn->refcnt);
2091     diff --git a/kernel/acct.c b/kernel/acct.c
2092     index 9f33910..9a4715a 100644
2093     --- a/kernel/acct.c
2094     +++ b/kernel/acct.c
2095     @@ -491,13 +491,17 @@ static void do_acct_process(struct bsd_acct_struct *acct,
2096     u64 run_time;
2097     struct timespec uptime;
2098     struct tty_struct *tty;
2099     + const struct cred *orig_cred;
2100     +
2101     + /* Perform file operations on behalf of whoever enabled accounting */
2102     + orig_cred = override_creds(file->f_cred);
2103    
2104     /*
2105     * First check to see if there is enough free_space to continue
2106     * the process accounting system.
2107     */
2108     if (!check_free_space(acct, file))
2109     - return;
2110     + goto out;
2111    
2112     /*
2113     * Fill the accounting struct with the needed info as recorded
2114     @@ -578,6 +582,8 @@ static void do_acct_process(struct bsd_acct_struct *acct,
2115     sizeof(acct_t), &file->f_pos);
2116     current->signal->rlim[RLIMIT_FSIZE].rlim_cur = flim;
2117     set_fs(fs);
2118     +out:
2119     + revert_creds(orig_cred);
2120     }
2121    
2122     /**
2123     diff --git a/kernel/futex.c b/kernel/futex.c
2124     index 2362d06..59a2f4d 100644
2125     --- a/kernel/futex.c
2126     +++ b/kernel/futex.c
2127     @@ -115,6 +115,9 @@ struct futex_q {
2128     /* rt_waiter storage for requeue_pi: */
2129     struct rt_mutex_waiter *rt_waiter;
2130    
2131     + /* The expected requeue pi target futex key: */
2132     + union futex_key *requeue_pi_key;
2133     +
2134     /* Bitset for the optional bitmasked wakeup */
2135     u32 bitset;
2136     };
2137     @@ -1089,6 +1092,10 @@ static int futex_proxy_trylock_atomic(u32 __user *pifutex,
2138     if (!top_waiter)
2139     return 0;
2140    
2141     + /* Ensure we requeue to the expected futex. */
2142     + if (!match_futex(top_waiter->requeue_pi_key, key2))
2143     + return -EINVAL;
2144     +
2145     /*
2146     * Try to take the lock for top_waiter. Set the FUTEX_WAITERS bit in
2147     * the contended case or if set_waiters is 1. The pi_state is returned
2148     @@ -1276,6 +1283,12 @@ retry_private:
2149     continue;
2150     }
2151    
2152     + /* Ensure we requeue to the expected futex for requeue_pi. */
2153     + if (requeue_pi && !match_futex(this->requeue_pi_key, &key2)) {
2154     + ret = -EINVAL;
2155     + break;
2156     + }
2157     +
2158     /*
2159     * Requeue nr_requeue waiters and possibly one more in the case
2160     * of requeue_pi if we couldn't acquire the lock atomically.
2161     @@ -1625,17 +1638,8 @@ out:
2162     static void futex_wait_queue_me(struct futex_hash_bucket *hb, struct futex_q *q,
2163     struct hrtimer_sleeper *timeout)
2164     {
2165     - queue_me(q, hb);
2166     -
2167     - /*
2168     - * There might have been scheduling since the queue_me(), as we
2169     - * cannot hold a spinlock across the get_user() in case it
2170     - * faults, and we cannot just set TASK_INTERRUPTIBLE state when
2171     - * queueing ourselves into the futex hash. This code thus has to
2172     - * rely on the futex_wake() code removing us from hash when it
2173     - * wakes us up.
2174     - */
2175     set_current_state(TASK_INTERRUPTIBLE);
2176     + queue_me(q, hb);
2177    
2178     /* Arm the timer */
2179     if (timeout) {
2180     @@ -1645,8 +1649,8 @@ static void futex_wait_queue_me(struct futex_hash_bucket *hb, struct futex_q *q,
2181     }
2182    
2183     /*
2184     - * !plist_node_empty() is safe here without any lock.
2185     - * q.lock_ptr != 0 is not safe, because of ordering against wakeup.
2186     + * If we have been removed from the hash list, then another task
2187     + * has tried to wake us, and we can skip the call to schedule().
2188     */
2189     if (likely(!plist_node_empty(&q->list))) {
2190     /*
2191     @@ -1751,6 +1755,7 @@ static int futex_wait(u32 __user *uaddr, int fshared,
2192     q.pi_state = NULL;
2193     q.bitset = bitset;
2194     q.rt_waiter = NULL;
2195     + q.requeue_pi_key = NULL;
2196    
2197     if (abs_time) {
2198     to = &timeout;
2199     @@ -1858,6 +1863,7 @@ static int futex_lock_pi(u32 __user *uaddr, int fshared,
2200    
2201     q.pi_state = NULL;
2202     q.rt_waiter = NULL;
2203     + q.requeue_pi_key = NULL;
2204     retry:
2205     q.key = FUTEX_KEY_INIT;
2206     ret = get_futex_key(uaddr, fshared, &q.key, VERIFY_WRITE);
2207     @@ -2168,15 +2174,16 @@ static int futex_wait_requeue_pi(u32 __user *uaddr, int fshared,
2208     debug_rt_mutex_init_waiter(&rt_waiter);
2209     rt_waiter.task = NULL;
2210    
2211     - q.pi_state = NULL;
2212     - q.bitset = bitset;
2213     - q.rt_waiter = &rt_waiter;
2214     -
2215     key2 = FUTEX_KEY_INIT;
2216     ret = get_futex_key(uaddr2, fshared, &key2, VERIFY_WRITE);
2217     if (unlikely(ret != 0))
2218     goto out;
2219    
2220     + q.pi_state = NULL;
2221     + q.bitset = bitset;
2222     + q.rt_waiter = &rt_waiter;
2223     + q.requeue_pi_key = &key2;
2224     +
2225     /* Prepare to wait on uaddr. */
2226     ret = futex_wait_setup(uaddr, val, fshared, &q, &hb);
2227     if (ret)
2228     diff --git a/kernel/trace/trace_events_filter.c b/kernel/trace/trace_events_filter.c
2229     index f32dc9d..a6b0d73 100644
2230     --- a/kernel/trace/trace_events_filter.c
2231     +++ b/kernel/trace/trace_events_filter.c
2232     @@ -844,8 +844,9 @@ static void postfix_clear(struct filter_parse_state *ps)
2233    
2234     while (!list_empty(&ps->postfix)) {
2235     elt = list_first_entry(&ps->postfix, struct postfix_elt, list);
2236     - kfree(elt->operand);
2237     list_del(&elt->list);
2238     + kfree(elt->operand);
2239     + kfree(elt);
2240     }
2241     }
2242    
2243     diff --git a/net/bluetooth/hci_conn.c b/net/bluetooth/hci_conn.c
2244     index fa47d5d..a975098 100644
2245     --- a/net/bluetooth/hci_conn.c
2246     +++ b/net/bluetooth/hci_conn.c
2247     @@ -246,6 +246,8 @@ struct hci_conn *hci_conn_add(struct hci_dev *hdev, int type, bdaddr_t *dst)
2248     if (hdev->notify)
2249     hdev->notify(hdev, HCI_NOTIFY_CONN_ADD);
2250    
2251     + atomic_set(&conn->devref, 0);
2252     +
2253     hci_conn_init_sysfs(conn);
2254    
2255     tasklet_enable(&hdev->tx_task);
2256     @@ -288,7 +290,7 @@ int hci_conn_del(struct hci_conn *conn)
2257    
2258     skb_queue_purge(&conn->data_q);
2259    
2260     - hci_conn_del_sysfs(conn);
2261     + hci_conn_put_device(conn);
2262    
2263     hci_dev_put(hdev);
2264    
2265     @@ -583,6 +585,19 @@ void hci_conn_check_pending(struct hci_dev *hdev)
2266     hci_dev_unlock(hdev);
2267     }
2268    
2269     +void hci_conn_hold_device(struct hci_conn *conn)
2270     +{
2271     + atomic_inc(&conn->devref);
2272     +}
2273     +EXPORT_SYMBOL(hci_conn_hold_device);
2274     +
2275     +void hci_conn_put_device(struct hci_conn *conn)
2276     +{
2277     + if (atomic_dec_and_test(&conn->devref))
2278     + hci_conn_del_sysfs(conn);
2279     +}
2280     +EXPORT_SYMBOL(hci_conn_put_device);
2281     +
2282     int hci_get_conn_list(void __user *arg)
2283     {
2284     struct hci_conn_list_req req, *cl;
2285     diff --git a/net/bluetooth/hci_event.c b/net/bluetooth/hci_event.c
2286     index 184ba0a..e99fe38 100644
2287     --- a/net/bluetooth/hci_event.c
2288     +++ b/net/bluetooth/hci_event.c
2289     @@ -887,6 +887,7 @@ static inline void hci_conn_complete_evt(struct hci_dev *hdev, struct sk_buff *s
2290     } else
2291     conn->state = BT_CONNECTED;
2292    
2293     + hci_conn_hold_device(conn);
2294     hci_conn_add_sysfs(conn);
2295    
2296     if (test_bit(HCI_AUTH, &hdev->flags))
2297     @@ -1693,6 +1694,7 @@ static inline void hci_sync_conn_complete_evt(struct hci_dev *hdev, struct sk_bu
2298     conn->handle = __le16_to_cpu(ev->handle);
2299     conn->state = BT_CONNECTED;
2300    
2301     + hci_conn_hold_device(conn);
2302     hci_conn_add_sysfs(conn);
2303     break;
2304    
2305     diff --git a/net/bluetooth/hidp/core.c b/net/bluetooth/hidp/core.c
2306     index b186768..9f1e765 100644
2307     --- a/net/bluetooth/hidp/core.c
2308     +++ b/net/bluetooth/hidp/core.c
2309     @@ -40,6 +40,7 @@
2310    
2311     #include <linux/input.h>
2312     #include <linux/hid.h>
2313     +#include <linux/hidraw.h>
2314    
2315     #include <net/bluetooth/bluetooth.h>
2316     #include <net/bluetooth/hci_core.h>
2317     @@ -92,10 +93,14 @@ static void __hidp_link_session(struct hidp_session *session)
2318     {
2319     __module_get(THIS_MODULE);
2320     list_add(&session->list, &hidp_session_list);
2321     +
2322     + hci_conn_hold_device(session->conn);
2323     }
2324    
2325     static void __hidp_unlink_session(struct hidp_session *session)
2326     {
2327     + hci_conn_put_device(session->conn);
2328     +
2329     list_del(&session->list);
2330     module_put(THIS_MODULE);
2331     }
2332     @@ -573,7 +578,11 @@ static int hidp_session(void *arg)
2333     if (session->hid) {
2334     if (session->hid->claimed & HID_CLAIMED_INPUT)
2335     hidinput_disconnect(session->hid);
2336     + if (session->hid->claimed & HID_CLAIMED_HIDRAW)
2337     + hidraw_disconnect(session->hid);
2338     +
2339     hid_destroy_device(session->hid);
2340     + session->hid = NULL;
2341     }
2342    
2343     /* Wakeup user-space polling for socket errors */
2344     @@ -601,25 +610,27 @@ static struct device *hidp_get_device(struct hidp_session *session)
2345     {
2346     bdaddr_t *src = &bt_sk(session->ctrl_sock->sk)->src;
2347     bdaddr_t *dst = &bt_sk(session->ctrl_sock->sk)->dst;
2348     + struct device *device = NULL;
2349     struct hci_dev *hdev;
2350     - struct hci_conn *conn;
2351    
2352     hdev = hci_get_route(dst, src);
2353     if (!hdev)
2354     return NULL;
2355    
2356     - conn = hci_conn_hash_lookup_ba(hdev, ACL_LINK, dst);
2357     + session->conn = hci_conn_hash_lookup_ba(hdev, ACL_LINK, dst);
2358     + if (session->conn)
2359     + device = &session->conn->dev;
2360    
2361     hci_dev_put(hdev);
2362    
2363     - return conn ? &conn->dev : NULL;
2364     + return device;
2365     }
2366    
2367     static int hidp_setup_input(struct hidp_session *session,
2368     struct hidp_connadd_req *req)
2369     {
2370     struct input_dev *input;
2371     - int i;
2372     + int err, i;
2373    
2374     input = input_allocate_device();
2375     if (!input)
2376     @@ -666,7 +677,13 @@ static int hidp_setup_input(struct hidp_session *session,
2377    
2378     input->event = hidp_input_event;
2379    
2380     - return input_register_device(input);
2381     + err = input_register_device(input);
2382     + if (err < 0) {
2383     + hci_conn_put_device(session->conn);
2384     + return err;
2385     + }
2386     +
2387     + return 0;
2388     }
2389    
2390     static int hidp_open(struct hid_device *hid)
2391     @@ -748,13 +765,11 @@ static int hidp_setup_hid(struct hidp_session *session,
2392     {
2393     struct hid_device *hid;
2394     bdaddr_t src, dst;
2395     - int ret;
2396     + int err;
2397    
2398     hid = hid_allocate_device();
2399     - if (IS_ERR(hid)) {
2400     - ret = PTR_ERR(session->hid);
2401     - goto err;
2402     - }
2403     + if (IS_ERR(hid))
2404     + return PTR_ERR(session->hid);
2405    
2406     session->hid = hid;
2407     session->req = req;
2408     @@ -776,16 +791,17 @@ static int hidp_setup_hid(struct hidp_session *session,
2409     hid->dev.parent = hidp_get_device(session);
2410     hid->ll_driver = &hidp_hid_driver;
2411    
2412     - ret = hid_add_device(hid);
2413     - if (ret)
2414     - goto err_hid;
2415     + err = hid_add_device(hid);
2416     + if (err < 0)
2417     + goto failed;
2418    
2419     return 0;
2420     -err_hid:
2421     +
2422     +failed:
2423     hid_destroy_device(hid);
2424     session->hid = NULL;
2425     -err:
2426     - return ret;
2427     +
2428     + return err;
2429     }
2430    
2431     int hidp_add_connection(struct hidp_connadd_req *req, struct socket *ctrl_sock, struct socket *intr_sock)
2432     @@ -835,13 +851,13 @@ int hidp_add_connection(struct hidp_connadd_req *req, struct socket *ctrl_sock,
2433     if (req->rd_size > 0) {
2434     err = hidp_setup_hid(session, req);
2435     if (err && err != -ENODEV)
2436     - goto err_skb;
2437     + goto purge;
2438     }
2439    
2440     if (!session->hid) {
2441     err = hidp_setup_input(session, req);
2442     if (err < 0)
2443     - goto err_skb;
2444     + goto purge;
2445     }
2446    
2447     __hidp_link_session(session);
2448     @@ -869,13 +885,20 @@ unlink:
2449    
2450     __hidp_unlink_session(session);
2451    
2452     - if (session->input)
2453     + if (session->input) {
2454     input_unregister_device(session->input);
2455     - if (session->hid)
2456     + session->input = NULL;
2457     + }
2458     +
2459     + if (session->hid) {
2460     hid_destroy_device(session->hid);
2461     -err_skb:
2462     + session->hid = NULL;
2463     + }
2464     +
2465     +purge:
2466     skb_queue_purge(&session->ctrl_transmit);
2467     skb_queue_purge(&session->intr_transmit);
2468     +
2469     failed:
2470     up_write(&hidp_session_sem);
2471    
2472     diff --git a/net/bluetooth/hidp/hidp.h b/net/bluetooth/hidp/hidp.h
2473     index e503c89..faf3d74 100644
2474     --- a/net/bluetooth/hidp/hidp.h
2475     +++ b/net/bluetooth/hidp/hidp.h
2476     @@ -126,6 +126,8 @@ int hidp_get_conninfo(struct hidp_conninfo *ci);
2477     struct hidp_session {
2478     struct list_head list;
2479    
2480     + struct hci_conn *conn;
2481     +
2482     struct socket *ctrl_sock;
2483     struct socket *intr_sock;
2484    
2485     diff --git a/net/mac80211/rx.c b/net/mac80211/rx.c
2486     index 0936fc2..9e50fdb 100644
2487     --- a/net/mac80211/rx.c
2488     +++ b/net/mac80211/rx.c
2489     @@ -2155,11 +2155,17 @@ static void __ieee80211_rx_handle_packet(struct ieee80211_hw *hw,
2490    
2491     skb = rx.skb;
2492    
2493     - list_for_each_entry_rcu(sdata, &local->interfaces, list) {
2494     + if (rx.sdata && ieee80211_is_data(hdr->frame_control)) {
2495     + rx.flags |= IEEE80211_RX_RA_MATCH;
2496     + prepares = prepare_for_handlers(rx.sdata, &rx, hdr);
2497     + if (prepares)
2498     + prev = rx.sdata;
2499     + } else list_for_each_entry_rcu(sdata, &local->interfaces, list) {
2500     if (!netif_running(sdata->dev))
2501     continue;
2502    
2503     - if (sdata->vif.type == NL80211_IFTYPE_MONITOR)
2504     + if (sdata->vif.type == NL80211_IFTYPE_MONITOR ||
2505     + sdata->vif.type == NL80211_IFTYPE_AP_VLAN)
2506     continue;
2507    
2508     rx.flags |= IEEE80211_RX_RA_MATCH;
2509     diff --git a/net/mac80211/sta_info.c b/net/mac80211/sta_info.c
2510     index a360bce..5ccfd10 100644
2511     --- a/net/mac80211/sta_info.c
2512     +++ b/net/mac80211/sta_info.c
2513     @@ -360,6 +360,7 @@ int sta_info_insert(struct sta_info *sta)
2514     u.ap);
2515    
2516     drv_sta_notify(local, &sdata->vif, STA_NOTIFY_ADD, &sta->sta);
2517     + sdata = sta->sdata;
2518     }
2519    
2520     #ifdef CONFIG_MAC80211_VERBOSE_DEBUG
2521     @@ -494,6 +495,7 @@ static void __sta_info_unlink(struct sta_info **sta)
2522    
2523     drv_sta_notify(local, &sdata->vif, STA_NOTIFY_REMOVE,
2524     &(*sta)->sta);
2525     + sdata = (*sta)->sdata;
2526     }
2527    
2528     if (ieee80211_vif_is_mesh(&sdata->vif)) {
2529     diff --git a/net/mac80211/tx.c b/net/mac80211/tx.c
2530     index 3a8922c..98576d4 100644
2531     --- a/net/mac80211/tx.c
2532     +++ b/net/mac80211/tx.c
2533     @@ -1736,7 +1736,8 @@ int ieee80211_subif_start_xmit(struct sk_buff *skb,
2534     if (!is_multicast_ether_addr(hdr.addr1)) {
2535     rcu_read_lock();
2536     sta = sta_info_get(local, hdr.addr1);
2537     - if (sta)
2538     + /* XXX: in the future, use sdata to look up the sta */
2539     + if (sta && sta->sdata == sdata)
2540     sta_flags = get_sta_flags(sta);
2541     rcu_read_unlock();
2542     }
2543     diff --git a/scripts/Makefile.build b/scripts/Makefile.build
2544     index 5c4b7a4..98112d0 100644
2545     --- a/scripts/Makefile.build
2546     +++ b/scripts/Makefile.build
2547     @@ -269,7 +269,8 @@ targets += $(extra-y) $(MAKECMDGOALS) $(always)
2548     # Linker scripts preprocessor (.lds.S -> .lds)
2549     # ---------------------------------------------------------------------------
2550     quiet_cmd_cpp_lds_S = LDS $@
2551     - cmd_cpp_lds_S = $(CPP) $(cpp_flags) -D__ASSEMBLY__ -o $@ $<
2552     + cmd_cpp_lds_S = $(CPP) $(cpp_flags) -P -C -U$(ARCH) \
2553     + -D__ASSEMBLY__ -o $@ $<
2554    
2555     $(obj)/%.lds: $(src)/%.lds.S FORCE
2556     $(call if_changed_dep,cpp_lds_S)
2557     diff --git a/sound/aoa/codecs/tas.c b/sound/aoa/codecs/tas.c
2558     index f0ebc97..1dd66dd 100644
2559     --- a/sound/aoa/codecs/tas.c
2560     +++ b/sound/aoa/codecs/tas.c
2561     @@ -897,6 +897,15 @@ static int tas_create(struct i2c_adapter *adapter,
2562     client = i2c_new_device(adapter, &info);
2563     if (!client)
2564     return -ENODEV;
2565     + /*
2566     + * We know the driver is already loaded, so the device should be
2567     + * already bound. If not it means binding failed, and then there
2568     + * is no point in keeping the device instantiated.
2569     + */
2570     + if (!client->driver) {
2571     + i2c_unregister_device(client);
2572     + return -ENODEV;
2573     + }
2574    
2575     /*
2576     * Let i2c-core delete that device on driver removal.
2577     diff --git a/sound/ppc/keywest.c b/sound/ppc/keywest.c
2578     index 835fa19..bb6819a 100644
2579     --- a/sound/ppc/keywest.c
2580     +++ b/sound/ppc/keywest.c
2581     @@ -59,6 +59,18 @@ static int keywest_attach_adapter(struct i2c_adapter *adapter)
2582     strlcpy(info.type, "keywest", I2C_NAME_SIZE);
2583     info.addr = keywest_ctx->addr;
2584     keywest_ctx->client = i2c_new_device(adapter, &info);
2585     + if (!keywest_ctx->client)
2586     + return -ENODEV;
2587     + /*
2588     + * We know the driver is already loaded, so the device should be
2589     + * already bound. If not it means binding failed, and then there
2590     + * is no point in keeping the device instantiated.
2591     + */
2592     + if (!keywest_ctx->client->driver) {
2593     + i2c_unregister_device(keywest_ctx->client);
2594     + keywest_ctx->client = NULL;
2595     + return -ENODEV;
2596     + }
2597    
2598     /*
2599     * Let i2c-core delete that device on driver removal.