Magellan Linux

Contents of /trunk/kernel26-alx/patches-2.6.33-r4/0106-2.6.33.7-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: 159008 byte(s)
2.6.33-alx-r4: enabled usbserial generic module for accu-chek II devices
1 diff --git a/arch/arm/kernel/kprobes-decode.c b/arch/arm/kernel/kprobes-decode.c
2 index da1f949..8bccbfa 100644
3 --- a/arch/arm/kernel/kprobes-decode.c
4 +++ b/arch/arm/kernel/kprobes-decode.c
5 @@ -583,13 +583,14 @@ static void __kprobes emulate_ldr(struct kprobe *p, struct pt_regs *regs)
6 {
7 insn_llret_3arg_fn_t *i_fn = (insn_llret_3arg_fn_t *)&p->ainsn.insn[0];
8 kprobe_opcode_t insn = p->opcode;
9 + long ppc = (long)p->addr + 8;
10 union reg_pair fnr;
11 int rd = (insn >> 12) & 0xf;
12 int rn = (insn >> 16) & 0xf;
13 int rm = insn & 0xf;
14 long rdv;
15 - long rnv = regs->uregs[rn];
16 - long rmv = regs->uregs[rm]; /* rm/rmv may be invalid, don't care. */
17 + long rnv = (rn == 15) ? ppc : regs->uregs[rn];
18 + long rmv = (rm == 15) ? ppc : regs->uregs[rm];
19 long cpsr = regs->ARM_cpsr;
20
21 fnr.dr = insnslot_llret_3arg_rflags(rnv, 0, rmv, cpsr, i_fn);
22 diff --git a/arch/arm/mach-omap2/board-rx51-peripherals.c b/arch/arm/mach-omap2/board-rx51-peripherals.c
23 index acafdbc..51c2d37 100644
24 --- a/arch/arm/mach-omap2/board-rx51-peripherals.c
25 +++ b/arch/arm/mach-omap2/board-rx51-peripherals.c
26 @@ -147,6 +147,10 @@ static void __init rx51_add_gpio_keys(void)
27 #endif /* CONFIG_KEYBOARD_GPIO || CONFIG_KEYBOARD_GPIO_MODULE */
28
29 static int board_keymap[] = {
30 + /*
31 + * Note that KEY(x, 8, KEY_XXX) entries represent "entrire row
32 + * connected to the ground" matrix state.
33 + */
34 KEY(0, 0, KEY_Q),
35 KEY(0, 1, KEY_O),
36 KEY(0, 2, KEY_P),
37 @@ -154,6 +158,7 @@ static int board_keymap[] = {
38 KEY(0, 4, KEY_BACKSPACE),
39 KEY(0, 6, KEY_A),
40 KEY(0, 7, KEY_S),
41 +
42 KEY(1, 0, KEY_W),
43 KEY(1, 1, KEY_D),
44 KEY(1, 2, KEY_F),
45 @@ -162,6 +167,7 @@ static int board_keymap[] = {
46 KEY(1, 5, KEY_J),
47 KEY(1, 6, KEY_K),
48 KEY(1, 7, KEY_L),
49 +
50 KEY(2, 0, KEY_E),
51 KEY(2, 1, KEY_DOT),
52 KEY(2, 2, KEY_UP),
53 @@ -169,6 +175,8 @@ static int board_keymap[] = {
54 KEY(2, 5, KEY_Z),
55 KEY(2, 6, KEY_X),
56 KEY(2, 7, KEY_C),
57 + KEY(2, 8, KEY_F9),
58 +
59 KEY(3, 0, KEY_R),
60 KEY(3, 1, KEY_V),
61 KEY(3, 2, KEY_B),
62 @@ -177,20 +185,23 @@ static int board_keymap[] = {
63 KEY(3, 5, KEY_SPACE),
64 KEY(3, 6, KEY_SPACE),
65 KEY(3, 7, KEY_LEFT),
66 +
67 KEY(4, 0, KEY_T),
68 KEY(4, 1, KEY_DOWN),
69 KEY(4, 2, KEY_RIGHT),
70 KEY(4, 4, KEY_LEFTCTRL),
71 KEY(4, 5, KEY_RIGHTALT),
72 KEY(4, 6, KEY_LEFTSHIFT),
73 + KEY(4, 8, KEY_F10),
74 +
75 KEY(5, 0, KEY_Y),
76 + KEY(5, 8, KEY_F11),
77 +
78 KEY(6, 0, KEY_U),
79 +
80 KEY(7, 0, KEY_I),
81 KEY(7, 1, KEY_F7),
82 KEY(7, 2, KEY_F8),
83 - KEY(0xff, 2, KEY_F9),
84 - KEY(0xff, 4, KEY_F10),
85 - KEY(0xff, 5, KEY_F11),
86 };
87
88 static struct matrix_keymap_data board_map_data = {
89 diff --git a/arch/arm/mach-realview/Kconfig b/arch/arm/mach-realview/Kconfig
90 index ee5e392..b4575ae 100644
91 --- a/arch/arm/mach-realview/Kconfig
92 +++ b/arch/arm/mach-realview/Kconfig
93 @@ -18,6 +18,7 @@ config REALVIEW_EB_ARM11MP
94 bool "Support ARM11MPCore tile"
95 depends on MACH_REALVIEW_EB
96 select CPU_V6
97 + select ARCH_HAS_BARRIERS if SMP
98 help
99 Enable support for the ARM11MPCore tile on the Realview platform.
100
101 @@ -35,6 +36,7 @@ config MACH_REALVIEW_PB11MP
102 select CPU_V6
103 select ARM_GIC
104 select HAVE_PATA_PLATFORM
105 + select ARCH_HAS_BARRIERS if SMP
106 help
107 Include support for the ARM(R) RealView MPCore Platform Baseboard.
108 PB11MPCore is a platform with an on-board ARM11MPCore and has
109 diff --git a/arch/arm/mach-realview/include/mach/barriers.h b/arch/arm/mach-realview/include/mach/barriers.h
110 new file mode 100644
111 index 0000000..0c5d749
112 --- /dev/null
113 +++ b/arch/arm/mach-realview/include/mach/barriers.h
114 @@ -0,0 +1,8 @@
115 +/*
116 + * Barriers redefined for RealView ARM11MPCore platforms with L220 cache
117 + * controller to work around hardware errata causing the outer_sync()
118 + * operation to deadlock the system.
119 + */
120 +#define mb() dsb()
121 +#define rmb() dmb()
122 +#define wmb() mb()
123 diff --git a/arch/ia64/mm/tlb.c b/arch/ia64/mm/tlb.c
124 index f3de9d7..99c1364 100644
125 --- a/arch/ia64/mm/tlb.c
126 +++ b/arch/ia64/mm/tlb.c
127 @@ -120,7 +120,7 @@ static inline void down_spin(struct spinaphore *ss)
128 ia64_invala();
129
130 for (;;) {
131 - asm volatile ("ld4.c.nc %0=[%1]" : "=r"(serve) : "r"(&ss->serve) : "memory");
132 + asm volatile ("ld8.c.nc %0=[%1]" : "=r"(serve) : "r"(&ss->serve) : "memory");
133 if (time_before(t, serve))
134 return;
135 cpu_relax();
136 diff --git a/arch/mips/include/asm/mipsregs.h b/arch/mips/include/asm/mipsregs.h
137 index f4ab313..b149c3c 100644
138 --- a/arch/mips/include/asm/mipsregs.h
139 +++ b/arch/mips/include/asm/mipsregs.h
140 @@ -135,6 +135,12 @@
141 #define FPU_CSR_COND7 0x80000000 /* $fcc7 */
142
143 /*
144 + * Bits 18 - 20 of the FPU Status Register will be read as 0,
145 + * and should be written as zero.
146 + */
147 +#define FPU_CSR_RSVD 0x001c0000
148 +
149 +/*
150 * X the exception cause indicator
151 * E the exception enable
152 * S the sticky/flag bit
153 @@ -161,7 +167,8 @@
154 #define FPU_CSR_UDF_S 0x00000008
155 #define FPU_CSR_INE_S 0x00000004
156
157 -/* rounding mode */
158 +/* Bits 0 and 1 of FPU Status Register specify the rounding mode */
159 +#define FPU_CSR_RM 0x00000003
160 #define FPU_CSR_RN 0x0 /* nearest */
161 #define FPU_CSR_RZ 0x1 /* towards zero */
162 #define FPU_CSR_RU 0x2 /* towards +Infinity */
163 diff --git a/arch/mips/math-emu/cp1emu.c b/arch/mips/math-emu/cp1emu.c
164 index 8f2f8e9..f2338d1 100644
165 --- a/arch/mips/math-emu/cp1emu.c
166 +++ b/arch/mips/math-emu/cp1emu.c
167 @@ -78,6 +78,9 @@ DEFINE_PER_CPU(struct mips_fpu_emulator_stats, fpuemustats);
168 #define FPCREG_RID 0 /* $0 = revision id */
169 #define FPCREG_CSR 31 /* $31 = csr */
170
171 +/* Determine rounding mode from the RM bits of the FCSR */
172 +#define modeindex(v) ((v) & FPU_CSR_RM)
173 +
174 /* Convert Mips rounding mode (0..3) to IEEE library modes. */
175 static const unsigned char ieee_rm[4] = {
176 [FPU_CSR_RN] = IEEE754_RN,
177 @@ -384,10 +387,14 @@ static int cop1Emulate(struct pt_regs *xcp, struct mips_fpu_struct *ctx)
178 (void *) (xcp->cp0_epc),
179 MIPSInst_RT(ir), value);
180 #endif
181 - value &= (FPU_CSR_FLUSH | FPU_CSR_ALL_E | FPU_CSR_ALL_S | 0x03);
182 - ctx->fcr31 &= ~(FPU_CSR_FLUSH | FPU_CSR_ALL_E | FPU_CSR_ALL_S | 0x03);
183 - /* convert to ieee library modes */
184 - ctx->fcr31 |= (value & ~0x3) | ieee_rm[value & 0x3];
185 +
186 + /*
187 + * Don't write reserved bits,
188 + * and convert to ieee library modes
189 + */
190 + ctx->fcr31 = (value &
191 + ~(FPU_CSR_RSVD | FPU_CSR_RM)) |
192 + ieee_rm[modeindex(value)];
193 }
194 if ((ctx->fcr31 >> 5) & ctx->fcr31 & FPU_CSR_ALL_E) {
195 return SIGFPE;
196 diff --git a/arch/powerpc/include/asm/cpm.h b/arch/powerpc/include/asm/cpm.h
197 index 0835eb9..e50323f 100644
198 --- a/arch/powerpc/include/asm/cpm.h
199 +++ b/arch/powerpc/include/asm/cpm.h
200 @@ -7,6 +7,30 @@
201 #include <linux/of.h>
202
203 /*
204 + * SPI Parameter RAM common to QE and CPM.
205 + */
206 +struct spi_pram {
207 + __be16 rbase; /* Rx Buffer descriptor base address */
208 + __be16 tbase; /* Tx Buffer descriptor base address */
209 + u8 rfcr; /* Rx function code */
210 + u8 tfcr; /* Tx function code */
211 + __be16 mrblr; /* Max receive buffer length */
212 + __be32 rstate; /* Internal */
213 + __be32 rdp; /* Internal */
214 + __be16 rbptr; /* Internal */
215 + __be16 rbc; /* Internal */
216 + __be32 rxtmp; /* Internal */
217 + __be32 tstate; /* Internal */
218 + __be32 tdp; /* Internal */
219 + __be16 tbptr; /* Internal */
220 + __be16 tbc; /* Internal */
221 + __be32 txtmp; /* Internal */
222 + __be32 res; /* Tx temp. */
223 + __be16 rpbase; /* Relocation pointer (CPM1 only) */
224 + __be16 res1; /* Reserved */
225 +};
226 +
227 +/*
228 * USB Controller pram common to QE and CPM.
229 */
230 struct usb_ctlr {
231 diff --git a/arch/powerpc/kernel/irq.c b/arch/powerpc/kernel/irq.c
232 index dee83b8..11b300a 100644
233 --- a/arch/powerpc/kernel/irq.c
234 +++ b/arch/powerpc/kernel/irq.c
235 @@ -247,7 +247,10 @@ void fixup_irqs(cpumask_t map)
236 cpumask_t mask;
237
238 desc = irq_to_desc(irq);
239 - if (desc && desc->status & IRQ_PER_CPU)
240 + if (!desc)
241 + continue;
242 +
243 + if (desc->status & IRQ_PER_CPU)
244 continue;
245
246 cpumask_and(&mask, desc->affinity, &map);
247 diff --git a/arch/powerpc/sysdev/micropatch.c b/arch/powerpc/sysdev/micropatch.c
248 index d8d6028..6c56ae9 100644
249 --- a/arch/powerpc/sysdev/micropatch.c
250 +++ b/arch/powerpc/sysdev/micropatch.c
251 @@ -16,6 +16,7 @@
252 #include <asm/page.h>
253 #include <asm/pgtable.h>
254 #include <asm/8xx_immap.h>
255 +#include <asm/cpm.h>
256 #include <asm/cpm1.h>
257
258 /*
259 @@ -625,9 +626,14 @@ cpm_load_patch(cpm8xx_t *cp)
260 {
261 volatile uint *dp; /* Dual-ported RAM. */
262 volatile cpm8xx_t *commproc;
263 +#if defined(CONFIG_I2C_SPI_UCODE_PATCH) || \
264 + defined(CONFIG_I2C_SPI_SMC1_UCODE_PATCH)
265 volatile iic_t *iip;
266 - volatile spi_t *spp;
267 + volatile struct spi_pram *spp;
268 +#ifdef CONFIG_I2C_SPI_SMC1_UCODE_PATCH
269 volatile smc_uart_t *smp;
270 +#endif
271 +#endif
272 int i;
273
274 commproc = cp;
275 @@ -668,8 +674,8 @@ cpm_load_patch(cpm8xx_t *cp)
276 /* Put SPI above the IIC, also 32-byte aligned.
277 */
278 i = (RPBASE + sizeof(iic_t) + 31) & ~31;
279 - spp = (spi_t *)&commproc->cp_dparam[PROFF_SPI];
280 - spp->spi_rpbase = i;
281 + spp = (struct spi_pram *)&commproc->cp_dparam[PROFF_SPI];
282 + spp->rpbase = i;
283
284 # if defined(CONFIG_I2C_SPI_UCODE_PATCH)
285 commproc->cp_cpmcr1 = 0x802a;
286 diff --git a/arch/sparc/include/asm/stat.h b/arch/sparc/include/asm/stat.h
287 index 39327d6..a232e9e 100644
288 --- a/arch/sparc/include/asm/stat.h
289 +++ b/arch/sparc/include/asm/stat.h
290 @@ -53,8 +53,8 @@ struct stat {
291 ino_t st_ino;
292 mode_t st_mode;
293 short st_nlink;
294 - uid16_t st_uid;
295 - gid16_t st_gid;
296 + unsigned short st_uid;
297 + unsigned short st_gid;
298 unsigned short st_rdev;
299 off_t st_size;
300 time_t st_atime;
301 diff --git a/arch/x86/include/asm/msr-index.h b/arch/x86/include/asm/msr-index.h
302 index d86da72..5928fc0 100644
303 --- a/arch/x86/include/asm/msr-index.h
304 +++ b/arch/x86/include/asm/msr-index.h
305 @@ -107,6 +107,7 @@
306 #define MSR_AMD64_PATCH_LOADER 0xc0010020
307 #define MSR_AMD64_OSVW_ID_LENGTH 0xc0010140
308 #define MSR_AMD64_OSVW_STATUS 0xc0010141
309 +#define MSR_AMD64_DC_CFG 0xc0011022
310 #define MSR_AMD64_IBSFETCHCTL 0xc0011030
311 #define MSR_AMD64_IBSFETCHLINAD 0xc0011031
312 #define MSR_AMD64_IBSFETCHPHYSAD 0xc0011032
313 diff --git a/arch/x86/include/asm/suspend_32.h b/arch/x86/include/asm/suspend_32.h
314 index 48dcfa6..fd921c3 100644
315 --- a/arch/x86/include/asm/suspend_32.h
316 +++ b/arch/x86/include/asm/suspend_32.h
317 @@ -15,6 +15,8 @@ static inline int arch_prepare_suspend(void) { return 0; }
318 struct saved_context {
319 u16 es, fs, gs, ss;
320 unsigned long cr0, cr2, cr3, cr4;
321 + u64 misc_enable;
322 + bool misc_enable_saved;
323 struct desc_ptr gdt;
324 struct desc_ptr idt;
325 u16 ldt;
326 diff --git a/arch/x86/include/asm/suspend_64.h b/arch/x86/include/asm/suspend_64.h
327 index 06284f4..8d942af 100644
328 --- a/arch/x86/include/asm/suspend_64.h
329 +++ b/arch/x86/include/asm/suspend_64.h
330 @@ -27,6 +27,8 @@ struct saved_context {
331 u16 ds, es, fs, gs, ss;
332 unsigned long gs_base, gs_kernel_base, fs_base;
333 unsigned long cr0, cr2, cr3, cr4, cr8;
334 + u64 misc_enable;
335 + bool misc_enable_saved;
336 unsigned long efer;
337 u16 gdt_pad;
338 u16 gdt_limit;
339 diff --git a/arch/x86/include/asm/system.h b/arch/x86/include/asm/system.h
340 index e04740f..2a19418 100644
341 --- a/arch/x86/include/asm/system.h
342 +++ b/arch/x86/include/asm/system.h
343 @@ -451,7 +451,7 @@ void stop_this_cpu(void *dummy);
344 *
345 * (Could use an alternative three way for this if there was one.)
346 */
347 -static inline void rdtsc_barrier(void)
348 +static __always_inline void rdtsc_barrier(void)
349 {
350 alternative(ASM_NOP3, "mfence", X86_FEATURE_MFENCE_RDTSC);
351 alternative(ASM_NOP3, "lfence", X86_FEATURE_LFENCE_RDTSC);
352 diff --git a/arch/x86/kernel/acpi/cstate.c b/arch/x86/kernel/acpi/cstate.c
353 index 2e837f5..fb7a5f0 100644
354 --- a/arch/x86/kernel/acpi/cstate.c
355 +++ b/arch/x86/kernel/acpi/cstate.c
356 @@ -145,6 +145,15 @@ int acpi_processor_ffh_cstate_probe(unsigned int cpu,
357 percpu_entry->states[cx->index].eax = cx->address;
358 percpu_entry->states[cx->index].ecx = MWAIT_ECX_INTERRUPT_BREAK;
359 }
360 +
361 + /*
362 + * For _CST FFH on Intel, if GAS.access_size bit 1 is cleared,
363 + * then we should skip checking BM_STS for this C-state.
364 + * ref: "Intel Processor Vendor-Specific ACPI Interface Specification"
365 + */
366 + if ((c->x86_vendor == X86_VENDOR_INTEL) && !(reg->access_size & 0x2))
367 + cx->bm_sts_skip = 1;
368 +
369 return retval;
370 }
371 EXPORT_SYMBOL_GPL(acpi_processor_ffh_cstate_probe);
372 diff --git a/arch/x86/kernel/acpi/sleep.c b/arch/x86/kernel/acpi/sleep.c
373 index f996103..82e5086 100644
374 --- a/arch/x86/kernel/acpi/sleep.c
375 +++ b/arch/x86/kernel/acpi/sleep.c
376 @@ -162,8 +162,6 @@ static int __init acpi_sleep_setup(char *str)
377 #endif
378 if (strncmp(str, "old_ordering", 12) == 0)
379 acpi_old_suspend_ordering();
380 - if (strncmp(str, "sci_force_enable", 16) == 0)
381 - acpi_set_sci_en_on_resume();
382 str = strchr(str, ',');
383 if (str != NULL)
384 str += strspn(str, ", \t");
385 diff --git a/arch/x86/kernel/apic/apic.c b/arch/x86/kernel/apic/apic.c
386 index d4df517..7718bb3 100644
387 --- a/arch/x86/kernel/apic/apic.c
388 +++ b/arch/x86/kernel/apic/apic.c
389 @@ -920,7 +920,7 @@ void disable_local_APIC(void)
390 unsigned int value;
391
392 /* APIC hasn't been mapped yet */
393 - if (!apic_phys)
394 + if (!x2apic_mode && !apic_phys)
395 return;
396
397 clear_local_APIC();
398 diff --git a/arch/x86/kernel/hpet.c b/arch/x86/kernel/hpet.c
399 index 773afc9..241c5b2 100644
400 --- a/arch/x86/kernel/hpet.c
401 +++ b/arch/x86/kernel/hpet.c
402 @@ -958,7 +958,7 @@ fs_initcall(hpet_late_init);
403
404 void hpet_disable(void)
405 {
406 - if (is_hpet_capable()) {
407 + if (is_hpet_capable() && hpet_virt_address) {
408 unsigned int cfg = hpet_readl(HPET_CFG);
409
410 if (hpet_legacy_int_enabled) {
411 diff --git a/arch/x86/kernel/pci-calgary_64.c b/arch/x86/kernel/pci-calgary_64.c
412 index 2bbde60..aa740fa 100644
413 --- a/arch/x86/kernel/pci-calgary_64.c
414 +++ b/arch/x86/kernel/pci-calgary_64.c
415 @@ -103,11 +103,16 @@ int use_calgary __read_mostly = 0;
416 #define PMR_SOFTSTOPFAULT 0x40000000
417 #define PMR_HARDSTOP 0x20000000
418
419 -#define MAX_NUM_OF_PHBS 8 /* how many PHBs in total? */
420 -#define MAX_NUM_CHASSIS 8 /* max number of chassis */
421 -/* MAX_PHB_BUS_NUM is the maximal possible dev->bus->number */
422 -#define MAX_PHB_BUS_NUM (MAX_NUM_OF_PHBS * MAX_NUM_CHASSIS * 2)
423 -#define PHBS_PER_CALGARY 4
424 +/*
425 + * The maximum PHB bus number.
426 + * x3950M2 (rare): 8 chassis, 48 PHBs per chassis = 384
427 + * x3950M2: 4 chassis, 48 PHBs per chassis = 192
428 + * x3950 (PCIE): 8 chassis, 32 PHBs per chassis = 256
429 + * x3950 (PCIX): 8 chassis, 16 PHBs per chassis = 128
430 + */
431 +#define MAX_PHB_BUS_NUM 256
432 +
433 +#define PHBS_PER_CALGARY 4
434
435 /* register offsets in Calgary's internal register space */
436 static const unsigned long tar_offsets[] = {
437 @@ -1051,8 +1056,6 @@ static int __init calgary_init_one(struct pci_dev *dev)
438 struct iommu_table *tbl;
439 int ret;
440
441 - BUG_ON(dev->bus->number >= MAX_PHB_BUS_NUM);
442 -
443 bbar = busno_to_bbar(dev->bus->number);
444 ret = calgary_setup_tar(dev, bbar);
445 if (ret)
446 diff --git a/arch/x86/kernel/traps.c b/arch/x86/kernel/traps.c
447 index 3339917..b1e85b0 100644
448 --- a/arch/x86/kernel/traps.c
449 +++ b/arch/x86/kernel/traps.c
450 @@ -529,11 +529,20 @@ asmlinkage __kprobes struct pt_regs *sync_regs(struct pt_regs *eregs)
451 dotraplinkage void __kprobes do_debug(struct pt_regs *regs, long error_code)
452 {
453 struct task_struct *tsk = current;
454 + int user_icebp = 0;
455 unsigned long dr6;
456 int si_code;
457
458 get_debugreg(dr6, 6);
459
460 + /*
461 + * If dr6 has no reason to give us about the origin of this trap,
462 + * then it's very likely the result of an icebp/int01 trap.
463 + * User wants a sigtrap for that.
464 + */
465 + if (!(dr6 & ~0xffff0ff0) && user_mode(regs))
466 + user_icebp = 1;
467 +
468 /* Catch kmemcheck conditions first of all! */
469 if ((dr6 & DR_STEP) && kmemcheck_trap(regs))
470 return;
471 @@ -575,7 +584,7 @@ dotraplinkage void __kprobes do_debug(struct pt_regs *regs, long error_code)
472 regs->flags &= ~X86_EFLAGS_TF;
473 }
474 si_code = get_si_code(tsk->thread.debugreg6);
475 - if (tsk->thread.debugreg6 & (DR_STEP | DR_TRAP_BITS))
476 + if (tsk->thread.debugreg6 & (DR_STEP | DR_TRAP_BITS) || user_icebp)
477 send_sigtrap(tsk, regs, error_code, si_code);
478 preempt_conditional_cli(regs);
479
480 diff --git a/arch/x86/kvm/mmu.c b/arch/x86/kvm/mmu.c
481 index 8822021..ca7c528 100644
482 --- a/arch/x86/kvm/mmu.c
483 +++ b/arch/x86/kvm/mmu.c
484 @@ -1849,6 +1849,9 @@ static int set_spte(struct kvm_vcpu *vcpu, u64 *sptep,
485
486 spte |= PT_WRITABLE_MASK;
487
488 + if (!tdp_enabled && !(pte_access & ACC_WRITE_MASK))
489 + spte &= ~PT_USER_MASK;
490 +
491 /*
492 * Optimization: for pte sync, if spte was writable the hash
493 * lookup is unnecessary (and expensive). Write protection
494 @@ -1904,6 +1907,8 @@ static void mmu_set_spte(struct kvm_vcpu *vcpu, u64 *sptep,
495
496 child = page_header(pte & PT64_BASE_ADDR_MASK);
497 mmu_page_remove_parent_pte(child, sptep);
498 + __set_spte(sptep, shadow_trap_nonpresent_pte);
499 + kvm_flush_remote_tlbs(vcpu->kvm);
500 } else if (pfn != spte_to_pfn(*sptep)) {
501 pgprintk("hfn old %lx new %lx\n",
502 spte_to_pfn(*sptep), pfn);
503 diff --git a/arch/x86/kvm/svm.c b/arch/x86/kvm/svm.c
504 index a2f839c..8d128be 100644
505 --- a/arch/x86/kvm/svm.c
506 +++ b/arch/x86/kvm/svm.c
507 @@ -27,6 +27,7 @@
508 #include <linux/sched.h>
509 #include <linux/ftrace_event.h>
510
511 +#include <asm/tlbflush.h>
512 #include <asm/desc.h>
513
514 #include <asm/virtext.h>
515 @@ -54,6 +55,8 @@ MODULE_LICENSE("GPL");
516
517 #define DEBUGCTL_RESERVED_BITS (~(0x3fULL))
518
519 +static bool erratum_383_found __read_mostly;
520 +
521 static const u32 host_save_user_msrs[] = {
522 #ifdef CONFIG_X86_64
523 MSR_STAR, MSR_LSTAR, MSR_CSTAR, MSR_SYSCALL_MASK, MSR_KERNEL_GS_BASE,
524 @@ -297,6 +300,31 @@ static void skip_emulated_instruction(struct kvm_vcpu *vcpu)
525 svm_set_interrupt_shadow(vcpu, 0);
526 }
527
528 +static void svm_init_erratum_383(void)
529 +{
530 + u32 low, high;
531 + int err;
532 + u64 val;
533 +
534 + /* Only Fam10h is affected */
535 + if (boot_cpu_data.x86 != 0x10)
536 + return;
537 +
538 + /* Use _safe variants to not break nested virtualization */
539 + val = native_read_msr_safe(MSR_AMD64_DC_CFG, &err);
540 + if (err)
541 + return;
542 +
543 + val |= (1ULL << 47);
544 +
545 + low = lower_32_bits(val);
546 + high = upper_32_bits(val);
547 +
548 + native_write_msr_safe(MSR_AMD64_DC_CFG, low, high);
549 +
550 + erratum_383_found = true;
551 +}
552 +
553 static int has_svm(void)
554 {
555 const char *msg;
556 @@ -352,6 +380,8 @@ static int svm_hardware_enable(void *garbage)
557
558 wrmsrl(MSR_VM_HSAVE_PA, page_to_pfn(sd->save_area) << PAGE_SHIFT);
559
560 + svm_init_erratum_383();
561 +
562 return 0;
563 }
564
565 @@ -1255,8 +1285,59 @@ static int nm_interception(struct vcpu_svm *svm)
566 return 1;
567 }
568
569 -static int mc_interception(struct vcpu_svm *svm)
570 +static bool is_erratum_383(void)
571 {
572 + int err, i;
573 + u64 value;
574 +
575 + if (!erratum_383_found)
576 + return false;
577 +
578 + value = native_read_msr_safe(MSR_IA32_MC0_STATUS, &err);
579 + if (err)
580 + return false;
581 +
582 + /* Bit 62 may or may not be set for this mce */
583 + value &= ~(1ULL << 62);
584 +
585 + if (value != 0xb600000000010015ULL)
586 + return false;
587 +
588 + /* Clear MCi_STATUS registers */
589 + for (i = 0; i < 6; ++i)
590 + native_write_msr_safe(MSR_IA32_MCx_STATUS(i), 0, 0);
591 +
592 + value = native_read_msr_safe(MSR_IA32_MCG_STATUS, &err);
593 + if (!err) {
594 + u32 low, high;
595 +
596 + value &= ~(1ULL << 2);
597 + low = lower_32_bits(value);
598 + high = upper_32_bits(value);
599 +
600 + native_write_msr_safe(MSR_IA32_MCG_STATUS, low, high);
601 + }
602 +
603 + /* Flush tlb to evict multi-match entries */
604 + __flush_tlb_all();
605 +
606 + return true;
607 +}
608 +
609 +static void svm_handle_mce(struct vcpu_svm *svm)
610 +{
611 + if (is_erratum_383()) {
612 + /*
613 + * Erratum 383 triggered. Guest state is corrupt so kill the
614 + * guest.
615 + */
616 + pr_err("KVM: Guest triggered AMD Erratum 383\n");
617 +
618 + set_bit(KVM_REQ_TRIPLE_FAULT, &svm->vcpu.requests);
619 +
620 + return;
621 + }
622 +
623 /*
624 * On an #MC intercept the MCE handler is not called automatically in
625 * the host. So do it by hand here.
626 @@ -1265,6 +1346,11 @@ static int mc_interception(struct vcpu_svm *svm)
627 "int $0x12\n");
628 /* not sure if we ever come back to this point */
629
630 + return;
631 +}
632 +
633 +static int mc_interception(struct vcpu_svm *svm)
634 +{
635 return 1;
636 }
637
638 @@ -2820,6 +2906,14 @@ static void svm_vcpu_run(struct kvm_vcpu *vcpu)
639 vcpu->arch.regs_avail &= ~(1 << VCPU_EXREG_PDPTR);
640 vcpu->arch.regs_dirty &= ~(1 << VCPU_EXREG_PDPTR);
641 }
642 +
643 + /*
644 + * We need to handle MC intercepts here before the vcpu has a chance to
645 + * change the physical cpu
646 + */
647 + if (unlikely(svm->vmcb->control.exit_code ==
648 + SVM_EXIT_EXCP_BASE + MC_VECTOR))
649 + svm_handle_mce(svm);
650 }
651
652 #undef R
653 diff --git a/arch/x86/power/cpu.c b/arch/x86/power/cpu.c
654 index 0a979f3..1290ba5 100644
655 --- a/arch/x86/power/cpu.c
656 +++ b/arch/x86/power/cpu.c
657 @@ -105,6 +105,8 @@ static void __save_processor_state(struct saved_context *ctxt)
658 ctxt->cr4 = read_cr4();
659 ctxt->cr8 = read_cr8();
660 #endif
661 + ctxt->misc_enable_saved = !rdmsrl_safe(MSR_IA32_MISC_ENABLE,
662 + &ctxt->misc_enable);
663 }
664
665 /* Needed by apm.c */
666 @@ -152,6 +154,8 @@ static void fix_processor_context(void)
667 */
668 static void __restore_processor_state(struct saved_context *ctxt)
669 {
670 + if (ctxt->misc_enable_saved)
671 + wrmsrl(MSR_IA32_MISC_ENABLE, ctxt->misc_enable);
672 /*
673 * control registers
674 */
675 diff --git a/block/cfq-iosched.c b/block/cfq-iosched.c
676 index d0f8146..7424bf9 100644
677 --- a/block/cfq-iosched.c
678 +++ b/block/cfq-iosched.c
679 @@ -1934,6 +1934,15 @@ static void cfq_setup_merge(struct cfq_queue *cfqq, struct cfq_queue *new_cfqq)
680 int process_refs, new_process_refs;
681 struct cfq_queue *__cfqq;
682
683 + /*
684 + * If there are no process references on the new_cfqq, then it is
685 + * unsafe to follow the ->new_cfqq chain as other cfqq's in the
686 + * chain may have dropped their last reference (not just their
687 + * last process reference).
688 + */
689 + if (!cfqq_process_refs(new_cfqq))
690 + return;
691 +
692 /* Avoid a circular list and skip interim queue merges */
693 while ((__cfqq = new_cfqq->new_cfqq)) {
694 if (__cfqq == cfqq)
695 @@ -1942,17 +1951,17 @@ static void cfq_setup_merge(struct cfq_queue *cfqq, struct cfq_queue *new_cfqq)
696 }
697
698 process_refs = cfqq_process_refs(cfqq);
699 + new_process_refs = cfqq_process_refs(new_cfqq);
700 /*
701 * If the process for the cfqq has gone away, there is no
702 * sense in merging the queues.
703 */
704 - if (process_refs == 0)
705 + if (process_refs == 0 || new_process_refs == 0)
706 return;
707
708 /*
709 * Merge in the direction of the lesser amount of work.
710 */
711 - new_process_refs = cfqq_process_refs(new_cfqq);
712 if (new_process_refs >= process_refs) {
713 cfqq->new_cfqq = new_cfqq;
714 atomic_add(process_refs, &new_cfqq->ref);
715 diff --git a/drivers/acpi/processor_idle.c b/drivers/acpi/processor_idle.c
716 index cc978a8..64db828 100644
717 --- a/drivers/acpi/processor_idle.c
718 +++ b/drivers/acpi/processor_idle.c
719 @@ -954,7 +954,7 @@ static int acpi_idle_enter_bm(struct cpuidle_device *dev,
720 if (acpi_idle_suspend)
721 return(acpi_idle_enter_c1(dev, state));
722
723 - if (acpi_idle_bm_check()) {
724 + if (!cx->bm_sts_skip && acpi_idle_bm_check()) {
725 if (dev->safe_state) {
726 dev->last_state = dev->safe_state;
727 return dev->safe_state->enter(dev, dev->safe_state);
728 diff --git a/drivers/acpi/sleep.c b/drivers/acpi/sleep.c
729 index 9ed9292..0458094 100644
730 --- a/drivers/acpi/sleep.c
731 +++ b/drivers/acpi/sleep.c
732 @@ -80,22 +80,6 @@ static int acpi_sleep_prepare(u32 acpi_state)
733
734 #ifdef CONFIG_ACPI_SLEEP
735 static u32 acpi_target_sleep_state = ACPI_STATE_S0;
736 -/*
737 - * According to the ACPI specification the BIOS should make sure that ACPI is
738 - * enabled and SCI_EN bit is set on wake-up from S1 - S3 sleep states. Still,
739 - * some BIOSes don't do that and therefore we use acpi_enable() to enable ACPI
740 - * on such systems during resume. Unfortunately that doesn't help in
741 - * particularly pathological cases in which SCI_EN has to be set directly on
742 - * resume, although the specification states very clearly that this flag is
743 - * owned by the hardware. The set_sci_en_on_resume variable will be set in such
744 - * cases.
745 - */
746 -static bool set_sci_en_on_resume;
747 -
748 -void __init acpi_set_sci_en_on_resume(void)
749 -{
750 - set_sci_en_on_resume = true;
751 -}
752
753 /*
754 * ACPI 1.0 wants us to execute _PTS before suspending devices, so we allow the
755 @@ -253,11 +237,8 @@ static int acpi_suspend_enter(suspend_state_t pm_state)
756 break;
757 }
758
759 - /* If ACPI is not enabled by the BIOS, we need to enable it here. */
760 - if (set_sci_en_on_resume)
761 - acpi_write_bit_register(ACPI_BITREG_SCI_ENABLE, 1);
762 - else
763 - acpi_enable();
764 + /* This violates the spec but is required for bug compatibility. */
765 + acpi_write_bit_register(ACPI_BITREG_SCI_ENABLE, 1);
766
767 /* Reprogram control registers and execute _BFS */
768 acpi_leave_sleep_state_prep(acpi_state);
769 @@ -346,12 +327,6 @@ static int __init init_old_suspend_ordering(const struct dmi_system_id *d)
770 return 0;
771 }
772
773 -static int __init init_set_sci_en_on_resume(const struct dmi_system_id *d)
774 -{
775 - set_sci_en_on_resume = true;
776 - return 0;
777 -}
778 -
779 static struct dmi_system_id __initdata acpisleep_dmi_table[] = {
780 {
781 .callback = init_old_suspend_ordering,
782 @@ -370,22 +345,6 @@ static struct dmi_system_id __initdata acpisleep_dmi_table[] = {
783 },
784 },
785 {
786 - .callback = init_set_sci_en_on_resume,
787 - .ident = "Apple MacBook 1,1",
788 - .matches = {
789 - DMI_MATCH(DMI_SYS_VENDOR, "Apple Computer, Inc."),
790 - DMI_MATCH(DMI_PRODUCT_NAME, "MacBook1,1"),
791 - },
792 - },
793 - {
794 - .callback = init_set_sci_en_on_resume,
795 - .ident = "Apple MacMini 1,1",
796 - .matches = {
797 - DMI_MATCH(DMI_SYS_VENDOR, "Apple Computer, Inc."),
798 - DMI_MATCH(DMI_PRODUCT_NAME, "Macmini1,1"),
799 - },
800 - },
801 - {
802 .callback = init_old_suspend_ordering,
803 .ident = "Asus Pundit P1-AH2 (M2N8L motherboard)",
804 .matches = {
805 @@ -394,94 +353,6 @@ static struct dmi_system_id __initdata acpisleep_dmi_table[] = {
806 },
807 },
808 {
809 - .callback = init_set_sci_en_on_resume,
810 - .ident = "Toshiba Satellite L300",
811 - .matches = {
812 - DMI_MATCH(DMI_SYS_VENDOR, "TOSHIBA"),
813 - DMI_MATCH(DMI_PRODUCT_NAME, "Satellite L300"),
814 - },
815 - },
816 - {
817 - .callback = init_set_sci_en_on_resume,
818 - .ident = "Hewlett-Packard HP G7000 Notebook PC",
819 - .matches = {
820 - DMI_MATCH(DMI_SYS_VENDOR, "Hewlett-Packard"),
821 - DMI_MATCH(DMI_PRODUCT_NAME, "HP G7000 Notebook PC"),
822 - },
823 - },
824 - {
825 - .callback = init_set_sci_en_on_resume,
826 - .ident = "Hewlett-Packard HP Pavilion dv3 Notebook PC",
827 - .matches = {
828 - DMI_MATCH(DMI_SYS_VENDOR, "Hewlett-Packard"),
829 - DMI_MATCH(DMI_PRODUCT_NAME, "HP Pavilion dv3 Notebook PC"),
830 - },
831 - },
832 - {
833 - .callback = init_set_sci_en_on_resume,
834 - .ident = "Hewlett-Packard Pavilion dv4",
835 - .matches = {
836 - DMI_MATCH(DMI_SYS_VENDOR, "Hewlett-Packard"),
837 - DMI_MATCH(DMI_PRODUCT_NAME, "HP Pavilion dv4"),
838 - },
839 - },
840 - {
841 - .callback = init_set_sci_en_on_resume,
842 - .ident = "Hewlett-Packard Pavilion dv7",
843 - .matches = {
844 - DMI_MATCH(DMI_SYS_VENDOR, "Hewlett-Packard"),
845 - DMI_MATCH(DMI_PRODUCT_NAME, "HP Pavilion dv7"),
846 - },
847 - },
848 - {
849 - .callback = init_set_sci_en_on_resume,
850 - .ident = "Hewlett-Packard Compaq Presario C700 Notebook PC",
851 - .matches = {
852 - DMI_MATCH(DMI_SYS_VENDOR, "Hewlett-Packard"),
853 - DMI_MATCH(DMI_PRODUCT_NAME, "Compaq Presario C700 Notebook PC"),
854 - },
855 - },
856 - {
857 - .callback = init_set_sci_en_on_resume,
858 - .ident = "Hewlett-Packard Compaq Presario CQ40 Notebook PC",
859 - .matches = {
860 - DMI_MATCH(DMI_SYS_VENDOR, "Hewlett-Packard"),
861 - DMI_MATCH(DMI_PRODUCT_NAME, "Compaq Presario CQ40 Notebook PC"),
862 - },
863 - },
864 - {
865 - .callback = init_set_sci_en_on_resume,
866 - .ident = "Lenovo ThinkPad T410",
867 - .matches = {
868 - DMI_MATCH(DMI_SYS_VENDOR, "LENOVO"),
869 - DMI_MATCH(DMI_PRODUCT_VERSION, "ThinkPad T410"),
870 - },
871 - },
872 - {
873 - .callback = init_set_sci_en_on_resume,
874 - .ident = "Lenovo ThinkPad T510",
875 - .matches = {
876 - DMI_MATCH(DMI_SYS_VENDOR, "LENOVO"),
877 - DMI_MATCH(DMI_PRODUCT_VERSION, "ThinkPad T510"),
878 - },
879 - },
880 - {
881 - .callback = init_set_sci_en_on_resume,
882 - .ident = "Lenovo ThinkPad W510",
883 - .matches = {
884 - DMI_MATCH(DMI_SYS_VENDOR, "LENOVO"),
885 - DMI_MATCH(DMI_PRODUCT_VERSION, "ThinkPad W510"),
886 - },
887 - },
888 - {
889 - .callback = init_set_sci_en_on_resume,
890 - .ident = "Lenovo ThinkPad X201[s]",
891 - .matches = {
892 - DMI_MATCH(DMI_SYS_VENDOR, "LENOVO"),
893 - DMI_MATCH(DMI_PRODUCT_VERSION, "ThinkPad X201"),
894 - },
895 - },
896 - {
897 .callback = init_old_suspend_ordering,
898 .ident = "Panasonic CF51-2L",
899 .matches = {
900 @@ -490,30 +361,6 @@ static struct dmi_system_id __initdata acpisleep_dmi_table[] = {
901 DMI_MATCH(DMI_BOARD_NAME, "CF51-2L"),
902 },
903 },
904 - {
905 - .callback = init_set_sci_en_on_resume,
906 - .ident = "Dell Studio 1558",
907 - .matches = {
908 - DMI_MATCH(DMI_SYS_VENDOR, "Dell Inc."),
909 - DMI_MATCH(DMI_PRODUCT_NAME, "Studio 1558"),
910 - },
911 - },
912 - {
913 - .callback = init_set_sci_en_on_resume,
914 - .ident = "Dell Studio 1557",
915 - .matches = {
916 - DMI_MATCH(DMI_SYS_VENDOR, "Dell Inc."),
917 - DMI_MATCH(DMI_PRODUCT_NAME, "Studio 1557"),
918 - },
919 - },
920 - {
921 - .callback = init_set_sci_en_on_resume,
922 - .ident = "Dell Studio 1555",
923 - .matches = {
924 - DMI_MATCH(DMI_SYS_VENDOR, "Dell Inc."),
925 - DMI_MATCH(DMI_PRODUCT_NAME, "Studio 1555"),
926 - },
927 - },
928 {},
929 };
930 #endif /* CONFIG_SUSPEND */
931 diff --git a/drivers/ata/ahci.c b/drivers/ata/ahci.c
932 index 462200d..9c6747c 100644
933 --- a/drivers/ata/ahci.c
934 +++ b/drivers/ata/ahci.c
935 @@ -3037,6 +3037,16 @@ static int ahci_init_one(struct pci_dev *pdev, const struct pci_device_id *ent)
936 if (pdev->vendor == PCI_VENDOR_ID_MARVELL && !marvell_enable)
937 return -ENODEV;
938
939 + /*
940 + * For some reason, MCP89 on MacBook 7,1 doesn't work with
941 + * ahci, use ata_generic instead.
942 + */
943 + if (pdev->vendor == PCI_VENDOR_ID_NVIDIA &&
944 + pdev->device == PCI_DEVICE_ID_NVIDIA_NFORCE_MCP89_SATA &&
945 + pdev->subsystem_vendor == PCI_VENDOR_ID_APPLE &&
946 + pdev->subsystem_device == 0xcb89)
947 + return -ENODEV;
948 +
949 /* Promise's PDC42819 is a SAS/SATA controller that has an AHCI mode.
950 * At the moment, we can only use the AHCI mode. Let the users know
951 * that for SAS drives they're out of luck.
952 diff --git a/drivers/ata/ata_generic.c b/drivers/ata/ata_generic.c
953 index 12e26c3..151eb43 100644
954 --- a/drivers/ata/ata_generic.c
955 +++ b/drivers/ata/ata_generic.c
956 @@ -168,6 +168,12 @@ static struct pci_device_id ata_generic[] = {
957 { PCI_DEVICE(PCI_VENDOR_ID_VIA, PCI_DEVICE_ID_VIA_82C561), },
958 { PCI_DEVICE(PCI_VENDOR_ID_OPTI, PCI_DEVICE_ID_OPTI_82C558), },
959 { PCI_DEVICE(PCI_VENDOR_ID_CENATEK,PCI_DEVICE_ID_CENATEK_IDE), },
960 + /*
961 + * For some reason, MCP89 on MacBook 7,1 doesn't work with
962 + * ahci, use ata_generic instead.
963 + */
964 + { PCI_VENDOR_ID_NVIDIA, PCI_DEVICE_ID_NVIDIA_NFORCE_MCP89_SATA,
965 + PCI_VENDOR_ID_APPLE, 0xcb89, },
966 #if !defined(CONFIG_PATA_TOSHIBA) && !defined(CONFIG_PATA_TOSHIBA_MODULE)
967 { PCI_DEVICE(PCI_VENDOR_ID_TOSHIBA,PCI_DEVICE_ID_TOSHIBA_PICCOLO_1), },
968 { PCI_DEVICE(PCI_VENDOR_ID_TOSHIBA,PCI_DEVICE_ID_TOSHIBA_PICCOLO_2), },
969 diff --git a/drivers/base/firmware_class.c b/drivers/base/firmware_class.c
970 index a950241..ff911ae 100644
971 --- a/drivers/base/firmware_class.c
972 +++ b/drivers/base/firmware_class.c
973 @@ -125,6 +125,17 @@ static ssize_t firmware_loading_show(struct device *dev,
974 return sprintf(buf, "%d\n", loading);
975 }
976
977 +static void firmware_free_data(const struct firmware *fw)
978 +{
979 + int i;
980 + vunmap(fw->data);
981 + if (fw->pages) {
982 + for (i = 0; i < PFN_UP(fw->size); i++)
983 + __free_page(fw->pages[i]);
984 + kfree(fw->pages);
985 + }
986 +}
987 +
988 /* Some architectures don't have PAGE_KERNEL_RO */
989 #ifndef PAGE_KERNEL_RO
990 #define PAGE_KERNEL_RO PAGE_KERNEL
991 @@ -157,21 +168,21 @@ static ssize_t firmware_loading_store(struct device *dev,
992 mutex_unlock(&fw_lock);
993 break;
994 }
995 - vfree(fw_priv->fw->data);
996 - fw_priv->fw->data = NULL;
997 + firmware_free_data(fw_priv->fw);
998 + memset(fw_priv->fw, 0, sizeof(struct firmware));
999 + /* If the pages are not owned by 'struct firmware' */
1000 for (i = 0; i < fw_priv->nr_pages; i++)
1001 __free_page(fw_priv->pages[i]);
1002 kfree(fw_priv->pages);
1003 fw_priv->pages = NULL;
1004 fw_priv->page_array_size = 0;
1005 fw_priv->nr_pages = 0;
1006 - fw_priv->fw->size = 0;
1007 set_bit(FW_STATUS_LOADING, &fw_priv->status);
1008 mutex_unlock(&fw_lock);
1009 break;
1010 case 0:
1011 if (test_bit(FW_STATUS_LOADING, &fw_priv->status)) {
1012 - vfree(fw_priv->fw->data);
1013 + vunmap(fw_priv->fw->data);
1014 fw_priv->fw->data = vmap(fw_priv->pages,
1015 fw_priv->nr_pages,
1016 0, PAGE_KERNEL_RO);
1017 @@ -179,7 +190,10 @@ static ssize_t firmware_loading_store(struct device *dev,
1018 dev_err(dev, "%s: vmap() failed\n", __func__);
1019 goto err;
1020 }
1021 - /* Pages will be freed by vfree() */
1022 + /* Pages are now owned by 'struct firmware' */
1023 + fw_priv->fw->pages = fw_priv->pages;
1024 + fw_priv->pages = NULL;
1025 +
1026 fw_priv->page_array_size = 0;
1027 fw_priv->nr_pages = 0;
1028 complete(&fw_priv->completion);
1029 @@ -572,7 +586,7 @@ release_firmware(const struct firmware *fw)
1030 if (fw->data == builtin->data)
1031 goto free_fw;
1032 }
1033 - vfree(fw->data);
1034 + firmware_free_data(fw);
1035 free_fw:
1036 kfree(fw);
1037 }
1038 diff --git a/drivers/char/agp/amd64-agp.c b/drivers/char/agp/amd64-agp.c
1039 index fd50ead..93f56d6 100644
1040 --- a/drivers/char/agp/amd64-agp.c
1041 +++ b/drivers/char/agp/amd64-agp.c
1042 @@ -499,6 +499,10 @@ static int __devinit agp_amd64_probe(struct pci_dev *pdev,
1043 u8 cap_ptr;
1044 int err;
1045
1046 + /* The Highlander principle */
1047 + if (agp_bridges_found)
1048 + return -ENODEV;
1049 +
1050 cap_ptr = pci_find_capability(pdev, PCI_CAP_ID_AGP);
1051 if (!cap_ptr)
1052 return -ENODEV;
1053 @@ -562,6 +566,8 @@ static void __devexit agp_amd64_remove(struct pci_dev *pdev)
1054 amd64_aperture_sizes[bridge->aperture_size_idx].size);
1055 agp_remove_bridge(bridge);
1056 agp_put_bridge(bridge);
1057 +
1058 + agp_bridges_found--;
1059 }
1060
1061 #ifdef CONFIG_PM
1062 @@ -709,6 +715,11 @@ static struct pci_device_id agp_amd64_pci_table[] = {
1063
1064 MODULE_DEVICE_TABLE(pci, agp_amd64_pci_table);
1065
1066 +static DEFINE_PCI_DEVICE_TABLE(agp_amd64_pci_promisc_table) = {
1067 + { PCI_DEVICE_CLASS(0, 0) },
1068 + { }
1069 +};
1070 +
1071 static struct pci_driver agp_amd64_pci_driver = {
1072 .name = "agpgart-amd64",
1073 .id_table = agp_amd64_pci_table,
1074 @@ -734,7 +745,6 @@ int __init agp_amd64_init(void)
1075 return err;
1076
1077 if (agp_bridges_found == 0) {
1078 - struct pci_dev *dev;
1079 if (!agp_try_unsupported && !agp_try_unsupported_boot) {
1080 printk(KERN_INFO PFX "No supported AGP bridge found.\n");
1081 #ifdef MODULE
1082 @@ -750,17 +760,10 @@ int __init agp_amd64_init(void)
1083 return -ENODEV;
1084
1085 /* Look for any AGP bridge */
1086 - dev = NULL;
1087 - err = -ENODEV;
1088 - for_each_pci_dev(dev) {
1089 - if (!pci_find_capability(dev, PCI_CAP_ID_AGP))
1090 - continue;
1091 - /* Only one bridge supported right now */
1092 - if (agp_amd64_probe(dev, NULL) == 0) {
1093 - err = 0;
1094 - break;
1095 - }
1096 - }
1097 + agp_amd64_pci_driver.id_table = agp_amd64_pci_promisc_table;
1098 + err = driver_attach(&agp_amd64_pci_driver.driver);
1099 + if (err == 0 && agp_bridges_found == 0)
1100 + err = -ENODEV;
1101 }
1102 return err;
1103 }
1104 diff --git a/drivers/char/tpm/tpm.h b/drivers/char/tpm/tpm.h
1105 index 8e00b4d..792868d 100644
1106 --- a/drivers/char/tpm/tpm.h
1107 +++ b/drivers/char/tpm/tpm.h
1108 @@ -224,6 +224,7 @@ struct tpm_readpubek_params_out {
1109 u8 algorithm[4];
1110 u8 encscheme[2];
1111 u8 sigscheme[2];
1112 + __be32 paramsize;
1113 u8 parameters[12]; /*assuming RSA*/
1114 __be32 keysize;
1115 u8 modulus[256];
1116 diff --git a/drivers/char/tpm/tpm_tis.c b/drivers/char/tpm/tpm_tis.c
1117 index 2405f17..ca15c04 100644
1118 --- a/drivers/char/tpm/tpm_tis.c
1119 +++ b/drivers/char/tpm/tpm_tis.c
1120 @@ -622,7 +622,14 @@ static int tpm_tis_pnp_suspend(struct pnp_dev *dev, pm_message_t msg)
1121
1122 static int tpm_tis_pnp_resume(struct pnp_dev *dev)
1123 {
1124 - return tpm_pm_resume(&dev->dev);
1125 + struct tpm_chip *chip = pnp_get_drvdata(dev);
1126 + int ret;
1127 +
1128 + ret = tpm_pm_resume(&dev->dev);
1129 + if (!ret)
1130 + tpm_continue_selftest(chip);
1131 +
1132 + return ret;
1133 }
1134
1135 static struct pnp_device_id tpm_pnp_tbl[] __devinitdata = {
1136 diff --git a/drivers/cpufreq/cpufreq.c b/drivers/cpufreq/cpufreq.c
1137 index 67bc2ec..295dc63 100644
1138 --- a/drivers/cpufreq/cpufreq.c
1139 +++ b/drivers/cpufreq/cpufreq.c
1140 @@ -1765,17 +1765,8 @@ static int __cpufreq_set_policy(struct cpufreq_policy *data,
1141 dprintk("governor switch\n");
1142
1143 /* end old governor */
1144 - if (data->governor) {
1145 - /*
1146 - * Need to release the rwsem around governor
1147 - * stop due to lock dependency between
1148 - * cancel_delayed_work_sync and the read lock
1149 - * taken in the delayed work handler.
1150 - */
1151 - unlock_policy_rwsem_write(data->cpu);
1152 + if (data->governor)
1153 __cpufreq_governor(data, CPUFREQ_GOV_STOP);
1154 - lock_policy_rwsem_write(data->cpu);
1155 - }
1156
1157 /* start new governor */
1158 data->governor = policy->governor;
1159 diff --git a/drivers/edac/Kconfig b/drivers/edac/Kconfig
1160 index 55c9c59..d3b21a5 100644
1161 --- a/drivers/edac/Kconfig
1162 +++ b/drivers/edac/Kconfig
1163 @@ -196,7 +196,7 @@ config EDAC_I5100
1164
1165 config EDAC_MPC85XX
1166 tristate "Freescale MPC83xx / MPC85xx"
1167 - depends on EDAC_MM_EDAC && FSL_SOC && (PPC_83xx || MPC85xx)
1168 + depends on EDAC_MM_EDAC && FSL_SOC && (PPC_83xx || PPC_85xx)
1169 help
1170 Support for error detection and correction on the Freescale
1171 MPC8349, MPC8560, MPC8540, MPC8548
1172 diff --git a/drivers/edac/amd64_edac.c b/drivers/edac/amd64_edac.c
1173 index 3391e67..72904c8 100644
1174 --- a/drivers/edac/amd64_edac.c
1175 +++ b/drivers/edac/amd64_edac.c
1176 @@ -1958,20 +1958,20 @@ static int get_channel_from_ecc_syndrome(struct mem_ctl_info *mci, u16 syndrome)
1177 u32 value = 0;
1178 int err_sym = 0;
1179
1180 - amd64_read_pci_cfg(pvt->misc_f3_ctl, 0x180, &value);
1181 + if (boot_cpu_data.x86 == 0x10) {
1182
1183 - /* F3x180[EccSymbolSize]=1, x8 symbols */
1184 - if (boot_cpu_data.x86 == 0x10 &&
1185 - boot_cpu_data.x86_model > 7 &&
1186 - value & BIT(25)) {
1187 - err_sym = decode_syndrome(syndrome, x8_vectors,
1188 - ARRAY_SIZE(x8_vectors), 8);
1189 - return map_err_sym_to_channel(err_sym, 8);
1190 - } else {
1191 - err_sym = decode_syndrome(syndrome, x4_vectors,
1192 - ARRAY_SIZE(x4_vectors), 4);
1193 - return map_err_sym_to_channel(err_sym, 4);
1194 + amd64_read_pci_cfg(pvt->misc_f3_ctl, 0x180, &value);
1195 +
1196 + /* F3x180[EccSymbolSize]=1 => x8 symbols */
1197 + if (boot_cpu_data.x86_model > 7 &&
1198 + value & BIT(25)) {
1199 + err_sym = decode_syndrome(syndrome, x8_vectors,
1200 + ARRAY_SIZE(x8_vectors), 8);
1201 + return map_err_sym_to_channel(err_sym, 8);
1202 + }
1203 }
1204 + err_sym = decode_syndrome(syndrome, x4_vectors, ARRAY_SIZE(x4_vectors), 4);
1205 + return map_err_sym_to_channel(err_sym, 4);
1206 }
1207
1208 /*
1209 diff --git a/drivers/gpu/drm/i915/i915_drv.c b/drivers/gpu/drm/i915/i915_drv.c
1210 index 930664c..73bd7f4 100644
1211 --- a/drivers/gpu/drm/i915/i915_drv.c
1212 +++ b/drivers/gpu/drm/i915/i915_drv.c
1213 @@ -328,6 +328,7 @@ int i965_reset(struct drm_device *dev, u8 flags)
1214 }
1215 } else {
1216 DRM_ERROR("Error occurred. Don't know how to reset this chip.\n");
1217 + mutex_unlock(&dev->struct_mutex);
1218 return -ENODEV;
1219 }
1220
1221 diff --git a/drivers/gpu/drm/i915/i915_gem.c b/drivers/gpu/drm/i915/i915_gem.c
1222 index 4a44de4..8a41c4e 100644
1223 --- a/drivers/gpu/drm/i915/i915_gem.c
1224 +++ b/drivers/gpu/drm/i915/i915_gem.c
1225 @@ -2288,8 +2288,9 @@ i915_gem_object_get_pages(struct drm_gem_object *obj,
1226 mapping = inode->i_mapping;
1227 for (i = 0; i < page_count; i++) {
1228 page = read_cache_page_gfp(mapping, i,
1229 - mapping_gfp_mask (mapping) |
1230 + GFP_HIGHUSER |
1231 __GFP_COLD |
1232 + __GFP_RECLAIMABLE |
1233 gfpmask);
1234 if (IS_ERR(page))
1235 goto err_pages;
1236 @@ -4998,6 +4999,16 @@ i915_gem_load(struct drm_device *dev)
1237 list_add(&dev_priv->mm.shrink_list, &shrink_list);
1238 spin_unlock(&shrink_list_lock);
1239
1240 + /* On GEN3 we really need to make sure the ARB C3 LP bit is set */
1241 + if (IS_GEN3(dev)) {
1242 + u32 tmp = I915_READ(MI_ARB_STATE);
1243 + if (!(tmp & MI_ARB_C3_LP_WRITE_ENABLE)) {
1244 + /* arb state is a masked write, so set bit + bit in mask */
1245 + tmp = MI_ARB_C3_LP_WRITE_ENABLE | (MI_ARB_C3_LP_WRITE_ENABLE << MI_ARB_MASK_SHIFT);
1246 + I915_WRITE(MI_ARB_STATE, tmp);
1247 + }
1248 + }
1249 +
1250 /* Old X drivers will take 0-2 for front, back, depth buffers */
1251 dev_priv->fence_reg_start = 3;
1252
1253 diff --git a/drivers/gpu/drm/i915/i915_reg.h b/drivers/gpu/drm/i915/i915_reg.h
1254 index 30a2322..635d349 100644
1255 --- a/drivers/gpu/drm/i915/i915_reg.h
1256 +++ b/drivers/gpu/drm/i915/i915_reg.h
1257 @@ -326,6 +326,70 @@
1258 #define LM_BURST_LENGTH 0x00000700
1259 #define LM_FIFO_WATERMARK 0x0000001F
1260 #define MI_ARB_STATE 0x020e4 /* 915+ only */
1261 +#define MI_ARB_MASK_SHIFT 16 /* shift for enable bits */
1262 +
1263 +/* Make render/texture TLB fetches lower priorty than associated data
1264 + * fetches. This is not turned on by default
1265 + */
1266 +#define MI_ARB_RENDER_TLB_LOW_PRIORITY (1 << 15)
1267 +
1268 +/* Isoch request wait on GTT enable (Display A/B/C streams).
1269 + * Make isoch requests stall on the TLB update. May cause
1270 + * display underruns (test mode only)
1271 + */
1272 +#define MI_ARB_ISOCH_WAIT_GTT (1 << 14)
1273 +
1274 +/* Block grant count for isoch requests when block count is
1275 + * set to a finite value.
1276 + */
1277 +#define MI_ARB_BLOCK_GRANT_MASK (3 << 12)
1278 +#define MI_ARB_BLOCK_GRANT_8 (0 << 12) /* for 3 display planes */
1279 +#define MI_ARB_BLOCK_GRANT_4 (1 << 12) /* for 2 display planes */
1280 +#define MI_ARB_BLOCK_GRANT_2 (2 << 12) /* for 1 display plane */
1281 +#define MI_ARB_BLOCK_GRANT_0 (3 << 12) /* don't use */
1282 +
1283 +/* Enable render writes to complete in C2/C3/C4 power states.
1284 + * If this isn't enabled, render writes are prevented in low
1285 + * power states. That seems bad to me.
1286 + */
1287 +#define MI_ARB_C3_LP_WRITE_ENABLE (1 << 11)
1288 +
1289 +/* This acknowledges an async flip immediately instead
1290 + * of waiting for 2TLB fetches.
1291 + */
1292 +#define MI_ARB_ASYNC_FLIP_ACK_IMMEDIATE (1 << 10)
1293 +
1294 +/* Enables non-sequential data reads through arbiter
1295 + */
1296 +#define MI_ARB_DUAL_DATA_PHASE_DISABLE (1 << 9)
1297 +
1298 +/* Disable FSB snooping of cacheable write cycles from binner/render
1299 + * command stream
1300 + */
1301 +#define MI_ARB_CACHE_SNOOP_DISABLE (1 << 8)
1302 +
1303 +/* Arbiter time slice for non-isoch streams */
1304 +#define MI_ARB_TIME_SLICE_MASK (7 << 5)
1305 +#define MI_ARB_TIME_SLICE_1 (0 << 5)
1306 +#define MI_ARB_TIME_SLICE_2 (1 << 5)
1307 +#define MI_ARB_TIME_SLICE_4 (2 << 5)
1308 +#define MI_ARB_TIME_SLICE_6 (3 << 5)
1309 +#define MI_ARB_TIME_SLICE_8 (4 << 5)
1310 +#define MI_ARB_TIME_SLICE_10 (5 << 5)
1311 +#define MI_ARB_TIME_SLICE_14 (6 << 5)
1312 +#define MI_ARB_TIME_SLICE_16 (7 << 5)
1313 +
1314 +/* Low priority grace period page size */
1315 +#define MI_ARB_LOW_PRIORITY_GRACE_4KB (0 << 4) /* default */
1316 +#define MI_ARB_LOW_PRIORITY_GRACE_8KB (1 << 4)
1317 +
1318 +/* Disable display A/B trickle feed */
1319 +#define MI_ARB_DISPLAY_TRICKLE_FEED_DISABLE (1 << 2)
1320 +
1321 +/* Set display plane priority */
1322 +#define MI_ARB_DISPLAY_PRIORITY_A_B (0 << 0) /* display A > display B */
1323 +#define MI_ARB_DISPLAY_PRIORITY_B_A (1 << 0) /* display B > display A */
1324 +
1325 #define CACHE_MODE_0 0x02120 /* 915+ only */
1326 #define CM0_MASK_SHIFT 16
1327 #define CM0_IZ_OPT_DISABLE (1<<6)
1328 diff --git a/drivers/gpu/drm/i915/intel_display.c b/drivers/gpu/drm/i915/intel_display.c
1329 index 3f00902..d63173a 100644
1330 --- a/drivers/gpu/drm/i915/intel_display.c
1331 +++ b/drivers/gpu/drm/i915/intel_display.c
1332 @@ -879,8 +879,8 @@ intel_g4x_find_best_PLL(const intel_limit_t *limit, struct drm_crtc *crtc,
1333 intel_clock_t clock;
1334 int max_n;
1335 bool found;
1336 - /* approximately equals target * 0.00488 */
1337 - int err_most = (target >> 8) + (target >> 10);
1338 + /* approximately equals target * 0.00585 */
1339 + int err_most = (target >> 8) + (target >> 9);
1340 found = false;
1341
1342 if (intel_pipe_has_type(crtc, INTEL_OUTPUT_LVDS)) {
1343 diff --git a/drivers/gpu/drm/radeon/r100.c b/drivers/gpu/drm/radeon/r100.c
1344 index c0d4650..3ecd236 100644
1345 --- a/drivers/gpu/drm/radeon/r100.c
1346 +++ b/drivers/gpu/drm/radeon/r100.c
1347 @@ -1384,6 +1384,7 @@ static int r100_packet0_check(struct radeon_cs_parser *p,
1348 case RADEON_TXFORMAT_RGB332:
1349 case RADEON_TXFORMAT_Y8:
1350 track->textures[i].cpp = 1;
1351 + track->textures[i].compress_format = R100_TRACK_COMP_NONE;
1352 break;
1353 case RADEON_TXFORMAT_AI88:
1354 case RADEON_TXFORMAT_ARGB1555:
1355 @@ -1395,12 +1396,14 @@ static int r100_packet0_check(struct radeon_cs_parser *p,
1356 case RADEON_TXFORMAT_LDUDV655:
1357 case RADEON_TXFORMAT_DUDV88:
1358 track->textures[i].cpp = 2;
1359 + track->textures[i].compress_format = R100_TRACK_COMP_NONE;
1360 break;
1361 case RADEON_TXFORMAT_ARGB8888:
1362 case RADEON_TXFORMAT_RGBA8888:
1363 case RADEON_TXFORMAT_SHADOW32:
1364 case RADEON_TXFORMAT_LDUDUV8888:
1365 track->textures[i].cpp = 4;
1366 + track->textures[i].compress_format = R100_TRACK_COMP_NONE;
1367 break;
1368 case RADEON_TXFORMAT_DXT1:
1369 track->textures[i].cpp = 1;
1370 @@ -2750,33 +2753,6 @@ static inline void r100_cs_track_texture_print(struct r100_cs_track_texture *t)
1371 DRM_ERROR("compress format %d\n", t->compress_format);
1372 }
1373
1374 -static int r100_cs_track_cube(struct radeon_device *rdev,
1375 - struct r100_cs_track *track, unsigned idx)
1376 -{
1377 - unsigned face, w, h;
1378 - struct radeon_bo *cube_robj;
1379 - unsigned long size;
1380 -
1381 - for (face = 0; face < 5; face++) {
1382 - cube_robj = track->textures[idx].cube_info[face].robj;
1383 - w = track->textures[idx].cube_info[face].width;
1384 - h = track->textures[idx].cube_info[face].height;
1385 -
1386 - size = w * h;
1387 - size *= track->textures[idx].cpp;
1388 -
1389 - size += track->textures[idx].cube_info[face].offset;
1390 -
1391 - if (size > radeon_bo_size(cube_robj)) {
1392 - DRM_ERROR("Cube texture offset greater than object size %lu %lu\n",
1393 - size, radeon_bo_size(cube_robj));
1394 - r100_cs_track_texture_print(&track->textures[idx]);
1395 - return -1;
1396 - }
1397 - }
1398 - return 0;
1399 -}
1400 -
1401 static int r100_track_compress_size(int compress_format, int w, int h)
1402 {
1403 int block_width, block_height, block_bytes;
1404 @@ -2807,6 +2783,37 @@ static int r100_track_compress_size(int compress_format, int w, int h)
1405 return sz;
1406 }
1407
1408 +static int r100_cs_track_cube(struct radeon_device *rdev,
1409 + struct r100_cs_track *track, unsigned idx)
1410 +{
1411 + unsigned face, w, h;
1412 + struct radeon_bo *cube_robj;
1413 + unsigned long size;
1414 + unsigned compress_format = track->textures[idx].compress_format;
1415 +
1416 + for (face = 0; face < 5; face++) {
1417 + cube_robj = track->textures[idx].cube_info[face].robj;
1418 + w = track->textures[idx].cube_info[face].width;
1419 + h = track->textures[idx].cube_info[face].height;
1420 +
1421 + if (compress_format) {
1422 + size = r100_track_compress_size(compress_format, w, h);
1423 + } else
1424 + size = w * h;
1425 + size *= track->textures[idx].cpp;
1426 +
1427 + size += track->textures[idx].cube_info[face].offset;
1428 +
1429 + if (size > radeon_bo_size(cube_robj)) {
1430 + DRM_ERROR("Cube texture offset greater than object size %lu %lu\n",
1431 + size, radeon_bo_size(cube_robj));
1432 + r100_cs_track_texture_print(&track->textures[idx]);
1433 + return -1;
1434 + }
1435 + }
1436 + return 0;
1437 +}
1438 +
1439 static int r100_cs_track_texture_check(struct radeon_device *rdev,
1440 struct r100_cs_track *track)
1441 {
1442 diff --git a/drivers/gpu/drm/radeon/r200.c b/drivers/gpu/drm/radeon/r200.c
1443 index ff1e0cd..f890fd3 100644
1444 --- a/drivers/gpu/drm/radeon/r200.c
1445 +++ b/drivers/gpu/drm/radeon/r200.c
1446 @@ -368,6 +368,8 @@ int r200_packet0_check(struct radeon_cs_parser *p,
1447 /* 2D, 3D, CUBE */
1448 switch (tmp) {
1449 case 0:
1450 + case 3:
1451 + case 4:
1452 case 5:
1453 case 6:
1454 case 7:
1455 @@ -403,6 +405,7 @@ int r200_packet0_check(struct radeon_cs_parser *p,
1456 case R200_TXFORMAT_RGB332:
1457 case R200_TXFORMAT_Y8:
1458 track->textures[i].cpp = 1;
1459 + track->textures[i].compress_format = R100_TRACK_COMP_NONE;
1460 break;
1461 case R200_TXFORMAT_AI88:
1462 case R200_TXFORMAT_ARGB1555:
1463 @@ -414,6 +417,7 @@ int r200_packet0_check(struct radeon_cs_parser *p,
1464 case R200_TXFORMAT_DVDU88:
1465 case R200_TXFORMAT_AVYU4444:
1466 track->textures[i].cpp = 2;
1467 + track->textures[i].compress_format = R100_TRACK_COMP_NONE;
1468 break;
1469 case R200_TXFORMAT_ARGB8888:
1470 case R200_TXFORMAT_RGBA8888:
1471 @@ -421,6 +425,7 @@ int r200_packet0_check(struct radeon_cs_parser *p,
1472 case R200_TXFORMAT_BGR111110:
1473 case R200_TXFORMAT_LDVDU8888:
1474 track->textures[i].cpp = 4;
1475 + track->textures[i].compress_format = R100_TRACK_COMP_NONE;
1476 break;
1477 case R200_TXFORMAT_DXT1:
1478 track->textures[i].cpp = 1;
1479 diff --git a/drivers/gpu/drm/radeon/r300.c b/drivers/gpu/drm/radeon/r300.c
1480 index 5bdfaf2..7e9868d 100644
1481 --- a/drivers/gpu/drm/radeon/r300.c
1482 +++ b/drivers/gpu/drm/radeon/r300.c
1483 @@ -870,6 +870,7 @@ static int r300_packet0_check(struct radeon_cs_parser *p,
1484 case R300_TX_FORMAT_Y4X4:
1485 case R300_TX_FORMAT_Z3Y3X2:
1486 track->textures[i].cpp = 1;
1487 + track->textures[i].compress_format = R100_TRACK_COMP_NONE;
1488 break;
1489 case R300_TX_FORMAT_X16:
1490 case R300_TX_FORMAT_Y8X8:
1491 @@ -881,6 +882,7 @@ static int r300_packet0_check(struct radeon_cs_parser *p,
1492 case R300_TX_FORMAT_B8G8_B8G8:
1493 case R300_TX_FORMAT_G8R8_G8B8:
1494 track->textures[i].cpp = 2;
1495 + track->textures[i].compress_format = R100_TRACK_COMP_NONE;
1496 break;
1497 case R300_TX_FORMAT_Y16X16:
1498 case R300_TX_FORMAT_Z11Y11X10:
1499 @@ -891,14 +893,17 @@ static int r300_packet0_check(struct radeon_cs_parser *p,
1500 case R300_TX_FORMAT_FL_I32:
1501 case 0x1e:
1502 track->textures[i].cpp = 4;
1503 + track->textures[i].compress_format = R100_TRACK_COMP_NONE;
1504 break;
1505 case R300_TX_FORMAT_W16Z16Y16X16:
1506 case R300_TX_FORMAT_FL_R16G16B16A16:
1507 case R300_TX_FORMAT_FL_I32A32:
1508 track->textures[i].cpp = 8;
1509 + track->textures[i].compress_format = R100_TRACK_COMP_NONE;
1510 break;
1511 case R300_TX_FORMAT_FL_R32G32B32A32:
1512 track->textures[i].cpp = 16;
1513 + track->textures[i].compress_format = R100_TRACK_COMP_NONE;
1514 break;
1515 case R300_TX_FORMAT_DXT1:
1516 track->textures[i].cpp = 1;
1517 diff --git a/drivers/gpu/drm/radeon/radeon_atombios.c b/drivers/gpu/drm/radeon/radeon_atombios.c
1518 index ff02664..e249933 100644
1519 --- a/drivers/gpu/drm/radeon/radeon_atombios.c
1520 +++ b/drivers/gpu/drm/radeon/radeon_atombios.c
1521 @@ -268,6 +268,15 @@ static bool radeon_atom_apply_quirks(struct drm_device *dev,
1522 }
1523 }
1524
1525 + /* ASUS HD 3600 board lists the DVI port as HDMI */
1526 + if ((dev->pdev->device == 0x9598) &&
1527 + (dev->pdev->subsystem_vendor == 0x1043) &&
1528 + (dev->pdev->subsystem_device == 0x01e4)) {
1529 + if (*connector_type == DRM_MODE_CONNECTOR_HDMIA) {
1530 + *connector_type = DRM_MODE_CONNECTOR_DVII;
1531 + }
1532 + }
1533 +
1534 /* ASUS HD 3450 board lists the DVI port as HDMI */
1535 if ((dev->pdev->device == 0x95C5) &&
1536 (dev->pdev->subsystem_vendor == 0x1043) &&
1537 @@ -977,8 +986,15 @@ bool radeon_atombios_sideport_present(struct radeon_device *rdev)
1538 if (igp_info) {
1539 switch (crev) {
1540 case 1:
1541 - if (igp_info->info.ucMemoryType & 0xf0)
1542 - return true;
1543 + /* AMD IGPS */
1544 + if ((rdev->family == CHIP_RS690) ||
1545 + (rdev->family == CHIP_RS740)) {
1546 + if (igp_info->info.ulBootUpMemoryClock)
1547 + return true;
1548 + } else {
1549 + if (igp_info->info.ucMemoryType & 0xf0)
1550 + return true;
1551 + }
1552 break;
1553 case 2:
1554 if (igp_info->info_2.ucMemoryType & 0x0f)
1555 diff --git a/drivers/gpu/drm/radeon/radeon_connectors.c b/drivers/gpu/drm/radeon/radeon_connectors.c
1556 index 2bdfbcd..c263f8e 100644
1557 --- a/drivers/gpu/drm/radeon/radeon_connectors.c
1558 +++ b/drivers/gpu/drm/radeon/radeon_connectors.c
1559 @@ -779,30 +779,27 @@ static enum drm_connector_status radeon_dvi_detect(struct drm_connector *connect
1560 } else
1561 ret = connector_status_connected;
1562
1563 - /* multiple connectors on the same encoder with the same ddc line
1564 - * This tends to be HDMI and DVI on the same encoder with the
1565 - * same ddc line. If the edid says HDMI, consider the HDMI port
1566 - * connected and the DVI port disconnected. If the edid doesn't
1567 - * say HDMI, vice versa.
1568 + /* This gets complicated. We have boards with VGA + HDMI with a
1569 + * shared DDC line and we have boards with DVI-D + HDMI with a shared
1570 + * DDC line. The latter is more complex because with DVI<->HDMI adapters
1571 + * you don't really know what's connected to which port as both are digital.
1572 */
1573 if (radeon_connector->shared_ddc && (ret == connector_status_connected)) {
1574 struct drm_device *dev = connector->dev;
1575 + struct radeon_device *rdev = dev->dev_private;
1576 struct drm_connector *list_connector;
1577 struct radeon_connector *list_radeon_connector;
1578 list_for_each_entry(list_connector, &dev->mode_config.connector_list, head) {
1579 if (connector == list_connector)
1580 continue;
1581 list_radeon_connector = to_radeon_connector(list_connector);
1582 - if (radeon_connector->devices == list_radeon_connector->devices) {
1583 - if (drm_detect_hdmi_monitor(radeon_connector->edid)) {
1584 - if (connector->connector_type == DRM_MODE_CONNECTOR_DVID) {
1585 - kfree(radeon_connector->edid);
1586 - radeon_connector->edid = NULL;
1587 - ret = connector_status_disconnected;
1588 - }
1589 - } else {
1590 - if ((connector->connector_type == DRM_MODE_CONNECTOR_HDMIA) ||
1591 - (connector->connector_type == DRM_MODE_CONNECTOR_HDMIB)) {
1592 + if (list_radeon_connector->shared_ddc &&
1593 + (list_radeon_connector->ddc_bus->rec.i2c_id ==
1594 + radeon_connector->ddc_bus->rec.i2c_id)) {
1595 + /* cases where both connectors are digital */
1596 + if (list_connector->connector_type != DRM_MODE_CONNECTOR_VGA) {
1597 + /* hpd is our only option in this case */
1598 + if (!radeon_hpd_sense(rdev, radeon_connector->hpd.hpd)) {
1599 kfree(radeon_connector->edid);
1600 radeon_connector->edid = NULL;
1601 ret = connector_status_disconnected;
1602 diff --git a/drivers/gpu/drm/radeon/radeon_legacy_encoders.c b/drivers/gpu/drm/radeon/radeon_legacy_encoders.c
1603 index 38e45e2..5c2672f 100644
1604 --- a/drivers/gpu/drm/radeon/radeon_legacy_encoders.c
1605 +++ b/drivers/gpu/drm/radeon/radeon_legacy_encoders.c
1606 @@ -108,6 +108,7 @@ static void radeon_legacy_lvds_dpms(struct drm_encoder *encoder, int mode)
1607 udelay(panel_pwr_delay * 1000);
1608 WREG32(RADEON_LVDS_GEN_CNTL, lvds_gen_cntl);
1609 WREG32_PLL(RADEON_PIXCLKS_CNTL, pixclks_cntl);
1610 + udelay(panel_pwr_delay * 1000);
1611 break;
1612 }
1613
1614 diff --git a/drivers/gpu/drm/radeon/radeon_legacy_tv.c b/drivers/gpu/drm/radeon/radeon_legacy_tv.c
1615 index f2ed27c..0320403 100644
1616 --- a/drivers/gpu/drm/radeon/radeon_legacy_tv.c
1617 +++ b/drivers/gpu/drm/radeon/radeon_legacy_tv.c
1618 @@ -642,8 +642,8 @@ void radeon_legacy_tv_mode_set(struct drm_encoder *encoder,
1619 }
1620 flicker_removal = (tmp + 500) / 1000;
1621
1622 - if (flicker_removal < 2)
1623 - flicker_removal = 2;
1624 + if (flicker_removal < 3)
1625 + flicker_removal = 3;
1626 for (i = 0; i < ARRAY_SIZE(SLOPE_limit); ++i) {
1627 if (flicker_removal == SLOPE_limit[i])
1628 break;
1629 diff --git a/drivers/hwmon/coretemp.c b/drivers/hwmon/coretemp.c
1630 index cb4290a..5852191 100644
1631 --- a/drivers/hwmon/coretemp.c
1632 +++ b/drivers/hwmon/coretemp.c
1633 @@ -53,6 +53,7 @@ struct coretemp_data {
1634 struct mutex update_lock;
1635 const char *name;
1636 u32 id;
1637 + u16 core_id;
1638 char valid; /* zero until following fields are valid */
1639 unsigned long last_updated; /* in jiffies */
1640 int temp;
1641 @@ -75,7 +76,7 @@ static ssize_t show_name(struct device *dev, struct device_attribute
1642 if (attr->index == SHOW_NAME)
1643 ret = sprintf(buf, "%s\n", data->name);
1644 else /* show label */
1645 - ret = sprintf(buf, "Core %d\n", data->id);
1646 + ret = sprintf(buf, "Core %d\n", data->core_id);
1647 return ret;
1648 }
1649
1650 @@ -255,6 +256,9 @@ static int __devinit coretemp_probe(struct platform_device *pdev)
1651 }
1652
1653 data->id = pdev->id;
1654 +#ifdef CONFIG_SMP
1655 + data->core_id = c->cpu_core_id;
1656 +#endif
1657 data->name = "coretemp";
1658 mutex_init(&data->update_lock);
1659
1660 @@ -352,6 +356,10 @@ struct pdev_entry {
1661 struct list_head list;
1662 struct platform_device *pdev;
1663 unsigned int cpu;
1664 +#ifdef CONFIG_SMP
1665 + u16 phys_proc_id;
1666 + u16 cpu_core_id;
1667 +#endif
1668 };
1669
1670 static LIST_HEAD(pdev_list);
1671 @@ -362,6 +370,22 @@ static int __cpuinit coretemp_device_add(unsigned int cpu)
1672 int err;
1673 struct platform_device *pdev;
1674 struct pdev_entry *pdev_entry;
1675 +#ifdef CONFIG_SMP
1676 + struct cpuinfo_x86 *c = &cpu_data(cpu);
1677 +#endif
1678 +
1679 + mutex_lock(&pdev_list_mutex);
1680 +
1681 +#ifdef CONFIG_SMP
1682 + /* Skip second HT entry of each core */
1683 + list_for_each_entry(pdev_entry, &pdev_list, list) {
1684 + if (c->phys_proc_id == pdev_entry->phys_proc_id &&
1685 + c->cpu_core_id == pdev_entry->cpu_core_id) {
1686 + err = 0; /* Not an error */
1687 + goto exit;
1688 + }
1689 + }
1690 +#endif
1691
1692 pdev = platform_device_alloc(DRVNAME, cpu);
1693 if (!pdev) {
1694 @@ -385,7 +409,10 @@ static int __cpuinit coretemp_device_add(unsigned int cpu)
1695
1696 pdev_entry->pdev = pdev;
1697 pdev_entry->cpu = cpu;
1698 - mutex_lock(&pdev_list_mutex);
1699 +#ifdef CONFIG_SMP
1700 + pdev_entry->phys_proc_id = c->phys_proc_id;
1701 + pdev_entry->cpu_core_id = c->cpu_core_id;
1702 +#endif
1703 list_add_tail(&pdev_entry->list, &pdev_list);
1704 mutex_unlock(&pdev_list_mutex);
1705
1706 @@ -396,6 +423,7 @@ exit_device_free:
1707 exit_device_put:
1708 platform_device_put(pdev);
1709 exit:
1710 + mutex_unlock(&pdev_list_mutex);
1711 return err;
1712 }
1713
1714 diff --git a/drivers/hwmon/it87.c b/drivers/hwmon/it87.c
1715 index 0ffe84d..ec7e8a0 100644
1716 --- a/drivers/hwmon/it87.c
1717 +++ b/drivers/hwmon/it87.c
1718 @@ -80,6 +80,13 @@ superio_inb(int reg)
1719 return inb(VAL);
1720 }
1721
1722 +static inline void
1723 +superio_outb(int reg, int val)
1724 +{
1725 + outb(reg, REG);
1726 + outb(val, VAL);
1727 +}
1728 +
1729 static int superio_inw(int reg)
1730 {
1731 int val;
1732 @@ -1064,6 +1071,21 @@ static int __init it87_find(unsigned short *address,
1733 sio_data->vid_value = superio_inb(IT87_SIO_VID_REG);
1734
1735 reg = superio_inb(IT87_SIO_PINX2_REG);
1736 + /*
1737 + * The IT8720F has no VIN7 pin, so VCCH should always be
1738 + * routed internally to VIN7 with an internal divider.
1739 + * Curiously, there still is a configuration bit to control
1740 + * this, which means it can be set incorrectly. And even
1741 + * more curiously, many boards out there are improperly
1742 + * configured, even though the IT8720F datasheet claims
1743 + * that the internal routing of VCCH to VIN7 is the default
1744 + * setting. So we force the internal routing in this case.
1745 + */
1746 + if (sio_data->type == it8720 && !(reg & (1 << 1))) {
1747 + reg |= (1 << 1);
1748 + superio_outb(IT87_SIO_PINX2_REG, reg);
1749 + pr_notice("it87: Routing internal VCCH to in7\n");
1750 + }
1751 if (reg & (1 << 0))
1752 pr_info("it87: in3 is VCC (+5V)\n");
1753 if (reg & (1 << 1))
1754 diff --git a/drivers/hwmon/k10temp.c b/drivers/hwmon/k10temp.c
1755 index 099a213..da5a240 100644
1756 --- a/drivers/hwmon/k10temp.c
1757 +++ b/drivers/hwmon/k10temp.c
1758 @@ -112,11 +112,21 @@ static bool __devinit has_erratum_319(struct pci_dev *pdev)
1759 if (pkg_type != CPUID_PKGTYPE_AM2R2_AM3)
1760 return false;
1761
1762 - /* Differentiate between AM2+ (bad) and AM3 (good) */
1763 + /* DDR3 memory implies socket AM3, which is good */
1764 pci_bus_read_config_dword(pdev->bus,
1765 PCI_DEVFN(PCI_SLOT(pdev->devfn), 2),
1766 REG_DCT0_CONFIG_HIGH, &reg_dram_cfg);
1767 - return !(reg_dram_cfg & DDR3_MODE);
1768 + if (reg_dram_cfg & DDR3_MODE)
1769 + return false;
1770 +
1771 + /*
1772 + * Unfortunately it is possible to run a socket AM3 CPU with DDR2
1773 + * memory. We blacklist all the cores which do exist in socket AM2+
1774 + * format. It still isn't perfect, as RB-C2 cores exist in both AM2+
1775 + * and AM3 formats, but that's the best we can do.
1776 + */
1777 + return boot_cpu_data.x86_model < 4 ||
1778 + (boot_cpu_data.x86_model == 4 && boot_cpu_data.x86_mask <= 2);
1779 }
1780
1781 static int __devinit k10temp_probe(struct pci_dev *pdev,
1782 diff --git a/drivers/hwmon/k8temp.c b/drivers/hwmon/k8temp.c
1783 index 0ceb6d6..8bdf80d 100644
1784 --- a/drivers/hwmon/k8temp.c
1785 +++ b/drivers/hwmon/k8temp.c
1786 @@ -120,7 +120,7 @@ static ssize_t show_temp(struct device *dev,
1787 int temp;
1788 struct k8temp_data *data = k8temp_update_device(dev);
1789
1790 - if (data->swap_core_select)
1791 + if (data->swap_core_select && (data->sensorsp & SEL_CORE))
1792 core = core ? 0 : 1;
1793
1794 temp = TEMP_FROM_REG(data->temp[core][place]) + data->temp_offset;
1795 @@ -180,11 +180,13 @@ static int __devinit k8temp_probe(struct pci_dev *pdev,
1796 }
1797
1798 if ((model >= 0x69) &&
1799 - !(model == 0xc1 || model == 0x6c || model == 0x7c)) {
1800 + !(model == 0xc1 || model == 0x6c || model == 0x7c ||
1801 + model == 0x6b || model == 0x6f || model == 0x7f)) {
1802 /*
1803 - * RevG desktop CPUs (i.e. no socket S1G1 parts)
1804 - * need additional offset, otherwise reported
1805 - * temperature is below ambient temperature
1806 + * RevG desktop CPUs (i.e. no socket S1G1 or
1807 + * ASB1 parts) need additional offset,
1808 + * otherwise reported temperature is below
1809 + * ambient temperature
1810 */
1811 data->temp_offset = 21000;
1812 }
1813 diff --git a/drivers/ide/cmd640.c b/drivers/ide/cmd640.c
1814 index 1a32d62..a9c3313 100644
1815 --- a/drivers/ide/cmd640.c
1816 +++ b/drivers/ide/cmd640.c
1817 @@ -632,12 +632,10 @@ static void cmd640_init_dev(ide_drive_t *drive)
1818
1819 static int cmd640_test_irq(ide_hwif_t *hwif)
1820 {
1821 - struct pci_dev *dev = to_pci_dev(hwif->dev);
1822 int irq_reg = hwif->channel ? ARTTIM23 : CFR;
1823 - u8 irq_stat, irq_mask = hwif->channel ? ARTTIM23_IDE23INTR :
1824 + u8 irq_mask = hwif->channel ? ARTTIM23_IDE23INTR :
1825 CFR_IDE01INTR;
1826 -
1827 - pci_read_config_byte(dev, irq_reg, &irq_stat);
1828 + u8 irq_stat = get_cmd640_reg(irq_reg);
1829
1830 return (irq_stat & irq_mask) ? 1 : 0;
1831 }
1832 diff --git a/drivers/ide/ide-taskfile.c b/drivers/ide/ide-taskfile.c
1833 index cc8633c..67fb735 100644
1834 --- a/drivers/ide/ide-taskfile.c
1835 +++ b/drivers/ide/ide-taskfile.c
1836 @@ -428,13 +428,11 @@ int ide_raw_taskfile(ide_drive_t *drive, struct ide_cmd *cmd, u8 *buf,
1837 {
1838 struct request *rq;
1839 int error;
1840 + int rw = !(cmd->tf_flags & IDE_TFLAG_WRITE) ? READ : WRITE;
1841
1842 - rq = blk_get_request(drive->queue, READ, __GFP_WAIT);
1843 + rq = blk_get_request(drive->queue, rw, __GFP_WAIT);
1844 rq->cmd_type = REQ_TYPE_ATA_TASKFILE;
1845
1846 - if (cmd->tf_flags & IDE_TFLAG_WRITE)
1847 - rq->cmd_flags |= REQ_RW;
1848 -
1849 /*
1850 * (ks) We transfer currently only whole sectors.
1851 * This is suffient for now. But, it would be great,
1852 diff --git a/drivers/infiniband/ulp/ipoib/ipoib_main.c b/drivers/infiniband/ulp/ipoib/ipoib_main.c
1853 index df3eb8c..b4b2257 100644
1854 --- a/drivers/infiniband/ulp/ipoib/ipoib_main.c
1855 +++ b/drivers/infiniband/ulp/ipoib/ipoib_main.c
1856 @@ -1163,7 +1163,7 @@ static ssize_t create_child(struct device *dev,
1857
1858 return ret ? ret : count;
1859 }
1860 -static DEVICE_ATTR(create_child, S_IWUGO, NULL, create_child);
1861 +static DEVICE_ATTR(create_child, S_IWUSR, NULL, create_child);
1862
1863 static ssize_t delete_child(struct device *dev,
1864 struct device_attribute *attr,
1865 @@ -1183,7 +1183,7 @@ static ssize_t delete_child(struct device *dev,
1866 return ret ? ret : count;
1867
1868 }
1869 -static DEVICE_ATTR(delete_child, S_IWUGO, NULL, delete_child);
1870 +static DEVICE_ATTR(delete_child, S_IWUSR, NULL, delete_child);
1871
1872 int ipoib_add_pkey_attr(struct net_device *dev)
1873 {
1874 diff --git a/drivers/input/keyboard/twl4030_keypad.c b/drivers/input/keyboard/twl4030_keypad.c
1875 index 21d6184..7fa439b 100644
1876 --- a/drivers/input/keyboard/twl4030_keypad.c
1877 +++ b/drivers/input/keyboard/twl4030_keypad.c
1878 @@ -50,8 +50,12 @@
1879 */
1880 #define TWL4030_MAX_ROWS 8 /* TWL4030 hard limit */
1881 #define TWL4030_MAX_COLS 8
1882 -#define TWL4030_ROW_SHIFT 3
1883 -#define TWL4030_KEYMAP_SIZE (TWL4030_MAX_ROWS * TWL4030_MAX_COLS)
1884 +/*
1885 + * Note that we add space for an extra column so that we can handle
1886 + * row lines connected to the gnd (see twl4030_col_xlate()).
1887 + */
1888 +#define TWL4030_ROW_SHIFT 4
1889 +#define TWL4030_KEYMAP_SIZE (TWL4030_MAX_ROWS << TWL4030_ROW_SHIFT)
1890
1891 struct twl4030_keypad {
1892 unsigned short keymap[TWL4030_KEYMAP_SIZE];
1893 @@ -181,7 +185,7 @@ static int twl4030_read_kp_matrix_state(struct twl4030_keypad *kp, u16 *state)
1894 return ret;
1895 }
1896
1897 -static int twl4030_is_in_ghost_state(struct twl4030_keypad *kp, u16 *key_state)
1898 +static bool twl4030_is_in_ghost_state(struct twl4030_keypad *kp, u16 *key_state)
1899 {
1900 int i;
1901 u16 check = 0;
1902 @@ -190,12 +194,12 @@ static int twl4030_is_in_ghost_state(struct twl4030_keypad *kp, u16 *key_state)
1903 u16 col = key_state[i];
1904
1905 if ((col & check) && hweight16(col) > 1)
1906 - return 1;
1907 + return true;
1908
1909 check |= col;
1910 }
1911
1912 - return 0;
1913 + return false;
1914 }
1915
1916 static void twl4030_kp_scan(struct twl4030_keypad *kp, bool release_all)
1917 @@ -224,7 +228,8 @@ static void twl4030_kp_scan(struct twl4030_keypad *kp, bool release_all)
1918 if (!changed)
1919 continue;
1920
1921 - for (col = 0; col < kp->n_cols; col++) {
1922 + /* Extra column handles "all gnd" rows */
1923 + for (col = 0; col < kp->n_cols + 1; col++) {
1924 int code;
1925
1926 if (!(changed & (1 << col)))
1927 diff --git a/drivers/input/serio/i8042-x86ia64io.h b/drivers/input/serio/i8042-x86ia64io.h
1928 index 525b9b9..ba09e4d 100644
1929 --- a/drivers/input/serio/i8042-x86ia64io.h
1930 +++ b/drivers/input/serio/i8042-x86ia64io.h
1931 @@ -166,6 +166,13 @@ static const struct dmi_system_id __initconst i8042_dmi_noloop_table[] = {
1932 },
1933 },
1934 {
1935 + /* Gigabyte Spring Peak - defines wrong chassis type */
1936 + .matches = {
1937 + DMI_MATCH(DMI_SYS_VENDOR, "GIGABYTE"),
1938 + DMI_MATCH(DMI_PRODUCT_NAME, "Spring Peak"),
1939 + },
1940 + },
1941 + {
1942 .matches = {
1943 DMI_MATCH(DMI_SYS_VENDOR, "Hewlett-Packard"),
1944 DMI_MATCH(DMI_PRODUCT_NAME, "HP Pavilion dv9700"),
1945 diff --git a/drivers/md/raid10.c b/drivers/md/raid10.c
1946 index 5fb1ad6..da90f45 100644
1947 --- a/drivers/md/raid10.c
1948 +++ b/drivers/md/raid10.c
1949 @@ -1486,14 +1486,14 @@ static void fix_read_error(conf_t *conf, mddev_t *mddev, r10bio_t *r10_bio)
1950 int sectors = r10_bio->sectors;
1951 mdk_rdev_t*rdev;
1952 int max_read_errors = atomic_read(&mddev->max_corr_read_errors);
1953 + int d = r10_bio->devs[r10_bio->read_slot].devnum;
1954
1955 rcu_read_lock();
1956 - {
1957 - int d = r10_bio->devs[r10_bio->read_slot].devnum;
1958 + rdev = rcu_dereference(conf->mirrors[d].rdev);
1959 + if (rdev) { /* If rdev is not NULL */
1960 char b[BDEVNAME_SIZE];
1961 int cur_read_error_count = 0;
1962
1963 - rdev = rcu_dereference(conf->mirrors[d].rdev);
1964 bdevname(rdev->bdev, b);
1965
1966 if (test_bit(Faulty, &rdev->flags)) {
1967 @@ -1533,7 +1533,7 @@ static void fix_read_error(conf_t *conf, mddev_t *mddev, r10bio_t *r10_bio)
1968
1969 rcu_read_lock();
1970 do {
1971 - int d = r10_bio->devs[sl].devnum;
1972 + d = r10_bio->devs[sl].devnum;
1973 rdev = rcu_dereference(conf->mirrors[d].rdev);
1974 if (rdev &&
1975 test_bit(In_sync, &rdev->flags)) {
1976 @@ -1567,7 +1567,7 @@ static void fix_read_error(conf_t *conf, mddev_t *mddev, r10bio_t *r10_bio)
1977 rcu_read_lock();
1978 while (sl != r10_bio->read_slot) {
1979 char b[BDEVNAME_SIZE];
1980 - int d;
1981 +
1982 if (sl==0)
1983 sl = conf->copies;
1984 sl--;
1985 @@ -1603,7 +1603,7 @@ static void fix_read_error(conf_t *conf, mddev_t *mddev, r10bio_t *r10_bio)
1986 }
1987 sl = start;
1988 while (sl != r10_bio->read_slot) {
1989 - int d;
1990 +
1991 if (sl==0)
1992 sl = conf->copies;
1993 sl--;
1994 diff --git a/drivers/media/dvb/dvb-core/dvb_net.c b/drivers/media/dvb/dvb-core/dvb_net.c
1995 index b11533f..00ddf92 100644
1996 --- a/drivers/media/dvb/dvb-core/dvb_net.c
1997 +++ b/drivers/media/dvb/dvb-core/dvb_net.c
1998 @@ -350,6 +350,7 @@ static void dvb_net_ule( struct net_device *dev, const u8 *buf, size_t buf_len )
1999 const u8 *ts, *ts_end, *from_where = NULL;
2000 u8 ts_remain = 0, how_much = 0, new_ts = 1;
2001 struct ethhdr *ethh = NULL;
2002 + bool error = false;
2003
2004 #ifdef ULE_DEBUG
2005 /* The code inside ULE_DEBUG keeps a history of the last 100 TS cells processed. */
2006 @@ -459,10 +460,16 @@ static void dvb_net_ule( struct net_device *dev, const u8 *buf, size_t buf_len )
2007
2008 /* Drop partly decoded SNDU, reset state, resync on PUSI. */
2009 if (priv->ule_skb) {
2010 - dev_kfree_skb( priv->ule_skb );
2011 + error = true;
2012 + dev_kfree_skb(priv->ule_skb);
2013 + }
2014 +
2015 + if (error || priv->ule_sndu_remain) {
2016 dev->stats.rx_errors++;
2017 dev->stats.rx_frame_errors++;
2018 + error = false;
2019 }
2020 +
2021 reset_ule(priv);
2022 priv->need_pusi = 1;
2023 continue;
2024 @@ -534,6 +541,7 @@ static void dvb_net_ule( struct net_device *dev, const u8 *buf, size_t buf_len )
2025 from_where += 2;
2026 }
2027
2028 + priv->ule_sndu_remain = priv->ule_sndu_len + 2;
2029 /*
2030 * State of current TS:
2031 * ts_remain (remaining bytes in the current TS cell)
2032 @@ -543,6 +551,7 @@ static void dvb_net_ule( struct net_device *dev, const u8 *buf, size_t buf_len )
2033 */
2034 switch (ts_remain) {
2035 case 1:
2036 + priv->ule_sndu_remain--;
2037 priv->ule_sndu_type = from_where[0] << 8;
2038 priv->ule_sndu_type_1 = 1; /* first byte of ule_type is set. */
2039 ts_remain -= 1; from_where += 1;
2040 @@ -556,6 +565,7 @@ static void dvb_net_ule( struct net_device *dev, const u8 *buf, size_t buf_len )
2041 default: /* complete ULE header is present in current TS. */
2042 /* Extract ULE type field. */
2043 if (priv->ule_sndu_type_1) {
2044 + priv->ule_sndu_type_1 = 0;
2045 priv->ule_sndu_type |= from_where[0];
2046 from_where += 1; /* points to payload start. */
2047 ts_remain -= 1;
2048 diff --git a/drivers/media/dvb/ttpci/Kconfig b/drivers/media/dvb/ttpci/Kconfig
2049 index d8d4214..32a7ec6 100644
2050 --- a/drivers/media/dvb/ttpci/Kconfig
2051 +++ b/drivers/media/dvb/ttpci/Kconfig
2052 @@ -68,13 +68,14 @@ config DVB_BUDGET
2053 select DVB_VES1820 if !DVB_FE_CUSTOMISE
2054 select DVB_L64781 if !DVB_FE_CUSTOMISE
2055 select DVB_TDA8083 if !DVB_FE_CUSTOMISE
2056 - select DVB_TDA10021 if !DVB_FE_CUSTOMISE
2057 - select DVB_TDA10023 if !DVB_FE_CUSTOMISE
2058 select DVB_S5H1420 if !DVB_FE_CUSTOMISE
2059 select DVB_TDA10086 if !DVB_FE_CUSTOMISE
2060 select DVB_TDA826X if !DVB_FE_CUSTOMISE
2061 select DVB_LNBP21 if !DVB_FE_CUSTOMISE
2062 select DVB_TDA1004X if !DVB_FE_CUSTOMISE
2063 + select DVB_ISL6423 if !DVB_FE_CUSTOMISE
2064 + select DVB_STV090x if !DVB_FE_CUSTOMISE
2065 + select DVB_STV6110x if !DVB_FE_CUSTOMISE
2066 help
2067 Support for simple SAA7146 based DVB cards (so called Budget-
2068 or Nova-PCI cards) without onboard MPEG2 decoder, and without
2069 diff --git a/drivers/media/video/cx23885/cx23885-i2c.c b/drivers/media/video/cx23885/cx23885-i2c.c
2070 index 4172cb3..d4746e0 100644
2071 --- a/drivers/media/video/cx23885/cx23885-i2c.c
2072 +++ b/drivers/media/video/cx23885/cx23885-i2c.c
2073 @@ -365,7 +365,17 @@ int cx23885_i2c_register(struct cx23885_i2c *bus)
2074
2075 memset(&info, 0, sizeof(struct i2c_board_info));
2076 strlcpy(info.type, "ir_video", I2C_NAME_SIZE);
2077 - i2c_new_probed_device(&bus->i2c_adap, &info, addr_list);
2078 + /*
2079 + * We can't call i2c_new_probed_device() because it uses
2080 + * quick writes for probing and the IR receiver device only
2081 + * replies to reads.
2082 + */
2083 + if (i2c_smbus_xfer(&bus->i2c_adap, addr_list[0], 0,
2084 + I2C_SMBUS_READ, 0, I2C_SMBUS_QUICK,
2085 + NULL) >= 0) {
2086 + info.addr = addr_list[0];
2087 + i2c_new_device(&bus->i2c_adap, &info);
2088 + }
2089 }
2090
2091 return bus->i2c_rc;
2092 diff --git a/drivers/media/video/cx88/cx88-i2c.c b/drivers/media/video/cx88/cx88-i2c.c
2093 index ee1ca39..fb39f11 100644
2094 --- a/drivers/media/video/cx88/cx88-i2c.c
2095 +++ b/drivers/media/video/cx88/cx88-i2c.c
2096 @@ -188,10 +188,24 @@ int cx88_i2c_init(struct cx88_core *core, struct pci_dev *pci)
2097 0x18, 0x6b, 0x71,
2098 I2C_CLIENT_END
2099 };
2100 + const unsigned short *addrp;
2101
2102 memset(&info, 0, sizeof(struct i2c_board_info));
2103 strlcpy(info.type, "ir_video", I2C_NAME_SIZE);
2104 - i2c_new_probed_device(&core->i2c_adap, &info, addr_list);
2105 + /*
2106 + * We can't call i2c_new_probed_device() because it uses
2107 + * quick writes for probing and at least some R receiver
2108 + * devices only reply to reads.
2109 + */
2110 + for (addrp = addr_list; *addrp != I2C_CLIENT_END; addrp++) {
2111 + if (i2c_smbus_xfer(&core->i2c_adap, *addrp, 0,
2112 + I2C_SMBUS_READ, 0,
2113 + I2C_SMBUS_QUICK, NULL) >= 0) {
2114 + info.addr = *addrp;
2115 + i2c_new_device(&core->i2c_adap, &info);
2116 + break;
2117 + }
2118 + }
2119 }
2120 return core->i2c_rc;
2121 }
2122 diff --git a/drivers/media/video/uvc/uvc_driver.c b/drivers/media/video/uvc/uvc_driver.c
2123 index 391cccc..b42e845 100644
2124 --- a/drivers/media/video/uvc/uvc_driver.c
2125 +++ b/drivers/media/video/uvc/uvc_driver.c
2126 @@ -59,6 +59,11 @@ static struct uvc_format_desc uvc_fmts[] = {
2127 .fcc = V4L2_PIX_FMT_YUYV,
2128 },
2129 {
2130 + .name = "YUV 4:2:2 (YUYV)",
2131 + .guid = UVC_GUID_FORMAT_YUY2_ISIGHT,
2132 + .fcc = V4L2_PIX_FMT_YUYV,
2133 + },
2134 + {
2135 .name = "YUV 4:2:0 (NV12)",
2136 .guid = UVC_GUID_FORMAT_NV12,
2137 .fcc = V4L2_PIX_FMT_NV12,
2138 @@ -84,11 +89,16 @@ static struct uvc_format_desc uvc_fmts[] = {
2139 .fcc = V4L2_PIX_FMT_UYVY,
2140 },
2141 {
2142 - .name = "Greyscale",
2143 + .name = "Greyscale (8-bit)",
2144 .guid = UVC_GUID_FORMAT_Y800,
2145 .fcc = V4L2_PIX_FMT_GREY,
2146 },
2147 {
2148 + .name = "Greyscale (16-bit)",
2149 + .guid = UVC_GUID_FORMAT_Y16,
2150 + .fcc = V4L2_PIX_FMT_Y16,
2151 + },
2152 + {
2153 .name = "RGB Bayer",
2154 .guid = UVC_GUID_FORMAT_BY8,
2155 .fcc = V4L2_PIX_FMT_SBGGR8,
2156 @@ -2059,6 +2069,15 @@ static struct usb_device_id uvc_ids[] = {
2157 .bInterfaceSubClass = 1,
2158 .bInterfaceProtocol = 0,
2159 .driver_info = UVC_QUIRK_STREAM_NO_FID },
2160 + /* Syntek (Packard Bell EasyNote MX52 */
2161 + { .match_flags = USB_DEVICE_ID_MATCH_DEVICE
2162 + | USB_DEVICE_ID_MATCH_INT_INFO,
2163 + .idVendor = 0x174f,
2164 + .idProduct = 0x8a12,
2165 + .bInterfaceClass = USB_CLASS_VIDEO,
2166 + .bInterfaceSubClass = 1,
2167 + .bInterfaceProtocol = 0,
2168 + .driver_info = UVC_QUIRK_STREAM_NO_FID },
2169 /* Syntek (Asus F9SG) */
2170 { .match_flags = USB_DEVICE_ID_MATCH_DEVICE
2171 | USB_DEVICE_ID_MATCH_INT_INFO,
2172 @@ -2123,6 +2142,15 @@ static struct usb_device_id uvc_ids[] = {
2173 .bInterfaceSubClass = 1,
2174 .bInterfaceProtocol = 0,
2175 .driver_info = UVC_QUIRK_PROBE_MINMAX },
2176 + /* Arkmicro unbranded */
2177 + { .match_flags = USB_DEVICE_ID_MATCH_DEVICE
2178 + | USB_DEVICE_ID_MATCH_INT_INFO,
2179 + .idVendor = 0x18ec,
2180 + .idProduct = 0x3290,
2181 + .bInterfaceClass = USB_CLASS_VIDEO,
2182 + .bInterfaceSubClass = 1,
2183 + .bInterfaceProtocol = 0,
2184 + .driver_info = UVC_QUIRK_PROBE_DEF },
2185 /* Bodelin ProScopeHR */
2186 { .match_flags = USB_DEVICE_ID_MATCH_DEVICE
2187 | USB_DEVICE_ID_MATCH_DEV_HI
2188 diff --git a/drivers/media/video/uvc/uvcvideo.h b/drivers/media/video/uvc/uvcvideo.h
2189 index 2337585..b6f6f38 100644
2190 --- a/drivers/media/video/uvc/uvcvideo.h
2191 +++ b/drivers/media/video/uvc/uvcvideo.h
2192 @@ -113,6 +113,9 @@ struct uvc_xu_control {
2193 #define UVC_GUID_FORMAT_YUY2 \
2194 { 'Y', 'U', 'Y', '2', 0x00, 0x00, 0x10, 0x00, \
2195 0x80, 0x00, 0x00, 0xaa, 0x00, 0x38, 0x9b, 0x71}
2196 +#define UVC_GUID_FORMAT_YUY2_ISIGHT \
2197 + { 'Y', 'U', 'Y', '2', 0x00, 0x00, 0x10, 0x00, \
2198 + 0x80, 0x00, 0x00, 0x00, 0x00, 0x38, 0x9b, 0x71}
2199 #define UVC_GUID_FORMAT_NV12 \
2200 { 'N', 'V', '1', '2', 0x00, 0x00, 0x10, 0x00, \
2201 0x80, 0x00, 0x00, 0xaa, 0x00, 0x38, 0x9b, 0x71}
2202 @@ -128,11 +131,13 @@ struct uvc_xu_control {
2203 #define UVC_GUID_FORMAT_Y800 \
2204 { 'Y', '8', '0', '0', 0x00, 0x00, 0x10, 0x00, \
2205 0x80, 0x00, 0x00, 0xaa, 0x00, 0x38, 0x9b, 0x71}
2206 +#define UVC_GUID_FORMAT_Y16 \
2207 + { 'Y', '1', '6', ' ', 0x00, 0x00, 0x10, 0x00, \
2208 + 0x80, 0x00, 0x00, 0xaa, 0x00, 0x38, 0x9b, 0x71}
2209 #define UVC_GUID_FORMAT_BY8 \
2210 { 'B', 'Y', '8', ' ', 0x00, 0x00, 0x10, 0x00, \
2211 0x80, 0x00, 0x00, 0xaa, 0x00, 0x38, 0x9b, 0x71}
2212
2213 -
2214 /* ------------------------------------------------------------------------
2215 * Driver specific constants.
2216 */
2217 diff --git a/drivers/mmc/host/sdhci-s3c.c b/drivers/mmc/host/sdhci-s3c.c
2218 index 50997d2..676cd0c 100644
2219 --- a/drivers/mmc/host/sdhci-s3c.c
2220 +++ b/drivers/mmc/host/sdhci-s3c.c
2221 @@ -372,6 +372,26 @@ static int __devinit sdhci_s3c_probe(struct platform_device *pdev)
2222
2223 static int __devexit sdhci_s3c_remove(struct platform_device *pdev)
2224 {
2225 + struct sdhci_host *host = platform_get_drvdata(pdev);
2226 + struct sdhci_s3c *sc = sdhci_priv(host);
2227 + int ptr;
2228 +
2229 + sdhci_remove_host(host, 1);
2230 +
2231 + for (ptr = 0; ptr < 3; ptr++) {
2232 + clk_disable(sc->clk_bus[ptr]);
2233 + clk_put(sc->clk_bus[ptr]);
2234 + }
2235 + clk_disable(sc->clk_io);
2236 + clk_put(sc->clk_io);
2237 +
2238 + iounmap(host->ioaddr);
2239 + release_resource(sc->ioarea);
2240 + kfree(sc->ioarea);
2241 +
2242 + sdhci_free_host(host);
2243 + platform_set_drvdata(pdev, NULL);
2244 +
2245 return 0;
2246 }
2247
2248 diff --git a/drivers/net/3c503.c b/drivers/net/3c503.c
2249 index 66e0323..b74a0ea 100644
2250 --- a/drivers/net/3c503.c
2251 +++ b/drivers/net/3c503.c
2252 @@ -380,6 +380,12 @@ out:
2253 return retval;
2254 }
2255
2256 +static irqreturn_t el2_probe_interrupt(int irq, void *seen)
2257 +{
2258 + *(bool *)seen = true;
2259 + return IRQ_HANDLED;
2260 +}
2261 +
2262 static int
2263 el2_open(struct net_device *dev)
2264 {
2265 @@ -391,23 +397,35 @@ el2_open(struct net_device *dev)
2266
2267 outb(EGACFR_NORM, E33G_GACFR); /* Enable RAM and interrupts. */
2268 do {
2269 - retval = request_irq(*irqp, NULL, 0, "bogus", dev);
2270 - if (retval >= 0) {
2271 + bool seen;
2272 +
2273 + retval = request_irq(*irqp, el2_probe_interrupt, 0,
2274 + dev->name, &seen);
2275 + if (retval == -EBUSY)
2276 + continue;
2277 + if (retval < 0)
2278 + goto err_disable;
2279 +
2280 /* Twinkle the interrupt, and check if it's seen. */
2281 - unsigned long cookie = probe_irq_on();
2282 + seen = false;
2283 + smp_wmb();
2284 outb_p(0x04 << ((*irqp == 9) ? 2 : *irqp), E33G_IDCFR);
2285 outb_p(0x00, E33G_IDCFR);
2286 - if (*irqp == probe_irq_off(cookie) && /* It's a good IRQ line! */
2287 - ((retval = request_irq(dev->irq = *irqp,
2288 - eip_interrupt, 0,
2289 - dev->name, dev)) == 0))
2290 - break;
2291 - } else {
2292 - if (retval != -EBUSY)
2293 - return retval;
2294 - }
2295 + msleep(1);
2296 + free_irq(*irqp, el2_probe_interrupt);
2297 + if (!seen)
2298 + continue;
2299 +
2300 + retval = request_irq(dev->irq = *irqp, eip_interrupt, 0,
2301 + dev->name, dev);
2302 + if (retval == -EBUSY)
2303 + continue;
2304 + if (retval < 0)
2305 + goto err_disable;
2306 } while (*++irqp);
2307 +
2308 if (*irqp == 0) {
2309 + err_disable:
2310 outb(EGACFR_IRQOFF, E33G_GACFR); /* disable interrupts. */
2311 return -EAGAIN;
2312 }
2313 diff --git a/drivers/net/cpmac.c b/drivers/net/cpmac.c
2314 index 8d0be26..6e739bb 100644
2315 --- a/drivers/net/cpmac.c
2316 +++ b/drivers/net/cpmac.c
2317 @@ -1174,7 +1174,8 @@ static int __devinit cpmac_probe(struct platform_device *pdev)
2318 if (netif_msg_drv(priv))
2319 printk(KERN_ERR "%s: Could not attach to PHY\n",
2320 dev->name);
2321 - return PTR_ERR(priv->phy);
2322 + rc = PTR_ERR(priv->phy);
2323 + goto fail;
2324 }
2325
2326 if ((rc = register_netdev(dev))) {
2327 diff --git a/drivers/net/cxgb3/ael1002.c b/drivers/net/cxgb3/ael1002.c
2328 index 5248f9e..35cd367 100644
2329 --- a/drivers/net/cxgb3/ael1002.c
2330 +++ b/drivers/net/cxgb3/ael1002.c
2331 @@ -934,7 +934,7 @@ static struct cphy_ops xaui_direct_ops = {
2332 int t3_xaui_direct_phy_prep(struct cphy *phy, struct adapter *adapter,
2333 int phy_addr, const struct mdio_ops *mdio_ops)
2334 {
2335 - cphy_init(phy, adapter, MDIO_PRTAD_NONE, &xaui_direct_ops, mdio_ops,
2336 + cphy_init(phy, adapter, phy_addr, &xaui_direct_ops, mdio_ops,
2337 SUPPORTED_10000baseT_Full | SUPPORTED_AUI | SUPPORTED_TP,
2338 "10GBASE-CX4");
2339 return 0;
2340 diff --git a/drivers/net/dm9000.c b/drivers/net/dm9000.c
2341 index b377300..55cab1d 100644
2342 --- a/drivers/net/dm9000.c
2343 +++ b/drivers/net/dm9000.c
2344 @@ -475,17 +475,13 @@ static uint32_t dm9000_get_rx_csum(struct net_device *dev)
2345 return dm->rx_csum;
2346 }
2347
2348 -static int dm9000_set_rx_csum(struct net_device *dev, uint32_t data)
2349 +static int dm9000_set_rx_csum_unlocked(struct net_device *dev, uint32_t data)
2350 {
2351 board_info_t *dm = to_dm9000_board(dev);
2352 - unsigned long flags;
2353
2354 if (dm->can_csum) {
2355 dm->rx_csum = data;
2356 -
2357 - spin_lock_irqsave(&dm->lock, flags);
2358 iow(dm, DM9000_RCSR, dm->rx_csum ? RCSR_CSUM : 0);
2359 - spin_unlock_irqrestore(&dm->lock, flags);
2360
2361 return 0;
2362 }
2363 @@ -493,6 +489,19 @@ static int dm9000_set_rx_csum(struct net_device *dev, uint32_t data)
2364 return -EOPNOTSUPP;
2365 }
2366
2367 +static int dm9000_set_rx_csum(struct net_device *dev, uint32_t data)
2368 +{
2369 + board_info_t *dm = to_dm9000_board(dev);
2370 + unsigned long flags;
2371 + int ret;
2372 +
2373 + spin_lock_irqsave(&dm->lock, flags);
2374 + ret = dm9000_set_rx_csum_unlocked(dev, data);
2375 + spin_unlock_irqrestore(&dm->lock, flags);
2376 +
2377 + return ret;
2378 +}
2379 +
2380 static int dm9000_set_tx_csum(struct net_device *dev, uint32_t data)
2381 {
2382 board_info_t *dm = to_dm9000_board(dev);
2383 @@ -721,7 +730,7 @@ static unsigned char dm9000_type_to_char(enum dm9000_type type)
2384 * Set DM9000 multicast address
2385 */
2386 static void
2387 -dm9000_hash_table(struct net_device *dev)
2388 +dm9000_hash_table_unlocked(struct net_device *dev)
2389 {
2390 board_info_t *db = netdev_priv(dev);
2391 struct dev_mc_list *mcptr = dev->mc_list;
2392 @@ -730,12 +739,9 @@ dm9000_hash_table(struct net_device *dev)
2393 u32 hash_val;
2394 u16 hash_table[4];
2395 u8 rcr = RCR_DIS_LONG | RCR_DIS_CRC | RCR_RXEN;
2396 - unsigned long flags;
2397
2398 dm9000_dbg(db, 1, "entering %s\n", __func__);
2399
2400 - spin_lock_irqsave(&db->lock, flags);
2401 -
2402 for (i = 0, oft = DM9000_PAR; i < 6; i++, oft++)
2403 iow(db, oft, dev->dev_addr[i]);
2404
2405 @@ -765,6 +771,16 @@ dm9000_hash_table(struct net_device *dev)
2406 }
2407
2408 iow(db, DM9000_RCR, rcr);
2409 +}
2410 +
2411 +static void
2412 +dm9000_hash_table(struct net_device *dev)
2413 +{
2414 + board_info_t *db = netdev_priv(dev);
2415 + unsigned long flags;
2416 +
2417 + spin_lock_irqsave(&db->lock, flags);
2418 + dm9000_hash_table_unlocked(dev);
2419 spin_unlock_irqrestore(&db->lock, flags);
2420 }
2421
2422 @@ -784,7 +800,7 @@ dm9000_init_dm9000(struct net_device *dev)
2423 db->io_mode = ior(db, DM9000_ISR) >> 6; /* ISR bit7:6 keeps I/O mode */
2424
2425 /* Checksum mode */
2426 - dm9000_set_rx_csum(dev, db->rx_csum);
2427 + dm9000_set_rx_csum_unlocked(dev, db->rx_csum);
2428
2429 /* GPIO0 on pre-activate PHY */
2430 iow(db, DM9000_GPR, 0); /* REG_1F bit0 activate phyxcer */
2431 @@ -811,7 +827,7 @@ dm9000_init_dm9000(struct net_device *dev)
2432 iow(db, DM9000_ISR, ISR_CLR_STATUS); /* Clear interrupt status */
2433
2434 /* Set address filter table */
2435 - dm9000_hash_table(dev);
2436 + dm9000_hash_table_unlocked(dev);
2437
2438 imr = IMR_PAR | IMR_PTM | IMR_PRM;
2439 if (db->type != TYPE_DM9000E)
2440 diff --git a/drivers/net/forcedeth.c b/drivers/net/forcedeth.c
2441 index 3c34048..a7b5a82 100644
2442 --- a/drivers/net/forcedeth.c
2443 +++ b/drivers/net/forcedeth.c
2444 @@ -5900,7 +5900,7 @@ static int __devinit nv_probe(struct pci_dev *pci_dev, const struct pci_device_i
2445 /* Limit the number of tx's outstanding for hw bug */
2446 if (id->driver_data & DEV_NEED_TX_LIMIT) {
2447 np->tx_limit = 1;
2448 - if ((id->driver_data & DEV_NEED_TX_LIMIT2) &&
2449 + if (((id->driver_data & DEV_NEED_TX_LIMIT2) == DEV_NEED_TX_LIMIT2) &&
2450 pci_dev->revision >= 0xA2)
2451 np->tx_limit = 0;
2452 }
2453 diff --git a/drivers/net/r8169.c b/drivers/net/r8169.c
2454 index 787befc..69f84c8 100644
2455 --- a/drivers/net/r8169.c
2456 +++ b/drivers/net/r8169.c
2457 @@ -557,6 +557,11 @@ static void mdio_write(void __iomem *ioaddr, int reg_addr, int value)
2458 break;
2459 udelay(25);
2460 }
2461 + /*
2462 + * According to hardware specs a 20us delay is required after write
2463 + * complete indication, but before sending next command.
2464 + */
2465 + udelay(20);
2466 }
2467
2468 static int mdio_read(void __iomem *ioaddr, int reg_addr)
2469 @@ -576,6 +581,12 @@ static int mdio_read(void __iomem *ioaddr, int reg_addr)
2470 }
2471 udelay(25);
2472 }
2473 + /*
2474 + * According to hardware specs a 20us delay is required after read
2475 + * complete indication, but before sending next command.
2476 + */
2477 + udelay(20);
2478 +
2479 return value;
2480 }
2481
2482 diff --git a/drivers/net/sky2.c b/drivers/net/sky2.c
2483 index 67249c3..5520f16 100644
2484 --- a/drivers/net/sky2.c
2485 +++ b/drivers/net/sky2.c
2486 @@ -716,11 +716,24 @@ static void sky2_phy_power_down(struct sky2_hw *hw, unsigned port)
2487 sky2_write8(hw, B2_TST_CTRL1, TST_CFG_WRITE_OFF);
2488 }
2489
2490 +/* Enable Rx/Tx */
2491 +static void sky2_enable_rx_tx(struct sky2_port *sky2)
2492 +{
2493 + struct sky2_hw *hw = sky2->hw;
2494 + unsigned port = sky2->port;
2495 + u16 reg;
2496 +
2497 + reg = gma_read16(hw, port, GM_GP_CTRL);
2498 + reg |= GM_GPCR_RX_ENA | GM_GPCR_TX_ENA;
2499 + gma_write16(hw, port, GM_GP_CTRL, reg);
2500 +}
2501 +
2502 /* Force a renegotiation */
2503 static void sky2_phy_reinit(struct sky2_port *sky2)
2504 {
2505 spin_lock_bh(&sky2->phy_lock);
2506 sky2_phy_init(sky2->hw, sky2->port);
2507 + sky2_enable_rx_tx(sky2);
2508 spin_unlock_bh(&sky2->phy_lock);
2509 }
2510
2511 @@ -1971,7 +1984,6 @@ static void sky2_link_up(struct sky2_port *sky2)
2512 {
2513 struct sky2_hw *hw = sky2->hw;
2514 unsigned port = sky2->port;
2515 - u16 reg;
2516 static const char *fc_name[] = {
2517 [FC_NONE] = "none",
2518 [FC_TX] = "tx",
2519 @@ -1979,10 +1991,7 @@ static void sky2_link_up(struct sky2_port *sky2)
2520 [FC_BOTH] = "both",
2521 };
2522
2523 - /* enable Rx/Tx */
2524 - reg = gma_read16(hw, port, GM_GP_CTRL);
2525 - reg |= GM_GPCR_RX_ENA | GM_GPCR_TX_ENA;
2526 - gma_write16(hw, port, GM_GP_CTRL, reg);
2527 + sky2_enable_rx_tx(sky2);
2528
2529 gm_phy_write(hw, port, PHY_MARV_INT_MASK, PHY_M_DEF_MSK);
2530
2531 diff --git a/drivers/net/usb/pegasus.h b/drivers/net/usb/pegasus.h
2532 index 5d02f02..7d07037 100644
2533 --- a/drivers/net/usb/pegasus.h
2534 +++ b/drivers/net/usb/pegasus.h
2535 @@ -254,7 +254,7 @@ PEGASUS_DEV( "IO DATA USB ET/TX", VENDOR_IODATA, 0x0904,
2536 DEFAULT_GPIO_RESET )
2537 PEGASUS_DEV( "IO DATA USB ET/TX-S", VENDOR_IODATA, 0x0913,
2538 DEFAULT_GPIO_RESET | PEGASUS_II )
2539 -PEGASUS_DEV( "IO DATA USB ETX-US2", VENDOR_IODATA, 0x092a,
2540 +PEGASUS_DEV( "IO DATA USB ETX-US2", VENDOR_IODATA, 0x093a,
2541 DEFAULT_GPIO_RESET | PEGASUS_II )
2542 PEGASUS_DEV( "Kingston KNU101TX Ethernet", VENDOR_KINGSTON, 0x000a,
2543 DEFAULT_GPIO_RESET)
2544 diff --git a/drivers/net/veth.c b/drivers/net/veth.c
2545 index 3a15de5..baf0b51 100644
2546 --- a/drivers/net/veth.c
2547 +++ b/drivers/net/veth.c
2548 @@ -186,7 +186,6 @@ tx_drop:
2549 return NETDEV_TX_OK;
2550
2551 rx_drop:
2552 - kfree_skb(skb);
2553 rcv_stats->rx_dropped++;
2554 return NETDEV_TX_OK;
2555 }
2556 diff --git a/drivers/net/wireless/ath/ath5k/attach.c b/drivers/net/wireless/ath/ath5k/attach.c
2557 index 4228444..6b00074 100644
2558 --- a/drivers/net/wireless/ath/ath5k/attach.c
2559 +++ b/drivers/net/wireless/ath/ath5k/attach.c
2560 @@ -123,6 +123,7 @@ int ath5k_hw_attach(struct ath5k_softc *sc)
2561 ah->ah_cw_min = AR5K_TUNE_CWMIN;
2562 ah->ah_limit_tx_retries = AR5K_INIT_TX_RETRY;
2563 ah->ah_software_retry = false;
2564 + ah->ah_current_channel = &sc->channels[0];
2565
2566 /*
2567 * Find the mac version
2568 diff --git a/drivers/net/wireless/ath/ath5k/base.c b/drivers/net/wireless/ath/ath5k/base.c
2569 index d377809..e6e9587 100644
2570 --- a/drivers/net/wireless/ath/ath5k/base.c
2571 +++ b/drivers/net/wireless/ath/ath5k/base.c
2572 @@ -1851,11 +1851,6 @@ ath5k_tasklet_rx(unsigned long data)
2573 return;
2574 }
2575
2576 - if (unlikely(rs.rs_more)) {
2577 - ATH5K_WARN(sc, "unsupported jumbo\n");
2578 - goto next;
2579 - }
2580 -
2581 if (unlikely(rs.rs_status)) {
2582 if (rs.rs_status & AR5K_RXERR_PHY)
2583 goto next;
2584 @@ -1885,6 +1880,8 @@ ath5k_tasklet_rx(unsigned long data)
2585 sc->opmode != NL80211_IFTYPE_MONITOR)
2586 goto next;
2587 }
2588 + if (unlikely(rs.rs_more))
2589 + goto next;
2590 accept:
2591 next_skb = ath5k_rx_skb_alloc(sc, &next_skb_addr);
2592
2593 diff --git a/drivers/net/wireless/ath/ath9k/initvals.h b/drivers/net/wireless/ath/ath9k/initvals.h
2594 index 8a3bf3a..7203f00 100644
2595 --- a/drivers/net/wireless/ath/ath9k/initvals.h
2596 +++ b/drivers/net/wireless/ath/ath9k/initvals.h
2597 @@ -246,7 +246,7 @@ static const u32 ar5416Common[][2] = {
2598 { 0x00008258, 0x00000000 },
2599 { 0x0000825c, 0x400000ff },
2600 { 0x00008260, 0x00080922 },
2601 - { 0x00008264, 0xa8000010 },
2602 + { 0x00008264, 0x88000010 },
2603 { 0x00008270, 0x00000000 },
2604 { 0x00008274, 0x40000000 },
2605 { 0x00008278, 0x003e4180 },
2606 @@ -2766,7 +2766,7 @@ static const u32 ar9280Common_9280_2[][2] = {
2607 { 0x00008258, 0x00000000 },
2608 { 0x0000825c, 0x400000ff },
2609 { 0x00008260, 0x00080922 },
2610 - { 0x00008264, 0xa8a00010 },
2611 + { 0x00008264, 0x88a00010 },
2612 { 0x00008270, 0x00000000 },
2613 { 0x00008274, 0x40000000 },
2614 { 0x00008278, 0x003e4180 },
2615 @@ -3936,7 +3936,7 @@ static const u_int32_t ar9285Common_9285[][2] = {
2616 { 0x00008258, 0x00000000 },
2617 { 0x0000825c, 0x400000ff },
2618 { 0x00008260, 0x00080922 },
2619 - { 0x00008264, 0xa8a00010 },
2620 + { 0x00008264, 0x88a00010 },
2621 { 0x00008270, 0x00000000 },
2622 { 0x00008274, 0x40000000 },
2623 { 0x00008278, 0x003e4180 },
2624 @@ -5073,7 +5073,7 @@ static const u_int32_t ar9287Common_9287_1_0[][2] = {
2625 { 0x00008258, 0x00000000 },
2626 { 0x0000825c, 0x400000ff },
2627 { 0x00008260, 0x00080922 },
2628 - { 0x00008264, 0xa8a00010 },
2629 + { 0x00008264, 0x88a00010 },
2630 { 0x00008270, 0x00000000 },
2631 { 0x00008274, 0x40000000 },
2632 { 0x00008278, 0x003e4180 },
2633 diff --git a/drivers/net/wireless/hostap/hostap_cs.c b/drivers/net/wireless/hostap/hostap_cs.c
2634 index c9640a3..b2db902 100644
2635 --- a/drivers/net/wireless/hostap/hostap_cs.c
2636 +++ b/drivers/net/wireless/hostap/hostap_cs.c
2637 @@ -602,6 +602,7 @@ static int prism2_config(struct pcmcia_device *link)
2638 local_info_t *local;
2639 int ret = 1;
2640 struct hostap_cs_priv *hw_priv;
2641 + unsigned long flags;
2642
2643 PDEBUG(DEBUG_FLOW, "prism2_config()\n");
2644
2645 @@ -636,6 +637,12 @@ static int prism2_config(struct pcmcia_device *link)
2646 link->dev_node = &hw_priv->node;
2647
2648 /*
2649 + * Make sure the IRQ handler cannot proceed until at least
2650 + * dev->base_addr is initialized.
2651 + */
2652 + spin_lock_irqsave(&local->irq_init_lock, flags);
2653 +
2654 + /*
2655 * Allocate an interrupt line. Note that this does not assign a
2656 * handler to the interrupt, unless the 'Handler' member of the
2657 * irq structure is initialized.
2658 @@ -645,7 +652,7 @@ static int prism2_config(struct pcmcia_device *link)
2659 link->irq.Handler = prism2_interrupt;
2660 ret = pcmcia_request_irq(link, &link->irq);
2661 if (ret)
2662 - goto failed;
2663 + goto failed_unlock;
2664 }
2665
2666 /*
2667 @@ -655,11 +662,13 @@ static int prism2_config(struct pcmcia_device *link)
2668 */
2669 ret = pcmcia_request_configuration(link, &link->conf);
2670 if (ret)
2671 - goto failed;
2672 + goto failed_unlock;
2673
2674 dev->irq = link->irq.AssignedIRQ;
2675 dev->base_addr = link->io.BasePort1;
2676
2677 + spin_unlock_irqrestore(&local->irq_init_lock, flags);
2678 +
2679 /* Finally, report what we've done */
2680 printk(KERN_INFO "%s: index 0x%02x: ",
2681 dev_info, link->conf.ConfigIndex);
2682 @@ -688,6 +697,8 @@ static int prism2_config(struct pcmcia_device *link)
2683 }
2684 return ret;
2685
2686 + failed_unlock:
2687 + spin_unlock_irqrestore(&local->irq_init_lock, flags);
2688 failed:
2689 kfree(hw_priv);
2690 prism2_release((u_long)link);
2691 diff --git a/drivers/net/wireless/hostap/hostap_hw.c b/drivers/net/wireless/hostap/hostap_hw.c
2692 index ff9b5c8..2f999fc 100644
2693 --- a/drivers/net/wireless/hostap/hostap_hw.c
2694 +++ b/drivers/net/wireless/hostap/hostap_hw.c
2695 @@ -2621,6 +2621,18 @@ static irqreturn_t prism2_interrupt(int irq, void *dev_id)
2696 iface = netdev_priv(dev);
2697 local = iface->local;
2698
2699 + /* Detect early interrupt before driver is fully configued */
2700 + spin_lock(&local->irq_init_lock);
2701 + if (!dev->base_addr) {
2702 + if (net_ratelimit()) {
2703 + printk(KERN_DEBUG "%s: Interrupt, but dev not configured\n",
2704 + dev->name);
2705 + }
2706 + spin_unlock(&local->irq_init_lock);
2707 + return IRQ_HANDLED;
2708 + }
2709 + spin_unlock(&local->irq_init_lock);
2710 +
2711 prism2_io_debug_add(dev, PRISM2_IO_DEBUG_CMD_INTERRUPT, 0, 0);
2712
2713 if (local->func->card_present && !local->func->card_present(local)) {
2714 @@ -3138,6 +3150,7 @@ prism2_init_local_data(struct prism2_helper_functions *funcs, int card_idx,
2715 spin_lock_init(&local->cmdlock);
2716 spin_lock_init(&local->baplock);
2717 spin_lock_init(&local->lock);
2718 + spin_lock_init(&local->irq_init_lock);
2719 mutex_init(&local->rid_bap_mtx);
2720
2721 if (card_idx < 0 || card_idx >= MAX_PARM_DEVICES)
2722 diff --git a/drivers/net/wireless/hostap/hostap_wlan.h b/drivers/net/wireless/hostap/hostap_wlan.h
2723 index 3d23891..1ba33be 100644
2724 --- a/drivers/net/wireless/hostap/hostap_wlan.h
2725 +++ b/drivers/net/wireless/hostap/hostap_wlan.h
2726 @@ -654,7 +654,7 @@ struct local_info {
2727 rwlock_t iface_lock; /* hostap_interfaces read lock; use write lock
2728 * when removing entries from the list.
2729 * TX and RX paths can use read lock. */
2730 - spinlock_t cmdlock, baplock, lock;
2731 + spinlock_t cmdlock, baplock, lock, irq_init_lock;
2732 struct mutex rid_bap_mtx;
2733 u16 infofid; /* MAC buffer id for info frame */
2734 /* txfid, intransmitfid, next_txtid, and next_alloc are protected by
2735 diff --git a/drivers/net/wireless/iwlwifi/iwl-scan.c b/drivers/net/wireless/iwlwifi/iwl-scan.c
2736 index 8f1b850..8bc2105 100644
2737 --- a/drivers/net/wireless/iwlwifi/iwl-scan.c
2738 +++ b/drivers/net/wireless/iwlwifi/iwl-scan.c
2739 @@ -812,6 +812,7 @@ void iwl_bg_abort_scan(struct work_struct *work)
2740
2741 mutex_lock(&priv->mutex);
2742
2743 + cancel_delayed_work_sync(&priv->scan_check);
2744 set_bit(STATUS_SCAN_ABORTING, &priv->status);
2745 iwl_send_scan_abort(priv);
2746
2747 diff --git a/drivers/net/wireless/iwlwifi/iwl-tx.c b/drivers/net/wireless/iwlwifi/iwl-tx.c
2748 index e0ce039..2f53121 100644
2749 --- a/drivers/net/wireless/iwlwifi/iwl-tx.c
2750 +++ b/drivers/net/wireless/iwlwifi/iwl-tx.c
2751 @@ -1553,6 +1553,11 @@ void iwl_rx_reply_compressed_ba(struct iwl_priv *priv,
2752 sta_id = ba_resp->sta_id;
2753 tid = ba_resp->tid;
2754 agg = &priv->stations[sta_id].tid[tid].agg;
2755 + if (unlikely(agg->txq_id != scd_flow)) {
2756 + IWL_ERR(priv, "BA scd_flow %d does not match txq_id %d\n",
2757 + scd_flow, agg->txq_id);
2758 + return;
2759 + }
2760
2761 /* Find index just before block-ack window */
2762 index = iwl_queue_dec_wrap(ba_resp_scd_ssn & 0xff, txq->q.n_bd);
2763 diff --git a/drivers/net/wireless/libertas/if_sdio.c b/drivers/net/wireless/libertas/if_sdio.c
2764 index 7a73f62..33206a9 100644
2765 --- a/drivers/net/wireless/libertas/if_sdio.c
2766 +++ b/drivers/net/wireless/libertas/if_sdio.c
2767 @@ -34,6 +34,8 @@
2768 #include <linux/mmc/card.h>
2769 #include <linux/mmc/sdio_func.h>
2770 #include <linux/mmc/sdio_ids.h>
2771 +#include <linux/mmc/sdio.h>
2772 +#include <linux/mmc/host.h>
2773
2774 #include "host.h"
2775 #include "decl.h"
2776 @@ -942,6 +944,7 @@ static int if_sdio_probe(struct sdio_func *func,
2777 int ret, i;
2778 unsigned int model;
2779 struct if_sdio_packet *packet;
2780 + struct mmc_host *host = func->card->host;
2781
2782 lbs_deb_enter(LBS_DEB_SDIO);
2783
2784 @@ -1022,6 +1025,25 @@ static int if_sdio_probe(struct sdio_func *func,
2785 if (ret)
2786 goto disable;
2787
2788 + /* For 1-bit transfers to the 8686 model, we need to enable the
2789 + * interrupt flag in the CCCR register. Set the MMC_QUIRK_LENIENT_FN0
2790 + * bit to allow access to non-vendor registers. */
2791 + if ((card->model == IF_SDIO_MODEL_8686) &&
2792 + (host->caps & MMC_CAP_SDIO_IRQ) &&
2793 + (host->ios.bus_width == MMC_BUS_WIDTH_1)) {
2794 + u8 reg;
2795 +
2796 + func->card->quirks |= MMC_QUIRK_LENIENT_FN0;
2797 + reg = sdio_f0_readb(func, SDIO_CCCR_IF, &ret);
2798 + if (ret)
2799 + goto release_int;
2800 +
2801 + reg |= SDIO_BUS_ECSI;
2802 + sdio_f0_writeb(func, reg, SDIO_CCCR_IF, &ret);
2803 + if (ret)
2804 + goto release_int;
2805 + }
2806 +
2807 card->ioport = sdio_readb(func, IF_SDIO_IOPORT, &ret);
2808 if (ret)
2809 goto release_int;
2810 diff --git a/drivers/net/wireless/p54/p54pci.c b/drivers/net/wireless/p54/p54pci.c
2811 index 41d33cd..7ff033e 100644
2812 --- a/drivers/net/wireless/p54/p54pci.c
2813 +++ b/drivers/net/wireless/p54/p54pci.c
2814 @@ -40,6 +40,8 @@ static struct pci_device_id p54p_table[] __devinitdata = {
2815 { PCI_DEVICE(0x1260, 0x3877) },
2816 /* Intersil PRISM Javelin/Xbow Wireless LAN adapter */
2817 { PCI_DEVICE(0x1260, 0x3886) },
2818 + /* Intersil PRISM Xbow Wireless LAN adapter (Symbol AP-300) */
2819 + { PCI_DEVICE(0x1260, 0xffff) },
2820 { },
2821 };
2822
2823 diff --git a/drivers/rtc/rtc-ds1307.c b/drivers/rtc/rtc-ds1307.c
2824 index c4ec5c1..a01bbe2 100644
2825 --- a/drivers/rtc/rtc-ds1307.c
2826 +++ b/drivers/rtc/rtc-ds1307.c
2827 @@ -775,7 +775,7 @@ static int __devinit ds1307_probe(struct i2c_client *client,
2828
2829 read_rtc:
2830 /* read RTC registers */
2831 - tmp = ds1307->read_block_data(ds1307->client, 0, 8, buf);
2832 + tmp = ds1307->read_block_data(ds1307->client, ds1307->offset, 8, buf);
2833 if (tmp != 8) {
2834 pr_debug("read error %d\n", tmp);
2835 err = -EIO;
2836 @@ -860,7 +860,7 @@ read_rtc:
2837 if (ds1307->regs[DS1307_REG_HOUR] & DS1307_BIT_PM)
2838 tmp += 12;
2839 i2c_smbus_write_byte_data(client,
2840 - DS1307_REG_HOUR,
2841 + ds1307->offset + DS1307_REG_HOUR,
2842 bin2bcd(tmp));
2843 }
2844
2845 diff --git a/drivers/scsi/aacraid/commctrl.c b/drivers/scsi/aacraid/commctrl.c
2846 index 9c0c911..1a5bf57 100644
2847 --- a/drivers/scsi/aacraid/commctrl.c
2848 +++ b/drivers/scsi/aacraid/commctrl.c
2849 @@ -655,9 +655,9 @@ static int aac_send_raw_srb(struct aac_dev* dev, void __user * arg)
2850 /* Does this really need to be GFP_DMA? */
2851 p = kmalloc(usg->sg[i].count,GFP_KERNEL|__GFP_DMA);
2852 if(!p) {
2853 - kfree (usg);
2854 - dprintk((KERN_DEBUG"aacraid: Could not allocate SG buffer - size = %d buffer number %d of %d\n",
2855 + dprintk((KERN_DEBUG "aacraid: Could not allocate SG buffer - size = %d buffer number %d of %d\n",
2856 usg->sg[i].count,i,usg->count));
2857 + kfree(usg);
2858 rcode = -ENOMEM;
2859 goto cleanup;
2860 }
2861 diff --git a/drivers/serial/cpm_uart/cpm_uart_core.c b/drivers/serial/cpm_uart/cpm_uart_core.c
2862 index 300cea7..7feb902 100644
2863 --- a/drivers/serial/cpm_uart/cpm_uart_core.c
2864 +++ b/drivers/serial/cpm_uart/cpm_uart_core.c
2865 @@ -930,6 +930,83 @@ static void cpm_uart_config_port(struct uart_port *port, int flags)
2866 }
2867 }
2868
2869 +#if defined(CONFIG_CONSOLE_POLL) || defined(CONFIG_SERIAL_CPM_CONSOLE)
2870 +/*
2871 + * Write a string to the serial port
2872 + * Note that this is called with interrupts already disabled
2873 + */
2874 +static void cpm_uart_early_write(struct uart_cpm_port *pinfo,
2875 + const char *string, u_int count)
2876 +{
2877 + unsigned int i;
2878 + cbd_t __iomem *bdp, *bdbase;
2879 + unsigned char *cpm_outp_addr;
2880 +
2881 + /* Get the address of the host memory buffer.
2882 + */
2883 + bdp = pinfo->tx_cur;
2884 + bdbase = pinfo->tx_bd_base;
2885 +
2886 + /*
2887 + * Now, do each character. This is not as bad as it looks
2888 + * since this is a holding FIFO and not a transmitting FIFO.
2889 + * We could add the complexity of filling the entire transmit
2890 + * buffer, but we would just wait longer between accesses......
2891 + */
2892 + for (i = 0; i < count; i++, string++) {
2893 + /* Wait for transmitter fifo to empty.
2894 + * Ready indicates output is ready, and xmt is doing
2895 + * that, not that it is ready for us to send.
2896 + */
2897 + while ((in_be16(&bdp->cbd_sc) & BD_SC_READY) != 0)
2898 + ;
2899 +
2900 + /* Send the character out.
2901 + * If the buffer address is in the CPM DPRAM, don't
2902 + * convert it.
2903 + */
2904 + cpm_outp_addr = cpm2cpu_addr(in_be32(&bdp->cbd_bufaddr),
2905 + pinfo);
2906 + *cpm_outp_addr = *string;
2907 +
2908 + out_be16(&bdp->cbd_datlen, 1);
2909 + setbits16(&bdp->cbd_sc, BD_SC_READY);
2910 +
2911 + if (in_be16(&bdp->cbd_sc) & BD_SC_WRAP)
2912 + bdp = bdbase;
2913 + else
2914 + bdp++;
2915 +
2916 + /* if a LF, also do CR... */
2917 + if (*string == 10) {
2918 + while ((in_be16(&bdp->cbd_sc) & BD_SC_READY) != 0)
2919 + ;
2920 +
2921 + cpm_outp_addr = cpm2cpu_addr(in_be32(&bdp->cbd_bufaddr),
2922 + pinfo);
2923 + *cpm_outp_addr = 13;
2924 +
2925 + out_be16(&bdp->cbd_datlen, 1);
2926 + setbits16(&bdp->cbd_sc, BD_SC_READY);
2927 +
2928 + if (in_be16(&bdp->cbd_sc) & BD_SC_WRAP)
2929 + bdp = bdbase;
2930 + else
2931 + bdp++;
2932 + }
2933 + }
2934 +
2935 + /*
2936 + * Finally, Wait for transmitter & holding register to empty
2937 + * and restore the IER
2938 + */
2939 + while ((in_be16(&bdp->cbd_sc) & BD_SC_READY) != 0)
2940 + ;
2941 +
2942 + pinfo->tx_cur = bdp;
2943 +}
2944 +#endif
2945 +
2946 #ifdef CONFIG_CONSOLE_POLL
2947 /* Serial polling routines for writing and reading from the uart while
2948 * in an interrupt or debug context.
2949 @@ -999,7 +1076,7 @@ static void cpm_put_poll_char(struct uart_port *port,
2950 static char ch[2];
2951
2952 ch[0] = (char)c;
2953 - cpm_uart_early_write(pinfo->port.line, ch, 1);
2954 + cpm_uart_early_write(pinfo, ch, 1);
2955 }
2956 #endif /* CONFIG_CONSOLE_POLL */
2957
2958 @@ -1130,9 +1207,6 @@ static void cpm_uart_console_write(struct console *co, const char *s,
2959 u_int count)
2960 {
2961 struct uart_cpm_port *pinfo = &cpm_uart_ports[co->index];
2962 - unsigned int i;
2963 - cbd_t __iomem *bdp, *bdbase;
2964 - unsigned char *cp;
2965 unsigned long flags;
2966 int nolock = oops_in_progress;
2967
2968 @@ -1142,66 +1216,7 @@ static void cpm_uart_console_write(struct console *co, const char *s,
2969 spin_lock_irqsave(&pinfo->port.lock, flags);
2970 }
2971
2972 - /* Get the address of the host memory buffer.
2973 - */
2974 - bdp = pinfo->tx_cur;
2975 - bdbase = pinfo->tx_bd_base;
2976 -
2977 - /*
2978 - * Now, do each character. This is not as bad as it looks
2979 - * since this is a holding FIFO and not a transmitting FIFO.
2980 - * We could add the complexity of filling the entire transmit
2981 - * buffer, but we would just wait longer between accesses......
2982 - */
2983 - for (i = 0; i < count; i++, s++) {
2984 - /* Wait for transmitter fifo to empty.
2985 - * Ready indicates output is ready, and xmt is doing
2986 - * that, not that it is ready for us to send.
2987 - */
2988 - while ((in_be16(&bdp->cbd_sc) & BD_SC_READY) != 0)
2989 - ;
2990 -
2991 - /* Send the character out.
2992 - * If the buffer address is in the CPM DPRAM, don't
2993 - * convert it.
2994 - */
2995 - cp = cpm2cpu_addr(in_be32(&bdp->cbd_bufaddr), pinfo);
2996 - *cp = *s;
2997 -
2998 - out_be16(&bdp->cbd_datlen, 1);
2999 - setbits16(&bdp->cbd_sc, BD_SC_READY);
3000 -
3001 - if (in_be16(&bdp->cbd_sc) & BD_SC_WRAP)
3002 - bdp = bdbase;
3003 - else
3004 - bdp++;
3005 -
3006 - /* if a LF, also do CR... */
3007 - if (*s == 10) {
3008 - while ((in_be16(&bdp->cbd_sc) & BD_SC_READY) != 0)
3009 - ;
3010 -
3011 - cp = cpm2cpu_addr(in_be32(&bdp->cbd_bufaddr), pinfo);
3012 - *cp = 13;
3013 -
3014 - out_be16(&bdp->cbd_datlen, 1);
3015 - setbits16(&bdp->cbd_sc, BD_SC_READY);
3016 -
3017 - if (in_be16(&bdp->cbd_sc) & BD_SC_WRAP)
3018 - bdp = bdbase;
3019 - else
3020 - bdp++;
3021 - }
3022 - }
3023 -
3024 - /*
3025 - * Finally, Wait for transmitter & holding register to empty
3026 - * and restore the IER
3027 - */
3028 - while ((in_be16(&bdp->cbd_sc) & BD_SC_READY) != 0)
3029 - ;
3030 -
3031 - pinfo->tx_cur = bdp;
3032 + cpm_uart_early_write(pinfo, s, count);
3033
3034 if (unlikely(nolock)) {
3035 local_irq_restore(flags);
3036 diff --git a/drivers/spi/spi_mpc8xxx.c b/drivers/spi/spi_mpc8xxx.c
3037 index 1fb2a6e..3fc4103 100644
3038 --- a/drivers/spi/spi_mpc8xxx.c
3039 +++ b/drivers/spi/spi_mpc8xxx.c
3040 @@ -65,28 +65,6 @@ struct mpc8xxx_spi_reg {
3041 __be32 receive;
3042 };
3043
3044 -/* SPI Parameter RAM */
3045 -struct spi_pram {
3046 - __be16 rbase; /* Rx Buffer descriptor base address */
3047 - __be16 tbase; /* Tx Buffer descriptor base address */
3048 - u8 rfcr; /* Rx function code */
3049 - u8 tfcr; /* Tx function code */
3050 - __be16 mrblr; /* Max receive buffer length */
3051 - __be32 rstate; /* Internal */
3052 - __be32 rdp; /* Internal */
3053 - __be16 rbptr; /* Internal */
3054 - __be16 rbc; /* Internal */
3055 - __be32 rxtmp; /* Internal */
3056 - __be32 tstate; /* Internal */
3057 - __be32 tdp; /* Internal */
3058 - __be16 tbptr; /* Internal */
3059 - __be16 tbc; /* Internal */
3060 - __be32 txtmp; /* Internal */
3061 - __be32 res; /* Tx temp. */
3062 - __be16 rpbase; /* Relocation pointer (CPM1 only) */
3063 - __be16 res1; /* Reserved */
3064 -};
3065 -
3066 /* SPI Controller mode register definitions */
3067 #define SPMODE_LOOP (1 << 30)
3068 #define SPMODE_CI_INACTIVEHIGH (1 << 29)
3069 diff --git a/drivers/ssb/driver_chipcommon.c b/drivers/ssb/driver_chipcommon.c
3070 index 9681536..bbf1cb2 100644
3071 --- a/drivers/ssb/driver_chipcommon.c
3072 +++ b/drivers/ssb/driver_chipcommon.c
3073 @@ -233,6 +233,9 @@ void ssb_chipcommon_init(struct ssb_chipcommon *cc)
3074 {
3075 if (!cc->dev)
3076 return; /* We don't have a ChipCommon */
3077 + if (cc->dev->id.revision >= 11)
3078 + cc->status = chipco_read32(cc, SSB_CHIPCO_CHIPSTAT);
3079 + ssb_dprintk(KERN_INFO PFX "chipcommon status is 0x%x\n", cc->status);
3080 ssb_pmu_init(cc);
3081 chipco_powercontrol_init(cc);
3082 ssb_chipco_set_clockmode(cc, SSB_CLKMODE_FAST);
3083 diff --git a/drivers/ssb/driver_chipcommon_pmu.c b/drivers/ssb/driver_chipcommon_pmu.c
3084 index 64abd11..8e194d5 100644
3085 --- a/drivers/ssb/driver_chipcommon_pmu.c
3086 +++ b/drivers/ssb/driver_chipcommon_pmu.c
3087 @@ -495,9 +495,9 @@ static void ssb_pmu_resources_init(struct ssb_chipcommon *cc)
3088 chipco_write32(cc, SSB_CHIPCO_PMU_MAXRES_MSK, max_msk);
3089 }
3090
3091 +/* http://bcm-v4.sipsolutions.net/802.11/SSB/PmuInit */
3092 void ssb_pmu_init(struct ssb_chipcommon *cc)
3093 {
3094 - struct ssb_bus *bus = cc->dev->bus;
3095 u32 pmucap;
3096
3097 if (!(cc->capabilities & SSB_CHIPCO_CAP_PMU))
3098 @@ -509,15 +509,12 @@ void ssb_pmu_init(struct ssb_chipcommon *cc)
3099 ssb_dprintk(KERN_DEBUG PFX "Found rev %u PMU (capabilities 0x%08X)\n",
3100 cc->pmu.rev, pmucap);
3101
3102 - if (cc->pmu.rev >= 1) {
3103 - if ((bus->chip_id == 0x4325) && (bus->chip_rev < 2)) {
3104 - chipco_mask32(cc, SSB_CHIPCO_PMU_CTL,
3105 - ~SSB_CHIPCO_PMU_CTL_NOILPONW);
3106 - } else {
3107 - chipco_set32(cc, SSB_CHIPCO_PMU_CTL,
3108 - SSB_CHIPCO_PMU_CTL_NOILPONW);
3109 - }
3110 - }
3111 + if (cc->pmu.rev == 1)
3112 + chipco_mask32(cc, SSB_CHIPCO_PMU_CTL,
3113 + ~SSB_CHIPCO_PMU_CTL_NOILPONW);
3114 + else
3115 + chipco_set32(cc, SSB_CHIPCO_PMU_CTL,
3116 + SSB_CHIPCO_PMU_CTL_NOILPONW);
3117 ssb_pmu_pll_init(cc);
3118 ssb_pmu_resources_init(cc);
3119 }
3120 diff --git a/drivers/ssb/pci.c b/drivers/ssb/pci.c
3121 index 9e50896..17a1781 100644
3122 --- a/drivers/ssb/pci.c
3123 +++ b/drivers/ssb/pci.c
3124 @@ -22,6 +22,7 @@
3125
3126 #include "ssb_private.h"
3127
3128 +bool ssb_is_sprom_available(struct ssb_bus *bus);
3129
3130 /* Define the following to 1 to enable a printk on each coreswitch. */
3131 #define SSB_VERBOSE_PCICORESWITCH_DEBUG 0
3132 @@ -167,7 +168,7 @@ err_pci:
3133 }
3134
3135 /* Get the word-offset for a SSB_SPROM_XXX define. */
3136 -#define SPOFF(offset) (((offset) - SSB_SPROM_BASE) / sizeof(u16))
3137 +#define SPOFF(offset) ((offset) / sizeof(u16))
3138 /* Helper to extract some _offset, which is one of the SSB_SPROM_XXX defines. */
3139 #define SPEX16(_outvar, _offset, _mask, _shift) \
3140 out->_outvar = ((in[SPOFF(_offset)] & (_mask)) >> (_shift))
3141 @@ -252,8 +253,13 @@ static int sprom_do_read(struct ssb_bus *bus, u16 *sprom)
3142 {
3143 int i;
3144
3145 + /* Check if SPROM can be read */
3146 + if (ioread16(bus->mmio + bus->sprom_offset) == 0xFFFF) {
3147 + ssb_printk(KERN_ERR PFX "Unable to read SPROM\n");
3148 + return -ENODEV;
3149 + }
3150 for (i = 0; i < bus->sprom_size; i++)
3151 - sprom[i] = ioread16(bus->mmio + SSB_SPROM_BASE + (i * 2));
3152 + sprom[i] = ioread16(bus->mmio + bus->sprom_offset + (i * 2));
3153
3154 return 0;
3155 }
3156 @@ -284,7 +290,7 @@ static int sprom_do_write(struct ssb_bus *bus, const u16 *sprom)
3157 ssb_printk("75%%");
3158 else if (i % 2)
3159 ssb_printk(".");
3160 - writew(sprom[i], bus->mmio + SSB_SPROM_BASE + (i * 2));
3161 + writew(sprom[i], bus->mmio + bus->sprom_offset + (i * 2));
3162 mmiowb();
3163 msleep(20);
3164 }
3165 @@ -620,21 +626,49 @@ static int ssb_pci_sprom_get(struct ssb_bus *bus,
3166 int err = -ENOMEM;
3167 u16 *buf;
3168
3169 + if (!ssb_is_sprom_available(bus)) {
3170 + ssb_printk(KERN_ERR PFX "No SPROM available!\n");
3171 + return -ENODEV;
3172 + }
3173 + if (bus->chipco.dev) { /* can be unavailible! */
3174 + /*
3175 + * get SPROM offset: SSB_SPROM_BASE1 except for
3176 + * chipcommon rev >= 31 or chip ID is 0x4312 and
3177 + * chipcommon status & 3 == 2
3178 + */
3179 + if (bus->chipco.dev->id.revision >= 31)
3180 + bus->sprom_offset = SSB_SPROM_BASE31;
3181 + else if (bus->chip_id == 0x4312 &&
3182 + (bus->chipco.status & 0x03) == 2)
3183 + bus->sprom_offset = SSB_SPROM_BASE31;
3184 + else
3185 + bus->sprom_offset = SSB_SPROM_BASE1;
3186 + } else {
3187 + bus->sprom_offset = SSB_SPROM_BASE1;
3188 + }
3189 + ssb_dprintk(KERN_INFO PFX "SPROM offset is 0x%x\n", bus->sprom_offset);
3190 +
3191 buf = kcalloc(SSB_SPROMSIZE_WORDS_R123, sizeof(u16), GFP_KERNEL);
3192 if (!buf)
3193 goto out;
3194 bus->sprom_size = SSB_SPROMSIZE_WORDS_R123;
3195 - sprom_do_read(bus, buf);
3196 + err = sprom_do_read(bus, buf);
3197 + if (err)
3198 + goto out_free;
3199 err = sprom_check_crc(buf, bus->sprom_size);
3200 if (err) {
3201 /* try for a 440 byte SPROM - revision 4 and higher */
3202 kfree(buf);
3203 buf = kcalloc(SSB_SPROMSIZE_WORDS_R4, sizeof(u16),
3204 GFP_KERNEL);
3205 - if (!buf)
3206 + if (!buf) {
3207 + err = -ENOMEM;
3208 goto out;
3209 + }
3210 bus->sprom_size = SSB_SPROMSIZE_WORDS_R4;
3211 - sprom_do_read(bus, buf);
3212 + err = sprom_do_read(bus, buf);
3213 + if (err)
3214 + goto out_free;
3215 err = sprom_check_crc(buf, bus->sprom_size);
3216 if (err) {
3217 /* All CRC attempts failed.
3218 diff --git a/drivers/ssb/sprom.c b/drivers/ssb/sprom.c
3219 index d0e6762..7249f26 100644
3220 --- a/drivers/ssb/sprom.c
3221 +++ b/drivers/ssb/sprom.c
3222 @@ -175,3 +175,18 @@ const struct ssb_sprom *ssb_get_fallback_sprom(void)
3223 {
3224 return fallback_sprom;
3225 }
3226 +
3227 +/* http://bcm-v4.sipsolutions.net/802.11/IsSpromAvailable */
3228 +bool ssb_is_sprom_available(struct ssb_bus *bus)
3229 +{
3230 + /* status register only exists on chipcomon rev >= 11 and we need check
3231 + for >= 31 only */
3232 + /* this routine differs from specs as we do not access SPROM directly
3233 + on PCMCIA */
3234 + if (bus->bustype == SSB_BUSTYPE_PCI &&
3235 + bus->chipco.dev && /* can be unavailible! */
3236 + bus->chipco.dev->id.revision >= 31)
3237 + return bus->chipco.capabilities & SSB_CHIPCO_CAP_SPROM;
3238 +
3239 + return true;
3240 +}
3241 diff --git a/drivers/staging/rtl8192su/r8192U_core.c b/drivers/staging/rtl8192su/r8192U_core.c
3242 index 55337c8..8ff9fed 100644
3243 --- a/drivers/staging/rtl8192su/r8192U_core.c
3244 +++ b/drivers/staging/rtl8192su/r8192U_core.c
3245 @@ -118,6 +118,7 @@ static struct usb_device_id rtl8192_usb_id_tbl[] = {
3246 {USB_DEVICE(0x07aa, 0x0043)},
3247 /* Belkin */
3248 {USB_DEVICE(0x050d, 0x805E)},
3249 + {USB_DEVICE(0x050d, 0x815F)}, /* Belkin F5D8053 v6 */
3250 /* Sitecom */
3251 {USB_DEVICE(0x0df6, 0x0031)},
3252 {USB_DEVICE(0x0df6, 0x004b)}, /* WL-349 */
3253 diff --git a/drivers/usb/core/driver.c b/drivers/usb/core/driver.c
3254 index d9d0bf5..ce99d8b 100644
3255 --- a/drivers/usb/core/driver.c
3256 +++ b/drivers/usb/core/driver.c
3257 @@ -1790,9 +1790,6 @@ int usb_external_resume_device(struct usb_device *udev, pm_message_t msg)
3258
3259 static void choose_wakeup(struct usb_device *udev, pm_message_t msg)
3260 {
3261 - int w, i;
3262 - struct usb_interface *intf;
3263 -
3264 /* Remote wakeup is needed only when we actually go to sleep.
3265 * For things like FREEZE and QUIESCE, if the device is already
3266 * autosuspended then its current wakeup setting is okay.
3267 @@ -1802,18 +1799,10 @@ static void choose_wakeup(struct usb_device *udev, pm_message_t msg)
3268 return;
3269 }
3270
3271 - /* If remote wakeup is permitted, see whether any interface drivers
3272 + /* Allow remote wakeup if it is enabled, even if no interface drivers
3273 * actually want it.
3274 */
3275 - w = 0;
3276 - if (device_may_wakeup(&udev->dev) && udev->actconfig) {
3277 - for (i = 0; i < udev->actconfig->desc.bNumInterfaces; i++) {
3278 - intf = udev->actconfig->interface[i];
3279 - w |= intf->needs_remote_wakeup;
3280 - }
3281 - }
3282 -
3283 - udev->do_remote_wakeup = w;
3284 + udev->do_remote_wakeup = device_may_wakeup(&udev->dev);
3285 }
3286
3287 int usb_suspend(struct device *dev, pm_message_t msg)
3288 diff --git a/drivers/usb/core/quirks.c b/drivers/usb/core/quirks.c
3289 index ab93918..a61f160 100644
3290 --- a/drivers/usb/core/quirks.c
3291 +++ b/drivers/usb/core/quirks.c
3292 @@ -41,6 +41,10 @@ static const struct usb_device_id usb_quirk_list[] = {
3293 /* Philips PSC805 audio device */
3294 { USB_DEVICE(0x0471, 0x0155), .driver_info = USB_QUIRK_RESET_RESUME },
3295
3296 + /* Artisman Watchdog Dongle */
3297 + { USB_DEVICE(0x04b4, 0x0526), .driver_info =
3298 + USB_QUIRK_CONFIG_INTF_STRINGS },
3299 +
3300 /* Roland SC-8820 */
3301 { USB_DEVICE(0x0582, 0x0007), .driver_info = USB_QUIRK_RESET_RESUME },
3302
3303 @@ -64,6 +68,9 @@ static const struct usb_device_id usb_quirk_list[] = {
3304 /* X-Rite/Gretag-Macbeth Eye-One Pro display colorimeter */
3305 { USB_DEVICE(0x0971, 0x2000), .driver_info = USB_QUIRK_NO_SET_INTF },
3306
3307 + /* Broadcom BCM92035DGROM BT dongle */
3308 + { USB_DEVICE(0x0a5c, 0x2021), .driver_info = USB_QUIRK_RESET_RESUME },
3309 +
3310 /* Action Semiconductor flash disk */
3311 { USB_DEVICE(0x10d6, 0x2200), .driver_info =
3312 USB_QUIRK_STRING_FETCH_255 },
3313 diff --git a/drivers/usb/gadget/u_serial.c b/drivers/usb/gadget/u_serial.c
3314 index adf8260..9e5f9f1 100644
3315 --- a/drivers/usb/gadget/u_serial.c
3316 +++ b/drivers/usb/gadget/u_serial.c
3317 @@ -535,17 +535,11 @@ recycle:
3318 list_move(&req->list, &port->read_pool);
3319 }
3320
3321 - /* Push from tty to ldisc; this is immediate with low_latency, and
3322 - * may trigger callbacks to this driver ... so drop the spinlock.
3323 + /* Push from tty to ldisc; without low_latency set this is handled by
3324 + * a workqueue, so we won't get callbacks and can hold port_lock
3325 */
3326 if (tty && do_push) {
3327 - spin_unlock_irq(&port->port_lock);
3328 tty_flip_buffer_push(tty);
3329 - wake_up_interruptible(&tty->read_wait);
3330 - spin_lock_irq(&port->port_lock);
3331 -
3332 - /* tty may have been closed */
3333 - tty = port->port_tty;
3334 }
3335
3336
3337 @@ -783,11 +777,6 @@ static int gs_open(struct tty_struct *tty, struct file *file)
3338 port->open_count = 1;
3339 port->openclose = false;
3340
3341 - /* low_latency means ldiscs work in tasklet context, without
3342 - * needing a workqueue schedule ... easier to keep up.
3343 - */
3344 - tty->low_latency = 1;
3345 -
3346 /* if connected, start the I/O stream */
3347 if (port->port_usb) {
3348 struct gserial *gser = port->port_usb;
3349 @@ -1194,6 +1183,7 @@ void gserial_cleanup(void)
3350 n_ports = 0;
3351
3352 tty_unregister_driver(gs_tty_driver);
3353 + put_tty_driver(gs_tty_driver);
3354 gs_tty_driver = NULL;
3355
3356 pr_debug("%s: cleaned up ttyGS* support\n", __func__);
3357 diff --git a/drivers/usb/host/ehci-mxc.c b/drivers/usb/host/ehci-mxc.c
3358 index 35c56f4..798b407 100644
3359 --- a/drivers/usb/host/ehci-mxc.c
3360 +++ b/drivers/usb/host/ehci-mxc.c
3361 @@ -207,10 +207,17 @@ static int ehci_mxc_drv_probe(struct platform_device *pdev)
3362 /* Initialize the transceiver */
3363 if (pdata->otg) {
3364 pdata->otg->io_priv = hcd->regs + ULPI_VIEWPORT_OFFSET;
3365 - if (otg_init(pdata->otg) != 0)
3366 - dev_err(dev, "unable to init transceiver\n");
3367 - else if (otg_set_vbus(pdata->otg, 1) != 0)
3368 + ret = otg_init(pdata->otg);
3369 + if (ret) {
3370 + dev_err(dev, "unable to init transceiver, probably missing\n");
3371 + ret = -ENODEV;
3372 + goto err_add;
3373 + }
3374 + ret = otg_set_vbus(pdata->otg, 1);
3375 + if (ret) {
3376 dev_err(dev, "unable to enable vbus on transceiver\n");
3377 + goto err_add;
3378 + }
3379 }
3380
3381 priv->hcd = hcd;
3382 diff --git a/drivers/usb/misc/sisusbvga/sisusb.c b/drivers/usb/misc/sisusbvga/sisusb.c
3383 index 8b37a4b..be41ec3 100644
3384 --- a/drivers/usb/misc/sisusbvga/sisusb.c
3385 +++ b/drivers/usb/misc/sisusbvga/sisusb.c
3386 @@ -2435,7 +2435,8 @@ sisusb_open(struct inode *inode, struct file *file)
3387 }
3388
3389 if (!sisusb->devinit) {
3390 - if (sisusb->sisusb_dev->speed == USB_SPEED_HIGH) {
3391 + if (sisusb->sisusb_dev->speed == USB_SPEED_HIGH ||
3392 + sisusb->sisusb_dev->speed == USB_SPEED_SUPER) {
3393 if (sisusb_init_gfxdevice(sisusb, 0)) {
3394 mutex_unlock(&sisusb->lock);
3395 dev_err(&sisusb->sisusb_dev->dev, "Failed to initialize device\n");
3396 @@ -3167,7 +3168,7 @@ static int sisusb_probe(struct usb_interface *intf,
3397
3398 sisusb->present = 1;
3399
3400 - if (dev->speed == USB_SPEED_HIGH) {
3401 + if (dev->speed == USB_SPEED_HIGH || dev->speed == USB_SPEED_SUPER) {
3402 int initscreen = 1;
3403 #ifdef INCL_SISUSB_CON
3404 if (sisusb_first_vc > 0 &&
3405 diff --git a/drivers/usb/serial/ftdi_sio.c b/drivers/usb/serial/ftdi_sio.c
3406 index 8c19ad5..bc11d0c 100644
3407 --- a/drivers/usb/serial/ftdi_sio.c
3408 +++ b/drivers/usb/serial/ftdi_sio.c
3409 @@ -697,6 +697,7 @@ static struct usb_device_id id_table_combined [] = {
3410 { USB_DEVICE(FTDI_VID, FTDI_NDI_AURORA_SCU_PID),
3411 .driver_info = (kernel_ulong_t)&ftdi_NDI_device_quirk },
3412 { USB_DEVICE(TELLDUS_VID, TELLDUS_TELLSTICK_PID) },
3413 + { USB_DEVICE(RTSYSTEMS_VID, RTSYSTEMS_SERIAL_VX7_PID) },
3414 { USB_DEVICE(FTDI_VID, FTDI_MAXSTREAM_PID) },
3415 { USB_DEVICE(FTDI_VID, FTDI_PHI_FISCO_PID) },
3416 { USB_DEVICE(TML_VID, TML_USB_SERIAL_PID) },
3417 @@ -743,6 +744,14 @@ static struct usb_device_id id_table_combined [] = {
3418 { USB_DEVICE(FTDI_VID, MJSG_SR_RADIO_PID) },
3419 { USB_DEVICE(FTDI_VID, MJSG_HD_RADIO_PID) },
3420 { USB_DEVICE(FTDI_VID, MJSG_XM_RADIO_PID) },
3421 + { USB_DEVICE(FTDI_VID, XVERVE_SIGNALYZER_ST_PID),
3422 + .driver_info = (kernel_ulong_t)&ftdi_jtag_quirk },
3423 + { USB_DEVICE(FTDI_VID, XVERVE_SIGNALYZER_SLITE_PID),
3424 + .driver_info = (kernel_ulong_t)&ftdi_jtag_quirk },
3425 + { USB_DEVICE(FTDI_VID, XVERVE_SIGNALYZER_SH2_PID),
3426 + .driver_info = (kernel_ulong_t)&ftdi_jtag_quirk },
3427 + { USB_DEVICE(FTDI_VID, XVERVE_SIGNALYZER_SH4_PID),
3428 + .driver_info = (kernel_ulong_t)&ftdi_jtag_quirk },
3429 { }, /* Optional parameter entry */
3430 { } /* Terminating entry */
3431 };
3432 diff --git a/drivers/usb/serial/ftdi_sio_ids.h b/drivers/usb/serial/ftdi_sio_ids.h
3433 index 8f9e805..ffdcec7 100644
3434 --- a/drivers/usb/serial/ftdi_sio_ids.h
3435 +++ b/drivers/usb/serial/ftdi_sio_ids.h
3436 @@ -703,6 +703,12 @@
3437 #define TELLDUS_TELLSTICK_PID 0x0C30 /* RF control dongle 433 MHz using FT232RL */
3438
3439 /*
3440 + * RT Systems programming cables for various ham radios
3441 + */
3442 +#define RTSYSTEMS_VID 0x2100 /* Vendor ID */
3443 +#define RTSYSTEMS_SERIAL_VX7_PID 0x9e52 /* Serial converter for VX-7 Radios using FT232RL */
3444 +
3445 +/*
3446 * Bayer Ascensia Contour blood glucose meter USB-converter cable.
3447 * http://winglucofacts.com/cables/
3448 */
3449 @@ -1024,3 +1030,12 @@
3450 #define MJSG_SR_RADIO_PID 0x9379
3451 #define MJSG_XM_RADIO_PID 0x937A
3452 #define MJSG_HD_RADIO_PID 0x937C
3453 +
3454 +/*
3455 + * Xverve Signalyzer tools (http://www.signalyzer.com/)
3456 + */
3457 +#define XVERVE_SIGNALYZER_ST_PID 0xBCA0
3458 +#define XVERVE_SIGNALYZER_SLITE_PID 0xBCA1
3459 +#define XVERVE_SIGNALYZER_SH2_PID 0xBCA2
3460 +#define XVERVE_SIGNALYZER_SH4_PID 0xBCA4
3461 +
3462 diff --git a/drivers/usb/serial/option.c b/drivers/usb/serial/option.c
3463 index 64b50f6..c5def6d 100644
3464 --- a/drivers/usb/serial/option.c
3465 +++ b/drivers/usb/serial/option.c
3466 @@ -226,6 +226,7 @@ static int option_resume(struct usb_serial *serial);
3467 #define AMOI_PRODUCT_H01 0x0800
3468 #define AMOI_PRODUCT_H01A 0x7002
3469 #define AMOI_PRODUCT_H02 0x0802
3470 +#define AMOI_PRODUCT_SKYPEPHONE_S2 0x0407
3471
3472 #define DELL_VENDOR_ID 0x413C
3473
3474 @@ -316,6 +317,7 @@ static int option_resume(struct usb_serial *serial);
3475 #define QISDA_PRODUCT_H21_4512 0x4512
3476 #define QISDA_PRODUCT_H21_4523 0x4523
3477 #define QISDA_PRODUCT_H20_4515 0x4515
3478 +#define QISDA_PRODUCT_H20_4518 0x4518
3479 #define QISDA_PRODUCT_H20_4519 0x4519
3480
3481 /* TLAYTECH PRODUCTS */
3482 @@ -503,6 +505,7 @@ static struct usb_device_id option_ids[] = {
3483 { USB_DEVICE(AMOI_VENDOR_ID, AMOI_PRODUCT_H01) },
3484 { USB_DEVICE(AMOI_VENDOR_ID, AMOI_PRODUCT_H01A) },
3485 { USB_DEVICE(AMOI_VENDOR_ID, AMOI_PRODUCT_H02) },
3486 + { USB_DEVICE(AMOI_VENDOR_ID, AMOI_PRODUCT_SKYPEPHONE_S2) },
3487
3488 { USB_DEVICE(DELL_VENDOR_ID, DELL_PRODUCT_5700_MINICARD) }, /* Dell Wireless 5700 Mobile Broadband CDMA/EVDO Mini-Card == Novatel Expedite EV620 CDMA/EV-DO */
3489 { USB_DEVICE(DELL_VENDOR_ID, DELL_PRODUCT_5500_MINICARD) }, /* Dell Wireless 5500 Mobile Broadband HSDPA Mini-Card == Novatel Expedite EU740 HSDPA/3G */
3490 @@ -836,6 +839,7 @@ static struct usb_device_id option_ids[] = {
3491 { USB_DEVICE(QISDA_VENDOR_ID, QISDA_PRODUCT_H21_4512) },
3492 { USB_DEVICE(QISDA_VENDOR_ID, QISDA_PRODUCT_H21_4523) },
3493 { USB_DEVICE(QISDA_VENDOR_ID, QISDA_PRODUCT_H20_4515) },
3494 + { USB_DEVICE(QISDA_VENDOR_ID, QISDA_PRODUCT_H20_4518) },
3495 { USB_DEVICE(QISDA_VENDOR_ID, QISDA_PRODUCT_H20_4519) },
3496 { USB_DEVICE(TOSHIBA_VENDOR_ID, TOSHIBA_PRODUCT_G450) },
3497 { USB_DEVICE(TOSHIBA_VENDOR_ID, TOSHIBA_PRODUCT_HSDPA_MINICARD ) }, /* Toshiba 3G HSDPA == Novatel Expedite EU870D MiniCard */
3498 diff --git a/drivers/usb/serial/sierra.c b/drivers/usb/serial/sierra.c
3499 index a442989..6435b26 100644
3500 --- a/drivers/usb/serial/sierra.c
3501 +++ b/drivers/usb/serial/sierra.c
3502 @@ -244,6 +244,7 @@ static struct usb_device_id id_table [] = {
3503 { USB_DEVICE(0x1199, 0x0021) }, /* Sierra Wireless AirCard 597E */
3504 { USB_DEVICE(0x1199, 0x0112) }, /* Sierra Wireless AirCard 580 */
3505 { USB_DEVICE(0x1199, 0x0120) }, /* Sierra Wireless USB Dongle 595U */
3506 + { USB_DEVICE(0x1199, 0x0301) }, /* Sierra Wireless USB Dongle 250U */
3507 /* Sierra Wireless C597 */
3508 { USB_DEVICE_AND_INTERFACE_INFO(0x1199, 0x0023, 0xFF, 0xFF, 0xFF) },
3509 /* Sierra Wireless T598 */
3510 diff --git a/fs/btrfs/ioctl.c b/fs/btrfs/ioctl.c
3511 index 2c6ee6a..0bc5776 100644
3512 --- a/fs/btrfs/ioctl.c
3513 +++ b/fs/btrfs/ioctl.c
3514 @@ -952,7 +952,7 @@ static noinline long btrfs_ioctl_clone(struct file *file, unsigned long srcfd,
3515 */
3516
3517 /* the destination must be opened for writing */
3518 - if (!(file->f_mode & FMODE_WRITE))
3519 + if (!(file->f_mode & FMODE_WRITE) || (file->f_flags & O_APPEND))
3520 return -EINVAL;
3521
3522 ret = mnt_want_write(file->f_path.mnt);
3523 @@ -1005,7 +1005,7 @@ static noinline long btrfs_ioctl_clone(struct file *file, unsigned long srcfd,
3524
3525 /* determine range to clone */
3526 ret = -EINVAL;
3527 - if (off >= src->i_size || off + len > src->i_size)
3528 + if (off + len > src->i_size || off + len < off)
3529 goto out_unlock;
3530 if (len == 0)
3531 olen = len = src->i_size - off;
3532 diff --git a/fs/cifs/cifsfs.c b/fs/cifs/cifsfs.c
3533 index 8c6a036..7fb871a 100644
3534 --- a/fs/cifs/cifsfs.c
3535 +++ b/fs/cifs/cifsfs.c
3536 @@ -1034,7 +1034,7 @@ init_cifs(void)
3537 goto out_unregister_filesystem;
3538 #endif
3539 #ifdef CONFIG_CIFS_DFS_UPCALL
3540 - rc = register_key_type(&key_type_dns_resolver);
3541 + rc = cifs_init_dns_resolver();
3542 if (rc)
3543 goto out_unregister_key_type;
3544 #endif
3545 @@ -1046,7 +1046,7 @@ init_cifs(void)
3546
3547 out_unregister_resolver_key:
3548 #ifdef CONFIG_CIFS_DFS_UPCALL
3549 - unregister_key_type(&key_type_dns_resolver);
3550 + cifs_exit_dns_resolver();
3551 out_unregister_key_type:
3552 #endif
3553 #ifdef CONFIG_CIFS_UPCALL
3554 @@ -1072,7 +1072,7 @@ exit_cifs(void)
3555 cifs_proc_clean();
3556 #ifdef CONFIG_CIFS_DFS_UPCALL
3557 cifs_dfs_release_automount_timer();
3558 - unregister_key_type(&key_type_dns_resolver);
3559 + cifs_exit_dns_resolver();
3560 #endif
3561 #ifdef CONFIG_CIFS_UPCALL
3562 unregister_key_type(&cifs_spnego_key_type);
3563 diff --git a/fs/cifs/dns_resolve.c b/fs/cifs/dns_resolve.c
3564 index 8794814..16f31c1 100644
3565 --- a/fs/cifs/dns_resolve.c
3566 +++ b/fs/cifs/dns_resolve.c
3567 @@ -23,12 +23,16 @@
3568 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
3569 */
3570
3571 +#include <linux/keyctl.h>
3572 +#include <linux/key-type.h>
3573 #include <keys/user-type.h>
3574 #include "dns_resolve.h"
3575 #include "cifsglob.h"
3576 #include "cifsproto.h"
3577 #include "cifs_debug.h"
3578
3579 +static const struct cred *dns_resolver_cache;
3580 +
3581 /* Checks if supplied name is IP address
3582 * returns:
3583 * 1 - name is IP
3584 @@ -93,6 +97,7 @@ struct key_type key_type_dns_resolver = {
3585 int
3586 dns_resolve_server_name_to_ip(const char *unc, char **ip_addr)
3587 {
3588 + const struct cred *saved_cred;
3589 int rc = -EAGAIN;
3590 struct key *rkey = ERR_PTR(-EAGAIN);
3591 char *name;
3592 @@ -132,8 +137,15 @@ dns_resolve_server_name_to_ip(const char *unc, char **ip_addr)
3593 goto skip_upcall;
3594 }
3595
3596 + saved_cred = override_creds(dns_resolver_cache);
3597 rkey = request_key(&key_type_dns_resolver, name, "");
3598 + revert_creds(saved_cred);
3599 if (!IS_ERR(rkey)) {
3600 + if (!(rkey->perm & KEY_USR_VIEW)) {
3601 + down_read(&rkey->sem);
3602 + rkey->perm |= KEY_USR_VIEW;
3603 + up_read(&rkey->sem);
3604 + }
3605 len = rkey->type_data.x[0];
3606 data = rkey->payload.data;
3607 } else {
3608 @@ -164,4 +176,61 @@ out:
3609 return rc;
3610 }
3611
3612 +int __init cifs_init_dns_resolver(void)
3613 +{
3614 + struct cred *cred;
3615 + struct key *keyring;
3616 + int ret;
3617 +
3618 + printk(KERN_NOTICE "Registering the %s key type\n",
3619 + key_type_dns_resolver.name);
3620 +
3621 + /* create an override credential set with a special thread keyring in
3622 + * which DNS requests are cached
3623 + *
3624 + * this is used to prevent malicious redirections from being installed
3625 + * with add_key().
3626 + */
3627 + cred = prepare_kernel_cred(NULL);
3628 + if (!cred)
3629 + return -ENOMEM;
3630 +
3631 + keyring = key_alloc(&key_type_keyring, ".dns_resolver", 0, 0, cred,
3632 + (KEY_POS_ALL & ~KEY_POS_SETATTR) |
3633 + KEY_USR_VIEW | KEY_USR_READ,
3634 + KEY_ALLOC_NOT_IN_QUOTA);
3635 + if (IS_ERR(keyring)) {
3636 + ret = PTR_ERR(keyring);
3637 + goto failed_put_cred;
3638 + }
3639 +
3640 + ret = key_instantiate_and_link(keyring, NULL, 0, NULL, NULL);
3641 + if (ret < 0)
3642 + goto failed_put_key;
3643 +
3644 + ret = register_key_type(&key_type_dns_resolver);
3645 + if (ret < 0)
3646 + goto failed_put_key;
3647 +
3648 + /* instruct request_key() to use this special keyring as a cache for
3649 + * the results it looks up */
3650 + cred->thread_keyring = keyring;
3651 + cred->jit_keyring = KEY_REQKEY_DEFL_THREAD_KEYRING;
3652 + dns_resolver_cache = cred;
3653 + return 0;
3654 +
3655 +failed_put_key:
3656 + key_put(keyring);
3657 +failed_put_cred:
3658 + put_cred(cred);
3659 + return ret;
3660 +}
3661
3662 +void __exit cifs_exit_dns_resolver(void)
3663 +{
3664 + key_revoke(dns_resolver_cache->thread_keyring);
3665 + unregister_key_type(&key_type_dns_resolver);
3666 + put_cred(dns_resolver_cache);
3667 + printk(KERN_NOTICE "Unregistered %s key type\n",
3668 + key_type_dns_resolver.name);
3669 +}
3670 diff --git a/fs/cifs/dns_resolve.h b/fs/cifs/dns_resolve.h
3671 index 966e928..26b9eaa 100644
3672 --- a/fs/cifs/dns_resolve.h
3673 +++ b/fs/cifs/dns_resolve.h
3674 @@ -24,8 +24,8 @@
3675 #define _DNS_RESOLVE_H
3676
3677 #ifdef __KERNEL__
3678 -#include <linux/key-type.h>
3679 -extern struct key_type key_type_dns_resolver;
3680 +extern int __init cifs_init_dns_resolver(void);
3681 +extern void __exit cifs_exit_dns_resolver(void);
3682 extern int dns_resolve_server_name_to_ip(const char *unc, char **ip_addr);
3683 #endif /* KERNEL */
3684
3685 diff --git a/fs/cifs/inode.c b/fs/cifs/inode.c
3686 index 7ec8555..91be319 100644
3687 --- a/fs/cifs/inode.c
3688 +++ b/fs/cifs/inode.c
3689 @@ -1284,6 +1284,10 @@ cifs_do_rename(int xid, struct dentry *from_dentry, const char *fromPath,
3690 if (rc == 0 || rc != -ETXTBSY)
3691 return rc;
3692
3693 + /* open-file renames don't work across directories */
3694 + if (to_dentry->d_parent != from_dentry->d_parent)
3695 + return rc;
3696 +
3697 /* open the file to be renamed -- we need DELETE perms */
3698 rc = CIFSSMBOpen(xid, pTcon, fromPath, FILE_OPEN, DELETE,
3699 CREATE_NOT_DIR, &srcfid, &oplock, NULL,
3700 diff --git a/fs/cifs/sess.c b/fs/cifs/sess.c
3701 index aaa9c1c..7ca42eb 100644
3702 --- a/fs/cifs/sess.c
3703 +++ b/fs/cifs/sess.c
3704 @@ -722,15 +722,7 @@ ssetup_ntlmssp_authenticate:
3705
3706 /* calculate session key */
3707 setup_ntlmv2_rsp(ses, v2_sess_key, nls_cp);
3708 - if (first_time) /* should this be moved into common code
3709 - with similar ntlmv2 path? */
3710 - /* cifs_calculate_ntlmv2_mac_key(ses->server->mac_signing_key,
3711 - response BB FIXME, v2_sess_key); */
3712 -
3713 - /* copy session key */
3714 -
3715 - /* memcpy(bcc_ptr, (char *)ntlm_session_key,LM2_SESS_KEY_SIZE);
3716 - bcc_ptr += LM2_SESS_KEY_SIZE; */
3717 + /* FIXME: calculate MAC key */
3718 memcpy(bcc_ptr, (char *)v2_sess_key,
3719 sizeof(struct ntlmv2_resp));
3720 bcc_ptr += sizeof(struct ntlmv2_resp);
3721 diff --git a/fs/ecryptfs/messaging.c b/fs/ecryptfs/messaging.c
3722 index f1c17e8..3dfe7ce 100644
3723 --- a/fs/ecryptfs/messaging.c
3724 +++ b/fs/ecryptfs/messaging.c
3725 @@ -30,9 +30,9 @@ static struct mutex ecryptfs_msg_ctx_lists_mux;
3726
3727 static struct hlist_head *ecryptfs_daemon_hash;
3728 struct mutex ecryptfs_daemon_hash_mux;
3729 -static int ecryptfs_hash_buckets;
3730 +static int ecryptfs_hash_bits;
3731 #define ecryptfs_uid_hash(uid) \
3732 - hash_long((unsigned long)uid, ecryptfs_hash_buckets)
3733 + hash_long((unsigned long)uid, ecryptfs_hash_bits)
3734
3735 static u32 ecryptfs_msg_counter;
3736 static struct ecryptfs_msg_ctx *ecryptfs_msg_ctx_arr;
3737 @@ -485,18 +485,19 @@ int ecryptfs_init_messaging(void)
3738 }
3739 mutex_init(&ecryptfs_daemon_hash_mux);
3740 mutex_lock(&ecryptfs_daemon_hash_mux);
3741 - ecryptfs_hash_buckets = 1;
3742 - while (ecryptfs_number_of_users >> ecryptfs_hash_buckets)
3743 - ecryptfs_hash_buckets++;
3744 + ecryptfs_hash_bits = 1;
3745 + while (ecryptfs_number_of_users >> ecryptfs_hash_bits)
3746 + ecryptfs_hash_bits++;
3747 ecryptfs_daemon_hash = kmalloc((sizeof(struct hlist_head)
3748 - * ecryptfs_hash_buckets), GFP_KERNEL);
3749 + * (1 << ecryptfs_hash_bits)),
3750 + GFP_KERNEL);
3751 if (!ecryptfs_daemon_hash) {
3752 rc = -ENOMEM;
3753 printk(KERN_ERR "%s: Failed to allocate memory\n", __func__);
3754 mutex_unlock(&ecryptfs_daemon_hash_mux);
3755 goto out;
3756 }
3757 - for (i = 0; i < ecryptfs_hash_buckets; i++)
3758 + for (i = 0; i < (1 << ecryptfs_hash_bits); i++)
3759 INIT_HLIST_HEAD(&ecryptfs_daemon_hash[i]);
3760 mutex_unlock(&ecryptfs_daemon_hash_mux);
3761 ecryptfs_msg_ctx_arr = kmalloc((sizeof(struct ecryptfs_msg_ctx)
3762 @@ -553,7 +554,7 @@ void ecryptfs_release_messaging(void)
3763 int i;
3764
3765 mutex_lock(&ecryptfs_daemon_hash_mux);
3766 - for (i = 0; i < ecryptfs_hash_buckets; i++) {
3767 + for (i = 0; i < (1 << ecryptfs_hash_bits); i++) {
3768 int rc;
3769
3770 hlist_for_each_entry(daemon, elem,
3771 diff --git a/fs/nfs/nfs4xdr.c b/fs/nfs/nfs4xdr.c
3772 index 5cd5184..d741e0e 100644
3773 --- a/fs/nfs/nfs4xdr.c
3774 +++ b/fs/nfs/nfs4xdr.c
3775 @@ -863,8 +863,8 @@ static void encode_attrs(struct xdr_stream *xdr, const struct iattr *iap, const
3776 bmval1 |= FATTR4_WORD1_TIME_ACCESS_SET;
3777 *p++ = cpu_to_be32(NFS4_SET_TO_CLIENT_TIME);
3778 *p++ = cpu_to_be32(0);
3779 - *p++ = cpu_to_be32(iap->ia_mtime.tv_sec);
3780 - *p++ = cpu_to_be32(iap->ia_mtime.tv_nsec);
3781 + *p++ = cpu_to_be32(iap->ia_atime.tv_sec);
3782 + *p++ = cpu_to_be32(iap->ia_atime.tv_nsec);
3783 }
3784 else if (iap->ia_valid & ATTR_ATIME) {
3785 bmval1 |= FATTR4_WORD1_TIME_ACCESS_SET;
3786 diff --git a/fs/nfs/super.c b/fs/nfs/super.c
3787 index f1afee4..912e61f 100644
3788 --- a/fs/nfs/super.c
3789 +++ b/fs/nfs/super.c
3790 @@ -565,6 +565,22 @@ static void nfs_show_mountd_options(struct seq_file *m, struct nfs_server *nfss,
3791 nfs_show_mountd_netid(m, nfss, showdefaults);
3792 }
3793
3794 +#ifdef CONFIG_NFS_V4
3795 +static void nfs_show_nfsv4_options(struct seq_file *m, struct nfs_server *nfss,
3796 + int showdefaults)
3797 +{
3798 + struct nfs_client *clp = nfss->nfs_client;
3799 +
3800 + seq_printf(m, ",clientaddr=%s", clp->cl_ipaddr);
3801 + seq_printf(m, ",minorversion=%u", clp->cl_minorversion);
3802 +}
3803 +#else
3804 +static void nfs_show_nfsv4_options(struct seq_file *m, struct nfs_server *nfss,
3805 + int showdefaults)
3806 +{
3807 +}
3808 +#endif
3809 +
3810 /*
3811 * Describe the mount options in force on this server representation
3812 */
3813 @@ -626,11 +642,9 @@ static void nfs_show_mount_options(struct seq_file *m, struct nfs_server *nfss,
3814
3815 if (version != 4)
3816 nfs_show_mountd_options(m, nfss, showdefaults);
3817 + else
3818 + nfs_show_nfsv4_options(m, nfss, showdefaults);
3819
3820 -#ifdef CONFIG_NFS_V4
3821 - if (clp->rpc_ops->version == 4)
3822 - seq_printf(m, ",clientaddr=%s", clp->cl_ipaddr);
3823 -#endif
3824 if (nfss->options & NFS_OPTION_FSCACHE)
3825 seq_printf(m, ",fsc");
3826 }
3827 diff --git a/include/acpi/processor.h b/include/acpi/processor.h
3828 index 0ea5ef4..dcd0cb0 100644
3829 --- a/include/acpi/processor.h
3830 +++ b/include/acpi/processor.h
3831 @@ -48,7 +48,7 @@ struct acpi_power_register {
3832 u8 space_id;
3833 u8 bit_width;
3834 u8 bit_offset;
3835 - u8 reserved;
3836 + u8 access_size;
3837 u64 address;
3838 } __attribute__ ((packed));
3839
3840 @@ -74,6 +74,7 @@ struct acpi_processor_cx {
3841 u32 power;
3842 u32 usage;
3843 u64 time;
3844 + u8 bm_sts_skip;
3845 struct acpi_processor_cx_policy promotion;
3846 struct acpi_processor_cx_policy demotion;
3847 char desc[ACPI_CX_DESC_LEN];
3848 diff --git a/include/linux/acpi.h b/include/linux/acpi.h
3849 index b926afe..87ca491 100644
3850 --- a/include/linux/acpi.h
3851 +++ b/include/linux/acpi.h
3852 @@ -251,7 +251,6 @@ int acpi_check_mem_region(resource_size_t start, resource_size_t n,
3853 void __init acpi_no_s4_hw_signature(void);
3854 void __init acpi_old_suspend_ordering(void);
3855 void __init acpi_s4_no_nvs(void);
3856 -void __init acpi_set_sci_en_on_resume(void);
3857 #endif /* CONFIG_PM_SLEEP */
3858
3859 struct acpi_osc_context {
3860 diff --git a/include/linux/ethtool.h b/include/linux/ethtool.h
3861 index ef4a2d8..03c52fa 100644
3862 --- a/include/linux/ethtool.h
3863 +++ b/include/linux/ethtool.h
3864 @@ -358,6 +358,8 @@ struct ethtool_rxnfc {
3865 __u32 flow_type;
3866 /* The rx flow hash value or the rule DB size */
3867 __u64 data;
3868 + /* The following fields are not valid and must not be used for
3869 + * the ETHTOOL_{G,X}RXFH commands. */
3870 struct ethtool_rx_flow_spec fs;
3871 __u32 rule_cnt;
3872 __u32 rule_locs[0];
3873 diff --git a/include/linux/fb.h b/include/linux/fb.h
3874 index 369767b..74d67ca 100644
3875 --- a/include/linux/fb.h
3876 +++ b/include/linux/fb.h
3877 @@ -785,8 +785,6 @@ struct fb_tile_ops {
3878 #define FBINFO_MISC_USEREVENT 0x10000 /* event request
3879 from userspace */
3880 #define FBINFO_MISC_TILEBLITTING 0x20000 /* use tile blitting */
3881 -#define FBINFO_MISC_FIRMWARE 0x40000 /* a replaceable firmware
3882 - inited framebuffer */
3883
3884 /* A driver may set this flag to indicate that it does want a set_par to be
3885 * called every time when fbcon_switch is executed. The advantage is that with
3886 @@ -800,6 +798,8 @@ struct fb_tile_ops {
3887 */
3888 #define FBINFO_MISC_ALWAYS_SETPAR 0x40000
3889
3890 +/* where the fb is a firmware driver, and can be replaced with a proper one */
3891 +#define FBINFO_MISC_FIRMWARE 0x80000
3892 /*
3893 * Host and GPU endianness differ.
3894 */
3895 diff --git a/include/linux/firmware.h b/include/linux/firmware.h
3896 index 043811f..53d1e6c 100644
3897 --- a/include/linux/firmware.h
3898 +++ b/include/linux/firmware.h
3899 @@ -12,6 +12,7 @@
3900 struct firmware {
3901 size_t size;
3902 const u8 *data;
3903 + struct page **pages;
3904 };
3905
3906 struct device;
3907 diff --git a/include/linux/ieee80211.h b/include/linux/ieee80211.h
3908 index 163c840..047e449 100644
3909 --- a/include/linux/ieee80211.h
3910 +++ b/include/linux/ieee80211.h
3911 @@ -1137,6 +1137,8 @@ enum ieee80211_category {
3912 WLAN_CATEGORY_SA_QUERY = 8,
3913 WLAN_CATEGORY_PROTECTED_DUAL_OF_ACTION = 9,
3914 WLAN_CATEGORY_WMM = 17,
3915 + WLAN_CATEGORY_MESH_PLINK = 30, /* Pending ANA approval */
3916 + WLAN_CATEGORY_MESH_PATH_SEL = 32, /* Pending ANA approval */
3917 WLAN_CATEGORY_VENDOR_SPECIFIC_PROTECTED = 126,
3918 WLAN_CATEGORY_VENDOR_SPECIFIC = 127,
3919 };
3920 diff --git a/include/linux/mmc/sdio.h b/include/linux/mmc/sdio.h
3921 index 47ba464..118f029 100644
3922 --- a/include/linux/mmc/sdio.h
3923 +++ b/include/linux/mmc/sdio.h
3924 @@ -94,6 +94,8 @@
3925
3926 #define SDIO_BUS_WIDTH_1BIT 0x00
3927 #define SDIO_BUS_WIDTH_4BIT 0x02
3928 +#define SDIO_BUS_ECSI 0x20 /* Enable continuous SPI interrupt */
3929 +#define SDIO_BUS_SCSI 0x40 /* Support continuous SPI interrupt */
3930
3931 #define SDIO_BUS_CD_DISABLE 0x80 /* disable pull-up on DAT3 (pin 1) */
3932
3933 diff --git a/include/linux/pci_ids.h b/include/linux/pci_ids.h
3934 index be29806..f0bcfbc 100644
3935 --- a/include/linux/pci_ids.h
3936 +++ b/include/linux/pci_ids.h
3937 @@ -1262,6 +1262,7 @@
3938 #define PCI_DEVICE_ID_NVIDIA_NFORCE_MCP77_IDE 0x0759
3939 #define PCI_DEVICE_ID_NVIDIA_NFORCE_MCP73_SMBUS 0x07D8
3940 #define PCI_DEVICE_ID_NVIDIA_NFORCE_MCP79_SMBUS 0x0AA2
3941 +#define PCI_DEVICE_ID_NVIDIA_NFORCE_MCP89_SATA 0x0D85
3942
3943 #define PCI_VENDOR_ID_IMS 0x10e0
3944 #define PCI_DEVICE_ID_IMS_TT128 0x9128
3945 diff --git a/include/linux/ssb/ssb.h b/include/linux/ssb/ssb.h
3946 index 24f9885..732ba9a 100644
3947 --- a/include/linux/ssb/ssb.h
3948 +++ b/include/linux/ssb/ssb.h
3949 @@ -306,6 +306,7 @@ struct ssb_bus {
3950 u16 chip_id;
3951 u16 chip_rev;
3952 u16 sprom_size; /* number of words in sprom */
3953 + u16 sprom_offset;
3954 u8 chip_package;
3955
3956 /* List of devices (cores) on the backplane. */
3957 diff --git a/include/linux/ssb/ssb_driver_chipcommon.h b/include/linux/ssb/ssb_driver_chipcommon.h
3958 index 4e27acf..7600f38 100644
3959 --- a/include/linux/ssb/ssb_driver_chipcommon.h
3960 +++ b/include/linux/ssb/ssb_driver_chipcommon.h
3961 @@ -46,6 +46,7 @@
3962 #define SSB_PLLTYPE_7 0x00038000 /* 25Mhz, 4 dividers */
3963 #define SSB_CHIPCO_CAP_PCTL 0x00040000 /* Power Control */
3964 #define SSB_CHIPCO_CAP_OTPS 0x00380000 /* OTP size */
3965 +#define SSB_CHIPCO_CAP_SPROM 0x40000000 /* SPROM present */
3966 #define SSB_CHIPCO_CAP_OTPS_SHIFT 19
3967 #define SSB_CHIPCO_CAP_OTPS_BASE 5
3968 #define SSB_CHIPCO_CAP_JTAGM 0x00400000 /* JTAG master present */
3969 @@ -564,6 +565,7 @@ struct ssb_chipcommon_pmu {
3970 struct ssb_chipcommon {
3971 struct ssb_device *dev;
3972 u32 capabilities;
3973 + u32 status;
3974 /* Fast Powerup Delay constant */
3975 u16 fast_pwrup_delay;
3976 struct ssb_chipcommon_pmu pmu;
3977 diff --git a/include/linux/ssb/ssb_regs.h b/include/linux/ssb/ssb_regs.h
3978 index 9ae9082..b8be23c 100644
3979 --- a/include/linux/ssb/ssb_regs.h
3980 +++ b/include/linux/ssb/ssb_regs.h
3981 @@ -170,7 +170,8 @@
3982 #define SSB_SPROMSIZE_WORDS_R4 220
3983 #define SSB_SPROMSIZE_BYTES_R123 (SSB_SPROMSIZE_WORDS_R123 * sizeof(u16))
3984 #define SSB_SPROMSIZE_BYTES_R4 (SSB_SPROMSIZE_WORDS_R4 * sizeof(u16))
3985 -#define SSB_SPROM_BASE 0x1000
3986 +#define SSB_SPROM_BASE1 0x1000
3987 +#define SSB_SPROM_BASE31 0x0800
3988 #define SSB_SPROM_REVISION 0x107E
3989 #define SSB_SPROM_REVISION_REV 0x00FF /* SPROM Revision number */
3990 #define SSB_SPROM_REVISION_CRC 0xFF00 /* SPROM CRC8 value */
3991 diff --git a/include/math-emu/op-common.h b/include/math-emu/op-common.h
3992 index f456534..3e2576d 100644
3993 --- a/include/math-emu/op-common.h
3994 +++ b/include/math-emu/op-common.h
3995 @@ -799,7 +799,7 @@ do { \
3996 X##_e -= (_FP_W_TYPE_SIZE - rsize); \
3997 X##_e = rsize - X##_e - 1; \
3998 \
3999 - if (_FP_FRACBITS_##fs < rsize && _FP_WFRACBITS_##fs < X##_e) \
4000 + if (_FP_FRACBITS_##fs < rsize && _FP_WFRACBITS_##fs <= X##_e) \
4001 __FP_FRAC_SRS_1(ur_, (X##_e - _FP_WFRACBITS_##fs + 1), rsize);\
4002 _FP_FRAC_DISASSEMBLE_##wc(X, ur_, rsize); \
4003 if ((_FP_WFRACBITS_##fs - X##_e - 1) > 0) \
4004 diff --git a/include/net/sock.h b/include/net/sock.h
4005 index 86f2da1b..e45305d 100644
4006 --- a/include/net/sock.h
4007 +++ b/include/net/sock.h
4008 @@ -1130,12 +1130,7 @@ static inline void sk_tx_queue_clear(struct sock *sk)
4009
4010 static inline int sk_tx_queue_get(const struct sock *sk)
4011 {
4012 - return sk->sk_tx_queue_mapping;
4013 -}
4014 -
4015 -static inline bool sk_tx_queue_recorded(const struct sock *sk)
4016 -{
4017 - return (sk && sk->sk_tx_queue_mapping >= 0);
4018 + return sk ? sk->sk_tx_queue_mapping : -1;
4019 }
4020
4021 static inline void sk_set_socket(struct sock *sk, struct socket *sock)
4022 diff --git a/kernel/futex.c b/kernel/futex.c
4023 index e7a35f1..6a3a5fa 100644
4024 --- a/kernel/futex.c
4025 +++ b/kernel/futex.c
4026 @@ -429,20 +429,11 @@ static void free_pi_state(struct futex_pi_state *pi_state)
4027 static struct task_struct * futex_find_get_task(pid_t pid)
4028 {
4029 struct task_struct *p;
4030 - const struct cred *cred = current_cred(), *pcred;
4031
4032 rcu_read_lock();
4033 p = find_task_by_vpid(pid);
4034 - if (!p) {
4035 - p = ERR_PTR(-ESRCH);
4036 - } else {
4037 - pcred = __task_cred(p);
4038 - if (cred->euid != pcred->euid &&
4039 - cred->euid != pcred->uid)
4040 - p = ERR_PTR(-ESRCH);
4041 - else
4042 - get_task_struct(p);
4043 - }
4044 + if (p)
4045 + get_task_struct(p);
4046
4047 rcu_read_unlock();
4048
4049 @@ -564,8 +555,8 @@ lookup_pi_state(u32 uval, struct futex_hash_bucket *hb,
4050 if (!pid)
4051 return -ESRCH;
4052 p = futex_find_get_task(pid);
4053 - if (IS_ERR(p))
4054 - return PTR_ERR(p);
4055 + if (!p)
4056 + return -ESRCH;
4057
4058 /*
4059 * We need to look at the task state flags to figure out,
4060 diff --git a/kernel/irq/manage.c b/kernel/irq/manage.c
4061 index 0b23ff7..918c618 100644
4062 --- a/kernel/irq/manage.c
4063 +++ b/kernel/irq/manage.c
4064 @@ -436,6 +436,9 @@ int __irq_set_trigger(struct irq_desc *desc, unsigned int irq,
4065 /* note that IRQF_TRIGGER_MASK == IRQ_TYPE_SENSE_MASK */
4066 desc->status &= ~(IRQ_LEVEL | IRQ_TYPE_SENSE_MASK);
4067 desc->status |= flags;
4068 +
4069 + if (chip != desc->chip)
4070 + irq_chip_set_defaults(desc->chip);
4071 }
4072
4073 return ret;
4074 diff --git a/kernel/module.c b/kernel/module.c
4075 index 5b6ce39..3d1df51 100644
4076 --- a/kernel/module.c
4077 +++ b/kernel/module.c
4078 @@ -720,7 +720,6 @@ SYSCALL_DEFINE2(delete_module, const char __user *, name_user,
4079 mutex_lock(&module_mutex);
4080 /* Store the name of the last unloaded module for diagnostic purposes */
4081 strlcpy(last_unloaded_module, mod->name, sizeof(last_unloaded_module));
4082 - ddebug_remove_module(mod->name);
4083 free_module(mod);
4084
4085 out:
4086 @@ -1383,6 +1382,9 @@ static void free_module(struct module *mod)
4087 remove_sect_attrs(mod);
4088 mod_kobject_remove(mod);
4089
4090 + /* Remove dynamic debug info */
4091 + ddebug_remove_module(mod->name);
4092 +
4093 /* Arch-specific cleanup. */
4094 module_arch_cleanup(mod);
4095
4096 diff --git a/kernel/sched.c b/kernel/sched.c
4097 index da19c1e..12b9e73 100644
4098 --- a/kernel/sched.c
4099 +++ b/kernel/sched.c
4100 @@ -1259,6 +1259,12 @@ static void sched_avg_update(struct rq *rq)
4101 s64 period = sched_avg_period();
4102
4103 while ((s64)(rq->clock - rq->age_stamp) > period) {
4104 + /*
4105 + * Inline assembly required to prevent the compiler
4106 + * optimising this loop into a divmod call.
4107 + * See __iter_div_u64_rem() for another example of this.
4108 + */
4109 + asm("" : "+rm" (rq->age_stamp));
4110 rq->age_stamp += period;
4111 rq->rt_avg /= 2;
4112 }
4113 @@ -1713,9 +1719,6 @@ static void update_shares_locked(struct rq *rq, struct sched_domain *sd)
4114
4115 static void update_h_load(long cpu)
4116 {
4117 - if (root_task_group_empty())
4118 - return;
4119 -
4120 walk_tg_tree(tg_load_down, tg_nop, (void *)cpu);
4121 }
4122
4123 diff --git a/net/bridge/br_fdb.c b/net/bridge/br_fdb.c
4124 index 3b8e038..900431c 100644
4125 --- a/net/bridge/br_fdb.c
4126 +++ b/net/bridge/br_fdb.c
4127 @@ -127,7 +127,7 @@ void br_fdb_cleanup(unsigned long _data)
4128 {
4129 struct net_bridge *br = (struct net_bridge *)_data;
4130 unsigned long delay = hold_time(br);
4131 - unsigned long next_timer = jiffies + br->forward_delay;
4132 + unsigned long next_timer = jiffies + br->ageing_time;
4133 int i;
4134
4135 spin_lock_bh(&br->hash_lock);
4136 @@ -148,9 +148,7 @@ void br_fdb_cleanup(unsigned long _data)
4137 }
4138 spin_unlock_bh(&br->hash_lock);
4139
4140 - /* Add HZ/4 to ensure we round the jiffies upwards to be after the next
4141 - * timer, otherwise we might round down and will have no-op run. */
4142 - mod_timer(&br->gc_timer, round_jiffies(next_timer + HZ/4));
4143 + mod_timer(&br->gc_timer, round_jiffies_up(next_timer));
4144 }
4145
4146 /* Completely flush all dynamic entries in forwarding database.*/
4147 diff --git a/net/core/dev.c b/net/core/dev.c
4148 index f51f940..7eb7c1d 100644
4149 --- a/net/core/dev.c
4150 +++ b/net/core/dev.c
4151 @@ -1428,7 +1428,7 @@ static inline void net_timestamp(struct sk_buff *skb)
4152 *
4153 * return values:
4154 * NET_RX_SUCCESS (no congestion)
4155 - * NET_RX_DROP (packet was dropped)
4156 + * NET_RX_DROP (packet was dropped, but freed)
4157 *
4158 * dev_forward_skb can be used for injecting an skb from the
4159 * start_xmit function of one device into the receive queue
4160 @@ -1442,11 +1442,11 @@ int dev_forward_skb(struct net_device *dev, struct sk_buff *skb)
4161 {
4162 skb_orphan(skb);
4163
4164 - if (!(dev->flags & IFF_UP))
4165 - return NET_RX_DROP;
4166 -
4167 - if (skb->len > (dev->mtu + dev->hard_header_len))
4168 + if (!(dev->flags & IFF_UP) ||
4169 + (skb->len > (dev->mtu + dev->hard_header_len))) {
4170 + kfree_skb(skb);
4171 return NET_RX_DROP;
4172 + }
4173
4174 skb_dst_drop(skb);
4175 skb->tstamp.tv64 = 0;
4176 @@ -1915,12 +1915,11 @@ static inline u16 dev_cap_txqueue(struct net_device *dev, u16 queue_index)
4177 static struct netdev_queue *dev_pick_tx(struct net_device *dev,
4178 struct sk_buff *skb)
4179 {
4180 - u16 queue_index;
4181 + int queue_index;
4182 struct sock *sk = skb->sk;
4183
4184 - if (sk_tx_queue_recorded(sk)) {
4185 - queue_index = sk_tx_queue_get(sk);
4186 - } else {
4187 + queue_index = sk_tx_queue_get(sk);
4188 + if (queue_index < 0) {
4189 const struct net_device_ops *ops = dev->netdev_ops;
4190
4191 if (ops->ndo_select_queue) {
4192 diff --git a/net/core/ethtool.c b/net/core/ethtool.c
4193 index 236a998..ed2fb75 100644
4194 --- a/net/core/ethtool.c
4195 +++ b/net/core/ethtool.c
4196 @@ -209,22 +209,34 @@ static int ethtool_get_drvinfo(struct net_device *dev, void __user *useraddr)
4197 return 0;
4198 }
4199
4200 -static int ethtool_set_rxnfc(struct net_device *dev, void __user *useraddr)
4201 +static int ethtool_set_rxnfc(struct net_device *dev,
4202 + u32 cmd, void __user *useraddr)
4203 {
4204 - struct ethtool_rxnfc cmd;
4205 + struct ethtool_rxnfc info;
4206 + size_t info_size = sizeof(info);
4207
4208 if (!dev->ethtool_ops->set_rxnfc)
4209 return -EOPNOTSUPP;
4210
4211 - if (copy_from_user(&cmd, useraddr, sizeof(cmd)))
4212 + /* struct ethtool_rxnfc was originally defined for
4213 + * ETHTOOL_{G,S}RXFH with only the cmd, flow_type and data
4214 + * members. User-space might still be using that
4215 + * definition. */
4216 + if (cmd == ETHTOOL_SRXFH)
4217 + info_size = (offsetof(struct ethtool_rxnfc, data) +
4218 + sizeof(info.data));
4219 +
4220 + if (copy_from_user(&info, useraddr, info_size))
4221 return -EFAULT;
4222
4223 - return dev->ethtool_ops->set_rxnfc(dev, &cmd);
4224 + return dev->ethtool_ops->set_rxnfc(dev, &info);
4225 }
4226
4227 -static int ethtool_get_rxnfc(struct net_device *dev, void __user *useraddr)
4228 +static int ethtool_get_rxnfc(struct net_device *dev,
4229 + u32 cmd, void __user *useraddr)
4230 {
4231 struct ethtool_rxnfc info;
4232 + size_t info_size = sizeof(info);
4233 const struct ethtool_ops *ops = dev->ethtool_ops;
4234 int ret;
4235 void *rule_buf = NULL;
4236 @@ -232,13 +244,22 @@ static int ethtool_get_rxnfc(struct net_device *dev, void __user *useraddr)
4237 if (!ops->get_rxnfc)
4238 return -EOPNOTSUPP;
4239
4240 - if (copy_from_user(&info, useraddr, sizeof(info)))
4241 + /* struct ethtool_rxnfc was originally defined for
4242 + * ETHTOOL_{G,S}RXFH with only the cmd, flow_type and data
4243 + * members. User-space might still be using that
4244 + * definition. */
4245 + if (cmd == ETHTOOL_GRXFH)
4246 + info_size = (offsetof(struct ethtool_rxnfc, data) +
4247 + sizeof(info.data));
4248 +
4249 + if (copy_from_user(&info, useraddr, info_size))
4250 return -EFAULT;
4251
4252 if (info.cmd == ETHTOOL_GRXCLSRLALL) {
4253 if (info.rule_cnt > 0) {
4254 - rule_buf = kmalloc(info.rule_cnt * sizeof(u32),
4255 - GFP_USER);
4256 + if (info.rule_cnt <= KMALLOC_MAX_SIZE / sizeof(u32))
4257 + rule_buf = kmalloc(info.rule_cnt * sizeof(u32),
4258 + GFP_USER);
4259 if (!rule_buf)
4260 return -ENOMEM;
4261 }
4262 @@ -249,7 +270,7 @@ static int ethtool_get_rxnfc(struct net_device *dev, void __user *useraddr)
4263 goto err_out;
4264
4265 ret = -EFAULT;
4266 - if (copy_to_user(useraddr, &info, sizeof(info)))
4267 + if (copy_to_user(useraddr, &info, info_size))
4268 goto err_out;
4269
4270 if (rule_buf) {
4271 @@ -1094,12 +1115,12 @@ int dev_ethtool(struct net *net, struct ifreq *ifr)
4272 case ETHTOOL_GRXCLSRLCNT:
4273 case ETHTOOL_GRXCLSRULE:
4274 case ETHTOOL_GRXCLSRLALL:
4275 - rc = ethtool_get_rxnfc(dev, useraddr);
4276 + rc = ethtool_get_rxnfc(dev, ethcmd, useraddr);
4277 break;
4278 case ETHTOOL_SRXFH:
4279 case ETHTOOL_SRXCLSRLDEL:
4280 case ETHTOOL_SRXCLSRLINS:
4281 - rc = ethtool_set_rxnfc(dev, useraddr);
4282 + rc = ethtool_set_rxnfc(dev, ethcmd, useraddr);
4283 break;
4284 case ETHTOOL_GGRO:
4285 rc = ethtool_get_gro(dev, useraddr);
4286 diff --git a/net/core/neighbour.c b/net/core/neighbour.c
4287 index f35377b..3fdffe0 100644
4288 --- a/net/core/neighbour.c
4289 +++ b/net/core/neighbour.c
4290 @@ -945,7 +945,10 @@ static void neigh_update_hhs(struct neighbour *neigh)
4291 {
4292 struct hh_cache *hh;
4293 void (*update)(struct hh_cache*, const struct net_device*, const unsigned char *)
4294 - = neigh->dev->header_ops->cache_update;
4295 + = NULL;
4296 +
4297 + if (neigh->dev->header_ops)
4298 + update = neigh->dev->header_ops->cache_update;
4299
4300 if (update) {
4301 for (hh = neigh->hh; hh; hh = hh->hh_next) {
4302 diff --git a/net/core/skbuff.c b/net/core/skbuff.c
4303 index 93c4e06..cad8e97 100644
4304 --- a/net/core/skbuff.c
4305 +++ b/net/core/skbuff.c
4306 @@ -2729,6 +2729,7 @@ int skb_gro_receive(struct sk_buff **head, struct sk_buff *skb)
4307 *NAPI_GRO_CB(nskb) = *NAPI_GRO_CB(p);
4308 skb_shinfo(nskb)->frag_list = p;
4309 skb_shinfo(nskb)->gso_size = pinfo->gso_size;
4310 + pinfo->gso_size = 0;
4311 skb_header_release(p);
4312 nskb->prev = p;
4313
4314 diff --git a/net/dccp/input.c b/net/dccp/input.c
4315 index 7648f31..071b64e 100644
4316 --- a/net/dccp/input.c
4317 +++ b/net/dccp/input.c
4318 @@ -123,9 +123,9 @@ static int dccp_rcv_closereq(struct sock *sk, struct sk_buff *skb)
4319 return queued;
4320 }
4321
4322 -static u8 dccp_reset_code_convert(const u8 code)
4323 +static u16 dccp_reset_code_convert(const u8 code)
4324 {
4325 - const u8 error_code[] = {
4326 + const u16 error_code[] = {
4327 [DCCP_RESET_CODE_CLOSED] = 0, /* normal termination */
4328 [DCCP_RESET_CODE_UNSPECIFIED] = 0, /* nothing known */
4329 [DCCP_RESET_CODE_ABORTED] = ECONNRESET,
4330 @@ -147,7 +147,7 @@ static u8 dccp_reset_code_convert(const u8 code)
4331
4332 static void dccp_rcv_reset(struct sock *sk, struct sk_buff *skb)
4333 {
4334 - u8 err = dccp_reset_code_convert(dccp_hdr_reset(skb)->dccph_reset_code);
4335 + u16 err = dccp_reset_code_convert(dccp_hdr_reset(skb)->dccph_reset_code);
4336
4337 sk->sk_err = err;
4338
4339 diff --git a/net/ipv4/arp.c b/net/ipv4/arp.c
4340 index c95cd93..d8d2bc6 100644
4341 --- a/net/ipv4/arp.c
4342 +++ b/net/ipv4/arp.c
4343 @@ -619,13 +619,13 @@ struct sk_buff *arp_create(int type, int ptype, __be32 dest_ip,
4344 #endif
4345 #endif
4346
4347 -#ifdef CONFIG_FDDI
4348 +#if defined(CONFIG_FDDI) || defined(CONFIG_FDDI_MODULE)
4349 case ARPHRD_FDDI:
4350 arp->ar_hrd = htons(ARPHRD_ETHER);
4351 arp->ar_pro = htons(ETH_P_IP);
4352 break;
4353 #endif
4354 -#ifdef CONFIG_TR
4355 +#if defined(CONFIG_TR) || defined(CONFIG_TR_MODULE)
4356 case ARPHRD_IEEE802_TR:
4357 arp->ar_hrd = htons(ARPHRD_IEEE802);
4358 arp->ar_pro = htons(ETH_P_IP);
4359 @@ -1005,7 +1005,7 @@ static int arp_req_set(struct net *net, struct arpreq *r,
4360 return -EINVAL;
4361 }
4362 switch (dev->type) {
4363 -#ifdef CONFIG_FDDI
4364 +#if defined(CONFIG_FDDI) || defined(CONFIG_FDDI_MODULE)
4365 case ARPHRD_FDDI:
4366 /*
4367 * According to RFC 1390, FDDI devices should accept ARP
4368 diff --git a/net/ipv4/syncookies.c b/net/ipv4/syncookies.c
4369 index 66fd80e..214a2f6 100644
4370 --- a/net/ipv4/syncookies.c
4371 +++ b/net/ipv4/syncookies.c
4372 @@ -347,7 +347,7 @@ struct sock *cookie_v4_check(struct sock *sk, struct sk_buff *skb,
4373 { .sport = th->dest,
4374 .dport = th->source } } };
4375 security_req_classify_flow(req, &fl);
4376 - if (ip_route_output_key(&init_net, &rt, &fl)) {
4377 + if (ip_route_output_key(sock_net(sk), &rt, &fl)) {
4378 reqsk_free(req);
4379 goto out;
4380 }
4381 diff --git a/net/ipv4/tcp_output.c b/net/ipv4/tcp_output.c
4382 index dc26654..1d04fa0 100644
4383 --- a/net/ipv4/tcp_output.c
4384 +++ b/net/ipv4/tcp_output.c
4385 @@ -659,7 +659,6 @@ static unsigned tcp_synack_options(struct sock *sk,
4386 u8 cookie_plus = (xvp != NULL && !xvp->cookie_out_never) ?
4387 xvp->cookie_plus :
4388 0;
4389 - bool doing_ts = ireq->tstamp_ok;
4390
4391 #ifdef CONFIG_TCP_MD5SIG
4392 *md5 = tcp_rsk(req)->af_specific->md5_lookup(sk, req);
4393 @@ -672,7 +671,7 @@ static unsigned tcp_synack_options(struct sock *sk,
4394 * rather than TS in order to fit in better with old,
4395 * buggy kernels, but that was deemed to be unnecessary.
4396 */
4397 - doing_ts &= !ireq->sack_ok;
4398 + ireq->tstamp_ok &= !ireq->sack_ok;
4399 }
4400 #else
4401 *md5 = NULL;
4402 @@ -687,7 +686,7 @@ static unsigned tcp_synack_options(struct sock *sk,
4403 opts->options |= OPTION_WSCALE;
4404 remaining -= TCPOLEN_WSCALE_ALIGNED;
4405 }
4406 - if (likely(doing_ts)) {
4407 + if (likely(ireq->tstamp_ok)) {
4408 opts->options |= OPTION_TS;
4409 opts->tsval = TCP_SKB_CB(skb)->when;
4410 opts->tsecr = req->ts_recent;
4411 @@ -695,7 +694,7 @@ static unsigned tcp_synack_options(struct sock *sk,
4412 }
4413 if (likely(ireq->sack_ok)) {
4414 opts->options |= OPTION_SACK_ADVERTISE;
4415 - if (unlikely(!doing_ts))
4416 + if (unlikely(!ireq->tstamp_ok))
4417 remaining -= TCPOLEN_SACKPERM_ALIGNED;
4418 }
4419
4420 @@ -703,7 +702,7 @@ static unsigned tcp_synack_options(struct sock *sk,
4421 * If the <SYN> options fit, the same options should fit now!
4422 */
4423 if (*md5 == NULL &&
4424 - doing_ts &&
4425 + ireq->tstamp_ok &&
4426 cookie_plus > TCPOLEN_COOKIE_BASE) {
4427 int need = cookie_plus; /* has TCPOLEN_COOKIE_BASE */
4428
4429 @@ -2204,6 +2203,9 @@ void tcp_xmit_retransmit_queue(struct sock *sk)
4430 int mib_idx;
4431 int fwd_rexmitting = 0;
4432
4433 + if (!tp->packets_out)
4434 + return;
4435 +
4436 if (!tp->lost_out)
4437 tp->retransmit_high = tp->snd_una;
4438
4439 diff --git a/net/ipv6/af_inet6.c b/net/ipv6/af_inet6.c
4440 index 12e69d3..3c11913 100644
4441 --- a/net/ipv6/af_inet6.c
4442 +++ b/net/ipv6/af_inet6.c
4443 @@ -199,7 +199,7 @@ lookup_protocol:
4444
4445 inet_sk(sk)->pinet6 = np = inet6_sk_generic(sk);
4446 np->hop_limit = -1;
4447 - np->mcast_hops = -1;
4448 + np->mcast_hops = IPV6_DEFAULT_MCASTHOPS;
4449 np->mc_loop = 1;
4450 np->pmtudisc = IPV6_PMTUDISC_WANT;
4451 np->ipv6only = net->ipv6.sysctl.bindv6only;
4452 diff --git a/net/ipv6/ndisc.c b/net/ipv6/ndisc.c
4453 index c458527..d6c3652 100644
4454 --- a/net/ipv6/ndisc.c
4455 +++ b/net/ipv6/ndisc.c
4456 @@ -585,6 +585,7 @@ static void ndisc_send_na(struct net_device *dev, struct neighbour *neigh,
4457 src_addr = solicited_addr;
4458 if (ifp->flags & IFA_F_OPTIMISTIC)
4459 override = 0;
4460 + inc_opt |= ifp->idev->cnf.force_tllao;
4461 in6_ifa_put(ifp);
4462 } else {
4463 if (ipv6_dev_get_saddr(dev_net(dev), dev, daddr,
4464 @@ -598,7 +599,6 @@ static void ndisc_send_na(struct net_device *dev, struct neighbour *neigh,
4465 icmp6h.icmp6_solicited = solicited;
4466 icmp6h.icmp6_override = override;
4467
4468 - inc_opt |= ifp->idev->cnf.force_tllao;
4469 __ndisc_send(dev, neigh, daddr, src_addr,
4470 &icmp6h, solicited_addr,
4471 inc_opt ? ND_OPT_TARGET_LL_ADDR : 0);
4472 diff --git a/net/ipv6/netfilter/ip6t_REJECT.c b/net/ipv6/netfilter/ip6t_REJECT.c
4473 index 8311ca3..35ae554 100644
4474 --- a/net/ipv6/netfilter/ip6t_REJECT.c
4475 +++ b/net/ipv6/netfilter/ip6t_REJECT.c
4476 @@ -95,9 +95,11 @@ static void send_reset(struct net *net, struct sk_buff *oldskb)
4477 fl.fl_ip_dport = otcph.source;
4478 security_skb_classify_flow(oldskb, &fl);
4479 dst = ip6_route_output(net, NULL, &fl);
4480 - if (dst == NULL)
4481 + if (dst == NULL || dst->error) {
4482 + dst_release(dst);
4483 return;
4484 - if (dst->error || xfrm_lookup(net, &dst, &fl, NULL, 0))
4485 + }
4486 + if (xfrm_lookup(net, &dst, &fl, NULL, 0))
4487 return;
4488
4489 hh_len = (dst->dev->hard_header_len + 15)&~15;
4490 diff --git a/net/llc/llc_sap.c b/net/llc/llc_sap.c
4491 index 008de1f..2facbe3 100644
4492 --- a/net/llc/llc_sap.c
4493 +++ b/net/llc/llc_sap.c
4494 @@ -30,7 +30,7 @@ static int llc_mac_header_len(unsigned short devtype)
4495 case ARPHRD_ETHER:
4496 case ARPHRD_LOOPBACK:
4497 return sizeof(struct ethhdr);
4498 -#ifdef CONFIG_TR
4499 +#if defined(CONFIG_TR) || defined(CONFIG_TR_MODULE)
4500 case ARPHRD_IEEE802_TR:
4501 return sizeof(struct trh_hdr);
4502 #endif
4503 diff --git a/net/mac80211/mlme.c b/net/mac80211/mlme.c
4504 index 1a209ac..ecc1e4f 100644
4505 --- a/net/mac80211/mlme.c
4506 +++ b/net/mac80211/mlme.c
4507 @@ -270,12 +270,6 @@ static void ieee80211_send_assoc(struct ieee80211_sub_if_data *sdata,
4508 if (wk->bss->wmm_used)
4509 wmm = 1;
4510
4511 - /* get all rates supported by the device and the AP as
4512 - * some APs don't like getting a superset of their rates
4513 - * in the association request (e.g. D-Link DAP 1353 in
4514 - * b-only mode) */
4515 - rates_len = ieee80211_compatible_rates(wk->bss, sband, &rates);
4516 -
4517 if ((wk->bss->cbss.capability & WLAN_CAPABILITY_SPECTRUM_MGMT) &&
4518 (local->hw.flags & IEEE80211_HW_SPECTRUM_MGMT))
4519 capab |= WLAN_CAPABILITY_SPECTRUM_MGMT;
4520 @@ -310,6 +304,17 @@ static void ieee80211_send_assoc(struct ieee80211_sub_if_data *sdata,
4521 *pos++ = wk->ssid_len;
4522 memcpy(pos, wk->ssid, wk->ssid_len);
4523
4524 + if (wk->bss->supp_rates_len) {
4525 + /* get all rates supported by the device and the AP as
4526 + * some APs don't like getting a superset of their rates
4527 + * in the association request (e.g. D-Link DAP 1353 in
4528 + * b-only mode) */
4529 + rates_len = ieee80211_compatible_rates(wk->bss, sband, &rates);
4530 + } else {
4531 + rates = ~0;
4532 + rates_len = sband->n_bitrates;
4533 + }
4534 +
4535 /* add all rates which were marked to be used above */
4536 supp_rates_len = rates_len;
4537 if (supp_rates_len > 8)
4538 diff --git a/net/mac80211/rx.c b/net/mac80211/rx.c
4539 index 48d8fdf..701e63a 100644
4540 --- a/net/mac80211/rx.c
4541 +++ b/net/mac80211/rx.c
4542 @@ -2023,6 +2023,11 @@ ieee80211_rx_h_action(struct ieee80211_rx_data *rx)
4543 return RX_CONTINUE;
4544 }
4545 break;
4546 + case WLAN_CATEGORY_MESH_PLINK:
4547 + case WLAN_CATEGORY_MESH_PATH_SEL:
4548 + if (ieee80211_vif_is_mesh(&sdata->vif))
4549 + return ieee80211_mesh_rx_mgmt(sdata, rx->skb);
4550 + break;
4551 default:
4552 /* do not process rejected action frames */
4553 if (mgmt->u.action.category & 0x80)
4554 diff --git a/net/mac80211/scan.c b/net/mac80211/scan.c
4555 index bc17cf7..697dc54 100644
4556 --- a/net/mac80211/scan.c
4557 +++ b/net/mac80211/scan.c
4558 @@ -60,7 +60,7 @@ ieee80211_bss_info_update(struct ieee80211_local *local,
4559 bool beacon)
4560 {
4561 struct ieee80211_bss *bss;
4562 - int clen;
4563 + int clen, srlen;
4564 s32 signal = 0;
4565
4566 if (local->hw.flags & IEEE80211_HW_SIGNAL_DBM)
4567 @@ -92,23 +92,24 @@ ieee80211_bss_info_update(struct ieee80211_local *local,
4568 if (bss->dtim_period == 0)
4569 bss->dtim_period = 1;
4570
4571 - bss->supp_rates_len = 0;
4572 + /* replace old supported rates if we get new values */
4573 + srlen = 0;
4574 if (elems->supp_rates) {
4575 - clen = IEEE80211_MAX_SUPP_RATES - bss->supp_rates_len;
4576 + clen = IEEE80211_MAX_SUPP_RATES;
4577 if (clen > elems->supp_rates_len)
4578 clen = elems->supp_rates_len;
4579 - memcpy(&bss->supp_rates[bss->supp_rates_len], elems->supp_rates,
4580 - clen);
4581 - bss->supp_rates_len += clen;
4582 + memcpy(bss->supp_rates, elems->supp_rates, clen);
4583 + srlen += clen;
4584 }
4585 if (elems->ext_supp_rates) {
4586 - clen = IEEE80211_MAX_SUPP_RATES - bss->supp_rates_len;
4587 + clen = IEEE80211_MAX_SUPP_RATES - srlen;
4588 if (clen > elems->ext_supp_rates_len)
4589 clen = elems->ext_supp_rates_len;
4590 - memcpy(&bss->supp_rates[bss->supp_rates_len],
4591 - elems->ext_supp_rates, clen);
4592 - bss->supp_rates_len += clen;
4593 + memcpy(bss->supp_rates + srlen, elems->ext_supp_rates, clen);
4594 + srlen += clen;
4595 }
4596 + if (srlen)
4597 + bss->supp_rates_len = srlen;
4598
4599 bss->wmm_used = elems->wmm_param || elems->wmm_info;
4600
4601 diff --git a/net/netfilter/ipvs/ip_vs_conn.c b/net/netfilter/ipvs/ip_vs_conn.c
4602 index 27c30cf..95682e5 100644
4603 --- a/net/netfilter/ipvs/ip_vs_conn.c
4604 +++ b/net/netfilter/ipvs/ip_vs_conn.c
4605 @@ -146,6 +146,7 @@ static inline int ip_vs_conn_hash(struct ip_vs_conn *cp)
4606 hash = ip_vs_conn_hashkey(cp->af, cp->protocol, &cp->caddr, cp->cport);
4607
4608 ct_write_lock(hash);
4609 + spin_lock(&cp->lock);
4610
4611 if (!(cp->flags & IP_VS_CONN_F_HASHED)) {
4612 list_add(&cp->c_list, &ip_vs_conn_tab[hash]);
4613 @@ -158,6 +159,7 @@ static inline int ip_vs_conn_hash(struct ip_vs_conn *cp)
4614 ret = 0;
4615 }
4616
4617 + spin_unlock(&cp->lock);
4618 ct_write_unlock(hash);
4619
4620 return ret;
4621 @@ -177,6 +179,7 @@ static inline int ip_vs_conn_unhash(struct ip_vs_conn *cp)
4622 hash = ip_vs_conn_hashkey(cp->af, cp->protocol, &cp->caddr, cp->cport);
4623
4624 ct_write_lock(hash);
4625 + spin_lock(&cp->lock);
4626
4627 if (cp->flags & IP_VS_CONN_F_HASHED) {
4628 list_del(&cp->c_list);
4629 @@ -186,6 +189,7 @@ static inline int ip_vs_conn_unhash(struct ip_vs_conn *cp)
4630 } else
4631 ret = 0;
4632
4633 + spin_unlock(&cp->lock);
4634 ct_write_unlock(hash);
4635
4636 return ret;
4637 diff --git a/net/sunrpc/xprtsock.c b/net/sunrpc/xprtsock.c
4638 index 4df801d..2334279 100644
4639 --- a/net/sunrpc/xprtsock.c
4640 +++ b/net/sunrpc/xprtsock.c
4641 @@ -224,7 +224,8 @@ struct sock_xprt {
4642 * State of TCP reply receive
4643 */
4644 __be32 tcp_fraghdr,
4645 - tcp_xid;
4646 + tcp_xid,
4647 + tcp_calldir;
4648
4649 u32 tcp_offset,
4650 tcp_reclen;
4651 @@ -947,7 +948,7 @@ static inline void xs_tcp_read_calldir(struct sock_xprt *transport,
4652 {
4653 size_t len, used;
4654 u32 offset;
4655 - __be32 calldir;
4656 + char *p;
4657
4658 /*
4659 * We want transport->tcp_offset to be 8 at the end of this routine
4660 @@ -956,26 +957,33 @@ static inline void xs_tcp_read_calldir(struct sock_xprt *transport,
4661 * transport->tcp_offset is 4 (after having already read the xid).
4662 */
4663 offset = transport->tcp_offset - sizeof(transport->tcp_xid);
4664 - len = sizeof(calldir) - offset;
4665 + len = sizeof(transport->tcp_calldir) - offset;
4666 dprintk("RPC: reading CALL/REPLY flag (%Zu bytes)\n", len);
4667 - used = xdr_skb_read_bits(desc, &calldir, len);
4668 + p = ((char *) &transport->tcp_calldir) + offset;
4669 + used = xdr_skb_read_bits(desc, p, len);
4670 transport->tcp_offset += used;
4671 if (used != len)
4672 return;
4673 transport->tcp_flags &= ~TCP_RCV_READ_CALLDIR;
4674 - transport->tcp_flags |= TCP_RCV_COPY_CALLDIR;
4675 - transport->tcp_flags |= TCP_RCV_COPY_DATA;
4676 /*
4677 * We don't yet have the XDR buffer, so we will write the calldir
4678 * out after we get the buffer from the 'struct rpc_rqst'
4679 */
4680 - if (ntohl(calldir) == RPC_REPLY)
4681 + switch (ntohl(transport->tcp_calldir)) {
4682 + case RPC_REPLY:
4683 + transport->tcp_flags |= TCP_RCV_COPY_CALLDIR;
4684 + transport->tcp_flags |= TCP_RCV_COPY_DATA;
4685 transport->tcp_flags |= TCP_RPC_REPLY;
4686 - else
4687 + break;
4688 + case RPC_CALL:
4689 + transport->tcp_flags |= TCP_RCV_COPY_CALLDIR;
4690 + transport->tcp_flags |= TCP_RCV_COPY_DATA;
4691 transport->tcp_flags &= ~TCP_RPC_REPLY;
4692 - dprintk("RPC: reading %s CALL/REPLY flag %08x\n",
4693 - (transport->tcp_flags & TCP_RPC_REPLY) ?
4694 - "reply for" : "request with", calldir);
4695 + break;
4696 + default:
4697 + dprintk("RPC: invalid request message type\n");
4698 + xprt_force_disconnect(&transport->xprt);
4699 + }
4700 xs_tcp_check_fraghdr(transport);
4701 }
4702
4703 @@ -995,12 +1003,10 @@ static inline void xs_tcp_read_common(struct rpc_xprt *xprt,
4704 /*
4705 * Save the RPC direction in the XDR buffer
4706 */
4707 - __be32 calldir = transport->tcp_flags & TCP_RPC_REPLY ?
4708 - htonl(RPC_REPLY) : 0;
4709 -
4710 memcpy(rcvbuf->head[0].iov_base + transport->tcp_copied,
4711 - &calldir, sizeof(calldir));
4712 - transport->tcp_copied += sizeof(calldir);
4713 + &transport->tcp_calldir,
4714 + sizeof(transport->tcp_calldir));
4715 + transport->tcp_copied += sizeof(transport->tcp_calldir);
4716 transport->tcp_flags &= ~TCP_RCV_COPY_CALLDIR;
4717 }
4718
4719 diff --git a/scripts/mod/modpost.c b/scripts/mod/modpost.c
4720 index 2092361..17c95a3 100644
4721 --- a/scripts/mod/modpost.c
4722 +++ b/scripts/mod/modpost.c
4723 @@ -1318,7 +1318,7 @@ static unsigned int *reloc_location(struct elf_info *elf,
4724 int section = sechdr->sh_info;
4725
4726 return (void *)elf->hdr + sechdrs[section].sh_offset +
4727 - (r->r_offset - sechdrs[section].sh_addr);
4728 + r->r_offset - sechdrs[section].sh_addr;
4729 }
4730
4731 static int addend_386_rel(struct elf_info *elf, Elf_Shdr *sechdr, Elf_Rela *r)
4732 diff --git a/sound/pci/echoaudio/echoaudio.c b/sound/pci/echoaudio/echoaudio.c
4733 index 1305f7c..641d7f0 100644
4734 --- a/sound/pci/echoaudio/echoaudio.c
4735 +++ b/sound/pci/echoaudio/echoaudio.c
4736 @@ -1821,7 +1821,9 @@ static irqreturn_t snd_echo_interrupt(int irq, void *dev_id)
4737 /* The hardware doesn't tell us which substream caused the irq,
4738 thus we have to check all running substreams. */
4739 for (ss = 0; ss < DSP_MAXPIPES; ss++) {
4740 - if ((substream = chip->substream[ss])) {
4741 + substream = chip->substream[ss];
4742 + if (substream && ((struct audiopipe *)substream->runtime->
4743 + private_data)->state == PIPE_STATE_STARTED) {
4744 period = pcm_pointer(substream) /
4745 substream->runtime->period_size;
4746 if (period != chip->last_period[ss]) {
4747 diff --git a/sound/pci/hda/patch_realtek.c b/sound/pci/hda/patch_realtek.c
4748 index 187a467..dea03d9 100644
4749 --- a/sound/pci/hda/patch_realtek.c
4750 +++ b/sound/pci/hda/patch_realtek.c
4751 @@ -9122,6 +9122,7 @@ static struct snd_pci_quirk alc882_ssid_cfg_tbl[] = {
4752 SND_PCI_QUIRK(0x106b, 0x3e00, "iMac 24 Aluminum", ALC885_IMAC24),
4753 SND_PCI_QUIRK(0x106b, 0x4900, "iMac 9,1 Aluminum", ALC885_IMAC91),
4754 SND_PCI_QUIRK(0x106b, 0x3f00, "Macbook 5,1", ALC885_MB5),
4755 + SND_PCI_QUIRK(0x106b, 0x4a00, "Macbook 5,2", ALC885_MB5),
4756 /* FIXME: HP jack sense seems not working for MBP 5,1 or 5,2,
4757 * so apparently no perfect solution yet
4758 */
4759 diff --git a/sound/soc/codecs/wm8776.c b/sound/soc/codecs/wm8776.c
4760 index ab2c0da..ae54f7e 100644
4761 --- a/sound/soc/codecs/wm8776.c
4762 +++ b/sound/soc/codecs/wm8776.c
4763 @@ -93,7 +93,6 @@ SOC_DAPM_SINGLE("Bypass Switch", WM8776_OUTMUX, 2, 1, 0),
4764
4765 static const struct snd_soc_dapm_widget wm8776_dapm_widgets[] = {
4766 SND_SOC_DAPM_INPUT("AUX"),
4767 -SND_SOC_DAPM_INPUT("AUX"),
4768
4769 SND_SOC_DAPM_INPUT("AIN1"),
4770 SND_SOC_DAPM_INPUT("AIN2"),
4771 diff --git a/tools/perf/util/callchain.h b/tools/perf/util/callchain.h
4772 index ad4626d..1b7a389 100644
4773 --- a/tools/perf/util/callchain.h
4774 +++ b/tools/perf/util/callchain.h
4775 @@ -48,6 +48,9 @@ static inline void callchain_init(struct callchain_node *node)
4776 INIT_LIST_HEAD(&node->brothers);
4777 INIT_LIST_HEAD(&node->children);
4778 INIT_LIST_HEAD(&node->val);
4779 +
4780 + node->parent = NULL;
4781 + node->hit = 0;
4782 }
4783
4784 static inline u64 cumul_hits(struct callchain_node *node)
4785 diff --git a/virt/kvm/ioapic.c b/virt/kvm/ioapic.c
4786 index 38a2d20..fc4a7e3 100644
4787 --- a/virt/kvm/ioapic.c
4788 +++ b/virt/kvm/ioapic.c
4789 @@ -177,12 +177,13 @@ static int ioapic_deliver(struct kvm_ioapic *ioapic, int irq)
4790
4791 int kvm_ioapic_set_irq(struct kvm_ioapic *ioapic, int irq, int level)
4792 {
4793 - u32 old_irr = ioapic->irr;
4794 + u32 old_irr;
4795 u32 mask = 1 << irq;
4796 union kvm_ioapic_redirect_entry entry;
4797 int ret = 1;
4798
4799 mutex_lock(&ioapic->lock);
4800 + old_irr = ioapic->irr;
4801 if (irq >= 0 && irq < IOAPIC_NUM_PINS) {
4802 entry = ioapic->redirtbl[irq];
4803 level ^= entry.fields.polarity;