Magellan Linux

Annotation of /trunk/kernel-alx/patches-3.10/0124-3.10.25-all-fixes.patch

Parent Directory Parent Directory | Revision Log Revision Log


Revision 2360 - (hide annotations) (download)
Fri Dec 27 12:14:31 2013 UTC (10 years, 4 months ago) by niro
File size: 88639 byte(s)
-linux-3.10.25
1 niro 2360 diff --git a/Makefile b/Makefile
2     index ae6ccebf8af4..cd97e9a25410 100644
3     --- a/Makefile
4     +++ b/Makefile
5     @@ -1,6 +1,6 @@
6     VERSION = 3
7     PATCHLEVEL = 10
8     -SUBLEVEL = 24
9     +SUBLEVEL = 25
10     EXTRAVERSION =
11     NAME = TOSSUG Baby Fish
12    
13     diff --git a/arch/arm/kernel/process.c b/arch/arm/kernel/process.c
14     index ab1fe3bb31f0..ac4c2e5e17e4 100644
15     --- a/arch/arm/kernel/process.c
16     +++ b/arch/arm/kernel/process.c
17     @@ -408,6 +408,7 @@ EXPORT_SYMBOL(dump_fpu);
18     unsigned long get_wchan(struct task_struct *p)
19     {
20     struct stackframe frame;
21     + unsigned long stack_page;
22     int count = 0;
23     if (!p || p == current || p->state == TASK_RUNNING)
24     return 0;
25     @@ -416,9 +417,11 @@ unsigned long get_wchan(struct task_struct *p)
26     frame.sp = thread_saved_sp(p);
27     frame.lr = 0; /* recovered from the stack */
28     frame.pc = thread_saved_pc(p);
29     + stack_page = (unsigned long)task_stack_page(p);
30     do {
31     - int ret = unwind_frame(&frame);
32     - if (ret < 0)
33     + if (frame.sp < stack_page ||
34     + frame.sp >= stack_page + THREAD_SIZE ||
35     + unwind_frame(&frame) < 0)
36     return 0;
37     if (!in_sched_functions(frame.pc))
38     return frame.pc;
39     diff --git a/arch/arm/kernel/stacktrace.c b/arch/arm/kernel/stacktrace.c
40     index 00f79e59985b..af4e8c8a5422 100644
41     --- a/arch/arm/kernel/stacktrace.c
42     +++ b/arch/arm/kernel/stacktrace.c
43     @@ -31,7 +31,7 @@ int notrace unwind_frame(struct stackframe *frame)
44     high = ALIGN(low, THREAD_SIZE);
45    
46     /* check current frame pointer is within bounds */
47     - if (fp < (low + 12) || fp + 4 >= high)
48     + if (fp < low + 12 || fp > high - 4)
49     return -EINVAL;
50    
51     /* restore the registers from the stack frame */
52     diff --git a/arch/arm/mach-omap2/omap_hwmod.c b/arch/arm/mach-omap2/omap_hwmod.c
53     index 7341eff63f56..44c609a1ec5d 100644
54     --- a/arch/arm/mach-omap2/omap_hwmod.c
55     +++ b/arch/arm/mach-omap2/omap_hwmod.c
56     @@ -399,7 +399,7 @@ static int _set_clockactivity(struct omap_hwmod *oh, u8 clockact, u32 *v)
57     }
58    
59     /**
60     - * _set_softreset: set OCP_SYSCONFIG.CLOCKACTIVITY bits in @v
61     + * _set_softreset: set OCP_SYSCONFIG.SOFTRESET bit in @v
62     * @oh: struct omap_hwmod *
63     * @v: pointer to register contents to modify
64     *
65     @@ -427,6 +427,36 @@ static int _set_softreset(struct omap_hwmod *oh, u32 *v)
66     }
67    
68     /**
69     + * _clear_softreset: clear OCP_SYSCONFIG.SOFTRESET bit in @v
70     + * @oh: struct omap_hwmod *
71     + * @v: pointer to register contents to modify
72     + *
73     + * Clear the SOFTRESET bit in @v for hwmod @oh. Returns -EINVAL upon
74     + * error or 0 upon success.
75     + */
76     +static int _clear_softreset(struct omap_hwmod *oh, u32 *v)
77     +{
78     + u32 softrst_mask;
79     +
80     + if (!oh->class->sysc ||
81     + !(oh->class->sysc->sysc_flags & SYSC_HAS_SOFTRESET))
82     + return -EINVAL;
83     +
84     + if (!oh->class->sysc->sysc_fields) {
85     + WARN(1,
86     + "omap_hwmod: %s: sysc_fields absent for sysconfig class\n",
87     + oh->name);
88     + return -EINVAL;
89     + }
90     +
91     + softrst_mask = (0x1 << oh->class->sysc->sysc_fields->srst_shift);
92     +
93     + *v &= ~softrst_mask;
94     +
95     + return 0;
96     +}
97     +
98     +/**
99     * _wait_softreset_complete - wait for an OCP softreset to complete
100     * @oh: struct omap_hwmod * to wait on
101     *
102     @@ -1909,6 +1939,12 @@ static int _ocp_softreset(struct omap_hwmod *oh)
103     ret = _set_softreset(oh, &v);
104     if (ret)
105     goto dis_opt_clks;
106     +
107     + _write_sysconfig(v, oh);
108     + ret = _clear_softreset(oh, &v);
109     + if (ret)
110     + goto dis_opt_clks;
111     +
112     _write_sysconfig(v, oh);
113    
114     if (oh->class->sysc->srst_udelay)
115     @@ -3148,6 +3184,11 @@ int omap_hwmod_softreset(struct omap_hwmod *oh)
116     goto error;
117     _write_sysconfig(v, oh);
118    
119     + ret = _clear_softreset(oh, &v);
120     + if (ret)
121     + goto error;
122     + _write_sysconfig(v, oh);
123     +
124     error:
125     return ret;
126     }
127     diff --git a/arch/arm/mach-omap2/omap_hwmod_3xxx_data.c b/arch/arm/mach-omap2/omap_hwmod_3xxx_data.c
128     index 31c7126eb3bb..02b1b10537bc 100644
129     --- a/arch/arm/mach-omap2/omap_hwmod_3xxx_data.c
130     +++ b/arch/arm/mach-omap2/omap_hwmod_3xxx_data.c
131     @@ -1930,7 +1930,8 @@ static struct omap_hwmod_class_sysconfig omap3xxx_usb_host_hs_sysc = {
132     .syss_offs = 0x0014,
133     .sysc_flags = (SYSC_HAS_MIDLEMODE | SYSC_HAS_CLOCKACTIVITY |
134     SYSC_HAS_SIDLEMODE | SYSC_HAS_ENAWAKEUP |
135     - SYSC_HAS_SOFTRESET | SYSC_HAS_AUTOIDLE),
136     + SYSC_HAS_SOFTRESET | SYSC_HAS_AUTOIDLE |
137     + SYSS_HAS_RESET_STATUS),
138     .idlemodes = (SIDLE_FORCE | SIDLE_NO | SIDLE_SMART |
139     MSTANDBY_FORCE | MSTANDBY_NO | MSTANDBY_SMART),
140     .sysc_fields = &omap_hwmod_sysc_type1,
141     @@ -2008,15 +2009,7 @@ static struct omap_hwmod omap3xxx_usb_host_hs_hwmod = {
142     * hence HWMOD_SWSUP_MSTANDBY
143     */
144    
145     - /*
146     - * During system boot; If the hwmod framework resets the module
147     - * the module will have smart idle settings; which can lead to deadlock
148     - * (above Errata Id:i660); so, dont reset the module during boot;
149     - * Use HWMOD_INIT_NO_RESET.
150     - */
151     -
152     - .flags = HWMOD_SWSUP_SIDLE | HWMOD_SWSUP_MSTANDBY |
153     - HWMOD_INIT_NO_RESET,
154     + .flags = HWMOD_SWSUP_SIDLE | HWMOD_SWSUP_MSTANDBY,
155     };
156    
157     /*
158     diff --git a/arch/arm/mach-pxa/reset.c b/arch/arm/mach-pxa/reset.c
159     index 3fab583755d4..0616390b857f 100644
160     --- a/arch/arm/mach-pxa/reset.c
161     +++ b/arch/arm/mach-pxa/reset.c
162     @@ -13,6 +13,7 @@
163    
164     #include <mach/regs-ost.h>
165     #include <mach/reset.h>
166     +#include <mach/smemc.h>
167    
168     unsigned int reset_status;
169     EXPORT_SYMBOL(reset_status);
170     @@ -81,6 +82,12 @@ static void do_hw_reset(void)
171     writel_relaxed(OSSR_M3, OSSR);
172     /* ... in 100 ms */
173     writel_relaxed(readl_relaxed(OSCR) + 368640, OSMR3);
174     + /*
175     + * SDRAM hangs on watchdog reset on Marvell PXA270 (erratum 71)
176     + * we put SDRAM into self-refresh to prevent that
177     + */
178     + while (1)
179     + writel_relaxed(MDREFR_SLFRSH, MDREFR);
180     }
181    
182     void pxa_restart(char mode, const char *cmd)
183     @@ -104,4 +111,3 @@ void pxa_restart(char mode, const char *cmd)
184     break;
185     }
186     }
187     -
188     diff --git a/arch/arm/mach-pxa/tosa.c b/arch/arm/mach-pxa/tosa.c
189     index 3d91d2e5bf3a..d91fcf403cee 100644
190     --- a/arch/arm/mach-pxa/tosa.c
191     +++ b/arch/arm/mach-pxa/tosa.c
192     @@ -424,57 +424,57 @@ static struct platform_device tosa_power_device = {
193     * Tosa Keyboard
194     */
195     static const uint32_t tosakbd_keymap[] = {
196     - KEY(0, 2, KEY_W),
197     - KEY(0, 6, KEY_K),
198     - KEY(0, 7, KEY_BACKSPACE),
199     - KEY(0, 8, KEY_P),
200     - KEY(1, 1, KEY_Q),
201     - KEY(1, 2, KEY_E),
202     - KEY(1, 3, KEY_T),
203     - KEY(1, 4, KEY_Y),
204     - KEY(1, 6, KEY_O),
205     - KEY(1, 7, KEY_I),
206     - KEY(1, 8, KEY_COMMA),
207     - KEY(2, 1, KEY_A),
208     - KEY(2, 2, KEY_D),
209     - KEY(2, 3, KEY_G),
210     - KEY(2, 4, KEY_U),
211     - KEY(2, 6, KEY_L),
212     - KEY(2, 7, KEY_ENTER),
213     - KEY(2, 8, KEY_DOT),
214     - KEY(3, 1, KEY_Z),
215     - KEY(3, 2, KEY_C),
216     - KEY(3, 3, KEY_V),
217     - KEY(3, 4, KEY_J),
218     - KEY(3, 5, TOSA_KEY_ADDRESSBOOK),
219     - KEY(3, 6, TOSA_KEY_CANCEL),
220     - KEY(3, 7, TOSA_KEY_CENTER),
221     - KEY(3, 8, TOSA_KEY_OK),
222     - KEY(3, 9, KEY_LEFTSHIFT),
223     - KEY(4, 1, KEY_S),
224     - KEY(4, 2, KEY_R),
225     - KEY(4, 3, KEY_B),
226     - KEY(4, 4, KEY_N),
227     - KEY(4, 5, TOSA_KEY_CALENDAR),
228     - KEY(4, 6, TOSA_KEY_HOMEPAGE),
229     - KEY(4, 7, KEY_LEFTCTRL),
230     - KEY(4, 8, TOSA_KEY_LIGHT),
231     - KEY(4, 10, KEY_RIGHTSHIFT),
232     - KEY(5, 1, KEY_TAB),
233     - KEY(5, 2, KEY_SLASH),
234     - KEY(5, 3, KEY_H),
235     - KEY(5, 4, KEY_M),
236     - KEY(5, 5, TOSA_KEY_MENU),
237     - KEY(5, 7, KEY_UP),
238     - KEY(5, 11, TOSA_KEY_FN),
239     - KEY(6, 1, KEY_X),
240     - KEY(6, 2, KEY_F),
241     - KEY(6, 3, KEY_SPACE),
242     - KEY(6, 4, KEY_APOSTROPHE),
243     - KEY(6, 5, TOSA_KEY_MAIL),
244     - KEY(6, 6, KEY_LEFT),
245     - KEY(6, 7, KEY_DOWN),
246     - KEY(6, 8, KEY_RIGHT),
247     + KEY(0, 1, KEY_W),
248     + KEY(0, 5, KEY_K),
249     + KEY(0, 6, KEY_BACKSPACE),
250     + KEY(0, 7, KEY_P),
251     + KEY(1, 0, KEY_Q),
252     + KEY(1, 1, KEY_E),
253     + KEY(1, 2, KEY_T),
254     + KEY(1, 3, KEY_Y),
255     + KEY(1, 5, KEY_O),
256     + KEY(1, 6, KEY_I),
257     + KEY(1, 7, KEY_COMMA),
258     + KEY(2, 0, KEY_A),
259     + KEY(2, 1, KEY_D),
260     + KEY(2, 2, KEY_G),
261     + KEY(2, 3, KEY_U),
262     + KEY(2, 5, KEY_L),
263     + KEY(2, 6, KEY_ENTER),
264     + KEY(2, 7, KEY_DOT),
265     + KEY(3, 0, KEY_Z),
266     + KEY(3, 1, KEY_C),
267     + KEY(3, 2, KEY_V),
268     + KEY(3, 3, KEY_J),
269     + KEY(3, 4, TOSA_KEY_ADDRESSBOOK),
270     + KEY(3, 5, TOSA_KEY_CANCEL),
271     + KEY(3, 6, TOSA_KEY_CENTER),
272     + KEY(3, 7, TOSA_KEY_OK),
273     + KEY(3, 8, KEY_LEFTSHIFT),
274     + KEY(4, 0, KEY_S),
275     + KEY(4, 1, KEY_R),
276     + KEY(4, 2, KEY_B),
277     + KEY(4, 3, KEY_N),
278     + KEY(4, 4, TOSA_KEY_CALENDAR),
279     + KEY(4, 5, TOSA_KEY_HOMEPAGE),
280     + KEY(4, 6, KEY_LEFTCTRL),
281     + KEY(4, 7, TOSA_KEY_LIGHT),
282     + KEY(4, 9, KEY_RIGHTSHIFT),
283     + KEY(5, 0, KEY_TAB),
284     + KEY(5, 1, KEY_SLASH),
285     + KEY(5, 2, KEY_H),
286     + KEY(5, 3, KEY_M),
287     + KEY(5, 4, TOSA_KEY_MENU),
288     + KEY(5, 6, KEY_UP),
289     + KEY(5, 10, TOSA_KEY_FN),
290     + KEY(6, 0, KEY_X),
291     + KEY(6, 1, KEY_F),
292     + KEY(6, 2, KEY_SPACE),
293     + KEY(6, 3, KEY_APOSTROPHE),
294     + KEY(6, 4, TOSA_KEY_MAIL),
295     + KEY(6, 5, KEY_LEFT),
296     + KEY(6, 6, KEY_DOWN),
297     + KEY(6, 7, KEY_RIGHT),
298     };
299    
300     static struct matrix_keymap_data tosakbd_keymap_data = {
301     diff --git a/arch/mips/mm/dma-default.c b/arch/mips/mm/dma-default.c
302     index caf92ecb37d6..23129d1005db 100644
303     --- a/arch/mips/mm/dma-default.c
304     +++ b/arch/mips/mm/dma-default.c
305     @@ -50,16 +50,20 @@ static inline struct page *dma_addr_to_page(struct device *dev,
306     }
307    
308     /*
309     + * The affected CPUs below in 'cpu_needs_post_dma_flush()' can
310     + * speculatively fill random cachelines with stale data at any time,
311     + * requiring an extra flush post-DMA.
312     + *
313     * Warning on the terminology - Linux calls an uncached area coherent;
314     * MIPS terminology calls memory areas with hardware maintained coherency
315     * coherent.
316     */
317     -
318     -static inline int cpu_is_noncoherent_r10000(struct device *dev)
319     +static inline int cpu_needs_post_dma_flush(struct device *dev)
320     {
321     return !plat_device_is_coherent(dev) &&
322     (current_cpu_type() == CPU_R10000 ||
323     - current_cpu_type() == CPU_R12000);
324     + current_cpu_type() == CPU_R12000 ||
325     + current_cpu_type() == CPU_BMIPS5000);
326     }
327    
328     static gfp_t massage_gfp_flags(const struct device *dev, gfp_t gfp)
329     @@ -230,7 +234,7 @@ static inline void __dma_sync(struct page *page,
330     static void mips_dma_unmap_page(struct device *dev, dma_addr_t dma_addr,
331     size_t size, enum dma_data_direction direction, struct dma_attrs *attrs)
332     {
333     - if (cpu_is_noncoherent_r10000(dev))
334     + if (cpu_needs_post_dma_flush(dev))
335     __dma_sync(dma_addr_to_page(dev, dma_addr),
336     dma_addr & ~PAGE_MASK, size, direction);
337    
338     @@ -281,7 +285,7 @@ static void mips_dma_unmap_sg(struct device *dev, struct scatterlist *sg,
339     static void mips_dma_sync_single_for_cpu(struct device *dev,
340     dma_addr_t dma_handle, size_t size, enum dma_data_direction direction)
341     {
342     - if (cpu_is_noncoherent_r10000(dev))
343     + if (cpu_needs_post_dma_flush(dev))
344     __dma_sync(dma_addr_to_page(dev, dma_handle),
345     dma_handle & ~PAGE_MASK, size, direction);
346     }
347     @@ -302,7 +306,7 @@ static void mips_dma_sync_sg_for_cpu(struct device *dev,
348    
349     /* Make sure that gcc doesn't leave the empty loop body. */
350     for (i = 0; i < nelems; i++, sg++) {
351     - if (cpu_is_noncoherent_r10000(dev))
352     + if (cpu_needs_post_dma_flush(dev))
353     __dma_sync(sg_page(sg), sg->offset, sg->length,
354     direction);
355     }
356     diff --git a/arch/powerpc/include/asm/pgalloc-32.h b/arch/powerpc/include/asm/pgalloc-32.h
357     index 27b2386f738a..842846c1b711 100644
358     --- a/arch/powerpc/include/asm/pgalloc-32.h
359     +++ b/arch/powerpc/include/asm/pgalloc-32.h
360     @@ -84,10 +84,8 @@ static inline void pgtable_free_tlb(struct mmu_gather *tlb,
361     static inline void __pte_free_tlb(struct mmu_gather *tlb, pgtable_t table,
362     unsigned long address)
363     {
364     - struct page *page = page_address(table);
365     -
366     tlb_flush_pgtable(tlb, address);
367     - pgtable_page_dtor(page);
368     - pgtable_free_tlb(tlb, page, 0);
369     + pgtable_page_dtor(table);
370     + pgtable_free_tlb(tlb, page_address(table), 0);
371     }
372     #endif /* _ASM_POWERPC_PGALLOC_32_H */
373     diff --git a/arch/powerpc/include/asm/pgalloc-64.h b/arch/powerpc/include/asm/pgalloc-64.h
374     index b66ae722a8e9..64aaf016b478 100644
375     --- a/arch/powerpc/include/asm/pgalloc-64.h
376     +++ b/arch/powerpc/include/asm/pgalloc-64.h
377     @@ -144,11 +144,9 @@ static inline void pgtable_free_tlb(struct mmu_gather *tlb,
378     static inline void __pte_free_tlb(struct mmu_gather *tlb, pgtable_t table,
379     unsigned long address)
380     {
381     - struct page *page = page_address(table);
382     -
383     tlb_flush_pgtable(tlb, address);
384     - pgtable_page_dtor(page);
385     - pgtable_free_tlb(tlb, page, 0);
386     + pgtable_page_dtor(table);
387     + pgtable_free_tlb(tlb, page_address(table), 0);
388     }
389    
390     #else /* if CONFIG_PPC_64K_PAGES */
391     diff --git a/arch/x86/Makefile b/arch/x86/Makefile
392     index d5cf85057d63..412189d2bff9 100644
393     --- a/arch/x86/Makefile
394     +++ b/arch/x86/Makefile
395     @@ -31,8 +31,8 @@ ifeq ($(CONFIG_X86_32),y)
396    
397     KBUILD_CFLAGS += -msoft-float -mregparm=3 -freg-struct-return
398    
399     - # Don't autogenerate SSE instructions
400     - KBUILD_CFLAGS += -mno-sse
401     + # Don't autogenerate MMX or SSE instructions
402     + KBUILD_CFLAGS += -mno-mmx -mno-sse
403    
404     # Never want PIC in a 32-bit kernel, prevent breakage with GCC built
405     # with nonstandard options
406     @@ -60,8 +60,8 @@ else
407     KBUILD_AFLAGS += -m64
408     KBUILD_CFLAGS += -m64
409    
410     - # Don't autogenerate SSE instructions
411     - KBUILD_CFLAGS += -mno-sse
412     + # Don't autogenerate MMX or SSE instructions
413     + KBUILD_CFLAGS += -mno-mmx -mno-sse
414    
415     # Use -mpreferred-stack-boundary=3 if supported.
416     KBUILD_CFLAGS += $(call cc-option,-mpreferred-stack-boundary=3)
417     diff --git a/arch/x86/boot/Makefile b/arch/x86/boot/Makefile
418     index 379814bc41e3..6cf0111783d3 100644
419     --- a/arch/x86/boot/Makefile
420     +++ b/arch/x86/boot/Makefile
421     @@ -53,18 +53,18 @@ $(obj)/cpustr.h: $(obj)/mkcpustr FORCE
422    
423     # How to compile the 16-bit code. Note we always compile for -march=i386,
424     # that way we can complain to the user if the CPU is insufficient.
425     -KBUILD_CFLAGS := $(USERINCLUDE) -g -Os -D_SETUP -D__KERNEL__ \
426     +KBUILD_CFLAGS := $(USERINCLUDE) -m32 -g -Os -D_SETUP -D__KERNEL__ \
427     -DDISABLE_BRANCH_PROFILING \
428     -Wall -Wstrict-prototypes \
429     -march=i386 -mregparm=3 \
430     -include $(srctree)/$(src)/code16gcc.h \
431     -fno-strict-aliasing -fomit-frame-pointer -fno-pic \
432     + -mno-mmx -mno-sse \
433     $(call cc-option, -ffreestanding) \
434     $(call cc-option, -fno-toplevel-reorder,\
435     - $(call cc-option, -fno-unit-at-a-time)) \
436     + $(call cc-option, -fno-unit-at-a-time)) \
437     $(call cc-option, -fno-stack-protector) \
438     $(call cc-option, -mpreferred-stack-boundary=2)
439     -KBUILD_CFLAGS += $(call cc-option, -m32)
440     KBUILD_AFLAGS := $(KBUILD_CFLAGS) -D__ASSEMBLY__
441     GCOV_PROFILE := n
442    
443     diff --git a/arch/x86/boot/compressed/Makefile b/arch/x86/boot/compressed/Makefile
444     index 5ef205c5f37b..7194d9f094bc 100644
445     --- a/arch/x86/boot/compressed/Makefile
446     +++ b/arch/x86/boot/compressed/Makefile
447     @@ -12,6 +12,7 @@ KBUILD_CFLAGS += -DDISABLE_BRANCH_PROFILING
448     cflags-$(CONFIG_X86_32) := -march=i386
449     cflags-$(CONFIG_X86_64) := -mcmodel=small
450     KBUILD_CFLAGS += $(cflags-y)
451     +KBUILD_CFLAGS += -mno-mmx -mno-sse
452     KBUILD_CFLAGS += $(call cc-option,-ffreestanding)
453     KBUILD_CFLAGS += $(call cc-option,-fno-stack-protector)
454    
455     diff --git a/arch/x86/kvm/lapic.c b/arch/x86/kvm/lapic.c
456     index 0eee2c8b64d1..0987c638db11 100644
457     --- a/arch/x86/kvm/lapic.c
458     +++ b/arch/x86/kvm/lapic.c
459     @@ -153,6 +153,8 @@ static inline int kvm_apic_id(struct kvm_lapic *apic)
460     return (kvm_apic_get_reg(apic, APIC_ID) >> 24) & 0xff;
461     }
462    
463     +#define KVM_X2APIC_CID_BITS 0
464     +
465     static void recalculate_apic_map(struct kvm *kvm)
466     {
467     struct kvm_apic_map *new, *old = NULL;
468     @@ -190,7 +192,8 @@ static void recalculate_apic_map(struct kvm *kvm)
469     if (apic_x2apic_mode(apic)) {
470     new->ldr_bits = 32;
471     new->cid_shift = 16;
472     - new->cid_mask = new->lid_mask = 0xffff;
473     + new->cid_mask = (1 << KVM_X2APIC_CID_BITS) - 1;
474     + new->lid_mask = 0xffff;
475     } else if (kvm_apic_sw_enabled(apic) &&
476     !new->cid_mask /* flat mode */ &&
477     kvm_apic_get_reg(apic, APIC_DFR) == APIC_DFR_CLUSTER) {
478     @@ -855,7 +858,8 @@ static u32 apic_get_tmcct(struct kvm_lapic *apic)
479     ASSERT(apic != NULL);
480    
481     /* if initial count is 0, current count should also be 0 */
482     - if (kvm_apic_get_reg(apic, APIC_TMICT) == 0)
483     + if (kvm_apic_get_reg(apic, APIC_TMICT) == 0 ||
484     + apic->lapic_timer.period == 0)
485     return 0;
486    
487     remaining = hrtimer_get_remaining(&apic->lapic_timer.timer);
488     @@ -1705,7 +1709,6 @@ static void apic_sync_pv_eoi_from_guest(struct kvm_vcpu *vcpu,
489     void kvm_lapic_sync_from_vapic(struct kvm_vcpu *vcpu)
490     {
491     u32 data;
492     - void *vapic;
493    
494     if (test_bit(KVM_APIC_PV_EOI_PENDING, &vcpu->arch.apic_attention))
495     apic_sync_pv_eoi_from_guest(vcpu, vcpu->arch.apic);
496     @@ -1713,9 +1716,8 @@ void kvm_lapic_sync_from_vapic(struct kvm_vcpu *vcpu)
497     if (!test_bit(KVM_APIC_CHECK_VAPIC, &vcpu->arch.apic_attention))
498     return;
499    
500     - vapic = kmap_atomic(vcpu->arch.apic->vapic_page);
501     - data = *(u32 *)(vapic + offset_in_page(vcpu->arch.apic->vapic_addr));
502     - kunmap_atomic(vapic);
503     + kvm_read_guest_cached(vcpu->kvm, &vcpu->arch.apic->vapic_cache, &data,
504     + sizeof(u32));
505    
506     apic_set_tpr(vcpu->arch.apic, data & 0xff);
507     }
508     @@ -1751,7 +1753,6 @@ void kvm_lapic_sync_to_vapic(struct kvm_vcpu *vcpu)
509     u32 data, tpr;
510     int max_irr, max_isr;
511     struct kvm_lapic *apic = vcpu->arch.apic;
512     - void *vapic;
513    
514     apic_sync_pv_eoi_to_guest(vcpu, apic);
515    
516     @@ -1767,18 +1768,24 @@ void kvm_lapic_sync_to_vapic(struct kvm_vcpu *vcpu)
517     max_isr = 0;
518     data = (tpr & 0xff) | ((max_isr & 0xf0) << 8) | (max_irr << 24);
519    
520     - vapic = kmap_atomic(vcpu->arch.apic->vapic_page);
521     - *(u32 *)(vapic + offset_in_page(vcpu->arch.apic->vapic_addr)) = data;
522     - kunmap_atomic(vapic);
523     + kvm_write_guest_cached(vcpu->kvm, &vcpu->arch.apic->vapic_cache, &data,
524     + sizeof(u32));
525     }
526    
527     -void kvm_lapic_set_vapic_addr(struct kvm_vcpu *vcpu, gpa_t vapic_addr)
528     +int kvm_lapic_set_vapic_addr(struct kvm_vcpu *vcpu, gpa_t vapic_addr)
529     {
530     - vcpu->arch.apic->vapic_addr = vapic_addr;
531     - if (vapic_addr)
532     + if (vapic_addr) {
533     + if (kvm_gfn_to_hva_cache_init(vcpu->kvm,
534     + &vcpu->arch.apic->vapic_cache,
535     + vapic_addr, sizeof(u32)))
536     + return -EINVAL;
537     __set_bit(KVM_APIC_CHECK_VAPIC, &vcpu->arch.apic_attention);
538     - else
539     + } else {
540     __clear_bit(KVM_APIC_CHECK_VAPIC, &vcpu->arch.apic_attention);
541     + }
542     +
543     + vcpu->arch.apic->vapic_addr = vapic_addr;
544     + return 0;
545     }
546    
547     int kvm_x2apic_msr_write(struct kvm_vcpu *vcpu, u32 msr, u64 data)
548     diff --git a/arch/x86/kvm/lapic.h b/arch/x86/kvm/lapic.h
549     index c730ac9fe801..c8b0d0d2da5c 100644
550     --- a/arch/x86/kvm/lapic.h
551     +++ b/arch/x86/kvm/lapic.h
552     @@ -34,7 +34,7 @@ struct kvm_lapic {
553     */
554     void *regs;
555     gpa_t vapic_addr;
556     - struct page *vapic_page;
557     + struct gfn_to_hva_cache vapic_cache;
558     unsigned long pending_events;
559     unsigned int sipi_vector;
560     };
561     @@ -76,7 +76,7 @@ void kvm_set_lapic_tscdeadline_msr(struct kvm_vcpu *vcpu, u64 data);
562     void kvm_apic_write_nodecode(struct kvm_vcpu *vcpu, u32 offset);
563     void kvm_apic_set_eoi_accelerated(struct kvm_vcpu *vcpu, int vector);
564    
565     -void kvm_lapic_set_vapic_addr(struct kvm_vcpu *vcpu, gpa_t vapic_addr);
566     +int kvm_lapic_set_vapic_addr(struct kvm_vcpu *vcpu, gpa_t vapic_addr);
567     void kvm_lapic_sync_from_vapic(struct kvm_vcpu *vcpu);
568     void kvm_lapic_sync_to_vapic(struct kvm_vcpu *vcpu);
569    
570     diff --git a/arch/x86/kvm/x86.c b/arch/x86/kvm/x86.c
571     index e8ba99c34180..ad6a01605aaa 100644
572     --- a/arch/x86/kvm/x86.c
573     +++ b/arch/x86/kvm/x86.c
574     @@ -3138,8 +3138,7 @@ long kvm_arch_vcpu_ioctl(struct file *filp,
575     r = -EFAULT;
576     if (copy_from_user(&va, argp, sizeof va))
577     goto out;
578     - r = 0;
579     - kvm_lapic_set_vapic_addr(vcpu, va.vapic_addr);
580     + r = kvm_lapic_set_vapic_addr(vcpu, va.vapic_addr);
581     break;
582     }
583     case KVM_X86_SETUP_MCE: {
584     @@ -5539,36 +5538,6 @@ static void post_kvm_run_save(struct kvm_vcpu *vcpu)
585     !kvm_event_needs_reinjection(vcpu);
586     }
587    
588     -static int vapic_enter(struct kvm_vcpu *vcpu)
589     -{
590     - struct kvm_lapic *apic = vcpu->arch.apic;
591     - struct page *page;
592     -
593     - if (!apic || !apic->vapic_addr)
594     - return 0;
595     -
596     - page = gfn_to_page(vcpu->kvm, apic->vapic_addr >> PAGE_SHIFT);
597     - if (is_error_page(page))
598     - return -EFAULT;
599     -
600     - vcpu->arch.apic->vapic_page = page;
601     - return 0;
602     -}
603     -
604     -static void vapic_exit(struct kvm_vcpu *vcpu)
605     -{
606     - struct kvm_lapic *apic = vcpu->arch.apic;
607     - int idx;
608     -
609     - if (!apic || !apic->vapic_addr)
610     - return;
611     -
612     - idx = srcu_read_lock(&vcpu->kvm->srcu);
613     - kvm_release_page_dirty(apic->vapic_page);
614     - mark_page_dirty(vcpu->kvm, apic->vapic_addr >> PAGE_SHIFT);
615     - srcu_read_unlock(&vcpu->kvm->srcu, idx);
616     -}
617     -
618     static void update_cr8_intercept(struct kvm_vcpu *vcpu)
619     {
620     int max_irr, tpr;
621     @@ -5889,11 +5858,6 @@ static int __vcpu_run(struct kvm_vcpu *vcpu)
622     struct kvm *kvm = vcpu->kvm;
623    
624     vcpu->srcu_idx = srcu_read_lock(&kvm->srcu);
625     - r = vapic_enter(vcpu);
626     - if (r) {
627     - srcu_read_unlock(&kvm->srcu, vcpu->srcu_idx);
628     - return r;
629     - }
630    
631     r = 1;
632     while (r > 0) {
633     @@ -5951,8 +5915,6 @@ static int __vcpu_run(struct kvm_vcpu *vcpu)
634    
635     srcu_read_unlock(&kvm->srcu, vcpu->srcu_idx);
636    
637     - vapic_exit(vcpu);
638     -
639     return r;
640     }
641    
642     diff --git a/arch/x86/platform/efi/efi.c b/arch/x86/platform/efi/efi.c
643     index 91ac654ff4ea..3474a2ccd8b1 100644
644     --- a/arch/x86/platform/efi/efi.c
645     +++ b/arch/x86/platform/efi/efi.c
646     @@ -766,13 +766,6 @@ void __init efi_init(void)
647    
648     set_bit(EFI_MEMMAP, &x86_efi_facility);
649    
650     -#ifdef CONFIG_X86_32
651     - if (efi_is_native()) {
652     - x86_platform.get_wallclock = efi_get_time;
653     - x86_platform.set_wallclock = efi_set_rtc_mmss;
654     - }
655     -#endif
656     -
657     #if EFI_DEBUG
658     print_efi_memmap();
659     #endif
660     diff --git a/arch/x86/realmode/rm/Makefile b/arch/x86/realmode/rm/Makefile
661     index 88692871823f..9cac82588cbc 100644
662     --- a/arch/x86/realmode/rm/Makefile
663     +++ b/arch/x86/realmode/rm/Makefile
664     @@ -73,9 +73,10 @@ KBUILD_CFLAGS := $(LINUXINCLUDE) -m32 -g -Os -D_SETUP -D__KERNEL__ -D_WAKEUP \
665     -march=i386 -mregparm=3 \
666     -include $(srctree)/$(src)/../../boot/code16gcc.h \
667     -fno-strict-aliasing -fomit-frame-pointer -fno-pic \
668     + -mno-mmx -mno-sse \
669     $(call cc-option, -ffreestanding) \
670     $(call cc-option, -fno-toplevel-reorder,\
671     - $(call cc-option, -fno-unit-at-a-time)) \
672     + $(call cc-option, -fno-unit-at-a-time)) \
673     $(call cc-option, -fno-stack-protector) \
674     $(call cc-option, -mpreferred-stack-boundary=2)
675     KBUILD_AFLAGS := $(KBUILD_CFLAGS) -D__ASSEMBLY__
676     diff --git a/crypto/algif_hash.c b/crypto/algif_hash.c
677     index 585c3b279feb..850246206b12 100644
678     --- a/crypto/algif_hash.c
679     +++ b/crypto/algif_hash.c
680     @@ -117,9 +117,6 @@ static ssize_t hash_sendpage(struct socket *sock, struct page *page,
681     if (flags & MSG_SENDPAGE_NOTLAST)
682     flags |= MSG_MORE;
683    
684     - if (flags & MSG_SENDPAGE_NOTLAST)
685     - flags |= MSG_MORE;
686     -
687     lock_sock(sk);
688     sg_init_table(ctx->sgl.sg, 1);
689     sg_set_page(ctx->sgl.sg, page, size, offset);
690     diff --git a/crypto/algif_skcipher.c b/crypto/algif_skcipher.c
691     index 918a3b4148b8..a19c027b29bd 100644
692     --- a/crypto/algif_skcipher.c
693     +++ b/crypto/algif_skcipher.c
694     @@ -381,9 +381,6 @@ static ssize_t skcipher_sendpage(struct socket *sock, struct page *page,
695     if (flags & MSG_SENDPAGE_NOTLAST)
696     flags |= MSG_MORE;
697    
698     - if (flags & MSG_SENDPAGE_NOTLAST)
699     - flags |= MSG_MORE;
700     -
701     lock_sock(sk);
702     if (!ctx->more && ctx->used)
703     goto unlock;
704     diff --git a/drivers/gpu/drm/i915/intel_display.c b/drivers/gpu/drm/i915/intel_display.c
705     index c714d4d5bedb..f1e600490bb2 100644
706     --- a/drivers/gpu/drm/i915/intel_display.c
707     +++ b/drivers/gpu/drm/i915/intel_display.c
708     @@ -5225,7 +5225,7 @@ static void intel_set_pipe_csc(struct drm_crtc *crtc)
709     uint16_t postoff = 0;
710    
711     if (intel_crtc->config.limited_color_range)
712     - postoff = (16 * (1 << 13) / 255) & 0x1fff;
713     + postoff = (16 * (1 << 12) / 255) & 0x1fff;
714    
715     I915_WRITE(PIPE_CSC_POSTOFF_HI(pipe), postoff);
716     I915_WRITE(PIPE_CSC_POSTOFF_ME(pipe), postoff);
717     diff --git a/drivers/gpu/drm/radeon/r600_hdmi.c b/drivers/gpu/drm/radeon/r600_hdmi.c
718     index 01ed8ac4d156..5df711659049 100644
719     --- a/drivers/gpu/drm/radeon/r600_hdmi.c
720     +++ b/drivers/gpu/drm/radeon/r600_hdmi.c
721     @@ -279,9 +279,9 @@ void r600_audio_set_dto(struct drm_encoder *encoder, u32 clock)
722     WREG32(DCCG_AUDIO_DTO1_MODULE, clock * 100);
723     WREG32(DCCG_AUDIO_DTO_SELECT, 1); /* select DTO1 */
724     }
725     - } else if (ASIC_IS_DCE3(rdev)) {
726     + } else {
727     /* according to the reg specs, this should DCE3.2 only, but in
728     - * practice it seems to cover DCE3.0/3.1 as well.
729     + * practice it seems to cover DCE2.0/3.0/3.1 as well.
730     */
731     if (dig->dig_encoder == 0) {
732     WREG32(DCCG_AUDIO_DTO0_PHASE, base_rate * 100);
733     @@ -292,10 +292,6 @@ void r600_audio_set_dto(struct drm_encoder *encoder, u32 clock)
734     WREG32(DCCG_AUDIO_DTO1_MODULE, clock * 100);
735     WREG32(DCCG_AUDIO_DTO_SELECT, 1); /* select DTO1 */
736     }
737     - } else {
738     - /* according to the reg specs, this should be DCE2.0 and DCE3.0/3.1 */
739     - WREG32(AUDIO_DTO, AUDIO_DTO_PHASE(base_rate / 10) |
740     - AUDIO_DTO_MODULE(clock / 10));
741     }
742     }
743    
744     diff --git a/drivers/gpu/drm/radeon/si.c b/drivers/gpu/drm/radeon/si.c
745     index f054a3b6c4b8..bf14a6b89b59 100644
746     --- a/drivers/gpu/drm/radeon/si.c
747     +++ b/drivers/gpu/drm/radeon/si.c
748     @@ -3615,8 +3615,15 @@ static int si_mc_init(struct radeon_device *rdev)
749     rdev->mc.aper_base = pci_resource_start(rdev->pdev, 0);
750     rdev->mc.aper_size = pci_resource_len(rdev->pdev, 0);
751     /* size in MB on si */
752     - rdev->mc.mc_vram_size = RREG32(CONFIG_MEMSIZE) * 1024ULL * 1024ULL;
753     - rdev->mc.real_vram_size = RREG32(CONFIG_MEMSIZE) * 1024ULL * 1024ULL;
754     + tmp = RREG32(CONFIG_MEMSIZE);
755     + /* some boards may have garbage in the upper 16 bits */
756     + if (tmp & 0xffff0000) {
757     + DRM_INFO("Probable bad vram size: 0x%08x\n", tmp);
758     + if (tmp & 0xffff)
759     + tmp &= 0xffff;
760     + }
761     + rdev->mc.mc_vram_size = tmp * 1024ULL * 1024ULL;
762     + rdev->mc.real_vram_size = rdev->mc.mc_vram_size;
763     rdev->mc.visible_vram_size = rdev->mc.aper_size;
764     si_vram_gtt_location(rdev, &rdev->mc);
765     radeon_update_bandwidth_info(rdev);
766     diff --git a/drivers/hwmon/hih6130.c b/drivers/hwmon/hih6130.c
767     index 2dc37c7c6947..7d68a08baaa8 100644
768     --- a/drivers/hwmon/hih6130.c
769     +++ b/drivers/hwmon/hih6130.c
770     @@ -43,6 +43,7 @@
771     * @last_update: time of last update (jiffies)
772     * @temperature: cached temperature measurement value
773     * @humidity: cached humidity measurement value
774     + * @write_length: length for I2C measurement request
775     */
776     struct hih6130 {
777     struct device *hwmon_dev;
778     @@ -51,6 +52,7 @@ struct hih6130 {
779     unsigned long last_update;
780     int temperature;
781     int humidity;
782     + size_t write_length;
783     };
784    
785     /**
786     @@ -121,8 +123,15 @@ static int hih6130_update_measurements(struct i2c_client *client)
787     */
788     if (time_after(jiffies, hih6130->last_update + HZ) || !hih6130->valid) {
789    
790     - /* write to slave address, no data, to request a measurement */
791     - ret = i2c_master_send(client, tmp, 0);
792     + /*
793     + * Write to slave address to request a measurement.
794     + * According with the datasheet it should be with no data, but
795     + * for systems with I2C bus drivers that do not allow zero
796     + * length packets we write one dummy byte to allow sensor
797     + * measurements on them.
798     + */
799     + tmp[0] = 0;
800     + ret = i2c_master_send(client, tmp, hih6130->write_length);
801     if (ret < 0)
802     goto out;
803    
804     @@ -252,6 +261,9 @@ static int hih6130_probe(struct i2c_client *client,
805     goto fail_remove_sysfs;
806     }
807    
808     + if (!i2c_check_functionality(client->adapter, I2C_FUNC_SMBUS_QUICK))
809     + hih6130->write_length = 1;
810     +
811     return 0;
812    
813     fail_remove_sysfs:
814     diff --git a/drivers/hwmon/lm78.c b/drivers/hwmon/lm78.c
815     index 6cf6bff79003..a2f3b4a365e4 100644
816     --- a/drivers/hwmon/lm78.c
817     +++ b/drivers/hwmon/lm78.c
818     @@ -94,6 +94,8 @@ static inline u8 FAN_TO_REG(long rpm, int div)
819     {
820     if (rpm <= 0)
821     return 255;
822     + if (rpm > 1350000)
823     + return 1;
824     return clamp_val((1350000 + rpm * div / 2) / (rpm * div), 1, 254);
825     }
826    
827     diff --git a/drivers/hwmon/sis5595.c b/drivers/hwmon/sis5595.c
828     index 1404e6319deb..72a889702f0d 100644
829     --- a/drivers/hwmon/sis5595.c
830     +++ b/drivers/hwmon/sis5595.c
831     @@ -141,6 +141,8 @@ static inline u8 FAN_TO_REG(long rpm, int div)
832     {
833     if (rpm <= 0)
834     return 255;
835     + if (rpm > 1350000)
836     + return 1;
837     return clamp_val((1350000 + rpm * div / 2) / (rpm * div), 1, 254);
838     }
839    
840     diff --git a/drivers/hwmon/vt8231.c b/drivers/hwmon/vt8231.c
841     index 0e7017841f7d..aee14e2192f8 100644
842     --- a/drivers/hwmon/vt8231.c
843     +++ b/drivers/hwmon/vt8231.c
844     @@ -145,7 +145,7 @@ static const u8 regtempmin[] = { 0x3a, 0x3e, 0x2c, 0x2e, 0x30, 0x32 };
845     */
846     static inline u8 FAN_TO_REG(long rpm, int div)
847     {
848     - if (rpm == 0)
849     + if (rpm <= 0 || rpm > 1310720)
850     return 0;
851     return clamp_val(1310720 / (rpm * div), 1, 255);
852     }
853     diff --git a/drivers/hwmon/w83l786ng.c b/drivers/hwmon/w83l786ng.c
854     index edb06cda5a68..6ed76ceb9270 100644
855     --- a/drivers/hwmon/w83l786ng.c
856     +++ b/drivers/hwmon/w83l786ng.c
857     @@ -481,9 +481,11 @@ store_pwm(struct device *dev, struct device_attribute *attr,
858     if (err)
859     return err;
860     val = clamp_val(val, 0, 255);
861     + val = DIV_ROUND_CLOSEST(val, 0x11);
862    
863     mutex_lock(&data->update_lock);
864     - data->pwm[nr] = val;
865     + data->pwm[nr] = val * 0x11;
866     + val |= w83l786ng_read_value(client, W83L786NG_REG_PWM[nr]) & 0xf0;
867     w83l786ng_write_value(client, W83L786NG_REG_PWM[nr], val);
868     mutex_unlock(&data->update_lock);
869     return count;
870     @@ -510,7 +512,7 @@ store_pwm_enable(struct device *dev, struct device_attribute *attr,
871     mutex_lock(&data->update_lock);
872     reg = w83l786ng_read_value(client, W83L786NG_REG_FAN_CFG);
873     data->pwm_enable[nr] = val;
874     - reg &= ~(0x02 << W83L786NG_PWM_ENABLE_SHIFT[nr]);
875     + reg &= ~(0x03 << W83L786NG_PWM_ENABLE_SHIFT[nr]);
876     reg |= (val - 1) << W83L786NG_PWM_ENABLE_SHIFT[nr];
877     w83l786ng_write_value(client, W83L786NG_REG_FAN_CFG, reg);
878     mutex_unlock(&data->update_lock);
879     @@ -776,9 +778,10 @@ static struct w83l786ng_data *w83l786ng_update_device(struct device *dev)
880     ((pwmcfg >> W83L786NG_PWM_MODE_SHIFT[i]) & 1)
881     ? 0 : 1;
882     data->pwm_enable[i] =
883     - ((pwmcfg >> W83L786NG_PWM_ENABLE_SHIFT[i]) & 2) + 1;
884     - data->pwm[i] = w83l786ng_read_value(client,
885     - W83L786NG_REG_PWM[i]);
886     + ((pwmcfg >> W83L786NG_PWM_ENABLE_SHIFT[i]) & 3) + 1;
887     + data->pwm[i] =
888     + (w83l786ng_read_value(client, W83L786NG_REG_PWM[i])
889     + & 0x0f) * 0x11;
890     }
891    
892    
893     diff --git a/drivers/input/joystick/xpad.c b/drivers/input/joystick/xpad.c
894     index fa061d46527f..75e3b102ce45 100644
895     --- a/drivers/input/joystick/xpad.c
896     +++ b/drivers/input/joystick/xpad.c
897     @@ -167,6 +167,7 @@ static const struct xpad_device {
898     { 0x1430, 0x8888, "TX6500+ Dance Pad (first generation)", MAP_DPAD_TO_BUTTONS, XTYPE_XBOX },
899     { 0x146b, 0x0601, "BigBen Interactive XBOX 360 Controller", 0, XTYPE_XBOX360 },
900     { 0x1689, 0xfd00, "Razer Onza Tournament Edition", MAP_DPAD_TO_BUTTONS, XTYPE_XBOX360 },
901     + { 0x1689, 0xfd01, "Razer Onza Classic Edition", MAP_DPAD_TO_BUTTONS, XTYPE_XBOX360 },
902     { 0x1bad, 0x0002, "Harmonix Rock Band Guitar", 0, XTYPE_XBOX360 },
903     { 0x1bad, 0x0003, "Harmonix Rock Band Drumkit", MAP_DPAD_TO_BUTTONS, XTYPE_XBOX360 },
904     { 0x1bad, 0xf016, "Mad Catz Xbox 360 Controller", 0, XTYPE_XBOX360 },
905     diff --git a/drivers/input/touchscreen/usbtouchscreen.c b/drivers/input/touchscreen/usbtouchscreen.c
906     index ae4b6b903629..5f87bed05467 100644
907     --- a/drivers/input/touchscreen/usbtouchscreen.c
908     +++ b/drivers/input/touchscreen/usbtouchscreen.c
909     @@ -106,6 +106,7 @@ struct usbtouch_device_info {
910     struct usbtouch_usb {
911     unsigned char *data;
912     dma_addr_t data_dma;
913     + int data_size;
914     unsigned char *buffer;
915     int buf_len;
916     struct urb *irq;
917     @@ -1521,7 +1522,7 @@ static int usbtouch_reset_resume(struct usb_interface *intf)
918     static void usbtouch_free_buffers(struct usb_device *udev,
919     struct usbtouch_usb *usbtouch)
920     {
921     - usb_free_coherent(udev, usbtouch->type->rept_size,
922     + usb_free_coherent(udev, usbtouch->data_size,
923     usbtouch->data, usbtouch->data_dma);
924     kfree(usbtouch->buffer);
925     }
926     @@ -1566,7 +1567,20 @@ static int usbtouch_probe(struct usb_interface *intf,
927     if (!type->process_pkt)
928     type->process_pkt = usbtouch_process_pkt;
929    
930     - usbtouch->data = usb_alloc_coherent(udev, type->rept_size,
931     + usbtouch->data_size = type->rept_size;
932     + if (type->get_pkt_len) {
933     + /*
934     + * When dealing with variable-length packets we should
935     + * not request more than wMaxPacketSize bytes at once
936     + * as we do not know if there is more data coming or
937     + * we filled exactly wMaxPacketSize bytes and there is
938     + * nothing else.
939     + */
940     + usbtouch->data_size = min(usbtouch->data_size,
941     + usb_endpoint_maxp(endpoint));
942     + }
943     +
944     + usbtouch->data = usb_alloc_coherent(udev, usbtouch->data_size,
945     GFP_KERNEL, &usbtouch->data_dma);
946     if (!usbtouch->data)
947     goto out_free;
948     @@ -1626,12 +1640,12 @@ static int usbtouch_probe(struct usb_interface *intf,
949     if (usb_endpoint_type(endpoint) == USB_ENDPOINT_XFER_INT)
950     usb_fill_int_urb(usbtouch->irq, udev,
951     usb_rcvintpipe(udev, endpoint->bEndpointAddress),
952     - usbtouch->data, type->rept_size,
953     + usbtouch->data, usbtouch->data_size,
954     usbtouch_irq, usbtouch, endpoint->bInterval);
955     else
956     usb_fill_bulk_urb(usbtouch->irq, udev,
957     usb_rcvbulkpipe(udev, endpoint->bEndpointAddress),
958     - usbtouch->data, type->rept_size,
959     + usbtouch->data, usbtouch->data_size,
960     usbtouch_irq, usbtouch);
961    
962     usbtouch->irq->dev = udev;
963     diff --git a/drivers/md/dm-bufio.c b/drivers/md/dm-bufio.c
964     index 0387e05cdb98..a6e985fcceb8 100644
965     --- a/drivers/md/dm-bufio.c
966     +++ b/drivers/md/dm-bufio.c
967     @@ -1660,6 +1660,11 @@ static int __init dm_bufio_init(void)
968     {
969     __u64 mem;
970    
971     + dm_bufio_allocated_kmem_cache = 0;
972     + dm_bufio_allocated_get_free_pages = 0;
973     + dm_bufio_allocated_vmalloc = 0;
974     + dm_bufio_current_allocated = 0;
975     +
976     memset(&dm_bufio_caches, 0, sizeof dm_bufio_caches);
977     memset(&dm_bufio_cache_names, 0, sizeof dm_bufio_cache_names);
978    
979     diff --git a/drivers/md/dm-delay.c b/drivers/md/dm-delay.c
980     index 496d5f3646a5..2f91d6d4a2cc 100644
981     --- a/drivers/md/dm-delay.c
982     +++ b/drivers/md/dm-delay.c
983     @@ -20,6 +20,7 @@
984     struct delay_c {
985     struct timer_list delay_timer;
986     struct mutex timer_lock;
987     + struct workqueue_struct *kdelayd_wq;
988     struct work_struct flush_expired_bios;
989     struct list_head delayed_bios;
990     atomic_t may_delay;
991     @@ -45,14 +46,13 @@ struct dm_delay_info {
992    
993     static DEFINE_MUTEX(delayed_bios_lock);
994    
995     -static struct workqueue_struct *kdelayd_wq;
996     static struct kmem_cache *delayed_cache;
997    
998     static void handle_delayed_timer(unsigned long data)
999     {
1000     struct delay_c *dc = (struct delay_c *)data;
1001    
1002     - queue_work(kdelayd_wq, &dc->flush_expired_bios);
1003     + queue_work(dc->kdelayd_wq, &dc->flush_expired_bios);
1004     }
1005    
1006     static void queue_timeout(struct delay_c *dc, unsigned long expires)
1007     @@ -191,6 +191,12 @@ out:
1008     goto bad_dev_write;
1009     }
1010    
1011     + dc->kdelayd_wq = alloc_workqueue("kdelayd", WQ_MEM_RECLAIM, 0);
1012     + if (!dc->kdelayd_wq) {
1013     + DMERR("Couldn't start kdelayd");
1014     + goto bad_queue;
1015     + }
1016     +
1017     setup_timer(&dc->delay_timer, handle_delayed_timer, (unsigned long)dc);
1018    
1019     INIT_WORK(&dc->flush_expired_bios, flush_expired_bios);
1020     @@ -203,6 +209,8 @@ out:
1021     ti->private = dc;
1022     return 0;
1023    
1024     +bad_queue:
1025     + mempool_destroy(dc->delayed_pool);
1026     bad_dev_write:
1027     if (dc->dev_write)
1028     dm_put_device(ti, dc->dev_write);
1029     @@ -217,7 +225,7 @@ static void delay_dtr(struct dm_target *ti)
1030     {
1031     struct delay_c *dc = ti->private;
1032    
1033     - flush_workqueue(kdelayd_wq);
1034     + destroy_workqueue(dc->kdelayd_wq);
1035    
1036     dm_put_device(ti, dc->dev_read);
1037    
1038     @@ -350,12 +358,6 @@ static int __init dm_delay_init(void)
1039     {
1040     int r = -ENOMEM;
1041    
1042     - kdelayd_wq = alloc_workqueue("kdelayd", WQ_MEM_RECLAIM, 0);
1043     - if (!kdelayd_wq) {
1044     - DMERR("Couldn't start kdelayd");
1045     - goto bad_queue;
1046     - }
1047     -
1048     delayed_cache = KMEM_CACHE(dm_delay_info, 0);
1049     if (!delayed_cache) {
1050     DMERR("Couldn't create delayed bio cache.");
1051     @@ -373,8 +375,6 @@ static int __init dm_delay_init(void)
1052     bad_register:
1053     kmem_cache_destroy(delayed_cache);
1054     bad_memcache:
1055     - destroy_workqueue(kdelayd_wq);
1056     -bad_queue:
1057     return r;
1058     }
1059    
1060     @@ -382,7 +382,6 @@ static void __exit dm_delay_exit(void)
1061     {
1062     dm_unregister_target(&delay_target);
1063     kmem_cache_destroy(delayed_cache);
1064     - destroy_workqueue(kdelayd_wq);
1065     }
1066    
1067     /* Module hooks */
1068     diff --git a/drivers/md/dm-snap.c b/drivers/md/dm-snap.c
1069     index aec57d76db5d..944690bafd93 100644
1070     --- a/drivers/md/dm-snap.c
1071     +++ b/drivers/md/dm-snap.c
1072     @@ -66,6 +66,18 @@ struct dm_snapshot {
1073    
1074     atomic_t pending_exceptions_count;
1075    
1076     + /* Protected by "lock" */
1077     + sector_t exception_start_sequence;
1078     +
1079     + /* Protected by kcopyd single-threaded callback */
1080     + sector_t exception_complete_sequence;
1081     +
1082     + /*
1083     + * A list of pending exceptions that completed out of order.
1084     + * Protected by kcopyd single-threaded callback.
1085     + */
1086     + struct list_head out_of_order_list;
1087     +
1088     mempool_t *pending_pool;
1089    
1090     struct dm_exception_table pending;
1091     @@ -173,6 +185,14 @@ struct dm_snap_pending_exception {
1092     */
1093     int started;
1094    
1095     + /* There was copying error. */
1096     + int copy_error;
1097     +
1098     + /* A sequence number, it is used for in-order completion. */
1099     + sector_t exception_sequence;
1100     +
1101     + struct list_head out_of_order_entry;
1102     +
1103     /*
1104     * For writing a complete chunk, bypassing the copy.
1105     */
1106     @@ -1094,6 +1114,9 @@ static int snapshot_ctr(struct dm_target *ti, unsigned int argc, char **argv)
1107     s->valid = 1;
1108     s->active = 0;
1109     atomic_set(&s->pending_exceptions_count, 0);
1110     + s->exception_start_sequence = 0;
1111     + s->exception_complete_sequence = 0;
1112     + INIT_LIST_HEAD(&s->out_of_order_list);
1113     init_rwsem(&s->lock);
1114     INIT_LIST_HEAD(&s->list);
1115     spin_lock_init(&s->pe_lock);
1116     @@ -1443,6 +1466,19 @@ static void commit_callback(void *context, int success)
1117     pending_complete(pe, success);
1118     }
1119    
1120     +static void complete_exception(struct dm_snap_pending_exception *pe)
1121     +{
1122     + struct dm_snapshot *s = pe->snap;
1123     +
1124     + if (unlikely(pe->copy_error))
1125     + pending_complete(pe, 0);
1126     +
1127     + else
1128     + /* Update the metadata if we are persistent */
1129     + s->store->type->commit_exception(s->store, &pe->e,
1130     + commit_callback, pe);
1131     +}
1132     +
1133     /*
1134     * Called when the copy I/O has finished. kcopyd actually runs
1135     * this code so don't block.
1136     @@ -1452,13 +1488,32 @@ static void copy_callback(int read_err, unsigned long write_err, void *context)
1137     struct dm_snap_pending_exception *pe = context;
1138     struct dm_snapshot *s = pe->snap;
1139    
1140     - if (read_err || write_err)
1141     - pending_complete(pe, 0);
1142     + pe->copy_error = read_err || write_err;
1143    
1144     - else
1145     - /* Update the metadata if we are persistent */
1146     - s->store->type->commit_exception(s->store, &pe->e,
1147     - commit_callback, pe);
1148     + if (pe->exception_sequence == s->exception_complete_sequence) {
1149     + s->exception_complete_sequence++;
1150     + complete_exception(pe);
1151     +
1152     + while (!list_empty(&s->out_of_order_list)) {
1153     + pe = list_entry(s->out_of_order_list.next,
1154     + struct dm_snap_pending_exception, out_of_order_entry);
1155     + if (pe->exception_sequence != s->exception_complete_sequence)
1156     + break;
1157     + s->exception_complete_sequence++;
1158     + list_del(&pe->out_of_order_entry);
1159     + complete_exception(pe);
1160     + }
1161     + } else {
1162     + struct list_head *lh;
1163     + struct dm_snap_pending_exception *pe2;
1164     +
1165     + list_for_each_prev(lh, &s->out_of_order_list) {
1166     + pe2 = list_entry(lh, struct dm_snap_pending_exception, out_of_order_entry);
1167     + if (pe2->exception_sequence < pe->exception_sequence)
1168     + break;
1169     + }
1170     + list_add(&pe->out_of_order_entry, lh);
1171     + }
1172     }
1173    
1174     /*
1175     @@ -1553,6 +1608,8 @@ __find_pending_exception(struct dm_snapshot *s,
1176     return NULL;
1177     }
1178    
1179     + pe->exception_sequence = s->exception_start_sequence++;
1180     +
1181     dm_insert_exception(&s->pending, &pe->e);
1182    
1183     return pe;
1184     @@ -2192,7 +2249,7 @@ static struct target_type origin_target = {
1185    
1186     static struct target_type snapshot_target = {
1187     .name = "snapshot",
1188     - .version = {1, 11, 1},
1189     + .version = {1, 12, 0},
1190     .module = THIS_MODULE,
1191     .ctr = snapshot_ctr,
1192     .dtr = snapshot_dtr,
1193     diff --git a/drivers/md/dm-table.c b/drivers/md/dm-table.c
1194     index 9e3a045eb7a2..bd88d3dade1e 100644
1195     --- a/drivers/md/dm-table.c
1196     +++ b/drivers/md/dm-table.c
1197     @@ -215,6 +215,11 @@ int dm_table_create(struct dm_table **result, fmode_t mode,
1198    
1199     num_targets = dm_round_up(num_targets, KEYS_PER_NODE);
1200    
1201     + if (!num_targets) {
1202     + kfree(t);
1203     + return -ENOMEM;
1204     + }
1205     +
1206     if (alloc_targets(t, num_targets)) {
1207     kfree(t);
1208     return -ENOMEM;
1209     diff --git a/drivers/md/dm-thin.c b/drivers/md/dm-thin.c
1210     index 88f2f802d528..e36f81e282eb 100644
1211     --- a/drivers/md/dm-thin.c
1212     +++ b/drivers/md/dm-thin.c
1213     @@ -640,7 +640,9 @@ static void process_prepared_mapping(struct dm_thin_new_mapping *m)
1214     */
1215     r = dm_thin_insert_block(tc->td, m->virt_block, m->data_block);
1216     if (r) {
1217     - DMERR_LIMIT("dm_thin_insert_block() failed");
1218     + DMERR_LIMIT("%s: dm_thin_insert_block() failed: error = %d",
1219     + dm_device_name(pool->pool_md), r);
1220     + set_pool_mode(pool, PM_READ_ONLY);
1221     cell_error(pool, m->cell);
1222     goto out;
1223     }
1224     diff --git a/drivers/md/persistent-data/dm-array.c b/drivers/md/persistent-data/dm-array.c
1225     index af96e24ec328..1d75b1dc1e2e 100644
1226     --- a/drivers/md/persistent-data/dm-array.c
1227     +++ b/drivers/md/persistent-data/dm-array.c
1228     @@ -317,8 +317,16 @@ static int shadow_ablock(struct dm_array_info *info, dm_block_t *root,
1229     * The shadow op will often be a noop. Only insert if it really
1230     * copied data.
1231     */
1232     - if (dm_block_location(*block) != b)
1233     + if (dm_block_location(*block) != b) {
1234     + /*
1235     + * dm_tm_shadow_block will have already decremented the old
1236     + * block, but it is still referenced by the btree. We
1237     + * increment to stop the insert decrementing it below zero
1238     + * when overwriting the old value.
1239     + */
1240     + dm_tm_inc(info->btree_info.tm, b);
1241     r = insert_ablock(info, index, *block, root);
1242     + }
1243    
1244     return r;
1245     }
1246     diff --git a/drivers/md/persistent-data/dm-space-map-metadata.c b/drivers/md/persistent-data/dm-space-map-metadata.c
1247     index 1c959684caef..58fc1eef7499 100644
1248     --- a/drivers/md/persistent-data/dm-space-map-metadata.c
1249     +++ b/drivers/md/persistent-data/dm-space-map-metadata.c
1250     @@ -384,12 +384,16 @@ static int sm_metadata_new_block(struct dm_space_map *sm, dm_block_t *b)
1251     struct sm_metadata *smm = container_of(sm, struct sm_metadata, sm);
1252    
1253     int r = sm_metadata_new_block_(sm, b);
1254     - if (r)
1255     + if (r) {
1256     DMERR("unable to allocate new metadata block");
1257     + return r;
1258     + }
1259    
1260     r = sm_metadata_get_nr_free(sm, &count);
1261     - if (r)
1262     + if (r) {
1263     DMERR("couldn't get free block count");
1264     + return r;
1265     + }
1266    
1267     check_threshold(&smm->threshold, count);
1268    
1269     diff --git a/drivers/media/dvb-frontends/af9033.c b/drivers/media/dvb-frontends/af9033.c
1270     index 30ee59052157..65728c25ea05 100644
1271     --- a/drivers/media/dvb-frontends/af9033.c
1272     +++ b/drivers/media/dvb-frontends/af9033.c
1273     @@ -170,18 +170,18 @@ static int af9033_rd_reg_mask(struct af9033_state *state, u32 reg, u8 *val,
1274     static int af9033_wr_reg_val_tab(struct af9033_state *state,
1275     const struct reg_val *tab, int tab_len)
1276     {
1277     +#define MAX_TAB_LEN 212
1278     int ret, i, j;
1279     - u8 buf[MAX_XFER_SIZE];
1280     + u8 buf[1 + MAX_TAB_LEN];
1281     +
1282     + dev_dbg(&state->i2c->dev, "%s: tab_len=%d\n", __func__, tab_len);
1283    
1284     if (tab_len > sizeof(buf)) {
1285     - dev_warn(&state->i2c->dev,
1286     - "%s: i2c wr len=%d is too big!\n",
1287     - KBUILD_MODNAME, tab_len);
1288     + dev_warn(&state->i2c->dev, "%s: tab len %d is too big\n",
1289     + KBUILD_MODNAME, tab_len);
1290     return -EINVAL;
1291     }
1292    
1293     - dev_dbg(&state->i2c->dev, "%s: tab_len=%d\n", __func__, tab_len);
1294     -
1295     for (i = 0, j = 0; i < tab_len; i++) {
1296     buf[j] = tab[i].val;
1297    
1298     diff --git a/drivers/media/dvb-frontends/cxd2820r_core.c b/drivers/media/dvb-frontends/cxd2820r_core.c
1299     index 51447a04d8f2..03930d5e9fea 100644
1300     --- a/drivers/media/dvb-frontends/cxd2820r_core.c
1301     +++ b/drivers/media/dvb-frontends/cxd2820r_core.c
1302     @@ -34,7 +34,7 @@ static int cxd2820r_wr_regs_i2c(struct cxd2820r_priv *priv, u8 i2c, u8 reg,
1303     {
1304     .addr = i2c,
1305     .flags = 0,
1306     - .len = sizeof(buf),
1307     + .len = len + 1,
1308     .buf = buf,
1309     }
1310     };
1311     @@ -75,7 +75,7 @@ static int cxd2820r_rd_regs_i2c(struct cxd2820r_priv *priv, u8 i2c, u8 reg,
1312     }, {
1313     .addr = i2c,
1314     .flags = I2C_M_RD,
1315     - .len = sizeof(buf),
1316     + .len = len,
1317     .buf = buf,
1318     }
1319     };
1320     diff --git a/drivers/media/i2c/wm8775.c b/drivers/media/i2c/wm8775.c
1321     index 27c27b4ae238..e5f3a78cf55b 100644
1322     --- a/drivers/media/i2c/wm8775.c
1323     +++ b/drivers/media/i2c/wm8775.c
1324     @@ -131,12 +131,10 @@ static int wm8775_s_routing(struct v4l2_subdev *sd,
1325     return -EINVAL;
1326     }
1327     state->input = input;
1328     - if (!v4l2_ctrl_g_ctrl(state->mute))
1329     + if (v4l2_ctrl_g_ctrl(state->mute))
1330     return 0;
1331     if (!v4l2_ctrl_g_ctrl(state->vol))
1332     return 0;
1333     - if (!v4l2_ctrl_g_ctrl(state->bal))
1334     - return 0;
1335     wm8775_set_audio(sd, 1);
1336     return 0;
1337     }
1338     diff --git a/drivers/media/pci/bt8xx/bttv-driver.c b/drivers/media/pci/bt8xx/bttv-driver.c
1339     index e7d088413411..e2633d9270b7 100644
1340     --- a/drivers/media/pci/bt8xx/bttv-driver.c
1341     +++ b/drivers/media/pci/bt8xx/bttv-driver.c
1342     @@ -4226,7 +4226,8 @@ static int bttv_probe(struct pci_dev *dev, const struct pci_device_id *pci_id)
1343     }
1344     btv->std = V4L2_STD_PAL;
1345     init_irqreg(btv);
1346     - v4l2_ctrl_handler_setup(hdl);
1347     + if (!bttv_tvcards[btv->c.type].no_video)
1348     + v4l2_ctrl_handler_setup(hdl);
1349     if (hdl->error) {
1350     result = hdl->error;
1351     goto fail2;
1352     diff --git a/drivers/media/pci/saa7164/saa7164-core.c b/drivers/media/pci/saa7164/saa7164-core.c
1353     index 7618fdae811e..62141b8f1e1a 100644
1354     --- a/drivers/media/pci/saa7164/saa7164-core.c
1355     +++ b/drivers/media/pci/saa7164/saa7164-core.c
1356     @@ -1348,9 +1348,11 @@ static int saa7164_initdev(struct pci_dev *pci_dev,
1357     if (fw_debug) {
1358     dev->kthread = kthread_run(saa7164_thread_function, dev,
1359     "saa7164 debug");
1360     - if (!dev->kthread)
1361     + if (IS_ERR(dev->kthread)) {
1362     + dev->kthread = NULL;
1363     printk(KERN_ERR "%s() Failed to create "
1364     "debug kernel thread\n", __func__);
1365     + }
1366     }
1367    
1368     } /* != BOARD_UNKNOWN */
1369     diff --git a/drivers/media/usb/dvb-usb-v2/af9035.c b/drivers/media/usb/dvb-usb-v2/af9035.c
1370     index 3968bff341e6..46f05ad529f9 100644
1371     --- a/drivers/media/usb/dvb-usb-v2/af9035.c
1372     +++ b/drivers/media/usb/dvb-usb-v2/af9035.c
1373     @@ -130,7 +130,7 @@ static int af9035_wr_regs(struct dvb_usb_device *d, u32 reg, u8 *val, int len)
1374     {
1375     u8 wbuf[MAX_XFER_SIZE];
1376     u8 mbox = (reg >> 16) & 0xff;
1377     - struct usb_req req = { CMD_MEM_WR, mbox, sizeof(wbuf), wbuf, 0, NULL };
1378     + struct usb_req req = { CMD_MEM_WR, mbox, 6 + len, wbuf, 0, NULL };
1379    
1380     if (6 + len > sizeof(wbuf)) {
1381     dev_warn(&d->udev->dev, "%s: i2c wr: len=%d is too big!\n",
1382     @@ -237,14 +237,15 @@ static int af9035_i2c_master_xfer(struct i2c_adapter *adap,
1383     } else {
1384     /* I2C */
1385     u8 buf[MAX_XFER_SIZE];
1386     - struct usb_req req = { CMD_I2C_RD, 0, sizeof(buf),
1387     + struct usb_req req = { CMD_I2C_RD, 0, 5 + msg[0].len,
1388     buf, msg[1].len, msg[1].buf };
1389    
1390     if (5 + msg[0].len > sizeof(buf)) {
1391     dev_warn(&d->udev->dev,
1392     "%s: i2c xfer: len=%d is too big!\n",
1393     KBUILD_MODNAME, msg[0].len);
1394     - return -EOPNOTSUPP;
1395     + ret = -EOPNOTSUPP;
1396     + goto unlock;
1397     }
1398     req.mbox |= ((msg[0].addr & 0x80) >> 3);
1399     buf[0] = msg[1].len;
1400     @@ -273,14 +274,15 @@ static int af9035_i2c_master_xfer(struct i2c_adapter *adap,
1401     } else {
1402     /* I2C */
1403     u8 buf[MAX_XFER_SIZE];
1404     - struct usb_req req = { CMD_I2C_WR, 0, sizeof(buf), buf,
1405     - 0, NULL };
1406     + struct usb_req req = { CMD_I2C_WR, 0, 5 + msg[0].len,
1407     + buf, 0, NULL };
1408    
1409     if (5 + msg[0].len > sizeof(buf)) {
1410     dev_warn(&d->udev->dev,
1411     "%s: i2c xfer: len=%d is too big!\n",
1412     KBUILD_MODNAME, msg[0].len);
1413     - return -EOPNOTSUPP;
1414     + ret = -EOPNOTSUPP;
1415     + goto unlock;
1416     }
1417     req.mbox |= ((msg[0].addr & 0x80) >> 3);
1418     buf[0] = msg[0].len;
1419     @@ -300,6 +302,7 @@ static int af9035_i2c_master_xfer(struct i2c_adapter *adap,
1420     ret = -EOPNOTSUPP;
1421     }
1422    
1423     +unlock:
1424     mutex_unlock(&d->i2c_mutex);
1425    
1426     if (ret < 0)
1427     @@ -1512,6 +1515,8 @@ static const struct usb_device_id af9035_id_table[] = {
1428     /* XXX: that same ID [0ccd:0099] is used by af9015 driver too */
1429     { DVB_USB_DEVICE(USB_VID_TERRATEC, 0x0099,
1430     &af9035_props, "TerraTec Cinergy T Stick Dual RC (rev. 2)", NULL) },
1431     + { DVB_USB_DEVICE(USB_VID_LEADTEK, 0x6a05,
1432     + &af9035_props, "Leadtek WinFast DTV Dongle Dual", NULL) },
1433     { }
1434     };
1435     MODULE_DEVICE_TABLE(usb, af9035_id_table);
1436     diff --git a/drivers/net/ethernet/intel/igb/e1000_phy.c b/drivers/net/ethernet/intel/igb/e1000_phy.c
1437     index 115b0da6e013..5dec66a96793 100644
1438     --- a/drivers/net/ethernet/intel/igb/e1000_phy.c
1439     +++ b/drivers/net/ethernet/intel/igb/e1000_phy.c
1440     @@ -1595,7 +1595,10 @@ s32 igb_phy_has_link(struct e1000_hw *hw, u32 iterations,
1441     * ownership of the resources, wait and try again to
1442     * see if they have relinquished the resources yet.
1443     */
1444     - udelay(usec_interval);
1445     + if (usec_interval >= 1000)
1446     + mdelay(usec_interval/1000);
1447     + else
1448     + udelay(usec_interval);
1449     }
1450     ret_val = hw->phy.ops.read_reg(hw, PHY_STATUS, &phy_status);
1451     if (ret_val)
1452     diff --git a/drivers/net/wireless/ath/ath9k/ar9003_eeprom.c b/drivers/net/wireless/ath/ath9k/ar9003_eeprom.c
1453     index 25b8bbbe74fe..f71a9eded5a4 100644
1454     --- a/drivers/net/wireless/ath/ath9k/ar9003_eeprom.c
1455     +++ b/drivers/net/wireless/ath/ath9k/ar9003_eeprom.c
1456     @@ -3937,18 +3937,20 @@ static void ar9003_hw_quick_drop_apply(struct ath_hw *ah, u16 freq)
1457     int quick_drop;
1458     s32 t[3], f[3] = {5180, 5500, 5785};
1459    
1460     - if (!(pBase->miscConfiguration & BIT(1)))
1461     + if (!(pBase->miscConfiguration & BIT(4)))
1462     return;
1463    
1464     - if (freq < 4000)
1465     - quick_drop = eep->modalHeader2G.quick_drop;
1466     - else {
1467     - t[0] = eep->base_ext1.quick_drop_low;
1468     - t[1] = eep->modalHeader5G.quick_drop;
1469     - t[2] = eep->base_ext1.quick_drop_high;
1470     - quick_drop = ar9003_hw_power_interpolate(freq, f, t, 3);
1471     + if (AR_SREV_9300(ah) || AR_SREV_9580(ah) || AR_SREV_9340(ah)) {
1472     + if (freq < 4000) {
1473     + quick_drop = eep->modalHeader2G.quick_drop;
1474     + } else {
1475     + t[0] = eep->base_ext1.quick_drop_low;
1476     + t[1] = eep->modalHeader5G.quick_drop;
1477     + t[2] = eep->base_ext1.quick_drop_high;
1478     + quick_drop = ar9003_hw_power_interpolate(freq, f, t, 3);
1479     + }
1480     + REG_RMW_FIELD(ah, AR_PHY_AGC, AR_PHY_AGC_QUICK_DROP, quick_drop);
1481     }
1482     - REG_RMW_FIELD(ah, AR_PHY_AGC, AR_PHY_AGC_QUICK_DROP, quick_drop);
1483     }
1484    
1485     static void ar9003_hw_txend_to_xpa_off_apply(struct ath_hw *ah, bool is2ghz)
1486     @@ -3988,7 +3990,7 @@ static void ar9003_hw_xlna_bias_strength_apply(struct ath_hw *ah, bool is2ghz)
1487     struct ar9300_eeprom *eep = &ah->eeprom.ar9300_eep;
1488     u8 bias;
1489    
1490     - if (!(eep->baseEepHeader.featureEnable & 0x40))
1491     + if (!(eep->baseEepHeader.miscConfiguration & 0x40))
1492     return;
1493    
1494     if (!AR_SREV_9300(ah))
1495     diff --git a/drivers/net/wireless/iwlwifi/mvm/debugfs.c b/drivers/net/wireless/iwlwifi/mvm/debugfs.c
1496     index 2053dccefcd6..109dc8e437f5 100644
1497     --- a/drivers/net/wireless/iwlwifi/mvm/debugfs.c
1498     +++ b/drivers/net/wireless/iwlwifi/mvm/debugfs.c
1499     @@ -119,6 +119,10 @@ static ssize_t iwl_dbgfs_sta_drain_write(struct file *file,
1500    
1501     if (sscanf(buf, "%d %d", &sta_id, &drain) != 2)
1502     return -EINVAL;
1503     + if (sta_id < 0 || sta_id >= IWL_MVM_STATION_COUNT)
1504     + return -EINVAL;
1505     + if (drain < 0 || drain > 1)
1506     + return -EINVAL;
1507    
1508     mutex_lock(&mvm->mutex);
1509    
1510     diff --git a/drivers/net/wireless/mwifiex/sta_ioctl.c b/drivers/net/wireless/mwifiex/sta_ioctl.c
1511     index 23aa910bc5d0..0a9f59c5ab5a 100644
1512     --- a/drivers/net/wireless/mwifiex/sta_ioctl.c
1513     +++ b/drivers/net/wireless/mwifiex/sta_ioctl.c
1514     @@ -309,8 +309,8 @@ int mwifiex_bss_start(struct mwifiex_private *priv, struct cfg80211_bss *bss,
1515     if (bss_desc && bss_desc->ssid.ssid_len &&
1516     (!mwifiex_ssid_cmp(&priv->curr_bss_params.bss_descriptor.
1517     ssid, &bss_desc->ssid))) {
1518     - kfree(bss_desc);
1519     - return 0;
1520     + ret = 0;
1521     + goto done;
1522     }
1523    
1524     /* Exit Adhoc mode first */
1525     diff --git a/drivers/pci/pci-driver.c b/drivers/pci/pci-driver.c
1526     index 79277fb36c6b..66aabde82727 100644
1527     --- a/drivers/pci/pci-driver.c
1528     +++ b/drivers/pci/pci-driver.c
1529     @@ -19,6 +19,7 @@
1530     #include <linux/cpu.h>
1531     #include <linux/pm_runtime.h>
1532     #include <linux/suspend.h>
1533     +#include <linux/kexec.h>
1534     #include "pci.h"
1535    
1536     struct pci_dynid {
1537     @@ -388,12 +389,17 @@ static void pci_device_shutdown(struct device *dev)
1538     pci_msi_shutdown(pci_dev);
1539     pci_msix_shutdown(pci_dev);
1540    
1541     +#ifdef CONFIG_KEXEC
1542     /*
1543     - * Turn off Bus Master bit on the device to tell it to not
1544     - * continue to do DMA. Don't touch devices in D3cold or unknown states.
1545     + * If this is a kexec reboot, turn off Bus Master bit on the
1546     + * device to tell it to not continue to do DMA. Don't touch
1547     + * devices in D3cold or unknown states.
1548     + * If it is not a kexec reboot, firmware will hit the PCI
1549     + * devices with big hammer and stop their DMA any way.
1550     */
1551     - if (pci_dev->current_state <= PCI_D3hot)
1552     + if (kexec_in_progress && (pci_dev->current_state <= PCI_D3hot))
1553     pci_clear_master(pci_dev);
1554     +#endif
1555     }
1556    
1557     #ifdef CONFIG_PM
1558     diff --git a/drivers/rtc/rtc-at91rm9200.c b/drivers/rtc/rtc-at91rm9200.c
1559     index f296f3f7db9b..1237c2173c6d 100644
1560     --- a/drivers/rtc/rtc-at91rm9200.c
1561     +++ b/drivers/rtc/rtc-at91rm9200.c
1562     @@ -221,6 +221,8 @@ static int at91_rtc_setalarm(struct device *dev, struct rtc_wkalrm *alrm)
1563    
1564     at91_alarm_year = tm.tm_year;
1565    
1566     + tm.tm_mon = alrm->time.tm_mon;
1567     + tm.tm_mday = alrm->time.tm_mday;
1568     tm.tm_hour = alrm->time.tm_hour;
1569     tm.tm_min = alrm->time.tm_min;
1570     tm.tm_sec = alrm->time.tm_sec;
1571     diff --git a/drivers/staging/comedi/drivers/amplc_pc263.c b/drivers/staging/comedi/drivers/amplc_pc263.c
1572     index 94a752d852bb..0d88e6227761 100644
1573     --- a/drivers/staging/comedi/drivers/amplc_pc263.c
1574     +++ b/drivers/staging/comedi/drivers/amplc_pc263.c
1575     @@ -72,6 +72,9 @@ static int pc263_do_insn_bits(struct comedi_device *dev,
1576     outb(s->state & 0xFF, dev->iobase);
1577     outb(s->state >> 8, dev->iobase + 1);
1578     }
1579     +
1580     + data[1] = s->state;
1581     +
1582     return insn->n;
1583     }
1584    
1585     diff --git a/drivers/staging/comedi/drivers/amplc_pci263.c b/drivers/staging/comedi/drivers/amplc_pci263.c
1586     index 8b57533bf406..9c53199a419b 100644
1587     --- a/drivers/staging/comedi/drivers/amplc_pci263.c
1588     +++ b/drivers/staging/comedi/drivers/amplc_pci263.c
1589     @@ -59,6 +59,9 @@ static int pci263_do_insn_bits(struct comedi_device *dev,
1590     outb(s->state & 0xFF, dev->iobase);
1591     outb(s->state >> 8, dev->iobase + 1);
1592     }
1593     +
1594     + data[1] = s->state;
1595     +
1596     return insn->n;
1597     }
1598    
1599     diff --git a/drivers/staging/comedi/drivers/pcmuio.c b/drivers/staging/comedi/drivers/pcmuio.c
1600     index 0c98e26bbba1..b5ed093e59c3 100644
1601     --- a/drivers/staging/comedi/drivers/pcmuio.c
1602     +++ b/drivers/staging/comedi/drivers/pcmuio.c
1603     @@ -935,12 +935,13 @@ static void pcmuio_detach(struct comedi_device *dev)
1604     struct pcmuio_private *devpriv = dev->private;
1605     int i;
1606    
1607     - for (i = 0; i < MAX_ASICS; ++i) {
1608     - if (devpriv->asics[i].irq)
1609     - free_irq(devpriv->asics[i].irq, dev);
1610     - }
1611     - if (devpriv && devpriv->sprivs)
1612     + if (devpriv) {
1613     + for (i = 0; i < MAX_ASICS; ++i) {
1614     + if (devpriv->asics[i].irq)
1615     + free_irq(devpriv->asics[i].irq, dev);
1616     + }
1617     kfree(devpriv->sprivs);
1618     + }
1619     comedi_legacy_detach(dev);
1620     }
1621    
1622     diff --git a/drivers/staging/comedi/drivers/ssv_dnp.c b/drivers/staging/comedi/drivers/ssv_dnp.c
1623     index a76df092a57b..8c84dc0cfe07 100644
1624     --- a/drivers/staging/comedi/drivers/ssv_dnp.c
1625     +++ b/drivers/staging/comedi/drivers/ssv_dnp.c
1626     @@ -87,11 +87,11 @@ static int dnp_dio_insn_bits(struct comedi_device *dev,
1627    
1628     /* on return, data[1] contains the value of the digital input lines. */
1629     outb(PADR, CSCIR);
1630     - data[0] = inb(CSCDR);
1631     + data[1] = inb(CSCDR);
1632     outb(PBDR, CSCIR);
1633     - data[0] += inb(CSCDR) << 8;
1634     + data[1] += inb(CSCDR) << 8;
1635     outb(PCDR, CSCIR);
1636     - data[0] += ((inb(CSCDR) & 0xF0) << 12);
1637     + data[1] += ((inb(CSCDR) & 0xF0) << 12);
1638    
1639     return insn->n;
1640    
1641     diff --git a/drivers/usb/core/hub.c b/drivers/usb/core/hub.c
1642     index 1424a8988849..4d25bff2dac1 100644
1643     --- a/drivers/usb/core/hub.c
1644     +++ b/drivers/usb/core/hub.c
1645     @@ -4808,8 +4808,9 @@ static void hub_events(void)
1646     hub->ports[i - 1]->child;
1647    
1648     dev_dbg(hub_dev, "warm reset port %d\n", i);
1649     - if (!udev || !(portstatus &
1650     - USB_PORT_STAT_CONNECTION)) {
1651     + if (!udev ||
1652     + !(portstatus & USB_PORT_STAT_CONNECTION) ||
1653     + udev->state == USB_STATE_NOTATTACHED) {
1654     status = hub_port_reset(hub, i,
1655     NULL, HUB_BH_RESET_TIME,
1656     true);
1657     diff --git a/drivers/usb/dwc3/ep0.c b/drivers/usb/dwc3/ep0.c
1658     index 5acbb948b704..3cea676ba901 100644
1659     --- a/drivers/usb/dwc3/ep0.c
1660     +++ b/drivers/usb/dwc3/ep0.c
1661     @@ -478,6 +478,8 @@ static int dwc3_ep0_handle_feature(struct dwc3 *dwc,
1662     dep = dwc3_wIndex_to_dep(dwc, wIndex);
1663     if (!dep)
1664     return -EINVAL;
1665     + if (set == 0 && (dep->flags & DWC3_EP_WEDGE))
1666     + break;
1667     ret = __dwc3_gadget_ep_set_halt(dep, set);
1668     if (ret)
1669     return -EINVAL;
1670     diff --git a/drivers/usb/dwc3/gadget.c b/drivers/usb/dwc3/gadget.c
1671     index 14d28d6184f6..69948ad39837 100644
1672     --- a/drivers/usb/dwc3/gadget.c
1673     +++ b/drivers/usb/dwc3/gadget.c
1674     @@ -1220,9 +1220,6 @@ int __dwc3_gadget_ep_set_halt(struct dwc3_ep *dep, int value)
1675     else
1676     dep->flags |= DWC3_EP_STALL;
1677     } else {
1678     - if (dep->flags & DWC3_EP_WEDGE)
1679     - return 0;
1680     -
1681     ret = dwc3_send_gadget_ep_cmd(dwc, dep->number,
1682     DWC3_DEPCMD_CLEARSTALL, &params);
1683     if (ret)
1684     @@ -1230,7 +1227,7 @@ int __dwc3_gadget_ep_set_halt(struct dwc3_ep *dep, int value)
1685     value ? "set" : "clear",
1686     dep->name);
1687     else
1688     - dep->flags &= ~DWC3_EP_STALL;
1689     + dep->flags &= ~(DWC3_EP_STALL | DWC3_EP_WEDGE);
1690     }
1691    
1692     return ret;
1693     diff --git a/drivers/usb/gadget/composite.c b/drivers/usb/gadget/composite.c
1694     index 55f4df60f327..44a292b75012 100644
1695     --- a/drivers/usb/gadget/composite.c
1696     +++ b/drivers/usb/gadget/composite.c
1697     @@ -593,6 +593,7 @@ static void reset_config(struct usb_composite_dev *cdev)
1698     bitmap_zero(f->endpoints, 32);
1699     }
1700     cdev->config = NULL;
1701     + cdev->delayed_status = 0;
1702     }
1703    
1704     static int set_config(struct usb_composite_dev *cdev,
1705     diff --git a/drivers/usb/serial/option.c b/drivers/usb/serial/option.c
1706     index c3d94853b4ab..496b7e39d5be 100644
1707     --- a/drivers/usb/serial/option.c
1708     +++ b/drivers/usb/serial/option.c
1709     @@ -85,6 +85,7 @@ static void option_instat_callback(struct urb *urb);
1710     #define HUAWEI_PRODUCT_K4505 0x1464
1711     #define HUAWEI_PRODUCT_K3765 0x1465
1712     #define HUAWEI_PRODUCT_K4605 0x14C6
1713     +#define HUAWEI_PRODUCT_E173S6 0x1C07
1714    
1715     #define QUANTA_VENDOR_ID 0x0408
1716     #define QUANTA_PRODUCT_Q101 0xEA02
1717     @@ -572,6 +573,8 @@ static const struct usb_device_id option_ids[] = {
1718     { USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0x1c23, USB_CLASS_COMM, 0x02, 0xff) },
1719     { USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_E173, 0xff, 0xff, 0xff),
1720     .driver_info = (kernel_ulong_t) &net_intf1_blacklist },
1721     + { USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_E173S6, 0xff, 0xff, 0xff),
1722     + .driver_info = (kernel_ulong_t) &net_intf1_blacklist },
1723     { USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_E1750, 0xff, 0xff, 0xff),
1724     .driver_info = (kernel_ulong_t) &net_intf2_blacklist },
1725     { USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0x1441, USB_CLASS_COMM, 0x02, 0xff) },
1726     @@ -634,6 +637,10 @@ static const struct usb_device_id option_ids[] = {
1727     { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x01, 0x6D) },
1728     { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x01, 0x6E) },
1729     { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x01, 0x6F) },
1730     + { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x01, 0x72) },
1731     + { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x01, 0x73) },
1732     + { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x01, 0x74) },
1733     + { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x01, 0x75) },
1734     { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x01, 0x78) },
1735     { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x01, 0x79) },
1736     { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x01, 0x7A) },
1737     @@ -688,6 +695,10 @@ static const struct usb_device_id option_ids[] = {
1738     { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x02, 0x6D) },
1739     { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x02, 0x6E) },
1740     { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x02, 0x6F) },
1741     + { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x02, 0x72) },
1742     + { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x02, 0x73) },
1743     + { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x02, 0x74) },
1744     + { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x02, 0x75) },
1745     { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x02, 0x78) },
1746     { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x02, 0x79) },
1747     { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x02, 0x7A) },
1748     @@ -742,6 +753,10 @@ static const struct usb_device_id option_ids[] = {
1749     { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x03, 0x6D) },
1750     { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x03, 0x6E) },
1751     { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x03, 0x6F) },
1752     + { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x03, 0x72) },
1753     + { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x03, 0x73) },
1754     + { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x03, 0x74) },
1755     + { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x03, 0x75) },
1756     { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x03, 0x78) },
1757     { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x03, 0x79) },
1758     { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x03, 0x7A) },
1759     @@ -796,6 +811,10 @@ static const struct usb_device_id option_ids[] = {
1760     { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x04, 0x6D) },
1761     { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x04, 0x6E) },
1762     { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x04, 0x6F) },
1763     + { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x04, 0x72) },
1764     + { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x04, 0x73) },
1765     + { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x04, 0x74) },
1766     + { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x04, 0x75) },
1767     { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x04, 0x78) },
1768     { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x04, 0x79) },
1769     { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x04, 0x7A) },
1770     @@ -850,6 +869,10 @@ static const struct usb_device_id option_ids[] = {
1771     { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x05, 0x6D) },
1772     { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x05, 0x6E) },
1773     { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x05, 0x6F) },
1774     + { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x05, 0x72) },
1775     + { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x05, 0x73) },
1776     + { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x05, 0x74) },
1777     + { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x05, 0x75) },
1778     { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x05, 0x78) },
1779     { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x05, 0x79) },
1780     { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x05, 0x7A) },
1781     @@ -904,6 +927,10 @@ static const struct usb_device_id option_ids[] = {
1782     { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x06, 0x6D) },
1783     { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x06, 0x6E) },
1784     { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x06, 0x6F) },
1785     + { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x06, 0x72) },
1786     + { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x06, 0x73) },
1787     + { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x06, 0x74) },
1788     + { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x06, 0x75) },
1789     { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x06, 0x78) },
1790     { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x06, 0x79) },
1791     { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x06, 0x7A) },
1792     diff --git a/drivers/watchdog/sc1200wdt.c b/drivers/watchdog/sc1200wdt.c
1793     index 3fb83b0c28c2..ab6d3f56cbca 100644
1794     --- a/drivers/watchdog/sc1200wdt.c
1795     +++ b/drivers/watchdog/sc1200wdt.c
1796     @@ -409,8 +409,9 @@ static int __init sc1200wdt_init(void)
1797     #if defined CONFIG_PNP
1798     /* now that the user has specified an IO port and we haven't detected
1799     * any devices, disable pnp support */
1800     + if (isapnp)
1801     + pnp_unregister_driver(&scl200wdt_pnp_driver);
1802     isapnp = 0;
1803     - pnp_unregister_driver(&scl200wdt_pnp_driver);
1804     #endif
1805    
1806     if (!request_region(io, io_len, SC1200_MODULE_NAME)) {
1807     diff --git a/fs/btrfs/acl.c b/fs/btrfs/acl.c
1808     index e15d2b0d8d3b..0890c83643e9 100644
1809     --- a/fs/btrfs/acl.c
1810     +++ b/fs/btrfs/acl.c
1811     @@ -229,7 +229,7 @@ int btrfs_init_acl(struct btrfs_trans_handle *trans,
1812     if (ret > 0) {
1813     /* we need an acl */
1814     ret = btrfs_set_acl(trans, inode, acl, ACL_TYPE_ACCESS);
1815     - } else {
1816     + } else if (ret < 0) {
1817     cache_no_acl(inode);
1818     }
1819     } else {
1820     diff --git a/fs/btrfs/inode.c b/fs/btrfs/inode.c
1821     index 1e2288dc5346..0bcee78cde16 100644
1822     --- a/fs/btrfs/inode.c
1823     +++ b/fs/btrfs/inode.c
1824     @@ -2419,10 +2419,23 @@ out_unlock:
1825     return ret;
1826     }
1827    
1828     +static void free_sa_defrag_extent(struct new_sa_defrag_extent *new)
1829     +{
1830     + struct old_sa_defrag_extent *old, *tmp;
1831     +
1832     + if (!new)
1833     + return;
1834     +
1835     + list_for_each_entry_safe(old, tmp, &new->head, list) {
1836     + list_del(&old->list);
1837     + kfree(old);
1838     + }
1839     + kfree(new);
1840     +}
1841     +
1842     static void relink_file_extents(struct new_sa_defrag_extent *new)
1843     {
1844     struct btrfs_path *path;
1845     - struct old_sa_defrag_extent *old, *tmp;
1846     struct sa_defrag_extent_backref *backref;
1847     struct sa_defrag_extent_backref *prev = NULL;
1848     struct inode *inode;
1849     @@ -2465,16 +2478,11 @@ static void relink_file_extents(struct new_sa_defrag_extent *new)
1850     kfree(prev);
1851    
1852     btrfs_free_path(path);
1853     -
1854     - list_for_each_entry_safe(old, tmp, &new->head, list) {
1855     - list_del(&old->list);
1856     - kfree(old);
1857     - }
1858     out:
1859     + free_sa_defrag_extent(new);
1860     +
1861     atomic_dec(&root->fs_info->defrag_running);
1862     wake_up(&root->fs_info->transaction_wait);
1863     -
1864     - kfree(new);
1865     }
1866    
1867     static struct new_sa_defrag_extent *
1868     @@ -2484,7 +2492,7 @@ record_old_file_extents(struct inode *inode,
1869     struct btrfs_root *root = BTRFS_I(inode)->root;
1870     struct btrfs_path *path;
1871     struct btrfs_key key;
1872     - struct old_sa_defrag_extent *old, *tmp;
1873     + struct old_sa_defrag_extent *old;
1874     struct new_sa_defrag_extent *new;
1875     int ret;
1876    
1877     @@ -2532,7 +2540,7 @@ record_old_file_extents(struct inode *inode,
1878     if (slot >= btrfs_header_nritems(l)) {
1879     ret = btrfs_next_leaf(root, path);
1880     if (ret < 0)
1881     - goto out_free_list;
1882     + goto out_free_path;
1883     else if (ret > 0)
1884     break;
1885     continue;
1886     @@ -2561,7 +2569,7 @@ record_old_file_extents(struct inode *inode,
1887    
1888     old = kmalloc(sizeof(*old), GFP_NOFS);
1889     if (!old)
1890     - goto out_free_list;
1891     + goto out_free_path;
1892    
1893     offset = max(new->file_pos, key.offset);
1894     end = min(new->file_pos + new->len, key.offset + num_bytes);
1895     @@ -2583,15 +2591,10 @@ next:
1896    
1897     return new;
1898    
1899     -out_free_list:
1900     - list_for_each_entry_safe(old, tmp, &new->head, list) {
1901     - list_del(&old->list);
1902     - kfree(old);
1903     - }
1904     out_free_path:
1905     btrfs_free_path(path);
1906     out_kfree:
1907     - kfree(new);
1908     + free_sa_defrag_extent(new);
1909     return NULL;
1910     }
1911    
1912     @@ -2743,8 +2746,14 @@ out:
1913     btrfs_remove_ordered_extent(inode, ordered_extent);
1914    
1915     /* for snapshot-aware defrag */
1916     - if (new)
1917     - relink_file_extents(new);
1918     + if (new) {
1919     + if (ret) {
1920     + free_sa_defrag_extent(new);
1921     + atomic_dec(&root->fs_info->defrag_running);
1922     + } else {
1923     + relink_file_extents(new);
1924     + }
1925     + }
1926    
1927     /* once for us */
1928     btrfs_put_ordered_extent(ordered_extent);
1929     diff --git a/fs/btrfs/ioctl.c b/fs/btrfs/ioctl.c
1930     index 8dedf4019672..145b2c75ab83 100644
1931     --- a/fs/btrfs/ioctl.c
1932     +++ b/fs/btrfs/ioctl.c
1933     @@ -2093,7 +2093,7 @@ static noinline int btrfs_ioctl_snap_destroy(struct file *file,
1934    
1935     err = mutex_lock_killable_nested(&dir->i_mutex, I_MUTEX_PARENT);
1936     if (err == -EINTR)
1937     - goto out;
1938     + goto out_drop_write;
1939     dentry = lookup_one_len(vol_args->name, parent, namelen);
1940     if (IS_ERR(dentry)) {
1941     err = PTR_ERR(dentry);
1942     @@ -2235,6 +2235,7 @@ out_dput:
1943     dput(dentry);
1944     out_unlock_dir:
1945     mutex_unlock(&dir->i_mutex);
1946     +out_drop_write:
1947     mnt_drop_write_file(file);
1948     out:
1949     kfree(vol_args);
1950     diff --git a/fs/btrfs/send.c b/fs/btrfs/send.c
1951     index 09ea0bdde65f..256a9a46d544 100644
1952     --- a/fs/btrfs/send.c
1953     +++ b/fs/btrfs/send.c
1954     @@ -4623,8 +4623,8 @@ long btrfs_ioctl_send(struct file *mnt_file, void __user *arg_)
1955     }
1956    
1957     if (!access_ok(VERIFY_READ, arg->clone_sources,
1958     - sizeof(*arg->clone_sources *
1959     - arg->clone_sources_count))) {
1960     + sizeof(*arg->clone_sources) *
1961     + arg->clone_sources_count)) {
1962     ret = -EFAULT;
1963     goto out;
1964     }
1965     diff --git a/fs/btrfs/tree-log.c b/fs/btrfs/tree-log.c
1966     index cf68596b51fb..bca436330681 100644
1967     --- a/fs/btrfs/tree-log.c
1968     +++ b/fs/btrfs/tree-log.c
1969     @@ -3314,7 +3314,7 @@ static int log_one_extent(struct btrfs_trans_handle *trans,
1970     btrfs_set_token_file_extent_type(leaf, fi,
1971     BTRFS_FILE_EXTENT_REG,
1972     &token);
1973     - if (em->block_start == 0)
1974     + if (em->block_start == EXTENT_MAP_HOLE)
1975     skip_csum = true;
1976     }
1977    
1978     diff --git a/fs/btrfs/volumes.c b/fs/btrfs/volumes.c
1979     index 8bffb9174afb..b6c23c4abae2 100644
1980     --- a/fs/btrfs/volumes.c
1981     +++ b/fs/btrfs/volumes.c
1982     @@ -4248,6 +4248,7 @@ int btrfs_num_copies(struct btrfs_fs_info *fs_info, u64 logical, u64 len)
1983     btrfs_emerg(fs_info, "Invalid mapping for %Lu-%Lu, got "
1984     "%Lu-%Lu\n", logical, logical+len, em->start,
1985     em->start + em->len);
1986     + free_extent_map(em);
1987     return 1;
1988     }
1989    
1990     @@ -4429,6 +4430,7 @@ static int __btrfs_map_block(struct btrfs_fs_info *fs_info, int rw,
1991     btrfs_crit(fs_info, "found a bad mapping, wanted %Lu, "
1992     "found %Lu-%Lu\n", logical, em->start,
1993     em->start + em->len);
1994     + free_extent_map(em);
1995     return -EINVAL;
1996     }
1997    
1998     diff --git a/fs/nfs/blocklayout/extents.c b/fs/nfs/blocklayout/extents.c
1999     index 9c3e117c3ed1..4d0161442565 100644
2000     --- a/fs/nfs/blocklayout/extents.c
2001     +++ b/fs/nfs/blocklayout/extents.c
2002     @@ -44,7 +44,7 @@
2003     static inline sector_t normalize(sector_t s, int base)
2004     {
2005     sector_t tmp = s; /* Since do_div modifies its argument */
2006     - return s - do_div(tmp, base);
2007     + return s - sector_div(tmp, base);
2008     }
2009    
2010     static inline sector_t normalize_up(sector_t s, int base)
2011     diff --git a/fs/nfs/nfs4proc.c b/fs/nfs/nfs4proc.c
2012     index 23881380dc6f..75e49d42a7fb 100644
2013     --- a/fs/nfs/nfs4proc.c
2014     +++ b/fs/nfs/nfs4proc.c
2015     @@ -4222,8 +4222,7 @@ nfs4_async_handle_error(struct rpc_task *task, const struct nfs_server *server,
2016     dprintk("%s ERROR %d, Reset session\n", __func__,
2017     task->tk_status);
2018     nfs4_schedule_session_recovery(clp->cl_session, task->tk_status);
2019     - task->tk_status = 0;
2020     - return -EAGAIN;
2021     + goto wait_on_recovery;
2022     #endif /* CONFIG_NFS_V4_1 */
2023     case -NFS4ERR_DELAY:
2024     nfs_inc_server_stats(server, NFSIOS_DELAY);
2025     diff --git a/fs/nfsd/nfscache.c b/fs/nfsd/nfscache.c
2026     index e76244edd748..ec8d97ddc635 100644
2027     --- a/fs/nfsd/nfscache.c
2028     +++ b/fs/nfsd/nfscache.c
2029     @@ -129,6 +129,13 @@ nfsd_reply_cache_alloc(void)
2030     }
2031    
2032     static void
2033     +nfsd_reply_cache_unhash(struct svc_cacherep *rp)
2034     +{
2035     + hlist_del_init(&rp->c_hash);
2036     + list_del_init(&rp->c_lru);
2037     +}
2038     +
2039     +static void
2040     nfsd_reply_cache_free_locked(struct svc_cacherep *rp)
2041     {
2042     if (rp->c_type == RC_REPLBUFF && rp->c_replvec.iov_base) {
2043     @@ -403,7 +410,7 @@ nfsd_cache_lookup(struct svc_rqst *rqstp)
2044     rp = list_first_entry(&lru_head, struct svc_cacherep, c_lru);
2045     if (nfsd_cache_entry_expired(rp) ||
2046     num_drc_entries >= max_drc_entries) {
2047     - lru_put_end(rp);
2048     + nfsd_reply_cache_unhash(rp);
2049     prune_cache_entries();
2050     goto search_cache;
2051     }
2052     diff --git a/fs/xfs/xfs_fsops.c b/fs/xfs/xfs_fsops.c
2053     index 3c3644ea825b..2288db4e1784 100644
2054     --- a/fs/xfs/xfs_fsops.c
2055     +++ b/fs/xfs/xfs_fsops.c
2056     @@ -216,6 +216,8 @@ xfs_growfs_data_private(
2057     */
2058     nfree = 0;
2059     for (agno = nagcount - 1; agno >= oagcount; agno--, new -= agsize) {
2060     + __be32 *agfl_bno;
2061     +
2062     /*
2063     * AG freespace header block
2064     */
2065     @@ -275,8 +277,10 @@ xfs_growfs_data_private(
2066     agfl->agfl_seqno = cpu_to_be32(agno);
2067     uuid_copy(&agfl->agfl_uuid, &mp->m_sb.sb_uuid);
2068     }
2069     +
2070     + agfl_bno = XFS_BUF_TO_AGFL_BNO(mp, bp);
2071     for (bucket = 0; bucket < XFS_AGFL_SIZE(mp); bucket++)
2072     - agfl->agfl_bno[bucket] = cpu_to_be32(NULLAGBLOCK);
2073     + agfl_bno[bucket] = cpu_to_be32(NULLAGBLOCK);
2074    
2075     error = xfs_bwrite(bp);
2076     xfs_buf_relse(bp);
2077     diff --git a/fs/xfs/xfs_ioctl.c b/fs/xfs/xfs_ioctl.c
2078     index ca01d830e989..83dfe6e73235 100644
2079     --- a/fs/xfs/xfs_ioctl.c
2080     +++ b/fs/xfs/xfs_ioctl.c
2081     @@ -409,7 +409,8 @@ xfs_attrlist_by_handle(
2082     return -XFS_ERROR(EPERM);
2083     if (copy_from_user(&al_hreq, arg, sizeof(xfs_fsop_attrlist_handlereq_t)))
2084     return -XFS_ERROR(EFAULT);
2085     - if (al_hreq.buflen > XATTR_LIST_MAX)
2086     + if (al_hreq.buflen < sizeof(struct attrlist) ||
2087     + al_hreq.buflen > XATTR_LIST_MAX)
2088     return -XFS_ERROR(EINVAL);
2089    
2090     /*
2091     diff --git a/fs/xfs/xfs_ioctl32.c b/fs/xfs/xfs_ioctl32.c
2092     index c0c66259cc91..68799d7f02cc 100644
2093     --- a/fs/xfs/xfs_ioctl32.c
2094     +++ b/fs/xfs/xfs_ioctl32.c
2095     @@ -359,7 +359,8 @@ xfs_compat_attrlist_by_handle(
2096     if (copy_from_user(&al_hreq, arg,
2097     sizeof(compat_xfs_fsop_attrlist_handlereq_t)))
2098     return -XFS_ERROR(EFAULT);
2099     - if (al_hreq.buflen > XATTR_LIST_MAX)
2100     + if (al_hreq.buflen < sizeof(struct attrlist) ||
2101     + al_hreq.buflen > XATTR_LIST_MAX)
2102     return -XFS_ERROR(EINVAL);
2103    
2104     /*
2105     diff --git a/include/linux/compiler-intel.h b/include/linux/compiler-intel.h
2106     index 973ce10c40b6..dc1bd3dcf11f 100644
2107     --- a/include/linux/compiler-intel.h
2108     +++ b/include/linux/compiler-intel.h
2109     @@ -28,8 +28,6 @@
2110    
2111     #endif
2112    
2113     -#define uninitialized_var(x) x
2114     -
2115     #ifndef __HAVE_BUILTIN_BSWAP16__
2116     /* icc has this, but it's called _bswap16 */
2117     #define __HAVE_BUILTIN_BSWAP16__
2118     diff --git a/include/linux/kexec.h b/include/linux/kexec.h
2119     index d78d28a733b1..5fd33dc1fe3a 100644
2120     --- a/include/linux/kexec.h
2121     +++ b/include/linux/kexec.h
2122     @@ -198,6 +198,9 @@ extern u32 vmcoreinfo_note[VMCOREINFO_NOTE_SIZE/4];
2123     extern size_t vmcoreinfo_size;
2124     extern size_t vmcoreinfo_max_size;
2125    
2126     +/* flag to track if kexec reboot is in progress */
2127     +extern bool kexec_in_progress;
2128     +
2129     int __init parse_crashkernel(char *cmdline, unsigned long long system_ram,
2130     unsigned long long *crash_size, unsigned long long *crash_base);
2131     int parse_crashkernel_high(char *cmdline, unsigned long long system_ram,
2132     diff --git a/include/sound/memalloc.h b/include/sound/memalloc.h
2133     index cf15b8213df7..54aff2d73150 100644
2134     --- a/include/sound/memalloc.h
2135     +++ b/include/sound/memalloc.h
2136     @@ -103,7 +103,7 @@ static inline dma_addr_t snd_sgbuf_get_addr(struct snd_dma_buffer *dmab,
2137     {
2138     struct snd_sg_buf *sgbuf = dmab->private_data;
2139     dma_addr_t addr = sgbuf->table[offset >> PAGE_SHIFT].addr;
2140     - addr &= PAGE_MASK;
2141     + addr &= ~((dma_addr_t)PAGE_SIZE - 1);
2142     return addr + offset % PAGE_SIZE;
2143     }
2144    
2145     diff --git a/include/uapi/sound/compress_offload.h b/include/uapi/sound/compress_offload.h
2146     index d630163b9a2e..5759810e1c1b 100644
2147     --- a/include/uapi/sound/compress_offload.h
2148     +++ b/include/uapi/sound/compress_offload.h
2149     @@ -30,7 +30,7 @@
2150     #include <sound/compress_params.h>
2151    
2152    
2153     -#define SNDRV_COMPRESS_VERSION SNDRV_PROTOCOL_VERSION(0, 1, 1)
2154     +#define SNDRV_COMPRESS_VERSION SNDRV_PROTOCOL_VERSION(0, 1, 2)
2155     /**
2156     * struct snd_compressed_buffer: compressed buffer
2157     * @fragment_size: size of buffer fragment in bytes
2158     @@ -67,8 +67,8 @@ struct snd_compr_params {
2159     struct snd_compr_tstamp {
2160     __u32 byte_offset;
2161     __u32 copied_total;
2162     - snd_pcm_uframes_t pcm_frames;
2163     - snd_pcm_uframes_t pcm_io_frames;
2164     + __u32 pcm_frames;
2165     + __u32 pcm_io_frames;
2166     __u32 sampling_rate;
2167     };
2168    
2169     diff --git a/kernel/futex.c b/kernel/futex.c
2170     index 49dacfb45745..a283b3041072 100644
2171     --- a/kernel/futex.c
2172     +++ b/kernel/futex.c
2173     @@ -287,7 +287,7 @@ again:
2174     put_page(page);
2175     /* serialize against __split_huge_page_splitting() */
2176     local_irq_disable();
2177     - if (likely(__get_user_pages_fast(address, 1, 1, &page) == 1)) {
2178     + if (likely(__get_user_pages_fast(address, 1, !ro, &page) == 1)) {
2179     page_head = compound_head(page);
2180     /*
2181     * page_head is valid pointer but we must pin
2182     diff --git a/kernel/kexec.c b/kernel/kexec.c
2183     index 59f7b55ba745..1f8d9382dbac 100644
2184     --- a/kernel/kexec.c
2185     +++ b/kernel/kexec.c
2186     @@ -47,6 +47,9 @@ u32 vmcoreinfo_note[VMCOREINFO_NOTE_SIZE/4];
2187     size_t vmcoreinfo_size;
2188     size_t vmcoreinfo_max_size = sizeof(vmcoreinfo_data);
2189    
2190     +/* Flag to indicate we are going to kexec a new kernel */
2191     +bool kexec_in_progress = false;
2192     +
2193     /* Location of the reserved area for the crash kernel */
2194     struct resource crashk_res = {
2195     .name = "Crash kernel",
2196     @@ -1678,6 +1681,7 @@ int kernel_kexec(void)
2197     } else
2198     #endif
2199     {
2200     + kexec_in_progress = true;
2201     kernel_restart_prepare(NULL);
2202     printk(KERN_EMERG "Starting new kernel\n");
2203     machine_shutdown();
2204     diff --git a/kernel/sched/debug.c b/kernel/sched/debug.c
2205     index 75024a673520..e745a1548367 100644
2206     --- a/kernel/sched/debug.c
2207     +++ b/kernel/sched/debug.c
2208     @@ -224,6 +224,14 @@ void print_cfs_rq(struct seq_file *m, int cpu, struct cfs_rq *cfs_rq)
2209     SEQ_printf(m, " .%-30s: %d\n", "tg->runnable_avg",
2210     atomic_read(&cfs_rq->tg->runnable_avg));
2211     #endif
2212     +#ifdef CONFIG_CFS_BANDWIDTH
2213     + SEQ_printf(m, " .%-30s: %d\n", "tg->cfs_bandwidth.timer_active",
2214     + cfs_rq->tg->cfs_bandwidth.timer_active);
2215     + SEQ_printf(m, " .%-30s: %d\n", "throttled",
2216     + cfs_rq->throttled);
2217     + SEQ_printf(m, " .%-30s: %d\n", "throttle_count",
2218     + cfs_rq->throttle_count);
2219     +#endif
2220    
2221     print_cfs_group_stats(m, cpu, cfs_rq->tg);
2222     #endif
2223     diff --git a/kernel/sched/fair.c b/kernel/sched/fair.c
2224     index 009a62bb859d..da7eebb22b06 100644
2225     --- a/kernel/sched/fair.c
2226     +++ b/kernel/sched/fair.c
2227     @@ -2288,6 +2288,8 @@ static void throttle_cfs_rq(struct cfs_rq *cfs_rq)
2228     cfs_rq->throttled_clock = rq->clock;
2229     raw_spin_lock(&cfs_b->lock);
2230     list_add_tail_rcu(&cfs_rq->throttled_list, &cfs_b->throttled_cfs_rq);
2231     + if (!cfs_b->timer_active)
2232     + __start_cfs_bandwidth(cfs_b);
2233     raw_spin_unlock(&cfs_b->lock);
2234     }
2235    
2236     diff --git a/net/ipv4/udp.c b/net/ipv4/udp.c
2237     index 233f1911dc34..c3075b552248 100644
2238     --- a/net/ipv4/udp.c
2239     +++ b/net/ipv4/udp.c
2240     @@ -1073,9 +1073,6 @@ int udp_sendpage(struct sock *sk, struct page *page, int offset,
2241     if (flags & MSG_SENDPAGE_NOTLAST)
2242     flags |= MSG_MORE;
2243    
2244     - if (flags & MSG_SENDPAGE_NOTLAST)
2245     - flags |= MSG_MORE;
2246     -
2247     if (!up->pending) {
2248     struct msghdr msg = { .msg_flags = flags|MSG_MORE };
2249    
2250     diff --git a/net/ipv6/ip6_tunnel.c b/net/ipv6/ip6_tunnel.c
2251     index 0516ebbea80b..209bb4d6e188 100644
2252     --- a/net/ipv6/ip6_tunnel.c
2253     +++ b/net/ipv6/ip6_tunnel.c
2254     @@ -1711,8 +1711,6 @@ static void __net_exit ip6_tnl_destroy_tunnels(struct ip6_tnl_net *ip6n)
2255     }
2256     }
2257    
2258     - t = rtnl_dereference(ip6n->tnls_wc[0]);
2259     - unregister_netdevice_queue(t->dev, &list);
2260     unregister_netdevice_many(&list);
2261     }
2262    
2263     diff --git a/net/mac80211/cfg.c b/net/mac80211/cfg.c
2264     index 5ab17b82605d..18687f1fca75 100644
2265     --- a/net/mac80211/cfg.c
2266     +++ b/net/mac80211/cfg.c
2267     @@ -2356,8 +2356,7 @@ static int ieee80211_set_power_mgmt(struct wiphy *wiphy, struct net_device *dev,
2268     struct ieee80211_sub_if_data *sdata = IEEE80211_DEV_TO_SUB_IF(dev);
2269     struct ieee80211_local *local = wdev_priv(dev->ieee80211_ptr);
2270    
2271     - if (sdata->vif.type != NL80211_IFTYPE_STATION &&
2272     - sdata->vif.type != NL80211_IFTYPE_MESH_POINT)
2273     + if (sdata->vif.type != NL80211_IFTYPE_STATION)
2274     return -EOPNOTSUPP;
2275    
2276     if (!(local->hw.flags & IEEE80211_HW_SUPPORTS_PS))
2277     diff --git a/net/mac80211/rx.c b/net/mac80211/rx.c
2278     index ec09bcba9bae..fae73b0ef14b 100644
2279     --- a/net/mac80211/rx.c
2280     +++ b/net/mac80211/rx.c
2281     @@ -864,7 +864,8 @@ static void ieee80211_rx_reorder_ampdu(struct ieee80211_rx_data *rx,
2282     u16 sc;
2283     u8 tid, ack_policy;
2284    
2285     - if (!ieee80211_is_data_qos(hdr->frame_control))
2286     + if (!ieee80211_is_data_qos(hdr->frame_control) ||
2287     + is_multicast_ether_addr(hdr->addr1))
2288     goto dont_reorder;
2289    
2290     /*
2291     diff --git a/security/selinux/hooks.c b/security/selinux/hooks.c
2292     index 5c6f2cd2d095..5e58d7dd7b69 100644
2293     --- a/security/selinux/hooks.c
2294     +++ b/security/selinux/hooks.c
2295     @@ -53,6 +53,7 @@
2296     #include <net/ip.h> /* for local_port_range[] */
2297     #include <net/sock.h>
2298     #include <net/tcp.h> /* struct or_callable used in sock_rcv_skb */
2299     +#include <net/inet_connection_sock.h>
2300     #include <net/net_namespace.h>
2301     #include <net/netlabel.h>
2302     #include <linux/uaccess.h>
2303     @@ -3736,6 +3737,30 @@ static int selinux_skb_peerlbl_sid(struct sk_buff *skb, u16 family, u32 *sid)
2304     return 0;
2305     }
2306    
2307     +/**
2308     + * selinux_conn_sid - Determine the child socket label for a connection
2309     + * @sk_sid: the parent socket's SID
2310     + * @skb_sid: the packet's SID
2311     + * @conn_sid: the resulting connection SID
2312     + *
2313     + * If @skb_sid is valid then the user:role:type information from @sk_sid is
2314     + * combined with the MLS information from @skb_sid in order to create
2315     + * @conn_sid. If @skb_sid is not valid then then @conn_sid is simply a copy
2316     + * of @sk_sid. Returns zero on success, negative values on failure.
2317     + *
2318     + */
2319     +static int selinux_conn_sid(u32 sk_sid, u32 skb_sid, u32 *conn_sid)
2320     +{
2321     + int err = 0;
2322     +
2323     + if (skb_sid != SECSID_NULL)
2324     + err = security_sid_mls_copy(sk_sid, skb_sid, conn_sid);
2325     + else
2326     + *conn_sid = sk_sid;
2327     +
2328     + return err;
2329     +}
2330     +
2331     /* socket security operations */
2332    
2333     static int socket_sockcreate_sid(const struct task_security_struct *tsec,
2334     @@ -4342,7 +4367,7 @@ static int selinux_inet_conn_request(struct sock *sk, struct sk_buff *skb,
2335     struct sk_security_struct *sksec = sk->sk_security;
2336     int err;
2337     u16 family = sk->sk_family;
2338     - u32 newsid;
2339     + u32 connsid;
2340     u32 peersid;
2341    
2342     /* handle mapped IPv4 packets arriving via IPv6 sockets */
2343     @@ -4352,16 +4377,11 @@ static int selinux_inet_conn_request(struct sock *sk, struct sk_buff *skb,
2344     err = selinux_skb_peerlbl_sid(skb, family, &peersid);
2345     if (err)
2346     return err;
2347     - if (peersid == SECSID_NULL) {
2348     - req->secid = sksec->sid;
2349     - req->peer_secid = SECSID_NULL;
2350     - } else {
2351     - err = security_sid_mls_copy(sksec->sid, peersid, &newsid);
2352     - if (err)
2353     - return err;
2354     - req->secid = newsid;
2355     - req->peer_secid = peersid;
2356     - }
2357     + err = selinux_conn_sid(sksec->sid, peersid, &connsid);
2358     + if (err)
2359     + return err;
2360     + req->secid = connsid;
2361     + req->peer_secid = peersid;
2362    
2363     return selinux_netlbl_inet_conn_request(req, family);
2364     }
2365     @@ -4621,6 +4641,7 @@ static unsigned int selinux_ipv6_forward(unsigned int hooknum,
2366     static unsigned int selinux_ip_output(struct sk_buff *skb,
2367     u16 family)
2368     {
2369     + struct sock *sk;
2370     u32 sid;
2371    
2372     if (!netlbl_enabled())
2373     @@ -4629,8 +4650,27 @@ static unsigned int selinux_ip_output(struct sk_buff *skb,
2374     /* we do this in the LOCAL_OUT path and not the POST_ROUTING path
2375     * because we want to make sure we apply the necessary labeling
2376     * before IPsec is applied so we can leverage AH protection */
2377     - if (skb->sk) {
2378     - struct sk_security_struct *sksec = skb->sk->sk_security;
2379     + sk = skb->sk;
2380     + if (sk) {
2381     + struct sk_security_struct *sksec;
2382     +
2383     + if (sk->sk_state == TCP_LISTEN)
2384     + /* if the socket is the listening state then this
2385     + * packet is a SYN-ACK packet which means it needs to
2386     + * be labeled based on the connection/request_sock and
2387     + * not the parent socket. unfortunately, we can't
2388     + * lookup the request_sock yet as it isn't queued on
2389     + * the parent socket until after the SYN-ACK is sent.
2390     + * the "solution" is to simply pass the packet as-is
2391     + * as any IP option based labeling should be copied
2392     + * from the initial connection request (in the IP
2393     + * layer). it is far from ideal, but until we get a
2394     + * security label in the packet itself this is the
2395     + * best we can do. */
2396     + return NF_ACCEPT;
2397     +
2398     + /* standard practice, label using the parent socket */
2399     + sksec = sk->sk_security;
2400     sid = sksec->sid;
2401     } else
2402     sid = SECINITSID_KERNEL;
2403     @@ -4715,12 +4755,12 @@ static unsigned int selinux_ip_postroute(struct sk_buff *skb, int ifindex,
2404     if (!secmark_active && !peerlbl_active)
2405     return NF_ACCEPT;
2406    
2407     - /* if the packet is being forwarded then get the peer label from the
2408     - * packet itself; otherwise check to see if it is from a local
2409     - * application or the kernel, if from an application get the peer label
2410     - * from the sending socket, otherwise use the kernel's sid */
2411     sk = skb->sk;
2412     if (sk == NULL) {
2413     + /* Without an associated socket the packet is either coming
2414     + * from the kernel or it is being forwarded; check the packet
2415     + * to determine which and if the packet is being forwarded
2416     + * query the packet directly to determine the security label. */
2417     if (skb->skb_iif) {
2418     secmark_perm = PACKET__FORWARD_OUT;
2419     if (selinux_skb_peerlbl_sid(skb, family, &peer_sid))
2420     @@ -4729,7 +4769,26 @@ static unsigned int selinux_ip_postroute(struct sk_buff *skb, int ifindex,
2421     secmark_perm = PACKET__SEND;
2422     peer_sid = SECINITSID_KERNEL;
2423     }
2424     + } else if (sk->sk_state == TCP_LISTEN) {
2425     + /* Locally generated packet but the associated socket is in the
2426     + * listening state which means this is a SYN-ACK packet. In
2427     + * this particular case the correct security label is assigned
2428     + * to the connection/request_sock but unfortunately we can't
2429     + * query the request_sock as it isn't queued on the parent
2430     + * socket until after the SYN-ACK packet is sent; the only
2431     + * viable choice is to regenerate the label like we do in
2432     + * selinux_inet_conn_request(). See also selinux_ip_output()
2433     + * for similar problems. */
2434     + u32 skb_sid;
2435     + struct sk_security_struct *sksec = sk->sk_security;
2436     + if (selinux_skb_peerlbl_sid(skb, family, &skb_sid))
2437     + return NF_DROP;
2438     + if (selinux_conn_sid(sksec->sid, skb_sid, &peer_sid))
2439     + return NF_DROP;
2440     + secmark_perm = PACKET__SEND;
2441     } else {
2442     + /* Locally generated packet, fetch the security label from the
2443     + * associated socket. */
2444     struct sk_security_struct *sksec = sk->sk_security;
2445     peer_sid = sksec->sid;
2446     secmark_perm = PACKET__SEND;
2447     diff --git a/sound/pci/hda/hda_generic.c b/sound/pci/hda/hda_generic.c
2448     index 7975031312cb..8536266e4004 100644
2449     --- a/sound/pci/hda/hda_generic.c
2450     +++ b/sound/pci/hda/hda_generic.c
2451     @@ -468,6 +468,20 @@ static void invalidate_nid_path(struct hda_codec *codec, int idx)
2452     memset(path, 0, sizeof(*path));
2453     }
2454    
2455     +/* return a DAC if paired to the given pin by codec driver */
2456     +static hda_nid_t get_preferred_dac(struct hda_codec *codec, hda_nid_t pin)
2457     +{
2458     + struct hda_gen_spec *spec = codec->spec;
2459     + const hda_nid_t *list = spec->preferred_dacs;
2460     +
2461     + if (!list)
2462     + return 0;
2463     + for (; *list; list += 2)
2464     + if (*list == pin)
2465     + return list[1];
2466     + return 0;
2467     +}
2468     +
2469     /* look for an empty DAC slot */
2470     static hda_nid_t look_for_dac(struct hda_codec *codec, hda_nid_t pin,
2471     bool is_digital)
2472     @@ -1134,7 +1148,14 @@ static int try_assign_dacs(struct hda_codec *codec, int num_outs,
2473     continue;
2474     }
2475    
2476     - dacs[i] = look_for_dac(codec, pin, false);
2477     + dacs[i] = get_preferred_dac(codec, pin);
2478     + if (dacs[i]) {
2479     + if (is_dac_already_used(codec, dacs[i]))
2480     + badness += bad->shared_primary;
2481     + }
2482     +
2483     + if (!dacs[i])
2484     + dacs[i] = look_for_dac(codec, pin, false);
2485     if (!dacs[i] && !i) {
2486     /* try to steal the DAC of surrounds for the front */
2487     for (j = 1; j < num_outs; j++) {
2488     @@ -4201,6 +4222,26 @@ static unsigned int snd_hda_gen_path_power_filter(struct hda_codec *codec,
2489     return AC_PWRST_D3;
2490     }
2491    
2492     +/* mute all aamix inputs initially; parse up to the first leaves */
2493     +static void mute_all_mixer_nid(struct hda_codec *codec, hda_nid_t mix)
2494     +{
2495     + int i, nums;
2496     + const hda_nid_t *conn;
2497     + bool has_amp;
2498     +
2499     + nums = snd_hda_get_conn_list(codec, mix, &conn);
2500     + has_amp = nid_has_mute(codec, mix, HDA_INPUT);
2501     + for (i = 0; i < nums; i++) {
2502     + if (has_amp)
2503     + snd_hda_codec_amp_stereo(codec, mix,
2504     + HDA_INPUT, i,
2505     + 0xff, HDA_AMP_MUTE);
2506     + else if (nid_has_volume(codec, conn[i], HDA_OUTPUT))
2507     + snd_hda_codec_amp_stereo(codec, conn[i],
2508     + HDA_OUTPUT, 0,
2509     + 0xff, HDA_AMP_MUTE);
2510     + }
2511     +}
2512    
2513     /*
2514     * Parse the given BIOS configuration and set up the hda_gen_spec
2515     @@ -4339,6 +4380,10 @@ int snd_hda_gen_parse_auto_config(struct hda_codec *codec,
2516     }
2517     }
2518    
2519     + /* mute all aamix input initially */
2520     + if (spec->mixer_nid)
2521     + mute_all_mixer_nid(codec, spec->mixer_nid);
2522     +
2523     dig_only:
2524     parse_digital(codec);
2525    
2526     diff --git a/sound/pci/hda/hda_generic.h b/sound/pci/hda/hda_generic.h
2527     index 76200314ee95..a18a1005002f 100644
2528     --- a/sound/pci/hda/hda_generic.h
2529     +++ b/sound/pci/hda/hda_generic.h
2530     @@ -241,6 +241,9 @@ struct hda_gen_spec {
2531     const struct badness_table *main_out_badness;
2532     const struct badness_table *extra_out_badness;
2533    
2534     + /* preferred pin/DAC pairs; an array of paired NIDs */
2535     + const hda_nid_t *preferred_dacs;
2536     +
2537     /* loopback mixing mode */
2538     bool aamix_mode;
2539    
2540     diff --git a/sound/pci/hda/patch_analog.c b/sound/pci/hda/patch_analog.c
2541     index e17b55a95bc5..a7b07f72c9dd 100644
2542     --- a/sound/pci/hda/patch_analog.c
2543     +++ b/sound/pci/hda/patch_analog.c
2544     @@ -1227,6 +1227,14 @@ static int ad1986a_parse_auto_config(struct hda_codec *codec)
2545     {
2546     int err;
2547     struct ad198x_spec *spec;
2548     + static hda_nid_t preferred_pairs[] = {
2549     + 0x1a, 0x03,
2550     + 0x1b, 0x03,
2551     + 0x1c, 0x04,
2552     + 0x1d, 0x05,
2553     + 0x1e, 0x03,
2554     + 0
2555     + };
2556    
2557     err = alloc_ad_spec(codec);
2558     if (err < 0)
2559     @@ -1247,6 +1255,8 @@ static int ad1986a_parse_auto_config(struct hda_codec *codec)
2560     * So, let's disable the shared stream.
2561     */
2562     spec->gen.multiout.no_share_stream = 1;
2563     + /* give fixed DAC/pin pairs */
2564     + spec->gen.preferred_dacs = preferred_pairs;
2565    
2566     snd_hda_pick_fixup(codec, NULL, ad1986a_fixup_tbl, ad1986a_fixups);
2567     snd_hda_apply_fixup(codec, HDA_FIXUP_ACT_PRE_PROBE);
2568     diff --git a/sound/pci/hda/patch_hdmi.c b/sound/pci/hda/patch_hdmi.c
2569     index b93799201578..8c1d1cf0c0cd 100644
2570     --- a/sound/pci/hda/patch_hdmi.c
2571     +++ b/sound/pci/hda/patch_hdmi.c
2572     @@ -2001,8 +2001,9 @@ static int simple_playback_build_controls(struct hda_codec *codec)
2573     int err;
2574    
2575     per_cvt = get_cvt(spec, 0);
2576     - err = snd_hda_create_spdif_out_ctls(codec, per_cvt->cvt_nid,
2577     - per_cvt->cvt_nid);
2578     + err = snd_hda_create_dig_out_ctls(codec, per_cvt->cvt_nid,
2579     + per_cvt->cvt_nid,
2580     + HDA_PCM_TYPE_HDMI);
2581     if (err < 0)
2582     return err;
2583     return simple_hdmi_build_jack(codec, 0);
2584     diff --git a/virt/kvm/kvm_main.c b/virt/kvm/kvm_main.c
2585     index 302681c4aa44..eb99458f5b68 100644
2586     --- a/virt/kvm/kvm_main.c
2587     +++ b/virt/kvm/kvm_main.c
2588     @@ -1904,6 +1904,9 @@ static int kvm_vm_ioctl_create_vcpu(struct kvm *kvm, u32 id)
2589     int r;
2590     struct kvm_vcpu *vcpu, *v;
2591    
2592     + if (id >= KVM_MAX_VCPUS)
2593     + return -EINVAL;
2594     +
2595     vcpu = kvm_arch_vcpu_create(kvm, id);
2596     if (IS_ERR(vcpu))
2597     return PTR_ERR(vcpu);