Magellan Linux

Annotation of /trunk/kernel-alx/patches-4.1/0107-4.1.8-all-fixes.patch

Parent Directory Parent Directory | Revision Log Revision Log


Revision 2748 - (hide annotations) (download)
Mon Jan 11 12:00:45 2016 UTC (8 years, 4 months ago) by niro
File size: 143149 byte(s)
-linux-4.1 patches up to 4.1.15
1 niro 2748 diff --git a/Documentation/ABI/testing/configfs-usb-gadget-loopback b/Documentation/ABI/testing/configfs-usb-gadget-loopback
2     index 9aae5bfb9908..06beefbcf061 100644
3     --- a/Documentation/ABI/testing/configfs-usb-gadget-loopback
4     +++ b/Documentation/ABI/testing/configfs-usb-gadget-loopback
5     @@ -5,4 +5,4 @@ Description:
6     The attributes:
7    
8     qlen - depth of loopback queue
9     - bulk_buflen - buffer length
10     + buflen - buffer length
11     diff --git a/Documentation/ABI/testing/configfs-usb-gadget-sourcesink b/Documentation/ABI/testing/configfs-usb-gadget-sourcesink
12     index 29477c319f61..bc7ff731aa0c 100644
13     --- a/Documentation/ABI/testing/configfs-usb-gadget-sourcesink
14     +++ b/Documentation/ABI/testing/configfs-usb-gadget-sourcesink
15     @@ -9,4 +9,4 @@ Description:
16     isoc_maxpacket - 0 - 1023 (fs), 0 - 1024 (hs/ss)
17     isoc_mult - 0..2 (hs/ss only)
18     isoc_maxburst - 0..15 (ss only)
19     - qlen - buffer length
20     + buflen - buffer length
21     diff --git a/Documentation/usb/gadget-testing.txt b/Documentation/usb/gadget-testing.txt
22     index f45b2bf4b41d..820664af8f6a 100644
23     --- a/Documentation/usb/gadget-testing.txt
24     +++ b/Documentation/usb/gadget-testing.txt
25     @@ -237,9 +237,7 @@ Testing the LOOPBACK function
26     -----------------------------
27    
28     device: run the gadget
29     -host: test-usb
30     -
31     -http://www.linux-usb.org/usbtest/testusb.c
32     +host: test-usb (tools/usb/testusb.c)
33    
34     8. MASS STORAGE function
35     ========================
36     @@ -588,9 +586,8 @@ Testing the SOURCESINK function
37     -------------------------------
38    
39     device: run the gadget
40     -host: test-usb
41     +host: test-usb (tools/usb/testusb.c)
42    
43     -http://www.linux-usb.org/usbtest/testusb.c
44    
45     16. UAC1 function
46     =================
47     diff --git a/Makefile b/Makefile
48     index b8591e5f79b8..dbf3baa5fabb 100644
49     --- a/Makefile
50     +++ b/Makefile
51     @@ -1,6 +1,6 @@
52     VERSION = 4
53     PATCHLEVEL = 1
54     -SUBLEVEL = 7
55     +SUBLEVEL = 8
56     EXTRAVERSION =
57     NAME = Series 4800
58    
59     diff --git a/arch/arm/Kconfig b/arch/arm/Kconfig
60     index 45df48ba0b12..19f4cc634b0e 100644
61     --- a/arch/arm/Kconfig
62     +++ b/arch/arm/Kconfig
63     @@ -538,6 +538,7 @@ config ARCH_ORION5X
64     select MVEBU_MBUS
65     select PCI
66     select PLAT_ORION_LEGACY
67     + select MULTI_IRQ_HANDLER
68     help
69     Support for the following Marvell Orion 5x series SoCs:
70     Orion-1 (5181), Orion-VoIP (5181L), Orion-NAS (5182),
71     diff --git a/arch/arm/boot/dts/exynos3250-rinato.dts b/arch/arm/boot/dts/exynos3250-rinato.dts
72     index 0b9906880c0c..75aba40c69e1 100644
73     --- a/arch/arm/boot/dts/exynos3250-rinato.dts
74     +++ b/arch/arm/boot/dts/exynos3250-rinato.dts
75     @@ -181,7 +181,7 @@
76    
77     display-timings {
78     timing-0 {
79     - clock-frequency = <0>;
80     + clock-frequency = <4600000>;
81     hactive = <320>;
82     vactive = <320>;
83     hfront-porch = <1>;
84     diff --git a/arch/arm/boot/dts/rk3288.dtsi b/arch/arm/boot/dts/rk3288.dtsi
85     index 165968d51d8f..8eca5878a877 100644
86     --- a/arch/arm/boot/dts/rk3288.dtsi
87     +++ b/arch/arm/boot/dts/rk3288.dtsi
88     @@ -584,7 +584,7 @@
89     compatible = "rockchip,rk3288-wdt", "snps,dw-wdt";
90     reg = <0xff800000 0x100>;
91     clocks = <&cru PCLK_WDT>;
92     - interrupts = <GIC_SPI 111 IRQ_TYPE_LEVEL_HIGH>;
93     + interrupts = <GIC_SPI 79 IRQ_TYPE_LEVEL_HIGH>;
94     status = "disabled";
95     };
96    
97     diff --git a/arch/arm/mach-omap2/clockdomains7xx_data.c b/arch/arm/mach-omap2/clockdomains7xx_data.c
98     index 57d5df0c1fbd..7581e036bda6 100644
99     --- a/arch/arm/mach-omap2/clockdomains7xx_data.c
100     +++ b/arch/arm/mach-omap2/clockdomains7xx_data.c
101     @@ -331,7 +331,7 @@ static struct clockdomain l4per2_7xx_clkdm = {
102     .dep_bit = DRA7XX_L4PER2_STATDEP_SHIFT,
103     .wkdep_srcs = l4per2_wkup_sleep_deps,
104     .sleepdep_srcs = l4per2_wkup_sleep_deps,
105     - .flags = CLKDM_CAN_HWSUP_SWSUP,
106     + .flags = CLKDM_CAN_SWSUP,
107     };
108    
109     static struct clockdomain mpu0_7xx_clkdm = {
110     diff --git a/arch/arm/mach-orion5x/include/mach/irqs.h b/arch/arm/mach-orion5x/include/mach/irqs.h
111     index a6fa9d8f12d8..2431d9923427 100644
112     --- a/arch/arm/mach-orion5x/include/mach/irqs.h
113     +++ b/arch/arm/mach-orion5x/include/mach/irqs.h
114     @@ -16,42 +16,42 @@
115     /*
116     * Orion Main Interrupt Controller
117     */
118     -#define IRQ_ORION5X_BRIDGE 0
119     -#define IRQ_ORION5X_DOORBELL_H2C 1
120     -#define IRQ_ORION5X_DOORBELL_C2H 2
121     -#define IRQ_ORION5X_UART0 3
122     -#define IRQ_ORION5X_UART1 4
123     -#define IRQ_ORION5X_I2C 5
124     -#define IRQ_ORION5X_GPIO_0_7 6
125     -#define IRQ_ORION5X_GPIO_8_15 7
126     -#define IRQ_ORION5X_GPIO_16_23 8
127     -#define IRQ_ORION5X_GPIO_24_31 9
128     -#define IRQ_ORION5X_PCIE0_ERR 10
129     -#define IRQ_ORION5X_PCIE0_INT 11
130     -#define IRQ_ORION5X_USB1_CTRL 12
131     -#define IRQ_ORION5X_DEV_BUS_ERR 14
132     -#define IRQ_ORION5X_PCI_ERR 15
133     -#define IRQ_ORION5X_USB_BR_ERR 16
134     -#define IRQ_ORION5X_USB0_CTRL 17
135     -#define IRQ_ORION5X_ETH_RX 18
136     -#define IRQ_ORION5X_ETH_TX 19
137     -#define IRQ_ORION5X_ETH_MISC 20
138     -#define IRQ_ORION5X_ETH_SUM 21
139     -#define IRQ_ORION5X_ETH_ERR 22
140     -#define IRQ_ORION5X_IDMA_ERR 23
141     -#define IRQ_ORION5X_IDMA_0 24
142     -#define IRQ_ORION5X_IDMA_1 25
143     -#define IRQ_ORION5X_IDMA_2 26
144     -#define IRQ_ORION5X_IDMA_3 27
145     -#define IRQ_ORION5X_CESA 28
146     -#define IRQ_ORION5X_SATA 29
147     -#define IRQ_ORION5X_XOR0 30
148     -#define IRQ_ORION5X_XOR1 31
149     +#define IRQ_ORION5X_BRIDGE (1 + 0)
150     +#define IRQ_ORION5X_DOORBELL_H2C (1 + 1)
151     +#define IRQ_ORION5X_DOORBELL_C2H (1 + 2)
152     +#define IRQ_ORION5X_UART0 (1 + 3)
153     +#define IRQ_ORION5X_UART1 (1 + 4)
154     +#define IRQ_ORION5X_I2C (1 + 5)
155     +#define IRQ_ORION5X_GPIO_0_7 (1 + 6)
156     +#define IRQ_ORION5X_GPIO_8_15 (1 + 7)
157     +#define IRQ_ORION5X_GPIO_16_23 (1 + 8)
158     +#define IRQ_ORION5X_GPIO_24_31 (1 + 9)
159     +#define IRQ_ORION5X_PCIE0_ERR (1 + 10)
160     +#define IRQ_ORION5X_PCIE0_INT (1 + 11)
161     +#define IRQ_ORION5X_USB1_CTRL (1 + 12)
162     +#define IRQ_ORION5X_DEV_BUS_ERR (1 + 14)
163     +#define IRQ_ORION5X_PCI_ERR (1 + 15)
164     +#define IRQ_ORION5X_USB_BR_ERR (1 + 16)
165     +#define IRQ_ORION5X_USB0_CTRL (1 + 17)
166     +#define IRQ_ORION5X_ETH_RX (1 + 18)
167     +#define IRQ_ORION5X_ETH_TX (1 + 19)
168     +#define IRQ_ORION5X_ETH_MISC (1 + 20)
169     +#define IRQ_ORION5X_ETH_SUM (1 + 21)
170     +#define IRQ_ORION5X_ETH_ERR (1 + 22)
171     +#define IRQ_ORION5X_IDMA_ERR (1 + 23)
172     +#define IRQ_ORION5X_IDMA_0 (1 + 24)
173     +#define IRQ_ORION5X_IDMA_1 (1 + 25)
174     +#define IRQ_ORION5X_IDMA_2 (1 + 26)
175     +#define IRQ_ORION5X_IDMA_3 (1 + 27)
176     +#define IRQ_ORION5X_CESA (1 + 28)
177     +#define IRQ_ORION5X_SATA (1 + 29)
178     +#define IRQ_ORION5X_XOR0 (1 + 30)
179     +#define IRQ_ORION5X_XOR1 (1 + 31)
180    
181     /*
182     * Orion General Purpose Pins
183     */
184     -#define IRQ_ORION5X_GPIO_START 32
185     +#define IRQ_ORION5X_GPIO_START 33
186     #define NR_GPIO_IRQS 32
187    
188     #define NR_IRQS (IRQ_ORION5X_GPIO_START + NR_GPIO_IRQS)
189     diff --git a/arch/arm/mach-orion5x/irq.c b/arch/arm/mach-orion5x/irq.c
190     index cd4bac4d7e43..086ecb87d885 100644
191     --- a/arch/arm/mach-orion5x/irq.c
192     +++ b/arch/arm/mach-orion5x/irq.c
193     @@ -42,7 +42,7 @@ __exception_irq_entry orion5x_legacy_handle_irq(struct pt_regs *regs)
194     stat = readl_relaxed(MAIN_IRQ_CAUSE);
195     stat &= readl_relaxed(MAIN_IRQ_MASK);
196     if (stat) {
197     - unsigned int hwirq = __fls(stat);
198     + unsigned int hwirq = 1 + __fls(stat);
199     handle_IRQ(hwirq, regs);
200     return;
201     }
202     @@ -51,7 +51,7 @@ __exception_irq_entry orion5x_legacy_handle_irq(struct pt_regs *regs)
203    
204     void __init orion5x_init_irq(void)
205     {
206     - orion_irq_init(0, MAIN_IRQ_MASK);
207     + orion_irq_init(1, MAIN_IRQ_MASK);
208    
209     #ifdef CONFIG_MULTI_IRQ_HANDLER
210     set_handle_irq(orion5x_legacy_handle_irq);
211     diff --git a/arch/arm/mach-rockchip/platsmp.c b/arch/arm/mach-rockchip/platsmp.c
212     index 2e6ab67e2284..611a5f96d3ca 100644
213     --- a/arch/arm/mach-rockchip/platsmp.c
214     +++ b/arch/arm/mach-rockchip/platsmp.c
215     @@ -72,29 +72,22 @@ static struct reset_control *rockchip_get_core_reset(int cpu)
216     static int pmu_set_power_domain(int pd, bool on)
217     {
218     u32 val = (on) ? 0 : BIT(pd);
219     + struct reset_control *rstc = rockchip_get_core_reset(pd);
220     int ret;
221    
222     + if (IS_ERR(rstc) && read_cpuid_part() != ARM_CPU_PART_CORTEX_A9) {
223     + pr_err("%s: could not get reset control for core %d\n",
224     + __func__, pd);
225     + return PTR_ERR(rstc);
226     + }
227     +
228     /*
229     * We need to soft reset the cpu when we turn off the cpu power domain,
230     * or else the active processors might be stalled when the individual
231     * processor is powered down.
232     */
233     - if (read_cpuid_part() != ARM_CPU_PART_CORTEX_A9) {
234     - struct reset_control *rstc = rockchip_get_core_reset(pd);
235     -
236     - if (IS_ERR(rstc)) {
237     - pr_err("%s: could not get reset control for core %d\n",
238     - __func__, pd);
239     - return PTR_ERR(rstc);
240     - }
241     -
242     - if (on)
243     - reset_control_deassert(rstc);
244     - else
245     - reset_control_assert(rstc);
246     -
247     - reset_control_put(rstc);
248     - }
249     + if (!IS_ERR(rstc) && !on)
250     + reset_control_assert(rstc);
251    
252     ret = regmap_update_bits(pmu, PMU_PWRDN_CON, BIT(pd), val);
253     if (ret < 0) {
254     @@ -112,6 +105,12 @@ static int pmu_set_power_domain(int pd, bool on)
255     }
256     }
257    
258     + if (!IS_ERR(rstc)) {
259     + if (on)
260     + reset_control_deassert(rstc);
261     + reset_control_put(rstc);
262     + }
263     +
264     return 0;
265     }
266    
267     @@ -147,8 +146,12 @@ static int __cpuinit rockchip_boot_secondary(unsigned int cpu,
268     * the mailbox:
269     * sram_base_addr + 4: 0xdeadbeaf
270     * sram_base_addr + 8: start address for pc
271     + * The cpu0 need to wait the other cpus other than cpu0 entering
272     + * the wfe state.The wait time is affected by many aspects.
273     + * (e.g: cpu frequency, bootrom frequency, sram frequency, ...)
274     * */
275     - udelay(10);
276     + mdelay(1); /* ensure the cpus other than cpu0 to startup */
277     +
278     writel(virt_to_phys(secondary_startup), sram_base_addr + 8);
279     writel(0xDEADBEAF, sram_base_addr + 4);
280     dsb_sev();
281     diff --git a/arch/powerpc/kvm/book3s_hv_rm_mmu.c b/arch/powerpc/kvm/book3s_hv_rm_mmu.c
282     index b027a89737b6..c6d601cc9764 100644
283     --- a/arch/powerpc/kvm/book3s_hv_rm_mmu.c
284     +++ b/arch/powerpc/kvm/book3s_hv_rm_mmu.c
285     @@ -421,14 +421,20 @@ long kvmppc_do_h_remove(struct kvm *kvm, unsigned long flags,
286     rev = real_vmalloc_addr(&kvm->arch.revmap[pte_index]);
287     v = pte & ~HPTE_V_HVLOCK;
288     if (v & HPTE_V_VALID) {
289     - u64 pte1;
290     -
291     - pte1 = be64_to_cpu(hpte[1]);
292     hpte[0] &= ~cpu_to_be64(HPTE_V_VALID);
293     - rb = compute_tlbie_rb(v, pte1, pte_index);
294     + rb = compute_tlbie_rb(v, be64_to_cpu(hpte[1]), pte_index);
295     do_tlbies(kvm, &rb, 1, global_invalidates(kvm, flags), true);
296     - /* Read PTE low word after tlbie to get final R/C values */
297     - remove_revmap_chain(kvm, pte_index, rev, v, pte1);
298     + /*
299     + * The reference (R) and change (C) bits in a HPT
300     + * entry can be set by hardware at any time up until
301     + * the HPTE is invalidated and the TLB invalidation
302     + * sequence has completed. This means that when
303     + * removing a HPTE, we need to re-read the HPTE after
304     + * the invalidation sequence has completed in order to
305     + * obtain reliable values of R and C.
306     + */
307     + remove_revmap_chain(kvm, pte_index, rev, v,
308     + be64_to_cpu(hpte[1]));
309     }
310     r = rev->guest_rpte & ~HPTE_GR_RESERVED;
311     note_hpte_modification(kvm, rev);
312     diff --git a/arch/powerpc/kvm/book3s_hv_rmhandlers.S b/arch/powerpc/kvm/book3s_hv_rmhandlers.S
313     index 4d70df26c402..3b2d2c5b6376 100644
314     --- a/arch/powerpc/kvm/book3s_hv_rmhandlers.S
315     +++ b/arch/powerpc/kvm/book3s_hv_rmhandlers.S
316     @@ -1127,6 +1127,7 @@ END_FTR_SECTION_IFSET(CPU_FTR_HAS_PPR)
317     cmpwi r12, BOOK3S_INTERRUPT_H_DOORBELL
318     bne 3f
319     lbz r0, HSTATE_HOST_IPI(r13)
320     + cmpwi r0, 0
321     beq 4f
322     b guest_exit_cont
323     3:
324     diff --git a/arch/s390/kernel/setup.c b/arch/s390/kernel/setup.c
325     index 7262fe438c99..1942f22e6694 100644
326     --- a/arch/s390/kernel/setup.c
327     +++ b/arch/s390/kernel/setup.c
328     @@ -683,7 +683,7 @@ static void __init setup_memory(void)
329     /*
330     * Setup hardware capabilities.
331     */
332     -static void __init setup_hwcaps(void)
333     +static int __init setup_hwcaps(void)
334     {
335     static const int stfl_bits[6] = { 0, 2, 7, 17, 19, 21 };
336     struct cpuid cpu_id;
337     @@ -749,9 +749,11 @@ static void __init setup_hwcaps(void)
338     elf_hwcap |= HWCAP_S390_TE;
339    
340     /*
341     - * Vector extension HWCAP_S390_VXRS is bit 11.
342     + * Vector extension HWCAP_S390_VXRS is bit 11. The Vector extension
343     + * can be disabled with the "novx" parameter. Use MACHINE_HAS_VX
344     + * instead of facility bit 129.
345     */
346     - if (test_facility(129))
347     + if (MACHINE_HAS_VX)
348     elf_hwcap |= HWCAP_S390_VXRS;
349     get_cpu_id(&cpu_id);
350     add_device_randomness(&cpu_id, sizeof(cpu_id));
351     @@ -788,7 +790,9 @@ static void __init setup_hwcaps(void)
352     strcpy(elf_platform, "z13");
353     break;
354     }
355     + return 0;
356     }
357     +arch_initcall(setup_hwcaps);
358    
359     /*
360     * Add system information as device randomness
361     @@ -871,11 +875,6 @@ void __init setup_arch(char **cmdline_p)
362     cpu_init();
363    
364     /*
365     - * Setup capabilities (ELF_HWCAP & ELF_PLATFORM).
366     - */
367     - setup_hwcaps();
368     -
369     - /*
370     * Create kernel page tables and switch to virtual addressing.
371     */
372     paging_init();
373     diff --git a/arch/x86/crypto/ghash-clmulni-intel_glue.c b/arch/x86/crypto/ghash-clmulni-intel_glue.c
374     index 2079baf06bdd..daf8d2b9a217 100644
375     --- a/arch/x86/crypto/ghash-clmulni-intel_glue.c
376     +++ b/arch/x86/crypto/ghash-clmulni-intel_glue.c
377     @@ -294,6 +294,7 @@ static struct ahash_alg ghash_async_alg = {
378     .cra_name = "ghash",
379     .cra_driver_name = "ghash-clmulni",
380     .cra_priority = 400,
381     + .cra_ctxsize = sizeof(struct ghash_async_ctx),
382     .cra_flags = CRYPTO_ALG_TYPE_AHASH | CRYPTO_ALG_ASYNC,
383     .cra_blocksize = GHASH_BLOCK_SIZE,
384     .cra_type = &crypto_ahash_type,
385     diff --git a/arch/x86/include/asm/desc.h b/arch/x86/include/asm/desc.h
386     index a0bf89fd2647..4e10d73cf018 100644
387     --- a/arch/x86/include/asm/desc.h
388     +++ b/arch/x86/include/asm/desc.h
389     @@ -280,21 +280,6 @@ static inline void clear_LDT(void)
390     set_ldt(NULL, 0);
391     }
392    
393     -/*
394     - * load one particular LDT into the current CPU
395     - */
396     -static inline void load_LDT_nolock(mm_context_t *pc)
397     -{
398     - set_ldt(pc->ldt, pc->size);
399     -}
400     -
401     -static inline void load_LDT(mm_context_t *pc)
402     -{
403     - preempt_disable();
404     - load_LDT_nolock(pc);
405     - preempt_enable();
406     -}
407     -
408     static inline unsigned long get_desc_base(const struct desc_struct *desc)
409     {
410     return (unsigned)(desc->base0 | ((desc->base1) << 16) | ((desc->base2) << 24));
411     diff --git a/arch/x86/include/asm/mmu.h b/arch/x86/include/asm/mmu.h
412     index 09b9620a73b4..364d27481a52 100644
413     --- a/arch/x86/include/asm/mmu.h
414     +++ b/arch/x86/include/asm/mmu.h
415     @@ -9,8 +9,7 @@
416     * we put the segment information here.
417     */
418     typedef struct {
419     - void *ldt;
420     - int size;
421     + struct ldt_struct *ldt;
422    
423     #ifdef CONFIG_X86_64
424     /* True if mm supports a task running in 32 bit compatibility mode. */
425     diff --git a/arch/x86/include/asm/mmu_context.h b/arch/x86/include/asm/mmu_context.h
426     index e997f70f80c4..80d67dd80351 100644
427     --- a/arch/x86/include/asm/mmu_context.h
428     +++ b/arch/x86/include/asm/mmu_context.h
429     @@ -34,6 +34,50 @@ static inline void load_mm_cr4(struct mm_struct *mm) {}
430     #endif
431    
432     /*
433     + * ldt_structs can be allocated, used, and freed, but they are never
434     + * modified while live.
435     + */
436     +struct ldt_struct {
437     + /*
438     + * Xen requires page-aligned LDTs with special permissions. This is
439     + * needed to prevent us from installing evil descriptors such as
440     + * call gates. On native, we could merge the ldt_struct and LDT
441     + * allocations, but it's not worth trying to optimize.
442     + */
443     + struct desc_struct *entries;
444     + int size;
445     +};
446     +
447     +static inline void load_mm_ldt(struct mm_struct *mm)
448     +{
449     + struct ldt_struct *ldt;
450     +
451     + /* lockless_dereference synchronizes with smp_store_release */
452     + ldt = lockless_dereference(mm->context.ldt);
453     +
454     + /*
455     + * Any change to mm->context.ldt is followed by an IPI to all
456     + * CPUs with the mm active. The LDT will not be freed until
457     + * after the IPI is handled by all such CPUs. This means that,
458     + * if the ldt_struct changes before we return, the values we see
459     + * will be safe, and the new values will be loaded before we run
460     + * any user code.
461     + *
462     + * NB: don't try to convert this to use RCU without extreme care.
463     + * We would still need IRQs off, because we don't want to change
464     + * the local LDT after an IPI loaded a newer value than the one
465     + * that we can see.
466     + */
467     +
468     + if (unlikely(ldt))
469     + set_ldt(ldt->entries, ldt->size);
470     + else
471     + clear_LDT();
472     +
473     + DEBUG_LOCKS_WARN_ON(preemptible());
474     +}
475     +
476     +/*
477     * Used for LDT copy/destruction.
478     */
479     int init_new_context(struct task_struct *tsk, struct mm_struct *mm);
480     @@ -78,12 +122,12 @@ static inline void switch_mm(struct mm_struct *prev, struct mm_struct *next,
481     * was called and then modify_ldt changed
482     * prev->context.ldt but suppressed an IPI to this CPU.
483     * In this case, prev->context.ldt != NULL, because we
484     - * never free an LDT while the mm still exists. That
485     - * means that next->context.ldt != prev->context.ldt,
486     - * because mms never share an LDT.
487     + * never set context.ldt to NULL while the mm still
488     + * exists. That means that next->context.ldt !=
489     + * prev->context.ldt, because mms never share an LDT.
490     */
491     if (unlikely(prev->context.ldt != next->context.ldt))
492     - load_LDT_nolock(&next->context);
493     + load_mm_ldt(next);
494     }
495     #ifdef CONFIG_SMP
496     else {
497     @@ -106,7 +150,7 @@ static inline void switch_mm(struct mm_struct *prev, struct mm_struct *next,
498     load_cr3(next->pgd);
499     trace_tlb_flush(TLB_FLUSH_ON_TASK_SWITCH, TLB_FLUSH_ALL);
500     load_mm_cr4(next);
501     - load_LDT_nolock(&next->context);
502     + load_mm_ldt(next);
503     }
504     }
505     #endif
506     diff --git a/arch/x86/kernel/acpi/boot.c b/arch/x86/kernel/acpi/boot.c
507     index dbe76a14c3c9..07bea80223f6 100644
508     --- a/arch/x86/kernel/acpi/boot.c
509     +++ b/arch/x86/kernel/acpi/boot.c
510     @@ -489,6 +489,7 @@ static void __init acpi_sci_ioapic_setup(u8 bus_irq, u16 polarity, u16 trigger,
511     polarity = acpi_sci_flags & ACPI_MADT_POLARITY_MASK;
512    
513     mp_override_legacy_irq(bus_irq, polarity, trigger, gsi);
514     + acpi_penalize_sci_irq(bus_irq, trigger, polarity);
515    
516     /*
517     * stash over-ride to indicate we've been here
518     diff --git a/arch/x86/kernel/cpu/common.c b/arch/x86/kernel/cpu/common.c
519     index a62cf04dac8a..205e0f3df501 100644
520     --- a/arch/x86/kernel/cpu/common.c
521     +++ b/arch/x86/kernel/cpu/common.c
522     @@ -1434,7 +1434,7 @@ void cpu_init(void)
523     load_sp0(t, &current->thread);
524     set_tss_desc(cpu, t);
525     load_TR_desc();
526     - load_LDT(&init_mm.context);
527     + load_mm_ldt(&init_mm);
528    
529     clear_all_debug_regs();
530     dbg_restore_debug_regs();
531     @@ -1483,7 +1483,7 @@ void cpu_init(void)
532     load_sp0(t, thread);
533     set_tss_desc(cpu, t);
534     load_TR_desc();
535     - load_LDT(&init_mm.context);
536     + load_mm_ldt(&init_mm);
537    
538     t->x86_tss.io_bitmap_base = offsetof(struct tss_struct, io_bitmap);
539    
540     diff --git a/arch/x86/kernel/cpu/mcheck/mce_intel.c b/arch/x86/kernel/cpu/mcheck/mce_intel.c
541     index b4a41cf030ed..e166d833cf63 100644
542     --- a/arch/x86/kernel/cpu/mcheck/mce_intel.c
543     +++ b/arch/x86/kernel/cpu/mcheck/mce_intel.c
544     @@ -116,6 +116,27 @@ void mce_intel_hcpu_update(unsigned long cpu)
545     per_cpu(cmci_storm_state, cpu) = CMCI_STORM_NONE;
546     }
547    
548     +static void cmci_toggle_interrupt_mode(bool on)
549     +{
550     + unsigned long flags, *owned;
551     + int bank;
552     + u64 val;
553     +
554     + raw_spin_lock_irqsave(&cmci_discover_lock, flags);
555     + owned = this_cpu_ptr(mce_banks_owned);
556     + for_each_set_bit(bank, owned, MAX_NR_BANKS) {
557     + rdmsrl(MSR_IA32_MCx_CTL2(bank), val);
558     +
559     + if (on)
560     + val |= MCI_CTL2_CMCI_EN;
561     + else
562     + val &= ~MCI_CTL2_CMCI_EN;
563     +
564     + wrmsrl(MSR_IA32_MCx_CTL2(bank), val);
565     + }
566     + raw_spin_unlock_irqrestore(&cmci_discover_lock, flags);
567     +}
568     +
569     unsigned long cmci_intel_adjust_timer(unsigned long interval)
570     {
571     if ((this_cpu_read(cmci_backoff_cnt) > 0) &&
572     @@ -145,7 +166,7 @@ unsigned long cmci_intel_adjust_timer(unsigned long interval)
573     */
574     if (!atomic_read(&cmci_storm_on_cpus)) {
575     __this_cpu_write(cmci_storm_state, CMCI_STORM_NONE);
576     - cmci_reenable();
577     + cmci_toggle_interrupt_mode(true);
578     cmci_recheck();
579     }
580     return CMCI_POLL_INTERVAL;
581     @@ -156,22 +177,6 @@ unsigned long cmci_intel_adjust_timer(unsigned long interval)
582     }
583     }
584    
585     -static void cmci_storm_disable_banks(void)
586     -{
587     - unsigned long flags, *owned;
588     - int bank;
589     - u64 val;
590     -
591     - raw_spin_lock_irqsave(&cmci_discover_lock, flags);
592     - owned = this_cpu_ptr(mce_banks_owned);
593     - for_each_set_bit(bank, owned, MAX_NR_BANKS) {
594     - rdmsrl(MSR_IA32_MCx_CTL2(bank), val);
595     - val &= ~MCI_CTL2_CMCI_EN;
596     - wrmsrl(MSR_IA32_MCx_CTL2(bank), val);
597     - }
598     - raw_spin_unlock_irqrestore(&cmci_discover_lock, flags);
599     -}
600     -
601     static bool cmci_storm_detect(void)
602     {
603     unsigned int cnt = __this_cpu_read(cmci_storm_cnt);
604     @@ -193,7 +198,7 @@ static bool cmci_storm_detect(void)
605     if (cnt <= CMCI_STORM_THRESHOLD)
606     return false;
607    
608     - cmci_storm_disable_banks();
609     + cmci_toggle_interrupt_mode(false);
610     __this_cpu_write(cmci_storm_state, CMCI_STORM_ACTIVE);
611     r = atomic_add_return(1, &cmci_storm_on_cpus);
612     mce_timer_kick(CMCI_STORM_INTERVAL);
613     diff --git a/arch/x86/kernel/cpu/perf_event.c b/arch/x86/kernel/cpu/perf_event.c
614     index aa4e3a74e541..4cc98a4e8ea9 100644
615     --- a/arch/x86/kernel/cpu/perf_event.c
616     +++ b/arch/x86/kernel/cpu/perf_event.c
617     @@ -2170,21 +2170,25 @@ static unsigned long get_segment_base(unsigned int segment)
618     int idx = segment >> 3;
619    
620     if ((segment & SEGMENT_TI_MASK) == SEGMENT_LDT) {
621     + struct ldt_struct *ldt;
622     +
623     if (idx > LDT_ENTRIES)
624     return 0;
625    
626     - if (idx > current->active_mm->context.size)
627     + /* IRQs are off, so this synchronizes with smp_store_release */
628     + ldt = lockless_dereference(current->active_mm->context.ldt);
629     + if (!ldt || idx > ldt->size)
630     return 0;
631    
632     - desc = current->active_mm->context.ldt;
633     + desc = &ldt->entries[idx];
634     } else {
635     if (idx > GDT_ENTRIES)
636     return 0;
637    
638     - desc = raw_cpu_ptr(gdt_page.gdt);
639     + desc = raw_cpu_ptr(gdt_page.gdt) + idx;
640     }
641    
642     - return get_desc_base(desc + idx);
643     + return get_desc_base(desc);
644     }
645    
646     #ifdef CONFIG_COMPAT
647     diff --git a/arch/x86/kernel/ldt.c b/arch/x86/kernel/ldt.c
648     index c37886d759cc..2bcc0525f1c1 100644
649     --- a/arch/x86/kernel/ldt.c
650     +++ b/arch/x86/kernel/ldt.c
651     @@ -12,6 +12,7 @@
652     #include <linux/string.h>
653     #include <linux/mm.h>
654     #include <linux/smp.h>
655     +#include <linux/slab.h>
656     #include <linux/vmalloc.h>
657     #include <linux/uaccess.h>
658    
659     @@ -20,82 +21,82 @@
660     #include <asm/mmu_context.h>
661     #include <asm/syscalls.h>
662    
663     -#ifdef CONFIG_SMP
664     +/* context.lock is held for us, so we don't need any locking. */
665     static void flush_ldt(void *current_mm)
666     {
667     - if (current->active_mm == current_mm)
668     - load_LDT(&current->active_mm->context);
669     + mm_context_t *pc;
670     +
671     + if (current->active_mm != current_mm)
672     + return;
673     +
674     + pc = &current->active_mm->context;
675     + set_ldt(pc->ldt->entries, pc->ldt->size);
676     }
677     -#endif
678    
679     -static int alloc_ldt(mm_context_t *pc, int mincount, int reload)
680     +/* The caller must call finalize_ldt_struct on the result. LDT starts zeroed. */
681     +static struct ldt_struct *alloc_ldt_struct(int size)
682     {
683     - void *oldldt, *newldt;
684     - int oldsize;
685     -
686     - if (mincount <= pc->size)
687     - return 0;
688     - oldsize = pc->size;
689     - mincount = (mincount + (PAGE_SIZE / LDT_ENTRY_SIZE - 1)) &
690     - (~(PAGE_SIZE / LDT_ENTRY_SIZE - 1));
691     - if (mincount * LDT_ENTRY_SIZE > PAGE_SIZE)
692     - newldt = vmalloc(mincount * LDT_ENTRY_SIZE);
693     + struct ldt_struct *new_ldt;
694     + int alloc_size;
695     +
696     + if (size > LDT_ENTRIES)
697     + return NULL;
698     +
699     + new_ldt = kmalloc(sizeof(struct ldt_struct), GFP_KERNEL);
700     + if (!new_ldt)
701     + return NULL;
702     +
703     + BUILD_BUG_ON(LDT_ENTRY_SIZE != sizeof(struct desc_struct));
704     + alloc_size = size * LDT_ENTRY_SIZE;
705     +
706     + /*
707     + * Xen is very picky: it requires a page-aligned LDT that has no
708     + * trailing nonzero bytes in any page that contains LDT descriptors.
709     + * Keep it simple: zero the whole allocation and never allocate less
710     + * than PAGE_SIZE.
711     + */
712     + if (alloc_size > PAGE_SIZE)
713     + new_ldt->entries = vzalloc(alloc_size);
714     else
715     - newldt = (void *)__get_free_page(GFP_KERNEL);
716     -
717     - if (!newldt)
718     - return -ENOMEM;
719     + new_ldt->entries = kzalloc(PAGE_SIZE, GFP_KERNEL);
720    
721     - if (oldsize)
722     - memcpy(newldt, pc->ldt, oldsize * LDT_ENTRY_SIZE);
723     - oldldt = pc->ldt;
724     - memset(newldt + oldsize * LDT_ENTRY_SIZE, 0,
725     - (mincount - oldsize) * LDT_ENTRY_SIZE);
726     + if (!new_ldt->entries) {
727     + kfree(new_ldt);
728     + return NULL;
729     + }
730    
731     - paravirt_alloc_ldt(newldt, mincount);
732     + new_ldt->size = size;
733     + return new_ldt;
734     +}
735    
736     -#ifdef CONFIG_X86_64
737     - /* CHECKME: Do we really need this ? */
738     - wmb();
739     -#endif
740     - pc->ldt = newldt;
741     - wmb();
742     - pc->size = mincount;
743     - wmb();
744     -
745     - if (reload) {
746     -#ifdef CONFIG_SMP
747     - preempt_disable();
748     - load_LDT(pc);
749     - if (!cpumask_equal(mm_cpumask(current->mm),
750     - cpumask_of(smp_processor_id())))
751     - smp_call_function(flush_ldt, current->mm, 1);
752     - preempt_enable();
753     -#else
754     - load_LDT(pc);
755     -#endif
756     - }
757     - if (oldsize) {
758     - paravirt_free_ldt(oldldt, oldsize);
759     - if (oldsize * LDT_ENTRY_SIZE > PAGE_SIZE)
760     - vfree(oldldt);
761     - else
762     - put_page(virt_to_page(oldldt));
763     - }
764     - return 0;
765     +/* After calling this, the LDT is immutable. */
766     +static void finalize_ldt_struct(struct ldt_struct *ldt)
767     +{
768     + paravirt_alloc_ldt(ldt->entries, ldt->size);
769     }
770    
771     -static inline int copy_ldt(mm_context_t *new, mm_context_t *old)
772     +/* context.lock is held */
773     +static void install_ldt(struct mm_struct *current_mm,
774     + struct ldt_struct *ldt)
775     {
776     - int err = alloc_ldt(new, old->size, 0);
777     - int i;
778     + /* Synchronizes with lockless_dereference in load_mm_ldt. */
779     + smp_store_release(&current_mm->context.ldt, ldt);
780     +
781     + /* Activate the LDT for all CPUs using current_mm. */
782     + on_each_cpu_mask(mm_cpumask(current_mm), flush_ldt, current_mm, true);
783     +}
784    
785     - if (err < 0)
786     - return err;
787     +static void free_ldt_struct(struct ldt_struct *ldt)
788     +{
789     + if (likely(!ldt))
790     + return;
791    
792     - for (i = 0; i < old->size; i++)
793     - write_ldt_entry(new->ldt, i, old->ldt + i * LDT_ENTRY_SIZE);
794     - return 0;
795     + paravirt_free_ldt(ldt->entries, ldt->size);
796     + if (ldt->size * LDT_ENTRY_SIZE > PAGE_SIZE)
797     + vfree(ldt->entries);
798     + else
799     + kfree(ldt->entries);
800     + kfree(ldt);
801     }
802    
803     /*
804     @@ -104,17 +105,37 @@ static inline int copy_ldt(mm_context_t *new, mm_context_t *old)
805     */
806     int init_new_context(struct task_struct *tsk, struct mm_struct *mm)
807     {
808     + struct ldt_struct *new_ldt;
809     struct mm_struct *old_mm;
810     int retval = 0;
811    
812     mutex_init(&mm->context.lock);
813     - mm->context.size = 0;
814     old_mm = current->mm;
815     - if (old_mm && old_mm->context.size > 0) {
816     - mutex_lock(&old_mm->context.lock);
817     - retval = copy_ldt(&mm->context, &old_mm->context);
818     - mutex_unlock(&old_mm->context.lock);
819     + if (!old_mm) {
820     + mm->context.ldt = NULL;
821     + return 0;
822     }
823     +
824     + mutex_lock(&old_mm->context.lock);
825     + if (!old_mm->context.ldt) {
826     + mm->context.ldt = NULL;
827     + goto out_unlock;
828     + }
829     +
830     + new_ldt = alloc_ldt_struct(old_mm->context.ldt->size);
831     + if (!new_ldt) {
832     + retval = -ENOMEM;
833     + goto out_unlock;
834     + }
835     +
836     + memcpy(new_ldt->entries, old_mm->context.ldt->entries,
837     + new_ldt->size * LDT_ENTRY_SIZE);
838     + finalize_ldt_struct(new_ldt);
839     +
840     + mm->context.ldt = new_ldt;
841     +
842     +out_unlock:
843     + mutex_unlock(&old_mm->context.lock);
844     return retval;
845     }
846    
847     @@ -125,53 +146,47 @@ int init_new_context(struct task_struct *tsk, struct mm_struct *mm)
848     */
849     void destroy_context(struct mm_struct *mm)
850     {
851     - if (mm->context.size) {
852     -#ifdef CONFIG_X86_32
853     - /* CHECKME: Can this ever happen ? */
854     - if (mm == current->active_mm)
855     - clear_LDT();
856     -#endif
857     - paravirt_free_ldt(mm->context.ldt, mm->context.size);
858     - if (mm->context.size * LDT_ENTRY_SIZE > PAGE_SIZE)
859     - vfree(mm->context.ldt);
860     - else
861     - put_page(virt_to_page(mm->context.ldt));
862     - mm->context.size = 0;
863     - }
864     + free_ldt_struct(mm->context.ldt);
865     + mm->context.ldt = NULL;
866     }
867    
868     static int read_ldt(void __user *ptr, unsigned long bytecount)
869     {
870     - int err;
871     + int retval;
872     unsigned long size;
873     struct mm_struct *mm = current->mm;
874    
875     - if (!mm->context.size)
876     - return 0;
877     + mutex_lock(&mm->context.lock);
878     +
879     + if (!mm->context.ldt) {
880     + retval = 0;
881     + goto out_unlock;
882     + }
883     +
884     if (bytecount > LDT_ENTRY_SIZE * LDT_ENTRIES)
885     bytecount = LDT_ENTRY_SIZE * LDT_ENTRIES;
886    
887     - mutex_lock(&mm->context.lock);
888     - size = mm->context.size * LDT_ENTRY_SIZE;
889     + size = mm->context.ldt->size * LDT_ENTRY_SIZE;
890     if (size > bytecount)
891     size = bytecount;
892    
893     - err = 0;
894     - if (copy_to_user(ptr, mm->context.ldt, size))
895     - err = -EFAULT;
896     - mutex_unlock(&mm->context.lock);
897     - if (err < 0)
898     - goto error_return;
899     + if (copy_to_user(ptr, mm->context.ldt->entries, size)) {
900     + retval = -EFAULT;
901     + goto out_unlock;
902     + }
903     +
904     if (size != bytecount) {
905     - /* zero-fill the rest */
906     - if (clear_user(ptr + size, bytecount - size) != 0) {
907     - err = -EFAULT;
908     - goto error_return;
909     + /* Zero-fill the rest and pretend we read bytecount bytes. */
910     + if (clear_user(ptr + size, bytecount - size)) {
911     + retval = -EFAULT;
912     + goto out_unlock;
913     }
914     }
915     - return bytecount;
916     -error_return:
917     - return err;
918     + retval = bytecount;
919     +
920     +out_unlock:
921     + mutex_unlock(&mm->context.lock);
922     + return retval;
923     }
924    
925     static int read_default_ldt(void __user *ptr, unsigned long bytecount)
926     @@ -195,6 +210,8 @@ static int write_ldt(void __user *ptr, unsigned long bytecount, int oldmode)
927     struct desc_struct ldt;
928     int error;
929     struct user_desc ldt_info;
930     + int oldsize, newsize;
931     + struct ldt_struct *new_ldt, *old_ldt;
932    
933     error = -EINVAL;
934     if (bytecount != sizeof(ldt_info))
935     @@ -213,34 +230,39 @@ static int write_ldt(void __user *ptr, unsigned long bytecount, int oldmode)
936     goto out;
937     }
938    
939     - mutex_lock(&mm->context.lock);
940     - if (ldt_info.entry_number >= mm->context.size) {
941     - error = alloc_ldt(&current->mm->context,
942     - ldt_info.entry_number + 1, 1);
943     - if (error < 0)
944     - goto out_unlock;
945     - }
946     -
947     - /* Allow LDTs to be cleared by the user. */
948     - if (ldt_info.base_addr == 0 && ldt_info.limit == 0) {
949     - if (oldmode || LDT_empty(&ldt_info)) {
950     - memset(&ldt, 0, sizeof(ldt));
951     - goto install;
952     + if ((oldmode && !ldt_info.base_addr && !ldt_info.limit) ||
953     + LDT_empty(&ldt_info)) {
954     + /* The user wants to clear the entry. */
955     + memset(&ldt, 0, sizeof(ldt));
956     + } else {
957     + if (!IS_ENABLED(CONFIG_X86_16BIT) && !ldt_info.seg_32bit) {
958     + error = -EINVAL;
959     + goto out;
960     }
961     +
962     + fill_ldt(&ldt, &ldt_info);
963     + if (oldmode)
964     + ldt.avl = 0;
965     }
966    
967     - if (!IS_ENABLED(CONFIG_X86_16BIT) && !ldt_info.seg_32bit) {
968     - error = -EINVAL;
969     + mutex_lock(&mm->context.lock);
970     +
971     + old_ldt = mm->context.ldt;
972     + oldsize = old_ldt ? old_ldt->size : 0;
973     + newsize = max((int)(ldt_info.entry_number + 1), oldsize);
974     +
975     + error = -ENOMEM;
976     + new_ldt = alloc_ldt_struct(newsize);
977     + if (!new_ldt)
978     goto out_unlock;
979     - }
980    
981     - fill_ldt(&ldt, &ldt_info);
982     - if (oldmode)
983     - ldt.avl = 0;
984     + if (old_ldt)
985     + memcpy(new_ldt->entries, old_ldt->entries, oldsize * LDT_ENTRY_SIZE);
986     + new_ldt->entries[ldt_info.entry_number] = ldt;
987     + finalize_ldt_struct(new_ldt);
988    
989     - /* Install the new entry ... */
990     -install:
991     - write_ldt_entry(mm->context.ldt, ldt_info.entry_number, &ldt);
992     + install_ldt(mm, new_ldt);
993     + free_ldt_struct(old_ldt);
994     error = 0;
995    
996     out_unlock:
997     diff --git a/arch/x86/kernel/process_64.c b/arch/x86/kernel/process_64.c
998     index ddfdbf74f174..5e0bf57d9944 100644
999     --- a/arch/x86/kernel/process_64.c
1000     +++ b/arch/x86/kernel/process_64.c
1001     @@ -122,11 +122,11 @@ void __show_regs(struct pt_regs *regs, int all)
1002     void release_thread(struct task_struct *dead_task)
1003     {
1004     if (dead_task->mm) {
1005     - if (dead_task->mm->context.size) {
1006     + if (dead_task->mm->context.ldt) {
1007     pr_warn("WARNING: dead process %s still has LDT? <%p/%d>\n",
1008     dead_task->comm,
1009     dead_task->mm->context.ldt,
1010     - dead_task->mm->context.size);
1011     + dead_task->mm->context.ldt->size);
1012     BUG();
1013     }
1014     }
1015     diff --git a/arch/x86/kernel/step.c b/arch/x86/kernel/step.c
1016     index 9b4d51d0c0d0..0ccb53a9fcd9 100644
1017     --- a/arch/x86/kernel/step.c
1018     +++ b/arch/x86/kernel/step.c
1019     @@ -5,6 +5,7 @@
1020     #include <linux/mm.h>
1021     #include <linux/ptrace.h>
1022     #include <asm/desc.h>
1023     +#include <asm/mmu_context.h>
1024    
1025     unsigned long convert_ip_to_linear(struct task_struct *child, struct pt_regs *regs)
1026     {
1027     @@ -27,13 +28,14 @@ unsigned long convert_ip_to_linear(struct task_struct *child, struct pt_regs *re
1028     struct desc_struct *desc;
1029     unsigned long base;
1030    
1031     - seg &= ~7UL;
1032     + seg >>= 3;
1033    
1034     mutex_lock(&child->mm->context.lock);
1035     - if (unlikely((seg >> 3) >= child->mm->context.size))
1036     + if (unlikely(!child->mm->context.ldt ||
1037     + seg >= child->mm->context.ldt->size))
1038     addr = -1L; /* bogus selector, access would fault */
1039     else {
1040     - desc = child->mm->context.ldt + seg;
1041     + desc = &child->mm->context.ldt->entries[seg];
1042     base = get_desc_base(desc);
1043    
1044     /* 16-bit code segment? */
1045     diff --git a/arch/x86/kvm/mmu.c b/arch/x86/kvm/mmu.c
1046     index b73337634214..554e877e0bc4 100644
1047     --- a/arch/x86/kvm/mmu.c
1048     +++ b/arch/x86/kvm/mmu.c
1049     @@ -357,12 +357,6 @@ static u64 __get_spte_lockless(u64 *sptep)
1050     {
1051     return ACCESS_ONCE(*sptep);
1052     }
1053     -
1054     -static bool __check_direct_spte_mmio_pf(u64 spte)
1055     -{
1056     - /* It is valid if the spte is zapped. */
1057     - return spte == 0ull;
1058     -}
1059     #else
1060     union split_spte {
1061     struct {
1062     @@ -478,23 +472,6 @@ retry:
1063    
1064     return spte.spte;
1065     }
1066     -
1067     -static bool __check_direct_spte_mmio_pf(u64 spte)
1068     -{
1069     - union split_spte sspte = (union split_spte)spte;
1070     - u32 high_mmio_mask = shadow_mmio_mask >> 32;
1071     -
1072     - /* It is valid if the spte is zapped. */
1073     - if (spte == 0ull)
1074     - return true;
1075     -
1076     - /* It is valid if the spte is being zapped. */
1077     - if (sspte.spte_low == 0ull &&
1078     - (sspte.spte_high & high_mmio_mask) == high_mmio_mask)
1079     - return true;
1080     -
1081     - return false;
1082     -}
1083     #endif
1084    
1085     static bool spte_is_locklessly_modifiable(u64 spte)
1086     @@ -3343,21 +3320,6 @@ static bool quickly_check_mmio_pf(struct kvm_vcpu *vcpu, u64 addr, bool direct)
1087     return vcpu_match_mmio_gva(vcpu, addr);
1088     }
1089    
1090     -
1091     -/*
1092     - * On direct hosts, the last spte is only allows two states
1093     - * for mmio page fault:
1094     - * - It is the mmio spte
1095     - * - It is zapped or it is being zapped.
1096     - *
1097     - * This function completely checks the spte when the last spte
1098     - * is not the mmio spte.
1099     - */
1100     -static bool check_direct_spte_mmio_pf(u64 spte)
1101     -{
1102     - return __check_direct_spte_mmio_pf(spte);
1103     -}
1104     -
1105     static u64 walk_shadow_page_get_mmio_spte(struct kvm_vcpu *vcpu, u64 addr)
1106     {
1107     struct kvm_shadow_walk_iterator iterator;
1108     @@ -3400,13 +3362,6 @@ int handle_mmio_page_fault_common(struct kvm_vcpu *vcpu, u64 addr, bool direct)
1109     }
1110    
1111     /*
1112     - * It's ok if the gva is remapped by other cpus on shadow guest,
1113     - * it's a BUG if the gfn is not a mmio page.
1114     - */
1115     - if (direct && !check_direct_spte_mmio_pf(spte))
1116     - return RET_MMIO_PF_BUG;
1117     -
1118     - /*
1119     * If the page table is zapped by other cpus, let CPU fault again on
1120     * the address.
1121     */
1122     diff --git a/arch/x86/kvm/x86.c b/arch/x86/kvm/x86.c
1123     index ea306adbbc13..47a32f743a91 100644
1124     --- a/arch/x86/kvm/x86.c
1125     +++ b/arch/x86/kvm/x86.c
1126     @@ -2192,7 +2192,7 @@ int kvm_set_msr_common(struct kvm_vcpu *vcpu, struct msr_data *msr_info)
1127     if (guest_cpuid_has_tsc_adjust(vcpu)) {
1128     if (!msr_info->host_initiated) {
1129     s64 adj = data - vcpu->arch.ia32_tsc_adjust_msr;
1130     - kvm_x86_ops->adjust_tsc_offset(vcpu, adj, true);
1131     + adjust_tsc_offset_guest(vcpu, adj);
1132     }
1133     vcpu->arch.ia32_tsc_adjust_msr = data;
1134     }
1135     diff --git a/arch/x86/math-emu/fpu_entry.c b/arch/x86/math-emu/fpu_entry.c
1136     index 9b868124128d..274a52b1183e 100644
1137     --- a/arch/x86/math-emu/fpu_entry.c
1138     +++ b/arch/x86/math-emu/fpu_entry.c
1139     @@ -29,7 +29,6 @@
1140    
1141     #include <asm/uaccess.h>
1142     #include <asm/traps.h>
1143     -#include <asm/desc.h>
1144     #include <asm/user.h>
1145     #include <asm/i387.h>
1146    
1147     @@ -185,7 +184,7 @@ void math_emulate(struct math_emu_info *info)
1148     math_abort(FPU_info, SIGILL);
1149     }
1150    
1151     - code_descriptor = LDT_DESCRIPTOR(FPU_CS);
1152     + code_descriptor = FPU_get_ldt_descriptor(FPU_CS);
1153     if (SEG_D_SIZE(code_descriptor)) {
1154     /* The above test may be wrong, the book is not clear */
1155     /* Segmented 32 bit protected mode */
1156     diff --git a/arch/x86/math-emu/fpu_system.h b/arch/x86/math-emu/fpu_system.h
1157     index 2c614410a5f3..d342fce49447 100644
1158     --- a/arch/x86/math-emu/fpu_system.h
1159     +++ b/arch/x86/math-emu/fpu_system.h
1160     @@ -16,9 +16,24 @@
1161     #include <linux/kernel.h>
1162     #include <linux/mm.h>
1163    
1164     -/* s is always from a cpu register, and the cpu does bounds checking
1165     - * during register load --> no further bounds checks needed */
1166     -#define LDT_DESCRIPTOR(s) (((struct desc_struct *)current->mm->context.ldt)[(s) >> 3])
1167     +#include <asm/desc.h>
1168     +#include <asm/mmu_context.h>
1169     +
1170     +static inline struct desc_struct FPU_get_ldt_descriptor(unsigned seg)
1171     +{
1172     + static struct desc_struct zero_desc;
1173     + struct desc_struct ret = zero_desc;
1174     +
1175     +#ifdef CONFIG_MODIFY_LDT_SYSCALL
1176     + seg >>= 3;
1177     + mutex_lock(&current->mm->context.lock);
1178     + if (current->mm->context.ldt && seg < current->mm->context.ldt->size)
1179     + ret = current->mm->context.ldt->entries[seg];
1180     + mutex_unlock(&current->mm->context.lock);
1181     +#endif
1182     + return ret;
1183     +}
1184     +
1185     #define SEG_D_SIZE(x) ((x).b & (3 << 21))
1186     #define SEG_G_BIT(x) ((x).b & (1 << 23))
1187     #define SEG_GRANULARITY(x) (((x).b & (1 << 23)) ? 4096 : 1)
1188     diff --git a/arch/x86/math-emu/get_address.c b/arch/x86/math-emu/get_address.c
1189     index 6ef5e99380f9..8300db71c2a6 100644
1190     --- a/arch/x86/math-emu/get_address.c
1191     +++ b/arch/x86/math-emu/get_address.c
1192     @@ -20,7 +20,6 @@
1193     #include <linux/stddef.h>
1194    
1195     #include <asm/uaccess.h>
1196     -#include <asm/desc.h>
1197    
1198     #include "fpu_system.h"
1199     #include "exception.h"
1200     @@ -158,7 +157,7 @@ static long pm_address(u_char FPU_modrm, u_char segment,
1201     addr->selector = PM_REG_(segment);
1202     }
1203    
1204     - descriptor = LDT_DESCRIPTOR(PM_REG_(segment));
1205     + descriptor = FPU_get_ldt_descriptor(addr->selector);
1206     base_address = SEG_BASE_ADDR(descriptor);
1207     address = base_address + offset;
1208     limit = base_address
1209     diff --git a/arch/x86/power/cpu.c b/arch/x86/power/cpu.c
1210     index 757678fb26e1..bf9384488399 100644
1211     --- a/arch/x86/power/cpu.c
1212     +++ b/arch/x86/power/cpu.c
1213     @@ -23,6 +23,7 @@
1214     #include <asm/debugreg.h>
1215     #include <asm/fpu-internal.h> /* pcntxt_mask */
1216     #include <asm/cpu.h>
1217     +#include <asm/mmu_context.h>
1218    
1219     #ifdef CONFIG_X86_32
1220     __visible unsigned long saved_context_ebx;
1221     @@ -154,7 +155,7 @@ static void fix_processor_context(void)
1222     syscall_init(); /* This sets MSR_*STAR and related */
1223     #endif
1224     load_TR_desc(); /* This does ltr */
1225     - load_LDT(&current->active_mm->context); /* This does lldt */
1226     + load_mm_ldt(current->active_mm); /* This does lldt */
1227     }
1228    
1229     /**
1230     diff --git a/arch/xtensa/include/asm/traps.h b/arch/xtensa/include/asm/traps.h
1231     index 677bfcf4ee5d..28f33a8b7f5f 100644
1232     --- a/arch/xtensa/include/asm/traps.h
1233     +++ b/arch/xtensa/include/asm/traps.h
1234     @@ -25,30 +25,39 @@ static inline void spill_registers(void)
1235     {
1236     #if XCHAL_NUM_AREGS > 16
1237     __asm__ __volatile__ (
1238     - " call12 1f\n"
1239     + " call8 1f\n"
1240     " _j 2f\n"
1241     " retw\n"
1242     " .align 4\n"
1243     "1:\n"
1244     +#if XCHAL_NUM_AREGS == 32
1245     + " _entry a1, 32\n"
1246     + " addi a8, a0, 3\n"
1247     + " _entry a1, 16\n"
1248     + " mov a12, a12\n"
1249     + " retw\n"
1250     +#else
1251     " _entry a1, 48\n"
1252     - " addi a12, a0, 3\n"
1253     -#if XCHAL_NUM_AREGS > 32
1254     - " .rept (" __stringify(XCHAL_NUM_AREGS) " - 32) / 12\n"
1255     + " call12 1f\n"
1256     + " retw\n"
1257     + " .align 4\n"
1258     + "1:\n"
1259     + " .rept (" __stringify(XCHAL_NUM_AREGS) " - 16) / 12\n"
1260     " _entry a1, 48\n"
1261     " mov a12, a0\n"
1262     " .endr\n"
1263     -#endif
1264     - " _entry a1, 48\n"
1265     + " _entry a1, 16\n"
1266     #if XCHAL_NUM_AREGS % 12 == 0
1267     - " mov a8, a8\n"
1268     -#elif XCHAL_NUM_AREGS % 12 == 4
1269     " mov a12, a12\n"
1270     -#elif XCHAL_NUM_AREGS % 12 == 8
1271     +#elif XCHAL_NUM_AREGS % 12 == 4
1272     " mov a4, a4\n"
1273     +#elif XCHAL_NUM_AREGS % 12 == 8
1274     + " mov a8, a8\n"
1275     #endif
1276     " retw\n"
1277     +#endif
1278     "2:\n"
1279     - : : : "a12", "a13", "memory");
1280     + : : : "a8", "a9", "memory");
1281     #else
1282     __asm__ __volatile__ (
1283     " mov a12, a12\n"
1284     diff --git a/arch/xtensa/kernel/entry.S b/arch/xtensa/kernel/entry.S
1285     index 82bbfa5a05b3..a2a902140c4e 100644
1286     --- a/arch/xtensa/kernel/entry.S
1287     +++ b/arch/xtensa/kernel/entry.S
1288     @@ -568,12 +568,13 @@ user_exception_exit:
1289     * (if we have restored WSBITS-1 frames).
1290     */
1291    
1292     +2:
1293     #if XCHAL_HAVE_THREADPTR
1294     l32i a3, a1, PT_THREADPTR
1295     wur a3, threadptr
1296     #endif
1297    
1298     -2: j common_exception_exit
1299     + j common_exception_exit
1300    
1301     /* This is the kernel exception exit.
1302     * We avoided to do a MOVSP when we entered the exception, but we
1303     @@ -1820,7 +1821,7 @@ ENDPROC(system_call)
1304     mov a12, a0
1305     .endr
1306     #endif
1307     - _entry a1, 48
1308     + _entry a1, 16
1309     #if XCHAL_NUM_AREGS % 12 == 0
1310     mov a8, a8
1311     #elif XCHAL_NUM_AREGS % 12 == 4
1312     @@ -1844,7 +1845,7 @@ ENDPROC(system_call)
1313    
1314     ENTRY(_switch_to)
1315    
1316     - entry a1, 16
1317     + entry a1, 48
1318    
1319     mov a11, a3 # and 'next' (a3)
1320    
1321     diff --git a/drivers/acpi/acpi_pnp.c b/drivers/acpi/acpi_pnp.c
1322     index ff6d8adc9cda..fb765524cc3d 100644
1323     --- a/drivers/acpi/acpi_pnp.c
1324     +++ b/drivers/acpi/acpi_pnp.c
1325     @@ -153,6 +153,7 @@ static const struct acpi_device_id acpi_pnp_device_ids[] = {
1326     {"AEI0250"}, /* PROLiNK 1456VH ISA PnP K56flex Fax Modem */
1327     {"AEI1240"}, /* Actiontec ISA PNP 56K X2 Fax Modem */
1328     {"AKY1021"}, /* Rockwell 56K ACF II Fax+Data+Voice Modem */
1329     + {"ALI5123"}, /* ALi Fast Infrared Controller */
1330     {"AZT4001"}, /* AZT3005 PnP SOUND DEVICE */
1331     {"BDP3336"}, /* Best Data Products Inc. Smart One 336F PnP Modem */
1332     {"BRI0A49"}, /* Boca Complete Ofc Communicator 14.4 Data-FAX */
1333     diff --git a/drivers/acpi/pci_link.c b/drivers/acpi/pci_link.c
1334     index cfd7581cc19f..b09ad554430a 100644
1335     --- a/drivers/acpi/pci_link.c
1336     +++ b/drivers/acpi/pci_link.c
1337     @@ -826,6 +826,22 @@ void acpi_penalize_isa_irq(int irq, int active)
1338     }
1339    
1340     /*
1341     + * Penalize IRQ used by ACPI SCI. If ACPI SCI pin attributes conflict with
1342     + * PCI IRQ attributes, mark ACPI SCI as ISA_ALWAYS so it won't be use for
1343     + * PCI IRQs.
1344     + */
1345     +void acpi_penalize_sci_irq(int irq, int trigger, int polarity)
1346     +{
1347     + if (irq >= 0 && irq < ARRAY_SIZE(acpi_irq_penalty)) {
1348     + if (trigger != ACPI_MADT_TRIGGER_LEVEL ||
1349     + polarity != ACPI_MADT_POLARITY_ACTIVE_LOW)
1350     + acpi_irq_penalty[irq] += PIRQ_PENALTY_ISA_ALWAYS;
1351     + else
1352     + acpi_irq_penalty[irq] += PIRQ_PENALTY_PCI_USING;
1353     + }
1354     +}
1355     +
1356     +/*
1357     * Over-ride default table to reserve additional IRQs for use by ISA
1358     * e.g. acpi_irq_isa=5
1359     * Useful for telling ACPI how not to interfere with your ISA sound card.
1360     diff --git a/drivers/ata/ahci.c b/drivers/ata/ahci.c
1361     index 65ee94454bbd..e6ea912aee31 100644
1362     --- a/drivers/ata/ahci.c
1363     +++ b/drivers/ata/ahci.c
1364     @@ -349,6 +349,7 @@ static const struct pci_device_id ahci_pci_tbl[] = {
1365     /* JMicron 362B and 362C have an AHCI function with IDE class code */
1366     { PCI_VDEVICE(JMICRON, 0x2362), board_ahci_ign_iferr },
1367     { PCI_VDEVICE(JMICRON, 0x236f), board_ahci_ign_iferr },
1368     + /* May need to update quirk_jmicron_async_suspend() for additions */
1369    
1370     /* ATI */
1371     { PCI_VDEVICE(ATI, 0x4380), board_ahci_sb600 }, /* ATI SB600 */
1372     @@ -1377,18 +1378,6 @@ static int ahci_init_one(struct pci_dev *pdev, const struct pci_device_id *ent)
1373     else if (pdev->vendor == 0x1c44 && pdev->device == 0x8000)
1374     ahci_pci_bar = AHCI_PCI_BAR_ENMOTUS;
1375    
1376     - /*
1377     - * The JMicron chip 361/363 contains one SATA controller and one
1378     - * PATA controller,for powering on these both controllers, we must
1379     - * follow the sequence one by one, otherwise one of them can not be
1380     - * powered on successfully, so here we disable the async suspend
1381     - * method for these chips.
1382     - */
1383     - if (pdev->vendor == PCI_VENDOR_ID_JMICRON &&
1384     - (pdev->device == PCI_DEVICE_ID_JMICRON_JMB363 ||
1385     - pdev->device == PCI_DEVICE_ID_JMICRON_JMB361))
1386     - device_disable_async_suspend(&pdev->dev);
1387     -
1388     /* acquire resources */
1389     rc = pcim_enable_device(pdev);
1390     if (rc)
1391     diff --git a/drivers/ata/pata_jmicron.c b/drivers/ata/pata_jmicron.c
1392     index 47e418b8c8ba..4d1a5d2c4287 100644
1393     --- a/drivers/ata/pata_jmicron.c
1394     +++ b/drivers/ata/pata_jmicron.c
1395     @@ -143,18 +143,6 @@ static int jmicron_init_one (struct pci_dev *pdev, const struct pci_device_id *i
1396     };
1397     const struct ata_port_info *ppi[] = { &info, NULL };
1398    
1399     - /*
1400     - * The JMicron chip 361/363 contains one SATA controller and one
1401     - * PATA controller,for powering on these both controllers, we must
1402     - * follow the sequence one by one, otherwise one of them can not be
1403     - * powered on successfully, so here we disable the async suspend
1404     - * method for these chips.
1405     - */
1406     - if (pdev->vendor == PCI_VENDOR_ID_JMICRON &&
1407     - (pdev->device == PCI_DEVICE_ID_JMICRON_JMB363 ||
1408     - pdev->device == PCI_DEVICE_ID_JMICRON_JMB361))
1409     - device_disable_async_suspend(&pdev->dev);
1410     -
1411     return ata_pci_bmdma_init_one(pdev, ppi, &jmicron_sht, NULL, 0);
1412     }
1413    
1414     diff --git a/drivers/auxdisplay/ks0108.c b/drivers/auxdisplay/ks0108.c
1415     index 5b93852392b8..0d752851a1ee 100644
1416     --- a/drivers/auxdisplay/ks0108.c
1417     +++ b/drivers/auxdisplay/ks0108.c
1418     @@ -139,6 +139,7 @@ static int __init ks0108_init(void)
1419    
1420     ks0108_pardevice = parport_register_device(ks0108_parport, KS0108_NAME,
1421     NULL, NULL, NULL, PARPORT_DEV_EXCL, NULL);
1422     + parport_put_port(ks0108_parport);
1423     if (ks0108_pardevice == NULL) {
1424     printk(KERN_ERR KS0108_NAME ": ERROR: "
1425     "parport didn't register new device\n");
1426     diff --git a/drivers/base/devres.c b/drivers/base/devres.c
1427     index c8a53d1e019f..875464690117 100644
1428     --- a/drivers/base/devres.c
1429     +++ b/drivers/base/devres.c
1430     @@ -297,10 +297,10 @@ void * devres_get(struct device *dev, void *new_res,
1431     if (!dr) {
1432     add_dr(dev, &new_dr->node);
1433     dr = new_dr;
1434     - new_dr = NULL;
1435     + new_res = NULL;
1436     }
1437     spin_unlock_irqrestore(&dev->devres_lock, flags);
1438     - devres_free(new_dr);
1439     + devres_free(new_res);
1440    
1441     return dr->data;
1442     }
1443     diff --git a/drivers/base/platform.c b/drivers/base/platform.c
1444     index ebf034b97278..7403de94832c 100644
1445     --- a/drivers/base/platform.c
1446     +++ b/drivers/base/platform.c
1447     @@ -375,9 +375,7 @@ int platform_device_add(struct platform_device *pdev)
1448    
1449     while (--i >= 0) {
1450     struct resource *r = &pdev->resource[i];
1451     - unsigned long type = resource_type(r);
1452     -
1453     - if (type == IORESOURCE_MEM || type == IORESOURCE_IO)
1454     + if (r->parent)
1455     release_resource(r);
1456     }
1457    
1458     @@ -408,9 +406,7 @@ void platform_device_del(struct platform_device *pdev)
1459    
1460     for (i = 0; i < pdev->num_resources; i++) {
1461     struct resource *r = &pdev->resource[i];
1462     - unsigned long type = resource_type(r);
1463     -
1464     - if (type == IORESOURCE_MEM || type == IORESOURCE_IO)
1465     + if (r->parent)
1466     release_resource(r);
1467     }
1468     }
1469     diff --git a/drivers/base/power/clock_ops.c b/drivers/base/power/clock_ops.c
1470     index c7b0fcebf168..ac3c07db92f1 100644
1471     --- a/drivers/base/power/clock_ops.c
1472     +++ b/drivers/base/power/clock_ops.c
1473     @@ -37,7 +37,7 @@ struct pm_clock_entry {
1474     * @dev: The device for the given clock
1475     * @ce: PM clock entry corresponding to the clock.
1476     */
1477     -static inline int __pm_clk_enable(struct device *dev, struct pm_clock_entry *ce)
1478     +static inline void __pm_clk_enable(struct device *dev, struct pm_clock_entry *ce)
1479     {
1480     int ret;
1481    
1482     @@ -49,8 +49,6 @@ static inline int __pm_clk_enable(struct device *dev, struct pm_clock_entry *ce)
1483     dev_err(dev, "%s: failed to enable clk %p, error %d\n",
1484     __func__, ce->clk, ret);
1485     }
1486     -
1487     - return ret;
1488     }
1489    
1490     /**
1491     diff --git a/drivers/clk/pistachio/clk-pistachio.c b/drivers/clk/pistachio/clk-pistachio.c
1492     index 8c0fe8828f99..c4ceb5eaf46c 100644
1493     --- a/drivers/clk/pistachio/clk-pistachio.c
1494     +++ b/drivers/clk/pistachio/clk-pistachio.c
1495     @@ -159,9 +159,15 @@ PNAME(mux_debug) = { "mips_pll_mux", "rpu_v_pll_mux",
1496     "wifi_pll_mux", "bt_pll_mux" };
1497     static u32 mux_debug_idx[] = { 0x0, 0x1, 0x2, 0x4, 0x8, 0x10 };
1498    
1499     -static unsigned int pistachio_critical_clks[] __initdata = {
1500     - CLK_MIPS,
1501     - CLK_PERIPH_SYS,
1502     +static unsigned int pistachio_critical_clks_core[] __initdata = {
1503     + CLK_MIPS
1504     +};
1505     +
1506     +static unsigned int pistachio_critical_clks_sys[] __initdata = {
1507     + PERIPH_CLK_SYS,
1508     + PERIPH_CLK_SYS_BUS,
1509     + PERIPH_CLK_DDR,
1510     + PERIPH_CLK_ROM,
1511     };
1512    
1513     static void __init pistachio_clk_init(struct device_node *np)
1514     @@ -193,8 +199,8 @@ static void __init pistachio_clk_init(struct device_node *np)
1515    
1516     pistachio_clk_register_provider(p);
1517    
1518     - pistachio_clk_force_enable(p, pistachio_critical_clks,
1519     - ARRAY_SIZE(pistachio_critical_clks));
1520     + pistachio_clk_force_enable(p, pistachio_critical_clks_core,
1521     + ARRAY_SIZE(pistachio_critical_clks_core));
1522     }
1523     CLK_OF_DECLARE(pistachio_clk, "img,pistachio-clk", pistachio_clk_init);
1524    
1525     @@ -261,6 +267,9 @@ static void __init pistachio_clk_periph_init(struct device_node *np)
1526     ARRAY_SIZE(pistachio_periph_gates));
1527    
1528     pistachio_clk_register_provider(p);
1529     +
1530     + pistachio_clk_force_enable(p, pistachio_critical_clks_sys,
1531     + ARRAY_SIZE(pistachio_critical_clks_sys));
1532     }
1533     CLK_OF_DECLARE(pistachio_clk_periph, "img,pistachio-clk-periph",
1534     pistachio_clk_periph_init);
1535     diff --git a/drivers/clk/pistachio/clk-pll.c b/drivers/clk/pistachio/clk-pll.c
1536     index de537560bf70..ebd0d2a3b5da 100644
1537     --- a/drivers/clk/pistachio/clk-pll.c
1538     +++ b/drivers/clk/pistachio/clk-pll.c
1539     @@ -115,8 +115,7 @@ static int pll_gf40lp_frac_enable(struct clk_hw *hw)
1540     u32 val;
1541    
1542     val = pll_readl(pll, PLL_CTRL3);
1543     - val &= ~(PLL_FRAC_CTRL3_PD | PLL_FRAC_CTRL3_DACPD |
1544     - PLL_FRAC_CTRL3_DSMPD | PLL_FRAC_CTRL3_FOUTPOSTDIVPD |
1545     + val &= ~(PLL_FRAC_CTRL3_PD | PLL_FRAC_CTRL3_FOUTPOSTDIVPD |
1546     PLL_FRAC_CTRL3_FOUT4PHASEPD | PLL_FRAC_CTRL3_FOUTVCOPD);
1547     pll_writel(pll, val, PLL_CTRL3);
1548    
1549     @@ -233,7 +232,7 @@ static int pll_gf40lp_laint_enable(struct clk_hw *hw)
1550     u32 val;
1551    
1552     val = pll_readl(pll, PLL_CTRL1);
1553     - val &= ~(PLL_INT_CTRL1_PD | PLL_INT_CTRL1_DSMPD |
1554     + val &= ~(PLL_INT_CTRL1_PD |
1555     PLL_INT_CTRL1_FOUTPOSTDIVPD | PLL_INT_CTRL1_FOUTVCOPD);
1556     pll_writel(pll, val, PLL_CTRL1);
1557    
1558     diff --git a/drivers/clk/pxa/clk-pxa25x.c b/drivers/clk/pxa/clk-pxa25x.c
1559     index 6cd88d963a7f..542e45ef5087 100644
1560     --- a/drivers/clk/pxa/clk-pxa25x.c
1561     +++ b/drivers/clk/pxa/clk-pxa25x.c
1562     @@ -79,7 +79,7 @@ unsigned int pxa25x_get_clk_frequency_khz(int info)
1563     clks[3] / 1000000, (clks[3] % 1000000) / 10000);
1564     }
1565    
1566     - return (unsigned int)clks[0];
1567     + return (unsigned int)clks[0] / KHz;
1568     }
1569    
1570     static unsigned long clk_pxa25x_memory_get_rate(struct clk_hw *hw,
1571     diff --git a/drivers/clk/pxa/clk-pxa27x.c b/drivers/clk/pxa/clk-pxa27x.c
1572     index 5f9b54b024b9..267511df1e59 100644
1573     --- a/drivers/clk/pxa/clk-pxa27x.c
1574     +++ b/drivers/clk/pxa/clk-pxa27x.c
1575     @@ -80,7 +80,7 @@ unsigned int pxa27x_get_clk_frequency_khz(int info)
1576     pr_info("System bus clock: %ld.%02ldMHz\n",
1577     clks[4] / 1000000, (clks[4] % 1000000) / 10000);
1578     }
1579     - return (unsigned int)clks[0];
1580     + return (unsigned int)clks[0] / KHz;
1581     }
1582    
1583     bool pxa27x_is_ppll_disabled(void)
1584     diff --git a/drivers/clk/pxa/clk-pxa3xx.c b/drivers/clk/pxa/clk-pxa3xx.c
1585     index ac03ba49e9d1..4af4eed5f89f 100644
1586     --- a/drivers/clk/pxa/clk-pxa3xx.c
1587     +++ b/drivers/clk/pxa/clk-pxa3xx.c
1588     @@ -78,7 +78,7 @@ unsigned int pxa3xx_get_clk_frequency_khz(int info)
1589     pr_info("System bus clock: %ld.%02ldMHz\n",
1590     clks[4] / 1000000, (clks[4] % 1000000) / 10000);
1591     }
1592     - return (unsigned int)clks[0];
1593     + return (unsigned int)clks[0] / KHz;
1594     }
1595    
1596     static unsigned long clk_pxa3xx_ac97_get_rate(struct clk_hw *hw,
1597     diff --git a/drivers/clk/qcom/gcc-apq8084.c b/drivers/clk/qcom/gcc-apq8084.c
1598     index 54a756b90a37..457c540585f9 100644
1599     --- a/drivers/clk/qcom/gcc-apq8084.c
1600     +++ b/drivers/clk/qcom/gcc-apq8084.c
1601     @@ -2105,6 +2105,7 @@ static struct clk_branch gcc_ce1_clk = {
1602     "ce1_clk_src",
1603     },
1604     .num_parents = 1,
1605     + .flags = CLK_SET_RATE_PARENT,
1606     .ops = &clk_branch2_ops,
1607     },
1608     },
1609     diff --git a/drivers/clk/qcom/gcc-msm8916.c b/drivers/clk/qcom/gcc-msm8916.c
1610     index c66f7bc2ae87..5d75bffab141 100644
1611     --- a/drivers/clk/qcom/gcc-msm8916.c
1612     +++ b/drivers/clk/qcom/gcc-msm8916.c
1613     @@ -2278,7 +2278,7 @@ static struct clk_branch gcc_prng_ahb_clk = {
1614     .halt_check = BRANCH_HALT_VOTED,
1615     .clkr = {
1616     .enable_reg = 0x45004,
1617     - .enable_mask = BIT(0),
1618     + .enable_mask = BIT(8),
1619     .hw.init = &(struct clk_init_data){
1620     .name = "gcc_prng_ahb_clk",
1621     .parent_names = (const char *[]){
1622     diff --git a/drivers/clk/qcom/gcc-msm8974.c b/drivers/clk/qcom/gcc-msm8974.c
1623     index c39d09874e74..f06a082e3e87 100644
1624     --- a/drivers/clk/qcom/gcc-msm8974.c
1625     +++ b/drivers/clk/qcom/gcc-msm8974.c
1626     @@ -1783,6 +1783,7 @@ static struct clk_branch gcc_ce1_clk = {
1627     "ce1_clk_src",
1628     },
1629     .num_parents = 1,
1630     + .flags = CLK_SET_RATE_PARENT,
1631     .ops = &clk_branch2_ops,
1632     },
1633     },
1634     diff --git a/drivers/clk/rockchip/clk-rk3288.c b/drivers/clk/rockchip/clk-rk3288.c
1635     index d17eb4528a28..37f96117fd3d 100644
1636     --- a/drivers/clk/rockchip/clk-rk3288.c
1637     +++ b/drivers/clk/rockchip/clk-rk3288.c
1638     @@ -578,7 +578,7 @@ static struct rockchip_clk_branch rk3288_clk_branches[] __initdata = {
1639     COMPOSITE(0, "mac_pll_src", mux_pll_src_npll_cpll_gpll_p, 0,
1640     RK3288_CLKSEL_CON(21), 0, 2, MFLAGS, 8, 5, DFLAGS,
1641     RK3288_CLKGATE_CON(2), 5, GFLAGS),
1642     - MUX(SCLK_MAC, "mac_clk", mux_mac_p, 0,
1643     + MUX(SCLK_MAC, "mac_clk", mux_mac_p, CLK_SET_RATE_PARENT,
1644     RK3288_CLKSEL_CON(21), 4, 1, MFLAGS),
1645     GATE(SCLK_MACREF_OUT, "sclk_macref_out", "mac_clk", 0,
1646     RK3288_CLKGATE_CON(5), 3, GFLAGS),
1647     diff --git a/drivers/clk/samsung/clk-exynos4.c b/drivers/clk/samsung/clk-exynos4.c
1648     index 714d6ba782c8..f7890bf652e6 100644
1649     --- a/drivers/clk/samsung/clk-exynos4.c
1650     +++ b/drivers/clk/samsung/clk-exynos4.c
1651     @@ -85,6 +85,7 @@
1652     #define DIV_PERIL4 0xc560
1653     #define DIV_PERIL5 0xc564
1654     #define E4X12_DIV_CAM1 0xc568
1655     +#define E4X12_GATE_BUS_FSYS1 0xc744
1656     #define GATE_SCLK_CAM 0xc820
1657     #define GATE_IP_CAM 0xc920
1658     #define GATE_IP_TV 0xc924
1659     @@ -1095,6 +1096,7 @@ static struct samsung_gate_clock exynos4x12_gate_clks[] __initdata = {
1660     0),
1661     GATE(CLK_PPMUIMAGE, "ppmuimage", "aclk200", E4X12_GATE_IP_IMAGE, 9, 0,
1662     0),
1663     + GATE(CLK_TSADC, "tsadc", "aclk133", E4X12_GATE_BUS_FSYS1, 16, 0, 0),
1664     GATE(CLK_MIPI_HSI, "mipi_hsi", "aclk133", GATE_IP_FSYS, 10, 0, 0),
1665     GATE(CLK_CHIPID, "chipid", "aclk100", E4X12_GATE_IP_PERIR, 0, 0, 0),
1666     GATE(CLK_SYSREG, "sysreg", "aclk100", E4X12_GATE_IP_PERIR, 1,
1667     diff --git a/drivers/clk/samsung/clk-s5pv210.c b/drivers/clk/samsung/clk-s5pv210.c
1668     index e668e479a697..bdd284249cc3 100644
1669     --- a/drivers/clk/samsung/clk-s5pv210.c
1670     +++ b/drivers/clk/samsung/clk-s5pv210.c
1671     @@ -828,6 +828,8 @@ static void __init __s5pv210_clk_init(struct device_node *np,
1672    
1673     s5pv210_clk_sleep_init();
1674    
1675     + samsung_clk_of_add_provider(np, ctx);
1676     +
1677     pr_info("%s clocks: mout_apll = %ld, mout_mpll = %ld\n"
1678     "\tmout_epll = %ld, mout_vpll = %ld\n",
1679     is_s5p6442 ? "S5P6442" : "S5PV210",
1680     diff --git a/drivers/clk/versatile/clk-sp810.c b/drivers/clk/versatile/clk-sp810.c
1681     index c6e86a9a2aa3..5122ef25f595 100644
1682     --- a/drivers/clk/versatile/clk-sp810.c
1683     +++ b/drivers/clk/versatile/clk-sp810.c
1684     @@ -128,8 +128,8 @@ static struct clk *clk_sp810_timerclken_of_get(struct of_phandle_args *clkspec,
1685     {
1686     struct clk_sp810 *sp810 = data;
1687    
1688     - if (WARN_ON(clkspec->args_count != 1 || clkspec->args[0] >
1689     - ARRAY_SIZE(sp810->timerclken)))
1690     + if (WARN_ON(clkspec->args_count != 1 ||
1691     + clkspec->args[0] >= ARRAY_SIZE(sp810->timerclken)))
1692     return NULL;
1693    
1694     return sp810->timerclken[clkspec->args[0]].clk;
1695     diff --git a/drivers/crypto/vmx/ghashp8-ppc.pl b/drivers/crypto/vmx/ghashp8-ppc.pl
1696     index 0a6f899839dd..d8429cb71f02 100644
1697     --- a/drivers/crypto/vmx/ghashp8-ppc.pl
1698     +++ b/drivers/crypto/vmx/ghashp8-ppc.pl
1699     @@ -61,6 +61,12 @@ $code=<<___;
1700     mtspr 256,r0
1701     li r10,0x30
1702     lvx_u $H,0,r4 # load H
1703     + le?xor r7,r7,r7
1704     + le?addi r7,r7,0x8 # need a vperm start with 08
1705     + le?lvsr 5,0,r7
1706     + le?vspltisb 6,0x0f
1707     + le?vxor 5,5,6 # set a b-endian mask
1708     + le?vperm $H,$H,$H,5
1709    
1710     vspltisb $xC2,-16 # 0xf0
1711     vspltisb $t0,1 # one
1712     diff --git a/drivers/gpu/drm/i915/i915_drv.c b/drivers/gpu/drm/i915/i915_drv.c
1713     index a19d2c71e205..fb91df1631d9 100644
1714     --- a/drivers/gpu/drm/i915/i915_drv.c
1715     +++ b/drivers/gpu/drm/i915/i915_drv.c
1716     @@ -647,15 +647,18 @@ static int i915_drm_suspend_late(struct drm_device *drm_dev, bool hibernation)
1717    
1718     pci_disable_device(drm_dev->pdev);
1719     /*
1720     - * During hibernation on some GEN4 platforms the BIOS may try to access
1721     + * During hibernation on some platforms the BIOS may try to access
1722     * the device even though it's already in D3 and hang the machine. So
1723     * leave the device in D0 on those platforms and hope the BIOS will
1724     - * power down the device properly. Platforms where this was seen:
1725     - * Lenovo Thinkpad X301, X61s
1726     + * power down the device properly. The issue was seen on multiple old
1727     + * GENs with different BIOS vendors, so having an explicit blacklist
1728     + * is inpractical; apply the workaround on everything pre GEN6. The
1729     + * platforms where the issue was seen:
1730     + * Lenovo Thinkpad X301, X61s, X60, T60, X41
1731     + * Fujitsu FSC S7110
1732     + * Acer Aspire 1830T
1733     */
1734     - if (!(hibernation &&
1735     - drm_dev->pdev->subsystem_vendor == PCI_VENDOR_ID_LENOVO &&
1736     - INTEL_INFO(dev_priv)->gen == 4))
1737     + if (!(hibernation && INTEL_INFO(dev_priv)->gen < 6))
1738     pci_set_power_state(drm_dev->pdev, PCI_D3hot);
1739    
1740     return 0;
1741     diff --git a/drivers/gpu/drm/i915/i915_drv.h b/drivers/gpu/drm/i915/i915_drv.h
1742     index 683a9b004c11..7d53d7e15455 100644
1743     --- a/drivers/gpu/drm/i915/i915_drv.h
1744     +++ b/drivers/gpu/drm/i915/i915_drv.h
1745     @@ -3190,13 +3190,13 @@ int intel_freq_opcode(struct drm_i915_private *dev_priv, int val);
1746     #define I915_READ64(reg) dev_priv->uncore.funcs.mmio_readq(dev_priv, (reg), true)
1747    
1748     #define I915_READ64_2x32(lower_reg, upper_reg) ({ \
1749     - u32 upper, lower, tmp; \
1750     - tmp = I915_READ(upper_reg); \
1751     + u32 upper, lower, old_upper, loop = 0; \
1752     + upper = I915_READ(upper_reg); \
1753     do { \
1754     - upper = tmp; \
1755     + old_upper = upper; \
1756     lower = I915_READ(lower_reg); \
1757     - tmp = I915_READ(upper_reg); \
1758     - } while (upper != tmp); \
1759     + upper = I915_READ(upper_reg); \
1760     + } while (upper != old_upper && loop++ < 2); \
1761     (u64)upper << 32 | lower; })
1762    
1763     #define POSTING_READ(reg) (void)I915_READ_NOTRACE(reg)
1764     diff --git a/drivers/gpu/drm/i915/i915_gem_execbuffer.c b/drivers/gpu/drm/i915/i915_gem_execbuffer.c
1765     index a3190e793ed4..479024a4caad 100644
1766     --- a/drivers/gpu/drm/i915/i915_gem_execbuffer.c
1767     +++ b/drivers/gpu/drm/i915/i915_gem_execbuffer.c
1768     @@ -1025,6 +1025,7 @@ i915_gem_execbuffer_move_to_active(struct list_head *vmas,
1769     u32 old_read = obj->base.read_domains;
1770     u32 old_write = obj->base.write_domain;
1771    
1772     + obj->dirty = 1; /* be paranoid */
1773     obj->base.write_domain = obj->base.pending_write_domain;
1774     if (obj->base.write_domain == 0)
1775     obj->base.pending_read_domains |= obj->base.read_domains;
1776     @@ -1032,7 +1033,6 @@ i915_gem_execbuffer_move_to_active(struct list_head *vmas,
1777    
1778     i915_vma_move_to_active(vma, ring);
1779     if (obj->base.write_domain) {
1780     - obj->dirty = 1;
1781     i915_gem_request_assign(&obj->last_write_req, req);
1782    
1783     intel_fb_obj_invalidate(obj, ring, ORIGIN_CS);
1784     diff --git a/drivers/gpu/drm/i915/intel_display.c b/drivers/gpu/drm/i915/intel_display.c
1785     index 57c887843dc3..f208bbc6d58e 100644
1786     --- a/drivers/gpu/drm/i915/intel_display.c
1787     +++ b/drivers/gpu/drm/i915/intel_display.c
1788     @@ -13781,6 +13781,24 @@ void intel_modeset_init(struct drm_device *dev)
1789     if (INTEL_INFO(dev)->num_pipes == 0)
1790     return;
1791    
1792     + /*
1793     + * There may be no VBT; and if the BIOS enabled SSC we can
1794     + * just keep using it to avoid unnecessary flicker. Whereas if the
1795     + * BIOS isn't using it, don't assume it will work even if the VBT
1796     + * indicates as much.
1797     + */
1798     + if (HAS_PCH_IBX(dev) || HAS_PCH_CPT(dev)) {
1799     + bool bios_lvds_use_ssc = !!(I915_READ(PCH_DREF_CONTROL) &
1800     + DREF_SSC1_ENABLE);
1801     +
1802     + if (dev_priv->vbt.lvds_use_ssc != bios_lvds_use_ssc) {
1803     + DRM_DEBUG_KMS("SSC %sabled by BIOS, overriding VBT which says %sabled\n",
1804     + bios_lvds_use_ssc ? "en" : "dis",
1805     + dev_priv->vbt.lvds_use_ssc ? "en" : "dis");
1806     + dev_priv->vbt.lvds_use_ssc = bios_lvds_use_ssc;
1807     + }
1808     + }
1809     +
1810     intel_init_display(dev);
1811     intel_init_audio(dev);
1812    
1813     @@ -14266,7 +14284,6 @@ void intel_modeset_setup_hw_state(struct drm_device *dev,
1814    
1815     void intel_modeset_gem_init(struct drm_device *dev)
1816     {
1817     - struct drm_i915_private *dev_priv = dev->dev_private;
1818     struct drm_crtc *c;
1819     struct drm_i915_gem_object *obj;
1820     int ret;
1821     @@ -14275,16 +14292,6 @@ void intel_modeset_gem_init(struct drm_device *dev)
1822     intel_init_gt_powersave(dev);
1823     mutex_unlock(&dev->struct_mutex);
1824    
1825     - /*
1826     - * There may be no VBT; and if the BIOS enabled SSC we can
1827     - * just keep using it to avoid unnecessary flicker. Whereas if the
1828     - * BIOS isn't using it, don't assume it will work even if the VBT
1829     - * indicates as much.
1830     - */
1831     - if (HAS_PCH_IBX(dev) || HAS_PCH_CPT(dev))
1832     - dev_priv->vbt.lvds_use_ssc = !!(I915_READ(PCH_DREF_CONTROL) &
1833     - DREF_SSC1_ENABLE);
1834     -
1835     intel_modeset_init_hw(dev);
1836    
1837     intel_setup_overlay(dev);
1838     diff --git a/drivers/gpu/drm/i915/intel_dp.c b/drivers/gpu/drm/i915/intel_dp.c
1839     index b1fe32b119ef..fb2983f77141 100644
1840     --- a/drivers/gpu/drm/i915/intel_dp.c
1841     +++ b/drivers/gpu/drm/i915/intel_dp.c
1842     @@ -4691,9 +4691,12 @@ intel_dp_hpd_pulse(struct intel_digital_port *intel_dig_port, bool long_hpd)
1843    
1844     intel_dp_probe_oui(intel_dp);
1845    
1846     - if (!intel_dp_probe_mst(intel_dp))
1847     + if (!intel_dp_probe_mst(intel_dp)) {
1848     + drm_modeset_lock(&dev->mode_config.connection_mutex, NULL);
1849     + intel_dp_check_link_status(intel_dp);
1850     + drm_modeset_unlock(&dev->mode_config.connection_mutex);
1851     goto mst_fail;
1852     -
1853     + }
1854     } else {
1855     if (intel_dp->is_mst) {
1856     if (intel_dp_check_mst_status(intel_dp) == -EINVAL)
1857     @@ -4701,10 +4704,6 @@ intel_dp_hpd_pulse(struct intel_digital_port *intel_dig_port, bool long_hpd)
1858     }
1859    
1860     if (!intel_dp->is_mst) {
1861     - /*
1862     - * we'll check the link status via the normal hot plug path later -
1863     - * but for short hpds we should check it now
1864     - */
1865     drm_modeset_lock(&dev->mode_config.connection_mutex, NULL);
1866     intel_dp_check_link_status(intel_dp);
1867     drm_modeset_unlock(&dev->mode_config.connection_mutex);
1868     diff --git a/drivers/gpu/drm/i915/intel_dsi.c b/drivers/gpu/drm/i915/intel_dsi.c
1869     index 51966426addf..c7a0b8d8fac9 100644
1870     --- a/drivers/gpu/drm/i915/intel_dsi.c
1871     +++ b/drivers/gpu/drm/i915/intel_dsi.c
1872     @@ -1036,11 +1036,7 @@ void intel_dsi_init(struct drm_device *dev)
1873     intel_connector->unregister = intel_connector_unregister;
1874    
1875     /* Pipe A maps to MIPI DSI port A, pipe B maps to MIPI DSI port C */
1876     - if (dev_priv->vbt.dsi.config->dual_link) {
1877     - /* XXX: does dual link work on either pipe? */
1878     - intel_encoder->crtc_mask = (1 << PIPE_A);
1879     - intel_dsi->ports = ((1 << PORT_A) | (1 << PORT_C));
1880     - } else if (dev_priv->vbt.dsi.port == DVO_PORT_MIPIA) {
1881     + if (dev_priv->vbt.dsi.port == DVO_PORT_MIPIA) {
1882     intel_encoder->crtc_mask = (1 << PIPE_A);
1883     intel_dsi->ports = (1 << PORT_A);
1884     } else if (dev_priv->vbt.dsi.port == DVO_PORT_MIPIC) {
1885     @@ -1048,6 +1044,9 @@ void intel_dsi_init(struct drm_device *dev)
1886     intel_dsi->ports = (1 << PORT_C);
1887     }
1888    
1889     + if (dev_priv->vbt.dsi.config->dual_link)
1890     + intel_dsi->ports = ((1 << PORT_A) | (1 << PORT_C));
1891     +
1892     /* Create a DSI host (and a device) for each port. */
1893     for_each_dsi_port(port, intel_dsi->ports) {
1894     struct intel_dsi_host *host;
1895     diff --git a/drivers/gpu/drm/qxl/qxl_display.c b/drivers/gpu/drm/qxl/qxl_display.c
1896     index 4a0a8b29b0a1..32248791bc4b 100644
1897     --- a/drivers/gpu/drm/qxl/qxl_display.c
1898     +++ b/drivers/gpu/drm/qxl/qxl_display.c
1899     @@ -160,9 +160,35 @@ static int qxl_add_monitors_config_modes(struct drm_connector *connector,
1900     *pwidth = head->width;
1901     *pheight = head->height;
1902     drm_mode_probed_add(connector, mode);
1903     + /* remember the last custom size for mode validation */
1904     + qdev->monitors_config_width = mode->hdisplay;
1905     + qdev->monitors_config_height = mode->vdisplay;
1906     return 1;
1907     }
1908    
1909     +static struct mode_size {
1910     + int w;
1911     + int h;
1912     +} common_modes[] = {
1913     + { 640, 480},
1914     + { 720, 480},
1915     + { 800, 600},
1916     + { 848, 480},
1917     + {1024, 768},
1918     + {1152, 768},
1919     + {1280, 720},
1920     + {1280, 800},
1921     + {1280, 854},
1922     + {1280, 960},
1923     + {1280, 1024},
1924     + {1440, 900},
1925     + {1400, 1050},
1926     + {1680, 1050},
1927     + {1600, 1200},
1928     + {1920, 1080},
1929     + {1920, 1200}
1930     +};
1931     +
1932     static int qxl_add_common_modes(struct drm_connector *connector,
1933     unsigned pwidth,
1934     unsigned pheight)
1935     @@ -170,29 +196,6 @@ static int qxl_add_common_modes(struct drm_connector *connector,
1936     struct drm_device *dev = connector->dev;
1937     struct drm_display_mode *mode = NULL;
1938     int i;
1939     - struct mode_size {
1940     - int w;
1941     - int h;
1942     - } common_modes[] = {
1943     - { 640, 480},
1944     - { 720, 480},
1945     - { 800, 600},
1946     - { 848, 480},
1947     - {1024, 768},
1948     - {1152, 768},
1949     - {1280, 720},
1950     - {1280, 800},
1951     - {1280, 854},
1952     - {1280, 960},
1953     - {1280, 1024},
1954     - {1440, 900},
1955     - {1400, 1050},
1956     - {1680, 1050},
1957     - {1600, 1200},
1958     - {1920, 1080},
1959     - {1920, 1200}
1960     - };
1961     -
1962     for (i = 0; i < ARRAY_SIZE(common_modes); i++) {
1963     mode = drm_cvt_mode(dev, common_modes[i].w, common_modes[i].h,
1964     60, false, false, false);
1965     @@ -823,11 +826,22 @@ static int qxl_conn_get_modes(struct drm_connector *connector)
1966     static int qxl_conn_mode_valid(struct drm_connector *connector,
1967     struct drm_display_mode *mode)
1968     {
1969     + struct drm_device *ddev = connector->dev;
1970     + struct qxl_device *qdev = ddev->dev_private;
1971     + int i;
1972     +
1973     /* TODO: is this called for user defined modes? (xrandr --add-mode)
1974     * TODO: check that the mode fits in the framebuffer */
1975     - DRM_DEBUG("%s: %dx%d status=%d\n", mode->name, mode->hdisplay,
1976     - mode->vdisplay, mode->status);
1977     - return MODE_OK;
1978     +
1979     + if(qdev->monitors_config_width == mode->hdisplay &&
1980     + qdev->monitors_config_height == mode->vdisplay)
1981     + return MODE_OK;
1982     +
1983     + for (i = 0; i < ARRAY_SIZE(common_modes); i++) {
1984     + if (common_modes[i].w == mode->hdisplay && common_modes[i].h == mode->vdisplay)
1985     + return MODE_OK;
1986     + }
1987     + return MODE_BAD;
1988     }
1989    
1990     static struct drm_encoder *qxl_best_encoder(struct drm_connector *connector)
1991     diff --git a/drivers/gpu/drm/qxl/qxl_drv.h b/drivers/gpu/drm/qxl/qxl_drv.h
1992     index 7c6cafe21f5f..e66143cc1a7a 100644
1993     --- a/drivers/gpu/drm/qxl/qxl_drv.h
1994     +++ b/drivers/gpu/drm/qxl/qxl_drv.h
1995     @@ -325,6 +325,8 @@ struct qxl_device {
1996     struct work_struct fb_work;
1997    
1998     struct drm_property *hotplug_mode_update_property;
1999     + int monitors_config_width;
2000     + int monitors_config_height;
2001     };
2002    
2003     /* forward declaration for QXL_INFO_IO */
2004     diff --git a/drivers/gpu/drm/radeon/atombios_dp.c b/drivers/gpu/drm/radeon/atombios_dp.c
2005     index b435c859dcbc..447dbfa6c793 100644
2006     --- a/drivers/gpu/drm/radeon/atombios_dp.c
2007     +++ b/drivers/gpu/drm/radeon/atombios_dp.c
2008     @@ -171,8 +171,9 @@ radeon_dp_aux_transfer_atom(struct drm_dp_aux *aux, struct drm_dp_aux_msg *msg)
2009     return -E2BIG;
2010    
2011     tx_buf[0] = msg->address & 0xff;
2012     - tx_buf[1] = msg->address >> 8;
2013     - tx_buf[2] = msg->request << 4;
2014     + tx_buf[1] = (msg->address >> 8) & 0xff;
2015     + tx_buf[2] = (msg->request << 4) |
2016     + ((msg->address >> 16) & 0xf);
2017     tx_buf[3] = msg->size ? (msg->size - 1) : 0;
2018    
2019     switch (msg->request & ~DP_AUX_I2C_MOT) {
2020     diff --git a/drivers/gpu/drm/radeon/radeon_audio.c b/drivers/gpu/drm/radeon/radeon_audio.c
2021     index 59b3d3221294..d77dd1430d58 100644
2022     --- a/drivers/gpu/drm/radeon/radeon_audio.c
2023     +++ b/drivers/gpu/drm/radeon/radeon_audio.c
2024     @@ -522,13 +522,15 @@ static int radeon_audio_set_avi_packet(struct drm_encoder *encoder,
2025     return err;
2026     }
2027    
2028     - if (drm_rgb_quant_range_selectable(radeon_connector_edid(connector))) {
2029     - if (radeon_encoder->output_csc == RADEON_OUTPUT_CSC_TVRGB)
2030     - frame.quantization_range = HDMI_QUANTIZATION_RANGE_LIMITED;
2031     - else
2032     - frame.quantization_range = HDMI_QUANTIZATION_RANGE_FULL;
2033     - } else {
2034     - frame.quantization_range = HDMI_QUANTIZATION_RANGE_DEFAULT;
2035     + if (radeon_encoder->output_csc != RADEON_OUTPUT_CSC_BYPASS) {
2036     + if (drm_rgb_quant_range_selectable(radeon_connector_edid(connector))) {
2037     + if (radeon_encoder->output_csc == RADEON_OUTPUT_CSC_TVRGB)
2038     + frame.quantization_range = HDMI_QUANTIZATION_RANGE_LIMITED;
2039     + else
2040     + frame.quantization_range = HDMI_QUANTIZATION_RANGE_FULL;
2041     + } else {
2042     + frame.quantization_range = HDMI_QUANTIZATION_RANGE_DEFAULT;
2043     + }
2044     }
2045    
2046     err = hdmi_avi_infoframe_pack(&frame, buffer, sizeof(buffer));
2047     diff --git a/drivers/gpu/drm/radeon/radeon_connectors.c b/drivers/gpu/drm/radeon/radeon_connectors.c
2048     index 94b21ae70ef7..5a2cafb4f1bc 100644
2049     --- a/drivers/gpu/drm/radeon/radeon_connectors.c
2050     +++ b/drivers/gpu/drm/radeon/radeon_connectors.c
2051     @@ -95,6 +95,11 @@ void radeon_connector_hotplug(struct drm_connector *connector)
2052     if (!radeon_hpd_sense(rdev, radeon_connector->hpd.hpd)) {
2053     drm_helper_connector_dpms(connector, DRM_MODE_DPMS_OFF);
2054     } else if (radeon_dp_needs_link_train(radeon_connector)) {
2055     + /* Don't try to start link training before we
2056     + * have the dpcd */
2057     + if (!radeon_dp_getdpcd(radeon_connector))
2058     + return;
2059     +
2060     /* set it to OFF so that drm_helper_connector_dpms()
2061     * won't return immediately since the current state
2062     * is ON at this point.
2063     diff --git a/drivers/gpu/drm/radeon/radeon_dp_auxch.c b/drivers/gpu/drm/radeon/radeon_dp_auxch.c
2064     index fcbd60bb0349..3b0c229d7dcd 100644
2065     --- a/drivers/gpu/drm/radeon/radeon_dp_auxch.c
2066     +++ b/drivers/gpu/drm/radeon/radeon_dp_auxch.c
2067     @@ -116,8 +116,8 @@ radeon_dp_aux_transfer_native(struct drm_dp_aux *aux, struct drm_dp_aux_msg *msg
2068     AUX_SW_WR_BYTES(bytes));
2069    
2070     /* write the data header into the registers */
2071     - /* request, addres, msg size */
2072     - byte = (msg->request << 4);
2073     + /* request, address, msg size */
2074     + byte = (msg->request << 4) | ((msg->address >> 16) & 0xf);
2075     WREG32(AUX_SW_DATA + aux_offset[instance],
2076     AUX_SW_DATA_MASK(byte) | AUX_SW_AUTOINCREMENT_DISABLE);
2077    
2078     diff --git a/drivers/hid/hid-cp2112.c b/drivers/hid/hid-cp2112.c
2079     index a2dbbbe0d8d7..39bf74793b8b 100644
2080     --- a/drivers/hid/hid-cp2112.c
2081     +++ b/drivers/hid/hid-cp2112.c
2082     @@ -537,7 +537,7 @@ static int cp2112_xfer(struct i2c_adapter *adap, u16 addr,
2083     struct cp2112_device *dev = (struct cp2112_device *)adap->algo_data;
2084     struct hid_device *hdev = dev->hdev;
2085     u8 buf[64];
2086     - __be16 word;
2087     + __le16 word;
2088     ssize_t count;
2089     size_t read_length = 0;
2090     unsigned int retries;
2091     @@ -554,7 +554,7 @@ static int cp2112_xfer(struct i2c_adapter *adap, u16 addr,
2092     if (I2C_SMBUS_READ == read_write)
2093     count = cp2112_read_req(buf, addr, read_length);
2094     else
2095     - count = cp2112_write_req(buf, addr, data->byte, NULL,
2096     + count = cp2112_write_req(buf, addr, command, NULL,
2097     0);
2098     break;
2099     case I2C_SMBUS_BYTE_DATA:
2100     @@ -569,7 +569,7 @@ static int cp2112_xfer(struct i2c_adapter *adap, u16 addr,
2101     break;
2102     case I2C_SMBUS_WORD_DATA:
2103     read_length = 2;
2104     - word = cpu_to_be16(data->word);
2105     + word = cpu_to_le16(data->word);
2106    
2107     if (I2C_SMBUS_READ == read_write)
2108     count = cp2112_write_read_req(buf, addr, read_length,
2109     @@ -582,7 +582,7 @@ static int cp2112_xfer(struct i2c_adapter *adap, u16 addr,
2110     size = I2C_SMBUS_WORD_DATA;
2111     read_write = I2C_SMBUS_READ;
2112     read_length = 2;
2113     - word = cpu_to_be16(data->word);
2114     + word = cpu_to_le16(data->word);
2115    
2116     count = cp2112_write_read_req(buf, addr, read_length, command,
2117     (u8 *)&word, 2);
2118     @@ -675,7 +675,7 @@ static int cp2112_xfer(struct i2c_adapter *adap, u16 addr,
2119     data->byte = buf[0];
2120     break;
2121     case I2C_SMBUS_WORD_DATA:
2122     - data->word = be16_to_cpup((__be16 *)buf);
2123     + data->word = le16_to_cpup((__le16 *)buf);
2124     break;
2125     case I2C_SMBUS_BLOCK_DATA:
2126     if (read_length > I2C_SMBUS_BLOCK_MAX) {
2127     diff --git a/drivers/hid/usbhid/hid-core.c b/drivers/hid/usbhid/hid-core.c
2128     index bfbe1bedda7f..eab5bd6a2442 100644
2129     --- a/drivers/hid/usbhid/hid-core.c
2130     +++ b/drivers/hid/usbhid/hid-core.c
2131     @@ -164,7 +164,7 @@ static void hid_io_error(struct hid_device *hid)
2132     if (time_after(jiffies, usbhid->stop_retry)) {
2133    
2134     /* Retries failed, so do a port reset unless we lack bandwidth*/
2135     - if (test_bit(HID_NO_BANDWIDTH, &usbhid->iofl)
2136     + if (!test_bit(HID_NO_BANDWIDTH, &usbhid->iofl)
2137     && !test_and_set_bit(HID_RESET_PENDING, &usbhid->iofl)) {
2138    
2139     schedule_work(&usbhid->reset_work);
2140     diff --git a/drivers/iio/gyro/Kconfig b/drivers/iio/gyro/Kconfig
2141     index b3d0e94f72eb..8d2439345673 100644
2142     --- a/drivers/iio/gyro/Kconfig
2143     +++ b/drivers/iio/gyro/Kconfig
2144     @@ -53,7 +53,8 @@ config ADXRS450
2145     config BMG160
2146     tristate "BOSCH BMG160 Gyro Sensor"
2147     depends on I2C
2148     - select IIO_TRIGGERED_BUFFER if IIO_BUFFER
2149     + select IIO_BUFFER
2150     + select IIO_TRIGGERED_BUFFER
2151     help
2152     Say yes here to build support for Bosch BMG160 Tri-axis Gyro Sensor
2153     driver. This driver also supports BMI055 gyroscope.
2154     diff --git a/drivers/iio/imu/adis16400_core.c b/drivers/iio/imu/adis16400_core.c
2155     index 2fd68f2219a7..d42e4fe2c7ed 100644
2156     --- a/drivers/iio/imu/adis16400_core.c
2157     +++ b/drivers/iio/imu/adis16400_core.c
2158     @@ -780,7 +780,7 @@ static struct adis16400_chip_info adis16400_chips[] = {
2159     .flags = ADIS16400_HAS_PROD_ID |
2160     ADIS16400_HAS_SERIAL_NUMBER |
2161     ADIS16400_BURST_DIAG_STAT,
2162     - .gyro_scale_micro = IIO_DEGREE_TO_RAD(10000), /* 0.01 deg/s */
2163     + .gyro_scale_micro = IIO_DEGREE_TO_RAD(40000), /* 0.04 deg/s */
2164     .accel_scale_micro = IIO_G_TO_M_S_2(833), /* 1/1200 g */
2165     .temp_scale_nano = 73860000, /* 0.07386 C */
2166     .temp_offset = 31000000 / 73860, /* 31 C = 0x00 */
2167     diff --git a/drivers/iio/imu/adis16480.c b/drivers/iio/imu/adis16480.c
2168     index 989605dd6f78..b94bfd3f595b 100644
2169     --- a/drivers/iio/imu/adis16480.c
2170     +++ b/drivers/iio/imu/adis16480.c
2171     @@ -110,6 +110,10 @@
2172     struct adis16480_chip_info {
2173     unsigned int num_channels;
2174     const struct iio_chan_spec *channels;
2175     + unsigned int gyro_max_val;
2176     + unsigned int gyro_max_scale;
2177     + unsigned int accel_max_val;
2178     + unsigned int accel_max_scale;
2179     };
2180    
2181     struct adis16480 {
2182     @@ -497,19 +501,21 @@ static int adis16480_set_filter_freq(struct iio_dev *indio_dev,
2183     static int adis16480_read_raw(struct iio_dev *indio_dev,
2184     const struct iio_chan_spec *chan, int *val, int *val2, long info)
2185     {
2186     + struct adis16480 *st = iio_priv(indio_dev);
2187     +
2188     switch (info) {
2189     case IIO_CHAN_INFO_RAW:
2190     return adis_single_conversion(indio_dev, chan, 0, val);
2191     case IIO_CHAN_INFO_SCALE:
2192     switch (chan->type) {
2193     case IIO_ANGL_VEL:
2194     - *val = 0;
2195     - *val2 = IIO_DEGREE_TO_RAD(20000); /* 0.02 degree/sec */
2196     - return IIO_VAL_INT_PLUS_MICRO;
2197     + *val = st->chip_info->gyro_max_scale;
2198     + *val2 = st->chip_info->gyro_max_val;
2199     + return IIO_VAL_FRACTIONAL;
2200     case IIO_ACCEL:
2201     - *val = 0;
2202     - *val2 = IIO_G_TO_M_S_2(800); /* 0.8 mg */
2203     - return IIO_VAL_INT_PLUS_MICRO;
2204     + *val = st->chip_info->accel_max_scale;
2205     + *val2 = st->chip_info->accel_max_val;
2206     + return IIO_VAL_FRACTIONAL;
2207     case IIO_MAGN:
2208     *val = 0;
2209     *val2 = 100; /* 0.0001 gauss */
2210     @@ -674,18 +680,39 @@ static const struct adis16480_chip_info adis16480_chip_info[] = {
2211     [ADIS16375] = {
2212     .channels = adis16485_channels,
2213     .num_channels = ARRAY_SIZE(adis16485_channels),
2214     + /*
2215     + * storing the value in rad/degree and the scale in degree
2216     + * gives us the result in rad and better precession than
2217     + * storing the scale directly in rad.
2218     + */
2219     + .gyro_max_val = IIO_RAD_TO_DEGREE(22887),
2220     + .gyro_max_scale = 300,
2221     + .accel_max_val = IIO_M_S_2_TO_G(21973),
2222     + .accel_max_scale = 18,
2223     },
2224     [ADIS16480] = {
2225     .channels = adis16480_channels,
2226     .num_channels = ARRAY_SIZE(adis16480_channels),
2227     + .gyro_max_val = IIO_RAD_TO_DEGREE(22500),
2228     + .gyro_max_scale = 450,
2229     + .accel_max_val = IIO_M_S_2_TO_G(12500),
2230     + .accel_max_scale = 5,
2231     },
2232     [ADIS16485] = {
2233     .channels = adis16485_channels,
2234     .num_channels = ARRAY_SIZE(adis16485_channels),
2235     + .gyro_max_val = IIO_RAD_TO_DEGREE(22500),
2236     + .gyro_max_scale = 450,
2237     + .accel_max_val = IIO_M_S_2_TO_G(20000),
2238     + .accel_max_scale = 5,
2239     },
2240     [ADIS16488] = {
2241     .channels = adis16480_channels,
2242     .num_channels = ARRAY_SIZE(adis16480_channels),
2243     + .gyro_max_val = IIO_RAD_TO_DEGREE(22500),
2244     + .gyro_max_scale = 450,
2245     + .accel_max_val = IIO_M_S_2_TO_G(22500),
2246     + .accel_max_scale = 18,
2247     },
2248     };
2249    
2250     diff --git a/drivers/iio/industrialio-buffer.c b/drivers/iio/industrialio-buffer.c
2251     index df919f44d513..7fa280b28ecb 100644
2252     --- a/drivers/iio/industrialio-buffer.c
2253     +++ b/drivers/iio/industrialio-buffer.c
2254     @@ -151,7 +151,7 @@ unsigned int iio_buffer_poll(struct file *filp,
2255     struct iio_buffer *rb = indio_dev->buffer;
2256    
2257     if (!indio_dev->info)
2258     - return -ENODEV;
2259     + return 0;
2260    
2261     poll_wait(filp, &rb->pollq, wait);
2262     if (iio_buffer_ready(indio_dev, rb, rb->watermark, 0))
2263     diff --git a/drivers/iio/industrialio-event.c b/drivers/iio/industrialio-event.c
2264     index a99692ba91bc..69b8c338fa89 100644
2265     --- a/drivers/iio/industrialio-event.c
2266     +++ b/drivers/iio/industrialio-event.c
2267     @@ -84,7 +84,7 @@ static unsigned int iio_event_poll(struct file *filep,
2268     unsigned int events = 0;
2269    
2270     if (!indio_dev->info)
2271     - return -ENODEV;
2272     + return events;
2273    
2274     poll_wait(filep, &ev_int->wait, wait);
2275    
2276     diff --git a/drivers/of/address.c b/drivers/of/address.c
2277     index 8bfda6ade2c0..384574c3987c 100644
2278     --- a/drivers/of/address.c
2279     +++ b/drivers/of/address.c
2280     @@ -845,10 +845,10 @@ struct device_node *of_find_matching_node_by_address(struct device_node *from,
2281     struct resource res;
2282    
2283     while (dn) {
2284     - if (of_address_to_resource(dn, 0, &res))
2285     - continue;
2286     - if (res.start == base_address)
2287     + if (!of_address_to_resource(dn, 0, &res) &&
2288     + res.start == base_address)
2289     return dn;
2290     +
2291     dn = of_find_matching_node(dn, matches);
2292     }
2293    
2294     diff --git a/drivers/pci/access.c b/drivers/pci/access.c
2295     index d9b64a175990..b965c12168b7 100644
2296     --- a/drivers/pci/access.c
2297     +++ b/drivers/pci/access.c
2298     @@ -439,6 +439,56 @@ static const struct pci_vpd_ops pci_vpd_pci22_ops = {
2299     .release = pci_vpd_pci22_release,
2300     };
2301    
2302     +static ssize_t pci_vpd_f0_read(struct pci_dev *dev, loff_t pos, size_t count,
2303     + void *arg)
2304     +{
2305     + struct pci_dev *tdev = pci_get_slot(dev->bus, PCI_SLOT(dev->devfn));
2306     + ssize_t ret;
2307     +
2308     + if (!tdev)
2309     + return -ENODEV;
2310     +
2311     + ret = pci_read_vpd(tdev, pos, count, arg);
2312     + pci_dev_put(tdev);
2313     + return ret;
2314     +}
2315     +
2316     +static ssize_t pci_vpd_f0_write(struct pci_dev *dev, loff_t pos, size_t count,
2317     + const void *arg)
2318     +{
2319     + struct pci_dev *tdev = pci_get_slot(dev->bus, PCI_SLOT(dev->devfn));
2320     + ssize_t ret;
2321     +
2322     + if (!tdev)
2323     + return -ENODEV;
2324     +
2325     + ret = pci_write_vpd(tdev, pos, count, arg);
2326     + pci_dev_put(tdev);
2327     + return ret;
2328     +}
2329     +
2330     +static const struct pci_vpd_ops pci_vpd_f0_ops = {
2331     + .read = pci_vpd_f0_read,
2332     + .write = pci_vpd_f0_write,
2333     + .release = pci_vpd_pci22_release,
2334     +};
2335     +
2336     +static int pci_vpd_f0_dev_check(struct pci_dev *dev)
2337     +{
2338     + struct pci_dev *tdev = pci_get_slot(dev->bus, PCI_SLOT(dev->devfn));
2339     + int ret = 0;
2340     +
2341     + if (!tdev)
2342     + return -ENODEV;
2343     + if (!tdev->vpd || !tdev->multifunction ||
2344     + dev->class != tdev->class || dev->vendor != tdev->vendor ||
2345     + dev->device != tdev->device)
2346     + ret = -ENODEV;
2347     +
2348     + pci_dev_put(tdev);
2349     + return ret;
2350     +}
2351     +
2352     int pci_vpd_pci22_init(struct pci_dev *dev)
2353     {
2354     struct pci_vpd_pci22 *vpd;
2355     @@ -447,12 +497,21 @@ int pci_vpd_pci22_init(struct pci_dev *dev)
2356     cap = pci_find_capability(dev, PCI_CAP_ID_VPD);
2357     if (!cap)
2358     return -ENODEV;
2359     + if (dev->dev_flags & PCI_DEV_FLAGS_VPD_REF_F0) {
2360     + int ret = pci_vpd_f0_dev_check(dev);
2361     +
2362     + if (ret)
2363     + return ret;
2364     + }
2365     vpd = kzalloc(sizeof(*vpd), GFP_ATOMIC);
2366     if (!vpd)
2367     return -ENOMEM;
2368    
2369     vpd->base.len = PCI_VPD_PCI22_SIZE;
2370     - vpd->base.ops = &pci_vpd_pci22_ops;
2371     + if (dev->dev_flags & PCI_DEV_FLAGS_VPD_REF_F0)
2372     + vpd->base.ops = &pci_vpd_f0_ops;
2373     + else
2374     + vpd->base.ops = &pci_vpd_pci22_ops;
2375     mutex_init(&vpd->lock);
2376     vpd->cap = cap;
2377     vpd->busy = false;
2378     diff --git a/drivers/pci/quirks.c b/drivers/pci/quirks.c
2379     index c6dc1dfd25d5..804cd3b02c66 100644
2380     --- a/drivers/pci/quirks.c
2381     +++ b/drivers/pci/quirks.c
2382     @@ -1576,6 +1576,18 @@ DECLARE_PCI_FIXUP_RESUME_EARLY(PCI_VENDOR_ID_JMICRON, PCI_DEVICE_ID_JMICRON_JMB3
2383    
2384     #endif
2385    
2386     +static void quirk_jmicron_async_suspend(struct pci_dev *dev)
2387     +{
2388     + if (dev->multifunction) {
2389     + device_disable_async_suspend(&dev->dev);
2390     + dev_info(&dev->dev, "async suspend disabled to avoid multi-function power-on ordering issue\n");
2391     + }
2392     +}
2393     +DECLARE_PCI_FIXUP_CLASS_FINAL(PCI_VENDOR_ID_JMICRON, PCI_ANY_ID, PCI_CLASS_STORAGE_IDE, 8, quirk_jmicron_async_suspend);
2394     +DECLARE_PCI_FIXUP_CLASS_FINAL(PCI_VENDOR_ID_JMICRON, PCI_ANY_ID, PCI_CLASS_STORAGE_SATA_AHCI, 0, quirk_jmicron_async_suspend);
2395     +DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_JMICRON, 0x2362, quirk_jmicron_async_suspend);
2396     +DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_JMICRON, 0x236f, quirk_jmicron_async_suspend);
2397     +
2398     #ifdef CONFIG_X86_IO_APIC
2399     static void quirk_alder_ioapic(struct pci_dev *pdev)
2400     {
2401     @@ -1903,6 +1915,15 @@ static void quirk_netmos(struct pci_dev *dev)
2402     DECLARE_PCI_FIXUP_CLASS_HEADER(PCI_VENDOR_ID_NETMOS, PCI_ANY_ID,
2403     PCI_CLASS_COMMUNICATION_SERIAL, 8, quirk_netmos);
2404    
2405     +static void quirk_f0_vpd_link(struct pci_dev *dev)
2406     +{
2407     + if (!dev->multifunction || !PCI_FUNC(dev->devfn))
2408     + return;
2409     + dev->dev_flags |= PCI_DEV_FLAGS_VPD_REF_F0;
2410     +}
2411     +DECLARE_PCI_FIXUP_CLASS_EARLY(PCI_VENDOR_ID_INTEL, PCI_ANY_ID,
2412     + PCI_CLASS_NETWORK_ETHERNET, 8, quirk_f0_vpd_link);
2413     +
2414     static void quirk_e100_interrupt(struct pci_dev *dev)
2415     {
2416     u16 command, pmcsr;
2417     @@ -2838,12 +2859,15 @@ DECLARE_PCI_FIXUP_EARLY(PCI_VENDOR_ID_INTEL, 0x3c28, vtd_mask_spec_errors);
2418    
2419     static void fixup_ti816x_class(struct pci_dev *dev)
2420     {
2421     + u32 class = dev->class;
2422     +
2423     /* TI 816x devices do not have class code set when in PCIe boot mode */
2424     - dev_info(&dev->dev, "Setting PCI class for 816x PCIe device\n");
2425     - dev->class = PCI_CLASS_MULTIMEDIA_VIDEO;
2426     + dev->class = PCI_CLASS_MULTIMEDIA_VIDEO << 8;
2427     + dev_info(&dev->dev, "PCI class overridden (%#08x -> %#08x)\n",
2428     + class, dev->class);
2429     }
2430     DECLARE_PCI_FIXUP_CLASS_EARLY(PCI_VENDOR_ID_TI, 0xb800,
2431     - PCI_CLASS_NOT_DEFINED, 0, fixup_ti816x_class);
2432     + PCI_CLASS_NOT_DEFINED, 0, fixup_ti816x_class);
2433    
2434     /* Some PCIe devices do not work reliably with the claimed maximum
2435     * payload size supported.
2436     diff --git a/drivers/regulator/pbias-regulator.c b/drivers/regulator/pbias-regulator.c
2437     index bd2b75c0d1d1..4fa7bcaf454e 100644
2438     --- a/drivers/regulator/pbias-regulator.c
2439     +++ b/drivers/regulator/pbias-regulator.c
2440     @@ -30,6 +30,7 @@
2441     struct pbias_reg_info {
2442     u32 enable;
2443     u32 enable_mask;
2444     + u32 disable_val;
2445     u32 vmode;
2446     unsigned int enable_time;
2447     char *name;
2448     @@ -62,6 +63,7 @@ static const struct pbias_reg_info pbias_mmc_omap2430 = {
2449     .enable = BIT(1),
2450     .enable_mask = BIT(1),
2451     .vmode = BIT(0),
2452     + .disable_val = 0,
2453     .enable_time = 100,
2454     .name = "pbias_mmc_omap2430"
2455     };
2456     @@ -77,6 +79,7 @@ static const struct pbias_reg_info pbias_sim_omap3 = {
2457     static const struct pbias_reg_info pbias_mmc_omap4 = {
2458     .enable = BIT(26) | BIT(22),
2459     .enable_mask = BIT(26) | BIT(25) | BIT(22),
2460     + .disable_val = BIT(25),
2461     .vmode = BIT(21),
2462     .enable_time = 100,
2463     .name = "pbias_mmc_omap4"
2464     @@ -85,6 +88,7 @@ static const struct pbias_reg_info pbias_mmc_omap4 = {
2465     static const struct pbias_reg_info pbias_mmc_omap5 = {
2466     .enable = BIT(27) | BIT(26),
2467     .enable_mask = BIT(27) | BIT(25) | BIT(26),
2468     + .disable_val = BIT(25),
2469     .vmode = BIT(21),
2470     .enable_time = 100,
2471     .name = "pbias_mmc_omap5"
2472     @@ -159,6 +163,7 @@ static int pbias_regulator_probe(struct platform_device *pdev)
2473     drvdata[data_idx].desc.enable_reg = res->start;
2474     drvdata[data_idx].desc.enable_mask = info->enable_mask;
2475     drvdata[data_idx].desc.enable_val = info->enable;
2476     + drvdata[data_idx].desc.disable_val = info->disable_val;
2477    
2478     cfg.init_data = pbias_matches[idx].init_data;
2479     cfg.driver_data = &drvdata[data_idx];
2480     diff --git a/drivers/s390/char/sclp_early.c b/drivers/s390/char/sclp_early.c
2481     index 1efa4fdb7fe2..f45cd0cb1b32 100644
2482     --- a/drivers/s390/char/sclp_early.c
2483     +++ b/drivers/s390/char/sclp_early.c
2484     @@ -7,6 +7,7 @@
2485     #define KMSG_COMPONENT "sclp_early"
2486     #define pr_fmt(fmt) KMSG_COMPONENT ": " fmt
2487    
2488     +#include <linux/errno.h>
2489     #include <asm/ctl_reg.h>
2490     #include <asm/sclp.h>
2491     #include <asm/ipl.h>
2492     diff --git a/drivers/soc/tegra/pmc.c b/drivers/soc/tegra/pmc.c
2493     index c956395cf46f..c89bada875f8 100644
2494     --- a/drivers/soc/tegra/pmc.c
2495     +++ b/drivers/soc/tegra/pmc.c
2496     @@ -732,12 +732,12 @@ void tegra_pmc_init_tsense_reset(struct tegra_pmc *pmc)
2497     u32 value, checksum;
2498    
2499     if (!pmc->soc->has_tsense_reset)
2500     - goto out;
2501     + return;
2502    
2503     np = of_find_node_by_name(pmc->dev->of_node, "i2c-thermtrip");
2504     if (!np) {
2505     dev_warn(dev, "i2c-thermtrip node not found, %s.\n", disabled);
2506     - goto out;
2507     + return;
2508     }
2509    
2510     if (of_property_read_u32(np, "nvidia,i2c-controller-id", &ctrl_id)) {
2511     diff --git a/drivers/spi/spi-bcm2835.c b/drivers/spi/spi-bcm2835.c
2512     index 37875cf942f7..a5067739ee93 100644
2513     --- a/drivers/spi/spi-bcm2835.c
2514     +++ b/drivers/spi/spi-bcm2835.c
2515     @@ -257,13 +257,11 @@ static int bcm2835_spi_transfer_one(struct spi_master *master,
2516     spi_used_hz = cdiv ? (clk_hz / cdiv) : (clk_hz / 65536);
2517     bcm2835_wr(bs, BCM2835_SPI_CLK, cdiv);
2518    
2519     - /* handle all the modes */
2520     + /* handle all the 3-wire mode */
2521     if ((spi->mode & SPI_3WIRE) && (tfr->rx_buf))
2522     cs |= BCM2835_SPI_CS_REN;
2523     - if (spi->mode & SPI_CPOL)
2524     - cs |= BCM2835_SPI_CS_CPOL;
2525     - if (spi->mode & SPI_CPHA)
2526     - cs |= BCM2835_SPI_CS_CPHA;
2527     + else
2528     + cs &= ~BCM2835_SPI_CS_REN;
2529    
2530     /* for gpio_cs set dummy CS so that no HW-CS get changed
2531     * we can not run this in bcm2835_spi_set_cs, as it does
2532     @@ -291,6 +289,25 @@ static int bcm2835_spi_transfer_one(struct spi_master *master,
2533     return bcm2835_spi_transfer_one_irq(master, spi, tfr, cs);
2534     }
2535    
2536     +static int bcm2835_spi_prepare_message(struct spi_master *master,
2537     + struct spi_message *msg)
2538     +{
2539     + struct spi_device *spi = msg->spi;
2540     + struct bcm2835_spi *bs = spi_master_get_devdata(master);
2541     + u32 cs = bcm2835_rd(bs, BCM2835_SPI_CS);
2542     +
2543     + cs &= ~(BCM2835_SPI_CS_CPOL | BCM2835_SPI_CS_CPHA);
2544     +
2545     + if (spi->mode & SPI_CPOL)
2546     + cs |= BCM2835_SPI_CS_CPOL;
2547     + if (spi->mode & SPI_CPHA)
2548     + cs |= BCM2835_SPI_CS_CPHA;
2549     +
2550     + bcm2835_wr(bs, BCM2835_SPI_CS, cs);
2551     +
2552     + return 0;
2553     +}
2554     +
2555     static void bcm2835_spi_handle_err(struct spi_master *master,
2556     struct spi_message *msg)
2557     {
2558     @@ -429,6 +446,7 @@ static int bcm2835_spi_probe(struct platform_device *pdev)
2559     master->set_cs = bcm2835_spi_set_cs;
2560     master->transfer_one = bcm2835_spi_transfer_one;
2561     master->handle_err = bcm2835_spi_handle_err;
2562     + master->prepare_message = bcm2835_spi_prepare_message;
2563     master->dev.of_node = pdev->dev.of_node;
2564    
2565     bs = spi_master_get_devdata(master);
2566     diff --git a/drivers/spi/spi-bitbang-txrx.h b/drivers/spi/spi-bitbang-txrx.h
2567     index 06b34e5bcfa3..47bb9b898dfd 100644
2568     --- a/drivers/spi/spi-bitbang-txrx.h
2569     +++ b/drivers/spi/spi-bitbang-txrx.h
2570     @@ -49,7 +49,7 @@ bitbang_txrx_be_cpha0(struct spi_device *spi,
2571     {
2572     /* if (cpol == 0) this is SPI_MODE_0; else this is SPI_MODE_2 */
2573    
2574     - bool oldbit = !(word & 1);
2575     + u32 oldbit = (!(word & (1<<(bits-1)))) << 31;
2576     /* clock starts at inactive polarity */
2577     for (word <<= (32 - bits); likely(bits); bits--) {
2578    
2579     @@ -81,7 +81,7 @@ bitbang_txrx_be_cpha1(struct spi_device *spi,
2580     {
2581     /* if (cpol == 0) this is SPI_MODE_1; else this is SPI_MODE_3 */
2582    
2583     - bool oldbit = !(word & (1 << 31));
2584     + u32 oldbit = (!(word & (1<<(bits-1)))) << 31;
2585     /* clock starts at inactive polarity */
2586     for (word <<= (32 - bits); likely(bits); bits--) {
2587    
2588     diff --git a/drivers/spi/spi-dw-mmio.c b/drivers/spi/spi-dw-mmio.c
2589     index eb03e1215195..7edede6e024b 100644
2590     --- a/drivers/spi/spi-dw-mmio.c
2591     +++ b/drivers/spi/spi-dw-mmio.c
2592     @@ -74,6 +74,9 @@ static int dw_spi_mmio_probe(struct platform_device *pdev)
2593    
2594     dws->max_freq = clk_get_rate(dwsmmio->clk);
2595    
2596     + of_property_read_u32(pdev->dev.of_node, "reg-io-width",
2597     + &dws->reg_io_width);
2598     +
2599     num_cs = 4;
2600    
2601     if (pdev->dev.of_node)
2602     diff --git a/drivers/spi/spi-dw.c b/drivers/spi/spi-dw.c
2603     index 8d67d03c71eb..4fbfcdc5cb24 100644
2604     --- a/drivers/spi/spi-dw.c
2605     +++ b/drivers/spi/spi-dw.c
2606     @@ -194,7 +194,7 @@ static void dw_writer(struct dw_spi *dws)
2607     else
2608     txw = *(u16 *)(dws->tx);
2609     }
2610     - dw_writel(dws, DW_SPI_DR, txw);
2611     + dw_write_io_reg(dws, DW_SPI_DR, txw);
2612     dws->tx += dws->n_bytes;
2613     }
2614     }
2615     @@ -205,7 +205,7 @@ static void dw_reader(struct dw_spi *dws)
2616     u16 rxw;
2617    
2618     while (max--) {
2619     - rxw = dw_readl(dws, DW_SPI_DR);
2620     + rxw = dw_read_io_reg(dws, DW_SPI_DR);
2621     /* Care rx only if the transfer's original "rx" is not null */
2622     if (dws->rx_end - dws->len) {
2623     if (dws->n_bytes == 1)
2624     diff --git a/drivers/spi/spi-dw.h b/drivers/spi/spi-dw.h
2625     index 6c91391c1a4f..b75ed327d5a2 100644
2626     --- a/drivers/spi/spi-dw.h
2627     +++ b/drivers/spi/spi-dw.h
2628     @@ -109,6 +109,7 @@ struct dw_spi {
2629     u32 fifo_len; /* depth of the FIFO buffer */
2630     u32 max_freq; /* max bus freq supported */
2631    
2632     + u32 reg_io_width; /* DR I/O width in bytes */
2633     u16 bus_num;
2634     u16 num_cs; /* supported slave numbers */
2635    
2636     @@ -145,11 +146,45 @@ static inline u32 dw_readl(struct dw_spi *dws, u32 offset)
2637     return __raw_readl(dws->regs + offset);
2638     }
2639    
2640     +static inline u16 dw_readw(struct dw_spi *dws, u32 offset)
2641     +{
2642     + return __raw_readw(dws->regs + offset);
2643     +}
2644     +
2645     static inline void dw_writel(struct dw_spi *dws, u32 offset, u32 val)
2646     {
2647     __raw_writel(val, dws->regs + offset);
2648     }
2649    
2650     +static inline void dw_writew(struct dw_spi *dws, u32 offset, u16 val)
2651     +{
2652     + __raw_writew(val, dws->regs + offset);
2653     +}
2654     +
2655     +static inline u32 dw_read_io_reg(struct dw_spi *dws, u32 offset)
2656     +{
2657     + switch (dws->reg_io_width) {
2658     + case 2:
2659     + return dw_readw(dws, offset);
2660     + case 4:
2661     + default:
2662     + return dw_readl(dws, offset);
2663     + }
2664     +}
2665     +
2666     +static inline void dw_write_io_reg(struct dw_spi *dws, u32 offset, u32 val)
2667     +{
2668     + switch (dws->reg_io_width) {
2669     + case 2:
2670     + dw_writew(dws, offset, val);
2671     + break;
2672     + case 4:
2673     + default:
2674     + dw_writel(dws, offset, val);
2675     + break;
2676     + }
2677     +}
2678     +
2679     static inline void spi_enable_chip(struct dw_spi *dws, int enable)
2680     {
2681     dw_writel(dws, DW_SPI_SSIENR, (enable ? 1 : 0));
2682     diff --git a/drivers/spi/spi-img-spfi.c b/drivers/spi/spi-img-spfi.c
2683     index acce90ac7371..bb916c8d40db 100644
2684     --- a/drivers/spi/spi-img-spfi.c
2685     +++ b/drivers/spi/spi-img-spfi.c
2686     @@ -105,6 +105,10 @@ struct img_spfi {
2687     bool rx_dma_busy;
2688     };
2689    
2690     +struct img_spfi_device_data {
2691     + bool gpio_requested;
2692     +};
2693     +
2694     static inline u32 spfi_readl(struct img_spfi *spfi, u32 reg)
2695     {
2696     return readl(spfi->regs + reg);
2697     @@ -267,15 +271,15 @@ static int img_spfi_start_pio(struct spi_master *master,
2698     cpu_relax();
2699     }
2700    
2701     - ret = spfi_wait_all_done(spfi);
2702     - if (ret < 0)
2703     - return ret;
2704     -
2705     if (rx_bytes > 0 || tx_bytes > 0) {
2706     dev_err(spfi->dev, "PIO transfer timed out\n");
2707     return -ETIMEDOUT;
2708     }
2709    
2710     + ret = spfi_wait_all_done(spfi);
2711     + if (ret < 0)
2712     + return ret;
2713     +
2714     return 0;
2715     }
2716    
2717     @@ -440,21 +444,50 @@ static int img_spfi_unprepare(struct spi_master *master,
2718    
2719     static int img_spfi_setup(struct spi_device *spi)
2720     {
2721     - int ret;
2722     -
2723     - ret = gpio_request_one(spi->cs_gpio, (spi->mode & SPI_CS_HIGH) ?
2724     - GPIOF_OUT_INIT_LOW : GPIOF_OUT_INIT_HIGH,
2725     - dev_name(&spi->dev));
2726     - if (ret)
2727     - dev_err(&spi->dev, "can't request chipselect gpio %d\n",
2728     + int ret = -EINVAL;
2729     + struct img_spfi_device_data *spfi_data = spi_get_ctldata(spi);
2730     +
2731     + if (!spfi_data) {
2732     + spfi_data = kzalloc(sizeof(*spfi_data), GFP_KERNEL);
2733     + if (!spfi_data)
2734     + return -ENOMEM;
2735     + spfi_data->gpio_requested = false;
2736     + spi_set_ctldata(spi, spfi_data);
2737     + }
2738     + if (!spfi_data->gpio_requested) {
2739     + ret = gpio_request_one(spi->cs_gpio,
2740     + (spi->mode & SPI_CS_HIGH) ?
2741     + GPIOF_OUT_INIT_LOW : GPIOF_OUT_INIT_HIGH,
2742     + dev_name(&spi->dev));
2743     + if (ret)
2744     + dev_err(&spi->dev, "can't request chipselect gpio %d\n",
2745     spi->cs_gpio);
2746     -
2747     + else
2748     + spfi_data->gpio_requested = true;
2749     + } else {
2750     + if (gpio_is_valid(spi->cs_gpio)) {
2751     + int mode = ((spi->mode & SPI_CS_HIGH) ?
2752     + GPIOF_OUT_INIT_LOW : GPIOF_OUT_INIT_HIGH);
2753     +
2754     + ret = gpio_direction_output(spi->cs_gpio, mode);
2755     + if (ret)
2756     + dev_err(&spi->dev, "chipselect gpio %d setup failed (%d)\n",
2757     + spi->cs_gpio, ret);
2758     + }
2759     + }
2760     return ret;
2761     }
2762    
2763     static void img_spfi_cleanup(struct spi_device *spi)
2764     {
2765     - gpio_free(spi->cs_gpio);
2766     + struct img_spfi_device_data *spfi_data = spi_get_ctldata(spi);
2767     +
2768     + if (spfi_data) {
2769     + if (spfi_data->gpio_requested)
2770     + gpio_free(spi->cs_gpio);
2771     + kfree(spfi_data);
2772     + spi_set_ctldata(spi, NULL);
2773     + }
2774     }
2775    
2776     static void img_spfi_config(struct spi_master *master, struct spi_device *spi,
2777     diff --git a/drivers/spi/spi-sh-msiof.c b/drivers/spi/spi-sh-msiof.c
2778     index bcc7c635d8e7..7872f3c78b51 100644
2779     --- a/drivers/spi/spi-sh-msiof.c
2780     +++ b/drivers/spi/spi-sh-msiof.c
2781     @@ -48,8 +48,8 @@ struct sh_msiof_spi_priv {
2782     const struct sh_msiof_chipdata *chipdata;
2783     struct sh_msiof_spi_info *info;
2784     struct completion done;
2785     - int tx_fifo_size;
2786     - int rx_fifo_size;
2787     + unsigned int tx_fifo_size;
2788     + unsigned int rx_fifo_size;
2789     void *tx_dma_page;
2790     void *rx_dma_page;
2791     dma_addr_t tx_dma_addr;
2792     @@ -95,8 +95,6 @@ struct sh_msiof_spi_priv {
2793     #define MDR2_WDLEN1(i) (((i) - 1) << 16) /* Word Count (1-64/256 (SH, A1))) */
2794     #define MDR2_GRPMASK1 0x00000001 /* Group Output Mask 1 (SH, A1) */
2795    
2796     -#define MAX_WDLEN 256U
2797     -
2798     /* TSCR and RSCR */
2799     #define SCR_BRPS_MASK 0x1f00 /* Prescaler Setting (1-32) */
2800     #define SCR_BRPS(i) (((i) - 1) << 8)
2801     @@ -850,7 +848,12 @@ static int sh_msiof_transfer_one(struct spi_master *master,
2802     * DMA supports 32-bit words only, hence pack 8-bit and 16-bit
2803     * words, with byte resp. word swapping.
2804     */
2805     - unsigned int l = min(len, MAX_WDLEN * 4);
2806     + unsigned int l = 0;
2807     +
2808     + if (tx_buf)
2809     + l = min(len, p->tx_fifo_size * 4);
2810     + if (rx_buf)
2811     + l = min(len, p->rx_fifo_size * 4);
2812    
2813     if (bits <= 8) {
2814     if (l & 3)
2815     @@ -963,7 +966,7 @@ static const struct sh_msiof_chipdata sh_data = {
2816    
2817     static const struct sh_msiof_chipdata r8a779x_data = {
2818     .tx_fifo_size = 64,
2819     - .rx_fifo_size = 256,
2820     + .rx_fifo_size = 64,
2821     .master_flags = SPI_MASTER_MUST_TX,
2822     };
2823    
2824     diff --git a/drivers/spi/spi-xilinx.c b/drivers/spi/spi-xilinx.c
2825     index 133f53a9c1d4..a339c1e9997a 100644
2826     --- a/drivers/spi/spi-xilinx.c
2827     +++ b/drivers/spi/spi-xilinx.c
2828     @@ -249,19 +249,23 @@ static int xilinx_spi_txrx_bufs(struct spi_device *spi, struct spi_transfer *t)
2829     xspi->tx_ptr = t->tx_buf;
2830     xspi->rx_ptr = t->rx_buf;
2831     remaining_words = t->len / xspi->bytes_per_word;
2832     - reinit_completion(&xspi->done);
2833    
2834     if (xspi->irq >= 0 && remaining_words > xspi->buffer_size) {
2835     + u32 isr;
2836     use_irq = true;
2837     - xspi->write_fn(XSPI_INTR_TX_EMPTY,
2838     - xspi->regs + XIPIF_V123B_IISR_OFFSET);
2839     - /* Enable the global IPIF interrupt */
2840     - xspi->write_fn(XIPIF_V123B_GINTR_ENABLE,
2841     - xspi->regs + XIPIF_V123B_DGIER_OFFSET);
2842     /* Inhibit irq to avoid spurious irqs on tx_empty*/
2843     cr = xspi->read_fn(xspi->regs + XSPI_CR_OFFSET);
2844     xspi->write_fn(cr | XSPI_CR_TRANS_INHIBIT,
2845     xspi->regs + XSPI_CR_OFFSET);
2846     + /* ACK old irqs (if any) */
2847     + isr = xspi->read_fn(xspi->regs + XIPIF_V123B_IISR_OFFSET);
2848     + if (isr)
2849     + xspi->write_fn(isr,
2850     + xspi->regs + XIPIF_V123B_IISR_OFFSET);
2851     + /* Enable the global IPIF interrupt */
2852     + xspi->write_fn(XIPIF_V123B_GINTR_ENABLE,
2853     + xspi->regs + XIPIF_V123B_DGIER_OFFSET);
2854     + reinit_completion(&xspi->done);
2855     }
2856    
2857     while (remaining_words) {
2858     @@ -302,8 +306,10 @@ static int xilinx_spi_txrx_bufs(struct spi_device *spi, struct spi_transfer *t)
2859     remaining_words -= n_words;
2860     }
2861    
2862     - if (use_irq)
2863     + if (use_irq) {
2864     xspi->write_fn(0, xspi->regs + XIPIF_V123B_DGIER_OFFSET);
2865     + xspi->write_fn(cr, xspi->regs + XSPI_CR_OFFSET);
2866     + }
2867    
2868     return t->len;
2869     }
2870     diff --git a/drivers/staging/comedi/drivers/adl_pci7x3x.c b/drivers/staging/comedi/drivers/adl_pci7x3x.c
2871     index 934af3ff7897..b0fc027cf485 100644
2872     --- a/drivers/staging/comedi/drivers/adl_pci7x3x.c
2873     +++ b/drivers/staging/comedi/drivers/adl_pci7x3x.c
2874     @@ -120,8 +120,20 @@ static int adl_pci7x3x_do_insn_bits(struct comedi_device *dev,
2875     {
2876     unsigned long reg = (unsigned long)s->private;
2877    
2878     - if (comedi_dio_update_state(s, data))
2879     - outl(s->state, dev->iobase + reg);
2880     + if (comedi_dio_update_state(s, data)) {
2881     + unsigned int val = s->state;
2882     +
2883     + if (s->n_chan == 16) {
2884     + /*
2885     + * It seems the PCI-7230 needs the 16-bit DO state
2886     + * to be shifted left by 16 bits before being written
2887     + * to the 32-bit register. Set the value in both
2888     + * halves of the register to be sure.
2889     + */
2890     + val |= val << 16;
2891     + }
2892     + outl(val, dev->iobase + reg);
2893     + }
2894    
2895     data[1] = s->state;
2896    
2897     diff --git a/drivers/staging/comedi/drivers/usbduxsigma.c b/drivers/staging/comedi/drivers/usbduxsigma.c
2898     index eaa9add491df..dc0b25a54088 100644
2899     --- a/drivers/staging/comedi/drivers/usbduxsigma.c
2900     +++ b/drivers/staging/comedi/drivers/usbduxsigma.c
2901     @@ -550,27 +550,6 @@ static int usbduxsigma_ai_cmdtest(struct comedi_device *dev,
2902     if (err)
2903     return 3;
2904    
2905     - /* Step 4: fix up any arguments */
2906     -
2907     - if (high_speed) {
2908     - /*
2909     - * every 2 channels get a time window of 125us. Thus, if we
2910     - * sample all 16 channels we need 1ms. If we sample only one
2911     - * channel we need only 125us
2912     - */
2913     - devpriv->ai_interval = interval;
2914     - devpriv->ai_timer = cmd->scan_begin_arg / (125000 * interval);
2915     - } else {
2916     - /* interval always 1ms */
2917     - devpriv->ai_interval = 1;
2918     - devpriv->ai_timer = cmd->scan_begin_arg / 1000000;
2919     - }
2920     - if (devpriv->ai_timer < 1)
2921     - err |= -EINVAL;
2922     -
2923     - if (err)
2924     - return 4;
2925     -
2926     return 0;
2927     }
2928    
2929     @@ -668,6 +647,22 @@ static int usbduxsigma_ai_cmd(struct comedi_device *dev,
2930    
2931     down(&devpriv->sem);
2932    
2933     + if (devpriv->high_speed) {
2934     + /*
2935     + * every 2 channels get a time window of 125us. Thus, if we
2936     + * sample all 16 channels we need 1ms. If we sample only one
2937     + * channel we need only 125us
2938     + */
2939     + unsigned int interval = usbduxsigma_chans_to_interval(len);
2940     +
2941     + devpriv->ai_interval = interval;
2942     + devpriv->ai_timer = cmd->scan_begin_arg / (125000 * interval);
2943     + } else {
2944     + /* interval always 1ms */
2945     + devpriv->ai_interval = 1;
2946     + devpriv->ai_timer = cmd->scan_begin_arg / 1000000;
2947     + }
2948     +
2949     for (i = 0; i < len; i++) {
2950     unsigned int chan = CR_CHAN(cmd->chanlist[i]);
2951    
2952     @@ -917,25 +912,6 @@ static int usbduxsigma_ao_cmdtest(struct comedi_device *dev,
2953     if (err)
2954     return 3;
2955    
2956     - /* Step 4: fix up any arguments */
2957     -
2958     - /* we count in timer steps */
2959     - if (high_speed) {
2960     - /* timing of the conversion itself: every 125 us */
2961     - devpriv->ao_timer = cmd->convert_arg / 125000;
2962     - } else {
2963     - /*
2964     - * timing of the scan: every 1ms
2965     - * we get all channels at once
2966     - */
2967     - devpriv->ao_timer = cmd->scan_begin_arg / 1000000;
2968     - }
2969     - if (devpriv->ao_timer < 1)
2970     - err |= -EINVAL;
2971     -
2972     - if (err)
2973     - return 4;
2974     -
2975     return 0;
2976     }
2977    
2978     @@ -948,6 +924,20 @@ static int usbduxsigma_ao_cmd(struct comedi_device *dev,
2979    
2980     down(&devpriv->sem);
2981    
2982     + if (cmd->convert_src == TRIG_TIMER) {
2983     + /*
2984     + * timing of the conversion itself: every 125 us
2985     + * at high speed (not used yet)
2986     + */
2987     + devpriv->ao_timer = cmd->convert_arg / 125000;
2988     + } else {
2989     + /*
2990     + * timing of the scan: every 1ms
2991     + * we get all channels at once
2992     + */
2993     + devpriv->ao_timer = cmd->scan_begin_arg / 1000000;
2994     + }
2995     +
2996     devpriv->ao_counter = devpriv->ao_timer;
2997    
2998     if (cmd->start_src == TRIG_NOW) {
2999     diff --git a/drivers/tty/serial/8250/8250_pci.c b/drivers/tty/serial/8250/8250_pci.c
3000     index 46bcebba54b2..9373cca121d3 100644
3001     --- a/drivers/tty/serial/8250/8250_pci.c
3002     +++ b/drivers/tty/serial/8250/8250_pci.c
3003     @@ -2000,6 +2000,12 @@ pci_wch_ch38x_setup(struct serial_private *priv,
3004    
3005     #define PCI_DEVICE_ID_EXAR_XR17V8358 0x8358
3006    
3007     +#define PCI_VENDOR_ID_PERICOM 0x12D8
3008     +#define PCI_DEVICE_ID_PERICOM_PI7C9X7951 0x7951
3009     +#define PCI_DEVICE_ID_PERICOM_PI7C9X7952 0x7952
3010     +#define PCI_DEVICE_ID_PERICOM_PI7C9X7954 0x7954
3011     +#define PCI_DEVICE_ID_PERICOM_PI7C9X7958 0x7958
3012     +
3013     /* Unknown vendors/cards - this should not be in linux/pci_ids.h */
3014     #define PCI_SUBDEVICE_ID_UNKNOWN_0x1584 0x1584
3015     #define PCI_SUBDEVICE_ID_UNKNOWN_0x1588 0x1588
3016     @@ -2314,27 +2320,12 @@ static struct pci_serial_quirk pci_serial_quirks[] __refdata = {
3017     * Pericom
3018     */
3019     {
3020     - .vendor = 0x12d8,
3021     - .device = 0x7952,
3022     - .subvendor = PCI_ANY_ID,
3023     - .subdevice = PCI_ANY_ID,
3024     - .setup = pci_pericom_setup,
3025     - },
3026     - {
3027     - .vendor = 0x12d8,
3028     - .device = 0x7954,
3029     - .subvendor = PCI_ANY_ID,
3030     - .subdevice = PCI_ANY_ID,
3031     - .setup = pci_pericom_setup,
3032     - },
3033     - {
3034     - .vendor = 0x12d8,
3035     - .device = 0x7958,
3036     - .subvendor = PCI_ANY_ID,
3037     - .subdevice = PCI_ANY_ID,
3038     - .setup = pci_pericom_setup,
3039     + .vendor = PCI_VENDOR_ID_PERICOM,
3040     + .device = PCI_ANY_ID,
3041     + .subvendor = PCI_ANY_ID,
3042     + .subdevice = PCI_ANY_ID,
3043     + .setup = pci_pericom_setup,
3044     },
3045     -
3046     /*
3047     * PLX
3048     */
3049     @@ -3031,6 +3022,10 @@ enum pci_board_num_t {
3050     pbn_fintek_8,
3051     pbn_fintek_12,
3052     pbn_wch384_4,
3053     + pbn_pericom_PI7C9X7951,
3054     + pbn_pericom_PI7C9X7952,
3055     + pbn_pericom_PI7C9X7954,
3056     + pbn_pericom_PI7C9X7958,
3057     };
3058    
3059     /*
3060     @@ -3848,7 +3843,6 @@ static struct pciserial_board pci_boards[] = {
3061     .base_baud = 115200,
3062     .first_offset = 0x40,
3063     },
3064     -
3065     [pbn_wch384_4] = {
3066     .flags = FL_BASE0,
3067     .num_ports = 4,
3068     @@ -3856,6 +3850,33 @@ static struct pciserial_board pci_boards[] = {
3069     .uart_offset = 8,
3070     .first_offset = 0xC0,
3071     },
3072     + /*
3073     + * Pericom PI7C9X795[1248] Uno/Dual/Quad/Octal UART
3074     + */
3075     + [pbn_pericom_PI7C9X7951] = {
3076     + .flags = FL_BASE0,
3077     + .num_ports = 1,
3078     + .base_baud = 921600,
3079     + .uart_offset = 0x8,
3080     + },
3081     + [pbn_pericom_PI7C9X7952] = {
3082     + .flags = FL_BASE0,
3083     + .num_ports = 2,
3084     + .base_baud = 921600,
3085     + .uart_offset = 0x8,
3086     + },
3087     + [pbn_pericom_PI7C9X7954] = {
3088     + .flags = FL_BASE0,
3089     + .num_ports = 4,
3090     + .base_baud = 921600,
3091     + .uart_offset = 0x8,
3092     + },
3093     + [pbn_pericom_PI7C9X7958] = {
3094     + .flags = FL_BASE0,
3095     + .num_ports = 8,
3096     + .base_baud = 921600,
3097     + .uart_offset = 0x8,
3098     + },
3099     };
3100    
3101     static const struct pci_device_id blacklist[] = {
3102     @@ -5117,6 +5138,25 @@ static struct pci_device_id serial_pci_tbl[] = {
3103     0,
3104     0, pbn_exar_XR17V8358 },
3105     /*
3106     + * Pericom PI7C9X795[1248] Uno/Dual/Quad/Octal UART
3107     + */
3108     + { PCI_VENDOR_ID_PERICOM, PCI_DEVICE_ID_PERICOM_PI7C9X7951,
3109     + PCI_ANY_ID, PCI_ANY_ID,
3110     + 0,
3111     + 0, pbn_pericom_PI7C9X7951 },
3112     + { PCI_VENDOR_ID_PERICOM, PCI_DEVICE_ID_PERICOM_PI7C9X7952,
3113     + PCI_ANY_ID, PCI_ANY_ID,
3114     + 0,
3115     + 0, pbn_pericom_PI7C9X7952 },
3116     + { PCI_VENDOR_ID_PERICOM, PCI_DEVICE_ID_PERICOM_PI7C9X7954,
3117     + PCI_ANY_ID, PCI_ANY_ID,
3118     + 0,
3119     + 0, pbn_pericom_PI7C9X7954 },
3120     + { PCI_VENDOR_ID_PERICOM, PCI_DEVICE_ID_PERICOM_PI7C9X7958,
3121     + PCI_ANY_ID, PCI_ANY_ID,
3122     + 0,
3123     + 0, pbn_pericom_PI7C9X7958 },
3124     + /*
3125     * Topic TP560 Data/Fax/Voice 56k modem (reported by Evan Clarke)
3126     */
3127     { PCI_VENDOR_ID_TOPIC, PCI_DEVICE_ID_TOPIC_TP560,
3128     diff --git a/drivers/tty/serial/8250/8250_pnp.c b/drivers/tty/serial/8250/8250_pnp.c
3129     index 50a09cd76d50..658b392d1170 100644
3130     --- a/drivers/tty/serial/8250/8250_pnp.c
3131     +++ b/drivers/tty/serial/8250/8250_pnp.c
3132     @@ -41,6 +41,12 @@ static const struct pnp_device_id pnp_dev_table[] = {
3133     { "AEI1240", 0 },
3134     /* Rockwell 56K ACF II Fax+Data+Voice Modem */
3135     { "AKY1021", 0 /*SPCI_FL_NO_SHIRQ*/ },
3136     + /*
3137     + * ALi Fast Infrared Controller
3138     + * Native driver (ali-ircc) is broken so at least
3139     + * it can be used with irtty-sir.
3140     + */
3141     + { "ALI5123", 0 },
3142     /* AZT3005 PnP SOUND DEVICE */
3143     { "AZT4001", 0 },
3144     /* Best Data Products Inc. Smart One 336F PnP Modem */
3145     @@ -364,6 +370,11 @@ static const struct pnp_device_id pnp_dev_table[] = {
3146     /* Winbond CIR port, should not be probed. We should keep track
3147     of it to prevent the legacy serial driver from probing it */
3148     { "WEC1022", CIR_PORT },
3149     + /*
3150     + * SMSC IrCC SIR/FIR port, should not be probed by serial driver
3151     + * as well so its own driver can bind to it.
3152     + */
3153     + { "SMCF010", CIR_PORT },
3154     { "", 0 }
3155     };
3156    
3157     diff --git a/drivers/tty/serial/men_z135_uart.c b/drivers/tty/serial/men_z135_uart.c
3158     index 35c55505b3eb..5a41b8fbb10a 100644
3159     --- a/drivers/tty/serial/men_z135_uart.c
3160     +++ b/drivers/tty/serial/men_z135_uart.c
3161     @@ -392,7 +392,6 @@ static irqreturn_t men_z135_intr(int irq, void *data)
3162     struct men_z135_port *uart = (struct men_z135_port *)data;
3163     struct uart_port *port = &uart->port;
3164     bool handled = false;
3165     - unsigned long flags;
3166     int irq_id;
3167    
3168     uart->stat_reg = ioread32(port->membase + MEN_Z135_STAT_REG);
3169     @@ -401,7 +400,7 @@ static irqreturn_t men_z135_intr(int irq, void *data)
3170     if (!irq_id)
3171     goto out;
3172    
3173     - spin_lock_irqsave(&port->lock, flags);
3174     + spin_lock(&port->lock);
3175     /* It's save to write to IIR[7:6] RXC[9:8] */
3176     iowrite8(irq_id, port->membase + MEN_Z135_STAT_REG);
3177    
3178     @@ -427,7 +426,7 @@ static irqreturn_t men_z135_intr(int irq, void *data)
3179     handled = true;
3180     }
3181    
3182     - spin_unlock_irqrestore(&port->lock, flags);
3183     + spin_unlock(&port->lock);
3184     out:
3185     return IRQ_RETVAL(handled);
3186     }
3187     @@ -717,7 +716,7 @@ static void men_z135_set_termios(struct uart_port *port,
3188    
3189     baud = uart_get_baud_rate(port, termios, old, 0, uart_freq / 16);
3190    
3191     - spin_lock(&port->lock);
3192     + spin_lock_irq(&port->lock);
3193     if (tty_termios_baud_rate(termios))
3194     tty_termios_encode_baud_rate(termios, baud, baud);
3195    
3196     @@ -725,7 +724,7 @@ static void men_z135_set_termios(struct uart_port *port,
3197     iowrite32(bd_reg, port->membase + MEN_Z135_BAUD_REG);
3198    
3199     uart_update_timeout(port, termios->c_cflag, baud);
3200     - spin_unlock(&port->lock);
3201     + spin_unlock_irq(&port->lock);
3202     }
3203    
3204     static const char *men_z135_type(struct uart_port *port)
3205     diff --git a/drivers/tty/serial/samsung.c b/drivers/tty/serial/samsung.c
3206     index a0ae942d9562..1e0d9b8c48c9 100644
3207     --- a/drivers/tty/serial/samsung.c
3208     +++ b/drivers/tty/serial/samsung.c
3209     @@ -295,15 +295,6 @@ static int s3c24xx_serial_start_tx_dma(struct s3c24xx_uart_port *ourport,
3210     if (ourport->tx_mode != S3C24XX_TX_DMA)
3211     enable_tx_dma(ourport);
3212    
3213     - while (xmit->tail & (dma_get_cache_alignment() - 1)) {
3214     - if (rd_regl(port, S3C2410_UFSTAT) & ourport->info->tx_fifofull)
3215     - return 0;
3216     - wr_regb(port, S3C2410_UTXH, xmit->buf[xmit->tail]);
3217     - xmit->tail = (xmit->tail + 1) & (UART_XMIT_SIZE - 1);
3218     - port->icount.tx++;
3219     - count--;
3220     - }
3221     -
3222     dma->tx_size = count & ~(dma_get_cache_alignment() - 1);
3223     dma->tx_transfer_addr = dma->tx_addr + xmit->tail;
3224    
3225     @@ -342,7 +333,9 @@ static void s3c24xx_serial_start_next_tx(struct s3c24xx_uart_port *ourport)
3226     return;
3227     }
3228    
3229     - if (!ourport->dma || !ourport->dma->tx_chan || count < port->fifosize)
3230     + if (!ourport->dma || !ourport->dma->tx_chan ||
3231     + count < ourport->min_dma_size ||
3232     + xmit->tail & (dma_get_cache_alignment() - 1))
3233     s3c24xx_serial_start_tx_pio(ourport);
3234     else
3235     s3c24xx_serial_start_tx_dma(ourport, count);
3236     @@ -736,15 +729,20 @@ static irqreturn_t s3c24xx_serial_tx_chars(int irq, void *id)
3237     struct uart_port *port = &ourport->port;
3238     struct circ_buf *xmit = &port->state->xmit;
3239     unsigned long flags;
3240     - int count;
3241     + int count, dma_count = 0;
3242    
3243     spin_lock_irqsave(&port->lock, flags);
3244    
3245     count = CIRC_CNT_TO_END(xmit->head, xmit->tail, UART_XMIT_SIZE);
3246    
3247     - if (ourport->dma && ourport->dma->tx_chan && count >= port->fifosize) {
3248     - s3c24xx_serial_start_tx_dma(ourport, count);
3249     - goto out;
3250     + if (ourport->dma && ourport->dma->tx_chan &&
3251     + count >= ourport->min_dma_size) {
3252     + int align = dma_get_cache_alignment() -
3253     + (xmit->tail & (dma_get_cache_alignment() - 1));
3254     + if (count-align >= ourport->min_dma_size) {
3255     + dma_count = count-align;
3256     + count = align;
3257     + }
3258     }
3259    
3260     if (port->x_char) {
3261     @@ -765,14 +763,24 @@ static irqreturn_t s3c24xx_serial_tx_chars(int irq, void *id)
3262    
3263     /* try and drain the buffer... */
3264    
3265     - count = port->fifosize;
3266     - while (!uart_circ_empty(xmit) && count-- > 0) {
3267     + if (count > port->fifosize) {
3268     + count = port->fifosize;
3269     + dma_count = 0;
3270     + }
3271     +
3272     + while (!uart_circ_empty(xmit) && count > 0) {
3273     if (rd_regl(port, S3C2410_UFSTAT) & ourport->info->tx_fifofull)
3274     break;
3275    
3276     wr_regb(port, S3C2410_UTXH, xmit->buf[xmit->tail]);
3277     xmit->tail = (xmit->tail + 1) & (UART_XMIT_SIZE - 1);
3278     port->icount.tx++;
3279     + count--;
3280     + }
3281     +
3282     + if (!count && dma_count) {
3283     + s3c24xx_serial_start_tx_dma(ourport, dma_count);
3284     + goto out;
3285     }
3286    
3287     if (uart_circ_chars_pending(xmit) < WAKEUP_CHARS) {
3288     @@ -1838,6 +1846,13 @@ static int s3c24xx_serial_probe(struct platform_device *pdev)
3289     else if (ourport->info->fifosize)
3290     ourport->port.fifosize = ourport->info->fifosize;
3291    
3292     + /*
3293     + * DMA transfers must be aligned at least to cache line size,
3294     + * so find minimal transfer size suitable for DMA mode
3295     + */
3296     + ourport->min_dma_size = max_t(int, ourport->port.fifosize,
3297     + dma_get_cache_alignment());
3298     +
3299     probe_index++;
3300    
3301     dbg("%s: initialising port %p...\n", __func__, ourport);
3302     diff --git a/drivers/tty/serial/samsung.h b/drivers/tty/serial/samsung.h
3303     index d275032aa68d..fc5deaa4f382 100644
3304     --- a/drivers/tty/serial/samsung.h
3305     +++ b/drivers/tty/serial/samsung.h
3306     @@ -82,6 +82,7 @@ struct s3c24xx_uart_port {
3307     unsigned char tx_claimed;
3308     unsigned int pm_level;
3309     unsigned long baudclk_rate;
3310     + unsigned int min_dma_size;
3311    
3312     unsigned int rx_irq;
3313     unsigned int tx_irq;
3314     diff --git a/drivers/usb/dwc3/ep0.c b/drivers/usb/dwc3/ep0.c
3315     index 69e769c35cf5..06ecd1e6871c 100644
3316     --- a/drivers/usb/dwc3/ep0.c
3317     +++ b/drivers/usb/dwc3/ep0.c
3318     @@ -820,6 +820,11 @@ static void dwc3_ep0_complete_data(struct dwc3 *dwc,
3319     unsigned maxp = ep0->endpoint.maxpacket;
3320    
3321     transfer_size += (maxp - (transfer_size % maxp));
3322     +
3323     + /* Maximum of DWC3_EP0_BOUNCE_SIZE can only be received */
3324     + if (transfer_size > DWC3_EP0_BOUNCE_SIZE)
3325     + transfer_size = DWC3_EP0_BOUNCE_SIZE;
3326     +
3327     transferred = min_t(u32, ur->length,
3328     transfer_size - length);
3329     memcpy(ur->buf, dwc->ep0_bounce, transferred);
3330     @@ -941,11 +946,14 @@ static void __dwc3_ep0_do_control_data(struct dwc3 *dwc,
3331     return;
3332     }
3333    
3334     - WARN_ON(req->request.length > DWC3_EP0_BOUNCE_SIZE);
3335     -
3336     maxpacket = dep->endpoint.maxpacket;
3337     transfer_size = roundup(req->request.length, maxpacket);
3338    
3339     + if (transfer_size > DWC3_EP0_BOUNCE_SIZE) {
3340     + dev_WARN(dwc->dev, "bounce buf can't handle req len\n");
3341     + transfer_size = DWC3_EP0_BOUNCE_SIZE;
3342     + }
3343     +
3344     dwc->ep0_bounced = true;
3345    
3346     /*
3347     diff --git a/drivers/usb/gadget/function/f_uac2.c b/drivers/usb/gadget/function/f_uac2.c
3348     index 531861547253..96d935b00504 100644
3349     --- a/drivers/usb/gadget/function/f_uac2.c
3350     +++ b/drivers/usb/gadget/function/f_uac2.c
3351     @@ -975,6 +975,29 @@ free_ep(struct uac2_rtd_params *prm, struct usb_ep *ep)
3352     "%s:%d Error!\n", __func__, __LINE__);
3353     }
3354    
3355     +static void set_ep_max_packet_size(const struct f_uac2_opts *uac2_opts,
3356     + struct usb_endpoint_descriptor *ep_desc,
3357     + unsigned int factor, bool is_playback)
3358     +{
3359     + int chmask, srate, ssize;
3360     + u16 max_packet_size;
3361     +
3362     + if (is_playback) {
3363     + chmask = uac2_opts->p_chmask;
3364     + srate = uac2_opts->p_srate;
3365     + ssize = uac2_opts->p_ssize;
3366     + } else {
3367     + chmask = uac2_opts->c_chmask;
3368     + srate = uac2_opts->c_srate;
3369     + ssize = uac2_opts->c_ssize;
3370     + }
3371     +
3372     + max_packet_size = num_channels(chmask) * ssize *
3373     + DIV_ROUND_UP(srate, factor / (1 << (ep_desc->bInterval - 1)));
3374     + ep_desc->wMaxPacketSize = cpu_to_le16(min(max_packet_size,
3375     + le16_to_cpu(ep_desc->wMaxPacketSize)));
3376     +}
3377     +
3378     static int
3379     afunc_bind(struct usb_configuration *cfg, struct usb_function *fn)
3380     {
3381     @@ -1070,10 +1093,14 @@ afunc_bind(struct usb_configuration *cfg, struct usb_function *fn)
3382     uac2->p_prm.uac2 = uac2;
3383     uac2->c_prm.uac2 = uac2;
3384    
3385     + /* Calculate wMaxPacketSize according to audio bandwidth */
3386     + set_ep_max_packet_size(uac2_opts, &fs_epin_desc, 1000, true);
3387     + set_ep_max_packet_size(uac2_opts, &fs_epout_desc, 1000, false);
3388     + set_ep_max_packet_size(uac2_opts, &hs_epin_desc, 8000, true);
3389     + set_ep_max_packet_size(uac2_opts, &hs_epout_desc, 8000, false);
3390     +
3391     hs_epout_desc.bEndpointAddress = fs_epout_desc.bEndpointAddress;
3392     - hs_epout_desc.wMaxPacketSize = fs_epout_desc.wMaxPacketSize;
3393     hs_epin_desc.bEndpointAddress = fs_epin_desc.bEndpointAddress;
3394     - hs_epin_desc.wMaxPacketSize = fs_epin_desc.wMaxPacketSize;
3395    
3396     ret = usb_assign_descriptors(fn, fs_audio_desc, hs_audio_desc, NULL);
3397     if (ret)
3398     diff --git a/drivers/usb/gadget/udc/m66592-udc.c b/drivers/usb/gadget/udc/m66592-udc.c
3399     index 309706fe4bf0..9704053dfe05 100644
3400     --- a/drivers/usb/gadget/udc/m66592-udc.c
3401     +++ b/drivers/usb/gadget/udc/m66592-udc.c
3402     @@ -1052,7 +1052,7 @@ static void set_feature(struct m66592 *m66592, struct usb_ctrlrequest *ctrl)
3403     tmp = m66592_read(m66592, M66592_INTSTS0) &
3404     M66592_CTSQ;
3405     udelay(1);
3406     - } while (tmp != M66592_CS_IDST || timeout-- > 0);
3407     + } while (tmp != M66592_CS_IDST && timeout-- > 0);
3408    
3409     if (tmp == M66592_CS_IDST)
3410     m66592_bset(m66592,
3411     diff --git a/drivers/usb/host/ehci-sysfs.c b/drivers/usb/host/ehci-sysfs.c
3412     index 5e44407aa099..5216f2b09d63 100644
3413     --- a/drivers/usb/host/ehci-sysfs.c
3414     +++ b/drivers/usb/host/ehci-sysfs.c
3415     @@ -29,7 +29,7 @@ static ssize_t show_companion(struct device *dev,
3416     int count = PAGE_SIZE;
3417     char *ptr = buf;
3418    
3419     - ehci = hcd_to_ehci(bus_to_hcd(dev_get_drvdata(dev)));
3420     + ehci = hcd_to_ehci(dev_get_drvdata(dev));
3421     nports = HCS_N_PORTS(ehci->hcs_params);
3422    
3423     for (index = 0; index < nports; ++index) {
3424     @@ -54,7 +54,7 @@ static ssize_t store_companion(struct device *dev,
3425     struct ehci_hcd *ehci;
3426     int portnum, new_owner;
3427    
3428     - ehci = hcd_to_ehci(bus_to_hcd(dev_get_drvdata(dev)));
3429     + ehci = hcd_to_ehci(dev_get_drvdata(dev));
3430     new_owner = PORT_OWNER; /* Owned by companion */
3431     if (sscanf(buf, "%d", &portnum) != 1)
3432     return -EINVAL;
3433     @@ -85,7 +85,7 @@ static ssize_t show_uframe_periodic_max(struct device *dev,
3434     struct ehci_hcd *ehci;
3435     int n;
3436    
3437     - ehci = hcd_to_ehci(bus_to_hcd(dev_get_drvdata(dev)));
3438     + ehci = hcd_to_ehci(dev_get_drvdata(dev));
3439     n = scnprintf(buf, PAGE_SIZE, "%d\n", ehci->uframe_periodic_max);
3440     return n;
3441     }
3442     @@ -101,7 +101,7 @@ static ssize_t store_uframe_periodic_max(struct device *dev,
3443     unsigned long flags;
3444     ssize_t ret;
3445    
3446     - ehci = hcd_to_ehci(bus_to_hcd(dev_get_drvdata(dev)));
3447     + ehci = hcd_to_ehci(dev_get_drvdata(dev));
3448     if (kstrtouint(buf, 0, &uframe_periodic_max) < 0)
3449     return -EINVAL;
3450    
3451     diff --git a/drivers/usb/serial/ftdi_sio.c b/drivers/usb/serial/ftdi_sio.c
3452     index 4c8b3b82103d..a5a0376bbd48 100644
3453     --- a/drivers/usb/serial/ftdi_sio.c
3454     +++ b/drivers/usb/serial/ftdi_sio.c
3455     @@ -605,6 +605,10 @@ static const struct usb_device_id id_table_combined[] = {
3456     { USB_DEVICE(FTDI_VID, FTDI_NT_ORIONLXM_PID),
3457     .driver_info = (kernel_ulong_t)&ftdi_jtag_quirk },
3458     { USB_DEVICE(FTDI_VID, FTDI_SYNAPSE_SS200_PID) },
3459     + { USB_DEVICE(FTDI_VID, FTDI_CUSTOMWARE_MINIPLEX_PID) },
3460     + { USB_DEVICE(FTDI_VID, FTDI_CUSTOMWARE_MINIPLEX2_PID) },
3461     + { USB_DEVICE(FTDI_VID, FTDI_CUSTOMWARE_MINIPLEX2WI_PID) },
3462     + { USB_DEVICE(FTDI_VID, FTDI_CUSTOMWARE_MINIPLEX3_PID) },
3463     /*
3464     * ELV devices:
3465     */
3466     diff --git a/drivers/usb/serial/ftdi_sio_ids.h b/drivers/usb/serial/ftdi_sio_ids.h
3467     index 792e054126de..2943b97b2a83 100644
3468     --- a/drivers/usb/serial/ftdi_sio_ids.h
3469     +++ b/drivers/usb/serial/ftdi_sio_ids.h
3470     @@ -568,6 +568,14 @@
3471     */
3472     #define FTDI_SYNAPSE_SS200_PID 0x9090 /* SS200 - SNAP Stick 200 */
3473    
3474     +/*
3475     + * CustomWare / ShipModul NMEA multiplexers product ids (FTDI_VID)
3476     + */
3477     +#define FTDI_CUSTOMWARE_MINIPLEX_PID 0xfd48 /* MiniPlex first generation NMEA Multiplexer */
3478     +#define FTDI_CUSTOMWARE_MINIPLEX2_PID 0xfd49 /* MiniPlex-USB and MiniPlex-2 series */
3479     +#define FTDI_CUSTOMWARE_MINIPLEX2WI_PID 0xfd4a /* MiniPlex-2Wi */
3480     +#define FTDI_CUSTOMWARE_MINIPLEX3_PID 0xfd4b /* MiniPlex-3 series */
3481     +
3482    
3483     /********************************/
3484     /** third-party VID/PID combos **/
3485     diff --git a/drivers/usb/serial/pl2303.c b/drivers/usb/serial/pl2303.c
3486     index f5257af33ecf..ae682e4eeaef 100644
3487     --- a/drivers/usb/serial/pl2303.c
3488     +++ b/drivers/usb/serial/pl2303.c
3489     @@ -362,21 +362,38 @@ static speed_t pl2303_encode_baud_rate_direct(unsigned char buf[4],
3490     static speed_t pl2303_encode_baud_rate_divisor(unsigned char buf[4],
3491     speed_t baud)
3492     {
3493     - unsigned int tmp;
3494     + unsigned int baseline, mantissa, exponent;
3495    
3496     /*
3497     * Apparently the formula is:
3498     - * baudrate = 12M * 32 / (2^buf[1]) / buf[0]
3499     + * baudrate = 12M * 32 / (mantissa * 4^exponent)
3500     + * where
3501     + * mantissa = buf[8:0]
3502     + * exponent = buf[11:9]
3503     */
3504     - tmp = 12000000 * 32 / baud;
3505     + baseline = 12000000 * 32;
3506     + mantissa = baseline / baud;
3507     + if (mantissa == 0)
3508     + mantissa = 1; /* Avoid dividing by zero if baud > 32*12M. */
3509     + exponent = 0;
3510     + while (mantissa >= 512) {
3511     + if (exponent < 7) {
3512     + mantissa >>= 2; /* divide by 4 */
3513     + exponent++;
3514     + } else {
3515     + /* Exponent is maxed. Trim mantissa and leave. */
3516     + mantissa = 511;
3517     + break;
3518     + }
3519     + }
3520     +
3521     buf[3] = 0x80;
3522     buf[2] = 0;
3523     - buf[1] = (tmp >= 256);
3524     - while (tmp >= 256) {
3525     - tmp >>= 2;
3526     - buf[1] <<= 1;
3527     - }
3528     - buf[0] = tmp;
3529     + buf[1] = exponent << 1 | mantissa >> 8;
3530     + buf[0] = mantissa & 0xff;
3531     +
3532     + /* Calculate and return the exact baud rate. */
3533     + baud = (baseline / mantissa) >> (exponent << 1);
3534    
3535     return baud;
3536     }
3537     diff --git a/drivers/usb/serial/qcserial.c b/drivers/usb/serial/qcserial.c
3538     index d156545728c2..ebcec8cda858 100644
3539     --- a/drivers/usb/serial/qcserial.c
3540     +++ b/drivers/usb/serial/qcserial.c
3541     @@ -139,6 +139,7 @@ static const struct usb_device_id id_table[] = {
3542     {USB_DEVICE(0x0AF0, 0x8120)}, /* Option GTM681W */
3543    
3544     /* non-Gobi Sierra Wireless devices */
3545     + {DEVICE_SWI(0x03f0, 0x4e1d)}, /* HP lt4111 LTE/EV-DO/HSPA+ Gobi 4G Module */
3546     {DEVICE_SWI(0x0f3d, 0x68a2)}, /* Sierra Wireless MC7700 */
3547     {DEVICE_SWI(0x114f, 0x68a2)}, /* Sierra Wireless MC7750 */
3548     {DEVICE_SWI(0x1199, 0x68a2)}, /* Sierra Wireless MC7710 */
3549     diff --git a/drivers/usb/serial/symbolserial.c b/drivers/usb/serial/symbolserial.c
3550     index 8fceec7298e0..6ed804450a5a 100644
3551     --- a/drivers/usb/serial/symbolserial.c
3552     +++ b/drivers/usb/serial/symbolserial.c
3553     @@ -94,7 +94,7 @@ exit:
3554    
3555     static int symbol_open(struct tty_struct *tty, struct usb_serial_port *port)
3556     {
3557     - struct symbol_private *priv = usb_get_serial_data(port->serial);
3558     + struct symbol_private *priv = usb_get_serial_port_data(port);
3559     unsigned long flags;
3560     int result = 0;
3561    
3562     @@ -120,7 +120,7 @@ static void symbol_close(struct usb_serial_port *port)
3563     static void symbol_throttle(struct tty_struct *tty)
3564     {
3565     struct usb_serial_port *port = tty->driver_data;
3566     - struct symbol_private *priv = usb_get_serial_data(port->serial);
3567     + struct symbol_private *priv = usb_get_serial_port_data(port);
3568    
3569     spin_lock_irq(&priv->lock);
3570     priv->throttled = true;
3571     @@ -130,7 +130,7 @@ static void symbol_throttle(struct tty_struct *tty)
3572     static void symbol_unthrottle(struct tty_struct *tty)
3573     {
3574     struct usb_serial_port *port = tty->driver_data;
3575     - struct symbol_private *priv = usb_get_serial_data(port->serial);
3576     + struct symbol_private *priv = usb_get_serial_port_data(port);
3577     int result;
3578     bool was_throttled;
3579    
3580     diff --git a/fs/ceph/super.c b/fs/ceph/super.c
3581     index 4e9905374078..0d47422e3548 100644
3582     --- a/fs/ceph/super.c
3583     +++ b/fs/ceph/super.c
3584     @@ -466,7 +466,7 @@ static int ceph_show_options(struct seq_file *m, struct dentry *root)
3585     if (fsopt->max_readdir_bytes != CEPH_MAX_READDIR_BYTES_DEFAULT)
3586     seq_printf(m, ",readdir_max_bytes=%d", fsopt->max_readdir_bytes);
3587     if (strcmp(fsopt->snapdir_name, CEPH_SNAPDIRNAME_DEFAULT))
3588     - seq_printf(m, ",snapdirname=%s", fsopt->snapdir_name);
3589     + seq_show_option(m, "snapdirname", fsopt->snapdir_name);
3590    
3591     return 0;
3592     }
3593     diff --git a/fs/cifs/cifsfs.c b/fs/cifs/cifsfs.c
3594     index 0a9fb6b53126..6a1119e87fbb 100644
3595     --- a/fs/cifs/cifsfs.c
3596     +++ b/fs/cifs/cifsfs.c
3597     @@ -394,17 +394,17 @@ cifs_show_options(struct seq_file *s, struct dentry *root)
3598     struct sockaddr *srcaddr;
3599     srcaddr = (struct sockaddr *)&tcon->ses->server->srcaddr;
3600    
3601     - seq_printf(s, ",vers=%s", tcon->ses->server->vals->version_string);
3602     + seq_show_option(s, "vers", tcon->ses->server->vals->version_string);
3603     cifs_show_security(s, tcon->ses);
3604     cifs_show_cache_flavor(s, cifs_sb);
3605    
3606     if (cifs_sb->mnt_cifs_flags & CIFS_MOUNT_MULTIUSER)
3607     seq_puts(s, ",multiuser");
3608     else if (tcon->ses->user_name)
3609     - seq_printf(s, ",username=%s", tcon->ses->user_name);
3610     + seq_show_option(s, "username", tcon->ses->user_name);
3611    
3612     if (tcon->ses->domainName)
3613     - seq_printf(s, ",domain=%s", tcon->ses->domainName);
3614     + seq_show_option(s, "domain", tcon->ses->domainName);
3615    
3616     if (srcaddr->sa_family != AF_UNSPEC) {
3617     struct sockaddr_in *saddr4;
3618     diff --git a/fs/ext4/super.c b/fs/ext4/super.c
3619     index ca12affdba96..6b4eb94b04a5 100644
3620     --- a/fs/ext4/super.c
3621     +++ b/fs/ext4/super.c
3622     @@ -1738,10 +1738,10 @@ static inline void ext4_show_quota_options(struct seq_file *seq,
3623     }
3624    
3625     if (sbi->s_qf_names[USRQUOTA])
3626     - seq_printf(seq, ",usrjquota=%s", sbi->s_qf_names[USRQUOTA]);
3627     + seq_show_option(seq, "usrjquota", sbi->s_qf_names[USRQUOTA]);
3628    
3629     if (sbi->s_qf_names[GRPQUOTA])
3630     - seq_printf(seq, ",grpjquota=%s", sbi->s_qf_names[GRPQUOTA]);
3631     + seq_show_option(seq, "grpjquota", sbi->s_qf_names[GRPQUOTA]);
3632     #endif
3633     }
3634    
3635     diff --git a/fs/gfs2/super.c b/fs/gfs2/super.c
3636     index 859c6edbf81a..c18b49dc5d4f 100644
3637     --- a/fs/gfs2/super.c
3638     +++ b/fs/gfs2/super.c
3639     @@ -1334,11 +1334,11 @@ static int gfs2_show_options(struct seq_file *s, struct dentry *root)
3640     if (is_ancestor(root, sdp->sd_master_dir))
3641     seq_puts(s, ",meta");
3642     if (args->ar_lockproto[0])
3643     - seq_printf(s, ",lockproto=%s", args->ar_lockproto);
3644     + seq_show_option(s, "lockproto", args->ar_lockproto);
3645     if (args->ar_locktable[0])
3646     - seq_printf(s, ",locktable=%s", args->ar_locktable);
3647     + seq_show_option(s, "locktable", args->ar_locktable);
3648     if (args->ar_hostdata[0])
3649     - seq_printf(s, ",hostdata=%s", args->ar_hostdata);
3650     + seq_show_option(s, "hostdata", args->ar_hostdata);
3651     if (args->ar_spectator)
3652     seq_puts(s, ",spectator");
3653     if (args->ar_localflocks)
3654     diff --git a/fs/hfs/super.c b/fs/hfs/super.c
3655     index eee7206c38d1..410b65eea683 100644
3656     --- a/fs/hfs/super.c
3657     +++ b/fs/hfs/super.c
3658     @@ -135,9 +135,9 @@ static int hfs_show_options(struct seq_file *seq, struct dentry *root)
3659     struct hfs_sb_info *sbi = HFS_SB(root->d_sb);
3660    
3661     if (sbi->s_creator != cpu_to_be32(0x3f3f3f3f))
3662     - seq_printf(seq, ",creator=%.4s", (char *)&sbi->s_creator);
3663     + seq_show_option_n(seq, "creator", (char *)&sbi->s_creator, 4);
3664     if (sbi->s_type != cpu_to_be32(0x3f3f3f3f))
3665     - seq_printf(seq, ",type=%.4s", (char *)&sbi->s_type);
3666     + seq_show_option_n(seq, "type", (char *)&sbi->s_type, 4);
3667     seq_printf(seq, ",uid=%u,gid=%u",
3668     from_kuid_munged(&init_user_ns, sbi->s_uid),
3669     from_kgid_munged(&init_user_ns, sbi->s_gid));
3670     diff --git a/fs/hfsplus/options.c b/fs/hfsplus/options.c
3671     index c90b72ee676d..bb806e58c977 100644
3672     --- a/fs/hfsplus/options.c
3673     +++ b/fs/hfsplus/options.c
3674     @@ -218,9 +218,9 @@ int hfsplus_show_options(struct seq_file *seq, struct dentry *root)
3675     struct hfsplus_sb_info *sbi = HFSPLUS_SB(root->d_sb);
3676    
3677     if (sbi->creator != HFSPLUS_DEF_CR_TYPE)
3678     - seq_printf(seq, ",creator=%.4s", (char *)&sbi->creator);
3679     + seq_show_option_n(seq, "creator", (char *)&sbi->creator, 4);
3680     if (sbi->type != HFSPLUS_DEF_CR_TYPE)
3681     - seq_printf(seq, ",type=%.4s", (char *)&sbi->type);
3682     + seq_show_option_n(seq, "type", (char *)&sbi->type, 4);
3683     seq_printf(seq, ",umask=%o,uid=%u,gid=%u", sbi->umask,
3684     from_kuid_munged(&init_user_ns, sbi->uid),
3685     from_kgid_munged(&init_user_ns, sbi->gid));
3686     diff --git a/fs/hostfs/hostfs_kern.c b/fs/hostfs/hostfs_kern.c
3687     index 07d8d8f52faf..de2d6245e9fa 100644
3688     --- a/fs/hostfs/hostfs_kern.c
3689     +++ b/fs/hostfs/hostfs_kern.c
3690     @@ -260,7 +260,7 @@ static int hostfs_show_options(struct seq_file *seq, struct dentry *root)
3691     size_t offset = strlen(root_ino) + 1;
3692    
3693     if (strlen(root_path) > offset)
3694     - seq_printf(seq, ",%s", root_path + offset);
3695     + seq_show_option(seq, root_path + offset, NULL);
3696    
3697     if (append)
3698     seq_puts(seq, ",append");
3699     diff --git a/fs/hpfs/namei.c b/fs/hpfs/namei.c
3700     index a0872f239f04..9e92c9c2d319 100644
3701     --- a/fs/hpfs/namei.c
3702     +++ b/fs/hpfs/namei.c
3703     @@ -8,6 +8,17 @@
3704     #include <linux/sched.h>
3705     #include "hpfs_fn.h"
3706    
3707     +static void hpfs_update_directory_times(struct inode *dir)
3708     +{
3709     + time_t t = get_seconds();
3710     + if (t == dir->i_mtime.tv_sec &&
3711     + t == dir->i_ctime.tv_sec)
3712     + return;
3713     + dir->i_mtime.tv_sec = dir->i_ctime.tv_sec = t;
3714     + dir->i_mtime.tv_nsec = dir->i_ctime.tv_nsec = 0;
3715     + hpfs_write_inode_nolock(dir);
3716     +}
3717     +
3718     static int hpfs_mkdir(struct inode *dir, struct dentry *dentry, umode_t mode)
3719     {
3720     const unsigned char *name = dentry->d_name.name;
3721     @@ -99,6 +110,7 @@ static int hpfs_mkdir(struct inode *dir, struct dentry *dentry, umode_t mode)
3722     result->i_mode = mode | S_IFDIR;
3723     hpfs_write_inode_nolock(result);
3724     }
3725     + hpfs_update_directory_times(dir);
3726     d_instantiate(dentry, result);
3727     hpfs_unlock(dir->i_sb);
3728     return 0;
3729     @@ -187,6 +199,7 @@ static int hpfs_create(struct inode *dir, struct dentry *dentry, umode_t mode, b
3730     result->i_mode = mode | S_IFREG;
3731     hpfs_write_inode_nolock(result);
3732     }
3733     + hpfs_update_directory_times(dir);
3734     d_instantiate(dentry, result);
3735     hpfs_unlock(dir->i_sb);
3736     return 0;
3737     @@ -262,6 +275,7 @@ static int hpfs_mknod(struct inode *dir, struct dentry *dentry, umode_t mode, de
3738     insert_inode_hash(result);
3739    
3740     hpfs_write_inode_nolock(result);
3741     + hpfs_update_directory_times(dir);
3742     d_instantiate(dentry, result);
3743     brelse(bh);
3744     hpfs_unlock(dir->i_sb);
3745     @@ -340,6 +354,7 @@ static int hpfs_symlink(struct inode *dir, struct dentry *dentry, const char *sy
3746     insert_inode_hash(result);
3747    
3748     hpfs_write_inode_nolock(result);
3749     + hpfs_update_directory_times(dir);
3750     d_instantiate(dentry, result);
3751     hpfs_unlock(dir->i_sb);
3752     return 0;
3753     @@ -423,6 +438,8 @@ again:
3754     out1:
3755     hpfs_brelse4(&qbh);
3756     out:
3757     + if (!err)
3758     + hpfs_update_directory_times(dir);
3759     hpfs_unlock(dir->i_sb);
3760     return err;
3761     }
3762     @@ -477,6 +494,8 @@ static int hpfs_rmdir(struct inode *dir, struct dentry *dentry)
3763     out1:
3764     hpfs_brelse4(&qbh);
3765     out:
3766     + if (!err)
3767     + hpfs_update_directory_times(dir);
3768     hpfs_unlock(dir->i_sb);
3769     return err;
3770     }
3771     @@ -595,7 +614,7 @@ static int hpfs_rename(struct inode *old_dir, struct dentry *old_dentry,
3772     goto end1;
3773     }
3774    
3775     - end:
3776     +end:
3777     hpfs_i(i)->i_parent_dir = new_dir->i_ino;
3778     if (S_ISDIR(i->i_mode)) {
3779     inc_nlink(new_dir);
3780     @@ -610,6 +629,10 @@ static int hpfs_rename(struct inode *old_dir, struct dentry *old_dentry,
3781     brelse(bh);
3782     }
3783     end1:
3784     + if (!err) {
3785     + hpfs_update_directory_times(old_dir);
3786     + hpfs_update_directory_times(new_dir);
3787     + }
3788     hpfs_unlock(i->i_sb);
3789     return err;
3790     }
3791     diff --git a/fs/libfs.c b/fs/libfs.c
3792     index 02813592e121..f4641fd27bda 100644
3793     --- a/fs/libfs.c
3794     +++ b/fs/libfs.c
3795     @@ -1176,7 +1176,7 @@ void make_empty_dir_inode(struct inode *inode)
3796     inode->i_uid = GLOBAL_ROOT_UID;
3797     inode->i_gid = GLOBAL_ROOT_GID;
3798     inode->i_rdev = 0;
3799     - inode->i_size = 2;
3800     + inode->i_size = 0;
3801     inode->i_blkbits = PAGE_SHIFT;
3802     inode->i_blocks = 0;
3803    
3804     diff --git a/fs/ocfs2/super.c b/fs/ocfs2/super.c
3805     index 403c5660b306..a482e312c7b2 100644
3806     --- a/fs/ocfs2/super.c
3807     +++ b/fs/ocfs2/super.c
3808     @@ -1550,8 +1550,8 @@ static int ocfs2_show_options(struct seq_file *s, struct dentry *root)
3809     seq_printf(s, ",localflocks,");
3810    
3811     if (osb->osb_cluster_stack[0])
3812     - seq_printf(s, ",cluster_stack=%.*s", OCFS2_STACK_LABEL_LEN,
3813     - osb->osb_cluster_stack);
3814     + seq_show_option_n(s, "cluster_stack", osb->osb_cluster_stack,
3815     + OCFS2_STACK_LABEL_LEN);
3816     if (opts & OCFS2_MOUNT_USRQUOTA)
3817     seq_printf(s, ",usrquota");
3818     if (opts & OCFS2_MOUNT_GRPQUOTA)
3819     diff --git a/fs/overlayfs/super.c b/fs/overlayfs/super.c
3820     index bf8537c7f455..155989455a72 100644
3821     --- a/fs/overlayfs/super.c
3822     +++ b/fs/overlayfs/super.c
3823     @@ -517,10 +517,10 @@ static int ovl_show_options(struct seq_file *m, struct dentry *dentry)
3824     struct super_block *sb = dentry->d_sb;
3825     struct ovl_fs *ufs = sb->s_fs_info;
3826    
3827     - seq_printf(m, ",lowerdir=%s", ufs->config.lowerdir);
3828     + seq_show_option(m, "lowerdir", ufs->config.lowerdir);
3829     if (ufs->config.upperdir) {
3830     - seq_printf(m, ",upperdir=%s", ufs->config.upperdir);
3831     - seq_printf(m, ",workdir=%s", ufs->config.workdir);
3832     + seq_show_option(m, "upperdir", ufs->config.upperdir);
3833     + seq_show_option(m, "workdir", ufs->config.workdir);
3834     }
3835     return 0;
3836     }
3837     diff --git a/fs/reiserfs/super.c b/fs/reiserfs/super.c
3838     index 0111ad0466ed..cf6fa25f884b 100644
3839     --- a/fs/reiserfs/super.c
3840     +++ b/fs/reiserfs/super.c
3841     @@ -714,18 +714,20 @@ static int reiserfs_show_options(struct seq_file *seq, struct dentry *root)
3842     seq_puts(seq, ",acl");
3843    
3844     if (REISERFS_SB(s)->s_jdev)
3845     - seq_printf(seq, ",jdev=%s", REISERFS_SB(s)->s_jdev);
3846     + seq_show_option(seq, "jdev", REISERFS_SB(s)->s_jdev);
3847    
3848     if (journal->j_max_commit_age != journal->j_default_max_commit_age)
3849     seq_printf(seq, ",commit=%d", journal->j_max_commit_age);
3850    
3851     #ifdef CONFIG_QUOTA
3852     if (REISERFS_SB(s)->s_qf_names[USRQUOTA])
3853     - seq_printf(seq, ",usrjquota=%s", REISERFS_SB(s)->s_qf_names[USRQUOTA]);
3854     + seq_show_option(seq, "usrjquota",
3855     + REISERFS_SB(s)->s_qf_names[USRQUOTA]);
3856     else if (opts & (1 << REISERFS_USRQUOTA))
3857     seq_puts(seq, ",usrquota");
3858     if (REISERFS_SB(s)->s_qf_names[GRPQUOTA])
3859     - seq_printf(seq, ",grpjquota=%s", REISERFS_SB(s)->s_qf_names[GRPQUOTA]);
3860     + seq_show_option(seq, "grpjquota",
3861     + REISERFS_SB(s)->s_qf_names[GRPQUOTA]);
3862     else if (opts & (1 << REISERFS_GRPQUOTA))
3863     seq_puts(seq, ",grpquota");
3864     if (REISERFS_SB(s)->s_jquota_fmt) {
3865     diff --git a/fs/xfs/libxfs/xfs_da_format.h b/fs/xfs/libxfs/xfs_da_format.h
3866     index 74bcbabfa523..b14bbd6bb05f 100644
3867     --- a/fs/xfs/libxfs/xfs_da_format.h
3868     +++ b/fs/xfs/libxfs/xfs_da_format.h
3869     @@ -680,8 +680,15 @@ typedef struct xfs_attr_leaf_name_remote {
3870     typedef struct xfs_attr_leafblock {
3871     xfs_attr_leaf_hdr_t hdr; /* constant-structure header block */
3872     xfs_attr_leaf_entry_t entries[1]; /* sorted on key, not name */
3873     - xfs_attr_leaf_name_local_t namelist; /* grows from bottom of buf */
3874     - xfs_attr_leaf_name_remote_t valuelist; /* grows from bottom of buf */
3875     + /*
3876     + * The rest of the block contains the following structures after the
3877     + * leaf entries, growing from the bottom up. The variables are never
3878     + * referenced and definining them can actually make gcc optimize away
3879     + * accesses to the 'entries' array above index 0 so don't do that.
3880     + *
3881     + * xfs_attr_leaf_name_local_t namelist;
3882     + * xfs_attr_leaf_name_remote_t valuelist;
3883     + */
3884     } xfs_attr_leafblock_t;
3885    
3886     /*
3887     diff --git a/fs/xfs/libxfs/xfs_dir2_data.c b/fs/xfs/libxfs/xfs_dir2_data.c
3888     index de1ea16f5748..534bbf283d6b 100644
3889     --- a/fs/xfs/libxfs/xfs_dir2_data.c
3890     +++ b/fs/xfs/libxfs/xfs_dir2_data.c
3891     @@ -252,7 +252,8 @@ xfs_dir3_data_reada_verify(
3892     return;
3893     case cpu_to_be32(XFS_DIR2_DATA_MAGIC):
3894     case cpu_to_be32(XFS_DIR3_DATA_MAGIC):
3895     - xfs_dir3_data_verify(bp);
3896     + bp->b_ops = &xfs_dir3_data_buf_ops;
3897     + bp->b_ops->verify_read(bp);
3898     return;
3899     default:
3900     xfs_buf_ioerror(bp, -EFSCORRUPTED);
3901     diff --git a/fs/xfs/libxfs/xfs_dir2_node.c b/fs/xfs/libxfs/xfs_dir2_node.c
3902     index 41b80d3d3877..06bb4218b362 100644
3903     --- a/fs/xfs/libxfs/xfs_dir2_node.c
3904     +++ b/fs/xfs/libxfs/xfs_dir2_node.c
3905     @@ -2132,6 +2132,7 @@ xfs_dir2_node_replace(
3906     int error; /* error return value */
3907     int i; /* btree level */
3908     xfs_ino_t inum; /* new inode number */
3909     + int ftype; /* new file type */
3910     xfs_dir2_leaf_t *leaf; /* leaf structure */
3911     xfs_dir2_leaf_entry_t *lep; /* leaf entry being changed */
3912     int rval; /* internal return value */
3913     @@ -2145,7 +2146,14 @@ xfs_dir2_node_replace(
3914     state = xfs_da_state_alloc();
3915     state->args = args;
3916     state->mp = args->dp->i_mount;
3917     +
3918     + /*
3919     + * We have to save new inode number and ftype since
3920     + * xfs_da3_node_lookup_int() is going to overwrite them
3921     + */
3922     inum = args->inumber;
3923     + ftype = args->filetype;
3924     +
3925     /*
3926     * Lookup the entry to change in the btree.
3927     */
3928     @@ -2183,7 +2191,7 @@ xfs_dir2_node_replace(
3929     * Fill in the new inode number and log the entry.
3930     */
3931     dep->inumber = cpu_to_be64(inum);
3932     - args->dp->d_ops->data_put_ftype(dep, args->filetype);
3933     + args->dp->d_ops->data_put_ftype(dep, ftype);
3934     xfs_dir2_data_log_entry(args, state->extrablk.bp, dep);
3935     rval = 0;
3936     }
3937     diff --git a/fs/xfs/xfs_super.c b/fs/xfs/xfs_super.c
3938     index 858e1e62bbaa..65a45372fb1f 100644
3939     --- a/fs/xfs/xfs_super.c
3940     +++ b/fs/xfs/xfs_super.c
3941     @@ -504,9 +504,9 @@ xfs_showargs(
3942     seq_printf(m, "," MNTOPT_LOGBSIZE "=%dk", mp->m_logbsize >> 10);
3943    
3944     if (mp->m_logname)
3945     - seq_printf(m, "," MNTOPT_LOGDEV "=%s", mp->m_logname);
3946     + seq_show_option(m, MNTOPT_LOGDEV, mp->m_logname);
3947     if (mp->m_rtname)
3948     - seq_printf(m, "," MNTOPT_RTDEV "=%s", mp->m_rtname);
3949     + seq_show_option(m, MNTOPT_RTDEV, mp->m_rtname);
3950    
3951     if (mp->m_dalign > 0)
3952     seq_printf(m, "," MNTOPT_SUNIT "=%d",
3953     diff --git a/include/linux/acpi.h b/include/linux/acpi.h
3954     index 4550be3bb63b..808c43afa8ac 100644
3955     --- a/include/linux/acpi.h
3956     +++ b/include/linux/acpi.h
3957     @@ -198,7 +198,7 @@ struct pci_dev;
3958    
3959     int acpi_pci_irq_enable (struct pci_dev *dev);
3960     void acpi_penalize_isa_irq(int irq, int active);
3961     -
3962     +void acpi_penalize_sci_irq(int irq, int trigger, int polarity);
3963     void acpi_pci_irq_disable (struct pci_dev *dev);
3964    
3965     extern int ec_read(u8 addr, u8 *val);
3966     diff --git a/include/linux/iio/iio.h b/include/linux/iio/iio.h
3967     index d86b753e9b30..5ed7771ad386 100644
3968     --- a/include/linux/iio/iio.h
3969     +++ b/include/linux/iio/iio.h
3970     @@ -642,6 +642,15 @@ int iio_str_to_fixpoint(const char *str, int fract_mult, int *integer,
3971     #define IIO_DEGREE_TO_RAD(deg) (((deg) * 314159ULL + 9000000ULL) / 18000000ULL)
3972    
3973     /**
3974     + * IIO_RAD_TO_DEGREE() - Convert rad to degree
3975     + * @rad: A value in rad
3976     + *
3977     + * Returns the given value converted from rad to degree
3978     + */
3979     +#define IIO_RAD_TO_DEGREE(rad) \
3980     + (((rad) * 18000000ULL + 314159ULL / 2) / 314159ULL)
3981     +
3982     +/**
3983     * IIO_G_TO_M_S_2() - Convert g to meter / second**2
3984     * @g: A value in g
3985     *
3986     @@ -649,4 +658,12 @@ int iio_str_to_fixpoint(const char *str, int fract_mult, int *integer,
3987     */
3988     #define IIO_G_TO_M_S_2(g) ((g) * 980665ULL / 100000ULL)
3989    
3990     +/**
3991     + * IIO_M_S_2_TO_G() - Convert meter / second**2 to g
3992     + * @ms2: A value in meter / second**2
3993     + *
3994     + * Returns the given value converted from meter / second**2 to g
3995     + */
3996     +#define IIO_M_S_2_TO_G(ms2) (((ms2) * 100000ULL + 980665ULL / 2) / 980665ULL)
3997     +
3998     #endif /* _INDUSTRIAL_IO_H_ */
3999     diff --git a/include/linux/pci.h b/include/linux/pci.h
4000     index 3ef3a52068df..6e935e5eab56 100644
4001     --- a/include/linux/pci.h
4002     +++ b/include/linux/pci.h
4003     @@ -180,6 +180,8 @@ enum pci_dev_flags {
4004     PCI_DEV_FLAGS_NO_BUS_RESET = (__force pci_dev_flags_t) (1 << 6),
4005     /* Do not use PM reset even if device advertises NoSoftRst- */
4006     PCI_DEV_FLAGS_NO_PM_RESET = (__force pci_dev_flags_t) (1 << 7),
4007     + /* Get VPD from function 0 VPD */
4008     + PCI_DEV_FLAGS_VPD_REF_F0 = (__force pci_dev_flags_t) (1 << 8),
4009     };
4010    
4011     enum pci_irq_reroute_variant {
4012     diff --git a/include/linux/seq_file.h b/include/linux/seq_file.h
4013     index afbb1fd77c77..7848473a5bc8 100644
4014     --- a/include/linux/seq_file.h
4015     +++ b/include/linux/seq_file.h
4016     @@ -148,6 +148,41 @@ static inline struct user_namespace *seq_user_ns(struct seq_file *seq)
4017     #endif
4018     }
4019    
4020     +/**
4021     + * seq_show_options - display mount options with appropriate escapes.
4022     + * @m: the seq_file handle
4023     + * @name: the mount option name
4024     + * @value: the mount option name's value, can be NULL
4025     + */
4026     +static inline void seq_show_option(struct seq_file *m, const char *name,
4027     + const char *value)
4028     +{
4029     + seq_putc(m, ',');
4030     + seq_escape(m, name, ",= \t\n\\");
4031     + if (value) {
4032     + seq_putc(m, '=');
4033     + seq_escape(m, value, ", \t\n\\");
4034     + }
4035     +}
4036     +
4037     +/**
4038     + * seq_show_option_n - display mount options with appropriate escapes
4039     + * where @value must be a specific length.
4040     + * @m: the seq_file handle
4041     + * @name: the mount option name
4042     + * @value: the mount option name's value, cannot be NULL
4043     + * @length: the length of @value to display
4044     + *
4045     + * This is a macro since this uses "length" to define the size of the
4046     + * stack buffer.
4047     + */
4048     +#define seq_show_option_n(m, name, value, length) { \
4049     + char val_buf[length + 1]; \
4050     + strncpy(val_buf, value, length); \
4051     + val_buf[length] = '\0'; \
4052     + seq_show_option(m, name, val_buf); \
4053     +}
4054     +
4055     #define SEQ_START_TOKEN ((void *)1)
4056     /*
4057     * Helpers for iteration over list_head-s in seq_files
4058     diff --git a/kernel/cgroup.c b/kernel/cgroup.c
4059     index e8a5491be756..4d65b66ae60d 100644
4060     --- a/kernel/cgroup.c
4061     +++ b/kernel/cgroup.c
4062     @@ -1319,7 +1319,7 @@ static int cgroup_show_options(struct seq_file *seq,
4063    
4064     for_each_subsys(ss, ssid)
4065     if (root->subsys_mask & (1 << ssid))
4066     - seq_printf(seq, ",%s", ss->name);
4067     + seq_show_option(seq, ss->name, NULL);
4068     if (root->flags & CGRP_ROOT_NOPREFIX)
4069     seq_puts(seq, ",noprefix");
4070     if (root->flags & CGRP_ROOT_XATTR)
4071     @@ -1327,13 +1327,14 @@ static int cgroup_show_options(struct seq_file *seq,
4072    
4073     spin_lock(&release_agent_path_lock);
4074     if (strlen(root->release_agent_path))
4075     - seq_printf(seq, ",release_agent=%s", root->release_agent_path);
4076     + seq_show_option(seq, "release_agent",
4077     + root->release_agent_path);
4078     spin_unlock(&release_agent_path_lock);
4079    
4080     if (test_bit(CGRP_CPUSET_CLONE_CHILDREN, &root->cgrp.flags))
4081     seq_puts(seq, ",clone_children");
4082     if (strlen(root->name))
4083     - seq_printf(seq, ",name=%s", root->name);
4084     + seq_show_option(seq, "name", root->name);
4085     return 0;
4086     }
4087    
4088     diff --git a/kernel/sched/core.c b/kernel/sched/core.c
4089     index 123673291ffb..e6910526c84b 100644
4090     --- a/kernel/sched/core.c
4091     +++ b/kernel/sched/core.c
4092     @@ -5328,6 +5328,14 @@ static int sched_cpu_active(struct notifier_block *nfb,
4093     case CPU_STARTING:
4094     set_cpu_rq_start_time();
4095     return NOTIFY_OK;
4096     + case CPU_ONLINE:
4097     + /*
4098     + * At this point a starting CPU has marked itself as online via
4099     + * set_cpu_online(). But it might not yet have marked itself
4100     + * as active, which is essential from here on.
4101     + *
4102     + * Thus, fall-through and help the starting CPU along.
4103     + */
4104     case CPU_DOWN_FAILED:
4105     set_cpu_active((long)hcpu, true);
4106     return NOTIFY_OK;
4107     diff --git a/net/ceph/ceph_common.c b/net/ceph/ceph_common.c
4108     index 79e8f71aef5b..3f76eb84b395 100644
4109     --- a/net/ceph/ceph_common.c
4110     +++ b/net/ceph/ceph_common.c
4111     @@ -495,8 +495,11 @@ int ceph_print_client_options(struct seq_file *m, struct ceph_client *client)
4112     struct ceph_options *opt = client->options;
4113     size_t pos = m->count;
4114    
4115     - if (opt->name)
4116     - seq_printf(m, "name=%s,", opt->name);
4117     + if (opt->name) {
4118     + seq_puts(m, "name=");
4119     + seq_escape(m, opt->name, ", \t\n\\");
4120     + seq_putc(m, ',');
4121     + }
4122     if (opt->key)
4123     seq_puts(m, "secret=<hidden>,");
4124    
4125     diff --git a/security/selinux/hooks.c b/security/selinux/hooks.c
4126     index 7f8d7f19e044..280235cc3a98 100644
4127     --- a/security/selinux/hooks.c
4128     +++ b/security/selinux/hooks.c
4129     @@ -1095,7 +1095,7 @@ static void selinux_write_opts(struct seq_file *m,
4130     seq_puts(m, prefix);
4131     if (has_comma)
4132     seq_putc(m, '\"');
4133     - seq_puts(m, opts->mnt_opts[i]);
4134     + seq_escape(m, opts->mnt_opts[i], "\"\n\\");
4135     if (has_comma)
4136     seq_putc(m, '\"');
4137     }
4138     diff --git a/sound/soc/codecs/adav80x.c b/sound/soc/codecs/adav80x.c
4139     index 4373ada95648..3a91a00fb973 100644
4140     --- a/sound/soc/codecs/adav80x.c
4141     +++ b/sound/soc/codecs/adav80x.c
4142     @@ -864,7 +864,6 @@ const struct regmap_config adav80x_regmap_config = {
4143     .val_bits = 8,
4144     .pad_bits = 1,
4145     .reg_bits = 7,
4146     - .read_flag_mask = 0x01,
4147    
4148     .max_register = ADAV80X_PLL_OUTE,
4149    
4150     diff --git a/sound/soc/codecs/arizona.c b/sound/soc/codecs/arizona.c
4151     index eff4b4d512b7..ee91edcf3cb0 100644
4152     --- a/sound/soc/codecs/arizona.c
4153     +++ b/sound/soc/codecs/arizona.c
4154     @@ -1610,17 +1610,6 @@ int arizona_init_dai(struct arizona_priv *priv, int id)
4155     }
4156     EXPORT_SYMBOL_GPL(arizona_init_dai);
4157    
4158     -static irqreturn_t arizona_fll_clock_ok(int irq, void *data)
4159     -{
4160     - struct arizona_fll *fll = data;
4161     -
4162     - arizona_fll_dbg(fll, "clock OK\n");
4163     -
4164     - complete(&fll->ok);
4165     -
4166     - return IRQ_HANDLED;
4167     -}
4168     -
4169     static struct {
4170     unsigned int min;
4171     unsigned int max;
4172     @@ -1902,17 +1891,18 @@ static int arizona_is_enabled_fll(struct arizona_fll *fll)
4173     static int arizona_enable_fll(struct arizona_fll *fll)
4174     {
4175     struct arizona *arizona = fll->arizona;
4176     - unsigned long time_left;
4177     bool use_sync = false;
4178     int already_enabled = arizona_is_enabled_fll(fll);
4179     struct arizona_fll_cfg cfg;
4180     + int i;
4181     + unsigned int val;
4182    
4183     if (already_enabled < 0)
4184     return already_enabled;
4185    
4186     if (already_enabled) {
4187     /* Facilitate smooth refclk across the transition */
4188     - regmap_update_bits_async(fll->arizona->regmap, fll->base + 0x7,
4189     + regmap_update_bits_async(fll->arizona->regmap, fll->base + 0x9,
4190     ARIZONA_FLL1_GAIN_MASK, 0);
4191     regmap_update_bits_async(fll->arizona->regmap, fll->base + 1,
4192     ARIZONA_FLL1_FREERUN,
4193     @@ -1964,9 +1954,6 @@ static int arizona_enable_fll(struct arizona_fll *fll)
4194     if (!already_enabled)
4195     pm_runtime_get(arizona->dev);
4196    
4197     - /* Clear any pending completions */
4198     - try_wait_for_completion(&fll->ok);
4199     -
4200     regmap_update_bits_async(arizona->regmap, fll->base + 1,
4201     ARIZONA_FLL1_ENA, ARIZONA_FLL1_ENA);
4202     if (use_sync)
4203     @@ -1978,10 +1965,24 @@ static int arizona_enable_fll(struct arizona_fll *fll)
4204     regmap_update_bits_async(arizona->regmap, fll->base + 1,
4205     ARIZONA_FLL1_FREERUN, 0);
4206    
4207     - time_left = wait_for_completion_timeout(&fll->ok,
4208     - msecs_to_jiffies(250));
4209     - if (time_left == 0)
4210     + arizona_fll_dbg(fll, "Waiting for FLL lock...\n");
4211     + val = 0;
4212     + for (i = 0; i < 15; i++) {
4213     + if (i < 5)
4214     + usleep_range(200, 400);
4215     + else
4216     + msleep(20);
4217     +
4218     + regmap_read(arizona->regmap,
4219     + ARIZONA_INTERRUPT_RAW_STATUS_5,
4220     + &val);
4221     + if (val & (ARIZONA_FLL1_CLOCK_OK_STS << (fll->id - 1)))
4222     + break;
4223     + }
4224     + if (i == 15)
4225     arizona_fll_warn(fll, "Timed out waiting for lock\n");
4226     + else
4227     + arizona_fll_dbg(fll, "FLL locked (%d polls)\n", i);
4228    
4229     return 0;
4230     }
4231     @@ -2066,11 +2067,8 @@ EXPORT_SYMBOL_GPL(arizona_set_fll);
4232     int arizona_init_fll(struct arizona *arizona, int id, int base, int lock_irq,
4233     int ok_irq, struct arizona_fll *fll)
4234     {
4235     - int ret;
4236     unsigned int val;
4237    
4238     - init_completion(&fll->ok);
4239     -
4240     fll->id = id;
4241     fll->base = base;
4242     fll->arizona = arizona;
4243     @@ -2092,13 +2090,6 @@ int arizona_init_fll(struct arizona *arizona, int id, int base, int lock_irq,
4244     snprintf(fll->clock_ok_name, sizeof(fll->clock_ok_name),
4245     "FLL%d clock OK", id);
4246    
4247     - ret = arizona_request_irq(arizona, ok_irq, fll->clock_ok_name,
4248     - arizona_fll_clock_ok, fll);
4249     - if (ret != 0) {
4250     - dev_err(arizona->dev, "Failed to get FLL%d clock OK IRQ: %d\n",
4251     - id, ret);
4252     - }
4253     -
4254     regmap_update_bits(arizona->regmap, fll->base + 1,
4255     ARIZONA_FLL1_FREERUN, 0);
4256    
4257     diff --git a/sound/soc/codecs/arizona.h b/sound/soc/codecs/arizona.h
4258     index 11ff899b0272..14e8485b5585 100644
4259     --- a/sound/soc/codecs/arizona.h
4260     +++ b/sound/soc/codecs/arizona.h
4261     @@ -233,7 +233,6 @@ struct arizona_fll {
4262     int id;
4263     unsigned int base;
4264     unsigned int vco_mult;
4265     - struct completion ok;
4266    
4267     unsigned int fout;
4268     int sync_src;
4269     diff --git a/sound/soc/codecs/rt5640.c b/sound/soc/codecs/rt5640.c
4270     index 178e55d4d481..06317f7d945f 100644
4271     --- a/sound/soc/codecs/rt5640.c
4272     +++ b/sound/soc/codecs/rt5640.c
4273     @@ -985,6 +985,35 @@ static int rt5640_hp_event(struct snd_soc_dapm_widget *w,
4274     return 0;
4275     }
4276    
4277     +static int rt5640_lout_event(struct snd_soc_dapm_widget *w,
4278     + struct snd_kcontrol *kcontrol, int event)
4279     +{
4280     + struct snd_soc_codec *codec = snd_soc_dapm_to_codec(w->dapm);
4281     +
4282     + switch (event) {
4283     + case SND_SOC_DAPM_POST_PMU:
4284     + hp_amp_power_on(codec);
4285     + snd_soc_update_bits(codec, RT5640_PWR_ANLG1,
4286     + RT5640_PWR_LM, RT5640_PWR_LM);
4287     + snd_soc_update_bits(codec, RT5640_OUTPUT,
4288     + RT5640_L_MUTE | RT5640_R_MUTE, 0);
4289     + break;
4290     +
4291     + case SND_SOC_DAPM_PRE_PMD:
4292     + snd_soc_update_bits(codec, RT5640_OUTPUT,
4293     + RT5640_L_MUTE | RT5640_R_MUTE,
4294     + RT5640_L_MUTE | RT5640_R_MUTE);
4295     + snd_soc_update_bits(codec, RT5640_PWR_ANLG1,
4296     + RT5640_PWR_LM, 0);
4297     + break;
4298     +
4299     + default:
4300     + return 0;
4301     + }
4302     +
4303     + return 0;
4304     +}
4305     +
4306     static int rt5640_hp_power_event(struct snd_soc_dapm_widget *w,
4307     struct snd_kcontrol *kcontrol, int event)
4308     {
4309     @@ -1180,13 +1209,16 @@ static const struct snd_soc_dapm_widget rt5640_dapm_widgets[] = {
4310     0, rt5640_spo_l_mix, ARRAY_SIZE(rt5640_spo_l_mix)),
4311     SND_SOC_DAPM_MIXER("SPOR MIX", SND_SOC_NOPM, 0,
4312     0, rt5640_spo_r_mix, ARRAY_SIZE(rt5640_spo_r_mix)),
4313     - SND_SOC_DAPM_MIXER("LOUT MIX", RT5640_PWR_ANLG1, RT5640_PWR_LM_BIT, 0,
4314     + SND_SOC_DAPM_MIXER("LOUT MIX", SND_SOC_NOPM, 0, 0,
4315     rt5640_lout_mix, ARRAY_SIZE(rt5640_lout_mix)),
4316     SND_SOC_DAPM_SUPPLY_S("Improve HP Amp Drv", 1, SND_SOC_NOPM,
4317     0, 0, rt5640_hp_power_event, SND_SOC_DAPM_POST_PMU),
4318     SND_SOC_DAPM_PGA_S("HP Amp", 1, SND_SOC_NOPM, 0, 0,
4319     rt5640_hp_event,
4320     SND_SOC_DAPM_PRE_PMD | SND_SOC_DAPM_POST_PMU),
4321     + SND_SOC_DAPM_PGA_S("LOUT amp", 1, SND_SOC_NOPM, 0, 0,
4322     + rt5640_lout_event,
4323     + SND_SOC_DAPM_PRE_PMD | SND_SOC_DAPM_POST_PMU),
4324     SND_SOC_DAPM_SUPPLY("HP L Amp", RT5640_PWR_ANLG1,
4325     RT5640_PWR_HP_L_BIT, 0, NULL, 0),
4326     SND_SOC_DAPM_SUPPLY("HP R Amp", RT5640_PWR_ANLG1,
4327     @@ -1501,8 +1533,10 @@ static const struct snd_soc_dapm_route rt5640_dapm_routes[] = {
4328     {"HP R Playback", "Switch", "HP Amp"},
4329     {"HPOL", NULL, "HP L Playback"},
4330     {"HPOR", NULL, "HP R Playback"},
4331     - {"LOUTL", NULL, "LOUT MIX"},
4332     - {"LOUTR", NULL, "LOUT MIX"},
4333     +
4334     + {"LOUT amp", NULL, "LOUT MIX"},
4335     + {"LOUTL", NULL, "LOUT amp"},
4336     + {"LOUTR", NULL, "LOUT amp"},
4337     };
4338    
4339     static const struct snd_soc_dapm_route rt5640_specific_dapm_routes[] = {
4340     diff --git a/sound/soc/samsung/arndale_rt5631.c b/sound/soc/samsung/arndale_rt5631.c
4341     index 8bf2e2c4bafb..9e371eb3e4fa 100644
4342     --- a/sound/soc/samsung/arndale_rt5631.c
4343     +++ b/sound/soc/samsung/arndale_rt5631.c
4344     @@ -116,15 +116,6 @@ static int arndale_audio_probe(struct platform_device *pdev)
4345     return ret;
4346     }
4347    
4348     -static int arndale_audio_remove(struct platform_device *pdev)
4349     -{
4350     - struct snd_soc_card *card = platform_get_drvdata(pdev);
4351     -
4352     - snd_soc_unregister_card(card);
4353     -
4354     - return 0;
4355     -}
4356     -
4357     static const struct of_device_id samsung_arndale_rt5631_of_match[] __maybe_unused = {
4358     { .compatible = "samsung,arndale-rt5631", },
4359     { .compatible = "samsung,arndale-alc5631", },
4360     @@ -139,7 +130,6 @@ static struct platform_driver arndale_audio_driver = {
4361     .of_match_table = of_match_ptr(samsung_arndale_rt5631_of_match),
4362     },
4363     .probe = arndale_audio_probe,
4364     - .remove = arndale_audio_remove,
4365     };
4366    
4367     module_platform_driver(arndale_audio_driver);