Magellan Linux

Annotation of /trunk/kernel-magellan/patches-3.13/0101-3.13.2-all-fixes.patch

Parent Directory Parent Directory | Revision Log Revision Log


Revision 2407 - (hide annotations) (download)
Wed Feb 12 09:25:37 2014 UTC (10 years, 3 months ago) by niro
File size: 197959 byte(s)
-linux-3.13.2
1 niro 2407 diff --git a/Documentation/devicetree/bindings/ata/marvell.txt b/Documentation/devicetree/bindings/ata/marvell.txt
2     index b5cdd20cde9c..1c8351604d38 100644
3     --- a/Documentation/devicetree/bindings/ata/marvell.txt
4     +++ b/Documentation/devicetree/bindings/ata/marvell.txt
5     @@ -1,7 +1,7 @@
6     * Marvell Orion SATA
7    
8     Required Properties:
9     -- compatibility : "marvell,orion-sata"
10     +- compatibility : "marvell,orion-sata" or "marvell,armada-370-sata"
11     - reg : Address range of controller
12     - interrupts : Interrupt controller is using
13     - nr-ports : Number of SATA ports in use.
14     diff --git a/Documentation/devicetree/bindings/i2c/i2c-mv64xxx.txt b/Documentation/devicetree/bindings/i2c/i2c-mv64xxx.txt
15     index 82e8f6f17179..582b4652a82a 100644
16     --- a/Documentation/devicetree/bindings/i2c/i2c-mv64xxx.txt
17     +++ b/Documentation/devicetree/bindings/i2c/i2c-mv64xxx.txt
18     @@ -5,7 +5,11 @@ Required properties :
19    
20     - reg : Offset and length of the register set for the device
21     - compatible : Should be "marvell,mv64xxx-i2c" or "allwinner,sun4i-i2c"
22     - or "marvell,mv78230-i2c"
23     + or "marvell,mv78230-i2c" or "marvell,mv78230-a0-i2c"
24     + Note: Only use "marvell,mv78230-a0-i2c" for a very rare,
25     + initial version of the SoC which had broken offload
26     + support. Linux auto-detects this and sets it
27     + appropriately.
28     - interrupts : The interrupt number
29    
30     Optional properties :
31     diff --git a/Documentation/i2c/busses/i2c-piix4 b/Documentation/i2c/busses/i2c-piix4
32     index c097e0f020fe..aa959fd22450 100644
33     --- a/Documentation/i2c/busses/i2c-piix4
34     +++ b/Documentation/i2c/busses/i2c-piix4
35     @@ -13,7 +13,7 @@ Supported adapters:
36     * AMD SP5100 (SB700 derivative found on some server mainboards)
37     Datasheet: Publicly available at the AMD website
38     http://support.amd.com/us/Embedded_TechDocs/44413.pdf
39     - * AMD Hudson-2, CZ
40     + * AMD Hudson-2, ML, CZ
41     Datasheet: Not publicly available
42     * Standard Microsystems (SMSC) SLC90E66 (Victory66) southbridge
43     Datasheet: Publicly available at the SMSC website http://www.smsc.com
44     diff --git a/Makefile b/Makefile
45     index de4cda986be2..a7fd5d9e752f 100644
46     --- a/Makefile
47     +++ b/Makefile
48     @@ -1,6 +1,6 @@
49     VERSION = 3
50     PATCHLEVEL = 13
51     -SUBLEVEL = 1
52     +SUBLEVEL = 2
53     EXTRAVERSION =
54     NAME = One Giant Leap for Frogkind
55    
56     diff --git a/arch/alpha/lib/csum_partial_copy.c b/arch/alpha/lib/csum_partial_copy.c
57     index ff3c10721caf..5675dca8dbb1 100644
58     --- a/arch/alpha/lib/csum_partial_copy.c
59     +++ b/arch/alpha/lib/csum_partial_copy.c
60     @@ -378,6 +378,11 @@ csum_partial_copy_from_user(const void __user *src, void *dst, int len,
61     __wsum
62     csum_partial_copy_nocheck(const void *src, void *dst, int len, __wsum sum)
63     {
64     - return csum_partial_copy_from_user((__force const void __user *)src,
65     - dst, len, sum, NULL);
66     + __wsum checksum;
67     + mm_segment_t oldfs = get_fs();
68     + set_fs(KERNEL_DS);
69     + checksum = csum_partial_copy_from_user((__force const void __user *)src,
70     + dst, len, sum, NULL);
71     + set_fs(oldfs);
72     + return checksum;
73     }
74     diff --git a/arch/arm/boot/dts/armada-370-xp.dtsi b/arch/arm/boot/dts/armada-370-xp.dtsi
75     index 7f10f627ae5b..80ffacd128f8 100644
76     --- a/arch/arm/boot/dts/armada-370-xp.dtsi
77     +++ b/arch/arm/boot/dts/armada-370-xp.dtsi
78     @@ -152,7 +152,7 @@
79     };
80    
81     sata@a0000 {
82     - compatible = "marvell,orion-sata";
83     + compatible = "marvell,armada-370-sata";
84     reg = <0xa0000 0x5000>;
85     interrupts = <55>;
86     clocks = <&gateclk 15>, <&gateclk 30>;
87     diff --git a/arch/arm/boot/dts/at91sam9g45.dtsi b/arch/arm/boot/dts/at91sam9g45.dtsi
88     index c3e514837074..cf7de80377f1 100644
89     --- a/arch/arm/boot/dts/at91sam9g45.dtsi
90     +++ b/arch/arm/boot/dts/at91sam9g45.dtsi
91     @@ -618,6 +618,7 @@
92     compatible = "atmel,hsmci";
93     reg = <0xfff80000 0x600>;
94     interrupts = <11 IRQ_TYPE_LEVEL_HIGH 0>;
95     + pinctrl-names = "default";
96     dmas = <&dma 1 AT91_DMA_CFG_PER_ID(0)>;
97     dma-names = "rxtx";
98     #address-cells = <1>;
99     @@ -629,6 +630,7 @@
100     compatible = "atmel,hsmci";
101     reg = <0xfffd0000 0x600>;
102     interrupts = <29 IRQ_TYPE_LEVEL_HIGH 0>;
103     + pinctrl-names = "default";
104     dmas = <&dma 1 AT91_DMA_CFG_PER_ID(13)>;
105     dma-names = "rxtx";
106     #address-cells = <1>;
107     diff --git a/arch/arm/mach-at91/sam9_smc.c b/arch/arm/mach-at91/sam9_smc.c
108     index 99a0a1d2b7dc..b26156bf15db 100644
109     --- a/arch/arm/mach-at91/sam9_smc.c
110     +++ b/arch/arm/mach-at91/sam9_smc.c
111     @@ -101,7 +101,7 @@ static void sam9_smc_cs_read(void __iomem *base,
112     /* Pulse register */
113     val = __raw_readl(base + AT91_SMC_PULSE);
114    
115     - config->nwe_setup = val & AT91_SMC_NWEPULSE;
116     + config->nwe_pulse = val & AT91_SMC_NWEPULSE;
117     config->ncs_write_pulse = (val & AT91_SMC_NCS_WRPULSE) >> 8;
118     config->nrd_pulse = (val & AT91_SMC_NRDPULSE) >> 16;
119     config->ncs_read_pulse = (val & AT91_SMC_NCS_RDPULSE) >> 24;
120     diff --git a/arch/arm/mach-mvebu/Makefile b/arch/arm/mach-mvebu/Makefile
121     index 2d04f0e21870..878aebe98dcc 100644
122     --- a/arch/arm/mach-mvebu/Makefile
123     +++ b/arch/arm/mach-mvebu/Makefile
124     @@ -3,7 +3,7 @@ ccflags-$(CONFIG_ARCH_MULTIPLATFORM) := -I$(srctree)/$(src)/include \
125    
126     AFLAGS_coherency_ll.o := -Wa,-march=armv7-a
127    
128     -obj-y += system-controller.o
129     +obj-y += system-controller.o mvebu-soc-id.o
130     obj-$(CONFIG_MACH_ARMADA_370_XP) += armada-370-xp.o
131     obj-$(CONFIG_ARCH_MVEBU) += coherency.o coherency_ll.o pmsu.o
132     obj-$(CONFIG_SMP) += platsmp.o headsmp.o
133     diff --git a/arch/arm/mach-mvebu/armada-370-xp.c b/arch/arm/mach-mvebu/armada-370-xp.c
134     index e2acff98e750..f6c9d1d85c14 100644
135     --- a/arch/arm/mach-mvebu/armada-370-xp.c
136     +++ b/arch/arm/mach-mvebu/armada-370-xp.c
137     @@ -21,6 +21,7 @@
138     #include <linux/clocksource.h>
139     #include <linux/dma-mapping.h>
140     #include <linux/mbus.h>
141     +#include <linux/slab.h>
142     #include <asm/hardware/cache-l2x0.h>
143     #include <asm/mach/arch.h>
144     #include <asm/mach/map.h>
145     @@ -28,6 +29,7 @@
146     #include "armada-370-xp.h"
147     #include "common.h"
148     #include "coherency.h"
149     +#include "mvebu-soc-id.h"
150    
151     static void __init armada_370_xp_map_io(void)
152     {
153     @@ -45,8 +47,38 @@ static void __init armada_370_xp_timer_and_clk_init(void)
154     #endif
155     }
156    
157     +static void __init i2c_quirk(void)
158     +{
159     + struct device_node *np;
160     + u32 dev, rev;
161     +
162     + /*
163     + * Only revisons more recent than A0 support the offload
164     + * mechanism. We can exit only if we are sure that we can
165     + * get the SoC revision and it is more recent than A0.
166     + */
167     + if (mvebu_get_soc_id(&rev, &dev) == 0 && dev > MV78XX0_A0_REV)
168     + return;
169     +
170     + for_each_compatible_node(np, NULL, "marvell,mv78230-i2c") {
171     + struct property *new_compat;
172     +
173     + new_compat = kzalloc(sizeof(*new_compat), GFP_KERNEL);
174     +
175     + new_compat->name = kstrdup("compatible", GFP_KERNEL);
176     + new_compat->length = sizeof("marvell,mv78230-a0-i2c");
177     + new_compat->value = kstrdup("marvell,mv78230-a0-i2c",
178     + GFP_KERNEL);
179     +
180     + of_update_property(np, new_compat);
181     + }
182     + return;
183     +}
184     +
185     static void __init armada_370_xp_dt_init(void)
186     {
187     + if (of_machine_is_compatible("plathome,openblocks-ax3-4"))
188     + i2c_quirk();
189     of_platform_populate(NULL, of_default_bus_match_table, NULL, NULL);
190     }
191    
192     diff --git a/arch/arm/mach-mvebu/mvebu-soc-id.c b/arch/arm/mach-mvebu/mvebu-soc-id.c
193     new file mode 100644
194     index 000000000000..fe4fc1cbdfaf
195     --- /dev/null
196     +++ b/arch/arm/mach-mvebu/mvebu-soc-id.c
197     @@ -0,0 +1,119 @@
198     +/*
199     + * ID and revision information for mvebu SoCs
200     + *
201     + * Copyright (C) 2014 Marvell
202     + *
203     + * Gregory CLEMENT <gregory.clement@free-electrons.com>
204     + *
205     + * This file is licensed under the terms of the GNU General Public
206     + * License version 2. This program is licensed "as is" without any
207     + * warranty of any kind, whether express or implied.
208     + *
209     + * All the mvebu SoCs have information related to their variant and
210     + * revision that can be read from the PCI control register. This is
211     + * done before the PCI initialization to avoid any conflict. Once the
212     + * ID and revision are retrieved, the mapping is freed.
213     + */
214     +
215     +#define pr_fmt(fmt) "mvebu-soc-id: " fmt
216     +
217     +#include <linux/clk.h>
218     +#include <linux/init.h>
219     +#include <linux/io.h>
220     +#include <linux/kernel.h>
221     +#include <linux/of.h>
222     +#include <linux/of_address.h>
223     +#include "mvebu-soc-id.h"
224     +
225     +#define PCIE_DEV_ID_OFF 0x0
226     +#define PCIE_DEV_REV_OFF 0x8
227     +
228     +#define SOC_ID_MASK 0xFFFF0000
229     +#define SOC_REV_MASK 0xFF
230     +
231     +static u32 soc_dev_id;
232     +static u32 soc_rev;
233     +static bool is_id_valid;
234     +
235     +static const struct of_device_id mvebu_pcie_of_match_table[] = {
236     + { .compatible = "marvell,armada-xp-pcie", },
237     + { .compatible = "marvell,armada-370-pcie", },
238     + {},
239     +};
240     +
241     +int mvebu_get_soc_id(u32 *dev, u32 *rev)
242     +{
243     + if (is_id_valid) {
244     + *dev = soc_dev_id;
245     + *rev = soc_rev;
246     + return 0;
247     + } else
248     + return -1;
249     +}
250     +
251     +static int __init mvebu_soc_id_init(void)
252     +{
253     + struct device_node *np;
254     + int ret = 0;
255     + void __iomem *pci_base;
256     + struct clk *clk;
257     + struct device_node *child;
258     +
259     + np = of_find_matching_node(NULL, mvebu_pcie_of_match_table);
260     + if (!np)
261     + return ret;
262     +
263     + /*
264     + * ID and revision are available from any port, so we
265     + * just pick the first one
266     + */
267     + child = of_get_next_child(np, NULL);
268     + if (child == NULL) {
269     + pr_err("cannot get pci node\n");
270     + ret = -ENOMEM;
271     + goto clk_err;
272     + }
273     +
274     + clk = of_clk_get_by_name(child, NULL);
275     + if (IS_ERR(clk)) {
276     + pr_err("cannot get clock\n");
277     + ret = -ENOMEM;
278     + goto clk_err;
279     + }
280     +
281     + ret = clk_prepare_enable(clk);
282     + if (ret) {
283     + pr_err("cannot enable clock\n");
284     + goto clk_err;
285     + }
286     +
287     + pci_base = of_iomap(child, 0);
288     + if (IS_ERR(pci_base)) {
289     + pr_err("cannot map registers\n");
290     + ret = -ENOMEM;
291     + goto res_ioremap;
292     + }
293     +
294     + /* SoC ID */
295     + soc_dev_id = readl(pci_base + PCIE_DEV_ID_OFF) >> 16;
296     +
297     + /* SoC revision */
298     + soc_rev = readl(pci_base + PCIE_DEV_REV_OFF) & SOC_REV_MASK;
299     +
300     + is_id_valid = true;
301     +
302     + pr_info("MVEBU SoC ID=0x%X, Rev=0x%X\n", soc_dev_id, soc_rev);
303     +
304     + iounmap(pci_base);
305     +
306     +res_ioremap:
307     + clk_disable_unprepare(clk);
308     +
309     +clk_err:
310     + of_node_put(child);
311     + of_node_put(np);
312     +
313     + return ret;
314     +}
315     +core_initcall(mvebu_soc_id_init);
316     +
317     diff --git a/arch/arm/mach-mvebu/mvebu-soc-id.h b/arch/arm/mach-mvebu/mvebu-soc-id.h
318     new file mode 100644
319     index 000000000000..31654252fe35
320     --- /dev/null
321     +++ b/arch/arm/mach-mvebu/mvebu-soc-id.h
322     @@ -0,0 +1,32 @@
323     +/*
324     + * Marvell EBU SoC ID and revision definitions.
325     + *
326     + * Copyright (C) 2014 Marvell Semiconductor
327     + *
328     + * This file is licensed under the terms of the GNU General Public
329     + * License version 2. This program is licensed "as is" without any
330     + * warranty of any kind, whether express or implied.
331     + */
332     +
333     +#ifndef __LINUX_MVEBU_SOC_ID_H
334     +#define __LINUX_MVEBU_SOC_ID_H
335     +
336     +/* Armada XP ID */
337     +#define MV78230_DEV_ID 0x7823
338     +#define MV78260_DEV_ID 0x7826
339     +#define MV78460_DEV_ID 0x7846
340     +
341     +/* Armada XP Revision */
342     +#define MV78XX0_A0_REV 0x1
343     +#define MV78XX0_B0_REV 0x2
344     +
345     +#ifdef CONFIG_ARCH_MVEBU
346     +int mvebu_get_soc_id(u32 *dev, u32 *rev);
347     +#else
348     +static inline int mvebu_get_soc_id(u32 *dev, u32 *rev)
349     +{
350     + return -1;
351     +}
352     +#endif
353     +
354     +#endif /* __LINUX_MVEBU_SOC_ID_H */
355     diff --git a/arch/parisc/include/asm/cacheflush.h b/arch/parisc/include/asm/cacheflush.h
356     index 2f9b751878ba..de65f66ea64e 100644
357     --- a/arch/parisc/include/asm/cacheflush.h
358     +++ b/arch/parisc/include/asm/cacheflush.h
359     @@ -132,7 +132,6 @@ void mark_rodata_ro(void);
360     static inline void *kmap(struct page *page)
361     {
362     might_sleep();
363     - flush_dcache_page(page);
364     return page_address(page);
365     }
366    
367     @@ -144,7 +143,6 @@ static inline void kunmap(struct page *page)
368     static inline void *kmap_atomic(struct page *page)
369     {
370     pagefault_disable();
371     - flush_dcache_page(page);
372     return page_address(page);
373     }
374    
375     diff --git a/arch/parisc/include/asm/page.h b/arch/parisc/include/asm/page.h
376     index c53fc63149e8..637fe031aa84 100644
377     --- a/arch/parisc/include/asm/page.h
378     +++ b/arch/parisc/include/asm/page.h
379     @@ -29,7 +29,8 @@ struct page;
380     void clear_page_asm(void *page);
381     void copy_page_asm(void *to, void *from);
382     #define clear_user_page(vto, vaddr, page) clear_page_asm(vto)
383     -#define copy_user_page(vto, vfrom, vaddr, page) copy_page_asm(vto, vfrom)
384     +void copy_user_page(void *vto, void *vfrom, unsigned long vaddr,
385     + struct page *pg);
386    
387     /* #define CONFIG_PARISC_TMPALIAS */
388    
389     diff --git a/arch/parisc/kernel/cache.c b/arch/parisc/kernel/cache.c
390     index a72545554a31..ac87a40502e6 100644
391     --- a/arch/parisc/kernel/cache.c
392     +++ b/arch/parisc/kernel/cache.c
393     @@ -388,6 +388,20 @@ void flush_kernel_dcache_page_addr(void *addr)
394     }
395     EXPORT_SYMBOL(flush_kernel_dcache_page_addr);
396    
397     +void copy_user_page(void *vto, void *vfrom, unsigned long vaddr,
398     + struct page *pg)
399     +{
400     + /* Copy using kernel mapping. No coherency is needed (all in
401     + kunmap) for the `to' page. However, the `from' page needs to
402     + be flushed through a mapping equivalent to the user mapping
403     + before it can be accessed through the kernel mapping. */
404     + preempt_disable();
405     + flush_dcache_page_asm(__pa(vfrom), vaddr);
406     + preempt_enable();
407     + copy_page_asm(vto, vfrom);
408     +}
409     +EXPORT_SYMBOL(copy_user_page);
410     +
411     void purge_tlb_entries(struct mm_struct *mm, unsigned long addr)
412     {
413     unsigned long flags;
414     diff --git a/arch/powerpc/include/asm/topology.h b/arch/powerpc/include/asm/topology.h
415     index 89e3ef2496ac..d0b5fca6b077 100644
416     --- a/arch/powerpc/include/asm/topology.h
417     +++ b/arch/powerpc/include/asm/topology.h
418     @@ -22,7 +22,15 @@ struct device_node;
419    
420     static inline int cpu_to_node(int cpu)
421     {
422     - return numa_cpu_lookup_table[cpu];
423     + int nid;
424     +
425     + nid = numa_cpu_lookup_table[cpu];
426     +
427     + /*
428     + * During early boot, the numa-cpu lookup table might not have been
429     + * setup for all CPUs yet. In such cases, default to node 0.
430     + */
431     + return (nid < 0) ? 0 : nid;
432     }
433    
434     #define parent_node(node) (node)
435     diff --git a/arch/powerpc/kernel/cacheinfo.c b/arch/powerpc/kernel/cacheinfo.c
436     index 654932727873..bfb82365bc7a 100644
437     --- a/arch/powerpc/kernel/cacheinfo.c
438     +++ b/arch/powerpc/kernel/cacheinfo.c
439     @@ -794,6 +794,9 @@ static void remove_cache_dir(struct cache_dir *cache_dir)
440     {
441     remove_index_dirs(cache_dir);
442    
443     + /* Remove cache dir from sysfs */
444     + kobject_del(cache_dir->kobj);
445     +
446     kobject_put(cache_dir->kobj);
447    
448     kfree(cache_dir);
449     diff --git a/arch/powerpc/kvm/book3s_hv.c b/arch/powerpc/kvm/book3s_hv.c
450     index b51d5db78068..edeac10a5c3b 100644
451     --- a/arch/powerpc/kvm/book3s_hv.c
452     +++ b/arch/powerpc/kvm/book3s_hv.c
453     @@ -85,10 +85,13 @@ static void kvmppc_fast_vcpu_kick_hv(struct kvm_vcpu *vcpu)
454    
455     /* CPU points to the first thread of the core */
456     if (cpu != me && cpu >= 0 && cpu < nr_cpu_ids) {
457     +#ifdef CONFIG_KVM_XICS
458     int real_cpu = cpu + vcpu->arch.ptid;
459     if (paca[real_cpu].kvm_hstate.xics_phys)
460     xics_wake_cpu(real_cpu);
461     - else if (cpu_online(cpu))
462     + else
463     +#endif
464     + if (cpu_online(cpu))
465     smp_send_reschedule(cpu);
466     }
467     put_cpu();
468     @@ -1189,7 +1192,9 @@ static void kvmppc_start_thread(struct kvm_vcpu *vcpu)
469     smp_wmb();
470     #if defined(CONFIG_PPC_ICP_NATIVE) && defined(CONFIG_SMP)
471     if (vcpu->arch.ptid) {
472     +#ifdef CONFIG_KVM_XICS
473     xics_wake_cpu(cpu);
474     +#endif
475     ++vc->n_woken;
476     }
477     #endif
478     diff --git a/arch/powerpc/kvm/e500_mmu.c b/arch/powerpc/kvm/e500_mmu.c
479     index ebca6b88ea5e..50860e919cb8 100644
480     --- a/arch/powerpc/kvm/e500_mmu.c
481     +++ b/arch/powerpc/kvm/e500_mmu.c
482     @@ -127,7 +127,7 @@ static int kvmppc_e500_tlb_index(struct kvmppc_vcpu_e500 *vcpu_e500,
483     }
484    
485     static inline void kvmppc_e500_deliver_tlb_miss(struct kvm_vcpu *vcpu,
486     - unsigned int eaddr, int as)
487     + gva_t eaddr, int as)
488     {
489     struct kvmppc_vcpu_e500 *vcpu_e500 = to_e500(vcpu);
490     unsigned int victim, tsized;
491     diff --git a/arch/powerpc/mm/numa.c b/arch/powerpc/mm/numa.c
492     index 078d3e00a616..6847d509162f 100644
493     --- a/arch/powerpc/mm/numa.c
494     +++ b/arch/powerpc/mm/numa.c
495     @@ -31,6 +31,8 @@
496     #include <asm/sparsemem.h>
497     #include <asm/prom.h>
498     #include <asm/smp.h>
499     +#include <asm/cputhreads.h>
500     +#include <asm/topology.h>
501     #include <asm/firmware.h>
502     #include <asm/paca.h>
503     #include <asm/hvcall.h>
504     @@ -152,9 +154,22 @@ static void __init get_node_active_region(unsigned long pfn,
505     }
506     }
507    
508     -static void map_cpu_to_node(int cpu, int node)
509     +static void reset_numa_cpu_lookup_table(void)
510     +{
511     + unsigned int cpu;
512     +
513     + for_each_possible_cpu(cpu)
514     + numa_cpu_lookup_table[cpu] = -1;
515     +}
516     +
517     +static void update_numa_cpu_lookup_table(unsigned int cpu, int node)
518     {
519     numa_cpu_lookup_table[cpu] = node;
520     +}
521     +
522     +static void map_cpu_to_node(int cpu, int node)
523     +{
524     + update_numa_cpu_lookup_table(cpu, node);
525    
526     dbg("adding cpu %d to node %d\n", cpu, node);
527    
528     @@ -522,11 +537,24 @@ static int of_drconf_to_nid_single(struct of_drconf_cell *drmem,
529     */
530     static int numa_setup_cpu(unsigned long lcpu)
531     {
532     - int nid = 0;
533     - struct device_node *cpu = of_get_cpu_node(lcpu, NULL);
534     + int nid;
535     + struct device_node *cpu;
536     +
537     + /*
538     + * If a valid cpu-to-node mapping is already available, use it
539     + * directly instead of querying the firmware, since it represents
540     + * the most recent mapping notified to us by the platform (eg: VPHN).
541     + */
542     + if ((nid = numa_cpu_lookup_table[lcpu]) >= 0) {
543     + map_cpu_to_node(lcpu, nid);
544     + return nid;
545     + }
546     +
547     + cpu = of_get_cpu_node(lcpu, NULL);
548    
549     if (!cpu) {
550     WARN_ON(1);
551     + nid = 0;
552     goto out;
553     }
554    
555     @@ -1067,6 +1095,7 @@ void __init do_init_bootmem(void)
556     */
557     setup_node_to_cpumask_map();
558    
559     + reset_numa_cpu_lookup_table();
560     register_cpu_notifier(&ppc64_numa_nb);
561     cpu_numa_callback(&ppc64_numa_nb, CPU_UP_PREPARE,
562     (void *)(unsigned long)boot_cpuid);
563     @@ -1445,6 +1474,33 @@ static int update_cpu_topology(void *data)
564     return 0;
565     }
566    
567     +static int update_lookup_table(void *data)
568     +{
569     + struct topology_update_data *update;
570     +
571     + if (!data)
572     + return -EINVAL;
573     +
574     + /*
575     + * Upon topology update, the numa-cpu lookup table needs to be updated
576     + * for all threads in the core, including offline CPUs, to ensure that
577     + * future hotplug operations respect the cpu-to-node associativity
578     + * properly.
579     + */
580     + for (update = data; update; update = update->next) {
581     + int nid, base, j;
582     +
583     + nid = update->new_nid;
584     + base = cpu_first_thread_sibling(update->cpu);
585     +
586     + for (j = 0; j < threads_per_core; j++) {
587     + update_numa_cpu_lookup_table(base + j, nid);
588     + }
589     + }
590     +
591     + return 0;
592     +}
593     +
594     /*
595     * Update the node maps and sysfs entries for each cpu whose home node
596     * has changed. Returns 1 when the topology has changed, and 0 otherwise.
597     @@ -1513,6 +1569,14 @@ int arch_update_cpu_topology(void)
598    
599     stop_machine(update_cpu_topology, &updates[0], &updated_cpus);
600    
601     + /*
602     + * Update the numa-cpu lookup table with the new mappings, even for
603     + * offline CPUs. It is best to perform this update from the stop-
604     + * machine context.
605     + */
606     + stop_machine(update_lookup_table, &updates[0],
607     + cpumask_of(raw_smp_processor_id()));
608     +
609     for (ud = &updates[0]; ud; ud = ud->next) {
610     unregister_cpu_under_node(ud->cpu, ud->old_nid);
611     register_cpu_under_node(ud->cpu, ud->new_nid);
612     diff --git a/arch/s390/include/asm/compat.h b/arch/s390/include/asm/compat.h
613     index 4bf9da03591e..5d7e8cf83bd6 100644
614     --- a/arch/s390/include/asm/compat.h
615     +++ b/arch/s390/include/asm/compat.h
616     @@ -38,7 +38,8 @@
617    
618     #define PSW32_USER_BITS (PSW32_MASK_DAT | PSW32_MASK_IO | PSW32_MASK_EXT | \
619     PSW32_DEFAULT_KEY | PSW32_MASK_BASE | \
620     - PSW32_MASK_MCHECK | PSW32_MASK_PSTATE | PSW32_ASC_HOME)
621     + PSW32_MASK_MCHECK | PSW32_MASK_PSTATE | \
622     + PSW32_ASC_PRIMARY)
623    
624     #define COMPAT_USER_HZ 100
625     #define COMPAT_UTS_MACHINE "s390\0\0\0\0"
626     diff --git a/arch/s390/include/uapi/asm/statfs.h b/arch/s390/include/uapi/asm/statfs.h
627     index a61d538756f2..471eb09184d4 100644
628     --- a/arch/s390/include/uapi/asm/statfs.h
629     +++ b/arch/s390/include/uapi/asm/statfs.h
630     @@ -35,11 +35,11 @@ struct statfs {
631     struct statfs64 {
632     unsigned int f_type;
633     unsigned int f_bsize;
634     - unsigned long f_blocks;
635     - unsigned long f_bfree;
636     - unsigned long f_bavail;
637     - unsigned long f_files;
638     - unsigned long f_ffree;
639     + unsigned long long f_blocks;
640     + unsigned long long f_bfree;
641     + unsigned long long f_bavail;
642     + unsigned long long f_files;
643     + unsigned long long f_ffree;
644     __kernel_fsid_t f_fsid;
645     unsigned int f_namelen;
646     unsigned int f_frsize;
647     diff --git a/arch/s390/kvm/diag.c b/arch/s390/kvm/diag.c
648     index 78d967f180f4..8216c0e0b2e2 100644
649     --- a/arch/s390/kvm/diag.c
650     +++ b/arch/s390/kvm/diag.c
651     @@ -121,7 +121,7 @@ static int __diag_virtio_hypercall(struct kvm_vcpu *vcpu)
652     * - gpr 4 contains the index on the bus (optionally)
653     */
654     ret = kvm_io_bus_write_cookie(vcpu->kvm, KVM_VIRTIO_CCW_NOTIFY_BUS,
655     - vcpu->run->s.regs.gprs[2],
656     + vcpu->run->s.regs.gprs[2] & 0xffffffff,
657     8, &vcpu->run->s.regs.gprs[3],
658     vcpu->run->s.regs.gprs[4]);
659    
660     @@ -137,7 +137,7 @@ static int __diag_virtio_hypercall(struct kvm_vcpu *vcpu)
661    
662     int kvm_s390_handle_diag(struct kvm_vcpu *vcpu)
663     {
664     - int code = (vcpu->arch.sie_block->ipb & 0xfff0000) >> 16;
665     + int code = kvm_s390_get_base_disp_rs(vcpu) & 0xffff;
666    
667     if (vcpu->arch.sie_block->gpsw.mask & PSW_MASK_PSTATE)
668     return kvm_s390_inject_program_int(vcpu, PGM_PRIVILEGED_OP);
669     diff --git a/arch/s390/kvm/kvm-s390.c b/arch/s390/kvm/kvm-s390.c
670     index 569494e01ec6..bb383df32400 100644
671     --- a/arch/s390/kvm/kvm-s390.c
672     +++ b/arch/s390/kvm/kvm-s390.c
673     @@ -885,7 +885,7 @@ static int __guestcopy(struct kvm_vcpu *vcpu, u64 guestdest, void *from,
674     * KVM_S390_STORE_STATUS_NOADDR: -> 0x1200 on 64 bit
675     * KVM_S390_STORE_STATUS_PREFIXED: -> prefix
676     */
677     -int kvm_s390_vcpu_store_status(struct kvm_vcpu *vcpu, unsigned long addr)
678     +int kvm_s390_store_status_unloaded(struct kvm_vcpu *vcpu, unsigned long addr)
679     {
680     unsigned char archmode = 1;
681     int prefix;
682     @@ -903,15 +903,6 @@ int kvm_s390_vcpu_store_status(struct kvm_vcpu *vcpu, unsigned long addr)
683     } else
684     prefix = 0;
685    
686     - /*
687     - * The guest FPRS and ACRS are in the host FPRS/ACRS due to the lazy
688     - * copying in vcpu load/put. Lets update our copies before we save
689     - * it into the save area
690     - */
691     - save_fp_ctl(&vcpu->arch.guest_fpregs.fpc);
692     - save_fp_regs(vcpu->arch.guest_fpregs.fprs);
693     - save_access_regs(vcpu->run->s.regs.acrs);
694     -
695     if (__guestcopy(vcpu, addr + offsetof(struct save_area, fp_regs),
696     vcpu->arch.guest_fpregs.fprs, 128, prefix))
697     return -EFAULT;
698     @@ -956,6 +947,20 @@ int kvm_s390_vcpu_store_status(struct kvm_vcpu *vcpu, unsigned long addr)
699     return 0;
700     }
701    
702     +int kvm_s390_vcpu_store_status(struct kvm_vcpu *vcpu, unsigned long addr)
703     +{
704     + /*
705     + * The guest FPRS and ACRS are in the host FPRS/ACRS due to the lazy
706     + * copying in vcpu load/put. Lets update our copies before we save
707     + * it into the save area
708     + */
709     + save_fp_ctl(&vcpu->arch.guest_fpregs.fpc);
710     + save_fp_regs(vcpu->arch.guest_fpregs.fprs);
711     + save_access_regs(vcpu->run->s.regs.acrs);
712     +
713     + return kvm_s390_store_status_unloaded(vcpu, addr);
714     +}
715     +
716     static int kvm_vcpu_ioctl_enable_cap(struct kvm_vcpu *vcpu,
717     struct kvm_enable_cap *cap)
718     {
719     diff --git a/arch/s390/kvm/kvm-s390.h b/arch/s390/kvm/kvm-s390.h
720     index b44912a32949..72c1391bd25a 100644
721     --- a/arch/s390/kvm/kvm-s390.h
722     +++ b/arch/s390/kvm/kvm-s390.h
723     @@ -150,8 +150,8 @@ int kvm_s390_handle_eb(struct kvm_vcpu *vcpu);
724     int kvm_s390_handle_sigp(struct kvm_vcpu *vcpu);
725    
726     /* implemented in kvm-s390.c */
727     -int kvm_s390_vcpu_store_status(struct kvm_vcpu *vcpu,
728     - unsigned long addr);
729     +int kvm_s390_store_status_unloaded(struct kvm_vcpu *vcpu, unsigned long addr);
730     +int kvm_s390_vcpu_store_status(struct kvm_vcpu *vcpu, unsigned long addr);
731     void s390_vcpu_block(struct kvm_vcpu *vcpu);
732     void s390_vcpu_unblock(struct kvm_vcpu *vcpu);
733     void exit_sie(struct kvm_vcpu *vcpu);
734     diff --git a/arch/s390/kvm/sigp.c b/arch/s390/kvm/sigp.c
735     index bec398c57acf..6805601262e0 100644
736     --- a/arch/s390/kvm/sigp.c
737     +++ b/arch/s390/kvm/sigp.c
738     @@ -130,6 +130,7 @@ unlock:
739     static int __inject_sigp_stop(struct kvm_s390_local_interrupt *li, int action)
740     {
741     struct kvm_s390_interrupt_info *inti;
742     + int rc = SIGP_CC_ORDER_CODE_ACCEPTED;
743    
744     inti = kzalloc(sizeof(*inti), GFP_ATOMIC);
745     if (!inti)
746     @@ -139,6 +140,8 @@ static int __inject_sigp_stop(struct kvm_s390_local_interrupt *li, int action)
747     spin_lock_bh(&li->lock);
748     if ((atomic_read(li->cpuflags) & CPUSTAT_STOPPED)) {
749     kfree(inti);
750     + if ((action & ACTION_STORE_ON_STOP) != 0)
751     + rc = -ESHUTDOWN;
752     goto out;
753     }
754     list_add_tail(&inti->list, &li->list);
755     @@ -150,7 +153,7 @@ static int __inject_sigp_stop(struct kvm_s390_local_interrupt *li, int action)
756     out:
757     spin_unlock_bh(&li->lock);
758    
759     - return SIGP_CC_ORDER_CODE_ACCEPTED;
760     + return rc;
761     }
762    
763     static int __sigp_stop(struct kvm_vcpu *vcpu, u16 cpu_addr, int action)
764     @@ -174,6 +177,16 @@ static int __sigp_stop(struct kvm_vcpu *vcpu, u16 cpu_addr, int action)
765     unlock:
766     spin_unlock(&fi->lock);
767     VCPU_EVENT(vcpu, 4, "sent sigp stop to cpu %x", cpu_addr);
768     +
769     + if ((action & ACTION_STORE_ON_STOP) != 0 && rc == -ESHUTDOWN) {
770     + /* If the CPU has already been stopped, we still have
771     + * to save the status when doing stop-and-store. This
772     + * has to be done after unlocking all spinlocks. */
773     + struct kvm_vcpu *dst_vcpu = kvm_get_vcpu(vcpu->kvm, cpu_addr);
774     + rc = kvm_s390_store_status_unloaded(dst_vcpu,
775     + KVM_S390_STORE_STATUS_NOADDR);
776     + }
777     +
778     return rc;
779     }
780    
781     diff --git a/arch/x86/include/asm/kvm_para.h b/arch/x86/include/asm/kvm_para.h
782     index 1df115909758..c7678e43465b 100644
783     --- a/arch/x86/include/asm/kvm_para.h
784     +++ b/arch/x86/include/asm/kvm_para.h
785     @@ -85,28 +85,9 @@ static inline long kvm_hypercall4(unsigned int nr, unsigned long p1,
786     return ret;
787     }
788    
789     -static inline uint32_t kvm_cpuid_base(void)
790     -{
791     - if (boot_cpu_data.cpuid_level < 0)
792     - return 0; /* So we don't blow up on old processors */
793     -
794     - if (cpu_has_hypervisor)
795     - return hypervisor_cpuid_base("KVMKVMKVM\0\0\0", 0);
796     -
797     - return 0;
798     -}
799     -
800     -static inline bool kvm_para_available(void)
801     -{
802     - return kvm_cpuid_base() != 0;
803     -}
804     -
805     -static inline unsigned int kvm_arch_para_features(void)
806     -{
807     - return cpuid_eax(KVM_CPUID_FEATURES);
808     -}
809     -
810     #ifdef CONFIG_KVM_GUEST
811     +bool kvm_para_available(void);
812     +unsigned int kvm_arch_para_features(void);
813     void __init kvm_guest_init(void);
814     void kvm_async_pf_task_wait(u32 token);
815     void kvm_async_pf_task_wake(u32 token);
816     @@ -126,6 +107,16 @@ static inline void kvm_spinlock_init(void)
817     #define kvm_async_pf_task_wait(T) do {} while(0)
818     #define kvm_async_pf_task_wake(T) do {} while(0)
819    
820     +static inline bool kvm_para_available(void)
821     +{
822     + return 0;
823     +}
824     +
825     +static inline unsigned int kvm_arch_para_features(void)
826     +{
827     + return 0;
828     +}
829     +
830     static inline u32 kvm_read_and_reset_pf_reason(void)
831     {
832     return 0;
833     diff --git a/arch/x86/include/uapi/asm/msr-index.h b/arch/x86/include/uapi/asm/msr-index.h
834     index 37813b5ddc37..59cea185ad1d 100644
835     --- a/arch/x86/include/uapi/asm/msr-index.h
836     +++ b/arch/x86/include/uapi/asm/msr-index.h
837     @@ -184,6 +184,7 @@
838     #define MSR_AMD64_PATCH_LOADER 0xc0010020
839     #define MSR_AMD64_OSVW_ID_LENGTH 0xc0010140
840     #define MSR_AMD64_OSVW_STATUS 0xc0010141
841     +#define MSR_AMD64_LS_CFG 0xc0011020
842     #define MSR_AMD64_DC_CFG 0xc0011022
843     #define MSR_AMD64_BU_CFG2 0xc001102a
844     #define MSR_AMD64_IBSFETCHCTL 0xc0011030
845     diff --git a/arch/x86/kernel/cpu/amd.c b/arch/x86/kernel/cpu/amd.c
846     index bca023bdd6b2..59bfebc8c805 100644
847     --- a/arch/x86/kernel/cpu/amd.c
848     +++ b/arch/x86/kernel/cpu/amd.c
849     @@ -508,6 +508,16 @@ static void early_init_amd(struct cpuinfo_x86 *c)
850     set_cpu_cap(c, X86_FEATURE_EXTD_APICID);
851     }
852     #endif
853     +
854     + /* F16h erratum 793, CVE-2013-6885 */
855     + if (c->x86 == 0x16 && c->x86_model <= 0xf) {
856     + u64 val;
857     +
858     + rdmsrl(MSR_AMD64_LS_CFG, val);
859     + if (!(val & BIT(15)))
860     + wrmsrl(MSR_AMD64_LS_CFG, val | BIT(15));
861     + }
862     +
863     }
864    
865     static const int amd_erratum_383[];
866     diff --git a/arch/x86/kernel/kvm.c b/arch/x86/kernel/kvm.c
867     index 6dd802c6d780..f81cadebcc0e 100644
868     --- a/arch/x86/kernel/kvm.c
869     +++ b/arch/x86/kernel/kvm.c
870     @@ -500,6 +500,38 @@ void __init kvm_guest_init(void)
871     #endif
872     }
873    
874     +static noinline uint32_t __kvm_cpuid_base(void)
875     +{
876     + if (boot_cpu_data.cpuid_level < 0)
877     + return 0; /* So we don't blow up on old processors */
878     +
879     + if (cpu_has_hypervisor)
880     + return hypervisor_cpuid_base("KVMKVMKVM\0\0\0", 0);
881     +
882     + return 0;
883     +}
884     +
885     +static inline uint32_t kvm_cpuid_base(void)
886     +{
887     + static int kvm_cpuid_base = -1;
888     +
889     + if (kvm_cpuid_base == -1)
890     + kvm_cpuid_base = __kvm_cpuid_base();
891     +
892     + return kvm_cpuid_base;
893     +}
894     +
895     +bool kvm_para_available(void)
896     +{
897     + return kvm_cpuid_base() != 0;
898     +}
899     +EXPORT_SYMBOL_GPL(kvm_para_available);
900     +
901     +unsigned int kvm_arch_para_features(void)
902     +{
903     + return cpuid_eax(kvm_cpuid_base() | KVM_CPUID_FEATURES);
904     +}
905     +
906     static uint32_t __init kvm_detect(void)
907     {
908     return kvm_cpuid_base();
909     diff --git a/arch/x86/kvm/i8254.c b/arch/x86/kvm/i8254.c
910     index 412a5aa0ef94..518d86471b76 100644
911     --- a/arch/x86/kvm/i8254.c
912     +++ b/arch/x86/kvm/i8254.c
913     @@ -37,6 +37,7 @@
914    
915     #include "irq.h"
916     #include "i8254.h"
917     +#include "x86.h"
918    
919     #ifndef CONFIG_X86_64
920     #define mod_64(x, y) ((x) - (y) * div64_u64(x, y))
921     @@ -349,6 +350,23 @@ static void create_pit_timer(struct kvm *kvm, u32 val, int is_period)
922     atomic_set(&ps->pending, 0);
923     ps->irq_ack = 1;
924    
925     + /*
926     + * Do not allow the guest to program periodic timers with small
927     + * interval, since the hrtimers are not throttled by the host
928     + * scheduler.
929     + */
930     + if (ps->is_periodic) {
931     + s64 min_period = min_timer_period_us * 1000LL;
932     +
933     + if (ps->period < min_period) {
934     + pr_info_ratelimited(
935     + "kvm: requested %lld ns "
936     + "i8254 timer period limited to %lld ns\n",
937     + ps->period, min_period);
938     + ps->period = min_period;
939     + }
940     + }
941     +
942     hrtimer_start(&ps->timer, ktime_add_ns(ktime_get(), interval),
943     HRTIMER_MODE_ABS);
944     }
945     diff --git a/arch/x86/kvm/lapic.c b/arch/x86/kvm/lapic.c
946     index 775702f649ca..d86ff15fc89f 100644
947     --- a/arch/x86/kvm/lapic.c
948     +++ b/arch/x86/kvm/lapic.c
949     @@ -71,9 +71,6 @@
950     #define VEC_POS(v) ((v) & (32 - 1))
951     #define REG_POS(v) (((v) >> 5) << 4)
952    
953     -static unsigned int min_timer_period_us = 500;
954     -module_param(min_timer_period_us, uint, S_IRUGO | S_IWUSR);
955     -
956     static inline void apic_set_reg(struct kvm_lapic *apic, int reg_off, u32 val)
957     {
958     *((u32 *) (apic->regs + reg_off)) = val;
959     diff --git a/arch/x86/kvm/x86.c b/arch/x86/kvm/x86.c
960     index 5d004da1e35d..d89d51b3abf6 100644
961     --- a/arch/x86/kvm/x86.c
962     +++ b/arch/x86/kvm/x86.c
963     @@ -94,6 +94,9 @@ EXPORT_SYMBOL_GPL(kvm_x86_ops);
964     static bool ignore_msrs = 0;
965     module_param(ignore_msrs, bool, S_IRUGO | S_IWUSR);
966    
967     +unsigned int min_timer_period_us = 500;
968     +module_param(min_timer_period_us, uint, S_IRUGO | S_IWUSR);
969     +
970     bool kvm_has_tsc_control;
971     EXPORT_SYMBOL_GPL(kvm_has_tsc_control);
972     u32 kvm_max_guest_tsc_khz;
973     diff --git a/arch/x86/kvm/x86.h b/arch/x86/kvm/x86.h
974     index 587fb9ede436..8da5823bcde6 100644
975     --- a/arch/x86/kvm/x86.h
976     +++ b/arch/x86/kvm/x86.h
977     @@ -125,5 +125,7 @@ int kvm_write_guest_virt_system(struct x86_emulate_ctxt *ctxt,
978     #define KVM_SUPPORTED_XCR0 (XSTATE_FP | XSTATE_SSE | XSTATE_YMM)
979     extern u64 host_xcr0;
980    
981     +extern unsigned int min_timer_period_us;
982     +
983     extern struct static_key kvm_no_apic_vcpu;
984     #endif
985     diff --git a/arch/x86/platform/efi/efi.c b/arch/x86/platform/efi/efi.c
986     index cceb813044ef..30075f91040c 100644
987     --- a/arch/x86/platform/efi/efi.c
988     +++ b/arch/x86/platform/efi/efi.c
989     @@ -436,7 +436,7 @@ void __init efi_reserve_boot_services(void)
990     * - Not within any part of the kernel
991     * - Not the bios reserved area
992     */
993     - if ((start+size >= __pa_symbol(_text)
994     + if ((start + size > __pa_symbol(_text)
995     && start <= __pa_symbol(_end)) ||
996     !e820_all_mapped(start, start+size, E820_RAM) ||
997     memblock_is_region_reserved(start, size)) {
998     diff --git a/drivers/ata/libata-core.c b/drivers/ata/libata-core.c
999     index 1393a5890ed5..1a3dbd1b196e 100644
1000     --- a/drivers/ata/libata-core.c
1001     +++ b/drivers/ata/libata-core.c
1002     @@ -2222,6 +2222,16 @@ int ata_dev_configure(struct ata_device *dev)
1003     if (rc)
1004     return rc;
1005    
1006     + /* some WD SATA-1 drives have issues with LPM, turn on NOLPM for them */
1007     + if ((dev->horkage & ATA_HORKAGE_WD_BROKEN_LPM) &&
1008     + (id[ATA_ID_SATA_CAPABILITY] & 0xe) == 0x2)
1009     + dev->horkage |= ATA_HORKAGE_NOLPM;
1010     +
1011     + if (dev->horkage & ATA_HORKAGE_NOLPM) {
1012     + ata_dev_warn(dev, "LPM support broken, forcing max_power\n");
1013     + dev->link->ap->target_lpm_policy = ATA_LPM_MAX_POWER;
1014     + }
1015     +
1016     /* let ACPI work its magic */
1017     rc = ata_acpi_on_devcfg(dev);
1018     if (rc)
1019     @@ -4216,6 +4226,23 @@ static const struct ata_blacklist_entry ata_device_blacklist [] = {
1020     { "Micron_M500*", NULL, ATA_HORKAGE_NO_NCQ_TRIM, },
1021     { "Crucial_CT???M500SSD1", NULL, ATA_HORKAGE_NO_NCQ_TRIM, },
1022    
1023     + /*
1024     + * Some WD SATA-I drives spin up and down erratically when the link
1025     + * is put into the slumber mode. We don't have full list of the
1026     + * affected devices. Disable LPM if the device matches one of the
1027     + * known prefixes and is SATA-1. As a side effect LPM partial is
1028     + * lost too.
1029     + *
1030     + * https://bugzilla.kernel.org/show_bug.cgi?id=57211
1031     + */
1032     + { "WDC WD800JD-*", NULL, ATA_HORKAGE_WD_BROKEN_LPM },
1033     + { "WDC WD1200JD-*", NULL, ATA_HORKAGE_WD_BROKEN_LPM },
1034     + { "WDC WD1600JD-*", NULL, ATA_HORKAGE_WD_BROKEN_LPM },
1035     + { "WDC WD2000JD-*", NULL, ATA_HORKAGE_WD_BROKEN_LPM },
1036     + { "WDC WD2500JD-*", NULL, ATA_HORKAGE_WD_BROKEN_LPM },
1037     + { "WDC WD3000JD-*", NULL, ATA_HORKAGE_WD_BROKEN_LPM },
1038     + { "WDC WD3200JD-*", NULL, ATA_HORKAGE_WD_BROKEN_LPM },
1039     +
1040     /* End Marker */
1041     { }
1042     };
1043     diff --git a/drivers/ata/libata-scsi.c b/drivers/ata/libata-scsi.c
1044     index 377eb889f555..ef8567de6a75 100644
1045     --- a/drivers/ata/libata-scsi.c
1046     +++ b/drivers/ata/libata-scsi.c
1047     @@ -111,12 +111,14 @@ static const char *ata_lpm_policy_names[] = {
1048     [ATA_LPM_MIN_POWER] = "min_power",
1049     };
1050    
1051     -static ssize_t ata_scsi_lpm_store(struct device *dev,
1052     +static ssize_t ata_scsi_lpm_store(struct device *device,
1053     struct device_attribute *attr,
1054     const char *buf, size_t count)
1055     {
1056     - struct Scsi_Host *shost = class_to_shost(dev);
1057     + struct Scsi_Host *shost = class_to_shost(device);
1058     struct ata_port *ap = ata_shost_to_port(shost);
1059     + struct ata_link *link;
1060     + struct ata_device *dev;
1061     enum ata_lpm_policy policy;
1062     unsigned long flags;
1063    
1064     @@ -132,10 +134,20 @@ static ssize_t ata_scsi_lpm_store(struct device *dev,
1065     return -EINVAL;
1066    
1067     spin_lock_irqsave(ap->lock, flags);
1068     +
1069     + ata_for_each_link(link, ap, EDGE) {
1070     + ata_for_each_dev(dev, &ap->link, ENABLED) {
1071     + if (dev->horkage & ATA_HORKAGE_NOLPM) {
1072     + count = -EOPNOTSUPP;
1073     + goto out_unlock;
1074     + }
1075     + }
1076     + }
1077     +
1078     ap->target_lpm_policy = policy;
1079     ata_port_schedule_eh(ap);
1080     +out_unlock:
1081     spin_unlock_irqrestore(ap->lock, flags);
1082     -
1083     return count;
1084     }
1085    
1086     diff --git a/drivers/ata/sata_mv.c b/drivers/ata/sata_mv.c
1087     index 56be31819897..dc9d4b1ea4ec 100644
1088     --- a/drivers/ata/sata_mv.c
1089     +++ b/drivers/ata/sata_mv.c
1090     @@ -304,6 +304,7 @@ enum {
1091     MV5_LTMODE = 0x30,
1092     MV5_PHY_CTL = 0x0C,
1093     SATA_IFCFG = 0x050,
1094     + LP_PHY_CTL = 0x058,
1095    
1096     MV_M2_PREAMP_MASK = 0x7e0,
1097    
1098     @@ -431,6 +432,7 @@ enum {
1099     MV_HP_CUT_THROUGH = (1 << 10), /* can use EDMA cut-through */
1100     MV_HP_FLAG_SOC = (1 << 11), /* SystemOnChip, no PCI */
1101     MV_HP_QUIRK_LED_BLINK_EN = (1 << 12), /* is led blinking enabled? */
1102     + MV_HP_FIX_LP_PHY_CTL = (1 << 13), /* fix speed in LP_PHY_CTL ? */
1103    
1104     /* Port private flags (pp_flags) */
1105     MV_PP_FLAG_EDMA_EN = (1 << 0), /* is EDMA engine enabled? */
1106     @@ -1358,6 +1360,7 @@ static int mv_scr_write(struct ata_link *link, unsigned int sc_reg_in, u32 val)
1107    
1108     if (ofs != 0xffffffffU) {
1109     void __iomem *addr = mv_ap_base(link->ap) + ofs;
1110     + struct mv_host_priv *hpriv = link->ap->host->private_data;
1111     if (sc_reg_in == SCR_CONTROL) {
1112     /*
1113     * Workaround for 88SX60x1 FEr SATA#26:
1114     @@ -1374,6 +1377,18 @@ static int mv_scr_write(struct ata_link *link, unsigned int sc_reg_in, u32 val)
1115     */
1116     if ((val & 0xf) == 1 || (readl(addr) & 0xf) == 1)
1117     val |= 0xf000;
1118     +
1119     + if (hpriv->hp_flags & MV_HP_FIX_LP_PHY_CTL) {
1120     + void __iomem *lp_phy_addr =
1121     + mv_ap_base(link->ap) + LP_PHY_CTL;
1122     + /*
1123     + * Set PHY speed according to SControl speed.
1124     + */
1125     + if ((val & 0xf0) == 0x10)
1126     + writelfl(0x7, lp_phy_addr);
1127     + else
1128     + writelfl(0x227, lp_phy_addr);
1129     + }
1130     }
1131     writelfl(val, addr);
1132     return 0;
1133     @@ -4110,6 +4125,15 @@ static int mv_platform_probe(struct platform_device *pdev)
1134     if (rc)
1135     goto err;
1136    
1137     + /*
1138     + * To allow disk hotplug on Armada 370/XP SoCs, the PHY speed must be
1139     + * updated in the LP_PHY_CTL register.
1140     + */
1141     + if (pdev->dev.of_node &&
1142     + of_device_is_compatible(pdev->dev.of_node,
1143     + "marvell,armada-370-sata"))
1144     + hpriv->hp_flags |= MV_HP_FIX_LP_PHY_CTL;
1145     +
1146     /* initialize adapter */
1147     rc = mv_init_host(host);
1148     if (rc)
1149     @@ -4209,6 +4233,7 @@ static int mv_platform_resume(struct platform_device *pdev)
1150    
1151     #ifdef CONFIG_OF
1152     static struct of_device_id mv_sata_dt_ids[] = {
1153     + { .compatible = "marvell,armada-370-sata", },
1154     { .compatible = "marvell,orion-sata", },
1155     {},
1156     };
1157     diff --git a/drivers/char/tpm/tpm_i2c_stm_st33.c b/drivers/char/tpm/tpm_i2c_stm_st33.c
1158     index a0d6ceb5d005..cf6840385483 100644
1159     --- a/drivers/char/tpm/tpm_i2c_stm_st33.c
1160     +++ b/drivers/char/tpm/tpm_i2c_stm_st33.c
1161     @@ -410,6 +410,8 @@ static int recv_data(struct tpm_chip *chip, u8 *buf, size_t count)
1162     &chip->vendor.read_queue)
1163     == 0) {
1164     burstcnt = get_burstcount(chip);
1165     + if (burstcnt < 0)
1166     + return burstcnt;
1167     len = min_t(int, burstcnt, count - size);
1168     I2C_READ_DATA(client, TPM_DATA_FIFO, buf + size, len);
1169     size += len;
1170     @@ -451,7 +453,8 @@ static irqreturn_t tpm_ioserirq_handler(int irq, void *dev_id)
1171     static int tpm_stm_i2c_send(struct tpm_chip *chip, unsigned char *buf,
1172     size_t len)
1173     {
1174     - u32 status, burstcnt = 0, i, size;
1175     + u32 status, i, size;
1176     + int burstcnt = 0;
1177     int ret;
1178     u8 data;
1179     struct i2c_client *client;
1180     @@ -482,6 +485,8 @@ static int tpm_stm_i2c_send(struct tpm_chip *chip, unsigned char *buf,
1181    
1182     for (i = 0; i < len - 1;) {
1183     burstcnt = get_burstcount(chip);
1184     + if (burstcnt < 0)
1185     + return burstcnt;
1186     size = min_t(int, len - i - 1, burstcnt);
1187     ret = I2C_WRITE_DATA(client, TPM_DATA_FIFO, buf, size);
1188     if (ret < 0)
1189     diff --git a/drivers/char/tpm/tpm_ppi.c b/drivers/char/tpm/tpm_ppi.c
1190     index e1f3337a0cf9..2db4419831be 100644
1191     --- a/drivers/char/tpm/tpm_ppi.c
1192     +++ b/drivers/char/tpm/tpm_ppi.c
1193     @@ -172,7 +172,7 @@ static ssize_t tpm_store_ppi_request(struct device *dev,
1194     * is updated with function index from SUBREQ to SUBREQ2 since PPI
1195     * version 1.1
1196     */
1197     - if (strcmp(version, "1.1") == -1)
1198     + if (strcmp(version, "1.1") < 0)
1199     params[2].integer.value = TPM_PPI_FN_SUBREQ;
1200     else
1201     params[2].integer.value = TPM_PPI_FN_SUBREQ2;
1202     @@ -182,7 +182,7 @@ static ssize_t tpm_store_ppi_request(struct device *dev,
1203     * string/package type. For PPI version 1.0 and 1.1, use buffer type
1204     * for compatibility, and use package type since 1.2 according to spec.
1205     */
1206     - if (strcmp(version, "1.2") == -1) {
1207     + if (strcmp(version, "1.2") < 0) {
1208     params[3].type = ACPI_TYPE_BUFFER;
1209     params[3].buffer.length = sizeof(req);
1210     sscanf(buf, "%d", &req);
1211     @@ -248,7 +248,7 @@ static ssize_t tpm_show_ppi_transition_action(struct device *dev,
1212     * (e.g. Capella with PPI 1.0) need integer/string/buffer type, so for
1213     * compatibility, define params[3].type as buffer, if PPI version < 1.2
1214     */
1215     - if (strcmp(version, "1.2") == -1) {
1216     + if (strcmp(version, "1.2") < 0) {
1217     params[3].type = ACPI_TYPE_BUFFER;
1218     params[3].buffer.length = 0;
1219     params[3].buffer.pointer = NULL;
1220     @@ -390,7 +390,7 @@ static ssize_t show_ppi_operations(char *buf, u32 start, u32 end)
1221     kfree(output.pointer);
1222     output.length = ACPI_ALLOCATE_BUFFER;
1223     output.pointer = NULL;
1224     - if (strcmp(version, "1.2") == -1)
1225     + if (strcmp(version, "1.2") < 0)
1226     return -EPERM;
1227    
1228     params[2].integer.value = TPM_PPI_FN_GETOPR;
1229     diff --git a/drivers/edac/e752x_edac.c b/drivers/edac/e752x_edac.c
1230     index 644fec54681f..f1e9d7bd131f 100644
1231     --- a/drivers/edac/e752x_edac.c
1232     +++ b/drivers/edac/e752x_edac.c
1233     @@ -1182,9 +1182,11 @@ static int e752x_get_devs(struct pci_dev *pdev, int dev_idx,
1234     pvt->bridge_ck = pci_get_device(PCI_VENDOR_ID_INTEL,
1235     pvt->dev_info->err_dev, pvt->bridge_ck);
1236    
1237     - if (pvt->bridge_ck == NULL)
1238     + if (pvt->bridge_ck == NULL) {
1239     pvt->bridge_ck = pci_scan_single_device(pdev->bus,
1240     PCI_DEVFN(0, 1));
1241     + pci_dev_get(pvt->bridge_ck);
1242     + }
1243    
1244     if (pvt->bridge_ck == NULL) {
1245     e752x_printk(KERN_ERR, "error reporting device not found:"
1246     diff --git a/drivers/hwmon/k10temp.c b/drivers/hwmon/k10temp.c
1247     index d65f3fd895dd..758774f4454c 100644
1248     --- a/drivers/hwmon/k10temp.c
1249     +++ b/drivers/hwmon/k10temp.c
1250     @@ -210,6 +210,7 @@ static DEFINE_PCI_DEVICE_TABLE(k10temp_id_table) = {
1251     { PCI_VDEVICE(AMD, PCI_DEVICE_ID_AMD_CNB17H_F3) },
1252     { PCI_VDEVICE(AMD, PCI_DEVICE_ID_AMD_15H_NB_F3) },
1253     { PCI_VDEVICE(AMD, PCI_DEVICE_ID_AMD_15H_M10H_F3) },
1254     + { PCI_VDEVICE(AMD, PCI_DEVICE_ID_AMD_15H_M30H_NB_F3) },
1255     { PCI_VDEVICE(AMD, PCI_DEVICE_ID_AMD_16H_NB_F3) },
1256     {}
1257     };
1258     diff --git a/drivers/i2c/busses/Kconfig b/drivers/i2c/busses/Kconfig
1259     index 3b26129f6055..faa3e8e56f6c 100644
1260     --- a/drivers/i2c/busses/Kconfig
1261     +++ b/drivers/i2c/busses/Kconfig
1262     @@ -152,6 +152,7 @@ config I2C_PIIX4
1263     ATI SB700/SP5100
1264     ATI SB800
1265     AMD Hudson-2
1266     + AMD ML
1267     AMD CZ
1268     Serverworks OSB4
1269     Serverworks CSB5
1270     diff --git a/drivers/i2c/busses/i2c-mv64xxx.c b/drivers/i2c/busses/i2c-mv64xxx.c
1271     index 8be7e42aa4de..b8c5187b9ee0 100644
1272     --- a/drivers/i2c/busses/i2c-mv64xxx.c
1273     +++ b/drivers/i2c/busses/i2c-mv64xxx.c
1274     @@ -692,6 +692,7 @@ static const struct of_device_id mv64xxx_i2c_of_match_table[] = {
1275     { .compatible = "allwinner,sun4i-i2c", .data = &mv64xxx_i2c_regs_sun4i},
1276     { .compatible = "marvell,mv64xxx-i2c", .data = &mv64xxx_i2c_regs_mv64xxx},
1277     { .compatible = "marvell,mv78230-i2c", .data = &mv64xxx_i2c_regs_mv64xxx},
1278     + { .compatible = "marvell,mv78230-a0-i2c", .data = &mv64xxx_i2c_regs_mv64xxx},
1279     {}
1280     };
1281     MODULE_DEVICE_TABLE(of, mv64xxx_i2c_of_match_table);
1282     @@ -783,6 +784,10 @@ mv64xxx_of_config(struct mv64xxx_i2c_data *drv_data,
1283     drv_data->errata_delay = true;
1284     }
1285    
1286     + if (of_device_is_compatible(np, "marvell,mv78230-a0-i2c")) {
1287     + drv_data->offload_enabled = false;
1288     + drv_data->errata_delay = true;
1289     + }
1290     out:
1291     return rc;
1292     #endif
1293     diff --git a/drivers/i2c/busses/i2c-piix4.c b/drivers/i2c/busses/i2c-piix4.c
1294     index a028617b8f13..f71b4d381c00 100644
1295     --- a/drivers/i2c/busses/i2c-piix4.c
1296     +++ b/drivers/i2c/busses/i2c-piix4.c
1297     @@ -22,7 +22,7 @@
1298     Intel PIIX4, 440MX
1299     Serverworks OSB4, CSB5, CSB6, HT-1000, HT-1100
1300     ATI IXP200, IXP300, IXP400, SB600, SB700/SP5100, SB800
1301     - AMD Hudson-2, CZ
1302     + AMD Hudson-2, ML, CZ
1303     SMSC Victory66
1304    
1305     Note: we assume there can only be one device, with one or more
1306     @@ -235,7 +235,8 @@ static int piix4_setup_sb800(struct pci_dev *PIIX4_dev,
1307     {
1308     unsigned short piix4_smba;
1309     unsigned short smba_idx = 0xcd6;
1310     - u8 smba_en_lo, smba_en_hi, i2ccfg, i2ccfg_offset = 0x10, smb_en;
1311     + u8 smba_en_lo, smba_en_hi, smb_en, smb_en_status;
1312     + u8 i2ccfg, i2ccfg_offset = 0x10;
1313    
1314     /* SB800 and later SMBus does not support forcing address */
1315     if (force || force_addr) {
1316     @@ -245,7 +246,15 @@ static int piix4_setup_sb800(struct pci_dev *PIIX4_dev,
1317     }
1318    
1319     /* Determine the address of the SMBus areas */
1320     - smb_en = (aux) ? 0x28 : 0x2c;
1321     + if ((PIIX4_dev->vendor == PCI_VENDOR_ID_AMD &&
1322     + PIIX4_dev->device == PCI_DEVICE_ID_AMD_HUDSON2_SMBUS &&
1323     + PIIX4_dev->revision >= 0x41) ||
1324     + (PIIX4_dev->vendor == PCI_VENDOR_ID_AMD &&
1325     + PIIX4_dev->device == 0x790b &&
1326     + PIIX4_dev->revision >= 0x49))
1327     + smb_en = 0x00;
1328     + else
1329     + smb_en = (aux) ? 0x28 : 0x2c;
1330    
1331     if (!request_region(smba_idx, 2, "smba_idx")) {
1332     dev_err(&PIIX4_dev->dev, "SMBus base address index region "
1333     @@ -258,13 +267,22 @@ static int piix4_setup_sb800(struct pci_dev *PIIX4_dev,
1334     smba_en_hi = inb_p(smba_idx + 1);
1335     release_region(smba_idx, 2);
1336    
1337     - if ((smba_en_lo & 1) == 0) {
1338     + if (!smb_en) {
1339     + smb_en_status = smba_en_lo & 0x10;
1340     + piix4_smba = smba_en_hi << 8;
1341     + if (aux)
1342     + piix4_smba |= 0x20;
1343     + } else {
1344     + smb_en_status = smba_en_lo & 0x01;
1345     + piix4_smba = ((smba_en_hi << 8) | smba_en_lo) & 0xffe0;
1346     + }
1347     +
1348     + if (!smb_en_status) {
1349     dev_err(&PIIX4_dev->dev,
1350     "Host SMBus controller not enabled!\n");
1351     return -ENODEV;
1352     }
1353    
1354     - piix4_smba = ((smba_en_hi << 8) | smba_en_lo) & 0xffe0;
1355     if (acpi_check_region(piix4_smba, SMBIOSIZE, piix4_driver.name))
1356     return -ENODEV;
1357    
1358     diff --git a/drivers/md/bcache/bset.c b/drivers/md/bcache/bset.c
1359     index 7d388b8bb50e..16958704af3b 100644
1360     --- a/drivers/md/bcache/bset.c
1361     +++ b/drivers/md/bcache/bset.c
1362     @@ -955,7 +955,7 @@ static void sort_key_next(struct btree_iter *iter,
1363     *i = iter->data[--iter->used];
1364     }
1365    
1366     -static void btree_sort_fixup(struct btree_iter *iter)
1367     +static struct bkey *btree_sort_fixup(struct btree_iter *iter, struct bkey *tmp)
1368     {
1369     while (iter->used > 1) {
1370     struct btree_iter_set *top = iter->data, *i = top + 1;
1371     @@ -983,9 +983,22 @@ static void btree_sort_fixup(struct btree_iter *iter)
1372     } else {
1373     /* can't happen because of comparison func */
1374     BUG_ON(!bkey_cmp(&START_KEY(top->k), &START_KEY(i->k)));
1375     - bch_cut_back(&START_KEY(i->k), top->k);
1376     +
1377     + if (bkey_cmp(i->k, top->k) < 0) {
1378     + bkey_copy(tmp, top->k);
1379     +
1380     + bch_cut_back(&START_KEY(i->k), tmp);
1381     + bch_cut_front(i->k, top->k);
1382     + heap_sift(iter, 0, btree_iter_cmp);
1383     +
1384     + return tmp;
1385     + } else {
1386     + bch_cut_back(&START_KEY(i->k), top->k);
1387     + }
1388     }
1389     }
1390     +
1391     + return NULL;
1392     }
1393    
1394     static void btree_mergesort(struct btree *b, struct bset *out,
1395     @@ -993,15 +1006,20 @@ static void btree_mergesort(struct btree *b, struct bset *out,
1396     bool fixup, bool remove_stale)
1397     {
1398     struct bkey *k, *last = NULL;
1399     + BKEY_PADDED(k) tmp;
1400     bool (*bad)(struct btree *, const struct bkey *) = remove_stale
1401     ? bch_ptr_bad
1402     : bch_ptr_invalid;
1403    
1404     while (!btree_iter_end(iter)) {
1405     if (fixup && !b->level)
1406     - btree_sort_fixup(iter);
1407     + k = btree_sort_fixup(iter, &tmp.k);
1408     + else
1409     + k = NULL;
1410     +
1411     + if (!k)
1412     + k = bch_btree_iter_next(iter);
1413    
1414     - k = bch_btree_iter_next(iter);
1415     if (bad(b, k))
1416     continue;
1417    
1418     diff --git a/drivers/mfd/max77686.c b/drivers/mfd/max77686.c
1419     index 34520cbe8afb..12b3ae3aa7c5 100644
1420     --- a/drivers/mfd/max77686.c
1421     +++ b/drivers/mfd/max77686.c
1422     @@ -104,7 +104,7 @@ static int max77686_i2c_probe(struct i2c_client *i2c,
1423     max77686->irq_gpio = pdata->irq_gpio;
1424     max77686->irq = i2c->irq;
1425    
1426     - max77686->regmap = regmap_init_i2c(i2c, &max77686_regmap_config);
1427     + max77686->regmap = devm_regmap_init_i2c(i2c, &max77686_regmap_config);
1428     if (IS_ERR(max77686->regmap)) {
1429     ret = PTR_ERR(max77686->regmap);
1430     dev_err(max77686->dev, "Failed to allocate register map: %d\n",
1431     diff --git a/drivers/misc/mei/hbm.c b/drivers/misc/mei/hbm.c
1432     index 9b3a0fb7f265..5d9e687a866c 100644
1433     --- a/drivers/misc/mei/hbm.c
1434     +++ b/drivers/misc/mei/hbm.c
1435     @@ -128,6 +128,17 @@ static bool is_treat_specially_client(struct mei_cl *cl,
1436     return false;
1437     }
1438    
1439     +/**
1440     + * mei_hbm_idle - set hbm to idle state
1441     + *
1442     + * @dev: the device structure
1443     + */
1444     +void mei_hbm_idle(struct mei_device *dev)
1445     +{
1446     + dev->init_clients_timer = 0;
1447     + dev->hbm_state = MEI_HBM_IDLE;
1448     +}
1449     +
1450     int mei_hbm_start_wait(struct mei_device *dev)
1451     {
1452     int ret;
1453     @@ -577,6 +588,14 @@ void mei_hbm_dispatch(struct mei_device *dev, struct mei_msg_hdr *hdr)
1454     mei_read_slots(dev, dev->rd_msg_buf, hdr->length);
1455     mei_msg = (struct mei_bus_message *)dev->rd_msg_buf;
1456    
1457     + /* ignore spurious message and prevent reset nesting
1458     + * hbm is put to idle during system reset
1459     + */
1460     + if (dev->hbm_state == MEI_HBM_IDLE) {
1461     + dev_dbg(&dev->pdev->dev, "hbm: state is idle ignore spurious messages\n");
1462     + return 0;
1463     + }
1464     +
1465     switch (mei_msg->hbm_cmd) {
1466     case HOST_START_RES_CMD:
1467     version_res = (struct hbm_host_version_response *)mei_msg;
1468     diff --git a/drivers/misc/mei/hbm.h b/drivers/misc/mei/hbm.h
1469     index 4ae2e56e404f..210757701207 100644
1470     --- a/drivers/misc/mei/hbm.h
1471     +++ b/drivers/misc/mei/hbm.h
1472     @@ -49,6 +49,7 @@ static inline void mei_hbm_hdr(struct mei_msg_hdr *hdr, size_t length)
1473     hdr->reserved = 0;
1474     }
1475    
1476     +void mei_hbm_idle(struct mei_device *dev);
1477     int mei_hbm_start_req(struct mei_device *dev);
1478     int mei_hbm_start_wait(struct mei_device *dev);
1479     int mei_hbm_cl_flow_control_req(struct mei_device *dev, struct mei_cl *cl);
1480     diff --git a/drivers/misc/mei/init.c b/drivers/misc/mei/init.c
1481     index f7f3abbe12b6..53a93908e030 100644
1482     --- a/drivers/misc/mei/init.c
1483     +++ b/drivers/misc/mei/init.c
1484     @@ -151,14 +151,19 @@ void mei_reset(struct mei_device *dev, int interrupts_enabled)
1485     dev_warn(&dev->pdev->dev, "unexpected reset: dev_state = %s\n",
1486     mei_dev_state_str(dev->dev_state));
1487    
1488     + /* we're already in reset, cancel the init timer
1489     + * if the reset was called due the hbm protocol error
1490     + * we need to call it before hw start
1491     + * so the hbm watchdog won't kick in
1492     + */
1493     + mei_hbm_idle(dev);
1494     +
1495     ret = mei_hw_reset(dev, interrupts_enabled);
1496     if (ret) {
1497     dev_err(&dev->pdev->dev, "hw reset failed disabling the device\n");
1498     interrupts_enabled = false;
1499     - dev->dev_state = MEI_DEV_DISABLED;
1500     }
1501    
1502     - dev->hbm_state = MEI_HBM_IDLE;
1503    
1504     if (dev->dev_state != MEI_DEV_INITIALIZING &&
1505     dev->dev_state != MEI_DEV_POWER_UP) {
1506     @@ -182,8 +187,6 @@ void mei_reset(struct mei_device *dev, int interrupts_enabled)
1507     memset(&dev->wr_ext_msg, 0, sizeof(dev->wr_ext_msg));
1508     }
1509    
1510     - /* we're already in reset, cancel the init timer */
1511     - dev->init_clients_timer = 0;
1512    
1513     dev->me_clients_num = 0;
1514     dev->rd_msg_hdr = 0;
1515     @@ -191,6 +194,7 @@ void mei_reset(struct mei_device *dev, int interrupts_enabled)
1516    
1517     if (!interrupts_enabled) {
1518     dev_dbg(&dev->pdev->dev, "intr not enabled end of reset\n");
1519     + dev->dev_state = MEI_DEV_DISABLED;
1520     return;
1521     }
1522    
1523     diff --git a/drivers/misc/mei/interrupt.c b/drivers/misc/mei/interrupt.c
1524     index 7a95c07e59a6..6ce63f531fa2 100644
1525     --- a/drivers/misc/mei/interrupt.c
1526     +++ b/drivers/misc/mei/interrupt.c
1527     @@ -533,7 +533,6 @@ EXPORT_SYMBOL_GPL(mei_irq_write_handler);
1528     *
1529     * @work: pointer to the work_struct structure
1530     *
1531     - * NOTE: This function is called by timer interrupt work
1532     */
1533     void mei_timer(struct work_struct *work)
1534     {
1535     @@ -548,18 +547,24 @@ void mei_timer(struct work_struct *work)
1536    
1537    
1538     mutex_lock(&dev->device_lock);
1539     - if (dev->dev_state != MEI_DEV_ENABLED) {
1540     - if (dev->dev_state == MEI_DEV_INIT_CLIENTS) {
1541     - if (dev->init_clients_timer) {
1542     - if (--dev->init_clients_timer == 0) {
1543     - dev_err(&dev->pdev->dev, "reset: init clients timeout hbm_state = %d.\n",
1544     - dev->hbm_state);
1545     - mei_reset(dev, 1);
1546     - }
1547     +
1548     + /* Catch interrupt stalls during HBM init handshake */
1549     + if (dev->dev_state == MEI_DEV_INIT_CLIENTS &&
1550     + dev->hbm_state != MEI_HBM_IDLE) {
1551     +
1552     + if (dev->init_clients_timer) {
1553     + if (--dev->init_clients_timer == 0) {
1554     + dev_err(&dev->pdev->dev, "timer: init clients timeout hbm_state = %d.\n",
1555     + dev->hbm_state);
1556     + mei_reset(dev, 1);
1557     + goto out;
1558     }
1559     }
1560     - goto out;
1561     }
1562     +
1563     + if (dev->dev_state != MEI_DEV_ENABLED)
1564     + goto out;
1565     +
1566     /*** connect/disconnect timeouts ***/
1567     list_for_each_entry_safe(cl_pos, cl_next, &dev->file_list, link) {
1568     if (cl_pos->timer_count) {
1569     diff --git a/drivers/misc/mic/host/mic_device.h b/drivers/misc/mic/host/mic_device.h
1570     index 3574cc375bb9..b2da289320c9 100644
1571     --- a/drivers/misc/mic/host/mic_device.h
1572     +++ b/drivers/misc/mic/host/mic_device.h
1573     @@ -134,6 +134,8 @@ struct mic_device {
1574     * @send_intr: Send an interrupt for a particular doorbell on the card.
1575     * @ack_interrupt: Hardware specific operations to ack the h/w on
1576     * receipt of an interrupt.
1577     + * @intr_workarounds: Hardware specific workarounds needed after
1578     + * handling an interrupt.
1579     * @reset: Reset the remote processor.
1580     * @reset_fw_ready: Reset firmware ready field.
1581     * @is_fw_ready: Check if firmware is ready for OS download.
1582     @@ -149,6 +151,7 @@ struct mic_hw_ops {
1583     void (*write_spad)(struct mic_device *mdev, unsigned int idx, u32 val);
1584     void (*send_intr)(struct mic_device *mdev, int doorbell);
1585     u32 (*ack_interrupt)(struct mic_device *mdev);
1586     + void (*intr_workarounds)(struct mic_device *mdev);
1587     void (*reset)(struct mic_device *mdev);
1588     void (*reset_fw_ready)(struct mic_device *mdev);
1589     bool (*is_fw_ready)(struct mic_device *mdev);
1590     diff --git a/drivers/misc/mic/host/mic_main.c b/drivers/misc/mic/host/mic_main.c
1591     index ad838c7651c4..c04a021e20c7 100644
1592     --- a/drivers/misc/mic/host/mic_main.c
1593     +++ b/drivers/misc/mic/host/mic_main.c
1594     @@ -115,7 +115,7 @@ static irqreturn_t mic_shutdown_db(int irq, void *data)
1595     struct mic_device *mdev = data;
1596     struct mic_bootparam *bootparam = mdev->dp;
1597    
1598     - mdev->ops->ack_interrupt(mdev);
1599     + mdev->ops->intr_workarounds(mdev);
1600    
1601     switch (bootparam->shutdown_status) {
1602     case MIC_HALTED:
1603     diff --git a/drivers/misc/mic/host/mic_virtio.c b/drivers/misc/mic/host/mic_virtio.c
1604     index e04bb4fe6823..752ff873f891 100644
1605     --- a/drivers/misc/mic/host/mic_virtio.c
1606     +++ b/drivers/misc/mic/host/mic_virtio.c
1607     @@ -369,7 +369,7 @@ static irqreturn_t mic_virtio_intr_handler(int irq, void *data)
1608     struct mic_vdev *mvdev = data;
1609     struct mic_device *mdev = mvdev->mdev;
1610    
1611     - mdev->ops->ack_interrupt(mdev);
1612     + mdev->ops->intr_workarounds(mdev);
1613     schedule_work(&mvdev->virtio_bh_work);
1614     return IRQ_HANDLED;
1615     }
1616     diff --git a/drivers/misc/mic/host/mic_x100.c b/drivers/misc/mic/host/mic_x100.c
1617     index 0dfa8a81436e..5562fdd3ef4e 100644
1618     --- a/drivers/misc/mic/host/mic_x100.c
1619     +++ b/drivers/misc/mic/host/mic_x100.c
1620     @@ -174,35 +174,38 @@ static void mic_x100_send_intr(struct mic_device *mdev, int doorbell)
1621     }
1622    
1623     /**
1624     - * mic_ack_interrupt - Device specific interrupt handling.
1625     - * @mdev: pointer to mic_device instance
1626     + * mic_x100_ack_interrupt - Read the interrupt sources register and
1627     + * clear it. This function will be called in the MSI/INTx case.
1628     + * @mdev: Pointer to mic_device instance.
1629     *
1630     - * Returns: bitmask of doorbell events triggered.
1631     + * Returns: bitmask of interrupt sources triggered.
1632     */
1633     static u32 mic_x100_ack_interrupt(struct mic_device *mdev)
1634     {
1635     - u32 reg = 0;
1636     - struct mic_mw *mw = &mdev->mmio;
1637     u32 sicr0 = MIC_X100_SBOX_BASE_ADDRESS + MIC_X100_SBOX_SICR0;
1638     + u32 reg = mic_mmio_read(&mdev->mmio, sicr0);
1639     + mic_mmio_write(&mdev->mmio, reg, sicr0);
1640     + return reg;
1641     +}
1642     +
1643     +/**
1644     + * mic_x100_intr_workarounds - These hardware specific workarounds are
1645     + * to be invoked everytime an interrupt is handled.
1646     + * @mdev: Pointer to mic_device instance.
1647     + *
1648     + * Returns: none
1649     + */
1650     +static void mic_x100_intr_workarounds(struct mic_device *mdev)
1651     +{
1652     + struct mic_mw *mw = &mdev->mmio;
1653    
1654     /* Clear pending bit array. */
1655     if (MIC_A0_STEP == mdev->stepping)
1656     mic_mmio_write(mw, 1, MIC_X100_SBOX_BASE_ADDRESS +
1657     MIC_X100_SBOX_MSIXPBACR);
1658    
1659     - if (mdev->irq_info.num_vectors <= 1) {
1660     - reg = mic_mmio_read(mw, sicr0);
1661     -
1662     - if (unlikely(!reg))
1663     - goto done;
1664     -
1665     - mic_mmio_write(mw, reg, sicr0);
1666     - }
1667     -
1668     if (mdev->stepping >= MIC_B0_STEP)
1669     mdev->intr_ops->enable_interrupts(mdev);
1670     -done:
1671     - return reg;
1672     }
1673    
1674     /**
1675     @@ -553,6 +556,7 @@ struct mic_hw_ops mic_x100_ops = {
1676     .write_spad = mic_x100_write_spad,
1677     .send_intr = mic_x100_send_intr,
1678     .ack_interrupt = mic_x100_ack_interrupt,
1679     + .intr_workarounds = mic_x100_intr_workarounds,
1680     .reset = mic_x100_hw_reset,
1681     .reset_fw_ready = mic_x100_reset_fw_ready,
1682     .is_fw_ready = mic_x100_is_fw_ready,
1683     diff --git a/drivers/mmc/host/sdhci-esdhc-imx.c b/drivers/mmc/host/sdhci-esdhc-imx.c
1684     index 461a4c3f4ef7..1dcaf8a32be7 100644
1685     --- a/drivers/mmc/host/sdhci-esdhc-imx.c
1686     +++ b/drivers/mmc/host/sdhci-esdhc-imx.c
1687     @@ -558,19 +558,17 @@ static unsigned int esdhc_pltfm_get_max_clock(struct sdhci_host *host)
1688     struct pltfm_imx_data *imx_data = pltfm_host->priv;
1689     struct esdhc_platform_data *boarddata = &imx_data->boarddata;
1690    
1691     - u32 f_host = clk_get_rate(pltfm_host->clk);
1692     -
1693     - if (boarddata->f_max && (boarddata->f_max < f_host))
1694     + if (boarddata->f_max && (boarddata->f_max < pltfm_host->clock))
1695     return boarddata->f_max;
1696     else
1697     - return f_host;
1698     + return pltfm_host->clock;
1699     }
1700    
1701     static unsigned int esdhc_pltfm_get_min_clock(struct sdhci_host *host)
1702     {
1703     struct sdhci_pltfm_host *pltfm_host = sdhci_priv(host);
1704    
1705     - return clk_get_rate(pltfm_host->clk) / 256 / 16;
1706     + return pltfm_host->clock / 256 / 16;
1707     }
1708    
1709     static inline void esdhc_pltfm_set_clock(struct sdhci_host *host,
1710     @@ -578,7 +576,7 @@ static inline void esdhc_pltfm_set_clock(struct sdhci_host *host,
1711     {
1712     struct sdhci_pltfm_host *pltfm_host = sdhci_priv(host);
1713     struct pltfm_imx_data *imx_data = pltfm_host->priv;
1714     - unsigned int host_clock = clk_get_rate(pltfm_host->clk);
1715     + unsigned int host_clock = pltfm_host->clock;
1716     int pre_div = 2;
1717     int div = 1;
1718     u32 temp, val;
1719     @@ -976,7 +974,7 @@ static int sdhci_esdhc_imx_probe(struct platform_device *pdev)
1720     }
1721    
1722     pltfm_host->clk = imx_data->clk_per;
1723     -
1724     + pltfm_host->clock = clk_get_rate(pltfm_host->clk);
1725     clk_prepare_enable(imx_data->clk_per);
1726     clk_prepare_enable(imx_data->clk_ipg);
1727     clk_prepare_enable(imx_data->clk_ahb);
1728     diff --git a/drivers/mmc/host/sdhci-pci.c b/drivers/mmc/host/sdhci-pci.c
1729     index 8f753811fc7a..c377c16ab0a2 100644
1730     --- a/drivers/mmc/host/sdhci-pci.c
1731     +++ b/drivers/mmc/host/sdhci-pci.c
1732     @@ -381,6 +381,7 @@ static int intel_mrfl_mmc_probe_slot(struct sdhci_pci_slot *slot)
1733    
1734     static const struct sdhci_pci_fixes sdhci_intel_mrfl_mmc = {
1735     .quirks = SDHCI_QUIRK_NO_ENDATTR_IN_NOPDESC,
1736     + .quirks2 = SDHCI_QUIRK2_BROKEN_HS200,
1737     .probe_slot = intel_mrfl_mmc_probe_slot,
1738     };
1739    
1740     diff --git a/drivers/mmc/host/sdhci.c b/drivers/mmc/host/sdhci.c
1741     index bd8a0982aec3..3c719209c2cc 100644
1742     --- a/drivers/mmc/host/sdhci.c
1743     +++ b/drivers/mmc/host/sdhci.c
1744     @@ -1845,12 +1845,12 @@ static int sdhci_execute_tuning(struct mmc_host *mmc, u32 opcode)
1745     unsigned long timeout;
1746     int err = 0;
1747     bool requires_tuning_nonuhs = false;
1748     + unsigned long flags;
1749    
1750     host = mmc_priv(mmc);
1751    
1752     sdhci_runtime_pm_get(host);
1753     - disable_irq(host->irq);
1754     - spin_lock(&host->lock);
1755     + spin_lock_irqsave(&host->lock, flags);
1756    
1757     ctrl = sdhci_readw(host, SDHCI_HOST_CONTROL2);
1758    
1759     @@ -1870,15 +1870,13 @@ static int sdhci_execute_tuning(struct mmc_host *mmc, u32 opcode)
1760     requires_tuning_nonuhs)
1761     ctrl |= SDHCI_CTRL_EXEC_TUNING;
1762     else {
1763     - spin_unlock(&host->lock);
1764     - enable_irq(host->irq);
1765     + spin_unlock_irqrestore(&host->lock, flags);
1766     sdhci_runtime_pm_put(host);
1767     return 0;
1768     }
1769    
1770     if (host->ops->platform_execute_tuning) {
1771     - spin_unlock(&host->lock);
1772     - enable_irq(host->irq);
1773     + spin_unlock_irqrestore(&host->lock, flags);
1774     err = host->ops->platform_execute_tuning(host, opcode);
1775     sdhci_runtime_pm_put(host);
1776     return err;
1777     @@ -1951,15 +1949,12 @@ static int sdhci_execute_tuning(struct mmc_host *mmc, u32 opcode)
1778     host->cmd = NULL;
1779     host->mrq = NULL;
1780    
1781     - spin_unlock(&host->lock);
1782     - enable_irq(host->irq);
1783     -
1784     + spin_unlock_irqrestore(&host->lock, flags);
1785     /* Wait for Buffer Read Ready interrupt */
1786     wait_event_interruptible_timeout(host->buf_ready_int,
1787     (host->tuning_done == 1),
1788     msecs_to_jiffies(50));
1789     - disable_irq(host->irq);
1790     - spin_lock(&host->lock);
1791     + spin_lock_irqsave(&host->lock, flags);
1792    
1793     if (!host->tuning_done) {
1794     pr_info(DRIVER_NAME ": Timeout waiting for "
1795     @@ -2034,8 +2029,7 @@ out:
1796     err = 0;
1797    
1798     sdhci_clear_set_irqs(host, SDHCI_INT_DATA_AVAIL, ier);
1799     - spin_unlock(&host->lock);
1800     - enable_irq(host->irq);
1801     + spin_unlock_irqrestore(&host->lock, flags);
1802     sdhci_runtime_pm_put(host);
1803    
1804     return err;
1805     @@ -3004,7 +2998,8 @@ int sdhci_add_host(struct sdhci_host *host)
1806     /* SD3.0: SDR104 is supported so (for eMMC) the caps2
1807     * field can be promoted to support HS200.
1808     */
1809     - mmc->caps2 |= MMC_CAP2_HS200;
1810     + if (!(host->quirks2 & SDHCI_QUIRK2_BROKEN_HS200))
1811     + mmc->caps2 |= MMC_CAP2_HS200;
1812     } else if (caps[1] & SDHCI_SUPPORT_SDR50)
1813     mmc->caps |= MMC_CAP_UHS_SDR50;
1814    
1815     diff --git a/drivers/net/vxlan.c b/drivers/net/vxlan.c
1816     index ed384fee76ac..02479739eaa0 100644
1817     --- a/drivers/net/vxlan.c
1818     +++ b/drivers/net/vxlan.c
1819     @@ -1047,6 +1047,15 @@ static int vxlan_udp_encap_recv(struct sock *sk, struct sk_buff *skb)
1820     if (!vs)
1821     goto drop;
1822    
1823     + /* If the NIC driver gave us an encapsulated packet
1824     + * with the encapsulation mark, the device checksummed it
1825     + * for us. Otherwise force the upper layers to verify it.
1826     + */
1827     + if (skb->ip_summed != CHECKSUM_UNNECESSARY || !skb->encapsulation)
1828     + skb->ip_summed = CHECKSUM_NONE;
1829     +
1830     + skb->encapsulation = 0;
1831     +
1832     vs->rcv(vs, skb, vxh->vx_vni);
1833     return 0;
1834    
1835     @@ -1105,17 +1114,6 @@ static void vxlan_rcv(struct vxlan_sock *vs,
1836    
1837     skb_reset_network_header(skb);
1838    
1839     - /* If the NIC driver gave us an encapsulated packet with
1840     - * CHECKSUM_UNNECESSARY and Rx checksum feature is enabled,
1841     - * leave the CHECKSUM_UNNECESSARY, the device checksummed it
1842     - * for us. Otherwise force the upper layers to verify it.
1843     - */
1844     - if (skb->ip_summed != CHECKSUM_UNNECESSARY || !skb->encapsulation ||
1845     - !(vxlan->dev->features & NETIF_F_RXCSUM))
1846     - skb->ip_summed = CHECKSUM_NONE;
1847     -
1848     - skb->encapsulation = 0;
1849     -
1850     if (oip6)
1851     err = IP6_ECN_decapsulate(oip6, skb);
1852     if (oip)
1853     diff --git a/drivers/net/wireless/ath/ath9k/hw.c b/drivers/net/wireless/ath/ath9k/hw.c
1854     index 8918035da3a3..e79a2cffb4fe 100644
1855     --- a/drivers/net/wireless/ath/ath9k/hw.c
1856     +++ b/drivers/net/wireless/ath/ath9k/hw.c
1857     @@ -2608,13 +2608,6 @@ int ath9k_hw_fill_cap_info(struct ath_hw *ah)
1858     ah->eep_ops->get_eeprom(ah, EEP_PAPRD))
1859     pCap->hw_caps |= ATH9K_HW_CAP_PAPRD;
1860    
1861     - /*
1862     - * Fast channel change across bands is available
1863     - * only for AR9462 and AR9565.
1864     - */
1865     - if (AR_SREV_9462(ah) || AR_SREV_9565(ah))
1866     - pCap->hw_caps |= ATH9K_HW_CAP_FCC_BAND_SWITCH;
1867     -
1868     return 0;
1869     }
1870    
1871     diff --git a/drivers/net/wireless/ath/ath9k/recv.c b/drivers/net/wireless/ath/ath9k/recv.c
1872     index 95ddca5495d4..102060332dde 100644
1873     --- a/drivers/net/wireless/ath/ath9k/recv.c
1874     +++ b/drivers/net/wireless/ath/ath9k/recv.c
1875     @@ -851,20 +851,15 @@ static int ath9k_process_rate(struct ath_common *common,
1876     enum ieee80211_band band;
1877     unsigned int i = 0;
1878     struct ath_softc __maybe_unused *sc = common->priv;
1879     + struct ath_hw *ah = sc->sc_ah;
1880    
1881     - band = hw->conf.chandef.chan->band;
1882     + band = ah->curchan->chan->band;
1883     sband = hw->wiphy->bands[band];
1884    
1885     - switch (hw->conf.chandef.width) {
1886     - case NL80211_CHAN_WIDTH_5:
1887     + if (IS_CHAN_QUARTER_RATE(ah->curchan))
1888     rxs->flag |= RX_FLAG_5MHZ;
1889     - break;
1890     - case NL80211_CHAN_WIDTH_10:
1891     + else if (IS_CHAN_HALF_RATE(ah->curchan))
1892     rxs->flag |= RX_FLAG_10MHZ;
1893     - break;
1894     - default:
1895     - break;
1896     - }
1897    
1898     if (rx_stats->rs_rate & 0x80) {
1899     /* HT rate */
1900     @@ -1248,6 +1243,14 @@ static int ath9k_rx_skb_preprocess(struct ath_softc *sc,
1901     ath_start_rx_poll(sc, 3);
1902     }
1903    
1904     + /*
1905     + * This shouldn't happen, but have a safety check anyway.
1906     + */
1907     + if (WARN_ON(!ah->curchan)) {
1908     + ret = -EINVAL;
1909     + goto exit;
1910     + }
1911     +
1912     if (ath9k_process_rate(common, hw, rx_stats, rx_status)) {
1913     ret =-EINVAL;
1914     goto exit;
1915     @@ -1255,8 +1258,8 @@ static int ath9k_rx_skb_preprocess(struct ath_softc *sc,
1916    
1917     ath9k_process_rssi(common, hw, rx_stats, rx_status);
1918    
1919     - rx_status->band = hw->conf.chandef.chan->band;
1920     - rx_status->freq = hw->conf.chandef.chan->center_freq;
1921     + rx_status->band = ah->curchan->chan->band;
1922     + rx_status->freq = ah->curchan->chan->center_freq;
1923     rx_status->antenna = rx_stats->rs_antenna;
1924     rx_status->flag |= RX_FLAG_MACTIME_END;
1925    
1926     diff --git a/drivers/net/wireless/b43/b43.h b/drivers/net/wireless/b43/b43.h
1927     index 7f3d461f7e8d..54376fddfaf9 100644
1928     --- a/drivers/net/wireless/b43/b43.h
1929     +++ b/drivers/net/wireless/b43/b43.h
1930     @@ -731,8 +731,6 @@ enum b43_firmware_file_type {
1931     struct b43_request_fw_context {
1932     /* The device we are requesting the fw for. */
1933     struct b43_wldev *dev;
1934     - /* a completion event structure needed if this call is asynchronous */
1935     - struct completion fw_load_complete;
1936     /* a pointer to the firmware object */
1937     const struct firmware *blob;
1938     /* The type of firmware to request. */
1939     @@ -809,6 +807,8 @@ enum {
1940     struct b43_wldev {
1941     struct b43_bus_dev *dev;
1942     struct b43_wl *wl;
1943     + /* a completion event structure needed if this call is asynchronous */
1944     + struct completion fw_load_complete;
1945    
1946     /* The device initialization status.
1947     * Use b43_status() to query. */
1948     diff --git a/drivers/net/wireless/b43/main.c b/drivers/net/wireless/b43/main.c
1949     index ccd24f0acb8d..c75237eb55a1 100644
1950     --- a/drivers/net/wireless/b43/main.c
1951     +++ b/drivers/net/wireless/b43/main.c
1952     @@ -2070,6 +2070,7 @@ void b43_do_release_fw(struct b43_firmware_file *fw)
1953    
1954     static void b43_release_firmware(struct b43_wldev *dev)
1955     {
1956     + complete(&dev->fw_load_complete);
1957     b43_do_release_fw(&dev->fw.ucode);
1958     b43_do_release_fw(&dev->fw.pcm);
1959     b43_do_release_fw(&dev->fw.initvals);
1960     @@ -2095,7 +2096,7 @@ static void b43_fw_cb(const struct firmware *firmware, void *context)
1961     struct b43_request_fw_context *ctx = context;
1962    
1963     ctx->blob = firmware;
1964     - complete(&ctx->fw_load_complete);
1965     + complete(&ctx->dev->fw_load_complete);
1966     }
1967    
1968     int b43_do_request_fw(struct b43_request_fw_context *ctx,
1969     @@ -2142,7 +2143,7 @@ int b43_do_request_fw(struct b43_request_fw_context *ctx,
1970     }
1971     if (async) {
1972     /* do this part asynchronously */
1973     - init_completion(&ctx->fw_load_complete);
1974     + init_completion(&ctx->dev->fw_load_complete);
1975     err = request_firmware_nowait(THIS_MODULE, 1, ctx->fwname,
1976     ctx->dev->dev->dev, GFP_KERNEL,
1977     ctx, b43_fw_cb);
1978     @@ -2150,12 +2151,11 @@ int b43_do_request_fw(struct b43_request_fw_context *ctx,
1979     pr_err("Unable to load firmware\n");
1980     return err;
1981     }
1982     - /* stall here until fw ready */
1983     - wait_for_completion(&ctx->fw_load_complete);
1984     + wait_for_completion(&ctx->dev->fw_load_complete);
1985     if (ctx->blob)
1986     goto fw_ready;
1987     /* On some ARM systems, the async request will fail, but the next sync
1988     - * request works. For this reason, we dall through here
1989     + * request works. For this reason, we fall through here
1990     */
1991     }
1992     err = request_firmware(&ctx->blob, ctx->fwname,
1993     @@ -2424,6 +2424,7 @@ error:
1994    
1995     static int b43_one_core_attach(struct b43_bus_dev *dev, struct b43_wl *wl);
1996     static void b43_one_core_detach(struct b43_bus_dev *dev);
1997     +static int b43_rng_init(struct b43_wl *wl);
1998    
1999     static void b43_request_firmware(struct work_struct *work)
2000     {
2001     @@ -2475,6 +2476,10 @@ start_ieee80211:
2002     goto err_one_core_detach;
2003     wl->hw_registred = true;
2004     b43_leds_register(wl->current_dev);
2005     +
2006     + /* Register HW RNG driver */
2007     + b43_rng_init(wl);
2008     +
2009     goto out;
2010    
2011     err_one_core_detach:
2012     @@ -4636,9 +4641,6 @@ static void b43_wireless_core_exit(struct b43_wldev *dev)
2013     if (!dev || b43_status(dev) != B43_STAT_INITIALIZED)
2014     return;
2015    
2016     - /* Unregister HW RNG driver */
2017     - b43_rng_exit(dev->wl);
2018     -
2019     b43_set_status(dev, B43_STAT_UNINIT);
2020    
2021     /* Stop the microcode PSM. */
2022     @@ -4795,9 +4797,6 @@ static int b43_wireless_core_init(struct b43_wldev *dev)
2023    
2024     b43_set_status(dev, B43_STAT_INITIALIZED);
2025    
2026     - /* Register HW RNG driver */
2027     - b43_rng_init(dev->wl);
2028     -
2029     out:
2030     return err;
2031    
2032     @@ -5464,6 +5463,9 @@ static void b43_bcma_remove(struct bcma_device *core)
2033    
2034     b43_one_core_detach(wldev->dev);
2035    
2036     + /* Unregister HW RNG driver */
2037     + b43_rng_exit(wl);
2038     +
2039     b43_leds_unregister(wl);
2040    
2041     ieee80211_free_hw(wl->hw);
2042     @@ -5541,6 +5543,9 @@ static void b43_ssb_remove(struct ssb_device *sdev)
2043    
2044     b43_one_core_detach(dev);
2045    
2046     + /* Unregister HW RNG driver */
2047     + b43_rng_exit(wl);
2048     +
2049     if (list_empty(&wl->devlist)) {
2050     b43_leds_unregister(wl);
2051     /* Last core on the chip unregistered.
2052     diff --git a/drivers/net/wireless/b43/xmit.c b/drivers/net/wireless/b43/xmit.c
2053     index 4ae63f4ddfb2..50e5ddb12fb3 100644
2054     --- a/drivers/net/wireless/b43/xmit.c
2055     +++ b/drivers/net/wireless/b43/xmit.c
2056     @@ -821,10 +821,10 @@ void b43_rx(struct b43_wldev *dev, struct sk_buff *skb, const void *_rxhdr)
2057     * channel number in b43. */
2058     if (chanstat & B43_RX_CHAN_5GHZ) {
2059     status.band = IEEE80211_BAND_5GHZ;
2060     - status.freq = b43_freq_to_channel_5ghz(chanid);
2061     + status.freq = b43_channel_to_freq_5ghz(chanid);
2062     } else {
2063     status.band = IEEE80211_BAND_2GHZ;
2064     - status.freq = b43_freq_to_channel_2ghz(chanid);
2065     + status.freq = b43_channel_to_freq_2ghz(chanid);
2066     }
2067     break;
2068     default:
2069     diff --git a/drivers/net/wireless/b43legacy/main.c b/drivers/net/wireless/b43legacy/main.c
2070     index 572668821862..349c77605231 100644
2071     --- a/drivers/net/wireless/b43legacy/main.c
2072     +++ b/drivers/net/wireless/b43legacy/main.c
2073     @@ -3919,6 +3919,7 @@ static void b43legacy_remove(struct ssb_device *dev)
2074     * as the ieee80211 unreg will destroy the workqueue. */
2075     cancel_work_sync(&wldev->restart_work);
2076     cancel_work_sync(&wl->firmware_load);
2077     + complete(&wldev->fw_load_complete);
2078    
2079     B43legacy_WARN_ON(!wl);
2080     if (!wldev->fw.ucode)
2081     diff --git a/drivers/net/wireless/iwlwifi/iwl-prph.h b/drivers/net/wireless/iwlwifi/iwl-prph.h
2082     index a70c7b9d9bad..07867c60bd63 100644
2083     --- a/drivers/net/wireless/iwlwifi/iwl-prph.h
2084     +++ b/drivers/net/wireless/iwlwifi/iwl-prph.h
2085     @@ -274,4 +274,8 @@ static inline unsigned int SCD_QUEUE_STATUS_BITS(unsigned int chnl)
2086    
2087     /*********************** END TX SCHEDULER *************************************/
2088    
2089     +/* Oscillator clock */
2090     +#define OSC_CLK (0xa04068)
2091     +#define OSC_CLK_FORCE_CONTROL (0x8)
2092     +
2093     #endif /* __iwl_prph_h__ */
2094     diff --git a/drivers/net/wireless/iwlwifi/mvm/ops.c b/drivers/net/wireless/iwlwifi/mvm/ops.c
2095     index d86083c6f445..bb5834200194 100644
2096     --- a/drivers/net/wireless/iwlwifi/mvm/ops.c
2097     +++ b/drivers/net/wireless/iwlwifi/mvm/ops.c
2098     @@ -470,6 +470,7 @@ iwl_op_mode_mvm_start(struct iwl_trans *trans, const struct iwl_cfg *cfg,
2099    
2100     out_unregister:
2101     ieee80211_unregister_hw(mvm->hw);
2102     + iwl_mvm_leds_exit(mvm);
2103     out_free:
2104     iwl_phy_db_free(mvm->phy_db);
2105     kfree(mvm->scan_cmd);
2106     diff --git a/drivers/net/wireless/iwlwifi/pcie/trans.c b/drivers/net/wireless/iwlwifi/pcie/trans.c
2107     index cde9c16f6e4f..f53ef83a6fd4 100644
2108     --- a/drivers/net/wireless/iwlwifi/pcie/trans.c
2109     +++ b/drivers/net/wireless/iwlwifi/pcie/trans.c
2110     @@ -206,6 +206,28 @@ static int iwl_pcie_apm_init(struct iwl_trans *trans)
2111     goto out;
2112     }
2113    
2114     + if (trans->cfg->host_interrupt_operation_mode) {
2115     + /*
2116     + * This is a bit of an abuse - This is needed for 7260 / 3160
2117     + * only check host_interrupt_operation_mode even if this is
2118     + * not related to host_interrupt_operation_mode.
2119     + *
2120     + * Enable the oscillator to count wake up time for L1 exit. This
2121     + * consumes slightly more power (100uA) - but allows to be sure
2122     + * that we wake up from L1 on time.
2123     + *
2124     + * This looks weird: read twice the same register, discard the
2125     + * value, set a bit, and yet again, read that same register
2126     + * just to discard the value. But that's the way the hardware
2127     + * seems to like it.
2128     + */
2129     + iwl_read_prph(trans, OSC_CLK);
2130     + iwl_read_prph(trans, OSC_CLK);
2131     + iwl_set_bits_prph(trans, OSC_CLK, OSC_CLK_FORCE_CONTROL);
2132     + iwl_read_prph(trans, OSC_CLK);
2133     + iwl_read_prph(trans, OSC_CLK);
2134     + }
2135     +
2136     /*
2137     * Enable DMA clock and wait for it to stabilize.
2138     *
2139     diff --git a/drivers/net/wireless/mwifiex/fw.h b/drivers/net/wireless/mwifiex/fw.h
2140     index c8385ec77a86..7099b0e8add7 100644
2141     --- a/drivers/net/wireless/mwifiex/fw.h
2142     +++ b/drivers/net/wireless/mwifiex/fw.h
2143     @@ -226,7 +226,7 @@ enum MWIFIEX_802_11_PRIVACY_FILTER {
2144    
2145     /* HW_SPEC fw_cap_info */
2146    
2147     -#define ISSUPP_11ACENABLED(fw_cap_info) (fw_cap_info & (BIT(13)|BIT(14)))
2148     +#define ISSUPP_11ACENABLED(fw_cap_info) (fw_cap_info & (BIT(12)|BIT(13)))
2149    
2150     #define GET_VHTCAP_CHWDSET(vht_cap_info) ((vht_cap_info >> 2) & 0x3)
2151     #define GET_VHTNSSMCS(mcs_mapset, nss) ((mcs_mapset >> (2 * (nss - 1))) & 0x3)
2152     diff --git a/drivers/net/wireless/mwifiex/scan.c b/drivers/net/wireless/mwifiex/scan.c
2153     index 8cf7d50a7603..ba48e64673d9 100644
2154     --- a/drivers/net/wireless/mwifiex/scan.c
2155     +++ b/drivers/net/wireless/mwifiex/scan.c
2156     @@ -1681,7 +1681,7 @@ int mwifiex_ret_802_11_scan(struct mwifiex_private *priv,
2157     const u8 *ie_buf;
2158     size_t ie_len;
2159     u16 channel = 0;
2160     - u64 fw_tsf = 0;
2161     + __le64 fw_tsf = 0;
2162     u16 beacon_size = 0;
2163     u32 curr_bcn_bytes;
2164     u32 freq;
2165     @@ -1815,7 +1815,7 @@ int mwifiex_ret_802_11_scan(struct mwifiex_private *priv,
2166     ie_buf, ie_len, rssi, GFP_KERNEL);
2167     bss_priv = (struct mwifiex_bss_priv *)bss->priv;
2168     bss_priv->band = band;
2169     - bss_priv->fw_tsf = fw_tsf;
2170     + bss_priv->fw_tsf = le64_to_cpu(fw_tsf);
2171     if (priv->media_connected &&
2172     !memcmp(bssid,
2173     priv->curr_bss_params.bss_descriptor
2174     diff --git a/drivers/net/wireless/rtlwifi/base.c b/drivers/net/wireless/rtlwifi/base.c
2175     index ff784072fb42..fcf9b621918c 100644
2176     --- a/drivers/net/wireless/rtlwifi/base.c
2177     +++ b/drivers/net/wireless/rtlwifi/base.c
2178     @@ -1437,7 +1437,8 @@ void rtl_watchdog_wq_callback(void *data)
2179     /* if we can't recv beacon for 6s, we should
2180     * reconnect this AP
2181     */
2182     - if (rtlpriv->link_info.roam_times >= 3) {
2183     + if ((rtlpriv->link_info.roam_times >= 3) &&
2184     + !is_zero_ether_addr(rtlpriv->mac80211.bssid)) {
2185     RT_TRACE(rtlpriv, COMP_ERR, DBG_EMERG,
2186     "AP off, try to reconnect now\n");
2187     rtlpriv->link_info.roam_times = 0;
2188     diff --git a/drivers/net/wireless/rtlwifi/core.c b/drivers/net/wireless/rtlwifi/core.c
2189     index 210ce7cd94d8..2d337a0c3df0 100644
2190     --- a/drivers/net/wireless/rtlwifi/core.c
2191     +++ b/drivers/net/wireless/rtlwifi/core.c
2192     @@ -46,10 +46,20 @@ void rtl_fw_cb(const struct firmware *firmware, void *context)
2193     "Firmware callback routine entered!\n");
2194     complete(&rtlpriv->firmware_loading_complete);
2195     if (!firmware) {
2196     + if (rtlpriv->cfg->alt_fw_name) {
2197     + err = request_firmware(&firmware,
2198     + rtlpriv->cfg->alt_fw_name,
2199     + rtlpriv->io.dev);
2200     + pr_info("Loading alternative firmware %s\n",
2201     + rtlpriv->cfg->alt_fw_name);
2202     + if (!err)
2203     + goto found_alt;
2204     + }
2205     pr_err("Firmware %s not available\n", rtlpriv->cfg->fw_name);
2206     rtlpriv->max_fw_size = 0;
2207     return;
2208     }
2209     +found_alt:
2210     if (firmware->size > rtlpriv->max_fw_size) {
2211     RT_TRACE(rtlpriv, COMP_ERR, DBG_EMERG,
2212     "Firmware is too big!\n");
2213     @@ -184,6 +194,7 @@ static int rtl_op_add_interface(struct ieee80211_hw *hw,
2214     rtlpriv->cfg->maps
2215     [RTL_IBSS_INT_MASKS]);
2216     }
2217     + mac->link_state = MAC80211_LINKED;
2218     break;
2219     case NL80211_IFTYPE_ADHOC:
2220     RT_TRACE(rtlpriv, COMP_MAC80211, DBG_LOUD,
2221     diff --git a/drivers/net/wireless/rtlwifi/rtl8188ee/dm.c b/drivers/net/wireless/rtlwifi/rtl8188ee/dm.c
2222     index 21a5cf060677..a6184b6e1d57 100644
2223     --- a/drivers/net/wireless/rtlwifi/rtl8188ee/dm.c
2224     +++ b/drivers/net/wireless/rtlwifi/rtl8188ee/dm.c
2225     @@ -1078,7 +1078,7 @@ static void rtl88e_dm_txpower_tracking_callback_thermalmeter(struct ieee80211_hw
2226     rtldm->swing_flag_ofdm = true;
2227     }
2228    
2229     - if (rtldm->swing_idx_cck != rtldm->swing_idx_cck) {
2230     + if (rtldm->swing_idx_cck_cur != rtldm->swing_idx_cck) {
2231     rtldm->swing_idx_cck_cur = rtldm->swing_idx_cck;
2232     rtldm->swing_flag_cck = true;
2233     }
2234     diff --git a/drivers/net/wireless/rtlwifi/rtl8192c/dm_common.c b/drivers/net/wireless/rtlwifi/rtl8192c/dm_common.c
2235     index e9caa5d4cff0..fd7e4a7c94de 100644
2236     --- a/drivers/net/wireless/rtlwifi/rtl8192c/dm_common.c
2237     +++ b/drivers/net/wireless/rtlwifi/rtl8192c/dm_common.c
2238     @@ -158,6 +158,42 @@ static const u8 cckswing_table_ch14[CCK_TABLE_SIZE][8] = {
2239     {0x09, 0x08, 0x07, 0x04, 0x00, 0x00, 0x00, 0x00}
2240     };
2241    
2242     +static u32 power_index_reg[6] = {0xc90, 0xc91, 0xc92, 0xc98, 0xc99, 0xc9a};
2243     +
2244     +void dm_restorepowerindex(struct ieee80211_hw *hw)
2245     +{
2246     + struct rtl_priv *rtlpriv = rtl_priv(hw);
2247     + u8 index;
2248     +
2249     + for (index = 0; index < 6; index++)
2250     + rtl_write_byte(rtlpriv, power_index_reg[index],
2251     + rtlpriv->dm.powerindex_backup[index]);
2252     +}
2253     +EXPORT_SYMBOL_GPL(dm_restorepowerindex);
2254     +
2255     +void dm_writepowerindex(struct ieee80211_hw *hw, u8 value)
2256     +{
2257     + struct rtl_priv *rtlpriv = rtl_priv(hw);
2258     + u8 index;
2259     +
2260     + for (index = 0; index < 6; index++)
2261     + rtl_write_byte(rtlpriv, power_index_reg[index], value);
2262     +}
2263     +EXPORT_SYMBOL_GPL(dm_writepowerindex);
2264     +
2265     +void dm_savepowerindex(struct ieee80211_hw *hw)
2266     +{
2267     + struct rtl_priv *rtlpriv = rtl_priv(hw);
2268     + u8 index;
2269     + u8 tmp;
2270     +
2271     + for (index = 0; index < 6; index++) {
2272     + tmp = rtl_read_byte(rtlpriv, power_index_reg[index]);
2273     + rtlpriv->dm.powerindex_backup[index] = tmp;
2274     + }
2275     +}
2276     +EXPORT_SYMBOL_GPL(dm_savepowerindex);
2277     +
2278     static void rtl92c_dm_diginit(struct ieee80211_hw *hw)
2279     {
2280     struct rtl_priv *rtlpriv = rtl_priv(hw);
2281     @@ -180,7 +216,12 @@ static void rtl92c_dm_diginit(struct ieee80211_hw *hw)
2282     dm_digtable->back_range_max = DM_DIG_BACKOFF_MAX;
2283     dm_digtable->back_range_min = DM_DIG_BACKOFF_MIN;
2284     dm_digtable->pre_cck_pd_state = CCK_PD_STAGE_MAX;
2285     - dm_digtable->cur_cck_pd_state = CCK_PD_STAGE_MAX;
2286     + dm_digtable->cur_cck_pd_state = CCK_PD_STAGE_LowRssi;
2287     +
2288     + dm_digtable->forbidden_igi = DM_DIG_MIN;
2289     + dm_digtable->large_fa_hit = 0;
2290     + dm_digtable->recover_cnt = 0;
2291     + dm_digtable->dig_dynamic_min = 0x25;
2292     }
2293    
2294     static u8 rtl92c_dm_initial_gain_min_pwdb(struct ieee80211_hw *hw)
2295     @@ -206,7 +247,9 @@ static u8 rtl92c_dm_initial_gain_min_pwdb(struct ieee80211_hw *hw)
2296     rssi_val_min = rtlpriv->dm.entry_min_undec_sm_pwdb;
2297     }
2298    
2299     - return (u8) rssi_val_min;
2300     + if (rssi_val_min > 100)
2301     + rssi_val_min = 100;
2302     + return (u8)rssi_val_min;
2303     }
2304    
2305     static void rtl92c_dm_false_alarm_counter_statistics(struct ieee80211_hw *hw)
2306     @@ -224,9 +267,17 @@ static void rtl92c_dm_false_alarm_counter_statistics(struct ieee80211_hw *hw)
2307    
2308     ret_value = rtl_get_bbreg(hw, ROFDM_PHYCOUNTER3, MASKDWORD);
2309     falsealm_cnt->cnt_mcs_fail = (ret_value & 0xffff);
2310     +
2311     + ret_value = rtl_get_bbreg(hw, ROFDM0_FRAMESYNC, MASKDWORD);
2312     + falsealm_cnt->cnt_fast_fsync_fail = (ret_value & 0xffff);
2313     + falsealm_cnt->cnt_sb_search_fail = ((ret_value & 0xffff0000) >> 16);
2314     +
2315     falsealm_cnt->cnt_ofdm_fail = falsealm_cnt->cnt_parity_fail +
2316     - falsealm_cnt->cnt_rate_illegal +
2317     - falsealm_cnt->cnt_crc8_fail + falsealm_cnt->cnt_mcs_fail;
2318     + falsealm_cnt->cnt_rate_illegal +
2319     + falsealm_cnt->cnt_crc8_fail +
2320     + falsealm_cnt->cnt_mcs_fail +
2321     + falsealm_cnt->cnt_fast_fsync_fail +
2322     + falsealm_cnt->cnt_sb_search_fail;
2323    
2324     rtl_set_bbreg(hw, RCCK0_FALSEALARMREPORT, BIT(14), 1);
2325     ret_value = rtl_get_bbreg(hw, RCCK0_FACOUNTERLOWER, MASKBYTE0);
2326     @@ -271,12 +322,14 @@ static void rtl92c_dm_ctrl_initgain_by_fa(struct ieee80211_hw *hw)
2327     value_igi++;
2328     else if (rtlpriv->falsealm_cnt.cnt_all >= DM_DIG_FA_TH2)
2329     value_igi += 2;
2330     +
2331     if (value_igi > DM_DIG_FA_UPPER)
2332     value_igi = DM_DIG_FA_UPPER;
2333     else if (value_igi < DM_DIG_FA_LOWER)
2334     value_igi = DM_DIG_FA_LOWER;
2335     +
2336     if (rtlpriv->falsealm_cnt.cnt_all > 10000)
2337     - value_igi = 0x32;
2338     + value_igi = DM_DIG_FA_UPPER;
2339    
2340     dm_digtable->cur_igvalue = value_igi;
2341     rtl92c_dm_write_dig(hw);
2342     @@ -286,32 +339,80 @@ static void rtl92c_dm_ctrl_initgain_by_rssi(struct ieee80211_hw *hw)
2343     {
2344     struct rtl_priv *rtlpriv = rtl_priv(hw);
2345     struct dig_t *digtable = &rtlpriv->dm_digtable;
2346     + u32 isbt;
2347     +
2348     + /* modify DIG lower bound, deal with abnorally large false alarm */
2349     + if (rtlpriv->falsealm_cnt.cnt_all > 10000) {
2350     + digtable->large_fa_hit++;
2351     + if (digtable->forbidden_igi < digtable->cur_igvalue) {
2352     + digtable->forbidden_igi = digtable->cur_igvalue;
2353     + digtable->large_fa_hit = 1;
2354     + }
2355    
2356     - if (rtlpriv->falsealm_cnt.cnt_all > digtable->fa_highthresh) {
2357     - if ((digtable->back_val - 2) < digtable->back_range_min)
2358     - digtable->back_val = digtable->back_range_min;
2359     - else
2360     - digtable->back_val -= 2;
2361     - } else if (rtlpriv->falsealm_cnt.cnt_all < digtable->fa_lowthresh) {
2362     - if ((digtable->back_val + 2) > digtable->back_range_max)
2363     - digtable->back_val = digtable->back_range_max;
2364     - else
2365     - digtable->back_val += 2;
2366     + if (digtable->large_fa_hit >= 3) {
2367     + if ((digtable->forbidden_igi + 1) >
2368     + digtable->rx_gain_max)
2369     + digtable->rx_gain_min = digtable->rx_gain_max;
2370     + else
2371     + digtable->rx_gain_min = (digtable->forbidden_igi + 1);
2372     + digtable->recover_cnt = 3600; /* 3600=2hr */
2373     + }
2374     + } else {
2375     + /* Recovery mechanism for IGI lower bound */
2376     + if (digtable->recover_cnt != 0) {
2377     + digtable->recover_cnt--;
2378     + } else {
2379     + if (digtable->large_fa_hit == 0) {
2380     + if ((digtable->forbidden_igi-1) < DM_DIG_MIN) {
2381     + digtable->forbidden_igi = DM_DIG_MIN;
2382     + digtable->rx_gain_min = DM_DIG_MIN;
2383     + } else {
2384     + digtable->forbidden_igi--;
2385     + digtable->rx_gain_min = digtable->forbidden_igi + 1;
2386     + }
2387     + } else if (digtable->large_fa_hit == 3) {
2388     + digtable->large_fa_hit = 0;
2389     + }
2390     + }
2391     + }
2392     + if (rtlpriv->falsealm_cnt.cnt_all < 250) {
2393     + isbt = rtl_read_byte(rtlpriv, 0x4fd) & 0x01;
2394     +
2395     + if (!isbt) {
2396     + if (rtlpriv->falsealm_cnt.cnt_all >
2397     + digtable->fa_lowthresh) {
2398     + if ((digtable->back_val - 2) <
2399     + digtable->back_range_min)
2400     + digtable->back_val = digtable->back_range_min;
2401     + else
2402     + digtable->back_val -= 2;
2403     + } else if (rtlpriv->falsealm_cnt.cnt_all <
2404     + digtable->fa_lowthresh) {
2405     + if ((digtable->back_val + 2) >
2406     + digtable->back_range_max)
2407     + digtable->back_val = digtable->back_range_max;
2408     + else
2409     + digtable->back_val += 2;
2410     + }
2411     + } else {
2412     + digtable->back_val = DM_DIG_BACKOFF_DEFAULT;
2413     + }
2414     + } else {
2415     + /* Adjust initial gain by false alarm */
2416     + if (rtlpriv->falsealm_cnt.cnt_all > 1000)
2417     + digtable->cur_igvalue = digtable->pre_igvalue + 2;
2418     + else if (rtlpriv->falsealm_cnt.cnt_all > 750)
2419     + digtable->cur_igvalue = digtable->pre_igvalue + 1;
2420     + else if (rtlpriv->falsealm_cnt.cnt_all < 500)
2421     + digtable->cur_igvalue = digtable->pre_igvalue - 1;
2422     }
2423    
2424     - if ((digtable->rssi_val_min + 10 - digtable->back_val) >
2425     - digtable->rx_gain_max)
2426     + /* Check initial gain by upper/lower bound */
2427     + if (digtable->cur_igvalue > digtable->rx_gain_max)
2428     digtable->cur_igvalue = digtable->rx_gain_max;
2429     - else if ((digtable->rssi_val_min + 10 -
2430     - digtable->back_val) < digtable->rx_gain_min)
2431     - digtable->cur_igvalue = digtable->rx_gain_min;
2432     - else
2433     - digtable->cur_igvalue = digtable->rssi_val_min + 10 -
2434     - digtable->back_val;
2435    
2436     - RT_TRACE(rtlpriv, COMP_DIG, DBG_TRACE,
2437     - "rssi_val_min = %x back_val %x\n",
2438     - digtable->rssi_val_min, digtable->back_val);
2439     + if (digtable->cur_igvalue < digtable->rx_gain_min)
2440     + digtable->cur_igvalue = digtable->rx_gain_min;
2441    
2442     rtl92c_dm_write_dig(hw);
2443     }
2444     @@ -329,7 +430,7 @@ static void rtl92c_dm_initial_gain_multi_sta(struct ieee80211_hw *hw)
2445     multi_sta = true;
2446    
2447     if (!multi_sta ||
2448     - dm_digtable->cursta_cstate != DIG_STA_DISCONNECT) {
2449     + dm_digtable->cursta_cstate == DIG_STA_DISCONNECT) {
2450     initialized = false;
2451     dm_digtable->dig_ext_port_stage = DIG_EXT_PORT_STAGE_MAX;
2452     return;
2453     @@ -375,7 +476,6 @@ static void rtl92c_dm_initial_gain_sta(struct ieee80211_hw *hw)
2454     RT_TRACE(rtlpriv, COMP_DIG, DBG_TRACE,
2455     "presta_cstate = %x, cursta_cstate = %x\n",
2456     dm_digtable->presta_cstate, dm_digtable->cursta_cstate);
2457     -
2458     if (dm_digtable->presta_cstate == dm_digtable->cursta_cstate ||
2459     dm_digtable->cursta_cstate == DIG_STA_BEFORE_CONNECT ||
2460     dm_digtable->cursta_cstate == DIG_STA_CONNECT) {
2461     @@ -383,6 +483,8 @@ static void rtl92c_dm_initial_gain_sta(struct ieee80211_hw *hw)
2462     if (dm_digtable->cursta_cstate != DIG_STA_DISCONNECT) {
2463     dm_digtable->rssi_val_min =
2464     rtl92c_dm_initial_gain_min_pwdb(hw);
2465     + if (dm_digtable->rssi_val_min > 100)
2466     + dm_digtable->rssi_val_min = 100;
2467     rtl92c_dm_ctrl_initgain_by_rssi(hw);
2468     }
2469     } else {
2470     @@ -398,11 +500,12 @@ static void rtl92c_dm_initial_gain_sta(struct ieee80211_hw *hw)
2471     static void rtl92c_dm_cck_packet_detection_thresh(struct ieee80211_hw *hw)
2472     {
2473     struct rtl_priv *rtlpriv = rtl_priv(hw);
2474     - struct rtl_hal *rtlhal = rtl_hal(rtl_priv(hw));
2475     struct dig_t *dm_digtable = &rtlpriv->dm_digtable;
2476    
2477     if (dm_digtable->cursta_cstate == DIG_STA_CONNECT) {
2478     dm_digtable->rssi_val_min = rtl92c_dm_initial_gain_min_pwdb(hw);
2479     + if (dm_digtable->rssi_val_min > 100)
2480     + dm_digtable->rssi_val_min = 100;
2481    
2482     if (dm_digtable->pre_cck_pd_state == CCK_PD_STAGE_LowRssi) {
2483     if (dm_digtable->rssi_val_min <= 25)
2484     @@ -424,48 +527,14 @@ static void rtl92c_dm_cck_packet_detection_thresh(struct ieee80211_hw *hw)
2485     }
2486    
2487     if (dm_digtable->pre_cck_pd_state != dm_digtable->cur_cck_pd_state) {
2488     - if (dm_digtable->cur_cck_pd_state == CCK_PD_STAGE_LowRssi) {
2489     - if (rtlpriv->falsealm_cnt.cnt_cck_fail > 800)
2490     - dm_digtable->cur_cck_fa_state =
2491     - CCK_FA_STAGE_High;
2492     - else
2493     - dm_digtable->cur_cck_fa_state = CCK_FA_STAGE_Low;
2494     -
2495     - if (dm_digtable->pre_cck_fa_state !=
2496     - dm_digtable->cur_cck_fa_state) {
2497     - if (dm_digtable->cur_cck_fa_state ==
2498     - CCK_FA_STAGE_Low)
2499     - rtl_set_bbreg(hw, RCCK0_CCA, MASKBYTE2,
2500     - 0x83);
2501     - else
2502     - rtl_set_bbreg(hw, RCCK0_CCA, MASKBYTE2,
2503     - 0xcd);
2504     -
2505     - dm_digtable->pre_cck_fa_state =
2506     - dm_digtable->cur_cck_fa_state;
2507     - }
2508     -
2509     - rtl_set_bbreg(hw, RCCK0_SYSTEM, MASKBYTE1, 0x40);
2510     -
2511     - if (IS_92C_SERIAL(rtlhal->version))
2512     - rtl_set_bbreg(hw, RCCK0_FALSEALARMREPORT,
2513     - MASKBYTE2, 0xd7);
2514     - } else {
2515     + if ((dm_digtable->cur_cck_pd_state == CCK_PD_STAGE_LowRssi) ||
2516     + (dm_digtable->cur_cck_pd_state == CCK_PD_STAGE_MAX))
2517     + rtl_set_bbreg(hw, RCCK0_CCA, MASKBYTE2, 0x83);
2518     + else
2519     rtl_set_bbreg(hw, RCCK0_CCA, MASKBYTE2, 0xcd);
2520     - rtl_set_bbreg(hw, RCCK0_SYSTEM, MASKBYTE1, 0x47);
2521    
2522     - if (IS_92C_SERIAL(rtlhal->version))
2523     - rtl_set_bbreg(hw, RCCK0_FALSEALARMREPORT,
2524     - MASKBYTE2, 0xd3);
2525     - }
2526     dm_digtable->pre_cck_pd_state = dm_digtable->cur_cck_pd_state;
2527     }
2528     -
2529     - RT_TRACE(rtlpriv, COMP_DIG, DBG_TRACE, "CCKPDStage=%x\n",
2530     - dm_digtable->cur_cck_pd_state);
2531     -
2532     - RT_TRACE(rtlpriv, COMP_DIG, DBG_TRACE, "is92C=%x\n",
2533     - IS_92C_SERIAL(rtlhal->version));
2534     }
2535    
2536     static void rtl92c_dm_ctrl_initgain_by_twoport(struct ieee80211_hw *hw)
2537     @@ -482,6 +551,8 @@ static void rtl92c_dm_ctrl_initgain_by_twoport(struct ieee80211_hw *hw)
2538     else
2539     dm_digtable->cursta_cstate = DIG_STA_DISCONNECT;
2540    
2541     + dm_digtable->curmultista_cstate = DIG_MULTISTA_DISCONNECT;
2542     +
2543     rtl92c_dm_initial_gain_sta(hw);
2544     rtl92c_dm_initial_gain_multi_sta(hw);
2545     rtl92c_dm_cck_packet_detection_thresh(hw);
2546     @@ -493,23 +564,26 @@ static void rtl92c_dm_ctrl_initgain_by_twoport(struct ieee80211_hw *hw)
2547     static void rtl92c_dm_dig(struct ieee80211_hw *hw)
2548     {
2549     struct rtl_priv *rtlpriv = rtl_priv(hw);
2550     - struct dig_t *dm_digtable = &rtlpriv->dm_digtable;
2551    
2552     if (rtlpriv->dm.dm_initialgain_enable == false)
2553     return;
2554     - if (dm_digtable->dig_enable_flag == false)
2555     + if (!rtlpriv->dm.dm_flag & DYNAMIC_FUNC_DIG)
2556     return;
2557    
2558     rtl92c_dm_ctrl_initgain_by_twoport(hw);
2559     -
2560     }
2561    
2562     static void rtl92c_dm_init_dynamic_txpower(struct ieee80211_hw *hw)
2563     {
2564     struct rtl_priv *rtlpriv = rtl_priv(hw);
2565    
2566     - rtlpriv->dm.dynamic_txpower_enable = false;
2567     -
2568     + if (rtlpriv->rtlhal.interface == INTF_USB &&
2569     + rtlpriv->rtlhal.board_type & 0x1) {
2570     + dm_savepowerindex(hw);
2571     + rtlpriv->dm.dynamic_txpower_enable = true;
2572     + } else {
2573     + rtlpriv->dm.dynamic_txpower_enable = false;
2574     + }
2575     rtlpriv->dm.last_dtp_lvl = TXHIGHPWRLEVEL_NORMAL;
2576     rtlpriv->dm.dynamic_txhighpower_lvl = TXHIGHPWRLEVEL_NORMAL;
2577     }
2578     @@ -524,9 +598,14 @@ void rtl92c_dm_write_dig(struct ieee80211_hw *hw)
2579     dm_digtable->cur_igvalue, dm_digtable->pre_igvalue,
2580     dm_digtable->back_val);
2581    
2582     - dm_digtable->cur_igvalue += 2;
2583     - if (dm_digtable->cur_igvalue > 0x3f)
2584     - dm_digtable->cur_igvalue = 0x3f;
2585     + if (rtlpriv->rtlhal.interface == INTF_USB &&
2586     + !dm_digtable->dig_enable_flag) {
2587     + dm_digtable->pre_igvalue = 0x17;
2588     + return;
2589     + }
2590     + dm_digtable->cur_igvalue -= 1;
2591     + if (dm_digtable->cur_igvalue < DM_DIG_MIN)
2592     + dm_digtable->cur_igvalue = DM_DIG_MIN;
2593    
2594     if (dm_digtable->pre_igvalue != dm_digtable->cur_igvalue) {
2595     rtl_set_bbreg(hw, ROFDM0_XAAGCCORE1, 0x7f,
2596     @@ -536,11 +615,47 @@ void rtl92c_dm_write_dig(struct ieee80211_hw *hw)
2597    
2598     dm_digtable->pre_igvalue = dm_digtable->cur_igvalue;
2599     }
2600     + RT_TRACE(rtlpriv, COMP_DIG, DBG_WARNING,
2601     + "dig values 0x%x 0x%x 0x%x 0x%x 0x%x 0x%x 0x%x 0x%x\n",
2602     + dm_digtable->cur_igvalue, dm_digtable->pre_igvalue,
2603     + dm_digtable->rssi_val_min, dm_digtable->back_val,
2604     + dm_digtable->rx_gain_max, dm_digtable->rx_gain_min,
2605     + dm_digtable->large_fa_hit, dm_digtable->forbidden_igi);
2606     }
2607     EXPORT_SYMBOL(rtl92c_dm_write_dig);
2608    
2609     static void rtl92c_dm_pwdb_monitor(struct ieee80211_hw *hw)
2610     {
2611     + struct rtl_priv *rtlpriv = rtl_priv(hw);
2612     + struct rtl_mac *mac = rtl_mac(rtl_priv(hw));
2613     + long tmpentry_max_pwdb = 0, tmpentry_min_pwdb = 0xff;
2614     +
2615     + if (mac->link_state != MAC80211_LINKED)
2616     + return;
2617     +
2618     + if (mac->opmode == NL80211_IFTYPE_ADHOC ||
2619     + mac->opmode == NL80211_IFTYPE_AP) {
2620     + /* TODO: Handle ADHOC and AP Mode */
2621     + }
2622     +
2623     + if (tmpentry_max_pwdb != 0)
2624     + rtlpriv->dm.entry_max_undec_sm_pwdb = tmpentry_max_pwdb;
2625     + else
2626     + rtlpriv->dm.entry_max_undec_sm_pwdb = 0;
2627     +
2628     + if (tmpentry_min_pwdb != 0xff)
2629     + rtlpriv->dm.entry_min_undec_sm_pwdb = tmpentry_min_pwdb;
2630     + else
2631     + rtlpriv->dm.entry_min_undec_sm_pwdb = 0;
2632     +
2633     +/* TODO:
2634     + * if (mac->opmode == NL80211_IFTYPE_STATION) {
2635     + * if (rtlpriv->rtlhal.fw_ready) {
2636     + * u32 param = (u32)(rtlpriv->dm.undec_sm_pwdb << 16);
2637     + * rtl8192c_set_rssi_cmd(hw, param);
2638     + * }
2639     + * }
2640     + */
2641     }
2642    
2643     void rtl92c_dm_init_edca_turbo(struct ieee80211_hw *hw)
2644     @@ -750,6 +865,7 @@ static void rtl92c_dm_txpower_tracking_callback_thermalmeter(struct ieee80211_hw
2645     rtlpriv->dm.ofdm_index[i] = ofdm_index_old[i];
2646     rtlpriv->dm.cck_index = cck_index_old;
2647     }
2648     + /* Handle USB High PA boards */
2649    
2650     delta = (thermalvalue > rtlpriv->dm.thermalvalue) ?
2651     (thermalvalue - rtlpriv->dm.thermalvalue) :
2652     @@ -1140,22 +1256,22 @@ void rtl92c_dm_rf_saving(struct ieee80211_hw *hw, u8 bforce_in_normal)
2653     {
2654     struct rtl_priv *rtlpriv = rtl_priv(hw);
2655     struct ps_t *dm_pstable = &rtlpriv->dm_pstable;
2656     - static u8 initialize;
2657     - static u32 reg_874, reg_c70, reg_85c, reg_a74;
2658    
2659     - if (initialize == 0) {
2660     - reg_874 = (rtl_get_bbreg(hw, RFPGA0_XCD_RFINTERFACESW,
2661     - MASKDWORD) & 0x1CC000) >> 14;
2662     + if (!rtlpriv->reg_init) {
2663     + rtlpriv->reg_874 = (rtl_get_bbreg(hw,
2664     + RFPGA0_XCD_RFINTERFACESW,
2665     + MASKDWORD) & 0x1CC000) >> 14;
2666    
2667     - reg_c70 = (rtl_get_bbreg(hw, ROFDM0_AGCPARAMETER1,
2668     - MASKDWORD) & BIT(3)) >> 3;
2669     + rtlpriv->reg_c70 = (rtl_get_bbreg(hw, ROFDM0_AGCPARAMETER1,
2670     + MASKDWORD) & BIT(3)) >> 3;
2671    
2672     - reg_85c = (rtl_get_bbreg(hw, RFPGA0_XCD_SWITCHCONTROL,
2673     - MASKDWORD) & 0xFF000000) >> 24;
2674     + rtlpriv->reg_85c = (rtl_get_bbreg(hw, RFPGA0_XCD_SWITCHCONTROL,
2675     + MASKDWORD) & 0xFF000000) >> 24;
2676    
2677     - reg_a74 = (rtl_get_bbreg(hw, 0xa74, MASKDWORD) & 0xF000) >> 12;
2678     + rtlpriv->reg_a74 = (rtl_get_bbreg(hw, 0xa74, MASKDWORD) &
2679     + 0xF000) >> 12;
2680    
2681     - initialize = 1;
2682     + rtlpriv->reg_init = true;
2683     }
2684    
2685     if (!bforce_in_normal) {
2686     @@ -1192,12 +1308,12 @@ void rtl92c_dm_rf_saving(struct ieee80211_hw *hw, u8 bforce_in_normal)
2687     rtl_set_bbreg(hw, 0x818, BIT(28), 0x1);
2688     } else {
2689     rtl_set_bbreg(hw, RFPGA0_XCD_RFINTERFACESW,
2690     - 0x1CC000, reg_874);
2691     + 0x1CC000, rtlpriv->reg_874);
2692     rtl_set_bbreg(hw, ROFDM0_AGCPARAMETER1, BIT(3),
2693     - reg_c70);
2694     + rtlpriv->reg_c70);
2695     rtl_set_bbreg(hw, RFPGA0_XCD_SWITCHCONTROL, 0xFF000000,
2696     - reg_85c);
2697     - rtl_set_bbreg(hw, 0xa74, 0xF000, reg_a74);
2698     + rtlpriv->reg_85c);
2699     + rtl_set_bbreg(hw, 0xa74, 0xF000, rtlpriv->reg_a74);
2700     rtl_set_bbreg(hw, 0x818, BIT(28), 0x0);
2701     }
2702    
2703     @@ -1213,6 +1329,7 @@ static void rtl92c_dm_dynamic_bb_powersaving(struct ieee80211_hw *hw)
2704     struct rtl_mac *mac = rtl_mac(rtl_priv(hw));
2705     struct rtl_hal *rtlhal = rtl_hal(rtl_priv(hw));
2706    
2707     + /* Determine the minimum RSSI */
2708     if (((mac->link_state == MAC80211_NOLINK)) &&
2709     (rtlpriv->dm.entry_min_undec_sm_pwdb == 0)) {
2710     dm_pstable->rssi_val_min = 0;
2711     @@ -1241,6 +1358,7 @@ static void rtl92c_dm_dynamic_bb_powersaving(struct ieee80211_hw *hw)
2712     dm_pstable->rssi_val_min);
2713     }
2714    
2715     + /* Power Saving for 92C */
2716     if (IS_92C_SERIAL(rtlhal->version))
2717     ;/* rtl92c_dm_1r_cca(hw); */
2718     else
2719     @@ -1252,12 +1370,23 @@ void rtl92c_dm_init(struct ieee80211_hw *hw)
2720     struct rtl_priv *rtlpriv = rtl_priv(hw);
2721    
2722     rtlpriv->dm.dm_type = DM_TYPE_BYDRIVER;
2723     + rtlpriv->dm.dm_flag = DYNAMIC_FUNC_DISABLE | DYNAMIC_FUNC_DIG;
2724     + rtlpriv->dm.undec_sm_pwdb = -1;
2725     + rtlpriv->dm.undec_sm_cck = -1;
2726     + rtlpriv->dm.dm_initialgain_enable = true;
2727     rtl92c_dm_diginit(hw);
2728     +
2729     + rtlpriv->dm.dm_flag |= HAL_DM_HIPWR_DISABLE;
2730     rtl92c_dm_init_dynamic_txpower(hw);
2731     +
2732     rtl92c_dm_init_edca_turbo(hw);
2733     rtl92c_dm_init_rate_adaptive_mask(hw);
2734     + rtlpriv->dm.dm_flag |= DYNAMIC_FUNC_SS;
2735     rtl92c_dm_initialize_txpower_tracking(hw);
2736     rtl92c_dm_init_dynamic_bb_powersaving(hw);
2737     +
2738     + rtlpriv->dm.ofdm_pkt_cnt = 0;
2739     + rtlpriv->dm.dm_rssi_sel = RSSI_DEFAULT;
2740     }
2741     EXPORT_SYMBOL(rtl92c_dm_init);
2742    
2743     @@ -1308,7 +1437,7 @@ void rtl92c_dm_dynamic_txpower(struct ieee80211_hw *hw)
2744     }
2745    
2746     if (undec_sm_pwdb >= TX_POWER_NEAR_FIELD_THRESH_LVL2) {
2747     - rtlpriv->dm.dynamic_txhighpower_lvl = TXHIGHPWRLEVEL_LEVEL1;
2748     + rtlpriv->dm.dynamic_txhighpower_lvl = TXHIGHPWRLEVEL_LEVEL2;
2749     RT_TRACE(rtlpriv, COMP_POWER, DBG_LOUD,
2750     "TXHIGHPWRLEVEL_LEVEL1 (TxPwr=0x0)\n");
2751     } else if ((undec_sm_pwdb < (TX_POWER_NEAR_FIELD_THRESH_LVL2 - 3)) &&
2752     @@ -1328,8 +1457,16 @@ void rtl92c_dm_dynamic_txpower(struct ieee80211_hw *hw)
2753     "PHY_SetTxPowerLevel8192S() Channel = %d\n",
2754     rtlphy->current_channel);
2755     rtl92c_phy_set_txpower_level(hw, rtlphy->current_channel);
2756     + if (rtlpriv->dm.dynamic_txhighpower_lvl ==
2757     + TXHIGHPWRLEVEL_NORMAL)
2758     + dm_restorepowerindex(hw);
2759     + else if (rtlpriv->dm.dynamic_txhighpower_lvl ==
2760     + TXHIGHPWRLEVEL_LEVEL1)
2761     + dm_writepowerindex(hw, 0x14);
2762     + else if (rtlpriv->dm.dynamic_txhighpower_lvl ==
2763     + TXHIGHPWRLEVEL_LEVEL2)
2764     + dm_writepowerindex(hw, 0x10);
2765     }
2766     -
2767     rtlpriv->dm.last_dtp_lvl = rtlpriv->dm.dynamic_txhighpower_lvl;
2768     }
2769    
2770     @@ -1400,12 +1537,6 @@ u8 rtl92c_bt_rssi_state_change(struct ieee80211_hw *hw)
2771     else
2772     curr_bt_rssi_state &= (~BT_RSSI_STATE_SPECIAL_LOW);
2773    
2774     - /* Set Tx Power according to BT status. */
2775     - if (undec_sm_pwdb >= 30)
2776     - curr_bt_rssi_state |= BT_RSSI_STATE_TXPOWER_LOW;
2777     - else if (undec_sm_pwdb < 25)
2778     - curr_bt_rssi_state &= (~BT_RSSI_STATE_TXPOWER_LOW);
2779     -
2780     /* Check BT state related to BT_Idle in B/G mode. */
2781     if (undec_sm_pwdb < 15)
2782     curr_bt_rssi_state |= BT_RSSI_STATE_BG_EDCA_LOW;
2783     diff --git a/drivers/net/wireless/rtlwifi/rtl8192c/dm_common.h b/drivers/net/wireless/rtlwifi/rtl8192c/dm_common.h
2784     index 518e208c0180..4f232a063636 100644
2785     --- a/drivers/net/wireless/rtlwifi/rtl8192c/dm_common.h
2786     +++ b/drivers/net/wireless/rtlwifi/rtl8192c/dm_common.h
2787     @@ -91,6 +91,17 @@
2788     #define TX_POWER_NEAR_FIELD_THRESH_LVL2 74
2789     #define TX_POWER_NEAR_FIELD_THRESH_LVL1 67
2790    
2791     +#define DYNAMIC_FUNC_DISABLE 0x0
2792     +#define DYNAMIC_FUNC_DIG BIT(0)
2793     +#define DYNAMIC_FUNC_HP BIT(1)
2794     +#define DYNAMIC_FUNC_SS BIT(2) /*Tx Power Tracking*/
2795     +#define DYNAMIC_FUNC_BT BIT(3)
2796     +#define DYNAMIC_FUNC_ANT_DIV BIT(4)
2797     +
2798     +#define RSSI_CCK 0
2799     +#define RSSI_OFDM 1
2800     +#define RSSI_DEFAULT 2
2801     +
2802     struct swat_t {
2803     u8 failure_cnt;
2804     u8 try_flag;
2805     @@ -167,5 +178,8 @@ void rtl92c_phy_lc_calibrate(struct ieee80211_hw *hw);
2806     void rtl92c_phy_iq_calibrate(struct ieee80211_hw *hw, bool recovery);
2807     void rtl92c_dm_dynamic_txpower(struct ieee80211_hw *hw);
2808     void rtl92c_dm_bt_coexist(struct ieee80211_hw *hw);
2809     +void dm_savepowerindex(struct ieee80211_hw *hw);
2810     +void dm_writepowerindex(struct ieee80211_hw *hw, u8 value);
2811     +void dm_restorepowerindex(struct ieee80211_hw *hw);
2812    
2813     #endif
2814     diff --git a/drivers/net/wireless/rtlwifi/rtl8192cu/dm.c b/drivers/net/wireless/rtlwifi/rtl8192cu/dm.c
2815     index 16a0b9e59acf..c16209a336ea 100644
2816     --- a/drivers/net/wireless/rtlwifi/rtl8192cu/dm.c
2817     +++ b/drivers/net/wireless/rtlwifi/rtl8192cu/dm.c
2818     @@ -101,6 +101,15 @@ void rtl92cu_dm_dynamic_txpower(struct ieee80211_hw *hw)
2819     "PHY_SetTxPowerLevel8192S() Channel = %d\n",
2820     rtlphy->current_channel);
2821     rtl92c_phy_set_txpower_level(hw, rtlphy->current_channel);
2822     + if (rtlpriv->dm.dynamic_txhighpower_lvl ==
2823     + TXHIGHPWRLEVEL_NORMAL)
2824     + dm_restorepowerindex(hw);
2825     + else if (rtlpriv->dm.dynamic_txhighpower_lvl ==
2826     + TXHIGHPWRLEVEL_LEVEL1)
2827     + dm_writepowerindex(hw, 0x14);
2828     + else if (rtlpriv->dm.dynamic_txhighpower_lvl ==
2829     + TXHIGHPWRLEVEL_LEVEL2)
2830     + dm_writepowerindex(hw, 0x10);
2831     }
2832    
2833     rtlpriv->dm.last_dtp_lvl = rtlpriv->dm.dynamic_txhighpower_lvl;
2834     diff --git a/drivers/net/wireless/rtlwifi/rtl8192cu/dm.h b/drivers/net/wireless/rtlwifi/rtl8192cu/dm.h
2835     index d947e7d350bb..fafa6bac2a3f 100644
2836     --- a/drivers/net/wireless/rtlwifi/rtl8192cu/dm.h
2837     +++ b/drivers/net/wireless/rtlwifi/rtl8192cu/dm.h
2838     @@ -30,3 +30,6 @@
2839     #include "../rtl8192ce/dm.h"
2840    
2841     void rtl92cu_dm_dynamic_txpower(struct ieee80211_hw *hw);
2842     +void dm_savepowerindex(struct ieee80211_hw *hw);
2843     +void dm_writepowerindex(struct ieee80211_hw *hw, u8 value);
2844     +void dm_restorepowerindex(struct ieee80211_hw *hw);
2845     diff --git a/drivers/net/wireless/rtlwifi/rtl8192cu/rf.c b/drivers/net/wireless/rtlwifi/rtl8192cu/rf.c
2846     index 2119313a737b..b878d56d2f4d 100644
2847     --- a/drivers/net/wireless/rtlwifi/rtl8192cu/rf.c
2848     +++ b/drivers/net/wireless/rtlwifi/rtl8192cu/rf.c
2849     @@ -85,17 +85,15 @@ void rtl92cu_phy_rf6052_set_cck_txpower(struct ieee80211_hw *hw,
2850     if (mac->act_scanning) {
2851     tx_agc[RF90_PATH_A] = 0x3f3f3f3f;
2852     tx_agc[RF90_PATH_B] = 0x3f3f3f3f;
2853     - if (turbo_scanoff) {
2854     - for (idx1 = RF90_PATH_A; idx1 <= RF90_PATH_B; idx1++) {
2855     - tx_agc[idx1] = ppowerlevel[idx1] |
2856     - (ppowerlevel[idx1] << 8) |
2857     - (ppowerlevel[idx1] << 16) |
2858     - (ppowerlevel[idx1] << 24);
2859     - if (rtlhal->interface == INTF_USB) {
2860     - if (tx_agc[idx1] > 0x20 &&
2861     - rtlefuse->external_pa)
2862     - tx_agc[idx1] = 0x20;
2863     - }
2864     + for (idx1 = RF90_PATH_A; idx1 <= RF90_PATH_B; idx1++) {
2865     + tx_agc[idx1] = ppowerlevel[idx1] |
2866     + (ppowerlevel[idx1] << 8) |
2867     + (ppowerlevel[idx1] << 16) |
2868     + (ppowerlevel[idx1] << 24);
2869     + if (rtlhal->interface == INTF_USB) {
2870     + if (tx_agc[idx1] > 0x20 &&
2871     + rtlefuse->external_pa)
2872     + tx_agc[idx1] = 0x20;
2873     }
2874     }
2875     } else {
2876     @@ -107,7 +105,7 @@ void rtl92cu_phy_rf6052_set_cck_txpower(struct ieee80211_hw *hw,
2877     TXHIGHPWRLEVEL_LEVEL2) {
2878     tx_agc[RF90_PATH_A] = 0x00000000;
2879     tx_agc[RF90_PATH_B] = 0x00000000;
2880     - } else{
2881     + } else {
2882     for (idx1 = RF90_PATH_A; idx1 <= RF90_PATH_B; idx1++) {
2883     tx_agc[idx1] = ppowerlevel[idx1] |
2884     (ppowerlevel[idx1] << 8) |
2885     @@ -373,7 +371,12 @@ static void _rtl92c_write_ofdm_power_reg(struct ieee80211_hw *hw,
2886     regoffset == RTXAGC_B_MCS07_MCS04)
2887     regoffset = 0xc98;
2888     for (i = 0; i < 3; i++) {
2889     - writeVal = (writeVal > 6) ? (writeVal - 6) : 0;
2890     + if (i != 2)
2891     + writeVal = (writeVal > 8) ?
2892     + (writeVal - 8) : 0;
2893     + else
2894     + writeVal = (writeVal > 6) ?
2895     + (writeVal - 6) : 0;
2896     rtl_write_byte(rtlpriv, (u32)(regoffset + i),
2897     (u8)writeVal);
2898     }
2899     diff --git a/drivers/net/wireless/rtlwifi/rtl8192cu/sw.c b/drivers/net/wireless/rtlwifi/rtl8192cu/sw.c
2900     index 9936de716ad5..c61311084d7e 100644
2901     --- a/drivers/net/wireless/rtlwifi/rtl8192cu/sw.c
2902     +++ b/drivers/net/wireless/rtlwifi/rtl8192cu/sw.c
2903     @@ -50,6 +50,9 @@ MODULE_AUTHOR("Larry Finger <Larry.Finger@lwfinger.net>");
2904     MODULE_LICENSE("GPL");
2905     MODULE_DESCRIPTION("Realtek 8192C/8188C 802.11n USB wireless");
2906     MODULE_FIRMWARE("rtlwifi/rtl8192cufw.bin");
2907     +MODULE_FIRMWARE("rtlwifi/rtl8192cufw_A.bin");
2908     +MODULE_FIRMWARE("rtlwifi/rtl8192cufw_B.bin");
2909     +MODULE_FIRMWARE("rtlwifi/rtl8192cufw_TMSC.bin");
2910    
2911     static int rtl92cu_init_sw_vars(struct ieee80211_hw *hw)
2912     {
2913     @@ -69,14 +72,21 @@ static int rtl92cu_init_sw_vars(struct ieee80211_hw *hw)
2914     "Can't alloc buffer for fw\n");
2915     return 1;
2916     }
2917     -
2918     + if (IS_VENDOR_UMC_A_CUT(rtlpriv->rtlhal.version) &&
2919     + !IS_92C_SERIAL(rtlpriv->rtlhal.version)) {
2920     + rtlpriv->cfg->fw_name = "rtlwifi/rtl8192cufw_A.bin";
2921     + } else if (IS_81xxC_VENDOR_UMC_B_CUT(rtlpriv->rtlhal.version)) {
2922     + rtlpriv->cfg->fw_name = "rtlwifi/rtl8192cufw_B.bin";
2923     + } else {
2924     + rtlpriv->cfg->fw_name = "rtlwifi/rtl8192cufw_TMSC.bin";
2925     + }
2926     + /* provide name of alternative file */
2927     + rtlpriv->cfg->alt_fw_name = "rtlwifi/rtl8192cufw.bin";
2928     pr_info("Loading firmware %s\n", rtlpriv->cfg->fw_name);
2929     rtlpriv->max_fw_size = 0x4000;
2930     err = request_firmware_nowait(THIS_MODULE, 1,
2931     rtlpriv->cfg->fw_name, rtlpriv->io.dev,
2932     GFP_KERNEL, hw, rtl_fw_cb);
2933     -
2934     -
2935     return err;
2936     }
2937    
2938     @@ -307,6 +317,7 @@ static struct usb_device_id rtl8192c_usb_ids[] = {
2939     {RTL_USB_DEVICE(0x0bda, 0x5088, rtl92cu_hal_cfg)}, /*Thinkware-CC&C*/
2940     {RTL_USB_DEVICE(0x0df6, 0x0052, rtl92cu_hal_cfg)}, /*Sitecom - Edimax*/
2941     {RTL_USB_DEVICE(0x0df6, 0x005c, rtl92cu_hal_cfg)}, /*Sitecom - Edimax*/
2942     + {RTL_USB_DEVICE(0x0df6, 0x0077, rtl92cu_hal_cfg)}, /*Sitecom-WLA2100V2*/
2943     {RTL_USB_DEVICE(0x0eb0, 0x9071, rtl92cu_hal_cfg)}, /*NO Brand - Etop*/
2944     {RTL_USB_DEVICE(0x4856, 0x0091, rtl92cu_hal_cfg)}, /*NetweeN - Feixun*/
2945     /* HP - Lite-On ,8188CUS Slim Combo */
2946     diff --git a/drivers/net/wireless/rtlwifi/stats.c b/drivers/net/wireless/rtlwifi/stats.c
2947     index 8ed31744a054..4f083fc1d360 100644
2948     --- a/drivers/net/wireless/rtlwifi/stats.c
2949     +++ b/drivers/net/wireless/rtlwifi/stats.c
2950     @@ -176,6 +176,7 @@ static void rtl_process_pwdb(struct ieee80211_hw *hw, struct rtl_stats *pstatus)
2951     struct rtl_sta_info *drv_priv = NULL;
2952     struct ieee80211_sta *sta = NULL;
2953     long undec_sm_pwdb;
2954     + long undec_sm_cck;
2955    
2956     rcu_read_lock();
2957     if (rtlpriv->mac80211.opmode != NL80211_IFTYPE_STATION)
2958     @@ -185,12 +186,16 @@ static void rtl_process_pwdb(struct ieee80211_hw *hw, struct rtl_stats *pstatus)
2959     if (sta) {
2960     drv_priv = (struct rtl_sta_info *) sta->drv_priv;
2961     undec_sm_pwdb = drv_priv->rssi_stat.undec_sm_pwdb;
2962     + undec_sm_cck = drv_priv->rssi_stat.undec_sm_cck;
2963     } else {
2964     undec_sm_pwdb = rtlpriv->dm.undec_sm_pwdb;
2965     + undec_sm_cck = rtlpriv->dm.undec_sm_cck;
2966     }
2967    
2968     if (undec_sm_pwdb < 0)
2969     undec_sm_pwdb = pstatus->rx_pwdb_all;
2970     + if (undec_sm_cck < 0)
2971     + undec_sm_cck = pstatus->rx_pwdb_all;
2972     if (pstatus->rx_pwdb_all > (u32) undec_sm_pwdb) {
2973     undec_sm_pwdb = (((undec_sm_pwdb) *
2974     (RX_SMOOTH_FACTOR - 1)) +
2975     @@ -200,6 +205,15 @@ static void rtl_process_pwdb(struct ieee80211_hw *hw, struct rtl_stats *pstatus)
2976     undec_sm_pwdb = (((undec_sm_pwdb) * (RX_SMOOTH_FACTOR - 1)) +
2977     (pstatus->rx_pwdb_all)) / (RX_SMOOTH_FACTOR);
2978     }
2979     + if (pstatus->rx_pwdb_all > (u32) undec_sm_cck) {
2980     + undec_sm_cck = (((undec_sm_pwdb) *
2981     + (RX_SMOOTH_FACTOR - 1)) +
2982     + (pstatus->rx_pwdb_all)) / (RX_SMOOTH_FACTOR);
2983     + undec_sm_cck = undec_sm_cck + 1;
2984     + } else {
2985     + undec_sm_pwdb = (((undec_sm_cck) * (RX_SMOOTH_FACTOR - 1)) +
2986     + (pstatus->rx_pwdb_all)) / (RX_SMOOTH_FACTOR);
2987     + }
2988    
2989     if (sta) {
2990     drv_priv->rssi_stat.undec_sm_pwdb = undec_sm_pwdb;
2991     diff --git a/drivers/net/wireless/rtlwifi/usb.c b/drivers/net/wireless/rtlwifi/usb.c
2992     index 6e2b5c5c83c8..2d56d90c5c53 100644
2993     --- a/drivers/net/wireless/rtlwifi/usb.c
2994     +++ b/drivers/net/wireless/rtlwifi/usb.c
2995     @@ -483,6 +483,8 @@ static void _rtl_usb_rx_process_agg(struct ieee80211_hw *hw,
2996     if (unicast)
2997     rtlpriv->link_info.num_rx_inperiod++;
2998     }
2999     + /* static bcn for roaming */
3000     + rtl_beacon_statistic(hw, skb);
3001     }
3002     }
3003    
3004     @@ -553,7 +555,7 @@ static void _rtl_rx_pre_process(struct ieee80211_hw *hw, struct sk_buff *skb)
3005     }
3006     }
3007    
3008     -#define __RX_SKB_MAX_QUEUED 32
3009     +#define __RX_SKB_MAX_QUEUED 64
3010    
3011     static void _rtl_rx_work(unsigned long param)
3012     {
3013     diff --git a/drivers/net/wireless/rtlwifi/wifi.h b/drivers/net/wireless/rtlwifi/wifi.h
3014     index 0c65386fa30d..8c647391bedf 100644
3015     --- a/drivers/net/wireless/rtlwifi/wifi.h
3016     +++ b/drivers/net/wireless/rtlwifi/wifi.h
3017     @@ -1033,6 +1033,7 @@ struct rtl_ht_agg {
3018    
3019     struct rssi_sta {
3020     long undec_sm_pwdb;
3021     + long undec_sm_cck;
3022     };
3023    
3024     struct rtl_tid_data {
3025     @@ -1323,8 +1324,10 @@ struct fast_ant_training {
3026     struct rtl_dm {
3027     /*PHY status for Dynamic Management */
3028     long entry_min_undec_sm_pwdb;
3029     + long undec_sm_cck;
3030     long undec_sm_pwdb; /*out dm */
3031     long entry_max_undec_sm_pwdb;
3032     + s32 ofdm_pkt_cnt;
3033     bool dm_initialgain_enable;
3034     bool dynamic_txpower_enable;
3035     bool current_turbo_edca;
3036     @@ -1339,6 +1342,7 @@ struct rtl_dm {
3037     bool inform_fw_driverctrldm;
3038     bool current_mrc_switch;
3039     u8 txpowercount;
3040     + u8 powerindex_backup[6];
3041    
3042     u8 thermalvalue_rxgain;
3043     u8 thermalvalue_iqk;
3044     @@ -1350,7 +1354,9 @@ struct rtl_dm {
3045     bool done_txpower;
3046     u8 dynamic_txhighpower_lvl; /*Tx high power level */
3047     u8 dm_flag; /*Indicate each dynamic mechanism's status. */
3048     + u8 dm_flag_tmp;
3049     u8 dm_type;
3050     + u8 dm_rssi_sel;
3051     u8 txpower_track_control;
3052     bool interrupt_migration;
3053     bool disable_tx_int;
3054     @@ -1804,6 +1810,7 @@ struct rtl_hal_cfg {
3055     bool write_readback;
3056     char *name;
3057     char *fw_name;
3058     + char *alt_fw_name;
3059     struct rtl_hal_ops *ops;
3060     struct rtl_mod_params *mod_params;
3061     struct rtl_hal_usbint_cfg *usb_interface_cfg;
3062     @@ -1948,6 +1955,7 @@ struct dig_t {
3063     u8 pre_ccastate;
3064     u8 cur_ccasate;
3065     u8 large_fa_hit;
3066     + u8 dig_dynamic_min;
3067     u8 forbidden_igi;
3068     u8 dig_state;
3069     u8 dig_highpwrstate;
3070     @@ -2028,22 +2036,15 @@ struct rtl_priv {
3071     struct dig_t dm_digtable;
3072     struct ps_t dm_pstable;
3073    
3074     - /* section shared by individual drivers */
3075     - union {
3076     - struct { /* data buffer pointer for USB reads */
3077     - __le32 *usb_data;
3078     - int usb_data_index;
3079     - bool initialized;
3080     - };
3081     - struct { /* section for 8723ae */
3082     - bool reg_init; /* true if regs saved */
3083     - u32 reg_874;
3084     - u32 reg_c70;
3085     - u32 reg_85c;
3086     - u32 reg_a74;
3087     - bool bt_operation_on;
3088     - };
3089     - };
3090     + u32 reg_874;
3091     + u32 reg_c70;
3092     + u32 reg_85c;
3093     + u32 reg_a74;
3094     + bool reg_init; /* true if regs saved */
3095     + bool bt_operation_on;
3096     + __le32 *usb_data;
3097     + int usb_data_index;
3098     + bool initialized;
3099     bool enter_ps; /* true when entering PS */
3100     u8 rate_mask[5];
3101    
3102     diff --git a/drivers/net/xen-netfront.c b/drivers/net/xen-netfront.c
3103     index e59acb1daa23..657f7c588d17 100644
3104     --- a/drivers/net/xen-netfront.c
3105     +++ b/drivers/net/xen-netfront.c
3106     @@ -117,6 +117,7 @@ struct netfront_info {
3107     } tx_skbs[NET_TX_RING_SIZE];
3108     grant_ref_t gref_tx_head;
3109     grant_ref_t grant_tx_ref[NET_TX_RING_SIZE];
3110     + struct page *grant_tx_page[NET_TX_RING_SIZE];
3111     unsigned tx_skb_freelist;
3112    
3113     spinlock_t rx_lock ____cacheline_aligned_in_smp;
3114     @@ -396,6 +397,7 @@ static void xennet_tx_buf_gc(struct net_device *dev)
3115     gnttab_release_grant_reference(
3116     &np->gref_tx_head, np->grant_tx_ref[id]);
3117     np->grant_tx_ref[id] = GRANT_INVALID_REF;
3118     + np->grant_tx_page[id] = NULL;
3119     add_id_to_freelist(&np->tx_skb_freelist, np->tx_skbs, id);
3120     dev_kfree_skb_irq(skb);
3121     }
3122     @@ -452,6 +454,7 @@ static void xennet_make_frags(struct sk_buff *skb, struct net_device *dev,
3123     gnttab_grant_foreign_access_ref(ref, np->xbdev->otherend_id,
3124     mfn, GNTMAP_readonly);
3125    
3126     + np->grant_tx_page[id] = virt_to_page(data);
3127     tx->gref = np->grant_tx_ref[id] = ref;
3128     tx->offset = offset;
3129     tx->size = len;
3130     @@ -497,6 +500,7 @@ static void xennet_make_frags(struct sk_buff *skb, struct net_device *dev,
3131     np->xbdev->otherend_id,
3132     mfn, GNTMAP_readonly);
3133    
3134     + np->grant_tx_page[id] = page;
3135     tx->gref = np->grant_tx_ref[id] = ref;
3136     tx->offset = offset;
3137     tx->size = bytes;
3138     @@ -596,6 +600,7 @@ static int xennet_start_xmit(struct sk_buff *skb, struct net_device *dev)
3139     mfn = virt_to_mfn(data);
3140     gnttab_grant_foreign_access_ref(
3141     ref, np->xbdev->otherend_id, mfn, GNTMAP_readonly);
3142     + np->grant_tx_page[id] = virt_to_page(data);
3143     tx->gref = np->grant_tx_ref[id] = ref;
3144     tx->offset = offset;
3145     tx->size = len;
3146     @@ -1122,10 +1127,11 @@ static void xennet_release_tx_bufs(struct netfront_info *np)
3147     continue;
3148    
3149     skb = np->tx_skbs[i].skb;
3150     - gnttab_end_foreign_access_ref(np->grant_tx_ref[i],
3151     - GNTMAP_readonly);
3152     - gnttab_release_grant_reference(&np->gref_tx_head,
3153     - np->grant_tx_ref[i]);
3154     + get_page(np->grant_tx_page[i]);
3155     + gnttab_end_foreign_access(np->grant_tx_ref[i],
3156     + GNTMAP_readonly,
3157     + (unsigned long)page_address(np->grant_tx_page[i]));
3158     + np->grant_tx_page[i] = NULL;
3159     np->grant_tx_ref[i] = GRANT_INVALID_REF;
3160     add_id_to_freelist(&np->tx_skb_freelist, np->tx_skbs, i);
3161     dev_kfree_skb_irq(skb);
3162     @@ -1134,78 +1140,35 @@ static void xennet_release_tx_bufs(struct netfront_info *np)
3163    
3164     static void xennet_release_rx_bufs(struct netfront_info *np)
3165     {
3166     - struct mmu_update *mmu = np->rx_mmu;
3167     - struct multicall_entry *mcl = np->rx_mcl;
3168     - struct sk_buff_head free_list;
3169     - struct sk_buff *skb;
3170     - unsigned long mfn;
3171     - int xfer = 0, noxfer = 0, unused = 0;
3172     int id, ref;
3173    
3174     - dev_warn(&np->netdev->dev, "%s: fix me for copying receiver.\n",
3175     - __func__);
3176     - return;
3177     -
3178     - skb_queue_head_init(&free_list);
3179     -
3180     spin_lock_bh(&np->rx_lock);
3181    
3182     for (id = 0; id < NET_RX_RING_SIZE; id++) {
3183     - ref = np->grant_rx_ref[id];
3184     - if (ref == GRANT_INVALID_REF) {
3185     - unused++;
3186     - continue;
3187     - }
3188     + struct sk_buff *skb;
3189     + struct page *page;
3190    
3191     skb = np->rx_skbs[id];
3192     - mfn = gnttab_end_foreign_transfer_ref(ref);
3193     - gnttab_release_grant_reference(&np->gref_rx_head, ref);
3194     - np->grant_rx_ref[id] = GRANT_INVALID_REF;
3195     -
3196     - if (0 == mfn) {
3197     - skb_shinfo(skb)->nr_frags = 0;
3198     - dev_kfree_skb(skb);
3199     - noxfer++;
3200     + if (!skb)
3201     continue;
3202     - }
3203    
3204     - if (!xen_feature(XENFEAT_auto_translated_physmap)) {
3205     - /* Remap the page. */
3206     - const struct page *page =
3207     - skb_frag_page(&skb_shinfo(skb)->frags[0]);
3208     - unsigned long pfn = page_to_pfn(page);
3209     - void *vaddr = page_address(page);
3210     + ref = np->grant_rx_ref[id];
3211     + if (ref == GRANT_INVALID_REF)
3212     + continue;
3213    
3214     - MULTI_update_va_mapping(mcl, (unsigned long)vaddr,
3215     - mfn_pte(mfn, PAGE_KERNEL),
3216     - 0);
3217     - mcl++;
3218     - mmu->ptr = ((u64)mfn << PAGE_SHIFT)
3219     - | MMU_MACHPHYS_UPDATE;
3220     - mmu->val = pfn;
3221     - mmu++;
3222     + page = skb_frag_page(&skb_shinfo(skb)->frags[0]);
3223    
3224     - set_phys_to_machine(pfn, mfn);
3225     - }
3226     - __skb_queue_tail(&free_list, skb);
3227     - xfer++;
3228     - }
3229     -
3230     - dev_info(&np->netdev->dev, "%s: %d xfer, %d noxfer, %d unused\n",
3231     - __func__, xfer, noxfer, unused);
3232     + /* gnttab_end_foreign_access() needs a page ref until
3233     + * foreign access is ended (which may be deferred).
3234     + */
3235     + get_page(page);
3236     + gnttab_end_foreign_access(ref, 0,
3237     + (unsigned long)page_address(page));
3238     + np->grant_rx_ref[id] = GRANT_INVALID_REF;
3239    
3240     - if (xfer) {
3241     - if (!xen_feature(XENFEAT_auto_translated_physmap)) {
3242     - /* Do all the remapping work and M2P updates. */
3243     - MULTI_mmu_update(mcl, np->rx_mmu, mmu - np->rx_mmu,
3244     - NULL, DOMID_SELF);
3245     - mcl++;
3246     - HYPERVISOR_multicall(np->rx_mcl, mcl - np->rx_mcl);
3247     - }
3248     + kfree_skb(skb);
3249     }
3250    
3251     - __skb_queue_purge(&free_list);
3252     -
3253     spin_unlock_bh(&np->rx_lock);
3254     }
3255    
3256     @@ -1358,6 +1321,7 @@ static struct net_device *xennet_create_dev(struct xenbus_device *dev)
3257     for (i = 0; i < NET_RX_RING_SIZE; i++) {
3258     np->rx_skbs[i] = NULL;
3259     np->grant_rx_ref[i] = GRANT_INVALID_REF;
3260     + np->grant_tx_page[i] = NULL;
3261     }
3262    
3263     /* A grant for every tx ring slot */
3264     diff --git a/drivers/parport/parport_pc.c b/drivers/parport/parport_pc.c
3265     index 963761526229..bb665478cc4b 100644
3266     --- a/drivers/parport/parport_pc.c
3267     +++ b/drivers/parport/parport_pc.c
3268     @@ -2600,8 +2600,6 @@ enum parport_pc_pci_cards {
3269     syba_2p_epp,
3270     syba_1p_ecp,
3271     titan_010l,
3272     - titan_1284p1,
3273     - titan_1284p2,
3274     avlab_1p,
3275     avlab_2p,
3276     oxsemi_952,
3277     @@ -2660,8 +2658,6 @@ static struct parport_pc_pci {
3278     /* syba_2p_epp AP138B */ { 2, { { 0, 0x078 }, { 0, 0x178 }, } },
3279     /* syba_1p_ecp W83787 */ { 1, { { 0, 0x078 }, } },
3280     /* titan_010l */ { 1, { { 3, -1 }, } },
3281     - /* titan_1284p1 */ { 1, { { 0, 1 }, } },
3282     - /* titan_1284p2 */ { 2, { { 0, 1 }, { 2, 3 }, } },
3283     /* avlab_1p */ { 1, { { 0, 1}, } },
3284     /* avlab_2p */ { 2, { { 0, 1}, { 2, 3 },} },
3285     /* The Oxford Semi cards are unusual: 954 doesn't support ECP,
3286     @@ -2677,8 +2673,8 @@ static struct parport_pc_pci {
3287     /* netmos_9705 */ { 1, { { 0, -1 }, } },
3288     /* netmos_9715 */ { 2, { { 0, 1 }, { 2, 3 },} },
3289     /* netmos_9755 */ { 2, { { 0, 1 }, { 2, 3 },} },
3290     - /* netmos_9805 */ { 1, { { 0, -1 }, } },
3291     - /* netmos_9815 */ { 2, { { 0, -1 }, { 2, -1 }, } },
3292     + /* netmos_9805 */ { 1, { { 0, 1 }, } },
3293     + /* netmos_9815 */ { 2, { { 0, 1 }, { 2, 3 }, } },
3294     /* netmos_9901 */ { 1, { { 0, -1 }, } },
3295     /* netmos_9865 */ { 1, { { 0, -1 }, } },
3296     /* quatech_sppxp100 */ { 1, { { 0, 1 }, } },
3297     @@ -2722,8 +2718,6 @@ static const struct pci_device_id parport_pc_pci_tbl[] = {
3298     PCI_ANY_ID, PCI_ANY_ID, 0, 0, syba_1p_ecp },
3299     { PCI_VENDOR_ID_TITAN, PCI_DEVICE_ID_TITAN_010L,
3300     PCI_ANY_ID, PCI_ANY_ID, 0, 0, titan_010l },
3301     - { 0x9710, 0x9805, 0x1000, 0x0010, 0, 0, titan_1284p1 },
3302     - { 0x9710, 0x9815, 0x1000, 0x0020, 0, 0, titan_1284p2 },
3303     /* PCI_VENDOR_ID_AVLAB/Intek21 has another bunch of cards ...*/
3304     /* AFAVLAB_TK9902 */
3305     { 0x14db, 0x2120, PCI_ANY_ID, PCI_ANY_ID, 0, 0, avlab_1p},
3306     diff --git a/drivers/pinctrl/pinctrl-sunxi.c b/drivers/pinctrl/pinctrl-sunxi.c
3307     index 119d2ddedfe7..6ebf3067bde4 100644
3308     --- a/drivers/pinctrl/pinctrl-sunxi.c
3309     +++ b/drivers/pinctrl/pinctrl-sunxi.c
3310     @@ -469,12 +469,6 @@ static int sunxi_pinctrl_gpio_get(struct gpio_chip *chip, unsigned offset)
3311     return val;
3312     }
3313    
3314     -static int sunxi_pinctrl_gpio_direction_output(struct gpio_chip *chip,
3315     - unsigned offset, int value)
3316     -{
3317     - return pinctrl_gpio_direction_output(chip->base + offset);
3318     -}
3319     -
3320     static void sunxi_pinctrl_gpio_set(struct gpio_chip *chip,
3321     unsigned offset, int value)
3322     {
3323     @@ -498,6 +492,13 @@ static void sunxi_pinctrl_gpio_set(struct gpio_chip *chip,
3324     spin_unlock_irqrestore(&pctl->lock, flags);
3325     }
3326    
3327     +static int sunxi_pinctrl_gpio_direction_output(struct gpio_chip *chip,
3328     + unsigned offset, int value)
3329     +{
3330     + sunxi_pinctrl_gpio_set(chip, offset, value);
3331     + return pinctrl_gpio_direction_output(chip->base + offset);
3332     +}
3333     +
3334     static int sunxi_pinctrl_gpio_of_xlate(struct gpio_chip *gc,
3335     const struct of_phandle_args *gpiospec,
3336     u32 *flags)
3337     diff --git a/drivers/platform/x86/hp_accel.c b/drivers/platform/x86/hp_accel.c
3338     index a8e43cf70fac..0ed96df20162 100644
3339     --- a/drivers/platform/x86/hp_accel.c
3340     +++ b/drivers/platform/x86/hp_accel.c
3341     @@ -77,6 +77,7 @@ static inline void delayed_sysfs_set(struct led_classdev *led_cdev,
3342     static struct acpi_device_id lis3lv02d_device_ids[] = {
3343     {"HPQ0004", 0}, /* HP Mobile Data Protection System PNP */
3344     {"HPQ6000", 0}, /* HP Mobile Data Protection System PNP */
3345     + {"HPQ6007", 0}, /* HP Mobile Data Protection System PNP */
3346     {"", 0},
3347     };
3348     MODULE_DEVICE_TABLE(acpi, lis3lv02d_device_ids);
3349     diff --git a/drivers/rtc/rtc-max8907.c b/drivers/rtc/rtc-max8907.c
3350     index 8e45b3c4aa2f..3032178bd9e6 100644
3351     --- a/drivers/rtc/rtc-max8907.c
3352     +++ b/drivers/rtc/rtc-max8907.c
3353     @@ -51,7 +51,7 @@ static irqreturn_t max8907_irq_handler(int irq, void *data)
3354     {
3355     struct max8907_rtc *rtc = data;
3356    
3357     - regmap_update_bits(rtc->regmap, MAX8907_REG_ALARM0_CNTL, 0x7f, 0);
3358     + regmap_write(rtc->regmap, MAX8907_REG_ALARM0_CNTL, 0);
3359    
3360     rtc_update_irq(rtc->rtc_dev, 1, RTC_IRQF | RTC_AF);
3361    
3362     @@ -64,7 +64,7 @@ static void regs_to_tm(u8 *regs, struct rtc_time *tm)
3363     bcd2bin(regs[RTC_YEAR1]) - 1900;
3364     tm->tm_mon = bcd2bin(regs[RTC_MONTH] & 0x1f) - 1;
3365     tm->tm_mday = bcd2bin(regs[RTC_DATE] & 0x3f);
3366     - tm->tm_wday = (regs[RTC_WEEKDAY] & 0x07) - 1;
3367     + tm->tm_wday = (regs[RTC_WEEKDAY] & 0x07);
3368     if (regs[RTC_HOUR] & HOUR_12) {
3369     tm->tm_hour = bcd2bin(regs[RTC_HOUR] & 0x01f);
3370     if (tm->tm_hour == 12)
3371     @@ -88,7 +88,7 @@ static void tm_to_regs(struct rtc_time *tm, u8 *regs)
3372     regs[RTC_YEAR1] = bin2bcd(low);
3373     regs[RTC_MONTH] = bin2bcd(tm->tm_mon + 1);
3374     regs[RTC_DATE] = bin2bcd(tm->tm_mday);
3375     - regs[RTC_WEEKDAY] = tm->tm_wday + 1;
3376     + regs[RTC_WEEKDAY] = tm->tm_wday;
3377     regs[RTC_HOUR] = bin2bcd(tm->tm_hour);
3378     regs[RTC_MIN] = bin2bcd(tm->tm_min);
3379     regs[RTC_SEC] = bin2bcd(tm->tm_sec);
3380     @@ -153,7 +153,7 @@ static int max8907_rtc_set_alarm(struct device *dev, struct rtc_wkalrm *alrm)
3381     tm_to_regs(&alrm->time, regs);
3382    
3383     /* Disable alarm while we update the target time */
3384     - ret = regmap_update_bits(rtc->regmap, MAX8907_REG_ALARM0_CNTL, 0x7f, 0);
3385     + ret = regmap_write(rtc->regmap, MAX8907_REG_ALARM0_CNTL, 0);
3386     if (ret < 0)
3387     return ret;
3388    
3389     @@ -163,8 +163,7 @@ static int max8907_rtc_set_alarm(struct device *dev, struct rtc_wkalrm *alrm)
3390     return ret;
3391    
3392     if (alrm->enabled)
3393     - ret = regmap_update_bits(rtc->regmap, MAX8907_REG_ALARM0_CNTL,
3394     - 0x7f, 0x7f);
3395     + ret = regmap_write(rtc->regmap, MAX8907_REG_ALARM0_CNTL, 0x77);
3396    
3397     return ret;
3398     }
3399     diff --git a/drivers/scsi/bfa/bfad.c b/drivers/scsi/bfa/bfad.c
3400     index fc80a325a1e6..27e270e00a10 100644
3401     --- a/drivers/scsi/bfa/bfad.c
3402     +++ b/drivers/scsi/bfa/bfad.c
3403     @@ -1802,7 +1802,7 @@ out:
3404     static u32 *
3405     bfad_load_fwimg(struct pci_dev *pdev)
3406     {
3407     - if (pdev->device == BFA_PCI_DEVICE_ID_CT2) {
3408     + if (bfa_asic_id_ct2(pdev->device)) {
3409     if (bfi_image_ct2_size == 0)
3410     bfad_read_firmware(pdev, &bfi_image_ct2,
3411     &bfi_image_ct2_size, BFAD_FW_FILE_CT2);
3412     @@ -1812,12 +1812,14 @@ bfad_load_fwimg(struct pci_dev *pdev)
3413     bfad_read_firmware(pdev, &bfi_image_ct,
3414     &bfi_image_ct_size, BFAD_FW_FILE_CT);
3415     return bfi_image_ct;
3416     - } else {
3417     + } else if (bfa_asic_id_cb(pdev->device)) {
3418     if (bfi_image_cb_size == 0)
3419     bfad_read_firmware(pdev, &bfi_image_cb,
3420     &bfi_image_cb_size, BFAD_FW_FILE_CB);
3421     return bfi_image_cb;
3422     }
3423     +
3424     + return NULL;
3425     }
3426    
3427     static void
3428     diff --git a/drivers/scsi/qla4xxx/ql4_os.c b/drivers/scsi/qla4xxx/ql4_os.c
3429     index a28d5e624aab..cf174a4ffa84 100644
3430     --- a/drivers/scsi/qla4xxx/ql4_os.c
3431     +++ b/drivers/scsi/qla4xxx/ql4_os.c
3432     @@ -802,6 +802,7 @@ static int qla4xxx_set_chap_entry(struct Scsi_Host *shost, void *data, int len)
3433     int type;
3434     int rem = len;
3435     int rc = 0;
3436     + int size;
3437    
3438     memset(&chap_rec, 0, sizeof(chap_rec));
3439    
3440     @@ -816,12 +817,14 @@ static int qla4xxx_set_chap_entry(struct Scsi_Host *shost, void *data, int len)
3441     chap_rec.chap_type = param_info->value[0];
3442     break;
3443     case ISCSI_CHAP_PARAM_USERNAME:
3444     - memcpy(chap_rec.username, param_info->value,
3445     - param_info->len);
3446     + size = min_t(size_t, sizeof(chap_rec.username),
3447     + param_info->len);
3448     + memcpy(chap_rec.username, param_info->value, size);
3449     break;
3450     case ISCSI_CHAP_PARAM_PASSWORD:
3451     - memcpy(chap_rec.password, param_info->value,
3452     - param_info->len);
3453     + size = min_t(size_t, sizeof(chap_rec.password),
3454     + param_info->len);
3455     + memcpy(chap_rec.password, param_info->value, size);
3456     break;
3457     case ISCSI_CHAP_PARAM_PASSWORD_LEN:
3458     chap_rec.password_length = param_info->value[0];
3459     diff --git a/drivers/scsi/virtio_scsi.c b/drivers/scsi/virtio_scsi.c
3460     index c3173dced870..16bfd50cd3fe 100644
3461     --- a/drivers/scsi/virtio_scsi.c
3462     +++ b/drivers/scsi/virtio_scsi.c
3463     @@ -956,6 +956,10 @@ static void virtscsi_remove(struct virtio_device *vdev)
3464     #ifdef CONFIG_PM_SLEEP
3465     static int virtscsi_freeze(struct virtio_device *vdev)
3466     {
3467     + struct Scsi_Host *sh = virtio_scsi_host(vdev);
3468     + struct virtio_scsi *vscsi = shost_priv(sh);
3469     +
3470     + unregister_hotcpu_notifier(&vscsi->nb);
3471     virtscsi_remove_vqs(vdev);
3472     return 0;
3473     }
3474     @@ -964,8 +968,17 @@ static int virtscsi_restore(struct virtio_device *vdev)
3475     {
3476     struct Scsi_Host *sh = virtio_scsi_host(vdev);
3477     struct virtio_scsi *vscsi = shost_priv(sh);
3478     + int err;
3479     +
3480     + err = virtscsi_init(vdev, vscsi);
3481     + if (err)
3482     + return err;
3483     +
3484     + err = register_hotcpu_notifier(&vscsi->nb);
3485     + if (err)
3486     + vdev->config->del_vqs(vdev);
3487    
3488     - return virtscsi_init(vdev, vscsi);
3489     + return err;
3490     }
3491     #endif
3492    
3493     diff --git a/drivers/staging/lustre/lustre/ptlrpc/niobuf.c b/drivers/staging/lustre/lustre/ptlrpc/niobuf.c
3494     index a0e009717a5a..d6047b9535ae 100644
3495     --- a/drivers/staging/lustre/lustre/ptlrpc/niobuf.c
3496     +++ b/drivers/staging/lustre/lustre/ptlrpc/niobuf.c
3497     @@ -179,7 +179,7 @@ int ptlrpc_register_bulk(struct ptlrpc_request *req)
3498     LNET_UNLINK, LNET_INS_AFTER, &me_h);
3499     if (rc != 0) {
3500     CERROR("%s: LNetMEAttach failed x"LPU64"/%d: rc = %d\n",
3501     - desc->bd_export->exp_obd->obd_name, xid,
3502     + desc->bd_import->imp_obd->obd_name, xid,
3503     posted_md, rc);
3504     break;
3505     }
3506     @@ -189,7 +189,7 @@ int ptlrpc_register_bulk(struct ptlrpc_request *req)
3507     &desc->bd_mds[posted_md]);
3508     if (rc != 0) {
3509     CERROR("%s: LNetMDAttach failed x"LPU64"/%d: rc = %d\n",
3510     - desc->bd_export->exp_obd->obd_name, xid,
3511     + desc->bd_import->imp_obd->obd_name, xid,
3512     posted_md, rc);
3513     rc2 = LNetMEUnlink(me_h);
3514     LASSERT(rc2 == 0);
3515     @@ -219,7 +219,7 @@ int ptlrpc_register_bulk(struct ptlrpc_request *req)
3516     /* Holler if peer manages to touch buffers before he knows the xid */
3517     if (desc->bd_md_count != total_md)
3518     CWARN("%s: Peer %s touched %d buffers while I registered\n",
3519     - desc->bd_export->exp_obd->obd_name, libcfs_id2str(peer),
3520     + desc->bd_import->imp_obd->obd_name, libcfs_id2str(peer),
3521     total_md - desc->bd_md_count);
3522     spin_unlock(&desc->bd_lock);
3523    
3524     diff --git a/drivers/staging/rtl8712/usb_intf.c b/drivers/staging/rtl8712/usb_intf.c
3525     index dbefa43e4c2c..bbd5888e316b 100644
3526     --- a/drivers/staging/rtl8712/usb_intf.c
3527     +++ b/drivers/staging/rtl8712/usb_intf.c
3528     @@ -353,6 +353,10 @@ static void disable_ht_for_spec_devid(const struct usb_device_id *pdid,
3529     }
3530     }
3531    
3532     +static const struct device_type wlan_type = {
3533     + .name = "wlan",
3534     +};
3535     +
3536     /*
3537     * drv_init() - a device potentially for us
3538     *
3539     @@ -388,6 +392,7 @@ static int r871xu_drv_init(struct usb_interface *pusb_intf,
3540     padapter->pusb_intf = pusb_intf;
3541     usb_set_intfdata(pusb_intf, pnetdev);
3542     SET_NETDEV_DEV(pnetdev, &pusb_intf->dev);
3543     + pnetdev->dev.type = &wlan_type;
3544     /* step 2. */
3545     padapter->dvobj_init = &r8712_usb_dvobj_init;
3546     padapter->dvobj_deinit = &r8712_usb_dvobj_deinit;
3547     diff --git a/drivers/staging/vt6656/baseband.c b/drivers/staging/vt6656/baseband.c
3548     index 4aa5ef54b683..22e117440f94 100644
3549     --- a/drivers/staging/vt6656/baseband.c
3550     +++ b/drivers/staging/vt6656/baseband.c
3551     @@ -1464,7 +1464,6 @@ void BBvUpdatePreEDThreshold(struct vnt_private *pDevice, int bScanning)
3552    
3553     if( bScanning )
3554     { // need Max sensitivity //RSSI -69, -70,....
3555     - if(pDevice->byBBPreEDIndex == 0) break;
3556     pDevice->byBBPreEDIndex = 0;
3557     ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xC9, 0x00); //CR201(0xC9)
3558     ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xCE, 0x30); //CR206(0xCE)
3559     @@ -1607,7 +1606,6 @@ void BBvUpdatePreEDThreshold(struct vnt_private *pDevice, int bScanning)
3560    
3561     if( bScanning )
3562     { // need Max sensitivity //RSSI -69, -70, ...
3563     - if(pDevice->byBBPreEDIndex == 0) break;
3564     pDevice->byBBPreEDIndex = 0;
3565     ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xC9, 0x00); //CR201(0xC9)
3566     ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xCE, 0x24); //CR206(0xCE)
3567     @@ -1759,7 +1757,6 @@ void BBvUpdatePreEDThreshold(struct vnt_private *pDevice, int bScanning)
3568     case RF_VT3342A0: //RobertYu:20060627, testing table
3569     if( bScanning )
3570     { // need Max sensitivity //RSSI -67, -68, ...
3571     - if(pDevice->byBBPreEDIndex == 0) break;
3572     pDevice->byBBPreEDIndex = 0;
3573     ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xC9, 0x00); //CR201(0xC9)
3574     ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xCE, 0x38); //CR206(0xCE)
3575     diff --git a/drivers/staging/vt6656/card.c b/drivers/staging/vt6656/card.c
3576     index 19d3cf451b88..34a24b78c1a7 100644
3577     --- a/drivers/staging/vt6656/card.c
3578     +++ b/drivers/staging/vt6656/card.c
3579     @@ -731,7 +731,7 @@ u64 CARDqGetNextTBTT(u64 qwTSF, u16 wBeaconInterval)
3580    
3581     uBeaconInterval = wBeaconInterval * 1024;
3582     // Next TBTT = ((local_current_TSF / beacon_interval) + 1 ) * beacon_interval
3583     - uLowNextTBTT = ((qwTSF & 0xffffffffU) >> 10) << 10;
3584     + uLowNextTBTT = ((qwTSF & 0xffffffffULL) >> 10) << 10;
3585     uLowRemain = (uLowNextTBTT) % uBeaconInterval;
3586     uHighRemain = ((0x80000000 % uBeaconInterval) * 2 * (u32)(qwTSF >> 32))
3587     % uBeaconInterval;
3588     diff --git a/drivers/staging/zram/zram_drv.c b/drivers/staging/zram/zram_drv.c
3589     index 3277d9838f4e..bfbfe579d896 100644
3590     --- a/drivers/staging/zram/zram_drv.c
3591     +++ b/drivers/staging/zram/zram_drv.c
3592     @@ -552,14 +552,14 @@ static void zram_reset_device(struct zram *zram, bool reset_capacity)
3593     size_t index;
3594     struct zram_meta *meta;
3595    
3596     - flush_work(&zram->free_work);
3597     -
3598     down_write(&zram->init_lock);
3599     if (!zram->init_done) {
3600     up_write(&zram->init_lock);
3601     return;
3602     }
3603    
3604     + flush_work(&zram->free_work);
3605     +
3606     meta = zram->meta;
3607     zram->init_done = 0;
3608    
3609     diff --git a/drivers/target/iscsi/iscsi_target.c b/drivers/target/iscsi/iscsi_target.c
3610     index 00867190413c..5049db4651c5 100644
3611     --- a/drivers/target/iscsi/iscsi_target.c
3612     +++ b/drivers/target/iscsi/iscsi_target.c
3613     @@ -52,7 +52,7 @@
3614     static LIST_HEAD(g_tiqn_list);
3615     static LIST_HEAD(g_np_list);
3616     static DEFINE_SPINLOCK(tiqn_lock);
3617     -static DEFINE_SPINLOCK(np_lock);
3618     +static DEFINE_MUTEX(np_lock);
3619    
3620     static struct idr tiqn_idr;
3621     struct idr sess_idr;
3622     @@ -307,6 +307,9 @@ bool iscsit_check_np_match(
3623     return false;
3624     }
3625    
3626     +/*
3627     + * Called with mutex np_lock held
3628     + */
3629     static struct iscsi_np *iscsit_get_np(
3630     struct __kernel_sockaddr_storage *sockaddr,
3631     int network_transport)
3632     @@ -314,11 +317,10 @@ static struct iscsi_np *iscsit_get_np(
3633     struct iscsi_np *np;
3634     bool match;
3635    
3636     - spin_lock_bh(&np_lock);
3637     list_for_each_entry(np, &g_np_list, np_list) {
3638     - spin_lock(&np->np_thread_lock);
3639     + spin_lock_bh(&np->np_thread_lock);
3640     if (np->np_thread_state != ISCSI_NP_THREAD_ACTIVE) {
3641     - spin_unlock(&np->np_thread_lock);
3642     + spin_unlock_bh(&np->np_thread_lock);
3643     continue;
3644     }
3645    
3646     @@ -330,13 +332,11 @@ static struct iscsi_np *iscsit_get_np(
3647     * while iscsi_tpg_add_network_portal() is called.
3648     */
3649     np->np_exports++;
3650     - spin_unlock(&np->np_thread_lock);
3651     - spin_unlock_bh(&np_lock);
3652     + spin_unlock_bh(&np->np_thread_lock);
3653     return np;
3654     }
3655     - spin_unlock(&np->np_thread_lock);
3656     + spin_unlock_bh(&np->np_thread_lock);
3657     }
3658     - spin_unlock_bh(&np_lock);
3659    
3660     return NULL;
3661     }
3662     @@ -350,16 +350,22 @@ struct iscsi_np *iscsit_add_np(
3663     struct sockaddr_in6 *sock_in6;
3664     struct iscsi_np *np;
3665     int ret;
3666     +
3667     + mutex_lock(&np_lock);
3668     +
3669     /*
3670     * Locate the existing struct iscsi_np if already active..
3671     */
3672     np = iscsit_get_np(sockaddr, network_transport);
3673     - if (np)
3674     + if (np) {
3675     + mutex_unlock(&np_lock);
3676     return np;
3677     + }
3678    
3679     np = kzalloc(sizeof(struct iscsi_np), GFP_KERNEL);
3680     if (!np) {
3681     pr_err("Unable to allocate memory for struct iscsi_np\n");
3682     + mutex_unlock(&np_lock);
3683     return ERR_PTR(-ENOMEM);
3684     }
3685    
3686     @@ -382,6 +388,7 @@ struct iscsi_np *iscsit_add_np(
3687     ret = iscsi_target_setup_login_socket(np, sockaddr);
3688     if (ret != 0) {
3689     kfree(np);
3690     + mutex_unlock(&np_lock);
3691     return ERR_PTR(ret);
3692     }
3693    
3694     @@ -390,6 +397,7 @@ struct iscsi_np *iscsit_add_np(
3695     pr_err("Unable to create kthread: iscsi_np\n");
3696     ret = PTR_ERR(np->np_thread);
3697     kfree(np);
3698     + mutex_unlock(&np_lock);
3699     return ERR_PTR(ret);
3700     }
3701     /*
3702     @@ -400,10 +408,10 @@ struct iscsi_np *iscsit_add_np(
3703     * point because iscsi_np has not been added to g_np_list yet.
3704     */
3705     np->np_exports = 1;
3706     + np->np_thread_state = ISCSI_NP_THREAD_ACTIVE;
3707    
3708     - spin_lock_bh(&np_lock);
3709     list_add_tail(&np->np_list, &g_np_list);
3710     - spin_unlock_bh(&np_lock);
3711     + mutex_unlock(&np_lock);
3712    
3713     pr_debug("CORE[0] - Added Network Portal: %s:%hu on %s\n",
3714     np->np_ip, np->np_port, np->np_transport->name);
3715     @@ -470,9 +478,9 @@ int iscsit_del_np(struct iscsi_np *np)
3716    
3717     np->np_transport->iscsit_free_np(np);
3718    
3719     - spin_lock_bh(&np_lock);
3720     + mutex_lock(&np_lock);
3721     list_del(&np->np_list);
3722     - spin_unlock_bh(&np_lock);
3723     + mutex_unlock(&np_lock);
3724    
3725     pr_debug("CORE[0] - Removed Network Portal: %s:%hu on %s\n",
3726     np->np_ip, np->np_port, np->np_transport->name);
3727     diff --git a/drivers/target/iscsi/iscsi_target_nego.c b/drivers/target/iscsi/iscsi_target_nego.c
3728     index 83c965c65386..582ba84075ec 100644
3729     --- a/drivers/target/iscsi/iscsi_target_nego.c
3730     +++ b/drivers/target/iscsi/iscsi_target_nego.c
3731     @@ -1192,7 +1192,7 @@ get_target:
3732     */
3733     alloc_tags:
3734     tag_num = max_t(u32, ISCSIT_MIN_TAGS, queue_depth);
3735     - tag_num += (tag_num / 2) + ISCSIT_EXTRA_TAGS;
3736     + tag_num = (tag_num * 2) + ISCSIT_EXTRA_TAGS;
3737     tag_size = sizeof(struct iscsi_cmd) + conn->conn_transport->priv_size;
3738    
3739     ret = transport_alloc_session_tags(sess->se_sess, tag_num, tag_size);
3740     diff --git a/drivers/tty/Kconfig b/drivers/tty/Kconfig
3741     index 978db344bda0..b24aa010f68c 100644
3742     --- a/drivers/tty/Kconfig
3743     +++ b/drivers/tty/Kconfig
3744     @@ -366,7 +366,7 @@ config TRACE_SINK
3745     "Trace data router for MIPI P1149.7 cJTAG standard".
3746    
3747     config PPC_EPAPR_HV_BYTECHAN
3748     - tristate "ePAPR hypervisor byte channel driver"
3749     + bool "ePAPR hypervisor byte channel driver"
3750     depends on PPC
3751     select EPAPR_PARAVIRT
3752     help
3753     diff --git a/drivers/tty/serial/8250/8250_core.c b/drivers/tty/serial/8250/8250_core.c
3754     index e33d38cb170f..61ecd709a722 100644
3755     --- a/drivers/tty/serial/8250/8250_core.c
3756     +++ b/drivers/tty/serial/8250/8250_core.c
3757     @@ -2670,6 +2670,10 @@ static void serial8250_config_port(struct uart_port *port, int flags)
3758     if (port->type == PORT_16550A && port->iotype == UPIO_AU)
3759     up->bugs |= UART_BUG_NOMSR;
3760    
3761     + /* HW bugs may trigger IRQ while IIR == NO_INT */
3762     + if (port->type == PORT_TEGRA)
3763     + up->bugs |= UART_BUG_NOMSR;
3764     +
3765     if (port->type != PORT_UNKNOWN && flags & UART_CONFIG_IRQ)
3766     autoconfig_irq(up);
3767    
3768     diff --git a/drivers/tty/serial/8250/8250_pci.c b/drivers/tty/serial/8250/8250_pci.c
3769     index 4697a514b80a..77d0aca9050a 100644
3770     --- a/drivers/tty/serial/8250/8250_pci.c
3771     +++ b/drivers/tty/serial/8250/8250_pci.c
3772     @@ -1259,10 +1259,10 @@ static int pci_quatech_init(struct pci_dev *dev)
3773     unsigned long base = pci_resource_start(dev, 0);
3774     if (base) {
3775     u32 tmp;
3776     - outl(inl(base + 0x38), base + 0x38);
3777     + outl(inl(base + 0x38) | 0x00002000, base + 0x38);
3778     tmp = inl(base + 0x3c);
3779     outl(tmp | 0x01000000, base + 0x3c);
3780     - outl(tmp, base + 0x3c);
3781     + outl(tmp &= ~0x01000000, base + 0x3c);
3782     }
3783     }
3784     return 0;
3785     @@ -1744,6 +1744,7 @@ pci_wch_ch353_setup(struct serial_private *priv,
3786     #define PCI_DEVICE_ID_TITAN_800E 0xA014
3787     #define PCI_DEVICE_ID_TITAN_200EI 0xA016
3788     #define PCI_DEVICE_ID_TITAN_200EISI 0xA017
3789     +#define PCI_DEVICE_ID_TITAN_200V3 0xA306
3790     #define PCI_DEVICE_ID_TITAN_400V3 0xA310
3791     #define PCI_DEVICE_ID_TITAN_410V3 0xA312
3792     #define PCI_DEVICE_ID_TITAN_800V3 0xA314
3793     @@ -4427,6 +4428,9 @@ static struct pci_device_id serial_pci_tbl[] = {
3794     { PCI_VENDOR_ID_TITAN, PCI_DEVICE_ID_TITAN_200EISI,
3795     PCI_ANY_ID, PCI_ANY_ID, 0, 0,
3796     pbn_oxsemi_2_4000000 },
3797     + { PCI_VENDOR_ID_TITAN, PCI_DEVICE_ID_TITAN_200V3,
3798     + PCI_ANY_ID, PCI_ANY_ID, 0, 0,
3799     + pbn_b0_bt_2_921600 },
3800     { PCI_VENDOR_ID_TITAN, PCI_DEVICE_ID_TITAN_400V3,
3801     PCI_ANY_ID, PCI_ANY_ID, 0, 0,
3802     pbn_b0_4_921600 },
3803     diff --git a/drivers/tty/serial/atmel_serial.c b/drivers/tty/serial/atmel_serial.c
3804     index c7d99af46a96..a49f10d269b2 100644
3805     --- a/drivers/tty/serial/atmel_serial.c
3806     +++ b/drivers/tty/serial/atmel_serial.c
3807     @@ -825,9 +825,6 @@ static void atmel_release_rx_dma(struct uart_port *port)
3808     atmel_port->desc_rx = NULL;
3809     atmel_port->chan_rx = NULL;
3810     atmel_port->cookie_rx = -EINVAL;
3811     -
3812     - if (!atmel_port->is_usart)
3813     - del_timer_sync(&atmel_port->uart_timer);
3814     }
3815    
3816     static void atmel_rx_from_dma(struct uart_port *port)
3817     @@ -1229,9 +1226,6 @@ static void atmel_release_rx_pdc(struct uart_port *port)
3818     DMA_FROM_DEVICE);
3819     kfree(pdc->buf);
3820     }
3821     -
3822     - if (!atmel_port->is_usart)
3823     - del_timer_sync(&atmel_port->uart_timer);
3824     }
3825    
3826     static void atmel_rx_from_pdc(struct uart_port *port)
3827     @@ -1604,12 +1598,13 @@ static int atmel_startup(struct uart_port *port)
3828     /* enable xmit & rcvr */
3829     UART_PUT_CR(port, ATMEL_US_TXEN | ATMEL_US_RXEN);
3830    
3831     + setup_timer(&atmel_port->uart_timer,
3832     + atmel_uart_timer_callback,
3833     + (unsigned long)port);
3834     +
3835     if (atmel_use_pdc_rx(port)) {
3836     /* set UART timeout */
3837     if (!atmel_port->is_usart) {
3838     - setup_timer(&atmel_port->uart_timer,
3839     - atmel_uart_timer_callback,
3840     - (unsigned long)port);
3841     mod_timer(&atmel_port->uart_timer,
3842     jiffies + uart_poll_timeout(port));
3843     /* set USART timeout */
3844     @@ -1624,9 +1619,6 @@ static int atmel_startup(struct uart_port *port)
3845     } else if (atmel_use_dma_rx(port)) {
3846     /* set UART timeout */
3847     if (!atmel_port->is_usart) {
3848     - setup_timer(&atmel_port->uart_timer,
3849     - atmel_uart_timer_callback,
3850     - (unsigned long)port);
3851     mod_timer(&atmel_port->uart_timer,
3852     jiffies + uart_poll_timeout(port));
3853     /* set USART timeout */
3854     @@ -1650,12 +1642,30 @@ static int atmel_startup(struct uart_port *port)
3855     static void atmel_shutdown(struct uart_port *port)
3856     {
3857     struct atmel_uart_port *atmel_port = to_atmel_uart_port(port);
3858     +
3859     /*
3860     - * Ensure everything is stopped.
3861     + * Prevent any tasklets being scheduled during
3862     + * cleanup
3863     + */
3864     + del_timer_sync(&atmel_port->uart_timer);
3865     +
3866     + /*
3867     + * Clear out any scheduled tasklets before
3868     + * we destroy the buffers
3869     + */
3870     + tasklet_kill(&atmel_port->tasklet);
3871     +
3872     + /*
3873     + * Ensure everything is stopped and
3874     + * disable all interrupts, port and break condition.
3875     */
3876     atmel_stop_rx(port);
3877     atmel_stop_tx(port);
3878    
3879     + UART_PUT_CR(port, ATMEL_US_RSTSTA);
3880     + UART_PUT_IDR(port, -1);
3881     +
3882     +
3883     /*
3884     * Shut-down the DMA.
3885     */
3886     @@ -1665,10 +1675,10 @@ static void atmel_shutdown(struct uart_port *port)
3887     atmel_port->release_tx(port);
3888    
3889     /*
3890     - * Disable all interrupts, port and break condition.
3891     + * Reset ring buffer pointers
3892     */
3893     - UART_PUT_CR(port, ATMEL_US_RSTSTA);
3894     - UART_PUT_IDR(port, -1);
3895     + atmel_port->rx_ring.head = 0;
3896     + atmel_port->rx_ring.tail = 0;
3897    
3898     /*
3899     * Free the interrupt
3900     @@ -2441,11 +2451,12 @@ static int atmel_serial_remove(struct platform_device *pdev)
3901     struct atmel_uart_port *atmel_port = to_atmel_uart_port(port);
3902     int ret = 0;
3903    
3904     + tasklet_kill(&atmel_port->tasklet);
3905     +
3906     device_init_wakeup(&pdev->dev, 0);
3907    
3908     ret = uart_remove_one_port(&atmel_uart, port);
3909    
3910     - tasklet_kill(&atmel_port->tasklet);
3911     kfree(atmel_port->rx_ring.buf);
3912    
3913     /* "port" is allocated statically, so we shouldn't free it */
3914     diff --git a/drivers/uio/uio.c b/drivers/uio/uio.c
3915     index f7beb6eb40c7..a673e5b6a2e0 100644
3916     --- a/drivers/uio/uio.c
3917     +++ b/drivers/uio/uio.c
3918     @@ -847,7 +847,7 @@ int __uio_register_device(struct module *owner,
3919     info->uio_dev = idev;
3920    
3921     if (info->irq && (info->irq != UIO_IRQ_CUSTOM)) {
3922     - ret = devm_request_irq(parent, info->irq, uio_interrupt,
3923     + ret = devm_request_irq(idev->dev, info->irq, uio_interrupt,
3924     info->irq_flags, info->name, idev);
3925     if (ret)
3926     goto err_request_irq;
3927     diff --git a/drivers/usb/chipidea/ci.h b/drivers/usb/chipidea/ci.h
3928     index 1c94fc5257f4..5ad448d0fb7d 100644
3929     --- a/drivers/usb/chipidea/ci.h
3930     +++ b/drivers/usb/chipidea/ci.h
3931     @@ -135,6 +135,7 @@ struct hw_bank {
3932     * @id_event: indicates there is an id event, and handled at ci_otg_work
3933     * @b_sess_valid_event: indicates there is a vbus event, and handled
3934     * at ci_otg_work
3935     + * @imx28_write_fix: Freescale imx28 needs swp instruction for writing
3936     */
3937     struct ci_hdrc {
3938     struct device *dev;
3939     @@ -173,6 +174,7 @@ struct ci_hdrc {
3940     struct dentry *debugfs;
3941     bool id_event;
3942     bool b_sess_valid_event;
3943     + bool imx28_write_fix;
3944     };
3945    
3946     static inline struct ci_role_driver *ci_role(struct ci_hdrc *ci)
3947     @@ -253,6 +255,26 @@ static inline u32 hw_read(struct ci_hdrc *ci, enum ci_hw_regs reg, u32 mask)
3948     return ioread32(ci->hw_bank.regmap[reg]) & mask;
3949     }
3950    
3951     +#ifdef CONFIG_SOC_IMX28
3952     +static inline void imx28_ci_writel(u32 val, volatile void __iomem *addr)
3953     +{
3954     + __asm__ ("swp %0, %0, [%1]" : : "r"(val), "r"(addr));
3955     +}
3956     +#else
3957     +static inline void imx28_ci_writel(u32 val, volatile void __iomem *addr)
3958     +{
3959     +}
3960     +#endif
3961     +
3962     +static inline void __hw_write(struct ci_hdrc *ci, u32 val,
3963     + void __iomem *addr)
3964     +{
3965     + if (ci->imx28_write_fix)
3966     + imx28_ci_writel(val, addr);
3967     + else
3968     + iowrite32(val, addr);
3969     +}
3970     +
3971     /**
3972     * hw_write: writes to a hw register
3973     * @reg: register index
3974     @@ -266,7 +288,7 @@ static inline void hw_write(struct ci_hdrc *ci, enum ci_hw_regs reg,
3975     data = (ioread32(ci->hw_bank.regmap[reg]) & ~mask)
3976     | (data & mask);
3977    
3978     - iowrite32(data, ci->hw_bank.regmap[reg]);
3979     + __hw_write(ci, data, ci->hw_bank.regmap[reg]);
3980     }
3981    
3982     /**
3983     @@ -281,7 +303,7 @@ static inline u32 hw_test_and_clear(struct ci_hdrc *ci, enum ci_hw_regs reg,
3984     {
3985     u32 val = ioread32(ci->hw_bank.regmap[reg]) & mask;
3986    
3987     - iowrite32(val, ci->hw_bank.regmap[reg]);
3988     + __hw_write(ci, val, ci->hw_bank.regmap[reg]);
3989     return val;
3990     }
3991    
3992     diff --git a/drivers/usb/chipidea/ci_hdrc_imx.c b/drivers/usb/chipidea/ci_hdrc_imx.c
3993     index bb5d976e5b81..c00f77257d36 100644
3994     --- a/drivers/usb/chipidea/ci_hdrc_imx.c
3995     +++ b/drivers/usb/chipidea/ci_hdrc_imx.c
3996     @@ -23,6 +23,26 @@
3997     #include "ci.h"
3998     #include "ci_hdrc_imx.h"
3999    
4000     +#define CI_HDRC_IMX_IMX28_WRITE_FIX BIT(0)
4001     +
4002     +struct ci_hdrc_imx_platform_flag {
4003     + unsigned int flags;
4004     +};
4005     +
4006     +static const struct ci_hdrc_imx_platform_flag imx27_usb_data = {
4007     +};
4008     +
4009     +static const struct ci_hdrc_imx_platform_flag imx28_usb_data = {
4010     + .flags = CI_HDRC_IMX_IMX28_WRITE_FIX,
4011     +};
4012     +
4013     +static const struct of_device_id ci_hdrc_imx_dt_ids[] = {
4014     + { .compatible = "fsl,imx28-usb", .data = &imx28_usb_data},
4015     + { .compatible = "fsl,imx27-usb", .data = &imx27_usb_data},
4016     + { /* sentinel */ }
4017     +};
4018     +MODULE_DEVICE_TABLE(of, ci_hdrc_imx_dt_ids);
4019     +
4020     struct ci_hdrc_imx_data {
4021     struct usb_phy *phy;
4022     struct platform_device *ci_pdev;
4023     @@ -82,6 +102,9 @@ static int ci_hdrc_imx_probe(struct platform_device *pdev)
4024     CI_HDRC_DISABLE_STREAMING,
4025     };
4026     int ret;
4027     + const struct of_device_id *of_id =
4028     + of_match_device(ci_hdrc_imx_dt_ids, &pdev->dev);
4029     + const struct ci_hdrc_imx_platform_flag *imx_platform_flag = of_id->data;
4030    
4031     data = devm_kzalloc(&pdev->dev, sizeof(*data), GFP_KERNEL);
4032     if (!data) {
4033     @@ -115,6 +138,9 @@ static int ci_hdrc_imx_probe(struct platform_device *pdev)
4034    
4035     pdata.phy = data->phy;
4036    
4037     + if (imx_platform_flag->flags & CI_HDRC_IMX_IMX28_WRITE_FIX)
4038     + pdata.flags |= CI_HDRC_IMX28_WRITE_FIX;
4039     +
4040     ret = dma_coerce_mask_and_coherent(&pdev->dev, DMA_BIT_MASK(32));
4041     if (ret)
4042     goto err_clk;
4043     @@ -173,12 +199,6 @@ static int ci_hdrc_imx_remove(struct platform_device *pdev)
4044     return 0;
4045     }
4046    
4047     -static const struct of_device_id ci_hdrc_imx_dt_ids[] = {
4048     - { .compatible = "fsl,imx27-usb", },
4049     - { /* sentinel */ }
4050     -};
4051     -MODULE_DEVICE_TABLE(of, ci_hdrc_imx_dt_ids);
4052     -
4053     static struct platform_driver ci_hdrc_imx_driver = {
4054     .probe = ci_hdrc_imx_probe,
4055     .remove = ci_hdrc_imx_remove,
4056     diff --git a/drivers/usb/chipidea/core.c b/drivers/usb/chipidea/core.c
4057     index 6e73f8cd60e5..5efdc9b45f89 100644
4058     --- a/drivers/usb/chipidea/core.c
4059     +++ b/drivers/usb/chipidea/core.c
4060     @@ -554,6 +554,8 @@ static int ci_hdrc_probe(struct platform_device *pdev)
4061    
4062     ci->dev = dev;
4063     ci->platdata = dev->platform_data;
4064     + ci->imx28_write_fix = !!(ci->platdata->flags &
4065     + CI_HDRC_IMX28_WRITE_FIX);
4066    
4067     ret = hw_device_init(ci, base);
4068     if (ret < 0) {
4069     diff --git a/drivers/usb/chipidea/host.c b/drivers/usb/chipidea/host.c
4070     index 526cd77563d8..a8ac6c16dac9 100644
4071     --- a/drivers/usb/chipidea/host.c
4072     +++ b/drivers/usb/chipidea/host.c
4073     @@ -65,6 +65,7 @@ static int host_start(struct ci_hdrc *ci)
4074     ehci->caps = ci->hw_bank.cap;
4075     ehci->has_hostpc = ci->hw_bank.lpm;
4076     ehci->has_tdi_phy_lpm = ci->hw_bank.lpm;
4077     + ehci->imx28_write_fix = ci->imx28_write_fix;
4078    
4079     if (ci->platdata->reg_vbus) {
4080     ret = regulator_enable(ci->platdata->reg_vbus);
4081     diff --git a/drivers/usb/chipidea/otg.h b/drivers/usb/chipidea/otg.h
4082     index 2d9f090733bc..449bee07f4fe 100644
4083     --- a/drivers/usb/chipidea/otg.h
4084     +++ b/drivers/usb/chipidea/otg.h
4085     @@ -1,5 +1,5 @@
4086     /*
4087     - * Copyright (C) 2013 Freescale Semiconductor, Inc.
4088     + * Copyright (C) 2013-2014 Freescale Semiconductor, Inc.
4089     *
4090     * Author: Peter Chen
4091     *
4092     @@ -19,12 +19,12 @@ static inline void ci_clear_otg_interrupt(struct ci_hdrc *ci, u32 bits)
4093    
4094     static inline void ci_enable_otg_interrupt(struct ci_hdrc *ci, u32 bits)
4095     {
4096     - hw_write(ci, OP_OTGSC, bits, bits);
4097     + hw_write(ci, OP_OTGSC, bits | OTGSC_INT_STATUS_BITS, bits);
4098     }
4099    
4100     static inline void ci_disable_otg_interrupt(struct ci_hdrc *ci, u32 bits)
4101     {
4102     - hw_write(ci, OP_OTGSC, bits, 0);
4103     + hw_write(ci, OP_OTGSC, bits | OTGSC_INT_STATUS_BITS, 0);
4104     }
4105    
4106     int ci_hdrc_otg_init(struct ci_hdrc *ci);
4107     diff --git a/drivers/usb/chipidea/udc.c b/drivers/usb/chipidea/udc.c
4108     index 69d20fbb38a2..5875c2a8daf1 100644
4109     --- a/drivers/usb/chipidea/udc.c
4110     +++ b/drivers/usb/chipidea/udc.c
4111     @@ -393,6 +393,14 @@ static int add_td_to_list(struct ci_hw_ep *hwep, struct ci_hw_req *hwreq,
4112     node->ptr->token = cpu_to_le32(length << __ffs(TD_TOTAL_BYTES));
4113     node->ptr->token &= cpu_to_le32(TD_TOTAL_BYTES);
4114     node->ptr->token |= cpu_to_le32(TD_STATUS_ACTIVE);
4115     + if (hwep->type == USB_ENDPOINT_XFER_ISOC && hwep->dir == TX) {
4116     + u32 mul = hwreq->req.length / hwep->ep.maxpacket;
4117     +
4118     + if (hwreq->req.length == 0
4119     + || hwreq->req.length % hwep->ep.maxpacket)
4120     + mul++;
4121     + node->ptr->token |= mul << __ffs(TD_MULTO);
4122     + }
4123    
4124     temp = (u32) (hwreq->req.dma + hwreq->req.actual);
4125     if (length) {
4126     @@ -515,10 +523,11 @@ static int _hardware_enqueue(struct ci_hw_ep *hwep, struct ci_hw_req *hwreq)
4127     hwep->qh.ptr->td.token &=
4128     cpu_to_le32(~(TD_STATUS_HALTED|TD_STATUS_ACTIVE));
4129    
4130     - if (hwep->type == USB_ENDPOINT_XFER_ISOC) {
4131     + if (hwep->type == USB_ENDPOINT_XFER_ISOC && hwep->dir == RX) {
4132     u32 mul = hwreq->req.length / hwep->ep.maxpacket;
4133    
4134     - if (hwreq->req.length % hwep->ep.maxpacket)
4135     + if (hwreq->req.length == 0
4136     + || hwreq->req.length % hwep->ep.maxpacket)
4137     mul++;
4138     hwep->qh.ptr->cap |= mul << __ffs(QH_MULT);
4139     }
4140     @@ -1173,6 +1182,12 @@ static int ep_enable(struct usb_ep *ep,
4141     if (hwep->num)
4142     cap |= QH_ZLT;
4143     cap |= (hwep->ep.maxpacket << __ffs(QH_MAX_PKT)) & QH_MAX_PKT;
4144     + /*
4145     + * For ISO-TX, we set mult at QH as the largest value, and use
4146     + * MultO at TD as real mult value.
4147     + */
4148     + if (hwep->type == USB_ENDPOINT_XFER_ISOC && hwep->dir == TX)
4149     + cap |= 3 << __ffs(QH_MULT);
4150    
4151     hwep->qh.ptr->cap = cpu_to_le32(cap);
4152    
4153     diff --git a/drivers/usb/class/cdc-wdm.c b/drivers/usb/class/cdc-wdm.c
4154     index 0b23a8639311..a051a7a2b1bd 100644
4155     --- a/drivers/usb/class/cdc-wdm.c
4156     +++ b/drivers/usb/class/cdc-wdm.c
4157     @@ -432,6 +432,38 @@ outnl:
4158     return rv < 0 ? rv : count;
4159     }
4160    
4161     +/*
4162     + * clear WDM_READ flag and possibly submit the read urb if resp_count
4163     + * is non-zero.
4164     + *
4165     + * Called with desc->iuspin locked
4166     + */
4167     +static int clear_wdm_read_flag(struct wdm_device *desc)
4168     +{
4169     + int rv = 0;
4170     +
4171     + clear_bit(WDM_READ, &desc->flags);
4172     +
4173     + /* submit read urb only if the device is waiting for it */
4174     + if (!desc->resp_count || !--desc->resp_count)
4175     + goto out;
4176     +
4177     + set_bit(WDM_RESPONDING, &desc->flags);
4178     + spin_unlock_irq(&desc->iuspin);
4179     + rv = usb_submit_urb(desc->response, GFP_KERNEL);
4180     + spin_lock_irq(&desc->iuspin);
4181     + if (rv) {
4182     + dev_err(&desc->intf->dev,
4183     + "usb_submit_urb failed with result %d\n", rv);
4184     +
4185     + /* make sure the next notification trigger a submit */
4186     + clear_bit(WDM_RESPONDING, &desc->flags);
4187     + desc->resp_count = 0;
4188     + }
4189     +out:
4190     + return rv;
4191     +}
4192     +
4193     static ssize_t wdm_read
4194     (struct file *file, char __user *buffer, size_t count, loff_t *ppos)
4195     {
4196     @@ -503,8 +535,10 @@ retry:
4197    
4198     if (!desc->reslength) { /* zero length read */
4199     dev_dbg(&desc->intf->dev, "%s: zero length - clearing WDM_READ\n", __func__);
4200     - clear_bit(WDM_READ, &desc->flags);
4201     + rv = clear_wdm_read_flag(desc);
4202     spin_unlock_irq(&desc->iuspin);
4203     + if (rv < 0)
4204     + goto err;
4205     goto retry;
4206     }
4207     cntr = desc->length;
4208     @@ -526,37 +560,9 @@ retry:
4209    
4210     desc->length -= cntr;
4211     /* in case we had outstanding data */
4212     - if (!desc->length) {
4213     - clear_bit(WDM_READ, &desc->flags);
4214     -
4215     - if (--desc->resp_count) {
4216     - set_bit(WDM_RESPONDING, &desc->flags);
4217     - spin_unlock_irq(&desc->iuspin);
4218     -
4219     - rv = usb_submit_urb(desc->response, GFP_KERNEL);
4220     - if (rv) {
4221     - dev_err(&desc->intf->dev,
4222     - "%s: usb_submit_urb failed with result %d\n",
4223     - __func__, rv);
4224     - spin_lock_irq(&desc->iuspin);
4225     - clear_bit(WDM_RESPONDING, &desc->flags);
4226     - spin_unlock_irq(&desc->iuspin);
4227     -
4228     - if (rv == -ENOMEM) {
4229     - rv = schedule_work(&desc->rxwork);
4230     - if (rv)
4231     - dev_err(&desc->intf->dev, "Cannot schedule work\n");
4232     - } else {
4233     - spin_lock_irq(&desc->iuspin);
4234     - desc->resp_count = 0;
4235     - spin_unlock_irq(&desc->iuspin);
4236     - }
4237     - }
4238     - } else
4239     - spin_unlock_irq(&desc->iuspin);
4240     - } else
4241     - spin_unlock_irq(&desc->iuspin);
4242     -
4243     + if (!desc->length)
4244     + clear_wdm_read_flag(desc);
4245     + spin_unlock_irq(&desc->iuspin);
4246     rv = cntr;
4247    
4248     err:
4249     diff --git a/drivers/usb/core/config.c b/drivers/usb/core/config.c
4250     index a6b2cabe7930..548d1996590f 100644
4251     --- a/drivers/usb/core/config.c
4252     +++ b/drivers/usb/core/config.c
4253     @@ -651,10 +651,6 @@ void usb_destroy_configuration(struct usb_device *dev)
4254     *
4255     * hub-only!! ... and only in reset path, or usb_new_device()
4256     * (used by real hubs and virtual root hubs)
4257     - *
4258     - * NOTE: if this is a WUSB device and is not authorized, we skip the
4259     - * whole thing. A non-authorized USB device has no
4260     - * configurations.
4261     */
4262     int usb_get_configuration(struct usb_device *dev)
4263     {
4264     @@ -666,8 +662,6 @@ int usb_get_configuration(struct usb_device *dev)
4265     struct usb_config_descriptor *desc;
4266    
4267     cfgno = 0;
4268     - if (dev->authorized == 0) /* Not really an error */
4269     - goto out_not_authorized;
4270     result = -ENOMEM;
4271     if (ncfg > USB_MAXCONFIG) {
4272     dev_warn(ddev, "too many configurations: %d, "
4273     @@ -751,7 +745,6 @@ int usb_get_configuration(struct usb_device *dev)
4274    
4275     err:
4276     kfree(desc);
4277     -out_not_authorized:
4278     dev->descriptor.bNumConfigurations = cfgno;
4279     err2:
4280     if (result == -ENOMEM)
4281     diff --git a/drivers/usb/core/hub.c b/drivers/usb/core/hub.c
4282     index bd9dc3504b51..07e66542ff24 100644
4283     --- a/drivers/usb/core/hub.c
4284     +++ b/drivers/usb/core/hub.c
4285     @@ -1607,7 +1607,7 @@ static void hub_disconnect(struct usb_interface *intf)
4286     {
4287     struct usb_hub *hub = usb_get_intfdata(intf);
4288     struct usb_device *hdev = interface_to_usbdev(intf);
4289     - int i;
4290     + int port1;
4291    
4292     /* Take the hub off the event list and don't let it be added again */
4293     spin_lock_irq(&hub_event_lock);
4294     @@ -1622,11 +1622,15 @@ static void hub_disconnect(struct usb_interface *intf)
4295     hub->error = 0;
4296     hub_quiesce(hub, HUB_DISCONNECT);
4297    
4298     - usb_set_intfdata (intf, NULL);
4299     + /* Avoid races with recursively_mark_NOTATTACHED() */
4300     + spin_lock_irq(&device_state_lock);
4301     + port1 = hdev->maxchild;
4302     + hdev->maxchild = 0;
4303     + usb_set_intfdata(intf, NULL);
4304     + spin_unlock_irq(&device_state_lock);
4305    
4306     - for (i = 0; i < hdev->maxchild; i++)
4307     - usb_hub_remove_port_device(hub, i + 1);
4308     - hub->hdev->maxchild = 0;
4309     + for (; port1 > 0; --port1)
4310     + usb_hub_remove_port_device(hub, port1);
4311    
4312     if (hub->hdev->speed == USB_SPEED_HIGH)
4313     highspeed_hubs--;
4314     @@ -2235,17 +2239,13 @@ static int usb_enumerate_device(struct usb_device *udev)
4315     return err;
4316     }
4317     }
4318     - if (udev->wusb == 1 && udev->authorized == 0) {
4319     - udev->product = kstrdup("n/a (unauthorized)", GFP_KERNEL);
4320     - udev->manufacturer = kstrdup("n/a (unauthorized)", GFP_KERNEL);
4321     - udev->serial = kstrdup("n/a (unauthorized)", GFP_KERNEL);
4322     - } else {
4323     - /* read the standard strings and cache them if present */
4324     - udev->product = usb_cache_string(udev, udev->descriptor.iProduct);
4325     - udev->manufacturer = usb_cache_string(udev,
4326     - udev->descriptor.iManufacturer);
4327     - udev->serial = usb_cache_string(udev, udev->descriptor.iSerialNumber);
4328     - }
4329     +
4330     + /* read the standard strings and cache them if present */
4331     + udev->product = usb_cache_string(udev, udev->descriptor.iProduct);
4332     + udev->manufacturer = usb_cache_string(udev,
4333     + udev->descriptor.iManufacturer);
4334     + udev->serial = usb_cache_string(udev, udev->descriptor.iSerialNumber);
4335     +
4336     err = usb_enumerate_device_otg(udev);
4337     if (err < 0)
4338     return err;
4339     @@ -2427,16 +2427,6 @@ int usb_deauthorize_device(struct usb_device *usb_dev)
4340     usb_dev->authorized = 0;
4341     usb_set_configuration(usb_dev, -1);
4342    
4343     - kfree(usb_dev->product);
4344     - usb_dev->product = kstrdup("n/a (unauthorized)", GFP_KERNEL);
4345     - kfree(usb_dev->manufacturer);
4346     - usb_dev->manufacturer = kstrdup("n/a (unauthorized)", GFP_KERNEL);
4347     - kfree(usb_dev->serial);
4348     - usb_dev->serial = kstrdup("n/a (unauthorized)", GFP_KERNEL);
4349     -
4350     - usb_destroy_configuration(usb_dev);
4351     - usb_dev->descriptor.bNumConfigurations = 0;
4352     -
4353     out_unauthorized:
4354     usb_unlock_device(usb_dev);
4355     return 0;
4356     @@ -2464,17 +2454,7 @@ int usb_authorize_device(struct usb_device *usb_dev)
4357     goto error_device_descriptor;
4358     }
4359    
4360     - kfree(usb_dev->product);
4361     - usb_dev->product = NULL;
4362     - kfree(usb_dev->manufacturer);
4363     - usb_dev->manufacturer = NULL;
4364     - kfree(usb_dev->serial);
4365     - usb_dev->serial = NULL;
4366     -
4367     usb_dev->authorized = 1;
4368     - result = usb_enumerate_device(usb_dev);
4369     - if (result < 0)
4370     - goto error_enumerate;
4371     /* Choose and set the configuration. This registers the interfaces
4372     * with the driver core and lets interface drivers bind to them.
4373     */
4374     @@ -2490,7 +2470,6 @@ int usb_authorize_device(struct usb_device *usb_dev)
4375     }
4376     dev_info(&usb_dev->dev, "authorized to connect\n");
4377    
4378     -error_enumerate:
4379     error_device_descriptor:
4380     usb_autosuspend_device(usb_dev);
4381     error_autoresume:
4382     diff --git a/drivers/usb/dwc3/dwc3-exynos.c b/drivers/usb/dwc3/dwc3-exynos.c
4383     index 8b20c70d91e7..28c8ad79f5e6 100644
4384     --- a/drivers/usb/dwc3/dwc3-exynos.c
4385     +++ b/drivers/usb/dwc3/dwc3-exynos.c
4386     @@ -50,6 +50,7 @@ static int dwc3_exynos_register_phys(struct dwc3_exynos *exynos)
4387    
4388     exynos->usb2_phy = pdev;
4389     pdata.type = USB_PHY_TYPE_USB2;
4390     + pdata.gpio_reset = -1;
4391    
4392     ret = platform_device_add_data(exynos->usb2_phy, &pdata, sizeof(pdata));
4393     if (ret)
4394     diff --git a/drivers/usb/dwc3/dwc3-pci.c b/drivers/usb/dwc3/dwc3-pci.c
4395     index 31443aeedcdb..7e71bfa09b54 100644
4396     --- a/drivers/usb/dwc3/dwc3-pci.c
4397     +++ b/drivers/usb/dwc3/dwc3-pci.c
4398     @@ -52,6 +52,7 @@ static int dwc3_pci_register_phys(struct dwc3_pci *glue)
4399    
4400     glue->usb2_phy = pdev;
4401     pdata.type = USB_PHY_TYPE_USB2;
4402     + pdata.gpio_reset = -1;
4403    
4404     ret = platform_device_add_data(glue->usb2_phy, &pdata, sizeof(pdata));
4405     if (ret)
4406     diff --git a/drivers/usb/host/ehci.h b/drivers/usb/host/ehci.h
4407     index e8f41c5e771b..bf4555abdd06 100644
4408     --- a/drivers/usb/host/ehci.h
4409     +++ b/drivers/usb/host/ehci.h
4410     @@ -225,6 +225,7 @@ struct ehci_hcd { /* one per controller */
4411     unsigned has_synopsys_hc_bug:1; /* Synopsys HC */
4412     unsigned frame_index_bug:1; /* MosChip (AKA NetMos) */
4413     unsigned need_oc_pp_cycle:1; /* MPC834X port power */
4414     + unsigned imx28_write_fix:1; /* For Freescale i.MX28 */
4415    
4416     /* required for usb32 quirk */
4417     #define OHCI_CTRL_HCFS (3 << 6)
4418     @@ -728,6 +729,18 @@ static inline unsigned int ehci_readl(const struct ehci_hcd *ehci,
4419     #endif
4420     }
4421    
4422     +#ifdef CONFIG_SOC_IMX28
4423     +static inline void imx28_ehci_writel(const unsigned int val,
4424     + volatile __u32 __iomem *addr)
4425     +{
4426     + __asm__ ("swp %0, %0, [%1]" : : "r"(val), "r"(addr));
4427     +}
4428     +#else
4429     +static inline void imx28_ehci_writel(const unsigned int val,
4430     + volatile __u32 __iomem *addr)
4431     +{
4432     +}
4433     +#endif
4434     static inline void ehci_writel(const struct ehci_hcd *ehci,
4435     const unsigned int val, __u32 __iomem *regs)
4436     {
4437     @@ -736,7 +749,10 @@ static inline void ehci_writel(const struct ehci_hcd *ehci,
4438     writel_be(val, regs) :
4439     writel(val, regs);
4440     #else
4441     - writel(val, regs);
4442     + if (ehci->imx28_write_fix)
4443     + imx28_ehci_writel(val, regs);
4444     + else
4445     + writel(val, regs);
4446     #endif
4447     }
4448    
4449     diff --git a/drivers/usb/host/xhci-ring.c b/drivers/usb/host/xhci-ring.c
4450     index 53c2e296467f..64c36fe1ea6a 100644
4451     --- a/drivers/usb/host/xhci-ring.c
4452     +++ b/drivers/usb/host/xhci-ring.c
4453     @@ -3008,7 +3008,7 @@ static int prepare_ring(struct xhci_hcd *xhci, struct xhci_ring *ep_ring,
4454     if (num_trbs >= TRBS_PER_SEGMENT) {
4455     xhci_err(xhci, "Too many fragments %d, max %d\n",
4456     num_trbs, TRBS_PER_SEGMENT - 1);
4457     - return -ENOMEM;
4458     + return -EINVAL;
4459     }
4460    
4461     nop_cmd = cpu_to_le32(TRB_TYPE(TRB_TR_NOOP) |
4462     diff --git a/drivers/usb/host/xhci.c b/drivers/usb/host/xhci.c
4463     index 4265b48856f6..cfa5995c7e1f 100644
4464     --- a/drivers/usb/host/xhci.c
4465     +++ b/drivers/usb/host/xhci.c
4466     @@ -321,6 +321,9 @@ static void xhci_cleanup_msix(struct xhci_hcd *xhci)
4467     struct usb_hcd *hcd = xhci_to_hcd(xhci);
4468     struct pci_dev *pdev = to_pci_dev(hcd->self.controller);
4469    
4470     + if (xhci->quirks & XHCI_PLAT)
4471     + return;
4472     +
4473     xhci_free_irq(xhci);
4474    
4475     if (xhci->msix_entries) {
4476     @@ -4713,8 +4716,8 @@ int xhci_gen_setup(struct usb_hcd *hcd, xhci_get_quirks_t get_quirks)
4477     struct device *dev = hcd->self.controller;
4478     int retval;
4479    
4480     - /* Accept arbitrarily long scatter-gather lists */
4481     - hcd->self.sg_tablesize = ~0;
4482     + /* Limit the block layer scatter-gather lists to half a segment. */
4483     + hcd->self.sg_tablesize = TRBS_PER_SEGMENT / 2;
4484    
4485     /* support to build packet from discontinuous buffers */
4486     hcd->self.no_sg_constraint = 1;
4487     diff --git a/drivers/usb/host/xhci.h b/drivers/usb/host/xhci.h
4488     index 03c74b7965f8..c283cf183c48 100644
4489     --- a/drivers/usb/host/xhci.h
4490     +++ b/drivers/usb/host/xhci.h
4491     @@ -1260,7 +1260,7 @@ union xhci_trb {
4492     * since the command ring is 64-byte aligned.
4493     * It must also be greater than 16.
4494     */
4495     -#define TRBS_PER_SEGMENT 64
4496     +#define TRBS_PER_SEGMENT 256
4497     /* Allow two commands + a link TRB, along with any reserved command TRBs */
4498     #define MAX_RSVD_CMD_TRBS (TRBS_PER_SEGMENT - 3)
4499     #define TRB_SEGMENT_SIZE (TRBS_PER_SEGMENT*16)
4500     diff --git a/drivers/usb/serial/cypress_m8.h b/drivers/usb/serial/cypress_m8.h
4501     index b461311a2ae7..ce13e61b7d55 100644
4502     --- a/drivers/usb/serial/cypress_m8.h
4503     +++ b/drivers/usb/serial/cypress_m8.h
4504     @@ -63,7 +63,7 @@
4505     #define UART_DSR 0x20 /* data set ready - flow control - device to host */
4506     #define CONTROL_RTS 0x10 /* request to send - flow control - host to device */
4507     #define UART_CTS 0x10 /* clear to send - flow control - device to host */
4508     -#define UART_RI 0x10 /* ring indicator - modem - device to host */
4509     +#define UART_RI 0x80 /* ring indicator - modem - device to host */
4510     #define UART_CD 0x40 /* carrier detect - modem - device to host */
4511     #define CYP_ERROR 0x08 /* received from input report - device to host */
4512     /* Note - the below has nothing to do with the "feature report" reset */
4513     diff --git a/drivers/usb/serial/ftdi_sio.c b/drivers/usb/serial/ftdi_sio.c
4514     index fb0d537435eb..8c204a52d534 100644
4515     --- a/drivers/usb/serial/ftdi_sio.c
4516     +++ b/drivers/usb/serial/ftdi_sio.c
4517     @@ -2124,10 +2124,20 @@ static void ftdi_set_termios(struct tty_struct *tty,
4518     }
4519    
4520     /*
4521     - * All FTDI UART chips are limited to CS7/8. We won't pretend to
4522     + * All FTDI UART chips are limited to CS7/8. We shouldn't pretend to
4523     * support CS5/6 and revert the CSIZE setting instead.
4524     + *
4525     + * CS5 however is used to control some smartcard readers which abuse
4526     + * this limitation to switch modes. Original FTDI chips fall back to
4527     + * eight data bits.
4528     + *
4529     + * TODO: Implement a quirk to only allow this with mentioned
4530     + * readers. One I know of (Argolis Smartreader V1)
4531     + * returns "USB smartcard server" as iInterface string.
4532     + * The vendor didn't bother with a custom VID/PID of
4533     + * course.
4534     */
4535     - if ((C_CSIZE(tty) != CS8) && (C_CSIZE(tty) != CS7)) {
4536     + if (C_CSIZE(tty) == CS6) {
4537     dev_warn(ddev, "requested CSIZE setting not supported\n");
4538    
4539     termios->c_cflag &= ~CSIZE;
4540     @@ -2174,6 +2184,9 @@ no_skip:
4541     urb_value |= FTDI_SIO_SET_DATA_PARITY_NONE;
4542     }
4543     switch (cflag & CSIZE) {
4544     + case CS5:
4545     + dev_dbg(ddev, "Setting CS5 quirk\n");
4546     + break;
4547     case CS7:
4548     urb_value |= 7;
4549     dev_dbg(ddev, "Setting CS7\n");
4550     diff --git a/drivers/usb/serial/option.c b/drivers/usb/serial/option.c
4551     index cc7a24154490..5c86f57e4afa 100644
4552     --- a/drivers/usb/serial/option.c
4553     +++ b/drivers/usb/serial/option.c
4554     @@ -320,6 +320,9 @@ static void option_instat_callback(struct urb *urb);
4555     * It seems to contain a Qualcomm QSC6240/6290 chipset */
4556     #define FOUR_G_SYSTEMS_PRODUCT_W14 0x9603
4557    
4558     +/* iBall 3.5G connect wireless modem */
4559     +#define IBALL_3_5G_CONNECT 0x9605
4560     +
4561     /* Zoom */
4562     #define ZOOM_PRODUCT_4597 0x9607
4563    
4564     @@ -1447,6 +1450,17 @@ static const struct usb_device_id option_ids[] = {
4565     .driver_info = (kernel_ulong_t)&net_intf3_blacklist },
4566     { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x0178, 0xff, 0xff, 0xff),
4567     .driver_info = (kernel_ulong_t)&net_intf3_blacklist },
4568     + { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0xffe9, 0xff, 0xff, 0xff) },
4569     + { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0xff8b, 0xff, 0xff, 0xff) },
4570     + { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0xff8c, 0xff, 0xff, 0xff) },
4571     + { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0xff8d, 0xff, 0xff, 0xff) },
4572     + { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0xff8e, 0xff, 0xff, 0xff) },
4573     + { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0xff8f, 0xff, 0xff, 0xff) },
4574     + { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0xff90, 0xff, 0xff, 0xff) },
4575     + { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0xff91, 0xff, 0xff, 0xff) },
4576     + { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0xff92, 0xff, 0xff, 0xff) },
4577     + { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0xff93, 0xff, 0xff, 0xff) },
4578     + { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0xff94, 0xff, 0xff, 0xff) },
4579    
4580     /* NOTE: most ZTE CDMA devices should be driven by zte_ev, not option */
4581     { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, ZTE_PRODUCT_MC2718, 0xff, 0xff, 0xff),
4582     @@ -1489,6 +1503,7 @@ static const struct usb_device_id option_ids[] = {
4583     .driver_info = (kernel_ulong_t)&four_g_w14_blacklist
4584     },
4585     { USB_DEVICE(LONGCHEER_VENDOR_ID, ZOOM_PRODUCT_4597) },
4586     + { USB_DEVICE(LONGCHEER_VENDOR_ID, IBALL_3_5G_CONNECT) },
4587     { USB_DEVICE(HAIER_VENDOR_ID, HAIER_PRODUCT_CE100) },
4588     /* Pirelli */
4589     { USB_DEVICE_INTERFACE_CLASS(PIRELLI_VENDOR_ID, PIRELLI_PRODUCT_C100_1, 0xff) },
4590     diff --git a/drivers/usb/serial/pl2303.c b/drivers/usb/serial/pl2303.c
4591     index 1e3318dfa1cb..beb8edce4ef2 100644
4592     --- a/drivers/usb/serial/pl2303.c
4593     +++ b/drivers/usb/serial/pl2303.c
4594     @@ -142,6 +142,8 @@ struct pl2303_private {
4595     spinlock_t lock;
4596     u8 line_control;
4597     u8 line_status;
4598     +
4599     + u8 line_settings[7];
4600     };
4601    
4602     static int pl2303_vendor_read(__u16 value, __u16 index,
4603     @@ -339,11 +341,6 @@ static void pl2303_set_termios(struct tty_struct *tty,
4604     int i;
4605     u8 control;
4606    
4607     - /*
4608     - * The PL2303 is reported to lose bytes if you change serial settings
4609     - * even to the same values as before. Thus we actually need to filter
4610     - * in this specific case.
4611     - */
4612     if (old_termios && !tty_termios_hw_change(&tty->termios, old_termios))
4613     return;
4614    
4615     @@ -428,10 +425,29 @@ static void pl2303_set_termios(struct tty_struct *tty,
4616     dev_dbg(&port->dev, "parity = none\n");
4617     }
4618    
4619     - i = usb_control_msg(serial->dev, usb_sndctrlpipe(serial->dev, 0),
4620     - SET_LINE_REQUEST, SET_LINE_REQUEST_TYPE,
4621     - 0, 0, buf, 7, 100);
4622     - dev_dbg(&port->dev, "0x21:0x20:0:0 %d\n", i);
4623     + /*
4624     + * Some PL2303 are known to lose bytes if you change serial settings
4625     + * even to the same values as before. Thus we actually need to filter
4626     + * in this specific case.
4627     + *
4628     + * Note that the tty_termios_hw_change check above is not sufficient
4629     + * as a previously requested baud rate may differ from the one
4630     + * actually used (and stored in old_termios).
4631     + *
4632     + * NOTE: No additional locking needed for line_settings as it is
4633     + * only used in set_termios, which is serialised against itself.
4634     + */
4635     + if (!old_termios || memcmp(buf, priv->line_settings, 7)) {
4636     + i = usb_control_msg(serial->dev,
4637     + usb_sndctrlpipe(serial->dev, 0),
4638     + SET_LINE_REQUEST, SET_LINE_REQUEST_TYPE,
4639     + 0, 0, buf, 7, 100);
4640     +
4641     + dev_dbg(&port->dev, "0x21:0x20:0:0 %d\n", i);
4642     +
4643     + if (i == 7)
4644     + memcpy(priv->line_settings, buf, 7);
4645     + }
4646    
4647     /* change control lines if we are switching to or from B0 */
4648     spin_lock_irqsave(&priv->lock, flags);
4649     diff --git a/drivers/usb/storage/unusual_devs.h b/drivers/usb/storage/unusual_devs.h
4650     index de32cfa5bfa6..ad06255c2ade 100644
4651     --- a/drivers/usb/storage/unusual_devs.h
4652     +++ b/drivers/usb/storage/unusual_devs.h
4653     @@ -234,6 +234,13 @@ UNUSUAL_DEV( 0x0421, 0x0495, 0x0370, 0x0370,
4654     USB_SC_DEVICE, USB_PR_DEVICE, NULL,
4655     US_FL_MAX_SECTORS_64 ),
4656    
4657     +/* Patch submitted by Mikhail Zolotaryov <lebon@lebon.org.ua> */
4658     +UNUSUAL_DEV( 0x0421, 0x06aa, 0x1110, 0x1110,
4659     + "Nokia",
4660     + "502",
4661     + USB_SC_DEVICE, USB_PR_DEVICE, NULL,
4662     + US_FL_MAX_SECTORS_64 ),
4663     +
4664     #ifdef NO_SDDR09
4665     UNUSUAL_DEV( 0x0436, 0x0005, 0x0100, 0x0100,
4666     "Microtech",
4667     diff --git a/drivers/video/console/sticore.c b/drivers/video/console/sticore.c
4668     index 4ad24f2c6472..cecd3de01c24 100644
4669     --- a/drivers/video/console/sticore.c
4670     +++ b/drivers/video/console/sticore.c
4671     @@ -488,7 +488,7 @@ static int sti_init_glob_cfg(struct sti_struct *sti, unsigned long rom_address,
4672     return 0;
4673     }
4674    
4675     -#ifdef CONFIG_FONTS
4676     +#ifdef CONFIG_FONT_SUPPORT
4677     static struct sti_cooked_font *
4678     sti_select_fbfont(struct sti_cooked_rom *cooked_rom, const char *fbfont_name)
4679     {
4680     diff --git a/drivers/xen/pci.c b/drivers/xen/pci.c
4681     index 188825122aae..dd9c249ea311 100644
4682     --- a/drivers/xen/pci.c
4683     +++ b/drivers/xen/pci.c
4684     @@ -26,7 +26,9 @@
4685     #include <asm/xen/hypervisor.h>
4686     #include <asm/xen/hypercall.h>
4687     #include "../pci/pci.h"
4688     +#ifdef CONFIG_PCI_MMCONFIG
4689     #include <asm/pci_x86.h>
4690     +#endif
4691    
4692     static bool __read_mostly pci_seg_supported = true;
4693    
4694     diff --git a/fs/btrfs/extent-tree.c b/fs/btrfs/extent-tree.c
4695     index 9c01509dd8ab..72d7307151c9 100644
4696     --- a/fs/btrfs/extent-tree.c
4697     +++ b/fs/btrfs/extent-tree.c
4698     @@ -7779,7 +7779,7 @@ out:
4699     */
4700     if (!for_reloc && root_dropped == false)
4701     btrfs_add_dead_root(root);
4702     - if (err)
4703     + if (err && err != -EAGAIN)
4704     btrfs_std_error(root->fs_info, err);
4705     return err;
4706     }
4707     diff --git a/fs/btrfs/inode.c b/fs/btrfs/inode.c
4708     index f1a77449d032..34ee498ff1ce 100644
4709     --- a/fs/btrfs/inode.c
4710     +++ b/fs/btrfs/inode.c
4711     @@ -60,7 +60,7 @@
4712     #include "hash.h"
4713    
4714     struct btrfs_iget_args {
4715     - u64 ino;
4716     + struct btrfs_key *location;
4717     struct btrfs_root *root;
4718     };
4719    
4720     @@ -4818,7 +4818,9 @@ again:
4721     static int btrfs_init_locked_inode(struct inode *inode, void *p)
4722     {
4723     struct btrfs_iget_args *args = p;
4724     - inode->i_ino = args->ino;
4725     + inode->i_ino = args->location->objectid;
4726     + memcpy(&BTRFS_I(inode)->location, args->location,
4727     + sizeof(*args->location));
4728     BTRFS_I(inode)->root = args->root;
4729     return 0;
4730     }
4731     @@ -4826,19 +4828,19 @@ static int btrfs_init_locked_inode(struct inode *inode, void *p)
4732     static int btrfs_find_actor(struct inode *inode, void *opaque)
4733     {
4734     struct btrfs_iget_args *args = opaque;
4735     - return args->ino == btrfs_ino(inode) &&
4736     + return args->location->objectid == BTRFS_I(inode)->location.objectid &&
4737     args->root == BTRFS_I(inode)->root;
4738     }
4739    
4740     static struct inode *btrfs_iget_locked(struct super_block *s,
4741     - u64 objectid,
4742     + struct btrfs_key *location,
4743     struct btrfs_root *root)
4744     {
4745     struct inode *inode;
4746     struct btrfs_iget_args args;
4747     - unsigned long hashval = btrfs_inode_hash(objectid, root);
4748     + unsigned long hashval = btrfs_inode_hash(location->objectid, root);
4749    
4750     - args.ino = objectid;
4751     + args.location = location;
4752     args.root = root;
4753    
4754     inode = iget5_locked(s, hashval, btrfs_find_actor,
4755     @@ -4855,13 +4857,11 @@ struct inode *btrfs_iget(struct super_block *s, struct btrfs_key *location,
4756     {
4757     struct inode *inode;
4758    
4759     - inode = btrfs_iget_locked(s, location->objectid, root);
4760     + inode = btrfs_iget_locked(s, location, root);
4761     if (!inode)
4762     return ERR_PTR(-ENOMEM);
4763    
4764     if (inode->i_state & I_NEW) {
4765     - BTRFS_I(inode)->root = root;
4766     - memcpy(&BTRFS_I(inode)->location, location, sizeof(*location));
4767     btrfs_read_locked_inode(inode);
4768     if (!is_bad_inode(inode)) {
4769     inode_tree_add(inode);
4770     diff --git a/fs/btrfs/ioctl.c b/fs/btrfs/ioctl.c
4771     index 21da5762b0b1..9f831bb3dbee 100644
4772     --- a/fs/btrfs/ioctl.c
4773     +++ b/fs/btrfs/ioctl.c
4774     @@ -1545,6 +1545,12 @@ static noinline int btrfs_ioctl_snap_create_transid(struct file *file,
4775     printk(KERN_INFO "btrfs: Snapshot src from "
4776     "another FS\n");
4777     ret = -EINVAL;
4778     + } else if (!inode_owner_or_capable(src_inode)) {
4779     + /*
4780     + * Subvolume creation is not restricted, but snapshots
4781     + * are limited to own subvolumes only
4782     + */
4783     + ret = -EPERM;
4784     } else {
4785     ret = btrfs_mksubvol(&file->f_path, name, namelen,
4786     BTRFS_I(src_inode)->root,
4787     diff --git a/fs/dcache.c b/fs/dcache.c
4788     index cb4a10690868..fdbe23027810 100644
4789     --- a/fs/dcache.c
4790     +++ b/fs/dcache.c
4791     @@ -3135,7 +3135,6 @@ restart:
4792     read_seqbegin_or_lock(&rename_lock, &seq);
4793     while (!IS_ROOT(dentry)) {
4794     struct dentry *parent = dentry->d_parent;
4795     - int error;
4796    
4797     prefetch(parent);
4798     error = prepend_name(&end, &len, &dentry->d_name);
4799     diff --git a/fs/ext4/inline.c b/fs/ext4/inline.c
4800     index bae987549dc3..7f032085cbf1 100644
4801     --- a/fs/ext4/inline.c
4802     +++ b/fs/ext4/inline.c
4803     @@ -1924,9 +1924,11 @@ void ext4_inline_data_truncate(struct inode *inode, int *has_inline)
4804     }
4805    
4806     /* Clear the content within i_blocks. */
4807     - if (i_size < EXT4_MIN_INLINE_DATA_SIZE)
4808     - memset(ext4_raw_inode(&is.iloc)->i_block + i_size, 0,
4809     - EXT4_MIN_INLINE_DATA_SIZE - i_size);
4810     + if (i_size < EXT4_MIN_INLINE_DATA_SIZE) {
4811     + void *p = (void *) ext4_raw_inode(&is.iloc)->i_block;
4812     + memset(p + i_size, 0,
4813     + EXT4_MIN_INLINE_DATA_SIZE - i_size);
4814     + }
4815    
4816     EXT4_I(inode)->i_inline_size = i_size <
4817     EXT4_MIN_INLINE_DATA_SIZE ?
4818     diff --git a/fs/hpfs/alloc.c b/fs/hpfs/alloc.c
4819     index cdb84a838068..58b5106186d0 100644
4820     --- a/fs/hpfs/alloc.c
4821     +++ b/fs/hpfs/alloc.c
4822     @@ -8,6 +8,58 @@
4823    
4824     #include "hpfs_fn.h"
4825    
4826     +static void hpfs_claim_alloc(struct super_block *s, secno sec)
4827     +{
4828     + struct hpfs_sb_info *sbi = hpfs_sb(s);
4829     + if (sbi->sb_n_free != (unsigned)-1) {
4830     + if (unlikely(!sbi->sb_n_free)) {
4831     + hpfs_error(s, "free count underflow, allocating sector %08x", sec);
4832     + sbi->sb_n_free = -1;
4833     + return;
4834     + }
4835     + sbi->sb_n_free--;
4836     + }
4837     +}
4838     +
4839     +static void hpfs_claim_free(struct super_block *s, secno sec)
4840     +{
4841     + struct hpfs_sb_info *sbi = hpfs_sb(s);
4842     + if (sbi->sb_n_free != (unsigned)-1) {
4843     + if (unlikely(sbi->sb_n_free >= sbi->sb_fs_size)) {
4844     + hpfs_error(s, "free count overflow, freeing sector %08x", sec);
4845     + sbi->sb_n_free = -1;
4846     + return;
4847     + }
4848     + sbi->sb_n_free++;
4849     + }
4850     +}
4851     +
4852     +static void hpfs_claim_dirband_alloc(struct super_block *s, secno sec)
4853     +{
4854     + struct hpfs_sb_info *sbi = hpfs_sb(s);
4855     + if (sbi->sb_n_free_dnodes != (unsigned)-1) {
4856     + if (unlikely(!sbi->sb_n_free_dnodes)) {
4857     + hpfs_error(s, "dirband free count underflow, allocating sector %08x", sec);
4858     + sbi->sb_n_free_dnodes = -1;
4859     + return;
4860     + }
4861     + sbi->sb_n_free_dnodes--;
4862     + }
4863     +}
4864     +
4865     +static void hpfs_claim_dirband_free(struct super_block *s, secno sec)
4866     +{
4867     + struct hpfs_sb_info *sbi = hpfs_sb(s);
4868     + if (sbi->sb_n_free_dnodes != (unsigned)-1) {
4869     + if (unlikely(sbi->sb_n_free_dnodes >= sbi->sb_dirband_size / 4)) {
4870     + hpfs_error(s, "dirband free count overflow, freeing sector %08x", sec);
4871     + sbi->sb_n_free_dnodes = -1;
4872     + return;
4873     + }
4874     + sbi->sb_n_free_dnodes++;
4875     + }
4876     +}
4877     +
4878     /*
4879     * Check if a sector is allocated in bitmap
4880     * This is really slow. Turned on only if chk==2
4881     @@ -203,9 +255,15 @@ secno hpfs_alloc_sector(struct super_block *s, secno near, unsigned n, int forwa
4882     }
4883     sec = 0;
4884     ret:
4885     + if (sec) {
4886     + i = 0;
4887     + do
4888     + hpfs_claim_alloc(s, sec + i);
4889     + while (unlikely(++i < n));
4890     + }
4891     if (sec && f_p) {
4892     for (i = 0; i < forward; i++) {
4893     - if (!hpfs_alloc_if_possible(s, sec + i + 1)) {
4894     + if (!hpfs_alloc_if_possible(s, sec + n + i)) {
4895     hpfs_error(s, "Prealloc doesn't work! Wanted %d, allocated at %08x, can't allocate %d", forward, sec, i);
4896     sec = 0;
4897     break;
4898     @@ -228,6 +286,7 @@ static secno alloc_in_dirband(struct super_block *s, secno near)
4899     nr >>= 2;
4900     sec = alloc_in_bmp(s, (~0x3fff) | nr, 1, 0);
4901     if (!sec) return 0;
4902     + hpfs_claim_dirband_alloc(s, sec);
4903     return ((sec & 0x3fff) << 2) + sbi->sb_dirband_start;
4904     }
4905    
4906     @@ -242,6 +301,7 @@ int hpfs_alloc_if_possible(struct super_block *s, secno sec)
4907     bmp[(sec & 0x3fff) >> 5] &= cpu_to_le32(~(1 << (sec & 0x1f)));
4908     hpfs_mark_4buffers_dirty(&qbh);
4909     hpfs_brelse4(&qbh);
4910     + hpfs_claim_alloc(s, sec);
4911     return 1;
4912     }
4913     hpfs_brelse4(&qbh);
4914     @@ -275,6 +335,7 @@ void hpfs_free_sectors(struct super_block *s, secno sec, unsigned n)
4915     return;
4916     }
4917     bmp[(sec & 0x3fff) >> 5] |= cpu_to_le32(1 << (sec & 0x1f));
4918     + hpfs_claim_free(s, sec);
4919     if (!--n) {
4920     hpfs_mark_4buffers_dirty(&qbh);
4921     hpfs_brelse4(&qbh);
4922     @@ -359,6 +420,7 @@ void hpfs_free_dnode(struct super_block *s, dnode_secno dno)
4923     bmp[ssec >> 5] |= cpu_to_le32(1 << (ssec & 0x1f));
4924     hpfs_mark_4buffers_dirty(&qbh);
4925     hpfs_brelse4(&qbh);
4926     + hpfs_claim_dirband_free(s, dno);
4927     }
4928     }
4929    
4930     @@ -366,7 +428,7 @@ struct dnode *hpfs_alloc_dnode(struct super_block *s, secno near,
4931     dnode_secno *dno, struct quad_buffer_head *qbh)
4932     {
4933     struct dnode *d;
4934     - if (hpfs_count_one_bitmap(s, hpfs_sb(s)->sb_dmap) > FREE_DNODES_ADD) {
4935     + if (hpfs_get_free_dnodes(s) > FREE_DNODES_ADD) {
4936     if (!(*dno = alloc_in_dirband(s, near)))
4937     if (!(*dno = hpfs_alloc_sector(s, near, 4, 0))) return NULL;
4938     } else {
4939     diff --git a/fs/hpfs/hpfs_fn.h b/fs/hpfs/hpfs_fn.h
4940     index 6797bf80f6e2..3ba49c080e42 100644
4941     --- a/fs/hpfs/hpfs_fn.h
4942     +++ b/fs/hpfs/hpfs_fn.h
4943     @@ -312,7 +312,7 @@ static inline struct hpfs_sb_info *hpfs_sb(struct super_block *sb)
4944     __printf(2, 3)
4945     void hpfs_error(struct super_block *, const char *, ...);
4946     int hpfs_stop_cycles(struct super_block *, int, int *, int *, char *);
4947     -unsigned hpfs_count_one_bitmap(struct super_block *, secno);
4948     +unsigned hpfs_get_free_dnodes(struct super_block *);
4949    
4950     /*
4951     * local time (HPFS) to GMT (Unix)
4952     diff --git a/fs/hpfs/super.c b/fs/hpfs/super.c
4953     index b8d01ef6f531..4534ff688b76 100644
4954     --- a/fs/hpfs/super.c
4955     +++ b/fs/hpfs/super.c
4956     @@ -121,7 +121,7 @@ static void hpfs_put_super(struct super_block *s)
4957     call_rcu(&hpfs_sb(s)->rcu, lazy_free_sbi);
4958     }
4959    
4960     -unsigned hpfs_count_one_bitmap(struct super_block *s, secno secno)
4961     +static unsigned hpfs_count_one_bitmap(struct super_block *s, secno secno)
4962     {
4963     struct quad_buffer_head qbh;
4964     unsigned long *bits;
4965     @@ -129,7 +129,7 @@ unsigned hpfs_count_one_bitmap(struct super_block *s, secno secno)
4966    
4967     bits = hpfs_map_4sectors(s, secno, &qbh, 0);
4968     if (!bits)
4969     - return 0;
4970     + return (unsigned)-1;
4971     count = bitmap_weight(bits, 2048 * BITS_PER_BYTE);
4972     hpfs_brelse4(&qbh);
4973     return count;
4974     @@ -144,30 +144,45 @@ static unsigned count_bitmaps(struct super_block *s)
4975     hpfs_prefetch_bitmap(s, n);
4976     }
4977     for (n = 0; n < n_bands; n++) {
4978     + unsigned c;
4979     hpfs_prefetch_bitmap(s, n + COUNT_RD_AHEAD);
4980     - count += hpfs_count_one_bitmap(s, le32_to_cpu(hpfs_sb(s)->sb_bmp_dir[n]));
4981     + c = hpfs_count_one_bitmap(s, le32_to_cpu(hpfs_sb(s)->sb_bmp_dir[n]));
4982     + if (c != (unsigned)-1)
4983     + count += c;
4984     }
4985     return count;
4986     }
4987    
4988     +unsigned hpfs_get_free_dnodes(struct super_block *s)
4989     +{
4990     + struct hpfs_sb_info *sbi = hpfs_sb(s);
4991     + if (sbi->sb_n_free_dnodes == (unsigned)-1) {
4992     + unsigned c = hpfs_count_one_bitmap(s, sbi->sb_dmap);
4993     + if (c == (unsigned)-1)
4994     + return 0;
4995     + sbi->sb_n_free_dnodes = c;
4996     + }
4997     + return sbi->sb_n_free_dnodes;
4998     +}
4999     +
5000     static int hpfs_statfs(struct dentry *dentry, struct kstatfs *buf)
5001     {
5002     struct super_block *s = dentry->d_sb;
5003     struct hpfs_sb_info *sbi = hpfs_sb(s);
5004     u64 id = huge_encode_dev(s->s_bdev->bd_dev);
5005     +
5006     hpfs_lock(s);
5007    
5008     - /*if (sbi->sb_n_free == -1) {*/
5009     + if (sbi->sb_n_free == (unsigned)-1)
5010     sbi->sb_n_free = count_bitmaps(s);
5011     - sbi->sb_n_free_dnodes = hpfs_count_one_bitmap(s, sbi->sb_dmap);
5012     - /*}*/
5013     +
5014     buf->f_type = s->s_magic;
5015     buf->f_bsize = 512;
5016     buf->f_blocks = sbi->sb_fs_size;
5017     buf->f_bfree = sbi->sb_n_free;
5018     buf->f_bavail = sbi->sb_n_free;
5019     buf->f_files = sbi->sb_dirband_size / 4;
5020     - buf->f_ffree = sbi->sb_n_free_dnodes;
5021     + buf->f_ffree = hpfs_get_free_dnodes(s);
5022     buf->f_fsid.val[0] = (u32)id;
5023     buf->f_fsid.val[1] = (u32)(id >> 32);
5024     buf->f_namelen = 254;
5025     diff --git a/fs/mount.h b/fs/mount.h
5026     index d64c594be6c4..a17458ca6f29 100644
5027     --- a/fs/mount.h
5028     +++ b/fs/mount.h
5029     @@ -74,7 +74,7 @@ static inline int mnt_has_parent(struct mount *mnt)
5030     static inline int is_mounted(struct vfsmount *mnt)
5031     {
5032     /* neither detached nor internal? */
5033     - return !IS_ERR_OR_NULL(real_mount(mnt));
5034     + return !IS_ERR_OR_NULL(real_mount(mnt)->mnt_ns);
5035     }
5036    
5037     extern struct mount *__lookup_mnt(struct vfsmount *, struct dentry *);
5038     diff --git a/include/linux/libata.h b/include/linux/libata.h
5039     index 9b503376738f..bec6dbe939a0 100644
5040     --- a/include/linux/libata.h
5041     +++ b/include/linux/libata.h
5042     @@ -419,6 +419,8 @@ enum {
5043     ATA_HORKAGE_MAX_SEC_LBA48 = (1 << 17), /* Set max sects to 65535 */
5044     ATA_HORKAGE_ATAPI_DMADIR = (1 << 18), /* device requires dmadir */
5045     ATA_HORKAGE_NO_NCQ_TRIM = (1 << 19), /* don't use queued TRIM */
5046     + ATA_HORKAGE_NOLPM = (1 << 20), /* don't use LPM */
5047     + ATA_HORKAGE_WD_BROKEN_LPM = (1 << 21), /* some WDs have broken LPM */
5048    
5049     /* DMA mask for user DMA control: User visible values; DO NOT
5050     renumber */
5051     diff --git a/include/linux/mmc/sdhci.h b/include/linux/mmc/sdhci.h
5052     index 3e781b8c0be7..362927c48f97 100644
5053     --- a/include/linux/mmc/sdhci.h
5054     +++ b/include/linux/mmc/sdhci.h
5055     @@ -98,6 +98,8 @@ struct sdhci_host {
5056     #define SDHCI_QUIRK2_CARD_ON_NEEDS_BUS_ON (1<<4)
5057     /* Controller has a non-standard host control register */
5058     #define SDHCI_QUIRK2_BROKEN_HOST_CONTROL (1<<5)
5059     +/* Controller does not support HS200 */
5060     +#define SDHCI_QUIRK2_BROKEN_HS200 (1<<6)
5061    
5062     int irq; /* Device IRQ */
5063     void __iomem *ioaddr; /* Mapped address */
5064     diff --git a/include/linux/usb/chipidea.h b/include/linux/usb/chipidea.h
5065     index 7d399671a566..708bd119627f 100644
5066     --- a/include/linux/usb/chipidea.h
5067     +++ b/include/linux/usb/chipidea.h
5068     @@ -24,6 +24,7 @@ struct ci_hdrc_platform_data {
5069     * but otg is not supported (no register otgsc).
5070     */
5071     #define CI_HDRC_DUAL_ROLE_NOT_OTG BIT(4)
5072     +#define CI_HDRC_IMX28_WRITE_FIX BIT(5)
5073     enum usb_dr_mode dr_mode;
5074     #define CI_HDRC_CONTROLLER_RESET_EVENT 0
5075     #define CI_HDRC_CONTROLLER_STOPPED_EVENT 1
5076     diff --git a/lib/fonts/Kconfig b/lib/fonts/Kconfig
5077     index 34fd931b54b5..4dc1b990aa23 100644
5078     --- a/lib/fonts/Kconfig
5079     +++ b/lib/fonts/Kconfig
5080     @@ -9,7 +9,7 @@ if FONT_SUPPORT
5081    
5082     config FONTS
5083     bool "Select compiled-in fonts"
5084     - depends on FRAMEBUFFER_CONSOLE || STI_CONSOLE
5085     + depends on FRAMEBUFFER_CONSOLE
5086     help
5087     Say Y here if you would like to use fonts other than the default
5088     your frame buffer console usually use.
5089     @@ -22,7 +22,7 @@ config FONTS
5090    
5091     config FONT_8x8
5092     bool "VGA 8x8 font" if FONTS
5093     - depends on FRAMEBUFFER_CONSOLE || STI_CONSOLE
5094     + depends on FRAMEBUFFER_CONSOLE
5095     default y if !SPARC && !FONTS
5096     help
5097     This is the "high resolution" font for the VGA frame buffer (the one
5098     @@ -45,7 +45,7 @@ config FONT_8x16
5099    
5100     config FONT_6x11
5101     bool "Mac console 6x11 font (not supported by all drivers)" if FONTS
5102     - depends on FRAMEBUFFER_CONSOLE || STI_CONSOLE
5103     + depends on FRAMEBUFFER_CONSOLE
5104     default y if !SPARC && !FONTS && MAC
5105     help
5106     Small console font with Macintosh-style high-half glyphs. Some Mac
5107     diff --git a/mm/mempolicy.c b/mm/mempolicy.c
5108     index 0cd2c4d4e270..e1bd99778b9d 100644
5109     --- a/mm/mempolicy.c
5110     +++ b/mm/mempolicy.c
5111     @@ -2928,7 +2928,7 @@ void mpol_to_str(char *buffer, int maxlen, struct mempolicy *pol)
5112     unsigned short mode = MPOL_DEFAULT;
5113     unsigned short flags = 0;
5114    
5115     - if (pol && pol != &default_policy) {
5116     + if (pol && pol != &default_policy && !(pol->flags & MPOL_F_MORON)) {
5117     mode = pol->mode;
5118     flags = pol->flags;
5119     }
5120     diff --git a/net/compat.c b/net/compat.c
5121     index dd32e34c1e2c..f50161fb812e 100644
5122     --- a/net/compat.c
5123     +++ b/net/compat.c
5124     @@ -780,21 +780,16 @@ asmlinkage long compat_sys_recvmmsg(int fd, struct compat_mmsghdr __user *mmsg,
5125     if (flags & MSG_CMSG_COMPAT)
5126     return -EINVAL;
5127    
5128     - if (COMPAT_USE_64BIT_TIME)
5129     - return __sys_recvmmsg(fd, (struct mmsghdr __user *)mmsg, vlen,
5130     - flags | MSG_CMSG_COMPAT,
5131     - (struct timespec *) timeout);
5132     -
5133     if (timeout == NULL)
5134     return __sys_recvmmsg(fd, (struct mmsghdr __user *)mmsg, vlen,
5135     flags | MSG_CMSG_COMPAT, NULL);
5136    
5137     - if (get_compat_timespec(&ktspec, timeout))
5138     + if (compat_get_timespec(&ktspec, timeout))
5139     return -EFAULT;
5140    
5141     datagrams = __sys_recvmmsg(fd, (struct mmsghdr __user *)mmsg, vlen,
5142     flags | MSG_CMSG_COMPAT, &ktspec);
5143     - if (datagrams > 0 && put_compat_timespec(&ktspec, timeout))
5144     + if (datagrams > 0 && compat_put_timespec(&ktspec, timeout))
5145     datagrams = -EFAULT;
5146    
5147     return datagrams;
5148     diff --git a/net/ipv4/fib_frontend.c b/net/ipv4/fib_frontend.c
5149     index d846304b7b89..c7539e22868b 100644
5150     --- a/net/ipv4/fib_frontend.c
5151     +++ b/net/ipv4/fib_frontend.c
5152     @@ -1047,6 +1047,8 @@ static int fib_netdev_event(struct notifier_block *this, unsigned long event, vo
5153     }
5154    
5155     in_dev = __in_dev_get_rtnl(dev);
5156     + if (!in_dev)
5157     + return NOTIFY_DONE;
5158    
5159     switch (event) {
5160     case NETDEV_UP:
5161     diff --git a/net/ipv4/ip_gre.c b/net/ipv4/ip_gre.c
5162     index e560ef34cf4b..d30636080a11 100644
5163     --- a/net/ipv4/ip_gre.c
5164     +++ b/net/ipv4/ip_gre.c
5165     @@ -178,7 +178,7 @@ static int ipgre_err(struct sk_buff *skb, u32 info,
5166     else
5167     itn = net_generic(net, ipgre_net_id);
5168    
5169     - iph = (const struct iphdr *)skb->data;
5170     + iph = (const struct iphdr *)(icmp_hdr(skb) + 1);
5171     t = ip_tunnel_lookup(itn, skb->dev->ifindex, tpi->flags,
5172     iph->daddr, iph->saddr, tpi->key);
5173    
5174     diff --git a/net/ipv4/ip_input.c b/net/ipv4/ip_input.c
5175     index 054a3e97d822..3d4da2c16b6a 100644
5176     --- a/net/ipv4/ip_input.c
5177     +++ b/net/ipv4/ip_input.c
5178     @@ -314,7 +314,7 @@ static int ip_rcv_finish(struct sk_buff *skb)
5179     const struct iphdr *iph = ip_hdr(skb);
5180     struct rtable *rt;
5181    
5182     - if (sysctl_ip_early_demux && !skb_dst(skb)) {
5183     + if (sysctl_ip_early_demux && !skb_dst(skb) && skb->sk == NULL) {
5184     const struct net_protocol *ipprot;
5185     int protocol = iph->protocol;
5186    
5187     diff --git a/net/ipv4/ip_tunnel.c b/net/ipv4/ip_tunnel.c
5188     index 90ff9570d7d4..471c8c1f3b67 100644
5189     --- a/net/ipv4/ip_tunnel.c
5190     +++ b/net/ipv4/ip_tunnel.c
5191     @@ -618,6 +618,7 @@ void ip_tunnel_xmit(struct sk_buff *skb, struct net_device *dev,
5192     tunnel->err_time + IPTUNNEL_ERR_TIMEO)) {
5193     tunnel->err_count--;
5194    
5195     + memset(IPCB(skb), 0, sizeof(*IPCB(skb)));
5196     dst_link_failure(skb);
5197     } else
5198     tunnel->err_count = 0;
5199     diff --git a/net/ipv6/ip6_input.c b/net/ipv6/ip6_input.c
5200     index 302d6fb1ff2b..51d54dc376f3 100644
5201     --- a/net/ipv6/ip6_input.c
5202     +++ b/net/ipv6/ip6_input.c
5203     @@ -49,7 +49,7 @@
5204    
5205     int ip6_rcv_finish(struct sk_buff *skb)
5206     {
5207     - if (sysctl_ip_early_demux && !skb_dst(skb)) {
5208     + if (sysctl_ip_early_demux && !skb_dst(skb) && skb->sk == NULL) {
5209     const struct inet6_protocol *ipprot;
5210    
5211     ipprot = rcu_dereference(inet6_protos[ipv6_hdr(skb)->nexthdr]);
5212     diff --git a/security/integrity/ima/ima_template_lib.c b/security/integrity/ima/ima_template_lib.c
5213     index c38adcc910fb..1c2a63412656 100644
5214     --- a/security/integrity/ima/ima_template_lib.c
5215     +++ b/security/integrity/ima/ima_template_lib.c
5216     @@ -255,7 +255,7 @@ int ima_eventdigest_ng_init(struct integrity_iint_cache *iint,
5217     struct evm_ima_xattr_data *xattr_value,
5218     int xattr_len, struct ima_field_data *field_data)
5219     {
5220     - u8 *cur_digest = NULL, hash_algo = HASH_ALGO__LAST;
5221     + u8 *cur_digest = NULL, hash_algo = HASH_ALGO_SHA1;
5222     u32 cur_digestsize = 0;
5223    
5224     /* If iint is NULL, we are recording a violation. */
5225     diff --git a/sound/core/init.c b/sound/core/init.c
5226     index 1351f22f651c..e3c93cd77ee7 100644
5227     --- a/sound/core/init.c
5228     +++ b/sound/core/init.c
5229     @@ -170,7 +170,7 @@ int snd_card_create(int idx, const char *xid,
5230     if (idx < 0) {
5231     for (idx2 = 0; idx2 < SNDRV_CARDS; idx2++) {
5232     /* idx == -1 == 0xffff means: take any free slot */
5233     - if (idx2 < sizeof(int) && !(idx & (1U << idx2)))
5234     + if (idx2 < 32 && !(idx & (1U << idx2)))
5235     continue;
5236     if (!test_bit(idx2, snd_cards_lock)) {
5237     if (module_slot_match(module, idx2)) {
5238     @@ -183,7 +183,7 @@ int snd_card_create(int idx, const char *xid,
5239     if (idx < 0) {
5240     for (idx2 = 0; idx2 < SNDRV_CARDS; idx2++) {
5241     /* idx == -1 == 0xffff means: take any free slot */
5242     - if (idx2 < sizeof(int) && !(idx & (1U << idx2)))
5243     + if (idx2 < 32 && !(idx & (1U << idx2)))
5244     continue;
5245     if (!test_bit(idx2, snd_cards_lock)) {
5246     if (!slots[idx2] || !*slots[idx2]) {
5247     diff --git a/sound/pci/Kconfig b/sound/pci/Kconfig
5248     index 46ed9e8ae0fd..cc9fd67a50df 100644
5249     --- a/sound/pci/Kconfig
5250     +++ b/sound/pci/Kconfig
5251     @@ -25,6 +25,7 @@ config SND_ALS300
5252     select SND_PCM
5253     select SND_AC97_CODEC
5254     select SND_OPL3_LIB
5255     + select ZONE_DMA
5256     help
5257     Say 'Y' or 'M' to include support for Avance Logic ALS300/ALS300+
5258    
5259     @@ -49,6 +50,7 @@ config SND_ALI5451
5260     tristate "ALi M5451 PCI Audio Controller"
5261     select SND_MPU401_UART
5262     select SND_AC97_CODEC
5263     + select ZONE_DMA
5264     help
5265     Say Y here to include support for the integrated AC97 sound
5266     device on motherboards using the ALi M5451 Audio Controller
5267     @@ -153,6 +155,7 @@ config SND_AZT3328
5268     select SND_PCM
5269     select SND_RAWMIDI
5270     select SND_AC97_CODEC
5271     + select ZONE_DMA
5272     help
5273     Say Y here to include support for Aztech AZF3328 (PCI168)
5274     soundcards.
5275     @@ -458,6 +461,7 @@ config SND_EMU10K1
5276     select SND_HWDEP
5277     select SND_RAWMIDI
5278     select SND_AC97_CODEC
5279     + select ZONE_DMA
5280     help
5281     Say Y to include support for Sound Blaster PCI 512, Live!,
5282     Audigy and E-mu APS (partially supported) soundcards.
5283     @@ -473,6 +477,7 @@ config SND_EMU10K1X
5284     tristate "Emu10k1X (Dell OEM Version)"
5285     select SND_AC97_CODEC
5286     select SND_RAWMIDI
5287     + select ZONE_DMA
5288     help
5289     Say Y here to include support for the Dell OEM version of the
5290     Sound Blaster Live!.
5291     @@ -506,6 +511,7 @@ config SND_ES1938
5292     select SND_OPL3_LIB
5293     select SND_MPU401_UART
5294     select SND_AC97_CODEC
5295     + select ZONE_DMA
5296     help
5297     Say Y here to include support for soundcards based on ESS Solo-1
5298     (ES1938, ES1946, ES1969) chips.
5299     @@ -517,6 +523,7 @@ config SND_ES1968
5300     tristate "ESS ES1968/1978 (Maestro-1/2/2E)"
5301     select SND_MPU401_UART
5302     select SND_AC97_CODEC
5303     + select ZONE_DMA
5304     help
5305     Say Y here to include support for soundcards based on ESS Maestro
5306     1/2/2E chips.
5307     @@ -605,6 +612,7 @@ config SND_ICE1712
5308     select SND_MPU401_UART
5309     select SND_AC97_CODEC
5310     select BITREVERSE
5311     + select ZONE_DMA
5312     help
5313     Say Y here to include support for soundcards based on the
5314     ICE1712 (Envy24) chip.
5315     @@ -692,6 +700,7 @@ config SND_LX6464ES
5316     config SND_MAESTRO3
5317     tristate "ESS Allegro/Maestro3"
5318     select SND_AC97_CODEC
5319     + select ZONE_DMA
5320     help
5321     Say Y here to include support for soundcards based on ESS Maestro 3
5322     (Allegro) chips.
5323     @@ -788,6 +797,7 @@ config SND_SIS7019
5324     tristate "SiS 7019 Audio Accelerator"
5325     depends on X86 && !X86_64
5326     select SND_AC97_CODEC
5327     + select ZONE_DMA
5328     help
5329     Say Y here to include support for the SiS 7019 Audio Accelerator.
5330    
5331     @@ -799,6 +809,7 @@ config SND_SONICVIBES
5332     select SND_OPL3_LIB
5333     select SND_MPU401_UART
5334     select SND_AC97_CODEC
5335     + select ZONE_DMA
5336     help
5337     Say Y here to include support for soundcards based on the S3
5338     SonicVibes chip.
5339     @@ -810,6 +821,7 @@ config SND_TRIDENT
5340     tristate "Trident 4D-Wave DX/NX; SiS 7018"
5341     select SND_MPU401_UART
5342     select SND_AC97_CODEC
5343     + select ZONE_DMA
5344     help
5345     Say Y here to include support for soundcards based on Trident
5346     4D-Wave DX/NX or SiS 7018 chips.
5347     diff --git a/sound/pci/hda/hda_generic.c b/sound/pci/hda/hda_generic.c
5348     index c7f6d1cab606..7d4ccfa48008 100644
5349     --- a/sound/pci/hda/hda_generic.c
5350     +++ b/sound/pci/hda/hda_generic.c
5351     @@ -2857,9 +2857,11 @@ static bool look_for_mix_leaf_ctls(struct hda_codec *codec, hda_nid_t mix_nid,
5352     if (num_conns < idx)
5353     return false;
5354     nid = list[idx];
5355     - if (!*mix_val && nid_has_volume(codec, nid, HDA_OUTPUT))
5356     + if (!*mix_val && nid_has_volume(codec, nid, HDA_OUTPUT) &&
5357     + !is_ctl_associated(codec, nid, HDA_OUTPUT, 0, NID_PATH_VOL_CTL))
5358     *mix_val = HDA_COMPOSE_AMP_VAL(nid, 3, 0, HDA_OUTPUT);
5359     - if (!*mute_val && nid_has_mute(codec, nid, HDA_OUTPUT))
5360     + if (!*mute_val && nid_has_mute(codec, nid, HDA_OUTPUT) &&
5361     + !is_ctl_associated(codec, nid, HDA_OUTPUT, 0, NID_PATH_MUTE_CTL))
5362     *mute_val = HDA_COMPOSE_AMP_VAL(nid, 3, 0, HDA_OUTPUT);
5363    
5364     return *mix_val || *mute_val;
5365     diff --git a/sound/pci/hda/patch_analog.c b/sound/pci/hda/patch_analog.c
5366     index 699262a3e07a..0170318eb220 100644
5367     --- a/sound/pci/hda/patch_analog.c
5368     +++ b/sound/pci/hda/patch_analog.c
5369     @@ -185,7 +185,7 @@ static const struct hda_codec_ops ad198x_auto_patch_ops = {
5370     };
5371    
5372    
5373     -static int ad198x_parse_auto_config(struct hda_codec *codec)
5374     +static int ad198x_parse_auto_config(struct hda_codec *codec, bool indep_hp)
5375     {
5376     struct ad198x_spec *spec = codec->spec;
5377     struct auto_pin_cfg *cfg = &spec->gen.autocfg;
5378     @@ -195,7 +195,7 @@ static int ad198x_parse_auto_config(struct hda_codec *codec)
5379     codec->no_trigger_sense = 1;
5380     codec->no_sticky_stream = 1;
5381    
5382     - spec->gen.indep_hp = 1;
5383     + spec->gen.indep_hp = indep_hp;
5384    
5385     err = snd_hda_parse_pin_defcfg(codec, cfg, NULL, 0);
5386     if (err < 0)
5387     @@ -280,11 +280,11 @@ static const struct hda_fixup ad1986a_fixups[] = {
5388     .v.pins = (const struct hda_pintbl[]) {
5389     { 0x1a, 0x02214021 }, /* headphone */
5390     { 0x1b, 0x01014011 }, /* front */
5391     - { 0x1c, 0x01013012 }, /* surround */
5392     - { 0x1d, 0x01019015 }, /* clfe */
5393     + { 0x1c, 0x01813030 }, /* line-in */
5394     + { 0x1d, 0x01a19020 }, /* rear mic */
5395     { 0x1e, 0x411111f0 }, /* N/A */
5396     { 0x1f, 0x02a190f0 }, /* mic */
5397     - { 0x20, 0x018130f0 }, /* line-in */
5398     + { 0x20, 0x411111f0 }, /* N/A */
5399     {}
5400     },
5401     },
5402     @@ -378,7 +378,7 @@ static int patch_ad1986a(struct hda_codec *codec)
5403     ad1986a_fixups);
5404     snd_hda_apply_fixup(codec, HDA_FIXUP_ACT_PRE_PROBE);
5405    
5406     - err = ad198x_parse_auto_config(codec);
5407     + err = ad198x_parse_auto_config(codec, false);
5408     if (err < 0) {
5409     snd_hda_gen_free(codec);
5410     return err;
5411     @@ -480,7 +480,7 @@ static int patch_ad1983(struct hda_codec *codec)
5412    
5413     spec->gen.beep_nid = 0x10;
5414     set_beep_amp(spec, 0x10, 0, HDA_OUTPUT);
5415     - err = ad198x_parse_auto_config(codec);
5416     + err = ad198x_parse_auto_config(codec, false);
5417     if (err < 0)
5418     goto error;
5419     err = ad1983_add_spdif_mux_ctl(codec);
5420     @@ -567,7 +567,7 @@ static int patch_ad1981(struct hda_codec *codec)
5421     snd_hda_pick_fixup(codec, NULL, ad1981_fixup_tbl, ad1981_fixups);
5422     snd_hda_apply_fixup(codec, HDA_FIXUP_ACT_PRE_PROBE);
5423    
5424     - err = ad198x_parse_auto_config(codec);
5425     + err = ad198x_parse_auto_config(codec, false);
5426     if (err < 0)
5427     goto error;
5428     err = ad1983_add_spdif_mux_ctl(codec);
5429     @@ -893,7 +893,7 @@ static int patch_ad1988(struct hda_codec *codec)
5430     snd_hda_pick_fixup(codec, ad1988_fixup_models, NULL, ad1988_fixups);
5431     snd_hda_apply_fixup(codec, HDA_FIXUP_ACT_PRE_PROBE);
5432    
5433     - err = ad198x_parse_auto_config(codec);
5434     + err = ad198x_parse_auto_config(codec, true);
5435     if (err < 0)
5436     goto error;
5437     err = ad1988_add_spdif_mux_ctl(codec);
5438     @@ -1070,7 +1070,7 @@ static int patch_ad1884(struct hda_codec *codec)
5439     snd_hda_pick_fixup(codec, NULL, ad1884_fixup_tbl, ad1884_fixups);
5440     snd_hda_apply_fixup(codec, HDA_FIXUP_ACT_PRE_PROBE);
5441    
5442     - err = ad198x_parse_auto_config(codec);
5443     + err = ad198x_parse_auto_config(codec, true);
5444     if (err < 0)
5445     goto error;
5446     err = ad1983_add_spdif_mux_ctl(codec);
5447     @@ -1112,7 +1112,7 @@ static int patch_ad1882(struct hda_codec *codec)
5448     spec->gen.mixer_merge_nid = 0x21;
5449     spec->gen.beep_nid = 0x10;
5450     set_beep_amp(spec, 0x10, 0, HDA_OUTPUT);
5451     - err = ad198x_parse_auto_config(codec);
5452     + err = ad198x_parse_auto_config(codec, true);
5453     if (err < 0)
5454     goto error;
5455     err = ad1988_add_spdif_mux_ctl(codec);
5456     diff --git a/sound/pci/hda/patch_hdmi.c b/sound/pci/hda/patch_hdmi.c
5457     index 314b77eb1216..6baac4400076 100644
5458     --- a/sound/pci/hda/patch_hdmi.c
5459     +++ b/sound/pci/hda/patch_hdmi.c
5460     @@ -129,6 +129,9 @@ struct hdmi_spec {
5461    
5462     struct hdmi_eld temp_eld;
5463     struct hdmi_ops ops;
5464     +
5465     + bool dyn_pin_out;
5466     +
5467     /*
5468     * Non-generic VIA/NVIDIA specific
5469     */
5470     @@ -497,15 +500,25 @@ static void hdmi_write_dip_byte(struct hda_codec *codec, hda_nid_t pin_nid,
5471    
5472     static void hdmi_init_pin(struct hda_codec *codec, hda_nid_t pin_nid)
5473     {
5474     + struct hdmi_spec *spec = codec->spec;
5475     + int pin_out;
5476     +
5477     /* Unmute */
5478     if (get_wcaps(codec, pin_nid) & AC_WCAP_OUT_AMP)
5479     snd_hda_codec_write(codec, pin_nid, 0,
5480     AC_VERB_SET_AMP_GAIN_MUTE, AMP_OUT_UNMUTE);
5481     - /* Enable pin out: some machines with GM965 gets broken output when
5482     - * the pin is disabled or changed while using with HDMI
5483     - */
5484     +
5485     + if (spec->dyn_pin_out)
5486     + /* Disable pin out until stream is active */
5487     + pin_out = 0;
5488     + else
5489     + /* Enable pin out: some machines with GM965 gets broken output
5490     + * when the pin is disabled or changed while using with HDMI
5491     + */
5492     + pin_out = PIN_OUT;
5493     +
5494     snd_hda_codec_write(codec, pin_nid, 0,
5495     - AC_VERB_SET_PIN_WIDGET_CONTROL, PIN_OUT);
5496     + AC_VERB_SET_PIN_WIDGET_CONTROL, pin_out);
5497     }
5498    
5499     static int hdmi_get_channel_count(struct hda_codec *codec, hda_nid_t cvt_nid)
5500     @@ -1747,6 +1760,7 @@ static int generic_hdmi_playback_pcm_prepare(struct hda_pcm_stream *hinfo,
5501     struct hdmi_spec_per_pin *per_pin = get_pin(spec, pin_idx);
5502     hda_nid_t pin_nid = per_pin->pin_nid;
5503     bool non_pcm;
5504     + int pinctl;
5505    
5506     non_pcm = check_non_pcm_per_cvt(codec, cvt_nid);
5507     mutex_lock(&per_pin->lock);
5508     @@ -1756,6 +1770,14 @@ static int generic_hdmi_playback_pcm_prepare(struct hda_pcm_stream *hinfo,
5509     hdmi_setup_audio_infoframe(codec, per_pin, non_pcm);
5510     mutex_unlock(&per_pin->lock);
5511    
5512     + if (spec->dyn_pin_out) {
5513     + pinctl = snd_hda_codec_read(codec, pin_nid, 0,
5514     + AC_VERB_GET_PIN_WIDGET_CONTROL, 0);
5515     + snd_hda_codec_write(codec, pin_nid, 0,
5516     + AC_VERB_SET_PIN_WIDGET_CONTROL,
5517     + pinctl | PIN_OUT);
5518     + }
5519     +
5520     return spec->ops.setup_stream(codec, cvt_nid, pin_nid, stream_tag, format);
5521     }
5522    
5523     @@ -1775,6 +1797,7 @@ static int hdmi_pcm_close(struct hda_pcm_stream *hinfo,
5524     int cvt_idx, pin_idx;
5525     struct hdmi_spec_per_cvt *per_cvt;
5526     struct hdmi_spec_per_pin *per_pin;
5527     + int pinctl;
5528    
5529     if (hinfo->nid) {
5530     cvt_idx = cvt_nid_to_cvt_index(spec, hinfo->nid);
5531     @@ -1791,6 +1814,14 @@ static int hdmi_pcm_close(struct hda_pcm_stream *hinfo,
5532     return -EINVAL;
5533     per_pin = get_pin(spec, pin_idx);
5534    
5535     + if (spec->dyn_pin_out) {
5536     + pinctl = snd_hda_codec_read(codec, per_pin->pin_nid, 0,
5537     + AC_VERB_GET_PIN_WIDGET_CONTROL, 0);
5538     + snd_hda_codec_write(codec, per_pin->pin_nid, 0,
5539     + AC_VERB_SET_PIN_WIDGET_CONTROL,
5540     + pinctl & ~PIN_OUT);
5541     + }
5542     +
5543     snd_hda_spdif_ctls_unassign(codec, pin_idx);
5544    
5545     mutex_lock(&per_pin->lock);
5546     @@ -2848,6 +2879,7 @@ static int patch_nvhdmi(struct hda_codec *codec)
5547     return err;
5548    
5549     spec = codec->spec;
5550     + spec->dyn_pin_out = true;
5551    
5552     spec->ops.chmap_cea_alloc_validate_get_type =
5553     nvhdmi_chmap_cea_alloc_validate_get_type;
5554     diff --git a/sound/pci/hda/patch_realtek.c b/sound/pci/hda/patch_realtek.c
5555     index c5646941539a..864e6dfaa7a4 100644
5556     --- a/sound/pci/hda/patch_realtek.c
5557     +++ b/sound/pci/hda/patch_realtek.c
5558     @@ -1780,6 +1780,7 @@ enum {
5559     ALC889_FIXUP_DAC_ROUTE,
5560     ALC889_FIXUP_MBP_VREF,
5561     ALC889_FIXUP_IMAC91_VREF,
5562     + ALC889_FIXUP_MBA11_VREF,
5563     ALC889_FIXUP_MBA21_VREF,
5564     ALC882_FIXUP_INV_DMIC,
5565     ALC882_FIXUP_NO_PRIMARY_HP,
5566     @@ -1910,6 +1911,16 @@ static void alc889_fixup_imac91_vref(struct hda_codec *codec,
5567     alc889_fixup_mac_pins(codec, nids, ARRAY_SIZE(nids));
5568     }
5569    
5570     +/* Set VREF on speaker pins on mba11 */
5571     +static void alc889_fixup_mba11_vref(struct hda_codec *codec,
5572     + const struct hda_fixup *fix, int action)
5573     +{
5574     + static hda_nid_t nids[1] = { 0x18 };
5575     +
5576     + if (action == HDA_FIXUP_ACT_INIT)
5577     + alc889_fixup_mac_pins(codec, nids, ARRAY_SIZE(nids));
5578     +}
5579     +
5580     /* Set VREF on speaker pins on mba21 */
5581     static void alc889_fixup_mba21_vref(struct hda_codec *codec,
5582     const struct hda_fixup *fix, int action)
5583     @@ -2119,6 +2130,12 @@ static const struct hda_fixup alc882_fixups[] = {
5584     .chained = true,
5585     .chain_id = ALC882_FIXUP_GPIO1,
5586     },
5587     + [ALC889_FIXUP_MBA11_VREF] = {
5588     + .type = HDA_FIXUP_FUNC,
5589     + .v.func = alc889_fixup_mba11_vref,
5590     + .chained = true,
5591     + .chain_id = ALC889_FIXUP_MBP_VREF,
5592     + },
5593     [ALC889_FIXUP_MBA21_VREF] = {
5594     .type = HDA_FIXUP_FUNC,
5595     .v.func = alc889_fixup_mba21_vref,
5596     @@ -2194,7 +2211,7 @@ static const struct snd_pci_quirk alc882_fixup_tbl[] = {
5597     SND_PCI_QUIRK(0x106b, 0x2c00, "MacbookPro rev3", ALC889_FIXUP_MBP_VREF),
5598     SND_PCI_QUIRK(0x106b, 0x3000, "iMac", ALC889_FIXUP_MBP_VREF),
5599     SND_PCI_QUIRK(0x106b, 0x3200, "iMac 7,1 Aluminum", ALC882_FIXUP_EAPD),
5600     - SND_PCI_QUIRK(0x106b, 0x3400, "MacBookAir 1,1", ALC889_FIXUP_MBP_VREF),
5601     + SND_PCI_QUIRK(0x106b, 0x3400, "MacBookAir 1,1", ALC889_FIXUP_MBA11_VREF),
5602     SND_PCI_QUIRK(0x106b, 0x3500, "MacBookAir 2,1", ALC889_FIXUP_MBA21_VREF),
5603     SND_PCI_QUIRK(0x106b, 0x3600, "Macbook 3,1", ALC889_FIXUP_MBP_VREF),
5604     SND_PCI_QUIRK(0x106b, 0x3800, "MacbookPro 4,1", ALC889_FIXUP_MBP_VREF),
5605     @@ -3526,6 +3543,15 @@ static void alc_fixup_headset_mode_alc255(struct hda_codec *codec,
5606     alc_fixup_headset_mode(codec, fix, action);
5607     }
5608    
5609     +static void alc_fixup_auto_mute_via_amp(struct hda_codec *codec,
5610     + const struct hda_fixup *fix, int action)
5611     +{
5612     + if (action == HDA_FIXUP_ACT_PRE_PROBE) {
5613     + struct alc_spec *spec = codec->spec;
5614     + spec->gen.auto_mute_via_amp = 1;
5615     + }
5616     +}
5617     +
5618     static void alc_fixup_headset_mode_alc668(struct hda_codec *codec,
5619     const struct hda_fixup *fix, int action)
5620     {
5621     @@ -4247,7 +4273,8 @@ static const struct snd_pci_quirk alc269_fixup_tbl[] = {
5622     SND_PCI_QUIRK(0x1028, 0x0606, "Dell", ALC269_FIXUP_DELL1_MIC_NO_PRESENCE),
5623     SND_PCI_QUIRK(0x1028, 0x0608, "Dell", ALC269_FIXUP_DELL1_MIC_NO_PRESENCE),
5624     SND_PCI_QUIRK(0x1028, 0x0609, "Dell", ALC269_FIXUP_DELL1_MIC_NO_PRESENCE),
5625     - SND_PCI_QUIRK(0x1028, 0x0610, "Dell", ALC269_FIXUP_DELL1_MIC_NO_PRESENCE),
5626     + SND_PCI_QUIRK(0x1028, 0x060f, "Dell", ALC269_FIXUP_DELL3_MIC_NO_PRESENCE),
5627     + SND_PCI_QUIRK(0x1028, 0x0610, "Dell", ALC269_FIXUP_DELL3_MIC_NO_PRESENCE),
5628     SND_PCI_QUIRK(0x1028, 0x0613, "Dell", ALC269_FIXUP_DELL1_MIC_NO_PRESENCE),
5629     SND_PCI_QUIRK(0x1028, 0x0614, "Dell Inspiron 3135", ALC269_FIXUP_DELL1_MIC_NO_PRESENCE),
5630     SND_PCI_QUIRK(0x1028, 0x0616, "Dell Vostro 5470", ALC290_FIXUP_MONO_SPEAKERS),
5631     @@ -4257,6 +4284,12 @@ static const struct snd_pci_quirk alc269_fixup_tbl[] = {
5632     SND_PCI_QUIRK(0x1028, 0x063e, "Dell", ALC269_FIXUP_DELL1_MIC_NO_PRESENCE),
5633     SND_PCI_QUIRK(0x1028, 0x063f, "Dell", ALC255_FIXUP_DELL1_MIC_NO_PRESENCE),
5634     SND_PCI_QUIRK(0x1028, 0x0640, "Dell", ALC255_FIXUP_DELL1_MIC_NO_PRESENCE),
5635     + SND_PCI_QUIRK(0x1028, 0x064d, "Dell", ALC255_FIXUP_DELL1_MIC_NO_PRESENCE),
5636     + SND_PCI_QUIRK(0x1028, 0x0651, "Dell", ALC255_FIXUP_DELL1_MIC_NO_PRESENCE),
5637     + SND_PCI_QUIRK(0x1028, 0x0652, "Dell", ALC255_FIXUP_DELL1_MIC_NO_PRESENCE),
5638     + SND_PCI_QUIRK(0x1028, 0x0653, "Dell", ALC255_FIXUP_DELL1_MIC_NO_PRESENCE),
5639     + SND_PCI_QUIRK(0x1028, 0x0658, "Dell", ALC269_FIXUP_DELL1_MIC_NO_PRESENCE),
5640     + SND_PCI_QUIRK(0x1028, 0x0662, "Dell", ALC255_FIXUP_DELL1_MIC_NO_PRESENCE),
5641     SND_PCI_QUIRK(0x1028, 0x15cc, "Dell X5 Precision", ALC269_FIXUP_DELL2_MIC_NO_PRESENCE),
5642     SND_PCI_QUIRK(0x1028, 0x15cd, "Dell X5 Precision", ALC269_FIXUP_DELL2_MIC_NO_PRESENCE),
5643     SND_PCI_QUIRK(0x103c, 0x1586, "HP", ALC269_FIXUP_HP_MUTE_LED_MIC2),
5644     @@ -4841,6 +4874,7 @@ enum {
5645     ALC662_FIXUP_BASS_CHMAP,
5646     ALC662_FIXUP_BASS_1A,
5647     ALC662_FIXUP_BASS_1A_CHMAP,
5648     + ALC668_FIXUP_AUTO_MUTE,
5649     };
5650    
5651     static const struct hda_fixup alc662_fixups[] = {
5652     @@ -5001,6 +5035,12 @@ static const struct hda_fixup alc662_fixups[] = {
5653     .type = HDA_FIXUP_FUNC,
5654     .v.func = alc_fixup_inv_dmic_0x12,
5655     },
5656     + [ALC668_FIXUP_AUTO_MUTE] = {
5657     + .type = HDA_FIXUP_FUNC,
5658     + .v.func = alc_fixup_auto_mute_via_amp,
5659     + .chained = true,
5660     + .chain_id = ALC668_FIXUP_DELL_MIC_NO_PRESENCE
5661     + },
5662     [ALC668_FIXUP_DELL_MIC_NO_PRESENCE] = {
5663     .type = HDA_FIXUP_PINS,
5664     .v.pins = (const struct hda_pintbl[]) {
5665     @@ -5046,11 +5086,12 @@ static const struct snd_pci_quirk alc662_fixup_tbl[] = {
5666     SND_PCI_QUIRK(0x1025, 0x038b, "Acer Aspire 8943G", ALC662_FIXUP_ASPIRE),
5667     SND_PCI_QUIRK(0x1028, 0x05d8, "Dell", ALC668_FIXUP_DELL_MIC_NO_PRESENCE),
5668     SND_PCI_QUIRK(0x1028, 0x05db, "Dell", ALC668_FIXUP_DELL_MIC_NO_PRESENCE),
5669     - SND_PCI_QUIRK(0x1028, 0x0623, "Dell", ALC668_FIXUP_DELL_MIC_NO_PRESENCE),
5670     - SND_PCI_QUIRK(0x1028, 0x0624, "Dell", ALC668_FIXUP_DELL_MIC_NO_PRESENCE),
5671     + SND_PCI_QUIRK(0x1028, 0x0623, "Dell", ALC668_FIXUP_AUTO_MUTE),
5672     + SND_PCI_QUIRK(0x1028, 0x0624, "Dell", ALC668_FIXUP_AUTO_MUTE),
5673     SND_PCI_QUIRK(0x1028, 0x0625, "Dell", ALC668_FIXUP_DELL_MIC_NO_PRESENCE),
5674     SND_PCI_QUIRK(0x1028, 0x0626, "Dell", ALC668_FIXUP_DELL_MIC_NO_PRESENCE),
5675     - SND_PCI_QUIRK(0x1028, 0x0628, "Dell", ALC668_FIXUP_DELL_MIC_NO_PRESENCE),
5676     + SND_PCI_QUIRK(0x1028, 0x0628, "Dell", ALC668_FIXUP_AUTO_MUTE),
5677     + SND_PCI_QUIRK(0x1028, 0x064e, "Dell", ALC668_FIXUP_DELL_MIC_NO_PRESENCE),
5678     SND_PCI_QUIRK(0x103c, 0x1632, "HP RP5800", ALC662_FIXUP_HP_RP5800),
5679     SND_PCI_QUIRK(0x1043, 0x11cd, "Asus N550", ALC662_FIXUP_BASS_1A_CHMAP),
5680     SND_PCI_QUIRK(0x1043, 0x1477, "ASUS N56VZ", ALC662_FIXUP_BASS_CHMAP),
5681     diff --git a/sound/pci/rme9652/rme9652.c b/sound/pci/rme9652/rme9652.c
5682     index b96d9e1adf6d..3717f2dd30be 100644
5683     --- a/sound/pci/rme9652/rme9652.c
5684     +++ b/sound/pci/rme9652/rme9652.c
5685     @@ -285,7 +285,7 @@ static char channel_map_9636_ds[26] = {
5686     /* ADAT channels are remapped */
5687     1, 3, 5, 7, 9, 11, 13, 15,
5688     /* channels 8 and 9 are S/PDIF */
5689     - 24, 25
5690     + 24, 25,
5691     /* others don't exist */
5692     -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1
5693     };
5694     diff --git a/sound/soc/codecs/adau1701.c b/sound/soc/codecs/adau1701.c
5695     index ebff1128be59..adee866f463f 100644
5696     --- a/sound/soc/codecs/adau1701.c
5697     +++ b/sound/soc/codecs/adau1701.c
5698     @@ -71,7 +71,7 @@
5699    
5700     #define ADAU1701_SEROCTL_WORD_LEN_24 0x0000
5701     #define ADAU1701_SEROCTL_WORD_LEN_20 0x0001
5702     -#define ADAU1701_SEROCTL_WORD_LEN_16 0x0010
5703     +#define ADAU1701_SEROCTL_WORD_LEN_16 0x0002
5704     #define ADAU1701_SEROCTL_WORD_LEN_MASK 0x0003
5705    
5706     #define ADAU1701_AUXNPOW_VBPD 0x40
5707     diff --git a/sound/soc/codecs/tlv320aic32x4.c b/sound/soc/codecs/tlv320aic32x4.c
5708     index 18cdcca9014c..385dec16eb8a 100644
5709     --- a/sound/soc/codecs/tlv320aic32x4.c
5710     +++ b/sound/soc/codecs/tlv320aic32x4.c
5711     @@ -267,8 +267,8 @@ static const struct regmap_range_cfg aic32x4_regmap_pages[] = {
5712     .selector_mask = 0xff,
5713     .window_start = 0,
5714     .window_len = 128,
5715     - .range_min = AIC32X4_PAGE1,
5716     - .range_max = AIC32X4_PAGE1 + 127,
5717     + .range_min = 0,
5718     + .range_max = AIC32X4_RMICPGAVOL,
5719     },
5720     };
5721    
5722     diff --git a/sound/soc/codecs/wm5110.c b/sound/soc/codecs/wm5110.c
5723     index 0ab2dc296474..c4c9ed7acd78 100644
5724     --- a/sound/soc/codecs/wm5110.c
5725     +++ b/sound/soc/codecs/wm5110.c
5726     @@ -43,6 +43,54 @@ static const struct reg_default wm5110_sysclk_revd_patch[] = {
5727     { 0x3133, 0x1201 },
5728     { 0x3183, 0x1501 },
5729     { 0x31D3, 0x1401 },
5730     + { 0x0049, 0x01ea },
5731     + { 0x004a, 0x01f2 },
5732     + { 0x0057, 0x01e7 },
5733     + { 0x0058, 0x01fb },
5734     + { 0x33ce, 0xc4f5 },
5735     + { 0x33cf, 0x1361 },
5736     + { 0x33d0, 0x0402 },
5737     + { 0x33d1, 0x4700 },
5738     + { 0x33d2, 0x026d },
5739     + { 0x33d3, 0xff00 },
5740     + { 0x33d4, 0x026d },
5741     + { 0x33d5, 0x0101 },
5742     + { 0x33d6, 0xc4f5 },
5743     + { 0x33d7, 0x0361 },
5744     + { 0x33d8, 0x0402 },
5745     + { 0x33d9, 0x6701 },
5746     + { 0x33da, 0xc4f5 },
5747     + { 0x33db, 0x136f },
5748     + { 0x33dc, 0xc4f5 },
5749     + { 0x33dd, 0x134f },
5750     + { 0x33de, 0xc4f5 },
5751     + { 0x33df, 0x131f },
5752     + { 0x33e0, 0x026d },
5753     + { 0x33e1, 0x4f01 },
5754     + { 0x33e2, 0x026d },
5755     + { 0x33e3, 0xf100 },
5756     + { 0x33e4, 0x026d },
5757     + { 0x33e5, 0x0001 },
5758     + { 0x33e6, 0xc4f5 },
5759     + { 0x33e7, 0x0361 },
5760     + { 0x33e8, 0x0402 },
5761     + { 0x33e9, 0x6601 },
5762     + { 0x33ea, 0xc4f5 },
5763     + { 0x33eb, 0x136f },
5764     + { 0x33ec, 0xc4f5 },
5765     + { 0x33ed, 0x134f },
5766     + { 0x33ee, 0xc4f5 },
5767     + { 0x33ef, 0x131f },
5768     + { 0x33f0, 0x026d },
5769     + { 0x33f1, 0x4e01 },
5770     + { 0x33f2, 0x026d },
5771     + { 0x33f3, 0xf000 },
5772     + { 0x33f6, 0xc4f5 },
5773     + { 0x33f7, 0x1361 },
5774     + { 0x33f8, 0x0402 },
5775     + { 0x33f9, 0x4600 },
5776     + { 0x33fa, 0x026d },
5777     + { 0x33fb, 0xfe00 },
5778     };
5779    
5780     static int wm5110_sysclk_ev(struct snd_soc_dapm_widget *w,
5781     diff --git a/tools/perf/util/session.c b/tools/perf/util/session.c
5782     index f36d24a02445..6bee5f6dfa37 100644
5783     --- a/tools/perf/util/session.c
5784     +++ b/tools/perf/util/session.c
5785     @@ -851,6 +851,7 @@ static struct machine *
5786     struct perf_sample *sample)
5787     {
5788     const u8 cpumode = event->header.misc & PERF_RECORD_MISC_CPUMODE_MASK;
5789     + struct machine *machine;
5790    
5791     if (perf_guest &&
5792     ((cpumode == PERF_RECORD_MISC_GUEST_KERNEL) ||
5793     @@ -863,7 +864,11 @@ static struct machine *
5794     else
5795     pid = sample->pid;
5796    
5797     - return perf_session__findnew_machine(session, pid);
5798     + machine = perf_session__find_machine(session, pid);
5799     + if (!machine)
5800     + machine = perf_session__findnew_machine(session,
5801     + DEFAULT_GUEST_KERNEL_ID);
5802     + return machine;
5803     }
5804    
5805     return &session->machines.host;