Magellan Linux

Annotation of /trunk/kernel-magellan/patches-3.17/0102-3.17.3-all-fixes.patch

Parent Directory Parent Directory | Revision Log Revision Log


Revision 2525 - (hide annotations) (download)
Thu Nov 20 11:30:09 2014 UTC (9 years, 5 months ago) by niro
File size: 407935 byte(s)
-linux-3.17.3
1 niro 2525 diff --git a/Makefile b/Makefile
2     index 390afde6538e..57a45b1ea2c7 100644
3     --- a/Makefile
4     +++ b/Makefile
5     @@ -1,6 +1,6 @@
6     VERSION = 3
7     PATCHLEVEL = 17
8     -SUBLEVEL = 2
9     +SUBLEVEL = 3
10     EXTRAVERSION =
11     NAME = Shuffling Zombie Juror
12    
13     diff --git a/arch/arc/boot/dts/nsimosci.dts b/arch/arc/boot/dts/nsimosci.dts
14     index 4f31b2eb5cdf..398064cef746 100644
15     --- a/arch/arc/boot/dts/nsimosci.dts
16     +++ b/arch/arc/boot/dts/nsimosci.dts
17     @@ -20,7 +20,7 @@
18     /* this is for console on PGU */
19     /* bootargs = "console=tty0 consoleblank=0"; */
20     /* this is for console on serial */
21     - bootargs = "earlycon=uart8250,mmio32,0xc0000000,115200n8 console=ttyS0,115200n8 consoleblank=0 debug";
22     + bootargs = "earlycon=uart8250,mmio32,0xc0000000,115200n8 console=tty0 console=ttyS0,115200n8 consoleblank=0 debug";
23     };
24    
25     aliases {
26     diff --git a/arch/arc/include/asm/arcregs.h b/arch/arc/include/asm/arcregs.h
27     index 372466b371bf..a9cbabe22d99 100644
28     --- a/arch/arc/include/asm/arcregs.h
29     +++ b/arch/arc/include/asm/arcregs.h
30     @@ -191,14 +191,6 @@
31     #define PAGES_TO_KB(n_pages) ((n_pages) << (PAGE_SHIFT - 10))
32     #define PAGES_TO_MB(n_pages) (PAGES_TO_KB(n_pages) >> 10)
33    
34     -#ifdef CONFIG_ARC_FPU_SAVE_RESTORE
35     -/* These DPFP regs need to be saved/restored across ctx-sw */
36     -struct arc_fpu {
37     - struct {
38     - unsigned int l, h;
39     - } aux_dpfp[2];
40     -};
41     -#endif
42    
43     /*
44     ***************************************************************
45     diff --git a/arch/arc/include/asm/kgdb.h b/arch/arc/include/asm/kgdb.h
46     index b65fca7ffeb5..fea931634136 100644
47     --- a/arch/arc/include/asm/kgdb.h
48     +++ b/arch/arc/include/asm/kgdb.h
49     @@ -19,7 +19,7 @@
50     * register API yet */
51     #undef DBG_MAX_REG_NUM
52    
53     -#define GDB_MAX_REGS 39
54     +#define GDB_MAX_REGS 87
55    
56     #define BREAK_INSTR_SIZE 2
57     #define CACHE_FLUSH_IS_SAFE 1
58     @@ -33,23 +33,27 @@ static inline void arch_kgdb_breakpoint(void)
59    
60     extern void kgdb_trap(struct pt_regs *regs);
61    
62     -enum arc700_linux_regnums {
63     +/* This is the numbering of registers according to the GDB. See GDB's
64     + * arc-tdep.h for details.
65     + *
66     + * Registers are ordered for GDB 7.5. It is incompatible with GDB 6.8. */
67     +enum arc_linux_regnums {
68     _R0 = 0,
69     _R1, _R2, _R3, _R4, _R5, _R6, _R7, _R8, _R9, _R10, _R11, _R12, _R13,
70     _R14, _R15, _R16, _R17, _R18, _R19, _R20, _R21, _R22, _R23, _R24,
71     _R25, _R26,
72     - _BTA = 27,
73     - _LP_START = 28,
74     - _LP_END = 29,
75     - _LP_COUNT = 30,
76     - _STATUS32 = 31,
77     - _BLINK = 32,
78     - _FP = 33,
79     - __SP = 34,
80     - _EFA = 35,
81     - _RET = 36,
82     - _ORIG_R8 = 37,
83     - _STOP_PC = 38
84     + _FP = 27,
85     + __SP = 28,
86     + _R30 = 30,
87     + _BLINK = 31,
88     + _LP_COUNT = 60,
89     + _STOP_PC = 64,
90     + _RET = 64,
91     + _LP_START = 65,
92     + _LP_END = 66,
93     + _STATUS32 = 67,
94     + _ECR = 76,
95     + _BTA = 82,
96     };
97    
98     #else
99     diff --git a/arch/arc/include/asm/processor.h b/arch/arc/include/asm/processor.h
100     index 82588f3ba77f..38175c06f168 100644
101     --- a/arch/arc/include/asm/processor.h
102     +++ b/arch/arc/include/asm/processor.h
103     @@ -20,6 +20,15 @@
104    
105     #include <asm/ptrace.h>
106    
107     +#ifdef CONFIG_ARC_FPU_SAVE_RESTORE
108     +/* These DPFP regs need to be saved/restored across ctx-sw */
109     +struct arc_fpu {
110     + struct {
111     + unsigned int l, h;
112     + } aux_dpfp[2];
113     +};
114     +#endif
115     +
116     /* Arch specific stuff which needs to be saved per task.
117     * However these items are not so important so as to earn a place in
118     * struct thread_info
119     diff --git a/arch/arm/Kconfig.debug b/arch/arm/Kconfig.debug
120     index b11ad54f8d17..2f78e543b315 100644
121     --- a/arch/arm/Kconfig.debug
122     +++ b/arch/arm/Kconfig.debug
123     @@ -1142,7 +1142,7 @@ config DEBUG_UART_VIRT
124     default 0xf1c28000 if DEBUG_SUNXI_UART0
125     default 0xf1c28400 if DEBUG_SUNXI_UART1
126     default 0xf1f02800 if DEBUG_SUNXI_R_UART
127     - default 0xf2100000 if DEBUG_PXA_UART1
128     + default 0xf6200000 if DEBUG_PXA_UART1
129     default 0xf4090000 if ARCH_LPC32XX
130     default 0xf4200000 if ARCH_GEMINI
131     default 0xf7000000 if DEBUG_S3C24XX_UART && (DEBUG_S3C_UART0 || \
132     diff --git a/arch/arm/boot/dts/zynq-parallella.dts b/arch/arm/boot/dts/zynq-parallella.dts
133     index 41afd9da6876..229140b6de64 100644
134     --- a/arch/arm/boot/dts/zynq-parallella.dts
135     +++ b/arch/arm/boot/dts/zynq-parallella.dts
136     @@ -34,6 +34,10 @@
137     };
138     };
139    
140     +&clkc {
141     + fclk-enable = <0xf>;
142     +};
143     +
144     &gem0 {
145     status = "okay";
146     phy-mode = "rgmii-id";
147     diff --git a/arch/arm/mach-pxa/include/mach/addr-map.h b/arch/arm/mach-pxa/include/mach/addr-map.h
148     index bbf9df37ad4b..d28fe291233a 100644
149     --- a/arch/arm/mach-pxa/include/mach/addr-map.h
150     +++ b/arch/arm/mach-pxa/include/mach/addr-map.h
151     @@ -39,6 +39,11 @@
152     #define DMEMC_SIZE 0x00100000
153    
154     /*
155     + * Reserved space for low level debug virtual addresses within
156     + * 0xf6200000..0xf6201000
157     + */
158     +
159     +/*
160     * Internal Memory Controller (PXA27x and later)
161     */
162     #define IMEMC_PHYS 0x58000000
163     diff --git a/arch/mips/include/asm/ftrace.h b/arch/mips/include/asm/ftrace.h
164     index 992aaba603b5..b463f2aa5a61 100644
165     --- a/arch/mips/include/asm/ftrace.h
166     +++ b/arch/mips/include/asm/ftrace.h
167     @@ -24,7 +24,7 @@ do { \
168     asm volatile ( \
169     "1: " load " %[tmp_dst], 0(%[tmp_src])\n" \
170     " li %[tmp_err], 0\n" \
171     - "2:\n" \
172     + "2: .insn\n" \
173     \
174     ".section .fixup, \"ax\"\n" \
175     "3: li %[tmp_err], 1\n" \
176     @@ -46,7 +46,7 @@ do { \
177     asm volatile ( \
178     "1: " store " %[tmp_src], 0(%[tmp_dst])\n"\
179     " li %[tmp_err], 0\n" \
180     - "2:\n" \
181     + "2: .insn\n" \
182     \
183     ".section .fixup, \"ax\"\n" \
184     "3: li %[tmp_err], 1\n" \
185     diff --git a/arch/mips/include/uapi/asm/ptrace.h b/arch/mips/include/uapi/asm/ptrace.h
186     index bbcfb8ba8106..91a3d197ede3 100644
187     --- a/arch/mips/include/uapi/asm/ptrace.h
188     +++ b/arch/mips/include/uapi/asm/ptrace.h
189     @@ -9,6 +9,8 @@
190     #ifndef _UAPI_ASM_PTRACE_H
191     #define _UAPI_ASM_PTRACE_H
192    
193     +#include <linux/types.h>
194     +
195     /* 0 - 31 are integer registers, 32 - 63 are fp registers. */
196     #define FPR_BASE 32
197     #define PC 64
198     diff --git a/arch/mips/loongson/lemote-2f/clock.c b/arch/mips/loongson/lemote-2f/clock.c
199     index a217061beee3..462e34d46b4a 100644
200     --- a/arch/mips/loongson/lemote-2f/clock.c
201     +++ b/arch/mips/loongson/lemote-2f/clock.c
202     @@ -91,6 +91,7 @@ EXPORT_SYMBOL(clk_put);
203    
204     int clk_set_rate(struct clk *clk, unsigned long rate)
205     {
206     + unsigned int rate_khz = rate / 1000;
207     struct cpufreq_frequency_table *pos;
208     int ret = 0;
209     int regval;
210     @@ -107,9 +108,9 @@ int clk_set_rate(struct clk *clk, unsigned long rate)
211     propagate_rate(clk);
212    
213     cpufreq_for_each_valid_entry(pos, loongson2_clockmod_table)
214     - if (rate == pos->frequency)
215     + if (rate_khz == pos->frequency)
216     break;
217     - if (rate != pos->frequency)
218     + if (rate_khz != pos->frequency)
219     return -ENOTSUPP;
220    
221     clk->rate = rate;
222     diff --git a/arch/mips/math-emu/cp1emu.c b/arch/mips/math-emu/cp1emu.c
223     index 7a4727795a70..51a0fde4bec1 100644
224     --- a/arch/mips/math-emu/cp1emu.c
225     +++ b/arch/mips/math-emu/cp1emu.c
226     @@ -1023,7 +1023,7 @@ emul:
227     goto emul;
228    
229     case cop1x_op:
230     - if (cpu_has_mips_4_5 || cpu_has_mips64)
231     + if (cpu_has_mips_4_5 || cpu_has_mips64 || cpu_has_mips32r2)
232     /* its one of ours */
233     goto emul;
234    
235     @@ -1068,7 +1068,7 @@ emul:
236     break;
237    
238     case cop1x_op:
239     - if (!cpu_has_mips_4_5 && !cpu_has_mips64)
240     + if (!cpu_has_mips_4_5 && !cpu_has_mips64 && !cpu_has_mips32r2)
241     return SIGILL;
242    
243     sig = fpux_emu(xcp, ctx, ir, fault_addr);
244     diff --git a/arch/mips/mm/tlbex.c b/arch/mips/mm/tlbex.c
245     index a08dd53a1cc5..b5f228e7eae6 100644
246     --- a/arch/mips/mm/tlbex.c
247     +++ b/arch/mips/mm/tlbex.c
248     @@ -1062,6 +1062,7 @@ static void build_update_entries(u32 **p, unsigned int tmp, unsigned int ptep)
249     struct mips_huge_tlb_info {
250     int huge_pte;
251     int restore_scratch;
252     + bool need_reload_pte;
253     };
254    
255     static struct mips_huge_tlb_info
256     @@ -1076,6 +1077,7 @@ build_fast_tlb_refill_handler (u32 **p, struct uasm_label **l,
257    
258     rv.huge_pte = scratch;
259     rv.restore_scratch = 0;
260     + rv.need_reload_pte = false;
261    
262     if (check_for_high_segbits) {
263     UASM_i_MFC0(p, tmp, C0_BADVADDR);
264     @@ -1264,6 +1266,7 @@ static void build_r4000_tlb_refill_handler(void)
265     } else {
266     htlb_info.huge_pte = K0;
267     htlb_info.restore_scratch = 0;
268     + htlb_info.need_reload_pte = true;
269     vmalloc_mode = refill_noscratch;
270     /*
271     * create the plain linear handler
272     @@ -1300,7 +1303,8 @@ static void build_r4000_tlb_refill_handler(void)
273     }
274     #ifdef CONFIG_MIPS_HUGE_TLB_SUPPORT
275     uasm_l_tlb_huge_update(&l, p);
276     - UASM_i_LW(&p, K0, 0, K1);
277     + if (htlb_info.need_reload_pte)
278     + UASM_i_LW(&p, htlb_info.huge_pte, 0, K1);
279     build_huge_update_entries(&p, htlb_info.huge_pte, K1);
280     build_huge_tlb_write_entry(&p, &l, &r, K0, tlb_random,
281     htlb_info.restore_scratch);
282     diff --git a/arch/powerpc/kernel/entry_64.S b/arch/powerpc/kernel/entry_64.S
283     index 5bbd1bc8c3b0..0905c8da90f1 100644
284     --- a/arch/powerpc/kernel/entry_64.S
285     +++ b/arch/powerpc/kernel/entry_64.S
286     @@ -659,7 +659,13 @@ _GLOBAL(ret_from_except_lite)
287     3:
288     #endif
289     bl save_nvgprs
290     + /*
291     + * Use a non volatile GPR to save and restore our thread_info flags
292     + * across the call to restore_interrupts.
293     + */
294     + mr r30,r4
295     bl restore_interrupts
296     + mr r4,r30
297     addi r3,r1,STACK_FRAME_OVERHEAD
298     bl do_notify_resume
299     b ret_from_except
300     diff --git a/arch/powerpc/platforms/powernv/opal-lpc.c b/arch/powerpc/platforms/powernv/opal-lpc.c
301     index ad4b31df779a..e4169d68cb32 100644
302     --- a/arch/powerpc/platforms/powernv/opal-lpc.c
303     +++ b/arch/powerpc/platforms/powernv/opal-lpc.c
304     @@ -216,14 +216,54 @@ static ssize_t lpc_debug_read(struct file *filp, char __user *ubuf,
305     &data, len);
306     if (rc)
307     return -ENXIO;
308     +
309     + /*
310     + * Now there is some trickery with the data returned by OPAL
311     + * as it's the desired data right justified in a 32-bit BE
312     + * word.
313     + *
314     + * This is a very bad interface and I'm to blame for it :-(
315     + *
316     + * So we can't just apply a 32-bit swap to what comes from OPAL,
317     + * because user space expects the *bytes* to be in their proper
318     + * respective positions (ie, LPC position).
319     + *
320     + * So what we really want to do here is to shift data right
321     + * appropriately on a LE kernel.
322     + *
323     + * IE. If the LPC transaction has bytes B0, B1, B2 and B3 in that
324     + * order, we have in memory written to by OPAL at the "data"
325     + * pointer:
326     + *
327     + * Bytes: OPAL "data" LE "data"
328     + * 32-bit: B0 B1 B2 B3 B0B1B2B3 B3B2B1B0
329     + * 16-bit: B0 B1 0000B0B1 B1B00000
330     + * 8-bit: B0 000000B0 B0000000
331     + *
332     + * So a BE kernel will have the leftmost of the above in the MSB
333     + * and rightmost in the LSB and can just then "cast" the u32 "data"
334     + * down to the appropriate quantity and write it.
335     + *
336     + * However, an LE kernel can't. It doesn't need to swap because a
337     + * load from data followed by a store to user are going to preserve
338     + * the byte ordering which is the wire byte order which is what the
339     + * user wants, but in order to "crop" to the right size, we need to
340     + * shift right first.
341     + */
342     switch(len) {
343     case 4:
344     rc = __put_user((u32)data, (u32 __user *)ubuf);
345     break;
346     case 2:
347     +#ifdef __LITTLE_ENDIAN__
348     + data >>= 16;
349     +#endif
350     rc = __put_user((u16)data, (u16 __user *)ubuf);
351     break;
352     default:
353     +#ifdef __LITTLE_ENDIAN__
354     + data >>= 24;
355     +#endif
356     rc = __put_user((u8)data, (u8 __user *)ubuf);
357     break;
358     }
359     @@ -263,12 +303,31 @@ static ssize_t lpc_debug_write(struct file *filp, const char __user *ubuf,
360     else if (todo > 1 && (pos & 1) == 0)
361     len = 2;
362     }
363     +
364     + /*
365     + * Similarly to the read case, we have some trickery here but
366     + * it's different to handle. We need to pass the value to OPAL in
367     + * a register whose layout depends on the access size. We want
368     + * to reproduce the memory layout of the user, however we aren't
369     + * doing a load from user and a store to another memory location
370     + * which would achieve that. Here we pass the value to OPAL via
371     + * a register which is expected to contain the "BE" interpretation
372     + * of the byte sequence. IE: for a 32-bit access, byte 0 should be
373     + * in the MSB. So here we *do* need to byteswap on LE.
374     + *
375     + * User bytes: LE "data" OPAL "data"
376     + * 32-bit: B0 B1 B2 B3 B3B2B1B0 B0B1B2B3
377     + * 16-bit: B0 B1 0000B1B0 0000B0B1
378     + * 8-bit: B0 000000B0 000000B0
379     + */
380     switch(len) {
381     case 4:
382     rc = __get_user(data, (u32 __user *)ubuf);
383     + data = cpu_to_be32(data);
384     break;
385     case 2:
386     rc = __get_user(data, (u16 __user *)ubuf);
387     + data = cpu_to_be16(data);
388     break;
389     default:
390     rc = __get_user(data, (u8 __user *)ubuf);
391     diff --git a/arch/powerpc/platforms/pseries/dlpar.c b/arch/powerpc/platforms/pseries/dlpar.c
392     index a2450b8a50a5..92eb35ed4b9e 100644
393     --- a/arch/powerpc/platforms/pseries/dlpar.c
394     +++ b/arch/powerpc/platforms/pseries/dlpar.c
395     @@ -379,7 +379,7 @@ static int dlpar_online_cpu(struct device_node *dn)
396     BUG_ON(get_cpu_current_state(cpu)
397     != CPU_STATE_OFFLINE);
398     cpu_maps_update_done();
399     - rc = cpu_up(cpu);
400     + rc = device_online(get_cpu_device(cpu));
401     if (rc)
402     goto out;
403     cpu_maps_update_begin();
404     @@ -462,7 +462,7 @@ static int dlpar_offline_cpu(struct device_node *dn)
405     if (get_cpu_current_state(cpu) == CPU_STATE_ONLINE) {
406     set_preferred_offline_state(cpu, CPU_STATE_OFFLINE);
407     cpu_maps_update_done();
408     - rc = cpu_down(cpu);
409     + rc = device_offline(get_cpu_device(cpu));
410     if (rc)
411     goto out;
412     cpu_maps_update_begin();
413     diff --git a/arch/s390/kernel/topology.c b/arch/s390/kernel/topology.c
414     index 355a16c55702..b93bed76ea94 100644
415     --- a/arch/s390/kernel/topology.c
416     +++ b/arch/s390/kernel/topology.c
417     @@ -464,15 +464,17 @@ static struct sched_domain_topology_level s390_topology[] = {
418    
419     static int __init topology_init(void)
420     {
421     - if (!MACHINE_HAS_TOPOLOGY) {
422     + if (MACHINE_HAS_TOPOLOGY)
423     + set_topology_timer();
424     + else
425     topology_update_polarization_simple();
426     - goto out;
427     - }
428     - set_topology_timer();
429     -out:
430     -
431     - set_sched_topology(s390_topology);
432     -
433     return device_create_file(cpu_subsys.dev_root, &dev_attr_dispatching);
434     }
435     device_initcall(topology_init);
436     +
437     +static int __init early_topology_init(void)
438     +{
439     + set_sched_topology(s390_topology);
440     + return 0;
441     +}
442     +early_initcall(early_topology_init);
443     diff --git a/arch/sh/kernel/cpu/sh3/setup-sh770x.c b/arch/sh/kernel/cpu/sh3/setup-sh770x.c
444     index 9139d14b9c53..538c10db3537 100644
445     --- a/arch/sh/kernel/cpu/sh3/setup-sh770x.c
446     +++ b/arch/sh/kernel/cpu/sh3/setup-sh770x.c
447     @@ -118,7 +118,7 @@ static struct plat_sci_port scif0_platform_data = {
448     };
449    
450     static struct resource scif0_resources[] = {
451     - DEFINE_RES_MEM(0xfffffe80, 0x100),
452     + DEFINE_RES_MEM(0xfffffe80, 0x10),
453     DEFINE_RES_IRQ(evt2irq(0x4e0)),
454     };
455    
456     @@ -143,7 +143,7 @@ static struct plat_sci_port scif1_platform_data = {
457     };
458    
459     static struct resource scif1_resources[] = {
460     - DEFINE_RES_MEM(0xa4000150, 0x100),
461     + DEFINE_RES_MEM(0xa4000150, 0x10),
462     DEFINE_RES_IRQ(evt2irq(0x900)),
463     };
464    
465     @@ -169,7 +169,7 @@ static struct plat_sci_port scif2_platform_data = {
466     };
467    
468     static struct resource scif2_resources[] = {
469     - DEFINE_RES_MEM(0xa4000140, 0x100),
470     + DEFINE_RES_MEM(0xa4000140, 0x10),
471     DEFINE_RES_IRQ(evt2irq(0x880)),
472     };
473    
474     diff --git a/arch/um/drivers/ubd_kern.c b/arch/um/drivers/ubd_kern.c
475     index 3716e6952554..e8ab93c3e638 100644
476     --- a/arch/um/drivers/ubd_kern.c
477     +++ b/arch/um/drivers/ubd_kern.c
478     @@ -1277,7 +1277,7 @@ static void do_ubd_request(struct request_queue *q)
479    
480     while(1){
481     struct ubd *dev = q->queuedata;
482     - if(dev->end_sg == 0){
483     + if(dev->request == NULL){
484     struct request *req = blk_fetch_request(q);
485     if(req == NULL)
486     return;
487     @@ -1299,7 +1299,8 @@ static void do_ubd_request(struct request_queue *q)
488     return;
489     }
490     prepare_flush_request(req, io_req);
491     - submit_request(io_req, dev);
492     + if (submit_request(io_req, dev) == false)
493     + return;
494     }
495    
496     while(dev->start_sg < dev->end_sg){
497     diff --git a/arch/x86/ia32/ia32entry.S b/arch/x86/ia32/ia32entry.S
498     index 4299eb05023c..92a2e9333620 100644
499     --- a/arch/x86/ia32/ia32entry.S
500     +++ b/arch/x86/ia32/ia32entry.S
501     @@ -151,6 +151,16 @@ ENTRY(ia32_sysenter_target)
502     1: movl (%rbp),%ebp
503     _ASM_EXTABLE(1b,ia32_badarg)
504     ASM_CLAC
505     +
506     + /*
507     + * Sysenter doesn't filter flags, so we need to clear NT
508     + * ourselves. To save a few cycles, we can check whether
509     + * NT was set instead of doing an unconditional popfq.
510     + */
511     + testl $X86_EFLAGS_NT,EFLAGS-ARGOFFSET(%rsp)
512     + jnz sysenter_fix_flags
513     +sysenter_flags_fixed:
514     +
515     orl $TS_COMPAT,TI_status+THREAD_INFO(%rsp,RIP-ARGOFFSET)
516     testl $_TIF_WORK_SYSCALL_ENTRY,TI_flags+THREAD_INFO(%rsp,RIP-ARGOFFSET)
517     CFI_REMEMBER_STATE
518     @@ -184,6 +194,8 @@ sysexit_from_sys_call:
519     TRACE_IRQS_ON
520     ENABLE_INTERRUPTS_SYSEXIT32
521    
522     + CFI_RESTORE_STATE
523     +
524     #ifdef CONFIG_AUDITSYSCALL
525     .macro auditsys_entry_common
526     movl %esi,%r9d /* 6th arg: 4th syscall arg */
527     @@ -226,7 +238,6 @@ sysexit_from_sys_call:
528     .endm
529    
530     sysenter_auditsys:
531     - CFI_RESTORE_STATE
532     auditsys_entry_common
533     movl %ebp,%r9d /* reload 6th syscall arg */
534     jmp sysenter_dispatch
535     @@ -235,6 +246,11 @@ sysexit_audit:
536     auditsys_exit sysexit_from_sys_call
537     #endif
538    
539     +sysenter_fix_flags:
540     + pushq_cfi $(X86_EFLAGS_IF|X86_EFLAGS_FIXED)
541     + popfq_cfi
542     + jmp sysenter_flags_fixed
543     +
544     sysenter_tracesys:
545     #ifdef CONFIG_AUDITSYSCALL
546     testl $(_TIF_WORK_SYSCALL_ENTRY & ~_TIF_SYSCALL_AUDIT),TI_flags+THREAD_INFO(%rsp,RIP-ARGOFFSET)
547     diff --git a/arch/x86/include/asm/elf.h b/arch/x86/include/asm/elf.h
548     index 1a055c81d864..ca3347a9dab5 100644
549     --- a/arch/x86/include/asm/elf.h
550     +++ b/arch/x86/include/asm/elf.h
551     @@ -160,8 +160,9 @@ do { \
552     #define elf_check_arch(x) \
553     ((x)->e_machine == EM_X86_64)
554    
555     -#define compat_elf_check_arch(x) \
556     - (elf_check_arch_ia32(x) || (x)->e_machine == EM_X86_64)
557     +#define compat_elf_check_arch(x) \
558     + (elf_check_arch_ia32(x) || \
559     + (IS_ENABLED(CONFIG_X86_X32_ABI) && (x)->e_machine == EM_X86_64))
560    
561     #if __USER32_DS != __USER_DS
562     # error "The following code assumes __USER32_DS == __USER_DS"
563     diff --git a/arch/x86/include/asm/kvm_host.h b/arch/x86/include/asm/kvm_host.h
564     index 92d3486a6196..0d47ae116a36 100644
565     --- a/arch/x86/include/asm/kvm_host.h
566     +++ b/arch/x86/include/asm/kvm_host.h
567     @@ -991,6 +991,20 @@ static inline void kvm_inject_gp(struct kvm_vcpu *vcpu, u32 error_code)
568     kvm_queue_exception_e(vcpu, GP_VECTOR, error_code);
569     }
570    
571     +static inline u64 get_canonical(u64 la)
572     +{
573     + return ((int64_t)la << 16) >> 16;
574     +}
575     +
576     +static inline bool is_noncanonical_address(u64 la)
577     +{
578     +#ifdef CONFIG_X86_64
579     + return get_canonical(la) != la;
580     +#else
581     + return false;
582     +#endif
583     +}
584     +
585     #define TSS_IOPB_BASE_OFFSET 0x66
586     #define TSS_BASE_SIZE 0x68
587     #define TSS_IOPB_SIZE (65536 / 8)
588     @@ -1049,7 +1063,7 @@ int kvm_cpu_get_interrupt(struct kvm_vcpu *v);
589     void kvm_vcpu_reset(struct kvm_vcpu *vcpu);
590    
591     void kvm_define_shared_msr(unsigned index, u32 msr);
592     -void kvm_set_shared_msr(unsigned index, u64 val, u64 mask);
593     +int kvm_set_shared_msr(unsigned index, u64 val, u64 mask);
594    
595     bool kvm_is_linear_rip(struct kvm_vcpu *vcpu, unsigned long linear_rip);
596    
597     diff --git a/arch/x86/include/uapi/asm/vmx.h b/arch/x86/include/uapi/asm/vmx.h
598     index 0e79420376eb..990a2fe1588d 100644
599     --- a/arch/x86/include/uapi/asm/vmx.h
600     +++ b/arch/x86/include/uapi/asm/vmx.h
601     @@ -67,6 +67,7 @@
602     #define EXIT_REASON_EPT_MISCONFIG 49
603     #define EXIT_REASON_INVEPT 50
604     #define EXIT_REASON_PREEMPTION_TIMER 52
605     +#define EXIT_REASON_INVVPID 53
606     #define EXIT_REASON_WBINVD 54
607     #define EXIT_REASON_XSETBV 55
608     #define EXIT_REASON_APIC_WRITE 56
609     @@ -114,6 +115,7 @@
610     { EXIT_REASON_EOI_INDUCED, "EOI_INDUCED" }, \
611     { EXIT_REASON_INVALID_STATE, "INVALID_STATE" }, \
612     { EXIT_REASON_INVD, "INVD" }, \
613     + { EXIT_REASON_INVVPID, "INVVPID" }, \
614     { EXIT_REASON_INVPCID, "INVPCID" }
615    
616     #endif /* _UAPIVMX_H */
617     diff --git a/arch/x86/kernel/acpi/boot.c b/arch/x86/kernel/acpi/boot.c
618     index b436fc735aa4..a142e77693e1 100644
619     --- a/arch/x86/kernel/acpi/boot.c
620     +++ b/arch/x86/kernel/acpi/boot.c
621     @@ -397,7 +397,7 @@ static int mp_register_gsi(struct device *dev, u32 gsi, int trigger,
622    
623     /* Don't set up the ACPI SCI because it's already set up */
624     if (acpi_gbl_FADT.sci_interrupt == gsi)
625     - return gsi;
626     + return mp_map_gsi_to_irq(gsi, IOAPIC_MAP_ALLOC);
627    
628     trigger = trigger == ACPI_EDGE_SENSITIVE ? 0 : 1;
629     polarity = polarity == ACPI_ACTIVE_HIGH ? 0 : 1;
630     @@ -604,14 +604,18 @@ void __init acpi_pic_sci_set_trigger(unsigned int irq, u16 trigger)
631    
632     int acpi_gsi_to_irq(u32 gsi, unsigned int *irqp)
633     {
634     - int irq = mp_map_gsi_to_irq(gsi, IOAPIC_MAP_ALLOC | IOAPIC_MAP_CHECK);
635     + int irq;
636    
637     - if (irq >= 0) {
638     + if (acpi_irq_model == ACPI_IRQ_MODEL_PIC) {
639     + *irqp = gsi;
640     + } else {
641     + irq = mp_map_gsi_to_irq(gsi,
642     + IOAPIC_MAP_ALLOC | IOAPIC_MAP_CHECK);
643     + if (irq < 0)
644     + return -1;
645     *irqp = irq;
646     - return 0;
647     }
648     -
649     - return -1;
650     + return 0;
651     }
652     EXPORT_SYMBOL_GPL(acpi_gsi_to_irq);
653    
654     diff --git a/arch/x86/kernel/apb_timer.c b/arch/x86/kernel/apb_timer.c
655     index af5b08ab3b71..7c3832424168 100644
656     --- a/arch/x86/kernel/apb_timer.c
657     +++ b/arch/x86/kernel/apb_timer.c
658     @@ -185,8 +185,6 @@ static void apbt_setup_irq(struct apbt_dev *adev)
659    
660     irq_modify_status(adev->irq, 0, IRQ_MOVE_PCNTXT);
661     irq_set_affinity(adev->irq, cpumask_of(adev->cpu));
662     - /* APB timer irqs are set up as mp_irqs, timer is edge type */
663     - __irq_set_handler(adev->irq, handle_edge_irq, 0, "edge");
664     }
665    
666     /* Should be called with per cpu */
667     diff --git a/arch/x86/kernel/apic/apic.c b/arch/x86/kernel/apic/apic.c
668     index 67760275544b..24b5894396a0 100644
669     --- a/arch/x86/kernel/apic/apic.c
670     +++ b/arch/x86/kernel/apic/apic.c
671     @@ -1297,7 +1297,7 @@ void setup_local_APIC(void)
672     unsigned int value, queued;
673     int i, j, acked = 0;
674     unsigned long long tsc = 0, ntsc;
675     - long long max_loops = cpu_khz;
676     + long long max_loops = cpu_khz ? cpu_khz : 1000000;
677    
678     if (cpu_has_tsc)
679     rdtscll(tsc);
680     @@ -1383,7 +1383,7 @@ void setup_local_APIC(void)
681     break;
682     }
683     if (queued) {
684     - if (cpu_has_tsc) {
685     + if (cpu_has_tsc && cpu_khz) {
686     rdtscll(ntsc);
687     max_loops = (cpu_khz << 10) - (ntsc - tsc);
688     } else
689     diff --git a/arch/x86/kernel/cpu/common.c b/arch/x86/kernel/cpu/common.c
690     index e4ab2b42bd6f..31265580c38a 100644
691     --- a/arch/x86/kernel/cpu/common.c
692     +++ b/arch/x86/kernel/cpu/common.c
693     @@ -1184,7 +1184,7 @@ void syscall_init(void)
694     /* Flags to clear on syscall */
695     wrmsrl(MSR_SYSCALL_MASK,
696     X86_EFLAGS_TF|X86_EFLAGS_DF|X86_EFLAGS_IF|
697     - X86_EFLAGS_IOPL|X86_EFLAGS_AC);
698     + X86_EFLAGS_IOPL|X86_EFLAGS_AC|X86_EFLAGS_NT);
699     }
700    
701     /*
702     diff --git a/arch/x86/kernel/cpu/intel.c b/arch/x86/kernel/cpu/intel.c
703     index 50ce7519ccef..1ef456273172 100644
704     --- a/arch/x86/kernel/cpu/intel.c
705     +++ b/arch/x86/kernel/cpu/intel.c
706     @@ -397,6 +397,13 @@ static void init_intel(struct cpuinfo_x86 *c)
707     }
708    
709     l2 = init_intel_cacheinfo(c);
710     +
711     + /* Detect legacy cache sizes if init_intel_cacheinfo did not */
712     + if (l2 == 0) {
713     + cpu_detect_cache_sizes(c);
714     + l2 = c->x86_cache_size;
715     + }
716     +
717     if (c->cpuid_level > 9) {
718     unsigned eax = cpuid_eax(10);
719     /* Check for version and the number of counters */
720     @@ -500,6 +507,13 @@ static unsigned int intel_size_cache(struct cpuinfo_x86 *c, unsigned int size)
721     */
722     if ((c->x86 == 6) && (c->x86_model == 11) && (size == 0))
723     size = 256;
724     +
725     + /*
726     + * Intel Quark SoC X1000 contains a 4-way set associative
727     + * 16K cache with a 16 byte cache line and 256 lines per tag
728     + */
729     + if ((c->x86 == 5) && (c->x86_model == 9))
730     + size = 16;
731     return size;
732     }
733     #endif
734     @@ -701,7 +715,8 @@ static const struct cpu_dev intel_cpu_dev = {
735     [3] = "OverDrive PODP5V83",
736     [4] = "Pentium MMX",
737     [7] = "Mobile Pentium 75 - 200",
738     - [8] = "Mobile Pentium MMX"
739     + [8] = "Mobile Pentium MMX",
740     + [9] = "Quark SoC X1000",
741     }
742     },
743     { .family = 6, .model_names =
744     diff --git a/arch/x86/kernel/iosf_mbi.c b/arch/x86/kernel/iosf_mbi.c
745     index 9030e83db6ee..c957e11a2d0f 100644
746     --- a/arch/x86/kernel/iosf_mbi.c
747     +++ b/arch/x86/kernel/iosf_mbi.c
748     @@ -26,6 +26,7 @@
749     #include <asm/iosf_mbi.h>
750    
751     #define PCI_DEVICE_ID_BAYTRAIL 0x0F00
752     +#define PCI_DEVICE_ID_BRASWELL 0x2280
753     #define PCI_DEVICE_ID_QUARK_X1000 0x0958
754    
755     static DEFINE_SPINLOCK(iosf_mbi_lock);
756     @@ -204,6 +205,7 @@ static int iosf_mbi_probe(struct pci_dev *pdev,
757    
758     static const struct pci_device_id iosf_mbi_pci_ids[] = {
759     { PCI_DEVICE(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_BAYTRAIL) },
760     + { PCI_DEVICE(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_BRASWELL) },
761     { PCI_DEVICE(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_QUARK_X1000) },
762     { 0, },
763     };
764     diff --git a/arch/x86/kernel/signal.c b/arch/x86/kernel/signal.c
765     index 2851d63c1202..ed37a768d0fc 100644
766     --- a/arch/x86/kernel/signal.c
767     +++ b/arch/x86/kernel/signal.c
768     @@ -675,6 +675,11 @@ handle_signal(struct ksignal *ksig, struct pt_regs *regs)
769     * handler too.
770     */
771     regs->flags &= ~(X86_EFLAGS_DF|X86_EFLAGS_RF|X86_EFLAGS_TF);
772     + /*
773     + * Ensure the signal handler starts with the new fpu state.
774     + */
775     + if (used_math())
776     + drop_init_fpu(current);
777     }
778     signal_setup_done(failed, ksig, test_thread_flag(TIF_SINGLESTEP));
779     }
780     diff --git a/arch/x86/kernel/tsc.c b/arch/x86/kernel/tsc.c
781     index b6025f9e36c6..b7e50bba3bbb 100644
782     --- a/arch/x86/kernel/tsc.c
783     +++ b/arch/x86/kernel/tsc.c
784     @@ -1166,14 +1166,17 @@ void __init tsc_init(void)
785    
786     x86_init.timers.tsc_pre_init();
787    
788     - if (!cpu_has_tsc)
789     + if (!cpu_has_tsc) {
790     + setup_clear_cpu_cap(X86_FEATURE_TSC_DEADLINE_TIMER);
791     return;
792     + }
793    
794     tsc_khz = x86_platform.calibrate_tsc();
795     cpu_khz = tsc_khz;
796    
797     if (!tsc_khz) {
798     mark_tsc_unstable("could not calculate TSC khz");
799     + setup_clear_cpu_cap(X86_FEATURE_TSC_DEADLINE_TIMER);
800     return;
801     }
802    
803     diff --git a/arch/x86/kernel/xsave.c b/arch/x86/kernel/xsave.c
804     index 940b142cc11f..4c540c4719d8 100644
805     --- a/arch/x86/kernel/xsave.c
806     +++ b/arch/x86/kernel/xsave.c
807     @@ -271,8 +271,6 @@ int save_xstate_sig(void __user *buf, void __user *buf_fx, int size)
808     if (use_fxsr() && save_xstate_epilog(buf_fx, ia32_fxstate))
809     return -1;
810    
811     - drop_init_fpu(tsk); /* trigger finit */
812     -
813     return 0;
814     }
815    
816     @@ -402,8 +400,11 @@ int __restore_xstate_sig(void __user *buf, void __user *buf_fx, int size)
817     set_used_math();
818     }
819    
820     - if (use_eager_fpu())
821     + if (use_eager_fpu()) {
822     + preempt_disable();
823     math_state_restore();
824     + preempt_enable();
825     + }
826    
827     return err;
828     } else {
829     diff --git a/arch/x86/kvm/emulate.c b/arch/x86/kvm/emulate.c
830     index 03954f7900f5..77c77fe84f13 100644
831     --- a/arch/x86/kvm/emulate.c
832     +++ b/arch/x86/kvm/emulate.c
833     @@ -504,11 +504,6 @@ static void rsp_increment(struct x86_emulate_ctxt *ctxt, int inc)
834     masked_increment(reg_rmw(ctxt, VCPU_REGS_RSP), stack_mask(ctxt), inc);
835     }
836    
837     -static inline void jmp_rel(struct x86_emulate_ctxt *ctxt, int rel)
838     -{
839     - register_address_increment(ctxt, &ctxt->_eip, rel);
840     -}
841     -
842     static u32 desc_limit_scaled(struct desc_struct *desc)
843     {
844     u32 limit = get_desc_limit(desc);
845     @@ -568,6 +563,40 @@ static int emulate_nm(struct x86_emulate_ctxt *ctxt)
846     return emulate_exception(ctxt, NM_VECTOR, 0, false);
847     }
848    
849     +static inline int assign_eip_far(struct x86_emulate_ctxt *ctxt, ulong dst,
850     + int cs_l)
851     +{
852     + switch (ctxt->op_bytes) {
853     + case 2:
854     + ctxt->_eip = (u16)dst;
855     + break;
856     + case 4:
857     + ctxt->_eip = (u32)dst;
858     + break;
859     +#ifdef CONFIG_X86_64
860     + case 8:
861     + if ((cs_l && is_noncanonical_address(dst)) ||
862     + (!cs_l && (dst >> 32) != 0))
863     + return emulate_gp(ctxt, 0);
864     + ctxt->_eip = dst;
865     + break;
866     +#endif
867     + default:
868     + WARN(1, "unsupported eip assignment size\n");
869     + }
870     + return X86EMUL_CONTINUE;
871     +}
872     +
873     +static inline int assign_eip_near(struct x86_emulate_ctxt *ctxt, ulong dst)
874     +{
875     + return assign_eip_far(ctxt, dst, ctxt->mode == X86EMUL_MODE_PROT64);
876     +}
877     +
878     +static inline int jmp_rel(struct x86_emulate_ctxt *ctxt, int rel)
879     +{
880     + return assign_eip_near(ctxt, ctxt->_eip + rel);
881     +}
882     +
883     static u16 get_segment_selector(struct x86_emulate_ctxt *ctxt, unsigned seg)
884     {
885     u16 selector;
886     @@ -613,7 +642,8 @@ static bool insn_aligned(struct x86_emulate_ctxt *ctxt, unsigned size)
887    
888     static int __linearize(struct x86_emulate_ctxt *ctxt,
889     struct segmented_address addr,
890     - unsigned size, bool write, bool fetch,
891     + unsigned *max_size, unsigned size,
892     + bool write, bool fetch,
893     ulong *linear)
894     {
895     struct desc_struct desc;
896     @@ -624,10 +654,15 @@ static int __linearize(struct x86_emulate_ctxt *ctxt,
897     unsigned cpl;
898    
899     la = seg_base(ctxt, addr.seg) + addr.ea;
900     + *max_size = 0;
901     switch (ctxt->mode) {
902     case X86EMUL_MODE_PROT64:
903     if (((signed long)la << 16) >> 16 != la)
904     return emulate_gp(ctxt, 0);
905     +
906     + *max_size = min_t(u64, ~0u, (1ull << 48) - la);
907     + if (size > *max_size)
908     + goto bad;
909     break;
910     default:
911     usable = ctxt->ops->get_segment(ctxt, &sel, &desc, NULL,
912     @@ -645,20 +680,25 @@ static int __linearize(struct x86_emulate_ctxt *ctxt,
913     if ((ctxt->mode == X86EMUL_MODE_REAL) && !fetch &&
914     (ctxt->d & NoBigReal)) {
915     /* la is between zero and 0xffff */
916     - if (la > 0xffff || (u32)(la + size - 1) > 0xffff)
917     + if (la > 0xffff)
918     goto bad;
919     + *max_size = 0x10000 - la;
920     } else if ((desc.type & 8) || !(desc.type & 4)) {
921     /* expand-up segment */
922     - if (addr.ea > lim || (u32)(addr.ea + size - 1) > lim)
923     + if (addr.ea > lim)
924     goto bad;
925     + *max_size = min_t(u64, ~0u, (u64)lim + 1 - addr.ea);
926     } else {
927     /* expand-down segment */
928     - if (addr.ea <= lim || (u32)(addr.ea + size - 1) <= lim)
929     + if (addr.ea <= lim)
930     goto bad;
931     lim = desc.d ? 0xffffffff : 0xffff;
932     - if (addr.ea > lim || (u32)(addr.ea + size - 1) > lim)
933     + if (addr.ea > lim)
934     goto bad;
935     + *max_size = min_t(u64, ~0u, (u64)lim + 1 - addr.ea);
936     }
937     + if (size > *max_size)
938     + goto bad;
939     cpl = ctxt->ops->cpl(ctxt);
940     if (!(desc.type & 8)) {
941     /* data segment */
942     @@ -693,7 +733,8 @@ static int linearize(struct x86_emulate_ctxt *ctxt,
943     unsigned size, bool write,
944     ulong *linear)
945     {
946     - return __linearize(ctxt, addr, size, write, false, linear);
947     + unsigned max_size;
948     + return __linearize(ctxt, addr, &max_size, size, write, false, linear);
949     }
950    
951    
952     @@ -718,17 +759,27 @@ static int segmented_read_std(struct x86_emulate_ctxt *ctxt,
953     static int __do_insn_fetch_bytes(struct x86_emulate_ctxt *ctxt, int op_size)
954     {
955     int rc;
956     - unsigned size;
957     + unsigned size, max_size;
958     unsigned long linear;
959     int cur_size = ctxt->fetch.end - ctxt->fetch.data;
960     struct segmented_address addr = { .seg = VCPU_SREG_CS,
961     .ea = ctxt->eip + cur_size };
962    
963     - size = 15UL ^ cur_size;
964     - rc = __linearize(ctxt, addr, size, false, true, &linear);
965     + /*
966     + * We do not know exactly how many bytes will be needed, and
967     + * __linearize is expensive, so fetch as much as possible. We
968     + * just have to avoid going beyond the 15 byte limit, the end
969     + * of the segment, or the end of the page.
970     + *
971     + * __linearize is called with size 0 so that it does not do any
972     + * boundary check itself. Instead, we use max_size to check
973     + * against op_size.
974     + */
975     + rc = __linearize(ctxt, addr, &max_size, 0, false, true, &linear);
976     if (unlikely(rc != X86EMUL_CONTINUE))
977     return rc;
978    
979     + size = min_t(unsigned, 15UL ^ cur_size, max_size);
980     size = min_t(unsigned, size, PAGE_SIZE - offset_in_page(linear));
981    
982     /*
983     @@ -738,7 +789,8 @@ static int __do_insn_fetch_bytes(struct x86_emulate_ctxt *ctxt, int op_size)
984     * still, we must have hit the 15-byte boundary.
985     */
986     if (unlikely(size < op_size))
987     - return X86EMUL_UNHANDLEABLE;
988     + return emulate_gp(ctxt, 0);
989     +
990     rc = ctxt->ops->fetch(ctxt, linear, ctxt->fetch.end,
991     size, &ctxt->exception);
992     if (unlikely(rc != X86EMUL_CONTINUE))
993     @@ -750,8 +802,10 @@ static int __do_insn_fetch_bytes(struct x86_emulate_ctxt *ctxt, int op_size)
994     static __always_inline int do_insn_fetch_bytes(struct x86_emulate_ctxt *ctxt,
995     unsigned size)
996     {
997     - if (unlikely(ctxt->fetch.end - ctxt->fetch.ptr < size))
998     - return __do_insn_fetch_bytes(ctxt, size);
999     + unsigned done_size = ctxt->fetch.end - ctxt->fetch.ptr;
1000     +
1001     + if (unlikely(done_size < size))
1002     + return __do_insn_fetch_bytes(ctxt, size - done_size);
1003     else
1004     return X86EMUL_CONTINUE;
1005     }
1006     @@ -1415,7 +1469,9 @@ static int write_segment_descriptor(struct x86_emulate_ctxt *ctxt,
1007    
1008     /* Does not support long mode */
1009     static int __load_segment_descriptor(struct x86_emulate_ctxt *ctxt,
1010     - u16 selector, int seg, u8 cpl, bool in_task_switch)
1011     + u16 selector, int seg, u8 cpl,
1012     + bool in_task_switch,
1013     + struct desc_struct *desc)
1014     {
1015     struct desc_struct seg_desc, old_desc;
1016     u8 dpl, rpl;
1017     @@ -1547,6 +1603,8 @@ static int __load_segment_descriptor(struct x86_emulate_ctxt *ctxt,
1018     }
1019     load:
1020     ctxt->ops->set_segment(ctxt, selector, &seg_desc, base3, seg);
1021     + if (desc)
1022     + *desc = seg_desc;
1023     return X86EMUL_CONTINUE;
1024     exception:
1025     emulate_exception(ctxt, err_vec, err_code, true);
1026     @@ -1557,7 +1615,7 @@ static int load_segment_descriptor(struct x86_emulate_ctxt *ctxt,
1027     u16 selector, int seg)
1028     {
1029     u8 cpl = ctxt->ops->cpl(ctxt);
1030     - return __load_segment_descriptor(ctxt, selector, seg, cpl, false);
1031     + return __load_segment_descriptor(ctxt, selector, seg, cpl, false, NULL);
1032     }
1033    
1034     static void write_register_operand(struct operand *op)
1035     @@ -1951,17 +2009,31 @@ static int em_iret(struct x86_emulate_ctxt *ctxt)
1036     static int em_jmp_far(struct x86_emulate_ctxt *ctxt)
1037     {
1038     int rc;
1039     - unsigned short sel;
1040     + unsigned short sel, old_sel;
1041     + struct desc_struct old_desc, new_desc;
1042     + const struct x86_emulate_ops *ops = ctxt->ops;
1043     + u8 cpl = ctxt->ops->cpl(ctxt);
1044     +
1045     + /* Assignment of RIP may only fail in 64-bit mode */
1046     + if (ctxt->mode == X86EMUL_MODE_PROT64)
1047     + ops->get_segment(ctxt, &old_sel, &old_desc, NULL,
1048     + VCPU_SREG_CS);
1049    
1050     memcpy(&sel, ctxt->src.valptr + ctxt->op_bytes, 2);
1051    
1052     - rc = load_segment_descriptor(ctxt, sel, VCPU_SREG_CS);
1053     + rc = __load_segment_descriptor(ctxt, sel, VCPU_SREG_CS, cpl, false,
1054     + &new_desc);
1055     if (rc != X86EMUL_CONTINUE)
1056     return rc;
1057    
1058     - ctxt->_eip = 0;
1059     - memcpy(&ctxt->_eip, ctxt->src.valptr, ctxt->op_bytes);
1060     - return X86EMUL_CONTINUE;
1061     + rc = assign_eip_far(ctxt, ctxt->src.val, new_desc.l);
1062     + if (rc != X86EMUL_CONTINUE) {
1063     + WARN_ON(ctxt->mode != X86EMUL_MODE_PROT64);
1064     + /* assigning eip failed; restore the old cs */
1065     + ops->set_segment(ctxt, old_sel, &old_desc, 0, VCPU_SREG_CS);
1066     + return rc;
1067     + }
1068     + return rc;
1069     }
1070    
1071     static int em_grp45(struct x86_emulate_ctxt *ctxt)
1072     @@ -1972,13 +2044,15 @@ static int em_grp45(struct x86_emulate_ctxt *ctxt)
1073     case 2: /* call near abs */ {
1074     long int old_eip;
1075     old_eip = ctxt->_eip;
1076     - ctxt->_eip = ctxt->src.val;
1077     + rc = assign_eip_near(ctxt, ctxt->src.val);
1078     + if (rc != X86EMUL_CONTINUE)
1079     + break;
1080     ctxt->src.val = old_eip;
1081     rc = em_push(ctxt);
1082     break;
1083     }
1084     case 4: /* jmp abs */
1085     - ctxt->_eip = ctxt->src.val;
1086     + rc = assign_eip_near(ctxt, ctxt->src.val);
1087     break;
1088     case 5: /* jmp far */
1089     rc = em_jmp_far(ctxt);
1090     @@ -2013,30 +2087,47 @@ static int em_cmpxchg8b(struct x86_emulate_ctxt *ctxt)
1091    
1092     static int em_ret(struct x86_emulate_ctxt *ctxt)
1093     {
1094     - ctxt->dst.type = OP_REG;
1095     - ctxt->dst.addr.reg = &ctxt->_eip;
1096     - ctxt->dst.bytes = ctxt->op_bytes;
1097     - return em_pop(ctxt);
1098     + int rc;
1099     + unsigned long eip;
1100     +
1101     + rc = emulate_pop(ctxt, &eip, ctxt->op_bytes);
1102     + if (rc != X86EMUL_CONTINUE)
1103     + return rc;
1104     +
1105     + return assign_eip_near(ctxt, eip);
1106     }
1107    
1108     static int em_ret_far(struct x86_emulate_ctxt *ctxt)
1109     {
1110     int rc;
1111     - unsigned long cs;
1112     + unsigned long eip, cs;
1113     + u16 old_cs;
1114     int cpl = ctxt->ops->cpl(ctxt);
1115     + struct desc_struct old_desc, new_desc;
1116     + const struct x86_emulate_ops *ops = ctxt->ops;
1117    
1118     - rc = emulate_pop(ctxt, &ctxt->_eip, ctxt->op_bytes);
1119     + if (ctxt->mode == X86EMUL_MODE_PROT64)
1120     + ops->get_segment(ctxt, &old_cs, &old_desc, NULL,
1121     + VCPU_SREG_CS);
1122     +
1123     + rc = emulate_pop(ctxt, &eip, ctxt->op_bytes);
1124     if (rc != X86EMUL_CONTINUE)
1125     return rc;
1126     - if (ctxt->op_bytes == 4)
1127     - ctxt->_eip = (u32)ctxt->_eip;
1128     rc = emulate_pop(ctxt, &cs, ctxt->op_bytes);
1129     if (rc != X86EMUL_CONTINUE)
1130     return rc;
1131     /* Outer-privilege level return is not implemented */
1132     if (ctxt->mode >= X86EMUL_MODE_PROT16 && (cs & 3) > cpl)
1133     return X86EMUL_UNHANDLEABLE;
1134     - rc = load_segment_descriptor(ctxt, (u16)cs, VCPU_SREG_CS);
1135     + rc = __load_segment_descriptor(ctxt, (u16)cs, VCPU_SREG_CS, 0, false,
1136     + &new_desc);
1137     + if (rc != X86EMUL_CONTINUE)
1138     + return rc;
1139     + rc = assign_eip_far(ctxt, eip, new_desc.l);
1140     + if (rc != X86EMUL_CONTINUE) {
1141     + WARN_ON(ctxt->mode != X86EMUL_MODE_PROT64);
1142     + ops->set_segment(ctxt, old_cs, &old_desc, 0, VCPU_SREG_CS);
1143     + }
1144     return rc;
1145     }
1146    
1147     @@ -2297,7 +2388,7 @@ static int em_sysexit(struct x86_emulate_ctxt *ctxt)
1148     {
1149     const struct x86_emulate_ops *ops = ctxt->ops;
1150     struct desc_struct cs, ss;
1151     - u64 msr_data;
1152     + u64 msr_data, rcx, rdx;
1153     int usermode;
1154     u16 cs_sel = 0, ss_sel = 0;
1155    
1156     @@ -2313,6 +2404,9 @@ static int em_sysexit(struct x86_emulate_ctxt *ctxt)
1157     else
1158     usermode = X86EMUL_MODE_PROT32;
1159    
1160     + rcx = reg_read(ctxt, VCPU_REGS_RCX);
1161     + rdx = reg_read(ctxt, VCPU_REGS_RDX);
1162     +
1163     cs.dpl = 3;
1164     ss.dpl = 3;
1165     ops->get_msr(ctxt, MSR_IA32_SYSENTER_CS, &msr_data);
1166     @@ -2330,6 +2424,9 @@ static int em_sysexit(struct x86_emulate_ctxt *ctxt)
1167     ss_sel = cs_sel + 8;
1168     cs.d = 0;
1169     cs.l = 1;
1170     + if (is_noncanonical_address(rcx) ||
1171     + is_noncanonical_address(rdx))
1172     + return emulate_gp(ctxt, 0);
1173     break;
1174     }
1175     cs_sel |= SELECTOR_RPL_MASK;
1176     @@ -2338,8 +2435,8 @@ static int em_sysexit(struct x86_emulate_ctxt *ctxt)
1177     ops->set_segment(ctxt, cs_sel, &cs, 0, VCPU_SREG_CS);
1178     ops->set_segment(ctxt, ss_sel, &ss, 0, VCPU_SREG_SS);
1179    
1180     - ctxt->_eip = reg_read(ctxt, VCPU_REGS_RDX);
1181     - *reg_write(ctxt, VCPU_REGS_RSP) = reg_read(ctxt, VCPU_REGS_RCX);
1182     + ctxt->_eip = rdx;
1183     + *reg_write(ctxt, VCPU_REGS_RSP) = rcx;
1184    
1185     return X86EMUL_CONTINUE;
1186     }
1187     @@ -2457,19 +2554,24 @@ static int load_state_from_tss16(struct x86_emulate_ctxt *ctxt,
1188     * Now load segment descriptors. If fault happens at this stage
1189     * it is handled in a context of new task
1190     */
1191     - ret = __load_segment_descriptor(ctxt, tss->ldt, VCPU_SREG_LDTR, cpl, true);
1192     + ret = __load_segment_descriptor(ctxt, tss->ldt, VCPU_SREG_LDTR, cpl,
1193     + true, NULL);
1194     if (ret != X86EMUL_CONTINUE)
1195     return ret;
1196     - ret = __load_segment_descriptor(ctxt, tss->es, VCPU_SREG_ES, cpl, true);
1197     + ret = __load_segment_descriptor(ctxt, tss->es, VCPU_SREG_ES, cpl,
1198     + true, NULL);
1199     if (ret != X86EMUL_CONTINUE)
1200     return ret;
1201     - ret = __load_segment_descriptor(ctxt, tss->cs, VCPU_SREG_CS, cpl, true);
1202     + ret = __load_segment_descriptor(ctxt, tss->cs, VCPU_SREG_CS, cpl,
1203     + true, NULL);
1204     if (ret != X86EMUL_CONTINUE)
1205     return ret;
1206     - ret = __load_segment_descriptor(ctxt, tss->ss, VCPU_SREG_SS, cpl, true);
1207     + ret = __load_segment_descriptor(ctxt, tss->ss, VCPU_SREG_SS, cpl,
1208     + true, NULL);
1209     if (ret != X86EMUL_CONTINUE)
1210     return ret;
1211     - ret = __load_segment_descriptor(ctxt, tss->ds, VCPU_SREG_DS, cpl, true);
1212     + ret = __load_segment_descriptor(ctxt, tss->ds, VCPU_SREG_DS, cpl,
1213     + true, NULL);
1214     if (ret != X86EMUL_CONTINUE)
1215     return ret;
1216    
1217     @@ -2594,25 +2696,32 @@ static int load_state_from_tss32(struct x86_emulate_ctxt *ctxt,
1218     * Now load segment descriptors. If fault happenes at this stage
1219     * it is handled in a context of new task
1220     */
1221     - ret = __load_segment_descriptor(ctxt, tss->ldt_selector, VCPU_SREG_LDTR, cpl, true);
1222     + ret = __load_segment_descriptor(ctxt, tss->ldt_selector, VCPU_SREG_LDTR,
1223     + cpl, true, NULL);
1224     if (ret != X86EMUL_CONTINUE)
1225     return ret;
1226     - ret = __load_segment_descriptor(ctxt, tss->es, VCPU_SREG_ES, cpl, true);
1227     + ret = __load_segment_descriptor(ctxt, tss->es, VCPU_SREG_ES, cpl,
1228     + true, NULL);
1229     if (ret != X86EMUL_CONTINUE)
1230     return ret;
1231     - ret = __load_segment_descriptor(ctxt, tss->cs, VCPU_SREG_CS, cpl, true);
1232     + ret = __load_segment_descriptor(ctxt, tss->cs, VCPU_SREG_CS, cpl,
1233     + true, NULL);
1234     if (ret != X86EMUL_CONTINUE)
1235     return ret;
1236     - ret = __load_segment_descriptor(ctxt, tss->ss, VCPU_SREG_SS, cpl, true);
1237     + ret = __load_segment_descriptor(ctxt, tss->ss, VCPU_SREG_SS, cpl,
1238     + true, NULL);
1239     if (ret != X86EMUL_CONTINUE)
1240     return ret;
1241     - ret = __load_segment_descriptor(ctxt, tss->ds, VCPU_SREG_DS, cpl, true);
1242     + ret = __load_segment_descriptor(ctxt, tss->ds, VCPU_SREG_DS, cpl,
1243     + true, NULL);
1244     if (ret != X86EMUL_CONTINUE)
1245     return ret;
1246     - ret = __load_segment_descriptor(ctxt, tss->fs, VCPU_SREG_FS, cpl, true);
1247     + ret = __load_segment_descriptor(ctxt, tss->fs, VCPU_SREG_FS, cpl,
1248     + true, NULL);
1249     if (ret != X86EMUL_CONTINUE)
1250     return ret;
1251     - ret = __load_segment_descriptor(ctxt, tss->gs, VCPU_SREG_GS, cpl, true);
1252     + ret = __load_segment_descriptor(ctxt, tss->gs, VCPU_SREG_GS, cpl,
1253     + true, NULL);
1254     if (ret != X86EMUL_CONTINUE)
1255     return ret;
1256    
1257     @@ -2880,10 +2989,13 @@ static int em_aad(struct x86_emulate_ctxt *ctxt)
1258    
1259     static int em_call(struct x86_emulate_ctxt *ctxt)
1260     {
1261     + int rc;
1262     long rel = ctxt->src.val;
1263    
1264     ctxt->src.val = (unsigned long)ctxt->_eip;
1265     - jmp_rel(ctxt, rel);
1266     + rc = jmp_rel(ctxt, rel);
1267     + if (rc != X86EMUL_CONTINUE)
1268     + return rc;
1269     return em_push(ctxt);
1270     }
1271    
1272     @@ -2892,34 +3004,50 @@ static int em_call_far(struct x86_emulate_ctxt *ctxt)
1273     u16 sel, old_cs;
1274     ulong old_eip;
1275     int rc;
1276     + struct desc_struct old_desc, new_desc;
1277     + const struct x86_emulate_ops *ops = ctxt->ops;
1278     + int cpl = ctxt->ops->cpl(ctxt);
1279    
1280     - old_cs = get_segment_selector(ctxt, VCPU_SREG_CS);
1281     old_eip = ctxt->_eip;
1282     + ops->get_segment(ctxt, &old_cs, &old_desc, NULL, VCPU_SREG_CS);
1283    
1284     memcpy(&sel, ctxt->src.valptr + ctxt->op_bytes, 2);
1285     - if (load_segment_descriptor(ctxt, sel, VCPU_SREG_CS))
1286     + rc = __load_segment_descriptor(ctxt, sel, VCPU_SREG_CS, cpl, false,
1287     + &new_desc);
1288     + if (rc != X86EMUL_CONTINUE)
1289     return X86EMUL_CONTINUE;
1290    
1291     - ctxt->_eip = 0;
1292     - memcpy(&ctxt->_eip, ctxt->src.valptr, ctxt->op_bytes);
1293     + rc = assign_eip_far(ctxt, ctxt->src.val, new_desc.l);
1294     + if (rc != X86EMUL_CONTINUE)
1295     + goto fail;
1296    
1297     ctxt->src.val = old_cs;
1298     rc = em_push(ctxt);
1299     if (rc != X86EMUL_CONTINUE)
1300     - return rc;
1301     + goto fail;
1302    
1303     ctxt->src.val = old_eip;
1304     - return em_push(ctxt);
1305     + rc = em_push(ctxt);
1306     + /* If we failed, we tainted the memory, but the very least we should
1307     + restore cs */
1308     + if (rc != X86EMUL_CONTINUE)
1309     + goto fail;
1310     + return rc;
1311     +fail:
1312     + ops->set_segment(ctxt, old_cs, &old_desc, 0, VCPU_SREG_CS);
1313     + return rc;
1314     +
1315     }
1316    
1317     static int em_ret_near_imm(struct x86_emulate_ctxt *ctxt)
1318     {
1319     int rc;
1320     + unsigned long eip;
1321    
1322     - ctxt->dst.type = OP_REG;
1323     - ctxt->dst.addr.reg = &ctxt->_eip;
1324     - ctxt->dst.bytes = ctxt->op_bytes;
1325     - rc = emulate_pop(ctxt, &ctxt->dst.val, ctxt->op_bytes);
1326     + rc = emulate_pop(ctxt, &eip, ctxt->op_bytes);
1327     + if (rc != X86EMUL_CONTINUE)
1328     + return rc;
1329     + rc = assign_eip_near(ctxt, eip);
1330     if (rc != X86EMUL_CONTINUE)
1331     return rc;
1332     rsp_increment(ctxt, ctxt->src.val);
1333     @@ -3250,20 +3378,24 @@ static int em_lmsw(struct x86_emulate_ctxt *ctxt)
1334    
1335     static int em_loop(struct x86_emulate_ctxt *ctxt)
1336     {
1337     + int rc = X86EMUL_CONTINUE;
1338     +
1339     register_address_increment(ctxt, reg_rmw(ctxt, VCPU_REGS_RCX), -1);
1340     if ((address_mask(ctxt, reg_read(ctxt, VCPU_REGS_RCX)) != 0) &&
1341     (ctxt->b == 0xe2 || test_cc(ctxt->b ^ 0x5, ctxt->eflags)))
1342     - jmp_rel(ctxt, ctxt->src.val);
1343     + rc = jmp_rel(ctxt, ctxt->src.val);
1344    
1345     - return X86EMUL_CONTINUE;
1346     + return rc;
1347     }
1348    
1349     static int em_jcxz(struct x86_emulate_ctxt *ctxt)
1350     {
1351     + int rc = X86EMUL_CONTINUE;
1352     +
1353     if (address_mask(ctxt, reg_read(ctxt, VCPU_REGS_RCX)) == 0)
1354     - jmp_rel(ctxt, ctxt->src.val);
1355     + rc = jmp_rel(ctxt, ctxt->src.val);
1356    
1357     - return X86EMUL_CONTINUE;
1358     + return rc;
1359     }
1360    
1361     static int em_in(struct x86_emulate_ctxt *ctxt)
1362     @@ -3351,6 +3483,12 @@ static int em_bswap(struct x86_emulate_ctxt *ctxt)
1363     return X86EMUL_CONTINUE;
1364     }
1365    
1366     +static int em_clflush(struct x86_emulate_ctxt *ctxt)
1367     +{
1368     + /* emulating clflush regardless of cpuid */
1369     + return X86EMUL_CONTINUE;
1370     +}
1371     +
1372     static bool valid_cr(int nr)
1373     {
1374     switch (nr) {
1375     @@ -3683,6 +3821,16 @@ static const struct opcode group11[] = {
1376     X7(D(Undefined)),
1377     };
1378    
1379     +static const struct gprefix pfx_0f_ae_7 = {
1380     + I(SrcMem | ByteOp, em_clflush), N, N, N,
1381     +};
1382     +
1383     +static const struct group_dual group15 = { {
1384     + N, N, N, N, N, N, N, GP(0, &pfx_0f_ae_7),
1385     +}, {
1386     + N, N, N, N, N, N, N, N,
1387     +} };
1388     +
1389     static const struct gprefix pfx_0f_6f_0f_7f = {
1390     I(Mmx, em_mov), I(Sse | Aligned, em_mov), N, I(Sse | Unaligned, em_mov),
1391     };
1392     @@ -3887,10 +4035,11 @@ static const struct opcode twobyte_table[256] = {
1393     N, I(ImplicitOps | EmulateOnUD, em_syscall),
1394     II(ImplicitOps | Priv, em_clts, clts), N,
1395     DI(ImplicitOps | Priv, invd), DI(ImplicitOps | Priv, wbinvd), N, N,
1396     - N, D(ImplicitOps | ModRM), N, N,
1397     + N, D(ImplicitOps | ModRM | SrcMem | NoAccess), N, N,
1398     /* 0x10 - 0x1F */
1399     N, N, N, N, N, N, N, N,
1400     - D(ImplicitOps | ModRM), N, N, N, N, N, N, D(ImplicitOps | ModRM),
1401     + D(ImplicitOps | ModRM | SrcMem | NoAccess),
1402     + N, N, N, N, N, N, D(ImplicitOps | ModRM | SrcMem | NoAccess),
1403     /* 0x20 - 0x2F */
1404     DIP(ModRM | DstMem | Priv | Op3264 | NoMod, cr_read, check_cr_read),
1405     DIP(ModRM | DstMem | Priv | Op3264 | NoMod, dr_read, check_dr_read),
1406     @@ -3942,7 +4091,7 @@ static const struct opcode twobyte_table[256] = {
1407     F(DstMem | SrcReg | ModRM | BitOp | Lock | PageTable, em_bts),
1408     F(DstMem | SrcReg | Src2ImmByte | ModRM, em_shrd),
1409     F(DstMem | SrcReg | Src2CL | ModRM, em_shrd),
1410     - D(ModRM), F(DstReg | SrcMem | ModRM, em_imul),
1411     + GD(0, &group15), F(DstReg | SrcMem | ModRM, em_imul),
1412     /* 0xB0 - 0xB7 */
1413     I2bv(DstMem | SrcReg | ModRM | Lock | PageTable, em_cmpxchg),
1414     I(DstReg | SrcMemFAddr | ModRM | Src2SS, em_lseg),
1415     @@ -4458,10 +4607,10 @@ done_prefixes:
1416     /* Decode and fetch the destination operand: register or memory. */
1417     rc = decode_operand(ctxt, &ctxt->dst, (ctxt->d >> DstShift) & OpMask);
1418    
1419     -done:
1420     if (ctxt->rip_relative)
1421     ctxt->memopp->addr.mem.ea += ctxt->_eip;
1422    
1423     +done:
1424     return (rc != X86EMUL_CONTINUE) ? EMULATION_FAILED : EMULATION_OK;
1425     }
1426    
1427     @@ -4711,7 +4860,7 @@ special_insn:
1428     break;
1429     case 0x70 ... 0x7f: /* jcc (short) */
1430     if (test_cc(ctxt->b, ctxt->eflags))
1431     - jmp_rel(ctxt, ctxt->src.val);
1432     + rc = jmp_rel(ctxt, ctxt->src.val);
1433     break;
1434     case 0x8d: /* lea r16/r32, m */
1435     ctxt->dst.val = ctxt->src.addr.mem.ea;
1436     @@ -4741,7 +4890,7 @@ special_insn:
1437     break;
1438     case 0xe9: /* jmp rel */
1439     case 0xeb: /* jmp rel short */
1440     - jmp_rel(ctxt, ctxt->src.val);
1441     + rc = jmp_rel(ctxt, ctxt->src.val);
1442     ctxt->dst.type = OP_NONE; /* Disable writeback. */
1443     break;
1444     case 0xf4: /* hlt */
1445     @@ -4864,13 +5013,11 @@ twobyte_insn:
1446     break;
1447     case 0x80 ... 0x8f: /* jnz rel, etc*/
1448     if (test_cc(ctxt->b, ctxt->eflags))
1449     - jmp_rel(ctxt, ctxt->src.val);
1450     + rc = jmp_rel(ctxt, ctxt->src.val);
1451     break;
1452     case 0x90 ... 0x9f: /* setcc r/m8 */
1453     ctxt->dst.val = test_cc(ctxt->b, ctxt->eflags);
1454     break;
1455     - case 0xae: /* clflush */
1456     - break;
1457     case 0xb6 ... 0xb7: /* movzx */
1458     ctxt->dst.bytes = ctxt->op_bytes;
1459     ctxt->dst.val = (ctxt->src.bytes == 1) ? (u8) ctxt->src.val
1460     diff --git a/arch/x86/kvm/i8254.c b/arch/x86/kvm/i8254.c
1461     index 518d86471b76..298781d4cfb4 100644
1462     --- a/arch/x86/kvm/i8254.c
1463     +++ b/arch/x86/kvm/i8254.c
1464     @@ -262,8 +262,10 @@ void __kvm_migrate_pit_timer(struct kvm_vcpu *vcpu)
1465     return;
1466    
1467     timer = &pit->pit_state.timer;
1468     + mutex_lock(&pit->pit_state.lock);
1469     if (hrtimer_cancel(timer))
1470     hrtimer_start_expires(timer, HRTIMER_MODE_ABS);
1471     + mutex_unlock(&pit->pit_state.lock);
1472     }
1473    
1474     static void destroy_pit_timer(struct kvm_pit *pit)
1475     diff --git a/arch/x86/kvm/svm.c b/arch/x86/kvm/svm.c
1476     index ddf742768ecf..78dadc36fc78 100644
1477     --- a/arch/x86/kvm/svm.c
1478     +++ b/arch/x86/kvm/svm.c
1479     @@ -3234,7 +3234,7 @@ static int wrmsr_interception(struct vcpu_svm *svm)
1480     msr.host_initiated = false;
1481    
1482     svm->next_rip = kvm_rip_read(&svm->vcpu) + 2;
1483     - if (svm_set_msr(&svm->vcpu, &msr)) {
1484     + if (kvm_set_msr(&svm->vcpu, &msr)) {
1485     trace_kvm_msr_write_ex(ecx, data);
1486     kvm_inject_gp(&svm->vcpu, 0);
1487     } else {
1488     @@ -3534,9 +3534,9 @@ static int handle_exit(struct kvm_vcpu *vcpu)
1489    
1490     if (exit_code >= ARRAY_SIZE(svm_exit_handlers)
1491     || !svm_exit_handlers[exit_code]) {
1492     - kvm_run->exit_reason = KVM_EXIT_UNKNOWN;
1493     - kvm_run->hw.hardware_exit_reason = exit_code;
1494     - return 0;
1495     + WARN_ONCE(1, "vmx: unexpected exit reason 0x%x\n", exit_code);
1496     + kvm_queue_exception(vcpu, UD_VECTOR);
1497     + return 1;
1498     }
1499    
1500     return svm_exit_handlers[exit_code](svm);
1501     diff --git a/arch/x86/kvm/vmx.c b/arch/x86/kvm/vmx.c
1502     index 6a118fa378b5..41a5426c8edb 100644
1503     --- a/arch/x86/kvm/vmx.c
1504     +++ b/arch/x86/kvm/vmx.c
1505     @@ -2632,12 +2632,15 @@ static int vmx_set_msr(struct kvm_vcpu *vcpu, struct msr_data *msr_info)
1506     default:
1507     msr = find_msr_entry(vmx, msr_index);
1508     if (msr) {
1509     + u64 old_msr_data = msr->data;
1510     msr->data = data;
1511     if (msr - vmx->guest_msrs < vmx->save_nmsrs) {
1512     preempt_disable();
1513     - kvm_set_shared_msr(msr->index, msr->data,
1514     - msr->mask);
1515     + ret = kvm_set_shared_msr(msr->index, msr->data,
1516     + msr->mask);
1517     preempt_enable();
1518     + if (ret)
1519     + msr->data = old_msr_data;
1520     }
1521     break;
1522     }
1523     @@ -5263,7 +5266,7 @@ static int handle_wrmsr(struct kvm_vcpu *vcpu)
1524     msr.data = data;
1525     msr.index = ecx;
1526     msr.host_initiated = false;
1527     - if (vmx_set_msr(vcpu, &msr) != 0) {
1528     + if (kvm_set_msr(vcpu, &msr) != 0) {
1529     trace_kvm_msr_write_ex(ecx, data);
1530     kvm_inject_gp(vcpu, 0);
1531     return 1;
1532     @@ -6636,6 +6639,12 @@ static int handle_invept(struct kvm_vcpu *vcpu)
1533     return 1;
1534     }
1535    
1536     +static int handle_invvpid(struct kvm_vcpu *vcpu)
1537     +{
1538     + kvm_queue_exception(vcpu, UD_VECTOR);
1539     + return 1;
1540     +}
1541     +
1542     /*
1543     * The exit handlers return 1 if the exit was handled fully and guest execution
1544     * may resume. Otherwise they set the kvm_run parameter to indicate what needs
1545     @@ -6681,6 +6690,7 @@ static int (*const kvm_vmx_exit_handlers[])(struct kvm_vcpu *vcpu) = {
1546     [EXIT_REASON_MWAIT_INSTRUCTION] = handle_mwait,
1547     [EXIT_REASON_MONITOR_INSTRUCTION] = handle_monitor,
1548     [EXIT_REASON_INVEPT] = handle_invept,
1549     + [EXIT_REASON_INVVPID] = handle_invvpid,
1550     };
1551    
1552     static const int kvm_vmx_max_exit_handlers =
1553     @@ -6914,7 +6924,7 @@ static bool nested_vmx_exit_handled(struct kvm_vcpu *vcpu)
1554     case EXIT_REASON_VMPTRST: case EXIT_REASON_VMREAD:
1555     case EXIT_REASON_VMRESUME: case EXIT_REASON_VMWRITE:
1556     case EXIT_REASON_VMOFF: case EXIT_REASON_VMON:
1557     - case EXIT_REASON_INVEPT:
1558     + case EXIT_REASON_INVEPT: case EXIT_REASON_INVVPID:
1559     /*
1560     * VMX instructions trap unconditionally. This allows L1 to
1561     * emulate them for its L2 guest, i.e., allows 3-level nesting!
1562     @@ -7055,10 +7065,10 @@ static int vmx_handle_exit(struct kvm_vcpu *vcpu)
1563     && kvm_vmx_exit_handlers[exit_reason])
1564     return kvm_vmx_exit_handlers[exit_reason](vcpu);
1565     else {
1566     - vcpu->run->exit_reason = KVM_EXIT_UNKNOWN;
1567     - vcpu->run->hw.hardware_exit_reason = exit_reason;
1568     + WARN_ONCE(1, "vmx: unexpected exit reason 0x%x\n", exit_reason);
1569     + kvm_queue_exception(vcpu, UD_VECTOR);
1570     + return 1;
1571     }
1572     - return 0;
1573     }
1574    
1575     static void update_cr8_intercept(struct kvm_vcpu *vcpu, int tpr, int irr)
1576     diff --git a/arch/x86/kvm/x86.c b/arch/x86/kvm/x86.c
1577     index 8f1e22d3b286..9d292e8372d6 100644
1578     --- a/arch/x86/kvm/x86.c
1579     +++ b/arch/x86/kvm/x86.c
1580     @@ -229,20 +229,25 @@ static void kvm_shared_msr_cpu_online(void)
1581     shared_msr_update(i, shared_msrs_global.msrs[i]);
1582     }
1583    
1584     -void kvm_set_shared_msr(unsigned slot, u64 value, u64 mask)
1585     +int kvm_set_shared_msr(unsigned slot, u64 value, u64 mask)
1586     {
1587     unsigned int cpu = smp_processor_id();
1588     struct kvm_shared_msrs *smsr = per_cpu_ptr(shared_msrs, cpu);
1589     + int err;
1590    
1591     if (((value ^ smsr->values[slot].curr) & mask) == 0)
1592     - return;
1593     + return 0;
1594     smsr->values[slot].curr = value;
1595     - wrmsrl(shared_msrs_global.msrs[slot], value);
1596     + err = wrmsrl_safe(shared_msrs_global.msrs[slot], value);
1597     + if (err)
1598     + return 1;
1599     +
1600     if (!smsr->registered) {
1601     smsr->urn.on_user_return = kvm_on_user_return;
1602     user_return_notifier_register(&smsr->urn);
1603     smsr->registered = true;
1604     }
1605     + return 0;
1606     }
1607     EXPORT_SYMBOL_GPL(kvm_set_shared_msr);
1608    
1609     @@ -984,7 +989,6 @@ void kvm_enable_efer_bits(u64 mask)
1610     }
1611     EXPORT_SYMBOL_GPL(kvm_enable_efer_bits);
1612    
1613     -
1614     /*
1615     * Writes msr value into into the appropriate "register".
1616     * Returns 0 on success, non-0 otherwise.
1617     @@ -992,8 +996,34 @@ EXPORT_SYMBOL_GPL(kvm_enable_efer_bits);
1618     */
1619     int kvm_set_msr(struct kvm_vcpu *vcpu, struct msr_data *msr)
1620     {
1621     + switch (msr->index) {
1622     + case MSR_FS_BASE:
1623     + case MSR_GS_BASE:
1624     + case MSR_KERNEL_GS_BASE:
1625     + case MSR_CSTAR:
1626     + case MSR_LSTAR:
1627     + if (is_noncanonical_address(msr->data))
1628     + return 1;
1629     + break;
1630     + case MSR_IA32_SYSENTER_EIP:
1631     + case MSR_IA32_SYSENTER_ESP:
1632     + /*
1633     + * IA32_SYSENTER_ESP and IA32_SYSENTER_EIP cause #GP if
1634     + * non-canonical address is written on Intel but not on
1635     + * AMD (which ignores the top 32-bits, because it does
1636     + * not implement 64-bit SYSENTER).
1637     + *
1638     + * 64-bit code should hence be able to write a non-canonical
1639     + * value on AMD. Making the address canonical ensures that
1640     + * vmentry does not fail on Intel after writing a non-canonical
1641     + * value, and that something deterministic happens if the guest
1642     + * invokes 64-bit SYSENTER.
1643     + */
1644     + msr->data = get_canonical(msr->data);
1645     + }
1646     return kvm_x86_ops->set_msr(vcpu, msr);
1647     }
1648     +EXPORT_SYMBOL_GPL(kvm_set_msr);
1649    
1650     /*
1651     * Adapt set_msr() to msr_io()'s calling convention
1652     diff --git a/arch/x86/mm/pageattr.c b/arch/x86/mm/pageattr.c
1653     index ae242a7c11c7..36de293caf25 100644
1654     --- a/arch/x86/mm/pageattr.c
1655     +++ b/arch/x86/mm/pageattr.c
1656     @@ -409,7 +409,7 @@ phys_addr_t slow_virt_to_phys(void *__virt_addr)
1657     psize = page_level_size(level);
1658     pmask = page_level_mask(level);
1659     offset = virt_addr & ~pmask;
1660     - phys_addr = pte_pfn(*pte) << PAGE_SHIFT;
1661     + phys_addr = (phys_addr_t)pte_pfn(*pte) << PAGE_SHIFT;
1662     return (phys_addr | offset);
1663     }
1664     EXPORT_SYMBOL_GPL(slow_virt_to_phys);
1665     diff --git a/arch/x86/net/bpf_jit_comp.c b/arch/x86/net/bpf_jit_comp.c
1666     index 5c8cb8043c5a..c881ba8491e5 100644
1667     --- a/arch/x86/net/bpf_jit_comp.c
1668     +++ b/arch/x86/net/bpf_jit_comp.c
1669     @@ -211,12 +211,17 @@ struct jit_context {
1670     bool seen_ld_abs;
1671     };
1672    
1673     +/* maximum number of bytes emitted while JITing one eBPF insn */
1674     +#define BPF_MAX_INSN_SIZE 128
1675     +#define BPF_INSN_SAFETY 64
1676     +
1677     static int do_jit(struct bpf_prog *bpf_prog, int *addrs, u8 *image,
1678     int oldproglen, struct jit_context *ctx)
1679     {
1680     struct bpf_insn *insn = bpf_prog->insnsi;
1681     int insn_cnt = bpf_prog->len;
1682     - u8 temp[64];
1683     + bool seen_ld_abs = ctx->seen_ld_abs | (oldproglen == 0);
1684     + u8 temp[BPF_MAX_INSN_SIZE + BPF_INSN_SAFETY];
1685     int i;
1686     int proglen = 0;
1687     u8 *prog = temp;
1688     @@ -254,7 +259,7 @@ static int do_jit(struct bpf_prog *bpf_prog, int *addrs, u8 *image,
1689     EMIT2(0x31, 0xc0); /* xor eax, eax */
1690     EMIT3(0x4D, 0x31, 0xED); /* xor r13, r13 */
1691    
1692     - if (ctx->seen_ld_abs) {
1693     + if (seen_ld_abs) {
1694     /* r9d : skb->len - skb->data_len (headlen)
1695     * r10 : skb->data
1696     */
1697     @@ -655,7 +660,7 @@ xadd: if (is_imm8(insn->off))
1698     case BPF_JMP | BPF_CALL:
1699     func = (u8 *) __bpf_call_base + imm32;
1700     jmp_offset = func - (image + addrs[i]);
1701     - if (ctx->seen_ld_abs) {
1702     + if (seen_ld_abs) {
1703     EMIT2(0x41, 0x52); /* push %r10 */
1704     EMIT2(0x41, 0x51); /* push %r9 */
1705     /* need to adjust jmp offset, since
1706     @@ -669,7 +674,7 @@ xadd: if (is_imm8(insn->off))
1707     return -EINVAL;
1708     }
1709     EMIT1_off32(0xE8, jmp_offset);
1710     - if (ctx->seen_ld_abs) {
1711     + if (seen_ld_abs) {
1712     EMIT2(0x41, 0x59); /* pop %r9 */
1713     EMIT2(0x41, 0x5A); /* pop %r10 */
1714     }
1715     @@ -774,7 +779,8 @@ emit_jmp:
1716     goto common_load;
1717     case BPF_LD | BPF_ABS | BPF_W:
1718     func = CHOOSE_LOAD_FUNC(imm32, sk_load_word);
1719     -common_load: ctx->seen_ld_abs = true;
1720     +common_load:
1721     + ctx->seen_ld_abs = seen_ld_abs = true;
1722     jmp_offset = func - (image + addrs[i]);
1723     if (!func || !is_simm32(jmp_offset)) {
1724     pr_err("unsupported bpf func %d addr %p image %p\n",
1725     @@ -848,6 +854,11 @@ common_load: ctx->seen_ld_abs = true;
1726     }
1727    
1728     ilen = prog - temp;
1729     + if (ilen > BPF_MAX_INSN_SIZE) {
1730     + pr_err("bpf_jit_compile fatal insn size error\n");
1731     + return -EFAULT;
1732     + }
1733     +
1734     if (image) {
1735     if (unlikely(proglen + ilen > oldproglen)) {
1736     pr_err("bpf_jit_compile fatal error\n");
1737     @@ -904,9 +915,11 @@ void bpf_int_jit_compile(struct bpf_prog *prog)
1738     goto out;
1739     }
1740     if (image) {
1741     - if (proglen != oldproglen)
1742     + if (proglen != oldproglen) {
1743     pr_err("bpf_jit: proglen=%d != oldproglen=%d\n",
1744     proglen, oldproglen);
1745     + goto out;
1746     + }
1747     break;
1748     }
1749     if (proglen == oldproglen) {
1750     diff --git a/arch/x86/platform/intel-mid/sfi.c b/arch/x86/platform/intel-mid/sfi.c
1751     index 3c53a90fdb18..c14ad34776c4 100644
1752     --- a/arch/x86/platform/intel-mid/sfi.c
1753     +++ b/arch/x86/platform/intel-mid/sfi.c
1754     @@ -106,6 +106,7 @@ int __init sfi_parse_mtmr(struct sfi_table_header *table)
1755     mp_irq.dstapic = MP_APIC_ALL;
1756     mp_irq.dstirq = pentry->irq;
1757     mp_save_irq(&mp_irq);
1758     + mp_map_gsi_to_irq(pentry->irq, IOAPIC_MAP_ALLOC);
1759     }
1760    
1761     return 0;
1762     @@ -176,6 +177,7 @@ int __init sfi_parse_mrtc(struct sfi_table_header *table)
1763     mp_irq.dstapic = MP_APIC_ALL;
1764     mp_irq.dstirq = pentry->irq;
1765     mp_save_irq(&mp_irq);
1766     + mp_map_gsi_to_irq(pentry->irq, IOAPIC_MAP_ALLOC);
1767     }
1768     return 0;
1769     }
1770     diff --git a/block/blk-mq-tag.c b/block/blk-mq-tag.c
1771     index c1b92426c95e..74a4168ea34e 100644
1772     --- a/block/blk-mq-tag.c
1773     +++ b/block/blk-mq-tag.c
1774     @@ -463,8 +463,8 @@ static void bt_update_count(struct blk_mq_bitmap_tags *bt,
1775     }
1776    
1777     bt->wake_cnt = BT_WAIT_BATCH;
1778     - if (bt->wake_cnt > depth / 4)
1779     - bt->wake_cnt = max(1U, depth / 4);
1780     + if (bt->wake_cnt > depth / BT_WAIT_QUEUES)
1781     + bt->wake_cnt = max(1U, depth / BT_WAIT_QUEUES);
1782    
1783     bt->depth = depth;
1784     }
1785     diff --git a/block/blk-settings.c b/block/blk-settings.c
1786     index f1a1795a5683..aa02247d227e 100644
1787     --- a/block/blk-settings.c
1788     +++ b/block/blk-settings.c
1789     @@ -574,7 +574,7 @@ int blk_stack_limits(struct queue_limits *t, struct queue_limits *b,
1790     bottom = max(b->physical_block_size, b->io_min) + alignment;
1791    
1792     /* Verify that top and bottom intervals line up */
1793     - if (max(top, bottom) & (min(top, bottom) - 1)) {
1794     + if (max(top, bottom) % min(top, bottom)) {
1795     t->misaligned = 1;
1796     ret = -1;
1797     }
1798     @@ -619,7 +619,7 @@ int blk_stack_limits(struct queue_limits *t, struct queue_limits *b,
1799    
1800     /* Find lowest common alignment_offset */
1801     t->alignment_offset = lcm(t->alignment_offset, alignment)
1802     - & (max(t->physical_block_size, t->io_min) - 1);
1803     + % max(t->physical_block_size, t->io_min);
1804    
1805     /* Verify that new alignment_offset is on a logical block boundary */
1806     if (t->alignment_offset & (t->logical_block_size - 1)) {
1807     diff --git a/block/scsi_ioctl.c b/block/scsi_ioctl.c
1808     index 9b8eaeca6a79..a6d6270806c3 100644
1809     --- a/block/scsi_ioctl.c
1810     +++ b/block/scsi_ioctl.c
1811     @@ -509,7 +509,7 @@ int sg_scsi_ioctl(struct request_queue *q, struct gendisk *disk, fmode_t mode,
1812    
1813     if (bytes && blk_rq_map_kern(q, rq, buffer, bytes, __GFP_WAIT)) {
1814     err = DRIVER_ERROR << 24;
1815     - goto out;
1816     + goto error;
1817     }
1818    
1819     memset(sense, 0, sizeof(sense));
1820     @@ -518,7 +518,6 @@ int sg_scsi_ioctl(struct request_queue *q, struct gendisk *disk, fmode_t mode,
1821    
1822     blk_execute_rq(q, disk, rq, 0);
1823    
1824     -out:
1825     err = rq->errors & 0xff; /* only 8 bit SCSI status */
1826     if (err) {
1827     if (rq->sense_len && rq->sense) {
1828     diff --git a/crypto/algif_skcipher.c b/crypto/algif_skcipher.c
1829     index a19c027b29bd..83187f497c7c 100644
1830     --- a/crypto/algif_skcipher.c
1831     +++ b/crypto/algif_skcipher.c
1832     @@ -49,7 +49,7 @@ struct skcipher_ctx {
1833     struct ablkcipher_request req;
1834     };
1835    
1836     -#define MAX_SGL_ENTS ((PAGE_SIZE - sizeof(struct skcipher_sg_list)) / \
1837     +#define MAX_SGL_ENTS ((4096 - sizeof(struct skcipher_sg_list)) / \
1838     sizeof(struct scatterlist) - 1)
1839    
1840     static inline int skcipher_sndbuf(struct sock *sk)
1841     diff --git a/drivers/acpi/device_pm.c b/drivers/acpi/device_pm.c
1842     index 67075f800e34..5e9cbd664286 100644
1843     --- a/drivers/acpi/device_pm.c
1844     +++ b/drivers/acpi/device_pm.c
1845     @@ -710,7 +710,7 @@ int acpi_pm_device_run_wake(struct device *phys_dev, bool enable)
1846     return -ENODEV;
1847     }
1848    
1849     - return acpi_device_wakeup(adev, enable, ACPI_STATE_S0);
1850     + return acpi_device_wakeup(adev, ACPI_STATE_S0, enable);
1851     }
1852     EXPORT_SYMBOL(acpi_pm_device_run_wake);
1853     #endif /* CONFIG_PM_RUNTIME */
1854     diff --git a/drivers/acpi/ec.c b/drivers/acpi/ec.c
1855     index cb6066c809ea..c874859b4565 100644
1856     --- a/drivers/acpi/ec.c
1857     +++ b/drivers/acpi/ec.c
1858     @@ -126,6 +126,7 @@ static int EC_FLAGS_MSI; /* Out-of-spec MSI controller */
1859     static int EC_FLAGS_VALIDATE_ECDT; /* ASUStec ECDTs need to be validated */
1860     static int EC_FLAGS_SKIP_DSDT_SCAN; /* Not all BIOS survive early DSDT scan */
1861     static int EC_FLAGS_CLEAR_ON_RESUME; /* Needs acpi_ec_clear() on boot/resume */
1862     +static int EC_FLAGS_QUERY_HANDSHAKE; /* Needs QR_EC issued when SCI_EVT set */
1863    
1864     /* --------------------------------------------------------------------------
1865     Transaction Management
1866     @@ -210,13 +211,8 @@ static bool advance_transaction(struct acpi_ec *ec)
1867     }
1868     return wakeup;
1869     } else {
1870     - /*
1871     - * There is firmware refusing to respond QR_EC when SCI_EVT
1872     - * is not set, for which case, we complete the QR_EC
1873     - * without issuing it to the firmware.
1874     - * https://bugzilla.kernel.org/show_bug.cgi?id=86211
1875     - */
1876     - if (!(status & ACPI_EC_FLAG_SCI) &&
1877     + if (EC_FLAGS_QUERY_HANDSHAKE &&
1878     + !(status & ACPI_EC_FLAG_SCI) &&
1879     (t->command == ACPI_EC_COMMAND_QUERY)) {
1880     t->flags |= ACPI_EC_COMMAND_POLL;
1881     t->rdata[t->ri++] = 0x00;
1882     @@ -981,6 +977,18 @@ static int ec_enlarge_storm_threshold(const struct dmi_system_id *id)
1883     }
1884    
1885     /*
1886     + * Acer EC firmware refuses to respond QR_EC when SCI_EVT is not set, for
1887     + * which case, we complete the QR_EC without issuing it to the firmware.
1888     + * https://bugzilla.kernel.org/show_bug.cgi?id=86211
1889     + */
1890     +static int ec_flag_query_handshake(const struct dmi_system_id *id)
1891     +{
1892     + pr_debug("Detected the EC firmware requiring QR_EC issued when SCI_EVT set\n");
1893     + EC_FLAGS_QUERY_HANDSHAKE = 1;
1894     + return 0;
1895     +}
1896     +
1897     +/*
1898     * On some hardware it is necessary to clear events accumulated by the EC during
1899     * sleep. These ECs stop reporting GPEs until they are manually polled, if too
1900     * many events are accumulated. (e.g. Samsung Series 5/9 notebooks)
1901     @@ -1054,6 +1062,9 @@ static struct dmi_system_id ec_dmi_table[] __initdata = {
1902     {
1903     ec_clear_on_resume, "Samsung hardware", {
1904     DMI_MATCH(DMI_SYS_VENDOR, "SAMSUNG ELECTRONICS CO., LTD.")}, NULL},
1905     + {
1906     + ec_flag_query_handshake, "Acer hardware", {
1907     + DMI_MATCH(DMI_SYS_VENDOR, "Acer"), }, NULL},
1908     {},
1909     };
1910    
1911     diff --git a/drivers/ata/libata-sff.c b/drivers/ata/libata-sff.c
1912     index 1121153f1ecd..db90aa35cb71 100644
1913     --- a/drivers/ata/libata-sff.c
1914     +++ b/drivers/ata/libata-sff.c
1915     @@ -2008,13 +2008,15 @@ static int ata_bus_softreset(struct ata_port *ap, unsigned int devmask,
1916    
1917     DPRINTK("ata%u: bus reset via SRST\n", ap->print_id);
1918    
1919     - /* software reset. causes dev0 to be selected */
1920     - iowrite8(ap->ctl, ioaddr->ctl_addr);
1921     - udelay(20); /* FIXME: flush */
1922     - iowrite8(ap->ctl | ATA_SRST, ioaddr->ctl_addr);
1923     - udelay(20); /* FIXME: flush */
1924     - iowrite8(ap->ctl, ioaddr->ctl_addr);
1925     - ap->last_ctl = ap->ctl;
1926     + if (ap->ioaddr.ctl_addr) {
1927     + /* software reset. causes dev0 to be selected */
1928     + iowrite8(ap->ctl, ioaddr->ctl_addr);
1929     + udelay(20); /* FIXME: flush */
1930     + iowrite8(ap->ctl | ATA_SRST, ioaddr->ctl_addr);
1931     + udelay(20); /* FIXME: flush */
1932     + iowrite8(ap->ctl, ioaddr->ctl_addr);
1933     + ap->last_ctl = ap->ctl;
1934     + }
1935    
1936     /* wait the port to become ready */
1937     return ata_sff_wait_after_reset(&ap->link, devmask, deadline);
1938     @@ -2215,10 +2217,6 @@ void ata_sff_error_handler(struct ata_port *ap)
1939    
1940     spin_unlock_irqrestore(ap->lock, flags);
1941    
1942     - /* ignore ata_sff_softreset if ctl isn't accessible */
1943     - if (softreset == ata_sff_softreset && !ap->ioaddr.ctl_addr)
1944     - softreset = NULL;
1945     -
1946     /* ignore built-in hardresets if SCR access is not available */
1947     if ((hardreset == sata_std_hardreset ||
1948     hardreset == sata_sff_hardreset) && !sata_scr_valid(&ap->link))
1949     diff --git a/drivers/ata/pata_serverworks.c b/drivers/ata/pata_serverworks.c
1950     index fc5f31d4828e..57de02123c4c 100644
1951     --- a/drivers/ata/pata_serverworks.c
1952     +++ b/drivers/ata/pata_serverworks.c
1953     @@ -251,12 +251,18 @@ static void serverworks_set_dmamode(struct ata_port *ap, struct ata_device *adev
1954     pci_write_config_byte(pdev, 0x54, ultra_cfg);
1955     }
1956    
1957     -static struct scsi_host_template serverworks_sht = {
1958     +static struct scsi_host_template serverworks_osb4_sht = {
1959     + ATA_BMDMA_SHT(DRV_NAME),
1960     + .sg_tablesize = LIBATA_DUMB_MAX_PRD,
1961     +};
1962     +
1963     +static struct scsi_host_template serverworks_csb_sht = {
1964     ATA_BMDMA_SHT(DRV_NAME),
1965     };
1966    
1967     static struct ata_port_operations serverworks_osb4_port_ops = {
1968     .inherits = &ata_bmdma_port_ops,
1969     + .qc_prep = ata_bmdma_dumb_qc_prep,
1970     .cable_detect = serverworks_cable_detect,
1971     .mode_filter = serverworks_osb4_filter,
1972     .set_piomode = serverworks_set_piomode,
1973     @@ -265,6 +271,7 @@ static struct ata_port_operations serverworks_osb4_port_ops = {
1974    
1975     static struct ata_port_operations serverworks_csb_port_ops = {
1976     .inherits = &serverworks_osb4_port_ops,
1977     + .qc_prep = ata_bmdma_qc_prep,
1978     .mode_filter = serverworks_csb_filter,
1979     };
1980    
1981     @@ -404,6 +411,7 @@ static int serverworks_init_one(struct pci_dev *pdev, const struct pci_device_id
1982     }
1983     };
1984     const struct ata_port_info *ppi[] = { &info[id->driver_data], NULL };
1985     + struct scsi_host_template *sht = &serverworks_csb_sht;
1986     int rc;
1987    
1988     rc = pcim_enable_device(pdev);
1989     @@ -417,6 +425,7 @@ static int serverworks_init_one(struct pci_dev *pdev, const struct pci_device_id
1990     /* Select non UDMA capable OSB4 if we can't do fixups */
1991     if (rc < 0)
1992     ppi[0] = &info[1];
1993     + sht = &serverworks_osb4_sht;
1994     }
1995     /* setup CSB5/CSB6 : South Bridge and IDE option RAID */
1996     else if ((pdev->device == PCI_DEVICE_ID_SERVERWORKS_CSB5IDE) ||
1997     @@ -433,7 +442,7 @@ static int serverworks_init_one(struct pci_dev *pdev, const struct pci_device_id
1998     ppi[1] = &ata_dummy_port_info;
1999     }
2000    
2001     - return ata_pci_bmdma_init_one(pdev, ppi, &serverworks_sht, NULL, 0);
2002     + return ata_pci_bmdma_init_one(pdev, ppi, sht, NULL, 0);
2003     }
2004    
2005     #ifdef CONFIG_PM_SLEEP
2006     diff --git a/drivers/base/core.c b/drivers/base/core.c
2007     index 20da3ad1696b..0e9468cb814f 100644
2008     --- a/drivers/base/core.c
2009     +++ b/drivers/base/core.c
2010     @@ -724,12 +724,12 @@ class_dir_create_and_add(struct class *class, struct kobject *parent_kobj)
2011     return &dir->kobj;
2012     }
2013    
2014     +static DEFINE_MUTEX(gdp_mutex);
2015    
2016     static struct kobject *get_device_parent(struct device *dev,
2017     struct device *parent)
2018     {
2019     if (dev->class) {
2020     - static DEFINE_MUTEX(gdp_mutex);
2021     struct kobject *kobj = NULL;
2022     struct kobject *parent_kobj;
2023     struct kobject *k;
2024     @@ -793,7 +793,9 @@ static void cleanup_glue_dir(struct device *dev, struct kobject *glue_dir)
2025     glue_dir->kset != &dev->class->p->glue_dirs)
2026     return;
2027    
2028     + mutex_lock(&gdp_mutex);
2029     kobject_put(glue_dir);
2030     + mutex_unlock(&gdp_mutex);
2031     }
2032    
2033     static void cleanup_device_parent(struct device *dev)
2034     diff --git a/drivers/base/power/main.c b/drivers/base/power/main.c
2035     index b67d9aef9fe4..ebc2f9decdda 100644
2036     --- a/drivers/base/power/main.c
2037     +++ b/drivers/base/power/main.c
2038     @@ -1266,6 +1266,8 @@ static int dpm_suspend_late(pm_message_t state)
2039     }
2040     mutex_unlock(&dpm_list_mtx);
2041     async_synchronize_full();
2042     + if (!error)
2043     + error = async_error;
2044     if (error) {
2045     suspend_stats.failed_suspend_late++;
2046     dpm_save_failed_step(SUSPEND_SUSPEND_LATE);
2047     diff --git a/drivers/block/drbd/drbd_interval.c b/drivers/block/drbd/drbd_interval.c
2048     index 89c497c630b4..04a14e0f8878 100644
2049     --- a/drivers/block/drbd/drbd_interval.c
2050     +++ b/drivers/block/drbd/drbd_interval.c
2051     @@ -79,6 +79,7 @@ bool
2052     drbd_insert_interval(struct rb_root *root, struct drbd_interval *this)
2053     {
2054     struct rb_node **new = &root->rb_node, *parent = NULL;
2055     + sector_t this_end = this->sector + (this->size >> 9);
2056    
2057     BUG_ON(!IS_ALIGNED(this->size, 512));
2058    
2059     @@ -87,6 +88,8 @@ drbd_insert_interval(struct rb_root *root, struct drbd_interval *this)
2060     rb_entry(*new, struct drbd_interval, rb);
2061    
2062     parent = *new;
2063     + if (here->end < this_end)
2064     + here->end = this_end;
2065     if (this->sector < here->sector)
2066     new = &(*new)->rb_left;
2067     else if (this->sector > here->sector)
2068     @@ -99,6 +102,7 @@ drbd_insert_interval(struct rb_root *root, struct drbd_interval *this)
2069     return false;
2070     }
2071    
2072     + this->end = this_end;
2073     rb_link_node(&this->rb, parent, new);
2074     rb_insert_augmented(&this->rb, root, &augment_callbacks);
2075     return true;
2076     diff --git a/drivers/block/rbd.c b/drivers/block/rbd.c
2077     index 4b97baf8afa3..33f0f97d3750 100644
2078     --- a/drivers/block/rbd.c
2079     +++ b/drivers/block/rbd.c
2080     @@ -3382,7 +3382,7 @@ static int rbd_obj_read_sync(struct rbd_device *rbd_dev,
2081     page_count = (u32) calc_pages_for(offset, length);
2082     pages = ceph_alloc_page_vector(page_count, GFP_KERNEL);
2083     if (IS_ERR(pages))
2084     - ret = PTR_ERR(pages);
2085     + return PTR_ERR(pages);
2086    
2087     ret = -ENOMEM;
2088     obj_request = rbd_obj_request_create(object_name, offset, length,
2089     @@ -5087,7 +5087,8 @@ static int rbd_dev_device_setup(struct rbd_device *rbd_dev)
2090     set_capacity(rbd_dev->disk, rbd_dev->mapping.size / SECTOR_SIZE);
2091     set_disk_ro(rbd_dev->disk, rbd_dev->mapping.read_only);
2092    
2093     - rbd_dev->rq_wq = alloc_workqueue("%s", 0, 0, rbd_dev->disk->disk_name);
2094     + rbd_dev->rq_wq = alloc_workqueue("%s", WQ_MEM_RECLAIM, 0,
2095     + rbd_dev->disk->disk_name);
2096     if (!rbd_dev->rq_wq) {
2097     ret = -ENOMEM;
2098     goto err_out_mapping;
2099     diff --git a/drivers/block/xen-blkback/blkback.c b/drivers/block/xen-blkback/blkback.c
2100     index 64c60edcdfbc..63fc7f06a014 100644
2101     --- a/drivers/block/xen-blkback/blkback.c
2102     +++ b/drivers/block/xen-blkback/blkback.c
2103     @@ -763,6 +763,7 @@ again:
2104     BUG_ON(new_map_idx >= segs_to_map);
2105     if (unlikely(map[new_map_idx].status != 0)) {
2106     pr_debug(DRV_PFX "invalid buffer -- could not remap it\n");
2107     + put_free_pages(blkif, &pages[seg_idx]->page, 1);
2108     pages[seg_idx]->handle = BLKBACK_INVALID_HANDLE;
2109     ret |= 1;
2110     goto next;
2111     diff --git a/drivers/block/xen-blkback/xenbus.c b/drivers/block/xen-blkback/xenbus.c
2112     index 3a8b810b4980..54f408963201 100644
2113     --- a/drivers/block/xen-blkback/xenbus.c
2114     +++ b/drivers/block/xen-blkback/xenbus.c
2115     @@ -270,6 +270,9 @@ static int xen_blkif_disconnect(struct xen_blkif *blkif)
2116     blkif->blk_rings.common.sring = NULL;
2117     }
2118    
2119     + /* Remove all persistent grants and the cache of ballooned pages. */
2120     + xen_blkbk_free_caches(blkif);
2121     +
2122     return 0;
2123     }
2124    
2125     @@ -281,9 +284,6 @@ static void xen_blkif_free(struct xen_blkif *blkif)
2126     xen_blkif_disconnect(blkif);
2127     xen_vbd_free(&blkif->vbd);
2128    
2129     - /* Remove all persistent grants and the cache of ballooned pages. */
2130     - xen_blkbk_free_caches(blkif);
2131     -
2132     /* Make sure everything is drained before shutting down */
2133     BUG_ON(blkif->persistent_gnt_c != 0);
2134     BUG_ON(atomic_read(&blkif->persistent_gnt_in_use) != 0);
2135     diff --git a/drivers/char/random.c b/drivers/char/random.c
2136     index c18d41db83d8..8c86a95203a0 100644
2137     --- a/drivers/char/random.c
2138     +++ b/drivers/char/random.c
2139     @@ -1106,7 +1106,7 @@ static void extract_buf(struct entropy_store *r, __u8 *out)
2140     __mix_pool_bytes(r, hash.w, sizeof(hash.w));
2141     spin_unlock_irqrestore(&r->lock, flags);
2142    
2143     - memset(workspace, 0, sizeof(workspace));
2144     + memzero_explicit(workspace, sizeof(workspace));
2145    
2146     /*
2147     * In case the hash function has some recognizable output
2148     @@ -1118,7 +1118,7 @@ static void extract_buf(struct entropy_store *r, __u8 *out)
2149     hash.w[2] ^= rol32(hash.w[2], 16);
2150    
2151     memcpy(out, &hash, EXTRACT_SIZE);
2152     - memset(&hash, 0, sizeof(hash));
2153     + memzero_explicit(&hash, sizeof(hash));
2154     }
2155    
2156     /*
2157     @@ -1175,7 +1175,7 @@ static ssize_t extract_entropy(struct entropy_store *r, void *buf,
2158     }
2159    
2160     /* Wipe data just returned from memory */
2161     - memset(tmp, 0, sizeof(tmp));
2162     + memzero_explicit(tmp, sizeof(tmp));
2163    
2164     return ret;
2165     }
2166     @@ -1218,7 +1218,7 @@ static ssize_t extract_entropy_user(struct entropy_store *r, void __user *buf,
2167     }
2168    
2169     /* Wipe data just returned from memory */
2170     - memset(tmp, 0, sizeof(tmp));
2171     + memzero_explicit(tmp, sizeof(tmp));
2172    
2173     return ret;
2174     }
2175     diff --git a/drivers/cpufreq/cpufreq.c b/drivers/cpufreq/cpufreq.c
2176     index 61190f6b4829..c05821e8de41 100644
2177     --- a/drivers/cpufreq/cpufreq.c
2178     +++ b/drivers/cpufreq/cpufreq.c
2179     @@ -512,7 +512,18 @@ show_one(cpuinfo_max_freq, cpuinfo.max_freq);
2180     show_one(cpuinfo_transition_latency, cpuinfo.transition_latency);
2181     show_one(scaling_min_freq, min);
2182     show_one(scaling_max_freq, max);
2183     -show_one(scaling_cur_freq, cur);
2184     +
2185     +static ssize_t show_scaling_cur_freq(
2186     + struct cpufreq_policy *policy, char *buf)
2187     +{
2188     + ssize_t ret;
2189     +
2190     + if (cpufreq_driver && cpufreq_driver->setpolicy && cpufreq_driver->get)
2191     + ret = sprintf(buf, "%u\n", cpufreq_driver->get(policy->cpu));
2192     + else
2193     + ret = sprintf(buf, "%u\n", policy->cur);
2194     + return ret;
2195     +}
2196    
2197     static int cpufreq_set_policy(struct cpufreq_policy *policy,
2198     struct cpufreq_policy *new_policy);
2199     @@ -906,11 +917,11 @@ static int cpufreq_add_dev_interface(struct cpufreq_policy *policy,
2200     if (ret)
2201     goto err_out_kobj_put;
2202     }
2203     - if (has_target()) {
2204     - ret = sysfs_create_file(&policy->kobj, &scaling_cur_freq.attr);
2205     - if (ret)
2206     - goto err_out_kobj_put;
2207     - }
2208     +
2209     + ret = sysfs_create_file(&policy->kobj, &scaling_cur_freq.attr);
2210     + if (ret)
2211     + goto err_out_kobj_put;
2212     +
2213     if (cpufreq_driver->bios_limit) {
2214     ret = sysfs_create_file(&policy->kobj, &bios_limit.attr);
2215     if (ret)
2216     diff --git a/drivers/cpufreq/intel_pstate.c b/drivers/cpufreq/intel_pstate.c
2217     index 0668b389c516..27bb6d3877ed 100644
2218     --- a/drivers/cpufreq/intel_pstate.c
2219     +++ b/drivers/cpufreq/intel_pstate.c
2220     @@ -52,6 +52,17 @@ static inline int32_t div_fp(int32_t x, int32_t y)
2221     return div_s64((int64_t)x << FRAC_BITS, y);
2222     }
2223    
2224     +static inline int ceiling_fp(int32_t x)
2225     +{
2226     + int mask, ret;
2227     +
2228     + ret = fp_toint(x);
2229     + mask = (1 << FRAC_BITS) - 1;
2230     + if (x & mask)
2231     + ret += 1;
2232     + return ret;
2233     +}
2234     +
2235     struct sample {
2236     int32_t core_pct_busy;
2237     u64 aperf;
2238     @@ -64,6 +75,7 @@ struct pstate_data {
2239     int current_pstate;
2240     int min_pstate;
2241     int max_pstate;
2242     + int scaling;
2243     int turbo_pstate;
2244     };
2245    
2246     @@ -113,6 +125,7 @@ struct pstate_funcs {
2247     int (*get_max)(void);
2248     int (*get_min)(void);
2249     int (*get_turbo)(void);
2250     + int (*get_scaling)(void);
2251     void (*set)(struct cpudata*, int pstate);
2252     void (*get_vid)(struct cpudata *);
2253     };
2254     @@ -138,6 +151,7 @@ struct perf_limits {
2255    
2256     static struct perf_limits limits = {
2257     .no_turbo = 0,
2258     + .turbo_disabled = 0,
2259     .max_perf_pct = 100,
2260     .max_perf = int_tofp(1),
2261     .min_perf_pct = 0,
2262     @@ -218,6 +232,18 @@ static inline void intel_pstate_reset_all_pid(void)
2263     }
2264     }
2265    
2266     +static inline void update_turbo_state(void)
2267     +{
2268     + u64 misc_en;
2269     + struct cpudata *cpu;
2270     +
2271     + cpu = all_cpu_data[0];
2272     + rdmsrl(MSR_IA32_MISC_ENABLE, misc_en);
2273     + limits.turbo_disabled =
2274     + (misc_en & MSR_IA32_MISC_ENABLE_TURBO_DISABLE ||
2275     + cpu->pstate.max_pstate == cpu->pstate.turbo_pstate);
2276     +}
2277     +
2278     /************************** debugfs begin ************************/
2279     static int pid_param_set(void *data, u64 val)
2280     {
2281     @@ -274,6 +300,20 @@ static void __init intel_pstate_debug_expose_params(void)
2282     return sprintf(buf, "%u\n", limits.object); \
2283     }
2284    
2285     +static ssize_t show_no_turbo(struct kobject *kobj,
2286     + struct attribute *attr, char *buf)
2287     +{
2288     + ssize_t ret;
2289     +
2290     + update_turbo_state();
2291     + if (limits.turbo_disabled)
2292     + ret = sprintf(buf, "%u\n", limits.turbo_disabled);
2293     + else
2294     + ret = sprintf(buf, "%u\n", limits.no_turbo);
2295     +
2296     + return ret;
2297     +}
2298     +
2299     static ssize_t store_no_turbo(struct kobject *a, struct attribute *b,
2300     const char *buf, size_t count)
2301     {
2302     @@ -283,11 +323,14 @@ static ssize_t store_no_turbo(struct kobject *a, struct attribute *b,
2303     ret = sscanf(buf, "%u", &input);
2304     if (ret != 1)
2305     return -EINVAL;
2306     - limits.no_turbo = clamp_t(int, input, 0 , 1);
2307     +
2308     + update_turbo_state();
2309     if (limits.turbo_disabled) {
2310     pr_warn("Turbo disabled by BIOS or unavailable on processor\n");
2311     - limits.no_turbo = limits.turbo_disabled;
2312     + return -EPERM;
2313     }
2314     + limits.no_turbo = clamp_t(int, input, 0, 1);
2315     +
2316     return count;
2317     }
2318    
2319     @@ -323,7 +366,6 @@ static ssize_t store_min_perf_pct(struct kobject *a, struct attribute *b,
2320     return count;
2321     }
2322    
2323     -show_one(no_turbo, no_turbo);
2324     show_one(max_perf_pct, max_perf_pct);
2325     show_one(min_perf_pct, min_perf_pct);
2326    
2327     @@ -394,7 +436,7 @@ static void byt_set_pstate(struct cpudata *cpudata, int pstate)
2328     cpudata->vid.ratio);
2329    
2330     vid_fp = clamp_t(int32_t, vid_fp, cpudata->vid.min, cpudata->vid.max);
2331     - vid = fp_toint(vid_fp);
2332     + vid = ceiling_fp(vid_fp);
2333    
2334     if (pstate > cpudata->pstate.max_pstate)
2335     vid = cpudata->vid.turbo;
2336     @@ -404,6 +446,22 @@ static void byt_set_pstate(struct cpudata *cpudata, int pstate)
2337     wrmsrl(MSR_IA32_PERF_CTL, val);
2338     }
2339    
2340     +#define BYT_BCLK_FREQS 5
2341     +static int byt_freq_table[BYT_BCLK_FREQS] = { 833, 1000, 1333, 1167, 800};
2342     +
2343     +static int byt_get_scaling(void)
2344     +{
2345     + u64 value;
2346     + int i;
2347     +
2348     + rdmsrl(MSR_FSB_FREQ, value);
2349     + i = value & 0x3;
2350     +
2351     + BUG_ON(i > BYT_BCLK_FREQS);
2352     +
2353     + return byt_freq_table[i] * 100;
2354     +}
2355     +
2356     static void byt_get_vid(struct cpudata *cpudata)
2357     {
2358     u64 value;
2359     @@ -449,6 +507,11 @@ static int core_get_turbo_pstate(void)
2360     return ret;
2361     }
2362    
2363     +static inline int core_get_scaling(void)
2364     +{
2365     + return 100000;
2366     +}
2367     +
2368     static void core_set_pstate(struct cpudata *cpudata, int pstate)
2369     {
2370     u64 val;
2371     @@ -473,6 +536,7 @@ static struct cpu_defaults core_params = {
2372     .get_max = core_get_max_pstate,
2373     .get_min = core_get_min_pstate,
2374     .get_turbo = core_get_turbo_pstate,
2375     + .get_scaling = core_get_scaling,
2376     .set = core_set_pstate,
2377     },
2378     };
2379     @@ -491,6 +555,7 @@ static struct cpu_defaults byt_params = {
2380     .get_min = byt_get_min_pstate,
2381     .get_turbo = byt_get_turbo_pstate,
2382     .set = byt_set_pstate,
2383     + .get_scaling = byt_get_scaling,
2384     .get_vid = byt_get_vid,
2385     },
2386     };
2387     @@ -501,7 +566,7 @@ static void intel_pstate_get_min_max(struct cpudata *cpu, int *min, int *max)
2388     int max_perf_adj;
2389     int min_perf;
2390    
2391     - if (limits.no_turbo)
2392     + if (limits.no_turbo || limits.turbo_disabled)
2393     max_perf = cpu->pstate.max_pstate;
2394    
2395     max_perf_adj = fp_toint(mul_fp(int_tofp(max_perf), limits.max_perf));
2396     @@ -516,6 +581,8 @@ static void intel_pstate_set_pstate(struct cpudata *cpu, int pstate)
2397     {
2398     int max_perf, min_perf;
2399    
2400     + update_turbo_state();
2401     +
2402     intel_pstate_get_min_max(cpu, &min_perf, &max_perf);
2403    
2404     pstate = clamp_t(int, pstate, min_perf, max_perf);
2405     @@ -523,7 +590,7 @@ static void intel_pstate_set_pstate(struct cpudata *cpu, int pstate)
2406     if (pstate == cpu->pstate.current_pstate)
2407     return;
2408    
2409     - trace_cpu_frequency(pstate * 100000, cpu->cpu);
2410     + trace_cpu_frequency(pstate * cpu->pstate.scaling, cpu->cpu);
2411    
2412     cpu->pstate.current_pstate = pstate;
2413    
2414     @@ -535,6 +602,7 @@ static void intel_pstate_get_cpu_pstates(struct cpudata *cpu)
2415     cpu->pstate.min_pstate = pstate_funcs.get_min();
2416     cpu->pstate.max_pstate = pstate_funcs.get_max();
2417     cpu->pstate.turbo_pstate = pstate_funcs.get_turbo();
2418     + cpu->pstate.scaling = pstate_funcs.get_scaling();
2419    
2420     if (pstate_funcs.get_vid)
2421     pstate_funcs.get_vid(cpu);
2422     @@ -550,7 +618,9 @@ static inline void intel_pstate_calc_busy(struct cpudata *cpu)
2423     core_pct = div64_u64(core_pct, int_tofp(sample->mperf));
2424    
2425     sample->freq = fp_toint(
2426     - mul_fp(int_tofp(cpu->pstate.max_pstate * 1000), core_pct));
2427     + mul_fp(int_tofp(
2428     + cpu->pstate.max_pstate * cpu->pstate.scaling / 100),
2429     + core_pct));
2430    
2431     sample->core_pct_busy = (int32_t)core_pct;
2432     }
2433     @@ -671,7 +741,9 @@ static int intel_pstate_init_cpu(unsigned int cpunum)
2434     {
2435     struct cpudata *cpu;
2436    
2437     - all_cpu_data[cpunum] = kzalloc(sizeof(struct cpudata), GFP_KERNEL);
2438     + if (!all_cpu_data[cpunum])
2439     + all_cpu_data[cpunum] = kzalloc(sizeof(struct cpudata),
2440     + GFP_KERNEL);
2441     if (!all_cpu_data[cpunum])
2442     return -ENOMEM;
2443    
2444     @@ -714,9 +786,10 @@ static int intel_pstate_set_policy(struct cpufreq_policy *policy)
2445     if (policy->policy == CPUFREQ_POLICY_PERFORMANCE) {
2446     limits.min_perf_pct = 100;
2447     limits.min_perf = int_tofp(1);
2448     + limits.max_policy_pct = 100;
2449     limits.max_perf_pct = 100;
2450     limits.max_perf = int_tofp(1);
2451     - limits.no_turbo = limits.turbo_disabled;
2452     + limits.no_turbo = 0;
2453     return 0;
2454     }
2455     limits.min_perf_pct = (policy->min * 100) / policy->cpuinfo.max_freq;
2456     @@ -751,15 +824,12 @@ static void intel_pstate_stop_cpu(struct cpufreq_policy *policy)
2457    
2458     del_timer_sync(&all_cpu_data[cpu_num]->timer);
2459     intel_pstate_set_pstate(cpu, cpu->pstate.min_pstate);
2460     - kfree(all_cpu_data[cpu_num]);
2461     - all_cpu_data[cpu_num] = NULL;
2462     }
2463    
2464     static int intel_pstate_cpu_init(struct cpufreq_policy *policy)
2465     {
2466     struct cpudata *cpu;
2467     int rc;
2468     - u64 misc_en;
2469    
2470     rc = intel_pstate_init_cpu(policy->cpu);
2471     if (rc)
2472     @@ -767,23 +837,18 @@ static int intel_pstate_cpu_init(struct cpufreq_policy *policy)
2473    
2474     cpu = all_cpu_data[policy->cpu];
2475    
2476     - rdmsrl(MSR_IA32_MISC_ENABLE, misc_en);
2477     - if (misc_en & MSR_IA32_MISC_ENABLE_TURBO_DISABLE ||
2478     - cpu->pstate.max_pstate == cpu->pstate.turbo_pstate) {
2479     - limits.turbo_disabled = 1;
2480     - limits.no_turbo = 1;
2481     - }
2482     if (limits.min_perf_pct == 100 && limits.max_perf_pct == 100)
2483     policy->policy = CPUFREQ_POLICY_PERFORMANCE;
2484     else
2485     policy->policy = CPUFREQ_POLICY_POWERSAVE;
2486    
2487     - policy->min = cpu->pstate.min_pstate * 100000;
2488     - policy->max = cpu->pstate.turbo_pstate * 100000;
2489     + policy->min = cpu->pstate.min_pstate * cpu->pstate.scaling;
2490     + policy->max = cpu->pstate.turbo_pstate * cpu->pstate.scaling;
2491    
2492     /* cpuinfo and default policy values */
2493     - policy->cpuinfo.min_freq = cpu->pstate.min_pstate * 100000;
2494     - policy->cpuinfo.max_freq = cpu->pstate.turbo_pstate * 100000;
2495     + policy->cpuinfo.min_freq = cpu->pstate.min_pstate * cpu->pstate.scaling;
2496     + policy->cpuinfo.max_freq =
2497     + cpu->pstate.turbo_pstate * cpu->pstate.scaling;
2498     policy->cpuinfo.transition_latency = CPUFREQ_ETERNAL;
2499     cpumask_set_cpu(policy->cpu, policy->cpus);
2500    
2501     @@ -841,6 +906,7 @@ static void copy_cpu_funcs(struct pstate_funcs *funcs)
2502     pstate_funcs.get_max = funcs->get_max;
2503     pstate_funcs.get_min = funcs->get_min;
2504     pstate_funcs.get_turbo = funcs->get_turbo;
2505     + pstate_funcs.get_scaling = funcs->get_scaling;
2506     pstate_funcs.set = funcs->set;
2507     pstate_funcs.get_vid = funcs->get_vid;
2508     }
2509     diff --git a/drivers/edac/cpc925_edac.c b/drivers/edac/cpc925_edac.c
2510     index df6575f1430d..682288ced4ac 100644
2511     --- a/drivers/edac/cpc925_edac.c
2512     +++ b/drivers/edac/cpc925_edac.c
2513     @@ -562,7 +562,7 @@ static void cpc925_mc_check(struct mem_ctl_info *mci)
2514    
2515     if (apiexcp & UECC_EXCP_DETECTED) {
2516     cpc925_mc_printk(mci, KERN_INFO, "DRAM UECC Fault\n");
2517     - edac_mc_handle_error(HW_EVENT_ERR_CORRECTED, mci, 1,
2518     + edac_mc_handle_error(HW_EVENT_ERR_UNCORRECTED, mci, 1,
2519     pfn, offset, 0,
2520     csrow, -1, -1,
2521     mci->ctl_name, "");
2522     diff --git a/drivers/edac/e7xxx_edac.c b/drivers/edac/e7xxx_edac.c
2523     index 3cda79bc8b00..ece3aef16bb1 100644
2524     --- a/drivers/edac/e7xxx_edac.c
2525     +++ b/drivers/edac/e7xxx_edac.c
2526     @@ -226,7 +226,7 @@ static void process_ce(struct mem_ctl_info *mci, struct e7xxx_error_info *info)
2527     static void process_ce_no_info(struct mem_ctl_info *mci)
2528     {
2529     edac_dbg(3, "\n");
2530     - edac_mc_handle_error(HW_EVENT_ERR_UNCORRECTED, mci, 1, 0, 0, 0, -1, -1, -1,
2531     + edac_mc_handle_error(HW_EVENT_ERR_CORRECTED, mci, 1, 0, 0, 0, -1, -1, -1,
2532     "e7xxx CE log register overflow", "");
2533     }
2534    
2535     diff --git a/drivers/edac/i3200_edac.c b/drivers/edac/i3200_edac.c
2536     index 022a70273ada..aa98b136f5d0 100644
2537     --- a/drivers/edac/i3200_edac.c
2538     +++ b/drivers/edac/i3200_edac.c
2539     @@ -242,11 +242,11 @@ static void i3200_process_error_info(struct mem_ctl_info *mci,
2540     -1, -1,
2541     "i3000 UE", "");
2542     } else if (log & I3200_ECCERRLOG_CE) {
2543     - edac_mc_handle_error(HW_EVENT_ERR_UNCORRECTED, mci, 1,
2544     + edac_mc_handle_error(HW_EVENT_ERR_CORRECTED, mci, 1,
2545     0, 0, eccerrlog_syndrome(log),
2546     eccerrlog_row(channel, log),
2547     -1, -1,
2548     - "i3000 UE", "");
2549     + "i3000 CE", "");
2550     }
2551     }
2552     }
2553     diff --git a/drivers/edac/i82860_edac.c b/drivers/edac/i82860_edac.c
2554     index 3382f6344e42..4382343a7c60 100644
2555     --- a/drivers/edac/i82860_edac.c
2556     +++ b/drivers/edac/i82860_edac.c
2557     @@ -124,7 +124,7 @@ static int i82860_process_error_info(struct mem_ctl_info *mci,
2558     dimm->location[0], dimm->location[1], -1,
2559     "i82860 UE", "");
2560     else
2561     - edac_mc_handle_error(HW_EVENT_ERR_UNCORRECTED, mci, 1,
2562     + edac_mc_handle_error(HW_EVENT_ERR_CORRECTED, mci, 1,
2563     info->eap, 0, info->derrsyn,
2564     dimm->location[0], dimm->location[1], -1,
2565     "i82860 CE", "");
2566     diff --git a/drivers/gpu/drm/ast/ast_mode.c b/drivers/gpu/drm/ast/ast_mode.c
2567     index 5389350244f2..70bedf9bd1ea 100644
2568     --- a/drivers/gpu/drm/ast/ast_mode.c
2569     +++ b/drivers/gpu/drm/ast/ast_mode.c
2570     @@ -1080,8 +1080,8 @@ static u32 copy_cursor_image(u8 *src, u8 *dst, int width, int height)
2571     srcdata32[1].ul = *((u32 *)(srcxor + 4)) & 0xf0f0f0f0;
2572     data32.b[0] = srcdata32[0].b[1] | (srcdata32[0].b[0] >> 4);
2573     data32.b[1] = srcdata32[0].b[3] | (srcdata32[0].b[2] >> 4);
2574     - data32.b[2] = srcdata32[0].b[1] | (srcdata32[1].b[0] >> 4);
2575     - data32.b[3] = srcdata32[0].b[3] | (srcdata32[1].b[2] >> 4);
2576     + data32.b[2] = srcdata32[1].b[1] | (srcdata32[1].b[0] >> 4);
2577     + data32.b[3] = srcdata32[1].b[3] | (srcdata32[1].b[2] >> 4);
2578    
2579     writel(data32.ul, dstxor);
2580     csum += data32.ul;
2581     diff --git a/drivers/gpu/drm/cirrus/cirrus_drv.c b/drivers/gpu/drm/cirrus/cirrus_drv.c
2582     index 919c73b94447..4977631927d8 100644
2583     --- a/drivers/gpu/drm/cirrus/cirrus_drv.c
2584     +++ b/drivers/gpu/drm/cirrus/cirrus_drv.c
2585     @@ -32,6 +32,8 @@ static struct drm_driver driver;
2586     static const struct pci_device_id pciidlist[] = {
2587     { PCI_VENDOR_ID_CIRRUS, PCI_DEVICE_ID_CIRRUS_5446, 0x1af4, 0x1100, 0,
2588     0, 0 },
2589     + { PCI_VENDOR_ID_CIRRUS, PCI_DEVICE_ID_CIRRUS_5446, PCI_VENDOR_ID_XEN,
2590     + 0x0001, 0, 0, 0 },
2591     {0,}
2592     };
2593    
2594     diff --git a/drivers/gpu/drm/i915/i915_gem_userptr.c b/drivers/gpu/drm/i915/i915_gem_userptr.c
2595     index d38413997379..d182058383a9 100644
2596     --- a/drivers/gpu/drm/i915/i915_gem_userptr.c
2597     +++ b/drivers/gpu/drm/i915/i915_gem_userptr.c
2598     @@ -293,15 +293,23 @@ i915_gem_userptr_release__mmu_notifier(struct drm_i915_gem_object *obj)
2599     static struct i915_mmu_notifier *
2600     i915_mmu_notifier_find(struct i915_mm_struct *mm)
2601     {
2602     - if (mm->mn == NULL) {
2603     - down_write(&mm->mm->mmap_sem);
2604     - mutex_lock(&to_i915(mm->dev)->mm_lock);
2605     - if (mm->mn == NULL)
2606     - mm->mn = i915_mmu_notifier_create(mm->mm);
2607     - mutex_unlock(&to_i915(mm->dev)->mm_lock);
2608     - up_write(&mm->mm->mmap_sem);
2609     + struct i915_mmu_notifier *mn = mm->mn;
2610     +
2611     + mn = mm->mn;
2612     + if (mn)
2613     + return mn;
2614     +
2615     + down_write(&mm->mm->mmap_sem);
2616     + mutex_lock(&to_i915(mm->dev)->mm_lock);
2617     + if ((mn = mm->mn) == NULL) {
2618     + mn = i915_mmu_notifier_create(mm->mm);
2619     + if (!IS_ERR(mn))
2620     + mm->mn = mn;
2621     }
2622     - return mm->mn;
2623     + mutex_unlock(&to_i915(mm->dev)->mm_lock);
2624     + up_write(&mm->mm->mmap_sem);
2625     +
2626     + return mn;
2627     }
2628    
2629     static int
2630     @@ -681,16 +689,15 @@ i915_gem_userptr_get_pages(struct drm_i915_gem_object *obj)
2631     static void
2632     i915_gem_userptr_put_pages(struct drm_i915_gem_object *obj)
2633     {
2634     - struct scatterlist *sg;
2635     - int i;
2636     + struct sg_page_iter sg_iter;
2637    
2638     BUG_ON(obj->userptr.work != NULL);
2639    
2640     if (obj->madv != I915_MADV_WILLNEED)
2641     obj->dirty = 0;
2642    
2643     - for_each_sg(obj->pages->sgl, sg, obj->pages->nents, i) {
2644     - struct page *page = sg_page(sg);
2645     + for_each_sg_page(obj->pages->sgl, &sg_iter, obj->pages->nents, 0) {
2646     + struct page *page = sg_page_iter_page(&sg_iter);
2647    
2648     if (obj->dirty)
2649     set_page_dirty(page);
2650     diff --git a/drivers/gpu/drm/i915/i915_irq.c b/drivers/gpu/drm/i915/i915_irq.c
2651     index 0050ee9470f1..5d387a86b404 100644
2652     --- a/drivers/gpu/drm/i915/i915_irq.c
2653     +++ b/drivers/gpu/drm/i915/i915_irq.c
2654     @@ -3482,12 +3482,13 @@ static void gen8_irq_reset(struct drm_device *dev)
2655     void gen8_irq_power_well_post_enable(struct drm_i915_private *dev_priv)
2656     {
2657     unsigned long irqflags;
2658     + uint32_t extra_ier = GEN8_PIPE_VBLANK | GEN8_PIPE_FIFO_UNDERRUN;
2659    
2660     spin_lock_irqsave(&dev_priv->irq_lock, irqflags);
2661     GEN8_IRQ_INIT_NDX(DE_PIPE, PIPE_B, dev_priv->de_irq_mask[PIPE_B],
2662     - ~dev_priv->de_irq_mask[PIPE_B]);
2663     + ~dev_priv->de_irq_mask[PIPE_B] | extra_ier);
2664     GEN8_IRQ_INIT_NDX(DE_PIPE, PIPE_C, dev_priv->de_irq_mask[PIPE_C],
2665     - ~dev_priv->de_irq_mask[PIPE_C]);
2666     + ~dev_priv->de_irq_mask[PIPE_C] | extra_ier);
2667     spin_unlock_irqrestore(&dev_priv->irq_lock, irqflags);
2668     }
2669    
2670     diff --git a/drivers/gpu/drm/i915/intel_display.c b/drivers/gpu/drm/i915/intel_display.c
2671     index d8324c69fa86..b71a02663bae 100644
2672     --- a/drivers/gpu/drm/i915/intel_display.c
2673     +++ b/drivers/gpu/drm/i915/intel_display.c
2674     @@ -4470,7 +4470,7 @@ static void vlv_update_cdclk(struct drm_device *dev)
2675     * BSpec erroneously claims we should aim for 4MHz, but
2676     * in fact 1MHz is the correct frequency.
2677     */
2678     - I915_WRITE(GMBUSFREQ_VLV, dev_priv->vlv_cdclk_freq);
2679     + I915_WRITE(GMBUSFREQ_VLV, DIV_ROUND_UP(dev_priv->vlv_cdclk_freq, 1000));
2680     }
2681    
2682     /* Adjust CDclk dividers to allow high res or save power if possible */
2683     @@ -12507,6 +12507,9 @@ static struct intel_quirk intel_quirks[] = {
2684     /* Acer C720 Chromebook (Core i3 4005U) */
2685     { 0x0a16, 0x1025, 0x0a11, quirk_backlight_present },
2686    
2687     + /* Apple Macbook 2,1 (Core 2 T7400) */
2688     + { 0x27a2, 0x8086, 0x7270, quirk_backlight_present },
2689     +
2690     /* Toshiba CB35 Chromebook (Celeron 2955U) */
2691     { 0x0a06, 0x1179, 0x0a88, quirk_backlight_present },
2692    
2693     diff --git a/drivers/gpu/drm/i915/intel_dp.c b/drivers/gpu/drm/i915/intel_dp.c
2694     index fdff1d420c14..9222e20e230c 100644
2695     --- a/drivers/gpu/drm/i915/intel_dp.c
2696     +++ b/drivers/gpu/drm/i915/intel_dp.c
2697     @@ -2364,6 +2364,13 @@ intel_dp_dpcd_read_wake(struct drm_dp_aux *aux, unsigned int offset,
2698     ssize_t ret;
2699     int i;
2700    
2701     + /*
2702     + * Sometime we just get the same incorrect byte repeated
2703     + * over the entire buffer. Doing just one throw away read
2704     + * initially seems to "solve" it.
2705     + */
2706     + drm_dp_dpcd_read(aux, DP_DPCD_REV, buffer, 1);
2707     +
2708     for (i = 0; i < 3; i++) {
2709     ret = drm_dp_dpcd_read(aux, offset, buffer, size);
2710     if (ret == size)
2711     diff --git a/drivers/gpu/drm/i915/intel_panel.c b/drivers/gpu/drm/i915/intel_panel.c
2712     index 8e374449c6b5..cbe8a8de85de 100644
2713     --- a/drivers/gpu/drm/i915/intel_panel.c
2714     +++ b/drivers/gpu/drm/i915/intel_panel.c
2715     @@ -398,6 +398,9 @@ intel_panel_detect(struct drm_device *dev)
2716     }
2717     }
2718    
2719     +#define DIV_ROUND_CLOSEST_ULL(ll, d) \
2720     +({ unsigned long long _tmp = (ll)+(d)/2; do_div(_tmp, d); _tmp; })
2721     +
2722     /**
2723     * scale - scale values from one range to another
2724     *
2725     @@ -419,9 +422,8 @@ static uint32_t scale(uint32_t source_val,
2726     source_val = clamp(source_val, source_min, source_max);
2727    
2728     /* avoid overflows */
2729     - target_val = (uint64_t)(source_val - source_min) *
2730     - (target_max - target_min);
2731     - do_div(target_val, source_max - source_min);
2732     + target_val = DIV_ROUND_CLOSEST_ULL((uint64_t)(source_val - source_min) *
2733     + (target_max - target_min), source_max - source_min);
2734     target_val += target_min;
2735    
2736     return target_val;
2737     diff --git a/drivers/gpu/drm/nouveau/Makefile b/drivers/gpu/drm/nouveau/Makefile
2738     index f5d7f7ce4bc6..0197d6c3d94c 100644
2739     --- a/drivers/gpu/drm/nouveau/Makefile
2740     +++ b/drivers/gpu/drm/nouveau/Makefile
2741     @@ -129,7 +129,7 @@ nouveau-y += core/subdev/fb/gddr5.o
2742     nouveau-y += core/subdev/gpio/base.o
2743     nouveau-y += core/subdev/gpio/nv10.o
2744     nouveau-y += core/subdev/gpio/nv50.o
2745     -nouveau-y += core/subdev/gpio/nv92.o
2746     +nouveau-y += core/subdev/gpio/nv94.o
2747     nouveau-y += core/subdev/gpio/nvd0.o
2748     nouveau-y += core/subdev/gpio/nve0.o
2749     nouveau-y += core/subdev/i2c/base.o
2750     diff --git a/drivers/gpu/drm/nouveau/core/engine/device/nv50.c b/drivers/gpu/drm/nouveau/core/engine/device/nv50.c
2751     index 932f84fae459..cbab586ec6f1 100644
2752     --- a/drivers/gpu/drm/nouveau/core/engine/device/nv50.c
2753     +++ b/drivers/gpu/drm/nouveau/core/engine/device/nv50.c
2754     @@ -141,7 +141,7 @@ nv50_identify(struct nouveau_device *device)
2755     case 0x92:
2756     device->cname = "G92";
2757     device->oclass[NVDEV_SUBDEV_VBIOS ] = &nouveau_bios_oclass;
2758     - device->oclass[NVDEV_SUBDEV_GPIO ] = nv92_gpio_oclass;
2759     + device->oclass[NVDEV_SUBDEV_GPIO ] = nv50_gpio_oclass;
2760     device->oclass[NVDEV_SUBDEV_I2C ] = nv50_i2c_oclass;
2761     device->oclass[NVDEV_SUBDEV_CLOCK ] = nv84_clock_oclass;
2762     device->oclass[NVDEV_SUBDEV_THERM ] = &nv84_therm_oclass;
2763     @@ -169,7 +169,7 @@ nv50_identify(struct nouveau_device *device)
2764     case 0x94:
2765     device->cname = "G94";
2766     device->oclass[NVDEV_SUBDEV_VBIOS ] = &nouveau_bios_oclass;
2767     - device->oclass[NVDEV_SUBDEV_GPIO ] = nv92_gpio_oclass;
2768     + device->oclass[NVDEV_SUBDEV_GPIO ] = nv94_gpio_oclass;
2769     device->oclass[NVDEV_SUBDEV_I2C ] = nv94_i2c_oclass;
2770     device->oclass[NVDEV_SUBDEV_CLOCK ] = nv84_clock_oclass;
2771     device->oclass[NVDEV_SUBDEV_THERM ] = &nv84_therm_oclass;
2772     @@ -197,7 +197,7 @@ nv50_identify(struct nouveau_device *device)
2773     case 0x96:
2774     device->cname = "G96";
2775     device->oclass[NVDEV_SUBDEV_VBIOS ] = &nouveau_bios_oclass;
2776     - device->oclass[NVDEV_SUBDEV_GPIO ] = nv92_gpio_oclass;
2777     + device->oclass[NVDEV_SUBDEV_GPIO ] = nv94_gpio_oclass;
2778     device->oclass[NVDEV_SUBDEV_I2C ] = nv94_i2c_oclass;
2779     device->oclass[NVDEV_SUBDEV_CLOCK ] = nv84_clock_oclass;
2780     device->oclass[NVDEV_SUBDEV_THERM ] = &nv84_therm_oclass;
2781     @@ -225,7 +225,7 @@ nv50_identify(struct nouveau_device *device)
2782     case 0x98:
2783     device->cname = "G98";
2784     device->oclass[NVDEV_SUBDEV_VBIOS ] = &nouveau_bios_oclass;
2785     - device->oclass[NVDEV_SUBDEV_GPIO ] = nv92_gpio_oclass;
2786     + device->oclass[NVDEV_SUBDEV_GPIO ] = nv94_gpio_oclass;
2787     device->oclass[NVDEV_SUBDEV_I2C ] = nv94_i2c_oclass;
2788     device->oclass[NVDEV_SUBDEV_CLOCK ] = nv84_clock_oclass;
2789     device->oclass[NVDEV_SUBDEV_THERM ] = &nv84_therm_oclass;
2790     @@ -253,7 +253,7 @@ nv50_identify(struct nouveau_device *device)
2791     case 0xa0:
2792     device->cname = "G200";
2793     device->oclass[NVDEV_SUBDEV_VBIOS ] = &nouveau_bios_oclass;
2794     - device->oclass[NVDEV_SUBDEV_GPIO ] = nv92_gpio_oclass;
2795     + device->oclass[NVDEV_SUBDEV_GPIO ] = nv94_gpio_oclass;
2796     device->oclass[NVDEV_SUBDEV_I2C ] = nv50_i2c_oclass;
2797     device->oclass[NVDEV_SUBDEV_CLOCK ] = nv84_clock_oclass;
2798     device->oclass[NVDEV_SUBDEV_THERM ] = &nv84_therm_oclass;
2799     @@ -281,7 +281,7 @@ nv50_identify(struct nouveau_device *device)
2800     case 0xaa:
2801     device->cname = "MCP77/MCP78";
2802     device->oclass[NVDEV_SUBDEV_VBIOS ] = &nouveau_bios_oclass;
2803     - device->oclass[NVDEV_SUBDEV_GPIO ] = nv92_gpio_oclass;
2804     + device->oclass[NVDEV_SUBDEV_GPIO ] = nv94_gpio_oclass;
2805     device->oclass[NVDEV_SUBDEV_I2C ] = nv94_i2c_oclass;
2806     device->oclass[NVDEV_SUBDEV_CLOCK ] = nvaa_clock_oclass;
2807     device->oclass[NVDEV_SUBDEV_THERM ] = &nv84_therm_oclass;
2808     @@ -309,7 +309,7 @@ nv50_identify(struct nouveau_device *device)
2809     case 0xac:
2810     device->cname = "MCP79/MCP7A";
2811     device->oclass[NVDEV_SUBDEV_VBIOS ] = &nouveau_bios_oclass;
2812     - device->oclass[NVDEV_SUBDEV_GPIO ] = nv92_gpio_oclass;
2813     + device->oclass[NVDEV_SUBDEV_GPIO ] = nv94_gpio_oclass;
2814     device->oclass[NVDEV_SUBDEV_I2C ] = nv94_i2c_oclass;
2815     device->oclass[NVDEV_SUBDEV_CLOCK ] = nvaa_clock_oclass;
2816     device->oclass[NVDEV_SUBDEV_THERM ] = &nv84_therm_oclass;
2817     @@ -337,7 +337,7 @@ nv50_identify(struct nouveau_device *device)
2818     case 0xa3:
2819     device->cname = "GT215";
2820     device->oclass[NVDEV_SUBDEV_VBIOS ] = &nouveau_bios_oclass;
2821     - device->oclass[NVDEV_SUBDEV_GPIO ] = nv92_gpio_oclass;
2822     + device->oclass[NVDEV_SUBDEV_GPIO ] = nv94_gpio_oclass;
2823     device->oclass[NVDEV_SUBDEV_I2C ] = nv94_i2c_oclass;
2824     device->oclass[NVDEV_SUBDEV_CLOCK ] = &nva3_clock_oclass;
2825     device->oclass[NVDEV_SUBDEV_THERM ] = &nva3_therm_oclass;
2826     @@ -367,7 +367,7 @@ nv50_identify(struct nouveau_device *device)
2827     case 0xa5:
2828     device->cname = "GT216";
2829     device->oclass[NVDEV_SUBDEV_VBIOS ] = &nouveau_bios_oclass;
2830     - device->oclass[NVDEV_SUBDEV_GPIO ] = nv92_gpio_oclass;
2831     + device->oclass[NVDEV_SUBDEV_GPIO ] = nv94_gpio_oclass;
2832     device->oclass[NVDEV_SUBDEV_I2C ] = nv94_i2c_oclass;
2833     device->oclass[NVDEV_SUBDEV_CLOCK ] = &nva3_clock_oclass;
2834     device->oclass[NVDEV_SUBDEV_THERM ] = &nva3_therm_oclass;
2835     @@ -396,7 +396,7 @@ nv50_identify(struct nouveau_device *device)
2836     case 0xa8:
2837     device->cname = "GT218";
2838     device->oclass[NVDEV_SUBDEV_VBIOS ] = &nouveau_bios_oclass;
2839     - device->oclass[NVDEV_SUBDEV_GPIO ] = nv92_gpio_oclass;
2840     + device->oclass[NVDEV_SUBDEV_GPIO ] = nv94_gpio_oclass;
2841     device->oclass[NVDEV_SUBDEV_I2C ] = nv94_i2c_oclass;
2842     device->oclass[NVDEV_SUBDEV_CLOCK ] = &nva3_clock_oclass;
2843     device->oclass[NVDEV_SUBDEV_THERM ] = &nva3_therm_oclass;
2844     @@ -425,7 +425,7 @@ nv50_identify(struct nouveau_device *device)
2845     case 0xaf:
2846     device->cname = "MCP89";
2847     device->oclass[NVDEV_SUBDEV_VBIOS ] = &nouveau_bios_oclass;
2848     - device->oclass[NVDEV_SUBDEV_GPIO ] = nv92_gpio_oclass;
2849     + device->oclass[NVDEV_SUBDEV_GPIO ] = nv94_gpio_oclass;
2850     device->oclass[NVDEV_SUBDEV_I2C ] = nv94_i2c_oclass;
2851     device->oclass[NVDEV_SUBDEV_CLOCK ] = &nva3_clock_oclass;
2852     device->oclass[NVDEV_SUBDEV_THERM ] = &nva3_therm_oclass;
2853     diff --git a/drivers/gpu/drm/nouveau/core/engine/device/nvc0.c b/drivers/gpu/drm/nouveau/core/engine/device/nvc0.c
2854     index b4a2917ce555..da153a2cb6b5 100644
2855     --- a/drivers/gpu/drm/nouveau/core/engine/device/nvc0.c
2856     +++ b/drivers/gpu/drm/nouveau/core/engine/device/nvc0.c
2857     @@ -60,7 +60,7 @@ nvc0_identify(struct nouveau_device *device)
2858     case 0xc0:
2859     device->cname = "GF100";
2860     device->oclass[NVDEV_SUBDEV_VBIOS ] = &nouveau_bios_oclass;
2861     - device->oclass[NVDEV_SUBDEV_GPIO ] = nv92_gpio_oclass;
2862     + device->oclass[NVDEV_SUBDEV_GPIO ] = nv94_gpio_oclass;
2863     device->oclass[NVDEV_SUBDEV_I2C ] = nv94_i2c_oclass;
2864     device->oclass[NVDEV_SUBDEV_CLOCK ] = &nvc0_clock_oclass;
2865     device->oclass[NVDEV_SUBDEV_THERM ] = &nva3_therm_oclass;
2866     @@ -92,7 +92,7 @@ nvc0_identify(struct nouveau_device *device)
2867     case 0xc4:
2868     device->cname = "GF104";
2869     device->oclass[NVDEV_SUBDEV_VBIOS ] = &nouveau_bios_oclass;
2870     - device->oclass[NVDEV_SUBDEV_GPIO ] = nv92_gpio_oclass;
2871     + device->oclass[NVDEV_SUBDEV_GPIO ] = nv94_gpio_oclass;
2872     device->oclass[NVDEV_SUBDEV_I2C ] = nv94_i2c_oclass;
2873     device->oclass[NVDEV_SUBDEV_CLOCK ] = &nvc0_clock_oclass;
2874     device->oclass[NVDEV_SUBDEV_THERM ] = &nva3_therm_oclass;
2875     @@ -124,7 +124,7 @@ nvc0_identify(struct nouveau_device *device)
2876     case 0xc3:
2877     device->cname = "GF106";
2878     device->oclass[NVDEV_SUBDEV_VBIOS ] = &nouveau_bios_oclass;
2879     - device->oclass[NVDEV_SUBDEV_GPIO ] = nv92_gpio_oclass;
2880     + device->oclass[NVDEV_SUBDEV_GPIO ] = nv94_gpio_oclass;
2881     device->oclass[NVDEV_SUBDEV_I2C ] = nv94_i2c_oclass;
2882     device->oclass[NVDEV_SUBDEV_CLOCK ] = &nvc0_clock_oclass;
2883     device->oclass[NVDEV_SUBDEV_THERM ] = &nva3_therm_oclass;
2884     @@ -155,7 +155,7 @@ nvc0_identify(struct nouveau_device *device)
2885     case 0xce:
2886     device->cname = "GF114";
2887     device->oclass[NVDEV_SUBDEV_VBIOS ] = &nouveau_bios_oclass;
2888     - device->oclass[NVDEV_SUBDEV_GPIO ] = nv92_gpio_oclass;
2889     + device->oclass[NVDEV_SUBDEV_GPIO ] = nv94_gpio_oclass;
2890     device->oclass[NVDEV_SUBDEV_I2C ] = nv94_i2c_oclass;
2891     device->oclass[NVDEV_SUBDEV_CLOCK ] = &nvc0_clock_oclass;
2892     device->oclass[NVDEV_SUBDEV_THERM ] = &nva3_therm_oclass;
2893     @@ -187,7 +187,7 @@ nvc0_identify(struct nouveau_device *device)
2894     case 0xcf:
2895     device->cname = "GF116";
2896     device->oclass[NVDEV_SUBDEV_VBIOS ] = &nouveau_bios_oclass;
2897     - device->oclass[NVDEV_SUBDEV_GPIO ] = nv92_gpio_oclass;
2898     + device->oclass[NVDEV_SUBDEV_GPIO ] = nv94_gpio_oclass;
2899     device->oclass[NVDEV_SUBDEV_I2C ] = nv94_i2c_oclass;
2900     device->oclass[NVDEV_SUBDEV_CLOCK ] = &nvc0_clock_oclass;
2901     device->oclass[NVDEV_SUBDEV_THERM ] = &nva3_therm_oclass;
2902     @@ -219,7 +219,7 @@ nvc0_identify(struct nouveau_device *device)
2903     case 0xc1:
2904     device->cname = "GF108";
2905     device->oclass[NVDEV_SUBDEV_VBIOS ] = &nouveau_bios_oclass;
2906     - device->oclass[NVDEV_SUBDEV_GPIO ] = nv92_gpio_oclass;
2907     + device->oclass[NVDEV_SUBDEV_GPIO ] = nv94_gpio_oclass;
2908     device->oclass[NVDEV_SUBDEV_I2C ] = nv94_i2c_oclass;
2909     device->oclass[NVDEV_SUBDEV_CLOCK ] = &nvc0_clock_oclass;
2910     device->oclass[NVDEV_SUBDEV_THERM ] = &nva3_therm_oclass;
2911     @@ -250,7 +250,7 @@ nvc0_identify(struct nouveau_device *device)
2912     case 0xc8:
2913     device->cname = "GF110";
2914     device->oclass[NVDEV_SUBDEV_VBIOS ] = &nouveau_bios_oclass;
2915     - device->oclass[NVDEV_SUBDEV_GPIO ] = nv92_gpio_oclass;
2916     + device->oclass[NVDEV_SUBDEV_GPIO ] = nv94_gpio_oclass;
2917     device->oclass[NVDEV_SUBDEV_I2C ] = nv94_i2c_oclass;
2918     device->oclass[NVDEV_SUBDEV_CLOCK ] = &nvc0_clock_oclass;
2919     device->oclass[NVDEV_SUBDEV_THERM ] = &nva3_therm_oclass;
2920     diff --git a/drivers/gpu/drm/nouveau/core/include/subdev/gpio.h b/drivers/gpu/drm/nouveau/core/include/subdev/gpio.h
2921     index b73733d21cc7..f855140dbcb7 100644
2922     --- a/drivers/gpu/drm/nouveau/core/include/subdev/gpio.h
2923     +++ b/drivers/gpu/drm/nouveau/core/include/subdev/gpio.h
2924     @@ -40,7 +40,7 @@ nouveau_gpio(void *obj)
2925    
2926     extern struct nouveau_oclass *nv10_gpio_oclass;
2927     extern struct nouveau_oclass *nv50_gpio_oclass;
2928     -extern struct nouveau_oclass *nv92_gpio_oclass;
2929     +extern struct nouveau_oclass *nv94_gpio_oclass;
2930     extern struct nouveau_oclass *nvd0_gpio_oclass;
2931     extern struct nouveau_oclass *nve0_gpio_oclass;
2932    
2933     diff --git a/drivers/gpu/drm/nouveau/core/subdev/bios/dcb.c b/drivers/gpu/drm/nouveau/core/subdev/bios/dcb.c
2934     index 88606bfaf847..bd8d348385b3 100644
2935     --- a/drivers/gpu/drm/nouveau/core/subdev/bios/dcb.c
2936     +++ b/drivers/gpu/drm/nouveau/core/subdev/bios/dcb.c
2937     @@ -124,6 +124,7 @@ dcb_outp_parse(struct nouveau_bios *bios, u8 idx, u8 *ver, u8 *len,
2938     struct dcb_output *outp)
2939     {
2940     u16 dcb = dcb_outp(bios, idx, ver, len);
2941     + memset(outp, 0x00, sizeof(*outp));
2942     if (dcb) {
2943     if (*ver >= 0x20) {
2944     u32 conn = nv_ro32(bios, dcb + 0x00);
2945     diff --git a/drivers/gpu/drm/nouveau/core/subdev/gpio/nv92.c b/drivers/gpu/drm/nouveau/core/subdev/gpio/nv92.c
2946     deleted file mode 100644
2947     index 252083d376f5..000000000000
2948     --- a/drivers/gpu/drm/nouveau/core/subdev/gpio/nv92.c
2949     +++ /dev/null
2950     @@ -1,74 +0,0 @@
2951     -/*
2952     - * Copyright 2012 Red Hat Inc.
2953     - *
2954     - * Permission is hereby granted, free of charge, to any person obtaining a
2955     - * copy of this software and associated documentation files (the "Software"),
2956     - * to deal in the Software without restriction, including without limitation
2957     - * the rights to use, copy, modify, merge, publish, distribute, sublicense,
2958     - * and/or sell copies of the Software, and to permit persons to whom the
2959     - * Software is furnished to do so, subject to the following conditions:
2960     - *
2961     - * The above copyright notice and this permission notice shall be included in
2962     - * all copies or substantial portions of the Software.
2963     - *
2964     - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
2965     - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
2966     - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
2967     - * THE COPYRIGHT HOLDER(S) OR AUTHOR(S) BE LIABLE FOR ANY CLAIM, DAMAGES OR
2968     - * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
2969     - * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
2970     - * OTHER DEALINGS IN THE SOFTWARE.
2971     - *
2972     - * Authors: Ben Skeggs
2973     - */
2974     -
2975     -#include "priv.h"
2976     -
2977     -void
2978     -nv92_gpio_intr_stat(struct nouveau_gpio *gpio, u32 *hi, u32 *lo)
2979     -{
2980     - u32 intr0 = nv_rd32(gpio, 0x00e054);
2981     - u32 intr1 = nv_rd32(gpio, 0x00e074);
2982     - u32 stat0 = nv_rd32(gpio, 0x00e050) & intr0;
2983     - u32 stat1 = nv_rd32(gpio, 0x00e070) & intr1;
2984     - *lo = (stat1 & 0xffff0000) | (stat0 >> 16);
2985     - *hi = (stat1 << 16) | (stat0 & 0x0000ffff);
2986     - nv_wr32(gpio, 0x00e054, intr0);
2987     - nv_wr32(gpio, 0x00e074, intr1);
2988     -}
2989     -
2990     -void
2991     -nv92_gpio_intr_mask(struct nouveau_gpio *gpio, u32 type, u32 mask, u32 data)
2992     -{
2993     - u32 inte0 = nv_rd32(gpio, 0x00e050);
2994     - u32 inte1 = nv_rd32(gpio, 0x00e070);
2995     - if (type & NVKM_GPIO_LO)
2996     - inte0 = (inte0 & ~(mask << 16)) | (data << 16);
2997     - if (type & NVKM_GPIO_HI)
2998     - inte0 = (inte0 & ~(mask & 0xffff)) | (data & 0xffff);
2999     - mask >>= 16;
3000     - data >>= 16;
3001     - if (type & NVKM_GPIO_LO)
3002     - inte1 = (inte1 & ~(mask << 16)) | (data << 16);
3003     - if (type & NVKM_GPIO_HI)
3004     - inte1 = (inte1 & ~mask) | data;
3005     - nv_wr32(gpio, 0x00e050, inte0);
3006     - nv_wr32(gpio, 0x00e070, inte1);
3007     -}
3008     -
3009     -struct nouveau_oclass *
3010     -nv92_gpio_oclass = &(struct nouveau_gpio_impl) {
3011     - .base.handle = NV_SUBDEV(GPIO, 0x92),
3012     - .base.ofuncs = &(struct nouveau_ofuncs) {
3013     - .ctor = _nouveau_gpio_ctor,
3014     - .dtor = _nouveau_gpio_dtor,
3015     - .init = _nouveau_gpio_init,
3016     - .fini = _nouveau_gpio_fini,
3017     - },
3018     - .lines = 32,
3019     - .intr_stat = nv92_gpio_intr_stat,
3020     - .intr_mask = nv92_gpio_intr_mask,
3021     - .drive = nv50_gpio_drive,
3022     - .sense = nv50_gpio_sense,
3023     - .reset = nv50_gpio_reset,
3024     -}.base;
3025     diff --git a/drivers/gpu/drm/nouveau/core/subdev/gpio/nv94.c b/drivers/gpu/drm/nouveau/core/subdev/gpio/nv94.c
3026     new file mode 100644
3027     index 000000000000..cae404ccadac
3028     --- /dev/null
3029     +++ b/drivers/gpu/drm/nouveau/core/subdev/gpio/nv94.c
3030     @@ -0,0 +1,74 @@
3031     +/*
3032     + * Copyright 2012 Red Hat Inc.
3033     + *
3034     + * Permission is hereby granted, free of charge, to any person obtaining a
3035     + * copy of this software and associated documentation files (the "Software"),
3036     + * to deal in the Software without restriction, including without limitation
3037     + * the rights to use, copy, modify, merge, publish, distribute, sublicense,
3038     + * and/or sell copies of the Software, and to permit persons to whom the
3039     + * Software is furnished to do so, subject to the following conditions:
3040     + *
3041     + * The above copyright notice and this permission notice shall be included in
3042     + * all copies or substantial portions of the Software.
3043     + *
3044     + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
3045     + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
3046     + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
3047     + * THE COPYRIGHT HOLDER(S) OR AUTHOR(S) BE LIABLE FOR ANY CLAIM, DAMAGES OR
3048     + * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
3049     + * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
3050     + * OTHER DEALINGS IN THE SOFTWARE.
3051     + *
3052     + * Authors: Ben Skeggs
3053     + */
3054     +
3055     +#include "priv.h"
3056     +
3057     +void
3058     +nv94_gpio_intr_stat(struct nouveau_gpio *gpio, u32 *hi, u32 *lo)
3059     +{
3060     + u32 intr0 = nv_rd32(gpio, 0x00e054);
3061     + u32 intr1 = nv_rd32(gpio, 0x00e074);
3062     + u32 stat0 = nv_rd32(gpio, 0x00e050) & intr0;
3063     + u32 stat1 = nv_rd32(gpio, 0x00e070) & intr1;
3064     + *lo = (stat1 & 0xffff0000) | (stat0 >> 16);
3065     + *hi = (stat1 << 16) | (stat0 & 0x0000ffff);
3066     + nv_wr32(gpio, 0x00e054, intr0);
3067     + nv_wr32(gpio, 0x00e074, intr1);
3068     +}
3069     +
3070     +void
3071     +nv94_gpio_intr_mask(struct nouveau_gpio *gpio, u32 type, u32 mask, u32 data)
3072     +{
3073     + u32 inte0 = nv_rd32(gpio, 0x00e050);
3074     + u32 inte1 = nv_rd32(gpio, 0x00e070);
3075     + if (type & NVKM_GPIO_LO)
3076     + inte0 = (inte0 & ~(mask << 16)) | (data << 16);
3077     + if (type & NVKM_GPIO_HI)
3078     + inte0 = (inte0 & ~(mask & 0xffff)) | (data & 0xffff);
3079     + mask >>= 16;
3080     + data >>= 16;
3081     + if (type & NVKM_GPIO_LO)
3082     + inte1 = (inte1 & ~(mask << 16)) | (data << 16);
3083     + if (type & NVKM_GPIO_HI)
3084     + inte1 = (inte1 & ~mask) | data;
3085     + nv_wr32(gpio, 0x00e050, inte0);
3086     + nv_wr32(gpio, 0x00e070, inte1);
3087     +}
3088     +
3089     +struct nouveau_oclass *
3090     +nv94_gpio_oclass = &(struct nouveau_gpio_impl) {
3091     + .base.handle = NV_SUBDEV(GPIO, 0x94),
3092     + .base.ofuncs = &(struct nouveau_ofuncs) {
3093     + .ctor = _nouveau_gpio_ctor,
3094     + .dtor = _nouveau_gpio_dtor,
3095     + .init = _nouveau_gpio_init,
3096     + .fini = _nouveau_gpio_fini,
3097     + },
3098     + .lines = 32,
3099     + .intr_stat = nv94_gpio_intr_stat,
3100     + .intr_mask = nv94_gpio_intr_mask,
3101     + .drive = nv50_gpio_drive,
3102     + .sense = nv50_gpio_sense,
3103     + .reset = nv50_gpio_reset,
3104     +}.base;
3105     diff --git a/drivers/gpu/drm/nouveau/core/subdev/gpio/nvd0.c b/drivers/gpu/drm/nouveau/core/subdev/gpio/nvd0.c
3106     index a4682b0956ad..480d6d2af770 100644
3107     --- a/drivers/gpu/drm/nouveau/core/subdev/gpio/nvd0.c
3108     +++ b/drivers/gpu/drm/nouveau/core/subdev/gpio/nvd0.c
3109     @@ -77,8 +77,8 @@ nvd0_gpio_oclass = &(struct nouveau_gpio_impl) {
3110     .fini = _nouveau_gpio_fini,
3111     },
3112     .lines = 32,
3113     - .intr_stat = nv92_gpio_intr_stat,
3114     - .intr_mask = nv92_gpio_intr_mask,
3115     + .intr_stat = nv94_gpio_intr_stat,
3116     + .intr_mask = nv94_gpio_intr_mask,
3117     .drive = nvd0_gpio_drive,
3118     .sense = nvd0_gpio_sense,
3119     .reset = nvd0_gpio_reset,
3120     diff --git a/drivers/gpu/drm/nouveau/core/subdev/gpio/priv.h b/drivers/gpu/drm/nouveau/core/subdev/gpio/priv.h
3121     index e1724dfc86ae..bff98b86e2b5 100644
3122     --- a/drivers/gpu/drm/nouveau/core/subdev/gpio/priv.h
3123     +++ b/drivers/gpu/drm/nouveau/core/subdev/gpio/priv.h
3124     @@ -56,8 +56,8 @@ void nv50_gpio_reset(struct nouveau_gpio *, u8);
3125     int nv50_gpio_drive(struct nouveau_gpio *, int, int, int);
3126     int nv50_gpio_sense(struct nouveau_gpio *, int);
3127    
3128     -void nv92_gpio_intr_stat(struct nouveau_gpio *, u32 *, u32 *);
3129     -void nv92_gpio_intr_mask(struct nouveau_gpio *, u32, u32, u32);
3130     +void nv94_gpio_intr_stat(struct nouveau_gpio *, u32 *, u32 *);
3131     +void nv94_gpio_intr_mask(struct nouveau_gpio *, u32, u32, u32);
3132    
3133     void nvd0_gpio_reset(struct nouveau_gpio *, u8);
3134     int nvd0_gpio_drive(struct nouveau_gpio *, int, int, int);
3135     diff --git a/drivers/gpu/drm/nouveau/nouveau_chan.c b/drivers/gpu/drm/nouveau/nouveau_chan.c
3136     index 3440fc999f2f..497ea013f7d0 100644
3137     --- a/drivers/gpu/drm/nouveau/nouveau_chan.c
3138     +++ b/drivers/gpu/drm/nouveau/nouveau_chan.c
3139     @@ -400,15 +400,20 @@ nouveau_channel_new(struct nouveau_drm *drm, struct nvif_device *device,
3140     struct nouveau_channel **pchan)
3141     {
3142     struct nouveau_cli *cli = (void *)nvif_client(&device->base);
3143     + bool super;
3144     int ret;
3145    
3146     + /* hack until fencenv50 is fixed, and agp access relaxed */
3147     + super = cli->base.super;
3148     + cli->base.super = true;
3149     +
3150     ret = nouveau_channel_ind(drm, device, handle, arg0, pchan);
3151     if (ret) {
3152     NV_PRINTK(debug, cli, "ib channel create, %d\n", ret);
3153     ret = nouveau_channel_dma(drm, device, handle, pchan);
3154     if (ret) {
3155     NV_PRINTK(debug, cli, "dma channel create, %d\n", ret);
3156     - return ret;
3157     + goto done;
3158     }
3159     }
3160    
3161     @@ -416,8 +421,9 @@ nouveau_channel_new(struct nouveau_drm *drm, struct nvif_device *device,
3162     if (ret) {
3163     NV_PRINTK(error, cli, "channel failed to initialise, %d\n", ret);
3164     nouveau_channel_del(pchan);
3165     - return ret;
3166     }
3167    
3168     - return 0;
3169     +done:
3170     + cli->base.super = super;
3171     + return ret;
3172     }
3173     diff --git a/drivers/gpu/drm/nouveau/nv50_display.c b/drivers/gpu/drm/nouveau/nv50_display.c
3174     index 03949eaa629f..bca5d8c41231 100644
3175     --- a/drivers/gpu/drm/nouveau/nv50_display.c
3176     +++ b/drivers/gpu/drm/nouveau/nv50_display.c
3177     @@ -1653,15 +1653,17 @@ nv50_audio_mode_set(struct drm_encoder *encoder, struct drm_display_mode *mode)
3178     struct nouveau_encoder *nv_encoder = nouveau_encoder(encoder);
3179     struct nouveau_connector *nv_connector;
3180     struct nv50_disp *disp = nv50_disp(encoder->dev);
3181     - struct {
3182     - struct nv50_disp_mthd_v1 base;
3183     - struct nv50_disp_sor_hda_eld_v0 eld;
3184     + struct __packed {
3185     + struct {
3186     + struct nv50_disp_mthd_v1 mthd;
3187     + struct nv50_disp_sor_hda_eld_v0 eld;
3188     + } base;
3189     u8 data[sizeof(nv_connector->base.eld)];
3190     } args = {
3191     - .base.version = 1,
3192     - .base.method = NV50_DISP_MTHD_V1_SOR_HDA_ELD,
3193     - .base.hasht = nv_encoder->dcb->hasht,
3194     - .base.hashm = nv_encoder->dcb->hashm,
3195     + .base.mthd.version = 1,
3196     + .base.mthd.method = NV50_DISP_MTHD_V1_SOR_HDA_ELD,
3197     + .base.mthd.hasht = nv_encoder->dcb->hasht,
3198     + .base.mthd.hashm = nv_encoder->dcb->hashm,
3199     };
3200    
3201     nv_connector = nouveau_encoder_connector_get(nv_encoder);
3202     @@ -1671,7 +1673,7 @@ nv50_audio_mode_set(struct drm_encoder *encoder, struct drm_display_mode *mode)
3203     drm_edid_to_eld(&nv_connector->base, nv_connector->edid);
3204     memcpy(args.data, nv_connector->base.eld, sizeof(args.data));
3205    
3206     - nvif_mthd(disp->disp, 0, &args, sizeof(args));
3207     + nvif_mthd(disp->disp, 0, &args, sizeof(args.base) + args.data[2] * 4);
3208     }
3209    
3210     static void
3211     diff --git a/drivers/gpu/drm/qxl/qxl_display.c b/drivers/gpu/drm/qxl/qxl_display.c
3212     index b8ced08b6291..bac1fd43e15a 100644
3213     --- a/drivers/gpu/drm/qxl/qxl_display.c
3214     +++ b/drivers/gpu/drm/qxl/qxl_display.c
3215     @@ -523,7 +523,6 @@ static int qxl_crtc_mode_set(struct drm_crtc *crtc,
3216     struct qxl_framebuffer *qfb;
3217     struct qxl_bo *bo, *old_bo = NULL;
3218     struct qxl_crtc *qcrtc = to_qxl_crtc(crtc);
3219     - uint32_t width, height, base_offset;
3220     bool recreate_primary = false;
3221     int ret;
3222     int surf_id;
3223     @@ -553,9 +552,10 @@ static int qxl_crtc_mode_set(struct drm_crtc *crtc,
3224     if (qcrtc->index == 0)
3225     recreate_primary = true;
3226    
3227     - width = mode->hdisplay;
3228     - height = mode->vdisplay;
3229     - base_offset = 0;
3230     + if (bo->surf.stride * bo->surf.height > qdev->vram_size) {
3231     + DRM_ERROR("Mode doesn't fit in vram size (vgamem)");
3232     + return -EINVAL;
3233     + }
3234    
3235     ret = qxl_bo_reserve(bo, false);
3236     if (ret != 0)
3237     @@ -569,10 +569,10 @@ static int qxl_crtc_mode_set(struct drm_crtc *crtc,
3238     if (recreate_primary) {
3239     qxl_io_destroy_primary(qdev);
3240     qxl_io_log(qdev,
3241     - "recreate primary: %dx%d (was %dx%d,%d,%d)\n",
3242     - width, height, bo->surf.width,
3243     - bo->surf.height, bo->surf.stride, bo->surf.format);
3244     - qxl_io_create_primary(qdev, base_offset, bo);
3245     + "recreate primary: %dx%d,%d,%d\n",
3246     + bo->surf.width, bo->surf.height,
3247     + bo->surf.stride, bo->surf.format);
3248     + qxl_io_create_primary(qdev, 0, bo);
3249     bo->is_primary = true;
3250     }
3251    
3252     diff --git a/drivers/gpu/drm/radeon/cik_sdma.c b/drivers/gpu/drm/radeon/cik_sdma.c
3253     index c4ffa54b1e3d..e8eea36b52d1 100644
3254     --- a/drivers/gpu/drm/radeon/cik_sdma.c
3255     +++ b/drivers/gpu/drm/radeon/cik_sdma.c
3256     @@ -610,16 +610,19 @@ int cik_sdma_ring_test(struct radeon_device *rdev,
3257     {
3258     unsigned i;
3259     int r;
3260     - void __iomem *ptr = (void *)rdev->vram_scratch.ptr;
3261     + unsigned index;
3262     u32 tmp;
3263     + u64 gpu_addr;
3264    
3265     - if (!ptr) {
3266     - DRM_ERROR("invalid vram scratch pointer\n");
3267     - return -EINVAL;
3268     - }
3269     + if (ring->idx == R600_RING_TYPE_DMA_INDEX)
3270     + index = R600_WB_DMA_RING_TEST_OFFSET;
3271     + else
3272     + index = CAYMAN_WB_DMA1_RING_TEST_OFFSET;
3273     +
3274     + gpu_addr = rdev->wb.gpu_addr + index;
3275    
3276     tmp = 0xCAFEDEAD;
3277     - writel(tmp, ptr);
3278     + rdev->wb.wb[index/4] = cpu_to_le32(tmp);
3279    
3280     r = radeon_ring_lock(rdev, ring, 5);
3281     if (r) {
3282     @@ -627,14 +630,14 @@ int cik_sdma_ring_test(struct radeon_device *rdev,
3283     return r;
3284     }
3285     radeon_ring_write(ring, SDMA_PACKET(SDMA_OPCODE_WRITE, SDMA_WRITE_SUB_OPCODE_LINEAR, 0));
3286     - radeon_ring_write(ring, rdev->vram_scratch.gpu_addr & 0xfffffffc);
3287     - radeon_ring_write(ring, upper_32_bits(rdev->vram_scratch.gpu_addr));
3288     + radeon_ring_write(ring, lower_32_bits(gpu_addr));
3289     + radeon_ring_write(ring, upper_32_bits(gpu_addr));
3290     radeon_ring_write(ring, 1); /* number of DWs to follow */
3291     radeon_ring_write(ring, 0xDEADBEEF);
3292     radeon_ring_unlock_commit(rdev, ring, false);
3293    
3294     for (i = 0; i < rdev->usec_timeout; i++) {
3295     - tmp = readl(ptr);
3296     + tmp = le32_to_cpu(rdev->wb.wb[index/4]);
3297     if (tmp == 0xDEADBEEF)
3298     break;
3299     DRM_UDELAY(1);
3300     diff --git a/drivers/gpu/drm/radeon/dce3_1_afmt.c b/drivers/gpu/drm/radeon/dce3_1_afmt.c
3301     index 51800e340a57..71f4d26669cd 100644
3302     --- a/drivers/gpu/drm/radeon/dce3_1_afmt.c
3303     +++ b/drivers/gpu/drm/radeon/dce3_1_afmt.c
3304     @@ -49,8 +49,8 @@ static void dce3_2_afmt_write_speaker_allocation(struct drm_encoder *encoder)
3305    
3306     sad_count = drm_edid_to_speaker_allocation(radeon_connector->edid, &sadb);
3307     if (sad_count < 0) {
3308     - DRM_ERROR("Couldn't read Speaker Allocation Data Block: %d\n", sad_count);
3309     - return;
3310     + DRM_DEBUG("Couldn't read Speaker Allocation Data Block: %d\n", sad_count);
3311     + sad_count = 0;
3312     }
3313    
3314     /* program the speaker allocation */
3315     diff --git a/drivers/gpu/drm/radeon/dce6_afmt.c b/drivers/gpu/drm/radeon/dce6_afmt.c
3316     index ab29f953a767..790d8cafdb87 100644
3317     --- a/drivers/gpu/drm/radeon/dce6_afmt.c
3318     +++ b/drivers/gpu/drm/radeon/dce6_afmt.c
3319     @@ -176,9 +176,9 @@ void dce6_afmt_write_speaker_allocation(struct drm_encoder *encoder)
3320     }
3321    
3322     sad_count = drm_edid_to_speaker_allocation(radeon_connector_edid(connector), &sadb);
3323     - if (sad_count <= 0) {
3324     - DRM_ERROR("Couldn't read Speaker Allocation Data Block: %d\n", sad_count);
3325     - return;
3326     + if (sad_count < 0) {
3327     + DRM_DEBUG("Couldn't read Speaker Allocation Data Block: %d\n", sad_count);
3328     + sad_count = 0;
3329     }
3330    
3331     /* program the speaker allocation */
3332     diff --git a/drivers/gpu/drm/radeon/evergreen_hdmi.c b/drivers/gpu/drm/radeon/evergreen_hdmi.c
3333     index 278c7a139d74..71ebdf89fd76 100644
3334     --- a/drivers/gpu/drm/radeon/evergreen_hdmi.c
3335     +++ b/drivers/gpu/drm/radeon/evergreen_hdmi.c
3336     @@ -118,9 +118,9 @@ static void dce4_afmt_write_speaker_allocation(struct drm_encoder *encoder)
3337     }
3338    
3339     sad_count = drm_edid_to_speaker_allocation(radeon_connector_edid(connector), &sadb);
3340     - if (sad_count <= 0) {
3341     - DRM_ERROR("Couldn't read Speaker Allocation Data Block: %d\n", sad_count);
3342     - return;
3343     + if (sad_count < 0) {
3344     + DRM_DEBUG("Couldn't read Speaker Allocation Data Block: %d\n", sad_count);
3345     + sad_count = 0;
3346     }
3347    
3348     /* program the speaker allocation */
3349     diff --git a/drivers/gpu/drm/radeon/kv_dpm.c b/drivers/gpu/drm/radeon/kv_dpm.c
3350     index 67cb472d188c..e79b7ebf5894 100644
3351     --- a/drivers/gpu/drm/radeon/kv_dpm.c
3352     +++ b/drivers/gpu/drm/radeon/kv_dpm.c
3353     @@ -2725,7 +2725,11 @@ int kv_dpm_init(struct radeon_device *rdev)
3354    
3355     pi->sram_end = SMC_RAM_END;
3356    
3357     - pi->enable_nb_dpm = true;
3358     + /* Enabling nb dpm on an asrock system prevents dpm from working */
3359     + if (rdev->pdev->subsystem_vendor == 0x1849)
3360     + pi->enable_nb_dpm = false;
3361     + else
3362     + pi->enable_nb_dpm = true;
3363    
3364     pi->caps_power_containment = true;
3365     pi->caps_cac = true;
3366     @@ -2740,10 +2744,19 @@ int kv_dpm_init(struct radeon_device *rdev)
3367     pi->caps_sclk_ds = true;
3368     pi->enable_auto_thermal_throttling = true;
3369     pi->disable_nb_ps3_in_battery = false;
3370     - if (radeon_bapm == 0)
3371     + if (radeon_bapm == -1) {
3372     + /* There are stability issues reported on with
3373     + * bapm enabled on an asrock system.
3374     + */
3375     + if (rdev->pdev->subsystem_vendor == 0x1849)
3376     + pi->bapm_enable = false;
3377     + else
3378     + pi->bapm_enable = true;
3379     + } else if (radeon_bapm == 0) {
3380     pi->bapm_enable = false;
3381     - else
3382     + } else {
3383     pi->bapm_enable = true;
3384     + }
3385     pi->voltage_drop_t = 0;
3386     pi->caps_sclk_throttle_low_notification = false;
3387     pi->caps_fps = false; /* true? */
3388     diff --git a/drivers/gpu/drm/radeon/r600_dma.c b/drivers/gpu/drm/radeon/r600_dma.c
3389     index a908daa006d2..44379bfca61f 100644
3390     --- a/drivers/gpu/drm/radeon/r600_dma.c
3391     +++ b/drivers/gpu/drm/radeon/r600_dma.c
3392     @@ -232,16 +232,19 @@ int r600_dma_ring_test(struct radeon_device *rdev,
3393     {
3394     unsigned i;
3395     int r;
3396     - void __iomem *ptr = (void *)rdev->vram_scratch.ptr;
3397     + unsigned index;
3398     u32 tmp;
3399     + u64 gpu_addr;
3400    
3401     - if (!ptr) {
3402     - DRM_ERROR("invalid vram scratch pointer\n");
3403     - return -EINVAL;
3404     - }
3405     + if (ring->idx == R600_RING_TYPE_DMA_INDEX)
3406     + index = R600_WB_DMA_RING_TEST_OFFSET;
3407     + else
3408     + index = CAYMAN_WB_DMA1_RING_TEST_OFFSET;
3409     +
3410     + gpu_addr = rdev->wb.gpu_addr + index;
3411    
3412     tmp = 0xCAFEDEAD;
3413     - writel(tmp, ptr);
3414     + rdev->wb.wb[index/4] = cpu_to_le32(tmp);
3415    
3416     r = radeon_ring_lock(rdev, ring, 4);
3417     if (r) {
3418     @@ -249,13 +252,13 @@ int r600_dma_ring_test(struct radeon_device *rdev,
3419     return r;
3420     }
3421     radeon_ring_write(ring, DMA_PACKET(DMA_PACKET_WRITE, 0, 0, 1));
3422     - radeon_ring_write(ring, rdev->vram_scratch.gpu_addr & 0xfffffffc);
3423     - radeon_ring_write(ring, upper_32_bits(rdev->vram_scratch.gpu_addr) & 0xff);
3424     + radeon_ring_write(ring, lower_32_bits(gpu_addr));
3425     + radeon_ring_write(ring, upper_32_bits(gpu_addr) & 0xff);
3426     radeon_ring_write(ring, 0xDEADBEEF);
3427     radeon_ring_unlock_commit(rdev, ring, false);
3428    
3429     for (i = 0; i < rdev->usec_timeout; i++) {
3430     - tmp = readl(ptr);
3431     + tmp = le32_to_cpu(rdev->wb.wb[index/4]);
3432     if (tmp == 0xDEADBEEF)
3433     break;
3434     DRM_UDELAY(1);
3435     diff --git a/drivers/gpu/drm/radeon/radeon.h b/drivers/gpu/drm/radeon/radeon.h
3436     index 3247bfd14410..e8410581dd09 100644
3437     --- a/drivers/gpu/drm/radeon/radeon.h
3438     +++ b/drivers/gpu/drm/radeon/radeon.h
3439     @@ -1120,6 +1120,8 @@ struct radeon_wb {
3440     #define R600_WB_EVENT_OFFSET 3072
3441     #define CIK_WB_CP1_WPTR_OFFSET 3328
3442     #define CIK_WB_CP2_WPTR_OFFSET 3584
3443     +#define R600_WB_DMA_RING_TEST_OFFSET 3588
3444     +#define CAYMAN_WB_DMA1_RING_TEST_OFFSET 3592
3445    
3446     /**
3447     * struct radeon_pm - power management datas
3448     diff --git a/drivers/gpu/drm/radeon/radeon_cs.c b/drivers/gpu/drm/radeon/radeon_cs.c
3449     index 83f382e8e40e..e244c2d72730 100644
3450     --- a/drivers/gpu/drm/radeon/radeon_cs.c
3451     +++ b/drivers/gpu/drm/radeon/radeon_cs.c
3452     @@ -418,7 +418,7 @@ static void radeon_cs_parser_fini(struct radeon_cs_parser *parser, int error, bo
3453     kfree(parser->track);
3454     kfree(parser->relocs);
3455     kfree(parser->relocs_ptr);
3456     - kfree(parser->vm_bos);
3457     + drm_free_large(parser->vm_bos);
3458     for (i = 0; i < parser->nchunks; i++)
3459     drm_free_large(parser->chunks[i].kdata);
3460     kfree(parser->chunks);
3461     diff --git a/drivers/gpu/drm/radeon/radeon_device.c b/drivers/gpu/drm/radeon/radeon_device.c
3462     index 12c8329644c4..6684fbf09929 100644
3463     --- a/drivers/gpu/drm/radeon/radeon_device.c
3464     +++ b/drivers/gpu/drm/radeon/radeon_device.c
3465     @@ -1130,7 +1130,7 @@ static void radeon_check_arguments(struct radeon_device *rdev)
3466     if (radeon_vm_block_size == -1) {
3467    
3468     /* Total bits covered by PD + PTs */
3469     - unsigned bits = ilog2(radeon_vm_size) + 17;
3470     + unsigned bits = ilog2(radeon_vm_size) + 18;
3471    
3472     /* Make sure the PD is 4K in size up to 8GB address space.
3473     Above that split equal between PD and PTs */
3474     diff --git a/drivers/gpu/drm/radeon/radeon_ring.c b/drivers/gpu/drm/radeon/radeon_ring.c
3475     index d65607902537..93234350c34e 100644
3476     --- a/drivers/gpu/drm/radeon/radeon_ring.c
3477     +++ b/drivers/gpu/drm/radeon/radeon_ring.c
3478     @@ -335,7 +335,7 @@ unsigned radeon_ring_backup(struct radeon_device *rdev, struct radeon_ring *ring
3479     }
3480    
3481     /* and then save the content of the ring */
3482     - *data = kmalloc_array(size, sizeof(uint32_t), GFP_KERNEL);
3483     + *data = drm_malloc_ab(size, sizeof(uint32_t));
3484     if (!*data) {
3485     mutex_unlock(&rdev->ring_lock);
3486     return 0;
3487     @@ -377,7 +377,7 @@ int radeon_ring_restore(struct radeon_device *rdev, struct radeon_ring *ring,
3488     }
3489    
3490     radeon_ring_unlock_commit(rdev, ring, false);
3491     - kfree(data);
3492     + drm_free_large(data);
3493     return 0;
3494     }
3495    
3496     diff --git a/drivers/gpu/drm/radeon/radeon_vm.c b/drivers/gpu/drm/radeon/radeon_vm.c
3497     index 088ffdc2f577..a3b3e098624a 100644
3498     --- a/drivers/gpu/drm/radeon/radeon_vm.c
3499     +++ b/drivers/gpu/drm/radeon/radeon_vm.c
3500     @@ -132,8 +132,8 @@ struct radeon_cs_reloc *radeon_vm_get_bos(struct radeon_device *rdev,
3501     struct radeon_cs_reloc *list;
3502     unsigned i, idx;
3503    
3504     - list = kmalloc_array(vm->max_pde_used + 2,
3505     - sizeof(struct radeon_cs_reloc), GFP_KERNEL);
3506     + list = drm_malloc_ab(vm->max_pde_used + 2,
3507     + sizeof(struct radeon_cs_reloc));
3508     if (!list)
3509     return NULL;
3510    
3511     diff --git a/drivers/gpu/drm/radeon/si_dpm.c b/drivers/gpu/drm/radeon/si_dpm.c
3512     index 70e61ffeace2..1202e0fd4292 100644
3513     --- a/drivers/gpu/drm/radeon/si_dpm.c
3514     +++ b/drivers/gpu/drm/radeon/si_dpm.c
3515     @@ -6255,7 +6255,7 @@ static void si_parse_pplib_clock_info(struct radeon_device *rdev,
3516     if ((rps->class2 & ATOM_PPLIB_CLASSIFICATION2_ULV) &&
3517     index == 0) {
3518     /* XXX disable for A0 tahiti */
3519     - si_pi->ulv.supported = true;
3520     + si_pi->ulv.supported = false;
3521     si_pi->ulv.pl = *pl;
3522     si_pi->ulv.one_pcie_lane_in_ulv = false;
3523     si_pi->ulv.volt_change_delay = SISLANDS_ULVVOLTAGECHANGEDELAY_DFLT;
3524     diff --git a/drivers/gpu/drm/tilcdc/tilcdc_drv.c b/drivers/gpu/drm/tilcdc/tilcdc_drv.c
3525     index 6be623b4a86f..000428e5773f 100644
3526     --- a/drivers/gpu/drm/tilcdc/tilcdc_drv.c
3527     +++ b/drivers/gpu/drm/tilcdc/tilcdc_drv.c
3528     @@ -84,6 +84,7 @@ static int modeset_init(struct drm_device *dev)
3529     if ((priv->num_encoders == 0) || (priv->num_connectors == 0)) {
3530     /* oh nos! */
3531     dev_err(dev->dev, "no encoders/connectors found\n");
3532     + drm_mode_config_cleanup(dev);
3533     return -ENXIO;
3534     }
3535    
3536     @@ -172,33 +173,37 @@ static int tilcdc_load(struct drm_device *dev, unsigned long flags)
3537     dev->dev_private = priv;
3538    
3539     priv->wq = alloc_ordered_workqueue("tilcdc", 0);
3540     + if (!priv->wq) {
3541     + ret = -ENOMEM;
3542     + goto fail_free_priv;
3543     + }
3544    
3545     res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
3546     if (!res) {
3547     dev_err(dev->dev, "failed to get memory resource\n");
3548     ret = -EINVAL;
3549     - goto fail;
3550     + goto fail_free_wq;
3551     }
3552    
3553     priv->mmio = ioremap_nocache(res->start, resource_size(res));
3554     if (!priv->mmio) {
3555     dev_err(dev->dev, "failed to ioremap\n");
3556     ret = -ENOMEM;
3557     - goto fail;
3558     + goto fail_free_wq;
3559     }
3560    
3561     priv->clk = clk_get(dev->dev, "fck");
3562     if (IS_ERR(priv->clk)) {
3563     dev_err(dev->dev, "failed to get functional clock\n");
3564     ret = -ENODEV;
3565     - goto fail;
3566     + goto fail_iounmap;
3567     }
3568    
3569     priv->disp_clk = clk_get(dev->dev, "dpll_disp_ck");
3570     if (IS_ERR(priv->clk)) {
3571     dev_err(dev->dev, "failed to get display clock\n");
3572     ret = -ENODEV;
3573     - goto fail;
3574     + goto fail_put_clk;
3575     }
3576    
3577     #ifdef CONFIG_CPU_FREQ
3578     @@ -208,7 +213,7 @@ static int tilcdc_load(struct drm_device *dev, unsigned long flags)
3579     CPUFREQ_TRANSITION_NOTIFIER);
3580     if (ret) {
3581     dev_err(dev->dev, "failed to register cpufreq notifier\n");
3582     - goto fail;
3583     + goto fail_put_disp_clk;
3584     }
3585     #endif
3586    
3587     @@ -253,13 +258,13 @@ static int tilcdc_load(struct drm_device *dev, unsigned long flags)
3588     ret = modeset_init(dev);
3589     if (ret < 0) {
3590     dev_err(dev->dev, "failed to initialize mode setting\n");
3591     - goto fail;
3592     + goto fail_cpufreq_unregister;
3593     }
3594    
3595     ret = drm_vblank_init(dev, 1);
3596     if (ret < 0) {
3597     dev_err(dev->dev, "failed to initialize vblank\n");
3598     - goto fail;
3599     + goto fail_mode_config_cleanup;
3600     }
3601    
3602     pm_runtime_get_sync(dev->dev);
3603     @@ -267,7 +272,7 @@ static int tilcdc_load(struct drm_device *dev, unsigned long flags)
3604     pm_runtime_put_sync(dev->dev);
3605     if (ret < 0) {
3606     dev_err(dev->dev, "failed to install IRQ handler\n");
3607     - goto fail;
3608     + goto fail_vblank_cleanup;
3609     }
3610    
3611     platform_set_drvdata(pdev, dev);
3612     @@ -283,13 +288,48 @@ static int tilcdc_load(struct drm_device *dev, unsigned long flags)
3613     priv->fbdev = drm_fbdev_cma_init(dev, bpp,
3614     dev->mode_config.num_crtc,
3615     dev->mode_config.num_connector);
3616     + if (IS_ERR(priv->fbdev)) {
3617     + ret = PTR_ERR(priv->fbdev);
3618     + goto fail_irq_uninstall;
3619     + }
3620    
3621     drm_kms_helper_poll_init(dev);
3622    
3623     return 0;
3624    
3625     -fail:
3626     - tilcdc_unload(dev);
3627     +fail_irq_uninstall:
3628     + pm_runtime_get_sync(dev->dev);
3629     + drm_irq_uninstall(dev);
3630     + pm_runtime_put_sync(dev->dev);
3631     +
3632     +fail_vblank_cleanup:
3633     + drm_vblank_cleanup(dev);
3634     +
3635     +fail_mode_config_cleanup:
3636     + drm_mode_config_cleanup(dev);
3637     +
3638     +fail_cpufreq_unregister:
3639     + pm_runtime_disable(dev->dev);
3640     +#ifdef CONFIG_CPU_FREQ
3641     + cpufreq_unregister_notifier(&priv->freq_transition,
3642     + CPUFREQ_TRANSITION_NOTIFIER);
3643     +fail_put_disp_clk:
3644     + clk_put(priv->disp_clk);
3645     +#endif
3646     +
3647     +fail_put_clk:
3648     + clk_put(priv->clk);
3649     +
3650     +fail_iounmap:
3651     + iounmap(priv->mmio);
3652     +
3653     +fail_free_wq:
3654     + flush_workqueue(priv->wq);
3655     + destroy_workqueue(priv->wq);
3656     +
3657     +fail_free_priv:
3658     + dev->dev_private = NULL;
3659     + kfree(priv);
3660     return ret;
3661     }
3662    
3663     diff --git a/drivers/gpu/drm/vmwgfx/vmwgfx_drv.c b/drivers/gpu/drm/vmwgfx/vmwgfx_drv.c
3664     index 18b54acacfbb..14b2f50ad7e9 100644
3665     --- a/drivers/gpu/drm/vmwgfx/vmwgfx_drv.c
3666     +++ b/drivers/gpu/drm/vmwgfx/vmwgfx_drv.c
3667     @@ -688,7 +688,11 @@ static int vmw_driver_load(struct drm_device *dev, unsigned long chipset)
3668     goto out_err0;
3669     }
3670    
3671     - if (unlikely(dev_priv->prim_bb_mem < dev_priv->vram_size))
3672     + /*
3673     + * Limit back buffer size to VRAM size. Remove this once
3674     + * screen targets are implemented.
3675     + */
3676     + if (dev_priv->prim_bb_mem > dev_priv->vram_size)
3677     dev_priv->prim_bb_mem = dev_priv->vram_size;
3678    
3679     mutex_unlock(&dev_priv->hw_mutex);
3680     diff --git a/drivers/gpu/drm/vmwgfx/vmwgfx_kms.c b/drivers/gpu/drm/vmwgfx/vmwgfx_kms.c
3681     index d2bc2b03d4c6..10fc4c3e1c0c 100644
3682     --- a/drivers/gpu/drm/vmwgfx/vmwgfx_kms.c
3683     +++ b/drivers/gpu/drm/vmwgfx/vmwgfx_kms.c
3684     @@ -1950,6 +1950,14 @@ int vmw_du_connector_fill_modes(struct drm_connector *connector,
3685     DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_PVSYNC)
3686     };
3687     int i;
3688     + u32 assumed_bpp = 2;
3689     +
3690     + /*
3691     + * If using screen objects, then assume 32-bpp because that's what the
3692     + * SVGA device is assuming
3693     + */
3694     + if (dev_priv->sou_priv)
3695     + assumed_bpp = 4;
3696    
3697     /* Add preferred mode */
3698     {
3699     @@ -1960,8 +1968,9 @@ int vmw_du_connector_fill_modes(struct drm_connector *connector,
3700     mode->vdisplay = du->pref_height;
3701     vmw_guess_mode_timing(mode);
3702    
3703     - if (vmw_kms_validate_mode_vram(dev_priv, mode->hdisplay * 2,
3704     - mode->vdisplay)) {
3705     + if (vmw_kms_validate_mode_vram(dev_priv,
3706     + mode->hdisplay * assumed_bpp,
3707     + mode->vdisplay)) {
3708     drm_mode_probed_add(connector, mode);
3709     } else {
3710     drm_mode_destroy(dev, mode);
3711     @@ -1983,7 +1992,8 @@ int vmw_du_connector_fill_modes(struct drm_connector *connector,
3712     bmode->vdisplay > max_height)
3713     continue;
3714    
3715     - if (!vmw_kms_validate_mode_vram(dev_priv, bmode->hdisplay * 2,
3716     + if (!vmw_kms_validate_mode_vram(dev_priv,
3717     + bmode->hdisplay * assumed_bpp,
3718     bmode->vdisplay))
3719     continue;
3720    
3721     diff --git a/drivers/hid/hid-debug.c b/drivers/hid/hid-debug.c
3722     index 84c3cb15ccdd..8bf61d295ffd 100644
3723     --- a/drivers/hid/hid-debug.c
3724     +++ b/drivers/hid/hid-debug.c
3725     @@ -946,6 +946,12 @@ static const char *keys[KEY_MAX + 1] = {
3726     [KEY_BRIGHTNESS_MIN] = "BrightnessMin",
3727     [KEY_BRIGHTNESS_MAX] = "BrightnessMax",
3728     [KEY_BRIGHTNESS_AUTO] = "BrightnessAuto",
3729     + [KEY_KBDINPUTASSIST_PREV] = "KbdInputAssistPrev",
3730     + [KEY_KBDINPUTASSIST_NEXT] = "KbdInputAssistNext",
3731     + [KEY_KBDINPUTASSIST_PREVGROUP] = "KbdInputAssistPrevGroup",
3732     + [KEY_KBDINPUTASSIST_NEXTGROUP] = "KbdInputAssistNextGroup",
3733     + [KEY_KBDINPUTASSIST_ACCEPT] = "KbdInputAssistAccept",
3734     + [KEY_KBDINPUTASSIST_CANCEL] = "KbdInputAssistCancel",
3735     };
3736    
3737     static const char *relatives[REL_MAX + 1] = {
3738     diff --git a/drivers/hid/hid-ids.h b/drivers/hid/hid-ids.h
3739     index 25cd674d6064..c3a712c8c915 100644
3740     --- a/drivers/hid/hid-ids.h
3741     +++ b/drivers/hid/hid-ids.h
3742     @@ -296,6 +296,11 @@
3743     #define USB_DEVICE_ID_DWAV_EGALAX_MULTITOUCH_73F7 0x73f7
3744     #define USB_DEVICE_ID_DWAV_EGALAX_MULTITOUCH_A001 0xa001
3745    
3746     +#define USB_VENDOR_ID_ELAN 0x04f3
3747     +#define USB_DEVICE_ID_ELAN_TOUCHSCREEN 0x0089
3748     +#define USB_DEVICE_ID_ELAN_TOUCHSCREEN_009B 0x009b
3749     +#define USB_DEVICE_ID_ELAN_TOUCHSCREEN_016F 0x016f
3750     +
3751     #define USB_VENDOR_ID_ELECOM 0x056e
3752     #define USB_DEVICE_ID_ELECOM_BM084 0x0061
3753    
3754     @@ -733,6 +738,8 @@
3755     #define USB_DEVICE_ID_PI_ENGINEERING_VEC_USB_FOOTPEDAL 0xff
3756    
3757     #define USB_VENDOR_ID_PIXART 0x093a
3758     +#define USB_DEVICE_ID_PIXART_USB_OPTICAL_MOUSE_ID2 0x0137
3759     +#define USB_DEVICE_ID_PIXART_USB_OPTICAL_MOUSE 0x2510
3760     #define USB_DEVICE_ID_PIXART_OPTICAL_TOUCH_SCREEN 0x8001
3761     #define USB_DEVICE_ID_PIXART_OPTICAL_TOUCH_SCREEN1 0x8002
3762     #define USB_DEVICE_ID_PIXART_OPTICAL_TOUCH_SCREEN2 0x8003
3763     diff --git a/drivers/hid/hid-input.c b/drivers/hid/hid-input.c
3764     index 2619f7f4517a..62e828655922 100644
3765     --- a/drivers/hid/hid-input.c
3766     +++ b/drivers/hid/hid-input.c
3767     @@ -689,7 +689,10 @@ static void hidinput_configure_usage(struct hid_input *hidinput, struct hid_fiel
3768     break;
3769    
3770     case 0x5b: /* TransducerSerialNumber */
3771     - set_bit(MSC_SERIAL, input->mscbit);
3772     + usage->type = EV_MSC;
3773     + usage->code = MSC_SERIAL;
3774     + bit = input->mscbit;
3775     + max = MSC_MAX;
3776     break;
3777    
3778     default: goto unknown;
3779     @@ -856,6 +859,13 @@ static void hidinput_configure_usage(struct hid_input *hidinput, struct hid_fiel
3780     case 0x28b: map_key_clear(KEY_FORWARDMAIL); break;
3781     case 0x28c: map_key_clear(KEY_SEND); break;
3782    
3783     + case 0x2c7: map_key_clear(KEY_KBDINPUTASSIST_PREV); break;
3784     + case 0x2c8: map_key_clear(KEY_KBDINPUTASSIST_NEXT); break;
3785     + case 0x2c9: map_key_clear(KEY_KBDINPUTASSIST_PREVGROUP); break;
3786     + case 0x2ca: map_key_clear(KEY_KBDINPUTASSIST_NEXTGROUP); break;
3787     + case 0x2cb: map_key_clear(KEY_KBDINPUTASSIST_ACCEPT); break;
3788     + case 0x2cc: map_key_clear(KEY_KBDINPUTASSIST_CANCEL); break;
3789     +
3790     default: goto ignore;
3791     }
3792     break;
3793     diff --git a/drivers/hid/usbhid/hid-core.c b/drivers/hid/usbhid/hid-core.c
3794     index 79cf503e37bf..ddd547ad6d7e 100644
3795     --- a/drivers/hid/usbhid/hid-core.c
3796     +++ b/drivers/hid/usbhid/hid-core.c
3797     @@ -82,7 +82,7 @@ static int hid_start_in(struct hid_device *hid)
3798     struct usbhid_device *usbhid = hid->driver_data;
3799    
3800     spin_lock_irqsave(&usbhid->lock, flags);
3801     - if (hid->open > 0 &&
3802     + if ((hid->open > 0 || hid->quirks & HID_QUIRK_ALWAYS_POLL) &&
3803     !test_bit(HID_DISCONNECTED, &usbhid->iofl) &&
3804     !test_bit(HID_SUSPENDED, &usbhid->iofl) &&
3805     !test_and_set_bit(HID_IN_RUNNING, &usbhid->iofl)) {
3806     @@ -292,6 +292,8 @@ static void hid_irq_in(struct urb *urb)
3807     case 0: /* success */
3808     usbhid_mark_busy(usbhid);
3809     usbhid->retry_delay = 0;
3810     + if ((hid->quirks & HID_QUIRK_ALWAYS_POLL) && !hid->open)
3811     + break;
3812     hid_input_report(urb->context, HID_INPUT_REPORT,
3813     urb->transfer_buffer,
3814     urb->actual_length, 1);
3815     @@ -735,8 +737,10 @@ void usbhid_close(struct hid_device *hid)
3816     if (!--hid->open) {
3817     spin_unlock_irq(&usbhid->lock);
3818     hid_cancel_delayed_stuff(usbhid);
3819     - usb_kill_urb(usbhid->urbin);
3820     - usbhid->intf->needs_remote_wakeup = 0;
3821     + if (!(hid->quirks & HID_QUIRK_ALWAYS_POLL)) {
3822     + usb_kill_urb(usbhid->urbin);
3823     + usbhid->intf->needs_remote_wakeup = 0;
3824     + }
3825     } else {
3826     spin_unlock_irq(&usbhid->lock);
3827     }
3828     @@ -1134,6 +1138,19 @@ static int usbhid_start(struct hid_device *hid)
3829    
3830     set_bit(HID_STARTED, &usbhid->iofl);
3831    
3832     + if (hid->quirks & HID_QUIRK_ALWAYS_POLL) {
3833     + ret = usb_autopm_get_interface(usbhid->intf);
3834     + if (ret)
3835     + goto fail;
3836     + usbhid->intf->needs_remote_wakeup = 1;
3837     + ret = hid_start_in(hid);
3838     + if (ret) {
3839     + dev_err(&hid->dev,
3840     + "failed to start in urb: %d\n", ret);
3841     + }
3842     + usb_autopm_put_interface(usbhid->intf);
3843     + }
3844     +
3845     /* Some keyboards don't work until their LEDs have been set.
3846     * Since BIOSes do set the LEDs, it must be safe for any device
3847     * that supports the keyboard boot protocol.
3848     @@ -1166,6 +1183,9 @@ static void usbhid_stop(struct hid_device *hid)
3849     if (WARN_ON(!usbhid))
3850     return;
3851    
3852     + if (hid->quirks & HID_QUIRK_ALWAYS_POLL)
3853     + usbhid->intf->needs_remote_wakeup = 0;
3854     +
3855     clear_bit(HID_STARTED, &usbhid->iofl);
3856     spin_lock_irq(&usbhid->lock); /* Sync with error and led handlers */
3857     set_bit(HID_DISCONNECTED, &usbhid->iofl);
3858     diff --git a/drivers/hid/usbhid/hid-quirks.c b/drivers/hid/usbhid/hid-quirks.c
3859     index 15225f3eaed1..5014bb567b29 100644
3860     --- a/drivers/hid/usbhid/hid-quirks.c
3861     +++ b/drivers/hid/usbhid/hid-quirks.c
3862     @@ -70,6 +70,9 @@ static const struct hid_blacklist {
3863     { USB_VENDOR_ID_CH, USB_DEVICE_ID_CH_3AXIS_5BUTTON_STICK, HID_QUIRK_NOGET },
3864     { USB_VENDOR_ID_CH, USB_DEVICE_ID_CH_AXIS_295, HID_QUIRK_NOGET },
3865     { USB_VENDOR_ID_DMI, USB_DEVICE_ID_DMI_ENC, HID_QUIRK_NOGET },
3866     + { USB_VENDOR_ID_ELAN, USB_DEVICE_ID_ELAN_TOUCHSCREEN, HID_QUIRK_ALWAYS_POLL },
3867     + { USB_VENDOR_ID_ELAN, USB_DEVICE_ID_ELAN_TOUCHSCREEN_009B, HID_QUIRK_ALWAYS_POLL },
3868     + { USB_VENDOR_ID_ELAN, USB_DEVICE_ID_ELAN_TOUCHSCREEN_016F, HID_QUIRK_ALWAYS_POLL },
3869     { USB_VENDOR_ID_ELO, USB_DEVICE_ID_ELO_TS2700, HID_QUIRK_NOGET },
3870     { USB_VENDOR_ID_FORMOSA, USB_DEVICE_ID_FORMOSA_IR_RECEIVER, HID_QUIRK_NO_INIT_REPORTS },
3871     { USB_VENDOR_ID_FREESCALE, USB_DEVICE_ID_FREESCALE_MX28, HID_QUIRK_NOGET },
3872     @@ -79,6 +82,8 @@ static const struct hid_blacklist {
3873     { USB_VENDOR_ID_NOVATEK, USB_DEVICE_ID_NOVATEK_MOUSE, HID_QUIRK_NO_INIT_REPORTS },
3874     { USB_VENDOR_ID_PENMOUNT, USB_DEVICE_ID_PENMOUNT_1610, HID_QUIRK_NOGET },
3875     { USB_VENDOR_ID_PENMOUNT, USB_DEVICE_ID_PENMOUNT_1640, HID_QUIRK_NOGET },
3876     + { USB_VENDOR_ID_PIXART, USB_DEVICE_ID_PIXART_USB_OPTICAL_MOUSE, HID_QUIRK_ALWAYS_POLL },
3877     + { USB_VENDOR_ID_KYE, USB_DEVICE_ID_PIXART_USB_OPTICAL_MOUSE_ID2, HID_QUIRK_ALWAYS_POLL },
3878     { USB_VENDOR_ID_PIXART, USB_DEVICE_ID_PIXART_OPTICAL_TOUCH_SCREEN, HID_QUIRK_NO_INIT_REPORTS },
3879     { USB_VENDOR_ID_PIXART, USB_DEVICE_ID_PIXART_OPTICAL_TOUCH_SCREEN1, HID_QUIRK_NO_INIT_REPORTS },
3880     { USB_VENDOR_ID_PIXART, USB_DEVICE_ID_PIXART_OPTICAL_TOUCH_SCREEN2, HID_QUIRK_NO_INIT_REPORTS },
3881     diff --git a/drivers/i2c/busses/i2c-at91.c b/drivers/i2c/busses/i2c-at91.c
3882     index 917d54588d95..e05a672db3e5 100644
3883     --- a/drivers/i2c/busses/i2c-at91.c
3884     +++ b/drivers/i2c/busses/i2c-at91.c
3885     @@ -434,7 +434,7 @@ static int at91_do_twi_transfer(struct at91_twi_dev *dev)
3886     }
3887     }
3888    
3889     - ret = wait_for_completion_io_timeout(&dev->cmd_complete,
3890     + ret = wait_for_completion_timeout(&dev->cmd_complete,
3891     dev->adapter.timeout);
3892     if (ret == 0) {
3893     dev_err(dev->dev, "controller timed out\n");
3894     diff --git a/drivers/iio/common/st_sensors/st_sensors_buffer.c b/drivers/iio/common/st_sensors/st_sensors_buffer.c
3895     index 1665c8e4b62b..e18bc6782256 100644
3896     --- a/drivers/iio/common/st_sensors/st_sensors_buffer.c
3897     +++ b/drivers/iio/common/st_sensors/st_sensors_buffer.c
3898     @@ -71,7 +71,7 @@ int st_sensors_get_buffer_element(struct iio_dev *indio_dev, u8 *buf)
3899     goto st_sensors_free_memory;
3900     }
3901    
3902     - for (i = 0; i < n * num_data_channels; i++) {
3903     + for (i = 0; i < n * byte_for_channel; i++) {
3904     if (i < n)
3905     buf[i] = rx_array[i];
3906     else
3907     diff --git a/drivers/iio/proximity/as3935.c b/drivers/iio/proximity/as3935.c
3908     index 5e780ef206f3..8349cc0fdf66 100644
3909     --- a/drivers/iio/proximity/as3935.c
3910     +++ b/drivers/iio/proximity/as3935.c
3911     @@ -330,7 +330,7 @@ static int as3935_probe(struct spi_device *spi)
3912     return -EINVAL;
3913     }
3914    
3915     - indio_dev = devm_iio_device_alloc(&spi->dev, sizeof(st));
3916     + indio_dev = devm_iio_device_alloc(&spi->dev, sizeof(*st));
3917     if (!indio_dev)
3918     return -ENOMEM;
3919    
3920     diff --git a/drivers/infiniband/hw/mlx4/main.c b/drivers/infiniband/hw/mlx4/main.c
3921     index bda5994ceb68..8b72cf392b34 100644
3922     --- a/drivers/infiniband/hw/mlx4/main.c
3923     +++ b/drivers/infiniband/hw/mlx4/main.c
3924     @@ -1173,18 +1173,24 @@ static struct ib_flow *mlx4_ib_create_flow(struct ib_qp *qp,
3925     err = __mlx4_ib_create_flow(qp, flow_attr, domain, type[i],
3926     &mflow->reg_id[i]);
3927     if (err)
3928     - goto err_free;
3929     + goto err_create_flow;
3930     i++;
3931     }
3932    
3933     if (i < ARRAY_SIZE(type) && flow_attr->type == IB_FLOW_ATTR_NORMAL) {
3934     err = mlx4_ib_tunnel_steer_add(qp, flow_attr, &mflow->reg_id[i]);
3935     if (err)
3936     - goto err_free;
3937     + goto err_create_flow;
3938     + i++;
3939     }
3940    
3941     return &mflow->ibflow;
3942    
3943     +err_create_flow:
3944     + while (i) {
3945     + (void)__mlx4_ib_destroy_flow(to_mdev(qp->device)->dev, mflow->reg_id[i]);
3946     + i--;
3947     + }
3948     err_free:
3949     kfree(mflow);
3950     return ERR_PTR(err);
3951     diff --git a/drivers/infiniband/ulp/isert/ib_isert.c b/drivers/infiniband/ulp/isert/ib_isert.c
3952     index da8ff124762a..4d35bc71e2d6 100644
3953     --- a/drivers/infiniband/ulp/isert/ib_isert.c
3954     +++ b/drivers/infiniband/ulp/isert/ib_isert.c
3955     @@ -2185,7 +2185,7 @@ isert_put_response(struct iscsi_conn *conn, struct iscsi_cmd *cmd)
3956     isert_cmd->tx_desc.num_sge = 2;
3957     }
3958    
3959     - isert_init_send_wr(isert_conn, isert_cmd, send_wr, true);
3960     + isert_init_send_wr(isert_conn, isert_cmd, send_wr, false);
3961    
3962     pr_debug("Posting SCSI Response IB_WR_SEND >>>>>>>>>>>>>>>>>>>>>>\n");
3963    
3964     @@ -2884,7 +2884,7 @@ isert_put_datain(struct iscsi_conn *conn, struct iscsi_cmd *cmd)
3965     &isert_cmd->tx_desc.iscsi_header);
3966     isert_init_tx_hdrs(isert_conn, &isert_cmd->tx_desc);
3967     isert_init_send_wr(isert_conn, isert_cmd,
3968     - &isert_cmd->tx_desc.send_wr, true);
3969     + &isert_cmd->tx_desc.send_wr, false);
3970     isert_cmd->rdma_wr.s_send_wr.next = &isert_cmd->tx_desc.send_wr;
3971     wr->send_wr_num += 1;
3972     }
3973     diff --git a/drivers/input/mouse/alps.c b/drivers/input/mouse/alps.c
3974     index 35a49bf57227..2b0ae8cc8e51 100644
3975     --- a/drivers/input/mouse/alps.c
3976     +++ b/drivers/input/mouse/alps.c
3977     @@ -835,8 +835,8 @@ static void alps_process_packet_v4(struct psmouse *psmouse)
3978     f->fingers = alps_process_bitmap(priv, f);
3979     }
3980    
3981     - f->left = packet[4] & 0x01;
3982     - f->right = packet[4] & 0x02;
3983     + f->left = !!(packet[4] & 0x01);
3984     + f->right = !!(packet[4] & 0x02);
3985    
3986     f->st.x = ((packet[1] & 0x7f) << 4) | ((packet[3] & 0x30) >> 2) |
3987     ((packet[0] & 0x30) >> 4);
3988     diff --git a/drivers/input/mouse/synaptics.c b/drivers/input/mouse/synaptics.c
3989     index fd23181c1fb7..b5b630c484c5 100644
3990     --- a/drivers/input/mouse/synaptics.c
3991     +++ b/drivers/input/mouse/synaptics.c
3992     @@ -618,6 +618,8 @@ static void synaptics_parse_agm(const unsigned char buf[],
3993     priv->agm_pending = true;
3994     }
3995    
3996     +static bool is_forcepad;
3997     +
3998     static int synaptics_parse_hw_state(const unsigned char buf[],
3999     struct synaptics_data *priv,
4000     struct synaptics_hw_state *hw)
4001     @@ -647,7 +649,7 @@ static int synaptics_parse_hw_state(const unsigned char buf[],
4002     hw->left = (buf[0] & 0x01) ? 1 : 0;
4003     hw->right = (buf[0] & 0x02) ? 1 : 0;
4004    
4005     - if (SYN_CAP_FORCEPAD(priv->ext_cap_0c)) {
4006     + if (is_forcepad) {
4007     /*
4008     * ForcePads, like Clickpads, use middle button
4009     * bits to report primary button clicks.
4010     @@ -1678,11 +1680,29 @@ static const struct dmi_system_id __initconst cr48_dmi_table[] = {
4011     { }
4012     };
4013    
4014     +static const struct dmi_system_id forcepad_dmi_table[] __initconst = {
4015     +#if defined(CONFIG_DMI) && defined(CONFIG_X86)
4016     + {
4017     + .matches = {
4018     + DMI_MATCH(DMI_SYS_VENDOR, "Hewlett-Packard"),
4019     + DMI_MATCH(DMI_PRODUCT_NAME, "HP EliteBook Folio 1040 G1"),
4020     + },
4021     + },
4022     +#endif
4023     + { }
4024     +};
4025     +
4026     void __init synaptics_module_init(void)
4027     {
4028     impaired_toshiba_kbc = dmi_check_system(toshiba_dmi_table);
4029     broken_olpc_ec = dmi_check_system(olpc_dmi_table);
4030     cr48_profile_sensor = dmi_check_system(cr48_dmi_table);
4031     +
4032     + /*
4033     + * Unfortunately ForcePad capability is not exported over PS/2,
4034     + * so we have to resort to checking DMI.
4035     + */
4036     + is_forcepad = dmi_check_system(forcepad_dmi_table);
4037     }
4038    
4039     static int __synaptics_init(struct psmouse *psmouse, bool absolute_mode)
4040     diff --git a/drivers/input/mouse/synaptics.h b/drivers/input/mouse/synaptics.h
4041     index fb2e076738ae..1bd01f21783b 100644
4042     --- a/drivers/input/mouse/synaptics.h
4043     +++ b/drivers/input/mouse/synaptics.h
4044     @@ -77,12 +77,9 @@
4045     * for noise.
4046     * 2 0x08 image sensor image sensor tracks 5 fingers, but only
4047     * reports 2.
4048     + * 2 0x01 uniform clickpad whole clickpad moves instead of being
4049     + * hinged at the top.
4050     * 2 0x20 report min query 0x0f gives min coord reported
4051     - * 2 0x80 forcepad forcepad is a variant of clickpad that
4052     - * does not have physical buttons but rather
4053     - * uses pressure above certain threshold to
4054     - * report primary clicks. Forcepads also have
4055     - * clickpad bit set.
4056     */
4057     #define SYN_CAP_CLICKPAD(ex0c) ((ex0c) & 0x100000) /* 1-button ClickPad */
4058     #define SYN_CAP_CLICKPAD2BTN(ex0c) ((ex0c) & 0x000100) /* 2-button ClickPad */
4059     @@ -91,7 +88,6 @@
4060     #define SYN_CAP_ADV_GESTURE(ex0c) ((ex0c) & 0x080000)
4061     #define SYN_CAP_REDUCED_FILTERING(ex0c) ((ex0c) & 0x000400)
4062     #define SYN_CAP_IMAGE_SENSOR(ex0c) ((ex0c) & 0x000800)
4063     -#define SYN_CAP_FORCEPAD(ex0c) ((ex0c) & 0x008000)
4064    
4065     /* synaptics modes query bits */
4066     #define SYN_MODE_ABSOLUTE(m) ((m) & (1 << 7))
4067     diff --git a/drivers/input/serio/i8042-x86ia64io.h b/drivers/input/serio/i8042-x86ia64io.h
4068     index 40b7d6c0ff17..faeeb1372462 100644
4069     --- a/drivers/input/serio/i8042-x86ia64io.h
4070     +++ b/drivers/input/serio/i8042-x86ia64io.h
4071     @@ -101,6 +101,12 @@ static const struct dmi_system_id __initconst i8042_dmi_noloop_table[] = {
4072     },
4073     {
4074     .matches = {
4075     + DMI_MATCH(DMI_SYS_VENDOR, "ASUSTeK COMPUTER INC."),
4076     + DMI_MATCH(DMI_PRODUCT_NAME, "X750LN"),
4077     + },
4078     + },
4079     + {
4080     + .matches = {
4081     DMI_MATCH(DMI_SYS_VENDOR, "Compaq"),
4082     DMI_MATCH(DMI_PRODUCT_NAME , "ProLiant"),
4083     DMI_MATCH(DMI_PRODUCT_VERSION, "8500"),
4084     @@ -623,6 +629,22 @@ static const struct dmi_system_id __initconst i8042_dmi_notimeout_table[] = {
4085     },
4086     },
4087     {
4088     + /* Fujitsu A544 laptop */
4089     + /* https://bugzilla.redhat.com/show_bug.cgi?id=1111138 */
4090     + .matches = {
4091     + DMI_MATCH(DMI_SYS_VENDOR, "FUJITSU"),
4092     + DMI_MATCH(DMI_PRODUCT_NAME, "LIFEBOOK A544"),
4093     + },
4094     + },
4095     + {
4096     + /* Fujitsu AH544 laptop */
4097     + /* https://bugzilla.kernel.org/show_bug.cgi?id=69731 */
4098     + .matches = {
4099     + DMI_MATCH(DMI_SYS_VENDOR, "FUJITSU"),
4100     + DMI_MATCH(DMI_PRODUCT_NAME, "LIFEBOOK AH544"),
4101     + },
4102     + },
4103     + {
4104     /* Fujitsu U574 laptop */
4105     /* https://bugzilla.kernel.org/show_bug.cgi?id=69731 */
4106     .matches = {
4107     diff --git a/drivers/iommu/amd_iommu.c b/drivers/iommu/amd_iommu.c
4108     index ecb0109a5360..5aff937eb1f9 100644
4109     --- a/drivers/iommu/amd_iommu.c
4110     +++ b/drivers/iommu/amd_iommu.c
4111     @@ -260,17 +260,13 @@ static bool check_device(struct device *dev)
4112     return true;
4113     }
4114    
4115     -static int init_iommu_group(struct device *dev)
4116     +static void init_iommu_group(struct device *dev)
4117     {
4118     struct iommu_group *group;
4119    
4120     group = iommu_group_get_for_dev(dev);
4121     -
4122     - if (IS_ERR(group))
4123     - return PTR_ERR(group);
4124     -
4125     - iommu_group_put(group);
4126     - return 0;
4127     + if (!IS_ERR(group))
4128     + iommu_group_put(group);
4129     }
4130    
4131     static int __last_alias(struct pci_dev *pdev, u16 alias, void *data)
4132     @@ -340,7 +336,6 @@ static int iommu_init_device(struct device *dev)
4133     struct pci_dev *pdev = to_pci_dev(dev);
4134     struct iommu_dev_data *dev_data;
4135     u16 alias;
4136     - int ret;
4137    
4138     if (dev->archdata.iommu)
4139     return 0;
4140     @@ -364,12 +359,6 @@ static int iommu_init_device(struct device *dev)
4141     dev_data->alias_data = alias_data;
4142     }
4143    
4144     - ret = init_iommu_group(dev);
4145     - if (ret) {
4146     - free_dev_data(dev_data);
4147     - return ret;
4148     - }
4149     -
4150     if (pci_iommuv2_capable(pdev)) {
4151     struct amd_iommu *iommu;
4152    
4153     @@ -455,6 +444,15 @@ int __init amd_iommu_init_devices(void)
4154     goto out_free;
4155     }
4156    
4157     + /*
4158     + * Initialize IOMMU groups only after iommu_init_device() has
4159     + * had a chance to populate any IVRS defined aliases.
4160     + */
4161     + for_each_pci_dev(pdev) {
4162     + if (check_device(&pdev->dev))
4163     + init_iommu_group(&pdev->dev);
4164     + }
4165     +
4166     return 0;
4167    
4168     out_free:
4169     @@ -2415,6 +2413,7 @@ static int device_change_notifier(struct notifier_block *nb,
4170     case BUS_NOTIFY_ADD_DEVICE:
4171    
4172     iommu_init_device(dev);
4173     + init_iommu_group(dev);
4174    
4175     /*
4176     * dev_data is still NULL and
4177     diff --git a/drivers/iommu/iommu.c b/drivers/iommu/iommu.c
4178     index 0639b9274b11..690818dbbeed 100644
4179     --- a/drivers/iommu/iommu.c
4180     +++ b/drivers/iommu/iommu.c
4181     @@ -30,6 +30,7 @@
4182     #include <linux/notifier.h>
4183     #include <linux/err.h>
4184     #include <linux/pci.h>
4185     +#include <linux/bitops.h>
4186     #include <trace/events/iommu.h>
4187    
4188     static struct kset *iommu_group_kset;
4189     @@ -519,6 +520,9 @@ int iommu_group_id(struct iommu_group *group)
4190     }
4191     EXPORT_SYMBOL_GPL(iommu_group_id);
4192    
4193     +static struct iommu_group *get_pci_alias_group(struct pci_dev *pdev,
4194     + unsigned long *devfns);
4195     +
4196     /*
4197     * To consider a PCI device isolated, we require ACS to support Source
4198     * Validation, Request Redirection, Completer Redirection, and Upstream
4199     @@ -529,6 +533,86 @@ EXPORT_SYMBOL_GPL(iommu_group_id);
4200     */
4201     #define REQ_ACS_FLAGS (PCI_ACS_SV | PCI_ACS_RR | PCI_ACS_CR | PCI_ACS_UF)
4202    
4203     +/*
4204     + * For multifunction devices which are not isolated from each other, find
4205     + * all the other non-isolated functions and look for existing groups. For
4206     + * each function, we also need to look for aliases to or from other devices
4207     + * that may already have a group.
4208     + */
4209     +static struct iommu_group *get_pci_function_alias_group(struct pci_dev *pdev,
4210     + unsigned long *devfns)
4211     +{
4212     + struct pci_dev *tmp = NULL;
4213     + struct iommu_group *group;
4214     +
4215     + if (!pdev->multifunction || pci_acs_enabled(pdev, REQ_ACS_FLAGS))
4216     + return NULL;
4217     +
4218     + for_each_pci_dev(tmp) {
4219     + if (tmp == pdev || tmp->bus != pdev->bus ||
4220     + PCI_SLOT(tmp->devfn) != PCI_SLOT(pdev->devfn) ||
4221     + pci_acs_enabled(tmp, REQ_ACS_FLAGS))
4222     + continue;
4223     +
4224     + group = get_pci_alias_group(tmp, devfns);
4225     + if (group) {
4226     + pci_dev_put(tmp);
4227     + return group;
4228     + }
4229     + }
4230     +
4231     + return NULL;
4232     +}
4233     +
4234     +/*
4235     + * Look for aliases to or from the given device for exisiting groups. The
4236     + * dma_alias_devfn only supports aliases on the same bus, therefore the search
4237     + * space is quite small (especially since we're really only looking at pcie
4238     + * device, and therefore only expect multiple slots on the root complex or
4239     + * downstream switch ports). It's conceivable though that a pair of
4240     + * multifunction devices could have aliases between them that would cause a
4241     + * loop. To prevent this, we use a bitmap to track where we've been.
4242     + */
4243     +static struct iommu_group *get_pci_alias_group(struct pci_dev *pdev,
4244     + unsigned long *devfns)
4245     +{
4246     + struct pci_dev *tmp = NULL;
4247     + struct iommu_group *group;
4248     +
4249     + if (test_and_set_bit(pdev->devfn & 0xff, devfns))
4250     + return NULL;
4251     +
4252     + group = iommu_group_get(&pdev->dev);
4253     + if (group)
4254     + return group;
4255     +
4256     + for_each_pci_dev(tmp) {
4257     + if (tmp == pdev || tmp->bus != pdev->bus)
4258     + continue;
4259     +
4260     + /* We alias them or they alias us */
4261     + if (((pdev->dev_flags & PCI_DEV_FLAGS_DMA_ALIAS_DEVFN) &&
4262     + pdev->dma_alias_devfn == tmp->devfn) ||
4263     + ((tmp->dev_flags & PCI_DEV_FLAGS_DMA_ALIAS_DEVFN) &&
4264     + tmp->dma_alias_devfn == pdev->devfn)) {
4265     +
4266     + group = get_pci_alias_group(tmp, devfns);
4267     + if (group) {
4268     + pci_dev_put(tmp);
4269     + return group;
4270     + }
4271     +
4272     + group = get_pci_function_alias_group(tmp, devfns);
4273     + if (group) {
4274     + pci_dev_put(tmp);
4275     + return group;
4276     + }
4277     + }
4278     + }
4279     +
4280     + return NULL;
4281     +}
4282     +
4283     struct group_for_pci_data {
4284     struct pci_dev *pdev;
4285     struct iommu_group *group;
4286     @@ -557,7 +641,7 @@ static struct iommu_group *iommu_group_get_for_pci_dev(struct pci_dev *pdev)
4287     struct group_for_pci_data data;
4288     struct pci_bus *bus;
4289     struct iommu_group *group = NULL;
4290     - struct pci_dev *tmp;
4291     + u64 devfns[4] = { 0 };
4292    
4293     /*
4294     * Find the upstream DMA alias for the device. A device must not
4295     @@ -591,76 +675,21 @@ static struct iommu_group *iommu_group_get_for_pci_dev(struct pci_dev *pdev)
4296     }
4297    
4298     /*
4299     - * Next we need to consider DMA alias quirks. If one device aliases
4300     - * to another, they should be grouped together. It's theoretically
4301     - * possible that aliases could create chains of devices where each
4302     - * device aliases another device. If we then factor in multifunction
4303     - * ACS grouping requirements, each alias could incorporate a new slot
4304     - * with multiple functions, each with aliases. This is all extremely
4305     - * unlikely as DMA alias quirks are typically only used for PCIe
4306     - * devices where we usually have a single slot per bus. Furthermore,
4307     - * the alias quirk is usually to another function within the slot
4308     - * (and ACS multifunction is not supported) or to a different slot
4309     - * that doesn't physically exist. The likely scenario is therefore
4310     - * that everything on the bus gets grouped together. To reduce the
4311     - * problem space, share the IOMMU group for all devices on the bus
4312     - * if a DMA alias quirk is present on the bus.
4313     - */
4314     - tmp = NULL;
4315     - for_each_pci_dev(tmp) {
4316     - if (tmp->bus != pdev->bus ||
4317     - !(tmp->dev_flags & PCI_DEV_FLAGS_DMA_ALIAS_DEVFN))
4318     - continue;
4319     -
4320     - pci_dev_put(tmp);
4321     - tmp = NULL;
4322     -
4323     - /* We have an alias quirk, search for an existing group */
4324     - for_each_pci_dev(tmp) {
4325     - struct iommu_group *group_tmp;
4326     -
4327     - if (tmp->bus != pdev->bus)
4328     - continue;
4329     -
4330     - group_tmp = iommu_group_get(&tmp->dev);
4331     - if (!group) {
4332     - group = group_tmp;
4333     - continue;
4334     - }
4335     -
4336     - if (group_tmp) {
4337     - WARN_ON(group != group_tmp);
4338     - iommu_group_put(group_tmp);
4339     - }
4340     - }
4341     -
4342     - return group ? group : iommu_group_alloc();
4343     - }
4344     -
4345     - /*
4346     - * Non-multifunction devices or multifunction devices supporting
4347     - * ACS get their own group.
4348     + * Look for existing groups on device aliases. If we alias another
4349     + * device or another device aliases us, use the same group.
4350     */
4351     - if (!pdev->multifunction || pci_acs_enabled(pdev, REQ_ACS_FLAGS))
4352     - return iommu_group_alloc();
4353     + group = get_pci_alias_group(pdev, (unsigned long *)devfns);
4354     + if (group)
4355     + return group;
4356    
4357     /*
4358     - * Multifunction devices not supporting ACS share a group with other
4359     - * similar devices in the same slot.
4360     + * Look for existing groups on non-isolated functions on the same
4361     + * slot and aliases of those funcions, if any. No need to clear
4362     + * the search bitmap, the tested devfns are still valid.
4363     */
4364     - tmp = NULL;
4365     - for_each_pci_dev(tmp) {
4366     - if (tmp == pdev || tmp->bus != pdev->bus ||
4367     - PCI_SLOT(tmp->devfn) != PCI_SLOT(pdev->devfn) ||
4368     - pci_acs_enabled(tmp, REQ_ACS_FLAGS))
4369     - continue;
4370     -
4371     - group = iommu_group_get(&tmp->dev);
4372     - if (group) {
4373     - pci_dev_put(tmp);
4374     - return group;
4375     - }
4376     - }
4377     + group = get_pci_function_alias_group(pdev, (unsigned long *)devfns);
4378     + if (group)
4379     + return group;
4380    
4381     /* No shared group found, allocate new */
4382     return iommu_group_alloc();
4383     diff --git a/drivers/irqchip/irq-armada-370-xp.c b/drivers/irqchip/irq-armada-370-xp.c
4384     index 574aba0eba4e..1cb538fd85e9 100644
4385     --- a/drivers/irqchip/irq-armada-370-xp.c
4386     +++ b/drivers/irqchip/irq-armada-370-xp.c
4387     @@ -43,6 +43,7 @@
4388     #define ARMADA_370_XP_INT_CLEAR_ENABLE_OFFS (0x34)
4389     #define ARMADA_370_XP_INT_SOURCE_CTL(irq) (0x100 + irq*4)
4390     #define ARMADA_370_XP_INT_SOURCE_CPU_MASK 0xF
4391     +#define ARMADA_370_XP_INT_IRQ_FIQ_MASK(cpuid) ((BIT(0) | BIT(8)) << cpuid)
4392    
4393     #define ARMADA_370_XP_CPU_INTACK_OFFS (0x44)
4394     #define ARMADA_375_PPI_CAUSE (0x10)
4395     @@ -410,19 +411,29 @@ static void armada_370_xp_mpic_handle_cascade_irq(unsigned int irq,
4396     struct irq_desc *desc)
4397     {
4398     struct irq_chip *chip = irq_get_chip(irq);
4399     - unsigned long irqmap, irqn;
4400     + unsigned long irqmap, irqn, irqsrc, cpuid;
4401     unsigned int cascade_irq;
4402    
4403     chained_irq_enter(chip, desc);
4404    
4405     irqmap = readl_relaxed(per_cpu_int_base + ARMADA_375_PPI_CAUSE);
4406     -
4407     - if (irqmap & BIT(0)) {
4408     - armada_370_xp_handle_msi_irq(NULL, true);
4409     - irqmap &= ~BIT(0);
4410     - }
4411     + cpuid = cpu_logical_map(smp_processor_id());
4412    
4413     for_each_set_bit(irqn, &irqmap, BITS_PER_LONG) {
4414     + irqsrc = readl_relaxed(main_int_base +
4415     + ARMADA_370_XP_INT_SOURCE_CTL(irqn));
4416     +
4417     + /* Check if the interrupt is not masked on current CPU.
4418     + * Test IRQ (0-1) and FIQ (8-9) mask bits.
4419     + */
4420     + if (!(irqsrc & ARMADA_370_XP_INT_IRQ_FIQ_MASK(cpuid)))
4421     + continue;
4422     +
4423     + if (irqn == 1) {
4424     + armada_370_xp_handle_msi_irq(NULL, true);
4425     + continue;
4426     + }
4427     +
4428     cascade_irq = irq_find_mapping(armada_370_xp_mpic_domain, irqn);
4429     generic_handle_irq(cascade_irq);
4430     }
4431     diff --git a/drivers/md/dm-bufio.c b/drivers/md/dm-bufio.c
4432     index ab472c557d18..9ea5b6041eb2 100644
4433     --- a/drivers/md/dm-bufio.c
4434     +++ b/drivers/md/dm-bufio.c
4435     @@ -465,6 +465,7 @@ static void __relink_lru(struct dm_buffer *b, int dirty)
4436     c->n_buffers[dirty]++;
4437     b->list_mode = dirty;
4438     list_move(&b->lru_list, &c->lru[dirty]);
4439     + b->last_accessed = jiffies;
4440     }
4441    
4442     /*----------------------------------------------------------------
4443     @@ -1472,9 +1473,9 @@ static long __scan(struct dm_bufio_client *c, unsigned long nr_to_scan,
4444     list_for_each_entry_safe_reverse(b, tmp, &c->lru[l], lru_list) {
4445     freed += __cleanup_old_buffer(b, gfp_mask, 0);
4446     if (!--nr_to_scan)
4447     - break;
4448     + return freed;
4449     + dm_bufio_cond_resched();
4450     }
4451     - dm_bufio_cond_resched();
4452     }
4453     return freed;
4454     }
4455     diff --git a/drivers/md/dm-log-userspace-transfer.c b/drivers/md/dm-log-userspace-transfer.c
4456     index b428c0ae63d5..39ad9664d397 100644
4457     --- a/drivers/md/dm-log-userspace-transfer.c
4458     +++ b/drivers/md/dm-log-userspace-transfer.c
4459     @@ -272,7 +272,7 @@ int dm_ulog_tfr_init(void)
4460    
4461     r = cn_add_callback(&ulog_cn_id, "dmlogusr", cn_ulog_callback);
4462     if (r) {
4463     - cn_del_callback(&ulog_cn_id);
4464     + kfree(prealloced_cn_msg);
4465     return r;
4466     }
4467    
4468     diff --git a/drivers/media/common/siano/sms-cards.c b/drivers/media/common/siano/sms-cards.c
4469     index 82769993eeb7..82c7a1289f05 100644
4470     --- a/drivers/media/common/siano/sms-cards.c
4471     +++ b/drivers/media/common/siano/sms-cards.c
4472     @@ -157,6 +157,12 @@ static struct sms_board sms_boards[] = {
4473     .type = SMS_DENVER_2160,
4474     .default_mode = DEVICE_MODE_DAB_TDMB,
4475     },
4476     + [SMS1XXX_BOARD_PCTV_77E] = {
4477     + .name = "Hauppauge microStick 77e",
4478     + .type = SMS_NOVA_B0,
4479     + .fw[DEVICE_MODE_DVBT_BDA] = SMS_FW_DVB_NOVA_12MHZ_B0,
4480     + .default_mode = DEVICE_MODE_DVBT_BDA,
4481     + },
4482     };
4483    
4484     struct sms_board *sms_get_board(unsigned id)
4485     diff --git a/drivers/media/common/siano/sms-cards.h b/drivers/media/common/siano/sms-cards.h
4486     index c63b544c49c5..4c4caddf9869 100644
4487     --- a/drivers/media/common/siano/sms-cards.h
4488     +++ b/drivers/media/common/siano/sms-cards.h
4489     @@ -45,6 +45,7 @@
4490     #define SMS1XXX_BOARD_SIANO_RIO 18
4491     #define SMS1XXX_BOARD_SIANO_DENVER_1530 19
4492     #define SMS1XXX_BOARD_SIANO_DENVER_2160 20
4493     +#define SMS1XXX_BOARD_PCTV_77E 21
4494    
4495     struct sms_board_gpio_cfg {
4496     int lna_vhf_exist;
4497     diff --git a/drivers/media/dvb-frontends/ds3000.c b/drivers/media/dvb-frontends/ds3000.c
4498     index 335daeff91b9..9d0d0347758f 100644
4499     --- a/drivers/media/dvb-frontends/ds3000.c
4500     +++ b/drivers/media/dvb-frontends/ds3000.c
4501     @@ -864,6 +864,13 @@ struct dvb_frontend *ds3000_attach(const struct ds3000_config *config,
4502     memcpy(&state->frontend.ops, &ds3000_ops,
4503     sizeof(struct dvb_frontend_ops));
4504     state->frontend.demodulator_priv = state;
4505     +
4506     + /*
4507     + * Some devices like T480 starts with voltage on. Be sure
4508     + * to turn voltage off during init, as this can otherwise
4509     + * interfere with Unicable SCR systems.
4510     + */
4511     + ds3000_set_voltage(&state->frontend, SEC_VOLTAGE_OFF);
4512     return &state->frontend;
4513    
4514     error3:
4515     diff --git a/drivers/media/i2c/tda7432.c b/drivers/media/i2c/tda7432.c
4516     index 72af644fa051..cf93021a6500 100644
4517     --- a/drivers/media/i2c/tda7432.c
4518     +++ b/drivers/media/i2c/tda7432.c
4519     @@ -293,7 +293,7 @@ static int tda7432_s_ctrl(struct v4l2_ctrl *ctrl)
4520     if (t->mute->val) {
4521     lf |= TDA7432_MUTE;
4522     lr |= TDA7432_MUTE;
4523     - lf |= TDA7432_MUTE;
4524     + rf |= TDA7432_MUTE;
4525     rr |= TDA7432_MUTE;
4526     }
4527     /* Mute & update balance*/
4528     diff --git a/drivers/media/platform/Kconfig b/drivers/media/platform/Kconfig
4529     index 6d86646d9743..5d666af2310c 100644
4530     --- a/drivers/media/platform/Kconfig
4531     +++ b/drivers/media/platform/Kconfig
4532     @@ -158,7 +158,7 @@ config VIDEO_MEM2MEM_DEINTERLACE
4533    
4534     config VIDEO_SAMSUNG_S5P_G2D
4535     tristate "Samsung S5P and EXYNOS4 G2D 2d graphics accelerator driver"
4536     - depends on VIDEO_DEV && VIDEO_V4L2 && (PLAT_S5P || ARCH_EXYNOS)
4537     + depends on VIDEO_DEV && VIDEO_V4L2 && (ARCH_S5PV210 || ARCH_EXYNOS)
4538     select VIDEOBUF2_DMA_CONTIG
4539     select V4L2_MEM2MEM_DEV
4540     default n
4541     @@ -168,7 +168,7 @@ config VIDEO_SAMSUNG_S5P_G2D
4542    
4543     config VIDEO_SAMSUNG_S5P_JPEG
4544     tristate "Samsung S5P/Exynos3250/Exynos4 JPEG codec driver"
4545     - depends on VIDEO_DEV && VIDEO_V4L2 && (PLAT_S5P || ARCH_EXYNOS)
4546     + depends on VIDEO_DEV && VIDEO_V4L2 && (ARCH_S5PV210 || ARCH_EXYNOS)
4547     select VIDEOBUF2_DMA_CONTIG
4548     select V4L2_MEM2MEM_DEV
4549     ---help---
4550     @@ -177,7 +177,7 @@ config VIDEO_SAMSUNG_S5P_JPEG
4551    
4552     config VIDEO_SAMSUNG_S5P_MFC
4553     tristate "Samsung S5P MFC Video Codec"
4554     - depends on VIDEO_DEV && VIDEO_V4L2 && (PLAT_S5P || ARCH_EXYNOS)
4555     + depends on VIDEO_DEV && VIDEO_V4L2 && (ARCH_S5PV210 || ARCH_EXYNOS)
4556     select VIDEOBUF2_DMA_CONTIG
4557     default n
4558     help
4559     diff --git a/drivers/media/platform/exynos4-is/Kconfig b/drivers/media/platform/exynos4-is/Kconfig
4560     index 5dcaa0a80540..ec5d7c4b5d28 100644
4561     --- a/drivers/media/platform/exynos4-is/Kconfig
4562     +++ b/drivers/media/platform/exynos4-is/Kconfig
4563     @@ -2,7 +2,7 @@
4564     config VIDEO_SAMSUNG_EXYNOS4_IS
4565     bool "Samsung S5P/EXYNOS4 SoC series Camera Subsystem driver"
4566     depends on VIDEO_V4L2 && VIDEO_V4L2_SUBDEV_API
4567     - depends on (PLAT_S5P || ARCH_EXYNOS)
4568     + depends on ARCH_S5PV210 || ARCH_EXYNOS
4569     depends on OF && COMMON_CLK
4570     help
4571     Say Y here to enable camera host interface devices for
4572     diff --git a/drivers/media/platform/s5p-tv/Kconfig b/drivers/media/platform/s5p-tv/Kconfig
4573     index 369a4c191e18..dc28ad2849c5 100644
4574     --- a/drivers/media/platform/s5p-tv/Kconfig
4575     +++ b/drivers/media/platform/s5p-tv/Kconfig
4576     @@ -8,7 +8,7 @@
4577    
4578     config VIDEO_SAMSUNG_S5P_TV
4579     bool "Samsung TV driver for S5P platform"
4580     - depends on (PLAT_S5P || ARCH_EXYNOS) && PM_RUNTIME
4581     + depends on (ARCH_S5PV210 || ARCH_EXYNOS) && PM_RUNTIME
4582     default n
4583     ---help---
4584     Say Y here to enable selecting the TV output devices for
4585     diff --git a/drivers/media/rc/imon.c b/drivers/media/rc/imon.c
4586     index 7115e68ba697..71c9039dc9ee 100644
4587     --- a/drivers/media/rc/imon.c
4588     +++ b/drivers/media/rc/imon.c
4589     @@ -1579,7 +1579,8 @@ static void imon_incoming_packet(struct imon_context *ictx,
4590     if (press_type == 0)
4591     rc_keyup(ictx->rdev);
4592     else {
4593     - if (ictx->rc_type == RC_BIT_RC6_MCE)
4594     + if (ictx->rc_type == RC_BIT_RC6_MCE ||
4595     + ictx->rc_type == RC_BIT_OTHER)
4596     rc_keydown(ictx->rdev,
4597     ictx->rc_type == RC_BIT_RC6_MCE ? RC_TYPE_RC6_MCE : RC_TYPE_OTHER,
4598     ictx->rc_scancode, ictx->rc_toggle);
4599     diff --git a/drivers/media/rc/rc-ir-raw.c b/drivers/media/rc/rc-ir-raw.c
4600     index e8fff2add265..b732ac6a26d8 100644
4601     --- a/drivers/media/rc/rc-ir-raw.c
4602     +++ b/drivers/media/rc/rc-ir-raw.c
4603     @@ -262,7 +262,6 @@ int ir_raw_event_register(struct rc_dev *dev)
4604     return -ENOMEM;
4605    
4606     dev->raw->dev = dev;
4607     - dev->enabled_protocols = ~0;
4608     dev->change_protocol = change_protocol;
4609     rc = kfifo_alloc(&dev->raw->kfifo,
4610     sizeof(struct ir_raw_event) * MAX_IR_EVENT_SIZE,
4611     diff --git a/drivers/media/rc/rc-main.c b/drivers/media/rc/rc-main.c
4612     index a7991c7d010a..8d3b74c5a717 100644
4613     --- a/drivers/media/rc/rc-main.c
4614     +++ b/drivers/media/rc/rc-main.c
4615     @@ -1421,6 +1421,8 @@ int rc_register_device(struct rc_dev *dev)
4616    
4617     if (dev->change_protocol) {
4618     u64 rc_type = (1 << rc_map->rc_type);
4619     + if (dev->driver_type == RC_DRIVER_IR_RAW)
4620     + rc_type |= RC_BIT_LIRC;
4621     rc = dev->change_protocol(dev, &rc_type);
4622     if (rc < 0)
4623     goto out_raw;
4624     diff --git a/drivers/media/tuners/m88ts2022.c b/drivers/media/tuners/m88ts2022.c
4625     index 40c42dec721b..7a62097aa9ea 100644
4626     --- a/drivers/media/tuners/m88ts2022.c
4627     +++ b/drivers/media/tuners/m88ts2022.c
4628     @@ -314,7 +314,7 @@ static int m88ts2022_set_params(struct dvb_frontend *fe)
4629     div_min = gdiv28 * 78 / 100;
4630     div_max = clamp_val(div_max, 0U, 63U);
4631    
4632     - f_3db_hz = c->symbol_rate * 135UL / 200UL;
4633     + f_3db_hz = mult_frac(c->symbol_rate, 135, 200);
4634     f_3db_hz += 2000000U + (frequency_offset_khz * 1000U);
4635     f_3db_hz = clamp(f_3db_hz, 7000000U, 40000000U);
4636    
4637     diff --git a/drivers/media/usb/em28xx/em28xx-cards.c b/drivers/media/usb/em28xx/em28xx-cards.c
4638     index 9da812b8a786..9c61c3f37778 100644
4639     --- a/drivers/media/usb/em28xx/em28xx-cards.c
4640     +++ b/drivers/media/usb/em28xx/em28xx-cards.c
4641     @@ -3098,16 +3098,6 @@ static int em28xx_init_dev(struct em28xx *dev, struct usb_device *udev,
4642     }
4643     }
4644    
4645     - if (dev->chip_id == CHIP_ID_EM2870 ||
4646     - dev->chip_id == CHIP_ID_EM2874 ||
4647     - dev->chip_id == CHIP_ID_EM28174 ||
4648     - dev->chip_id == CHIP_ID_EM28178) {
4649     - /* Digital only device - don't load any alsa module */
4650     - dev->audio_mode.has_audio = false;
4651     - dev->has_audio_class = false;
4652     - dev->has_alsa_audio = false;
4653     - }
4654     -
4655     if (chip_name != default_chip_name)
4656     printk(KERN_INFO DRIVER_NAME
4657     ": chip ID is %s\n", chip_name);
4658     @@ -3377,7 +3367,6 @@ static int em28xx_usb_probe(struct usb_interface *interface,
4659     dev->alt = -1;
4660     dev->is_audio_only = has_audio && !(has_video || has_dvb);
4661     dev->has_alsa_audio = has_audio;
4662     - dev->audio_mode.has_audio = has_audio;
4663     dev->has_video = has_video;
4664     dev->ifnum = ifnum;
4665    
4666     diff --git a/drivers/media/usb/em28xx/em28xx-core.c b/drivers/media/usb/em28xx/em28xx-core.c
4667     index 523d7e92bf47..0f6caa4912b8 100644
4668     --- a/drivers/media/usb/em28xx/em28xx-core.c
4669     +++ b/drivers/media/usb/em28xx/em28xx-core.c
4670     @@ -506,8 +506,18 @@ int em28xx_audio_setup(struct em28xx *dev)
4671     int vid1, vid2, feat, cfg;
4672     u32 vid;
4673    
4674     - if (!dev->audio_mode.has_audio)
4675     + if (dev->chip_id == CHIP_ID_EM2870 ||
4676     + dev->chip_id == CHIP_ID_EM2874 ||
4677     + dev->chip_id == CHIP_ID_EM28174 ||
4678     + dev->chip_id == CHIP_ID_EM28178) {
4679     + /* Digital only device - don't load any alsa module */
4680     + dev->audio_mode.has_audio = false;
4681     + dev->has_audio_class = false;
4682     + dev->has_alsa_audio = false;
4683     return 0;
4684     + }
4685     +
4686     + dev->audio_mode.has_audio = true;
4687    
4688     /* See how this device is configured */
4689     cfg = em28xx_read_reg(dev, EM28XX_R00_CHIPCFG);
4690     diff --git a/drivers/media/usb/em28xx/em28xx-video.c b/drivers/media/usb/em28xx/em28xx-video.c
4691     index 29abc379551e..5122cbe085f1 100644
4692     --- a/drivers/media/usb/em28xx/em28xx-video.c
4693     +++ b/drivers/media/usb/em28xx/em28xx-video.c
4694     @@ -435,7 +435,10 @@ static inline void finish_buffer(struct em28xx *dev,
4695     em28xx_isocdbg("[%p/%d] wakeup\n", buf, buf->top_field);
4696    
4697     buf->vb.v4l2_buf.sequence = dev->v4l2->field_count++;
4698     - buf->vb.v4l2_buf.field = V4L2_FIELD_INTERLACED;
4699     + if (dev->v4l2->progressive)
4700     + buf->vb.v4l2_buf.field = V4L2_FIELD_NONE;
4701     + else
4702     + buf->vb.v4l2_buf.field = V4L2_FIELD_INTERLACED;
4703     v4l2_get_timestamp(&buf->vb.v4l2_buf.timestamp);
4704    
4705     vb2_buffer_done(&buf->vb, VB2_BUF_STATE_DONE);
4706     @@ -994,13 +997,16 @@ static void em28xx_stop_streaming(struct vb2_queue *vq)
4707     }
4708    
4709     spin_lock_irqsave(&dev->slock, flags);
4710     + if (dev->usb_ctl.vid_buf != NULL) {
4711     + vb2_buffer_done(&dev->usb_ctl.vid_buf->vb, VB2_BUF_STATE_ERROR);
4712     + dev->usb_ctl.vid_buf = NULL;
4713     + }
4714     while (!list_empty(&vidq->active)) {
4715     struct em28xx_buffer *buf;
4716     buf = list_entry(vidq->active.next, struct em28xx_buffer, list);
4717     list_del(&buf->list);
4718     vb2_buffer_done(&buf->vb, VB2_BUF_STATE_ERROR);
4719     }
4720     - dev->usb_ctl.vid_buf = NULL;
4721     spin_unlock_irqrestore(&dev->slock, flags);
4722     }
4723    
4724     @@ -1021,13 +1027,16 @@ void em28xx_stop_vbi_streaming(struct vb2_queue *vq)
4725     }
4726    
4727     spin_lock_irqsave(&dev->slock, flags);
4728     + if (dev->usb_ctl.vbi_buf != NULL) {
4729     + vb2_buffer_done(&dev->usb_ctl.vbi_buf->vb, VB2_BUF_STATE_ERROR);
4730     + dev->usb_ctl.vbi_buf = NULL;
4731     + }
4732     while (!list_empty(&vbiq->active)) {
4733     struct em28xx_buffer *buf;
4734     buf = list_entry(vbiq->active.next, struct em28xx_buffer, list);
4735     list_del(&buf->list);
4736     vb2_buffer_done(&buf->vb, VB2_BUF_STATE_ERROR);
4737     }
4738     - dev->usb_ctl.vbi_buf = NULL;
4739     spin_unlock_irqrestore(&dev->slock, flags);
4740     }
4741    
4742     diff --git a/drivers/media/usb/siano/smsusb.c b/drivers/media/usb/siano/smsusb.c
4743     index 1836a416d806..89c86ee2b225 100644
4744     --- a/drivers/media/usb/siano/smsusb.c
4745     +++ b/drivers/media/usb/siano/smsusb.c
4746     @@ -655,6 +655,8 @@ static const struct usb_device_id smsusb_id_table[] = {
4747     .driver_info = SMS1XXX_BOARD_ONDA_MDTV_DATA_CARD },
4748     { USB_DEVICE(0x3275, 0x0080),
4749     .driver_info = SMS1XXX_BOARD_SIANO_RIO },
4750     + { USB_DEVICE(0x2013, 0x0257),
4751     + .driver_info = SMS1XXX_BOARD_PCTV_77E },
4752     { } /* Terminating entry */
4753     };
4754    
4755     diff --git a/drivers/media/usb/uvc/uvc_driver.c b/drivers/media/usb/uvc/uvc_driver.c
4756     index f8135f4e3b52..f3c126915ff2 100644
4757     --- a/drivers/media/usb/uvc/uvc_driver.c
4758     +++ b/drivers/media/usb/uvc/uvc_driver.c
4759     @@ -2229,6 +2229,15 @@ static struct usb_device_id uvc_ids[] = {
4760     .bInterfaceSubClass = 1,
4761     .bInterfaceProtocol = 0,
4762     .driver_info = UVC_QUIRK_PROBE_DEF },
4763     + /* Dell XPS M1330 (OmniVision OV7670 webcam) */
4764     + { .match_flags = USB_DEVICE_ID_MATCH_DEVICE
4765     + | USB_DEVICE_ID_MATCH_INT_INFO,
4766     + .idVendor = 0x05a9,
4767     + .idProduct = 0x7670,
4768     + .bInterfaceClass = USB_CLASS_VIDEO,
4769     + .bInterfaceSubClass = 1,
4770     + .bInterfaceProtocol = 0,
4771     + .driver_info = UVC_QUIRK_PROBE_DEF },
4772     /* Apple Built-In iSight */
4773     { .match_flags = USB_DEVICE_ID_MATCH_DEVICE
4774     | USB_DEVICE_ID_MATCH_INT_INFO,
4775     diff --git a/drivers/media/v4l2-core/v4l2-common.c b/drivers/media/v4l2-core/v4l2-common.c
4776     index ccaa38f65cf1..2e9d81f4c1a5 100644
4777     --- a/drivers/media/v4l2-core/v4l2-common.c
4778     +++ b/drivers/media/v4l2-core/v4l2-common.c
4779     @@ -435,16 +435,13 @@ static unsigned int clamp_align(unsigned int x, unsigned int min,
4780     /* Bits that must be zero to be aligned */
4781     unsigned int mask = ~((1 << align) - 1);
4782    
4783     + /* Clamp to aligned min and max */
4784     + x = clamp(x, (min + ~mask) & mask, max & mask);
4785     +
4786     /* Round to nearest aligned value */
4787     if (align)
4788     x = (x + (1 << (align - 1))) & mask;
4789    
4790     - /* Clamp to aligned value of min and max */
4791     - if (x < min)
4792     - x = (min + ~mask) & mask;
4793     - else if (x > max)
4794     - x = max & mask;
4795     -
4796     return x;
4797     }
4798    
4799     diff --git a/drivers/media/v4l2-core/videobuf-dma-sg.c b/drivers/media/v4l2-core/videobuf-dma-sg.c
4800     index 3c8cc023a5a5..3ff15f1c9d70 100644
4801     --- a/drivers/media/v4l2-core/videobuf-dma-sg.c
4802     +++ b/drivers/media/v4l2-core/videobuf-dma-sg.c
4803     @@ -253,9 +253,11 @@ int videobuf_dma_init_kernel(struct videobuf_dmabuf *dma, int direction,
4804     return 0;
4805     out_free_pages:
4806     while (i > 0) {
4807     - void *addr = page_address(dma->vaddr_pages[i]);
4808     - dma_free_coherent(dma->dev, PAGE_SIZE, addr, dma->dma_addr[i]);
4809     + void *addr;
4810     +
4811     i--;
4812     + addr = page_address(dma->vaddr_pages[i]);
4813     + dma_free_coherent(dma->dev, PAGE_SIZE, addr, dma->dma_addr[i]);
4814     }
4815     kfree(dma->dma_addr);
4816     dma->dma_addr = NULL;
4817     diff --git a/drivers/mfd/rtsx_pcr.c b/drivers/mfd/rtsx_pcr.c
4818     index d01b8c249231..f2643c221d34 100644
4819     --- a/drivers/mfd/rtsx_pcr.c
4820     +++ b/drivers/mfd/rtsx_pcr.c
4821     @@ -1197,7 +1197,7 @@ static int rtsx_pci_probe(struct pci_dev *pcidev,
4822     pcr->msi_en = msi_en;
4823     if (pcr->msi_en) {
4824     ret = pci_enable_msi(pcidev);
4825     - if (ret < 0)
4826     + if (ret)
4827     pcr->msi_en = false;
4828     }
4829    
4830     diff --git a/drivers/mfd/ti_am335x_tscadc.c b/drivers/mfd/ti_am335x_tscadc.c
4831     index dd4bf5816221..121add8be456 100644
4832     --- a/drivers/mfd/ti_am335x_tscadc.c
4833     +++ b/drivers/mfd/ti_am335x_tscadc.c
4834     @@ -53,11 +53,11 @@ void am335x_tsc_se_set_cache(struct ti_tscadc_dev *tsadc, u32 val)
4835     unsigned long flags;
4836    
4837     spin_lock_irqsave(&tsadc->reg_lock, flags);
4838     - tsadc->reg_se_cache = val;
4839     + tsadc->reg_se_cache |= val;
4840     if (tsadc->adc_waiting)
4841     wake_up(&tsadc->reg_se_wait);
4842     else if (!tsadc->adc_in_use)
4843     - tscadc_writel(tsadc, REG_SE, val);
4844     + tscadc_writel(tsadc, REG_SE, tsadc->reg_se_cache);
4845    
4846     spin_unlock_irqrestore(&tsadc->reg_lock, flags);
4847     }
4848     @@ -96,6 +96,7 @@ static void am335x_tscadc_need_adc(struct ti_tscadc_dev *tsadc)
4849     void am335x_tsc_se_set_once(struct ti_tscadc_dev *tsadc, u32 val)
4850     {
4851     spin_lock_irq(&tsadc->reg_lock);
4852     + tsadc->reg_se_cache |= val;
4853     am335x_tscadc_need_adc(tsadc);
4854    
4855     tscadc_writel(tsadc, REG_SE, val);
4856     diff --git a/drivers/mmc/core/sdio.c b/drivers/mmc/core/sdio.c
4857     index e636d9e99e4a..3fc40a7140a8 100644
4858     --- a/drivers/mmc/core/sdio.c
4859     +++ b/drivers/mmc/core/sdio.c
4860     @@ -992,8 +992,16 @@ static int mmc_sdio_resume(struct mmc_host *host)
4861     }
4862     }
4863    
4864     - if (!err && host->sdio_irqs)
4865     - wake_up_process(host->sdio_irq_thread);
4866     + if (!err && host->sdio_irqs) {
4867     + if (!(host->caps2 & MMC_CAP2_SDIO_IRQ_NOTHREAD)) {
4868     + wake_up_process(host->sdio_irq_thread);
4869     + } else if (host->caps & MMC_CAP_SDIO_IRQ) {
4870     + mmc_host_clk_hold(host);
4871     + host->ops->enable_sdio_irq(host, 1);
4872     + mmc_host_clk_release(host);
4873     + }
4874     + }
4875     +
4876     mmc_release_host(host);
4877    
4878     host->pm_flags &= ~MMC_PM_KEEP_POWER;
4879     diff --git a/drivers/mmc/core/sdio_irq.c b/drivers/mmc/core/sdio_irq.c
4880     index 5cc13c8d35bb..696eca493844 100644
4881     --- a/drivers/mmc/core/sdio_irq.c
4882     +++ b/drivers/mmc/core/sdio_irq.c
4883     @@ -208,7 +208,7 @@ static int sdio_card_irq_get(struct mmc_card *card)
4884     host->sdio_irqs--;
4885     return err;
4886     }
4887     - } else {
4888     + } else if (host->caps & MMC_CAP_SDIO_IRQ) {
4889     mmc_host_clk_hold(host);
4890     host->ops->enable_sdio_irq(host, 1);
4891     mmc_host_clk_release(host);
4892     @@ -229,7 +229,7 @@ static int sdio_card_irq_put(struct mmc_card *card)
4893     if (!(host->caps2 & MMC_CAP2_SDIO_IRQ_NOTHREAD)) {
4894     atomic_set(&host->sdio_irq_thread_abort, 1);
4895     kthread_stop(host->sdio_irq_thread);
4896     - } else {
4897     + } else if (host->caps & MMC_CAP_SDIO_IRQ) {
4898     mmc_host_clk_hold(host);
4899     host->ops->enable_sdio_irq(host, 0);
4900     mmc_host_clk_release(host);
4901     diff --git a/drivers/mmc/core/slot-gpio.c b/drivers/mmc/core/slot-gpio.c
4902     index 5f89cb83d5f0..187f48a5795a 100644
4903     --- a/drivers/mmc/core/slot-gpio.c
4904     +++ b/drivers/mmc/core/slot-gpio.c
4905     @@ -221,8 +221,6 @@ int mmc_gpio_request_cd(struct mmc_host *host, unsigned int gpio,
4906     ctx->override_cd_active_level = true;
4907     ctx->cd_gpio = gpio_to_desc(gpio);
4908    
4909     - mmc_gpiod_request_cd_irq(host);
4910     -
4911     return 0;
4912     }
4913     EXPORT_SYMBOL(mmc_gpio_request_cd);
4914     diff --git a/drivers/mmc/host/mmc_spi.c b/drivers/mmc/host/mmc_spi.c
4915     index cc8d4a6099cd..e4a07546f8b6 100644
4916     --- a/drivers/mmc/host/mmc_spi.c
4917     +++ b/drivers/mmc/host/mmc_spi.c
4918     @@ -1436,6 +1436,7 @@ static int mmc_spi_probe(struct spi_device *spi)
4919     host->pdata->cd_debounce);
4920     if (status != 0)
4921     goto fail_add_host;
4922     + mmc_gpiod_request_cd_irq(mmc);
4923     }
4924    
4925     if (host->pdata && host->pdata->flags & MMC_SPI_USE_RO_GPIO) {
4926     diff --git a/drivers/mmc/host/rtsx_pci_sdmmc.c b/drivers/mmc/host/rtsx_pci_sdmmc.c
4927     index dfde4a210238..b2537e2f26b1 100644
4928     --- a/drivers/mmc/host/rtsx_pci_sdmmc.c
4929     +++ b/drivers/mmc/host/rtsx_pci_sdmmc.c
4930     @@ -412,6 +412,13 @@ static void sd_send_cmd_get_rsp(struct realtek_pci_sdmmc *host,
4931     }
4932    
4933     if (rsp_type == SD_RSP_TYPE_R2) {
4934     + /*
4935     + * The controller offloads the last byte {CRC-7, end bit 1'b1}
4936     + * of response type R2. Assign dummy CRC, 0, and end bit to the
4937     + * byte(ptr[16], goes into the LSB of resp[3] later).
4938     + */
4939     + ptr[16] = 1;
4940     +
4941     for (i = 0; i < 4; i++) {
4942     cmd->resp[i] = get_unaligned_be32(ptr + 1 + i * 4);
4943     dev_dbg(sdmmc_dev(host), "cmd->resp[%d] = 0x%08x\n",
4944     diff --git a/drivers/mmc/host/rtsx_usb_sdmmc.c b/drivers/mmc/host/rtsx_usb_sdmmc.c
4945     index 5d3766e792f0..d9153a7d160d 100644
4946     --- a/drivers/mmc/host/rtsx_usb_sdmmc.c
4947     +++ b/drivers/mmc/host/rtsx_usb_sdmmc.c
4948     @@ -435,6 +435,13 @@ static void sd_send_cmd_get_rsp(struct rtsx_usb_sdmmc *host,
4949     }
4950    
4951     if (rsp_type == SD_RSP_TYPE_R2) {
4952     + /*
4953     + * The controller offloads the last byte {CRC-7, end bit 1'b1}
4954     + * of response type R2. Assign dummy CRC, 0, and end bit to the
4955     + * byte(ptr[16], goes into the LSB of resp[3] later).
4956     + */
4957     + ptr[16] = 1;
4958     +
4959     for (i = 0; i < 4; i++) {
4960     cmd->resp[i] = get_unaligned_be32(ptr + 1 + i * 4);
4961     dev_dbg(sdmmc_dev(host), "cmd->resp[%d] = 0x%08x\n",
4962     diff --git a/drivers/mmc/host/sdhci-pxav3.c b/drivers/mmc/host/sdhci-pxav3.c
4963     index 6f842fb8e6b8..3434c7933de0 100644
4964     --- a/drivers/mmc/host/sdhci-pxav3.c
4965     +++ b/drivers/mmc/host/sdhci-pxav3.c
4966     @@ -224,12 +224,11 @@ static void pxav3_set_uhs_signaling(struct sdhci_host *host, unsigned int uhs)
4967    
4968     static const struct sdhci_ops pxav3_sdhci_ops = {
4969     .set_clock = sdhci_set_clock,
4970     - .set_uhs_signaling = pxav3_set_uhs_signaling,
4971     .platform_send_init_74_clocks = pxav3_gen_init_74_clocks,
4972     .get_max_clock = sdhci_pltfm_clk_get_max_clock,
4973     .set_bus_width = sdhci_set_bus_width,
4974     .reset = pxav3_reset,
4975     - .set_uhs_signaling = sdhci_set_uhs_signaling,
4976     + .set_uhs_signaling = pxav3_set_uhs_signaling,
4977     };
4978    
4979     static struct sdhci_pltfm_data sdhci_pxav3_pdata = {
4980     diff --git a/drivers/mmc/host/sdhci-s3c.c b/drivers/mmc/host/sdhci-s3c.c
4981     index fa5954a05449..1e47903fa184 100644
4982     --- a/drivers/mmc/host/sdhci-s3c.c
4983     +++ b/drivers/mmc/host/sdhci-s3c.c
4984     @@ -606,8 +606,6 @@ static int sdhci_s3c_probe(struct platform_device *pdev)
4985     ret = sdhci_add_host(host);
4986     if (ret) {
4987     dev_err(dev, "sdhci_add_host() failed\n");
4988     - pm_runtime_forbid(&pdev->dev);
4989     - pm_runtime_get_noresume(&pdev->dev);
4990     goto err_req_regs;
4991     }
4992    
4993     @@ -618,6 +616,8 @@ static int sdhci_s3c_probe(struct platform_device *pdev)
4994     return 0;
4995    
4996     err_req_regs:
4997     + pm_runtime_disable(&pdev->dev);
4998     +
4999     err_no_busclks:
5000     clk_disable_unprepare(sc->clk_io);
5001    
5002     diff --git a/drivers/mmc/host/sdhci-sirf.c b/drivers/mmc/host/sdhci-sirf.c
5003     index 17004531d089..b6db259aea9e 100644
5004     --- a/drivers/mmc/host/sdhci-sirf.c
5005     +++ b/drivers/mmc/host/sdhci-sirf.c
5006     @@ -94,6 +94,7 @@ static int sdhci_sirf_probe(struct platform_device *pdev)
5007     ret);
5008     goto err_request_cd;
5009     }
5010     + mmc_gpiod_request_cd_irq(host->mmc);
5011     }
5012    
5013     return 0;
5014     diff --git a/drivers/mmc/host/tmio_mmc_pio.c b/drivers/mmc/host/tmio_mmc_pio.c
5015     index faf0924e71cb..59d9a7249b2e 100644
5016     --- a/drivers/mmc/host/tmio_mmc_pio.c
5017     +++ b/drivers/mmc/host/tmio_mmc_pio.c
5018     @@ -1103,6 +1103,7 @@ int tmio_mmc_host_probe(struct tmio_mmc_host **host,
5019     tmio_mmc_host_remove(_host);
5020     return ret;
5021     }
5022     + mmc_gpiod_request_cd_irq(mmc);
5023     }
5024    
5025     *host = _host;
5026     diff --git a/drivers/mtd/chips/cfi_cmdset_0001.c b/drivers/mtd/chips/cfi_cmdset_0001.c
5027     index a7543ba3e190..3096f3ded3ad 100644
5028     --- a/drivers/mtd/chips/cfi_cmdset_0001.c
5029     +++ b/drivers/mtd/chips/cfi_cmdset_0001.c
5030     @@ -2590,6 +2590,8 @@ static void cfi_intelext_resume(struct mtd_info *mtd)
5031    
5032     /* Go to known state. Chip may have been power cycled */
5033     if (chip->state == FL_PM_SUSPENDED) {
5034     + /* Refresh LH28F640BF Partition Config. Register */
5035     + fixup_LH28F640BF(mtd);
5036     map_write(map, CMD(0xFF), cfi->chips[i].start);
5037     chip->oldstate = chip->state = FL_READY;
5038     wake_up(&chip->wq);
5039     diff --git a/drivers/mtd/devices/m25p80.c b/drivers/mtd/devices/m25p80.c
5040     index ed7e0a1bed3c..5935f0a3ac6f 100644
5041     --- a/drivers/mtd/devices/m25p80.c
5042     +++ b/drivers/mtd/devices/m25p80.c
5043     @@ -245,6 +245,56 @@ static int m25p_remove(struct spi_device *spi)
5044     }
5045    
5046    
5047     +/*
5048     + * XXX This needs to be kept in sync with spi_nor_ids. We can't share
5049     + * it with spi-nor, because if this is built as a module then modpost
5050     + * won't be able to read it and add appropriate aliases.
5051     + */
5052     +static const struct spi_device_id m25p_ids[] = {
5053     + {"at25fs010"}, {"at25fs040"}, {"at25df041a"}, {"at25df321a"},
5054     + {"at25df641"}, {"at26f004"}, {"at26df081a"}, {"at26df161a"},
5055     + {"at26df321"}, {"at45db081d"},
5056     + {"en25f32"}, {"en25p32"}, {"en25q32b"}, {"en25p64"},
5057     + {"en25q64"}, {"en25qh128"}, {"en25qh256"},
5058     + {"f25l32pa"},
5059     + {"mr25h256"}, {"mr25h10"},
5060     + {"gd25q32"}, {"gd25q64"},
5061     + {"160s33b"}, {"320s33b"}, {"640s33b"},
5062     + {"mx25l2005a"}, {"mx25l4005a"}, {"mx25l8005"}, {"mx25l1606e"},
5063     + {"mx25l3205d"}, {"mx25l3255e"}, {"mx25l6405d"}, {"mx25l12805d"},
5064     + {"mx25l12855e"},{"mx25l25635e"},{"mx25l25655e"},{"mx66l51235l"},
5065     + {"mx66l1g55g"},
5066     + {"n25q064"}, {"n25q128a11"}, {"n25q128a13"}, {"n25q256a"},
5067     + {"n25q512a"}, {"n25q512ax3"}, {"n25q00"},
5068     + {"pm25lv512"}, {"pm25lv010"}, {"pm25lq032"},
5069     + {"s25sl032p"}, {"s25sl064p"}, {"s25fl256s0"}, {"s25fl256s1"},
5070     + {"s25fl512s"}, {"s70fl01gs"}, {"s25sl12800"}, {"s25sl12801"},
5071     + {"s25fl129p0"}, {"s25fl129p1"}, {"s25sl004a"}, {"s25sl008a"},
5072     + {"s25sl016a"}, {"s25sl032a"}, {"s25sl064a"}, {"s25fl008k"},
5073     + {"s25fl016k"}, {"s25fl064k"},
5074     + {"sst25vf040b"},{"sst25vf080b"},{"sst25vf016b"},{"sst25vf032b"},
5075     + {"sst25vf064c"},{"sst25wf512"}, {"sst25wf010"}, {"sst25wf020"},
5076     + {"sst25wf040"},
5077     + {"m25p05"}, {"m25p10"}, {"m25p20"}, {"m25p40"},
5078     + {"m25p80"}, {"m25p16"}, {"m25p32"}, {"m25p64"},
5079     + {"m25p128"}, {"n25q032"},
5080     + {"m25p05-nonjedec"}, {"m25p10-nonjedec"}, {"m25p20-nonjedec"},
5081     + {"m25p40-nonjedec"}, {"m25p80-nonjedec"}, {"m25p16-nonjedec"},
5082     + {"m25p32-nonjedec"}, {"m25p64-nonjedec"}, {"m25p128-nonjedec"},
5083     + {"m45pe10"}, {"m45pe80"}, {"m45pe16"},
5084     + {"m25pe20"}, {"m25pe80"}, {"m25pe16"},
5085     + {"m25px16"}, {"m25px32"}, {"m25px32-s0"}, {"m25px32-s1"},
5086     + {"m25px64"},
5087     + {"w25x10"}, {"w25x20"}, {"w25x40"}, {"w25x80"},
5088     + {"w25x16"}, {"w25x32"}, {"w25q32"}, {"w25q32dw"},
5089     + {"w25x64"}, {"w25q64"}, {"w25q128"}, {"w25q80"},
5090     + {"w25q80bl"}, {"w25q128"}, {"w25q256"}, {"cat25c11"},
5091     + {"cat25c03"}, {"cat25c09"}, {"cat25c17"}, {"cat25128"},
5092     + { },
5093     +};
5094     +MODULE_DEVICE_TABLE(spi, m25p_ids);
5095     +
5096     +
5097     static struct spi_driver m25p80_driver = {
5098     .driver = {
5099     .name = "m25p80",
5100     diff --git a/drivers/mtd/ubi/block.c b/drivers/mtd/ubi/block.c
5101     index 33c64955d4d7..5f9a1e2f3fd4 100644
5102     --- a/drivers/mtd/ubi/block.c
5103     +++ b/drivers/mtd/ubi/block.c
5104     @@ -188,8 +188,9 @@ static int ubiblock_read_to_buf(struct ubiblock *dev, char *buffer,
5105    
5106     ret = ubi_read(dev->desc, leb, buffer, offset, len);
5107     if (ret) {
5108     - ubi_err("%s ubi_read error %d",
5109     - dev->gd->disk_name, ret);
5110     + ubi_err("%s: error %d while reading from LEB %d (offset %d, "
5111     + "length %d)", dev->gd->disk_name, ret, leb, offset,
5112     + len);
5113     return ret;
5114     }
5115     return 0;
5116     @@ -378,7 +379,7 @@ int ubiblock_create(struct ubi_volume_info *vi)
5117     {
5118     struct ubiblock *dev;
5119     struct gendisk *gd;
5120     - u64 disk_capacity = ((u64)vi->size * vi->usable_leb_size) >> 9;
5121     + u64 disk_capacity = vi->used_bytes >> 9;
5122     int ret;
5123    
5124     if ((sector_t)disk_capacity != disk_capacity)
5125     @@ -502,7 +503,7 @@ int ubiblock_remove(struct ubi_volume_info *vi)
5126     static int ubiblock_resize(struct ubi_volume_info *vi)
5127     {
5128     struct ubiblock *dev;
5129     - u64 disk_capacity = ((u64)vi->size * vi->usable_leb_size) >> 9;
5130     + u64 disk_capacity = vi->used_bytes >> 9;
5131    
5132     if ((sector_t)disk_capacity != disk_capacity) {
5133     ubi_warn("%s: the volume is too big, cannot resize (%d LEBs)",
5134     @@ -522,8 +523,12 @@ static int ubiblock_resize(struct ubi_volume_info *vi)
5135     }
5136    
5137     mutex_lock(&dev->dev_mutex);
5138     - set_capacity(dev->gd, disk_capacity);
5139     - ubi_msg("%s resized to %d LEBs", dev->gd->disk_name, vi->size);
5140     +
5141     + if (get_capacity(dev->gd) != disk_capacity) {
5142     + set_capacity(dev->gd, disk_capacity);
5143     + ubi_msg("%s resized to %lld bytes", dev->gd->disk_name,
5144     + vi->used_bytes);
5145     + }
5146     mutex_unlock(&dev->dev_mutex);
5147     mutex_unlock(&devices_mutex);
5148     return 0;
5149     @@ -547,6 +552,14 @@ static int ubiblock_notify(struct notifier_block *nb,
5150     case UBI_VOLUME_RESIZED:
5151     ubiblock_resize(&nt->vi);
5152     break;
5153     + case UBI_VOLUME_UPDATED:
5154     + /*
5155     + * If the volume is static, a content update might mean the
5156     + * size (i.e. used_bytes) was also changed.
5157     + */
5158     + if (nt->vi.vol_type == UBI_STATIC_VOLUME)
5159     + ubiblock_resize(&nt->vi);
5160     + break;
5161     default:
5162     break;
5163     }
5164     diff --git a/drivers/mtd/ubi/cdev.c b/drivers/mtd/ubi/cdev.c
5165     index 7646220ca6e2..20aeb277d8d4 100644
5166     --- a/drivers/mtd/ubi/cdev.c
5167     +++ b/drivers/mtd/ubi/cdev.c
5168     @@ -425,8 +425,10 @@ static long vol_cdev_ioctl(struct file *file, unsigned int cmd,
5169     break;
5170    
5171     err = ubi_start_update(ubi, vol, bytes);
5172     - if (bytes == 0)
5173     + if (bytes == 0) {
5174     + ubi_volume_notify(ubi, vol, UBI_VOLUME_UPDATED);
5175     revoke_exclusive(desc, UBI_READWRITE);
5176     + }
5177     break;
5178     }
5179    
5180     diff --git a/drivers/mtd/ubi/fastmap.c b/drivers/mtd/ubi/fastmap.c
5181     index 0431b46d9fd9..c701369090fb 100644
5182     --- a/drivers/mtd/ubi/fastmap.c
5183     +++ b/drivers/mtd/ubi/fastmap.c
5184     @@ -330,6 +330,7 @@ static int process_pool_aeb(struct ubi_device *ubi, struct ubi_attach_info *ai,
5185     av = tmp_av;
5186     else {
5187     ubi_err("orphaned volume in fastmap pool!");
5188     + kmem_cache_free(ai->aeb_slab_cache, new_aeb);
5189     return UBI_BAD_FASTMAP;
5190     }
5191    
5192     diff --git a/drivers/net/Kconfig b/drivers/net/Kconfig
5193     index c6f6f69f8961..2f8f251a926f 100644
5194     --- a/drivers/net/Kconfig
5195     +++ b/drivers/net/Kconfig
5196     @@ -135,6 +135,7 @@ config MACVLAN
5197     config MACVTAP
5198     tristate "MAC-VLAN based tap driver"
5199     depends on MACVLAN
5200     + depends on INET
5201     help
5202     This adds a specialized tap character device driver that is based
5203     on the MAC-VLAN network interface, called macvtap. A macvtap device
5204     @@ -201,6 +202,7 @@ config RIONET_RX_SIZE
5205    
5206     config TUN
5207     tristate "Universal TUN/TAP device driver support"
5208     + depends on INET
5209     select CRC32
5210     ---help---
5211     TUN/TAP provides packet reception and transmission for user space
5212     diff --git a/drivers/net/ethernet/chelsio/cxgb4/cxgb4_main.c b/drivers/net/ethernet/chelsio/cxgb4/cxgb4_main.c
5213     index e5be511a3c38..fac3821cef87 100644
5214     --- a/drivers/net/ethernet/chelsio/cxgb4/cxgb4_main.c
5215     +++ b/drivers/net/ethernet/chelsio/cxgb4/cxgb4_main.c
5216     @@ -6557,6 +6557,7 @@ static int init_one(struct pci_dev *pdev, const struct pci_device_id *ent)
5217    
5218     spin_lock_init(&adapter->stats_lock);
5219     spin_lock_init(&adapter->tid_release_lock);
5220     + spin_lock_init(&adapter->win0_lock);
5221    
5222     INIT_WORK(&adapter->tid_release_task, process_tid_release_list);
5223     INIT_WORK(&adapter->db_full_task, process_db_full);
5224     diff --git a/drivers/net/ethernet/mellanox/mlx4/en_tx.c b/drivers/net/ethernet/mellanox/mlx4/en_tx.c
5225     index dae3da6d8dd0..c2c77434d147 100644
5226     --- a/drivers/net/ethernet/mellanox/mlx4/en_tx.c
5227     +++ b/drivers/net/ethernet/mellanox/mlx4/en_tx.c
5228     @@ -808,8 +808,11 @@ netdev_tx_t mlx4_en_xmit(struct sk_buff *skb, struct net_device *dev)
5229     tx_desc->ctrl.fence_size = (real_size / 16) & 0x3f;
5230     tx_desc->ctrl.srcrb_flags = priv->ctrl_flags;
5231     if (likely(skb->ip_summed == CHECKSUM_PARTIAL)) {
5232     - tx_desc->ctrl.srcrb_flags |= cpu_to_be32(MLX4_WQE_CTRL_IP_CSUM |
5233     - MLX4_WQE_CTRL_TCP_UDP_CSUM);
5234     + if (!skb->encapsulation)
5235     + tx_desc->ctrl.srcrb_flags |= cpu_to_be32(MLX4_WQE_CTRL_IP_CSUM |
5236     + MLX4_WQE_CTRL_TCP_UDP_CSUM);
5237     + else
5238     + tx_desc->ctrl.srcrb_flags |= cpu_to_be32(MLX4_WQE_CTRL_IP_CSUM);
5239     ring->tx_csum++;
5240     }
5241    
5242     diff --git a/drivers/net/ethernet/mellanox/mlx4/mcg.c b/drivers/net/ethernet/mellanox/mlx4/mcg.c
5243     index ca0f98c95105..872843179f44 100644
5244     --- a/drivers/net/ethernet/mellanox/mlx4/mcg.c
5245     +++ b/drivers/net/ethernet/mellanox/mlx4/mcg.c
5246     @@ -955,6 +955,10 @@ static void mlx4_err_rule(struct mlx4_dev *dev, char *str,
5247     cur->ib.dst_gid_msk);
5248     break;
5249    
5250     + case MLX4_NET_TRANS_RULE_ID_VXLAN:
5251     + len += snprintf(buf + len, BUF_SIZE - len,
5252     + "VNID = %d ", be32_to_cpu(cur->vxlan.vni));
5253     + break;
5254     case MLX4_NET_TRANS_RULE_ID_IPV6:
5255     break;
5256    
5257     diff --git a/drivers/net/ethernet/stmicro/stmmac/stmmac_pci.c b/drivers/net/ethernet/stmicro/stmmac/stmmac_pci.c
5258     index 655a23bbc451..e17a970eaf2b 100644
5259     --- a/drivers/net/ethernet/stmicro/stmmac/stmmac_pci.c
5260     +++ b/drivers/net/ethernet/stmicro/stmmac/stmmac_pci.c
5261     @@ -33,6 +33,7 @@ static struct stmmac_dma_cfg dma_cfg;
5262     static void stmmac_default_data(void)
5263     {
5264     memset(&plat_dat, 0, sizeof(struct plat_stmmacenet_data));
5265     +
5266     plat_dat.bus_id = 1;
5267     plat_dat.phy_addr = 0;
5268     plat_dat.interface = PHY_INTERFACE_MODE_GMII;
5269     @@ -47,6 +48,12 @@ static void stmmac_default_data(void)
5270     dma_cfg.pbl = 32;
5271     dma_cfg.burst_len = DMA_AXI_BLEN_256;
5272     plat_dat.dma_cfg = &dma_cfg;
5273     +
5274     + /* Set default value for multicast hash bins */
5275     + plat_dat.multicast_filter_bins = HASH_TABLE_SIZE;
5276     +
5277     + /* Set default value for unicast filter entries */
5278     + plat_dat.unicast_filter_entries = 1;
5279     }
5280    
5281     /**
5282     diff --git a/drivers/net/hyperv/netvsc_drv.c b/drivers/net/hyperv/netvsc_drv.c
5283     index 0fcb5e7eb073..148fda3be898 100644
5284     --- a/drivers/net/hyperv/netvsc_drv.c
5285     +++ b/drivers/net/hyperv/netvsc_drv.c
5286     @@ -556,6 +556,7 @@ do_lso:
5287     do_send:
5288     /* Start filling in the page buffers with the rndis hdr */
5289     rndis_msg->msg_len += rndis_msg_size;
5290     + packet->total_data_buflen = rndis_msg->msg_len;
5291     packet->page_buf_cnt = init_page_array(rndis_msg, rndis_msg_size,
5292     skb, &packet->page_buf[0]);
5293    
5294     diff --git a/drivers/net/macvlan.c b/drivers/net/macvlan.c
5295     index 726edabff26b..5f17ad02917c 100644
5296     --- a/drivers/net/macvlan.c
5297     +++ b/drivers/net/macvlan.c
5298     @@ -201,7 +201,7 @@ static void macvlan_process_broadcast(struct work_struct *w)
5299     struct sk_buff *skb;
5300     struct sk_buff_head list;
5301    
5302     - skb_queue_head_init(&list);
5303     + __skb_queue_head_init(&list);
5304    
5305     spin_lock_bh(&port->bc_queue.lock);
5306     skb_queue_splice_tail_init(&port->bc_queue, &list);
5307     @@ -941,9 +941,15 @@ static void macvlan_port_destroy(struct net_device *dev)
5308     {
5309     struct macvlan_port *port = macvlan_port_get_rtnl(dev);
5310    
5311     - cancel_work_sync(&port->bc_work);
5312     dev->priv_flags &= ~IFF_MACVLAN_PORT;
5313     netdev_rx_handler_unregister(dev);
5314     +
5315     + /* After this point, no packet can schedule bc_work anymore,
5316     + * but we need to cancel it and purge left skbs if any.
5317     + */
5318     + cancel_work_sync(&port->bc_work);
5319     + __skb_queue_purge(&port->bc_queue);
5320     +
5321     kfree_rcu(port, rcu);
5322     }
5323    
5324     diff --git a/drivers/net/macvtap.c b/drivers/net/macvtap.c
5325     index 0c6adaaf898c..9b5481c70b4c 100644
5326     --- a/drivers/net/macvtap.c
5327     +++ b/drivers/net/macvtap.c
5328     @@ -16,6 +16,7 @@
5329     #include <linux/idr.h>
5330     #include <linux/fs.h>
5331    
5332     +#include <net/ipv6.h>
5333     #include <net/net_namespace.h>
5334     #include <net/rtnetlink.h>
5335     #include <net/sock.h>
5336     @@ -570,6 +571,8 @@ static int macvtap_skb_from_vnet_hdr(struct sk_buff *skb,
5337     break;
5338     case VIRTIO_NET_HDR_GSO_UDP:
5339     gso_type = SKB_GSO_UDP;
5340     + if (skb->protocol == htons(ETH_P_IPV6))
5341     + ipv6_proxy_select_ident(skb);
5342     break;
5343     default:
5344     return -EINVAL;
5345     diff --git a/drivers/net/ppp/ppp_generic.c b/drivers/net/ppp/ppp_generic.c
5346     index fa0d71727894..90c639b0f18d 100644
5347     --- a/drivers/net/ppp/ppp_generic.c
5348     +++ b/drivers/net/ppp/ppp_generic.c
5349     @@ -594,7 +594,7 @@ static long ppp_ioctl(struct file *file, unsigned int cmd, unsigned long arg)
5350     if (file == ppp->owner)
5351     ppp_shutdown_interface(ppp);
5352     }
5353     - if (atomic_long_read(&file->f_count) <= 2) {
5354     + if (atomic_long_read(&file->f_count) < 2) {
5355     ppp_release(NULL, file);
5356     err = 0;
5357     } else
5358     diff --git a/drivers/net/tun.c b/drivers/net/tun.c
5359     index acaaf6784179..610d1662c500 100644
5360     --- a/drivers/net/tun.c
5361     +++ b/drivers/net/tun.c
5362     @@ -65,6 +65,7 @@
5363     #include <linux/nsproxy.h>
5364     #include <linux/virtio_net.h>
5365     #include <linux/rcupdate.h>
5366     +#include <net/ipv6.h>
5367     #include <net/net_namespace.h>
5368     #include <net/netns/generic.h>
5369     #include <net/rtnetlink.h>
5370     @@ -1139,6 +1140,8 @@ static ssize_t tun_get_user(struct tun_struct *tun, struct tun_file *tfile,
5371     break;
5372     }
5373    
5374     + skb_reset_network_header(skb);
5375     +
5376     if (gso.gso_type != VIRTIO_NET_HDR_GSO_NONE) {
5377     pr_debug("GSO!\n");
5378     switch (gso.gso_type & ~VIRTIO_NET_HDR_GSO_ECN) {
5379     @@ -1150,6 +1153,8 @@ static ssize_t tun_get_user(struct tun_struct *tun, struct tun_file *tfile,
5380     break;
5381     case VIRTIO_NET_HDR_GSO_UDP:
5382     skb_shinfo(skb)->gso_type = SKB_GSO_UDP;
5383     + if (skb->protocol == htons(ETH_P_IPV6))
5384     + ipv6_proxy_select_ident(skb);
5385     break;
5386     default:
5387     tun->dev->stats.rx_frame_errors++;
5388     @@ -1179,7 +1184,6 @@ static ssize_t tun_get_user(struct tun_struct *tun, struct tun_file *tfile,
5389     skb_shinfo(skb)->tx_flags |= SKBTX_SHARED_FRAG;
5390     }
5391    
5392     - skb_reset_network_header(skb);
5393     skb_probe_transport_header(skb, 0);
5394    
5395     rxhash = skb_get_hash(skb);
5396     diff --git a/drivers/net/usb/ax88179_178a.c b/drivers/net/usb/ax88179_178a.c
5397     index be4275721039..e6338c16081a 100644
5398     --- a/drivers/net/usb/ax88179_178a.c
5399     +++ b/drivers/net/usb/ax88179_178a.c
5400     @@ -937,6 +937,7 @@ static int ax88179_set_mac_addr(struct net_device *net, void *p)
5401     {
5402     struct usbnet *dev = netdev_priv(net);
5403     struct sockaddr *addr = p;
5404     + int ret;
5405    
5406     if (netif_running(net))
5407     return -EBUSY;
5408     @@ -946,8 +947,12 @@ static int ax88179_set_mac_addr(struct net_device *net, void *p)
5409     memcpy(net->dev_addr, addr->sa_data, ETH_ALEN);
5410    
5411     /* Set the MAC address */
5412     - return ax88179_write_cmd(dev, AX_ACCESS_MAC, AX_NODE_ID, ETH_ALEN,
5413     + ret = ax88179_write_cmd(dev, AX_ACCESS_MAC, AX_NODE_ID, ETH_ALEN,
5414     ETH_ALEN, net->dev_addr);
5415     + if (ret < 0)
5416     + return ret;
5417     +
5418     + return 0;
5419     }
5420    
5421     static const struct net_device_ops ax88179_netdev_ops = {
5422     diff --git a/drivers/net/vxlan.c b/drivers/net/vxlan.c
5423     index beb377b2d4b7..b4831274b0ab 100644
5424     --- a/drivers/net/vxlan.c
5425     +++ b/drivers/net/vxlan.c
5426     @@ -1440,9 +1440,6 @@ static int neigh_reduce(struct net_device *dev, struct sk_buff *skb)
5427     if (!in6_dev)
5428     goto out;
5429    
5430     - if (!pskb_may_pull(skb, skb->len))
5431     - goto out;
5432     -
5433     iphdr = ipv6_hdr(skb);
5434     saddr = &iphdr->saddr;
5435     daddr = &iphdr->daddr;
5436     @@ -1717,6 +1714,8 @@ static void vxlan_encap_bypass(struct sk_buff *skb, struct vxlan_dev *src_vxlan,
5437     struct pcpu_sw_netstats *tx_stats, *rx_stats;
5438     union vxlan_addr loopback;
5439     union vxlan_addr *remote_ip = &dst_vxlan->default_dst.remote_ip;
5440     + struct net_device *dev = skb->dev;
5441     + int len = skb->len;
5442    
5443     tx_stats = this_cpu_ptr(src_vxlan->dev->tstats);
5444     rx_stats = this_cpu_ptr(dst_vxlan->dev->tstats);
5445     @@ -1740,16 +1739,16 @@ static void vxlan_encap_bypass(struct sk_buff *skb, struct vxlan_dev *src_vxlan,
5446    
5447     u64_stats_update_begin(&tx_stats->syncp);
5448     tx_stats->tx_packets++;
5449     - tx_stats->tx_bytes += skb->len;
5450     + tx_stats->tx_bytes += len;
5451     u64_stats_update_end(&tx_stats->syncp);
5452    
5453     if (netif_rx(skb) == NET_RX_SUCCESS) {
5454     u64_stats_update_begin(&rx_stats->syncp);
5455     rx_stats->rx_packets++;
5456     - rx_stats->rx_bytes += skb->len;
5457     + rx_stats->rx_bytes += len;
5458     u64_stats_update_end(&rx_stats->syncp);
5459     } else {
5460     - skb->dev->stats.rx_dropped++;
5461     + dev->stats.rx_dropped++;
5462     }
5463     }
5464    
5465     @@ -1927,7 +1926,8 @@ static netdev_tx_t vxlan_xmit(struct sk_buff *skb, struct net_device *dev)
5466     return arp_reduce(dev, skb);
5467     #if IS_ENABLED(CONFIG_IPV6)
5468     else if (ntohs(eth->h_proto) == ETH_P_IPV6 &&
5469     - skb->len >= sizeof(struct ipv6hdr) + sizeof(struct nd_msg) &&
5470     + pskb_may_pull(skb, sizeof(struct ipv6hdr)
5471     + + sizeof(struct nd_msg)) &&
5472     ipv6_hdr(skb)->nexthdr == IPPROTO_ICMPV6) {
5473     struct nd_msg *msg;
5474    
5475     @@ -1936,6 +1936,7 @@ static netdev_tx_t vxlan_xmit(struct sk_buff *skb, struct net_device *dev)
5476     msg->icmph.icmp6_type == NDISC_NEIGHBOUR_SOLICITATION)
5477     return neigh_reduce(dev, skb);
5478     }
5479     + eth = eth_hdr(skb);
5480     #endif
5481     }
5482    
5483     diff --git a/drivers/net/wireless/iwlwifi/dvm/mac80211.c b/drivers/net/wireless/iwlwifi/dvm/mac80211.c
5484     index afb98f4fdaf3..913398525947 100644
5485     --- a/drivers/net/wireless/iwlwifi/dvm/mac80211.c
5486     +++ b/drivers/net/wireless/iwlwifi/dvm/mac80211.c
5487     @@ -1095,6 +1095,7 @@ static void iwlagn_mac_flush(struct ieee80211_hw *hw, struct ieee80211_vif *vif,
5488     u32 queues, bool drop)
5489     {
5490     struct iwl_priv *priv = IWL_MAC80211_GET_DVM(hw);
5491     + u32 scd_queues;
5492    
5493     mutex_lock(&priv->mutex);
5494     IWL_DEBUG_MAC80211(priv, "enter\n");
5495     @@ -1108,18 +1109,19 @@ static void iwlagn_mac_flush(struct ieee80211_hw *hw, struct ieee80211_vif *vif,
5496     goto done;
5497     }
5498    
5499     - /*
5500     - * mac80211 will not push any more frames for transmit
5501     - * until the flush is completed
5502     - */
5503     - if (drop) {
5504     - IWL_DEBUG_MAC80211(priv, "send flush command\n");
5505     - if (iwlagn_txfifo_flush(priv, 0)) {
5506     - IWL_ERR(priv, "flush request fail\n");
5507     - goto done;
5508     - }
5509     + scd_queues = BIT(priv->cfg->base_params->num_of_queues) - 1;
5510     + scd_queues &= ~(BIT(IWL_IPAN_CMD_QUEUE_NUM) |
5511     + BIT(IWL_DEFAULT_CMD_QUEUE_NUM));
5512     +
5513     + if (vif)
5514     + scd_queues &= ~BIT(vif->hw_queue[IEEE80211_AC_VO]);
5515     +
5516     + IWL_DEBUG_TX_QUEUES(priv, "Flushing SCD queues: 0x%x\n", scd_queues);
5517     + if (iwlagn_txfifo_flush(priv, scd_queues)) {
5518     + IWL_ERR(priv, "flush request fail\n");
5519     + goto done;
5520     }
5521     - IWL_DEBUG_MAC80211(priv, "wait transmit/flush all frames\n");
5522     + IWL_DEBUG_TX_QUEUES(priv, "wait transmit/flush all frames\n");
5523     iwl_trans_wait_tx_queue_empty(priv->trans, 0xffffffff);
5524     done:
5525     mutex_unlock(&priv->mutex);
5526     diff --git a/drivers/net/wireless/iwlwifi/iwl-trans.h b/drivers/net/wireless/iwlwifi/iwl-trans.h
5527     index 656371a668da..86fb12162af2 100644
5528     --- a/drivers/net/wireless/iwlwifi/iwl-trans.h
5529     +++ b/drivers/net/wireless/iwlwifi/iwl-trans.h
5530     @@ -548,6 +548,7 @@ enum iwl_trans_state {
5531     * Set during transport allocation.
5532     * @hw_id_str: a string with info about HW ID. Set during transport allocation.
5533     * @pm_support: set to true in start_hw if link pm is supported
5534     + * @ltr_enabled: set to true if the LTR is enabled
5535     * @dev_cmd_pool: pool for Tx cmd allocation - for internal use only.
5536     * The user should use iwl_trans_{alloc,free}_tx_cmd.
5537     * @dev_cmd_headroom: room needed for the transport's private use before the
5538     @@ -574,6 +575,7 @@ struct iwl_trans {
5539     u8 rx_mpdu_cmd, rx_mpdu_cmd_hdr_size;
5540    
5541     bool pm_support;
5542     + bool ltr_enabled;
5543    
5544     /* The following fields are internal only */
5545     struct kmem_cache *dev_cmd_pool;
5546     diff --git a/drivers/net/wireless/iwlwifi/mvm/coex.c b/drivers/net/wireless/iwlwifi/mvm/coex.c
5547     index ce71625f497f..103fc93e9158 100644
5548     --- a/drivers/net/wireless/iwlwifi/mvm/coex.c
5549     +++ b/drivers/net/wireless/iwlwifi/mvm/coex.c
5550     @@ -301,8 +301,8 @@ static const __le64 iwl_ci_mask[][3] = {
5551     };
5552    
5553     static const __le32 iwl_bt_mprio_lut[BT_COEX_MULTI_PRIO_LUT_SIZE] = {
5554     - cpu_to_le32(0x28412201),
5555     - cpu_to_le32(0x11118451),
5556     + cpu_to_le32(0x2e402280),
5557     + cpu_to_le32(0x7711a751),
5558     };
5559    
5560     struct corunning_block_luts {
5561     diff --git a/drivers/net/wireless/iwlwifi/mvm/coex_legacy.c b/drivers/net/wireless/iwlwifi/mvm/coex_legacy.c
5562     index a3be33359927..d55c2a8f724f 100644
5563     --- a/drivers/net/wireless/iwlwifi/mvm/coex_legacy.c
5564     +++ b/drivers/net/wireless/iwlwifi/mvm/coex_legacy.c
5565     @@ -289,8 +289,8 @@ static const __le64 iwl_ci_mask[][3] = {
5566     };
5567    
5568     static const __le32 iwl_bt_mprio_lut[BT_COEX_MULTI_PRIO_LUT_SIZE] = {
5569     - cpu_to_le32(0x28412201),
5570     - cpu_to_le32(0x11118451),
5571     + cpu_to_le32(0x2e402280),
5572     + cpu_to_le32(0x7711a751),
5573     };
5574    
5575     struct corunning_block_luts {
5576     diff --git a/drivers/net/wireless/iwlwifi/mvm/fw-api-power.h b/drivers/net/wireless/iwlwifi/mvm/fw-api-power.h
5577     index c3a8c86b550d..4d8932c1cd6d 100644
5578     --- a/drivers/net/wireless/iwlwifi/mvm/fw-api-power.h
5579     +++ b/drivers/net/wireless/iwlwifi/mvm/fw-api-power.h
5580     @@ -66,13 +66,46 @@
5581    
5582     /* Power Management Commands, Responses, Notifications */
5583    
5584     +/**
5585     + * enum iwl_ltr_config_flags - masks for LTR config command flags
5586     + * @LTR_CFG_FLAG_FEATURE_ENABLE: Feature operational status
5587     + * @LTR_CFG_FLAG_HW_DIS_ON_SHADOW_REG_ACCESS: allow LTR change on shadow
5588     + * memory access
5589     + * @LTR_CFG_FLAG_HW_EN_SHRT_WR_THROUGH: allow LTR msg send on ANY LTR
5590     + * reg change
5591     + * @LTR_CFG_FLAG_HW_DIS_ON_D0_2_D3: allow LTR msg send on transition from
5592     + * D0 to D3
5593     + * @LTR_CFG_FLAG_SW_SET_SHORT: fixed static short LTR register
5594     + * @LTR_CFG_FLAG_SW_SET_LONG: fixed static short LONG register
5595     + * @LTR_CFG_FLAG_DENIE_C10_ON_PD: allow going into C10 on PD
5596     + */
5597     +enum iwl_ltr_config_flags {
5598     + LTR_CFG_FLAG_FEATURE_ENABLE = BIT(0),
5599     + LTR_CFG_FLAG_HW_DIS_ON_SHADOW_REG_ACCESS = BIT(1),
5600     + LTR_CFG_FLAG_HW_EN_SHRT_WR_THROUGH = BIT(2),
5601     + LTR_CFG_FLAG_HW_DIS_ON_D0_2_D3 = BIT(3),
5602     + LTR_CFG_FLAG_SW_SET_SHORT = BIT(4),
5603     + LTR_CFG_FLAG_SW_SET_LONG = BIT(5),
5604     + LTR_CFG_FLAG_DENIE_C10_ON_PD = BIT(6),
5605     +};
5606     +
5607     +/**
5608     + * struct iwl_ltr_config_cmd - configures the LTR
5609     + * @flags: See %enum iwl_ltr_config_flags
5610     + */
5611     +struct iwl_ltr_config_cmd {
5612     + __le32 flags;
5613     + __le32 static_long;
5614     + __le32 static_short;
5615     +} __packed;
5616     +
5617     /* Radio LP RX Energy Threshold measured in dBm */
5618     #define POWER_LPRX_RSSI_THRESHOLD 75
5619     #define POWER_LPRX_RSSI_THRESHOLD_MAX 94
5620     #define POWER_LPRX_RSSI_THRESHOLD_MIN 30
5621    
5622     /**
5623     - * enum iwl_scan_flags - masks for power table command flags
5624     + * enum iwl_power_flags - masks for power table command flags
5625     * @POWER_FLAGS_POWER_SAVE_ENA_MSK: '1' Allow to save power by turning off
5626     * receiver and transmitter. '0' - does not allow.
5627     * @POWER_FLAGS_POWER_MANAGEMENT_ENA_MSK: '0' Driver disables power management,
5628     diff --git a/drivers/net/wireless/iwlwifi/mvm/fw-api.h b/drivers/net/wireless/iwlwifi/mvm/fw-api.h
5629     index 9a922f3bd16b..7b73ed4903c4 100644
5630     --- a/drivers/net/wireless/iwlwifi/mvm/fw-api.h
5631     +++ b/drivers/net/wireless/iwlwifi/mvm/fw-api.h
5632     @@ -148,6 +148,7 @@ enum {
5633     /* Power - legacy power table command */
5634     POWER_TABLE_CMD = 0x77,
5635     PSM_UAPSD_AP_MISBEHAVING_NOTIFICATION = 0x78,
5636     + LTR_CONFIG = 0xee,
5637    
5638     /* Thermal Throttling*/
5639     REPLY_THERMAL_MNG_BACKOFF = 0x7e,
5640     diff --git a/drivers/net/wireless/iwlwifi/mvm/fw.c b/drivers/net/wireless/iwlwifi/mvm/fw.c
5641     index 883e702152d5..bf720a875e6b 100644
5642     --- a/drivers/net/wireless/iwlwifi/mvm/fw.c
5643     +++ b/drivers/net/wireless/iwlwifi/mvm/fw.c
5644     @@ -475,6 +475,15 @@ int iwl_mvm_up(struct iwl_mvm *mvm)
5645     /* Initialize tx backoffs to the minimal possible */
5646     iwl_mvm_tt_tx_backoff(mvm, 0);
5647    
5648     + if (mvm->trans->ltr_enabled) {
5649     + struct iwl_ltr_config_cmd cmd = {
5650     + .flags = cpu_to_le32(LTR_CFG_FLAG_FEATURE_ENABLE),
5651     + };
5652     +
5653     + WARN_ON(iwl_mvm_send_cmd_pdu(mvm, LTR_CONFIG, 0,
5654     + sizeof(cmd), &cmd));
5655     + }
5656     +
5657     ret = iwl_mvm_power_update_device(mvm);
5658     if (ret)
5659     goto error;
5660     diff --git a/drivers/net/wireless/iwlwifi/mvm/ops.c b/drivers/net/wireless/iwlwifi/mvm/ops.c
5661     index 610dbcb0dc27..d31a1178ae35 100644
5662     --- a/drivers/net/wireless/iwlwifi/mvm/ops.c
5663     +++ b/drivers/net/wireless/iwlwifi/mvm/ops.c
5664     @@ -332,6 +332,7 @@ static const char *const iwl_mvm_cmd_strings[REPLY_MAX] = {
5665     CMD(REPLY_BEACON_FILTERING_CMD),
5666     CMD(REPLY_THERMAL_MNG_BACKOFF),
5667     CMD(MAC_PM_POWER_TABLE),
5668     + CMD(LTR_CONFIG),
5669     CMD(BT_COEX_CI),
5670     CMD(BT_COEX_UPDATE_SW_BOOST),
5671     CMD(BT_COEX_UPDATE_CORUN_LUT),
5672     diff --git a/drivers/net/wireless/iwlwifi/mvm/tx.c b/drivers/net/wireless/iwlwifi/mvm/tx.c
5673     index 9ee410bf6da2..dbc870713882 100644
5674     --- a/drivers/net/wireless/iwlwifi/mvm/tx.c
5675     +++ b/drivers/net/wireless/iwlwifi/mvm/tx.c
5676     @@ -168,14 +168,10 @@ static void iwl_mvm_set_tx_cmd_rate(struct iwl_mvm *mvm,
5677    
5678     /*
5679     * for data packets, rate info comes from the table inside the fw. This
5680     - * table is controlled by LINK_QUALITY commands. Exclude ctrl port
5681     - * frames like EAPOLs which should be treated as mgmt frames. This
5682     - * avoids them being sent initially in high rates which increases the
5683     - * chances for completion of the 4-Way handshake.
5684     + * table is controlled by LINK_QUALITY commands
5685     */
5686    
5687     - if (ieee80211_is_data(fc) && sta &&
5688     - !(info->control.flags & IEEE80211_TX_CTRL_PORT_CTRL_PROTO)) {
5689     + if (ieee80211_is_data(fc) && sta) {
5690     tx_cmd->initial_rate_index = 0;
5691     tx_cmd->tx_flags |= cpu_to_le32(TX_CMD_FLG_STA_RATE);
5692     return;
5693     diff --git a/drivers/net/wireless/iwlwifi/pcie/trans.c b/drivers/net/wireless/iwlwifi/pcie/trans.c
5694     index 06e04aaf61ee..d7231a82fe42 100644
5695     --- a/drivers/net/wireless/iwlwifi/pcie/trans.c
5696     +++ b/drivers/net/wireless/iwlwifi/pcie/trans.c
5697     @@ -172,6 +172,7 @@ static void iwl_pcie_apm_config(struct iwl_trans *trans)
5698     {
5699     struct iwl_trans_pcie *trans_pcie = IWL_TRANS_GET_PCIE_TRANS(trans);
5700     u16 lctl;
5701     + u16 cap;
5702    
5703     /*
5704     * HW bug W/A for instability in PCIe bus L0S->L1 transition.
5705     @@ -182,16 +183,17 @@ static void iwl_pcie_apm_config(struct iwl_trans *trans)
5706     * power savings, even without L1.
5707     */
5708     pcie_capability_read_word(trans_pcie->pci_dev, PCI_EXP_LNKCTL, &lctl);
5709     - if (lctl & PCI_EXP_LNKCTL_ASPM_L1) {
5710     - /* L1-ASPM enabled; disable(!) L0S */
5711     + if (lctl & PCI_EXP_LNKCTL_ASPM_L1)
5712     iwl_set_bit(trans, CSR_GIO_REG, CSR_GIO_REG_VAL_L0S_ENABLED);
5713     - dev_info(trans->dev, "L1 Enabled; Disabling L0S\n");
5714     - } else {
5715     - /* L1-ASPM disabled; enable(!) L0S */
5716     + else
5717     iwl_clear_bit(trans, CSR_GIO_REG, CSR_GIO_REG_VAL_L0S_ENABLED);
5718     - dev_info(trans->dev, "L1 Disabled; Enabling L0S\n");
5719     - }
5720     trans->pm_support = !(lctl & PCI_EXP_LNKCTL_ASPM_L0S);
5721     +
5722     + pcie_capability_read_word(trans_pcie->pci_dev, PCI_EXP_DEVCTL2, &cap);
5723     + trans->ltr_enabled = cap & PCI_EXP_DEVCTL2_LTR_EN;
5724     + dev_info(trans->dev, "L1 %sabled - LTR %sabled\n",
5725     + (lctl & PCI_EXP_LNKCTL_ASPM_L1) ? "En" : "Dis",
5726     + trans->ltr_enabled ? "En" : "Dis");
5727     }
5728    
5729     /*
5730     diff --git a/drivers/net/wireless/rt2x00/rt2800.h b/drivers/net/wireless/rt2x00/rt2800.h
5731     index 7cf6081a05a1..ebd5625d13f1 100644
5732     --- a/drivers/net/wireless/rt2x00/rt2800.h
5733     +++ b/drivers/net/wireless/rt2x00/rt2800.h
5734     @@ -52,6 +52,7 @@
5735     * RF5592 2.4G/5G 2T2R
5736     * RF3070 2.4G 1T1R
5737     * RF5360 2.4G 1T1R
5738     + * RF5362 2.4G 1T1R
5739     * RF5370 2.4G 1T1R
5740     * RF5390 2.4G 1T1R
5741     */
5742     @@ -72,6 +73,7 @@
5743     #define RF3070 0x3070
5744     #define RF3290 0x3290
5745     #define RF5360 0x5360
5746     +#define RF5362 0x5362
5747     #define RF5370 0x5370
5748     #define RF5372 0x5372
5749     #define RF5390 0x5390
5750     @@ -2145,7 +2147,7 @@ struct mac_iveiv_entry {
5751     /* Bits [7-4] for RF3320 (RT3370/RT3390), on other chipsets reserved */
5752     #define RFCSR3_PA1_BIAS_CCK FIELD8(0x70)
5753     #define RFCSR3_PA2_CASCODE_BIAS_CCKK FIELD8(0x80)
5754     -/* Bits for RF3290/RF5360/RF5370/RF5372/RF5390/RF5392 */
5755     +/* Bits for RF3290/RF5360/RF5362/RF5370/RF5372/RF5390/RF5392 */
5756     #define RFCSR3_VCOCAL_EN FIELD8(0x80)
5757     /* Bits for RF3050 */
5758     #define RFCSR3_BIT1 FIELD8(0x02)
5759     diff --git a/drivers/net/wireless/rt2x00/rt2800lib.c b/drivers/net/wireless/rt2x00/rt2800lib.c
5760     index 893c9d5f3d6f..9f57a2db791c 100644
5761     --- a/drivers/net/wireless/rt2x00/rt2800lib.c
5762     +++ b/drivers/net/wireless/rt2x00/rt2800lib.c
5763     @@ -3186,6 +3186,7 @@ static void rt2800_config_channel(struct rt2x00_dev *rt2x00dev,
5764     break;
5765     case RF3070:
5766     case RF5360:
5767     + case RF5362:
5768     case RF5370:
5769     case RF5372:
5770     case RF5390:
5771     @@ -3203,6 +3204,7 @@ static void rt2800_config_channel(struct rt2x00_dev *rt2x00dev,
5772     rt2x00_rf(rt2x00dev, RF3290) ||
5773     rt2x00_rf(rt2x00dev, RF3322) ||
5774     rt2x00_rf(rt2x00dev, RF5360) ||
5775     + rt2x00_rf(rt2x00dev, RF5362) ||
5776     rt2x00_rf(rt2x00dev, RF5370) ||
5777     rt2x00_rf(rt2x00dev, RF5372) ||
5778     rt2x00_rf(rt2x00dev, RF5390) ||
5779     @@ -4317,6 +4319,7 @@ void rt2800_vco_calibration(struct rt2x00_dev *rt2x00dev)
5780     case RF3070:
5781     case RF3290:
5782     case RF5360:
5783     + case RF5362:
5784     case RF5370:
5785     case RF5372:
5786     case RF5390:
5787     @@ -7095,6 +7098,7 @@ static int rt2800_init_eeprom(struct rt2x00_dev *rt2x00dev)
5788     case RF3320:
5789     case RF3322:
5790     case RF5360:
5791     + case RF5362:
5792     case RF5370:
5793     case RF5372:
5794     case RF5390:
5795     @@ -7551,6 +7555,7 @@ static int rt2800_probe_hw_mode(struct rt2x00_dev *rt2x00dev)
5796     case RF3320:
5797     case RF3322:
5798     case RF5360:
5799     + case RF5362:
5800     case RF5370:
5801     case RF5372:
5802     case RF5390:
5803     @@ -7680,6 +7685,7 @@ static int rt2800_probe_hw_mode(struct rt2x00_dev *rt2x00dev)
5804     case RF3070:
5805     case RF3290:
5806     case RF5360:
5807     + case RF5362:
5808     case RF5370:
5809     case RF5372:
5810     case RF5390:
5811     diff --git a/drivers/net/wireless/rt2x00/rt2800usb.c b/drivers/net/wireless/rt2x00/rt2800usb.c
5812     index 573897b8e878..8444313eabe2 100644
5813     --- a/drivers/net/wireless/rt2x00/rt2800usb.c
5814     +++ b/drivers/net/wireless/rt2x00/rt2800usb.c
5815     @@ -1111,6 +1111,7 @@ static struct usb_device_id rt2800usb_device_table[] = {
5816     /* Ovislink */
5817     { USB_DEVICE(0x1b75, 0x3071) },
5818     { USB_DEVICE(0x1b75, 0x3072) },
5819     + { USB_DEVICE(0x1b75, 0xa200) },
5820     /* Para */
5821     { USB_DEVICE(0x20b8, 0x8888) },
5822     /* Pegatron */
5823     diff --git a/drivers/of/base.c b/drivers/of/base.c
5824     index 293ed4b687ba..902b1b09efed 100644
5825     --- a/drivers/of/base.c
5826     +++ b/drivers/of/base.c
5827     @@ -1277,52 +1277,6 @@ int of_property_read_string(struct device_node *np, const char *propname,
5828     EXPORT_SYMBOL_GPL(of_property_read_string);
5829    
5830     /**
5831     - * of_property_read_string_index - Find and read a string from a multiple
5832     - * strings property.
5833     - * @np: device node from which the property value is to be read.
5834     - * @propname: name of the property to be searched.
5835     - * @index: index of the string in the list of strings
5836     - * @out_string: pointer to null terminated return string, modified only if
5837     - * return value is 0.
5838     - *
5839     - * Search for a property in a device tree node and retrieve a null
5840     - * terminated string value (pointer to data, not a copy) in the list of strings
5841     - * contained in that property.
5842     - * Returns 0 on success, -EINVAL if the property does not exist, -ENODATA if
5843     - * property does not have a value, and -EILSEQ if the string is not
5844     - * null-terminated within the length of the property data.
5845     - *
5846     - * The out_string pointer is modified only if a valid string can be decoded.
5847     - */
5848     -int of_property_read_string_index(struct device_node *np, const char *propname,
5849     - int index, const char **output)
5850     -{
5851     - struct property *prop = of_find_property(np, propname, NULL);
5852     - int i = 0;
5853     - size_t l = 0, total = 0;
5854     - const char *p;
5855     -
5856     - if (!prop)
5857     - return -EINVAL;
5858     - if (!prop->value)
5859     - return -ENODATA;
5860     - if (strnlen(prop->value, prop->length) >= prop->length)
5861     - return -EILSEQ;
5862     -
5863     - p = prop->value;
5864     -
5865     - for (i = 0; total < prop->length; total += l, p += l) {
5866     - l = strlen(p) + 1;
5867     - if (i++ == index) {
5868     - *output = p;
5869     - return 0;
5870     - }
5871     - }
5872     - return -ENODATA;
5873     -}
5874     -EXPORT_SYMBOL_GPL(of_property_read_string_index);
5875     -
5876     -/**
5877     * of_property_match_string() - Find string in a list and return index
5878     * @np: pointer to node containing string list property
5879     * @propname: string list property name
5880     @@ -1348,7 +1302,7 @@ int of_property_match_string(struct device_node *np, const char *propname,
5881     end = p + prop->length;
5882    
5883     for (i = 0; p < end; i++, p += l) {
5884     - l = strlen(p) + 1;
5885     + l = strnlen(p, end - p) + 1;
5886     if (p + l > end)
5887     return -EILSEQ;
5888     pr_debug("comparing %s with %s\n", string, p);
5889     @@ -1360,39 +1314,41 @@ int of_property_match_string(struct device_node *np, const char *propname,
5890     EXPORT_SYMBOL_GPL(of_property_match_string);
5891    
5892     /**
5893     - * of_property_count_strings - Find and return the number of strings from a
5894     - * multiple strings property.
5895     + * of_property_read_string_util() - Utility helper for parsing string properties
5896     * @np: device node from which the property value is to be read.
5897     * @propname: name of the property to be searched.
5898     + * @out_strs: output array of string pointers.
5899     + * @sz: number of array elements to read.
5900     + * @skip: Number of strings to skip over at beginning of list.
5901     *
5902     - * Search for a property in a device tree node and retrieve the number of null
5903     - * terminated string contain in it. Returns the number of strings on
5904     - * success, -EINVAL if the property does not exist, -ENODATA if property
5905     - * does not have a value, and -EILSEQ if the string is not null-terminated
5906     - * within the length of the property data.
5907     + * Don't call this function directly. It is a utility helper for the
5908     + * of_property_read_string*() family of functions.
5909     */
5910     -int of_property_count_strings(struct device_node *np, const char *propname)
5911     +int of_property_read_string_helper(struct device_node *np, const char *propname,
5912     + const char **out_strs, size_t sz, int skip)
5913     {
5914     struct property *prop = of_find_property(np, propname, NULL);
5915     - int i = 0;
5916     - size_t l = 0, total = 0;
5917     - const char *p;
5918     + int l = 0, i = 0;
5919     + const char *p, *end;
5920    
5921     if (!prop)
5922     return -EINVAL;
5923     if (!prop->value)
5924     return -ENODATA;
5925     - if (strnlen(prop->value, prop->length) >= prop->length)
5926     - return -EILSEQ;
5927     -
5928     p = prop->value;
5929     + end = p + prop->length;
5930    
5931     - for (i = 0; total < prop->length; total += l, p += l, i++)
5932     - l = strlen(p) + 1;
5933     -
5934     - return i;
5935     + for (i = 0; p < end && (!out_strs || i < skip + sz); i++, p += l) {
5936     + l = strnlen(p, end - p) + 1;
5937     + if (p + l > end)
5938     + return -EILSEQ;
5939     + if (out_strs && i >= skip)
5940     + *out_strs++ = p;
5941     + }
5942     + i -= skip;
5943     + return i <= 0 ? -ENODATA : i;
5944     }
5945     -EXPORT_SYMBOL_GPL(of_property_count_strings);
5946     +EXPORT_SYMBOL_GPL(of_property_read_string_helper);
5947    
5948     void of_print_phandle_args(const char *msg, const struct of_phandle_args *args)
5949     {
5950     diff --git a/drivers/of/selftest.c b/drivers/of/selftest.c
5951     index a737cb5974de..c92de69fcf7f 100644
5952     --- a/drivers/of/selftest.c
5953     +++ b/drivers/of/selftest.c
5954     @@ -247,8 +247,9 @@ static void __init of_selftest_parse_phandle_with_args(void)
5955     selftest(rc == -EINVAL, "expected:%i got:%i\n", -EINVAL, rc);
5956     }
5957    
5958     -static void __init of_selftest_property_match_string(void)
5959     +static void __init of_selftest_property_string(void)
5960     {
5961     + const char *strings[4];
5962     struct device_node *np;
5963     int rc;
5964    
5965     @@ -265,13 +266,66 @@ static void __init of_selftest_property_match_string(void)
5966     rc = of_property_match_string(np, "phandle-list-names", "third");
5967     selftest(rc == 2, "third expected:0 got:%i\n", rc);
5968     rc = of_property_match_string(np, "phandle-list-names", "fourth");
5969     - selftest(rc == -ENODATA, "unmatched string; rc=%i", rc);
5970     + selftest(rc == -ENODATA, "unmatched string; rc=%i\n", rc);
5971     rc = of_property_match_string(np, "missing-property", "blah");
5972     - selftest(rc == -EINVAL, "missing property; rc=%i", rc);
5973     + selftest(rc == -EINVAL, "missing property; rc=%i\n", rc);
5974     rc = of_property_match_string(np, "empty-property", "blah");
5975     - selftest(rc == -ENODATA, "empty property; rc=%i", rc);
5976     + selftest(rc == -ENODATA, "empty property; rc=%i\n", rc);
5977     rc = of_property_match_string(np, "unterminated-string", "blah");
5978     - selftest(rc == -EILSEQ, "unterminated string; rc=%i", rc);
5979     + selftest(rc == -EILSEQ, "unterminated string; rc=%i\n", rc);
5980     +
5981     + /* of_property_count_strings() tests */
5982     + rc = of_property_count_strings(np, "string-property");
5983     + selftest(rc == 1, "Incorrect string count; rc=%i\n", rc);
5984     + rc = of_property_count_strings(np, "phandle-list-names");
5985     + selftest(rc == 3, "Incorrect string count; rc=%i\n", rc);
5986     + rc = of_property_count_strings(np, "unterminated-string");
5987     + selftest(rc == -EILSEQ, "unterminated string; rc=%i\n", rc);
5988     + rc = of_property_count_strings(np, "unterminated-string-list");
5989     + selftest(rc == -EILSEQ, "unterminated string array; rc=%i\n", rc);
5990     +
5991     + /* of_property_read_string_index() tests */
5992     + rc = of_property_read_string_index(np, "string-property", 0, strings);
5993     + selftest(rc == 0 && !strcmp(strings[0], "foobar"), "of_property_read_string_index() failure; rc=%i\n", rc);
5994     + strings[0] = NULL;
5995     + rc = of_property_read_string_index(np, "string-property", 1, strings);
5996     + selftest(rc == -ENODATA && strings[0] == NULL, "of_property_read_string_index() failure; rc=%i\n", rc);
5997     + rc = of_property_read_string_index(np, "phandle-list-names", 0, strings);
5998     + selftest(rc == 0 && !strcmp(strings[0], "first"), "of_property_read_string_index() failure; rc=%i\n", rc);
5999     + rc = of_property_read_string_index(np, "phandle-list-names", 1, strings);
6000     + selftest(rc == 0 && !strcmp(strings[0], "second"), "of_property_read_string_index() failure; rc=%i\n", rc);
6001     + rc = of_property_read_string_index(np, "phandle-list-names", 2, strings);
6002     + selftest(rc == 0 && !strcmp(strings[0], "third"), "of_property_read_string_index() failure; rc=%i\n", rc);
6003     + strings[0] = NULL;
6004     + rc = of_property_read_string_index(np, "phandle-list-names", 3, strings);
6005     + selftest(rc == -ENODATA && strings[0] == NULL, "of_property_read_string_index() failure; rc=%i\n", rc);
6006     + strings[0] = NULL;
6007     + rc = of_property_read_string_index(np, "unterminated-string", 0, strings);
6008     + selftest(rc == -EILSEQ && strings[0] == NULL, "of_property_read_string_index() failure; rc=%i\n", rc);
6009     + rc = of_property_read_string_index(np, "unterminated-string-list", 0, strings);
6010     + selftest(rc == 0 && !strcmp(strings[0], "first"), "of_property_read_string_index() failure; rc=%i\n", rc);
6011     + strings[0] = NULL;
6012     + rc = of_property_read_string_index(np, "unterminated-string-list", 2, strings); /* should fail */
6013     + selftest(rc == -EILSEQ && strings[0] == NULL, "of_property_read_string_index() failure; rc=%i\n", rc);
6014     + strings[1] = NULL;
6015     +
6016     + /* of_property_read_string_array() tests */
6017     + rc = of_property_read_string_array(np, "string-property", strings, 4);
6018     + selftest(rc == 1, "Incorrect string count; rc=%i\n", rc);
6019     + rc = of_property_read_string_array(np, "phandle-list-names", strings, 4);
6020     + selftest(rc == 3, "Incorrect string count; rc=%i\n", rc);
6021     + rc = of_property_read_string_array(np, "unterminated-string", strings, 4);
6022     + selftest(rc == -EILSEQ, "unterminated string; rc=%i\n", rc);
6023     + /* -- An incorrectly formed string should cause a failure */
6024     + rc = of_property_read_string_array(np, "unterminated-string-list", strings, 4);
6025     + selftest(rc == -EILSEQ, "unterminated string array; rc=%i\n", rc);
6026     + /* -- parsing the correctly formed strings should still work: */
6027     + strings[2] = NULL;
6028     + rc = of_property_read_string_array(np, "unterminated-string-list", strings, 2);
6029     + selftest(rc == 2 && strings[2] == NULL, "of_property_read_string_array() failure; rc=%i\n", rc);
6030     + strings[1] = NULL;
6031     + rc = of_property_read_string_array(np, "phandle-list-names", strings, 1);
6032     + selftest(rc == 1 && strings[1] == NULL, "Overwrote end of string array; rc=%i, str='%s'\n", rc, strings[1]);
6033     }
6034    
6035     #define propcmp(p1, p2) (((p1)->length == (p2)->length) && \
6036     @@ -783,7 +837,7 @@ static int __init of_selftest(void)
6037     of_selftest_find_node_by_name();
6038     of_selftest_dynamic();
6039     of_selftest_parse_phandle_with_args();
6040     - of_selftest_property_match_string();
6041     + of_selftest_property_string();
6042     of_selftest_property_copy();
6043     of_selftest_changeset();
6044     of_selftest_parse_interrupts();
6045     diff --git a/drivers/of/testcase-data/tests-phandle.dtsi b/drivers/of/testcase-data/tests-phandle.dtsi
6046     index ce0fe083d406..5b1527e8a7fb 100644
6047     --- a/drivers/of/testcase-data/tests-phandle.dtsi
6048     +++ b/drivers/of/testcase-data/tests-phandle.dtsi
6049     @@ -39,7 +39,9 @@
6050     phandle-list-bad-args = <&provider2 1 0>,
6051     <&provider3 0>;
6052     empty-property;
6053     + string-property = "foobar";
6054     unterminated-string = [40 41 42 43];
6055     + unterminated-string-list = "first", "second", [40 41 42 43];
6056     };
6057     };
6058     };
6059     diff --git a/drivers/pci/pci-sysfs.c b/drivers/pci/pci-sysfs.c
6060     index 76ef7914c9aa..6d04771e4903 100644
6061     --- a/drivers/pci/pci-sysfs.c
6062     +++ b/drivers/pci/pci-sysfs.c
6063     @@ -185,7 +185,7 @@ static ssize_t modalias_show(struct device *dev, struct device_attribute *attr,
6064     }
6065     static DEVICE_ATTR_RO(modalias);
6066    
6067     -static ssize_t enabled_store(struct device *dev, struct device_attribute *attr,
6068     +static ssize_t enable_store(struct device *dev, struct device_attribute *attr,
6069     const char *buf, size_t count)
6070     {
6071     struct pci_dev *pdev = to_pci_dev(dev);
6072     @@ -210,7 +210,7 @@ static ssize_t enabled_store(struct device *dev, struct device_attribute *attr,
6073     return result < 0 ? result : count;
6074     }
6075    
6076     -static ssize_t enabled_show(struct device *dev, struct device_attribute *attr,
6077     +static ssize_t enable_show(struct device *dev, struct device_attribute *attr,
6078     char *buf)
6079     {
6080     struct pci_dev *pdev;
6081     @@ -218,7 +218,7 @@ static ssize_t enabled_show(struct device *dev, struct device_attribute *attr,
6082     pdev = to_pci_dev(dev);
6083     return sprintf(buf, "%u\n", atomic_read(&pdev->enable_cnt));
6084     }
6085     -static DEVICE_ATTR_RW(enabled);
6086     +static DEVICE_ATTR_RW(enable);
6087    
6088     #ifdef CONFIG_NUMA
6089     static ssize_t numa_node_show(struct device *dev, struct device_attribute *attr,
6090     @@ -564,7 +564,7 @@ static struct attribute *pci_dev_attrs[] = {
6091     #endif
6092     &dev_attr_dma_mask_bits.attr,
6093     &dev_attr_consistent_dma_mask_bits.attr,
6094     - &dev_attr_enabled.attr,
6095     + &dev_attr_enable.attr,
6096     &dev_attr_broken_parity_status.attr,
6097     &dev_attr_msi_bus.attr,
6098     #if defined(CONFIG_PM_RUNTIME) && defined(CONFIG_ACPI)
6099     diff --git a/drivers/phy/phy-omap-usb2.c b/drivers/phy/phy-omap-usb2.c
6100     index 93d78359246c..acc13f8179c3 100644
6101     --- a/drivers/phy/phy-omap-usb2.c
6102     +++ b/drivers/phy/phy-omap-usb2.c
6103     @@ -262,14 +262,16 @@ static int omap_usb2_probe(struct platform_device *pdev)
6104     otg->phy = &phy->phy;
6105    
6106     platform_set_drvdata(pdev, phy);
6107     + pm_runtime_enable(phy->dev);
6108    
6109     generic_phy = devm_phy_create(phy->dev, NULL, &ops, NULL);
6110     - if (IS_ERR(generic_phy))
6111     + if (IS_ERR(generic_phy)) {
6112     + pm_runtime_disable(phy->dev);
6113     return PTR_ERR(generic_phy);
6114     + }
6115    
6116     phy_set_drvdata(generic_phy, phy);
6117    
6118     - pm_runtime_enable(phy->dev);
6119     phy_provider = devm_of_phy_provider_register(phy->dev,
6120     of_phy_simple_xlate);
6121     if (IS_ERR(phy_provider)) {
6122     diff --git a/drivers/pinctrl/pinctrl-baytrail.c b/drivers/pinctrl/pinctrl-baytrail.c
6123     index e12e5b07f6d7..c23d8ded936d 100644
6124     --- a/drivers/pinctrl/pinctrl-baytrail.c
6125     +++ b/drivers/pinctrl/pinctrl-baytrail.c
6126     @@ -318,7 +318,7 @@ static int byt_gpio_direction_output(struct gpio_chip *chip,
6127     "Potential Error: Setting GPIO with direct_irq_en to output");
6128    
6129     reg_val = readl(reg) | BYT_DIR_MASK;
6130     - reg_val &= ~BYT_OUTPUT_EN;
6131     + reg_val &= ~(BYT_OUTPUT_EN | BYT_INPUT_EN);
6132    
6133     if (value)
6134     writel(reg_val | BYT_LEVEL, reg);
6135     diff --git a/drivers/platform/x86/acer-wmi.c b/drivers/platform/x86/acer-wmi.c
6136     index 96a0b75c52c9..26c4fd1394da 100644
6137     --- a/drivers/platform/x86/acer-wmi.c
6138     +++ b/drivers/platform/x86/acer-wmi.c
6139     @@ -579,6 +579,17 @@ static const struct dmi_system_id video_vendor_dmi_table[] __initconst = {
6140     DMI_MATCH(DMI_PRODUCT_NAME, "Aspire 5741"),
6141     },
6142     },
6143     + {
6144     + /*
6145     + * Note no video_set_backlight_video_vendor, we must use the
6146     + * acer interface, as there is no native backlight interface.
6147     + */
6148     + .ident = "Acer KAV80",
6149     + .matches = {
6150     + DMI_MATCH(DMI_SYS_VENDOR, "Acer"),
6151     + DMI_MATCH(DMI_PRODUCT_NAME, "KAV80"),
6152     + },
6153     + },
6154     {}
6155     };
6156    
6157     diff --git a/drivers/platform/x86/samsung-laptop.c b/drivers/platform/x86/samsung-laptop.c
6158     index 5a5966512277..ff765d8e1a09 100644
6159     --- a/drivers/platform/x86/samsung-laptop.c
6160     +++ b/drivers/platform/x86/samsung-laptop.c
6161     @@ -1561,6 +1561,16 @@ static struct dmi_system_id __initdata samsung_dmi_table[] = {
6162     },
6163     {
6164     .callback = samsung_dmi_matched,
6165     + .ident = "NC210",
6166     + .matches = {
6167     + DMI_MATCH(DMI_SYS_VENDOR, "SAMSUNG ELECTRONICS CO., LTD."),
6168     + DMI_MATCH(DMI_PRODUCT_NAME, "NC210/NC110"),
6169     + DMI_MATCH(DMI_BOARD_NAME, "NC210/NC110"),
6170     + },
6171     + .driver_data = &samsung_broken_acpi_video,
6172     + },
6173     + {
6174     + .callback = samsung_dmi_matched,
6175     .ident = "730U3E/740U3E",
6176     .matches = {
6177     DMI_MATCH(DMI_SYS_VENDOR, "SAMSUNG ELECTRONICS CO., LTD."),
6178     diff --git a/drivers/power/charger-manager.c b/drivers/power/charger-manager.c
6179     index 9e4dab46eefd..ef1f4c928431 100644
6180     --- a/drivers/power/charger-manager.c
6181     +++ b/drivers/power/charger-manager.c
6182     @@ -1720,6 +1720,11 @@ static int charger_manager_probe(struct platform_device *pdev)
6183     return -EINVAL;
6184     }
6185    
6186     + if (!desc->psy_fuel_gauge) {
6187     + dev_err(&pdev->dev, "No fuel gauge power supply defined\n");
6188     + return -EINVAL;
6189     + }
6190     +
6191     /* Counting index only */
6192     while (desc->psy_charger_stat[i])
6193     i++;
6194     diff --git a/drivers/regulator/max77693.c b/drivers/regulator/max77693.c
6195     index c67ff05fc1dd..d158f71fa128 100644
6196     --- a/drivers/regulator/max77693.c
6197     +++ b/drivers/regulator/max77693.c
6198     @@ -227,7 +227,7 @@ static int max77693_pmic_probe(struct platform_device *pdev)
6199     struct max77693_dev *iodev = dev_get_drvdata(pdev->dev.parent);
6200     struct max77693_regulator_data *rdata = NULL;
6201     int num_rdata, i;
6202     - struct regulator_config config;
6203     + struct regulator_config config = { };
6204    
6205     num_rdata = max77693_pmic_init_rdata(&pdev->dev, &rdata);
6206     if (!rdata || num_rdata <= 0) {
6207     diff --git a/drivers/rtc/Kconfig b/drivers/rtc/Kconfig
6208     index a168e96142b9..54ef393b0def 100644
6209     --- a/drivers/rtc/Kconfig
6210     +++ b/drivers/rtc/Kconfig
6211     @@ -806,7 +806,7 @@ config RTC_DRV_DA9063
6212    
6213     config RTC_DRV_EFI
6214     tristate "EFI RTC"
6215     - depends on EFI
6216     + depends on EFI && !X86
6217     help
6218     If you say yes here you will get support for the EFI
6219     Real Time Clock.
6220     diff --git a/drivers/scsi/qla2xxx/tcm_qla2xxx.c b/drivers/scsi/qla2xxx/tcm_qla2xxx.c
6221     index e2beab962096..4747d2c66024 100644
6222     --- a/drivers/scsi/qla2xxx/tcm_qla2xxx.c
6223     +++ b/drivers/scsi/qla2xxx/tcm_qla2xxx.c
6224     @@ -757,7 +757,16 @@ static void tcm_qla2xxx_clear_nacl_from_fcport_map(struct qla_tgt_sess *sess)
6225     pr_debug("fc_rport domain: port_id 0x%06x\n", nacl->nport_id);
6226    
6227     node = btree_remove32(&lport->lport_fcport_map, nacl->nport_id);
6228     - WARN_ON(node && (node != se_nacl));
6229     + if (WARN_ON(node && (node != se_nacl))) {
6230     + /*
6231     + * The nacl no longer matches what we think it should be.
6232     + * Most likely a new dynamic acl has been added while
6233     + * someone dropped the hardware lock. It clearly is a
6234     + * bug elsewhere, but this bit can't make things worse.
6235     + */
6236     + btree_insert32(&lport->lport_fcport_map, nacl->nport_id,
6237     + node, GFP_ATOMIC);
6238     + }
6239    
6240     pr_debug("Removed from fcport_map: %p for WWNN: 0x%016LX, port_id: 0x%06x\n",
6241     se_nacl, nacl->nport_wwnn, nacl->nport_id);
6242     diff --git a/drivers/scsi/scsi_lib.c b/drivers/scsi/scsi_lib.c
6243     index aaea4b98af16..7cb8c7310a27 100644
6244     --- a/drivers/scsi/scsi_lib.c
6245     +++ b/drivers/scsi/scsi_lib.c
6246     @@ -1887,6 +1887,11 @@ static int scsi_queue_rq(struct blk_mq_hw_ctx *hctx, struct request *req)
6247     req->cmd_flags |= REQ_DONTPREP;
6248     }
6249    
6250     + if (blk_queue_tagged(q))
6251     + req->cmd_flags |= REQ_QUEUED;
6252     + else
6253     + req->cmd_flags &= ~REQ_QUEUED;
6254     +
6255     scsi_init_cmd_errh(cmd);
6256     cmd->scsi_done = scsi_mq_done;
6257    
6258     diff --git a/drivers/spi/spi-fsl-dspi.c b/drivers/spi/spi-fsl-dspi.c
6259     index 5021ddf03f60..fde711380d1a 100644
6260     --- a/drivers/spi/spi-fsl-dspi.c
6261     +++ b/drivers/spi/spi-fsl-dspi.c
6262     @@ -46,7 +46,7 @@
6263    
6264     #define SPI_TCR 0x08
6265    
6266     -#define SPI_CTAR(x) (0x0c + (x * 4))
6267     +#define SPI_CTAR(x) (0x0c + (((x) & 0x3) * 4))
6268     #define SPI_CTAR_FMSZ(x) (((x) & 0x0000000f) << 27)
6269     #define SPI_CTAR_CPOL(x) ((x) << 26)
6270     #define SPI_CTAR_CPHA(x) ((x) << 25)
6271     @@ -70,7 +70,7 @@
6272    
6273     #define SPI_PUSHR 0x34
6274     #define SPI_PUSHR_CONT (1 << 31)
6275     -#define SPI_PUSHR_CTAS(x) (((x) & 0x00000007) << 28)
6276     +#define SPI_PUSHR_CTAS(x) (((x) & 0x00000003) << 28)
6277     #define SPI_PUSHR_EOQ (1 << 27)
6278     #define SPI_PUSHR_CTCNT (1 << 26)
6279     #define SPI_PUSHR_PCS(x) (((1 << x) & 0x0000003f) << 16)
6280     diff --git a/drivers/spi/spi-pl022.c b/drivers/spi/spi-pl022.c
6281     index f1f0a587e4fc..dbd576dbd15a 100644
6282     --- a/drivers/spi/spi-pl022.c
6283     +++ b/drivers/spi/spi-pl022.c
6284     @@ -1074,7 +1074,7 @@ err_rxdesc:
6285     pl022->sgt_tx.nents, DMA_TO_DEVICE);
6286     err_tx_sgmap:
6287     dma_unmap_sg(rxchan->device->dev, pl022->sgt_rx.sgl,
6288     - pl022->sgt_tx.nents, DMA_FROM_DEVICE);
6289     + pl022->sgt_rx.nents, DMA_FROM_DEVICE);
6290     err_rx_sgmap:
6291     sg_free_table(&pl022->sgt_tx);
6292     err_alloc_tx_sg:
6293     diff --git a/drivers/spi/spi-pxa2xx.c b/drivers/spi/spi-pxa2xx.c
6294     index 46f45ca2c694..9090dad99bb2 100644
6295     --- a/drivers/spi/spi-pxa2xx.c
6296     +++ b/drivers/spi/spi-pxa2xx.c
6297     @@ -1276,7 +1276,9 @@ static int pxa2xx_spi_suspend(struct device *dev)
6298     if (status != 0)
6299     return status;
6300     write_SSCR0(0, drv_data->ioaddr);
6301     - clk_disable_unprepare(ssp->clk);
6302     +
6303     + if (!pm_runtime_suspended(dev))
6304     + clk_disable_unprepare(ssp->clk);
6305    
6306     return 0;
6307     }
6308     @@ -1290,7 +1292,8 @@ static int pxa2xx_spi_resume(struct device *dev)
6309     pxa2xx_spi_dma_resume(drv_data);
6310    
6311     /* Enable the SSP clock */
6312     - clk_prepare_enable(ssp->clk);
6313     + if (!pm_runtime_suspended(dev))
6314     + clk_prepare_enable(ssp->clk);
6315    
6316     /* Restore LPSS private register bits */
6317     lpss_ssp_setup(drv_data);
6318     diff --git a/drivers/staging/comedi/comedi_fops.c b/drivers/staging/comedi/comedi_fops.c
6319     index 2182c7463cdb..7a2e9c023257 100644
6320     --- a/drivers/staging/comedi/comedi_fops.c
6321     +++ b/drivers/staging/comedi/comedi_fops.c
6322     @@ -1462,10 +1462,7 @@ static int __comedi_get_user_chanlist(struct comedi_device *dev,
6323     unsigned int *chanlist;
6324     int ret;
6325    
6326     - /* user_chanlist could be NULL for do_cmdtest ioctls */
6327     - if (!user_chanlist)
6328     - return 0;
6329     -
6330     + cmd->chanlist = NULL;
6331     chanlist = memdup_user(user_chanlist,
6332     cmd->chanlist_len * sizeof(unsigned int));
6333     if (IS_ERR(chanlist))
6334     @@ -1609,13 +1606,18 @@ static int do_cmdtest_ioctl(struct comedi_device *dev,
6335    
6336     s = &dev->subdevices[cmd.subdev];
6337    
6338     - /* load channel/gain list */
6339     - ret = __comedi_get_user_chanlist(dev, s, user_chanlist, &cmd);
6340     - if (ret)
6341     - return ret;
6342     + /* user_chanlist can be NULL for COMEDI_CMDTEST ioctl */
6343     + if (user_chanlist) {
6344     + /* load channel/gain list */
6345     + ret = __comedi_get_user_chanlist(dev, s, user_chanlist, &cmd);
6346     + if (ret)
6347     + return ret;
6348     + }
6349    
6350     ret = s->do_cmdtest(dev, s, &cmd);
6351    
6352     + kfree(cmd.chanlist); /* free kernel copy of user chanlist */
6353     +
6354     /* restore chanlist pointer before copying back */
6355     cmd.chanlist = (unsigned int __force *)user_chanlist;
6356    
6357     diff --git a/drivers/staging/iio/adc/mxs-lradc.c b/drivers/staging/iio/adc/mxs-lradc.c
6358     index 468327f4a753..d3436114a6f4 100644
6359     --- a/drivers/staging/iio/adc/mxs-lradc.c
6360     +++ b/drivers/staging/iio/adc/mxs-lradc.c
6361     @@ -1565,14 +1565,16 @@ static int mxs_lradc_probe(struct platform_device *pdev)
6362     /* Grab all IRQ sources */
6363     for (i = 0; i < of_cfg->irq_count; i++) {
6364     lradc->irq[i] = platform_get_irq(pdev, i);
6365     - if (lradc->irq[i] < 0)
6366     - return lradc->irq[i];
6367     + if (lradc->irq[i] < 0) {
6368     + ret = lradc->irq[i];
6369     + goto err_clk;
6370     + }
6371    
6372     ret = devm_request_irq(dev, lradc->irq[i],
6373     mxs_lradc_handle_irq, 0,
6374     of_cfg->irq_name[i], iio);
6375     if (ret)
6376     - return ret;
6377     + goto err_clk;
6378     }
6379    
6380     lradc->vref_mv = of_cfg->vref_mv;
6381     @@ -1594,7 +1596,7 @@ static int mxs_lradc_probe(struct platform_device *pdev)
6382     &mxs_lradc_trigger_handler,
6383     &mxs_lradc_buffer_ops);
6384     if (ret)
6385     - return ret;
6386     + goto err_clk;
6387    
6388     ret = mxs_lradc_trigger_init(iio);
6389     if (ret)
6390     @@ -1649,6 +1651,8 @@ err_dev:
6391     mxs_lradc_trigger_remove(iio);
6392     err_trig:
6393     iio_triggered_buffer_cleanup(iio);
6394     +err_clk:
6395     + clk_disable_unprepare(lradc->clk);
6396     return ret;
6397     }
6398    
6399     diff --git a/drivers/staging/iio/impedance-analyzer/ad5933.c b/drivers/staging/iio/impedance-analyzer/ad5933.c
6400     index 2b96665da8a2..97d4b3fb7e95 100644
6401     --- a/drivers/staging/iio/impedance-analyzer/ad5933.c
6402     +++ b/drivers/staging/iio/impedance-analyzer/ad5933.c
6403     @@ -115,6 +115,7 @@ static const struct iio_chan_spec ad5933_channels[] = {
6404     .channel = 0,
6405     .info_mask_separate = BIT(IIO_CHAN_INFO_PROCESSED),
6406     .address = AD5933_REG_TEMP_DATA,
6407     + .scan_index = -1,
6408     .scan_type = {
6409     .sign = 's',
6410     .realbits = 14,
6411     @@ -124,9 +125,7 @@ static const struct iio_chan_spec ad5933_channels[] = {
6412     .type = IIO_VOLTAGE,
6413     .indexed = 1,
6414     .channel = 0,
6415     - .extend_name = "real_raw",
6416     - .info_mask_separate = BIT(IIO_CHAN_INFO_RAW) |
6417     - BIT(IIO_CHAN_INFO_SCALE),
6418     + .extend_name = "real",
6419     .address = AD5933_REG_REAL_DATA,
6420     .scan_index = 0,
6421     .scan_type = {
6422     @@ -138,9 +137,7 @@ static const struct iio_chan_spec ad5933_channels[] = {
6423     .type = IIO_VOLTAGE,
6424     .indexed = 1,
6425     .channel = 0,
6426     - .extend_name = "imag_raw",
6427     - .info_mask_separate = BIT(IIO_CHAN_INFO_RAW) |
6428     - BIT(IIO_CHAN_INFO_SCALE),
6429     + .extend_name = "imag",
6430     .address = AD5933_REG_IMAG_DATA,
6431     .scan_index = 1,
6432     .scan_type = {
6433     @@ -748,14 +745,14 @@ static int ad5933_probe(struct i2c_client *client,
6434     indio_dev->name = id->name;
6435     indio_dev->modes = INDIO_DIRECT_MODE;
6436     indio_dev->channels = ad5933_channels;
6437     - indio_dev->num_channels = 1; /* only register temp0_input */
6438     + indio_dev->num_channels = ARRAY_SIZE(ad5933_channels);
6439    
6440     ret = ad5933_register_ring_funcs_and_init(indio_dev);
6441     if (ret)
6442     goto error_disable_reg;
6443    
6444     - /* skip temp0_input, register in0_(real|imag)_raw */
6445     - ret = iio_buffer_register(indio_dev, &ad5933_channels[1], 2);
6446     + ret = iio_buffer_register(indio_dev, ad5933_channels,
6447     + ARRAY_SIZE(ad5933_channels));
6448     if (ret)
6449     goto error_unreg_ring;
6450    
6451     diff --git a/drivers/staging/iio/meter/ade7758.h b/drivers/staging/iio/meter/ade7758.h
6452     index 07318203a836..e8c98cf57070 100644
6453     --- a/drivers/staging/iio/meter/ade7758.h
6454     +++ b/drivers/staging/iio/meter/ade7758.h
6455     @@ -119,7 +119,6 @@ struct ade7758_state {
6456     u8 *tx;
6457     u8 *rx;
6458     struct mutex buf_lock;
6459     - const struct iio_chan_spec *ade7758_ring_channels;
6460     struct spi_transfer ring_xfer[4];
6461     struct spi_message ring_msg;
6462     /*
6463     diff --git a/drivers/staging/iio/meter/ade7758_core.c b/drivers/staging/iio/meter/ade7758_core.c
6464     index cba183e24838..94d9914a602c 100644
6465     --- a/drivers/staging/iio/meter/ade7758_core.c
6466     +++ b/drivers/staging/iio/meter/ade7758_core.c
6467     @@ -630,9 +630,6 @@ static const struct iio_chan_spec ade7758_channels[] = {
6468     .type = IIO_VOLTAGE,
6469     .indexed = 1,
6470     .channel = 0,
6471     - .extend_name = "raw",
6472     - .info_mask_separate = BIT(IIO_CHAN_INFO_RAW),
6473     - .info_mask_shared_by_type = BIT(IIO_CHAN_INFO_SCALE),
6474     .address = AD7758_WT(AD7758_PHASE_A, AD7758_VOLTAGE),
6475     .scan_index = 0,
6476     .scan_type = {
6477     @@ -644,9 +641,6 @@ static const struct iio_chan_spec ade7758_channels[] = {
6478     .type = IIO_CURRENT,
6479     .indexed = 1,
6480     .channel = 0,
6481     - .extend_name = "raw",
6482     - .info_mask_separate = BIT(IIO_CHAN_INFO_RAW),
6483     - .info_mask_shared_by_type = BIT(IIO_CHAN_INFO_SCALE),
6484     .address = AD7758_WT(AD7758_PHASE_A, AD7758_CURRENT),
6485     .scan_index = 1,
6486     .scan_type = {
6487     @@ -658,9 +652,7 @@ static const struct iio_chan_spec ade7758_channels[] = {
6488     .type = IIO_POWER,
6489     .indexed = 1,
6490     .channel = 0,
6491     - .extend_name = "apparent_raw",
6492     - .info_mask_separate = BIT(IIO_CHAN_INFO_RAW),
6493     - .info_mask_shared_by_type = BIT(IIO_CHAN_INFO_SCALE),
6494     + .extend_name = "apparent",
6495     .address = AD7758_WT(AD7758_PHASE_A, AD7758_APP_PWR),
6496     .scan_index = 2,
6497     .scan_type = {
6498     @@ -672,9 +664,7 @@ static const struct iio_chan_spec ade7758_channels[] = {
6499     .type = IIO_POWER,
6500     .indexed = 1,
6501     .channel = 0,
6502     - .extend_name = "active_raw",
6503     - .info_mask_separate = BIT(IIO_CHAN_INFO_RAW),
6504     - .info_mask_shared_by_type = BIT(IIO_CHAN_INFO_SCALE),
6505     + .extend_name = "active",
6506     .address = AD7758_WT(AD7758_PHASE_A, AD7758_ACT_PWR),
6507     .scan_index = 3,
6508     .scan_type = {
6509     @@ -686,9 +676,7 @@ static const struct iio_chan_spec ade7758_channels[] = {
6510     .type = IIO_POWER,
6511     .indexed = 1,
6512     .channel = 0,
6513     - .extend_name = "reactive_raw",
6514     - .info_mask_separate = BIT(IIO_CHAN_INFO_RAW),
6515     - .info_mask_shared_by_type = BIT(IIO_CHAN_INFO_SCALE),
6516     + .extend_name = "reactive",
6517     .address = AD7758_WT(AD7758_PHASE_A, AD7758_REACT_PWR),
6518     .scan_index = 4,
6519     .scan_type = {
6520     @@ -700,9 +688,6 @@ static const struct iio_chan_spec ade7758_channels[] = {
6521     .type = IIO_VOLTAGE,
6522     .indexed = 1,
6523     .channel = 1,
6524     - .extend_name = "raw",
6525     - .info_mask_separate = BIT(IIO_CHAN_INFO_RAW),
6526     - .info_mask_shared_by_type = BIT(IIO_CHAN_INFO_SCALE),
6527     .address = AD7758_WT(AD7758_PHASE_B, AD7758_VOLTAGE),
6528     .scan_index = 5,
6529     .scan_type = {
6530     @@ -714,9 +699,6 @@ static const struct iio_chan_spec ade7758_channels[] = {
6531     .type = IIO_CURRENT,
6532     .indexed = 1,
6533     .channel = 1,
6534     - .extend_name = "raw",
6535     - .info_mask_separate = BIT(IIO_CHAN_INFO_RAW),
6536     - .info_mask_shared_by_type = BIT(IIO_CHAN_INFO_SCALE),
6537     .address = AD7758_WT(AD7758_PHASE_B, AD7758_CURRENT),
6538     .scan_index = 6,
6539     .scan_type = {
6540     @@ -728,9 +710,7 @@ static const struct iio_chan_spec ade7758_channels[] = {
6541     .type = IIO_POWER,
6542     .indexed = 1,
6543     .channel = 1,
6544     - .extend_name = "apparent_raw",
6545     - .info_mask_separate = BIT(IIO_CHAN_INFO_RAW),
6546     - .info_mask_shared_by_type = BIT(IIO_CHAN_INFO_SCALE),
6547     + .extend_name = "apparent",
6548     .address = AD7758_WT(AD7758_PHASE_B, AD7758_APP_PWR),
6549     .scan_index = 7,
6550     .scan_type = {
6551     @@ -742,9 +722,7 @@ static const struct iio_chan_spec ade7758_channels[] = {
6552     .type = IIO_POWER,
6553     .indexed = 1,
6554     .channel = 1,
6555     - .extend_name = "active_raw",
6556     - .info_mask_separate = BIT(IIO_CHAN_INFO_RAW),
6557     - .info_mask_shared_by_type = BIT(IIO_CHAN_INFO_SCALE),
6558     + .extend_name = "active",
6559     .address = AD7758_WT(AD7758_PHASE_B, AD7758_ACT_PWR),
6560     .scan_index = 8,
6561     .scan_type = {
6562     @@ -756,9 +734,7 @@ static const struct iio_chan_spec ade7758_channels[] = {
6563     .type = IIO_POWER,
6564     .indexed = 1,
6565     .channel = 1,
6566     - .extend_name = "reactive_raw",
6567     - .info_mask_separate = BIT(IIO_CHAN_INFO_RAW),
6568     - .info_mask_shared_by_type = BIT(IIO_CHAN_INFO_SCALE),
6569     + .extend_name = "reactive",
6570     .address = AD7758_WT(AD7758_PHASE_B, AD7758_REACT_PWR),
6571     .scan_index = 9,
6572     .scan_type = {
6573     @@ -770,9 +746,6 @@ static const struct iio_chan_spec ade7758_channels[] = {
6574     .type = IIO_VOLTAGE,
6575     .indexed = 1,
6576     .channel = 2,
6577     - .extend_name = "raw",
6578     - .info_mask_separate = BIT(IIO_CHAN_INFO_RAW),
6579     - .info_mask_shared_by_type = BIT(IIO_CHAN_INFO_SCALE),
6580     .address = AD7758_WT(AD7758_PHASE_C, AD7758_VOLTAGE),
6581     .scan_index = 10,
6582     .scan_type = {
6583     @@ -784,9 +757,6 @@ static const struct iio_chan_spec ade7758_channels[] = {
6584     .type = IIO_CURRENT,
6585     .indexed = 1,
6586     .channel = 2,
6587     - .extend_name = "raw",
6588     - .info_mask_separate = BIT(IIO_CHAN_INFO_RAW),
6589     - .info_mask_shared_by_type = BIT(IIO_CHAN_INFO_SCALE),
6590     .address = AD7758_WT(AD7758_PHASE_C, AD7758_CURRENT),
6591     .scan_index = 11,
6592     .scan_type = {
6593     @@ -798,9 +768,7 @@ static const struct iio_chan_spec ade7758_channels[] = {
6594     .type = IIO_POWER,
6595     .indexed = 1,
6596     .channel = 2,
6597     - .extend_name = "apparent_raw",
6598     - .info_mask_separate = BIT(IIO_CHAN_INFO_RAW),
6599     - .info_mask_shared_by_type = BIT(IIO_CHAN_INFO_SCALE),
6600     + .extend_name = "apparent",
6601     .address = AD7758_WT(AD7758_PHASE_C, AD7758_APP_PWR),
6602     .scan_index = 12,
6603     .scan_type = {
6604     @@ -812,9 +780,7 @@ static const struct iio_chan_spec ade7758_channels[] = {
6605     .type = IIO_POWER,
6606     .indexed = 1,
6607     .channel = 2,
6608     - .extend_name = "active_raw",
6609     - .info_mask_separate = BIT(IIO_CHAN_INFO_RAW),
6610     - .info_mask_shared_by_type = BIT(IIO_CHAN_INFO_SCALE),
6611     + .extend_name = "active",
6612     .address = AD7758_WT(AD7758_PHASE_C, AD7758_ACT_PWR),
6613     .scan_index = 13,
6614     .scan_type = {
6615     @@ -826,9 +792,7 @@ static const struct iio_chan_spec ade7758_channels[] = {
6616     .type = IIO_POWER,
6617     .indexed = 1,
6618     .channel = 2,
6619     - .extend_name = "reactive_raw",
6620     - .info_mask_separate = BIT(IIO_CHAN_INFO_RAW),
6621     - .info_mask_shared_by_type = BIT(IIO_CHAN_INFO_SCALE),
6622     + .extend_name = "reactive",
6623     .address = AD7758_WT(AD7758_PHASE_C, AD7758_REACT_PWR),
6624     .scan_index = 14,
6625     .scan_type = {
6626     @@ -869,13 +833,14 @@ static int ade7758_probe(struct spi_device *spi)
6627     goto error_free_rx;
6628     }
6629     st->us = spi;
6630     - st->ade7758_ring_channels = &ade7758_channels[0];
6631     mutex_init(&st->buf_lock);
6632    
6633     indio_dev->name = spi->dev.driver->name;
6634     indio_dev->dev.parent = &spi->dev;
6635     indio_dev->info = &ade7758_info;
6636     indio_dev->modes = INDIO_DIRECT_MODE;
6637     + indio_dev->channels = ade7758_channels;
6638     + indio_dev->num_channels = ARRAY_SIZE(ade7758_channels);
6639    
6640     ret = ade7758_configure_ring(indio_dev);
6641     if (ret)
6642     diff --git a/drivers/staging/iio/meter/ade7758_ring.c b/drivers/staging/iio/meter/ade7758_ring.c
6643     index c0accf8cce93..6e9006490742 100644
6644     --- a/drivers/staging/iio/meter/ade7758_ring.c
6645     +++ b/drivers/staging/iio/meter/ade7758_ring.c
6646     @@ -85,17 +85,16 @@ static irqreturn_t ade7758_trigger_handler(int irq, void *p)
6647     **/
6648     static int ade7758_ring_preenable(struct iio_dev *indio_dev)
6649     {
6650     - struct ade7758_state *st = iio_priv(indio_dev);
6651     unsigned channel;
6652    
6653     - if (!bitmap_empty(indio_dev->active_scan_mask, indio_dev->masklength))
6654     + if (bitmap_empty(indio_dev->active_scan_mask, indio_dev->masklength))
6655     return -EINVAL;
6656    
6657     channel = find_first_bit(indio_dev->active_scan_mask,
6658     indio_dev->masklength);
6659    
6660     ade7758_write_waveform_type(&indio_dev->dev,
6661     - st->ade7758_ring_channels[channel].address);
6662     + indio_dev->channels[channel].address);
6663    
6664     return 0;
6665     }
6666     diff --git a/drivers/target/target_core_device.c b/drivers/target/target_core_device.c
6667     index 98da90167159..15a1c133ec05 100644
6668     --- a/drivers/target/target_core_device.c
6669     +++ b/drivers/target/target_core_device.c
6670     @@ -1409,7 +1409,8 @@ int core_dev_add_initiator_node_lun_acl(
6671     * Check to see if there are any existing persistent reservation APTPL
6672     * pre-registrations that need to be enabled for this LUN ACL..
6673     */
6674     - core_scsi3_check_aptpl_registration(lun->lun_se_dev, tpg, lun, lacl);
6675     + core_scsi3_check_aptpl_registration(lun->lun_se_dev, tpg, lun, nacl,
6676     + lacl->mapped_lun);
6677     return 0;
6678     }
6679    
6680     diff --git a/drivers/target/target_core_pr.c b/drivers/target/target_core_pr.c
6681     index df357862286e..1aadcfc9a8c1 100644
6682     --- a/drivers/target/target_core_pr.c
6683     +++ b/drivers/target/target_core_pr.c
6684     @@ -944,10 +944,10 @@ int core_scsi3_check_aptpl_registration(
6685     struct se_device *dev,
6686     struct se_portal_group *tpg,
6687     struct se_lun *lun,
6688     - struct se_lun_acl *lun_acl)
6689     + struct se_node_acl *nacl,
6690     + u32 mapped_lun)
6691     {
6692     - struct se_node_acl *nacl = lun_acl->se_lun_nacl;
6693     - struct se_dev_entry *deve = nacl->device_list[lun_acl->mapped_lun];
6694     + struct se_dev_entry *deve = nacl->device_list[mapped_lun];
6695    
6696     if (dev->dev_reservation_flags & DRF_SPC2_RESERVATIONS)
6697     return 0;
6698     diff --git a/drivers/target/target_core_pr.h b/drivers/target/target_core_pr.h
6699     index 2ee2936fa0bd..749fd7bb7510 100644
6700     --- a/drivers/target/target_core_pr.h
6701     +++ b/drivers/target/target_core_pr.h
6702     @@ -60,7 +60,7 @@ extern int core_scsi3_alloc_aptpl_registration(
6703     unsigned char *, u16, u32, int, int, u8);
6704     extern int core_scsi3_check_aptpl_registration(struct se_device *,
6705     struct se_portal_group *, struct se_lun *,
6706     - struct se_lun_acl *);
6707     + struct se_node_acl *, u32);
6708     extern void core_scsi3_free_pr_reg_from_nacl(struct se_device *,
6709     struct se_node_acl *);
6710     extern void core_scsi3_free_all_registrations(struct se_device *);
6711     diff --git a/drivers/target/target_core_tpg.c b/drivers/target/target_core_tpg.c
6712     index fddfae61222f..8d8ecfbcbad7 100644
6713     --- a/drivers/target/target_core_tpg.c
6714     +++ b/drivers/target/target_core_tpg.c
6715     @@ -40,6 +40,7 @@
6716     #include <target/target_core_fabric.h>
6717    
6718     #include "target_core_internal.h"
6719     +#include "target_core_pr.h"
6720    
6721     extern struct se_device *g_lun0_dev;
6722    
6723     @@ -166,6 +167,13 @@ void core_tpg_add_node_to_devs(
6724    
6725     core_enable_device_list_for_node(lun, NULL, lun->unpacked_lun,
6726     lun_access, acl, tpg);
6727     + /*
6728     + * Check to see if there are any existing persistent reservation
6729     + * APTPL pre-registrations that need to be enabled for this dynamic
6730     + * LUN ACL now..
6731     + */
6732     + core_scsi3_check_aptpl_registration(dev, tpg, lun, acl,
6733     + lun->unpacked_lun);
6734     spin_lock(&tpg->tpg_lun_lock);
6735     }
6736     spin_unlock(&tpg->tpg_lun_lock);
6737     diff --git a/drivers/target/target_core_transport.c b/drivers/target/target_core_transport.c
6738     index 7fa62fc93e0b..ab610146681d 100644
6739     --- a/drivers/target/target_core_transport.c
6740     +++ b/drivers/target/target_core_transport.c
6741     @@ -1877,8 +1877,7 @@ static void transport_complete_qf(struct se_cmd *cmd)
6742     if (cmd->se_cmd_flags & SCF_TRANSPORT_TASK_SENSE) {
6743     trace_target_cmd_complete(cmd);
6744     ret = cmd->se_tfo->queue_status(cmd);
6745     - if (ret)
6746     - goto out;
6747     + goto out;
6748     }
6749    
6750     switch (cmd->data_direction) {
6751     diff --git a/drivers/tty/serial/msm_serial.c b/drivers/tty/serial/msm_serial.c
6752     index 0da0b5474e98..077570a48828 100644
6753     --- a/drivers/tty/serial/msm_serial.c
6754     +++ b/drivers/tty/serial/msm_serial.c
6755     @@ -683,17 +683,6 @@ static void msm_power(struct uart_port *port, unsigned int state,
6756     }
6757    
6758     #ifdef CONFIG_CONSOLE_POLL
6759     -static int msm_poll_init(struct uart_port *port)
6760     -{
6761     - struct msm_port *msm_port = UART_TO_MSM(port);
6762     -
6763     - /* Enable single character mode on RX FIFO */
6764     - if (msm_port->is_uartdm >= UARTDM_1P4)
6765     - msm_write(port, UARTDM_DMEN_RX_SC_ENABLE, UARTDM_DMEN);
6766     -
6767     - return 0;
6768     -}
6769     -
6770     static int msm_poll_get_char_single(struct uart_port *port)
6771     {
6772     struct msm_port *msm_port = UART_TO_MSM(port);
6773     @@ -705,7 +694,7 @@ static int msm_poll_get_char_single(struct uart_port *port)
6774     return msm_read(port, rf_reg) & 0xff;
6775     }
6776    
6777     -static int msm_poll_get_char_dm_1p3(struct uart_port *port)
6778     +static int msm_poll_get_char_dm(struct uart_port *port)
6779     {
6780     int c;
6781     static u32 slop;
6782     @@ -729,6 +718,10 @@ static int msm_poll_get_char_dm_1p3(struct uart_port *port)
6783     slop = msm_read(port, UARTDM_RF);
6784     c = sp[0];
6785     count--;
6786     + msm_write(port, UART_CR_CMD_RESET_STALE_INT, UART_CR);
6787     + msm_write(port, 0xFFFFFF, UARTDM_DMRX);
6788     + msm_write(port, UART_CR_CMD_STALE_EVENT_ENABLE,
6789     + UART_CR);
6790     } else {
6791     c = NO_POLL_CHAR;
6792     }
6793     @@ -752,8 +745,8 @@ static int msm_poll_get_char(struct uart_port *port)
6794     imr = msm_read(port, UART_IMR);
6795     msm_write(port, 0, UART_IMR);
6796    
6797     - if (msm_port->is_uartdm == UARTDM_1P3)
6798     - c = msm_poll_get_char_dm_1p3(port);
6799     + if (msm_port->is_uartdm)
6800     + c = msm_poll_get_char_dm(port);
6801     else
6802     c = msm_poll_get_char_single(port);
6803    
6804     @@ -812,7 +805,6 @@ static struct uart_ops msm_uart_pops = {
6805     .verify_port = msm_verify_port,
6806     .pm = msm_power,
6807     #ifdef CONFIG_CONSOLE_POLL
6808     - .poll_init = msm_poll_init,
6809     .poll_get_char = msm_poll_get_char,
6810     .poll_put_char = msm_poll_put_char,
6811     #endif
6812     diff --git a/drivers/tty/serial/serial_core.c b/drivers/tty/serial/serial_core.c
6813     index 29a7be47389a..0f03988d81fc 100644
6814     --- a/drivers/tty/serial/serial_core.c
6815     +++ b/drivers/tty/serial/serial_core.c
6816     @@ -362,7 +362,7 @@ uart_get_baud_rate(struct uart_port *port, struct ktermios *termios,
6817     * The spd_hi, spd_vhi, spd_shi, spd_warp kludge...
6818     * Die! Die! Die!
6819     */
6820     - if (baud == 38400)
6821     + if (try == 0 && baud == 38400)
6822     baud = altbaud;
6823    
6824     /*
6825     diff --git a/drivers/tty/tty_io.c b/drivers/tty/tty_io.c
6826     index 8fbad3410c75..848c17a58c3a 100644
6827     --- a/drivers/tty/tty_io.c
6828     +++ b/drivers/tty/tty_io.c
6829     @@ -1686,6 +1686,7 @@ int tty_release(struct inode *inode, struct file *filp)
6830     int pty_master, tty_closing, o_tty_closing, do_sleep;
6831     int idx;
6832     char buf[64];
6833     + long timeout = 0;
6834    
6835     if (tty_paranoia_check(tty, inode, __func__))
6836     return 0;
6837     @@ -1770,7 +1771,11 @@ int tty_release(struct inode *inode, struct file *filp)
6838     __func__, tty_name(tty, buf));
6839     tty_unlock_pair(tty, o_tty);
6840     mutex_unlock(&tty_mutex);
6841     - schedule();
6842     + schedule_timeout_killable(timeout);
6843     + if (timeout < 120 * HZ)
6844     + timeout = 2 * timeout + 1;
6845     + else
6846     + timeout = MAX_SCHEDULE_TIMEOUT;
6847     }
6848    
6849     /*
6850     diff --git a/drivers/tty/vt/consolemap.c b/drivers/tty/vt/consolemap.c
6851     index 610b720d3b91..59b25e039968 100644
6852     --- a/drivers/tty/vt/consolemap.c
6853     +++ b/drivers/tty/vt/consolemap.c
6854     @@ -539,6 +539,12 @@ int con_set_unimap(struct vc_data *vc, ushort ct, struct unipair __user *list)
6855    
6856     /* Save original vc_unipagdir_loc in case we allocate a new one */
6857     p = *vc->vc_uni_pagedir_loc;
6858     +
6859     + if (!p) {
6860     + err = -EINVAL;
6861     +
6862     + goto out_unlock;
6863     + }
6864    
6865     if (p->refcount > 1) {
6866     int j, k;
6867     @@ -623,6 +629,7 @@ int con_set_unimap(struct vc_data *vc, ushort ct, struct unipair __user *list)
6868     set_inverse_transl(vc, p, i); /* Update inverse translations */
6869     set_inverse_trans_unicode(vc, p);
6870    
6871     +out_unlock:
6872     console_unlock();
6873     return err;
6874     }
6875     diff --git a/drivers/usb/chipidea/core.c b/drivers/usb/chipidea/core.c
6876     index 619d13e29995..4ecb6501a7ea 100644
6877     --- a/drivers/usb/chipidea/core.c
6878     +++ b/drivers/usb/chipidea/core.c
6879     @@ -732,7 +732,6 @@ static int ci_hdrc_remove(struct platform_device *pdev)
6880     ci_role_destroy(ci);
6881     ci_hdrc_enter_lpm(ci, true);
6882     usb_phy_shutdown(ci->transceiver);
6883     - kfree(ci->hw_bank.regmap);
6884    
6885     return 0;
6886     }
6887     diff --git a/drivers/usb/class/cdc-acm.c b/drivers/usb/class/cdc-acm.c
6888     index e934e19f49f5..7daaef192c28 100644
6889     --- a/drivers/usb/class/cdc-acm.c
6890     +++ b/drivers/usb/class/cdc-acm.c
6891     @@ -145,8 +145,15 @@ static int acm_ctrl_msg(struct acm *acm, int request, int value,
6892     /* devices aren't required to support these requests.
6893     * the cdc acm descriptor tells whether they do...
6894     */
6895     -#define acm_set_control(acm, control) \
6896     - acm_ctrl_msg(acm, USB_CDC_REQ_SET_CONTROL_LINE_STATE, control, NULL, 0)
6897     +static inline int acm_set_control(struct acm *acm, int control)
6898     +{
6899     + if (acm->quirks & QUIRK_CONTROL_LINE_STATE)
6900     + return -EOPNOTSUPP;
6901     +
6902     + return acm_ctrl_msg(acm, USB_CDC_REQ_SET_CONTROL_LINE_STATE,
6903     + control, NULL, 0);
6904     +}
6905     +
6906     #define acm_set_line(acm, line) \
6907     acm_ctrl_msg(acm, USB_CDC_REQ_SET_LINE_CODING, 0, line, sizeof *(line))
6908     #define acm_send_break(acm, ms) \
6909     @@ -980,11 +987,12 @@ static void acm_tty_set_termios(struct tty_struct *tty,
6910     /* FIXME: Needs to clear unsupported bits in the termios */
6911     acm->clocal = ((termios->c_cflag & CLOCAL) != 0);
6912    
6913     - if (!newline.dwDTERate) {
6914     + if (C_BAUD(tty) == B0) {
6915     newline.dwDTERate = acm->line.dwDTERate;
6916     newctrl &= ~ACM_CTRL_DTR;
6917     - } else
6918     + } else if (termios_old && (termios_old->c_cflag & CBAUD) == B0) {
6919     newctrl |= ACM_CTRL_DTR;
6920     + }
6921    
6922     if (newctrl != acm->ctrlout)
6923     acm_set_control(acm, acm->ctrlout = newctrl);
6924     @@ -1314,6 +1322,7 @@ made_compressed_probe:
6925     tty_port_init(&acm->port);
6926     acm->port.ops = &acm_port_ops;
6927     init_usb_anchor(&acm->delayed);
6928     + acm->quirks = quirks;
6929    
6930     buf = usb_alloc_coherent(usb_dev, ctrlsize, GFP_KERNEL, &acm->ctrl_dma);
6931     if (!buf) {
6932     @@ -1681,6 +1690,9 @@ static const struct usb_device_id acm_ids[] = {
6933     { USB_DEVICE(0x0572, 0x1328), /* Shiro / Aztech USB MODEM UM-3100 */
6934     .driver_info = NO_UNION_NORMAL, /* has no union descriptor */
6935     },
6936     + { USB_DEVICE(0x20df, 0x0001), /* Simtec Electronics Entropy Key */
6937     + .driver_info = QUIRK_CONTROL_LINE_STATE, },
6938     + { USB_DEVICE(0x2184, 0x001c) }, /* GW Instek AFG-2225 */
6939     { USB_DEVICE(0x22b8, 0x6425), /* Motorola MOTOMAGX phones */
6940     },
6941     /* Motorola H24 HSPA module: */
6942     diff --git a/drivers/usb/class/cdc-acm.h b/drivers/usb/class/cdc-acm.h
6943     index fc75651afe1c..d3251ebd09e2 100644
6944     --- a/drivers/usb/class/cdc-acm.h
6945     +++ b/drivers/usb/class/cdc-acm.h
6946     @@ -121,6 +121,7 @@ struct acm {
6947     unsigned int throttle_req:1; /* throttle requested */
6948     u8 bInterval;
6949     struct usb_anchor delayed; /* writes queued for a device about to be woken */
6950     + unsigned long quirks;
6951     };
6952    
6953     #define CDC_DATA_INTERFACE_TYPE 0x0a
6954     @@ -132,3 +133,4 @@ struct acm {
6955     #define NOT_A_MODEM BIT(3)
6956     #define NO_DATA_INTERFACE BIT(4)
6957     #define IGNORE_DEVICE BIT(5)
6958     +#define QUIRK_CONTROL_LINE_STATE BIT(6)
6959     diff --git a/drivers/usb/core/hcd.c b/drivers/usb/core/hcd.c
6960     index 487abcfcccd8..258e6fecdf5e 100644
6961     --- a/drivers/usb/core/hcd.c
6962     +++ b/drivers/usb/core/hcd.c
6963     @@ -2057,6 +2057,8 @@ int usb_alloc_streams(struct usb_interface *interface,
6964     return -EINVAL;
6965     if (dev->speed != USB_SPEED_SUPER)
6966     return -EINVAL;
6967     + if (dev->state < USB_STATE_CONFIGURED)
6968     + return -ENODEV;
6969    
6970     for (i = 0; i < num_eps; i++) {
6971     /* Streams only apply to bulk endpoints. */
6972     diff --git a/drivers/usb/core/hub.c b/drivers/usb/core/hub.c
6973     index dc849154f9de..674c262907d9 100644
6974     --- a/drivers/usb/core/hub.c
6975     +++ b/drivers/usb/core/hub.c
6976     @@ -4540,6 +4540,9 @@ check_highspeed (struct usb_hub *hub, struct usb_device *udev, int port1)
6977     struct usb_qualifier_descriptor *qual;
6978     int status;
6979    
6980     + if (udev->quirks & USB_QUIRK_DEVICE_QUALIFIER)
6981     + return;
6982     +
6983     qual = kmalloc (sizeof *qual, GFP_KERNEL);
6984     if (qual == NULL)
6985     return;
6986     diff --git a/drivers/usb/core/quirks.c b/drivers/usb/core/quirks.c
6987     index 814e712655e4..39b4081b632d 100644
6988     --- a/drivers/usb/core/quirks.c
6989     +++ b/drivers/usb/core/quirks.c
6990     @@ -93,6 +93,16 @@ static const struct usb_device_id usb_quirk_list[] = {
6991     { USB_DEVICE(0x04e8, 0x6601), .driver_info =
6992     USB_QUIRK_CONFIG_INTF_STRINGS },
6993    
6994     + /* Elan Touchscreen */
6995     + { USB_DEVICE(0x04f3, 0x0089), .driver_info =
6996     + USB_QUIRK_DEVICE_QUALIFIER },
6997     +
6998     + { USB_DEVICE(0x04f3, 0x009b), .driver_info =
6999     + USB_QUIRK_DEVICE_QUALIFIER },
7000     +
7001     + { USB_DEVICE(0x04f3, 0x016f), .driver_info =
7002     + USB_QUIRK_DEVICE_QUALIFIER },
7003     +
7004     /* Roland SC-8820 */
7005     { USB_DEVICE(0x0582, 0x0007), .driver_info = USB_QUIRK_RESET_RESUME },
7006    
7007     diff --git a/drivers/usb/dwc3/dwc3-omap.c b/drivers/usb/dwc3/dwc3-omap.c
7008     index fc0de3753648..97a5a0c7df7d 100644
7009     --- a/drivers/usb/dwc3/dwc3-omap.c
7010     +++ b/drivers/usb/dwc3/dwc3-omap.c
7011     @@ -599,7 +599,7 @@ static int dwc3_omap_prepare(struct device *dev)
7012     {
7013     struct dwc3_omap *omap = dev_get_drvdata(dev);
7014    
7015     - dwc3_omap_write_irqmisc_set(omap, 0x00);
7016     + dwc3_omap_disable_irqs(omap);
7017    
7018     return 0;
7019     }
7020     @@ -607,19 +607,8 @@ static int dwc3_omap_prepare(struct device *dev)
7021     static void dwc3_omap_complete(struct device *dev)
7022     {
7023     struct dwc3_omap *omap = dev_get_drvdata(dev);
7024     - u32 reg;
7025    
7026     - reg = (USBOTGSS_IRQMISC_OEVT |
7027     - USBOTGSS_IRQMISC_DRVVBUS_RISE |
7028     - USBOTGSS_IRQMISC_CHRGVBUS_RISE |
7029     - USBOTGSS_IRQMISC_DISCHRGVBUS_RISE |
7030     - USBOTGSS_IRQMISC_IDPULLUP_RISE |
7031     - USBOTGSS_IRQMISC_DRVVBUS_FALL |
7032     - USBOTGSS_IRQMISC_CHRGVBUS_FALL |
7033     - USBOTGSS_IRQMISC_DISCHRGVBUS_FALL |
7034     - USBOTGSS_IRQMISC_IDPULLUP_FALL);
7035     -
7036     - dwc3_omap_write_irqmisc_set(omap, reg);
7037     + dwc3_omap_enable_irqs(omap);
7038     }
7039    
7040     static int dwc3_omap_suspend(struct device *dev)
7041     diff --git a/drivers/usb/dwc3/ep0.c b/drivers/usb/dwc3/ep0.c
7042     index 21a352079bc2..0985ff715c0c 100644
7043     --- a/drivers/usb/dwc3/ep0.c
7044     +++ b/drivers/usb/dwc3/ep0.c
7045     @@ -251,7 +251,7 @@ static void dwc3_ep0_stall_and_restart(struct dwc3 *dwc)
7046    
7047     /* stall is always issued on EP0 */
7048     dep = dwc->eps[0];
7049     - __dwc3_gadget_ep_set_halt(dep, 1);
7050     + __dwc3_gadget_ep_set_halt(dep, 1, false);
7051     dep->flags = DWC3_EP_ENABLED;
7052     dwc->delayed_status = false;
7053    
7054     @@ -461,7 +461,7 @@ static int dwc3_ep0_handle_feature(struct dwc3 *dwc,
7055     return -EINVAL;
7056     if (set == 0 && (dep->flags & DWC3_EP_WEDGE))
7057     break;
7058     - ret = __dwc3_gadget_ep_set_halt(dep, set);
7059     + ret = __dwc3_gadget_ep_set_halt(dep, set, true);
7060     if (ret)
7061     return -EINVAL;
7062     break;
7063     diff --git a/drivers/usb/dwc3/gadget.c b/drivers/usb/dwc3/gadget.c
7064     index 490a6ca00733..8cbbb540eca3 100644
7065     --- a/drivers/usb/dwc3/gadget.c
7066     +++ b/drivers/usb/dwc3/gadget.c
7067     @@ -615,12 +615,11 @@ static int __dwc3_gadget_ep_enable(struct dwc3_ep *dep,
7068     if (!usb_endpoint_xfer_isoc(desc))
7069     return 0;
7070    
7071     - memset(&trb_link, 0, sizeof(trb_link));
7072     -
7073     /* Link TRB for ISOC. The HWO bit is never reset */
7074     trb_st_hw = &dep->trb_pool[0];
7075    
7076     trb_link = &dep->trb_pool[DWC3_TRB_NUM - 1];
7077     + memset(trb_link, 0, sizeof(*trb_link));
7078    
7079     trb_link->bpl = lower_32_bits(dwc3_trb_dma_offset(dep, trb_st_hw));
7080     trb_link->bph = upper_32_bits(dwc3_trb_dma_offset(dep, trb_st_hw));
7081     @@ -671,7 +670,7 @@ static int __dwc3_gadget_ep_disable(struct dwc3_ep *dep)
7082    
7083     /* make sure HW endpoint isn't stalled */
7084     if (dep->flags & DWC3_EP_STALL)
7085     - __dwc3_gadget_ep_set_halt(dep, 0);
7086     + __dwc3_gadget_ep_set_halt(dep, 0, false);
7087    
7088     reg = dwc3_readl(dwc->regs, DWC3_DALEPENA);
7089     reg &= ~DWC3_DALEPENA_EP(dep->number);
7090     @@ -1287,7 +1286,7 @@ out0:
7091     return ret;
7092     }
7093    
7094     -int __dwc3_gadget_ep_set_halt(struct dwc3_ep *dep, int value)
7095     +int __dwc3_gadget_ep_set_halt(struct dwc3_ep *dep, int value, int protocol)
7096     {
7097     struct dwc3_gadget_ep_cmd_params params;
7098     struct dwc3 *dwc = dep->dwc;
7099     @@ -1296,6 +1295,14 @@ int __dwc3_gadget_ep_set_halt(struct dwc3_ep *dep, int value)
7100     memset(&params, 0x00, sizeof(params));
7101    
7102     if (value) {
7103     + if (!protocol && ((dep->direction && dep->flags & DWC3_EP_BUSY) ||
7104     + (!list_empty(&dep->req_queued) ||
7105     + !list_empty(&dep->request_list)))) {
7106     + dev_dbg(dwc->dev, "%s: pending request, cannot halt\n",
7107     + dep->name);
7108     + return -EAGAIN;
7109     + }
7110     +
7111     ret = dwc3_send_gadget_ep_cmd(dwc, dep->number,
7112     DWC3_DEPCMD_SETSTALL, &params);
7113     if (ret)
7114     @@ -1333,7 +1340,7 @@ static int dwc3_gadget_ep_set_halt(struct usb_ep *ep, int value)
7115     goto out;
7116     }
7117    
7118     - ret = __dwc3_gadget_ep_set_halt(dep, value);
7119     + ret = __dwc3_gadget_ep_set_halt(dep, value, false);
7120     out:
7121     spin_unlock_irqrestore(&dwc->lock, flags);
7122    
7123     @@ -1353,7 +1360,7 @@ static int dwc3_gadget_ep_set_wedge(struct usb_ep *ep)
7124     if (dep->number == 0 || dep->number == 1)
7125     return dwc3_gadget_ep0_set_halt(ep, 1);
7126     else
7127     - return dwc3_gadget_ep_set_halt(ep, 1);
7128     + return __dwc3_gadget_ep_set_halt(dep, 1, false);
7129     }
7130    
7131     /* -------------------------------------------------------------------------- */
7132     diff --git a/drivers/usb/dwc3/gadget.h b/drivers/usb/dwc3/gadget.h
7133     index a0ee75b68a80..ac62558231be 100644
7134     --- a/drivers/usb/dwc3/gadget.h
7135     +++ b/drivers/usb/dwc3/gadget.h
7136     @@ -85,7 +85,7 @@ void dwc3_ep0_out_start(struct dwc3 *dwc);
7137     int dwc3_gadget_ep0_set_halt(struct usb_ep *ep, int value);
7138     int dwc3_gadget_ep0_queue(struct usb_ep *ep, struct usb_request *request,
7139     gfp_t gfp_flags);
7140     -int __dwc3_gadget_ep_set_halt(struct dwc3_ep *dep, int value);
7141     +int __dwc3_gadget_ep_set_halt(struct dwc3_ep *dep, int value, int protocol);
7142    
7143     /**
7144     * dwc3_gadget_ep_get_transfer_index - Gets transfer index from HW
7145     diff --git a/drivers/usb/gadget/function/f_acm.c b/drivers/usb/gadget/function/f_acm.c
7146     index ab1065afbbd0..3384486c2884 100644
7147     --- a/drivers/usb/gadget/function/f_acm.c
7148     +++ b/drivers/usb/gadget/function/f_acm.c
7149     @@ -430,11 +430,12 @@ static int acm_set_alt(struct usb_function *f, unsigned intf, unsigned alt)
7150     if (acm->notify->driver_data) {
7151     VDBG(cdev, "reset acm control interface %d\n", intf);
7152     usb_ep_disable(acm->notify);
7153     - } else {
7154     - VDBG(cdev, "init acm ctrl interface %d\n", intf);
7155     + }
7156     +
7157     + if (!acm->notify->desc)
7158     if (config_ep_by_speed(cdev->gadget, f, acm->notify))
7159     return -EINVAL;
7160     - }
7161     +
7162     usb_ep_enable(acm->notify);
7163     acm->notify->driver_data = acm;
7164    
7165     diff --git a/drivers/usb/gadget/function/f_fs.c b/drivers/usb/gadget/function/f_fs.c
7166     index 7ad7137ba39a..a3c277c46046 100644
7167     --- a/drivers/usb/gadget/function/f_fs.c
7168     +++ b/drivers/usb/gadget/function/f_fs.c
7169     @@ -648,15 +648,26 @@ static void ffs_user_copy_worker(struct work_struct *work)
7170     if (io_data->read && ret > 0) {
7171     int i;
7172     size_t pos = 0;
7173     +
7174     + /*
7175     + * Since req->length may be bigger than io_data->len (after
7176     + * being rounded up to maxpacketsize), we may end up with more
7177     + * data then user space has space for.
7178     + */
7179     + ret = min_t(int, ret, io_data->len);
7180     +
7181     use_mm(io_data->mm);
7182     for (i = 0; i < io_data->nr_segs; i++) {
7183     + size_t len = min_t(size_t, ret - pos,
7184     + io_data->iovec[i].iov_len);
7185     + if (!len)
7186     + break;
7187     if (unlikely(copy_to_user(io_data->iovec[i].iov_base,
7188     - &io_data->buf[pos],
7189     - io_data->iovec[i].iov_len))) {
7190     + &io_data->buf[pos], len))) {
7191     ret = -EFAULT;
7192     break;
7193     }
7194     - pos += io_data->iovec[i].iov_len;
7195     + pos += len;
7196     }
7197     unuse_mm(io_data->mm);
7198     }
7199     @@ -688,7 +699,7 @@ static ssize_t ffs_epfile_io(struct file *file, struct ffs_io_data *io_data)
7200     struct ffs_epfile *epfile = file->private_data;
7201     struct ffs_ep *ep;
7202     char *data = NULL;
7203     - ssize_t ret, data_len;
7204     + ssize_t ret, data_len = -EINVAL;
7205     int halt;
7206    
7207     /* Are we still active? */
7208     @@ -788,13 +799,30 @@ static ssize_t ffs_epfile_io(struct file *file, struct ffs_io_data *io_data)
7209     /* Fire the request */
7210     struct usb_request *req;
7211    
7212     + /*
7213     + * Sanity Check: even though data_len can't be used
7214     + * uninitialized at the time I write this comment, some
7215     + * compilers complain about this situation.
7216     + * In order to keep the code clean from warnings, data_len is
7217     + * being initialized to -EINVAL during its declaration, which
7218     + * means we can't rely on compiler anymore to warn no future
7219     + * changes won't result in data_len being used uninitialized.
7220     + * For such reason, we're adding this redundant sanity check
7221     + * here.
7222     + */
7223     + if (unlikely(data_len == -EINVAL)) {
7224     + WARN(1, "%s: data_len == -EINVAL\n", __func__);
7225     + ret = -EINVAL;
7226     + goto error_lock;
7227     + }
7228     +
7229     if (io_data->aio) {
7230     req = usb_ep_alloc_request(ep->ep, GFP_KERNEL);
7231     if (unlikely(!req))
7232     goto error_lock;
7233    
7234     req->buf = data;
7235     - req->length = io_data->len;
7236     + req->length = data_len;
7237    
7238     io_data->buf = data;
7239     io_data->ep = ep->ep;
7240     @@ -816,7 +844,7 @@ static ssize_t ffs_epfile_io(struct file *file, struct ffs_io_data *io_data)
7241    
7242     req = ep->req;
7243     req->buf = data;
7244     - req->length = io_data->len;
7245     + req->length = data_len;
7246    
7247     req->context = &done;
7248     req->complete = ffs_epfile_io_complete;
7249     @@ -2626,8 +2654,6 @@ static inline struct f_fs_opts *ffs_do_functionfs_bind(struct usb_function *f,
7250     func->conf = c;
7251     func->gadget = c->cdev->gadget;
7252    
7253     - ffs_data_get(func->ffs);
7254     -
7255     /*
7256     * in drivers/usb/gadget/configfs.c:configfs_composite_bind()
7257     * configurations are bound in sequence with list_for_each_entry,
7258     diff --git a/drivers/usb/gadget/udc/udc-core.c b/drivers/usb/gadget/udc/udc-core.c
7259     index b0d98172bc07..38913eac6e7c 100644
7260     --- a/drivers/usb/gadget/udc/udc-core.c
7261     +++ b/drivers/usb/gadget/udc/udc-core.c
7262     @@ -458,6 +458,11 @@ static ssize_t usb_udc_softconn_store(struct device *dev,
7263     {
7264     struct usb_udc *udc = container_of(dev, struct usb_udc, dev);
7265    
7266     + if (!udc->driver) {
7267     + dev_err(dev, "soft-connect without a gadget driver\n");
7268     + return -EOPNOTSUPP;
7269     + }
7270     +
7271     if (sysfs_streq(buf, "connect")) {
7272     usb_gadget_udc_start(udc->gadget, udc->driver);
7273     usb_gadget_connect(udc->gadget);
7274     diff --git a/drivers/usb/host/Kconfig b/drivers/usb/host/Kconfig
7275     index 82800a775501..6f1d48ebc986 100644
7276     --- a/drivers/usb/host/Kconfig
7277     +++ b/drivers/usb/host/Kconfig
7278     @@ -220,7 +220,7 @@ config USB_EHCI_SH
7279    
7280     config USB_EHCI_EXYNOS
7281     tristate "EHCI support for Samsung S5P/EXYNOS SoC Series"
7282     - depends on PLAT_S5P || ARCH_EXYNOS
7283     + depends on ARCH_S5PV210 || ARCH_EXYNOS
7284     help
7285     Enable support for the Samsung Exynos SOC's on-chip EHCI controller.
7286    
7287     @@ -527,7 +527,7 @@ config USB_OHCI_SH
7288    
7289     config USB_OHCI_EXYNOS
7290     tristate "OHCI support for Samsung S5P/EXYNOS SoC Series"
7291     - depends on PLAT_S5P || ARCH_EXYNOS
7292     + depends on ARCH_S5PV210 || ARCH_EXYNOS
7293     help
7294     Enable support for the Samsung Exynos SOC's on-chip OHCI controller.
7295    
7296     diff --git a/drivers/usb/host/xhci-pci.c b/drivers/usb/host/xhci-pci.c
7297     index c22a3e15a16e..d125568d73ff 100644
7298     --- a/drivers/usb/host/xhci-pci.c
7299     +++ b/drivers/usb/host/xhci-pci.c
7300     @@ -126,20 +126,6 @@ static void xhci_pci_quirks(struct device *dev, struct xhci_hcd *xhci)
7301     xhci->quirks |= XHCI_AVOID_BEI;
7302     }
7303     if (pdev->vendor == PCI_VENDOR_ID_INTEL &&
7304     - (pdev->device == PCI_DEVICE_ID_INTEL_LYNXPOINT_XHCI ||
7305     - pdev->device == PCI_DEVICE_ID_INTEL_LYNXPOINT_LP_XHCI)) {
7306     - /* Workaround for occasional spurious wakeups from S5 (or
7307     - * any other sleep) on Haswell machines with LPT and LPT-LP
7308     - * with the new Intel BIOS
7309     - */
7310     - /* Limit the quirk to only known vendors, as this triggers
7311     - * yet another BIOS bug on some other machines
7312     - * https://bugzilla.kernel.org/show_bug.cgi?id=66171
7313     - */
7314     - if (pdev->subsystem_vendor == PCI_VENDOR_ID_HP)
7315     - xhci->quirks |= XHCI_SPURIOUS_WAKEUP;
7316     - }
7317     - if (pdev->vendor == PCI_VENDOR_ID_INTEL &&
7318     pdev->device == PCI_DEVICE_ID_INTEL_LYNXPOINT_LP_XHCI) {
7319     xhci->quirks |= XHCI_SPURIOUS_REBOOT;
7320     }
7321     @@ -160,6 +146,10 @@ static void xhci_pci_quirks(struct device *dev, struct xhci_hcd *xhci)
7322     pdev->device == 0x3432)
7323     xhci->quirks |= XHCI_BROKEN_STREAMS;
7324    
7325     + if (pdev->vendor == PCI_VENDOR_ID_ASMEDIA &&
7326     + pdev->device == 0x1042)
7327     + xhci->quirks |= XHCI_BROKEN_STREAMS;
7328     +
7329     if (xhci->quirks & XHCI_RESET_ON_RESUME)
7330     xhci_dbg_trace(xhci, trace_xhci_dbg_quirks,
7331     "QUIRK: Resetting on resume");
7332     diff --git a/drivers/usb/musb/musb_cppi41.c b/drivers/usb/musb/musb_cppi41.c
7333     index 3ee133f675ab..013fd1c034da 100644
7334     --- a/drivers/usb/musb/musb_cppi41.c
7335     +++ b/drivers/usb/musb/musb_cppi41.c
7336     @@ -209,7 +209,8 @@ static enum hrtimer_restart cppi41_recheck_tx_req(struct hrtimer *timer)
7337     }
7338     }
7339    
7340     - if (!list_empty(&controller->early_tx_list)) {
7341     + if (!list_empty(&controller->early_tx_list) &&
7342     + !hrtimer_is_queued(&controller->early_tx)) {
7343     ret = HRTIMER_RESTART;
7344     hrtimer_forward_now(&controller->early_tx,
7345     ktime_set(0, 50 * NSEC_PER_USEC));
7346     diff --git a/drivers/usb/musb/musb_dsps.c b/drivers/usb/musb/musb_dsps.c
7347     index 154bcf1b5dfa..b18f8d5e4f98 100644
7348     --- a/drivers/usb/musb/musb_dsps.c
7349     +++ b/drivers/usb/musb/musb_dsps.c
7350     @@ -896,7 +896,9 @@ static int dsps_resume(struct device *dev)
7351     dsps_writel(mbase, wrp->mode, glue->context.mode);
7352     dsps_writel(mbase, wrp->tx_mode, glue->context.tx_mode);
7353     dsps_writel(mbase, wrp->rx_mode, glue->context.rx_mode);
7354     - setup_timer(&glue->timer, otg_timer, (unsigned long) musb);
7355     + if (musb->xceiv->state == OTG_STATE_B_IDLE &&
7356     + musb->port_mode == MUSB_PORT_MODE_DUAL_ROLE)
7357     + mod_timer(&glue->timer, jiffies + wrp->poll_seconds * HZ);
7358    
7359     return 0;
7360     }
7361     diff --git a/drivers/usb/serial/cp210x.c b/drivers/usb/serial/cp210x.c
7362     index eca1747ca8c7..cfd009dc4018 100644
7363     --- a/drivers/usb/serial/cp210x.c
7364     +++ b/drivers/usb/serial/cp210x.c
7365     @@ -155,6 +155,7 @@ static const struct usb_device_id id_table[] = {
7366     { USB_DEVICE(0x18EF, 0xE00F) }, /* ELV USB-I2C-Interface */
7367     { USB_DEVICE(0x1ADB, 0x0001) }, /* Schweitzer Engineering C662 Cable */
7368     { USB_DEVICE(0x1B1C, 0x1C00) }, /* Corsair USB Dongle */
7369     + { USB_DEVICE(0x1BA4, 0x0002) }, /* Silicon Labs 358x factory default */
7370     { USB_DEVICE(0x1BE3, 0x07A6) }, /* WAGO 750-923 USB Service Cable */
7371     { USB_DEVICE(0x1D6F, 0x0010) }, /* Seluxit ApS RF Dongle */
7372     { USB_DEVICE(0x1E29, 0x0102) }, /* Festo CPX-USB */
7373     diff --git a/drivers/usb/serial/ftdi_sio.c b/drivers/usb/serial/ftdi_sio.c
7374     index dc72b924c399..0dad8ce5a609 100644
7375     --- a/drivers/usb/serial/ftdi_sio.c
7376     +++ b/drivers/usb/serial/ftdi_sio.c
7377     @@ -140,6 +140,7 @@ static struct ftdi_sio_quirk ftdi_8u2232c_quirk = {
7378     * /sys/bus/usb-serial/drivers/ftdi_sio/new_id and send a patch or report.
7379     */
7380     static const struct usb_device_id id_table_combined[] = {
7381     + { USB_DEVICE(FTDI_VID, FTDI_BRICK_PID) },
7382     { USB_DEVICE(FTDI_VID, FTDI_ZEITCONTROL_TAGTRACE_MIFARE_PID) },
7383     { USB_DEVICE(FTDI_VID, FTDI_CTI_MINI_PID) },
7384     { USB_DEVICE(FTDI_VID, FTDI_CTI_NANO_PID) },
7385     @@ -661,6 +662,8 @@ static const struct usb_device_id id_table_combined[] = {
7386     { USB_DEVICE(FTDI_VID, XSENS_CONVERTER_5_PID) },
7387     { USB_DEVICE(FTDI_VID, XSENS_CONVERTER_6_PID) },
7388     { USB_DEVICE(FTDI_VID, XSENS_CONVERTER_7_PID) },
7389     + { USB_DEVICE(XSENS_VID, XSENS_AWINDA_DONGLE_PID) },
7390     + { USB_DEVICE(XSENS_VID, XSENS_AWINDA_STATION_PID) },
7391     { USB_DEVICE(XSENS_VID, XSENS_CONVERTER_PID) },
7392     { USB_DEVICE(XSENS_VID, XSENS_MTW_PID) },
7393     { USB_DEVICE(FTDI_VID, FTDI_OMNI1509) },
7394     diff --git a/drivers/usb/serial/ftdi_sio_ids.h b/drivers/usb/serial/ftdi_sio_ids.h
7395     index 5937b2d242f2..6786b705ccf6 100644
7396     --- a/drivers/usb/serial/ftdi_sio_ids.h
7397     +++ b/drivers/usb/serial/ftdi_sio_ids.h
7398     @@ -30,6 +30,12 @@
7399    
7400     /*** third-party PIDs (using FTDI_VID) ***/
7401    
7402     +/*
7403     + * Certain versions of the official Windows FTDI driver reprogrammed
7404     + * counterfeit FTDI devices to PID 0. Support these devices anyway.
7405     + */
7406     +#define FTDI_BRICK_PID 0x0000
7407     +
7408     #define FTDI_LUMEL_PD12_PID 0x6002
7409    
7410     /*
7411     @@ -143,8 +149,12 @@
7412     * Xsens Technologies BV products (http://www.xsens.com).
7413     */
7414     #define XSENS_VID 0x2639
7415     -#define XSENS_CONVERTER_PID 0xD00D /* Xsens USB-serial converter */
7416     +#define XSENS_AWINDA_STATION_PID 0x0101
7417     +#define XSENS_AWINDA_DONGLE_PID 0x0102
7418     #define XSENS_MTW_PID 0x0200 /* Xsens MTw */
7419     +#define XSENS_CONVERTER_PID 0xD00D /* Xsens USB-serial converter */
7420     +
7421     +/* Xsens devices using FTDI VID */
7422     #define XSENS_CONVERTER_0_PID 0xD388 /* Xsens USB converter */
7423     #define XSENS_CONVERTER_1_PID 0xD389 /* Xsens Wireless Receiver */
7424     #define XSENS_CONVERTER_2_PID 0xD38A
7425     diff --git a/drivers/usb/serial/kobil_sct.c b/drivers/usb/serial/kobil_sct.c
7426     index 078f9ed419c8..a31ff1503a99 100644
7427     --- a/drivers/usb/serial/kobil_sct.c
7428     +++ b/drivers/usb/serial/kobil_sct.c
7429     @@ -335,7 +335,8 @@ static int kobil_write(struct tty_struct *tty, struct usb_serial_port *port,
7430     port->interrupt_out_urb->transfer_buffer_length = length;
7431    
7432     priv->cur_pos = priv->cur_pos + length;
7433     - result = usb_submit_urb(port->interrupt_out_urb, GFP_NOIO);
7434     + result = usb_submit_urb(port->interrupt_out_urb,
7435     + GFP_ATOMIC);
7436     dev_dbg(&port->dev, "%s - Send write URB returns: %i\n", __func__, result);
7437     todo = priv->filled - priv->cur_pos;
7438    
7439     @@ -350,7 +351,7 @@ static int kobil_write(struct tty_struct *tty, struct usb_serial_port *port,
7440     if (priv->device_type == KOBIL_ADAPTER_B_PRODUCT_ID ||
7441     priv->device_type == KOBIL_ADAPTER_K_PRODUCT_ID) {
7442     result = usb_submit_urb(port->interrupt_in_urb,
7443     - GFP_NOIO);
7444     + GFP_ATOMIC);
7445     dev_dbg(&port->dev, "%s - Send read URB returns: %i\n", __func__, result);
7446     }
7447     }
7448     diff --git a/drivers/usb/serial/opticon.c b/drivers/usb/serial/opticon.c
7449     index 4856fb7e637e..4b7bfb394a32 100644
7450     --- a/drivers/usb/serial/opticon.c
7451     +++ b/drivers/usb/serial/opticon.c
7452     @@ -215,7 +215,7 @@ static int opticon_write(struct tty_struct *tty, struct usb_serial_port *port,
7453    
7454     /* The connected devices do not have a bulk write endpoint,
7455     * to transmit data to de barcode device the control endpoint is used */
7456     - dr = kmalloc(sizeof(struct usb_ctrlrequest), GFP_NOIO);
7457     + dr = kmalloc(sizeof(struct usb_ctrlrequest), GFP_ATOMIC);
7458     if (!dr) {
7459     count = -ENOMEM;
7460     goto error_no_dr;
7461     diff --git a/drivers/usb/serial/option.c b/drivers/usb/serial/option.c
7462     index 54a8120897a6..e87219a0f2f7 100644
7463     --- a/drivers/usb/serial/option.c
7464     +++ b/drivers/usb/serial/option.c
7465     @@ -269,6 +269,7 @@ static void option_instat_callback(struct urb *urb);
7466     #define TELIT_PRODUCT_DE910_DUAL 0x1010
7467     #define TELIT_PRODUCT_UE910_V2 0x1012
7468     #define TELIT_PRODUCT_LE920 0x1200
7469     +#define TELIT_PRODUCT_LE910 0x1201
7470    
7471     /* ZTE PRODUCTS */
7472     #define ZTE_VENDOR_ID 0x19d2
7473     @@ -361,6 +362,7 @@ static void option_instat_callback(struct urb *urb);
7474    
7475     /* Haier products */
7476     #define HAIER_VENDOR_ID 0x201e
7477     +#define HAIER_PRODUCT_CE81B 0x10f8
7478     #define HAIER_PRODUCT_CE100 0x2009
7479    
7480     /* Cinterion (formerly Siemens) products */
7481     @@ -588,6 +590,11 @@ static const struct option_blacklist_info zte_1255_blacklist = {
7482     .reserved = BIT(3) | BIT(4),
7483     };
7484    
7485     +static const struct option_blacklist_info telit_le910_blacklist = {
7486     + .sendsetup = BIT(0),
7487     + .reserved = BIT(1) | BIT(2),
7488     +};
7489     +
7490     static const struct option_blacklist_info telit_le920_blacklist = {
7491     .sendsetup = BIT(0),
7492     .reserved = BIT(1) | BIT(5),
7493     @@ -1137,6 +1144,8 @@ static const struct usb_device_id option_ids[] = {
7494     { USB_DEVICE(TELIT_VENDOR_ID, TELIT_PRODUCT_CC864_SINGLE) },
7495     { USB_DEVICE(TELIT_VENDOR_ID, TELIT_PRODUCT_DE910_DUAL) },
7496     { USB_DEVICE(TELIT_VENDOR_ID, TELIT_PRODUCT_UE910_V2) },
7497     + { USB_DEVICE(TELIT_VENDOR_ID, TELIT_PRODUCT_LE910),
7498     + .driver_info = (kernel_ulong_t)&telit_le910_blacklist },
7499     { USB_DEVICE(TELIT_VENDOR_ID, TELIT_PRODUCT_LE920),
7500     .driver_info = (kernel_ulong_t)&telit_le920_blacklist },
7501     { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, ZTE_PRODUCT_MF622, 0xff, 0xff, 0xff) }, /* ZTE WCDMA products */
7502     @@ -1612,6 +1621,7 @@ static const struct usb_device_id option_ids[] = {
7503     { USB_DEVICE(LONGCHEER_VENDOR_ID, ZOOM_PRODUCT_4597) },
7504     { USB_DEVICE(LONGCHEER_VENDOR_ID, IBALL_3_5G_CONNECT) },
7505     { USB_DEVICE(HAIER_VENDOR_ID, HAIER_PRODUCT_CE100) },
7506     + { USB_DEVICE_AND_INTERFACE_INFO(HAIER_VENDOR_ID, HAIER_PRODUCT_CE81B, 0xff, 0xff, 0xff) },
7507     /* Pirelli */
7508     { USB_DEVICE_INTERFACE_CLASS(PIRELLI_VENDOR_ID, PIRELLI_PRODUCT_C100_1, 0xff) },
7509     { USB_DEVICE_INTERFACE_CLASS(PIRELLI_VENDOR_ID, PIRELLI_PRODUCT_C100_2, 0xff) },
7510     diff --git a/drivers/usb/storage/transport.c b/drivers/usb/storage/transport.c
7511     index 22c7d4360fa2..b1d815eb6d0b 100644
7512     --- a/drivers/usb/storage/transport.c
7513     +++ b/drivers/usb/storage/transport.c
7514     @@ -1118,6 +1118,31 @@ int usb_stor_Bulk_transport(struct scsi_cmnd *srb, struct us_data *us)
7515     */
7516     if (result == USB_STOR_XFER_LONG)
7517     fake_sense = 1;
7518     +
7519     + /*
7520     + * Sometimes a device will mistakenly skip the data phase
7521     + * and go directly to the status phase without sending a
7522     + * zero-length packet. If we get a 13-byte response here,
7523     + * check whether it really is a CSW.
7524     + */
7525     + if (result == USB_STOR_XFER_SHORT &&
7526     + srb->sc_data_direction == DMA_FROM_DEVICE &&
7527     + transfer_length - scsi_get_resid(srb) ==
7528     + US_BULK_CS_WRAP_LEN) {
7529     + struct scatterlist *sg = NULL;
7530     + unsigned int offset = 0;
7531     +
7532     + if (usb_stor_access_xfer_buf((unsigned char *) bcs,
7533     + US_BULK_CS_WRAP_LEN, srb, &sg,
7534     + &offset, FROM_XFER_BUF) ==
7535     + US_BULK_CS_WRAP_LEN &&
7536     + bcs->Signature ==
7537     + cpu_to_le32(US_BULK_CS_SIGN)) {
7538     + usb_stor_dbg(us, "Device skipped data phase\n");
7539     + scsi_set_resid(srb, transfer_length);
7540     + goto skipped_data_phase;
7541     + }
7542     + }
7543     }
7544    
7545     /* See flow chart on pg 15 of the Bulk Only Transport spec for
7546     @@ -1153,6 +1178,7 @@ int usb_stor_Bulk_transport(struct scsi_cmnd *srb, struct us_data *us)
7547     if (result != USB_STOR_XFER_GOOD)
7548     return USB_STOR_TRANSPORT_ERROR;
7549    
7550     + skipped_data_phase:
7551     /* check bulk status */
7552     residue = le32_to_cpu(bcs->Residue);
7553     usb_stor_dbg(us, "Bulk Status S 0x%x T 0x%x R %u Stat 0x%x\n",
7554     diff --git a/drivers/usb/storage/unusual_uas.h b/drivers/usb/storage/unusual_uas.h
7555     index 8511b54a65d9..2fefaf923e4a 100644
7556     --- a/drivers/usb/storage/unusual_uas.h
7557     +++ b/drivers/usb/storage/unusual_uas.h
7558     @@ -54,6 +54,20 @@ UNUSUAL_DEV(0x0bc2, 0x3312, 0x0000, 0x9999,
7559     USB_SC_DEVICE, USB_PR_DEVICE, NULL,
7560     US_FL_NO_ATA_1X),
7561    
7562     +/* Reported-by: Hans de Goede <hdegoede@redhat.com> */
7563     +UNUSUAL_DEV(0x0bc2, 0x3320, 0x0000, 0x9999,
7564     + "Seagate",
7565     + "Expansion Desk",
7566     + USB_SC_DEVICE, USB_PR_DEVICE, NULL,
7567     + US_FL_NO_ATA_1X),
7568     +
7569     +/* Reported-by: Bogdan Mihalcea <bogdan.mihalcea@infim.ro> */
7570     +UNUSUAL_DEV(0x0bc2, 0xa003, 0x0000, 0x9999,
7571     + "Seagate",
7572     + "Backup Plus",
7573     + USB_SC_DEVICE, USB_PR_DEVICE, NULL,
7574     + US_FL_NO_ATA_1X),
7575     +
7576     /* https://bbs.archlinux.org/viewtopic.php?id=183190 */
7577     UNUSUAL_DEV(0x0bc2, 0xab20, 0x0000, 0x9999,
7578     "Seagate",
7579     @@ -61,6 +75,13 @@ UNUSUAL_DEV(0x0bc2, 0xab20, 0x0000, 0x9999,
7580     USB_SC_DEVICE, USB_PR_DEVICE, NULL,
7581     US_FL_NO_ATA_1X),
7582    
7583     +/* https://bbs.archlinux.org/viewtopic.php?id=183190 */
7584     +UNUSUAL_DEV(0x0bc2, 0xab21, 0x0000, 0x9999,
7585     + "Seagate",
7586     + "Backup+ BK",
7587     + USB_SC_DEVICE, USB_PR_DEVICE, NULL,
7588     + US_FL_NO_ATA_1X),
7589     +
7590     /* Reported-by: Claudio Bizzarri <claudio.bizzarri@gmail.com> */
7591     UNUSUAL_DEV(0x152d, 0x0567, 0x0000, 0x9999,
7592     "JMicron",
7593     @@ -75,3 +96,10 @@ UNUSUAL_DEV(0x174c, 0x5106, 0x0000, 0x9999,
7594     "ASM1051",
7595     USB_SC_DEVICE, USB_PR_DEVICE, NULL,
7596     US_FL_IGNORE_UAS),
7597     +
7598     +/* Reported-by: Hans de Goede <hdegoede@redhat.com> */
7599     +UNUSUAL_DEV(0x2109, 0x0711, 0x0000, 0x9999,
7600     + "VIA",
7601     + "VL711",
7602     + USB_SC_DEVICE, USB_PR_DEVICE, NULL,
7603     + US_FL_NO_ATA_1X),
7604     diff --git a/drivers/video/console/bitblit.c b/drivers/video/console/bitblit.c
7605     index 61b182bf32a2..dbfe4eecf12e 100644
7606     --- a/drivers/video/console/bitblit.c
7607     +++ b/drivers/video/console/bitblit.c
7608     @@ -205,7 +205,6 @@ static void bit_putcs(struct vc_data *vc, struct fb_info *info,
7609     static void bit_clear_margins(struct vc_data *vc, struct fb_info *info,
7610     int bottom_only)
7611     {
7612     - int bgshift = (vc->vc_hi_font_mask) ? 13 : 12;
7613     unsigned int cw = vc->vc_font.width;
7614     unsigned int ch = vc->vc_font.height;
7615     unsigned int rw = info->var.xres - (vc->vc_cols*cw);
7616     @@ -214,7 +213,7 @@ static void bit_clear_margins(struct vc_data *vc, struct fb_info *info,
7617     unsigned int bs = info->var.yres - bh;
7618     struct fb_fillrect region;
7619    
7620     - region.color = attr_bgcol_ec(bgshift, vc, info);
7621     + region.color = 0;
7622     region.rop = ROP_COPY;
7623    
7624     if (rw && !bottom_only) {
7625     diff --git a/drivers/video/console/fbcon_ccw.c b/drivers/video/console/fbcon_ccw.c
7626     index 41b32ae23dac..5a3cbf6dff4d 100644
7627     --- a/drivers/video/console/fbcon_ccw.c
7628     +++ b/drivers/video/console/fbcon_ccw.c
7629     @@ -197,9 +197,8 @@ static void ccw_clear_margins(struct vc_data *vc, struct fb_info *info,
7630     unsigned int bh = info->var.xres - (vc->vc_rows*ch);
7631     unsigned int bs = vc->vc_rows*ch;
7632     struct fb_fillrect region;
7633     - int bgshift = (vc->vc_hi_font_mask) ? 13 : 12;
7634    
7635     - region.color = attr_bgcol_ec(bgshift,vc,info);
7636     + region.color = 0;
7637     region.rop = ROP_COPY;
7638    
7639     if (rw && !bottom_only) {
7640     diff --git a/drivers/video/console/fbcon_cw.c b/drivers/video/console/fbcon_cw.c
7641     index a93670ef7f89..e7ee44db4e98 100644
7642     --- a/drivers/video/console/fbcon_cw.c
7643     +++ b/drivers/video/console/fbcon_cw.c
7644     @@ -180,9 +180,8 @@ static void cw_clear_margins(struct vc_data *vc, struct fb_info *info,
7645     unsigned int bh = info->var.xres - (vc->vc_rows*ch);
7646     unsigned int rs = info->var.yres - rw;
7647     struct fb_fillrect region;
7648     - int bgshift = (vc->vc_hi_font_mask) ? 13 : 12;
7649    
7650     - region.color = attr_bgcol_ec(bgshift,vc,info);
7651     + region.color = 0;
7652     region.rop = ROP_COPY;
7653    
7654     if (rw && !bottom_only) {
7655     diff --git a/drivers/video/console/fbcon_ud.c b/drivers/video/console/fbcon_ud.c
7656     index ff0872c0498b..19e3714abfe8 100644
7657     --- a/drivers/video/console/fbcon_ud.c
7658     +++ b/drivers/video/console/fbcon_ud.c
7659     @@ -227,9 +227,8 @@ static void ud_clear_margins(struct vc_data *vc, struct fb_info *info,
7660     unsigned int rw = info->var.xres - (vc->vc_cols*cw);
7661     unsigned int bh = info->var.yres - (vc->vc_rows*ch);
7662     struct fb_fillrect region;
7663     - int bgshift = (vc->vc_hi_font_mask) ? 13 : 12;
7664    
7665     - region.color = attr_bgcol_ec(bgshift,vc,info);
7666     + region.color = 0;
7667     region.rop = ROP_COPY;
7668    
7669     if (rw && !bottom_only) {
7670     diff --git a/drivers/video/fbdev/core/cfbcopyarea.c b/drivers/video/fbdev/core/cfbcopyarea.c
7671     index bcb57235fcc7..6d4bfeecee35 100644
7672     --- a/drivers/video/fbdev/core/cfbcopyarea.c
7673     +++ b/drivers/video/fbdev/core/cfbcopyarea.c
7674     @@ -55,8 +55,8 @@ bitcpy(struct fb_info *p, unsigned long __iomem *dst, unsigned dst_idx,
7675     * If you suspect bug in this function, compare it with this simple
7676     * memmove implementation.
7677     */
7678     - fb_memmove((char *)dst + ((dst_idx & (bits - 1))) / 8,
7679     - (char *)src + ((src_idx & (bits - 1))) / 8, n / 8);
7680     + memmove((char *)dst + ((dst_idx & (bits - 1))) / 8,
7681     + (char *)src + ((src_idx & (bits - 1))) / 8, n / 8);
7682     return;
7683     #endif
7684    
7685     @@ -221,8 +221,8 @@ bitcpy_rev(struct fb_info *p, unsigned long __iomem *dst, unsigned dst_idx,
7686     * If you suspect bug in this function, compare it with this simple
7687     * memmove implementation.
7688     */
7689     - fb_memmove((char *)dst + ((dst_idx & (bits - 1))) / 8,
7690     - (char *)src + ((src_idx & (bits - 1))) / 8, n / 8);
7691     + memmove((char *)dst + ((dst_idx & (bits - 1))) / 8,
7692     + (char *)src + ((src_idx & (bits - 1))) / 8, n / 8);
7693     return;
7694     #endif
7695    
7696     @@ -324,7 +324,10 @@ bitcpy_rev(struct fb_info *p, unsigned long __iomem *dst, unsigned dst_idx,
7697     d0 = d0 << left | d1 >> right;
7698     }
7699     d0 = fb_rev_pixels_in_long(d0, bswapmask);
7700     - FB_WRITEL(comp(d0, FB_READL(dst), first), dst);
7701     + if (!first)
7702     + FB_WRITEL(d0, dst);
7703     + else
7704     + FB_WRITEL(comp(d0, FB_READL(dst), first), dst);
7705     d0 = d1;
7706     dst--;
7707     n -= dst_idx+1;
7708     diff --git a/drivers/virtio/virtio_pci.c b/drivers/virtio/virtio_pci.c
7709     index 3d1463c6b120..add40d00dcdb 100644
7710     --- a/drivers/virtio/virtio_pci.c
7711     +++ b/drivers/virtio/virtio_pci.c
7712     @@ -789,6 +789,7 @@ static int virtio_pci_restore(struct device *dev)
7713     struct pci_dev *pci_dev = to_pci_dev(dev);
7714     struct virtio_pci_device *vp_dev = pci_get_drvdata(pci_dev);
7715     struct virtio_driver *drv;
7716     + unsigned status = 0;
7717     int ret;
7718    
7719     drv = container_of(vp_dev->vdev.dev.driver,
7720     @@ -799,14 +800,40 @@ static int virtio_pci_restore(struct device *dev)
7721     return ret;
7722    
7723     pci_set_master(pci_dev);
7724     + /* We always start by resetting the device, in case a previous
7725     + * driver messed it up. */
7726     + vp_reset(&vp_dev->vdev);
7727     +
7728     + /* Acknowledge that we've seen the device. */
7729     + status |= VIRTIO_CONFIG_S_ACKNOWLEDGE;
7730     + vp_set_status(&vp_dev->vdev, status);
7731     +
7732     + /* Maybe driver failed before freeze.
7733     + * Restore the failed status, for debugging. */
7734     + status |= vp_dev->saved_status & VIRTIO_CONFIG_S_FAILED;
7735     + vp_set_status(&vp_dev->vdev, status);
7736     +
7737     + if (!drv)
7738     + return 0;
7739     +
7740     + /* We have a driver! */
7741     + status |= VIRTIO_CONFIG_S_DRIVER;
7742     + vp_set_status(&vp_dev->vdev, status);
7743     +
7744     vp_finalize_features(&vp_dev->vdev);
7745    
7746     - if (drv && drv->restore)
7747     + if (drv->restore) {
7748     ret = drv->restore(&vp_dev->vdev);
7749     + if (ret) {
7750     + status |= VIRTIO_CONFIG_S_FAILED;
7751     + vp_set_status(&vp_dev->vdev, status);
7752     + return ret;
7753     + }
7754     + }
7755    
7756     /* Finally, tell the device we're all set */
7757     - if (!ret)
7758     - vp_set_status(&vp_dev->vdev, vp_dev->saved_status);
7759     + status |= VIRTIO_CONFIG_S_DRIVER_OK;
7760     + vp_set_status(&vp_dev->vdev, status);
7761    
7762     return ret;
7763     }
7764     diff --git a/fs/btrfs/file-item.c b/fs/btrfs/file-item.c
7765     index 54c84daec9b5..74097722ad9f 100644
7766     --- a/fs/btrfs/file-item.c
7767     +++ b/fs/btrfs/file-item.c
7768     @@ -423,7 +423,7 @@ int btrfs_lookup_csums_range(struct btrfs_root *root, u64 start, u64 end,
7769     ret = 0;
7770     fail:
7771     while (ret < 0 && !list_empty(&tmplist)) {
7772     - sums = list_entry(&tmplist, struct btrfs_ordered_sum, list);
7773     + sums = list_entry(tmplist.next, struct btrfs_ordered_sum, list);
7774     list_del(&sums->list);
7775     kfree(sums);
7776     }
7777     diff --git a/fs/buffer.c b/fs/buffer.c
7778     index 3588a80854b2..72daaa516090 100644
7779     --- a/fs/buffer.c
7780     +++ b/fs/buffer.c
7781     @@ -2082,6 +2082,7 @@ int generic_write_end(struct file *file, struct address_space *mapping,
7782     struct page *page, void *fsdata)
7783     {
7784     struct inode *inode = mapping->host;
7785     + loff_t old_size = inode->i_size;
7786     int i_size_changed = 0;
7787    
7788     copied = block_write_end(file, mapping, pos, len, copied, page, fsdata);
7789     @@ -2101,6 +2102,8 @@ int generic_write_end(struct file *file, struct address_space *mapping,
7790     unlock_page(page);
7791     page_cache_release(page);
7792    
7793     + if (old_size < pos)
7794     + pagecache_isize_extended(inode, old_size, pos);
7795     /*
7796     * Don't mark the inode dirty under page lock. First, it unnecessarily
7797     * makes the holding time of page lock longer. Second, it forces lock
7798     @@ -2318,6 +2321,11 @@ static int cont_expand_zero(struct file *file, struct address_space *mapping,
7799     err = 0;
7800    
7801     balance_dirty_pages_ratelimited(mapping);
7802     +
7803     + if (unlikely(fatal_signal_pending(current))) {
7804     + err = -EINTR;
7805     + goto out;
7806     + }
7807     }
7808    
7809     /* page covers the boundary, find the boundary offset */
7810     diff --git a/fs/dcache.c b/fs/dcache.c
7811     index cb25a1a5e307..34b40be8af11 100644
7812     --- a/fs/dcache.c
7813     +++ b/fs/dcache.c
7814     @@ -2675,11 +2675,13 @@ struct dentry *d_splice_alias(struct inode *inode, struct dentry *dentry)
7815     if (!IS_ROOT(new)) {
7816     spin_unlock(&inode->i_lock);
7817     dput(new);
7818     + iput(inode);
7819     return ERR_PTR(-EIO);
7820     }
7821     if (d_ancestor(new, dentry)) {
7822     spin_unlock(&inode->i_lock);
7823     dput(new);
7824     + iput(inode);
7825     return ERR_PTR(-EIO);
7826     }
7827     write_seqlock(&rename_lock);
7828     @@ -2810,6 +2812,9 @@ static int prepend(char **buffer, int *buflen, const char *str, int namelen)
7829     * the beginning of the name. The sequence number check at the caller will
7830     * retry it again when a d_move() does happen. So any garbage in the buffer
7831     * due to mismatched pointer and length will be discarded.
7832     + *
7833     + * Data dependency barrier is needed to make sure that we see that terminating
7834     + * NUL. Alpha strikes again, film at 11...
7835     */
7836     static int prepend_name(char **buffer, int *buflen, struct qstr *name)
7837     {
7838     @@ -2817,6 +2822,8 @@ static int prepend_name(char **buffer, int *buflen, struct qstr *name)
7839     u32 dlen = ACCESS_ONCE(name->len);
7840     char *p;
7841    
7842     + smp_read_barrier_depends();
7843     +
7844     *buflen -= dlen + 1;
7845     if (*buflen < 0)
7846     return -ENAMETOOLONG;
7847     diff --git a/fs/ext3/super.c b/fs/ext3/super.c
7848     index 622e88249024..2c42e739e3d1 100644
7849     --- a/fs/ext3/super.c
7850     +++ b/fs/ext3/super.c
7851     @@ -1354,13 +1354,6 @@ set_qf_format:
7852     "not specified.");
7853     return 0;
7854     }
7855     - } else {
7856     - if (sbi->s_jquota_fmt) {
7857     - ext3_msg(sb, KERN_ERR, "error: journaled quota format "
7858     - "specified with no journaling "
7859     - "enabled.");
7860     - return 0;
7861     - }
7862     }
7863     #endif
7864     return 1;
7865     diff --git a/fs/ext4/balloc.c b/fs/ext4/balloc.c
7866     index 581ef40fbe90..e0691559c8eb 100644
7867     --- a/fs/ext4/balloc.c
7868     +++ b/fs/ext4/balloc.c
7869     @@ -176,7 +176,7 @@ static unsigned int num_clusters_in_group(struct super_block *sb,
7870     }
7871    
7872     /* Initializes an uninitialized block bitmap */
7873     -static void ext4_init_block_bitmap(struct super_block *sb,
7874     +static int ext4_init_block_bitmap(struct super_block *sb,
7875     struct buffer_head *bh,
7876     ext4_group_t block_group,
7877     struct ext4_group_desc *gdp)
7878     @@ -192,7 +192,6 @@ static void ext4_init_block_bitmap(struct super_block *sb,
7879     /* If checksum is bad mark all blocks used to prevent allocation
7880     * essentially implementing a per-group read-only flag. */
7881     if (!ext4_group_desc_csum_verify(sb, block_group, gdp)) {
7882     - ext4_error(sb, "Checksum bad for group %u", block_group);
7883     grp = ext4_get_group_info(sb, block_group);
7884     if (!EXT4_MB_GRP_BBITMAP_CORRUPT(grp))
7885     percpu_counter_sub(&sbi->s_freeclusters_counter,
7886     @@ -205,7 +204,7 @@ static void ext4_init_block_bitmap(struct super_block *sb,
7887     count);
7888     }
7889     set_bit(EXT4_GROUP_INFO_IBITMAP_CORRUPT_BIT, &grp->bb_state);
7890     - return;
7891     + return -EIO;
7892     }
7893     memset(bh->b_data, 0, sb->s_blocksize);
7894    
7895     @@ -243,6 +242,7 @@ static void ext4_init_block_bitmap(struct super_block *sb,
7896     sb->s_blocksize * 8, bh->b_data);
7897     ext4_block_bitmap_csum_set(sb, block_group, gdp, bh);
7898     ext4_group_desc_csum_set(sb, block_group, gdp);
7899     + return 0;
7900     }
7901    
7902     /* Return the number of free blocks in a block group. It is used when
7903     @@ -438,11 +438,15 @@ ext4_read_block_bitmap_nowait(struct super_block *sb, ext4_group_t block_group)
7904     }
7905     ext4_lock_group(sb, block_group);
7906     if (desc->bg_flags & cpu_to_le16(EXT4_BG_BLOCK_UNINIT)) {
7907     - ext4_init_block_bitmap(sb, bh, block_group, desc);
7908     + int err;
7909     +
7910     + err = ext4_init_block_bitmap(sb, bh, block_group, desc);
7911     set_bitmap_uptodate(bh);
7912     set_buffer_uptodate(bh);
7913     ext4_unlock_group(sb, block_group);
7914     unlock_buffer(bh);
7915     + if (err)
7916     + ext4_error(sb, "Checksum bad for grp %u", block_group);
7917     return bh;
7918     }
7919     ext4_unlock_group(sb, block_group);
7920     diff --git a/fs/ext4/bitmap.c b/fs/ext4/bitmap.c
7921     index 3285aa5a706a..b610779a958c 100644
7922     --- a/fs/ext4/bitmap.c
7923     +++ b/fs/ext4/bitmap.c
7924     @@ -24,8 +24,7 @@ int ext4_inode_bitmap_csum_verify(struct super_block *sb, ext4_group_t group,
7925     __u32 provided, calculated;
7926     struct ext4_sb_info *sbi = EXT4_SB(sb);
7927    
7928     - if (!EXT4_HAS_RO_COMPAT_FEATURE(sb,
7929     - EXT4_FEATURE_RO_COMPAT_METADATA_CSUM))
7930     + if (!ext4_has_metadata_csum(sb))
7931     return 1;
7932    
7933     provided = le16_to_cpu(gdp->bg_inode_bitmap_csum_lo);
7934     @@ -46,8 +45,7 @@ void ext4_inode_bitmap_csum_set(struct super_block *sb, ext4_group_t group,
7935     __u32 csum;
7936     struct ext4_sb_info *sbi = EXT4_SB(sb);
7937    
7938     - if (!EXT4_HAS_RO_COMPAT_FEATURE(sb,
7939     - EXT4_FEATURE_RO_COMPAT_METADATA_CSUM))
7940     + if (!ext4_has_metadata_csum(sb))
7941     return;
7942    
7943     csum = ext4_chksum(sbi, sbi->s_csum_seed, (__u8 *)bh->b_data, sz);
7944     @@ -65,8 +63,7 @@ int ext4_block_bitmap_csum_verify(struct super_block *sb, ext4_group_t group,
7945     struct ext4_sb_info *sbi = EXT4_SB(sb);
7946     int sz = EXT4_CLUSTERS_PER_GROUP(sb) / 8;
7947    
7948     - if (!EXT4_HAS_RO_COMPAT_FEATURE(sb,
7949     - EXT4_FEATURE_RO_COMPAT_METADATA_CSUM))
7950     + if (!ext4_has_metadata_csum(sb))
7951     return 1;
7952    
7953     provided = le16_to_cpu(gdp->bg_block_bitmap_csum_lo);
7954     @@ -91,8 +88,7 @@ void ext4_block_bitmap_csum_set(struct super_block *sb, ext4_group_t group,
7955     __u32 csum;
7956     struct ext4_sb_info *sbi = EXT4_SB(sb);
7957    
7958     - if (!EXT4_HAS_RO_COMPAT_FEATURE(sb,
7959     - EXT4_FEATURE_RO_COMPAT_METADATA_CSUM))
7960     + if (!ext4_has_metadata_csum(sb))
7961     return;
7962    
7963     csum = ext4_chksum(sbi, sbi->s_csum_seed, (__u8 *)bh->b_data, sz);
7964     diff --git a/fs/ext4/ext4.h b/fs/ext4/ext4.h
7965     index b0c225cdb52c..96ac9d32a5d2 100644
7966     --- a/fs/ext4/ext4.h
7967     +++ b/fs/ext4/ext4.h
7968     @@ -2109,6 +2109,7 @@ int do_journal_get_write_access(handle_t *handle,
7969     #define CONVERT_INLINE_DATA 2
7970    
7971     extern struct inode *ext4_iget(struct super_block *, unsigned long);
7972     +extern struct inode *ext4_iget_normal(struct super_block *, unsigned long);
7973     extern int ext4_write_inode(struct inode *, struct writeback_control *);
7974     extern int ext4_setattr(struct dentry *, struct iattr *);
7975     extern int ext4_getattr(struct vfsmount *mnt, struct dentry *dentry,
7976     @@ -2332,10 +2333,18 @@ extern int ext4_register_li_request(struct super_block *sb,
7977     static inline int ext4_has_group_desc_csum(struct super_block *sb)
7978     {
7979     return EXT4_HAS_RO_COMPAT_FEATURE(sb,
7980     - EXT4_FEATURE_RO_COMPAT_GDT_CSUM |
7981     - EXT4_FEATURE_RO_COMPAT_METADATA_CSUM);
7982     + EXT4_FEATURE_RO_COMPAT_GDT_CSUM) ||
7983     + (EXT4_SB(sb)->s_chksum_driver != NULL);
7984     }
7985    
7986     +static inline int ext4_has_metadata_csum(struct super_block *sb)
7987     +{
7988     + WARN_ON_ONCE(EXT4_HAS_RO_COMPAT_FEATURE(sb,
7989     + EXT4_FEATURE_RO_COMPAT_METADATA_CSUM) &&
7990     + !EXT4_SB(sb)->s_chksum_driver);
7991     +
7992     + return (EXT4_SB(sb)->s_chksum_driver != NULL);
7993     +}
7994     static inline ext4_fsblk_t ext4_blocks_count(struct ext4_super_block *es)
7995     {
7996     return ((ext4_fsblk_t)le32_to_cpu(es->s_blocks_count_hi) << 32) |
7997     diff --git a/fs/ext4/extents.c b/fs/ext4/extents.c
7998     index 74292a71b384..18d8dc83e61b 100644
7999     --- a/fs/ext4/extents.c
8000     +++ b/fs/ext4/extents.c
8001     @@ -73,8 +73,7 @@ static int ext4_extent_block_csum_verify(struct inode *inode,
8002     {
8003     struct ext4_extent_tail *et;
8004    
8005     - if (!EXT4_HAS_RO_COMPAT_FEATURE(inode->i_sb,
8006     - EXT4_FEATURE_RO_COMPAT_METADATA_CSUM))
8007     + if (!ext4_has_metadata_csum(inode->i_sb))
8008     return 1;
8009    
8010     et = find_ext4_extent_tail(eh);
8011     @@ -88,8 +87,7 @@ static void ext4_extent_block_csum_set(struct inode *inode,
8012     {
8013     struct ext4_extent_tail *et;
8014    
8015     - if (!EXT4_HAS_RO_COMPAT_FEATURE(inode->i_sb,
8016     - EXT4_FEATURE_RO_COMPAT_METADATA_CSUM))
8017     + if (!ext4_has_metadata_csum(inode->i_sb))
8018     return;
8019    
8020     et = find_ext4_extent_tail(eh);
8021     diff --git a/fs/ext4/file.c b/fs/ext4/file.c
8022     index aca7b24a4432..8131be8c0af3 100644
8023     --- a/fs/ext4/file.c
8024     +++ b/fs/ext4/file.c
8025     @@ -137,10 +137,10 @@ ext4_file_write_iter(struct kiocb *iocb, struct iov_iter *from)
8026     iov_iter_truncate(from, sbi->s_bitmap_maxbytes - pos);
8027     }
8028    
8029     + iocb->private = &overwrite;
8030     if (o_direct) {
8031     blk_start_plug(&plug);
8032    
8033     - iocb->private = &overwrite;
8034    
8035     /* check whether we do a DIO overwrite or not */
8036     if (ext4_should_dioread_nolock(inode) && !aio_mutex &&
8037     diff --git a/fs/ext4/ialloc.c b/fs/ext4/ialloc.c
8038     index 5b87fc36aab8..ac644c31ca67 100644
8039     --- a/fs/ext4/ialloc.c
8040     +++ b/fs/ext4/ialloc.c
8041     @@ -887,6 +887,10 @@ got:
8042     struct buffer_head *block_bitmap_bh;
8043    
8044     block_bitmap_bh = ext4_read_block_bitmap(sb, group);
8045     + if (!block_bitmap_bh) {
8046     + err = -EIO;
8047     + goto out;
8048     + }
8049     BUFFER_TRACE(block_bitmap_bh, "get block bitmap access");
8050     err = ext4_journal_get_write_access(handle, block_bitmap_bh);
8051     if (err) {
8052     @@ -1011,8 +1015,7 @@ got:
8053     spin_unlock(&sbi->s_next_gen_lock);
8054    
8055     /* Precompute checksum seed for inode metadata */
8056     - if (EXT4_HAS_RO_COMPAT_FEATURE(sb,
8057     - EXT4_FEATURE_RO_COMPAT_METADATA_CSUM)) {
8058     + if (ext4_has_metadata_csum(sb)) {
8059     __u32 csum;
8060     __le32 inum = cpu_to_le32(inode->i_ino);
8061     __le32 gen = cpu_to_le32(inode->i_generation);
8062     diff --git a/fs/ext4/inline.c b/fs/ext4/inline.c
8063     index bea662bd0ca6..aa8e69556c16 100644
8064     --- a/fs/ext4/inline.c
8065     +++ b/fs/ext4/inline.c
8066     @@ -1126,8 +1126,7 @@ static int ext4_finish_convert_inline_dir(handle_t *handle,
8067     memcpy((void *)de, buf + EXT4_INLINE_DOTDOT_SIZE,
8068     inline_size - EXT4_INLINE_DOTDOT_SIZE);
8069    
8070     - if (EXT4_HAS_RO_COMPAT_FEATURE(inode->i_sb,
8071     - EXT4_FEATURE_RO_COMPAT_METADATA_CSUM))
8072     + if (ext4_has_metadata_csum(inode->i_sb))
8073     csum_size = sizeof(struct ext4_dir_entry_tail);
8074    
8075     inode->i_size = inode->i_sb->s_blocksize;
8076     diff --git a/fs/ext4/inode.c b/fs/ext4/inode.c
8077     index 3aa26e9117c4..7d1057bf2b86 100644
8078     --- a/fs/ext4/inode.c
8079     +++ b/fs/ext4/inode.c
8080     @@ -83,8 +83,7 @@ static int ext4_inode_csum_verify(struct inode *inode, struct ext4_inode *raw,
8081    
8082     if (EXT4_SB(inode->i_sb)->s_es->s_creator_os !=
8083     cpu_to_le32(EXT4_OS_LINUX) ||
8084     - !EXT4_HAS_RO_COMPAT_FEATURE(inode->i_sb,
8085     - EXT4_FEATURE_RO_COMPAT_METADATA_CSUM))
8086     + !ext4_has_metadata_csum(inode->i_sb))
8087     return 1;
8088    
8089     provided = le16_to_cpu(raw->i_checksum_lo);
8090     @@ -105,8 +104,7 @@ static void ext4_inode_csum_set(struct inode *inode, struct ext4_inode *raw,
8091    
8092     if (EXT4_SB(inode->i_sb)->s_es->s_creator_os !=
8093     cpu_to_le32(EXT4_OS_LINUX) ||
8094     - !EXT4_HAS_RO_COMPAT_FEATURE(inode->i_sb,
8095     - EXT4_FEATURE_RO_COMPAT_METADATA_CSUM))
8096     + !ext4_has_metadata_csum(inode->i_sb))
8097     return;
8098    
8099     csum = ext4_inode_csum(inode, raw, ei);
8100     @@ -224,16 +222,15 @@ void ext4_evict_inode(struct inode *inode)
8101     goto no_delete;
8102     }
8103    
8104     - if (!is_bad_inode(inode))
8105     - dquot_initialize(inode);
8106     + if (is_bad_inode(inode))
8107     + goto no_delete;
8108     + dquot_initialize(inode);
8109    
8110     if (ext4_should_order_data(inode))
8111     ext4_begin_ordered_truncate(inode, 0);
8112     truncate_inode_pages_final(&inode->i_data);
8113    
8114     WARN_ON(atomic_read(&EXT4_I(inode)->i_ioend_count));
8115     - if (is_bad_inode(inode))
8116     - goto no_delete;
8117    
8118     /*
8119     * Protect us against freezing - iput() caller didn't have to have any
8120     @@ -2515,6 +2512,20 @@ static int ext4_nonda_switch(struct super_block *sb)
8121     return 0;
8122     }
8123    
8124     +/* We always reserve for an inode update; the superblock could be there too */
8125     +static int ext4_da_write_credits(struct inode *inode, loff_t pos, unsigned len)
8126     +{
8127     + if (likely(EXT4_HAS_RO_COMPAT_FEATURE(inode->i_sb,
8128     + EXT4_FEATURE_RO_COMPAT_LARGE_FILE)))
8129     + return 1;
8130     +
8131     + if (pos + len <= 0x7fffffffULL)
8132     + return 1;
8133     +
8134     + /* We might need to update the superblock to set LARGE_FILE */
8135     + return 2;
8136     +}
8137     +
8138     static int ext4_da_write_begin(struct file *file, struct address_space *mapping,
8139     loff_t pos, unsigned len, unsigned flags,
8140     struct page **pagep, void **fsdata)
8141     @@ -2565,7 +2576,8 @@ retry_grab:
8142     * of file which has an already mapped buffer.
8143     */
8144     retry_journal:
8145     - handle = ext4_journal_start(inode, EXT4_HT_WRITE_PAGE, 1);
8146     + handle = ext4_journal_start(inode, EXT4_HT_WRITE_PAGE,
8147     + ext4_da_write_credits(inode, pos, len));
8148     if (IS_ERR(handle)) {
8149     page_cache_release(page);
8150     return PTR_ERR(handle);
8151     @@ -3936,8 +3948,7 @@ struct inode *ext4_iget(struct super_block *sb, unsigned long ino)
8152     ei->i_extra_isize = 0;
8153    
8154     /* Precompute checksum seed for inode metadata */
8155     - if (EXT4_HAS_RO_COMPAT_FEATURE(sb,
8156     - EXT4_FEATURE_RO_COMPAT_METADATA_CSUM)) {
8157     + if (ext4_has_metadata_csum(sb)) {
8158     struct ext4_sb_info *sbi = EXT4_SB(inode->i_sb);
8159     __u32 csum;
8160     __le32 inum = cpu_to_le32(inode->i_ino);
8161     @@ -4127,6 +4138,13 @@ bad_inode:
8162     return ERR_PTR(ret);
8163     }
8164    
8165     +struct inode *ext4_iget_normal(struct super_block *sb, unsigned long ino)
8166     +{
8167     + if (ino < EXT4_FIRST_INO(sb) && ino != EXT4_ROOT_INO)
8168     + return ERR_PTR(-EIO);
8169     + return ext4_iget(sb, ino);
8170     +}
8171     +
8172     static int ext4_inode_blocks_set(handle_t *handle,
8173     struct ext4_inode *raw_inode,
8174     struct ext4_inode_info *ei)
8175     @@ -4536,8 +4554,12 @@ int ext4_setattr(struct dentry *dentry, struct iattr *attr)
8176     ext4_orphan_del(NULL, inode);
8177     goto err_out;
8178     }
8179     - } else
8180     + } else {
8181     + loff_t oldsize = inode->i_size;
8182     +
8183     i_size_write(inode, attr->ia_size);
8184     + pagecache_isize_extended(inode, oldsize, inode->i_size);
8185     + }
8186    
8187     /*
8188     * Blocks are going to be removed from the inode. Wait
8189     diff --git a/fs/ext4/ioctl.c b/fs/ext4/ioctl.c
8190     index 0f2252ec274d..bfda18a15592 100644
8191     --- a/fs/ext4/ioctl.c
8192     +++ b/fs/ext4/ioctl.c
8193     @@ -331,8 +331,7 @@ flags_out:
8194     if (!inode_owner_or_capable(inode))
8195     return -EPERM;
8196    
8197     - if (EXT4_HAS_RO_COMPAT_FEATURE(inode->i_sb,
8198     - EXT4_FEATURE_RO_COMPAT_METADATA_CSUM)) {
8199     + if (ext4_has_metadata_csum(inode->i_sb)) {
8200     ext4_warning(sb, "Setting inode version is not "
8201     "supported with metadata_csum enabled.");
8202     return -ENOTTY;
8203     @@ -532,9 +531,17 @@ group_add_out:
8204     }
8205    
8206     case EXT4_IOC_SWAP_BOOT:
8207     + {
8208     + int err;
8209     if (!(filp->f_mode & FMODE_WRITE))
8210     return -EBADF;
8211     - return swap_inode_boot_loader(sb, inode);
8212     + err = mnt_want_write_file(filp);
8213     + if (err)
8214     + return err;
8215     + err = swap_inode_boot_loader(sb, inode);
8216     + mnt_drop_write_file(filp);
8217     + return err;
8218     + }
8219    
8220     case EXT4_IOC_RESIZE_FS: {
8221     ext4_fsblk_t n_blocks_count;
8222     diff --git a/fs/ext4/mmp.c b/fs/ext4/mmp.c
8223     index 32bce844c2e1..8313ca3324ec 100644
8224     --- a/fs/ext4/mmp.c
8225     +++ b/fs/ext4/mmp.c
8226     @@ -20,8 +20,7 @@ static __le32 ext4_mmp_csum(struct super_block *sb, struct mmp_struct *mmp)
8227    
8228     static int ext4_mmp_csum_verify(struct super_block *sb, struct mmp_struct *mmp)
8229     {
8230     - if (!EXT4_HAS_RO_COMPAT_FEATURE(sb,
8231     - EXT4_FEATURE_RO_COMPAT_METADATA_CSUM))
8232     + if (!ext4_has_metadata_csum(sb))
8233     return 1;
8234    
8235     return mmp->mmp_checksum == ext4_mmp_csum(sb, mmp);
8236     @@ -29,8 +28,7 @@ static int ext4_mmp_csum_verify(struct super_block *sb, struct mmp_struct *mmp)
8237    
8238     static void ext4_mmp_csum_set(struct super_block *sb, struct mmp_struct *mmp)
8239     {
8240     - if (!EXT4_HAS_RO_COMPAT_FEATURE(sb,
8241     - EXT4_FEATURE_RO_COMPAT_METADATA_CSUM))
8242     + if (!ext4_has_metadata_csum(sb))
8243     return;
8244    
8245     mmp->mmp_checksum = ext4_mmp_csum(sb, mmp);
8246     diff --git a/fs/ext4/namei.c b/fs/ext4/namei.c
8247     index 603e4ebbd0ac..5b7dad62d029 100644
8248     --- a/fs/ext4/namei.c
8249     +++ b/fs/ext4/namei.c
8250     @@ -124,8 +124,7 @@ static struct buffer_head *__ext4_read_dirblock(struct inode *inode,
8251     "directory leaf block found instead of index block");
8252     return ERR_PTR(-EIO);
8253     }
8254     - if (!EXT4_HAS_RO_COMPAT_FEATURE(inode->i_sb,
8255     - EXT4_FEATURE_RO_COMPAT_METADATA_CSUM) ||
8256     + if (!ext4_has_metadata_csum(inode->i_sb) ||
8257     buffer_verified(bh))
8258     return bh;
8259    
8260     @@ -340,8 +339,7 @@ int ext4_dirent_csum_verify(struct inode *inode, struct ext4_dir_entry *dirent)
8261     {
8262     struct ext4_dir_entry_tail *t;
8263    
8264     - if (!EXT4_HAS_RO_COMPAT_FEATURE(inode->i_sb,
8265     - EXT4_FEATURE_RO_COMPAT_METADATA_CSUM))
8266     + if (!ext4_has_metadata_csum(inode->i_sb))
8267     return 1;
8268    
8269     t = get_dirent_tail(inode, dirent);
8270     @@ -362,8 +360,7 @@ static void ext4_dirent_csum_set(struct inode *inode,
8271     {
8272     struct ext4_dir_entry_tail *t;
8273    
8274     - if (!EXT4_HAS_RO_COMPAT_FEATURE(inode->i_sb,
8275     - EXT4_FEATURE_RO_COMPAT_METADATA_CSUM))
8276     + if (!ext4_has_metadata_csum(inode->i_sb))
8277     return;
8278    
8279     t = get_dirent_tail(inode, dirent);
8280     @@ -438,8 +435,7 @@ static int ext4_dx_csum_verify(struct inode *inode,
8281     struct dx_tail *t;
8282     int count_offset, limit, count;
8283    
8284     - if (!EXT4_HAS_RO_COMPAT_FEATURE(inode->i_sb,
8285     - EXT4_FEATURE_RO_COMPAT_METADATA_CSUM))
8286     + if (!ext4_has_metadata_csum(inode->i_sb))
8287     return 1;
8288    
8289     c = get_dx_countlimit(inode, dirent, &count_offset);
8290     @@ -468,8 +464,7 @@ static void ext4_dx_csum_set(struct inode *inode, struct ext4_dir_entry *dirent)
8291     struct dx_tail *t;
8292     int count_offset, limit, count;
8293    
8294     - if (!EXT4_HAS_RO_COMPAT_FEATURE(inode->i_sb,
8295     - EXT4_FEATURE_RO_COMPAT_METADATA_CSUM))
8296     + if (!ext4_has_metadata_csum(inode->i_sb))
8297     return;
8298    
8299     c = get_dx_countlimit(inode, dirent, &count_offset);
8300     @@ -557,8 +552,7 @@ static inline unsigned dx_root_limit(struct inode *dir, unsigned infosize)
8301     unsigned entry_space = dir->i_sb->s_blocksize - EXT4_DIR_REC_LEN(1) -
8302     EXT4_DIR_REC_LEN(2) - infosize;
8303    
8304     - if (EXT4_HAS_RO_COMPAT_FEATURE(dir->i_sb,
8305     - EXT4_FEATURE_RO_COMPAT_METADATA_CSUM))
8306     + if (ext4_has_metadata_csum(dir->i_sb))
8307     entry_space -= sizeof(struct dx_tail);
8308     return entry_space / sizeof(struct dx_entry);
8309     }
8310     @@ -567,8 +561,7 @@ static inline unsigned dx_node_limit(struct inode *dir)
8311     {
8312     unsigned entry_space = dir->i_sb->s_blocksize - EXT4_DIR_REC_LEN(0);
8313    
8314     - if (EXT4_HAS_RO_COMPAT_FEATURE(dir->i_sb,
8315     - EXT4_FEATURE_RO_COMPAT_METADATA_CSUM))
8316     + if (ext4_has_metadata_csum(dir->i_sb))
8317     entry_space -= sizeof(struct dx_tail);
8318     return entry_space / sizeof(struct dx_entry);
8319     }
8320     @@ -1441,7 +1434,7 @@ static struct dentry *ext4_lookup(struct inode *dir, struct dentry *dentry, unsi
8321     dentry);
8322     return ERR_PTR(-EIO);
8323     }
8324     - inode = ext4_iget(dir->i_sb, ino);
8325     + inode = ext4_iget_normal(dir->i_sb, ino);
8326     if (inode == ERR_PTR(-ESTALE)) {
8327     EXT4_ERROR_INODE(dir,
8328     "deleted inode referenced: %u",
8329     @@ -1474,7 +1467,7 @@ struct dentry *ext4_get_parent(struct dentry *child)
8330     return ERR_PTR(-EIO);
8331     }
8332    
8333     - return d_obtain_alias(ext4_iget(child->d_inode->i_sb, ino));
8334     + return d_obtain_alias(ext4_iget_normal(child->d_inode->i_sb, ino));
8335     }
8336    
8337     /*
8338     @@ -1548,8 +1541,7 @@ static struct ext4_dir_entry_2 *do_split(handle_t *handle, struct inode *dir,
8339     int csum_size = 0;
8340     int err = 0, i;
8341    
8342     - if (EXT4_HAS_RO_COMPAT_FEATURE(dir->i_sb,
8343     - EXT4_FEATURE_RO_COMPAT_METADATA_CSUM))
8344     + if (ext4_has_metadata_csum(dir->i_sb))
8345     csum_size = sizeof(struct ext4_dir_entry_tail);
8346    
8347     bh2 = ext4_append(handle, dir, &newblock);
8348     @@ -1718,8 +1710,7 @@ static int add_dirent_to_buf(handle_t *handle, struct dentry *dentry,
8349     int csum_size = 0;
8350     int err;
8351    
8352     - if (EXT4_HAS_RO_COMPAT_FEATURE(inode->i_sb,
8353     - EXT4_FEATURE_RO_COMPAT_METADATA_CSUM))
8354     + if (ext4_has_metadata_csum(inode->i_sb))
8355     csum_size = sizeof(struct ext4_dir_entry_tail);
8356    
8357     if (!de) {
8358     @@ -1786,8 +1777,7 @@ static int make_indexed_dir(handle_t *handle, struct dentry *dentry,
8359     struct fake_dirent *fde;
8360     int csum_size = 0;
8361    
8362     - if (EXT4_HAS_RO_COMPAT_FEATURE(inode->i_sb,
8363     - EXT4_FEATURE_RO_COMPAT_METADATA_CSUM))
8364     + if (ext4_has_metadata_csum(inode->i_sb))
8365     csum_size = sizeof(struct ext4_dir_entry_tail);
8366    
8367     blocksize = dir->i_sb->s_blocksize;
8368     @@ -1904,8 +1894,7 @@ static int ext4_add_entry(handle_t *handle, struct dentry *dentry,
8369     ext4_lblk_t block, blocks;
8370     int csum_size = 0;
8371    
8372     - if (EXT4_HAS_RO_COMPAT_FEATURE(inode->i_sb,
8373     - EXT4_FEATURE_RO_COMPAT_METADATA_CSUM))
8374     + if (ext4_has_metadata_csum(inode->i_sb))
8375     csum_size = sizeof(struct ext4_dir_entry_tail);
8376    
8377     sb = dir->i_sb;
8378     @@ -2167,8 +2156,7 @@ static int ext4_delete_entry(handle_t *handle,
8379     return err;
8380     }
8381    
8382     - if (EXT4_HAS_RO_COMPAT_FEATURE(dir->i_sb,
8383     - EXT4_FEATURE_RO_COMPAT_METADATA_CSUM))
8384     + if (ext4_has_metadata_csum(dir->i_sb))
8385     csum_size = sizeof(struct ext4_dir_entry_tail);
8386    
8387     BUFFER_TRACE(bh, "get_write_access");
8388     @@ -2387,8 +2375,7 @@ static int ext4_init_new_dir(handle_t *handle, struct inode *dir,
8389     int csum_size = 0;
8390     int err;
8391    
8392     - if (EXT4_HAS_RO_COMPAT_FEATURE(dir->i_sb,
8393     - EXT4_FEATURE_RO_COMPAT_METADATA_CSUM))
8394     + if (ext4_has_metadata_csum(dir->i_sb))
8395     csum_size = sizeof(struct ext4_dir_entry_tail);
8396    
8397     if (ext4_test_inode_state(inode, EXT4_STATE_MAY_INLINE_DATA)) {
8398     @@ -2573,7 +2560,7 @@ int ext4_orphan_add(handle_t *handle, struct inode *inode)
8399     int err = 0, rc;
8400     bool dirty = false;
8401    
8402     - if (!sbi->s_journal)
8403     + if (!sbi->s_journal || is_bad_inode(inode))
8404     return 0;
8405    
8406     WARN_ON_ONCE(!(inode->i_state & (I_NEW | I_FREEING)) &&
8407     diff --git a/fs/ext4/resize.c b/fs/ext4/resize.c
8408     index 1e43b905ff98..ca4588388fc3 100644
8409     --- a/fs/ext4/resize.c
8410     +++ b/fs/ext4/resize.c
8411     @@ -1081,7 +1081,7 @@ static void update_backups(struct super_block *sb, int blk_off, char *data,
8412     break;
8413    
8414     if (meta_bg == 0)
8415     - backup_block = group * bpg + blk_off;
8416     + backup_block = ((ext4_fsblk_t)group) * bpg + blk_off;
8417     else
8418     backup_block = (ext4_group_first_block_no(sb, group) +
8419     ext4_bg_has_super(sb, group));
8420     @@ -1212,8 +1212,7 @@ static int ext4_set_bitmap_checksums(struct super_block *sb,
8421     {
8422     struct buffer_head *bh;
8423    
8424     - if (!EXT4_HAS_RO_COMPAT_FEATURE(sb,
8425     - EXT4_FEATURE_RO_COMPAT_METADATA_CSUM))
8426     + if (!ext4_has_metadata_csum(sb))
8427     return 0;
8428    
8429     bh = ext4_get_bitmap(sb, group_data->inode_bitmap);
8430     diff --git a/fs/ext4/super.c b/fs/ext4/super.c
8431     index 0b28b36e7915..b1f0ac748320 100644
8432     --- a/fs/ext4/super.c
8433     +++ b/fs/ext4/super.c
8434     @@ -141,8 +141,7 @@ static __le32 ext4_superblock_csum(struct super_block *sb,
8435     static int ext4_superblock_csum_verify(struct super_block *sb,
8436     struct ext4_super_block *es)
8437     {
8438     - if (!EXT4_HAS_RO_COMPAT_FEATURE(sb,
8439     - EXT4_FEATURE_RO_COMPAT_METADATA_CSUM))
8440     + if (!ext4_has_metadata_csum(sb))
8441     return 1;
8442    
8443     return es->s_checksum == ext4_superblock_csum(sb, es);
8444     @@ -152,8 +151,7 @@ void ext4_superblock_csum_set(struct super_block *sb)
8445     {
8446     struct ext4_super_block *es = EXT4_SB(sb)->s_es;
8447    
8448     - if (!EXT4_HAS_RO_COMPAT_FEATURE(sb,
8449     - EXT4_FEATURE_RO_COMPAT_METADATA_CSUM))
8450     + if (!ext4_has_metadata_csum(sb))
8451     return;
8452    
8453     es->s_checksum = ext4_superblock_csum(sb, es);
8454     @@ -1002,7 +1000,7 @@ static struct inode *ext4_nfs_get_inode(struct super_block *sb,
8455     * Currently we don't know the generation for parent directory, so
8456     * a generation of 0 means "accept any"
8457     */
8458     - inode = ext4_iget(sb, ino);
8459     + inode = ext4_iget_normal(sb, ino);
8460     if (IS_ERR(inode))
8461     return ERR_CAST(inode);
8462     if (generation && inode->i_generation != generation) {
8463     @@ -1712,13 +1710,6 @@ static int parse_options(char *options, struct super_block *sb,
8464     "not specified");
8465     return 0;
8466     }
8467     - } else {
8468     - if (sbi->s_jquota_fmt) {
8469     - ext4_msg(sb, KERN_ERR, "journaled quota format "
8470     - "specified with no journaling "
8471     - "enabled");
8472     - return 0;
8473     - }
8474     }
8475     #endif
8476     if (test_opt(sb, DIOREAD_NOLOCK)) {
8477     @@ -2016,8 +2007,7 @@ static __le16 ext4_group_desc_csum(struct ext4_sb_info *sbi, __u32 block_group,
8478     __u16 crc = 0;
8479     __le32 le_group = cpu_to_le32(block_group);
8480    
8481     - if ((sbi->s_es->s_feature_ro_compat &
8482     - cpu_to_le32(EXT4_FEATURE_RO_COMPAT_METADATA_CSUM))) {
8483     + if (ext4_has_metadata_csum(sbi->s_sb)) {
8484     /* Use new metadata_csum algorithm */
8485     __le16 save_csum;
8486     __u32 csum32;
8487     @@ -2035,6 +2025,10 @@ static __le16 ext4_group_desc_csum(struct ext4_sb_info *sbi, __u32 block_group,
8488     }
8489    
8490     /* old crc16 code */
8491     + if (!(sbi->s_es->s_feature_ro_compat &
8492     + cpu_to_le32(EXT4_FEATURE_RO_COMPAT_GDT_CSUM)))
8493     + return 0;
8494     +
8495     offset = offsetof(struct ext4_group_desc, bg_checksum);
8496    
8497     crc = crc16(~0, sbi->s_es->s_uuid, sizeof(sbi->s_es->s_uuid));
8498     @@ -3179,8 +3173,7 @@ static int set_journal_csum_feature_set(struct super_block *sb)
8499     int compat, incompat;
8500     struct ext4_sb_info *sbi = EXT4_SB(sb);
8501    
8502     - if (EXT4_HAS_RO_COMPAT_FEATURE(sb,
8503     - EXT4_FEATURE_RO_COMPAT_METADATA_CSUM)) {
8504     + if (ext4_has_metadata_csum(sb)) {
8505     /* journal checksum v3 */
8506     compat = 0;
8507     incompat = JBD2_FEATURE_INCOMPAT_CSUM_V3;
8508     @@ -3487,8 +3480,7 @@ static int ext4_fill_super(struct super_block *sb, void *data, int silent)
8509     }
8510    
8511     /* Precompute checksum seed for all metadata */
8512     - if (EXT4_HAS_RO_COMPAT_FEATURE(sb,
8513     - EXT4_FEATURE_RO_COMPAT_METADATA_CSUM))
8514     + if (ext4_has_metadata_csum(sb))
8515     sbi->s_csum_seed = ext4_chksum(sbi, ~0, es->s_uuid,
8516     sizeof(es->s_uuid));
8517    
8518     @@ -3506,6 +3498,10 @@ static int ext4_fill_super(struct super_block *sb, void *data, int silent)
8519     #ifdef CONFIG_EXT4_FS_POSIX_ACL
8520     set_opt(sb, POSIX_ACL);
8521     #endif
8522     + /* don't forget to enable journal_csum when metadata_csum is enabled. */
8523     + if (ext4_has_metadata_csum(sb))
8524     + set_opt(sb, JOURNAL_CHECKSUM);
8525     +
8526     if ((def_mount_opts & EXT4_DEFM_JMODE) == EXT4_DEFM_JMODE_DATA)
8527     set_opt(sb, JOURNAL_DATA);
8528     else if ((def_mount_opts & EXT4_DEFM_JMODE) == EXT4_DEFM_JMODE_ORDERED)
8529     diff --git a/fs/ext4/xattr.c b/fs/ext4/xattr.c
8530     index e7387337060c..2d1e5803839f 100644
8531     --- a/fs/ext4/xattr.c
8532     +++ b/fs/ext4/xattr.c
8533     @@ -142,8 +142,7 @@ static int ext4_xattr_block_csum_verify(struct inode *inode,
8534     sector_t block_nr,
8535     struct ext4_xattr_header *hdr)
8536     {
8537     - if (EXT4_HAS_RO_COMPAT_FEATURE(inode->i_sb,
8538     - EXT4_FEATURE_RO_COMPAT_METADATA_CSUM) &&
8539     + if (ext4_has_metadata_csum(inode->i_sb) &&
8540     (hdr->h_checksum != ext4_xattr_block_csum(inode, block_nr, hdr)))
8541     return 0;
8542     return 1;
8543     @@ -153,8 +152,7 @@ static void ext4_xattr_block_csum_set(struct inode *inode,
8544     sector_t block_nr,
8545     struct ext4_xattr_header *hdr)
8546     {
8547     - if (!EXT4_HAS_RO_COMPAT_FEATURE(inode->i_sb,
8548     - EXT4_FEATURE_RO_COMPAT_METADATA_CSUM))
8549     + if (!ext4_has_metadata_csum(inode->i_sb))
8550     return;
8551    
8552     hdr->h_checksum = ext4_xattr_block_csum(inode, block_nr, hdr);
8553     @@ -190,14 +188,28 @@ ext4_listxattr(struct dentry *dentry, char *buffer, size_t size)
8554     }
8555    
8556     static int
8557     -ext4_xattr_check_names(struct ext4_xattr_entry *entry, void *end)
8558     +ext4_xattr_check_names(struct ext4_xattr_entry *entry, void *end,
8559     + void *value_start)
8560     {
8561     - while (!IS_LAST_ENTRY(entry)) {
8562     - struct ext4_xattr_entry *next = EXT4_XATTR_NEXT(entry);
8563     + struct ext4_xattr_entry *e = entry;
8564     +
8565     + while (!IS_LAST_ENTRY(e)) {
8566     + struct ext4_xattr_entry *next = EXT4_XATTR_NEXT(e);
8567     if ((void *)next >= end)
8568     return -EIO;
8569     - entry = next;
8570     + e = next;
8571     }
8572     +
8573     + while (!IS_LAST_ENTRY(entry)) {
8574     + if (entry->e_value_size != 0 &&
8575     + (value_start + le16_to_cpu(entry->e_value_offs) <
8576     + (void *)e + sizeof(__u32) ||
8577     + value_start + le16_to_cpu(entry->e_value_offs) +
8578     + le32_to_cpu(entry->e_value_size) > end))
8579     + return -EIO;
8580     + entry = EXT4_XATTR_NEXT(entry);
8581     + }
8582     +
8583     return 0;
8584     }
8585    
8586     @@ -214,7 +226,8 @@ ext4_xattr_check_block(struct inode *inode, struct buffer_head *bh)
8587     return -EIO;
8588     if (!ext4_xattr_block_csum_verify(inode, bh->b_blocknr, BHDR(bh)))
8589     return -EIO;
8590     - error = ext4_xattr_check_names(BFIRST(bh), bh->b_data + bh->b_size);
8591     + error = ext4_xattr_check_names(BFIRST(bh), bh->b_data + bh->b_size,
8592     + bh->b_data);
8593     if (!error)
8594     set_buffer_verified(bh);
8595     return error;
8596     @@ -331,7 +344,7 @@ ext4_xattr_ibody_get(struct inode *inode, int name_index, const char *name,
8597     header = IHDR(inode, raw_inode);
8598     entry = IFIRST(header);
8599     end = (void *)raw_inode + EXT4_SB(inode->i_sb)->s_inode_size;
8600     - error = ext4_xattr_check_names(entry, end);
8601     + error = ext4_xattr_check_names(entry, end, entry);
8602     if (error)
8603     goto cleanup;
8604     error = ext4_xattr_find_entry(&entry, name_index, name,
8605     @@ -463,7 +476,7 @@ ext4_xattr_ibody_list(struct dentry *dentry, char *buffer, size_t buffer_size)
8606     raw_inode = ext4_raw_inode(&iloc);
8607     header = IHDR(inode, raw_inode);
8608     end = (void *)raw_inode + EXT4_SB(inode->i_sb)->s_inode_size;
8609     - error = ext4_xattr_check_names(IFIRST(header), end);
8610     + error = ext4_xattr_check_names(IFIRST(header), end, IFIRST(header));
8611     if (error)
8612     goto cleanup;
8613     error = ext4_xattr_list_entries(dentry, IFIRST(header),
8614     @@ -986,7 +999,8 @@ int ext4_xattr_ibody_find(struct inode *inode, struct ext4_xattr_info *i,
8615     is->s.here = is->s.first;
8616     is->s.end = (void *)raw_inode + EXT4_SB(inode->i_sb)->s_inode_size;
8617     if (ext4_test_inode_state(inode, EXT4_STATE_XATTR)) {
8618     - error = ext4_xattr_check_names(IFIRST(header), is->s.end);
8619     + error = ext4_xattr_check_names(IFIRST(header), is->s.end,
8620     + IFIRST(header));
8621     if (error)
8622     return error;
8623     /* Find the named attribute. */
8624     diff --git a/fs/jbd2/recovery.c b/fs/jbd2/recovery.c
8625     index 9b329b55ffe3..bcbef08a4d8f 100644
8626     --- a/fs/jbd2/recovery.c
8627     +++ b/fs/jbd2/recovery.c
8628     @@ -525,6 +525,7 @@ static int do_one_pass(journal_t *journal,
8629     !jbd2_descr_block_csum_verify(journal,
8630     bh->b_data)) {
8631     err = -EIO;
8632     + brelse(bh);
8633     goto failed;
8634     }
8635    
8636     diff --git a/fs/jffs2/jffs2_fs_sb.h b/fs/jffs2/jffs2_fs_sb.h
8637     index 413ef89c2d1b..046fee8b6e9b 100644
8638     --- a/fs/jffs2/jffs2_fs_sb.h
8639     +++ b/fs/jffs2/jffs2_fs_sb.h
8640     @@ -134,8 +134,6 @@ struct jffs2_sb_info {
8641     struct rw_semaphore wbuf_sem; /* Protects the write buffer */
8642    
8643     struct delayed_work wbuf_dwork; /* write-buffer write-out work */
8644     - int wbuf_queued; /* non-zero delayed work is queued */
8645     - spinlock_t wbuf_dwork_lock; /* protects wbuf_dwork and and wbuf_queued */
8646    
8647     unsigned char *oobbuf;
8648     int oobavail; /* How many bytes are available for JFFS2 in OOB */
8649     diff --git a/fs/jffs2/wbuf.c b/fs/jffs2/wbuf.c
8650     index a6597d60d76d..09ed55190ee2 100644
8651     --- a/fs/jffs2/wbuf.c
8652     +++ b/fs/jffs2/wbuf.c
8653     @@ -1162,10 +1162,6 @@ static void delayed_wbuf_sync(struct work_struct *work)
8654     struct jffs2_sb_info *c = work_to_sb(work);
8655     struct super_block *sb = OFNI_BS_2SFFJ(c);
8656    
8657     - spin_lock(&c->wbuf_dwork_lock);
8658     - c->wbuf_queued = 0;
8659     - spin_unlock(&c->wbuf_dwork_lock);
8660     -
8661     if (!(sb->s_flags & MS_RDONLY)) {
8662     jffs2_dbg(1, "%s()\n", __func__);
8663     jffs2_flush_wbuf_gc(c, 0);
8664     @@ -1180,14 +1176,9 @@ void jffs2_dirty_trigger(struct jffs2_sb_info *c)
8665     if (sb->s_flags & MS_RDONLY)
8666     return;
8667    
8668     - spin_lock(&c->wbuf_dwork_lock);
8669     - if (!c->wbuf_queued) {
8670     + delay = msecs_to_jiffies(dirty_writeback_interval * 10);
8671     + if (queue_delayed_work(system_long_wq, &c->wbuf_dwork, delay))
8672     jffs2_dbg(1, "%s()\n", __func__);
8673     - delay = msecs_to_jiffies(dirty_writeback_interval * 10);
8674     - queue_delayed_work(system_long_wq, &c->wbuf_dwork, delay);
8675     - c->wbuf_queued = 1;
8676     - }
8677     - spin_unlock(&c->wbuf_dwork_lock);
8678     }
8679    
8680     int jffs2_nand_flash_setup(struct jffs2_sb_info *c)
8681     @@ -1211,7 +1202,6 @@ int jffs2_nand_flash_setup(struct jffs2_sb_info *c)
8682    
8683     /* Initialise write buffer */
8684     init_rwsem(&c->wbuf_sem);
8685     - spin_lock_init(&c->wbuf_dwork_lock);
8686     INIT_DELAYED_WORK(&c->wbuf_dwork, delayed_wbuf_sync);
8687     c->wbuf_pagesize = c->mtd->writesize;
8688     c->wbuf_ofs = 0xFFFFFFFF;
8689     @@ -1251,7 +1241,6 @@ int jffs2_dataflash_setup(struct jffs2_sb_info *c) {
8690    
8691     /* Initialize write buffer */
8692     init_rwsem(&c->wbuf_sem);
8693     - spin_lock_init(&c->wbuf_dwork_lock);
8694     INIT_DELAYED_WORK(&c->wbuf_dwork, delayed_wbuf_sync);
8695     c->wbuf_pagesize = c->mtd->erasesize;
8696    
8697     @@ -1311,7 +1300,6 @@ int jffs2_nor_wbuf_flash_setup(struct jffs2_sb_info *c) {
8698    
8699     /* Initialize write buffer */
8700     init_rwsem(&c->wbuf_sem);
8701     - spin_lock_init(&c->wbuf_dwork_lock);
8702     INIT_DELAYED_WORK(&c->wbuf_dwork, delayed_wbuf_sync);
8703    
8704     c->wbuf_pagesize = c->mtd->writesize;
8705     @@ -1346,7 +1334,6 @@ int jffs2_ubivol_setup(struct jffs2_sb_info *c) {
8706     return 0;
8707    
8708     init_rwsem(&c->wbuf_sem);
8709     - spin_lock_init(&c->wbuf_dwork_lock);
8710     INIT_DELAYED_WORK(&c->wbuf_dwork, delayed_wbuf_sync);
8711    
8712     c->wbuf_pagesize = c->mtd->writesize;
8713     diff --git a/fs/lockd/mon.c b/fs/lockd/mon.c
8714     index daa8e7514eae..9106f42c472c 100644
8715     --- a/fs/lockd/mon.c
8716     +++ b/fs/lockd/mon.c
8717     @@ -159,6 +159,12 @@ static int nsm_mon_unmon(struct nsm_handle *nsm, u32 proc, struct nsm_res *res,
8718    
8719     msg.rpc_proc = &clnt->cl_procinfo[proc];
8720     status = rpc_call_sync(clnt, &msg, RPC_TASK_SOFTCONN);
8721     + if (status == -ECONNREFUSED) {
8722     + dprintk("lockd: NSM upcall RPC failed, status=%d, forcing rebind\n",
8723     + status);
8724     + rpc_force_rebind(clnt);
8725     + status = rpc_call_sync(clnt, &msg, RPC_TASK_SOFTCONN);
8726     + }
8727     if (status < 0)
8728     dprintk("lockd: NSM upcall RPC failed, status=%d\n",
8729     status);
8730     diff --git a/fs/namei.c b/fs/namei.c
8731     index 3ddb044f3702..bb02687272d7 100644
8732     --- a/fs/namei.c
8733     +++ b/fs/namei.c
8734     @@ -3154,7 +3154,8 @@ static int do_tmpfile(int dfd, struct filename *pathname,
8735     if (error)
8736     goto out2;
8737     audit_inode(pathname, nd->path.dentry, 0);
8738     - error = may_open(&nd->path, op->acc_mode, op->open_flag);
8739     + /* Don't check for other permissions, the inode was just created */
8740     + error = may_open(&nd->path, MAY_OPEN, op->open_flag);
8741     if (error)
8742     goto out2;
8743     file->f_path.mnt = nd->path.mnt;
8744     diff --git a/fs/namespace.c b/fs/namespace.c
8745     index 7f67b463a5b4..550dbff08677 100644
8746     --- a/fs/namespace.c
8747     +++ b/fs/namespace.c
8748     @@ -2822,6 +2822,9 @@ SYSCALL_DEFINE2(pivot_root, const char __user *, new_root,
8749     /* make sure we can reach put_old from new_root */
8750     if (!is_path_reachable(old_mnt, old.dentry, &new))
8751     goto out4;
8752     + /* make certain new is below the root */
8753     + if (!is_path_reachable(new_mnt, new.dentry, &root))
8754     + goto out4;
8755     root_mp->m_count++; /* pin it so it won't go away */
8756     lock_mount_hash();
8757     detach_mnt(new_mnt, &parent_path);
8758     diff --git a/fs/nfsd/nfs4proc.c b/fs/nfsd/nfs4proc.c
8759     index 5e0dc528a0e8..1d3cb479b002 100644
8760     --- a/fs/nfsd/nfs4proc.c
8761     +++ b/fs/nfsd/nfs4proc.c
8762     @@ -1229,7 +1229,8 @@ static bool need_wrongsec_check(struct svc_rqst *rqstp)
8763     */
8764     if (argp->opcnt == resp->opcnt)
8765     return false;
8766     -
8767     + if (next->opnum == OP_ILLEGAL)
8768     + return false;
8769     nextd = OPDESC(next);
8770     /*
8771     * Rest of 2.6.3.1.1: certain operations will return WRONGSEC
8772     @@ -1546,7 +1547,8 @@ static inline u32 nfsd4_rename_rsize(struct svc_rqst *rqstp, struct nfsd4_op *op
8773     static inline u32 nfsd4_sequence_rsize(struct svc_rqst *rqstp,
8774     struct nfsd4_op *op)
8775     {
8776     - return NFS4_MAX_SESSIONID_LEN + 20;
8777     + return (op_encode_hdr_size
8778     + + XDR_QUADLEN(NFS4_MAX_SESSIONID_LEN) + 5) * sizeof(__be32);
8779     }
8780    
8781     static inline u32 nfsd4_setattr_rsize(struct svc_rqst *rqstp, struct nfsd4_op *op)
8782     @@ -1850,6 +1852,7 @@ static struct nfsd4_operation nfsd4_ops[] = {
8783     .op_func = (nfsd4op_func)nfsd4_sequence,
8784     .op_flags = ALLOWED_WITHOUT_FH | ALLOWED_AS_FIRST_OP,
8785     .op_name = "OP_SEQUENCE",
8786     + .op_rsize_bop = (nfsd4op_rsize)nfsd4_sequence_rsize,
8787     },
8788     [OP_DESTROY_CLIENTID] = {
8789     .op_func = (nfsd4op_func)nfsd4_destroy_clientid,
8790     diff --git a/fs/ocfs2/cluster/tcp.c b/fs/ocfs2/cluster/tcp.c
8791     index ea34952f9496..485d22d649b3 100644
8792     --- a/fs/ocfs2/cluster/tcp.c
8793     +++ b/fs/ocfs2/cluster/tcp.c
8794     @@ -925,7 +925,7 @@ static int o2net_send_tcp_msg(struct socket *sock, struct kvec *vec,
8795     size_t veclen, size_t total)
8796     {
8797     int ret;
8798     - struct msghdr msg;
8799     + struct msghdr msg = {.msg_flags = 0,};
8800    
8801     if (sock == NULL) {
8802     ret = -EINVAL;
8803     diff --git a/fs/pstore/inode.c b/fs/pstore/inode.c
8804     index 192297b0090d..fafb7a02a5d6 100644
8805     --- a/fs/pstore/inode.c
8806     +++ b/fs/pstore/inode.c
8807     @@ -320,10 +320,10 @@ int pstore_mkfile(enum pstore_type_id type, char *psname, u64 id, int count,
8808     compressed ? ".enc.z" : "");
8809     break;
8810     case PSTORE_TYPE_CONSOLE:
8811     - sprintf(name, "console-%s", psname);
8812     + sprintf(name, "console-%s-%lld", psname, id);
8813     break;
8814     case PSTORE_TYPE_FTRACE:
8815     - sprintf(name, "ftrace-%s", psname);
8816     + sprintf(name, "ftrace-%s-%lld", psname, id);
8817     break;
8818     case PSTORE_TYPE_MCE:
8819     sprintf(name, "mce-%s-%lld", psname, id);
8820     diff --git a/fs/quota/dquot.c b/fs/quota/dquot.c
8821     index f2d0eee9d1f1..23c548d7ae66 100644
8822     --- a/fs/quota/dquot.c
8823     +++ b/fs/quota/dquot.c
8824     @@ -634,7 +634,7 @@ int dquot_writeback_dquots(struct super_block *sb, int type)
8825     dqstats_inc(DQST_LOOKUPS);
8826     err = sb->dq_op->write_dquot(dquot);
8827     if (!ret && err)
8828     - err = ret;
8829     + ret = err;
8830     dqput(dquot);
8831     spin_lock(&dq_list_lock);
8832     }
8833     diff --git a/fs/super.c b/fs/super.c
8834     index b9a214d2fe98..6f8c954315c0 100644
8835     --- a/fs/super.c
8836     +++ b/fs/super.c
8837     @@ -80,6 +80,8 @@ static unsigned long super_cache_scan(struct shrinker *shrink,
8838     inodes = list_lru_count_node(&sb->s_inode_lru, sc->nid);
8839     dentries = list_lru_count_node(&sb->s_dentry_lru, sc->nid);
8840     total_objects = dentries + inodes + fs_objects + 1;
8841     + if (!total_objects)
8842     + total_objects = 1;
8843    
8844     /* proportion the scan between the caches */
8845     dentries = mult_frac(sc->nr_to_scan, dentries, total_objects);
8846     diff --git a/fs/ubifs/commit.c b/fs/ubifs/commit.c
8847     index aa13ad053b14..26b69b2d4a45 100644
8848     --- a/fs/ubifs/commit.c
8849     +++ b/fs/ubifs/commit.c
8850     @@ -166,10 +166,6 @@ static int do_commit(struct ubifs_info *c)
8851     err = ubifs_orphan_end_commit(c);
8852     if (err)
8853     goto out;
8854     - old_ltail_lnum = c->ltail_lnum;
8855     - err = ubifs_log_end_commit(c, new_ltail_lnum);
8856     - if (err)
8857     - goto out;
8858     err = dbg_check_old_index(c, &zroot);
8859     if (err)
8860     goto out;
8861     @@ -202,7 +198,9 @@ static int do_commit(struct ubifs_info *c)
8862     c->mst_node->flags |= cpu_to_le32(UBIFS_MST_NO_ORPHS);
8863     else
8864     c->mst_node->flags &= ~cpu_to_le32(UBIFS_MST_NO_ORPHS);
8865     - err = ubifs_write_master(c);
8866     +
8867     + old_ltail_lnum = c->ltail_lnum;
8868     + err = ubifs_log_end_commit(c, new_ltail_lnum);
8869     if (err)
8870     goto out;
8871    
8872     diff --git a/fs/ubifs/log.c b/fs/ubifs/log.c
8873     index a47ddfc9be6b..c14628fbeee2 100644
8874     --- a/fs/ubifs/log.c
8875     +++ b/fs/ubifs/log.c
8876     @@ -106,10 +106,14 @@ static inline long long empty_log_bytes(const struct ubifs_info *c)
8877     h = (long long)c->lhead_lnum * c->leb_size + c->lhead_offs;
8878     t = (long long)c->ltail_lnum * c->leb_size;
8879    
8880     - if (h >= t)
8881     + if (h > t)
8882     return c->log_bytes - h + t;
8883     - else
8884     + else if (h != t)
8885     return t - h;
8886     + else if (c->lhead_lnum != c->ltail_lnum)
8887     + return 0;
8888     + else
8889     + return c->log_bytes;
8890     }
8891    
8892     /**
8893     @@ -447,9 +451,9 @@ out:
8894     * @ltail_lnum: new log tail LEB number
8895     *
8896     * This function is called on when the commit operation was finished. It
8897     - * moves log tail to new position and unmaps LEBs which contain obsolete data.
8898     - * Returns zero in case of success and a negative error code in case of
8899     - * failure.
8900     + * moves log tail to new position and updates the master node so that it stores
8901     + * the new log tail LEB number. Returns zero in case of success and a negative
8902     + * error code in case of failure.
8903     */
8904     int ubifs_log_end_commit(struct ubifs_info *c, int ltail_lnum)
8905     {
8906     @@ -477,7 +481,12 @@ int ubifs_log_end_commit(struct ubifs_info *c, int ltail_lnum)
8907     spin_unlock(&c->buds_lock);
8908    
8909     err = dbg_check_bud_bytes(c);
8910     + if (err)
8911     + goto out;
8912    
8913     + err = ubifs_write_master(c);
8914     +
8915     +out:
8916     mutex_unlock(&c->log_mutex);
8917     return err;
8918     }
8919     diff --git a/fs/xfs/xfs_itable.c b/fs/xfs/xfs_itable.c
8920     index f1deb961a296..894924a5129b 100644
8921     --- a/fs/xfs/xfs_itable.c
8922     +++ b/fs/xfs/xfs_itable.c
8923     @@ -236,8 +236,10 @@ xfs_bulkstat_grab_ichunk(
8924     XFS_WANT_CORRUPTED_RETURN(stat == 1);
8925    
8926     /* Check if the record contains the inode in request */
8927     - if (irec->ir_startino + XFS_INODES_PER_CHUNK <= agino)
8928     - return -EINVAL;
8929     + if (irec->ir_startino + XFS_INODES_PER_CHUNK <= agino) {
8930     + *icount = 0;
8931     + return 0;
8932     + }
8933    
8934     idx = agino - irec->ir_startino + 1;
8935     if (idx < XFS_INODES_PER_CHUNK &&
8936     @@ -262,75 +264,76 @@ xfs_bulkstat_grab_ichunk(
8937    
8938     #define XFS_BULKSTAT_UBLEFT(ubleft) ((ubleft) >= statstruct_size)
8939    
8940     +struct xfs_bulkstat_agichunk {
8941     + char __user **ac_ubuffer;/* pointer into user's buffer */
8942     + int ac_ubleft; /* bytes left in user's buffer */
8943     + int ac_ubelem; /* spaces used in user's buffer */
8944     +};
8945     +
8946     /*
8947     * Process inodes in chunk with a pointer to a formatter function
8948     * that will iget the inode and fill in the appropriate structure.
8949     */
8950     -int
8951     +static int
8952     xfs_bulkstat_ag_ichunk(
8953     struct xfs_mount *mp,
8954     xfs_agnumber_t agno,
8955     struct xfs_inobt_rec_incore *irbp,
8956     bulkstat_one_pf formatter,
8957     size_t statstruct_size,
8958     - struct xfs_bulkstat_agichunk *acp)
8959     + struct xfs_bulkstat_agichunk *acp,
8960     + xfs_agino_t *last_agino)
8961     {
8962     - xfs_ino_t lastino = acp->ac_lastino;
8963     char __user **ubufp = acp->ac_ubuffer;
8964     - int ubleft = acp->ac_ubleft;
8965     - int ubelem = acp->ac_ubelem;
8966     - int chunkidx, clustidx;
8967     + int chunkidx;
8968     int error = 0;
8969     - xfs_agino_t agino;
8970     + xfs_agino_t agino = irbp->ir_startino;
8971    
8972     - for (agino = irbp->ir_startino, chunkidx = clustidx = 0;
8973     - XFS_BULKSTAT_UBLEFT(ubleft) &&
8974     - irbp->ir_freecount < XFS_INODES_PER_CHUNK;
8975     - chunkidx++, clustidx++, agino++) {
8976     - int fmterror; /* bulkstat formatter result */
8977     + for (chunkidx = 0; chunkidx < XFS_INODES_PER_CHUNK;
8978     + chunkidx++, agino++) {
8979     + int fmterror;
8980     int ubused;
8981     - xfs_ino_t ino = XFS_AGINO_TO_INO(mp, agno, agino);
8982    
8983     - ASSERT(chunkidx < XFS_INODES_PER_CHUNK);
8984     + /* inode won't fit in buffer, we are done */
8985     + if (acp->ac_ubleft < statstruct_size)
8986     + break;
8987    
8988     /* Skip if this inode is free */
8989     - if (XFS_INOBT_MASK(chunkidx) & irbp->ir_free) {
8990     - lastino = ino;
8991     + if (XFS_INOBT_MASK(chunkidx) & irbp->ir_free)
8992     continue;
8993     - }
8994     -
8995     - /*
8996     - * Count used inodes as free so we can tell when the
8997     - * chunk is used up.
8998     - */
8999     - irbp->ir_freecount++;
9000    
9001     /* Get the inode and fill in a single buffer */
9002     ubused = statstruct_size;
9003     - error = formatter(mp, ino, *ubufp, ubleft, &ubused, &fmterror);
9004     - if (fmterror == BULKSTAT_RV_NOTHING) {
9005     - if (error && error != -ENOENT && error != -EINVAL) {
9006     - ubleft = 0;
9007     - break;
9008     - }
9009     - lastino = ino;
9010     - continue;
9011     - }
9012     - if (fmterror == BULKSTAT_RV_GIVEUP) {
9013     - ubleft = 0;
9014     + error = formatter(mp, XFS_AGINO_TO_INO(mp, agno, agino),
9015     + *ubufp, acp->ac_ubleft, &ubused, &fmterror);
9016     +
9017     + if (fmterror == BULKSTAT_RV_GIVEUP ||
9018     + (error && error != -ENOENT && error != -EINVAL)) {
9019     + acp->ac_ubleft = 0;
9020     ASSERT(error);
9021     break;
9022     }
9023     - if (*ubufp)
9024     - *ubufp += ubused;
9025     - ubleft -= ubused;
9026     - ubelem++;
9027     - lastino = ino;
9028     +
9029     + /* be careful not to leak error if at end of chunk */
9030     + if (fmterror == BULKSTAT_RV_NOTHING || error) {
9031     + error = 0;
9032     + continue;
9033     + }
9034     +
9035     + *ubufp += ubused;
9036     + acp->ac_ubleft -= ubused;
9037     + acp->ac_ubelem++;
9038     }
9039    
9040     - acp->ac_lastino = lastino;
9041     - acp->ac_ubleft = ubleft;
9042     - acp->ac_ubelem = ubelem;
9043     + /*
9044     + * Post-update *last_agino. At this point, agino will always point one
9045     + * inode past the last inode we processed successfully. Hence we
9046     + * substract that inode when setting the *last_agino cursor so that we
9047     + * return the correct cookie to userspace. On the next bulkstat call,
9048     + * the inode under the lastino cookie will be skipped as we have already
9049     + * processed it here.
9050     + */
9051     + *last_agino = agino - 1;
9052    
9053     return error;
9054     }
9055     @@ -353,45 +356,33 @@ xfs_bulkstat(
9056     xfs_agino_t agino; /* inode # in allocation group */
9057     xfs_agnumber_t agno; /* allocation group number */
9058     xfs_btree_cur_t *cur; /* btree cursor for ialloc btree */
9059     - int end_of_ag; /* set if we've seen the ag end */
9060     - int error; /* error code */
9061     - int fmterror;/* bulkstat formatter result */
9062     - int i; /* loop index */
9063     - int icount; /* count of inodes good in irbuf */
9064     size_t irbsize; /* size of irec buffer in bytes */
9065     - xfs_ino_t ino; /* inode number (filesystem) */
9066     - xfs_inobt_rec_incore_t *irbp; /* current irec buffer pointer */
9067     xfs_inobt_rec_incore_t *irbuf; /* start of irec buffer */
9068     - xfs_inobt_rec_incore_t *irbufend; /* end of good irec buffer entries */
9069     - xfs_ino_t lastino; /* last inode number returned */
9070     int nirbuf; /* size of irbuf */
9071     - int rval; /* return value error code */
9072     - int tmp; /* result value from btree calls */
9073     int ubcount; /* size of user's buffer */
9074     - int ubleft; /* bytes left in user's buffer */
9075     - char __user *ubufp; /* pointer into user's buffer */
9076     - int ubelem; /* spaces used in user's buffer */
9077     + struct xfs_bulkstat_agichunk ac;
9078     + int error = 0;
9079    
9080     /*
9081     * Get the last inode value, see if there's nothing to do.
9082     */
9083     - ino = (xfs_ino_t)*lastinop;
9084     - lastino = ino;
9085     - agno = XFS_INO_TO_AGNO(mp, ino);
9086     - agino = XFS_INO_TO_AGINO(mp, ino);
9087     + agno = XFS_INO_TO_AGNO(mp, *lastinop);
9088     + agino = XFS_INO_TO_AGINO(mp, *lastinop);
9089     if (agno >= mp->m_sb.sb_agcount ||
9090     - ino != XFS_AGINO_TO_INO(mp, agno, agino)) {
9091     + *lastinop != XFS_AGINO_TO_INO(mp, agno, agino)) {
9092     *done = 1;
9093     *ubcountp = 0;
9094     return 0;
9095     }
9096    
9097     ubcount = *ubcountp; /* statstruct's */
9098     - ubleft = ubcount * statstruct_size; /* bytes */
9099     - *ubcountp = ubelem = 0;
9100     + ac.ac_ubuffer = &ubuffer;
9101     + ac.ac_ubleft = ubcount * statstruct_size; /* bytes */;
9102     + ac.ac_ubelem = 0;
9103     +
9104     + *ubcountp = 0;
9105     *done = 0;
9106     - fmterror = 0;
9107     - ubufp = ubuffer;
9108     +
9109     irbuf = kmem_zalloc_greedy(&irbsize, PAGE_SIZE, PAGE_SIZE * 4);
9110     if (!irbuf)
9111     return -ENOMEM;
9112     @@ -402,9 +393,13 @@ xfs_bulkstat(
9113     * Loop over the allocation groups, starting from the last
9114     * inode returned; 0 means start of the allocation group.
9115     */
9116     - rval = 0;
9117     - while (XFS_BULKSTAT_UBLEFT(ubleft) && agno < mp->m_sb.sb_agcount) {
9118     - cond_resched();
9119     + while (agno < mp->m_sb.sb_agcount) {
9120     + struct xfs_inobt_rec_incore *irbp = irbuf;
9121     + struct xfs_inobt_rec_incore *irbufend = irbuf + nirbuf;
9122     + bool end_of_ag = false;
9123     + int icount = 0;
9124     + int stat;
9125     +
9126     error = xfs_ialloc_read_agi(mp, NULL, agno, &agbp);
9127     if (error)
9128     break;
9129     @@ -414,10 +409,6 @@ xfs_bulkstat(
9130     */
9131     cur = xfs_inobt_init_cursor(mp, NULL, agbp, agno,
9132     XFS_BTNUM_INO);
9133     - irbp = irbuf;
9134     - irbufend = irbuf + nirbuf;
9135     - end_of_ag = 0;
9136     - icount = 0;
9137     if (agino > 0) {
9138     /*
9139     * In the middle of an allocation group, we need to get
9140     @@ -427,22 +418,23 @@ xfs_bulkstat(
9141    
9142     error = xfs_bulkstat_grab_ichunk(cur, agino, &icount, &r);
9143     if (error)
9144     - break;
9145     + goto del_cursor;
9146     if (icount) {
9147     irbp->ir_startino = r.ir_startino;
9148     irbp->ir_freecount = r.ir_freecount;
9149     irbp->ir_free = r.ir_free;
9150     irbp++;
9151     - agino = r.ir_startino + XFS_INODES_PER_CHUNK;
9152     }
9153     /* Increment to the next record */
9154     - error = xfs_btree_increment(cur, 0, &tmp);
9155     + error = xfs_btree_increment(cur, 0, &stat);
9156     } else {
9157     /* Start of ag. Lookup the first inode chunk */
9158     - error = xfs_inobt_lookup(cur, 0, XFS_LOOKUP_GE, &tmp);
9159     + error = xfs_inobt_lookup(cur, 0, XFS_LOOKUP_GE, &stat);
9160     + }
9161     + if (error || stat == 0) {
9162     + end_of_ag = true;
9163     + goto del_cursor;
9164     }
9165     - if (error)
9166     - break;
9167    
9168     /*
9169     * Loop through inode btree records in this ag,
9170     @@ -451,10 +443,10 @@ xfs_bulkstat(
9171     while (irbp < irbufend && icount < ubcount) {
9172     struct xfs_inobt_rec_incore r;
9173    
9174     - error = xfs_inobt_get_rec(cur, &r, &i);
9175     - if (error || i == 0) {
9176     - end_of_ag = 1;
9177     - break;
9178     + error = xfs_inobt_get_rec(cur, &r, &stat);
9179     + if (error || stat == 0) {
9180     + end_of_ag = true;
9181     + goto del_cursor;
9182     }
9183    
9184     /*
9185     @@ -469,77 +461,79 @@ xfs_bulkstat(
9186     irbp++;
9187     icount += XFS_INODES_PER_CHUNK - r.ir_freecount;
9188     }
9189     - /*
9190     - * Set agino to after this chunk and bump the cursor.
9191     - */
9192     - agino = r.ir_startino + XFS_INODES_PER_CHUNK;
9193     - error = xfs_btree_increment(cur, 0, &tmp);
9194     + error = xfs_btree_increment(cur, 0, &stat);
9195     + if (error || stat == 0) {
9196     + end_of_ag = true;
9197     + goto del_cursor;
9198     + }
9199     cond_resched();
9200     }
9201     +
9202     /*
9203     - * Drop the btree buffers and the agi buffer.
9204     - * We can't hold any of the locks these represent
9205     - * when calling iget.
9206     + * Drop the btree buffers and the agi buffer as we can't hold any
9207     + * of the locks these represent when calling iget. If there is a
9208     + * pending error, then we are done.
9209     */
9210     +del_cursor:
9211     xfs_btree_del_cursor(cur, XFS_BTREE_NOERROR);
9212     xfs_buf_relse(agbp);
9213     + if (error)
9214     + break;
9215     /*
9216     - * Now format all the good inodes into the user's buffer.
9217     + * Now format all the good inodes into the user's buffer. The
9218     + * call to xfs_bulkstat_ag_ichunk() sets up the agino pointer
9219     + * for the next loop iteration.
9220     */
9221     irbufend = irbp;
9222     for (irbp = irbuf;
9223     - irbp < irbufend && XFS_BULKSTAT_UBLEFT(ubleft); irbp++) {
9224     - struct xfs_bulkstat_agichunk ac;
9225     -
9226     - ac.ac_lastino = lastino;
9227     - ac.ac_ubuffer = &ubuffer;
9228     - ac.ac_ubleft = ubleft;
9229     - ac.ac_ubelem = ubelem;
9230     + irbp < irbufend && ac.ac_ubleft >= statstruct_size;
9231     + irbp++) {
9232     error = xfs_bulkstat_ag_ichunk(mp, agno, irbp,
9233     - formatter, statstruct_size, &ac);
9234     + formatter, statstruct_size, &ac,
9235     + &agino);
9236     if (error)
9237     - rval = error;
9238     -
9239     - lastino = ac.ac_lastino;
9240     - ubleft = ac.ac_ubleft;
9241     - ubelem = ac.ac_ubelem;
9242     + break;
9243    
9244     cond_resched();
9245     }
9246     +
9247     /*
9248     - * Set up for the next loop iteration.
9249     + * If we've run out of space or had a formatting error, we
9250     + * are now done
9251     */
9252     - if (XFS_BULKSTAT_UBLEFT(ubleft)) {
9253     - if (end_of_ag) {
9254     - agno++;
9255     - agino = 0;
9256     - } else
9257     - agino = XFS_INO_TO_AGINO(mp, lastino);
9258     - } else
9259     + if (ac.ac_ubleft < statstruct_size || error)
9260     break;
9261     +
9262     + if (end_of_ag) {
9263     + agno++;
9264     + agino = 0;
9265     + }
9266     }
9267     /*
9268     * Done, we're either out of filesystem or space to put the data.
9269     */
9270     kmem_free(irbuf);
9271     - *ubcountp = ubelem;
9272     + *ubcountp = ac.ac_ubelem;
9273     +
9274     /*
9275     - * Found some inodes, return them now and return the error next time.
9276     + * We found some inodes, so clear the error status and return them.
9277     + * The lastino pointer will point directly at the inode that triggered
9278     + * any error that occurred, so on the next call the error will be
9279     + * triggered again and propagated to userspace as there will be no
9280     + * formatted inodes in the buffer.
9281     */
9282     - if (ubelem)
9283     - rval = 0;
9284     - if (agno >= mp->m_sb.sb_agcount) {
9285     - /*
9286     - * If we ran out of filesystem, mark lastino as off
9287     - * the end of the filesystem, so the next call
9288     - * will return immediately.
9289     - */
9290     - *lastinop = (xfs_ino_t)XFS_AGINO_TO_INO(mp, agno, 0);
9291     + if (ac.ac_ubelem)
9292     + error = 0;
9293     +
9294     + /*
9295     + * If we ran out of filesystem, lastino will point off the end of
9296     + * the filesystem so the next call will return immediately.
9297     + */
9298     + *lastinop = XFS_AGINO_TO_INO(mp, agno, agino);
9299     + if (agno >= mp->m_sb.sb_agcount)
9300     *done = 1;
9301     - } else
9302     - *lastinop = (xfs_ino_t)lastino;
9303    
9304     - return rval;
9305     + return error;
9306     }
9307    
9308     int
9309     diff --git a/fs/xfs/xfs_itable.h b/fs/xfs/xfs_itable.h
9310     index aaed08022eb9..6ea8b3912fa4 100644
9311     --- a/fs/xfs/xfs_itable.h
9312     +++ b/fs/xfs/xfs_itable.h
9313     @@ -30,22 +30,6 @@ typedef int (*bulkstat_one_pf)(struct xfs_mount *mp,
9314     int *ubused,
9315     int *stat);
9316    
9317     -struct xfs_bulkstat_agichunk {
9318     - xfs_ino_t ac_lastino; /* last inode returned */
9319     - char __user **ac_ubuffer;/* pointer into user's buffer */
9320     - int ac_ubleft; /* bytes left in user's buffer */
9321     - int ac_ubelem; /* spaces used in user's buffer */
9322     -};
9323     -
9324     -int
9325     -xfs_bulkstat_ag_ichunk(
9326     - struct xfs_mount *mp,
9327     - xfs_agnumber_t agno,
9328     - struct xfs_inobt_rec_incore *irbp,
9329     - bulkstat_one_pf formatter,
9330     - size_t statstruct_size,
9331     - struct xfs_bulkstat_agichunk *acp);
9332     -
9333     /*
9334     * Values for stat return value.
9335     */
9336     diff --git a/include/drm/drm_pciids.h b/include/drm/drm_pciids.h
9337     index e973540cd15b..2dd405c9be78 100644
9338     --- a/include/drm/drm_pciids.h
9339     +++ b/include/drm/drm_pciids.h
9340     @@ -74,7 +74,6 @@
9341     {0x1002, 0x4C64, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV250|RADEON_IS_MOBILITY}, \
9342     {0x1002, 0x4C66, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV250|RADEON_IS_MOBILITY}, \
9343     {0x1002, 0x4C67, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV250|RADEON_IS_MOBILITY}, \
9344     - {0x1002, 0x4C6E, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV280|RADEON_IS_MOBILITY}, \
9345     {0x1002, 0x4E44, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_R300}, \
9346     {0x1002, 0x4E45, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_R300}, \
9347     {0x1002, 0x4E46, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_R300}, \
9348     diff --git a/include/linux/blkdev.h b/include/linux/blkdev.h
9349     index 518b46555b80..f2057ff80784 100644
9350     --- a/include/linux/blkdev.h
9351     +++ b/include/linux/blkdev.h
9352     @@ -1142,8 +1142,7 @@ static inline bool blk_needs_flush_plug(struct task_struct *tsk)
9353     /*
9354     * tag stuff
9355     */
9356     -#define blk_rq_tagged(rq) \
9357     - ((rq)->mq_ctx || ((rq)->cmd_flags & REQ_QUEUED))
9358     +#define blk_rq_tagged(rq) ((rq)->cmd_flags & REQ_QUEUED)
9359     extern int blk_queue_start_tag(struct request_queue *, struct request *);
9360     extern struct request *blk_queue_find_tag(struct request_queue *, int);
9361     extern void blk_queue_end_tag(struct request_queue *, struct request *);
9362     @@ -1285,10 +1284,9 @@ static inline int queue_alignment_offset(struct request_queue *q)
9363     static inline int queue_limit_alignment_offset(struct queue_limits *lim, sector_t sector)
9364     {
9365     unsigned int granularity = max(lim->physical_block_size, lim->io_min);
9366     - unsigned int alignment = (sector << 9) & (granularity - 1);
9367     + unsigned int alignment = sector_div(sector, granularity >> 9) << 9;
9368    
9369     - return (granularity + lim->alignment_offset - alignment)
9370     - & (granularity - 1);
9371     + return (granularity + lim->alignment_offset - alignment) % granularity;
9372     }
9373    
9374     static inline int bdev_alignment_offset(struct block_device *bdev)
9375     diff --git a/include/linux/hid.h b/include/linux/hid.h
9376     index f53c4a9cca1d..26ee25fced27 100644
9377     --- a/include/linux/hid.h
9378     +++ b/include/linux/hid.h
9379     @@ -287,6 +287,7 @@ struct hid_item {
9380     #define HID_QUIRK_HIDINPUT_FORCE 0x00000080
9381     #define HID_QUIRK_NO_EMPTY_INPUT 0x00000100
9382     #define HID_QUIRK_NO_INIT_INPUT_REPORTS 0x00000200
9383     +#define HID_QUIRK_ALWAYS_POLL 0x00000400
9384     #define HID_QUIRK_SKIP_OUTPUT_REPORTS 0x00010000
9385     #define HID_QUIRK_SKIP_OUTPUT_REPORT_ID 0x00020000
9386     #define HID_QUIRK_NO_OUTPUT_REPORTS_ON_INTR_EP 0x00040000
9387     diff --git a/include/linux/memcontrol.h b/include/linux/memcontrol.h
9388     index e0752d204d9e..2d946c9b8e8d 100644
9389     --- a/include/linux/memcontrol.h
9390     +++ b/include/linux/memcontrol.h
9391     @@ -139,48 +139,23 @@ static inline bool mem_cgroup_disabled(void)
9392     return false;
9393     }
9394    
9395     -void __mem_cgroup_begin_update_page_stat(struct page *page, bool *locked,
9396     - unsigned long *flags);
9397     -
9398     -extern atomic_t memcg_moving;
9399     -
9400     -static inline void mem_cgroup_begin_update_page_stat(struct page *page,
9401     - bool *locked, unsigned long *flags)
9402     -{
9403     - if (mem_cgroup_disabled())
9404     - return;
9405     - rcu_read_lock();
9406     - *locked = false;
9407     - if (atomic_read(&memcg_moving))
9408     - __mem_cgroup_begin_update_page_stat(page, locked, flags);
9409     -}
9410     -
9411     -void __mem_cgroup_end_update_page_stat(struct page *page,
9412     - unsigned long *flags);
9413     -static inline void mem_cgroup_end_update_page_stat(struct page *page,
9414     - bool *locked, unsigned long *flags)
9415     -{
9416     - if (mem_cgroup_disabled())
9417     - return;
9418     - if (*locked)
9419     - __mem_cgroup_end_update_page_stat(page, flags);
9420     - rcu_read_unlock();
9421     -}
9422     -
9423     -void mem_cgroup_update_page_stat(struct page *page,
9424     - enum mem_cgroup_stat_index idx,
9425     - int val);
9426     -
9427     -static inline void mem_cgroup_inc_page_stat(struct page *page,
9428     +struct mem_cgroup *mem_cgroup_begin_page_stat(struct page *page, bool *locked,
9429     + unsigned long *flags);
9430     +void mem_cgroup_end_page_stat(struct mem_cgroup *memcg, bool locked,
9431     + unsigned long flags);
9432     +void mem_cgroup_update_page_stat(struct mem_cgroup *memcg,
9433     + enum mem_cgroup_stat_index idx, int val);
9434     +
9435     +static inline void mem_cgroup_inc_page_stat(struct mem_cgroup *memcg,
9436     enum mem_cgroup_stat_index idx)
9437     {
9438     - mem_cgroup_update_page_stat(page, idx, 1);
9439     + mem_cgroup_update_page_stat(memcg, idx, 1);
9440     }
9441    
9442     -static inline void mem_cgroup_dec_page_stat(struct page *page,
9443     +static inline void mem_cgroup_dec_page_stat(struct mem_cgroup *memcg,
9444     enum mem_cgroup_stat_index idx)
9445     {
9446     - mem_cgroup_update_page_stat(page, idx, -1);
9447     + mem_cgroup_update_page_stat(memcg, idx, -1);
9448     }
9449    
9450     unsigned long mem_cgroup_soft_limit_reclaim(struct zone *zone, int order,
9451     @@ -315,13 +290,14 @@ mem_cgroup_print_oom_info(struct mem_cgroup *memcg, struct task_struct *p)
9452     {
9453     }
9454    
9455     -static inline void mem_cgroup_begin_update_page_stat(struct page *page,
9456     +static inline struct mem_cgroup *mem_cgroup_begin_page_stat(struct page *page,
9457     bool *locked, unsigned long *flags)
9458     {
9459     + return NULL;
9460     }
9461    
9462     -static inline void mem_cgroup_end_update_page_stat(struct page *page,
9463     - bool *locked, unsigned long *flags)
9464     +static inline void mem_cgroup_end_page_stat(struct mem_cgroup *memcg,
9465     + bool locked, unsigned long flags)
9466     {
9467     }
9468    
9469     @@ -343,12 +319,12 @@ static inline bool mem_cgroup_oom_synchronize(bool wait)
9470     return false;
9471     }
9472    
9473     -static inline void mem_cgroup_inc_page_stat(struct page *page,
9474     +static inline void mem_cgroup_inc_page_stat(struct mem_cgroup *memcg,
9475     enum mem_cgroup_stat_index idx)
9476     {
9477     }
9478    
9479     -static inline void mem_cgroup_dec_page_stat(struct page *page,
9480     +static inline void mem_cgroup_dec_page_stat(struct mem_cgroup *memcg,
9481     enum mem_cgroup_stat_index idx)
9482     {
9483     }
9484     diff --git a/include/linux/mm.h b/include/linux/mm.h
9485     index 16e6f1effef8..f952cc8b185d 100644
9486     --- a/include/linux/mm.h
9487     +++ b/include/linux/mm.h
9488     @@ -1174,6 +1174,7 @@ static inline void unmap_shared_mapping_range(struct address_space *mapping,
9489    
9490     extern void truncate_pagecache(struct inode *inode, loff_t new);
9491     extern void truncate_setsize(struct inode *inode, loff_t newsize);
9492     +void pagecache_isize_extended(struct inode *inode, loff_t from, loff_t to);
9493     void truncate_pagecache_range(struct inode *inode, loff_t offset, loff_t end);
9494     int truncate_inode_page(struct address_space *mapping, struct page *page);
9495     int generic_error_remove_page(struct address_space *mapping, struct page *page);
9496     @@ -1232,7 +1233,6 @@ int __set_page_dirty_no_writeback(struct page *page);
9497     int redirty_page_for_writepage(struct writeback_control *wbc,
9498     struct page *page);
9499     void account_page_dirtied(struct page *page, struct address_space *mapping);
9500     -void account_page_writeback(struct page *page);
9501     int set_page_dirty(struct page *page);
9502     int set_page_dirty_lock(struct page *page);
9503     int clear_page_dirty_for_io(struct page *page);
9504     diff --git a/include/linux/of.h b/include/linux/of.h
9505     index 6c4363b8ddc3..ee0fc7ea68d1 100644
9506     --- a/include/linux/of.h
9507     +++ b/include/linux/of.h
9508     @@ -267,14 +267,12 @@ extern int of_property_read_u64(const struct device_node *np,
9509     extern int of_property_read_string(struct device_node *np,
9510     const char *propname,
9511     const char **out_string);
9512     -extern int of_property_read_string_index(struct device_node *np,
9513     - const char *propname,
9514     - int index, const char **output);
9515     extern int of_property_match_string(struct device_node *np,
9516     const char *propname,
9517     const char *string);
9518     -extern int of_property_count_strings(struct device_node *np,
9519     - const char *propname);
9520     +extern int of_property_read_string_helper(struct device_node *np,
9521     + const char *propname,
9522     + const char **out_strs, size_t sz, int index);
9523     extern int of_device_is_compatible(const struct device_node *device,
9524     const char *);
9525     extern int of_device_is_available(const struct device_node *device);
9526     @@ -486,15 +484,9 @@ static inline int of_property_read_string(struct device_node *np,
9527     return -ENOSYS;
9528     }
9529    
9530     -static inline int of_property_read_string_index(struct device_node *np,
9531     - const char *propname, int index,
9532     - const char **out_string)
9533     -{
9534     - return -ENOSYS;
9535     -}
9536     -
9537     -static inline int of_property_count_strings(struct device_node *np,
9538     - const char *propname)
9539     +static inline int of_property_read_string_helper(struct device_node *np,
9540     + const char *propname,
9541     + const char **out_strs, size_t sz, int index)
9542     {
9543     return -ENOSYS;
9544     }
9545     @@ -668,6 +660,70 @@ static inline int of_property_count_u64_elems(const struct device_node *np,
9546     }
9547    
9548     /**
9549     + * of_property_read_string_array() - Read an array of strings from a multiple
9550     + * strings property.
9551     + * @np: device node from which the property value is to be read.
9552     + * @propname: name of the property to be searched.
9553     + * @out_strs: output array of string pointers.
9554     + * @sz: number of array elements to read.
9555     + *
9556     + * Search for a property in a device tree node and retrieve a list of
9557     + * terminated string values (pointer to data, not a copy) in that property.
9558     + *
9559     + * If @out_strs is NULL, the number of strings in the property is returned.
9560     + */
9561     +static inline int of_property_read_string_array(struct device_node *np,
9562     + const char *propname, const char **out_strs,
9563     + size_t sz)
9564     +{
9565     + return of_property_read_string_helper(np, propname, out_strs, sz, 0);
9566     +}
9567     +
9568     +/**
9569     + * of_property_count_strings() - Find and return the number of strings from a
9570     + * multiple strings property.
9571     + * @np: device node from which the property value is to be read.
9572     + * @propname: name of the property to be searched.
9573     + *
9574     + * Search for a property in a device tree node and retrieve the number of null
9575     + * terminated string contain in it. Returns the number of strings on
9576     + * success, -EINVAL if the property does not exist, -ENODATA if property
9577     + * does not have a value, and -EILSEQ if the string is not null-terminated
9578     + * within the length of the property data.
9579     + */
9580     +static inline int of_property_count_strings(struct device_node *np,
9581     + const char *propname)
9582     +{
9583     + return of_property_read_string_helper(np, propname, NULL, 0, 0);
9584     +}
9585     +
9586     +/**
9587     + * of_property_read_string_index() - Find and read a string from a multiple
9588     + * strings property.
9589     + * @np: device node from which the property value is to be read.
9590     + * @propname: name of the property to be searched.
9591     + * @index: index of the string in the list of strings
9592     + * @out_string: pointer to null terminated return string, modified only if
9593     + * return value is 0.
9594     + *
9595     + * Search for a property in a device tree node and retrieve a null
9596     + * terminated string value (pointer to data, not a copy) in the list of strings
9597     + * contained in that property.
9598     + * Returns 0 on success, -EINVAL if the property does not exist, -ENODATA if
9599     + * property does not have a value, and -EILSEQ if the string is not
9600     + * null-terminated within the length of the property data.
9601     + *
9602     + * The out_string pointer is modified only if a valid string can be decoded.
9603     + */
9604     +static inline int of_property_read_string_index(struct device_node *np,
9605     + const char *propname,
9606     + int index, const char **output)
9607     +{
9608     + int rc = of_property_read_string_helper(np, propname, output, 1, index);
9609     + return rc < 0 ? rc : 0;
9610     +}
9611     +
9612     +/**
9613     * of_property_read_bool - Findfrom a property
9614     * @np: device node from which the property value is to be read.
9615     * @propname: name of the property to be searched.
9616     diff --git a/include/linux/oom.h b/include/linux/oom.h
9617     index 647395a1a550..e8d6e1058723 100644
9618     --- a/include/linux/oom.h
9619     +++ b/include/linux/oom.h
9620     @@ -50,6 +50,9 @@ static inline bool oom_task_origin(const struct task_struct *p)
9621     extern unsigned long oom_badness(struct task_struct *p,
9622     struct mem_cgroup *memcg, const nodemask_t *nodemask,
9623     unsigned long totalpages);
9624     +
9625     +extern int oom_kills_count(void);
9626     +extern void note_oom_kill(void);
9627     extern void oom_kill_process(struct task_struct *p, gfp_t gfp_mask, int order,
9628     unsigned int points, unsigned long totalpages,
9629     struct mem_cgroup *memcg, nodemask_t *nodemask,
9630     diff --git a/include/linux/string.h b/include/linux/string.h
9631     index d36977e029af..3b42b3732da6 100644
9632     --- a/include/linux/string.h
9633     +++ b/include/linux/string.h
9634     @@ -132,7 +132,7 @@ int bprintf(u32 *bin_buf, size_t size, const char *fmt, ...) __printf(3, 4);
9635     #endif
9636    
9637     extern ssize_t memory_read_from_buffer(void *to, size_t count, loff_t *ppos,
9638     - const void *from, size_t available);
9639     + const void *from, size_t available);
9640    
9641     /**
9642     * strstarts - does @str start with @prefix?
9643     @@ -144,7 +144,8 @@ static inline bool strstarts(const char *str, const char *prefix)
9644     return strncmp(str, prefix, strlen(prefix)) == 0;
9645     }
9646    
9647     -extern size_t memweight(const void *ptr, size_t bytes);
9648     +size_t memweight(const void *ptr, size_t bytes);
9649     +void memzero_explicit(void *s, size_t count);
9650    
9651     /**
9652     * kbasename - return the last part of a pathname.
9653     diff --git a/include/linux/sunrpc/xprt.h b/include/linux/sunrpc/xprt.h
9654     index fcbfe8783243..cf391eef2e6d 100644
9655     --- a/include/linux/sunrpc/xprt.h
9656     +++ b/include/linux/sunrpc/xprt.h
9657     @@ -357,6 +357,7 @@ int xs_swapper(struct rpc_xprt *xprt, int enable);
9658     #define XPRT_CONNECTION_ABORT (7)
9659     #define XPRT_CONNECTION_CLOSE (8)
9660     #define XPRT_CONGESTED (9)
9661     +#define XPRT_CONNECTION_REUSE (10)
9662    
9663     static inline void xprt_set_connected(struct rpc_xprt *xprt)
9664     {
9665     diff --git a/include/linux/usb/quirks.h b/include/linux/usb/quirks.h
9666     index 32e0f5c04e72..4a185a0f6242 100644
9667     --- a/include/linux/usb/quirks.h
9668     +++ b/include/linux/usb/quirks.h
9669     @@ -44,4 +44,7 @@
9670     /* device generates spurious wakeup, ignore remote wakeup capability */
9671     #define USB_QUIRK_IGNORE_REMOTE_WAKEUP 0x00000200
9672    
9673     +/* device can't handle device_qualifier descriptor requests */
9674     +#define USB_QUIRK_DEVICE_QUALIFIER 0x00000100
9675     +
9676     #endif /* __LINUX_USB_QUIRKS_H */
9677     diff --git a/include/net/ipv6.h b/include/net/ipv6.h
9678     index a2db816e8461..268c8f12aac2 100644
9679     --- a/include/net/ipv6.h
9680     +++ b/include/net/ipv6.h
9681     @@ -669,6 +669,8 @@ static inline int ipv6_addr_diff(const struct in6_addr *a1, const struct in6_add
9682     return __ipv6_addr_diff(a1, a2, sizeof(struct in6_addr));
9683     }
9684    
9685     +void ipv6_proxy_select_ident(struct sk_buff *skb);
9686     +
9687     int ip6_dst_hoplimit(struct dst_entry *dst);
9688    
9689     static inline int ip6_sk_dst_hoplimit(struct ipv6_pinfo *np, struct flowi6 *fl6,
9690     diff --git a/include/scsi/scsi_tcq.h b/include/scsi/scsi_tcq.h
9691     index e64583560701..56ed843969ca 100644
9692     --- a/include/scsi/scsi_tcq.h
9693     +++ b/include/scsi/scsi_tcq.h
9694     @@ -67,8 +67,9 @@ static inline void scsi_activate_tcq(struct scsi_device *sdev, int depth)
9695     if (!sdev->tagged_supported)
9696     return;
9697    
9698     - if (!shost_use_blk_mq(sdev->host) &&
9699     - !blk_queue_tagged(sdev->request_queue))
9700     + if (shost_use_blk_mq(sdev->host))
9701     + queue_flag_set_unlocked(QUEUE_FLAG_QUEUED, sdev->request_queue);
9702     + else if (!blk_queue_tagged(sdev->request_queue))
9703     blk_queue_init_tags(sdev->request_queue, depth,
9704     sdev->host->bqt);
9705    
9706     @@ -81,8 +82,7 @@ static inline void scsi_activate_tcq(struct scsi_device *sdev, int depth)
9707     **/
9708     static inline void scsi_deactivate_tcq(struct scsi_device *sdev, int depth)
9709     {
9710     - if (!shost_use_blk_mq(sdev->host) &&
9711     - blk_queue_tagged(sdev->request_queue))
9712     + if (blk_queue_tagged(sdev->request_queue))
9713     blk_queue_free_tags(sdev->request_queue);
9714     scsi_adjust_queue_depth(sdev, 0, depth);
9715     }
9716     diff --git a/include/uapi/drm/vmwgfx_drm.h b/include/uapi/drm/vmwgfx_drm.h
9717     index 4fc66f6b12ce..c472bedbe38e 100644
9718     --- a/include/uapi/drm/vmwgfx_drm.h
9719     +++ b/include/uapi/drm/vmwgfx_drm.h
9720     @@ -29,7 +29,7 @@
9721     #define __VMWGFX_DRM_H__
9722    
9723     #ifndef __KERNEL__
9724     -#include <drm.h>
9725     +#include <drm/drm.h>
9726     #endif
9727    
9728     #define DRM_VMW_MAX_SURFACE_FACES 6
9729     diff --git a/include/uapi/linux/input.h b/include/uapi/linux/input.h
9730     index 1874ebe9ac1e..a1d7e931ab72 100644
9731     --- a/include/uapi/linux/input.h
9732     +++ b/include/uapi/linux/input.h
9733     @@ -739,6 +739,13 @@ struct input_keymap_entry {
9734     #define KEY_BRIGHTNESS_MIN 0x250 /* Set Brightness to Minimum */
9735     #define KEY_BRIGHTNESS_MAX 0x251 /* Set Brightness to Maximum */
9736    
9737     +#define KEY_KBDINPUTASSIST_PREV 0x260
9738     +#define KEY_KBDINPUTASSIST_NEXT 0x261
9739     +#define KEY_KBDINPUTASSIST_PREVGROUP 0x262
9740     +#define KEY_KBDINPUTASSIST_NEXTGROUP 0x263
9741     +#define KEY_KBDINPUTASSIST_ACCEPT 0x264
9742     +#define KEY_KBDINPUTASSIST_CANCEL 0x265
9743     +
9744     #define BTN_TRIGGER_HAPPY 0x2c0
9745     #define BTN_TRIGGER_HAPPY1 0x2c0
9746     #define BTN_TRIGGER_HAPPY2 0x2c1
9747     diff --git a/kernel/events/core.c b/kernel/events/core.c
9748     index 963bf139e2b2..658f232af04c 100644
9749     --- a/kernel/events/core.c
9750     +++ b/kernel/events/core.c
9751     @@ -902,13 +902,23 @@ static void put_ctx(struct perf_event_context *ctx)
9752     }
9753     }
9754    
9755     -static void unclone_ctx(struct perf_event_context *ctx)
9756     +/*
9757     + * This must be done under the ctx->lock, such as to serialize against
9758     + * context_equiv(), therefore we cannot call put_ctx() since that might end up
9759     + * calling scheduler related locks and ctx->lock nests inside those.
9760     + */
9761     +static __must_check struct perf_event_context *
9762     +unclone_ctx(struct perf_event_context *ctx)
9763     {
9764     - if (ctx->parent_ctx) {
9765     - put_ctx(ctx->parent_ctx);
9766     + struct perf_event_context *parent_ctx = ctx->parent_ctx;
9767     +
9768     + lockdep_assert_held(&ctx->lock);
9769     +
9770     + if (parent_ctx)
9771     ctx->parent_ctx = NULL;
9772     - }
9773     ctx->generation++;
9774     +
9775     + return parent_ctx;
9776     }
9777    
9778     static u32 perf_event_pid(struct perf_event *event, struct task_struct *p)
9779     @@ -2210,6 +2220,9 @@ static void ctx_sched_out(struct perf_event_context *ctx,
9780     static int context_equiv(struct perf_event_context *ctx1,
9781     struct perf_event_context *ctx2)
9782     {
9783     + lockdep_assert_held(&ctx1->lock);
9784     + lockdep_assert_held(&ctx2->lock);
9785     +
9786     /* Pinning disables the swap optimization */
9787     if (ctx1->pin_count || ctx2->pin_count)
9788     return 0;
9789     @@ -2943,6 +2956,7 @@ static int event_enable_on_exec(struct perf_event *event,
9790     */
9791     static void perf_event_enable_on_exec(struct perf_event_context *ctx)
9792     {
9793     + struct perf_event_context *clone_ctx = NULL;
9794     struct perf_event *event;
9795     unsigned long flags;
9796     int enabled = 0;
9797     @@ -2974,7 +2988,7 @@ static void perf_event_enable_on_exec(struct perf_event_context *ctx)
9798     * Unclone this context if we enabled any event.
9799     */
9800     if (enabled)
9801     - unclone_ctx(ctx);
9802     + clone_ctx = unclone_ctx(ctx);
9803    
9804     raw_spin_unlock(&ctx->lock);
9805    
9806     @@ -2984,6 +2998,9 @@ static void perf_event_enable_on_exec(struct perf_event_context *ctx)
9807     perf_event_context_sched_in(ctx, ctx->task);
9808     out:
9809     local_irq_restore(flags);
9810     +
9811     + if (clone_ctx)
9812     + put_ctx(clone_ctx);
9813     }
9814    
9815     void perf_event_exec(void)
9816     @@ -3135,7 +3152,7 @@ errout:
9817     static struct perf_event_context *
9818     find_get_context(struct pmu *pmu, struct task_struct *task, int cpu)
9819     {
9820     - struct perf_event_context *ctx;
9821     + struct perf_event_context *ctx, *clone_ctx = NULL;
9822     struct perf_cpu_context *cpuctx;
9823     unsigned long flags;
9824     int ctxn, err;
9825     @@ -3169,9 +3186,12 @@ find_get_context(struct pmu *pmu, struct task_struct *task, int cpu)
9826     retry:
9827     ctx = perf_lock_task_context(task, ctxn, &flags);
9828     if (ctx) {
9829     - unclone_ctx(ctx);
9830     + clone_ctx = unclone_ctx(ctx);
9831     ++ctx->pin_count;
9832     raw_spin_unlock_irqrestore(&ctx->lock, flags);
9833     +
9834     + if (clone_ctx)
9835     + put_ctx(clone_ctx);
9836     } else {
9837     ctx = alloc_perf_context(pmu, task);
9838     err = -ENOMEM;
9839     @@ -7523,7 +7543,7 @@ __perf_event_exit_task(struct perf_event *child_event,
9840     static void perf_event_exit_task_context(struct task_struct *child, int ctxn)
9841     {
9842     struct perf_event *child_event, *next;
9843     - struct perf_event_context *child_ctx, *parent_ctx;
9844     + struct perf_event_context *child_ctx, *clone_ctx = NULL;
9845     unsigned long flags;
9846    
9847     if (likely(!child->perf_event_ctxp[ctxn])) {
9848     @@ -7550,28 +7570,16 @@ static void perf_event_exit_task_context(struct task_struct *child, int ctxn)
9849     child->perf_event_ctxp[ctxn] = NULL;
9850    
9851     /*
9852     - * In order to avoid freeing: child_ctx->parent_ctx->task
9853     - * under perf_event_context::lock, grab another reference.
9854     - */
9855     - parent_ctx = child_ctx->parent_ctx;
9856     - if (parent_ctx)
9857     - get_ctx(parent_ctx);
9858     -
9859     - /*
9860     * If this context is a clone; unclone it so it can't get
9861     * swapped to another process while we're removing all
9862     * the events from it.
9863     */
9864     - unclone_ctx(child_ctx);
9865     + clone_ctx = unclone_ctx(child_ctx);
9866     update_context_time(child_ctx);
9867     raw_spin_unlock_irqrestore(&child_ctx->lock, flags);
9868    
9869     - /*
9870     - * Now that we no longer hold perf_event_context::lock, drop
9871     - * our extra child_ctx->parent_ctx reference.
9872     - */
9873     - if (parent_ctx)
9874     - put_ctx(parent_ctx);
9875     + if (clone_ctx)
9876     + put_ctx(clone_ctx);
9877    
9878     /*
9879     * Report the task dead after unscheduling the events so that we
9880     diff --git a/kernel/freezer.c b/kernel/freezer.c
9881     index aa6a8aadb911..8f9279b9c6d7 100644
9882     --- a/kernel/freezer.c
9883     +++ b/kernel/freezer.c
9884     @@ -42,6 +42,9 @@ bool freezing_slow_path(struct task_struct *p)
9885     if (p->flags & (PF_NOFREEZE | PF_SUSPEND_TASK))
9886     return false;
9887    
9888     + if (test_thread_flag(TIF_MEMDIE))
9889     + return false;
9890     +
9891     if (pm_nosig_freezing || cgroup_freezing(p))
9892     return true;
9893    
9894     diff --git a/kernel/futex.c b/kernel/futex.c
9895     index f3a3a071283c..22b3f1b58201 100644
9896     --- a/kernel/futex.c
9897     +++ b/kernel/futex.c
9898     @@ -641,8 +641,14 @@ static struct futex_pi_state * alloc_pi_state(void)
9899     return pi_state;
9900     }
9901    
9902     +/*
9903     + * Must be called with the hb lock held.
9904     + */
9905     static void free_pi_state(struct futex_pi_state *pi_state)
9906     {
9907     + if (!pi_state)
9908     + return;
9909     +
9910     if (!atomic_dec_and_test(&pi_state->refcount))
9911     return;
9912    
9913     @@ -1521,15 +1527,6 @@ static int futex_requeue(u32 __user *uaddr1, unsigned int flags,
9914     }
9915    
9916     retry:
9917     - if (pi_state != NULL) {
9918     - /*
9919     - * We will have to lookup the pi_state again, so free this one
9920     - * to keep the accounting correct.
9921     - */
9922     - free_pi_state(pi_state);
9923     - pi_state = NULL;
9924     - }
9925     -
9926     ret = get_futex_key(uaddr1, flags & FLAGS_SHARED, &key1, VERIFY_READ);
9927     if (unlikely(ret != 0))
9928     goto out;
9929     @@ -1619,6 +1616,8 @@ retry_private:
9930     case 0:
9931     break;
9932     case -EFAULT:
9933     + free_pi_state(pi_state);
9934     + pi_state = NULL;
9935     double_unlock_hb(hb1, hb2);
9936     hb_waiters_dec(hb2);
9937     put_futex_key(&key2);
9938     @@ -1634,6 +1633,8 @@ retry_private:
9939     * exit to complete.
9940     * - The user space value changed.
9941     */
9942     + free_pi_state(pi_state);
9943     + pi_state = NULL;
9944     double_unlock_hb(hb1, hb2);
9945     hb_waiters_dec(hb2);
9946     put_futex_key(&key2);
9947     @@ -1710,6 +1711,7 @@ retry_private:
9948     }
9949    
9950     out_unlock:
9951     + free_pi_state(pi_state);
9952     double_unlock_hb(hb1, hb2);
9953     hb_waiters_dec(hb2);
9954    
9955     @@ -1727,8 +1729,6 @@ out_put_keys:
9956     out_put_key1:
9957     put_futex_key(&key1);
9958     out:
9959     - if (pi_state != NULL)
9960     - free_pi_state(pi_state);
9961     return ret ? ret : task_count;
9962     }
9963    
9964     diff --git a/kernel/module.c b/kernel/module.c
9965     index 03214bd288e9..1c47139d161c 100644
9966     --- a/kernel/module.c
9967     +++ b/kernel/module.c
9968     @@ -1842,7 +1842,9 @@ static void free_module(struct module *mod)
9969    
9970     /* We leave it in list to prevent duplicate loads, but make sure
9971     * that noone uses it while it's being deconstructed. */
9972     + mutex_lock(&module_mutex);
9973     mod->state = MODULE_STATE_UNFORMED;
9974     + mutex_unlock(&module_mutex);
9975    
9976     /* Remove dynamic debug info */
9977     ddebug_remove_module(mod->name);
9978     diff --git a/kernel/power/hibernate.c b/kernel/power/hibernate.c
9979     index a9dfa79b6bab..1f35a3478f3c 100644
9980     --- a/kernel/power/hibernate.c
9981     +++ b/kernel/power/hibernate.c
9982     @@ -502,8 +502,14 @@ int hibernation_restore(int platform_mode)
9983     error = dpm_suspend_start(PMSG_QUIESCE);
9984     if (!error) {
9985     error = resume_target_kernel(platform_mode);
9986     - dpm_resume_end(PMSG_RECOVER);
9987     + /*
9988     + * The above should either succeed and jump to the new kernel,
9989     + * or return with an error. Otherwise things are just
9990     + * undefined, so let's be paranoid.
9991     + */
9992     + BUG_ON(!error);
9993     }
9994     + dpm_resume_end(PMSG_RECOVER);
9995     pm_restore_gfp_mask();
9996     resume_console();
9997     pm_restore_console();
9998     diff --git a/kernel/power/process.c b/kernel/power/process.c
9999     index 4ee194eb524b..7a37cf3eb1a2 100644
10000     --- a/kernel/power/process.c
10001     +++ b/kernel/power/process.c
10002     @@ -108,6 +108,28 @@ static int try_to_freeze_tasks(bool user_only)
10003     return todo ? -EBUSY : 0;
10004     }
10005    
10006     +/*
10007     + * Returns true if all freezable tasks (except for current) are frozen already
10008     + */
10009     +static bool check_frozen_processes(void)
10010     +{
10011     + struct task_struct *g, *p;
10012     + bool ret = true;
10013     +
10014     + read_lock(&tasklist_lock);
10015     + for_each_process_thread(g, p) {
10016     + if (p != current && !freezer_should_skip(p) &&
10017     + !frozen(p)) {
10018     + ret = false;
10019     + goto done;
10020     + }
10021     + }
10022     +done:
10023     + read_unlock(&tasklist_lock);
10024     +
10025     + return ret;
10026     +}
10027     +
10028     /**
10029     * freeze_processes - Signal user space processes to enter the refrigerator.
10030     * The current thread will not be frozen. The same process that calls
10031     @@ -118,6 +140,7 @@ static int try_to_freeze_tasks(bool user_only)
10032     int freeze_processes(void)
10033     {
10034     int error;
10035     + int oom_kills_saved;
10036    
10037     error = __usermodehelper_disable(UMH_FREEZING);
10038     if (error)
10039     @@ -131,12 +154,27 @@ int freeze_processes(void)
10040    
10041     printk("Freezing user space processes ... ");
10042     pm_freezing = true;
10043     + oom_kills_saved = oom_kills_count();
10044     error = try_to_freeze_tasks(true);
10045     if (!error) {
10046     - printk("done.");
10047     __usermodehelper_set_disable_depth(UMH_DISABLED);
10048     oom_killer_disable();
10049     +
10050     + /*
10051     + * There might have been an OOM kill while we were
10052     + * freezing tasks and the killed task might be still
10053     + * on the way out so we have to double check for race.
10054     + */
10055     + if (oom_kills_count() != oom_kills_saved &&
10056     + !check_frozen_processes()) {
10057     + __usermodehelper_set_disable_depth(UMH_ENABLED);
10058     + printk("OOM in progress.");
10059     + error = -EBUSY;
10060     + goto done;
10061     + }
10062     + printk("done.");
10063     }
10064     +done:
10065     printk("\n");
10066     BUG_ON(in_atomic());
10067    
10068     diff --git a/kernel/sched/core.c b/kernel/sched/core.c
10069     index ec1a286684a5..6d7cb9123dec 100644
10070     --- a/kernel/sched/core.c
10071     +++ b/kernel/sched/core.c
10072     @@ -1977,6 +1977,8 @@ unsigned long to_ratio(u64 period, u64 runtime)
10073     #ifdef CONFIG_SMP
10074     inline struct dl_bw *dl_bw_of(int i)
10075     {
10076     + rcu_lockdep_assert(rcu_read_lock_sched_held(),
10077     + "sched RCU must be held");
10078     return &cpu_rq(i)->rd->dl_bw;
10079     }
10080    
10081     @@ -1985,6 +1987,8 @@ static inline int dl_bw_cpus(int i)
10082     struct root_domain *rd = cpu_rq(i)->rd;
10083     int cpus = 0;
10084    
10085     + rcu_lockdep_assert(rcu_read_lock_sched_held(),
10086     + "sched RCU must be held");
10087     for_each_cpu_and(i, rd->span, cpu_active_mask)
10088     cpus++;
10089    
10090     @@ -4004,13 +4008,14 @@ long sched_setaffinity(pid_t pid, const struct cpumask *in_mask)
10091     * root_domain.
10092     */
10093     #ifdef CONFIG_SMP
10094     - if (task_has_dl_policy(p)) {
10095     - const struct cpumask *span = task_rq(p)->rd->span;
10096     -
10097     - if (dl_bandwidth_enabled() && !cpumask_subset(span, new_mask)) {
10098     + if (task_has_dl_policy(p) && dl_bandwidth_enabled()) {
10099     + rcu_read_lock();
10100     + if (!cpumask_subset(task_rq(p)->rd->span, new_mask)) {
10101     retval = -EBUSY;
10102     + rcu_read_unlock();
10103     goto out_unlock;
10104     }
10105     + rcu_read_unlock();
10106     }
10107     #endif
10108     again:
10109     @@ -7580,6 +7585,8 @@ static int sched_dl_global_constraints(void)
10110     int cpu, ret = 0;
10111     unsigned long flags;
10112    
10113     + rcu_read_lock();
10114     +
10115     /*
10116     * Here we want to check the bandwidth not being set to some
10117     * value smaller than the currently allocated bandwidth in
10118     @@ -7601,6 +7608,8 @@ static int sched_dl_global_constraints(void)
10119     break;
10120     }
10121    
10122     + rcu_read_unlock();
10123     +
10124     return ret;
10125     }
10126    
10127     @@ -7616,6 +7625,7 @@ static void sched_dl_do_global(void)
10128     if (global_rt_runtime() != RUNTIME_INF)
10129     new_bw = to_ratio(global_rt_period(), global_rt_runtime());
10130    
10131     + rcu_read_lock();
10132     /*
10133     * FIXME: As above...
10134     */
10135     @@ -7626,6 +7636,7 @@ static void sched_dl_do_global(void)
10136     dl_b->bw = new_bw;
10137     raw_spin_unlock_irqrestore(&dl_b->lock, flags);
10138     }
10139     + rcu_read_unlock();
10140     }
10141    
10142     static int sched_rt_global_validate(void)
10143     diff --git a/kernel/time/posix-timers.c b/kernel/time/posix-timers.c
10144     index 42b463ad90f2..31ea01f42e1f 100644
10145     --- a/kernel/time/posix-timers.c
10146     +++ b/kernel/time/posix-timers.c
10147     @@ -636,6 +636,7 @@ SYSCALL_DEFINE3(timer_create, const clockid_t, which_clock,
10148     goto out;
10149     }
10150     } else {
10151     + memset(&event.sigev_value, 0, sizeof(event.sigev_value));
10152     event.sigev_notify = SIGEV_SIGNAL;
10153     event.sigev_signo = SIGALRM;
10154     event.sigev_value.sival_int = new_timer->it_id;
10155     diff --git a/kernel/trace/trace_syscalls.c b/kernel/trace/trace_syscalls.c
10156     index 759d5e004517..7e3cd7aaec83 100644
10157     --- a/kernel/trace/trace_syscalls.c
10158     +++ b/kernel/trace/trace_syscalls.c
10159     @@ -313,7 +313,7 @@ static void ftrace_syscall_enter(void *data, struct pt_regs *regs, long id)
10160     int size;
10161    
10162     syscall_nr = trace_get_syscall_nr(current, regs);
10163     - if (syscall_nr < 0)
10164     + if (syscall_nr < 0 || syscall_nr >= NR_syscalls)
10165     return;
10166    
10167     /* Here we're inside tp handler's rcu_read_lock_sched (__DO_TRACE) */
10168     @@ -360,7 +360,7 @@ static void ftrace_syscall_exit(void *data, struct pt_regs *regs, long ret)
10169     int syscall_nr;
10170    
10171     syscall_nr = trace_get_syscall_nr(current, regs);
10172     - if (syscall_nr < 0)
10173     + if (syscall_nr < 0 || syscall_nr >= NR_syscalls)
10174     return;
10175    
10176     /* Here we're inside tp handler's rcu_read_lock_sched (__DO_TRACE()) */
10177     @@ -567,7 +567,7 @@ static void perf_syscall_enter(void *ignore, struct pt_regs *regs, long id)
10178     int size;
10179    
10180     syscall_nr = trace_get_syscall_nr(current, regs);
10181     - if (syscall_nr < 0)
10182     + if (syscall_nr < 0 || syscall_nr >= NR_syscalls)
10183     return;
10184     if (!test_bit(syscall_nr, enabled_perf_enter_syscalls))
10185     return;
10186     @@ -641,7 +641,7 @@ static void perf_syscall_exit(void *ignore, struct pt_regs *regs, long ret)
10187     int size;
10188    
10189     syscall_nr = trace_get_syscall_nr(current, regs);
10190     - if (syscall_nr < 0)
10191     + if (syscall_nr < 0 || syscall_nr >= NR_syscalls)
10192     return;
10193     if (!test_bit(syscall_nr, enabled_perf_exit_syscalls))
10194     return;
10195     diff --git a/lib/bitmap.c b/lib/bitmap.c
10196     index 1e031f2c9aba..33ce01178b43 100644
10197     --- a/lib/bitmap.c
10198     +++ b/lib/bitmap.c
10199     @@ -131,7 +131,9 @@ void __bitmap_shift_right(unsigned long *dst,
10200     lower = src[off + k];
10201     if (left && off + k == lim - 1)
10202     lower &= mask;
10203     - dst[k] = upper << (BITS_PER_LONG - rem) | lower >> rem;
10204     + dst[k] = lower >> rem;
10205     + if (rem)
10206     + dst[k] |= upper << (BITS_PER_LONG - rem);
10207     if (left && k == lim - 1)
10208     dst[k] &= mask;
10209     }
10210     @@ -172,7 +174,9 @@ void __bitmap_shift_left(unsigned long *dst,
10211     upper = src[k];
10212     if (left && k == lim - 1)
10213     upper &= (1UL << left) - 1;
10214     - dst[k + off] = lower >> (BITS_PER_LONG - rem) | upper << rem;
10215     + dst[k + off] = upper << rem;
10216     + if (rem)
10217     + dst[k + off] |= lower >> (BITS_PER_LONG - rem);
10218     if (left && k + off == lim - 1)
10219     dst[k + off] &= (1UL << left) - 1;
10220     }
10221     diff --git a/lib/scatterlist.c b/lib/scatterlist.c
10222     index 9cdf62f8accd..c9f2e8c6ccc9 100644
10223     --- a/lib/scatterlist.c
10224     +++ b/lib/scatterlist.c
10225     @@ -203,10 +203,10 @@ void __sg_free_table(struct sg_table *table, unsigned int max_ents,
10226     }
10227    
10228     table->orig_nents -= sg_size;
10229     - if (!skip_first_chunk) {
10230     - free_fn(sgl, alloc_size);
10231     + if (skip_first_chunk)
10232     skip_first_chunk = false;
10233     - }
10234     + else
10235     + free_fn(sgl, alloc_size);
10236     sgl = next;
10237     }
10238    
10239     diff --git a/lib/string.c b/lib/string.c
10240     index f3c6ff596414..70db57a81f7c 100644
10241     --- a/lib/string.c
10242     +++ b/lib/string.c
10243     @@ -604,6 +604,22 @@ void *memset(void *s, int c, size_t count)
10244     EXPORT_SYMBOL(memset);
10245     #endif
10246    
10247     +/**
10248     + * memzero_explicit - Fill a region of memory (e.g. sensitive
10249     + * keying data) with 0s.
10250     + * @s: Pointer to the start of the area.
10251     + * @count: The size of the area.
10252     + *
10253     + * memzero_explicit() doesn't need an arch-specific version as
10254     + * it just invokes the one of memset() implicitly.
10255     + */
10256     +void memzero_explicit(void *s, size_t count)
10257     +{
10258     + memset(s, 0, count);
10259     + OPTIMIZER_HIDE_VAR(s);
10260     +}
10261     +EXPORT_SYMBOL(memzero_explicit);
10262     +
10263     #ifndef __HAVE_ARCH_MEMCPY
10264     /**
10265     * memcpy - Copy one area of memory to another
10266     diff --git a/mm/balloon_compaction.c b/mm/balloon_compaction.c
10267     index 52abeeb3cb9d..1811ea2c6302 100644
10268     --- a/mm/balloon_compaction.c
10269     +++ b/mm/balloon_compaction.c
10270     @@ -93,11 +93,13 @@ struct page *balloon_page_dequeue(struct balloon_dev_info *b_dev_info)
10271     * to be released by the balloon driver.
10272     */
10273     if (trylock_page(page)) {
10274     +#ifdef CONFIG_BALLOON_COMPACTION
10275     if (!PagePrivate(page)) {
10276     /* raced with isolation */
10277     unlock_page(page);
10278     continue;
10279     }
10280     +#endif
10281     spin_lock_irqsave(&b_dev_info->pages_lock, flags);
10282     balloon_page_delete(page);
10283     spin_unlock_irqrestore(&b_dev_info->pages_lock, flags);
10284     diff --git a/mm/cma.c b/mm/cma.c
10285     index 0ab564623ea8..2904f45beab7 100644
10286     --- a/mm/cma.c
10287     +++ b/mm/cma.c
10288     @@ -123,6 +123,7 @@ static int __init cma_activate_area(struct cma *cma)
10289    
10290     err:
10291     kfree(cma->bitmap);
10292     + cma->count = 0;
10293     return -EINVAL;
10294     }
10295    
10296     diff --git a/mm/huge_memory.c b/mm/huge_memory.c
10297     index f8ffd9412ec5..45c6d6738dfa 100644
10298     --- a/mm/huge_memory.c
10299     +++ b/mm/huge_memory.c
10300     @@ -200,7 +200,7 @@ retry:
10301     preempt_disable();
10302     if (cmpxchg(&huge_zero_page, NULL, zero_page)) {
10303     preempt_enable();
10304     - __free_page(zero_page);
10305     + __free_pages(zero_page, compound_order(zero_page));
10306     goto retry;
10307     }
10308    
10309     @@ -232,7 +232,7 @@ static unsigned long shrink_huge_zero_page_scan(struct shrinker *shrink,
10310     if (atomic_cmpxchg(&huge_zero_refcount, 1, 0) == 1) {
10311     struct page *zero_page = xchg(&huge_zero_page, NULL);
10312     BUG_ON(zero_page == NULL);
10313     - __free_page(zero_page);
10314     + __free_pages(zero_page, compound_order(zero_page));
10315     return HPAGE_PMD_NR;
10316     }
10317    
10318     diff --git a/mm/memcontrol.c b/mm/memcontrol.c
10319     index 28928ce9b07f..48914e124e57 100644
10320     --- a/mm/memcontrol.c
10321     +++ b/mm/memcontrol.c
10322     @@ -1545,12 +1545,8 @@ int mem_cgroup_swappiness(struct mem_cgroup *memcg)
10323     * start move here.
10324     */
10325    
10326     -/* for quick checking without looking up memcg */
10327     -atomic_t memcg_moving __read_mostly;
10328     -
10329     static void mem_cgroup_start_move(struct mem_cgroup *memcg)
10330     {
10331     - atomic_inc(&memcg_moving);
10332     atomic_inc(&memcg->moving_account);
10333     synchronize_rcu();
10334     }
10335     @@ -1561,10 +1557,8 @@ static void mem_cgroup_end_move(struct mem_cgroup *memcg)
10336     * Now, mem_cgroup_clear_mc() may call this function with NULL.
10337     * We check NULL in callee rather than caller.
10338     */
10339     - if (memcg) {
10340     - atomic_dec(&memcg_moving);
10341     + if (memcg)
10342     atomic_dec(&memcg->moving_account);
10343     - }
10344     }
10345    
10346     /*
10347     @@ -2249,41 +2243,52 @@ cleanup:
10348     return true;
10349     }
10350    
10351     -/*
10352     - * Used to update mapped file or writeback or other statistics.
10353     +/**
10354     + * mem_cgroup_begin_page_stat - begin a page state statistics transaction
10355     + * @page: page that is going to change accounted state
10356     + * @locked: &memcg->move_lock slowpath was taken
10357     + * @flags: IRQ-state flags for &memcg->move_lock
10358     *
10359     - * Notes: Race condition
10360     + * This function must mark the beginning of an accounted page state
10361     + * change to prevent double accounting when the page is concurrently
10362     + * being moved to another memcg:
10363     *
10364     - * Charging occurs during page instantiation, while the page is
10365     - * unmapped and locked in page migration, or while the page table is
10366     - * locked in THP migration. No race is possible.
10367     + * memcg = mem_cgroup_begin_page_stat(page, &locked, &flags);
10368     + * if (TestClearPageState(page))
10369     + * mem_cgroup_update_page_stat(memcg, state, -1);
10370     + * mem_cgroup_end_page_stat(memcg, locked, flags);
10371     *
10372     - * Uncharge happens to pages with zero references, no race possible.
10373     + * The RCU lock is held throughout the transaction. The fast path can
10374     + * get away without acquiring the memcg->move_lock (@locked is false)
10375     + * because page moving starts with an RCU grace period.
10376     *
10377     - * Charge moving between groups is protected by checking mm->moving
10378     - * account and taking the move_lock in the slowpath.
10379     + * The RCU lock also protects the memcg from being freed when the page
10380     + * state that is going to change is the only thing preventing the page
10381     + * from being uncharged. E.g. end-writeback clearing PageWriteback(),
10382     + * which allows migration to go ahead and uncharge the page before the
10383     + * account transaction might be complete.
10384     */
10385     -
10386     -void __mem_cgroup_begin_update_page_stat(struct page *page,
10387     - bool *locked, unsigned long *flags)
10388     +struct mem_cgroup *mem_cgroup_begin_page_stat(struct page *page,
10389     + bool *locked,
10390     + unsigned long *flags)
10391     {
10392     struct mem_cgroup *memcg;
10393     struct page_cgroup *pc;
10394    
10395     + rcu_read_lock();
10396     +
10397     + if (mem_cgroup_disabled())
10398     + return NULL;
10399     +
10400     pc = lookup_page_cgroup(page);
10401     again:
10402     memcg = pc->mem_cgroup;
10403     if (unlikely(!memcg || !PageCgroupUsed(pc)))
10404     - return;
10405     - /*
10406     - * If this memory cgroup is not under account moving, we don't
10407     - * need to take move_lock_mem_cgroup(). Because we already hold
10408     - * rcu_read_lock(), any calls to move_account will be delayed until
10409     - * rcu_read_unlock().
10410     - */
10411     - VM_BUG_ON(!rcu_read_lock_held());
10412     + return NULL;
10413     +
10414     + *locked = false;
10415     if (atomic_read(&memcg->moving_account) <= 0)
10416     - return;
10417     + return memcg;
10418    
10419     move_lock_mem_cgroup(memcg, flags);
10420     if (memcg != pc->mem_cgroup || !PageCgroupUsed(pc)) {
10421     @@ -2291,36 +2296,40 @@ again:
10422     goto again;
10423     }
10424     *locked = true;
10425     +
10426     + return memcg;
10427     }
10428    
10429     -void __mem_cgroup_end_update_page_stat(struct page *page, unsigned long *flags)
10430     +/**
10431     + * mem_cgroup_end_page_stat - finish a page state statistics transaction
10432     + * @memcg: the memcg that was accounted against
10433     + * @locked: value received from mem_cgroup_begin_page_stat()
10434     + * @flags: value received from mem_cgroup_begin_page_stat()
10435     + */
10436     +void mem_cgroup_end_page_stat(struct mem_cgroup *memcg, bool locked,
10437     + unsigned long flags)
10438     {
10439     - struct page_cgroup *pc = lookup_page_cgroup(page);
10440     + if (memcg && locked)
10441     + move_unlock_mem_cgroup(memcg, &flags);
10442    
10443     - /*
10444     - * It's guaranteed that pc->mem_cgroup never changes while
10445     - * lock is held because a routine modifies pc->mem_cgroup
10446     - * should take move_lock_mem_cgroup().
10447     - */
10448     - move_unlock_mem_cgroup(pc->mem_cgroup, flags);
10449     + rcu_read_unlock();
10450     }
10451    
10452     -void mem_cgroup_update_page_stat(struct page *page,
10453     +/**
10454     + * mem_cgroup_update_page_stat - update page state statistics
10455     + * @memcg: memcg to account against
10456     + * @idx: page state item to account
10457     + * @val: number of pages (positive or negative)
10458     + *
10459     + * See mem_cgroup_begin_page_stat() for locking requirements.
10460     + */
10461     +void mem_cgroup_update_page_stat(struct mem_cgroup *memcg,
10462     enum mem_cgroup_stat_index idx, int val)
10463     {
10464     - struct mem_cgroup *memcg;
10465     - struct page_cgroup *pc = lookup_page_cgroup(page);
10466     - unsigned long uninitialized_var(flags);
10467     -
10468     - if (mem_cgroup_disabled())
10469     - return;
10470     -
10471     VM_BUG_ON(!rcu_read_lock_held());
10472     - memcg = pc->mem_cgroup;
10473     - if (unlikely(!memcg || !PageCgroupUsed(pc)))
10474     - return;
10475    
10476     - this_cpu_add(memcg->stat->count[idx], val);
10477     + if (memcg)
10478     + this_cpu_add(memcg->stat->count[idx], val);
10479     }
10480    
10481     /*
10482     diff --git a/mm/memory.c b/mm/memory.c
10483     index e229970e4223..37b80fc3a9b6 100644
10484     --- a/mm/memory.c
10485     +++ b/mm/memory.c
10486     @@ -1147,6 +1147,7 @@ again:
10487     print_bad_pte(vma, addr, ptent, page);
10488     if (unlikely(!__tlb_remove_page(tlb, page))) {
10489     force_flush = 1;
10490     + addr += PAGE_SIZE;
10491     break;
10492     }
10493     continue;
10494     diff --git a/mm/oom_kill.c b/mm/oom_kill.c
10495     index 1e11df8fa7ec..f1fb141720b4 100644
10496     --- a/mm/oom_kill.c
10497     +++ b/mm/oom_kill.c
10498     @@ -404,6 +404,23 @@ static void dump_header(struct task_struct *p, gfp_t gfp_mask, int order,
10499     dump_tasks(memcg, nodemask);
10500     }
10501    
10502     +/*
10503     + * Number of OOM killer invocations (including memcg OOM killer).
10504     + * Primarily used by PM freezer to check for potential races with
10505     + * OOM killed frozen task.
10506     + */
10507     +static atomic_t oom_kills = ATOMIC_INIT(0);
10508     +
10509     +int oom_kills_count(void)
10510     +{
10511     + return atomic_read(&oom_kills);
10512     +}
10513     +
10514     +void note_oom_kill(void)
10515     +{
10516     + atomic_inc(&oom_kills);
10517     +}
10518     +
10519     #define K(x) ((x) << (PAGE_SHIFT-10))
10520     /*
10521     * Must be called while holding a reference to p, which will be released upon
10522     diff --git a/mm/page-writeback.c b/mm/page-writeback.c
10523     index 91d73ef1744d..ba5fd97d8cbc 100644
10524     --- a/mm/page-writeback.c
10525     +++ b/mm/page-writeback.c
10526     @@ -2116,23 +2116,6 @@ void account_page_dirtied(struct page *page, struct address_space *mapping)
10527     EXPORT_SYMBOL(account_page_dirtied);
10528    
10529     /*
10530     - * Helper function for set_page_writeback family.
10531     - *
10532     - * The caller must hold mem_cgroup_begin/end_update_page_stat() lock
10533     - * while calling this function.
10534     - * See test_set_page_writeback for example.
10535     - *
10536     - * NOTE: Unlike account_page_dirtied this does not rely on being atomic
10537     - * wrt interrupts.
10538     - */
10539     -void account_page_writeback(struct page *page)
10540     -{
10541     - mem_cgroup_inc_page_stat(page, MEM_CGROUP_STAT_WRITEBACK);
10542     - inc_zone_page_state(page, NR_WRITEBACK);
10543     -}
10544     -EXPORT_SYMBOL(account_page_writeback);
10545     -
10546     -/*
10547     * For address_spaces which do not use buffers. Just tag the page as dirty in
10548     * its radix tree.
10549     *
10550     @@ -2344,11 +2327,12 @@ EXPORT_SYMBOL(clear_page_dirty_for_io);
10551     int test_clear_page_writeback(struct page *page)
10552     {
10553     struct address_space *mapping = page_mapping(page);
10554     - int ret;
10555     - bool locked;
10556     unsigned long memcg_flags;
10557     + struct mem_cgroup *memcg;
10558     + bool locked;
10559     + int ret;
10560    
10561     - mem_cgroup_begin_update_page_stat(page, &locked, &memcg_flags);
10562     + memcg = mem_cgroup_begin_page_stat(page, &locked, &memcg_flags);
10563     if (mapping) {
10564     struct backing_dev_info *bdi = mapping->backing_dev_info;
10565     unsigned long flags;
10566     @@ -2369,22 +2353,23 @@ int test_clear_page_writeback(struct page *page)
10567     ret = TestClearPageWriteback(page);
10568     }
10569     if (ret) {
10570     - mem_cgroup_dec_page_stat(page, MEM_CGROUP_STAT_WRITEBACK);
10571     + mem_cgroup_dec_page_stat(memcg, MEM_CGROUP_STAT_WRITEBACK);
10572     dec_zone_page_state(page, NR_WRITEBACK);
10573     inc_zone_page_state(page, NR_WRITTEN);
10574     }
10575     - mem_cgroup_end_update_page_stat(page, &locked, &memcg_flags);
10576     + mem_cgroup_end_page_stat(memcg, locked, memcg_flags);
10577     return ret;
10578     }
10579    
10580     int __test_set_page_writeback(struct page *page, bool keep_write)
10581     {
10582     struct address_space *mapping = page_mapping(page);
10583     - int ret;
10584     - bool locked;
10585     unsigned long memcg_flags;
10586     + struct mem_cgroup *memcg;
10587     + bool locked;
10588     + int ret;
10589    
10590     - mem_cgroup_begin_update_page_stat(page, &locked, &memcg_flags);
10591     + memcg = mem_cgroup_begin_page_stat(page, &locked, &memcg_flags);
10592     if (mapping) {
10593     struct backing_dev_info *bdi = mapping->backing_dev_info;
10594     unsigned long flags;
10595     @@ -2410,9 +2395,11 @@ int __test_set_page_writeback(struct page *page, bool keep_write)
10596     } else {
10597     ret = TestSetPageWriteback(page);
10598     }
10599     - if (!ret)
10600     - account_page_writeback(page);
10601     - mem_cgroup_end_update_page_stat(page, &locked, &memcg_flags);
10602     + if (!ret) {
10603     + mem_cgroup_inc_page_stat(memcg, MEM_CGROUP_STAT_WRITEBACK);
10604     + inc_zone_page_state(page, NR_WRITEBACK);
10605     + }
10606     + mem_cgroup_end_page_stat(memcg, locked, memcg_flags);
10607     return ret;
10608    
10609     }
10610     diff --git a/mm/page_alloc.c b/mm/page_alloc.c
10611     index eee961958021..8c5029f22bbe 100644
10612     --- a/mm/page_alloc.c
10613     +++ b/mm/page_alloc.c
10614     @@ -2253,6 +2253,14 @@ __alloc_pages_may_oom(gfp_t gfp_mask, unsigned int order,
10615     }
10616    
10617     /*
10618     + * PM-freezer should be notified that there might be an OOM killer on
10619     + * its way to kill and wake somebody up. This is too early and we might
10620     + * end up not killing anything but false positives are acceptable.
10621     + * See freeze_processes.
10622     + */
10623     + note_oom_kill();
10624     +
10625     + /*
10626     * Go through the zonelist yet one more time, keep very high watermark
10627     * here, this is only to catch a parallel oom killing, we must fail if
10628     * we're still under heavy pressure.
10629     diff --git a/mm/page_cgroup.c b/mm/page_cgroup.c
10630     index 3708264d2833..5331c2bd85a2 100644
10631     --- a/mm/page_cgroup.c
10632     +++ b/mm/page_cgroup.c
10633     @@ -171,6 +171,7 @@ static void free_page_cgroup(void *addr)
10634     sizeof(struct page_cgroup) * PAGES_PER_SECTION;
10635    
10636     BUG_ON(PageReserved(page));
10637     + kmemleak_free(addr);
10638     free_pages_exact(addr, table_size);
10639     }
10640     }
10641     diff --git a/mm/percpu.c b/mm/percpu.c
10642     index da997f9800bd..2139e30a4b44 100644
10643     --- a/mm/percpu.c
10644     +++ b/mm/percpu.c
10645     @@ -1932,8 +1932,6 @@ void __init setup_per_cpu_areas(void)
10646    
10647     if (pcpu_setup_first_chunk(ai, fc) < 0)
10648     panic("Failed to initialize percpu areas.");
10649     -
10650     - pcpu_free_alloc_info(ai);
10651     }
10652    
10653     #endif /* CONFIG_SMP */
10654     diff --git a/mm/rmap.c b/mm/rmap.c
10655     index 3e8491c504f8..e01318d4b07e 100644
10656     --- a/mm/rmap.c
10657     +++ b/mm/rmap.c
10658     @@ -1042,15 +1042,16 @@ void page_add_new_anon_rmap(struct page *page,
10659     */
10660     void page_add_file_rmap(struct page *page)
10661     {
10662     - bool locked;
10663     + struct mem_cgroup *memcg;
10664     unsigned long flags;
10665     + bool locked;
10666    
10667     - mem_cgroup_begin_update_page_stat(page, &locked, &flags);
10668     + memcg = mem_cgroup_begin_page_stat(page, &locked, &flags);
10669     if (atomic_inc_and_test(&page->_mapcount)) {
10670     __inc_zone_page_state(page, NR_FILE_MAPPED);
10671     - mem_cgroup_inc_page_stat(page, MEM_CGROUP_STAT_FILE_MAPPED);
10672     + mem_cgroup_inc_page_stat(memcg, MEM_CGROUP_STAT_FILE_MAPPED);
10673     }
10674     - mem_cgroup_end_update_page_stat(page, &locked, &flags);
10675     + mem_cgroup_end_page_stat(memcg, locked, flags);
10676     }
10677    
10678     /**
10679     @@ -1061,9 +1062,10 @@ void page_add_file_rmap(struct page *page)
10680     */
10681     void page_remove_rmap(struct page *page)
10682     {
10683     + struct mem_cgroup *uninitialized_var(memcg);
10684     bool anon = PageAnon(page);
10685     - bool locked;
10686     unsigned long flags;
10687     + bool locked;
10688    
10689     /*
10690     * The anon case has no mem_cgroup page_stat to update; but may
10691     @@ -1071,7 +1073,7 @@ void page_remove_rmap(struct page *page)
10692     * we hold the lock against page_stat move: so avoid it on anon.
10693     */
10694     if (!anon)
10695     - mem_cgroup_begin_update_page_stat(page, &locked, &flags);
10696     + memcg = mem_cgroup_begin_page_stat(page, &locked, &flags);
10697    
10698     /* page still mapped by someone else? */
10699     if (!atomic_add_negative(-1, &page->_mapcount))
10700     @@ -1096,8 +1098,7 @@ void page_remove_rmap(struct page *page)
10701     -hpage_nr_pages(page));
10702     } else {
10703     __dec_zone_page_state(page, NR_FILE_MAPPED);
10704     - mem_cgroup_dec_page_stat(page, MEM_CGROUP_STAT_FILE_MAPPED);
10705     - mem_cgroup_end_update_page_stat(page, &locked, &flags);
10706     + mem_cgroup_dec_page_stat(memcg, MEM_CGROUP_STAT_FILE_MAPPED);
10707     }
10708     if (unlikely(PageMlocked(page)))
10709     clear_page_mlock(page);
10710     @@ -1110,10 +1111,9 @@ void page_remove_rmap(struct page *page)
10711     * Leaving it set also helps swapoff to reinstate ptes
10712     * faster for those pages still in swapcache.
10713     */
10714     - return;
10715     out:
10716     if (!anon)
10717     - mem_cgroup_end_update_page_stat(page, &locked, &flags);
10718     + mem_cgroup_end_page_stat(memcg, locked, flags);
10719     }
10720    
10721     /*
10722     diff --git a/mm/truncate.c b/mm/truncate.c
10723     index 96d167372d89..c646084e5eec 100644
10724     --- a/mm/truncate.c
10725     +++ b/mm/truncate.c
10726     @@ -20,6 +20,7 @@
10727     #include <linux/buffer_head.h> /* grr. try_to_release_page,
10728     do_invalidatepage */
10729     #include <linux/cleancache.h>
10730     +#include <linux/rmap.h>
10731     #include "internal.h"
10732    
10733     static void clear_exceptional_entry(struct address_space *mapping,
10734     @@ -719,12 +720,67 @@ EXPORT_SYMBOL(truncate_pagecache);
10735     */
10736     void truncate_setsize(struct inode *inode, loff_t newsize)
10737     {
10738     + loff_t oldsize = inode->i_size;
10739     +
10740     i_size_write(inode, newsize);
10741     + if (newsize > oldsize)
10742     + pagecache_isize_extended(inode, oldsize, newsize);
10743     truncate_pagecache(inode, newsize);
10744     }
10745     EXPORT_SYMBOL(truncate_setsize);
10746    
10747     /**
10748     + * pagecache_isize_extended - update pagecache after extension of i_size
10749     + * @inode: inode for which i_size was extended
10750     + * @from: original inode size
10751     + * @to: new inode size
10752     + *
10753     + * Handle extension of inode size either caused by extending truncate or by
10754     + * write starting after current i_size. We mark the page straddling current
10755     + * i_size RO so that page_mkwrite() is called on the nearest write access to
10756     + * the page. This way filesystem can be sure that page_mkwrite() is called on
10757     + * the page before user writes to the page via mmap after the i_size has been
10758     + * changed.
10759     + *
10760     + * The function must be called after i_size is updated so that page fault
10761     + * coming after we unlock the page will already see the new i_size.
10762     + * The function must be called while we still hold i_mutex - this not only
10763     + * makes sure i_size is stable but also that userspace cannot observe new
10764     + * i_size value before we are prepared to store mmap writes at new inode size.
10765     + */
10766     +void pagecache_isize_extended(struct inode *inode, loff_t from, loff_t to)
10767     +{
10768     + int bsize = 1 << inode->i_blkbits;
10769     + loff_t rounded_from;
10770     + struct page *page;
10771     + pgoff_t index;
10772     +
10773     + WARN_ON(to > inode->i_size);
10774     +
10775     + if (from >= to || bsize == PAGE_CACHE_SIZE)
10776     + return;
10777     + /* Page straddling @from will not have any hole block created? */
10778     + rounded_from = round_up(from, bsize);
10779     + if (to <= rounded_from || !(rounded_from & (PAGE_CACHE_SIZE - 1)))
10780     + return;
10781     +
10782     + index = from >> PAGE_CACHE_SHIFT;
10783     + page = find_lock_page(inode->i_mapping, index);
10784     + /* Page not cached? Nothing to do */
10785     + if (!page)
10786     + return;
10787     + /*
10788     + * See clear_page_dirty_for_io() for details why set_page_dirty()
10789     + * is needed.
10790     + */
10791     + if (page_mkclean(page))
10792     + set_page_dirty(page);
10793     + unlock_page(page);
10794     + page_cache_release(page);
10795     +}
10796     +EXPORT_SYMBOL(pagecache_isize_extended);
10797     +
10798     +/**
10799     * truncate_pagecache_range - unmap and remove pagecache that is hole-punched
10800     * @inode: inode
10801     * @lstart: offset of beginning of hole
10802     diff --git a/net/ceph/messenger.c b/net/ceph/messenger.c
10803     index b2f571dd933d..9f02369d3262 100644
10804     --- a/net/ceph/messenger.c
10805     +++ b/net/ceph/messenger.c
10806     @@ -292,7 +292,11 @@ int ceph_msgr_init(void)
10807     if (ceph_msgr_slab_init())
10808     return -ENOMEM;
10809    
10810     - ceph_msgr_wq = alloc_workqueue("ceph-msgr", 0, 0);
10811     + /*
10812     + * The number of active work items is limited by the number of
10813     + * connections, so leave @max_active at default.
10814     + */
10815     + ceph_msgr_wq = alloc_workqueue("ceph-msgr", WQ_MEM_RECLAIM, 0);
10816     if (ceph_msgr_wq)
10817     return 0;
10818    
10819     diff --git a/net/core/tso.c b/net/core/tso.c
10820     index 8c3203c585b0..630b30b4fb53 100644
10821     --- a/net/core/tso.c
10822     +++ b/net/core/tso.c
10823     @@ -1,6 +1,7 @@
10824     #include <linux/export.h>
10825     #include <net/ip.h>
10826     #include <net/tso.h>
10827     +#include <asm/unaligned.h>
10828    
10829     /* Calculate expected number of TX descriptors */
10830     int tso_count_descs(struct sk_buff *skb)
10831     @@ -23,7 +24,7 @@ void tso_build_hdr(struct sk_buff *skb, char *hdr, struct tso_t *tso,
10832     iph->id = htons(tso->ip_id);
10833     iph->tot_len = htons(size + hdr_len - mac_hdr_len);
10834     tcph = (struct tcphdr *)(hdr + skb_transport_offset(skb));
10835     - tcph->seq = htonl(tso->tcp_seq);
10836     + put_unaligned_be32(tso->tcp_seq, &tcph->seq);
10837     tso->ip_id++;
10838    
10839     if (!is_last) {
10840     diff --git a/net/ipv4/fib_semantics.c b/net/ipv4/fib_semantics.c
10841     index b10cd43a4722..4a74ea85518f 100644
10842     --- a/net/ipv4/fib_semantics.c
10843     +++ b/net/ipv4/fib_semantics.c
10844     @@ -535,7 +535,7 @@ int fib_nh_match(struct fib_config *cfg, struct fib_info *fi)
10845     return 1;
10846    
10847     attrlen = rtnh_attrlen(rtnh);
10848     - if (attrlen < 0) {
10849     + if (attrlen > 0) {
10850     struct nlattr *nla, *attrs = rtnh_attrs(rtnh);
10851    
10852     nla = nla_find(attrs, attrlen, RTA_GATEWAY);
10853     diff --git a/net/ipv4/gre_offload.c b/net/ipv4/gre_offload.c
10854     index 6556263c8fa5..dd73bea2a65f 100644
10855     --- a/net/ipv4/gre_offload.c
10856     +++ b/net/ipv4/gre_offload.c
10857     @@ -51,7 +51,7 @@ static struct sk_buff *gre_gso_segment(struct sk_buff *skb,
10858    
10859     greh = (struct gre_base_hdr *)skb_transport_header(skb);
10860    
10861     - ghl = skb_inner_network_header(skb) - skb_transport_header(skb);
10862     + ghl = skb_inner_mac_header(skb) - skb_transport_header(skb);
10863     if (unlikely(ghl < sizeof(*greh)))
10864     goto out;
10865    
10866     diff --git a/net/ipv4/ip_output.c b/net/ipv4/ip_output.c
10867     index 215af2b155cb..c43a1e235182 100644
10868     --- a/net/ipv4/ip_output.c
10869     +++ b/net/ipv4/ip_output.c
10870     @@ -1533,6 +1533,7 @@ void ip_send_unicast_reply(struct net *net, struct sk_buff *skb, __be32 daddr,
10871     struct sk_buff *nskb;
10872     struct sock *sk;
10873     struct inet_sock *inet;
10874     + int err;
10875    
10876     if (ip_options_echo(&replyopts.opt.opt, skb))
10877     return;
10878     @@ -1572,8 +1573,13 @@ void ip_send_unicast_reply(struct net *net, struct sk_buff *skb, __be32 daddr,
10879     sock_net_set(sk, net);
10880     __skb_queue_head_init(&sk->sk_write_queue);
10881     sk->sk_sndbuf = sysctl_wmem_default;
10882     - ip_append_data(sk, &fl4, ip_reply_glue_bits, arg->iov->iov_base, len, 0,
10883     - &ipc, &rt, MSG_DONTWAIT);
10884     + err = ip_append_data(sk, &fl4, ip_reply_glue_bits, arg->iov->iov_base,
10885     + len, 0, &ipc, &rt, MSG_DONTWAIT);
10886     + if (unlikely(err)) {
10887     + ip_flush_pending_frames(sk);
10888     + goto out;
10889     + }
10890     +
10891     nskb = skb_peek(&sk->sk_write_queue);
10892     if (nskb) {
10893     if (arg->csumoffset >= 0)
10894     @@ -1585,7 +1591,7 @@ void ip_send_unicast_reply(struct net *net, struct sk_buff *skb, __be32 daddr,
10895     skb_set_queue_mapping(nskb, skb_get_queue_mapping(skb));
10896     ip_push_pending_frames(sk, &fl4);
10897     }
10898     -
10899     +out:
10900     put_cpu_var(unicast_sock);
10901    
10902     ip_rt_put(rt);
10903     diff --git a/net/ipv4/ip_tunnel_core.c b/net/ipv4/ip_tunnel_core.c
10904     index f4c987bb7e94..88c386cf7d85 100644
10905     --- a/net/ipv4/ip_tunnel_core.c
10906     +++ b/net/ipv4/ip_tunnel_core.c
10907     @@ -91,11 +91,12 @@ int iptunnel_pull_header(struct sk_buff *skb, int hdr_len, __be16 inner_proto)
10908     skb_pull_rcsum(skb, hdr_len);
10909    
10910     if (inner_proto == htons(ETH_P_TEB)) {
10911     - struct ethhdr *eh = (struct ethhdr *)skb->data;
10912     + struct ethhdr *eh;
10913    
10914     if (unlikely(!pskb_may_pull(skb, ETH_HLEN)))
10915     return -ENOMEM;
10916    
10917     + eh = (struct ethhdr *)skb->data;
10918     if (likely(ntohs(eh->h_proto) >= ETH_P_802_3_MIN))
10919     skb->protocol = eh->h_proto;
10920     else
10921     diff --git a/net/ipv4/route.c b/net/ipv4/route.c
10922     index cbadb942c332..29836f8f86a6 100644
10923     --- a/net/ipv4/route.c
10924     +++ b/net/ipv4/route.c
10925     @@ -1798,6 +1798,7 @@ local_input:
10926     no_route:
10927     RT_CACHE_STAT_INC(in_no_route);
10928     res.type = RTN_UNREACHABLE;
10929     + res.fi = NULL;
10930     goto local_input;
10931    
10932     /*
10933     diff --git a/net/ipv4/tcp.c b/net/ipv4/tcp.c
10934     index 541f26a67ba2..6b0b38fdf4fc 100644
10935     --- a/net/ipv4/tcp.c
10936     +++ b/net/ipv4/tcp.c
10937     @@ -2985,61 +2985,42 @@ EXPORT_SYMBOL(compat_tcp_getsockopt);
10938     #endif
10939    
10940     #ifdef CONFIG_TCP_MD5SIG
10941     -static struct tcp_md5sig_pool __percpu *tcp_md5sig_pool __read_mostly;
10942     +static DEFINE_PER_CPU(struct tcp_md5sig_pool, tcp_md5sig_pool);
10943     static DEFINE_MUTEX(tcp_md5sig_mutex);
10944     -
10945     -static void __tcp_free_md5sig_pool(struct tcp_md5sig_pool __percpu *pool)
10946     -{
10947     - int cpu;
10948     -
10949     - for_each_possible_cpu(cpu) {
10950     - struct tcp_md5sig_pool *p = per_cpu_ptr(pool, cpu);
10951     -
10952     - if (p->md5_desc.tfm)
10953     - crypto_free_hash(p->md5_desc.tfm);
10954     - }
10955     - free_percpu(pool);
10956     -}
10957     +static bool tcp_md5sig_pool_populated = false;
10958    
10959     static void __tcp_alloc_md5sig_pool(void)
10960     {
10961     int cpu;
10962     - struct tcp_md5sig_pool __percpu *pool;
10963     -
10964     - pool = alloc_percpu(struct tcp_md5sig_pool);
10965     - if (!pool)
10966     - return;
10967    
10968     for_each_possible_cpu(cpu) {
10969     - struct crypto_hash *hash;
10970     -
10971     - hash = crypto_alloc_hash("md5", 0, CRYPTO_ALG_ASYNC);
10972     - if (IS_ERR_OR_NULL(hash))
10973     - goto out_free;
10974     + if (!per_cpu(tcp_md5sig_pool, cpu).md5_desc.tfm) {
10975     + struct crypto_hash *hash;
10976    
10977     - per_cpu_ptr(pool, cpu)->md5_desc.tfm = hash;
10978     + hash = crypto_alloc_hash("md5", 0, CRYPTO_ALG_ASYNC);
10979     + if (IS_ERR_OR_NULL(hash))
10980     + return;
10981     + per_cpu(tcp_md5sig_pool, cpu).md5_desc.tfm = hash;
10982     + }
10983     }
10984     - /* before setting tcp_md5sig_pool, we must commit all writes
10985     - * to memory. See ACCESS_ONCE() in tcp_get_md5sig_pool()
10986     + /* before setting tcp_md5sig_pool_populated, we must commit all writes
10987     + * to memory. See smp_rmb() in tcp_get_md5sig_pool()
10988     */
10989     smp_wmb();
10990     - tcp_md5sig_pool = pool;
10991     - return;
10992     -out_free:
10993     - __tcp_free_md5sig_pool(pool);
10994     + tcp_md5sig_pool_populated = true;
10995     }
10996    
10997     bool tcp_alloc_md5sig_pool(void)
10998     {
10999     - if (unlikely(!tcp_md5sig_pool)) {
11000     + if (unlikely(!tcp_md5sig_pool_populated)) {
11001     mutex_lock(&tcp_md5sig_mutex);
11002    
11003     - if (!tcp_md5sig_pool)
11004     + if (!tcp_md5sig_pool_populated)
11005     __tcp_alloc_md5sig_pool();
11006    
11007     mutex_unlock(&tcp_md5sig_mutex);
11008     }
11009     - return tcp_md5sig_pool != NULL;
11010     + return tcp_md5sig_pool_populated;
11011     }
11012     EXPORT_SYMBOL(tcp_alloc_md5sig_pool);
11013    
11014     @@ -3053,13 +3034,13 @@ EXPORT_SYMBOL(tcp_alloc_md5sig_pool);
11015     */
11016     struct tcp_md5sig_pool *tcp_get_md5sig_pool(void)
11017     {
11018     - struct tcp_md5sig_pool __percpu *p;
11019     -
11020     local_bh_disable();
11021     - p = ACCESS_ONCE(tcp_md5sig_pool);
11022     - if (p)
11023     - return __this_cpu_ptr(p);
11024    
11025     + if (tcp_md5sig_pool_populated) {
11026     + /* coupled with smp_wmb() in __tcp_alloc_md5sig_pool() */
11027     + smp_rmb();
11028     + return this_cpu_ptr(&tcp_md5sig_pool);
11029     + }
11030     local_bh_enable();
11031     return NULL;
11032     }
11033     diff --git a/net/ipv4/tcp_ipv4.c b/net/ipv4/tcp_ipv4.c
11034     index cd17f009aede..3f49eaeb2559 100644
11035     --- a/net/ipv4/tcp_ipv4.c
11036     +++ b/net/ipv4/tcp_ipv4.c
11037     @@ -208,8 +208,6 @@ int tcp_v4_connect(struct sock *sk, struct sockaddr *uaddr, int addr_len)
11038     inet->inet_dport = usin->sin_port;
11039     inet->inet_daddr = daddr;
11040    
11041     - inet_set_txhash(sk);
11042     -
11043     inet_csk(sk)->icsk_ext_hdr_len = 0;
11044     if (inet_opt)
11045     inet_csk(sk)->icsk_ext_hdr_len = inet_opt->opt.optlen;
11046     @@ -226,6 +224,8 @@ int tcp_v4_connect(struct sock *sk, struct sockaddr *uaddr, int addr_len)
11047     if (err)
11048     goto failure;
11049    
11050     + inet_set_txhash(sk);
11051     +
11052     rt = ip_route_newports(fl4, rt, orig_sport, orig_dport,
11053     inet->inet_sport, inet->inet_dport, sk);
11054     if (IS_ERR(rt)) {
11055     diff --git a/net/ipv6/output_core.c b/net/ipv6/output_core.c
11056     index 5ec867e4a8b7..1d4156ddf355 100644
11057     --- a/net/ipv6/output_core.c
11058     +++ b/net/ipv6/output_core.c
11059     @@ -3,11 +3,45 @@
11060     * not configured or static. These functions are needed by GSO/GRO implementation.
11061     */
11062     #include <linux/export.h>
11063     +#include <net/ip.h>
11064     #include <net/ipv6.h>
11065     #include <net/ip6_fib.h>
11066     #include <net/addrconf.h>
11067     #include <net/secure_seq.h>
11068    
11069     +/* This function exists only for tap drivers that must support broken
11070     + * clients requesting UFO without specifying an IPv6 fragment ID.
11071     + *
11072     + * This is similar to ipv6_select_ident() but we use an independent hash
11073     + * seed to limit information leakage.
11074     + *
11075     + * The network header must be set before calling this.
11076     + */
11077     +void ipv6_proxy_select_ident(struct sk_buff *skb)
11078     +{
11079     + static u32 ip6_proxy_idents_hashrnd __read_mostly;
11080     + struct in6_addr buf[2];
11081     + struct in6_addr *addrs;
11082     + u32 hash, id;
11083     +
11084     + addrs = skb_header_pointer(skb,
11085     + skb_network_offset(skb) +
11086     + offsetof(struct ipv6hdr, saddr),
11087     + sizeof(buf), buf);
11088     + if (!addrs)
11089     + return;
11090     +
11091     + net_get_random_once(&ip6_proxy_idents_hashrnd,
11092     + sizeof(ip6_proxy_idents_hashrnd));
11093     +
11094     + hash = __ipv6_addr_jhash(&addrs[1], ip6_proxy_idents_hashrnd);
11095     + hash = __ipv6_addr_jhash(&addrs[0], hash);
11096     +
11097     + id = ip_idents_reserve(hash, 1);
11098     + skb_shinfo(skb)->ip6_frag_id = htonl(id);
11099     +}
11100     +EXPORT_SYMBOL_GPL(ipv6_proxy_select_ident);
11101     +
11102     int ip6_find_1stfragopt(struct sk_buff *skb, u8 **nexthdr)
11103     {
11104     u16 offset = sizeof(struct ipv6hdr);
11105     diff --git a/net/ipv6/tcp_ipv6.c b/net/ipv6/tcp_ipv6.c
11106     index 29964c3d363c..264c0f28baf4 100644
11107     --- a/net/ipv6/tcp_ipv6.c
11108     +++ b/net/ipv6/tcp_ipv6.c
11109     @@ -198,8 +198,6 @@ static int tcp_v6_connect(struct sock *sk, struct sockaddr *uaddr,
11110     sk->sk_v6_daddr = usin->sin6_addr;
11111     np->flow_label = fl6.flowlabel;
11112    
11113     - ip6_set_txhash(sk);
11114     -
11115     /*
11116     * TCP over IPv4
11117     */
11118     @@ -295,6 +293,8 @@ static int tcp_v6_connect(struct sock *sk, struct sockaddr *uaddr,
11119     if (err)
11120     goto late_failure;
11121    
11122     + ip6_set_txhash(sk);
11123     +
11124     if (!tp->write_seq && likely(!tp->repair))
11125     tp->write_seq = secure_tcpv6_sequence_number(np->saddr.s6_addr32,
11126     sk->sk_v6_daddr.s6_addr32,
11127     diff --git a/net/mac80211/rate.c b/net/mac80211/rate.c
11128     index 8fdadfd94ba8..6081329784dd 100644
11129     --- a/net/mac80211/rate.c
11130     +++ b/net/mac80211/rate.c
11131     @@ -448,7 +448,7 @@ static void rate_fixup_ratelist(struct ieee80211_vif *vif,
11132     */
11133     if (!(rates[0].flags & IEEE80211_TX_RC_MCS)) {
11134     u32 basic_rates = vif->bss_conf.basic_rates;
11135     - s8 baserate = basic_rates ? ffs(basic_rates - 1) : 0;
11136     + s8 baserate = basic_rates ? ffs(basic_rates) - 1 : 0;
11137    
11138     rate = &sband->bitrates[rates[0].idx];
11139    
11140     diff --git a/net/netlink/af_netlink.c b/net/netlink/af_netlink.c
11141     index c416725d28c4..f1de72de273e 100644
11142     --- a/net/netlink/af_netlink.c
11143     +++ b/net/netlink/af_netlink.c
11144     @@ -96,6 +96,14 @@ static DECLARE_WAIT_QUEUE_HEAD(nl_table_wait);
11145     static int netlink_dump(struct sock *sk);
11146     static void netlink_skb_destructor(struct sk_buff *skb);
11147    
11148     +/* nl_table locking explained:
11149     + * Lookup and traversal are protected with nl_sk_hash_lock or nl_table_lock
11150     + * combined with an RCU read-side lock. Insertion and removal are protected
11151     + * with nl_sk_hash_lock while using RCU list modification primitives and may
11152     + * run in parallel to nl_table_lock protected lookups. Destruction of the
11153     + * Netlink socket may only occur *after* nl_table_lock has been acquired
11154     + * either during or after the socket has been removed from the list.
11155     + */
11156     DEFINE_RWLOCK(nl_table_lock);
11157     EXPORT_SYMBOL_GPL(nl_table_lock);
11158     static atomic_t nl_table_users = ATOMIC_INIT(0);
11159     @@ -109,10 +117,10 @@ EXPORT_SYMBOL_GPL(nl_sk_hash_lock);
11160     static int lockdep_nl_sk_hash_is_held(void)
11161     {
11162     #ifdef CONFIG_LOCKDEP
11163     - return (debug_locks) ? lockdep_is_held(&nl_sk_hash_lock) : 1;
11164     -#else
11165     - return 1;
11166     + if (debug_locks)
11167     + return lockdep_is_held(&nl_sk_hash_lock) || lockdep_is_held(&nl_table_lock);
11168     #endif
11169     + return 1;
11170     }
11171    
11172     static ATOMIC_NOTIFIER_HEAD(netlink_chain);
11173     @@ -715,7 +723,7 @@ static int netlink_mmap_sendmsg(struct sock *sk, struct msghdr *msg,
11174     * after validation, the socket and the ring may only be used by a
11175     * single process, otherwise we fall back to copying.
11176     */
11177     - if (atomic_long_read(&sk->sk_socket->file->f_count) > 2 ||
11178     + if (atomic_long_read(&sk->sk_socket->file->f_count) > 1 ||
11179     atomic_read(&nlk->mapped) > 1)
11180     excl = false;
11181    
11182     @@ -1028,11 +1036,13 @@ static struct sock *netlink_lookup(struct net *net, int protocol, u32 portid)
11183     struct netlink_table *table = &nl_table[protocol];
11184     struct sock *sk;
11185    
11186     + read_lock(&nl_table_lock);
11187     rcu_read_lock();
11188     sk = __netlink_lookup(table, portid, net);
11189     if (sk)
11190     sock_hold(sk);
11191     rcu_read_unlock();
11192     + read_unlock(&nl_table_lock);
11193    
11194     return sk;
11195     }
11196     @@ -1257,9 +1267,6 @@ static int netlink_release(struct socket *sock)
11197     }
11198     netlink_table_ungrab();
11199    
11200     - /* Wait for readers to complete */
11201     - synchronize_net();
11202     -
11203     kfree(nlk->groups);
11204     nlk->groups = NULL;
11205    
11206     @@ -1281,6 +1288,7 @@ static int netlink_autobind(struct socket *sock)
11207    
11208     retry:
11209     cond_resched();
11210     + netlink_table_grab();
11211     rcu_read_lock();
11212     if (__netlink_lookup(table, portid, net)) {
11213     /* Bind collision, search negative portid values. */
11214     @@ -1288,9 +1296,11 @@ retry:
11215     if (rover > -4097)
11216     rover = -4097;
11217     rcu_read_unlock();
11218     + netlink_table_ungrab();
11219     goto retry;
11220     }
11221     rcu_read_unlock();
11222     + netlink_table_ungrab();
11223    
11224     err = netlink_insert(sk, net, portid);
11225     if (err == -EADDRINUSE)
11226     @@ -2921,14 +2931,16 @@ static struct sock *netlink_seq_socket_idx(struct seq_file *seq, loff_t pos)
11227     }
11228    
11229     static void *netlink_seq_start(struct seq_file *seq, loff_t *pos)
11230     - __acquires(RCU)
11231     + __acquires(nl_table_lock) __acquires(RCU)
11232     {
11233     + read_lock(&nl_table_lock);
11234     rcu_read_lock();
11235     return *pos ? netlink_seq_socket_idx(seq, *pos - 1) : SEQ_START_TOKEN;
11236     }
11237    
11238     static void *netlink_seq_next(struct seq_file *seq, void *v, loff_t *pos)
11239     {
11240     + struct rhashtable *ht;
11241     struct netlink_sock *nlk;
11242     struct nl_seq_iter *iter;
11243     struct net *net;
11244     @@ -2943,19 +2955,19 @@ static void *netlink_seq_next(struct seq_file *seq, void *v, loff_t *pos)
11245     iter = seq->private;
11246     nlk = v;
11247    
11248     - rht_for_each_entry_rcu(nlk, nlk->node.next, node)
11249     + i = iter->link;
11250     + ht = &nl_table[i].hash;
11251     + rht_for_each_entry(nlk, nlk->node.next, ht, node)
11252     if (net_eq(sock_net((struct sock *)nlk), net))
11253     return nlk;
11254    
11255     - i = iter->link;
11256     j = iter->hash_idx + 1;
11257    
11258     do {
11259     - struct rhashtable *ht = &nl_table[i].hash;
11260     const struct bucket_table *tbl = rht_dereference_rcu(ht->tbl, ht);
11261    
11262     for (; j < tbl->size; j++) {
11263     - rht_for_each_entry_rcu(nlk, tbl->buckets[j], node) {
11264     + rht_for_each_entry(nlk, tbl->buckets[j], ht, node) {
11265     if (net_eq(sock_net((struct sock *)nlk), net)) {
11266     iter->link = i;
11267     iter->hash_idx = j;
11268     @@ -2971,9 +2983,10 @@ static void *netlink_seq_next(struct seq_file *seq, void *v, loff_t *pos)
11269     }
11270    
11271     static void netlink_seq_stop(struct seq_file *seq, void *v)
11272     - __releases(RCU)
11273     + __releases(RCU) __releases(nl_table_lock)
11274     {
11275     rcu_read_unlock();
11276     + read_unlock(&nl_table_lock);
11277     }
11278    
11279    
11280     diff --git a/net/sunrpc/clnt.c b/net/sunrpc/clnt.c
11281     index 488ddeed9363..e0b94ce4c4e6 100644
11282     --- a/net/sunrpc/clnt.c
11283     +++ b/net/sunrpc/clnt.c
11284     @@ -461,6 +461,8 @@ struct rpc_clnt *rpc_create_xprt(struct rpc_create_args *args,
11285    
11286     if (args->flags & RPC_CLNT_CREATE_AUTOBIND)
11287     clnt->cl_autobind = 1;
11288     + if (args->flags & RPC_CLNT_CREATE_NO_RETRANS_TIMEOUT)
11289     + clnt->cl_noretranstimeo = 1;
11290     if (args->flags & RPC_CLNT_CREATE_DISCRTRY)
11291     clnt->cl_discrtry = 1;
11292     if (!(args->flags & RPC_CLNT_CREATE_QUIET))
11293     @@ -579,6 +581,7 @@ static struct rpc_clnt *__rpc_clone_client(struct rpc_create_args *args,
11294     /* Turn off autobind on clones */
11295     new->cl_autobind = 0;
11296     new->cl_softrtry = clnt->cl_softrtry;
11297     + new->cl_noretranstimeo = clnt->cl_noretranstimeo;
11298     new->cl_discrtry = clnt->cl_discrtry;
11299     new->cl_chatty = clnt->cl_chatty;
11300     return new;
11301     diff --git a/net/sunrpc/xprtsock.c b/net/sunrpc/xprtsock.c
11302     index 43cd89eacfab..700f87900e2d 100644
11303     --- a/net/sunrpc/xprtsock.c
11304     +++ b/net/sunrpc/xprtsock.c
11305     @@ -845,6 +845,8 @@ static void xs_error_report(struct sock *sk)
11306     dprintk("RPC: xs_error_report client %p, error=%d...\n",
11307     xprt, -err);
11308     trace_rpc_socket_error(xprt, sk->sk_socket, err);
11309     + if (test_bit(XPRT_CONNECTION_REUSE, &xprt->state))
11310     + goto out;
11311     xprt_wake_pending_tasks(xprt, err);
11312     out:
11313     read_unlock_bh(&sk->sk_callback_lock);
11314     @@ -2245,7 +2247,9 @@ static void xs_tcp_setup_socket(struct work_struct *work)
11315     abort_and_exit = test_and_clear_bit(XPRT_CONNECTION_ABORT,
11316     &xprt->state);
11317     /* "close" the socket, preserving the local port */
11318     + set_bit(XPRT_CONNECTION_REUSE, &xprt->state);
11319     xs_tcp_reuse_connection(transport);
11320     + clear_bit(XPRT_CONNECTION_REUSE, &xprt->state);
11321    
11322     if (abort_and_exit)
11323     goto out_eagain;
11324     diff --git a/net/tipc/link.c b/net/tipc/link.c
11325     index fb1485dc6736..640206580f34 100644
11326     --- a/net/tipc/link.c
11327     +++ b/net/tipc/link.c
11328     @@ -1936,7 +1936,12 @@ void tipc_link_bundle_rcv(struct sk_buff *buf)
11329     }
11330     omsg = buf_msg(obuf);
11331     pos += align(msg_size(omsg));
11332     - if (msg_isdata(omsg) || (msg_user(omsg) == CONN_MANAGER)) {
11333     + if (msg_isdata(omsg)) {
11334     + if (unlikely(msg_type(omsg) == TIPC_MCAST_MSG))
11335     + tipc_sk_mcast_rcv(obuf);
11336     + else
11337     + tipc_sk_rcv(obuf);
11338     + } else if (msg_user(omsg) == CONN_MANAGER) {
11339     tipc_sk_rcv(obuf);
11340     } else if (msg_user(omsg) == NAME_DISTRIBUTOR) {
11341     tipc_named_rcv(obuf);
11342     diff --git a/security/integrity/evm/evm_main.c b/security/integrity/evm/evm_main.c
11343     index 3bcb80df4d01..970772c731ff 100644
11344     --- a/security/integrity/evm/evm_main.c
11345     +++ b/security/integrity/evm/evm_main.c
11346     @@ -284,6 +284,13 @@ static int evm_protect_xattr(struct dentry *dentry, const char *xattr_name,
11347     goto out;
11348     }
11349     evm_status = evm_verify_current_integrity(dentry);
11350     + if (evm_status == INTEGRITY_NOXATTRS) {
11351     + struct integrity_iint_cache *iint;
11352     +
11353     + iint = integrity_iint_find(dentry->d_inode);
11354     + if (iint && (iint->flags & IMA_NEW_FILE))
11355     + return 0;
11356     + }
11357     out:
11358     if (evm_status != INTEGRITY_PASS)
11359     integrity_audit_msg(AUDIT_INTEGRITY_METADATA, dentry->d_inode,
11360     @@ -311,9 +318,12 @@ int evm_inode_setxattr(struct dentry *dentry, const char *xattr_name,
11361     {
11362     const struct evm_ima_xattr_data *xattr_data = xattr_value;
11363    
11364     - if ((strcmp(xattr_name, XATTR_NAME_EVM) == 0)
11365     - && (xattr_data->type == EVM_XATTR_HMAC))
11366     - return -EPERM;
11367     + if (strcmp(xattr_name, XATTR_NAME_EVM) == 0) {
11368     + if (!xattr_value_len)
11369     + return -EINVAL;
11370     + if (xattr_data->type != EVM_IMA_XATTR_DIGSIG)
11371     + return -EPERM;
11372     + }
11373     return evm_protect_xattr(dentry, xattr_name, xattr_value,
11374     xattr_value_len);
11375     }
11376     diff --git a/security/integrity/ima/ima_appraise.c b/security/integrity/ima/ima_appraise.c
11377     index 225fd944a4ef..58509436de23 100644
11378     --- a/security/integrity/ima/ima_appraise.c
11379     +++ b/security/integrity/ima/ima_appraise.c
11380     @@ -378,6 +378,8 @@ int ima_inode_setxattr(struct dentry *dentry, const char *xattr_name,
11381     result = ima_protect_xattr(dentry, xattr_name, xattr_value,
11382     xattr_value_len);
11383     if (result == 1) {
11384     + if (!xattr_value_len || (xvalue->type >= IMA_XATTR_LAST))
11385     + return -EINVAL;
11386     ima_reset_appraise_flags(dentry->d_inode,
11387     (xvalue->type == EVM_IMA_XATTR_DIGSIG) ? 1 : 0);
11388     result = 0;
11389     diff --git a/security/integrity/integrity.h b/security/integrity/integrity.h
11390     index 904e68abd49e..6885058c645d 100644
11391     --- a/security/integrity/integrity.h
11392     +++ b/security/integrity/integrity.h
11393     @@ -61,6 +61,7 @@ enum evm_ima_xattr_type {
11394     EVM_XATTR_HMAC,
11395     EVM_IMA_XATTR_DIGSIG,
11396     IMA_XATTR_DIGEST_NG,
11397     + IMA_XATTR_LAST
11398     };
11399    
11400     struct evm_ima_xattr_data {
11401     diff --git a/security/selinux/hooks.c b/security/selinux/hooks.c
11402     index b0e940497e23..e03bad59c374 100644
11403     --- a/security/selinux/hooks.c
11404     +++ b/security/selinux/hooks.c
11405     @@ -481,6 +481,7 @@ next_inode:
11406     list_entry(sbsec->isec_head.next,
11407     struct inode_security_struct, list);
11408     struct inode *inode = isec->inode;
11409     + list_del_init(&isec->list);
11410     spin_unlock(&sbsec->isec_lock);
11411     inode = igrab(inode);
11412     if (inode) {
11413     @@ -489,7 +490,6 @@ next_inode:
11414     iput(inode);
11415     }
11416     spin_lock(&sbsec->isec_lock);
11417     - list_del_init(&isec->list);
11418     goto next_inode;
11419     }
11420     spin_unlock(&sbsec->isec_lock);
11421     diff --git a/sound/core/pcm_compat.c b/sound/core/pcm_compat.c
11422     index 102e8fd1d450..2d957ba63557 100644
11423     --- a/sound/core/pcm_compat.c
11424     +++ b/sound/core/pcm_compat.c
11425     @@ -210,6 +210,8 @@ static int snd_pcm_status_user_compat(struct snd_pcm_substream *substream,
11426     if (err < 0)
11427     return err;
11428    
11429     + if (clear_user(src, sizeof(*src)))
11430     + return -EFAULT;
11431     if (put_user(status.state, &src->state) ||
11432     compat_put_timespec(&status.trigger_tstamp, &src->trigger_tstamp) ||
11433     compat_put_timespec(&status.tstamp, &src->tstamp) ||
11434     diff --git a/sound/firewire/bebob/bebob_focusrite.c b/sound/firewire/bebob/bebob_focusrite.c
11435     index 45a0eed6d5b1..3b052ed0fbf5 100644
11436     --- a/sound/firewire/bebob/bebob_focusrite.c
11437     +++ b/sound/firewire/bebob/bebob_focusrite.c
11438     @@ -27,12 +27,14 @@
11439     #define SAFFIRE_CLOCK_SOURCE_INTERNAL 0
11440     #define SAFFIRE_CLOCK_SOURCE_SPDIF 1
11441    
11442     -/* '1' is absent, why... */
11443     +/* clock sources as returned from register of Saffire Pro 10 and 26 */
11444     #define SAFFIREPRO_CLOCK_SOURCE_INTERNAL 0
11445     +#define SAFFIREPRO_CLOCK_SOURCE_SKIP 1 /* never used on hardware */
11446     #define SAFFIREPRO_CLOCK_SOURCE_SPDIF 2
11447     -#define SAFFIREPRO_CLOCK_SOURCE_ADAT1 3
11448     -#define SAFFIREPRO_CLOCK_SOURCE_ADAT2 4
11449     +#define SAFFIREPRO_CLOCK_SOURCE_ADAT1 3 /* not used on s.pro. 10 */
11450     +#define SAFFIREPRO_CLOCK_SOURCE_ADAT2 4 /* not used on s.pro. 10 */
11451     #define SAFFIREPRO_CLOCK_SOURCE_WORDCLOCK 5
11452     +#define SAFFIREPRO_CLOCK_SOURCE_COUNT 6
11453    
11454     /* S/PDIF, ADAT1, ADAT2 is enabled or not. three quadlets */
11455     #define SAFFIREPRO_ENABLE_DIG_IFACES 0x01a4
11456     @@ -101,13 +103,34 @@ saffire_write_quad(struct snd_bebob *bebob, u64 offset, u32 value)
11457     &data, sizeof(__be32), 0);
11458     }
11459    
11460     +static char *const saffirepro_10_clk_src_labels[] = {
11461     + SND_BEBOB_CLOCK_INTERNAL, "S/PDIF", "Word Clock"
11462     +};
11463     static char *const saffirepro_26_clk_src_labels[] = {
11464     SND_BEBOB_CLOCK_INTERNAL, "S/PDIF", "ADAT1", "ADAT2", "Word Clock"
11465     };
11466     -
11467     -static char *const saffirepro_10_clk_src_labels[] = {
11468     - SND_BEBOB_CLOCK_INTERNAL, "S/PDIF", "Word Clock"
11469     +/* Value maps between registers and labels for SaffirePro 10/26. */
11470     +static const signed char saffirepro_clk_maps[][SAFFIREPRO_CLOCK_SOURCE_COUNT] = {
11471     + /* SaffirePro 10 */
11472     + [0] = {
11473     + [SAFFIREPRO_CLOCK_SOURCE_INTERNAL] = 0,
11474     + [SAFFIREPRO_CLOCK_SOURCE_SKIP] = -1, /* not supported */
11475     + [SAFFIREPRO_CLOCK_SOURCE_SPDIF] = 1,
11476     + [SAFFIREPRO_CLOCK_SOURCE_ADAT1] = -1, /* not supported */
11477     + [SAFFIREPRO_CLOCK_SOURCE_ADAT2] = -1, /* not supported */
11478     + [SAFFIREPRO_CLOCK_SOURCE_WORDCLOCK] = 2,
11479     + },
11480     + /* SaffirePro 26 */
11481     + [1] = {
11482     + [SAFFIREPRO_CLOCK_SOURCE_INTERNAL] = 0,
11483     + [SAFFIREPRO_CLOCK_SOURCE_SKIP] = -1, /* not supported */
11484     + [SAFFIREPRO_CLOCK_SOURCE_SPDIF] = 1,
11485     + [SAFFIREPRO_CLOCK_SOURCE_ADAT1] = 2,
11486     + [SAFFIREPRO_CLOCK_SOURCE_ADAT2] = 3,
11487     + [SAFFIREPRO_CLOCK_SOURCE_WORDCLOCK] = 4,
11488     + }
11489     };
11490     +
11491     static int
11492     saffirepro_both_clk_freq_get(struct snd_bebob *bebob, unsigned int *rate)
11493     {
11494     @@ -138,24 +161,35 @@ saffirepro_both_clk_freq_set(struct snd_bebob *bebob, unsigned int rate)
11495    
11496     return saffire_write_quad(bebob, SAFFIREPRO_RATE_NOREBOOT, id);
11497     }
11498     +
11499     +/*
11500     + * query hardware for current clock source, return our internally
11501     + * used clock index in *id, depending on hardware.
11502     + */
11503     static int
11504     saffirepro_both_clk_src_get(struct snd_bebob *bebob, unsigned int *id)
11505     {
11506     int err;
11507     - u32 value;
11508     + u32 value; /* clock source read from hw register */
11509     + const signed char *map;
11510    
11511     err = saffire_read_quad(bebob, SAFFIREPRO_OFFSET_CLOCK_SOURCE, &value);
11512     if (err < 0)
11513     goto end;
11514    
11515     - if (bebob->spec->clock->labels == saffirepro_10_clk_src_labels) {
11516     - if (value == SAFFIREPRO_CLOCK_SOURCE_WORDCLOCK)
11517     - *id = 2;
11518     - else if (value == SAFFIREPRO_CLOCK_SOURCE_SPDIF)
11519     - *id = 1;
11520     - } else if (value > 1) {
11521     - *id = value - 1;
11522     + /* depending on hardware, use a different mapping */
11523     + if (bebob->spec->clock->labels == saffirepro_10_clk_src_labels)
11524     + map = saffirepro_clk_maps[0];
11525     + else
11526     + map = saffirepro_clk_maps[1];
11527     +
11528     + /* In a case that this driver cannot handle the value of register. */
11529     + if (value >= SAFFIREPRO_CLOCK_SOURCE_COUNT || map[value] < 0) {
11530     + err = -EIO;
11531     + goto end;
11532     }
11533     +
11534     + *id = (unsigned int)map[value];
11535     end:
11536     return err;
11537     }
11538     diff --git a/sound/firewire/bebob/bebob_stream.c b/sound/firewire/bebob/bebob_stream.c
11539     index ef4d0c9f6578..1aab0a32870c 100644
11540     --- a/sound/firewire/bebob/bebob_stream.c
11541     +++ b/sound/firewire/bebob/bebob_stream.c
11542     @@ -129,12 +129,24 @@ snd_bebob_stream_check_internal_clock(struct snd_bebob *bebob, bool *internal)
11543     /* 1.The device has its own operation to switch source of clock */
11544     if (clk_spec) {
11545     err = clk_spec->get(bebob, &id);
11546     - if (err < 0)
11547     + if (err < 0) {
11548     dev_err(&bebob->unit->device,
11549     "fail to get clock source: %d\n", err);
11550     - else if (strncmp(clk_spec->labels[id], SND_BEBOB_CLOCK_INTERNAL,
11551     - strlen(SND_BEBOB_CLOCK_INTERNAL)) == 0)
11552     + goto end;
11553     + }
11554     +
11555     + if (id >= clk_spec->num) {
11556     + dev_err(&bebob->unit->device,
11557     + "clock source %d out of range 0..%d\n",
11558     + id, clk_spec->num - 1);
11559     + err = -EIO;
11560     + goto end;
11561     + }
11562     +
11563     + if (strncmp(clk_spec->labels[id], SND_BEBOB_CLOCK_INTERNAL,
11564     + strlen(SND_BEBOB_CLOCK_INTERNAL)) == 0)
11565     *internal = true;
11566     +
11567     goto end;
11568     }
11569    
11570     diff --git a/sound/pci/hda/hda_intel.c b/sound/pci/hda/hda_intel.c
11571     index aa302fb03fc5..0a7f848590d2 100644
11572     --- a/sound/pci/hda/hda_intel.c
11573     +++ b/sound/pci/hda/hda_intel.c
11574     @@ -373,6 +373,8 @@ static void __mark_pages_wc(struct azx *chip, struct snd_dma_buffer *dmab, bool
11575     #ifdef CONFIG_SND_DMA_SGBUF
11576     if (dmab->dev.type == SNDRV_DMA_TYPE_DEV_SG) {
11577     struct snd_sg_buf *sgbuf = dmab->private_data;
11578     + if (chip->driver_type == AZX_DRIVER_CMEDIA)
11579     + return; /* deal with only CORB/RIRB buffers */
11580     if (on)
11581     set_pages_array_wc(sgbuf->page_table, sgbuf->pages);
11582     else
11583     @@ -1768,7 +1770,7 @@ static void pcm_mmap_prepare(struct snd_pcm_substream *substream,
11584     #ifdef CONFIG_X86
11585     struct azx_pcm *apcm = snd_pcm_substream_chip(substream);
11586     struct azx *chip = apcm->chip;
11587     - if (!azx_snoop(chip))
11588     + if (!azx_snoop(chip) && chip->driver_type != AZX_DRIVER_CMEDIA)
11589     area->vm_page_prot = pgprot_writecombine(area->vm_page_prot);
11590     #endif
11591     }
11592     diff --git a/sound/pci/hda/patch_realtek.c b/sound/pci/hda/patch_realtek.c
11593     index b7b293cc710e..0c9d5880859a 100644
11594     --- a/sound/pci/hda/patch_realtek.c
11595     +++ b/sound/pci/hda/patch_realtek.c
11596     @@ -5008,9 +5008,6 @@ static const struct snd_pci_quirk alc269_fixup_tbl[] = {
11597     SND_PCI_QUIRK(0x103c, 0x2224, "HP", ALC269_FIXUP_HP_GPIO_MIC1_LED),
11598     SND_PCI_QUIRK(0x103c, 0x2225, "HP", ALC269_FIXUP_HP_GPIO_MIC1_LED),
11599     SND_PCI_QUIRK(0x103c, 0x2246, "HP", ALC269_FIXUP_HP_GPIO_MIC1_LED),
11600     - SND_PCI_QUIRK(0x103c, 0x2247, "HP", ALC269_FIXUP_HP_GPIO_MIC1_LED),
11601     - SND_PCI_QUIRK(0x103c, 0x2248, "HP", ALC269_FIXUP_HP_GPIO_MIC1_LED),
11602     - SND_PCI_QUIRK(0x103c, 0x2249, "HP", ALC269_FIXUP_HP_GPIO_MIC1_LED),
11603     SND_PCI_QUIRK(0x103c, 0x2253, "HP", ALC269_FIXUP_HP_GPIO_MIC1_LED),
11604     SND_PCI_QUIRK(0x103c, 0x2254, "HP", ALC269_FIXUP_HP_GPIO_MIC1_LED),
11605     SND_PCI_QUIRK(0x103c, 0x2255, "HP", ALC269_FIXUP_HP_GPIO_MIC1_LED),
11606     diff --git a/sound/soc/codecs/adau1761.c b/sound/soc/codecs/adau1761.c
11607     index 848cab839553..2e9e90dbeecf 100644
11608     --- a/sound/soc/codecs/adau1761.c
11609     +++ b/sound/soc/codecs/adau1761.c
11610     @@ -405,6 +405,7 @@ static const struct snd_soc_dapm_widget adau1761_dapm_widgets[] = {
11611     2, 0, NULL, 0),
11612    
11613     SND_SOC_DAPM_SUPPLY("Slew Clock", ADAU1761_CLK_ENABLE0, 6, 0, NULL, 0),
11614     + SND_SOC_DAPM_SUPPLY("ALC Clock", ADAU1761_CLK_ENABLE0, 5, 0, NULL, 0),
11615    
11616     SND_SOC_DAPM_SUPPLY_S("Digital Clock 0", 1, ADAU1761_CLK_ENABLE1,
11617     0, 0, NULL, 0),
11618     @@ -436,6 +437,9 @@ static const struct snd_soc_dapm_route adau1761_dapm_routes[] = {
11619     { "Right Playback Mixer", NULL, "Slew Clock" },
11620     { "Left Playback Mixer", NULL, "Slew Clock" },
11621    
11622     + { "Left Input Mixer", NULL, "ALC Clock" },
11623     + { "Right Input Mixer", NULL, "ALC Clock" },
11624     +
11625     { "Digital Clock 0", NULL, "SYSCLK" },
11626     { "Digital Clock 1", NULL, "SYSCLK" },
11627     };
11628     diff --git a/sound/soc/codecs/tlv320aic3x.c b/sound/soc/codecs/tlv320aic3x.c
11629     index 64f179ee9834..5e8626ae612b 100644
11630     --- a/sound/soc/codecs/tlv320aic3x.c
11631     +++ b/sound/soc/codecs/tlv320aic3x.c
11632     @@ -1121,6 +1121,7 @@ static int aic3x_regulator_event(struct notifier_block *nb,
11633     static int aic3x_set_power(struct snd_soc_codec *codec, int power)
11634     {
11635     struct aic3x_priv *aic3x = snd_soc_codec_get_drvdata(codec);
11636     + unsigned int pll_c, pll_d;
11637     int ret;
11638    
11639     if (power) {
11640     @@ -1138,6 +1139,18 @@ static int aic3x_set_power(struct snd_soc_codec *codec, int power)
11641     /* Sync reg_cache with the hardware */
11642     regcache_cache_only(aic3x->regmap, false);
11643     regcache_sync(aic3x->regmap);
11644     +
11645     + /* Rewrite paired PLL D registers in case cached sync skipped
11646     + * writing one of them and thus caused other one also not
11647     + * being written
11648     + */
11649     + pll_c = snd_soc_read(codec, AIC3X_PLL_PROGC_REG);
11650     + pll_d = snd_soc_read(codec, AIC3X_PLL_PROGD_REG);
11651     + if (pll_c == aic3x_reg[AIC3X_PLL_PROGC_REG].def ||
11652     + pll_d == aic3x_reg[AIC3X_PLL_PROGD_REG].def) {
11653     + snd_soc_write(codec, AIC3X_PLL_PROGC_REG, pll_c);
11654     + snd_soc_write(codec, AIC3X_PLL_PROGD_REG, pll_d);
11655     + }
11656     } else {
11657     /*
11658     * Do soft reset to this codec instance in order to clear
11659     diff --git a/sound/soc/intel/sst-haswell-pcm.c b/sound/soc/intel/sst-haswell-pcm.c
11660     index 61bf6da4bb02..e8957329ea60 100644
11661     --- a/sound/soc/intel/sst-haswell-pcm.c
11662     +++ b/sound/soc/intel/sst-haswell-pcm.c
11663     @@ -693,9 +693,7 @@ static int hsw_pcm_new(struct snd_soc_pcm_runtime *rtd)
11664     }
11665    
11666     #define HSW_FORMATS \
11667     - (SNDRV_PCM_FMTBIT_S32_LE | SNDRV_PCM_FMTBIT_S24_LE | \
11668     - SNDRV_PCM_FMTBIT_S20_3LE | SNDRV_PCM_FMTBIT_S16_LE |\
11669     - SNDRV_PCM_FMTBIT_S8)
11670     + (SNDRV_PCM_FMTBIT_S24_LE | SNDRV_PCM_FMTBIT_S16_LE)
11671    
11672     static struct snd_soc_dai_driver hsw_dais[] = {
11673     {
11674     diff --git a/sound/soc/soc-core.c b/sound/soc/soc-core.c
11675     index d074aa91b023..a3e0a0df9c75 100644
11676     --- a/sound/soc/soc-core.c
11677     +++ b/sound/soc/soc-core.c
11678     @@ -4315,10 +4315,10 @@ void snd_soc_remove_platform(struct snd_soc_platform *platform)
11679     snd_soc_component_del_unlocked(&platform->component);
11680     mutex_unlock(&client_mutex);
11681    
11682     - snd_soc_component_cleanup(&platform->component);
11683     -
11684     dev_dbg(platform->dev, "ASoC: Unregistered platform '%s'\n",
11685     platform->component.name);
11686     +
11687     + snd_soc_component_cleanup(&platform->component);
11688     }
11689     EXPORT_SYMBOL_GPL(snd_soc_remove_platform);
11690    
11691     diff --git a/sound/soc/soc-dapm.c b/sound/soc/soc-dapm.c
11692     index 177bd8639ef9..7098e6b27b2b 100644
11693     --- a/sound/soc/soc-dapm.c
11694     +++ b/sound/soc/soc-dapm.c
11695     @@ -591,9 +591,9 @@ static int dapm_create_or_share_mixmux_kcontrol(struct snd_soc_dapm_widget *w,
11696     int shared;
11697     struct snd_kcontrol *kcontrol;
11698     bool wname_in_long_name, kcname_in_long_name;
11699     - char *long_name;
11700     + char *long_name = NULL;
11701     const char *name;
11702     - int ret;
11703     + int ret = 0;
11704    
11705     prefix = soc_dapm_prefix(dapm);
11706     if (prefix)
11707     @@ -652,15 +652,17 @@ static int dapm_create_or_share_mixmux_kcontrol(struct snd_soc_dapm_widget *w,
11708    
11709     kcontrol = snd_soc_cnew(&w->kcontrol_news[kci], NULL, name,
11710     prefix);
11711     - kfree(long_name);
11712     - if (!kcontrol)
11713     - return -ENOMEM;
11714     + if (!kcontrol) {
11715     + ret = -ENOMEM;
11716     + goto exit_free;
11717     + }
11718     +
11719     kcontrol->private_free = dapm_kcontrol_free;
11720    
11721     ret = dapm_kcontrol_data_alloc(w, kcontrol);
11722     if (ret) {
11723     snd_ctl_free_one(kcontrol);
11724     - return ret;
11725     + goto exit_free;
11726     }
11727    
11728     ret = snd_ctl_add(card, kcontrol);
11729     @@ -668,17 +670,18 @@ static int dapm_create_or_share_mixmux_kcontrol(struct snd_soc_dapm_widget *w,
11730     dev_err(dapm->dev,
11731     "ASoC: failed to add widget %s dapm kcontrol %s: %d\n",
11732     w->name, name, ret);
11733     - return ret;
11734     + goto exit_free;
11735     }
11736     }
11737    
11738     ret = dapm_kcontrol_add_widget(kcontrol, w);
11739     - if (ret)
11740     - return ret;
11741     + if (ret == 0)
11742     + w->kcontrols[kci] = kcontrol;
11743    
11744     - w->kcontrols[kci] = kcontrol;
11745     +exit_free:
11746     + kfree(long_name);
11747    
11748     - return 0;
11749     + return ret;
11750     }
11751    
11752     /* create new dapm mixer control */
11753     diff --git a/sound/soc/soc-pcm.c b/sound/soc/soc-pcm.c
11754     index 642c86240752..002311afdeaa 100644
11755     --- a/sound/soc/soc-pcm.c
11756     +++ b/sound/soc/soc-pcm.c
11757     @@ -352,7 +352,7 @@ static void soc_pcm_apply_msb(struct snd_pcm_substream *substream)
11758     } else {
11759     for (i = 0; i < rtd->num_codecs; i++) {
11760     codec_dai = rtd->codec_dais[i];
11761     - if (codec_dai->driver->playback.sig_bits == 0) {
11762     + if (codec_dai->driver->capture.sig_bits == 0) {
11763     bits = 0;
11764     break;
11765     }
11766     diff --git a/sound/usb/card.c b/sound/usb/card.c
11767     index 7ecd0e8a5c51..f61ebb17cc64 100644
11768     --- a/sound/usb/card.c
11769     +++ b/sound/usb/card.c
11770     @@ -591,18 +591,19 @@ static void snd_usb_audio_disconnect(struct usb_device *dev,
11771     {
11772     struct snd_card *card;
11773     struct list_head *p;
11774     + bool was_shutdown;
11775    
11776     if (chip == (void *)-1L)
11777     return;
11778    
11779     card = chip->card;
11780     down_write(&chip->shutdown_rwsem);
11781     + was_shutdown = chip->shutdown;
11782     chip->shutdown = 1;
11783     up_write(&chip->shutdown_rwsem);
11784    
11785     mutex_lock(&register_mutex);
11786     - chip->num_interfaces--;
11787     - if (chip->num_interfaces <= 0) {
11788     + if (!was_shutdown) {
11789     struct snd_usb_endpoint *ep;
11790    
11791     snd_card_disconnect(card);
11792     @@ -622,6 +623,10 @@ static void snd_usb_audio_disconnect(struct usb_device *dev,
11793     list_for_each(p, &chip->mixer_list) {
11794     snd_usb_mixer_disconnect(p);
11795     }
11796     + }
11797     +
11798     + chip->num_interfaces--;
11799     + if (chip->num_interfaces <= 0) {
11800     usb_chip[chip->index] = NULL;
11801     mutex_unlock(&register_mutex);
11802     snd_card_free_when_closed(card);
11803     diff --git a/virt/kvm/iommu.c b/virt/kvm/iommu.c
11804     index 714b94932312..1f0dc1e5f1f0 100644
11805     --- a/virt/kvm/iommu.c
11806     +++ b/virt/kvm/iommu.c
11807     @@ -43,13 +43,13 @@ static void kvm_iommu_put_pages(struct kvm *kvm,
11808     gfn_t base_gfn, unsigned long npages);
11809    
11810     static pfn_t kvm_pin_pages(struct kvm_memory_slot *slot, gfn_t gfn,
11811     - unsigned long size)
11812     + unsigned long npages)
11813     {
11814     gfn_t end_gfn;
11815     pfn_t pfn;
11816    
11817     pfn = gfn_to_pfn_memslot(slot, gfn);
11818     - end_gfn = gfn + (size >> PAGE_SHIFT);
11819     + end_gfn = gfn + npages;
11820     gfn += 1;
11821    
11822     if (is_error_noslot_pfn(pfn))
11823     @@ -119,7 +119,7 @@ int kvm_iommu_map_pages(struct kvm *kvm, struct kvm_memory_slot *slot)
11824     * Pin all pages we are about to map in memory. This is
11825     * important because we unmap and unpin in 4kb steps later.
11826     */
11827     - pfn = kvm_pin_pages(slot, gfn, page_size);
11828     + pfn = kvm_pin_pages(slot, gfn, page_size >> PAGE_SHIFT);
11829     if (is_error_noslot_pfn(pfn)) {
11830     gfn += 1;
11831     continue;
11832     @@ -131,7 +131,7 @@ int kvm_iommu_map_pages(struct kvm *kvm, struct kvm_memory_slot *slot)
11833     if (r) {
11834     printk(KERN_ERR "kvm_iommu_map_address:"
11835     "iommu failed to map pfn=%llx\n", pfn);
11836     - kvm_unpin_pages(kvm, pfn, page_size);
11837     + kvm_unpin_pages(kvm, pfn, page_size >> PAGE_SHIFT);
11838     goto unmap_pages;
11839     }
11840