Magellan Linux

Contents of /trunk/kernel26-alx/patches-2.6.33-r4/0100-2.6.33.1-all-fixes.patch

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1286 - (show annotations) (download)
Thu Feb 17 15:05:15 2011 UTC (13 years, 2 months ago) by niro
File size: 172319 byte(s)
2.6.33-alx-r4: enabled usbserial generic module for accu-chek II devices
1 diff --git a/Documentation/kernel-parameters.txt b/Documentation/kernel-parameters.txt
2 index e7848a0..e2c7487 100644
3 --- a/Documentation/kernel-parameters.txt
4 +++ b/Documentation/kernel-parameters.txt
5 @@ -2703,6 +2703,13 @@ and is between 256 and 4096 characters. It is defined in the file
6 medium is write-protected).
7 Example: quirks=0419:aaf5:rl,0421:0433:rc
8
9 + userpte=
10 + [X86] Flags controlling user PTE allocations.
11 +
12 + nohigh = do not allocate PTE pages in
13 + HIGHMEM regardless of setting
14 + of CONFIG_HIGHPTE.
15 +
16 vdso= [X86,SH]
17 vdso=2: enable compat VDSO (default with COMPAT_VDSO)
18 vdso=1: enable VDSO (default)
19 diff --git a/Documentation/laptops/thinkpad-acpi.txt b/Documentation/laptops/thinkpad-acpi.txt
20 index 75afa12..39c0a09 100644
21 --- a/Documentation/laptops/thinkpad-acpi.txt
22 +++ b/Documentation/laptops/thinkpad-acpi.txt
23 @@ -650,6 +650,10 @@ LCD, CRT or DVI (if available). The following commands are available:
24 echo expand_toggle > /proc/acpi/ibm/video
25 echo video_switch > /proc/acpi/ibm/video
26
27 +NOTE: Access to this feature is restricted to processes owning the
28 +CAP_SYS_ADMIN capability for safety reasons, as it can interact badly
29 +enough with some versions of X.org to crash it.
30 +
31 Each video output device can be enabled or disabled individually.
32 Reading /proc/acpi/ibm/video shows the status of each device.
33
34 diff --git a/arch/Kconfig b/arch/Kconfig
35 index 9d055b4..25e69f7 100644
36 --- a/arch/Kconfig
37 +++ b/arch/Kconfig
38 @@ -6,8 +6,6 @@ config OPROFILE
39 tristate "OProfile system profiling (EXPERIMENTAL)"
40 depends on PROFILING
41 depends on HAVE_OPROFILE
42 - depends on TRACING_SUPPORT
43 - select TRACING
44 select RING_BUFFER
45 select RING_BUFFER_ALLOW_SWAP
46 help
47 diff --git a/arch/x86/ia32/ia32_aout.c b/arch/x86/ia32/ia32_aout.c
48 index f9f4724..14531ab 100644
49 --- a/arch/x86/ia32/ia32_aout.c
50 +++ b/arch/x86/ia32/ia32_aout.c
51 @@ -327,7 +327,6 @@ static int load_aout_binary(struct linux_binprm *bprm, struct pt_regs *regs)
52 current->mm->free_area_cache = TASK_UNMAPPED_BASE;
53 current->mm->cached_hole_size = 0;
54
55 - current->mm->mmap = NULL;
56 install_exec_creds(bprm);
57 current->flags &= ~PF_FORKNOEXEC;
58
59 diff --git a/arch/x86/include/asm/io_apic.h b/arch/x86/include/asm/io_apic.h
60 index 7c7c16c..5f61f6e 100644
61 --- a/arch/x86/include/asm/io_apic.h
62 +++ b/arch/x86/include/asm/io_apic.h
63 @@ -160,6 +160,7 @@ extern int io_apic_get_redir_entries(int ioapic);
64 struct io_apic_irq_attr;
65 extern int io_apic_set_pci_routing(struct device *dev, int irq,
66 struct io_apic_irq_attr *irq_attr);
67 +void setup_IO_APIC_irq_extra(u32 gsi);
68 extern int (*ioapic_renumber_irq)(int ioapic, int irq);
69 extern void ioapic_init_mappings(void);
70 extern void ioapic_insert_resources(void);
71 diff --git a/arch/x86/include/asm/pgalloc.h b/arch/x86/include/asm/pgalloc.h
72 index 0e8c2a0..271de94 100644
73 --- a/arch/x86/include/asm/pgalloc.h
74 +++ b/arch/x86/include/asm/pgalloc.h
75 @@ -23,6 +23,11 @@ static inline void paravirt_release_pud(unsigned long pfn) {}
76 #endif
77
78 /*
79 + * Flags to use when allocating a user page table page.
80 + */
81 +extern gfp_t __userpte_alloc_gfp;
82 +
83 +/*
84 * Allocate and free page tables.
85 */
86 extern pgd_t *pgd_alloc(struct mm_struct *);
87 diff --git a/arch/x86/include/asm/uv/uv_hub.h b/arch/x86/include/asm/uv/uv_hub.h
88 index 40be813..14cc74b 100644
89 --- a/arch/x86/include/asm/uv/uv_hub.h
90 +++ b/arch/x86/include/asm/uv/uv_hub.h
91 @@ -329,7 +329,8 @@ static inline unsigned long uv_read_global_mmr64(int pnode, unsigned long offset
92 */
93 static inline unsigned long uv_global_gru_mmr_address(int pnode, unsigned long offset)
94 {
95 - return UV_GLOBAL_GRU_MMR_BASE | offset | (pnode << uv_hub_info->m_val);
96 + return UV_GLOBAL_GRU_MMR_BASE | offset |
97 + ((unsigned long)pnode << uv_hub_info->m_val);
98 }
99
100 static inline void uv_write_global_mmr8(int pnode, unsigned long offset, unsigned char val)
101 diff --git a/arch/x86/include/asm/vmx.h b/arch/x86/include/asm/vmx.h
102 index 2b49454..8f6b011 100644
103 --- a/arch/x86/include/asm/vmx.h
104 +++ b/arch/x86/include/asm/vmx.h
105 @@ -251,6 +251,7 @@ enum vmcs_field {
106 #define EXIT_REASON_MSR_READ 31
107 #define EXIT_REASON_MSR_WRITE 32
108 #define EXIT_REASON_MWAIT_INSTRUCTION 36
109 +#define EXIT_REASON_MONITOR_INSTRUCTION 39
110 #define EXIT_REASON_PAUSE_INSTRUCTION 40
111 #define EXIT_REASON_MCE_DURING_VMENTRY 41
112 #define EXIT_REASON_TPR_BELOW_THRESHOLD 43
113 diff --git a/arch/x86/kernel/acpi/boot.c b/arch/x86/kernel/acpi/boot.c
114 index af1c583..0a2b21a 100644
115 --- a/arch/x86/kernel/acpi/boot.c
116 +++ b/arch/x86/kernel/acpi/boot.c
117 @@ -446,6 +446,12 @@ void __init acpi_pic_sci_set_trigger(unsigned int irq, u16 trigger)
118 int acpi_gsi_to_irq(u32 gsi, unsigned int *irq)
119 {
120 *irq = gsi;
121 +
122 +#ifdef CONFIG_X86_IO_APIC
123 + if (acpi_irq_model == ACPI_IRQ_MODEL_IOAPIC)
124 + setup_IO_APIC_irq_extra(gsi);
125 +#endif
126 +
127 return 0;
128 }
129
130 @@ -473,7 +479,8 @@ int acpi_register_gsi(struct device *dev, u32 gsi, int trigger, int polarity)
131 plat_gsi = mp_register_gsi(dev, gsi, trigger, polarity);
132 }
133 #endif
134 - acpi_gsi_to_irq(plat_gsi, &irq);
135 + irq = plat_gsi;
136 +
137 return irq;
138 }
139
140 diff --git a/arch/x86/kernel/apic/io_apic.c b/arch/x86/kernel/apic/io_apic.c
141 index 53243ca..be37059 100644
142 --- a/arch/x86/kernel/apic/io_apic.c
143 +++ b/arch/x86/kernel/apic/io_apic.c
144 @@ -1539,6 +1539,56 @@ static void __init setup_IO_APIC_irqs(void)
145 }
146
147 /*
148 + * for the gsit that is not in first ioapic
149 + * but could not use acpi_register_gsi()
150 + * like some special sci in IBM x3330
151 + */
152 +void setup_IO_APIC_irq_extra(u32 gsi)
153 +{
154 + int apic_id = 0, pin, idx, irq;
155 + int node = cpu_to_node(boot_cpu_id);
156 + struct irq_desc *desc;
157 + struct irq_cfg *cfg;
158 +
159 + /*
160 + * Convert 'gsi' to 'ioapic.pin'.
161 + */
162 + apic_id = mp_find_ioapic(gsi);
163 + if (apic_id < 0)
164 + return;
165 +
166 + pin = mp_find_ioapic_pin(apic_id, gsi);
167 + idx = find_irq_entry(apic_id, pin, mp_INT);
168 + if (idx == -1)
169 + return;
170 +
171 + irq = pin_2_irq(idx, apic_id, pin);
172 +#ifdef CONFIG_SPARSE_IRQ
173 + desc = irq_to_desc(irq);
174 + if (desc)
175 + return;
176 +#endif
177 + desc = irq_to_desc_alloc_node(irq, node);
178 + if (!desc) {
179 + printk(KERN_INFO "can not get irq_desc for %d\n", irq);
180 + return;
181 + }
182 +
183 + cfg = desc->chip_data;
184 + add_pin_to_irq_node(cfg, node, apic_id, pin);
185 +
186 + if (test_bit(pin, mp_ioapic_routing[apic_id].pin_programmed)) {
187 + pr_debug("Pin %d-%d already programmed\n",
188 + mp_ioapics[apic_id].apicid, pin);
189 + return;
190 + }
191 + set_bit(pin, mp_ioapic_routing[apic_id].pin_programmed);
192 +
193 + setup_IO_APIC_irq(apic_id, pin, irq, desc,
194 + irq_trigger(idx), irq_polarity(idx));
195 +}
196 +
197 +/*
198 * Set up the timer pin, possibly with the 8259A-master behind.
199 */
200 static void __init setup_timer_IRQ0_pin(unsigned int apic_id, unsigned int pin,
201 @@ -3228,12 +3278,9 @@ unsigned int create_irq_nr(unsigned int irq_want, int node)
202 }
203 spin_unlock_irqrestore(&vector_lock, flags);
204
205 - if (irq > 0) {
206 - dynamic_irq_init(irq);
207 - /* restore it, in case dynamic_irq_init clear it */
208 - if (desc_new)
209 - desc_new->chip_data = cfg_new;
210 - }
211 + if (irq > 0)
212 + dynamic_irq_init_keep_chip_data(irq);
213 +
214 return irq;
215 }
216
217 @@ -3256,17 +3303,12 @@ void destroy_irq(unsigned int irq)
218 {
219 unsigned long flags;
220 struct irq_cfg *cfg;
221 - struct irq_desc *desc;
222
223 - /* store it, in case dynamic_irq_cleanup clear it */
224 - desc = irq_to_desc(irq);
225 - cfg = desc->chip_data;
226 - dynamic_irq_cleanup(irq);
227 - /* connect back irq_cfg */
228 - desc->chip_data = cfg;
229 + dynamic_irq_cleanup_keep_chip_data(irq);
230
231 free_irte(irq);
232 spin_lock_irqsave(&vector_lock, flags);
233 + cfg = irq_to_desc(irq)->chip_data;
234 __clear_irq_vector(irq, cfg);
235 spin_unlock_irqrestore(&vector_lock, flags);
236 }
237 diff --git a/arch/x86/kernel/reboot.c b/arch/x86/kernel/reboot.c
238 index 704bddc..8e1aac8 100644
239 --- a/arch/x86/kernel/reboot.c
240 +++ b/arch/x86/kernel/reboot.c
241 @@ -461,6 +461,14 @@ static struct dmi_system_id __initdata pci_reboot_dmi_table[] = {
242 DMI_MATCH(DMI_PRODUCT_NAME, "Macmini3,1"),
243 },
244 },
245 + { /* Handle problems with rebooting on the iMac9,1. */
246 + .callback = set_pci_reboot,
247 + .ident = "Apple iMac9,1",
248 + .matches = {
249 + DMI_MATCH(DMI_SYS_VENDOR, "Apple Inc."),
250 + DMI_MATCH(DMI_PRODUCT_NAME, "iMac9,1"),
251 + },
252 + },
253 { }
254 };
255
256 diff --git a/arch/x86/kvm/emulate.c b/arch/x86/kvm/emulate.c
257 index 7e8faea..c998d27 100644
258 --- a/arch/x86/kvm/emulate.c
259 +++ b/arch/x86/kvm/emulate.c
260 @@ -76,6 +76,7 @@
261 #define GroupDual (1<<15) /* Alternate decoding of mod == 3 */
262 #define GroupMask 0xff /* Group number stored in bits 0:7 */
263 /* Misc flags */
264 +#define Priv (1<<27) /* instruction generates #GP if current CPL != 0 */
265 #define No64 (1<<28)
266 /* Source 2 operand type */
267 #define Src2None (0<<29)
268 @@ -88,6 +89,7 @@
269 enum {
270 Group1_80, Group1_81, Group1_82, Group1_83,
271 Group1A, Group3_Byte, Group3, Group4, Group5, Group7,
272 + Group8, Group9,
273 };
274
275 static u32 opcode_table[256] = {
276 @@ -210,7 +212,7 @@ static u32 opcode_table[256] = {
277 SrcNone | ByteOp | ImplicitOps, SrcNone | ImplicitOps,
278 /* 0xF0 - 0xF7 */
279 0, 0, 0, 0,
280 - ImplicitOps, ImplicitOps, Group | Group3_Byte, Group | Group3,
281 + ImplicitOps | Priv, ImplicitOps, Group | Group3_Byte, Group | Group3,
282 /* 0xF8 - 0xFF */
283 ImplicitOps, 0, ImplicitOps, ImplicitOps,
284 ImplicitOps, ImplicitOps, Group | Group4, Group | Group5,
285 @@ -218,16 +220,20 @@ static u32 opcode_table[256] = {
286
287 static u32 twobyte_table[256] = {
288 /* 0x00 - 0x0F */
289 - 0, Group | GroupDual | Group7, 0, 0, 0, ImplicitOps, ImplicitOps, 0,
290 - ImplicitOps, ImplicitOps, 0, 0, 0, ImplicitOps | ModRM, 0, 0,
291 + 0, Group | GroupDual | Group7, 0, 0,
292 + 0, ImplicitOps, ImplicitOps | Priv, 0,
293 + ImplicitOps | Priv, ImplicitOps | Priv, 0, 0,
294 + 0, ImplicitOps | ModRM, 0, 0,
295 /* 0x10 - 0x1F */
296 0, 0, 0, 0, 0, 0, 0, 0, ImplicitOps | ModRM, 0, 0, 0, 0, 0, 0, 0,
297 /* 0x20 - 0x2F */
298 - ModRM | ImplicitOps, ModRM, ModRM | ImplicitOps, ModRM, 0, 0, 0, 0,
299 + ModRM | ImplicitOps | Priv, ModRM | Priv,
300 + ModRM | ImplicitOps | Priv, ModRM | Priv,
301 + 0, 0, 0, 0,
302 0, 0, 0, 0, 0, 0, 0, 0,
303 /* 0x30 - 0x3F */
304 - ImplicitOps, 0, ImplicitOps, 0,
305 - ImplicitOps, ImplicitOps, 0, 0,
306 + ImplicitOps | Priv, 0, ImplicitOps | Priv, 0,
307 + ImplicitOps, ImplicitOps | Priv, 0, 0,
308 0, 0, 0, 0, 0, 0, 0, 0,
309 /* 0x40 - 0x47 */
310 DstReg | SrcMem | ModRM | Mov, DstReg | SrcMem | ModRM | Mov,
311 @@ -267,11 +273,12 @@ static u32 twobyte_table[256] = {
312 0, 0, ByteOp | DstReg | SrcMem | ModRM | Mov,
313 DstReg | SrcMem16 | ModRM | Mov,
314 /* 0xB8 - 0xBF */
315 - 0, 0, DstMem | SrcImmByte | ModRM, DstMem | SrcReg | ModRM | BitOp,
316 + 0, 0, Group | Group8, DstMem | SrcReg | ModRM | BitOp,
317 0, 0, ByteOp | DstReg | SrcMem | ModRM | Mov,
318 DstReg | SrcMem16 | ModRM | Mov,
319 /* 0xC0 - 0xCF */
320 - 0, 0, 0, DstMem | SrcReg | ModRM | Mov, 0, 0, 0, ImplicitOps | ModRM,
321 + 0, 0, 0, DstMem | SrcReg | ModRM | Mov,
322 + 0, 0, 0, Group | GroupDual | Group9,
323 0, 0, 0, 0, 0, 0, 0, 0,
324 /* 0xD0 - 0xDF */
325 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
326 @@ -320,16 +327,24 @@ static u32 group_table[] = {
327 SrcMem | ModRM | Stack, 0,
328 SrcMem | ModRM | Stack, 0, SrcMem | ModRM | Stack, 0,
329 [Group7*8] =
330 - 0, 0, ModRM | SrcMem, ModRM | SrcMem,
331 + 0, 0, ModRM | SrcMem | Priv, ModRM | SrcMem | Priv,
332 SrcNone | ModRM | DstMem | Mov, 0,
333 - SrcMem16 | ModRM | Mov, SrcMem | ModRM | ByteOp,
334 + SrcMem16 | ModRM | Mov | Priv, SrcMem | ModRM | ByteOp | Priv,
335 + [Group8*8] =
336 + 0, 0, 0, 0,
337 + DstMem | SrcImmByte | ModRM, DstMem | SrcImmByte | ModRM,
338 + DstMem | SrcImmByte | ModRM, DstMem | SrcImmByte | ModRM,
339 + [Group9*8] =
340 + 0, ImplicitOps | ModRM, 0, 0, 0, 0, 0, 0,
341 };
342
343 static u32 group2_table[] = {
344 [Group7*8] =
345 - SrcNone | ModRM, 0, 0, SrcNone | ModRM,
346 + SrcNone | ModRM | Priv, 0, 0, SrcNone | ModRM,
347 SrcNone | ModRM | DstMem | Mov, 0,
348 SrcMem16 | ModRM | Mov, 0,
349 + [Group9*8] =
350 + 0, 0, 0, 0, 0, 0, 0, 0,
351 };
352
353 /* EFLAGS bit definitions. */
354 @@ -1640,12 +1655,6 @@ emulate_sysexit(struct x86_emulate_ctxt *ctxt)
355 return -1;
356 }
357
358 - /* sysexit must be called from CPL 0 */
359 - if (kvm_x86_ops->get_cpl(ctxt->vcpu) != 0) {
360 - kvm_inject_gp(ctxt->vcpu, 0);
361 - return -1;
362 - }
363 -
364 setup_syscalls_segments(ctxt, &cs, &ss);
365
366 if ((c->rex_prefix & 0x8) != 0x0)
367 @@ -1709,6 +1718,12 @@ x86_emulate_insn(struct x86_emulate_ctxt *ctxt, struct x86_emulate_ops *ops)
368 memcpy(c->regs, ctxt->vcpu->arch.regs, sizeof c->regs);
369 saved_eip = c->eip;
370
371 + /* Privileged instruction can be executed only in CPL=0 */
372 + if ((c->d & Priv) && kvm_x86_ops->get_cpl(ctxt->vcpu)) {
373 + kvm_inject_gp(ctxt->vcpu, 0);
374 + goto done;
375 + }
376 +
377 if (((c->d & ModRM) && (c->modrm_mod != 3)) || (c->d & MemAbs))
378 memop = c->modrm_ea;
379
380 @@ -1982,6 +1997,12 @@ special_insn:
381 int err;
382
383 sel = c->src.val;
384 +
385 + if (c->modrm_reg == VCPU_SREG_CS) {
386 + kvm_queue_exception(ctxt->vcpu, UD_VECTOR);
387 + goto done;
388 + }
389 +
390 if (c->modrm_reg == VCPU_SREG_SS)
391 toggle_interruptibility(ctxt, X86_SHADOW_INT_MOV_SS);
392
393 diff --git a/arch/x86/kvm/vmx.c b/arch/x86/kvm/vmx.c
394 index d4918d6..8a8e139 100644
395 --- a/arch/x86/kvm/vmx.c
396 +++ b/arch/x86/kvm/vmx.c
397 @@ -1224,6 +1224,8 @@ static __init int setup_vmcs_config(struct vmcs_config *vmcs_conf)
398 CPU_BASED_USE_IO_BITMAPS |
399 CPU_BASED_MOV_DR_EXITING |
400 CPU_BASED_USE_TSC_OFFSETING |
401 + CPU_BASED_MWAIT_EXITING |
402 + CPU_BASED_MONITOR_EXITING |
403 CPU_BASED_INVLPG_EXITING;
404 opt = CPU_BASED_TPR_SHADOW |
405 CPU_BASED_USE_MSR_BITMAPS |
406 @@ -3416,6 +3418,12 @@ static int handle_pause(struct kvm_vcpu *vcpu)
407 return 1;
408 }
409
410 +static int handle_invalid_op(struct kvm_vcpu *vcpu)
411 +{
412 + kvm_queue_exception(vcpu, UD_VECTOR);
413 + return 1;
414 +}
415 +
416 /*
417 * The exit handlers return 1 if the exit was handled fully and guest execution
418 * may resume. Otherwise they set the kvm_run parameter to indicate what needs
419 @@ -3453,6 +3461,8 @@ static int (*kvm_vmx_exit_handlers[])(struct kvm_vcpu *vcpu) = {
420 [EXIT_REASON_EPT_VIOLATION] = handle_ept_violation,
421 [EXIT_REASON_EPT_MISCONFIG] = handle_ept_misconfig,
422 [EXIT_REASON_PAUSE_INSTRUCTION] = handle_pause,
423 + [EXIT_REASON_MWAIT_INSTRUCTION] = handle_invalid_op,
424 + [EXIT_REASON_MONITOR_INSTRUCTION] = handle_invalid_op,
425 };
426
427 static const int kvm_vmx_max_exit_handlers =
428 diff --git a/arch/x86/mm/pgtable.c b/arch/x86/mm/pgtable.c
429 index ed34f5e..c9ba9de 100644
430 --- a/arch/x86/mm/pgtable.c
431 +++ b/arch/x86/mm/pgtable.c
432 @@ -6,6 +6,14 @@
433
434 #define PGALLOC_GFP GFP_KERNEL | __GFP_NOTRACK | __GFP_REPEAT | __GFP_ZERO
435
436 +#ifdef CONFIG_HIGHPTE
437 +#define PGALLOC_USER_GFP __GFP_HIGHMEM
438 +#else
439 +#define PGALLOC_USER_GFP 0
440 +#endif
441 +
442 +gfp_t __userpte_alloc_gfp = PGALLOC_GFP | PGALLOC_USER_GFP;
443 +
444 pte_t *pte_alloc_one_kernel(struct mm_struct *mm, unsigned long address)
445 {
446 return (pte_t *)__get_free_page(PGALLOC_GFP);
447 @@ -15,16 +23,29 @@ pgtable_t pte_alloc_one(struct mm_struct *mm, unsigned long address)
448 {
449 struct page *pte;
450
451 -#ifdef CONFIG_HIGHPTE
452 - pte = alloc_pages(PGALLOC_GFP | __GFP_HIGHMEM, 0);
453 -#else
454 - pte = alloc_pages(PGALLOC_GFP, 0);
455 -#endif
456 + pte = alloc_pages(__userpte_alloc_gfp, 0);
457 if (pte)
458 pgtable_page_ctor(pte);
459 return pte;
460 }
461
462 +static int __init setup_userpte(char *arg)
463 +{
464 + if (!arg)
465 + return -EINVAL;
466 +
467 + /*
468 + * "userpte=nohigh" disables allocation of user pagetables in
469 + * high memory.
470 + */
471 + if (strcmp(arg, "nohigh") == 0)
472 + __userpte_alloc_gfp &= ~__GFP_HIGHMEM;
473 + else
474 + return -EINVAL;
475 + return 0;
476 +}
477 +early_param("userpte", setup_userpte);
478 +
479 void ___pte_free_tlb(struct mmu_gather *tlb, struct page *pte)
480 {
481 pgtable_page_dtor(pte);
482 diff --git a/arch/x86/oprofile/nmi_int.c b/arch/x86/oprofile/nmi_int.c
483 index 3347f69..2c505ee 100644
484 --- a/arch/x86/oprofile/nmi_int.c
485 +++ b/arch/x86/oprofile/nmi_int.c
486 @@ -159,7 +159,7 @@ static int nmi_setup_mux(void)
487
488 for_each_possible_cpu(i) {
489 per_cpu(cpu_msrs, i).multiplex =
490 - kmalloc(multiplex_size, GFP_KERNEL);
491 + kzalloc(multiplex_size, GFP_KERNEL);
492 if (!per_cpu(cpu_msrs, i).multiplex)
493 return 0;
494 }
495 @@ -179,7 +179,6 @@ static void nmi_cpu_setup_mux(int cpu, struct op_msrs const * const msrs)
496 if (counter_config[i].enabled) {
497 multiplex[i].saved = -(u64)counter_config[i].count;
498 } else {
499 - multiplex[i].addr = 0;
500 multiplex[i].saved = 0;
501 }
502 }
503 @@ -189,25 +188,27 @@ static void nmi_cpu_setup_mux(int cpu, struct op_msrs const * const msrs)
504
505 static void nmi_cpu_save_mpx_registers(struct op_msrs *msrs)
506 {
507 + struct op_msr *counters = msrs->counters;
508 struct op_msr *multiplex = msrs->multiplex;
509 int i;
510
511 for (i = 0; i < model->num_counters; ++i) {
512 int virt = op_x86_phys_to_virt(i);
513 - if (multiplex[virt].addr)
514 - rdmsrl(multiplex[virt].addr, multiplex[virt].saved);
515 + if (counters[i].addr)
516 + rdmsrl(counters[i].addr, multiplex[virt].saved);
517 }
518 }
519
520 static void nmi_cpu_restore_mpx_registers(struct op_msrs *msrs)
521 {
522 + struct op_msr *counters = msrs->counters;
523 struct op_msr *multiplex = msrs->multiplex;
524 int i;
525
526 for (i = 0; i < model->num_counters; ++i) {
527 int virt = op_x86_phys_to_virt(i);
528 - if (multiplex[virt].addr)
529 - wrmsrl(multiplex[virt].addr, multiplex[virt].saved);
530 + if (counters[i].addr)
531 + wrmsrl(counters[i].addr, multiplex[virt].saved);
532 }
533 }
534
535 @@ -303,11 +304,11 @@ static int allocate_msrs(void)
536
537 int i;
538 for_each_possible_cpu(i) {
539 - per_cpu(cpu_msrs, i).counters = kmalloc(counters_size,
540 + per_cpu(cpu_msrs, i).counters = kzalloc(counters_size,
541 GFP_KERNEL);
542 if (!per_cpu(cpu_msrs, i).counters)
543 return 0;
544 - per_cpu(cpu_msrs, i).controls = kmalloc(controls_size,
545 + per_cpu(cpu_msrs, i).controls = kzalloc(controls_size,
546 GFP_KERNEL);
547 if (!per_cpu(cpu_msrs, i).controls)
548 return 0;
549 diff --git a/arch/x86/oprofile/op_model_amd.c b/arch/x86/oprofile/op_model_amd.c
550 index 39686c2..1ed963d 100644
551 --- a/arch/x86/oprofile/op_model_amd.c
552 +++ b/arch/x86/oprofile/op_model_amd.c
553 @@ -76,19 +76,6 @@ static struct op_ibs_config ibs_config;
554
555 #ifdef CONFIG_OPROFILE_EVENT_MULTIPLEX
556
557 -static void op_mux_fill_in_addresses(struct op_msrs * const msrs)
558 -{
559 - int i;
560 -
561 - for (i = 0; i < NUM_VIRT_COUNTERS; i++) {
562 - int hw_counter = op_x86_virt_to_phys(i);
563 - if (reserve_perfctr_nmi(MSR_K7_PERFCTR0 + i))
564 - msrs->multiplex[i].addr = MSR_K7_PERFCTR0 + hw_counter;
565 - else
566 - msrs->multiplex[i].addr = 0;
567 - }
568 -}
569 -
570 static void op_mux_switch_ctrl(struct op_x86_model_spec const *model,
571 struct op_msrs const * const msrs)
572 {
573 @@ -98,7 +85,7 @@ static void op_mux_switch_ctrl(struct op_x86_model_spec const *model,
574 /* enable active counters */
575 for (i = 0; i < NUM_COUNTERS; ++i) {
576 int virt = op_x86_phys_to_virt(i);
577 - if (!counter_config[virt].enabled)
578 + if (!reset_value[virt])
579 continue;
580 rdmsrl(msrs->controls[i].addr, val);
581 val &= model->reserved;
582 @@ -107,10 +94,6 @@ static void op_mux_switch_ctrl(struct op_x86_model_spec const *model,
583 }
584 }
585
586 -#else
587 -
588 -static inline void op_mux_fill_in_addresses(struct op_msrs * const msrs) { }
589 -
590 #endif
591
592 /* functions for op_amd_spec */
593 @@ -122,18 +105,12 @@ static void op_amd_fill_in_addresses(struct op_msrs * const msrs)
594 for (i = 0; i < NUM_COUNTERS; i++) {
595 if (reserve_perfctr_nmi(MSR_K7_PERFCTR0 + i))
596 msrs->counters[i].addr = MSR_K7_PERFCTR0 + i;
597 - else
598 - msrs->counters[i].addr = 0;
599 }
600
601 for (i = 0; i < NUM_CONTROLS; i++) {
602 if (reserve_evntsel_nmi(MSR_K7_EVNTSEL0 + i))
603 msrs->controls[i].addr = MSR_K7_EVNTSEL0 + i;
604 - else
605 - msrs->controls[i].addr = 0;
606 }
607 -
608 - op_mux_fill_in_addresses(msrs);
609 }
610
611 static void op_amd_setup_ctrs(struct op_x86_model_spec const *model,
612 @@ -144,7 +121,8 @@ static void op_amd_setup_ctrs(struct op_x86_model_spec const *model,
613
614 /* setup reset_value */
615 for (i = 0; i < NUM_VIRT_COUNTERS; ++i) {
616 - if (counter_config[i].enabled)
617 + if (counter_config[i].enabled
618 + && msrs->counters[op_x86_virt_to_phys(i)].addr)
619 reset_value[i] = counter_config[i].count;
620 else
621 reset_value[i] = 0;
622 @@ -169,9 +147,7 @@ static void op_amd_setup_ctrs(struct op_x86_model_spec const *model,
623 /* enable active counters */
624 for (i = 0; i < NUM_COUNTERS; ++i) {
625 int virt = op_x86_phys_to_virt(i);
626 - if (!counter_config[virt].enabled)
627 - continue;
628 - if (!msrs->counters[i].addr)
629 + if (!reset_value[virt])
630 continue;
631
632 /* setup counter registers */
633 @@ -405,16 +381,6 @@ static int init_ibs_nmi(void)
634 return 1;
635 }
636
637 -#ifdef CONFIG_NUMA
638 - /* Sanity check */
639 - /* Works only for 64bit with proper numa implementation. */
640 - if (nodes != num_possible_nodes()) {
641 - printk(KERN_DEBUG "Failed to setup CPU node(s) for IBS, "
642 - "found: %d, expected %d",
643 - nodes, num_possible_nodes());
644 - return 1;
645 - }
646 -#endif
647 return 0;
648 }
649
650 diff --git a/arch/x86/oprofile/op_model_p4.c b/arch/x86/oprofile/op_model_p4.c
651 index ac6b354..e6a160a 100644
652 --- a/arch/x86/oprofile/op_model_p4.c
653 +++ b/arch/x86/oprofile/op_model_p4.c
654 @@ -394,12 +394,6 @@ static void p4_fill_in_addresses(struct op_msrs * const msrs)
655 setup_num_counters();
656 stag = get_stagger();
657
658 - /* initialize some registers */
659 - for (i = 0; i < num_counters; ++i)
660 - msrs->counters[i].addr = 0;
661 - for (i = 0; i < num_controls; ++i)
662 - msrs->controls[i].addr = 0;
663 -
664 /* the counter & cccr registers we pay attention to */
665 for (i = 0; i < num_counters; ++i) {
666 addr = p4_counters[VIRT_CTR(stag, i)].counter_address;
667 diff --git a/arch/x86/oprofile/op_model_ppro.c b/arch/x86/oprofile/op_model_ppro.c
668 index 8eb0587..2873c00 100644
669 --- a/arch/x86/oprofile/op_model_ppro.c
670 +++ b/arch/x86/oprofile/op_model_ppro.c
671 @@ -37,15 +37,11 @@ static void ppro_fill_in_addresses(struct op_msrs * const msrs)
672 for (i = 0; i < num_counters; i++) {
673 if (reserve_perfctr_nmi(MSR_P6_PERFCTR0 + i))
674 msrs->counters[i].addr = MSR_P6_PERFCTR0 + i;
675 - else
676 - msrs->counters[i].addr = 0;
677 }
678
679 for (i = 0; i < num_counters; i++) {
680 if (reserve_evntsel_nmi(MSR_P6_EVNTSEL0 + i))
681 msrs->controls[i].addr = MSR_P6_EVNTSEL0 + i;
682 - else
683 - msrs->controls[i].addr = 0;
684 }
685 }
686
687 @@ -57,7 +53,7 @@ static void ppro_setup_ctrs(struct op_x86_model_spec const *model,
688 int i;
689
690 if (!reset_value) {
691 - reset_value = kmalloc(sizeof(reset_value[0]) * num_counters,
692 + reset_value = kzalloc(sizeof(reset_value[0]) * num_counters,
693 GFP_ATOMIC);
694 if (!reset_value)
695 return;
696 diff --git a/arch/x86/pci/mmconfig-shared.c b/arch/x86/pci/mmconfig-shared.c
697 index b19d1e5..8f3f9a5 100644
698 --- a/arch/x86/pci/mmconfig-shared.c
699 +++ b/arch/x86/pci/mmconfig-shared.c
700 @@ -303,22 +303,17 @@ static void __init pci_mmcfg_check_end_bus_number(void)
701 {
702 struct pci_mmcfg_region *cfg, *cfgx;
703
704 - /* last one*/
705 - cfg = list_entry(pci_mmcfg_list.prev, typeof(*cfg), list);
706 - if (cfg)
707 - if (cfg->end_bus < cfg->start_bus)
708 - cfg->end_bus = 255;
709 -
710 - if (list_is_singular(&pci_mmcfg_list))
711 - return;
712 -
713 - /* don't overlap please */
714 + /* Fixup overlaps */
715 list_for_each_entry(cfg, &pci_mmcfg_list, list) {
716 if (cfg->end_bus < cfg->start_bus)
717 cfg->end_bus = 255;
718
719 + /* Don't access the list head ! */
720 + if (cfg->list.next == &pci_mmcfg_list)
721 + break;
722 +
723 cfgx = list_entry(cfg->list.next, typeof(*cfg), list);
724 - if (cfg != cfgx && cfg->end_bus >= cfgx->start_bus)
725 + if (cfg->end_bus >= cfgx->start_bus)
726 cfg->end_bus = cfgx->start_bus - 1;
727 }
728 }
729 diff --git a/arch/x86/xen/enlighten.c b/arch/x86/xen/enlighten.c
730 index 36daccb..b607239 100644
731 --- a/arch/x86/xen/enlighten.c
732 +++ b/arch/x86/xen/enlighten.c
733 @@ -50,6 +50,7 @@
734 #include <asm/traps.h>
735 #include <asm/setup.h>
736 #include <asm/desc.h>
737 +#include <asm/pgalloc.h>
738 #include <asm/pgtable.h>
739 #include <asm/tlbflush.h>
740 #include <asm/reboot.h>
741 @@ -1094,6 +1095,12 @@ asmlinkage void __init xen_start_kernel(void)
742
743 __supported_pte_mask |= _PAGE_IOMAP;
744
745 + /*
746 + * Prevent page tables from being allocated in highmem, even
747 + * if CONFIG_HIGHPTE is enabled.
748 + */
749 + __userpte_alloc_gfp &= ~__GFP_HIGHMEM;
750 +
751 /* Work out if we support NX */
752 x86_configure_nx();
753
754 diff --git a/arch/x86/xen/mmu.c b/arch/x86/xen/mmu.c
755 index bf4cd6b..350a3de 100644
756 --- a/arch/x86/xen/mmu.c
757 +++ b/arch/x86/xen/mmu.c
758 @@ -1432,14 +1432,15 @@ static void *xen_kmap_atomic_pte(struct page *page, enum km_type type)
759 {
760 pgprot_t prot = PAGE_KERNEL;
761
762 + /*
763 + * We disable highmem allocations for page tables so we should never
764 + * see any calls to kmap_atomic_pte on a highmem page.
765 + */
766 + BUG_ON(PageHighMem(page));
767 +
768 if (PagePinned(page))
769 prot = PAGE_KERNEL_RO;
770
771 - if (0 && PageHighMem(page))
772 - printk("mapping highpte %lx type %d prot %s\n",
773 - page_to_pfn(page), type,
774 - (unsigned long)pgprot_val(prot) & _PAGE_RW ? "WRITE" : "READ");
775 -
776 return kmap_atomic_prot(page, type, prot);
777 }
778 #endif
779 diff --git a/drivers/ata/ahci.c b/drivers/ata/ahci.c
780 index b343903..a6a736a 100644
781 --- a/drivers/ata/ahci.c
782 +++ b/drivers/ata/ahci.c
783 @@ -3082,8 +3082,16 @@ static int ahci_init_one(struct pci_dev *pdev, const struct pci_device_id *ent)
784 ahci_save_initial_config(pdev, hpriv);
785
786 /* prepare host */
787 - if (hpriv->cap & HOST_CAP_NCQ)
788 - pi.flags |= ATA_FLAG_NCQ | ATA_FLAG_FPDMA_AA;
789 + if (hpriv->cap & HOST_CAP_NCQ) {
790 + pi.flags |= ATA_FLAG_NCQ;
791 + /* Auto-activate optimization is supposed to be supported on
792 + all AHCI controllers indicating NCQ support, but it seems
793 + to be broken at least on some NVIDIA MCP79 chipsets.
794 + Until we get info on which NVIDIA chipsets don't have this
795 + issue, if any, disable AA on all NVIDIA AHCIs. */
796 + if (pdev->vendor != PCI_VENDOR_ID_NVIDIA)
797 + pi.flags |= ATA_FLAG_FPDMA_AA;
798 + }
799
800 if (hpriv->cap & HOST_CAP_PMP)
801 pi.flags |= ATA_FLAG_PMP;
802 diff --git a/drivers/ata/pata_hpt3x2n.c b/drivers/ata/pata_hpt3x2n.c
803 index dd26bc7..269b5db 100644
804 --- a/drivers/ata/pata_hpt3x2n.c
805 +++ b/drivers/ata/pata_hpt3x2n.c
806 @@ -25,7 +25,7 @@
807 #include <linux/libata.h>
808
809 #define DRV_NAME "pata_hpt3x2n"
810 -#define DRV_VERSION "0.3.8"
811 +#define DRV_VERSION "0.3.9"
812
813 enum {
814 HPT_PCI_FAST = (1 << 31),
815 @@ -544,16 +544,16 @@ static int hpt3x2n_init_one(struct pci_dev *dev, const struct pci_device_id *id)
816 pci_mhz);
817 /* Set our private data up. We only need a few flags so we use
818 it directly */
819 - if (pci_mhz > 60) {
820 + if (pci_mhz > 60)
821 hpriv = (void *)(PCI66 | USE_DPLL);
822 - /*
823 - * On HPT371N, if ATA clock is 66 MHz we must set bit 2 in
824 - * the MISC. register to stretch the UltraDMA Tss timing.
825 - * NOTE: This register is only writeable via I/O space.
826 - */
827 - if (dev->device == PCI_DEVICE_ID_TTI_HPT371)
828 - outb(inb(iobase + 0x9c) | 0x04, iobase + 0x9c);
829 - }
830 +
831 + /*
832 + * On HPT371N, if ATA clock is 66 MHz we must set bit 2 in
833 + * the MISC. register to stretch the UltraDMA Tss timing.
834 + * NOTE: This register is only writeable via I/O space.
835 + */
836 + if (dev->device == PCI_DEVICE_ID_TTI_HPT371)
837 + outb(inb(iobase + 0x9c) | 0x04, iobase + 0x9c);
838
839 /* Now kick off ATA set up */
840 return ata_pci_sff_init_one(dev, ppi, &hpt3x2n_sht, hpriv);
841 diff --git a/drivers/base/core.c b/drivers/base/core.c
842 index 2820257..fb4bc4f 100644
843 --- a/drivers/base/core.c
844 +++ b/drivers/base/core.c
845 @@ -607,6 +607,7 @@ static struct kobject *get_device_parent(struct device *dev,
846 int retval;
847
848 if (dev->class) {
849 + static DEFINE_MUTEX(gdp_mutex);
850 struct kobject *kobj = NULL;
851 struct kobject *parent_kobj;
852 struct kobject *k;
853 @@ -623,6 +624,8 @@ static struct kobject *get_device_parent(struct device *dev,
854 else
855 parent_kobj = &parent->kobj;
856
857 + mutex_lock(&gdp_mutex);
858 +
859 /* find our class-directory at the parent and reference it */
860 spin_lock(&dev->class->p->class_dirs.list_lock);
861 list_for_each_entry(k, &dev->class->p->class_dirs.list, entry)
862 @@ -631,20 +634,26 @@ static struct kobject *get_device_parent(struct device *dev,
863 break;
864 }
865 spin_unlock(&dev->class->p->class_dirs.list_lock);
866 - if (kobj)
867 + if (kobj) {
868 + mutex_unlock(&gdp_mutex);
869 return kobj;
870 + }
871
872 /* or create a new class-directory at the parent device */
873 k = kobject_create();
874 - if (!k)
875 + if (!k) {
876 + mutex_unlock(&gdp_mutex);
877 return NULL;
878 + }
879 k->kset = &dev->class->p->class_dirs;
880 retval = kobject_add(k, parent_kobj, "%s", dev->class->name);
881 if (retval < 0) {
882 + mutex_unlock(&gdp_mutex);
883 kobject_put(k);
884 return NULL;
885 }
886 /* do not emit an uevent for this simple "glue" directory */
887 + mutex_unlock(&gdp_mutex);
888 return k;
889 }
890
891 diff --git a/drivers/base/devtmpfs.c b/drivers/base/devtmpfs.c
892 index 42ae452..dac478c 100644
893 --- a/drivers/base/devtmpfs.c
894 +++ b/drivers/base/devtmpfs.c
895 @@ -301,6 +301,19 @@ int devtmpfs_delete_node(struct device *dev)
896 if (dentry->d_inode) {
897 err = vfs_getattr(nd.path.mnt, dentry, &stat);
898 if (!err && dev_mynode(dev, dentry->d_inode, &stat)) {
899 + struct iattr newattrs;
900 + /*
901 + * before unlinking this node, reset permissions
902 + * of possible references like hardlinks
903 + */
904 + newattrs.ia_uid = 0;
905 + newattrs.ia_gid = 0;
906 + newattrs.ia_mode = stat.mode & ~0777;
907 + newattrs.ia_valid =
908 + ATTR_UID|ATTR_GID|ATTR_MODE;
909 + mutex_lock(&dentry->d_inode->i_mutex);
910 + notify_change(dentry, &newattrs);
911 + mutex_unlock(&dentry->d_inode->i_mutex);
912 err = vfs_unlink(nd.path.dentry->d_inode,
913 dentry);
914 if (!err || err == -ENOENT)
915 diff --git a/drivers/char/tty_ldisc.c b/drivers/char/tty_ldisc.c
916 index 3f653f7..500e740 100644
917 --- a/drivers/char/tty_ldisc.c
918 +++ b/drivers/char/tty_ldisc.c
919 @@ -706,12 +706,13 @@ static void tty_reset_termios(struct tty_struct *tty)
920 /**
921 * tty_ldisc_reinit - reinitialise the tty ldisc
922 * @tty: tty to reinit
923 + * @ldisc: line discipline to reinitialize
924 *
925 - * Switch the tty back to N_TTY line discipline and leave the
926 - * ldisc state closed
927 + * Switch the tty to a line discipline and leave the ldisc
928 + * state closed
929 */
930
931 -static void tty_ldisc_reinit(struct tty_struct *tty)
932 +static void tty_ldisc_reinit(struct tty_struct *tty, int ldisc)
933 {
934 struct tty_ldisc *ld;
935
936 @@ -721,10 +722,10 @@ static void tty_ldisc_reinit(struct tty_struct *tty)
937 /*
938 * Switch the line discipline back
939 */
940 - ld = tty_ldisc_get(N_TTY);
941 + ld = tty_ldisc_get(ldisc);
942 BUG_ON(IS_ERR(ld));
943 tty_ldisc_assign(tty, ld);
944 - tty_set_termios_ldisc(tty, N_TTY);
945 + tty_set_termios_ldisc(tty, ldisc);
946 }
947
948 /**
949 @@ -745,6 +746,8 @@ static void tty_ldisc_reinit(struct tty_struct *tty)
950 void tty_ldisc_hangup(struct tty_struct *tty)
951 {
952 struct tty_ldisc *ld;
953 + int reset = tty->driver->flags & TTY_DRIVER_RESET_TERMIOS;
954 + int err = 0;
955
956 /*
957 * FIXME! What are the locking issues here? This may me overdoing
958 @@ -772,25 +775,32 @@ void tty_ldisc_hangup(struct tty_struct *tty)
959 wake_up_interruptible_poll(&tty->read_wait, POLLIN);
960 /*
961 * Shutdown the current line discipline, and reset it to
962 - * N_TTY.
963 + * N_TTY if need be.
964 + *
965 + * Avoid racing set_ldisc or tty_ldisc_release
966 */
967 - if (tty->driver->flags & TTY_DRIVER_RESET_TERMIOS) {
968 - /* Avoid racing set_ldisc or tty_ldisc_release */
969 - mutex_lock(&tty->ldisc_mutex);
970 - tty_ldisc_halt(tty);
971 - if (tty->ldisc) { /* Not yet closed */
972 - /* Switch back to N_TTY */
973 - tty_ldisc_reinit(tty);
974 - /* At this point we have a closed ldisc and we want to
975 - reopen it. We could defer this to the next open but
976 - it means auditing a lot of other paths so this is
977 - a FIXME */
978 + mutex_lock(&tty->ldisc_mutex);
979 + tty_ldisc_halt(tty);
980 + /* At this point we have a closed ldisc and we want to
981 + reopen it. We could defer this to the next open but
982 + it means auditing a lot of other paths so this is
983 + a FIXME */
984 + if (tty->ldisc) { /* Not yet closed */
985 + if (reset == 0) {
986 + tty_ldisc_reinit(tty, tty->termios->c_line);
987 + err = tty_ldisc_open(tty, tty->ldisc);
988 + }
989 + /* If the re-open fails or we reset then go to N_TTY. The
990 + N_TTY open cannot fail */
991 + if (reset || err) {
992 + tty_ldisc_reinit(tty, N_TTY);
993 WARN_ON(tty_ldisc_open(tty, tty->ldisc));
994 - tty_ldisc_enable(tty);
995 }
996 - mutex_unlock(&tty->ldisc_mutex);
997 - tty_reset_termios(tty);
998 + tty_ldisc_enable(tty);
999 }
1000 + mutex_unlock(&tty->ldisc_mutex);
1001 + if (reset)
1002 + tty_reset_termios(tty);
1003 }
1004
1005 /**
1006 diff --git a/drivers/clocksource/sh_cmt.c b/drivers/clocksource/sh_cmt.c
1007 index 6b3e0c2..6fe4f77 100644
1008 --- a/drivers/clocksource/sh_cmt.c
1009 +++ b/drivers/clocksource/sh_cmt.c
1010 @@ -603,18 +603,13 @@ static int sh_cmt_setup(struct sh_cmt_priv *p, struct platform_device *pdev)
1011 p->irqaction.handler = sh_cmt_interrupt;
1012 p->irqaction.dev_id = p;
1013 p->irqaction.flags = IRQF_DISABLED | IRQF_TIMER | IRQF_IRQPOLL;
1014 - ret = setup_irq(irq, &p->irqaction);
1015 - if (ret) {
1016 - pr_err("sh_cmt: failed to request irq %d\n", irq);
1017 - goto err1;
1018 - }
1019
1020 /* get hold of clock */
1021 p->clk = clk_get(&p->pdev->dev, cfg->clk);
1022 if (IS_ERR(p->clk)) {
1023 pr_err("sh_cmt: cannot get clock \"%s\"\n", cfg->clk);
1024 ret = PTR_ERR(p->clk);
1025 - goto err2;
1026 + goto err1;
1027 }
1028
1029 if (resource_size(res) == 6) {
1030 @@ -627,14 +622,25 @@ static int sh_cmt_setup(struct sh_cmt_priv *p, struct platform_device *pdev)
1031 p->clear_bits = ~0xc000;
1032 }
1033
1034 - return sh_cmt_register(p, cfg->name,
1035 - cfg->clockevent_rating,
1036 - cfg->clocksource_rating);
1037 - err2:
1038 - remove_irq(irq, &p->irqaction);
1039 - err1:
1040 + ret = sh_cmt_register(p, cfg->name,
1041 + cfg->clockevent_rating,
1042 + cfg->clocksource_rating);
1043 + if (ret) {
1044 + pr_err("sh_cmt: registration failed\n");
1045 + goto err1;
1046 + }
1047 +
1048 + ret = setup_irq(irq, &p->irqaction);
1049 + if (ret) {
1050 + pr_err("sh_cmt: failed to request irq %d\n", irq);
1051 + goto err1;
1052 + }
1053 +
1054 + return 0;
1055 +
1056 +err1:
1057 iounmap(p->mapbase);
1058 - err0:
1059 +err0:
1060 return ret;
1061 }
1062
1063 diff --git a/drivers/clocksource/sh_mtu2.c b/drivers/clocksource/sh_mtu2.c
1064 index 973e714..4c8a759 100644
1065 --- a/drivers/clocksource/sh_mtu2.c
1066 +++ b/drivers/clocksource/sh_mtu2.c
1067 @@ -221,15 +221,15 @@ static void sh_mtu2_register_clockevent(struct sh_mtu2_priv *p,
1068 ced->cpumask = cpumask_of(0);
1069 ced->set_mode = sh_mtu2_clock_event_mode;
1070
1071 + pr_info("sh_mtu2: %s used for clock events\n", ced->name);
1072 + clockevents_register_device(ced);
1073 +
1074 ret = setup_irq(p->irqaction.irq, &p->irqaction);
1075 if (ret) {
1076 pr_err("sh_mtu2: failed to request irq %d\n",
1077 p->irqaction.irq);
1078 return;
1079 }
1080 -
1081 - pr_info("sh_mtu2: %s used for clock events\n", ced->name);
1082 - clockevents_register_device(ced);
1083 }
1084
1085 static int sh_mtu2_register(struct sh_mtu2_priv *p, char *name,
1086 diff --git a/drivers/clocksource/sh_tmu.c b/drivers/clocksource/sh_tmu.c
1087 index 93c2322..961f5b5 100644
1088 --- a/drivers/clocksource/sh_tmu.c
1089 +++ b/drivers/clocksource/sh_tmu.c
1090 @@ -323,15 +323,15 @@ static void sh_tmu_register_clockevent(struct sh_tmu_priv *p,
1091 ced->set_next_event = sh_tmu_clock_event_next;
1092 ced->set_mode = sh_tmu_clock_event_mode;
1093
1094 + pr_info("sh_tmu: %s used for clock events\n", ced->name);
1095 + clockevents_register_device(ced);
1096 +
1097 ret = setup_irq(p->irqaction.irq, &p->irqaction);
1098 if (ret) {
1099 pr_err("sh_tmu: failed to request irq %d\n",
1100 p->irqaction.irq);
1101 return;
1102 }
1103 -
1104 - pr_info("sh_tmu: %s used for clock events\n", ced->name);
1105 - clockevents_register_device(ced);
1106 }
1107
1108 static int sh_tmu_register(struct sh_tmu_priv *p, char *name,
1109 diff --git a/drivers/gpio/cs5535-gpio.c b/drivers/gpio/cs5535-gpio.c
1110 index 0fdbe94..0c3c498 100644
1111 --- a/drivers/gpio/cs5535-gpio.c
1112 +++ b/drivers/gpio/cs5535-gpio.c
1113 @@ -154,7 +154,7 @@ static int chip_gpio_request(struct gpio_chip *c, unsigned offset)
1114
1115 static int chip_gpio_get(struct gpio_chip *chip, unsigned offset)
1116 {
1117 - return cs5535_gpio_isset(offset, GPIO_OUTPUT_VAL);
1118 + return cs5535_gpio_isset(offset, GPIO_READ_BACK);
1119 }
1120
1121 static void chip_gpio_set(struct gpio_chip *chip, unsigned offset, int val)
1122 @@ -172,6 +172,7 @@ static int chip_direction_input(struct gpio_chip *c, unsigned offset)
1123
1124 spin_lock_irqsave(&chip->lock, flags);
1125 __cs5535_gpio_set(chip, offset, GPIO_INPUT_ENABLE);
1126 + __cs5535_gpio_clear(chip, offset, GPIO_OUTPUT_ENABLE);
1127 spin_unlock_irqrestore(&chip->lock, flags);
1128
1129 return 0;
1130 @@ -184,6 +185,7 @@ static int chip_direction_output(struct gpio_chip *c, unsigned offset, int val)
1131
1132 spin_lock_irqsave(&chip->lock, flags);
1133
1134 + __cs5535_gpio_set(chip, offset, GPIO_INPUT_ENABLE);
1135 __cs5535_gpio_set(chip, offset, GPIO_OUTPUT_ENABLE);
1136 if (val)
1137 __cs5535_gpio_set(chip, offset, GPIO_OUTPUT_VAL);
1138 diff --git a/drivers/gpio/wm831x-gpio.c b/drivers/gpio/wm831x-gpio.c
1139 index b4468b6..c5a00f7 100644
1140 --- a/drivers/gpio/wm831x-gpio.c
1141 +++ b/drivers/gpio/wm831x-gpio.c
1142 @@ -60,23 +60,31 @@ static int wm831x_gpio_get(struct gpio_chip *chip, unsigned offset)
1143 return 0;
1144 }
1145
1146 -static int wm831x_gpio_direction_out(struct gpio_chip *chip,
1147 - unsigned offset, int value)
1148 +static void wm831x_gpio_set(struct gpio_chip *chip, unsigned offset, int value)
1149 {
1150 struct wm831x_gpio *wm831x_gpio = to_wm831x_gpio(chip);
1151 struct wm831x *wm831x = wm831x_gpio->wm831x;
1152
1153 - return wm831x_set_bits(wm831x, WM831X_GPIO1_CONTROL + offset,
1154 - WM831X_GPN_DIR | WM831X_GPN_TRI, 0);
1155 + wm831x_set_bits(wm831x, WM831X_GPIO_LEVEL, 1 << offset,
1156 + value << offset);
1157 }
1158
1159 -static void wm831x_gpio_set(struct gpio_chip *chip, unsigned offset, int value)
1160 +static int wm831x_gpio_direction_out(struct gpio_chip *chip,
1161 + unsigned offset, int value)
1162 {
1163 struct wm831x_gpio *wm831x_gpio = to_wm831x_gpio(chip);
1164 struct wm831x *wm831x = wm831x_gpio->wm831x;
1165 + int ret;
1166
1167 - wm831x_set_bits(wm831x, WM831X_GPIO_LEVEL, 1 << offset,
1168 - value << offset);
1169 + ret = wm831x_set_bits(wm831x, WM831X_GPIO1_CONTROL + offset,
1170 + WM831X_GPN_DIR | WM831X_GPN_TRI, 0);
1171 + if (ret < 0)
1172 + return ret;
1173 +
1174 + /* Can only set GPIO state once it's in output mode */
1175 + wm831x_gpio_set(chip, offset, value);
1176 +
1177 + return 0;
1178 }
1179
1180 static int wm831x_gpio_to_irq(struct gpio_chip *chip, unsigned offset)
1181 diff --git a/drivers/gpu/drm/i915/intel_lvds.c b/drivers/gpu/drm/i915/intel_lvds.c
1182 index c2e8a45..93031a7 100644
1183 --- a/drivers/gpu/drm/i915/intel_lvds.c
1184 +++ b/drivers/gpu/drm/i915/intel_lvds.c
1185 @@ -655,8 +655,15 @@ static const struct dmi_system_id bad_lid_status[] = {
1186 */
1187 static enum drm_connector_status intel_lvds_detect(struct drm_connector *connector)
1188 {
1189 + struct drm_device *dev = connector->dev;
1190 enum drm_connector_status status = connector_status_connected;
1191
1192 + /* ACPI lid methods were generally unreliable in this generation, so
1193 + * don't even bother.
1194 + */
1195 + if (IS_I8XX(dev))
1196 + return connector_status_connected;
1197 +
1198 if (!dmi_check_system(bad_lid_status) && !acpi_lid_open())
1199 status = connector_status_disconnected;
1200
1201 diff --git a/drivers/gpu/drm/i915/intel_sdvo.c b/drivers/gpu/drm/i915/intel_sdvo.c
1202 index 82678d3..48daee5 100644
1203 --- a/drivers/gpu/drm/i915/intel_sdvo.c
1204 +++ b/drivers/gpu/drm/i915/intel_sdvo.c
1205 @@ -35,6 +35,7 @@
1206 #include "i915_drm.h"
1207 #include "i915_drv.h"
1208 #include "intel_sdvo_regs.h"
1209 +#include <linux/dmi.h>
1210
1211 static char *tv_format_names[] = {
1212 "NTSC_M" , "NTSC_J" , "NTSC_443",
1213 @@ -2283,6 +2284,25 @@ intel_sdvo_get_slave_addr(struct drm_device *dev, int output_device)
1214 return 0x72;
1215 }
1216
1217 +static int intel_sdvo_bad_tv_callback(const struct dmi_system_id *id)
1218 +{
1219 + DRM_DEBUG_KMS("Ignoring bad SDVO TV connector for %s\n", id->ident);
1220 + return 1;
1221 +}
1222 +
1223 +static struct dmi_system_id intel_sdvo_bad_tv[] = {
1224 + {
1225 + .callback = intel_sdvo_bad_tv_callback,
1226 + .ident = "IntelG45/ICH10R/DME1737",
1227 + .matches = {
1228 + DMI_MATCH(DMI_SYS_VENDOR, "IBM CORPORATION"),
1229 + DMI_MATCH(DMI_PRODUCT_NAME, "4800784"),
1230 + },
1231 + },
1232 +
1233 + { } /* terminating entry */
1234 +};
1235 +
1236 static bool
1237 intel_sdvo_output_setup(struct intel_output *intel_output, uint16_t flags)
1238 {
1239 @@ -2323,7 +2343,8 @@ intel_sdvo_output_setup(struct intel_output *intel_output, uint16_t flags)
1240 (1 << INTEL_SDVO_NON_TV_CLONE_BIT) |
1241 (1 << INTEL_ANALOG_CLONE_BIT);
1242 }
1243 - } else if (flags & SDVO_OUTPUT_SVID0) {
1244 + } else if ((flags & SDVO_OUTPUT_SVID0) &&
1245 + !dmi_check_system(intel_sdvo_bad_tv)) {
1246
1247 sdvo_priv->controlled_output = SDVO_OUTPUT_SVID0;
1248 encoder->encoder_type = DRM_MODE_ENCODER_TVDAC;
1249 diff --git a/drivers/gpu/drm/radeon/atom.c b/drivers/gpu/drm/radeon/atom.c
1250 index 7f152f6..d75788f 100644
1251 --- a/drivers/gpu/drm/radeon/atom.c
1252 +++ b/drivers/gpu/drm/radeon/atom.c
1253 @@ -881,8 +881,6 @@ static void atom_op_shl(atom_exec_context *ctx, int *ptr, int arg)
1254 uint8_t attr = U8((*ptr)++), shift;
1255 uint32_t saved, dst;
1256 int dptr = *ptr;
1257 - attr &= 0x38;
1258 - attr |= atom_def_dst[attr >> 3] << 6;
1259 SDEBUG(" dst: ");
1260 dst = atom_get_dst(ctx, arg, attr, ptr, &saved, 1);
1261 shift = atom_get_src(ctx, attr, ptr);
1262 @@ -897,8 +895,6 @@ static void atom_op_shr(atom_exec_context *ctx, int *ptr, int arg)
1263 uint8_t attr = U8((*ptr)++), shift;
1264 uint32_t saved, dst;
1265 int dptr = *ptr;
1266 - attr &= 0x38;
1267 - attr |= atom_def_dst[attr >> 3] << 6;
1268 SDEBUG(" dst: ");
1269 dst = atom_get_dst(ctx, arg, attr, ptr, &saved, 1);
1270 shift = atom_get_src(ctx, attr, ptr);
1271 diff --git a/drivers/gpu/drm/ttm/ttm_tt.c b/drivers/gpu/drm/ttm/ttm_tt.c
1272 index 3d47a2c..a759170 100644
1273 --- a/drivers/gpu/drm/ttm/ttm_tt.c
1274 +++ b/drivers/gpu/drm/ttm/ttm_tt.c
1275 @@ -480,7 +480,7 @@ static int ttm_tt_swapin(struct ttm_tt *ttm)
1276 void *from_virtual;
1277 void *to_virtual;
1278 int i;
1279 - int ret;
1280 + int ret = -ENOMEM;
1281
1282 if (ttm->page_flags & TTM_PAGE_FLAG_USER) {
1283 ret = ttm_tt_set_user(ttm, ttm->tsk, ttm->start,
1284 @@ -499,8 +499,10 @@ static int ttm_tt_swapin(struct ttm_tt *ttm)
1285
1286 for (i = 0; i < ttm->num_pages; ++i) {
1287 from_page = read_mapping_page(swap_space, i, NULL);
1288 - if (IS_ERR(from_page))
1289 + if (IS_ERR(from_page)) {
1290 + ret = PTR_ERR(from_page);
1291 goto out_err;
1292 + }
1293 to_page = __ttm_tt_get_page(ttm, i);
1294 if (unlikely(to_page == NULL))
1295 goto out_err;
1296 @@ -523,7 +525,7 @@ static int ttm_tt_swapin(struct ttm_tt *ttm)
1297 return 0;
1298 out_err:
1299 ttm_tt_free_alloced_pages(ttm);
1300 - return -ENOMEM;
1301 + return ret;
1302 }
1303
1304 int ttm_tt_swapout(struct ttm_tt *ttm, struct file *persistant_swap_storage)
1305 @@ -535,6 +537,7 @@ int ttm_tt_swapout(struct ttm_tt *ttm, struct file *persistant_swap_storage)
1306 void *from_virtual;
1307 void *to_virtual;
1308 int i;
1309 + int ret = -ENOMEM;
1310
1311 BUG_ON(ttm->state != tt_unbound && ttm->state != tt_unpopulated);
1312 BUG_ON(ttm->caching_state != tt_cached);
1313 @@ -557,7 +560,7 @@ int ttm_tt_swapout(struct ttm_tt *ttm, struct file *persistant_swap_storage)
1314 0);
1315 if (unlikely(IS_ERR(swap_storage))) {
1316 printk(KERN_ERR "Failed allocating swap storage.\n");
1317 - return -ENOMEM;
1318 + return PTR_ERR(swap_storage);
1319 }
1320 } else
1321 swap_storage = persistant_swap_storage;
1322 @@ -569,9 +572,10 @@ int ttm_tt_swapout(struct ttm_tt *ttm, struct file *persistant_swap_storage)
1323 if (unlikely(from_page == NULL))
1324 continue;
1325 to_page = read_mapping_page(swap_space, i, NULL);
1326 - if (unlikely(to_page == NULL))
1327 + if (unlikely(IS_ERR(to_page))) {
1328 + ret = PTR_ERR(to_page);
1329 goto out_err;
1330 -
1331 + }
1332 preempt_disable();
1333 from_virtual = kmap_atomic(from_page, KM_USER0);
1334 to_virtual = kmap_atomic(to_page, KM_USER1);
1335 @@ -595,5 +599,5 @@ out_err:
1336 if (!persistant_swap_storage)
1337 fput(swap_storage);
1338
1339 - return -ENOMEM;
1340 + return ret;
1341 }
1342 diff --git a/drivers/hid/hid-core.c b/drivers/hid/hid-core.c
1343 index eabe5f8..8455f3d 100644
1344 --- a/drivers/hid/hid-core.c
1345 +++ b/drivers/hid/hid-core.c
1346 @@ -1661,8 +1661,6 @@ static const struct hid_device_id hid_ignore_list[] = {
1347 { HID_USB_DEVICE(USB_VENDOR_ID_PANJIT, 0x0004) },
1348 { HID_USB_DEVICE(USB_VENDOR_ID_PHILIPS, USB_DEVICE_ID_PHILIPS_IEEE802154_DONGLE) },
1349 { HID_USB_DEVICE(USB_VENDOR_ID_POWERCOM, USB_DEVICE_ID_POWERCOM_UPS) },
1350 - { HID_USB_DEVICE(USB_VENDOR_ID_TENX, USB_DEVICE_ID_TENX_IBUDDY1) },
1351 - { HID_USB_DEVICE(USB_VENDOR_ID_TENX, USB_DEVICE_ID_TENX_IBUDDY2) },
1352 { HID_USB_DEVICE(USB_VENDOR_ID_VERNIER, USB_DEVICE_ID_VERNIER_LABPRO) },
1353 { HID_USB_DEVICE(USB_VENDOR_ID_VERNIER, USB_DEVICE_ID_VERNIER_GOTEMP) },
1354 { HID_USB_DEVICE(USB_VENDOR_ID_VERNIER, USB_DEVICE_ID_VERNIER_SKIP) },
1355 diff --git a/drivers/hid/hid-ids.h b/drivers/hid/hid-ids.h
1356 index 010368e..793691f 100644
1357 --- a/drivers/hid/hid-ids.h
1358 +++ b/drivers/hid/hid-ids.h
1359 @@ -402,10 +402,6 @@
1360 #define USB_VENDOR_ID_SUNPLUS 0x04fc
1361 #define USB_DEVICE_ID_SUNPLUS_WDESKTOP 0x05d8
1362
1363 -#define USB_VENDOR_ID_TENX 0x1130
1364 -#define USB_DEVICE_ID_TENX_IBUDDY1 0x0001
1365 -#define USB_DEVICE_ID_TENX_IBUDDY2 0x0002
1366 -
1367 #define USB_VENDOR_ID_THRUSTMASTER 0x044f
1368
1369 #define USB_VENDOR_ID_TOPMAX 0x0663
1370 diff --git a/drivers/hid/usbhid/hid-core.c b/drivers/hid/usbhid/hid-core.c
1371 index e2997a8..2f84237 100644
1372 --- a/drivers/hid/usbhid/hid-core.c
1373 +++ b/drivers/hid/usbhid/hid-core.c
1374 @@ -316,6 +316,7 @@ static int hid_submit_out(struct hid_device *hid)
1375 err_hid("usb_submit_urb(out) failed");
1376 return -1;
1377 }
1378 + usbhid->last_out = jiffies;
1379 } else {
1380 /*
1381 * queue work to wake up the device.
1382 @@ -377,6 +378,7 @@ static int hid_submit_ctrl(struct hid_device *hid)
1383 err_hid("usb_submit_urb(ctrl) failed");
1384 return -1;
1385 }
1386 + usbhid->last_ctrl = jiffies;
1387 } else {
1388 /*
1389 * queue work to wake up the device.
1390 @@ -512,9 +514,20 @@ static void __usbhid_submit_report(struct hid_device *hid, struct hid_report *re
1391 usbhid->out[usbhid->outhead].report = report;
1392 usbhid->outhead = head;
1393
1394 - if (!test_and_set_bit(HID_OUT_RUNNING, &usbhid->iofl))
1395 + if (!test_and_set_bit(HID_OUT_RUNNING, &usbhid->iofl)) {
1396 if (hid_submit_out(hid))
1397 clear_bit(HID_OUT_RUNNING, &usbhid->iofl);
1398 + } else {
1399 + /*
1400 + * the queue is known to run
1401 + * but an earlier request may be stuck
1402 + * we may need to time out
1403 + * no race because this is called under
1404 + * spinlock
1405 + */
1406 + if (time_after(jiffies, usbhid->last_out + HZ * 5))
1407 + usb_unlink_urb(usbhid->urbout);
1408 + }
1409 return;
1410 }
1411
1412 @@ -535,9 +548,20 @@ static void __usbhid_submit_report(struct hid_device *hid, struct hid_report *re
1413 usbhid->ctrl[usbhid->ctrlhead].dir = dir;
1414 usbhid->ctrlhead = head;
1415
1416 - if (!test_and_set_bit(HID_CTRL_RUNNING, &usbhid->iofl))
1417 + if (!test_and_set_bit(HID_CTRL_RUNNING, &usbhid->iofl)) {
1418 if (hid_submit_ctrl(hid))
1419 clear_bit(HID_CTRL_RUNNING, &usbhid->iofl);
1420 + } else {
1421 + /*
1422 + * the queue is known to run
1423 + * but an earlier request may be stuck
1424 + * we may need to time out
1425 + * no race because this is called under
1426 + * spinlock
1427 + */
1428 + if (time_after(jiffies, usbhid->last_ctrl + HZ * 5))
1429 + usb_unlink_urb(usbhid->urbctrl);
1430 + }
1431 }
1432
1433 void usbhid_submit_report(struct hid_device *hid, struct hid_report *report, unsigned char dir)
1434 diff --git a/drivers/hid/usbhid/usbhid.h b/drivers/hid/usbhid/usbhid.h
1435 index 08f505c..ec20400 100644
1436 --- a/drivers/hid/usbhid/usbhid.h
1437 +++ b/drivers/hid/usbhid/usbhid.h
1438 @@ -80,12 +80,14 @@ struct usbhid_device {
1439 unsigned char ctrlhead, ctrltail; /* Control fifo head & tail */
1440 char *ctrlbuf; /* Control buffer */
1441 dma_addr_t ctrlbuf_dma; /* Control buffer dma */
1442 + unsigned long last_ctrl; /* record of last output for timeouts */
1443
1444 struct urb *urbout; /* Output URB */
1445 struct hid_output_fifo out[HID_CONTROL_FIFO_SIZE]; /* Output pipe fifo */
1446 unsigned char outhead, outtail; /* Output pipe fifo head & tail */
1447 char *outbuf; /* Output buffer */
1448 dma_addr_t outbuf_dma; /* Output buffer dma */
1449 + unsigned long last_out; /* record of last output for timeouts */
1450
1451 spinlock_t lock; /* fifo spinlock */
1452 unsigned long iofl; /* I/O flags (CTRL_RUNNING, OUT_RUNNING) */
1453 diff --git a/drivers/hwmon/ams/ams-core.c b/drivers/hwmon/ams/ams-core.c
1454 index 6c9ace1..2ad62c3 100644
1455 --- a/drivers/hwmon/ams/ams-core.c
1456 +++ b/drivers/hwmon/ams/ams-core.c
1457 @@ -213,7 +213,7 @@ int __init ams_init(void)
1458 return -ENODEV;
1459 }
1460
1461 -void ams_exit(void)
1462 +void ams_sensor_detach(void)
1463 {
1464 /* Remove input device */
1465 ams_input_exit();
1466 @@ -221,9 +221,6 @@ void ams_exit(void)
1467 /* Remove attributes */
1468 device_remove_file(&ams_info.of_dev->dev, &dev_attr_current);
1469
1470 - /* Shut down implementation */
1471 - ams_info.exit();
1472 -
1473 /* Flush interrupt worker
1474 *
1475 * We do this after ams_info.exit(), because an interrupt might
1476 @@ -239,6 +236,12 @@ void ams_exit(void)
1477 pmf_unregister_irq_client(&ams_freefall_client);
1478 }
1479
1480 +static void __exit ams_exit(void)
1481 +{
1482 + /* Shut down implementation */
1483 + ams_info.exit();
1484 +}
1485 +
1486 MODULE_AUTHOR("Stelian Pop, Michael Hanselmann");
1487 MODULE_DESCRIPTION("Apple Motion Sensor driver");
1488 MODULE_LICENSE("GPL");
1489 diff --git a/drivers/hwmon/ams/ams-i2c.c b/drivers/hwmon/ams/ams-i2c.c
1490 index 2cbf8a6..abeecd2 100644
1491 --- a/drivers/hwmon/ams/ams-i2c.c
1492 +++ b/drivers/hwmon/ams/ams-i2c.c
1493 @@ -238,6 +238,8 @@ static int ams_i2c_probe(struct i2c_client *client,
1494 static int ams_i2c_remove(struct i2c_client *client)
1495 {
1496 if (ams_info.has_device) {
1497 + ams_sensor_detach();
1498 +
1499 /* Disable interrupts */
1500 ams_i2c_set_irq(AMS_IRQ_ALL, 0);
1501
1502 diff --git a/drivers/hwmon/ams/ams-pmu.c b/drivers/hwmon/ams/ams-pmu.c
1503 index fb18b3d..4f61b3e 100644
1504 --- a/drivers/hwmon/ams/ams-pmu.c
1505 +++ b/drivers/hwmon/ams/ams-pmu.c
1506 @@ -133,6 +133,8 @@ static void ams_pmu_get_xyz(s8 *x, s8 *y, s8 *z)
1507
1508 static void ams_pmu_exit(void)
1509 {
1510 + ams_sensor_detach();
1511 +
1512 /* Disable interrupts */
1513 ams_pmu_set_irq(AMS_IRQ_ALL, 0);
1514
1515 diff --git a/drivers/hwmon/ams/ams.h b/drivers/hwmon/ams/ams.h
1516 index 5ed387b..b28d7e2 100644
1517 --- a/drivers/hwmon/ams/ams.h
1518 +++ b/drivers/hwmon/ams/ams.h
1519 @@ -61,6 +61,7 @@ extern struct ams ams_info;
1520
1521 extern void ams_sensors(s8 *x, s8 *y, s8 *z);
1522 extern int ams_sensor_attach(void);
1523 +extern void ams_sensor_detach(void);
1524
1525 extern int ams_pmu_init(struct device_node *np);
1526 extern int ams_i2c_init(struct device_node *np);
1527 diff --git a/drivers/hwmon/fschmd.c b/drivers/hwmon/fschmd.c
1528 index fa07282..0627f7a 100644
1529 --- a/drivers/hwmon/fschmd.c
1530 +++ b/drivers/hwmon/fschmd.c
1531 @@ -267,7 +267,7 @@ struct fschmd_data {
1532 struct list_head list; /* member of the watchdog_data_list */
1533 struct kref kref;
1534 struct miscdevice watchdog_miscdev;
1535 - int kind;
1536 + enum chips kind;
1537 unsigned long watchdog_is_open;
1538 char watchdog_expect_close;
1539 char watchdog_name[10]; /* must be unique to avoid sysfs conflict */
1540 @@ -325,8 +325,7 @@ static ssize_t show_in_value(struct device *dev,
1541 int index = to_sensor_dev_attr(devattr)->index;
1542 struct fschmd_data *data = fschmd_update_device(dev);
1543
1544 - /* fscher / fschrc - 1 as data->kind is an array index, not a chips */
1545 - if (data->kind == (fscher - 1) || data->kind >= (fschrc - 1))
1546 + if (data->kind == fscher || data->kind >= fschrc)
1547 return sprintf(buf, "%d\n", (data->volt[index] * dmi_vref *
1548 dmi_mult[index]) / 255 + dmi_offset[index]);
1549 else
1550 @@ -492,7 +491,7 @@ static ssize_t show_pwm_auto_point1_pwm(struct device *dev,
1551 int val = data->fan_min[index];
1552
1553 /* 0 = allow turning off (except on the syl), 1-255 = 50-100% */
1554 - if (val || data->kind == fscsyl - 1)
1555 + if (val || data->kind == fscsyl)
1556 val = val / 2 + 128;
1557
1558 return sprintf(buf, "%d\n", val);
1559 @@ -506,7 +505,7 @@ static ssize_t store_pwm_auto_point1_pwm(struct device *dev,
1560 unsigned long v = simple_strtoul(buf, NULL, 10);
1561
1562 /* reg: 0 = allow turning off (except on the syl), 1-255 = 50-100% */
1563 - if (v || data->kind == fscsyl - 1) {
1564 + if (v || data->kind == fscsyl) {
1565 v = SENSORS_LIMIT(v, 128, 255);
1566 v = (v - 128) * 2 + 1;
1567 }
1568 @@ -1037,7 +1036,7 @@ static int fschmd_detect(struct i2c_client *client,
1569 else
1570 return -ENODEV;
1571
1572 - strlcpy(info->type, fschmd_id[kind - 1].name, I2C_NAME_SIZE);
1573 + strlcpy(info->type, fschmd_id[kind].name, I2C_NAME_SIZE);
1574
1575 return 0;
1576 }
1577 @@ -1065,6 +1064,7 @@ static int fschmd_probe(struct i2c_client *client,
1578 (where the client is found through a data ptr instead of the
1579 otherway around) */
1580 data->client = client;
1581 + data->kind = kind;
1582
1583 if (kind == fscpos) {
1584 /* The Poseidon has hardwired temp limits, fill these
1585 @@ -1085,9 +1085,6 @@ static int fschmd_probe(struct i2c_client *client,
1586 }
1587 }
1588
1589 - /* i2c kind goes from 1-6, we want from 0-5 to address arrays */
1590 - data->kind = kind - 1;
1591 -
1592 /* Read in some never changing registers */
1593 data->revision = i2c_smbus_read_byte_data(client, FSCHMD_REG_REVISION);
1594 data->global_control = i2c_smbus_read_byte_data(client,
1595 diff --git a/drivers/hwmon/tmp401.c b/drivers/hwmon/tmp401.c
1596 index a13b30e..d14a1af 100644
1597 --- a/drivers/hwmon/tmp401.c
1598 +++ b/drivers/hwmon/tmp401.c
1599 @@ -134,7 +134,7 @@ struct tmp401_data {
1600 struct mutex update_lock;
1601 char valid; /* zero until following fields are valid */
1602 unsigned long last_updated; /* in jiffies */
1603 - int kind;
1604 + enum chips kind;
1605
1606 /* register values */
1607 u8 status;
1608 @@ -524,7 +524,7 @@ static int tmp401_detect(struct i2c_client *client,
1609 if (reg > 15)
1610 return -ENODEV;
1611
1612 - strlcpy(info->type, tmp401_id[kind - 1].name, I2C_NAME_SIZE);
1613 + strlcpy(info->type, tmp401_id[kind].name, I2C_NAME_SIZE);
1614
1615 return 0;
1616 }
1617 @@ -572,8 +572,7 @@ static int tmp401_probe(struct i2c_client *client,
1618 goto exit_remove;
1619 }
1620
1621 - dev_info(&client->dev, "Detected TI %s chip\n",
1622 - names[data->kind - 1]);
1623 + dev_info(&client->dev, "Detected TI %s chip\n", names[data->kind]);
1624
1625 return 0;
1626
1627 diff --git a/drivers/hwmon/tmp421.c b/drivers/hwmon/tmp421.c
1628 index 4f7c051..738c472 100644
1629 --- a/drivers/hwmon/tmp421.c
1630 +++ b/drivers/hwmon/tmp421.c
1631 @@ -61,9 +61,9 @@ static const u8 TMP421_TEMP_LSB[4] = { 0x10, 0x11, 0x12, 0x13 };
1632 #define TMP423_DEVICE_ID 0x23
1633
1634 static const struct i2c_device_id tmp421_id[] = {
1635 - { "tmp421", tmp421 },
1636 - { "tmp422", tmp422 },
1637 - { "tmp423", tmp423 },
1638 + { "tmp421", 2 },
1639 + { "tmp422", 3 },
1640 + { "tmp423", 4 },
1641 { }
1642 };
1643 MODULE_DEVICE_TABLE(i2c, tmp421_id);
1644 @@ -73,21 +73,23 @@ struct tmp421_data {
1645 struct mutex update_lock;
1646 char valid;
1647 unsigned long last_updated;
1648 - int kind;
1649 + int channels;
1650 u8 config;
1651 s16 temp[4];
1652 };
1653
1654 static int temp_from_s16(s16 reg)
1655 {
1656 - int temp = reg;
1657 + /* Mask out status bits */
1658 + int temp = reg & ~0xf;
1659
1660 return (temp * 1000 + 128) / 256;
1661 }
1662
1663 static int temp_from_u16(u16 reg)
1664 {
1665 - int temp = reg;
1666 + /* Mask out status bits */
1667 + int temp = reg & ~0xf;
1668
1669 /* Add offset for extended temperature range. */
1670 temp -= 64 * 256;
1671 @@ -107,7 +109,7 @@ static struct tmp421_data *tmp421_update_device(struct device *dev)
1672 data->config = i2c_smbus_read_byte_data(client,
1673 TMP421_CONFIG_REG_1);
1674
1675 - for (i = 0; i <= data->kind; i++) {
1676 + for (i = 0; i < data->channels; i++) {
1677 data->temp[i] = i2c_smbus_read_byte_data(client,
1678 TMP421_TEMP_MSB[i]) << 8;
1679 data->temp[i] |= i2c_smbus_read_byte_data(client,
1680 @@ -166,7 +168,7 @@ static mode_t tmp421_is_visible(struct kobject *kobj, struct attribute *a,
1681 devattr = container_of(a, struct device_attribute, attr);
1682 index = to_sensor_dev_attr(devattr)->index;
1683
1684 - if (data->kind > index)
1685 + if (index < data->channels)
1686 return a->mode;
1687
1688 return 0;
1689 @@ -252,9 +254,9 @@ static int tmp421_detect(struct i2c_client *client,
1690 return -ENODEV;
1691 }
1692
1693 - strlcpy(info->type, tmp421_id[kind - 1].name, I2C_NAME_SIZE);
1694 + strlcpy(info->type, tmp421_id[kind].name, I2C_NAME_SIZE);
1695 dev_info(&adapter->dev, "Detected TI %s chip at 0x%02x\n",
1696 - names[kind - 1], client->addr);
1697 + names[kind], client->addr);
1698
1699 return 0;
1700 }
1701 @@ -271,7 +273,7 @@ static int tmp421_probe(struct i2c_client *client,
1702
1703 i2c_set_clientdata(client, data);
1704 mutex_init(&data->update_lock);
1705 - data->kind = id->driver_data;
1706 + data->channels = id->driver_data;
1707
1708 err = tmp421_init_client(client);
1709 if (err)
1710 diff --git a/drivers/macintosh/therm_adt746x.c b/drivers/macintosh/therm_adt746x.c
1711 index 5ff47ba..58809b0 100644
1712 --- a/drivers/macintosh/therm_adt746x.c
1713 +++ b/drivers/macintosh/therm_adt746x.c
1714 @@ -90,6 +90,8 @@ static struct task_struct *thread_therm = NULL;
1715
1716 static void write_both_fan_speed(struct thermostat *th, int speed);
1717 static void write_fan_speed(struct thermostat *th, int speed, int fan);
1718 +static void thermostat_create_files(void);
1719 +static void thermostat_remove_files(void);
1720
1721 static int
1722 write_reg(struct thermostat* th, int reg, u8 data)
1723 @@ -161,6 +163,8 @@ remove_thermostat(struct i2c_client *client)
1724 struct thermostat *th = i2c_get_clientdata(client);
1725 int i;
1726
1727 + thermostat_remove_files();
1728 +
1729 if (thread_therm != NULL) {
1730 kthread_stop(thread_therm);
1731 }
1732 @@ -449,6 +453,8 @@ static int probe_thermostat(struct i2c_client *client,
1733 return -ENOMEM;
1734 }
1735
1736 + thermostat_create_files();
1737 +
1738 return 0;
1739 }
1740
1741 @@ -566,7 +572,6 @@ thermostat_init(void)
1742 struct device_node* np;
1743 const u32 *prop;
1744 int i = 0, offset = 0;
1745 - int err;
1746
1747 np = of_find_node_by_name(NULL, "fan");
1748 if (!np)
1749 @@ -633,6 +638,17 @@ thermostat_init(void)
1750 return -ENODEV;
1751 }
1752
1753 +#ifndef CONFIG_I2C_POWERMAC
1754 + request_module("i2c-powermac");
1755 +#endif
1756 +
1757 + return i2c_add_driver(&thermostat_driver);
1758 +}
1759 +
1760 +static void thermostat_create_files(void)
1761 +{
1762 + int err;
1763 +
1764 err = device_create_file(&of_dev->dev, &dev_attr_sensor1_temperature);
1765 err |= device_create_file(&of_dev->dev, &dev_attr_sensor2_temperature);
1766 err |= device_create_file(&of_dev->dev, &dev_attr_sensor1_limit);
1767 @@ -647,16 +663,9 @@ thermostat_init(void)
1768 if (err)
1769 printk(KERN_WARNING
1770 "Failed to create tempertaure attribute file(s).\n");
1771 -
1772 -#ifndef CONFIG_I2C_POWERMAC
1773 - request_module("i2c-powermac");
1774 -#endif
1775 -
1776 - return i2c_add_driver(&thermostat_driver);
1777 }
1778
1779 -static void __exit
1780 -thermostat_exit(void)
1781 +static void thermostat_remove_files(void)
1782 {
1783 if (of_dev) {
1784 device_remove_file(&of_dev->dev, &dev_attr_sensor1_temperature);
1785 @@ -673,9 +682,14 @@ thermostat_exit(void)
1786 device_remove_file(&of_dev->dev,
1787 &dev_attr_sensor2_fan_speed);
1788
1789 - of_device_unregister(of_dev);
1790 }
1791 +}
1792 +
1793 +static void __exit
1794 +thermostat_exit(void)
1795 +{
1796 i2c_del_driver(&thermostat_driver);
1797 + of_device_unregister(of_dev);
1798 }
1799
1800 module_init(thermostat_init);
1801 diff --git a/drivers/md/dm-ioctl.c b/drivers/md/dm-ioctl.c
1802 index 1d66932..e3cf568 100644
1803 --- a/drivers/md/dm-ioctl.c
1804 +++ b/drivers/md/dm-ioctl.c
1805 @@ -897,16 +897,17 @@ static int do_resume(struct dm_ioctl *param)
1806 set_disk_ro(dm_disk(md), 1);
1807 }
1808
1809 - if (dm_suspended_md(md))
1810 + if (dm_suspended_md(md)) {
1811 r = dm_resume(md);
1812 + if (!r)
1813 + dm_kobject_uevent(md, KOBJ_CHANGE, param->event_nr);
1814 + }
1815
1816 if (old_map)
1817 dm_table_destroy(old_map);
1818
1819 - if (!r) {
1820 - dm_kobject_uevent(md, KOBJ_CHANGE, param->event_nr);
1821 + if (!r)
1822 r = __dev_status(md, param);
1823 - }
1824
1825 dm_put(md);
1826 return r;
1827 diff --git a/drivers/md/dm.c b/drivers/md/dm.c
1828 index aa4e2aa..fa786b9 100644
1829 --- a/drivers/md/dm.c
1830 +++ b/drivers/md/dm.c
1831 @@ -635,8 +635,10 @@ static void dec_pending(struct dm_io *io, int error)
1832 if (!md->barrier_error && io_error != -EOPNOTSUPP)
1833 md->barrier_error = io_error;
1834 end_io_acct(io);
1835 + free_io(md, io);
1836 } else {
1837 end_io_acct(io);
1838 + free_io(md, io);
1839
1840 if (io_error != DM_ENDIO_REQUEUE) {
1841 trace_block_bio_complete(md->queue, bio);
1842 @@ -644,8 +646,6 @@ static void dec_pending(struct dm_io *io, int error)
1843 bio_endio(bio, io_error);
1844 }
1845 }
1846 -
1847 - free_io(md, io);
1848 }
1849 }
1850
1851 diff --git a/drivers/media/dvb/dvb-core/dvb_net.c b/drivers/media/dvb/dvb-core/dvb_net.c
1852 index 8b8558f..b11533f 100644
1853 --- a/drivers/media/dvb/dvb-core/dvb_net.c
1854 +++ b/drivers/media/dvb/dvb-core/dvb_net.c
1855 @@ -504,6 +504,7 @@ static void dvb_net_ule( struct net_device *dev, const u8 *buf, size_t buf_len )
1856 "bytes left in TS. Resyncing.\n", ts_remain);
1857 priv->ule_sndu_len = 0;
1858 priv->need_pusi = 1;
1859 + ts += TS_SZ;
1860 continue;
1861 }
1862
1863 diff --git a/drivers/media/video/gspca/mr97310a.c b/drivers/media/video/gspca/mr97310a.c
1864 index 9154870..0493e40 100644
1865 --- a/drivers/media/video/gspca/mr97310a.c
1866 +++ b/drivers/media/video/gspca/mr97310a.c
1867 @@ -697,6 +697,12 @@ static int start_cif_cam(struct gspca_dev *gspca_dev)
1868 {0x13, 0x00, {0x01}, 1},
1869 {0, 0, {0}, 0}
1870 };
1871 + /* Without this command the cam won't work with USB-UHCI */
1872 + gspca_dev->usb_buf[0] = 0x0a;
1873 + gspca_dev->usb_buf[1] = 0x00;
1874 + err_code = mr_write(gspca_dev, 2);
1875 + if (err_code < 0)
1876 + return err_code;
1877 err_code = sensor_write_regs(gspca_dev, cif_sensor1_init_data,
1878 ARRAY_SIZE(cif_sensor1_init_data));
1879 }
1880 diff --git a/drivers/media/video/soc_mediabus.c b/drivers/media/video/soc_mediabus.c
1881 index f8d5c87..a4c0ef4 100644
1882 --- a/drivers/media/video/soc_mediabus.c
1883 +++ b/drivers/media/video/soc_mediabus.c
1884 @@ -134,7 +134,8 @@ EXPORT_SYMBOL(soc_mbus_bytes_per_line);
1885 const struct soc_mbus_pixelfmt *soc_mbus_get_fmtdesc(
1886 enum v4l2_mbus_pixelcode code)
1887 {
1888 - if ((unsigned int)(code - V4L2_MBUS_FMT_FIXED) > ARRAY_SIZE(mbus_fmt))
1889 + if (code - V4L2_MBUS_FMT_FIXED > ARRAY_SIZE(mbus_fmt) ||
1890 + code <= V4L2_MBUS_FMT_FIXED)
1891 return NULL;
1892 return mbus_fmt + code - V4L2_MBUS_FMT_FIXED - 1;
1893 }
1894 diff --git a/drivers/mmc/host/s3cmci.c b/drivers/mmc/host/s3cmci.c
1895 index d96e1ab..2fdf768 100644
1896 --- a/drivers/mmc/host/s3cmci.c
1897 +++ b/drivers/mmc/host/s3cmci.c
1898 @@ -1179,7 +1179,7 @@ static int s3cmci_card_present(struct mmc_host *mmc)
1899 struct s3c24xx_mci_pdata *pdata = host->pdata;
1900 int ret;
1901
1902 - if (pdata->gpio_detect == 0)
1903 + if (pdata->no_detect)
1904 return -ENOSYS;
1905
1906 ret = gpio_get_value(pdata->gpio_detect) ? 0 : 1;
1907 @@ -1360,6 +1360,8 @@ static struct mmc_host_ops s3cmci_ops = {
1908 static struct s3c24xx_mci_pdata s3cmci_def_pdata = {
1909 /* This is currently here to avoid a number of if (host->pdata)
1910 * checks. Any zero fields to ensure reasonable defaults are picked. */
1911 + .no_wprotect = 1,
1912 + .no_detect = 1,
1913 };
1914
1915 #ifdef CONFIG_CPU_FREQ
1916 diff --git a/drivers/net/wireless/airo.c b/drivers/net/wireless/airo.c
1917 index 4331d67..2a9f029 100644
1918 --- a/drivers/net/wireless/airo.c
1919 +++ b/drivers/net/wireless/airo.c
1920 @@ -5254,11 +5254,7 @@ static int set_wep_key(struct airo_info *ai, u16 index, const char *key,
1921 WepKeyRid wkr;
1922 int rc;
1923
1924 - if (keylen == 0) {
1925 - airo_print_err(ai->dev->name, "%s: key length to set was zero",
1926 - __func__);
1927 - return -1;
1928 - }
1929 + WARN_ON(keylen == 0);
1930
1931 memset(&wkr, 0, sizeof(wkr));
1932 wkr.len = cpu_to_le16(sizeof(wkr));
1933 @@ -6405,11 +6401,7 @@ static int airo_set_encode(struct net_device *dev,
1934 if (dwrq->length > MIN_KEY_SIZE)
1935 key.len = MAX_KEY_SIZE;
1936 else
1937 - if (dwrq->length > 0)
1938 - key.len = MIN_KEY_SIZE;
1939 - else
1940 - /* Disable the key */
1941 - key.len = 0;
1942 + key.len = MIN_KEY_SIZE;
1943 /* Check if the key is not marked as invalid */
1944 if(!(dwrq->flags & IW_ENCODE_NOKEY)) {
1945 /* Cleanup */
1946 @@ -6590,12 +6582,22 @@ static int airo_set_encodeext(struct net_device *dev,
1947 default:
1948 return -EINVAL;
1949 }
1950 - /* Send the key to the card */
1951 - rc = set_wep_key(local, idx, key.key, key.len, perm, 1);
1952 - if (rc < 0) {
1953 - airo_print_err(local->dev->name, "failed to set WEP key"
1954 - " at index %d: %d.", idx, rc);
1955 - return rc;
1956 + if (key.len == 0) {
1957 + rc = set_wep_tx_idx(local, idx, perm, 1);
1958 + if (rc < 0) {
1959 + airo_print_err(local->dev->name,
1960 + "failed to set WEP transmit index to %d: %d.",
1961 + idx, rc);
1962 + return rc;
1963 + }
1964 + } else {
1965 + rc = set_wep_key(local, idx, key.key, key.len, perm, 1);
1966 + if (rc < 0) {
1967 + airo_print_err(local->dev->name,
1968 + "failed to set WEP key at index %d: %d.",
1969 + idx, rc);
1970 + return rc;
1971 + }
1972 }
1973 }
1974
1975 diff --git a/drivers/net/wireless/ath/ath5k/ath5k.h b/drivers/net/wireless/ath/ath5k/ath5k.h
1976 index 6a2a967..bbd2f31 100644
1977 --- a/drivers/net/wireless/ath/ath5k/ath5k.h
1978 +++ b/drivers/net/wireless/ath/ath5k/ath5k.h
1979 @@ -541,7 +541,6 @@ struct ath5k_txq_info {
1980 /*
1981 * Transmit packet types.
1982 * used on tx control descriptor
1983 - * TODO: Use them inside base.c corectly
1984 */
1985 enum ath5k_pkt_type {
1986 AR5K_PKT_TYPE_NORMAL = 0,
1987 diff --git a/drivers/net/wireless/ath/ath5k/base.c b/drivers/net/wireless/ath/ath5k/base.c
1988 index e63b7c4..d6ee8ac 100644
1989 --- a/drivers/net/wireless/ath/ath5k/base.c
1990 +++ b/drivers/net/wireless/ath/ath5k/base.c
1991 @@ -1246,6 +1246,29 @@ ath5k_rxbuf_setup(struct ath5k_softc *sc, struct ath5k_buf *bf)
1992 return 0;
1993 }
1994
1995 +static enum ath5k_pkt_type get_hw_packet_type(struct sk_buff *skb)
1996 +{
1997 + struct ieee80211_hdr *hdr;
1998 + enum ath5k_pkt_type htype;
1999 + __le16 fc;
2000 +
2001 + hdr = (struct ieee80211_hdr *)skb->data;
2002 + fc = hdr->frame_control;
2003 +
2004 + if (ieee80211_is_beacon(fc))
2005 + htype = AR5K_PKT_TYPE_BEACON;
2006 + else if (ieee80211_is_probe_resp(fc))
2007 + htype = AR5K_PKT_TYPE_PROBE_RESP;
2008 + else if (ieee80211_is_atim(fc))
2009 + htype = AR5K_PKT_TYPE_ATIM;
2010 + else if (ieee80211_is_pspoll(fc))
2011 + htype = AR5K_PKT_TYPE_PSPOLL;
2012 + else
2013 + htype = AR5K_PKT_TYPE_NORMAL;
2014 +
2015 + return htype;
2016 +}
2017 +
2018 static int
2019 ath5k_txbuf_setup(struct ath5k_softc *sc, struct ath5k_buf *bf,
2020 struct ath5k_txq *txq)
2021 @@ -1300,7 +1323,8 @@ ath5k_txbuf_setup(struct ath5k_softc *sc, struct ath5k_buf *bf,
2022 sc->vif, pktlen, info));
2023 }
2024 ret = ah->ah_setup_tx_desc(ah, ds, pktlen,
2025 - ieee80211_get_hdrlen_from_skb(skb), AR5K_PKT_TYPE_NORMAL,
2026 + ieee80211_get_hdrlen_from_skb(skb),
2027 + get_hw_packet_type(skb),
2028 (sc->power_level * 2),
2029 hw_rate,
2030 info->control.rates[0].count, keyidx, ah->ah_tx_ant, flags,
2031 diff --git a/drivers/net/wireless/ath/ath9k/beacon.c b/drivers/net/wireless/ath/ath9k/beacon.c
2032 index 1660ef1..06eaaa9 100644
2033 --- a/drivers/net/wireless/ath/ath9k/beacon.c
2034 +++ b/drivers/net/wireless/ath/ath9k/beacon.c
2035 @@ -525,16 +525,13 @@ static void ath_beacon_config_ap(struct ath_softc *sc,
2036 {
2037 u32 nexttbtt, intval;
2038
2039 - /* Configure the timers only when the TSF has to be reset */
2040 -
2041 - if (!(sc->sc_flags & SC_OP_TSF_RESET))
2042 - return;
2043 -
2044 /* NB: the beacon interval is kept internally in TU's */
2045 intval = conf->beacon_interval & ATH9K_BEACON_PERIOD;
2046 intval /= ATH_BCBUF; /* for staggered beacons */
2047 nexttbtt = intval;
2048 - intval |= ATH9K_BEACON_RESET_TSF;
2049 +
2050 + if (sc->sc_flags & SC_OP_TSF_RESET)
2051 + intval |= ATH9K_BEACON_RESET_TSF;
2052
2053 /*
2054 * In AP mode we enable the beacon timers and SWBA interrupts to
2055 diff --git a/drivers/net/wireless/ath/ath9k/hw.c b/drivers/net/wireless/ath/ath9k/hw.c
2056 index ae37144..7c64aa5 100644
2057 --- a/drivers/net/wireless/ath/ath9k/hw.c
2058 +++ b/drivers/net/wireless/ath/ath9k/hw.c
2059 @@ -1345,6 +1345,16 @@ static void ath9k_hw_override_ini(struct ath_hw *ah,
2060 * Necessary to avoid issues on AR5416 2.0
2061 */
2062 REG_WRITE(ah, 0x9800 + (651 << 2), 0x11);
2063 +
2064 + /*
2065 + * Disable RIFS search on some chips to avoid baseband
2066 + * hang issues.
2067 + */
2068 + if (AR_SREV_9100(ah) || AR_SREV_9160(ah)) {
2069 + val = REG_READ(ah, AR_PHY_HEAVY_CLIP_FACTOR_RIFS);
2070 + val &= ~AR_PHY_RIFS_INIT_DELAY;
2071 + REG_WRITE(ah, AR_PHY_HEAVY_CLIP_FACTOR_RIFS, val);
2072 + }
2073 }
2074
2075 static u32 ath9k_hw_def_ini_fixup(struct ath_hw *ah,
2076 diff --git a/drivers/net/wireless/ath/ath9k/main.c b/drivers/net/wireless/ath/ath9k/main.c
2077 index 643bea3..4faafbd 100644
2078 --- a/drivers/net/wireless/ath/ath9k/main.c
2079 +++ b/drivers/net/wireless/ath/ath9k/main.c
2080 @@ -928,6 +928,7 @@ static void ath_key_delete(struct ath_common *common, struct ieee80211_key_conf
2081
2082 clear_bit(key->hw_key_idx + 64, common->keymap);
2083 if (common->splitmic) {
2084 + ath9k_hw_keyreset(ah, key->hw_key_idx + 32);
2085 clear_bit(key->hw_key_idx + 32, common->keymap);
2086 clear_bit(key->hw_key_idx + 64 + 32, common->keymap);
2087 }
2088 @@ -1848,6 +1849,8 @@ bad_free_hw:
2089
2090 void ath_set_hw_capab(struct ath_softc *sc, struct ieee80211_hw *hw)
2091 {
2092 + struct ath_hw *ah = sc->sc_ah;
2093 +
2094 hw->flags = IEEE80211_HW_RX_INCLUDES_FCS |
2095 IEEE80211_HW_HOST_BROADCAST_PS_BUFFERING |
2096 IEEE80211_HW_SIGNAL_DBM |
2097 @@ -1865,7 +1868,8 @@ void ath_set_hw_capab(struct ath_softc *sc, struct ieee80211_hw *hw)
2098 BIT(NL80211_IFTYPE_ADHOC) |
2099 BIT(NL80211_IFTYPE_MESH_POINT);
2100
2101 - hw->wiphy->flags &= ~WIPHY_FLAG_PS_ON_BY_DEFAULT;
2102 + if (AR_SREV_5416(ah))
2103 + hw->wiphy->flags &= ~WIPHY_FLAG_PS_ON_BY_DEFAULT;
2104
2105 hw->queues = 4;
2106 hw->max_rates = 4;
2107 diff --git a/drivers/net/wireless/ath/ath9k/phy.h b/drivers/net/wireless/ath/ath9k/phy.h
2108 index 31de27d..0999a49 100644
2109 --- a/drivers/net/wireless/ath/ath9k/phy.h
2110 +++ b/drivers/net/wireless/ath/ath9k/phy.h
2111 @@ -384,6 +384,9 @@ bool ath9k_hw_set_rf_regs(struct ath_hw *ah,
2112
2113 #define AR_PHY_HEAVY_CLIP_ENABLE 0x99E0
2114
2115 +#define AR_PHY_HEAVY_CLIP_FACTOR_RIFS 0x99EC
2116 +#define AR_PHY_RIFS_INIT_DELAY 0x03ff0000
2117 +
2118 #define AR_PHY_M_SLEEP 0x99f0
2119 #define AR_PHY_REFCLKDLY 0x99f4
2120 #define AR_PHY_REFCLKPD 0x99f8
2121 diff --git a/drivers/net/wireless/ath/ath9k/rc.c b/drivers/net/wireless/ath/ath9k/rc.c
2122 index 70fdb9d..1d6cf7d 100644
2123 --- a/drivers/net/wireless/ath/ath9k/rc.c
2124 +++ b/drivers/net/wireless/ath/ath9k/rc.c
2125 @@ -668,7 +668,7 @@ static void ath_get_rate(void *priv, struct ieee80211_sta *sta, void *priv_sta,
2126 struct ieee80211_tx_rate *rates = tx_info->control.rates;
2127 struct ieee80211_hdr *hdr = (struct ieee80211_hdr *)skb->data;
2128 __le16 fc = hdr->frame_control;
2129 - u8 try_per_rate, i = 0, rix, nrix;
2130 + u8 try_per_rate, i = 0, rix;
2131 int is_probe = 0;
2132
2133 if (rate_control_send_low(sta, priv_sta, txrc))
2134 @@ -688,26 +688,25 @@ static void ath_get_rate(void *priv, struct ieee80211_sta *sta, void *priv_sta,
2135
2136 rate_table = sc->cur_rate_table;
2137 rix = ath_rc_get_highest_rix(sc, ath_rc_priv, rate_table, &is_probe);
2138 - nrix = rix;
2139
2140 if (is_probe) {
2141 /* set one try for probe rates. For the
2142 * probes don't enable rts */
2143 ath_rc_rate_set_series(rate_table, &rates[i++], txrc,
2144 - 1, nrix, 0);
2145 + 1, rix, 0);
2146
2147 /* Get the next tried/allowed rate. No RTS for the next series
2148 * after the probe rate
2149 */
2150 - ath_rc_get_lower_rix(rate_table, ath_rc_priv, rix, &nrix);
2151 + ath_rc_get_lower_rix(rate_table, ath_rc_priv, rix, &rix);
2152 ath_rc_rate_set_series(rate_table, &rates[i++], txrc,
2153 - try_per_rate, nrix, 0);
2154 + try_per_rate, rix, 0);
2155
2156 tx_info->flags |= IEEE80211_TX_CTL_RATE_CTRL_PROBE;
2157 } else {
2158 /* Set the choosen rate. No RTS for first series entry. */
2159 ath_rc_rate_set_series(rate_table, &rates[i++], txrc,
2160 - try_per_rate, nrix, 0);
2161 + try_per_rate, rix, 0);
2162 }
2163
2164 /* Fill in the other rates for multirate retry */
2165 @@ -716,10 +715,10 @@ static void ath_get_rate(void *priv, struct ieee80211_sta *sta, void *priv_sta,
2166 if (i + 1 == 4)
2167 try_per_rate = 4;
2168
2169 - ath_rc_get_lower_rix(rate_table, ath_rc_priv, rix, &nrix);
2170 + ath_rc_get_lower_rix(rate_table, ath_rc_priv, rix, &rix);
2171 /* All other rates in the series have RTS enabled */
2172 ath_rc_rate_set_series(rate_table, &rates[i], txrc,
2173 - try_per_rate, nrix, 1);
2174 + try_per_rate, rix, 1);
2175 }
2176
2177 /*
2178 diff --git a/drivers/net/wireless/b43/main.c b/drivers/net/wireless/b43/main.c
2179 index 490fb45..b59166c 100644
2180 --- a/drivers/net/wireless/b43/main.c
2181 +++ b/drivers/net/wireless/b43/main.c
2182 @@ -3970,6 +3970,7 @@ static int b43_wireless_core_start(struct b43_wldev *dev)
2183 }
2184
2185 /* We are ready to run. */
2186 + ieee80211_wake_queues(dev->wl->hw);
2187 b43_set_status(dev, B43_STAT_STARTED);
2188
2189 /* Start data flow (TX/RX). */
2190 @@ -4379,8 +4380,6 @@ static int b43_wireless_core_init(struct b43_wldev *dev)
2191
2192 ieee80211_wake_queues(dev->wl->hw);
2193
2194 - ieee80211_wake_queues(dev->wl->hw);
2195 -
2196 b43_set_status(dev, B43_STAT_INITIALIZED);
2197
2198 out:
2199 diff --git a/drivers/net/wireless/b43legacy/main.c b/drivers/net/wireless/b43legacy/main.c
2200 index 4a905b6..6d21b49 100644
2201 --- a/drivers/net/wireless/b43legacy/main.c
2202 +++ b/drivers/net/wireless/b43legacy/main.c
2203 @@ -2921,6 +2921,7 @@ static int b43legacy_wireless_core_start(struct b43legacy_wldev *dev)
2204 goto out;
2205 }
2206 /* We are ready to run. */
2207 + ieee80211_wake_queues(dev->wl->hw);
2208 b43legacy_set_status(dev, B43legacy_STAT_STARTED);
2209
2210 /* Start data flow (TX/RX) */
2211 @@ -3341,6 +3342,7 @@ static int b43legacy_wireless_core_init(struct b43legacy_wldev *dev)
2212 b43legacy_security_init(dev);
2213 b43legacy_rng_init(wl);
2214
2215 + ieee80211_wake_queues(dev->wl->hw);
2216 b43legacy_set_status(dev, B43legacy_STAT_INITIALIZED);
2217
2218 b43legacy_leds_init(dev);
2219 diff --git a/drivers/net/wireless/p54/p54pci.c b/drivers/net/wireless/p54/p54pci.c
2220 index a72f7c2..4bf4c21 100644
2221 --- a/drivers/net/wireless/p54/p54pci.c
2222 +++ b/drivers/net/wireless/p54/p54pci.c
2223 @@ -157,6 +157,14 @@ static void p54p_refill_rx_ring(struct ieee80211_hw *dev,
2224 skb_tail_pointer(skb),
2225 priv->common.rx_mtu + 32,
2226 PCI_DMA_FROMDEVICE);
2227 +
2228 + if (pci_dma_mapping_error(priv->pdev, mapping)) {
2229 + dev_kfree_skb_any(skb);
2230 + dev_err(&priv->pdev->dev,
2231 + "RX DMA Mapping error\n");
2232 + break;
2233 + }
2234 +
2235 desc->host_addr = cpu_to_le32(mapping);
2236 desc->device_addr = 0; // FIXME: necessary?
2237 desc->len = cpu_to_le16(priv->common.rx_mtu + 32);
2238 @@ -325,14 +333,20 @@ static void p54p_tx(struct ieee80211_hw *dev, struct sk_buff *skb)
2239 u32 device_idx, idx, i;
2240
2241 spin_lock_irqsave(&priv->lock, flags);
2242 -
2243 device_idx = le32_to_cpu(ring_control->device_idx[1]);
2244 idx = le32_to_cpu(ring_control->host_idx[1]);
2245 i = idx % ARRAY_SIZE(ring_control->tx_data);
2246
2247 - priv->tx_buf_data[i] = skb;
2248 mapping = pci_map_single(priv->pdev, skb->data, skb->len,
2249 PCI_DMA_TODEVICE);
2250 + if (pci_dma_mapping_error(priv->pdev, mapping)) {
2251 + spin_unlock_irqrestore(&priv->lock, flags);
2252 + p54_free_skb(dev, skb);
2253 + dev_err(&priv->pdev->dev, "TX DMA mapping error\n");
2254 + return ;
2255 + }
2256 + priv->tx_buf_data[i] = skb;
2257 +
2258 desc = &ring_control->tx_data[i];
2259 desc->host_addr = cpu_to_le32(mapping);
2260 desc->device_addr = ((struct p54_hdr *)skb->data)->req_id;
2261 diff --git a/drivers/net/wireless/p54/p54usb.c b/drivers/net/wireless/p54/p54usb.c
2262 index 92af9b9..8742640 100644
2263 --- a/drivers/net/wireless/p54/p54usb.c
2264 +++ b/drivers/net/wireless/p54/p54usb.c
2265 @@ -60,6 +60,7 @@ static struct usb_device_id p54u_table[] __devinitdata = {
2266 {USB_DEVICE(0x06b9, 0x0121)}, /* Thomson SpeedTouch 121g */
2267 {USB_DEVICE(0x0707, 0xee13)}, /* SMC 2862W-G version 2 */
2268 {USB_DEVICE(0x083a, 0x4521)}, /* Siemens Gigaset USB Adapter 54 version 2 */
2269 + {USB_DEVICE(0x083a, 0xf503)}, /* Accton FD7050E ver 1010ec */
2270 {USB_DEVICE(0x0846, 0x4240)}, /* Netgear WG111 (v2) */
2271 {USB_DEVICE(0x0915, 0x2000)}, /* Cohiba Proto board */
2272 {USB_DEVICE(0x0915, 0x2002)}, /* Cohiba Proto board */
2273 diff --git a/drivers/pci/hotplug/ibmphp_ebda.c b/drivers/pci/hotplug/ibmphp_ebda.c
2274 index c1abac8..5becbde 100644
2275 --- a/drivers/pci/hotplug/ibmphp_ebda.c
2276 +++ b/drivers/pci/hotplug/ibmphp_ebda.c
2277 @@ -245,7 +245,7 @@ static void __init print_ebda_hpc (void)
2278
2279 int __init ibmphp_access_ebda (void)
2280 {
2281 - u8 format, num_ctlrs, rio_complete, hs_complete;
2282 + u8 format, num_ctlrs, rio_complete, hs_complete, ebda_sz;
2283 u16 ebda_seg, num_entries, next_offset, offset, blk_id, sub_addr, re, rc_id, re_id, base;
2284 int rc = 0;
2285
2286 @@ -260,7 +260,16 @@ int __init ibmphp_access_ebda (void)
2287 iounmap (io_mem);
2288 debug ("returned ebda segment: %x\n", ebda_seg);
2289
2290 - io_mem = ioremap(ebda_seg<<4, 1024);
2291 + io_mem = ioremap(ebda_seg<<4, 1);
2292 + if (!io_mem)
2293 + return -ENOMEM;
2294 + ebda_sz = readb(io_mem);
2295 + iounmap(io_mem);
2296 + debug("ebda size: %d(KiB)\n", ebda_sz);
2297 + if (ebda_sz == 0)
2298 + return -ENOMEM;
2299 +
2300 + io_mem = ioremap(ebda_seg<<4, (ebda_sz * 1024));
2301 if (!io_mem )
2302 return -ENOMEM;
2303 next_offset = 0x180;
2304 diff --git a/drivers/platform/x86/Kconfig b/drivers/platform/x86/Kconfig
2305 index f526e73..11fce79 100644
2306 --- a/drivers/platform/x86/Kconfig
2307 +++ b/drivers/platform/x86/Kconfig
2308 @@ -319,9 +319,15 @@ config THINKPAD_ACPI_VIDEO
2309 server running, phase of the moon, and the current mood of
2310 Schroedinger's cat. If you can use X.org's RandR to control
2311 your ThinkPad's video output ports instead of this feature,
2312 - don't think twice: do it and say N here to save some memory.
2313 + don't think twice: do it and say N here to save memory and avoid
2314 + bad interactions with X.org.
2315
2316 - If you are not sure, say Y here.
2317 + NOTE: access to this feature is limited to processes with the
2318 + CAP_SYS_ADMIN capability, to avoid local DoS issues in platforms
2319 + where it interacts badly with X.org.
2320 +
2321 + If you are not sure, say Y here but do try to check if you could
2322 + be using X.org RandR instead.
2323
2324 config THINKPAD_ACPI_HOTKEY_POLL
2325 bool "Support NVRAM polling for hot keys"
2326 diff --git a/drivers/platform/x86/eeepc-laptop.c b/drivers/platform/x86/eeepc-laptop.c
2327 index e2be6bb..6a47bb7 100644
2328 --- a/drivers/platform/x86/eeepc-laptop.c
2329 +++ b/drivers/platform/x86/eeepc-laptop.c
2330 @@ -1277,7 +1277,8 @@ static void eeepc_dmi_check(struct eeepc_laptop *eeepc)
2331 * hotplug code. In fact, current hotplug code seems to unplug another
2332 * device...
2333 */
2334 - if (strcmp(model, "1005HA") == 0 || strcmp(model, "1201N") == 0) {
2335 + if (strcmp(model, "1005HA") == 0 || strcmp(model, "1201N") == 0 ||
2336 + strcmp(model, "1005PE") == 0) {
2337 eeepc->hotplug_disabled = true;
2338 pr_info("wlan hotplug disabled\n");
2339 }
2340 diff --git a/drivers/platform/x86/thinkpad_acpi.c b/drivers/platform/x86/thinkpad_acpi.c
2341 index eb603f1..e7b0c3b 100644
2342 --- a/drivers/platform/x86/thinkpad_acpi.c
2343 +++ b/drivers/platform/x86/thinkpad_acpi.c
2344 @@ -286,6 +286,7 @@ struct ibm_init_struct {
2345 char param[32];
2346
2347 int (*init) (struct ibm_init_struct *);
2348 + mode_t base_procfs_mode;
2349 struct ibm_struct *data;
2350 };
2351
2352 @@ -2082,6 +2083,7 @@ static struct attribute_set *hotkey_dev_attributes;
2353
2354 static void tpacpi_driver_event(const unsigned int hkey_event);
2355 static void hotkey_driver_event(const unsigned int scancode);
2356 +static void hotkey_poll_setup(const bool may_warn);
2357
2358 /* HKEY.MHKG() return bits */
2359 #define TP_HOTKEY_TABLET_MASK (1 << 3)
2360 @@ -2264,6 +2266,8 @@ static int tpacpi_hotkey_driver_mask_set(const u32 mask)
2361
2362 rc = hotkey_mask_set((hotkey_acpi_mask | hotkey_driver_mask) &
2363 ~hotkey_source_mask);
2364 + hotkey_poll_setup(true);
2365 +
2366 mutex_unlock(&hotkey_mutex);
2367
2368 return rc;
2369 @@ -2548,7 +2552,7 @@ static void hotkey_poll_stop_sync(void)
2370 }
2371
2372 /* call with hotkey_mutex held */
2373 -static void hotkey_poll_setup(bool may_warn)
2374 +static void hotkey_poll_setup(const bool may_warn)
2375 {
2376 const u32 poll_driver_mask = hotkey_driver_mask & hotkey_source_mask;
2377 const u32 poll_user_mask = hotkey_user_mask & hotkey_source_mask;
2378 @@ -2579,7 +2583,7 @@ static void hotkey_poll_setup(bool may_warn)
2379 }
2380 }
2381
2382 -static void hotkey_poll_setup_safe(bool may_warn)
2383 +static void hotkey_poll_setup_safe(const bool may_warn)
2384 {
2385 mutex_lock(&hotkey_mutex);
2386 hotkey_poll_setup(may_warn);
2387 @@ -2597,7 +2601,11 @@ static void hotkey_poll_set_freq(unsigned int freq)
2388
2389 #else /* CONFIG_THINKPAD_ACPI_HOTKEY_POLL */
2390
2391 -static void hotkey_poll_setup_safe(bool __unused)
2392 +static void hotkey_poll_setup(const bool __unused)
2393 +{
2394 +}
2395 +
2396 +static void hotkey_poll_setup_safe(const bool __unused)
2397 {
2398 }
2399
2400 @@ -2607,16 +2615,11 @@ static int hotkey_inputdev_open(struct input_dev *dev)
2401 {
2402 switch (tpacpi_lifecycle) {
2403 case TPACPI_LIFE_INIT:
2404 - /*
2405 - * hotkey_init will call hotkey_poll_setup_safe
2406 - * at the appropriate moment
2407 - */
2408 - return 0;
2409 - case TPACPI_LIFE_EXITING:
2410 - return -EBUSY;
2411 case TPACPI_LIFE_RUNNING:
2412 hotkey_poll_setup_safe(false);
2413 return 0;
2414 + case TPACPI_LIFE_EXITING:
2415 + return -EBUSY;
2416 }
2417
2418 /* Should only happen if tpacpi_lifecycle is corrupt */
2419 @@ -2627,7 +2630,7 @@ static int hotkey_inputdev_open(struct input_dev *dev)
2420 static void hotkey_inputdev_close(struct input_dev *dev)
2421 {
2422 /* disable hotkey polling when possible */
2423 - if (tpacpi_lifecycle == TPACPI_LIFE_RUNNING &&
2424 + if (tpacpi_lifecycle != TPACPI_LIFE_EXITING &&
2425 !(hotkey_source_mask & hotkey_driver_mask))
2426 hotkey_poll_setup_safe(false);
2427 }
2428 @@ -3655,13 +3658,19 @@ static void hotkey_notify(struct ibm_struct *ibm, u32 event)
2429 break;
2430 case 3:
2431 /* 0x3000-0x3FFF: bay-related wakeups */
2432 - if (hkey == TP_HKEY_EV_BAYEJ_ACK) {
2433 + switch (hkey) {
2434 + case TP_HKEY_EV_BAYEJ_ACK:
2435 hotkey_autosleep_ack = 1;
2436 printk(TPACPI_INFO
2437 "bay ejected\n");
2438 hotkey_wakeup_hotunplug_complete_notify_change();
2439 known_ev = true;
2440 - } else {
2441 + break;
2442 + case TP_HKEY_EV_OPTDRV_EJ:
2443 + /* FIXME: kick libata if SATA link offline */
2444 + known_ev = true;
2445 + break;
2446 + default:
2447 known_ev = false;
2448 }
2449 break;
2450 @@ -3870,7 +3879,7 @@ enum {
2451 TP_ACPI_BLUETOOTH_HWPRESENT = 0x01, /* Bluetooth hw available */
2452 TP_ACPI_BLUETOOTH_RADIOSSW = 0x02, /* Bluetooth radio enabled */
2453 TP_ACPI_BLUETOOTH_RESUMECTRL = 0x04, /* Bluetooth state at resume:
2454 - off / last state */
2455 + 0 = disable, 1 = enable */
2456 };
2457
2458 enum {
2459 @@ -3916,10 +3925,11 @@ static int bluetooth_set_status(enum tpacpi_rfkill_state state)
2460 }
2461 #endif
2462
2463 - /* We make sure to keep TP_ACPI_BLUETOOTH_RESUMECTRL off */
2464 - status = TP_ACPI_BLUETOOTH_RESUMECTRL;
2465 if (state == TPACPI_RFK_RADIO_ON)
2466 - status |= TP_ACPI_BLUETOOTH_RADIOSSW;
2467 + status = TP_ACPI_BLUETOOTH_RADIOSSW
2468 + | TP_ACPI_BLUETOOTH_RESUMECTRL;
2469 + else
2470 + status = 0;
2471
2472 if (!acpi_evalf(hkey_handle, NULL, "SBDC", "vd", status))
2473 return -EIO;
2474 @@ -4070,7 +4080,7 @@ enum {
2475 TP_ACPI_WANCARD_HWPRESENT = 0x01, /* Wan hw available */
2476 TP_ACPI_WANCARD_RADIOSSW = 0x02, /* Wan radio enabled */
2477 TP_ACPI_WANCARD_RESUMECTRL = 0x04, /* Wan state at resume:
2478 - off / last state */
2479 + 0 = disable, 1 = enable */
2480 };
2481
2482 #define TPACPI_RFK_WWAN_SW_NAME "tpacpi_wwan_sw"
2483 @@ -4107,10 +4117,11 @@ static int wan_set_status(enum tpacpi_rfkill_state state)
2484 }
2485 #endif
2486
2487 - /* We make sure to set TP_ACPI_WANCARD_RESUMECTRL */
2488 - status = TP_ACPI_WANCARD_RESUMECTRL;
2489 if (state == TPACPI_RFK_RADIO_ON)
2490 - status |= TP_ACPI_WANCARD_RADIOSSW;
2491 + status = TP_ACPI_WANCARD_RADIOSSW
2492 + | TP_ACPI_WANCARD_RESUMECTRL;
2493 + else
2494 + status = 0;
2495
2496 if (!acpi_evalf(hkey_handle, NULL, "SWAN", "vd", status))
2497 return -EIO;
2498 @@ -4619,6 +4630,10 @@ static int video_read(struct seq_file *m)
2499 return 0;
2500 }
2501
2502 + /* Even reads can crash X.org, so... */
2503 + if (!capable(CAP_SYS_ADMIN))
2504 + return -EPERM;
2505 +
2506 status = video_outputsw_get();
2507 if (status < 0)
2508 return status;
2509 @@ -4652,6 +4667,10 @@ static int video_write(char *buf)
2510 if (video_supported == TPACPI_VIDEO_NONE)
2511 return -ENODEV;
2512
2513 + /* Even reads can crash X.org, let alone writes... */
2514 + if (!capable(CAP_SYS_ADMIN))
2515 + return -EPERM;
2516 +
2517 enable = 0;
2518 disable = 0;
2519
2520 @@ -6133,13 +6152,13 @@ static const struct tpacpi_quirk brightness_quirk_table[] __initconst = {
2521 TPACPI_Q_IBM('1', 'Y', TPACPI_BRGHT_Q_EC), /* T43/p ATI */
2522
2523 /* Models with ATI GPUs that can use ECNVRAM */
2524 - TPACPI_Q_IBM('1', 'R', TPACPI_BRGHT_Q_EC),
2525 + TPACPI_Q_IBM('1', 'R', TPACPI_BRGHT_Q_EC), /* R50,51 T40-42 */
2526 TPACPI_Q_IBM('1', 'Q', TPACPI_BRGHT_Q_ASK|TPACPI_BRGHT_Q_EC),
2527 - TPACPI_Q_IBM('7', '6', TPACPI_BRGHT_Q_ASK|TPACPI_BRGHT_Q_EC),
2528 + TPACPI_Q_IBM('7', '6', TPACPI_BRGHT_Q_EC), /* R52 */
2529 TPACPI_Q_IBM('7', '8', TPACPI_BRGHT_Q_ASK|TPACPI_BRGHT_Q_EC),
2530
2531 /* Models with Intel Extreme Graphics 2 */
2532 - TPACPI_Q_IBM('1', 'U', TPACPI_BRGHT_Q_NOEC),
2533 + TPACPI_Q_IBM('1', 'U', TPACPI_BRGHT_Q_NOEC), /* X40 */
2534 TPACPI_Q_IBM('1', 'V', TPACPI_BRGHT_Q_ASK|TPACPI_BRGHT_Q_EC),
2535 TPACPI_Q_IBM('1', 'W', TPACPI_BRGHT_Q_ASK|TPACPI_BRGHT_Q_EC),
2536
2537 @@ -6522,7 +6541,8 @@ static int volume_set_status(const u8 status)
2538 return volume_set_status_ec(status);
2539 }
2540
2541 -static int volume_set_mute_ec(const bool mute)
2542 +/* returns < 0 on error, 0 on no change, 1 on change */
2543 +static int __volume_set_mute_ec(const bool mute)
2544 {
2545 int rc;
2546 u8 s, n;
2547 @@ -6537,22 +6557,37 @@ static int volume_set_mute_ec(const bool mute)
2548 n = (mute) ? s | TP_EC_AUDIO_MUTESW_MSK :
2549 s & ~TP_EC_AUDIO_MUTESW_MSK;
2550
2551 - if (n != s)
2552 + if (n != s) {
2553 rc = volume_set_status_ec(n);
2554 + if (!rc)
2555 + rc = 1;
2556 + }
2557
2558 unlock:
2559 mutex_unlock(&volume_mutex);
2560 return rc;
2561 }
2562
2563 +static int volume_alsa_set_mute(const bool mute)
2564 +{
2565 + dbg_printk(TPACPI_DBG_MIXER, "ALSA: trying to %smute\n",
2566 + (mute) ? "" : "un");
2567 + return __volume_set_mute_ec(mute);
2568 +}
2569 +
2570 static int volume_set_mute(const bool mute)
2571 {
2572 + int rc;
2573 +
2574 dbg_printk(TPACPI_DBG_MIXER, "trying to %smute\n",
2575 (mute) ? "" : "un");
2576 - return volume_set_mute_ec(mute);
2577 +
2578 + rc = __volume_set_mute_ec(mute);
2579 + return (rc < 0) ? rc : 0;
2580 }
2581
2582 -static int volume_set_volume_ec(const u8 vol)
2583 +/* returns < 0 on error, 0 on no change, 1 on change */
2584 +static int __volume_set_volume_ec(const u8 vol)
2585 {
2586 int rc;
2587 u8 s, n;
2588 @@ -6569,19 +6604,22 @@ static int volume_set_volume_ec(const u8 vol)
2589
2590 n = (s & ~TP_EC_AUDIO_LVL_MSK) | vol;
2591
2592 - if (n != s)
2593 + if (n != s) {
2594 rc = volume_set_status_ec(n);
2595 + if (!rc)
2596 + rc = 1;
2597 + }
2598
2599 unlock:
2600 mutex_unlock(&volume_mutex);
2601 return rc;
2602 }
2603
2604 -static int volume_set_volume(const u8 vol)
2605 +static int volume_alsa_set_volume(const u8 vol)
2606 {
2607 dbg_printk(TPACPI_DBG_MIXER,
2608 - "trying to set volume level to %hu\n", vol);
2609 - return volume_set_volume_ec(vol);
2610 + "ALSA: trying to set volume level to %hu\n", vol);
2611 + return __volume_set_volume_ec(vol);
2612 }
2613
2614 static void volume_alsa_notify_change(void)
2615 @@ -6628,7 +6666,7 @@ static int volume_alsa_vol_get(struct snd_kcontrol *kcontrol,
2616 static int volume_alsa_vol_put(struct snd_kcontrol *kcontrol,
2617 struct snd_ctl_elem_value *ucontrol)
2618 {
2619 - return volume_set_volume(ucontrol->value.integer.value[0]);
2620 + return volume_alsa_set_volume(ucontrol->value.integer.value[0]);
2621 }
2622
2623 #define volume_alsa_mute_info snd_ctl_boolean_mono_info
2624 @@ -6651,7 +6689,7 @@ static int volume_alsa_mute_get(struct snd_kcontrol *kcontrol,
2625 static int volume_alsa_mute_put(struct snd_kcontrol *kcontrol,
2626 struct snd_ctl_elem_value *ucontrol)
2627 {
2628 - return volume_set_mute(!ucontrol->value.integer.value[0]);
2629 + return volume_alsa_set_mute(!ucontrol->value.integer.value[0]);
2630 }
2631
2632 static struct snd_kcontrol_new volume_alsa_control_vol __devinitdata = {
2633 @@ -8477,9 +8515,10 @@ static int __init ibm_init(struct ibm_init_struct *iibm)
2634 "%s installed\n", ibm->name);
2635
2636 if (ibm->read) {
2637 - mode_t mode;
2638 + mode_t mode = iibm->base_procfs_mode;
2639
2640 - mode = S_IRUGO;
2641 + if (!mode)
2642 + mode = S_IRUGO;
2643 if (ibm->write)
2644 mode |= S_IWUSR;
2645 entry = proc_create_data(ibm->name, mode, proc_dir,
2646 @@ -8670,6 +8709,7 @@ static struct ibm_init_struct ibms_init[] __initdata = {
2647 #ifdef CONFIG_THINKPAD_ACPI_VIDEO
2648 {
2649 .init = video_init,
2650 + .base_procfs_mode = S_IRUSR,
2651 .data = &video_driver_data,
2652 },
2653 #endif
2654 @@ -9032,6 +9072,9 @@ static int __init thinkpad_acpi_module_init(void)
2655 return ret;
2656 }
2657 }
2658 +
2659 + tpacpi_lifecycle = TPACPI_LIFE_RUNNING;
2660 +
2661 ret = input_register_device(tpacpi_inputdev);
2662 if (ret < 0) {
2663 printk(TPACPI_ERR "unable to register input device\n");
2664 @@ -9041,7 +9084,6 @@ static int __init thinkpad_acpi_module_init(void)
2665 tp_features.input_device_registered = 1;
2666 }
2667
2668 - tpacpi_lifecycle = TPACPI_LIFE_RUNNING;
2669 return 0;
2670 }
2671
2672 diff --git a/drivers/rtc/class.c b/drivers/rtc/class.c
2673 index be5a6b7..40845c7 100644
2674 --- a/drivers/rtc/class.c
2675 +++ b/drivers/rtc/class.c
2676 @@ -226,6 +226,7 @@ static void __exit rtc_exit(void)
2677 {
2678 rtc_dev_exit();
2679 class_destroy(rtc_class);
2680 + idr_destroy(&rtc_idr);
2681 }
2682
2683 subsys_initcall(rtc_init);
2684 diff --git a/drivers/rtc/rtc-coh901331.c b/drivers/rtc/rtc-coh901331.c
2685 index 03ea530..44c4399 100644
2686 --- a/drivers/rtc/rtc-coh901331.c
2687 +++ b/drivers/rtc/rtc-coh901331.c
2688 @@ -271,12 +271,13 @@ static int coh901331_resume(struct platform_device *pdev)
2689 {
2690 struct coh901331_port *rtap = dev_get_drvdata(&pdev->dev);
2691
2692 - if (device_may_wakeup(&pdev->dev))
2693 + if (device_may_wakeup(&pdev->dev)) {
2694 disable_irq_wake(rtap->irq);
2695 - else
2696 + } else {
2697 clk_enable(rtap->clk);
2698 writel(rtap->irqmaskstore, rtap->virtbase + COH901331_IRQ_MASK);
2699 clk_disable(rtap->clk);
2700 + }
2701 return 0;
2702 }
2703 #else
2704 diff --git a/drivers/scsi/mpt2sas/mpt2sas_scsih.c b/drivers/scsi/mpt2sas/mpt2sas_scsih.c
2705 index efabea1..cd55176 100644
2706 --- a/drivers/scsi/mpt2sas/mpt2sas_scsih.c
2707 +++ b/drivers/scsi/mpt2sas/mpt2sas_scsih.c
2708 @@ -5998,6 +5998,8 @@ _scsih_remove(struct pci_dev *pdev)
2709 struct _sas_port *mpt2sas_port;
2710 struct _sas_device *sas_device;
2711 struct _sas_node *expander_sibling;
2712 + struct _raid_device *raid_device, *next;
2713 + struct MPT2SAS_TARGET *sas_target_priv_data;
2714 struct workqueue_struct *wq;
2715 unsigned long flags;
2716
2717 @@ -6011,6 +6013,21 @@ _scsih_remove(struct pci_dev *pdev)
2718 if (wq)
2719 destroy_workqueue(wq);
2720
2721 + /* release all the volumes */
2722 + list_for_each_entry_safe(raid_device, next, &ioc->raid_device_list,
2723 + list) {
2724 + if (raid_device->starget) {
2725 + sas_target_priv_data =
2726 + raid_device->starget->hostdata;
2727 + sas_target_priv_data->deleted = 1;
2728 + scsi_remove_target(&raid_device->starget->dev);
2729 + }
2730 + printk(MPT2SAS_INFO_FMT "removing handle(0x%04x), wwid"
2731 + "(0x%016llx)\n", ioc->name, raid_device->handle,
2732 + (unsigned long long) raid_device->wwid);
2733 + _scsih_raid_device_remove(ioc, raid_device);
2734 + }
2735 +
2736 /* free ports attached to the sas_host */
2737 retry_again:
2738 list_for_each_entry(mpt2sas_port,
2739 diff --git a/drivers/scsi/qla1280.c b/drivers/scsi/qla1280.c
2740 index 8371d91..49ac414 100644
2741 --- a/drivers/scsi/qla1280.c
2742 +++ b/drivers/scsi/qla1280.c
2743 @@ -1640,8 +1640,10 @@ qla1280_load_firmware_pio(struct scsi_qla_host *ha)
2744 uint16_t mb[MAILBOX_REGISTER_COUNT], i;
2745 int err;
2746
2747 + spin_unlock_irq(ha->host->host_lock);
2748 err = request_firmware(&fw, ql1280_board_tbl[ha->devnum].fwname,
2749 &ha->pdev->dev);
2750 + spin_lock_irq(ha->host->host_lock);
2751 if (err) {
2752 printk(KERN_ERR "Failed to load image \"%s\" err %d\n",
2753 ql1280_board_tbl[ha->devnum].fwname, err);
2754 @@ -1699,8 +1701,10 @@ qla1280_load_firmware_dma(struct scsi_qla_host *ha)
2755 return -ENOMEM;
2756 #endif
2757
2758 + spin_unlock_irq(ha->host->host_lock);
2759 err = request_firmware(&fw, ql1280_board_tbl[ha->devnum].fwname,
2760 &ha->pdev->dev);
2761 + spin_lock_irq(ha->host->host_lock);
2762 if (err) {
2763 printk(KERN_ERR "Failed to load image \"%s\" err %d\n",
2764 ql1280_board_tbl[ha->devnum].fwname, err);
2765 diff --git a/drivers/serial/imx.c b/drivers/serial/imx.c
2766 index 60d665a..d00fcf8 100644
2767 --- a/drivers/serial/imx.c
2768 +++ b/drivers/serial/imx.c
2769 @@ -1279,7 +1279,7 @@ static int serial_imx_probe(struct platform_device *pdev)
2770 sport->use_irda = 1;
2771 #endif
2772
2773 - if (pdata->init) {
2774 + if (pdata && pdata->init) {
2775 ret = pdata->init(pdev);
2776 if (ret)
2777 goto clkput;
2778 @@ -1292,7 +1292,7 @@ static int serial_imx_probe(struct platform_device *pdev)
2779
2780 return 0;
2781 deinit:
2782 - if (pdata->exit)
2783 + if (pdata && pdata->exit)
2784 pdata->exit(pdev);
2785 clkput:
2786 clk_put(sport->clk);
2787 @@ -1321,7 +1321,7 @@ static int serial_imx_remove(struct platform_device *pdev)
2788
2789 clk_disable(sport->clk);
2790
2791 - if (pdata->exit)
2792 + if (pdata && pdata->exit)
2793 pdata->exit(pdev);
2794
2795 iounmap(sport->port.membase);
2796 diff --git a/drivers/staging/Kconfig b/drivers/staging/Kconfig
2797 index fc2e963..ed77d88 100644
2798 --- a/drivers/staging/Kconfig
2799 +++ b/drivers/staging/Kconfig
2800 @@ -81,8 +81,6 @@ source "drivers/staging/rtl8192u/Kconfig"
2801
2802 source "drivers/staging/rtl8192e/Kconfig"
2803
2804 -source "drivers/staging/mimio/Kconfig"
2805 -
2806 source "drivers/staging/frontier/Kconfig"
2807
2808 source "drivers/staging/dream/Kconfig"
2809 diff --git a/drivers/staging/Makefile b/drivers/staging/Makefile
2810 index b5e67b8..6035bff 100644
2811 --- a/drivers/staging/Makefile
2812 +++ b/drivers/staging/Makefile
2813 @@ -23,7 +23,6 @@ obj-$(CONFIG_R8187SE) += rtl8187se/
2814 obj-$(CONFIG_RTL8192SU) += rtl8192su/
2815 obj-$(CONFIG_RTL8192U) += rtl8192u/
2816 obj-$(CONFIG_RTL8192E) += rtl8192e/
2817 -obj-$(CONFIG_INPUT_MIMIO) += mimio/
2818 obj-$(CONFIG_TRANZPORT) += frontier/
2819 obj-$(CONFIG_DREAM) += dream/
2820 obj-$(CONFIG_POHMELFS) += pohmelfs/
2821 diff --git a/drivers/staging/hv/vmbus_drv.c b/drivers/staging/hv/vmbus_drv.c
2822 index 894eecf..6acc49a 100644
2823 --- a/drivers/staging/hv/vmbus_drv.c
2824 +++ b/drivers/staging/hv/vmbus_drv.c
2825 @@ -24,6 +24,8 @@
2826 #include <linux/irq.h>
2827 #include <linux/interrupt.h>
2828 #include <linux/sysctl.h>
2829 +#include <linux/pci.h>
2830 +#include <linux/dmi.h>
2831 #include "osd.h"
2832 #include "logging.h"
2833 #include "vmbus.h"
2834 @@ -946,6 +948,19 @@ static irqreturn_t vmbus_isr(int irq, void *dev_id)
2835 }
2836 }
2837
2838 +static struct dmi_system_id __initdata microsoft_hv_dmi_table[] = {
2839 + {
2840 + .ident = "Hyper-V",
2841 + .matches = {
2842 + DMI_MATCH(DMI_SYS_VENDOR, "Microsoft Corporation"),
2843 + DMI_MATCH(DMI_PRODUCT_NAME, "Virtual Machine"),
2844 + DMI_MATCH(DMI_BOARD_NAME, "Virtual Machine"),
2845 + },
2846 + },
2847 + { },
2848 +};
2849 +MODULE_DEVICE_TABLE(dmi, microsoft_hv_dmi_table);
2850 +
2851 static int __init vmbus_init(void)
2852 {
2853 int ret = 0;
2854 @@ -957,6 +972,9 @@ static int __init vmbus_init(void)
2855 vmbus_loglevel, HIWORD(vmbus_loglevel), LOWORD(vmbus_loglevel));
2856 /* Todo: it is used for loglevel, to be ported to new kernel. */
2857
2858 + if (!dmi_check_system(microsoft_hv_dmi_table))
2859 + return -ENODEV;
2860 +
2861 ret = vmbus_bus_init(VmbusInitialize);
2862
2863 DPRINT_EXIT(VMBUS_DRV);
2864 @@ -973,6 +991,18 @@ static void __exit vmbus_exit(void)
2865 return;
2866 }
2867
2868 +/*
2869 + * We use a PCI table to determine if we should autoload this driver This is
2870 + * needed by distro tools to determine if the hyperv drivers should be
2871 + * installed and/or configured. We don't do anything else with the table, but
2872 + * it needs to be present.
2873 + */
2874 +const static struct pci_device_id microsoft_hv_pci_table[] = {
2875 + { PCI_DEVICE(0x1414, 0x5353) }, /* VGA compatible controller */
2876 + { 0 }
2877 +};
2878 +MODULE_DEVICE_TABLE(pci, microsoft_hv_pci_table);
2879 +
2880 MODULE_LICENSE("GPL");
2881 module_param(vmbus_irq, int, S_IRUGO);
2882 module_param(vmbus_loglevel, int, S_IRUGO);
2883 diff --git a/drivers/staging/mimio/Kconfig b/drivers/staging/mimio/Kconfig
2884 deleted file mode 100644
2885 index 505dcb2..0000000
2886 --- a/drivers/staging/mimio/Kconfig
2887 +++ /dev/null
2888 @@ -1,10 +0,0 @@
2889 -config INPUT_MIMIO
2890 - tristate "Mimio Xi interactive whiteboard support"
2891 - depends on USB && INPUT
2892 - default N
2893 - help
2894 - Say Y here if you want to use a Mimio Xi interactive
2895 - whiteboard device.
2896 -
2897 - To compile this driver as a module, choose M here: the
2898 - module will be called mimio.
2899 diff --git a/drivers/staging/mimio/Makefile b/drivers/staging/mimio/Makefile
2900 deleted file mode 100644
2901 index 77807ee..0000000
2902 --- a/drivers/staging/mimio/Makefile
2903 +++ /dev/null
2904 @@ -1 +0,0 @@
2905 -obj-$(CONFIG_INPUT_MIMIO) += mimio.o
2906 diff --git a/drivers/staging/mimio/mimio.c b/drivers/staging/mimio/mimio.c
2907 deleted file mode 100644
2908 index 1ba8103..0000000
2909 --- a/drivers/staging/mimio/mimio.c
2910 +++ /dev/null
2911 @@ -1,914 +0,0 @@
2912 -/*
2913 - * Hardware event => input event mapping:
2914 - *
2915 - *
2916 - *
2917 - input.h:#define BTN_TOOL_PEN 0x140 black
2918 - input.h:#define BTN_TOOL_RUBBER 0x141 blue
2919 - input.h:#define BTN_TOOL_BRUSH 0x142 green
2920 - input.h:#define BTN_TOOL_PENCIL 0x143 red
2921 - input.h:#define BTN_TOOL_AIRBRUSH 0x144 eraser
2922 - input.h:#define BTN_TOOL_FINGER 0x145 small eraser
2923 - input.h:#define BTN_TOOL_MOUSE 0x146 mimio interactive
2924 - input.h:#define BTN_TOOL_LENS 0x147 mimio interactive but1
2925 - input.h:#define LOCALBTN_TOOL_EXTRA1 0x14a mimio interactive but2 == BTN_TOUCH
2926 - input.h:#define LOCALBTN_TOOL_EXTRA2 0x14b mimio extra pens (orange, brown, yellow, purple) == BTN_STYLUS
2927 - input.h:#define LOCALBTN_TOOL_EXTRA3 0x14c unused == BTN_STYLUS2
2928 - input.h:#define BTN_TOOL_DOUBLETAP 0x14d unused
2929 - input.h:#define BTN_TOOL_TRIPLETAP 0x14e unused
2930 - *
2931 - * MIMIO_EV_PENDOWN(MIMIO_PEN_K) => EV_KEY BIT(BTN_TOOL_PEN)
2932 - * MIMIO_EV_PENDOWN(MIMIO_PEN_B) => EV_KEY BIT(BTN_TOOL_RUBBER)
2933 - * MIMIO_EV_PENDOWN(MIMIO_PEN_G) => EV_KEY BIT(BTN_TOOL_BRUSH)
2934 - * MIMIO_EV_PENDOWN(MIMIO_PEN_R) => EV_KEY BIT(BTN_TOOL_PENCIL)
2935 - * MIMIO_EV_PENDOWN(MIMIO_PEN_E) => EV_KEY BIT(BTN_TOOL_AIRBRUSH)
2936 - * MIMIO_EV_PENDOWN(MIMIO_PEN_ES) => EV_KEY BIT(BTN_TOOL_FINGER)
2937 - * MIMIO_EV_PENDOWN(MIMIO_PEN_I) => EV_KEY BIT(BTN_TOOL_MOUSE)
2938 - * MIMIO_EV_PENDOWN(MIMIO_PEN_IL) => EV_KEY BIT(BTN_TOOL_LENS)
2939 - * MIMIO_EV_PENDOWN(MIMIO_PEN_IR) => EV_KEY BIT(BTN_TOOL_DOUBLETAP)
2940 - * MIMIO_EV_PENDOWN(MIMIO_PEN_EX) => EV_KEY BIT(BTN_TOOL_TRIPLETAP)
2941 - * MIMIO_EV_PENDATA => EV_ABS BIT(ABS_X), BIT(ABS_Y)
2942 - * MIMIO_EV_MEMRESET => EV_KEY BIT(BTN_0)
2943 - * MIMIO_EV_ACC(ACC_NEWPAGE) => EV_KEY BIT(BTN_1)
2944 - * MIMIO_EV_ACC(ACC_TAGPAGE) => EV_KEY BIT(BTN_2)
2945 - * MIMIO_EV_ACC(ACC_PRINTPAGE) => EV_KEY BIT(BTN_3)
2946 - * MIMIO_EV_ACC(ACC_MAXIMIZE) => EV_KEY BIT(BTN_4)
2947 - * MIMIO_EV_ACC(ACC_FINDCTLPNL) => EV_KEY BIT(BTN_5)
2948 - *
2949 - *
2950 - * open issues:
2951 - * - cold-load of data captured when mimio in standalone mode not yet
2952 - * supported; need to snoop Win32 box to see datastream for this.
2953 - * - mimio mouse not yet supported; need to snoop Win32 box to see the
2954 - * datastream for this.
2955 - */
2956 -#include <linux/kernel.h>
2957 -#include <linux/init.h>
2958 -#include <linux/slab.h>
2959 -#include <linux/spinlock.h>
2960 -#include <linux/input.h>
2961 -#include <linux/usb.h>
2962 -
2963 -#define DRIVER_VERSION "v0.031"
2964 -#define DRIVER_AUTHOR "mwilder@cs.nmsu.edu"
2965 -#define DRIVER_DESC "USB mimio-xi driver"
2966 -
2967 -enum {UPVALUE, DOWNVALUE, MOVEVALUE};
2968 -
2969 -#define MIMIO_XRANGE_MAX 9600
2970 -#define MIMIO_YRANGE_MAX 4800
2971 -
2972 -#define LOCALBTN_TOOL_EXTRA1 BTN_TOUCH
2973 -#define LOCALBTN_TOOL_EXTRA2 BTN_STYLUS
2974 -#define LOCALBTN_TOOL_EXTRA3 BTN_STYLUS2
2975 -
2976 -#define MIMIO_VENDOR_ID 0x08d3
2977 -#define MIMIO_PRODUCT_ID 0x0001
2978 -#define MIMIO_MAXPAYLOAD (8)
2979 -#define MIMIO_MAXNAMELEN (64)
2980 -#define MIMIO_TXWAIT (1)
2981 -#define MIMIO_TXDONE (2)
2982 -
2983 -#define MIMIO_EV_PENDOWN (0x22)
2984 -#define MIMIO_EV_PENDATA (0x24)
2985 -#define MIMIO_EV_PENUP (0x51)
2986 -#define MIMIO_EV_MEMRESET (0x45)
2987 -#define MIMIO_EV_ACC (0xb2)
2988 -
2989 -#define MIMIO_PEN_K (1) /* black pen */
2990 -#define MIMIO_PEN_B (2) /* blue pen */
2991 -#define MIMIO_PEN_G (3) /* green pen */
2992 -#define MIMIO_PEN_R (4) /* red pen */
2993 -/* 5, 6, 7, 8 are extra pens */
2994 -#define MIMIO_PEN_E (9) /* big eraser */
2995 -#define MIMIO_PEN_ES (10) /* lil eraser */
2996 -#define MIMIO_PENJUMP_START (10)
2997 -#define MIMIO_PENJUMP (6)
2998 -#define MIMIO_PEN_I (17) /* mimio interactive */
2999 -#define MIMIO_PEN_IL (18) /* mimio interactive button 1 */
3000 -#define MIMIO_PEN_IR (19) /* mimio interactive button 2 */
3001 -
3002 -#define MIMIO_PEN_MAX (MIMIO_PEN_IR)
3003 -
3004 -#define ACC_DONE (0)
3005 -#define ACC_NEWPAGE (1)
3006 -#define ACC_TAGPAGE (2)
3007 -#define ACC_PRINTPAGE (4)
3008 -#define ACC_MAXIMIZE (8)
3009 -#define ACC_FINDCTLPNL (16)
3010 -
3011 -#define isvalidtxsize(n) ((n) > 0 && (n) <= MIMIO_MAXPAYLOAD)
3012 -
3013 -
3014 -struct pktbuf {
3015 - unsigned char instr;
3016 - unsigned char buf[16];
3017 - unsigned char *p;
3018 - unsigned char *q;
3019 -};
3020 -
3021 -struct usbintendpt {
3022 - dma_addr_t dma;
3023 - struct urb *urb;
3024 - unsigned char *buf;
3025 - struct usb_endpoint_descriptor *desc;
3026 -};
3027 -
3028 -struct mimio {
3029 - struct input_dev *idev;
3030 - struct usb_device *udev;
3031 - struct usb_interface *uifc;
3032 - int open;
3033 - int present;
3034 - int greeted;
3035 - int txflags;
3036 - char phys[MIMIO_MAXNAMELEN];
3037 - struct usbintendpt in;
3038 - struct usbintendpt out;
3039 - struct pktbuf pktbuf;
3040 - unsigned char minor;
3041 - wait_queue_head_t waitq;
3042 - spinlock_t txlock;
3043 - void (*rxhandler)(struct mimio *, unsigned char *, unsigned int);
3044 - int last_pen_down;
3045 -};
3046 -
3047 -static void mimio_close(struct input_dev *);
3048 -static void mimio_dealloc(struct mimio *);
3049 -static void mimio_disconnect(struct usb_interface *);
3050 -static int mimio_greet(struct mimio *);
3051 -static void mimio_irq_in(struct urb *);
3052 -static void mimio_irq_out(struct urb *);
3053 -static int mimio_open(struct input_dev *);
3054 -static int mimio_probe(struct usb_interface *, const struct usb_device_id *);
3055 -static void mimio_rx_handler(struct mimio *, unsigned char *, unsigned int);
3056 -static int mimio_tx(struct mimio *, const char *, int);
3057 -
3058 -static char mimio_name[] = "VirtualInk mimio-Xi";
3059 -static struct usb_device_id mimio_table [] = {
3060 - { USB_DEVICE(MIMIO_VENDOR_ID, MIMIO_PRODUCT_ID) },
3061 - { USB_DEVICE(0x0525, 0xa4a0) }, /* gadget zero firmware */
3062 - { }
3063 -};
3064 -
3065 -MODULE_DEVICE_TABLE(usb, mimio_table);
3066 -
3067 -static struct usb_driver mimio_driver = {
3068 - .name = "mimio",
3069 - .probe = mimio_probe,
3070 - .disconnect = mimio_disconnect,
3071 - .id_table = mimio_table,
3072 -};
3073 -
3074 -static DECLARE_MUTEX(disconnect_sem);
3075 -
3076 -static void mimio_close(struct input_dev *idev)
3077 -{
3078 - struct mimio *mimio;
3079 -
3080 - mimio = input_get_drvdata(idev);
3081 - if (!mimio) {
3082 - dev_err(&idev->dev, "null mimio attached to input device\n");
3083 - return;
3084 - }
3085 -
3086 - if (mimio->open <= 0)
3087 - dev_err(&idev->dev, "mimio not open.\n");
3088 - else
3089 - mimio->open--;
3090 -
3091 - if (mimio->present == 0 && mimio->open == 0)
3092 - mimio_dealloc(mimio);
3093 -}
3094 -
3095 -static void mimio_dealloc(struct mimio *mimio)
3096 -{
3097 - if (mimio == NULL)
3098 - return;
3099 -
3100 - usb_kill_urb(mimio->in.urb);
3101 -
3102 - usb_kill_urb(mimio->out.urb);
3103 -
3104 - if (mimio->idev) {
3105 - input_unregister_device(mimio->idev);
3106 - if (mimio->idev->grab)
3107 - input_close_device(mimio->idev->grab);
3108 - else
3109 - dev_dbg(&mimio->idev->dev, "mimio->idev->grab == NULL"
3110 - " -- didn't call input_close_device\n");
3111 - }
3112 -
3113 - usb_free_urb(mimio->in.urb);
3114 -
3115 - usb_free_urb(mimio->out.urb);
3116 -
3117 - if (mimio->in.buf) {
3118 - usb_buffer_free(mimio->udev, MIMIO_MAXPAYLOAD, mimio->in.buf,
3119 - mimio->in.dma);
3120 - }
3121 -
3122 - if (mimio->out.buf)
3123 - usb_buffer_free(mimio->udev, MIMIO_MAXPAYLOAD, mimio->out.buf,
3124 - mimio->out.dma);
3125 -
3126 - if (mimio->idev)
3127 - input_free_device(mimio->idev);
3128 -
3129 - kfree(mimio);
3130 -}
3131 -
3132 -static void mimio_disconnect(struct usb_interface *ifc)
3133 -{
3134 - struct mimio *mimio;
3135 -
3136 - down(&disconnect_sem);
3137 -
3138 - mimio = usb_get_intfdata(ifc);
3139 - usb_set_intfdata(ifc, NULL);
3140 - dev_dbg(&mimio->idev->dev, "disconnect\n");
3141 -
3142 - if (mimio) {
3143 - mimio->present = 0;
3144 -
3145 - if (mimio->open <= 0)
3146 - mimio_dealloc(mimio);
3147 - }
3148 -
3149 - up(&disconnect_sem);
3150 -}
3151 -
3152 -static int mimio_greet(struct mimio *mimio)
3153 -{
3154 - const struct grtpkt {
3155 - int nbytes;
3156 - unsigned delay;
3157 - char data[8];
3158 - } grtpkts[] = {
3159 - { 3, 0, { 0x11, 0x55, 0x44, 0x00, 0x00, 0x00, 0x00, 0x00 } },
3160 - { 5, 0, { 0x53, 0x55, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00 } },
3161 - { 5, 0, { 0x43, 0x55, 0x00, 0x00, 0x16, 0x00, 0x00, 0x00 } },
3162 - { 5, 0, { 0x33, 0x55, 0x00, 0x00, 0x66, 0x00, 0x00, 0x00 } },
3163 - { 5, 0, { 0x13, 0x00, 0x5e, 0x02, 0x4f, 0x00, 0x00, 0x00 } },
3164 - { 5, 0, { 0x13, 0x00, 0x04, 0x03, 0x14, 0x00, 0x00, 0x00 } },
3165 - { 5, 2, { 0x13, 0x00, 0x00, 0x04, 0x17, 0x00, 0x00, 0x00 } },
3166 - { 5, 0, { 0x13, 0x00, 0x0d, 0x08, 0x16, 0x00, 0x00, 0x00 } },
3167 - { 5, 0, { 0x13, 0x00, 0x4d, 0x01, 0x5f, 0x00, 0x00, 0x00 } },
3168 - { 3, 0, { 0xf1, 0x55, 0xa4, 0x00, 0x00, 0x00, 0x00, 0x00 } },
3169 - { 7, 2, { 0x52, 0x55, 0x00, 0x07, 0x31, 0x55, 0x64, 0x00 } },
3170 - { 0, 0, { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 } },
3171 - };
3172 - int rslt;
3173 - const struct grtpkt *pkt;
3174 -
3175 - for (pkt = grtpkts; pkt->nbytes; pkt++) {
3176 - rslt = mimio_tx(mimio, pkt->data, pkt->nbytes);
3177 - if (rslt)
3178 - return rslt;
3179 - if (pkt->delay)
3180 - msleep(pkt->delay);
3181 - }
3182 -
3183 - return 0;
3184 -}
3185 -
3186 -static void mimio_irq_in(struct urb *urb)
3187 -{
3188 - int rslt;
3189 - char *data;
3190 - const char *reason = "going down";
3191 - struct mimio *mimio;
3192 -
3193 - mimio = urb->context;
3194 -
3195 - if (mimio == NULL)
3196 - /* paranoia */
3197 - return;
3198 -
3199 - switch (urb->status) {
3200 - case 0:
3201 - /* success */
3202 - break;
3203 - case -ETIMEDOUT:
3204 - reason = "timeout -- unplugged?";
3205 - case -ECONNRESET:
3206 - case -ENOENT:
3207 - case -ESHUTDOWN:
3208 - dev_dbg(&mimio->idev->dev, "%s.\n", reason);
3209 - return;
3210 - default:
3211 - dev_dbg(&mimio->idev->dev, "unknown urb-status: %d.\n",
3212 - urb->status);
3213 - goto exit;
3214 - }
3215 - data = mimio->in.buf;
3216 -
3217 - if (mimio->rxhandler)
3218 - mimio->rxhandler(mimio, data, urb->actual_length);
3219 -exit:
3220 - /*
3221 - * Keep listening to device on same urb.
3222 - */
3223 - rslt = usb_submit_urb(urb, GFP_ATOMIC);
3224 - if (rslt)
3225 - dev_err(&mimio->idev->dev, "usb_submit_urb failure: %d.\n",
3226 - rslt);
3227 -}
3228 -
3229 -static void mimio_irq_out(struct urb *urb)
3230 -{
3231 - unsigned long flags;
3232 - struct mimio *mimio;
3233 -
3234 - mimio = urb->context;
3235 -
3236 - if (urb->status)
3237 - dev_dbg(&mimio->idev->dev, "urb-status: %d.\n", urb->status);
3238 -
3239 - spin_lock_irqsave(&mimio->txlock, flags);
3240 - mimio->txflags |= MIMIO_TXDONE;
3241 - spin_unlock_irqrestore(&mimio->txlock, flags);
3242 - wmb();
3243 - wake_up(&mimio->waitq);
3244 -}
3245 -
3246 -static int mimio_open(struct input_dev *idev)
3247 -{
3248 - int rslt;
3249 - struct mimio *mimio;
3250 -
3251 - rslt = 0;
3252 - down(&disconnect_sem);
3253 - mimio = input_get_drvdata(idev);
3254 - dev_dbg(&idev->dev, "mimio_open\n");
3255 -
3256 - if (mimio == NULL) {
3257 - dev_err(&idev->dev, "null mimio.\n");
3258 - rslt = -ENODEV;
3259 - goto exit;
3260 - }
3261 -
3262 - if (mimio->open++)
3263 - goto exit;
3264 -
3265 - if (mimio->present && !mimio->greeted) {
3266 - struct urb *urb = mimio->in.urb;
3267 - mimio->in.urb->dev = mimio->udev;
3268 - rslt = usb_submit_urb(mimio->in.urb, GFP_KERNEL);
3269 - if (rslt) {
3270 - dev_err(&idev->dev, "usb_submit_urb failure "
3271 - "(res = %d: %s). Not greeting.\n",
3272 - rslt,
3273 - (!urb ? "urb is NULL" :
3274 - (urb->hcpriv ? "urb->hcpriv is non-NULL" :
3275 - (!urb->complete ? "urb is not complete" :
3276 - (urb->number_of_packets <= 0 ? "urb has no packets" :
3277 - (urb->interval <= 0 ? "urb interval too small" :
3278 - "urb interval too large or some other error"))))));
3279 - rslt = -EIO;
3280 - goto exit;
3281 - }
3282 - rslt = mimio_greet(mimio);
3283 - if (rslt == 0) {
3284 - dev_dbg(&idev->dev, "Mimio greeted OK.\n");
3285 - mimio->greeted = 1;
3286 - } else {
3287 - dev_dbg(&idev->dev, "Mimio greet Failure (%d)\n",
3288 - rslt);
3289 - }
3290 - }
3291 -
3292 -exit:
3293 - up(&disconnect_sem);
3294 - return rslt;
3295 -}
3296 -
3297 -static int mimio_probe(struct usb_interface *ifc,
3298 - const struct usb_device_id *id)
3299 -{
3300 - char path[64];
3301 - int pipe, maxp;
3302 - struct mimio *mimio;
3303 - struct usb_device *udev;
3304 - struct usb_host_interface *hostifc;
3305 - struct input_dev *input_dev;
3306 - int res = 0;
3307 - int i;
3308 -
3309 - udev = interface_to_usbdev(ifc);
3310 -
3311 - mimio = kzalloc(sizeof(struct mimio), GFP_KERNEL);
3312 - if (!mimio)
3313 - return -ENOMEM;
3314 -
3315 - input_dev = input_allocate_device();
3316 - if (!input_dev) {
3317 - mimio_dealloc(mimio);
3318 - return -ENOMEM;
3319 - }
3320 -
3321 - mimio->uifc = ifc;
3322 - mimio->udev = udev;
3323 - mimio->pktbuf.p = mimio->pktbuf.buf;
3324 - mimio->pktbuf.q = mimio->pktbuf.buf;
3325 - /* init_input_dev(mimio->idev); */
3326 - mimio->idev = input_dev;
3327 - init_waitqueue_head(&mimio->waitq);
3328 - spin_lock_init(&mimio->txlock);
3329 - hostifc = ifc->cur_altsetting;
3330 -
3331 - if (hostifc->desc.bNumEndpoints != 2) {
3332 - dev_err(&udev->dev, "Unexpected endpoint count: %d.\n",
3333 - hostifc->desc.bNumEndpoints);
3334 - mimio_dealloc(mimio);
3335 - return -ENODEV;
3336 - }
3337 -
3338 - mimio->in.desc = &(hostifc->endpoint[0].desc);
3339 - mimio->out.desc = &(hostifc->endpoint[1].desc);
3340 -
3341 - mimio->in.buf = usb_buffer_alloc(udev, MIMIO_MAXPAYLOAD, GFP_KERNEL,
3342 - &mimio->in.dma);
3343 - mimio->out.buf = usb_buffer_alloc(udev, MIMIO_MAXPAYLOAD, GFP_KERNEL,
3344 - &mimio->out.dma);
3345 -
3346 - if (mimio->in.buf == NULL || mimio->out.buf == NULL) {
3347 - dev_err(&udev->dev, "usb_buffer_alloc failure.\n");
3348 - mimio_dealloc(mimio);
3349 - return -ENOMEM;
3350 - }
3351 -
3352 - mimio->in.urb = usb_alloc_urb(0, GFP_KERNEL);
3353 - mimio->out.urb = usb_alloc_urb(0, GFP_KERNEL);
3354 -
3355 - if (mimio->in.urb == NULL || mimio->out.urb == NULL) {
3356 - dev_err(&udev->dev, "usb_alloc_urb failure.\n");
3357 - mimio_dealloc(mimio);
3358 - return -ENOMEM;
3359 - }
3360 -
3361 - /*
3362 - * Build the input urb.
3363 - */
3364 - pipe = usb_rcvintpipe(udev, mimio->in.desc->bEndpointAddress);
3365 - maxp = usb_maxpacket(udev, pipe, usb_pipeout(pipe));
3366 - if (maxp > MIMIO_MAXPAYLOAD)
3367 - maxp = MIMIO_MAXPAYLOAD;
3368 - usb_fill_int_urb(mimio->in.urb, udev, pipe, mimio->in.buf, maxp,
3369 - mimio_irq_in, mimio, mimio->in.desc->bInterval);
3370 - mimio->in.urb->transfer_dma = mimio->in.dma;
3371 - mimio->in.urb->transfer_flags |= URB_NO_TRANSFER_DMA_MAP;
3372 -
3373 - /*
3374 - * Build the output urb.
3375 - */
3376 - pipe = usb_sndintpipe(udev, mimio->out.desc->bEndpointAddress);
3377 - maxp = usb_maxpacket(udev, pipe, usb_pipeout(pipe));
3378 - if (maxp > MIMIO_MAXPAYLOAD)
3379 - maxp = MIMIO_MAXPAYLOAD;
3380 - usb_fill_int_urb(mimio->out.urb, udev, pipe, mimio->out.buf, maxp,
3381 - mimio_irq_out, mimio, mimio->out.desc->bInterval);
3382 - mimio->out.urb->transfer_dma = mimio->out.dma;
3383 - mimio->out.urb->transfer_flags |= URB_NO_TRANSFER_DMA_MAP;
3384 -
3385 - /*
3386 - * Build input device info
3387 - */
3388 - usb_make_path(udev, path, 64);
3389 - snprintf(mimio->phys, MIMIO_MAXNAMELEN, "%s/input0", path);
3390 - input_set_drvdata(input_dev, mimio);
3391 - /* input_dev->dev = &ifc->dev; */
3392 - input_dev->open = mimio_open;
3393 - input_dev->close = mimio_close;
3394 - input_dev->name = mimio_name;
3395 - input_dev->phys = mimio->phys;
3396 - input_dev->dev.parent = &ifc->dev;
3397 -
3398 - input_dev->id.bustype = BUS_USB;
3399 - input_dev->id.vendor = le16_to_cpu(udev->descriptor.idVendor);
3400 - input_dev->id.product = le16_to_cpu(udev->descriptor.idProduct);
3401 - input_dev->id.version = le16_to_cpu(udev->descriptor.bcdDevice);
3402 -
3403 - input_dev->evbit[0] |= BIT(EV_KEY) | BIT(EV_ABS);
3404 - for (i = BTN_TOOL_PEN; i <= LOCALBTN_TOOL_EXTRA2; ++i)
3405 - set_bit(i, input_dev->keybit);
3406 -
3407 - input_dev->keybit[BIT_WORD(BTN_MISC)] |= BIT_MASK(BTN_0) |
3408 - BIT_MASK(BTN_1) |
3409 - BIT_MASK(BTN_2) |
3410 - BIT_MASK(BTN_3) |
3411 - BIT_MASK(BTN_4) |
3412 - BIT_MASK(BTN_5);
3413 - /* input_dev->keybit[BTN_MOUSE] |= BIT(BTN_LEFT); */
3414 - input_dev->absbit[0] |= BIT_MASK(ABS_X) | BIT_MASK(ABS_Y);
3415 - input_set_abs_params(input_dev, ABS_X, 0, MIMIO_XRANGE_MAX, 0, 0);
3416 - input_set_abs_params(input_dev, ABS_Y, 0, MIMIO_YRANGE_MAX, 0, 0);
3417 - input_dev->absbit[BIT_WORD(ABS_MISC)] |= BIT_MASK(ABS_MISC);
3418 -
3419 -#if 0
3420 - input_dev->absmin[ABS_X] = 0;
3421 - input_dev->absmin[ABS_Y] = 0;
3422 - input_dev->absmax[ABS_X] = 9600;
3423 - input_dev->absmax[ABS_Y] = 4800;
3424 - input_dev->absfuzz[ABS_X] = 0;
3425 - input_dev->absfuzz[ABS_Y] = 0;
3426 - input_dev->absflat[ABS_X] = 0;
3427 - input_dev->absflat[ABS_Y] = 0;
3428 -#endif
3429 -
3430 -#if 0
3431 - /* this will just reduce the precision */
3432 - input_dev->absfuzz[ABS_X] = 8; /* experimental; may need to change */
3433 - input_dev->absfuzz[ABS_Y] = 8; /* experimental; may need to change */
3434 -#endif
3435 -
3436 - /*
3437 - * Register the input device.
3438 - */
3439 - res = input_register_device(mimio->idev);
3440 - if (res) {
3441 - dev_err(&udev->dev, "input_register_device failure (%d)\n",
3442 - res);
3443 - mimio_dealloc(mimio);
3444 - return -EIO;
3445 - }
3446 - dev_dbg(&mimio->idev->dev, "input: %s on %s (res = %d).\n",
3447 - input_dev->name, input_dev->phys, res);
3448 -
3449 - usb_set_intfdata(ifc, mimio);
3450 - mimio->present = 1;
3451 -
3452 - /*
3453 - * Submit the input urb to the usb subsystem.
3454 - */
3455 - mimio->in.urb->dev = mimio->udev;
3456 - res = usb_submit_urb(mimio->in.urb, GFP_KERNEL);
3457 - if (res) {
3458 - dev_err(&mimio->idev->dev, "usb_submit_urb failure (%d)\n",
3459 - res);
3460 - mimio_dealloc(mimio);
3461 - return -EIO;
3462 - }
3463 -
3464 - /*
3465 - * Attempt to greet the mimio after giving
3466 - * it some post-init settling time.
3467 - *
3468 - * note: sometimes this sleep interval isn't
3469 - * long enough to permit the device to re-init
3470 - * after a hot-swap; maybe need to bump it up.
3471 - *
3472 - * As it is, this probably breaks module unloading support!
3473 - */
3474 - msleep(1024);
3475 -
3476 - res = mimio_greet(mimio);
3477 - if (res == 0) {
3478 - dev_dbg(&mimio->idev->dev, "Mimio greeted OK.\n");
3479 - mimio->greeted = 1;
3480 - mimio->rxhandler = mimio_rx_handler;
3481 - } else {
3482 - dev_dbg(&mimio->idev->dev, "Mimio greet Failure (%d)\n", res);
3483 - }
3484 -
3485 - return 0;
3486 -}
3487 -
3488 -static int handle_mimio_rx_penupdown(struct mimio *mimio,
3489 - int down,
3490 - const char *const instr[],
3491 - const int instr_ofst[])
3492 -{
3493 - int penid, x;
3494 - if (mimio->pktbuf.q - mimio->pktbuf.p < (down ? 4 : 3))
3495 - return 1; /* partial pkt */
3496 -
3497 - if (down) {
3498 - x = *mimio->pktbuf.p ^ *(mimio->pktbuf.p + 1) ^
3499 - *(mimio->pktbuf.p + 2);
3500 - if (x != *(mimio->pktbuf.p + 3)) {
3501 - dev_dbg(&mimio->idev->dev, "EV_PEN%s: bad xsum.\n",
3502 - down ? "DOWN":"UP");
3503 - /* skip this event data */
3504 - mimio->pktbuf.p += 4;
3505 - /* decode any remaining events */
3506 - return 0;
3507 - }
3508 - penid = mimio->pktbuf.instr = *(mimio->pktbuf.p + 2);
3509 - if (penid > MIMIO_PEN_MAX) {
3510 - dev_dbg(&mimio->idev->dev,
3511 - "Unmapped penID (not in [0, %d]): %d\n",
3512 - MIMIO_PEN_MAX, (int)mimio->pktbuf.instr);
3513 - penid = mimio->pktbuf.instr = 0;
3514 - }
3515 - mimio->last_pen_down = penid;
3516 - } else {
3517 - penid = mimio->last_pen_down;
3518 - }
3519 - dev_dbg(&mimio->idev->dev, "%s (id %d, code %d) %s.\n", instr[penid],
3520 - instr_ofst[penid], penid, down ? "down" : "up");
3521 -
3522 - if (instr_ofst[penid] >= 0) {
3523 - int code = BTN_TOOL_PEN + instr_ofst[penid];
3524 - int value = down ? DOWNVALUE : UPVALUE;
3525 - if (code > KEY_MAX)
3526 - dev_dbg(&mimio->idev->dev, "input_event will ignore "
3527 - "-- code (%d) > KEY_MAX\n", code);
3528 - if (!test_bit(code, mimio->idev->keybit))
3529 - dev_dbg(&mimio->idev->dev, "input_event will ignore "
3530 - "-- bit for code (%d) not enabled\n", code);
3531 - if (!!test_bit(code, mimio->idev->key) == value)
3532 - dev_dbg(&mimio->idev->dev, "input_event will ignore "
3533 - "-- bit for code (%d) already set to %d\n",
3534 - code, value);
3535 - if (value != DOWNVALUE) {
3536 - /* input_regs(mimio->idev, regs); */
3537 - input_report_key(mimio->idev, code, value);
3538 - input_sync(mimio->idev);
3539 - } else {
3540 - /* wait until we get some coordinates */
3541 - }
3542 - } else {
3543 - dev_dbg(&mimio->idev->dev, "penID offset[%d] == %d is < 0 "
3544 - "- not sending\n", penid, instr_ofst[penid]);
3545 - }
3546 - mimio->pktbuf.p += down ? 4 : 3; /* 3 for up, 4 for down */
3547 - return 0;
3548 -}
3549 -
3550 -/*
3551 - * Stay tuned for partial-packet excitement.
3552 - *
3553 - * This routine buffers data packets received from the mimio device
3554 - * in the mimio's data space. This buffering is necessary because
3555 - * the mimio's in endpoint can serve us partial packets of data, and
3556 - * we want the driver to support the servicing of multiple mimios.
3557 - * Empirical evidence gathered so far suggests that the method of
3558 - * buffering packet data in the mimio's data space works. Previous
3559 - * versions of this driver did not buffer packet data in each mimio's
3560 - * data-space, and were therefore not able to service multiple mimios.
3561 - * Note that since the caller of this routine is running in interrupt
3562 - * context, care needs to be taken to ensure that this routine does not
3563 - * become bloated, and it may be that another spinlock is needed in each
3564 - * mimio to guard the buffered packet data properly.
3565 - */
3566 -static void mimio_rx_handler(struct mimio *mimio,
3567 - unsigned char *data,
3568 - unsigned int nbytes)
3569 -{
3570 - struct device *dev = &mimio->idev->dev;
3571 - unsigned int x;
3572 - unsigned int y;
3573 - static const char * const instr[] = {
3574 - "?0",
3575 - "black pen", "blue pen", "green pen", "red pen",
3576 - "brown pen", "orange pen", "purple pen", "yellow pen",
3577 - "big eraser", "lil eraser",
3578 - "?11", "?12", "?13", "?14", "?15", "?16",
3579 - "mimio interactive", "interactive button1",
3580 - "interactive button2"
3581 - };
3582 -
3583 - /* Mimio Interactive gives:
3584 - * down: [0x22 0x01 0x11 0x32 0x24]
3585 - * b1 : [0x22 0x01 0x12 0x31 0x24]
3586 - * b2 : [0x22 0x01 0x13 0x30 0x24]
3587 - */
3588 - static const int instr_ofst[] = {
3589 - -1,
3590 - 0, 1, 2, 3,
3591 - 9, 9, 9, 9,
3592 - 4, 5,
3593 - -1, -1, -1, -1, -1, -1,
3594 - 6, 7, 8,
3595 - };
3596 -
3597 - memcpy(mimio->pktbuf.q, data, nbytes);
3598 - mimio->pktbuf.q += nbytes;
3599 -
3600 - while (mimio->pktbuf.p < mimio->pktbuf.q) {
3601 - int t = *mimio->pktbuf.p;
3602 - switch (t) {
3603 - case MIMIO_EV_PENUP:
3604 - case MIMIO_EV_PENDOWN:
3605 - if (handle_mimio_rx_penupdown(mimio,
3606 - t == MIMIO_EV_PENDOWN,
3607 - instr, instr_ofst))
3608 - return; /* partial packet */
3609 - break;
3610 -
3611 - case MIMIO_EV_PENDATA:
3612 - if (mimio->pktbuf.q - mimio->pktbuf.p < 6)
3613 - /* partial pkt */
3614 - return;
3615 - x = *mimio->pktbuf.p ^ *(mimio->pktbuf.p + 1) ^
3616 - *(mimio->pktbuf.p + 2) ^
3617 - *(mimio->pktbuf.p + 3) ^
3618 - *(mimio->pktbuf.p + 4);
3619 - if (x != *(mimio->pktbuf.p + 5)) {
3620 - dev_dbg(dev, "EV_PENDATA: bad xsum.\n");
3621 - mimio->pktbuf.p += 6; /* skip this event data */
3622 - break; /* decode any remaining events */
3623 - }
3624 - x = *(mimio->pktbuf.p + 1);
3625 - x <<= 8;
3626 - x |= *(mimio->pktbuf.p + 2);
3627 - y = *(mimio->pktbuf.p + 3);
3628 - y <<= 8;
3629 - y |= *(mimio->pktbuf.p + 4);
3630 - dev_dbg(dev, "coord: (%d, %d)\n", x, y);
3631 - if (instr_ofst[mimio->pktbuf.instr] >= 0) {
3632 - int code = BTN_TOOL_PEN +
3633 - instr_ofst[mimio->last_pen_down];
3634 -#if 0
3635 - /* Utter hack to ensure we get forwarded _AND_
3636 - * so we can identify when a complete signal is
3637 - * received */
3638 - mimio->idev->abs[ABS_Y] = -1;
3639 - mimio->idev->abs[ABS_X] = -1;
3640 -#endif
3641 - /* input_regs(mimio->idev, regs); */
3642 - input_report_abs(mimio->idev, ABS_X, x);
3643 - input_report_abs(mimio->idev, ABS_Y, y);
3644 - /* fake a penup */
3645 - change_bit(code, mimio->idev->key);
3646 - input_report_key(mimio->idev,
3647 - code,
3648 - DOWNVALUE);
3649 - /* always sync here */
3650 - mimio->idev->sync = 0;
3651 - input_sync(mimio->idev);
3652 - }
3653 - mimio->pktbuf.p += 6;
3654 - break;
3655 - case MIMIO_EV_MEMRESET:
3656 - if (mimio->pktbuf.q - mimio->pktbuf.p < 7)
3657 - /* partial pkt */
3658 - return;
3659 - dev_dbg(dev, "mem-reset.\n");
3660 - /* input_regs(mimio->idev, regs); */
3661 - input_event(mimio->idev, EV_KEY, BTN_0, 1);
3662 - input_event(mimio->idev, EV_KEY, BTN_0, 0);
3663 - input_sync(mimio->idev);
3664 - mimio->pktbuf.p += 7;
3665 - break;
3666 - case MIMIO_EV_ACC:
3667 - if (mimio->pktbuf.q - mimio->pktbuf.p < 4)
3668 - /* partial pkt */
3669 - return;
3670 - x = *mimio->pktbuf.p ^ *(mimio->pktbuf.p + 1) ^
3671 - *(mimio->pktbuf.p + 2);
3672 - if (x != *(mimio->pktbuf.p + 3)) {
3673 - dev_dbg(dev, "EV_ACC: bad xsum.\n");
3674 - mimio->pktbuf.p += 4; /* skip this event data */
3675 - break; /* decode any remaining events */
3676 - }
3677 - switch (*(mimio->pktbuf.p + 2)) {
3678 - case ACC_NEWPAGE:
3679 - dev_dbg(&mimio->idev->dev, "new-page.\n");
3680 - /* input_regs(mimio->idev, regs); */
3681 - input_event(mimio->idev, EV_KEY, BTN_1, 1);
3682 - input_event(mimio->idev, EV_KEY, BTN_1, 0);
3683 - input_sync(mimio->idev);
3684 - break;
3685 - case ACC_TAGPAGE:
3686 - dev_dbg(&mimio->idev->dev, "tag-page.\n");
3687 - /* input_regs(mimio->idev, regs); */
3688 - input_event(mimio->idev, EV_KEY, BTN_2, 1);
3689 - input_event(mimio->idev, EV_KEY, BTN_2, 0);
3690 - input_sync(mimio->idev);
3691 - break;
3692 - case ACC_PRINTPAGE:
3693 - dev_dbg(&mimio->idev->dev, "print-page.\n");
3694 - /* input_regs(mimio->idev, regs);*/
3695 - input_event(mimio->idev, EV_KEY, BTN_3, 1);
3696 - input_event(mimio->idev, EV_KEY, BTN_3, 0);
3697 - input_sync(mimio->idev);
3698 - break;
3699 - case ACC_MAXIMIZE:
3700 - dev_dbg(&mimio->idev->dev,
3701 - "maximize-window.\n");
3702 - /* input_regs(mimio->idev, regs); */
3703 - input_event(mimio->idev, EV_KEY, BTN_4, 1);
3704 - input_event(mimio->idev, EV_KEY, BTN_4, 0);
3705 - input_sync(mimio->idev);
3706 - break;
3707 - case ACC_FINDCTLPNL:
3708 - dev_dbg(&mimio->idev->dev, "find-ctl-panel.\n");
3709 - /* input_regs(mimio->idev, regs); */
3710 - input_event(mimio->idev, EV_KEY, BTN_5, 1);
3711 - input_event(mimio->idev, EV_KEY, BTN_5, 0);
3712 - input_sync(mimio->idev);
3713 - break;
3714 - case ACC_DONE:
3715 - dev_dbg(&mimio->idev->dev, "acc-done.\n");
3716 - /* no event is dispatched to the input
3717 - * subsystem for this device event.
3718 - */
3719 - break;
3720 - default:
3721 - dev_dbg(dev, "unknown acc event.\n");
3722 - break;
3723 - }
3724 - mimio->pktbuf.p += 4;
3725 - break;
3726 - default:
3727 - mimio->pktbuf.p++;
3728 - break;
3729 - }
3730 - }
3731 -
3732 - /*
3733 - * No partial event was received, so reset mimio's pktbuf ptrs.
3734 - */
3735 - mimio->pktbuf.p = mimio->pktbuf.q = mimio->pktbuf.buf;
3736 -}
3737 -
3738 -static int mimio_tx(struct mimio *mimio, const char *buf, int nbytes)
3739 -{
3740 - int rslt;
3741 - int timeout;
3742 - unsigned long flags;
3743 - DECLARE_WAITQUEUE(wait, current);
3744 -
3745 - if (!(isvalidtxsize(nbytes))) {
3746 - dev_err(&mimio->idev->dev, "invalid arg: nbytes: %d.\n",
3747 - nbytes);
3748 - return -EINVAL;
3749 - }
3750 -
3751 - /*
3752 - * Init the out urb and copy the data to send.
3753 - */
3754 - mimio->out.urb->dev = mimio->udev;
3755 - mimio->out.urb->transfer_buffer_length = nbytes;
3756 - memcpy(mimio->out.urb->transfer_buffer, buf, nbytes);
3757 -
3758 - /*
3759 - * Send the data.
3760 - */
3761 - spin_lock_irqsave(&mimio->txlock, flags);
3762 - mimio->txflags = MIMIO_TXWAIT;
3763 - rslt = usb_submit_urb(mimio->out.urb, GFP_ATOMIC);
3764 - spin_unlock_irqrestore(&mimio->txlock, flags);
3765 - dev_dbg(&mimio->idev->dev, "rslt: %d.\n", rslt);
3766 -
3767 - if (rslt) {
3768 - dev_err(&mimio->idev->dev, "usb_submit_urb failure: %d.\n",
3769 - rslt);
3770 - return rslt;
3771 - }
3772 -
3773 - /*
3774 - * Wait for completion to be signalled (the mimio_irq_out
3775 - * completion routine will or MIMIO_TXDONE in with txflags).
3776 - */
3777 - timeout = HZ;
3778 - set_current_state(TASK_INTERRUPTIBLE);
3779 - add_wait_queue(&mimio->waitq, &wait);
3780 -
3781 - while (timeout && ((mimio->txflags & MIMIO_TXDONE) == 0)) {
3782 - timeout = schedule_timeout(timeout);
3783 - rmb();
3784 - }
3785 -
3786 - if ((mimio->txflags & MIMIO_TXDONE) == 0)
3787 - dev_dbg(&mimio->idev->dev, "tx timed out.\n");
3788 -
3789 - /*
3790 - * Now that completion has been signalled,
3791 - * unlink the urb so that it can be recycled.
3792 - */
3793 - set_current_state(TASK_RUNNING);
3794 - remove_wait_queue(&mimio->waitq, &wait);
3795 - usb_unlink_urb(mimio->out.urb);
3796 -
3797 - return rslt;
3798 -}
3799 -
3800 -static int __init mimio_init(void)
3801 -{
3802 - int rslt;
3803 -
3804 - rslt = usb_register(&mimio_driver);
3805 - if (rslt != 0) {
3806 - err("%s: usb_register failure: %d", __func__, rslt);
3807 - return rslt;
3808 - }
3809 -
3810 - printk(KERN_INFO KBUILD_MODNAME ":"
3811 - DRIVER_DESC " " DRIVER_VERSION "\n");
3812 - return rslt;
3813 -}
3814 -
3815 -static void __exit mimio_exit(void)
3816 -{
3817 - usb_deregister(&mimio_driver);
3818 -}
3819 -
3820 -module_init(mimio_init);
3821 -module_exit(mimio_exit);
3822 -
3823 -MODULE_AUTHOR(DRIVER_AUTHOR);
3824 -MODULE_DESCRIPTION(DRIVER_DESC);
3825 -MODULE_LICENSE("GPL");
3826 diff --git a/drivers/staging/pohmelfs/inode.c b/drivers/staging/pohmelfs/inode.c
3827 index f69b778..cd25811 100644
3828 --- a/drivers/staging/pohmelfs/inode.c
3829 +++ b/drivers/staging/pohmelfs/inode.c
3830 @@ -36,6 +36,7 @@
3831 #define POHMELFS_MAGIC_NUM 0x504f482e
3832
3833 static struct kmem_cache *pohmelfs_inode_cache;
3834 +static atomic_t psb_bdi_num = ATOMIC_INIT(0);
3835
3836 /*
3837 * Removes inode from all trees, drops local name cache and removes all queued
3838 @@ -1331,6 +1332,8 @@ static void pohmelfs_put_super(struct super_block *sb)
3839 pohmelfs_crypto_exit(psb);
3840 pohmelfs_state_exit(psb);
3841
3842 + bdi_destroy(&psb->bdi);
3843 +
3844 kfree(psb);
3845 sb->s_fs_info = NULL;
3846 }
3847 @@ -1815,11 +1818,22 @@ static int pohmelfs_fill_super(struct super_block *sb, void *data, int silent)
3848 if (!psb)
3849 goto err_out_exit;
3850
3851 + err = bdi_init(&psb->bdi);
3852 + if (err)
3853 + goto err_out_free_sb;
3854 +
3855 + err = bdi_register(&psb->bdi, NULL, "pfs-%d", atomic_inc_return(&psb_bdi_num));
3856 + if (err) {
3857 + bdi_destroy(&psb->bdi);
3858 + goto err_out_free_sb;
3859 + }
3860 +
3861 sb->s_fs_info = psb;
3862 sb->s_op = &pohmelfs_sb_ops;
3863 sb->s_magic = POHMELFS_MAGIC_NUM;
3864 sb->s_maxbytes = MAX_LFS_FILESIZE;
3865 sb->s_blocksize = PAGE_SIZE;
3866 + sb->s_bdi = &psb->bdi;
3867
3868 psb->sb = sb;
3869
3870 @@ -1863,11 +1877,11 @@ static int pohmelfs_fill_super(struct super_block *sb, void *data, int silent)
3871
3872 err = pohmelfs_parse_options((char *) data, psb, 0);
3873 if (err)
3874 - goto err_out_free_sb;
3875 + goto err_out_free_bdi;
3876
3877 err = pohmelfs_copy_crypto(psb);
3878 if (err)
3879 - goto err_out_free_sb;
3880 + goto err_out_free_bdi;
3881
3882 err = pohmelfs_state_init(psb);
3883 if (err)
3884 @@ -1916,6 +1930,8 @@ err_out_state_exit:
3885 err_out_free_strings:
3886 kfree(psb->cipher_string);
3887 kfree(psb->hash_string);
3888 +err_out_free_bdi:
3889 + bdi_destroy(&psb->bdi);
3890 err_out_free_sb:
3891 kfree(psb);
3892 err_out_exit:
3893 diff --git a/drivers/staging/pohmelfs/netfs.h b/drivers/staging/pohmelfs/netfs.h
3894 index 623a07d..01cba00 100644
3895 --- a/drivers/staging/pohmelfs/netfs.h
3896 +++ b/drivers/staging/pohmelfs/netfs.h
3897 @@ -18,6 +18,7 @@
3898
3899 #include <linux/types.h>
3900 #include <linux/connector.h>
3901 +#include <linux/backing-dev.h>
3902
3903 #define POHMELFS_CN_IDX 5
3904 #define POHMELFS_CN_VAL 0
3905 @@ -624,6 +625,8 @@ struct pohmelfs_sb {
3906
3907 struct super_block *sb;
3908
3909 + struct backing_dev_info bdi;
3910 +
3911 /*
3912 * Algorithm strings.
3913 */
3914 diff --git a/drivers/staging/wlan-ng/Kconfig b/drivers/staging/wlan-ng/Kconfig
3915 index f44294b..f1af507 100644
3916 --- a/drivers/staging/wlan-ng/Kconfig
3917 +++ b/drivers/staging/wlan-ng/Kconfig
3918 @@ -1,6 +1,7 @@
3919 config PRISM2_USB
3920 tristate "Prism2.5/3 USB driver"
3921 depends on WLAN && USB && WIRELESS_EXT
3922 + select WEXT_PRIV
3923 default n
3924 ---help---
3925 This is the wlan-ng prism 2.5/3 USB driver for a wide range of
3926 diff --git a/drivers/usb/core/driver.c b/drivers/usb/core/driver.c
3927 index 60a45f1..ca479a7 100644
3928 --- a/drivers/usb/core/driver.c
3929 +++ b/drivers/usb/core/driver.c
3930 @@ -691,9 +691,6 @@ static int usb_uevent(struct device *dev, struct kobj_uevent_env *env)
3931 {
3932 struct usb_device *usb_dev;
3933
3934 - /* driver is often null here; dev_dbg() would oops */
3935 - pr_debug("usb %s: uevent\n", dev_name(dev));
3936 -
3937 if (is_usb_device(dev)) {
3938 usb_dev = to_usb_device(dev);
3939 } else if (is_usb_interface(dev)) {
3940 @@ -705,6 +702,7 @@ static int usb_uevent(struct device *dev, struct kobj_uevent_env *env)
3941 }
3942
3943 if (usb_dev->devnum < 0) {
3944 + /* driver is often null here; dev_dbg() would oops */
3945 pr_debug("usb %s: already deleted?\n", dev_name(dev));
3946 return -ENODEV;
3947 }
3948 diff --git a/drivers/usb/core/hcd.c b/drivers/usb/core/hcd.c
3949 index 80995ef..0477616 100644
3950 --- a/drivers/usb/core/hcd.c
3951 +++ b/drivers/usb/core/hcd.c
3952 @@ -141,7 +141,7 @@ static const u8 usb3_rh_dev_descriptor[18] = {
3953 0x09, /* __u8 bMaxPacketSize0; 2^9 = 512 Bytes */
3954
3955 0x6b, 0x1d, /* __le16 idVendor; Linux Foundation */
3956 - 0x02, 0x00, /* __le16 idProduct; device 0x0002 */
3957 + 0x03, 0x00, /* __le16 idProduct; device 0x0003 */
3958 KERNEL_VER, KERNEL_REL, /* __le16 bcdDevice */
3959
3960 0x03, /* __u8 iManufacturer; */
3961 diff --git a/drivers/usb/core/hcd.h b/drivers/usb/core/hcd.h
3962 index bbe2b92..89613a7 100644
3963 --- a/drivers/usb/core/hcd.h
3964 +++ b/drivers/usb/core/hcd.h
3965 @@ -248,7 +248,7 @@ struct hc_driver {
3966 /* xHCI specific functions */
3967 /* Called by usb_alloc_dev to alloc HC device structures */
3968 int (*alloc_dev)(struct usb_hcd *, struct usb_device *);
3969 - /* Called by usb_release_dev to free HC device structures */
3970 + /* Called by usb_disconnect to free HC device structures */
3971 void (*free_dev)(struct usb_hcd *, struct usb_device *);
3972
3973 /* Bandwidth computation functions */
3974 diff --git a/drivers/usb/core/hub.c b/drivers/usb/core/hub.c
3975 index 35cc8b9..9cc0aba 100644
3976 --- a/drivers/usb/core/hub.c
3977 +++ b/drivers/usb/core/hub.c
3978 @@ -1554,6 +1554,15 @@ static inline void usb_stop_pm(struct usb_device *udev)
3979
3980 #endif
3981
3982 +static void hub_free_dev(struct usb_device *udev)
3983 +{
3984 + struct usb_hcd *hcd = bus_to_hcd(udev->bus);
3985 +
3986 + /* Root hubs aren't real devices, so don't free HCD resources */
3987 + if (hcd->driver->free_dev && udev->parent)
3988 + hcd->driver->free_dev(hcd, udev);
3989 +}
3990 +
3991 /**
3992 * usb_disconnect - disconnect a device (usbcore-internal)
3993 * @pdev: pointer to device being disconnected
3994 @@ -1624,6 +1633,8 @@ void usb_disconnect(struct usb_device **pdev)
3995
3996 usb_stop_pm(udev);
3997
3998 + hub_free_dev(udev);
3999 +
4000 put_device(&udev->dev);
4001 }
4002
4003 @@ -3191,6 +3202,7 @@ loop_disable:
4004 loop:
4005 usb_ep0_reinit(udev);
4006 release_address(udev);
4007 + hub_free_dev(udev);
4008 usb_put_dev(udev);
4009 if ((status == -ENOTCONN) || (status == -ENOTSUPP))
4010 break;
4011 diff --git a/drivers/usb/core/usb.c b/drivers/usb/core/usb.c
4012 index 0daff0d..ced0776 100644
4013 --- a/drivers/usb/core/usb.c
4014 +++ b/drivers/usb/core/usb.c
4015 @@ -228,9 +228,6 @@ static void usb_release_dev(struct device *dev)
4016 hcd = bus_to_hcd(udev->bus);
4017
4018 usb_destroy_configuration(udev);
4019 - /* Root hubs aren't real devices, so don't free HCD resources */
4020 - if (hcd->driver->free_dev && udev->parent)
4021 - hcd->driver->free_dev(hcd, udev);
4022 usb_put_hcd(hcd);
4023 kfree(udev->product);
4024 kfree(udev->manufacturer);
4025 diff --git a/drivers/usb/gadget/f_mass_storage.c b/drivers/usb/gadget/f_mass_storage.c
4026 index a37640e..73f9bbd 100644
4027 --- a/drivers/usb/gadget/f_mass_storage.c
4028 +++ b/drivers/usb/gadget/f_mass_storage.c
4029 @@ -2852,7 +2852,6 @@ error_release:
4030 /* Call fsg_common_release() directly, ref might be not
4031 * initialised */
4032 fsg_common_release(&common->ref);
4033 - complete(&common->thread_notifier);
4034 return ERR_PTR(rc);
4035 }
4036
4037 diff --git a/drivers/usb/host/ohci-pnx4008.c b/drivers/usb/host/ohci-pnx4008.c
4038 index 2769326..cd74bbd 100644
4039 --- a/drivers/usb/host/ohci-pnx4008.c
4040 +++ b/drivers/usb/host/ohci-pnx4008.c
4041 @@ -327,7 +327,7 @@ static int __devinit usb_hcd_pnx4008_probe(struct platform_device *pdev)
4042 }
4043 i2c_adap = i2c_get_adapter(2);
4044 memset(&i2c_info, 0, sizeof(struct i2c_board_info));
4045 - strlcpy(i2c_info.name, "isp1301_pnx", I2C_NAME_SIZE);
4046 + strlcpy(i2c_info.type, "isp1301_pnx", I2C_NAME_SIZE);
4047 isp1301_i2c_client = i2c_new_probed_device(i2c_adap, &i2c_info,
4048 normal_i2c);
4049 i2c_put_adapter(i2c_adap);
4050 @@ -411,7 +411,7 @@ out3:
4051 out2:
4052 clk_put(usb_clk);
4053 out1:
4054 - i2c_unregister_client(isp1301_i2c_client);
4055 + i2c_unregister_device(isp1301_i2c_client);
4056 isp1301_i2c_client = NULL;
4057 out_i2c_driver:
4058 i2c_del_driver(&isp1301_driver);
4059 @@ -430,7 +430,7 @@ static int usb_hcd_pnx4008_remove(struct platform_device *pdev)
4060 pnx4008_unset_usb_bits();
4061 clk_disable(usb_clk);
4062 clk_put(usb_clk);
4063 - i2c_unregister_client(isp1301_i2c_client);
4064 + i2c_unregister_device(isp1301_i2c_client);
4065 isp1301_i2c_client = NULL;
4066 i2c_del_driver(&isp1301_driver);
4067
4068 diff --git a/drivers/usb/host/uhci-hcd.c b/drivers/usb/host/uhci-hcd.c
4069 index 99cd00f..0919706 100644
4070 --- a/drivers/usb/host/uhci-hcd.c
4071 +++ b/drivers/usb/host/uhci-hcd.c
4072 @@ -735,6 +735,7 @@ static void uhci_stop(struct usb_hcd *hcd)
4073 uhci_hc_died(uhci);
4074 uhci_scan_schedule(uhci);
4075 spin_unlock_irq(&uhci->lock);
4076 + synchronize_irq(hcd->irq);
4077
4078 del_timer_sync(&uhci->fsbr_timer);
4079 release_uhci(uhci);
4080 diff --git a/drivers/usb/host/xhci-ext-caps.h b/drivers/usb/host/xhci-ext-caps.h
4081 index ecc131c..78c4eda 100644
4082 --- a/drivers/usb/host/xhci-ext-caps.h
4083 +++ b/drivers/usb/host/xhci-ext-caps.h
4084 @@ -101,12 +101,15 @@ static inline int xhci_find_next_cap_offset(void __iomem *base, int ext_offset)
4085
4086 next = readl(base + ext_offset);
4087
4088 - if (ext_offset == XHCI_HCC_PARAMS_OFFSET)
4089 + if (ext_offset == XHCI_HCC_PARAMS_OFFSET) {
4090 /* Find the first extended capability */
4091 next = XHCI_HCC_EXT_CAPS(next);
4092 - else
4093 + ext_offset = 0;
4094 + } else {
4095 /* Find the next extended capability */
4096 next = XHCI_EXT_CAPS_NEXT(next);
4097 + }
4098 +
4099 if (!next)
4100 return 0;
4101 /*
4102 diff --git a/drivers/usb/serial/cp210x.c b/drivers/usb/serial/cp210x.c
4103 index bd254ec..7d920f2 100644
4104 --- a/drivers/usb/serial/cp210x.c
4105 +++ b/drivers/usb/serial/cp210x.c
4106 @@ -91,11 +91,12 @@ static struct usb_device_id id_table [] = {
4107 { USB_DEVICE(0x10C4, 0x81C8) }, /* Lipowsky Industrie Elektronik GmbH, Baby-JTAG */
4108 { USB_DEVICE(0x10C4, 0x81E2) }, /* Lipowsky Industrie Elektronik GmbH, Baby-LIN */
4109 { USB_DEVICE(0x10C4, 0x81E7) }, /* Aerocomm Radio */
4110 + { USB_DEVICE(0x10C4, 0x81E8) }, /* Zephyr Bioharness */
4111 { USB_DEVICE(0x10C4, 0x81F2) }, /* C1007 HF band RFID controller */
4112 { USB_DEVICE(0x10C4, 0x8218) }, /* Lipowsky Industrie Elektronik GmbH, HARP-1 */
4113 { USB_DEVICE(0x10C4, 0x822B) }, /* Modem EDGE(GSM) Comander 2 */
4114 { USB_DEVICE(0x10C4, 0x826B) }, /* Cygnal Integrated Products, Inc., Fasttrax GPS demostration module */
4115 - { USB_DEVICE(0x10c4, 0x8293) }, /* Telegesys ETRX2USB */
4116 + { USB_DEVICE(0x10C4, 0x8293) }, /* Telegesys ETRX2USB */
4117 { USB_DEVICE(0x10C4, 0x82F9) }, /* Procyon AVS */
4118 { USB_DEVICE(0x10C4, 0x8341) }, /* Siemens MC35PU GPRS Modem */
4119 { USB_DEVICE(0x10C4, 0x8382) }, /* Cygnal Integrated Products, Inc. */
4120 diff --git a/drivers/usb/serial/ftdi_sio.c b/drivers/usb/serial/ftdi_sio.c
4121 index 7638828..34acf6c 100644
4122 --- a/drivers/usb/serial/ftdi_sio.c
4123 +++ b/drivers/usb/serial/ftdi_sio.c
4124 @@ -614,6 +614,7 @@ static struct usb_device_id id_table_combined [] = {
4125 { USB_DEVICE(FTDI_VID, FTDI_OCEANIC_PID) },
4126 { USB_DEVICE(TTI_VID, TTI_QL355P_PID) },
4127 { USB_DEVICE(FTDI_VID, FTDI_RM_CANVIEW_PID) },
4128 + { USB_DEVICE(CONTEC_VID, CONTEC_COM1USBH_PID) },
4129 { USB_DEVICE(BANDB_VID, BANDB_USOTL4_PID) },
4130 { USB_DEVICE(BANDB_VID, BANDB_USTL4_PID) },
4131 { USB_DEVICE(BANDB_VID, BANDB_USO9ML2_PID) },
4132 @@ -737,6 +738,10 @@ static struct usb_device_id id_table_combined [] = {
4133 .driver_info = (kernel_ulong_t)&ftdi_jtag_quirk },
4134 { USB_DEVICE(FTDI_VID, HAMEG_HO820_PID) },
4135 { USB_DEVICE(FTDI_VID, HAMEG_HO870_PID) },
4136 + { USB_DEVICE(FTDI_VID, MJSG_GENERIC_PID) },
4137 + { USB_DEVICE(FTDI_VID, MJSG_SR_RADIO_PID) },
4138 + { USB_DEVICE(FTDI_VID, MJSG_HD_RADIO_PID) },
4139 + { USB_DEVICE(FTDI_VID, MJSG_XM_RADIO_PID) },
4140 { }, /* Optional parameter entry */
4141 { } /* Terminating entry */
4142 };
4143 diff --git a/drivers/usb/serial/ftdi_sio_ids.h b/drivers/usb/serial/ftdi_sio_ids.h
4144 index c8951ae..d10b5a8 100644
4145 --- a/drivers/usb/serial/ftdi_sio_ids.h
4146 +++ b/drivers/usb/serial/ftdi_sio_ids.h
4147 @@ -494,6 +494,13 @@
4148 #define RATOC_PRODUCT_ID_USB60F 0xb020
4149
4150 /*
4151 + * Contec products (http://www.contec.com)
4152 + * Submitted by Daniel Sangorrin
4153 + */
4154 +#define CONTEC_VID 0x06CE /* Vendor ID */
4155 +#define CONTEC_COM1USBH_PID 0x8311 /* COM-1(USB)H */
4156 +
4157 +/*
4158 * Definitions for B&B Electronics products.
4159 */
4160 #define BANDB_VID 0x0856 /* B&B Electronics Vendor ID */
4161 @@ -1002,3 +1009,11 @@
4162 #define EVO_8U232AM_PID 0x02FF /* Evolution robotics RCM2 (FT232AM)*/
4163 #define EVO_HYBRID_PID 0x0302 /* Evolution robotics RCM4 PID (FT232BM)*/
4164 #define EVO_RCM4_PID 0x0303 /* Evolution robotics RCM4 PID */
4165 +
4166 +/*
4167 + * MJS Gadgets HD Radio / XM Radio / Sirius Radio interfaces (using VID 0x0403)
4168 + */
4169 +#define MJSG_GENERIC_PID 0x9378
4170 +#define MJSG_SR_RADIO_PID 0x9379
4171 +#define MJSG_XM_RADIO_PID 0x937A
4172 +#define MJSG_HD_RADIO_PID 0x937C
4173 diff --git a/drivers/usb/serial/sierra.c b/drivers/usb/serial/sierra.c
4174 index 3eb6143..0cfd621 100644
4175 --- a/drivers/usb/serial/sierra.c
4176 +++ b/drivers/usb/serial/sierra.c
4177 @@ -604,14 +604,17 @@ static void sierra_indat_callback(struct urb *urb)
4178 } else {
4179 if (urb->actual_length) {
4180 tty = tty_port_tty_get(&port->port);
4181 -
4182 - tty_buffer_request_room(tty, urb->actual_length);
4183 - tty_insert_flip_string(tty, data, urb->actual_length);
4184 - tty_flip_buffer_push(tty);
4185 -
4186 - tty_kref_put(tty);
4187 - usb_serial_debug_data(debug, &port->dev, __func__,
4188 - urb->actual_length, data);
4189 + if (tty) {
4190 + tty_buffer_request_room(tty,
4191 + urb->actual_length);
4192 + tty_insert_flip_string(tty, data,
4193 + urb->actual_length);
4194 + tty_flip_buffer_push(tty);
4195 +
4196 + tty_kref_put(tty);
4197 + usb_serial_debug_data(debug, &port->dev,
4198 + __func__, urb->actual_length, data);
4199 + }
4200 } else {
4201 dev_dbg(&port->dev, "%s: empty read urb"
4202 " received\n", __func__);
4203 diff --git a/drivers/usb/storage/unusual_devs.h b/drivers/usb/storage/unusual_devs.h
4204 index 49575fb..98b549b 100644
4205 --- a/drivers/usb/storage/unusual_devs.h
4206 +++ b/drivers/usb/storage/unusual_devs.h
4207 @@ -1147,8 +1147,8 @@ UNUSUAL_DEV( 0x0af0, 0x7401, 0x0000, 0x0000,
4208 0 ),
4209
4210 /* Reported by Jan Dumon <j.dumon@option.com>
4211 - * This device (wrongly) has a vendor-specific device descriptor.
4212 - * The entry is needed so usb-storage can bind to it's mass-storage
4213 + * These devices (wrongly) have a vendor-specific device descriptor.
4214 + * These entries are needed so usb-storage can bind to their mass-storage
4215 * interface as an interface driver */
4216 UNUSUAL_DEV( 0x0af0, 0x7501, 0x0000, 0x0000,
4217 "Option",
4218 @@ -1156,6 +1156,90 @@ UNUSUAL_DEV( 0x0af0, 0x7501, 0x0000, 0x0000,
4219 US_SC_DEVICE, US_PR_DEVICE, NULL,
4220 0 ),
4221
4222 +UNUSUAL_DEV( 0x0af0, 0x7701, 0x0000, 0x0000,
4223 + "Option",
4224 + "GI 0451 SD-Card",
4225 + US_SC_DEVICE, US_PR_DEVICE, NULL,
4226 + 0 ),
4227 +
4228 +UNUSUAL_DEV( 0x0af0, 0x7706, 0x0000, 0x0000,
4229 + "Option",
4230 + "GI 0451 SD-Card",
4231 + US_SC_DEVICE, US_PR_DEVICE, NULL,
4232 + 0 ),
4233 +
4234 +UNUSUAL_DEV( 0x0af0, 0x7901, 0x0000, 0x0000,
4235 + "Option",
4236 + "GI 0452 SD-Card",
4237 + US_SC_DEVICE, US_PR_DEVICE, NULL,
4238 + 0 ),
4239 +
4240 +UNUSUAL_DEV( 0x0af0, 0x7A01, 0x0000, 0x0000,
4241 + "Option",
4242 + "GI 0461 SD-Card",
4243 + US_SC_DEVICE, US_PR_DEVICE, NULL,
4244 + 0 ),
4245 +
4246 +UNUSUAL_DEV( 0x0af0, 0x7A05, 0x0000, 0x0000,
4247 + "Option",
4248 + "GI 0461 SD-Card",
4249 + US_SC_DEVICE, US_PR_DEVICE, NULL,
4250 + 0 ),
4251 +
4252 +UNUSUAL_DEV( 0x0af0, 0x8300, 0x0000, 0x0000,
4253 + "Option",
4254 + "GI 033x SD-Card",
4255 + US_SC_DEVICE, US_PR_DEVICE, NULL,
4256 + 0 ),
4257 +
4258 +UNUSUAL_DEV( 0x0af0, 0x8302, 0x0000, 0x0000,
4259 + "Option",
4260 + "GI 033x SD-Card",
4261 + US_SC_DEVICE, US_PR_DEVICE, NULL,
4262 + 0 ),
4263 +
4264 +UNUSUAL_DEV( 0x0af0, 0x8304, 0x0000, 0x0000,
4265 + "Option",
4266 + "GI 033x SD-Card",
4267 + US_SC_DEVICE, US_PR_DEVICE, NULL,
4268 + 0 ),
4269 +
4270 +UNUSUAL_DEV( 0x0af0, 0xc100, 0x0000, 0x0000,
4271 + "Option",
4272 + "GI 070x SD-Card",
4273 + US_SC_DEVICE, US_PR_DEVICE, NULL,
4274 + 0 ),
4275 +
4276 +UNUSUAL_DEV( 0x0af0, 0xd057, 0x0000, 0x0000,
4277 + "Option",
4278 + "GI 1505 SD-Card",
4279 + US_SC_DEVICE, US_PR_DEVICE, NULL,
4280 + 0 ),
4281 +
4282 +UNUSUAL_DEV( 0x0af0, 0xd058, 0x0000, 0x0000,
4283 + "Option",
4284 + "GI 1509 SD-Card",
4285 + US_SC_DEVICE, US_PR_DEVICE, NULL,
4286 + 0 ),
4287 +
4288 +UNUSUAL_DEV( 0x0af0, 0xd157, 0x0000, 0x0000,
4289 + "Option",
4290 + "GI 1515 SD-Card",
4291 + US_SC_DEVICE, US_PR_DEVICE, NULL,
4292 + 0 ),
4293 +
4294 +UNUSUAL_DEV( 0x0af0, 0xd257, 0x0000, 0x0000,
4295 + "Option",
4296 + "GI 1215 SD-Card",
4297 + US_SC_DEVICE, US_PR_DEVICE, NULL,
4298 + 0 ),
4299 +
4300 +UNUSUAL_DEV( 0x0af0, 0xd357, 0x0000, 0x0000,
4301 + "Option",
4302 + "GI 1505 SD-Card",
4303 + US_SC_DEVICE, US_PR_DEVICE, NULL,
4304 + 0 ),
4305 +
4306 /* Reported by Ben Efros <ben@pc-doctor.com> */
4307 UNUSUAL_DEV( 0x0bc2, 0x3010, 0x0000, 0x0000,
4308 "Seagate",
4309 diff --git a/drivers/video/sunxvr500.c b/drivers/video/sunxvr500.c
4310 index 18b9507..4cd5049 100644
4311 --- a/drivers/video/sunxvr500.c
4312 +++ b/drivers/video/sunxvr500.c
4313 @@ -400,6 +400,7 @@ static void __devexit e3d_pci_unregister(struct pci_dev *pdev)
4314
4315 static struct pci_device_id e3d_pci_table[] = {
4316 { PCI_DEVICE(PCI_VENDOR_ID_3DLABS, 0x7a0), },
4317 + { PCI_DEVICE(0x1091, 0x7a0), },
4318 { PCI_DEVICE(PCI_VENDOR_ID_3DLABS, 0x7a2), },
4319 { .vendor = PCI_VENDOR_ID_3DLABS,
4320 .device = PCI_ANY_ID,
4321 diff --git a/fs/file_table.c b/fs/file_table.c
4322 index b98404b..32d12b7 100644
4323 --- a/fs/file_table.c
4324 +++ b/fs/file_table.c
4325 @@ -393,7 +393,9 @@ retry:
4326 continue;
4327 if (!(f->f_mode & FMODE_WRITE))
4328 continue;
4329 + spin_lock(&f->f_lock);
4330 f->f_mode &= ~FMODE_WRITE;
4331 + spin_unlock(&f->f_lock);
4332 if (file_check_writeable(f) != 0)
4333 continue;
4334 file_release_write(f);
4335 diff --git a/fs/nfs/dns_resolve.c b/fs/nfs/dns_resolve.c
4336 index 95e1ca7..3f0cd4d 100644
4337 --- a/fs/nfs/dns_resolve.c
4338 +++ b/fs/nfs/dns_resolve.c
4339 @@ -36,6 +36,19 @@ struct nfs_dns_ent {
4340 };
4341
4342
4343 +static void nfs_dns_ent_update(struct cache_head *cnew,
4344 + struct cache_head *ckey)
4345 +{
4346 + struct nfs_dns_ent *new;
4347 + struct nfs_dns_ent *key;
4348 +
4349 + new = container_of(cnew, struct nfs_dns_ent, h);
4350 + key = container_of(ckey, struct nfs_dns_ent, h);
4351 +
4352 + memcpy(&new->addr, &key->addr, key->addrlen);
4353 + new->addrlen = key->addrlen;
4354 +}
4355 +
4356 static void nfs_dns_ent_init(struct cache_head *cnew,
4357 struct cache_head *ckey)
4358 {
4359 @@ -49,8 +62,7 @@ static void nfs_dns_ent_init(struct cache_head *cnew,
4360 new->hostname = kstrndup(key->hostname, key->namelen, GFP_KERNEL);
4361 if (new->hostname) {
4362 new->namelen = key->namelen;
4363 - memcpy(&new->addr, &key->addr, key->addrlen);
4364 - new->addrlen = key->addrlen;
4365 + nfs_dns_ent_update(cnew, ckey);
4366 } else {
4367 new->namelen = 0;
4368 new->addrlen = 0;
4369 @@ -234,7 +246,7 @@ static struct cache_detail nfs_dns_resolve = {
4370 .cache_show = nfs_dns_show,
4371 .match = nfs_dns_match,
4372 .init = nfs_dns_ent_init,
4373 - .update = nfs_dns_ent_init,
4374 + .update = nfs_dns_ent_update,
4375 .alloc = nfs_dns_ent_alloc,
4376 };
4377
4378 diff --git a/fs/nfsd/nfs4state.c b/fs/nfsd/nfs4state.c
4379 index f19ed86..fcafe60 100644
4380 --- a/fs/nfsd/nfs4state.c
4381 +++ b/fs/nfsd/nfs4state.c
4382 @@ -1998,7 +1998,9 @@ nfs4_file_downgrade(struct file *filp, unsigned int share_access)
4383 {
4384 if (share_access & NFS4_SHARE_ACCESS_WRITE) {
4385 drop_file_write_access(filp);
4386 + spin_lock(&filp->f_lock);
4387 filp->f_mode = (filp->f_mode | FMODE_READ) & ~FMODE_WRITE;
4388 + spin_unlock(&filp->f_lock);
4389 }
4390 }
4391
4392 diff --git a/fs/ocfs2/aops.c b/fs/ocfs2/aops.c
4393 index 7e9df11..4c2a6d2 100644
4394 --- a/fs/ocfs2/aops.c
4395 +++ b/fs/ocfs2/aops.c
4396 @@ -577,8 +577,9 @@ static int ocfs2_direct_IO_get_blocks(struct inode *inode, sector_t iblock,
4397 goto bail;
4398 }
4399
4400 - /* We should already CoW the refcounted extent. */
4401 - BUG_ON(ext_flags & OCFS2_EXT_REFCOUNTED);
4402 + /* We should already CoW the refcounted extent in case of create. */
4403 + BUG_ON(create && (ext_flags & OCFS2_EXT_REFCOUNTED));
4404 +
4405 /*
4406 * get_more_blocks() expects us to describe a hole by clearing
4407 * the mapped bit on bh_result().
4408 diff --git a/fs/sysfs/dir.c b/fs/sysfs/dir.c
4409 index 699f371..5c4703d 100644
4410 --- a/fs/sysfs/dir.c
4411 +++ b/fs/sysfs/dir.c
4412 @@ -837,11 +837,46 @@ static inline unsigned char dt_type(struct sysfs_dirent *sd)
4413 return (sd->s_mode >> 12) & 15;
4414 }
4415
4416 +static int sysfs_dir_release(struct inode *inode, struct file *filp)
4417 +{
4418 + sysfs_put(filp->private_data);
4419 + return 0;
4420 +}
4421 +
4422 +static struct sysfs_dirent *sysfs_dir_pos(struct sysfs_dirent *parent_sd,
4423 + ino_t ino, struct sysfs_dirent *pos)
4424 +{
4425 + if (pos) {
4426 + int valid = !(pos->s_flags & SYSFS_FLAG_REMOVED) &&
4427 + pos->s_parent == parent_sd &&
4428 + ino == pos->s_ino;
4429 + sysfs_put(pos);
4430 + if (valid)
4431 + return pos;
4432 + }
4433 + pos = NULL;
4434 + if ((ino > 1) && (ino < INT_MAX)) {
4435 + pos = parent_sd->s_dir.children;
4436 + while (pos && (ino > pos->s_ino))
4437 + pos = pos->s_sibling;
4438 + }
4439 + return pos;
4440 +}
4441 +
4442 +static struct sysfs_dirent *sysfs_dir_next_pos(struct sysfs_dirent *parent_sd,
4443 + ino_t ino, struct sysfs_dirent *pos)
4444 +{
4445 + pos = sysfs_dir_pos(parent_sd, ino, pos);
4446 + if (pos)
4447 + pos = pos->s_sibling;
4448 + return pos;
4449 +}
4450 +
4451 static int sysfs_readdir(struct file * filp, void * dirent, filldir_t filldir)
4452 {
4453 struct dentry *dentry = filp->f_path.dentry;
4454 struct sysfs_dirent * parent_sd = dentry->d_fsdata;
4455 - struct sysfs_dirent *pos;
4456 + struct sysfs_dirent *pos = filp->private_data;
4457 ino_t ino;
4458
4459 if (filp->f_pos == 0) {
4460 @@ -857,29 +892,31 @@ static int sysfs_readdir(struct file * filp, void * dirent, filldir_t filldir)
4461 if (filldir(dirent, "..", 2, filp->f_pos, ino, DT_DIR) == 0)
4462 filp->f_pos++;
4463 }
4464 - if ((filp->f_pos > 1) && (filp->f_pos < INT_MAX)) {
4465 - mutex_lock(&sysfs_mutex);
4466 -
4467 - /* Skip the dentries we have already reported */
4468 - pos = parent_sd->s_dir.children;
4469 - while (pos && (filp->f_pos > pos->s_ino))
4470 - pos = pos->s_sibling;
4471 -
4472 - for ( ; pos; pos = pos->s_sibling) {
4473 - const char * name;
4474 - int len;
4475 -
4476 - name = pos->s_name;
4477 - len = strlen(name);
4478 - filp->f_pos = ino = pos->s_ino;
4479 + mutex_lock(&sysfs_mutex);
4480 + for (pos = sysfs_dir_pos(parent_sd, filp->f_pos, pos);
4481 + pos;
4482 + pos = sysfs_dir_next_pos(parent_sd, filp->f_pos, pos)) {
4483 + const char * name;
4484 + unsigned int type;
4485 + int len, ret;
4486 +
4487 + name = pos->s_name;
4488 + len = strlen(name);
4489 + ino = pos->s_ino;
4490 + type = dt_type(pos);
4491 + filp->f_pos = ino;
4492 + filp->private_data = sysfs_get(pos);
4493
4494 - if (filldir(dirent, name, len, filp->f_pos, ino,
4495 - dt_type(pos)) < 0)
4496 - break;
4497 - }
4498 - if (!pos)
4499 - filp->f_pos = INT_MAX;
4500 mutex_unlock(&sysfs_mutex);
4501 + ret = filldir(dirent, name, len, filp->f_pos, ino, type);
4502 + mutex_lock(&sysfs_mutex);
4503 + if (ret < 0)
4504 + break;
4505 + }
4506 + mutex_unlock(&sysfs_mutex);
4507 + if ((filp->f_pos > 1) && !pos) { /* EOF */
4508 + filp->f_pos = INT_MAX;
4509 + filp->private_data = NULL;
4510 }
4511 return 0;
4512 }
4513 @@ -888,5 +925,6 @@ static int sysfs_readdir(struct file * filp, void * dirent, filldir_t filldir)
4514 const struct file_operations sysfs_dir_operations = {
4515 .read = generic_read_dir,
4516 .readdir = sysfs_readdir,
4517 + .release = sysfs_dir_release,
4518 .llseek = generic_file_llseek,
4519 };
4520 diff --git a/include/linux/fs.h b/include/linux/fs.h
4521 index ebb1cd5..f2f68ce 100644
4522 --- a/include/linux/fs.h
4523 +++ b/include/linux/fs.h
4524 @@ -87,6 +87,9 @@ struct inodes_stat_t {
4525 */
4526 #define FMODE_NOCMTIME ((__force fmode_t)2048)
4527
4528 +/* Expect random access pattern */
4529 +#define FMODE_RANDOM ((__force fmode_t)4096)
4530 +
4531 /*
4532 * The below are the various read and write types that we support. Some of
4533 * them include behavioral modifiers that send information down to the
4534 diff --git a/include/linux/irq.h b/include/linux/irq.h
4535 index 451481c..4d9b26e 100644
4536 --- a/include/linux/irq.h
4537 +++ b/include/linux/irq.h
4538 @@ -400,7 +400,9 @@ static inline int irq_has_action(unsigned int irq)
4539
4540 /* Dynamic irq helper functions */
4541 extern void dynamic_irq_init(unsigned int irq);
4542 +void dynamic_irq_init_keep_chip_data(unsigned int irq);
4543 extern void dynamic_irq_cleanup(unsigned int irq);
4544 +void dynamic_irq_cleanup_keep_chip_data(unsigned int irq);
4545
4546 /* Set/get chip/data for an IRQ: */
4547 extern int set_irq_chip(unsigned int irq, struct irq_chip *chip);
4548 diff --git a/include/linux/netdevice.h b/include/linux/netdevice.h
4549 index a3fccc8..99914e6 100644
4550 --- a/include/linux/netdevice.h
4551 +++ b/include/linux/netdevice.h
4552 @@ -136,7 +136,7 @@ static inline bool dev_xmit_complete(int rc)
4553 * used.
4554 */
4555
4556 -#if defined(CONFIG_WLAN_80211) || defined(CONFIG_AX25) || defined(CONFIG_AX25_MODULE)
4557 +#if defined(CONFIG_WLAN) || defined(CONFIG_AX25) || defined(CONFIG_AX25_MODULE)
4558 # if defined(CONFIG_MAC80211_MESH)
4559 # define LL_MAX_HEADER 128
4560 # else
4561 diff --git a/include/linux/perf_event.h b/include/linux/perf_event.h
4562 index a177698..c8ea0c7 100644
4563 --- a/include/linux/perf_event.h
4564 +++ b/include/linux/perf_event.h
4565 @@ -496,9 +496,8 @@ struct hw_perf_event {
4566 atomic64_t period_left;
4567 u64 interrupts;
4568
4569 - u64 freq_count;
4570 - u64 freq_interrupts;
4571 - u64 freq_stamp;
4572 + u64 freq_time_stamp;
4573 + u64 freq_count_stamp;
4574 #endif
4575 };
4576
4577 diff --git a/include/linux/sched.h b/include/linux/sched.h
4578 index 78efe7c..1f5fa53 100644
4579 --- a/include/linux/sched.h
4580 +++ b/include/linux/sched.h
4581 @@ -878,7 +878,10 @@ static inline int sd_balance_for_mc_power(void)
4582 if (sched_smt_power_savings)
4583 return SD_POWERSAVINGS_BALANCE;
4584
4585 - return SD_PREFER_SIBLING;
4586 + if (!sched_mc_power_savings)
4587 + return SD_PREFER_SIBLING;
4588 +
4589 + return 0;
4590 }
4591
4592 static inline int sd_balance_for_package_power(void)
4593 diff --git a/include/linux/skbuff.h b/include/linux/skbuff.h
4594 index ae836fd..ec226a2 100644
4595 --- a/include/linux/skbuff.h
4596 +++ b/include/linux/skbuff.h
4597 @@ -315,22 +315,23 @@ struct sk_buff {
4598 struct sk_buff *next;
4599 struct sk_buff *prev;
4600
4601 - struct sock *sk;
4602 ktime_t tstamp;
4603 +
4604 + struct sock *sk;
4605 struct net_device *dev;
4606
4607 - unsigned long _skb_dst;
4608 -#ifdef CONFIG_XFRM
4609 - struct sec_path *sp;
4610 -#endif
4611 /*
4612 * This is the control buffer. It is free to use for every
4613 * layer. Please put your private variables there. If you
4614 * want to keep them across layers you have to do a skb_clone()
4615 * first. This is owned by whoever has the skb queued ATM.
4616 */
4617 - char cb[48];
4618 + char cb[48] __aligned(8);
4619
4620 + unsigned long _skb_dst;
4621 +#ifdef CONFIG_XFRM
4622 + struct sec_path *sp;
4623 +#endif
4624 unsigned int len,
4625 data_len;
4626 __u16 mac_len,
4627 diff --git a/include/linux/syscalls.h b/include/linux/syscalls.h
4628 index 207466a..2540770 100644
4629 --- a/include/linux/syscalls.h
4630 +++ b/include/linux/syscalls.h
4631 @@ -132,7 +132,8 @@ struct perf_event_attr;
4632
4633 #define SYSCALL_TRACE_ENTER_EVENT(sname) \
4634 static const struct syscall_metadata __syscall_meta_##sname; \
4635 - static struct ftrace_event_call event_enter_##sname; \
4636 + static struct ftrace_event_call \
4637 + __attribute__((__aligned__(4))) event_enter_##sname; \
4638 static struct trace_event enter_syscall_print_##sname = { \
4639 .trace = print_syscall_enter, \
4640 }; \
4641 @@ -154,7 +155,8 @@ struct perf_event_attr;
4642
4643 #define SYSCALL_TRACE_EXIT_EVENT(sname) \
4644 static const struct syscall_metadata __syscall_meta_##sname; \
4645 - static struct ftrace_event_call event_exit_##sname; \
4646 + static struct ftrace_event_call \
4647 + __attribute__((__aligned__(4))) event_exit_##sname; \
4648 static struct trace_event exit_syscall_print_##sname = { \
4649 .trace = print_syscall_exit, \
4650 }; \
4651 diff --git a/include/trace/ftrace.h b/include/trace/ftrace.h
4652 index c6fe03e..1ca4990 100644
4653 --- a/include/trace/ftrace.h
4654 +++ b/include/trace/ftrace.h
4655 @@ -65,7 +65,8 @@
4656 };
4657 #undef DEFINE_EVENT
4658 #define DEFINE_EVENT(template, name, proto, args) \
4659 - static struct ftrace_event_call event_##name
4660 + static struct ftrace_event_call \
4661 + __attribute__((__aligned__(4))) event_##name
4662
4663 #undef DEFINE_EVENT_PRINT
4664 #define DEFINE_EVENT_PRINT(template, name, proto, args, print) \
4665 diff --git a/kernel/irq/chip.c b/kernel/irq/chip.c
4666 index ecc3fa2..d70394f 100644
4667 --- a/kernel/irq/chip.c
4668 +++ b/kernel/irq/chip.c
4669 @@ -18,11 +18,7 @@
4670
4671 #include "internals.h"
4672
4673 -/**
4674 - * dynamic_irq_init - initialize a dynamically allocated irq
4675 - * @irq: irq number to initialize
4676 - */
4677 -void dynamic_irq_init(unsigned int irq)
4678 +static void dynamic_irq_init_x(unsigned int irq, bool keep_chip_data)
4679 {
4680 struct irq_desc *desc;
4681 unsigned long flags;
4682 @@ -41,7 +37,8 @@ void dynamic_irq_init(unsigned int irq)
4683 desc->depth = 1;
4684 desc->msi_desc = NULL;
4685 desc->handler_data = NULL;
4686 - desc->chip_data = NULL;
4687 + if (!keep_chip_data)
4688 + desc->chip_data = NULL;
4689 desc->action = NULL;
4690 desc->irq_count = 0;
4691 desc->irqs_unhandled = 0;
4692 @@ -55,10 +52,26 @@ void dynamic_irq_init(unsigned int irq)
4693 }
4694
4695 /**
4696 - * dynamic_irq_cleanup - cleanup a dynamically allocated irq
4697 + * dynamic_irq_init - initialize a dynamically allocated irq
4698 * @irq: irq number to initialize
4699 */
4700 -void dynamic_irq_cleanup(unsigned int irq)
4701 +void dynamic_irq_init(unsigned int irq)
4702 +{
4703 + dynamic_irq_init_x(irq, false);
4704 +}
4705 +
4706 +/**
4707 + * dynamic_irq_init_keep_chip_data - initialize a dynamically allocated irq
4708 + * @irq: irq number to initialize
4709 + *
4710 + * does not set irq_to_desc(irq)->chip_data to NULL
4711 + */
4712 +void dynamic_irq_init_keep_chip_data(unsigned int irq)
4713 +{
4714 + dynamic_irq_init_x(irq, true);
4715 +}
4716 +
4717 +static void dynamic_irq_cleanup_x(unsigned int irq, bool keep_chip_data)
4718 {
4719 struct irq_desc *desc = irq_to_desc(irq);
4720 unsigned long flags;
4721 @@ -77,7 +90,8 @@ void dynamic_irq_cleanup(unsigned int irq)
4722 }
4723 desc->msi_desc = NULL;
4724 desc->handler_data = NULL;
4725 - desc->chip_data = NULL;
4726 + if (!keep_chip_data)
4727 + desc->chip_data = NULL;
4728 desc->handle_irq = handle_bad_irq;
4729 desc->chip = &no_irq_chip;
4730 desc->name = NULL;
4731 @@ -85,6 +99,26 @@ void dynamic_irq_cleanup(unsigned int irq)
4732 raw_spin_unlock_irqrestore(&desc->lock, flags);
4733 }
4734
4735 +/**
4736 + * dynamic_irq_cleanup - cleanup a dynamically allocated irq
4737 + * @irq: irq number to initialize
4738 + */
4739 +void dynamic_irq_cleanup(unsigned int irq)
4740 +{
4741 + dynamic_irq_cleanup_x(irq, false);
4742 +}
4743 +
4744 +/**
4745 + * dynamic_irq_cleanup_keep_chip_data - cleanup a dynamically allocated irq
4746 + * @irq: irq number to initialize
4747 + *
4748 + * does not set irq_to_desc(irq)->chip_data to NULL
4749 + */
4750 +void dynamic_irq_cleanup_keep_chip_data(unsigned int irq)
4751 +{
4752 + dynamic_irq_cleanup_x(irq, true);
4753 +}
4754 +
4755
4756 /**
4757 * set_irq_chip - set the irq chip for an irq
4758 diff --git a/kernel/perf_event.c b/kernel/perf_event.c
4759 index 2ae7409..b707465 100644
4760 --- a/kernel/perf_event.c
4761 +++ b/kernel/perf_event.c
4762 @@ -248,7 +248,7 @@ static void perf_unpin_context(struct perf_event_context *ctx)
4763
4764 static inline u64 perf_clock(void)
4765 {
4766 - return cpu_clock(smp_processor_id());
4767 + return cpu_clock(raw_smp_processor_id());
4768 }
4769
4770 /*
4771 @@ -1350,14 +1350,83 @@ static void perf_event_cpu_sched_in(struct perf_cpu_context *cpuctx, int cpu)
4772
4773 static void perf_log_throttle(struct perf_event *event, int enable);
4774
4775 -static void perf_adjust_period(struct perf_event *event, u64 events)
4776 +static u64 perf_calculate_period(struct perf_event *event, u64 nsec, u64 count)
4777 +{
4778 + u64 frequency = event->attr.sample_freq;
4779 + u64 sec = NSEC_PER_SEC;
4780 + u64 divisor, dividend;
4781 +
4782 + int count_fls, nsec_fls, frequency_fls, sec_fls;
4783 +
4784 + count_fls = fls64(count);
4785 + nsec_fls = fls64(nsec);
4786 + frequency_fls = fls64(frequency);
4787 + sec_fls = 30;
4788 +
4789 + /*
4790 + * We got @count in @nsec, with a target of sample_freq HZ
4791 + * the target period becomes:
4792 + *
4793 + * @count * 10^9
4794 + * period = -------------------
4795 + * @nsec * sample_freq
4796 + *
4797 + */
4798 +
4799 + /*
4800 + * Reduce accuracy by one bit such that @a and @b converge
4801 + * to a similar magnitude.
4802 + */
4803 +#define REDUCE_FLS(a, b) \
4804 +do { \
4805 + if (a##_fls > b##_fls) { \
4806 + a >>= 1; \
4807 + a##_fls--; \
4808 + } else { \
4809 + b >>= 1; \
4810 + b##_fls--; \
4811 + } \
4812 +} while (0)
4813 +
4814 + /*
4815 + * Reduce accuracy until either term fits in a u64, then proceed with
4816 + * the other, so that finally we can do a u64/u64 division.
4817 + */
4818 + while (count_fls + sec_fls > 64 && nsec_fls + frequency_fls > 64) {
4819 + REDUCE_FLS(nsec, frequency);
4820 + REDUCE_FLS(sec, count);
4821 + }
4822 +
4823 + if (count_fls + sec_fls > 64) {
4824 + divisor = nsec * frequency;
4825 +
4826 + while (count_fls + sec_fls > 64) {
4827 + REDUCE_FLS(count, sec);
4828 + divisor >>= 1;
4829 + }
4830 +
4831 + dividend = count * sec;
4832 + } else {
4833 + dividend = count * sec;
4834 +
4835 + while (nsec_fls + frequency_fls > 64) {
4836 + REDUCE_FLS(nsec, frequency);
4837 + dividend >>= 1;
4838 + }
4839 +
4840 + divisor = nsec * frequency;
4841 + }
4842 +
4843 + return div64_u64(dividend, divisor);
4844 +}
4845 +
4846 +static void perf_adjust_period(struct perf_event *event, u64 nsec, u64 count)
4847 {
4848 struct hw_perf_event *hwc = &event->hw;
4849 u64 period, sample_period;
4850 s64 delta;
4851
4852 - events *= hwc->sample_period;
4853 - period = div64_u64(events, event->attr.sample_freq);
4854 + period = perf_calculate_period(event, nsec, count);
4855
4856 delta = (s64)(period - hwc->sample_period);
4857 delta = (delta + 7) / 8; /* low pass filter */
4858 @@ -1368,13 +1437,22 @@ static void perf_adjust_period(struct perf_event *event, u64 events)
4859 sample_period = 1;
4860
4861 hwc->sample_period = sample_period;
4862 +
4863 + if (atomic64_read(&hwc->period_left) > 8*sample_period) {
4864 + perf_disable();
4865 + event->pmu->disable(event);
4866 + atomic64_set(&hwc->period_left, 0);
4867 + event->pmu->enable(event);
4868 + perf_enable();
4869 + }
4870 }
4871
4872 static void perf_ctx_adjust_freq(struct perf_event_context *ctx)
4873 {
4874 struct perf_event *event;
4875 struct hw_perf_event *hwc;
4876 - u64 interrupts, freq;
4877 + u64 interrupts, now;
4878 + s64 delta;
4879
4880 raw_spin_lock(&ctx->lock);
4881 list_for_each_entry_rcu(event, &ctx->event_list, event_entry) {
4882 @@ -1395,44 +1473,18 @@ static void perf_ctx_adjust_freq(struct perf_event_context *ctx)
4883 if (interrupts == MAX_INTERRUPTS) {
4884 perf_log_throttle(event, 1);
4885 event->pmu->unthrottle(event);
4886 - interrupts = 2*sysctl_perf_event_sample_rate/HZ;
4887 }
4888
4889 if (!event->attr.freq || !event->attr.sample_freq)
4890 continue;
4891
4892 - /*
4893 - * if the specified freq < HZ then we need to skip ticks
4894 - */
4895 - if (event->attr.sample_freq < HZ) {
4896 - freq = event->attr.sample_freq;
4897 -
4898 - hwc->freq_count += freq;
4899 - hwc->freq_interrupts += interrupts;
4900 -
4901 - if (hwc->freq_count < HZ)
4902 - continue;
4903 -
4904 - interrupts = hwc->freq_interrupts;
4905 - hwc->freq_interrupts = 0;
4906 - hwc->freq_count -= HZ;
4907 - } else
4908 - freq = HZ;
4909 -
4910 - perf_adjust_period(event, freq * interrupts);
4911 + event->pmu->read(event);
4912 + now = atomic64_read(&event->count);
4913 + delta = now - hwc->freq_count_stamp;
4914 + hwc->freq_count_stamp = now;
4915
4916 - /*
4917 - * In order to avoid being stalled by an (accidental) huge
4918 - * sample period, force reset the sample period if we didn't
4919 - * get any events in this freq period.
4920 - */
4921 - if (!interrupts) {
4922 - perf_disable();
4923 - event->pmu->disable(event);
4924 - atomic64_set(&hwc->period_left, 0);
4925 - event->pmu->enable(event);
4926 - perf_enable();
4927 - }
4928 + if (delta > 0)
4929 + perf_adjust_period(event, TICK_NSEC, delta);
4930 }
4931 raw_spin_unlock(&ctx->lock);
4932 }
4933 @@ -3688,12 +3740,12 @@ static int __perf_event_overflow(struct perf_event *event, int nmi,
4934
4935 if (event->attr.freq) {
4936 u64 now = perf_clock();
4937 - s64 delta = now - hwc->freq_stamp;
4938 + s64 delta = now - hwc->freq_time_stamp;
4939
4940 - hwc->freq_stamp = now;
4941 + hwc->freq_time_stamp = now;
4942
4943 - if (delta > 0 && delta < TICK_NSEC)
4944 - perf_adjust_period(event, NSEC_PER_SEC / (int)delta);
4945 + if (delta > 0 && delta < 2*TICK_NSEC)
4946 + perf_adjust_period(event, delta, hwc->last_period);
4947 }
4948
4949 /*
4950 diff --git a/kernel/power/snapshot.c b/kernel/power/snapshot.c
4951 index 36cb168..fc9ed15 100644
4952 --- a/kernel/power/snapshot.c
4953 +++ b/kernel/power/snapshot.c
4954 @@ -1181,7 +1181,7 @@ static void free_unnecessary_pages(void)
4955
4956 memory_bm_position_reset(&copy_bm);
4957
4958 - while (to_free_normal > 0 && to_free_highmem > 0) {
4959 + while (to_free_normal > 0 || to_free_highmem > 0) {
4960 unsigned long pfn = memory_bm_next_pfn(&copy_bm);
4961 struct page *page = pfn_to_page(pfn);
4962
4963 diff --git a/kernel/sched.c b/kernel/sched.c
4964 index 3a8fb30..00a59b0 100644
4965 --- a/kernel/sched.c
4966 +++ b/kernel/sched.c
4967 @@ -4119,12 +4119,23 @@ find_busiest_queue(struct sched_group *group, enum cpu_idle_type idle,
4968 continue;
4969
4970 rq = cpu_rq(i);
4971 - wl = weighted_cpuload(i) * SCHED_LOAD_SCALE;
4972 - wl /= power;
4973 + wl = weighted_cpuload(i);
4974
4975 + /*
4976 + * When comparing with imbalance, use weighted_cpuload()
4977 + * which is not scaled with the cpu power.
4978 + */
4979 if (capacity && rq->nr_running == 1 && wl > imbalance)
4980 continue;
4981
4982 + /*
4983 + * For the load comparisons with the other cpu's, consider
4984 + * the weighted_cpuload() scaled with the cpu power, so that
4985 + * the load can be moved away from the cpu that is potentially
4986 + * running at a lower capacity.
4987 + */
4988 + wl = (wl * SCHED_LOAD_SCALE) / power;
4989 +
4990 if (wl > max_load) {
4991 max_load = wl;
4992 busiest = rq;
4993 @@ -6054,7 +6065,7 @@ void rt_mutex_setprio(struct task_struct *p, int prio)
4994 unsigned long flags;
4995 int oldprio, on_rq, running;
4996 struct rq *rq;
4997 - const struct sched_class *prev_class = p->sched_class;
4998 + const struct sched_class *prev_class;
4999
5000 BUG_ON(prio < 0 || prio > MAX_PRIO);
5001
5002 @@ -6062,6 +6073,7 @@ void rt_mutex_setprio(struct task_struct *p, int prio)
5003 update_rq_clock(rq);
5004
5005 oldprio = p->prio;
5006 + prev_class = p->sched_class;
5007 on_rq = p->se.on_rq;
5008 running = task_current(rq, p);
5009 if (on_rq)
5010 @@ -6281,7 +6293,7 @@ static int __sched_setscheduler(struct task_struct *p, int policy,
5011 {
5012 int retval, oldprio, oldpolicy = -1, on_rq, running;
5013 unsigned long flags;
5014 - const struct sched_class *prev_class = p->sched_class;
5015 + const struct sched_class *prev_class;
5016 struct rq *rq;
5017 int reset_on_fork;
5018
5019 @@ -6395,6 +6407,7 @@ recheck:
5020 p->sched_reset_on_fork = reset_on_fork;
5021
5022 oldprio = p->prio;
5023 + prev_class = p->sched_class;
5024 __setscheduler(rq, p, policy, param->sched_priority);
5025
5026 if (running)
5027 diff --git a/kernel/trace/trace.h b/kernel/trace/trace.h
5028 index 4df6a77..a1edaa8 100644
5029 --- a/kernel/trace/trace.h
5030 +++ b/kernel/trace/trace.h
5031 @@ -791,7 +791,8 @@ extern const char *__stop___trace_bprintk_fmt[];
5032
5033 #undef FTRACE_ENTRY
5034 #define FTRACE_ENTRY(call, struct_name, id, tstruct, print) \
5035 - extern struct ftrace_event_call event_##call;
5036 + extern struct ftrace_event_call \
5037 + __attribute__((__aligned__(4))) event_##call;
5038 #undef FTRACE_ENTRY_DUP
5039 #define FTRACE_ENTRY_DUP(call, struct_name, id, tstruct, print) \
5040 FTRACE_ENTRY(call, struct_name, id, PARAMS(tstruct), PARAMS(print))
5041 diff --git a/mm/fadvise.c b/mm/fadvise.c
5042 index e433592..8d723c9 100644
5043 --- a/mm/fadvise.c
5044 +++ b/mm/fadvise.c
5045 @@ -77,12 +77,20 @@ SYSCALL_DEFINE(fadvise64_64)(int fd, loff_t offset, loff_t len, int advice)
5046 switch (advice) {
5047 case POSIX_FADV_NORMAL:
5048 file->f_ra.ra_pages = bdi->ra_pages;
5049 + spin_lock(&file->f_lock);
5050 + file->f_mode &= ~FMODE_RANDOM;
5051 + spin_unlock(&file->f_lock);
5052 break;
5053 case POSIX_FADV_RANDOM:
5054 - file->f_ra.ra_pages = 0;
5055 + spin_lock(&file->f_lock);
5056 + file->f_mode |= FMODE_RANDOM;
5057 + spin_unlock(&file->f_lock);
5058 break;
5059 case POSIX_FADV_SEQUENTIAL:
5060 file->f_ra.ra_pages = bdi->ra_pages * 2;
5061 + spin_lock(&file->f_lock);
5062 + file->f_mode &= ~FMODE_RANDOM;
5063 + spin_unlock(&file->f_lock);
5064 break;
5065 case POSIX_FADV_WILLNEED:
5066 if (!mapping->a_ops->readpage) {
5067 diff --git a/mm/readahead.c b/mm/readahead.c
5068 index 033bc13..337b20e 100644
5069 --- a/mm/readahead.c
5070 +++ b/mm/readahead.c
5071 @@ -501,6 +501,12 @@ void page_cache_sync_readahead(struct address_space *mapping,
5072 if (!ra->ra_pages)
5073 return;
5074
5075 + /* be dumb */
5076 + if (filp->f_mode & FMODE_RANDOM) {
5077 + force_page_cache_readahead(mapping, filp, offset, req_size);
5078 + return;
5079 + }
5080 +
5081 /* do read-ahead */
5082 ondemand_readahead(mapping, ra, filp, false, offset, req_size);
5083 }
5084 diff --git a/mm/slab.c b/mm/slab.c
5085 index 7451bda..ff44eb2 100644
5086 --- a/mm/slab.c
5087 +++ b/mm/slab.c
5088 @@ -983,13 +983,11 @@ static struct array_cache **alloc_alien_cache(int node, int limit, gfp_t gfp)
5089
5090 if (limit > 1)
5091 limit = 12;
5092 - ac_ptr = kmalloc_node(memsize, gfp, node);
5093 + ac_ptr = kzalloc_node(memsize, gfp, node);
5094 if (ac_ptr) {
5095 for_each_node(i) {
5096 - if (i == node || !node_online(i)) {
5097 - ac_ptr[i] = NULL;
5098 + if (i == node || !node_online(i))
5099 continue;
5100 - }
5101 ac_ptr[i] = alloc_arraycache(node, limit, 0xbaadf00d, gfp);
5102 if (!ac_ptr[i]) {
5103 for (i--; i >= 0; i--)
5104 diff --git a/net/core/scm.c b/net/core/scm.c
5105 index b7ba91b..9b26463 100644
5106 --- a/net/core/scm.c
5107 +++ b/net/core/scm.c
5108 @@ -156,6 +156,8 @@ int __scm_send(struct socket *sock, struct msghdr *msg, struct scm_cookie *p)
5109 switch (cmsg->cmsg_type)
5110 {
5111 case SCM_RIGHTS:
5112 + if (!sock->ops || sock->ops->family != PF_UNIX)
5113 + goto error;
5114 err=scm_fp_copy(cmsg, &p->fp);
5115 if (err<0)
5116 goto error;
5117 diff --git a/net/mac80211/agg-tx.c b/net/mac80211/agg-tx.c
5118 index 5e3a7ec..304b0b6 100644
5119 --- a/net/mac80211/agg-tx.c
5120 +++ b/net/mac80211/agg-tx.c
5121 @@ -179,7 +179,8 @@ static void sta_addba_resp_timer_expired(unsigned long data)
5122
5123 /* check if the TID waits for addBA response */
5124 spin_lock_bh(&sta->lock);
5125 - if ((*state & (HT_ADDBA_REQUESTED_MSK | HT_ADDBA_RECEIVED_MSK)) !=
5126 + if ((*state & (HT_ADDBA_REQUESTED_MSK | HT_ADDBA_RECEIVED_MSK |
5127 + HT_AGG_STATE_REQ_STOP_BA_MSK)) !=
5128 HT_ADDBA_REQUESTED_MSK) {
5129 spin_unlock_bh(&sta->lock);
5130 *state = HT_AGG_STATE_IDLE;
5131 diff --git a/net/mac80211/rx.c b/net/mac80211/rx.c
5132 index 82a30c1..da92cde 100644
5133 --- a/net/mac80211/rx.c
5134 +++ b/net/mac80211/rx.c
5135 @@ -1788,6 +1788,7 @@ static ieee80211_rx_result debug_noinline
5136 ieee80211_rx_h_data(struct ieee80211_rx_data *rx)
5137 {
5138 struct ieee80211_sub_if_data *sdata = rx->sdata;
5139 + struct ieee80211_local *local = rx->local;
5140 struct net_device *dev = sdata->dev;
5141 struct ieee80211_hdr *hdr = (struct ieee80211_hdr *)rx->skb->data;
5142 __le16 fc = hdr->frame_control;
5143 @@ -1819,6 +1820,13 @@ ieee80211_rx_h_data(struct ieee80211_rx_data *rx)
5144 dev->stats.rx_packets++;
5145 dev->stats.rx_bytes += rx->skb->len;
5146
5147 + if (ieee80211_is_data(hdr->frame_control) &&
5148 + !is_multicast_ether_addr(hdr->addr1) &&
5149 + local->hw.conf.dynamic_ps_timeout > 0 && local->ps_sdata) {
5150 + mod_timer(&local->dynamic_ps_timer, jiffies +
5151 + msecs_to_jiffies(local->hw.conf.dynamic_ps_timeout));
5152 + }
5153 +
5154 ieee80211_deliver_skb(rx);
5155
5156 return RX_QUEUED;
5157 diff --git a/net/mac80211/tx.c b/net/mac80211/tx.c
5158 index ac210b5..70c79c3 100644
5159 --- a/net/mac80211/tx.c
5160 +++ b/net/mac80211/tx.c
5161 @@ -1052,8 +1052,11 @@ ieee80211_tx_prepare(struct ieee80211_sub_if_data *sdata,
5162
5163 hdr = (struct ieee80211_hdr *) skb->data;
5164
5165 - if (sdata->vif.type == NL80211_IFTYPE_AP_VLAN)
5166 + if (sdata->vif.type == NL80211_IFTYPE_AP_VLAN) {
5167 tx->sta = rcu_dereference(sdata->u.vlan.sta);
5168 + if (!tx->sta && sdata->dev->ieee80211_ptr->use_4addr)
5169 + return TX_DROP;
5170 + }
5171 if (!tx->sta)
5172 tx->sta = sta_info_get(local, hdr->addr1);
5173
5174 diff --git a/net/netfilter/xt_recent.c b/net/netfilter/xt_recent.c
5175 index fc70a49..43e83a4 100644
5176 --- a/net/netfilter/xt_recent.c
5177 +++ b/net/netfilter/xt_recent.c
5178 @@ -173,10 +173,10 @@ recent_entry_init(struct recent_table *t, const union nf_inet_addr *addr,
5179
5180 static void recent_entry_update(struct recent_table *t, struct recent_entry *e)
5181 {
5182 + e->index %= ip_pkt_list_tot;
5183 e->stamps[e->index++] = jiffies;
5184 if (e->index > e->nstamps)
5185 e->nstamps = e->index;
5186 - e->index %= ip_pkt_list_tot;
5187 list_move_tail(&e->lru_list, &t->lru_list);
5188 }
5189
5190 @@ -260,7 +260,7 @@ recent_mt(const struct sk_buff *skb, const struct xt_match_param *par)
5191 for (i = 0; i < e->nstamps; i++) {
5192 if (info->seconds && time_after(time, e->stamps[i]))
5193 continue;
5194 - if (++hits >= info->hit_count) {
5195 + if (info->hit_count && ++hits >= info->hit_count) {
5196 ret = !ret;
5197 break;
5198 }
5199 diff --git a/net/sunrpc/svc_xprt.c b/net/sunrpc/svc_xprt.c
5200 index 7d1f9e9..4f30336 100644
5201 --- a/net/sunrpc/svc_xprt.c
5202 +++ b/net/sunrpc/svc_xprt.c
5203 @@ -889,11 +889,8 @@ void svc_delete_xprt(struct svc_xprt *xprt)
5204 if (test_bit(XPT_TEMP, &xprt->xpt_flags))
5205 serv->sv_tmpcnt--;
5206
5207 - for (dr = svc_deferred_dequeue(xprt); dr;
5208 - dr = svc_deferred_dequeue(xprt)) {
5209 - svc_xprt_put(xprt);
5210 + while ((dr = svc_deferred_dequeue(xprt)) != NULL)
5211 kfree(dr);
5212 - }
5213
5214 svc_xprt_put(xprt);
5215 spin_unlock_bh(&serv->sv_lock);
5216 diff --git a/net/sunrpc/xprtsock.c b/net/sunrpc/xprtsock.c
5217 index 3d739e5..4df801d 100644
5218 --- a/net/sunrpc/xprtsock.c
5219 +++ b/net/sunrpc/xprtsock.c
5220 @@ -1912,6 +1912,11 @@ static void xs_tcp_setup_socket(struct rpc_xprt *xprt,
5221 case -EALREADY:
5222 xprt_clear_connecting(xprt);
5223 return;
5224 + case -EINVAL:
5225 + /* Happens, for instance, if the user specified a link
5226 + * local IPv6 address without a scope-id.
5227 + */
5228 + goto out;
5229 }
5230 out_eagain:
5231 status = -EAGAIN;
5232 diff --git a/scripts/get_maintainer.pl b/scripts/get_maintainer.pl
5233 index 2f3230d..049c419 100755
5234 --- a/scripts/get_maintainer.pl
5235 +++ b/scripts/get_maintainer.pl
5236 @@ -314,6 +314,7 @@ foreach my $file (@files) {
5237 if ($type eq 'X') {
5238 if (file_match_pattern($file, $value)) {
5239 $exclude = 1;
5240 + last;
5241 }
5242 }
5243 }
5244 @@ -340,8 +341,7 @@ foreach my $file (@files) {
5245 }
5246 }
5247
5248 - $tvi += ($end - $start);
5249 -
5250 + $tvi = $end + 1;
5251 }
5252
5253 foreach my $line (sort {$hash{$b} <=> $hash{$a}} keys %hash) {
5254 diff --git a/security/integrity/ima/ima_iint.c b/security/integrity/ima/ima_iint.c
5255 index 0d83edc..2d4d05d 100644
5256 --- a/security/integrity/ima/ima_iint.c
5257 +++ b/security/integrity/ima/ima_iint.c
5258 @@ -63,12 +63,11 @@ int ima_inode_alloc(struct inode *inode)
5259 spin_lock(&ima_iint_lock);
5260 rc = radix_tree_insert(&ima_iint_store, (unsigned long)inode, iint);
5261 spin_unlock(&ima_iint_lock);
5262 + radix_tree_preload_end();
5263 out:
5264 if (rc < 0)
5265 kmem_cache_free(iint_cache, iint);
5266
5267 - radix_tree_preload_end();
5268 -
5269 return rc;
5270 }
5271
5272 diff --git a/security/selinux/ss/ebitmap.c b/security/selinux/ss/ebitmap.c
5273 index 68c7348..04b6145 100644
5274 --- a/security/selinux/ss/ebitmap.c
5275 +++ b/security/selinux/ss/ebitmap.c
5276 @@ -128,7 +128,7 @@ int ebitmap_netlbl_export(struct ebitmap *ebmap,
5277 cmap_idx = delta / NETLBL_CATMAP_MAPSIZE;
5278 cmap_sft = delta % NETLBL_CATMAP_MAPSIZE;
5279 c_iter->bitmap[cmap_idx]
5280 - |= e_iter->maps[cmap_idx] << cmap_sft;
5281 + |= e_iter->maps[i] << cmap_sft;
5282 }
5283 e_iter = e_iter->next;
5284 }
5285 diff --git a/sound/core/pcm_native.c b/sound/core/pcm_native.c
5286 index 25b0641..f7e1c9f 100644
5287 --- a/sound/core/pcm_native.c
5288 +++ b/sound/core/pcm_native.c
5289 @@ -315,10 +315,10 @@ int snd_pcm_hw_refine(struct snd_pcm_substream *substream,
5290 if (!params->info)
5291 params->info = hw->info & ~SNDRV_PCM_INFO_FIFO_IN_FRAMES;
5292 if (!params->fifo_size) {
5293 - if (snd_mask_min(&params->masks[SNDRV_PCM_HW_PARAM_FORMAT]) ==
5294 - snd_mask_max(&params->masks[SNDRV_PCM_HW_PARAM_FORMAT]) &&
5295 - snd_mask_min(&params->masks[SNDRV_PCM_HW_PARAM_CHANNELS]) ==
5296 - snd_mask_max(&params->masks[SNDRV_PCM_HW_PARAM_CHANNELS])) {
5297 + m = hw_param_mask(params, SNDRV_PCM_HW_PARAM_FORMAT);
5298 + i = hw_param_interval(params, SNDRV_PCM_HW_PARAM_CHANNELS);
5299 + if (snd_mask_min(m) == snd_mask_max(m) &&
5300 + snd_interval_min(i) == snd_interval_max(i)) {
5301 changed = substream->ops->ioctl(substream,
5302 SNDRV_PCM_IOCTL1_FIFO_SIZE, params);
5303 if (changed < 0)
5304 diff --git a/sound/pci/hda/hda_intel.c b/sound/pci/hda/hda_intel.c
5305 index ff6da6f..6d6e307 100644
5306 --- a/sound/pci/hda/hda_intel.c
5307 +++ b/sound/pci/hda/hda_intel.c
5308 @@ -2261,9 +2261,12 @@ static int azx_dev_free(struct snd_device *device)
5309 static struct snd_pci_quirk position_fix_list[] __devinitdata = {
5310 SND_PCI_QUIRK(0x1028, 0x01cc, "Dell D820", POS_FIX_LPIB),
5311 SND_PCI_QUIRK(0x1028, 0x01de, "Dell Precision 390", POS_FIX_LPIB),
5312 + SND_PCI_QUIRK(0x1028, 0x01f6, "Dell Latitude 131L", POS_FIX_LPIB),
5313 SND_PCI_QUIRK(0x103c, 0x306d, "HP dv3", POS_FIX_LPIB),
5314 + SND_PCI_QUIRK(0x1106, 0x3288, "ASUS M2V-MX SE", POS_FIX_LPIB),
5315 SND_PCI_QUIRK(0x1043, 0x813d, "ASUS P5AD2", POS_FIX_LPIB),
5316 SND_PCI_QUIRK(0x1462, 0x1002, "MSI Wind U115", POS_FIX_LPIB),
5317 + SND_PCI_QUIRK(0x1565, 0x820f, "Biostar Microtech", POS_FIX_LPIB),
5318 {}
5319 };
5320
5321 diff --git a/sound/pci/hda/patch_analog.c b/sound/pci/hda/patch_analog.c
5322 index 69a941c..7069441 100644
5323 --- a/sound/pci/hda/patch_analog.c
5324 +++ b/sound/pci/hda/patch_analog.c
5325 @@ -1008,7 +1008,7 @@ static struct snd_pci_quirk ad1986a_cfg_tbl[] = {
5326 SND_PCI_QUIRK(0x1043, 0x81cb, "ASUS M2N", AD1986A_3STACK),
5327 SND_PCI_QUIRK(0x1043, 0x8234, "ASUS M2N", AD1986A_3STACK),
5328 SND_PCI_QUIRK(0x10de, 0xcb84, "ASUS A8N-VM", AD1986A_3STACK),
5329 - SND_PCI_QUIRK(0x1179, 0xff40, "Toshiba", AD1986A_LAPTOP_EAPD),
5330 + SND_PCI_QUIRK(0x1179, 0xff40, "Toshiba Satellite L40-10Q", AD1986A_3STACK),
5331 SND_PCI_QUIRK(0x144d, 0xb03c, "Samsung R55", AD1986A_3STACK),
5332 SND_PCI_QUIRK(0x144d, 0xc01e, "FSC V2060", AD1986A_LAPTOP),
5333 SND_PCI_QUIRK(0x144d, 0xc024, "Samsung P50", AD1986A_SAMSUNG_P50),
5334 diff --git a/sound/pci/via82xx.c b/sound/pci/via82xx.c
5335 index 8a332d2..03d6aea 100644
5336 --- a/sound/pci/via82xx.c
5337 +++ b/sound/pci/via82xx.c
5338 @@ -1791,6 +1791,12 @@ static struct ac97_quirk ac97_quirks[] = {
5339 .type = AC97_TUNE_HP_ONLY
5340 },
5341 {
5342 + .subvendor = 0x110a,
5343 + .subdevice = 0x0079,
5344 + .name = "Fujitsu Siemens D1289",
5345 + .type = AC97_TUNE_HP_ONLY
5346 + },
5347 + {
5348 .subvendor = 0x1019,
5349 .subdevice = 0x0a81,
5350 .name = "ECS K7VTA3",
5351 diff --git a/sound/soc/codecs/ak4104.c b/sound/soc/codecs/ak4104.c
5352 index 3a14c6f..0f439ab 100644
5353 --- a/sound/soc/codecs/ak4104.c
5354 +++ b/sound/soc/codecs/ak4104.c
5355 @@ -90,12 +90,10 @@ static int ak4104_spi_write(struct snd_soc_codec *codec, unsigned int reg,
5356 if (reg >= codec->reg_cache_size)
5357 return -EINVAL;
5358
5359 - reg &= AK4104_REG_MASK;
5360 - reg |= AK4104_WRITE;
5361 -
5362 /* only write to the hardware if value has changed */
5363 if (cache[reg] != value) {
5364 - u8 tmp[2] = { reg, value };
5365 + u8 tmp[2] = { (reg & AK4104_REG_MASK) | AK4104_WRITE, value };
5366 +
5367 if (spi_write(spi, tmp, sizeof(tmp))) {
5368 dev_err(&spi->dev, "SPI write failed\n");
5369 return -EIO;
5370 diff --git a/sound/usb/usbaudio.c b/sound/usb/usbaudio.c
5371 index 9edef46..3c81add 100644
5372 --- a/sound/usb/usbaudio.c
5373 +++ b/sound/usb/usbaudio.c
5374 @@ -3327,6 +3327,32 @@ static int snd_usb_cm6206_boot_quirk(struct usb_device *dev)
5375 }
5376
5377 /*
5378 + * This call will put the synth in "USB send" mode, i.e it will send MIDI
5379 + * messages through USB (this is disabled at startup). The synth will
5380 + * acknowledge by sending a sysex on endpoint 0x85 and by displaying a USB
5381 + * sign on its LCD. Values here are chosen based on sniffing USB traffic
5382 + * under Windows.
5383 + */
5384 +static int snd_usb_accessmusic_boot_quirk(struct usb_device *dev)
5385 +{
5386 + int err, actual_length;
5387 +
5388 + /* "midi send" enable */
5389 + static const u8 seq[] = { 0x4e, 0x73, 0x52, 0x01 };
5390 +
5391 + void *buf = kmemdup(seq, ARRAY_SIZE(seq), GFP_KERNEL);
5392 + if (!buf)
5393 + return -ENOMEM;
5394 + err = usb_interrupt_msg(dev, usb_sndintpipe(dev, 0x05), buf,
5395 + ARRAY_SIZE(seq), &actual_length, 1000);
5396 + kfree(buf);
5397 + if (err < 0)
5398 + return err;
5399 +
5400 + return 0;
5401 +}
5402 +
5403 +/*
5404 * Setup quirks
5405 */
5406 #define AUDIOPHILE_SET 0x01 /* if set, parse device_setup */
5407 @@ -3624,6 +3650,12 @@ static void *snd_usb_audio_probe(struct usb_device *dev,
5408 goto __err_val;
5409 }
5410
5411 + /* Access Music VirusTI Desktop */
5412 + if (id == USB_ID(0x133e, 0x0815)) {
5413 + if (snd_usb_accessmusic_boot_quirk(dev) < 0)
5414 + goto __err_val;
5415 + }
5416 +
5417 /*
5418 * found a config. now register to ALSA
5419 */
5420 diff --git a/sound/usb/usbmidi.c b/sound/usb/usbmidi.c
5421 index 6e89b83..b2da478 100644
5422 --- a/sound/usb/usbmidi.c
5423 +++ b/sound/usb/usbmidi.c
5424 @@ -1162,10 +1162,22 @@ static int snd_usbmidi_out_endpoint_create(struct snd_usb_midi* umidi,
5425 pipe = usb_sndintpipe(umidi->dev, ep_info->out_ep);
5426 else
5427 pipe = usb_sndbulkpipe(umidi->dev, ep_info->out_ep);
5428 - if (umidi->usb_id == USB_ID(0x0a92, 0x1020)) /* ESI M4U */
5429 - ep->max_transfer = 4;
5430 - else
5431 + switch (umidi->usb_id) {
5432 + default:
5433 ep->max_transfer = usb_maxpacket(umidi->dev, pipe, 1);
5434 + break;
5435 + /*
5436 + * Various chips declare a packet size larger than 4 bytes, but
5437 + * do not actually work with larger packets:
5438 + */
5439 + case USB_ID(0x0a92, 0x1020): /* ESI M4U */
5440 + case USB_ID(0x1430, 0x474b): /* RedOctane GH MIDI INTERFACE */
5441 + case USB_ID(0x15ca, 0x0101): /* Textech USB Midi Cable */
5442 + case USB_ID(0x15ca, 0x1806): /* Textech USB Midi Cable */
5443 + case USB_ID(0x1a86, 0x752d): /* QinHeng CH345 "USB2.0-MIDI" */
5444 + ep->max_transfer = 4;
5445 + break;
5446 + }
5447 for (i = 0; i < OUTPUT_URBS; ++i) {
5448 buffer = usb_buffer_alloc(umidi->dev,
5449 ep->max_transfer, GFP_KERNEL,
5450 @@ -1407,6 +1419,12 @@ static struct port_info {
5451 EXTERNAL_PORT(0x086a, 0x0001, 8, "%s Broadcast"),
5452 EXTERNAL_PORT(0x086a, 0x0002, 8, "%s Broadcast"),
5453 EXTERNAL_PORT(0x086a, 0x0003, 4, "%s Broadcast"),
5454 + /* Access Music Virus TI */
5455 + EXTERNAL_PORT(0x133e, 0x0815, 0, "%s MIDI"),
5456 + PORT_INFO(0x133e, 0x0815, 1, "%s Synth", 0,
5457 + SNDRV_SEQ_PORT_TYPE_MIDI_GENERIC |
5458 + SNDRV_SEQ_PORT_TYPE_HARDWARE |
5459 + SNDRV_SEQ_PORT_TYPE_SYNTHESIZER),
5460 };
5461
5462 static struct port_info *find_port_info(struct snd_usb_midi* umidi, int number)
5463 diff --git a/sound/usb/usbquirks.h b/sound/usb/usbquirks.h
5464 index a892bda..406b74b 100644
5465 --- a/sound/usb/usbquirks.h
5466 +++ b/sound/usb/usbquirks.h
5467 @@ -2073,6 +2073,33 @@ YAMAHA_DEVICE(0x7010, "UB99"),
5468 }
5469 },
5470
5471 +/* Access Music devices */
5472 +{
5473 + /* VirusTI Desktop */
5474 + USB_DEVICE_VENDOR_SPEC(0x133e, 0x0815),
5475 + .driver_info = (unsigned long) &(const struct snd_usb_audio_quirk) {
5476 + .ifnum = QUIRK_ANY_INTERFACE,
5477 + .type = QUIRK_COMPOSITE,
5478 + .data = &(const struct snd_usb_audio_quirk[]) {
5479 + {
5480 + .ifnum = 3,
5481 + .type = QUIRK_MIDI_FIXED_ENDPOINT,
5482 + .data = &(const struct snd_usb_midi_endpoint_info) {
5483 + .out_cables = 0x0003,
5484 + .in_cables = 0x0003
5485 + }
5486 + },
5487 + {
5488 + .ifnum = 4,
5489 + .type = QUIRK_IGNORE_INTERFACE
5490 + },
5491 + {
5492 + .ifnum = -1
5493 + }
5494 + }
5495 + }
5496 +},
5497 +
5498 /* */
5499 {
5500 /* aka. Serato Scratch Live DJ Box */
5501 diff --git a/tools/perf/util/symbol.c b/tools/perf/util/symbol.c
5502 index ab92763..72547b9 100644
5503 --- a/tools/perf/util/symbol.c
5504 +++ b/tools/perf/util/symbol.c
5505 @@ -503,7 +503,7 @@ static int dso__split_kallsyms(struct dso *self, struct map *map,
5506 return -1;
5507
5508 curr_map = map__new2(pos->start, dso, map->type);
5509 - if (map == NULL) {
5510 + if (curr_map == NULL) {
5511 dso__delete(dso);
5512 return -1;
5513 }