Magellan Linux

Annotation of /trunk/kernel-lts/patches-3.10/0123-3.10.24-all-fixes.patch

Parent Directory Parent Directory | Revision Log Revision Log


Revision 2395 - (hide annotations) (download)
Mon Feb 3 12:41:31 2014 UTC (10 years, 3 months ago) by niro
File size: 65409 byte(s)
-copied
1 niro 2351 diff --git a/Makefile b/Makefile
2     index c6d2ec5e9580..ae6ccebf8af4 100644
3     --- a/Makefile
4     +++ b/Makefile
5     @@ -1,6 +1,6 @@
6     VERSION = 3
7     PATCHLEVEL = 10
8     -SUBLEVEL = 23
9     +SUBLEVEL = 24
10     EXTRAVERSION =
11     NAME = TOSSUG Baby Fish
12    
13     diff --git a/arch/arm/boot/dts/armada-370-xp.dtsi b/arch/arm/boot/dts/armada-370-xp.dtsi
14     index 550eb772c30e..4d12d2347c15 100644
15     --- a/arch/arm/boot/dts/armada-370-xp.dtsi
16     +++ b/arch/arm/boot/dts/armada-370-xp.dtsi
17     @@ -51,7 +51,7 @@
18    
19     coherency-fabric@20200 {
20     compatible = "marvell,coherency-fabric";
21     - reg = <0x20200 0xb0>, <0x21810 0x1c>;
22     + reg = <0x20200 0xb0>, <0x21010 0x1c>;
23     };
24    
25     serial@12000 {
26     diff --git a/arch/arm/boot/dts/armada-xp-mv78230.dtsi b/arch/arm/boot/dts/armada-xp-mv78230.dtsi
27     index f8eaa383e07f..f94cdbc579cb 100644
28     --- a/arch/arm/boot/dts/armada-xp-mv78230.dtsi
29     +++ b/arch/arm/boot/dts/armada-xp-mv78230.dtsi
30     @@ -81,7 +81,7 @@
31     /*
32     * MV78230 has 2 PCIe units Gen2.0: One unit can be
33     * configured as x4 or quad x1 lanes. One unit is
34     - * x4/x1.
35     + * x1 only.
36     */
37     pcie-controller {
38     compatible = "marvell,armada-xp-pcie";
39     @@ -94,10 +94,10 @@
40     bus-range = <0x00 0xff>;
41    
42     ranges = <0x82000000 0 0x40000 0x40000 0 0x00002000 /* Port 0.0 registers */
43     - 0x82000000 0 0x42000 0x42000 0 0x00002000 /* Port 2.0 registers */
44     0x82000000 0 0x44000 0x44000 0 0x00002000 /* Port 0.1 registers */
45     0x82000000 0 0x48000 0x48000 0 0x00002000 /* Port 0.2 registers */
46     0x82000000 0 0x4c000 0x4c000 0 0x00002000 /* Port 0.3 registers */
47     + 0x82000000 0 0x80000 0x80000 0 0x00002000 /* Port 1.0 registers */
48     0x82000000 0 0xe0000000 0xe0000000 0 0x08000000 /* non-prefetchable memory */
49     0x81000000 0 0 0xe8000000 0 0x00100000>; /* downstream I/O */
50    
51     @@ -165,19 +165,19 @@
52     status = "disabled";
53     };
54    
55     - pcie@9,0 {
56     + pcie@5,0 {
57     device_type = "pci";
58     - assigned-addresses = <0x82000800 0 0x42000 0 0x2000>;
59     - reg = <0x4800 0 0 0 0>;
60     + assigned-addresses = <0x82000800 0 0x80000 0 0x2000>;
61     + reg = <0x2800 0 0 0 0>;
62     #address-cells = <3>;
63     #size-cells = <2>;
64     #interrupt-cells = <1>;
65     ranges;
66     interrupt-map-mask = <0 0 0 0>;
67     - interrupt-map = <0 0 0 0 &mpic 99>;
68     - marvell,pcie-port = <2>;
69     + interrupt-map = <0 0 0 0 &mpic 62>;
70     + marvell,pcie-port = <1>;
71     marvell,pcie-lane = <0>;
72     - clocks = <&gateclk 26>;
73     + clocks = <&gateclk 9>;
74     status = "disabled";
75     };
76     };
77     diff --git a/arch/arm/boot/dts/armada-xp-mv78260.dtsi b/arch/arm/boot/dts/armada-xp-mv78260.dtsi
78     index f4029f015aff..55cdd58c155f 100644
79     --- a/arch/arm/boot/dts/armada-xp-mv78260.dtsi
80     +++ b/arch/arm/boot/dts/armada-xp-mv78260.dtsi
81     @@ -101,7 +101,7 @@
82     /*
83     * MV78260 has 3 PCIe units Gen2.0: Two units can be
84     * configured as x4 or quad x1 lanes. One unit is
85     - * x4/x1.
86     + * x4 only.
87     */
88     pcie-controller {
89     compatible = "marvell,armada-xp-pcie";
90     @@ -119,7 +119,9 @@
91     0x82000000 0 0x48000 0x48000 0 0x00002000 /* Port 0.2 registers */
92     0x82000000 0 0x4c000 0x4c000 0 0x00002000 /* Port 0.3 registers */
93     0x82000000 0 0x80000 0x80000 0 0x00002000 /* Port 1.0 registers */
94     - 0x82000000 0 0x82000 0x82000 0 0x00002000 /* Port 3.0 registers */
95     + 0x82000000 0 0x84000 0x84000 0 0x00002000 /* Port 1.1 registers */
96     + 0x82000000 0 0x88000 0x88000 0 0x00002000 /* Port 1.2 registers */
97     + 0x82000000 0 0x8c000 0x8c000 0 0x00002000 /* Port 1.3 registers */
98     0x82000000 0 0xe0000000 0xe0000000 0 0x08000000 /* non-prefetchable memory */
99     0x81000000 0 0 0xe8000000 0 0x00100000>; /* downstream I/O */
100    
101     @@ -187,35 +189,83 @@
102     status = "disabled";
103     };
104    
105     - pcie@9,0 {
106     + pcie@5,0 {
107     device_type = "pci";
108     - assigned-addresses = <0x82000800 0 0x42000 0 0x2000>;
109     - reg = <0x4800 0 0 0 0>;
110     + assigned-addresses = <0x82000800 0 0x80000 0 0x2000>;
111     + reg = <0x2800 0 0 0 0>;
112     #address-cells = <3>;
113     #size-cells = <2>;
114     #interrupt-cells = <1>;
115     ranges;
116     interrupt-map-mask = <0 0 0 0>;
117     - interrupt-map = <0 0 0 0 &mpic 99>;
118     - marvell,pcie-port = <2>;
119     + interrupt-map = <0 0 0 0 &mpic 62>;
120     + marvell,pcie-port = <1>;
121     marvell,pcie-lane = <0>;
122     - clocks = <&gateclk 26>;
123     + clocks = <&gateclk 9>;
124     + status = "disabled";
125     + };
126     +
127     + pcie@6,0 {
128     + device_type = "pci";
129     + assigned-addresses = <0x82000800 0 0x84000 0 0x2000>;
130     + reg = <0x3000 0 0 0 0>;
131     + #address-cells = <3>;
132     + #size-cells = <2>;
133     + #interrupt-cells = <1>;
134     + ranges;
135     + interrupt-map-mask = <0 0 0 0>;
136     + interrupt-map = <0 0 0 0 &mpic 63>;
137     + marvell,pcie-port = <1>;
138     + marvell,pcie-lane = <1>;
139     + clocks = <&gateclk 10>;
140     + status = "disabled";
141     + };
142     +
143     + pcie@7,0 {
144     + device_type = "pci";
145     + assigned-addresses = <0x82000800 0 0x88000 0 0x2000>;
146     + reg = <0x3800 0 0 0 0>;
147     + #address-cells = <3>;
148     + #size-cells = <2>;
149     + #interrupt-cells = <1>;
150     + ranges;
151     + interrupt-map-mask = <0 0 0 0>;
152     + interrupt-map = <0 0 0 0 &mpic 64>;
153     + marvell,pcie-port = <1>;
154     + marvell,pcie-lane = <2>;
155     + clocks = <&gateclk 11>;
156     status = "disabled";
157     };
158    
159     - pcie@10,0 {
160     + pcie@8,0 {
161     device_type = "pci";
162     - assigned-addresses = <0x82000800 0 0x82000 0 0x2000>;
163     - reg = <0x5000 0 0 0 0>;
164     + assigned-addresses = <0x82000800 0 0x8c000 0 0x2000>;
165     + reg = <0x4000 0 0 0 0>;
166     #address-cells = <3>;
167     #size-cells = <2>;
168     #interrupt-cells = <1>;
169     ranges;
170     interrupt-map-mask = <0 0 0 0>;
171     - interrupt-map = <0 0 0 0 &mpic 103>;
172     - marvell,pcie-port = <3>;
173     + interrupt-map = <0 0 0 0 &mpic 65>;
174     + marvell,pcie-port = <1>;
175     + marvell,pcie-lane = <3>;
176     + clocks = <&gateclk 12>;
177     + status = "disabled";
178     + };
179     +
180     + pcie@9,0 {
181     + device_type = "pci";
182     + assigned-addresses = <0x82000800 0 0x42000 0 0x2000>;
183     + reg = <0x4800 0 0 0 0>;
184     + #address-cells = <3>;
185     + #size-cells = <2>;
186     + #interrupt-cells = <1>;
187     + ranges;
188     + interrupt-map-mask = <0 0 0 0>;
189     + interrupt-map = <0 0 0 0 &mpic 99>;
190     + marvell,pcie-port = <2>;
191     marvell,pcie-lane = <0>;
192     - clocks = <&gateclk 27>;
193     + clocks = <&gateclk 26>;
194     status = "disabled";
195     };
196     };
197     diff --git a/arch/arm/include/asm/pgtable.h b/arch/arm/include/asm/pgtable.h
198     index 9bcd262a9008..5aac06fcc97e 100644
199     --- a/arch/arm/include/asm/pgtable.h
200     +++ b/arch/arm/include/asm/pgtable.h
201     @@ -58,7 +58,7 @@ extern void __pgd_error(const char *file, int line, pgd_t);
202     * mapping to be mapped at. This is particularly important for
203     * non-high vector CPUs.
204     */
205     -#define FIRST_USER_ADDRESS PAGE_SIZE
206     +#define FIRST_USER_ADDRESS (PAGE_SIZE * 2)
207    
208     /*
209     * Use TASK_SIZE as the ceiling argument for free_pgtables() and
210     diff --git a/arch/arm/mach-at91/sama5d3.c b/arch/arm/mach-at91/sama5d3.c
211     index 3ea86428ee09..a28873fe3049 100644
212     --- a/arch/arm/mach-at91/sama5d3.c
213     +++ b/arch/arm/mach-at91/sama5d3.c
214     @@ -95,19 +95,19 @@ static struct clk twi0_clk = {
215     .name = "twi0_clk",
216     .pid = SAMA5D3_ID_TWI0,
217     .type = CLK_TYPE_PERIPHERAL,
218     - .div = AT91_PMC_PCR_DIV2,
219     + .div = AT91_PMC_PCR_DIV8,
220     };
221     static struct clk twi1_clk = {
222     .name = "twi1_clk",
223     .pid = SAMA5D3_ID_TWI1,
224     .type = CLK_TYPE_PERIPHERAL,
225     - .div = AT91_PMC_PCR_DIV2,
226     + .div = AT91_PMC_PCR_DIV8,
227     };
228     static struct clk twi2_clk = {
229     .name = "twi2_clk",
230     .pid = SAMA5D3_ID_TWI2,
231     .type = CLK_TYPE_PERIPHERAL,
232     - .div = AT91_PMC_PCR_DIV2,
233     + .div = AT91_PMC_PCR_DIV8,
234     };
235     static struct clk mmc0_clk = {
236     .name = "mci0_clk",
237     diff --git a/arch/arm/mach-footbridge/common.c b/arch/arm/mach-footbridge/common.c
238     index a42b369bc439..95d0b6e6438b 100644
239     --- a/arch/arm/mach-footbridge/common.c
240     +++ b/arch/arm/mach-footbridge/common.c
241     @@ -15,6 +15,7 @@
242     #include <linux/init.h>
243     #include <linux/io.h>
244     #include <linux/spinlock.h>
245     +#include <video/vga.h>
246    
247     #include <asm/pgtable.h>
248     #include <asm/page.h>
249     @@ -196,6 +197,8 @@ void __init footbridge_map_io(void)
250     iotable_init(ebsa285_host_io_desc, ARRAY_SIZE(ebsa285_host_io_desc));
251     pci_map_io_early(__phys_to_pfn(DC21285_PCI_IO));
252     }
253     +
254     + vga_base = PCIMEM_BASE;
255     }
256    
257     void footbridge_restart(char mode, const char *cmd)
258     diff --git a/arch/arm/mach-footbridge/dc21285.c b/arch/arm/mach-footbridge/dc21285.c
259     index 3490a24f969e..7c2fdae9a38b 100644
260     --- a/arch/arm/mach-footbridge/dc21285.c
261     +++ b/arch/arm/mach-footbridge/dc21285.c
262     @@ -18,7 +18,6 @@
263     #include <linux/irq.h>
264     #include <linux/io.h>
265     #include <linux/spinlock.h>
266     -#include <video/vga.h>
267    
268     #include <asm/irq.h>
269     #include <asm/mach/pci.h>
270     @@ -291,7 +290,6 @@ void __init dc21285_preinit(void)
271     int cfn_mode;
272    
273     pcibios_min_mem = 0x81000000;
274     - vga_base = PCIMEM_BASE;
275    
276     mem_size = (unsigned int)high_memory - PAGE_OFFSET;
277     for (mem_mask = 0x00100000; mem_mask < 0x10000000; mem_mask <<= 1)
278     diff --git a/arch/arm/mach-footbridge/ebsa285.c b/arch/arm/mach-footbridge/ebsa285.c
279     index b08243500e2e..1a7235fb52ac 100644
280     --- a/arch/arm/mach-footbridge/ebsa285.c
281     +++ b/arch/arm/mach-footbridge/ebsa285.c
282     @@ -30,21 +30,24 @@ static const struct {
283     const char *name;
284     const char *trigger;
285     } ebsa285_leds[] = {
286     - { "ebsa285:amber", "heartbeat", },
287     - { "ebsa285:green", "cpu0", },
288     + { "ebsa285:amber", "cpu0", },
289     + { "ebsa285:green", "heartbeat", },
290     { "ebsa285:red",},
291     };
292    
293     +static unsigned char hw_led_state;
294     +
295     static void ebsa285_led_set(struct led_classdev *cdev,
296     enum led_brightness b)
297     {
298     struct ebsa285_led *led = container_of(cdev,
299     struct ebsa285_led, cdev);
300    
301     - if (b != LED_OFF)
302     - *XBUS_LEDS |= led->mask;
303     + if (b == LED_OFF)
304     + hw_led_state |= led->mask;
305     else
306     - *XBUS_LEDS &= ~led->mask;
307     + hw_led_state &= ~led->mask;
308     + *XBUS_LEDS = hw_led_state;
309     }
310    
311     static enum led_brightness ebsa285_led_get(struct led_classdev *cdev)
312     @@ -52,18 +55,19 @@ static enum led_brightness ebsa285_led_get(struct led_classdev *cdev)
313     struct ebsa285_led *led = container_of(cdev,
314     struct ebsa285_led, cdev);
315    
316     - return (*XBUS_LEDS & led->mask) ? LED_FULL : LED_OFF;
317     + return hw_led_state & led->mask ? LED_OFF : LED_FULL;
318     }
319    
320     static int __init ebsa285_leds_init(void)
321     {
322     int i;
323    
324     - if (machine_is_ebsa285())
325     + if (!machine_is_ebsa285())
326     return -ENODEV;
327    
328     - /* 3 LEDS All ON */
329     - *XBUS_LEDS |= XBUS_LED_AMBER | XBUS_LED_GREEN | XBUS_LED_RED;
330     + /* 3 LEDS all off */
331     + hw_led_state = XBUS_LED_AMBER | XBUS_LED_GREEN | XBUS_LED_RED;
332     + *XBUS_LEDS = hw_led_state;
333    
334     for (i = 0; i < ARRAY_SIZE(ebsa285_leds); i++) {
335     struct ebsa285_led *led;
336     diff --git a/arch/arm/mm/mmap.c b/arch/arm/mm/mmap.c
337     index 10062ceadd1c..f0ef2f7d4ad7 100644
338     --- a/arch/arm/mm/mmap.c
339     +++ b/arch/arm/mm/mmap.c
340     @@ -146,7 +146,7 @@ arch_get_unmapped_area_topdown(struct file *filp, const unsigned long addr0,
341    
342     info.flags = VM_UNMAPPED_AREA_TOPDOWN;
343     info.length = len;
344     - info.low_limit = PAGE_SIZE;
345     + info.low_limit = FIRST_USER_ADDRESS;
346     info.high_limit = mm->mmap_base;
347     info.align_mask = do_align ? (PAGE_MASK & (SHMLBA - 1)) : 0;
348     info.align_offset = pgoff << PAGE_SHIFT;
349     diff --git a/arch/arm/mm/pgd.c b/arch/arm/mm/pgd.c
350     index 0acb089d0f70..1046b373d1ae 100644
351     --- a/arch/arm/mm/pgd.c
352     +++ b/arch/arm/mm/pgd.c
353     @@ -87,7 +87,8 @@ pgd_t *pgd_alloc(struct mm_struct *mm)
354     init_pud = pud_offset(init_pgd, 0);
355     init_pmd = pmd_offset(init_pud, 0);
356     init_pte = pte_offset_map(init_pmd, 0);
357     - set_pte_ext(new_pte, *init_pte, 0);
358     + set_pte_ext(new_pte + 0, init_pte[0], 0);
359     + set_pte_ext(new_pte + 1, init_pte[1], 0);
360     pte_unmap(init_pte);
361     pte_unmap(new_pte);
362     }
363     diff --git a/arch/parisc/kernel/sys_parisc.c b/arch/parisc/kernel/sys_parisc.c
364     index 5dfd248e3f1a..0d3a9d4927b5 100644
365     --- a/arch/parisc/kernel/sys_parisc.c
366     +++ b/arch/parisc/kernel/sys_parisc.c
367     @@ -61,8 +61,15 @@ static int get_offset(struct address_space *mapping)
368     return (unsigned long) mapping >> 8;
369     }
370    
371     -static unsigned long get_shared_area(struct address_space *mapping,
372     - unsigned long addr, unsigned long len, unsigned long pgoff)
373     +static unsigned long shared_align_offset(struct file *filp, unsigned long pgoff)
374     +{
375     + struct address_space *mapping = filp ? filp->f_mapping : NULL;
376     +
377     + return (get_offset(mapping) + pgoff) << PAGE_SHIFT;
378     +}
379     +
380     +static unsigned long get_shared_area(struct file *filp, unsigned long addr,
381     + unsigned long len, unsigned long pgoff)
382     {
383     struct vm_unmapped_area_info info;
384    
385     @@ -71,7 +78,7 @@ static unsigned long get_shared_area(struct address_space *mapping,
386     info.low_limit = PAGE_ALIGN(addr);
387     info.high_limit = TASK_SIZE;
388     info.align_mask = PAGE_MASK & (SHMLBA - 1);
389     - info.align_offset = (get_offset(mapping) + pgoff) << PAGE_SHIFT;
390     + info.align_offset = shared_align_offset(filp, pgoff);
391     return vm_unmapped_area(&info);
392     }
393    
394     @@ -82,20 +89,18 @@ unsigned long arch_get_unmapped_area(struct file *filp, unsigned long addr,
395     return -ENOMEM;
396     if (flags & MAP_FIXED) {
397     if ((flags & MAP_SHARED) &&
398     - (addr - (pgoff << PAGE_SHIFT)) & (SHMLBA - 1))
399     + (addr - shared_align_offset(filp, pgoff)) & (SHMLBA - 1))
400     return -EINVAL;
401     return addr;
402     }
403     if (!addr)
404     addr = TASK_UNMAPPED_BASE;
405    
406     - if (filp) {
407     - addr = get_shared_area(filp->f_mapping, addr, len, pgoff);
408     - } else if(flags & MAP_SHARED) {
409     - addr = get_shared_area(NULL, addr, len, pgoff);
410     - } else {
411     + if (filp || (flags & MAP_SHARED))
412     + addr = get_shared_area(filp, addr, len, pgoff);
413     + else
414     addr = get_unshared_area(addr, len);
415     - }
416     +
417     return addr;
418     }
419    
420     diff --git a/arch/s390/crypto/aes_s390.c b/arch/s390/crypto/aes_s390.c
421     index 2e4b5be31a1b..94e20dd2729f 100644
422     --- a/arch/s390/crypto/aes_s390.c
423     +++ b/arch/s390/crypto/aes_s390.c
424     @@ -55,8 +55,7 @@ struct pcc_param {
425    
426     struct s390_xts_ctx {
427     u8 key[32];
428     - u8 xts_param[16];
429     - struct pcc_param pcc;
430     + u8 pcc_key[32];
431     long enc;
432     long dec;
433     int key_len;
434     @@ -591,7 +590,7 @@ static int xts_aes_set_key(struct crypto_tfm *tfm, const u8 *in_key,
435     xts_ctx->enc = KM_XTS_128_ENCRYPT;
436     xts_ctx->dec = KM_XTS_128_DECRYPT;
437     memcpy(xts_ctx->key + 16, in_key, 16);
438     - memcpy(xts_ctx->pcc.key + 16, in_key + 16, 16);
439     + memcpy(xts_ctx->pcc_key + 16, in_key + 16, 16);
440     break;
441     case 48:
442     xts_ctx->enc = 0;
443     @@ -602,7 +601,7 @@ static int xts_aes_set_key(struct crypto_tfm *tfm, const u8 *in_key,
444     xts_ctx->enc = KM_XTS_256_ENCRYPT;
445     xts_ctx->dec = KM_XTS_256_DECRYPT;
446     memcpy(xts_ctx->key, in_key, 32);
447     - memcpy(xts_ctx->pcc.key, in_key + 32, 32);
448     + memcpy(xts_ctx->pcc_key, in_key + 32, 32);
449     break;
450     default:
451     *flags |= CRYPTO_TFM_RES_BAD_KEY_LEN;
452     @@ -621,29 +620,33 @@ static int xts_aes_crypt(struct blkcipher_desc *desc, long func,
453     unsigned int nbytes = walk->nbytes;
454     unsigned int n;
455     u8 *in, *out;
456     - void *param;
457     + struct pcc_param pcc_param;
458     + struct {
459     + u8 key[32];
460     + u8 init[16];
461     + } xts_param;
462    
463     if (!nbytes)
464     goto out;
465    
466     - memset(xts_ctx->pcc.block, 0, sizeof(xts_ctx->pcc.block));
467     - memset(xts_ctx->pcc.bit, 0, sizeof(xts_ctx->pcc.bit));
468     - memset(xts_ctx->pcc.xts, 0, sizeof(xts_ctx->pcc.xts));
469     - memcpy(xts_ctx->pcc.tweak, walk->iv, sizeof(xts_ctx->pcc.tweak));
470     - param = xts_ctx->pcc.key + offset;
471     - ret = crypt_s390_pcc(func, param);
472     + memset(pcc_param.block, 0, sizeof(pcc_param.block));
473     + memset(pcc_param.bit, 0, sizeof(pcc_param.bit));
474     + memset(pcc_param.xts, 0, sizeof(pcc_param.xts));
475     + memcpy(pcc_param.tweak, walk->iv, sizeof(pcc_param.tweak));
476     + memcpy(pcc_param.key, xts_ctx->pcc_key, 32);
477     + ret = crypt_s390_pcc(func, &pcc_param.key[offset]);
478     if (ret < 0)
479     return -EIO;
480    
481     - memcpy(xts_ctx->xts_param, xts_ctx->pcc.xts, 16);
482     - param = xts_ctx->key + offset;
483     + memcpy(xts_param.key, xts_ctx->key, 32);
484     + memcpy(xts_param.init, pcc_param.xts, 16);
485     do {
486     /* only use complete blocks */
487     n = nbytes & ~(AES_BLOCK_SIZE - 1);
488     out = walk->dst.virt.addr;
489     in = walk->src.virt.addr;
490    
491     - ret = crypt_s390_km(func, param, out, in, n);
492     + ret = crypt_s390_km(func, &xts_param.key[offset], out, in, n);
493     if (ret < 0 || ret != n)
494     return -EIO;
495    
496     diff --git a/arch/x86/Makefile b/arch/x86/Makefile
497     index 5c477260294f..d5cf85057d63 100644
498     --- a/arch/x86/Makefile
499     +++ b/arch/x86/Makefile
500     @@ -31,6 +31,9 @@ ifeq ($(CONFIG_X86_32),y)
501    
502     KBUILD_CFLAGS += -msoft-float -mregparm=3 -freg-struct-return
503    
504     + # Don't autogenerate SSE instructions
505     + KBUILD_CFLAGS += -mno-sse
506     +
507     # Never want PIC in a 32-bit kernel, prevent breakage with GCC built
508     # with nonstandard options
509     KBUILD_CFLAGS += -fno-pic
510     @@ -57,8 +60,11 @@ else
511     KBUILD_AFLAGS += -m64
512     KBUILD_CFLAGS += -m64
513    
514     + # Don't autogenerate SSE instructions
515     + KBUILD_CFLAGS += -mno-sse
516     +
517     # Use -mpreferred-stack-boundary=3 if supported.
518     - KBUILD_CFLAGS += $(call cc-option,-mno-sse -mpreferred-stack-boundary=3)
519     + KBUILD_CFLAGS += $(call cc-option,-mpreferred-stack-boundary=3)
520    
521     # FIXME - should be integrated in Makefile.cpu (Makefile_32.cpu)
522     cflags-$(CONFIG_MK8) += $(call cc-option,-march=k8)
523     diff --git a/block/blk-cgroup.h b/block/blk-cgroup.h
524     index 4e595ee8c915..749afadfbb33 100644
525     --- a/block/blk-cgroup.h
526     +++ b/block/blk-cgroup.h
527     @@ -399,9 +399,9 @@ static inline uint64_t blkg_stat_read(struct blkg_stat *stat)
528     uint64_t v;
529    
530     do {
531     - start = u64_stats_fetch_begin(&stat->syncp);
532     + start = u64_stats_fetch_begin_bh(&stat->syncp);
533     v = stat->cnt;
534     - } while (u64_stats_fetch_retry(&stat->syncp, start));
535     + } while (u64_stats_fetch_retry_bh(&stat->syncp, start));
536    
537     return v;
538     }
539     @@ -467,9 +467,9 @@ static inline struct blkg_rwstat blkg_rwstat_read(struct blkg_rwstat *rwstat)
540     struct blkg_rwstat tmp;
541    
542     do {
543     - start = u64_stats_fetch_begin(&rwstat->syncp);
544     + start = u64_stats_fetch_begin_bh(&rwstat->syncp);
545     tmp = *rwstat;
546     - } while (u64_stats_fetch_retry(&rwstat->syncp, start));
547     + } while (u64_stats_fetch_retry_bh(&rwstat->syncp, start));
548    
549     return tmp;
550     }
551     diff --git a/crypto/algif_hash.c b/crypto/algif_hash.c
552     index 850246206b12..585c3b279feb 100644
553     --- a/crypto/algif_hash.c
554     +++ b/crypto/algif_hash.c
555     @@ -117,6 +117,9 @@ static ssize_t hash_sendpage(struct socket *sock, struct page *page,
556     if (flags & MSG_SENDPAGE_NOTLAST)
557     flags |= MSG_MORE;
558    
559     + if (flags & MSG_SENDPAGE_NOTLAST)
560     + flags |= MSG_MORE;
561     +
562     lock_sock(sk);
563     sg_init_table(ctx->sgl.sg, 1);
564     sg_set_page(ctx->sgl.sg, page, size, offset);
565     diff --git a/crypto/algif_skcipher.c b/crypto/algif_skcipher.c
566     index a19c027b29bd..918a3b4148b8 100644
567     --- a/crypto/algif_skcipher.c
568     +++ b/crypto/algif_skcipher.c
569     @@ -381,6 +381,9 @@ static ssize_t skcipher_sendpage(struct socket *sock, struct page *page,
570     if (flags & MSG_SENDPAGE_NOTLAST)
571     flags |= MSG_MORE;
572    
573     + if (flags & MSG_SENDPAGE_NOTLAST)
574     + flags |= MSG_MORE;
575     +
576     lock_sock(sk);
577     if (!ctx->more && ctx->used)
578     goto unlock;
579     diff --git a/crypto/authenc.c b/crypto/authenc.c
580     index ffce19de05cf..528b00bc4769 100644
581     --- a/crypto/authenc.c
582     +++ b/crypto/authenc.c
583     @@ -368,9 +368,10 @@ static void crypto_authenc_encrypt_done(struct crypto_async_request *req,
584     if (!err) {
585     struct crypto_aead *authenc = crypto_aead_reqtfm(areq);
586     struct crypto_authenc_ctx *ctx = crypto_aead_ctx(authenc);
587     - struct ablkcipher_request *abreq = aead_request_ctx(areq);
588     - u8 *iv = (u8 *)(abreq + 1) +
589     - crypto_ablkcipher_reqsize(ctx->enc);
590     + struct authenc_request_ctx *areq_ctx = aead_request_ctx(areq);
591     + struct ablkcipher_request *abreq = (void *)(areq_ctx->tail
592     + + ctx->reqoff);
593     + u8 *iv = (u8 *)abreq - crypto_ablkcipher_ivsize(ctx->enc);
594    
595     err = crypto_authenc_genicv(areq, iv, 0);
596     }
597     diff --git a/crypto/ccm.c b/crypto/ccm.c
598     index 499c91717d93..ed009b77e67d 100644
599     --- a/crypto/ccm.c
600     +++ b/crypto/ccm.c
601     @@ -271,7 +271,8 @@ static int crypto_ccm_auth(struct aead_request *req, struct scatterlist *plain,
602     }
603    
604     /* compute plaintext into mac */
605     - get_data_to_compute(cipher, pctx, plain, cryptlen);
606     + if (cryptlen)
607     + get_data_to_compute(cipher, pctx, plain, cryptlen);
608    
609     out:
610     return err;
611     diff --git a/drivers/ata/libata-scsi.c b/drivers/ata/libata-scsi.c
612     index 0101af541436..4abdbdff6943 100644
613     --- a/drivers/ata/libata-scsi.c
614     +++ b/drivers/ata/libata-scsi.c
615     @@ -3614,6 +3614,7 @@ int ata_scsi_add_hosts(struct ata_host *host, struct scsi_host_template *sht)
616     shost->max_lun = 1;
617     shost->max_channel = 1;
618     shost->max_cmd_len = 16;
619     + shost->no_write_same = 1;
620    
621     /* Schedule policy is determined by ->qc_defer()
622     * callback and it needs to see every deferred qc.
623     diff --git a/drivers/char/i8k.c b/drivers/char/i8k.c
624     index 40cc0cf2ded6..e6939e13e338 100644
625     --- a/drivers/char/i8k.c
626     +++ b/drivers/char/i8k.c
627     @@ -664,6 +664,13 @@ static struct dmi_system_id __initdata i8k_dmi_table[] = {
628     DMI_MATCH(DMI_PRODUCT_NAME, "Vostro"),
629     },
630     },
631     + {
632     + .ident = "Dell XPS421",
633     + .matches = {
634     + DMI_MATCH(DMI_SYS_VENDOR, "Dell Inc."),
635     + DMI_MATCH(DMI_PRODUCT_NAME, "XPS L421X"),
636     + },
637     + },
638     { }
639     };
640    
641     diff --git a/drivers/firewire/sbp2.c b/drivers/firewire/sbp2.c
642     index 47674b913843..c8e3b2c48369 100644
643     --- a/drivers/firewire/sbp2.c
644     +++ b/drivers/firewire/sbp2.c
645     @@ -1626,6 +1626,7 @@ static struct scsi_host_template scsi_driver_template = {
646     .cmd_per_lun = 1,
647     .can_queue = 1,
648     .sdev_attrs = sbp2_scsi_sysfs_attrs,
649     + .no_write_same = 1,
650     };
651    
652     MODULE_AUTHOR("Kristian Hoegsberg <krh@bitplanet.net>");
653     diff --git a/drivers/gpio/gpio-mpc8xxx.c b/drivers/gpio/gpio-mpc8xxx.c
654     index a0b33a216d4a..2aa3ca215bd6 100644
655     --- a/drivers/gpio/gpio-mpc8xxx.c
656     +++ b/drivers/gpio/gpio-mpc8xxx.c
657     @@ -69,10 +69,14 @@ static int mpc8572_gpio_get(struct gpio_chip *gc, unsigned int gpio)
658     u32 val;
659     struct of_mm_gpio_chip *mm = to_of_mm_gpio_chip(gc);
660     struct mpc8xxx_gpio_chip *mpc8xxx_gc = to_mpc8xxx_gpio_chip(mm);
661     + u32 out_mask, out_shadow;
662    
663     - val = in_be32(mm->regs + GPIO_DAT) & ~in_be32(mm->regs + GPIO_DIR);
664     + out_mask = in_be32(mm->regs + GPIO_DIR);
665    
666     - return (val | mpc8xxx_gc->data) & mpc8xxx_gpio2mask(gpio);
667     + val = in_be32(mm->regs + GPIO_DAT) & ~out_mask;
668     + out_shadow = mpc8xxx_gc->data & out_mask;
669     +
670     + return (val | out_shadow) & mpc8xxx_gpio2mask(gpio);
671     }
672    
673     static int mpc8xxx_gpio_get(struct gpio_chip *gc, unsigned int gpio)
674     diff --git a/drivers/hid/hid-ids.h b/drivers/hid/hid-ids.h
675     index 799dbec2646b..a1e431f830e3 100644
676     --- a/drivers/hid/hid-ids.h
677     +++ b/drivers/hid/hid-ids.h
678     @@ -786,6 +786,8 @@
679     #define USB_DEVICE_ID_SYNAPTICS_COMP_TP 0x0009
680     #define USB_DEVICE_ID_SYNAPTICS_WTP 0x0010
681     #define USB_DEVICE_ID_SYNAPTICS_DPAD 0x0013
682     +#define USB_DEVICE_ID_SYNAPTICS_LTS1 0x0af8
683     +#define USB_DEVICE_ID_SYNAPTICS_LTS2 0x1d10
684    
685     #define USB_VENDOR_ID_THINGM 0x27b8
686     #define USB_DEVICE_ID_BLINK1 0x01ed
687     @@ -913,4 +915,7 @@
688     #define USB_VENDOR_ID_PRIMAX 0x0461
689     #define USB_DEVICE_ID_PRIMAX_KEYBOARD 0x4e05
690    
691     +#define USB_VENDOR_ID_SIS 0x0457
692     +#define USB_DEVICE_ID_SIS_TS 0x1013
693     +
694     #endif
695     diff --git a/drivers/hid/usbhid/hid-quirks.c b/drivers/hid/usbhid/hid-quirks.c
696     index ae5c63478b92..0db9a67278ba 100644
697     --- a/drivers/hid/usbhid/hid-quirks.c
698     +++ b/drivers/hid/usbhid/hid-quirks.c
699     @@ -112,6 +112,9 @@ static const struct hid_blacklist {
700     { USB_VENDOR_ID_KYE, USB_DEVICE_ID_KYE_MOUSEPEN_I608X, HID_QUIRK_MULTI_INPUT },
701     { USB_VENDOR_ID_KYE, USB_DEVICE_ID_KYE_EASYPEN_M610X, HID_QUIRK_MULTI_INPUT },
702     { USB_VENDOR_ID_NTRIG, USB_DEVICE_ID_NTRIG_DUOSENSE, HID_QUIRK_NO_INIT_REPORTS },
703     + { USB_VENDOR_ID_SYNAPTICS, USB_DEVICE_ID_SYNAPTICS_LTS1, HID_QUIRK_NO_INIT_REPORTS },
704     + { USB_VENDOR_ID_SYNAPTICS, USB_DEVICE_ID_SYNAPTICS_LTS2, HID_QUIRK_NO_INIT_REPORTS },
705     + { USB_VENDOR_ID_SIS, USB_DEVICE_ID_SIS_TS, HID_QUIRK_NO_INIT_REPORTS },
706    
707     { 0, 0 }
708     };
709     diff --git a/drivers/input/Kconfig b/drivers/input/Kconfig
710     index 38b523a1ece0..a11ff74a5127 100644
711     --- a/drivers/input/Kconfig
712     +++ b/drivers/input/Kconfig
713     @@ -80,7 +80,7 @@ config INPUT_MATRIXKMAP
714     comment "Userland interfaces"
715    
716     config INPUT_MOUSEDEV
717     - tristate "Mouse interface" if EXPERT
718     + tristate "Mouse interface"
719     default y
720     help
721     Say Y here if you want your mouse to be accessible as char devices
722     diff --git a/drivers/input/keyboard/Kconfig b/drivers/input/keyboard/Kconfig
723     index 7ac9c9818d55..292f3240e67b 100644
724     --- a/drivers/input/keyboard/Kconfig
725     +++ b/drivers/input/keyboard/Kconfig
726     @@ -2,7 +2,7 @@
727     # Input core configuration
728     #
729     menuconfig INPUT_KEYBOARD
730     - bool "Keyboards" if EXPERT || !X86
731     + bool "Keyboards"
732     default y
733     help
734     Say Y here, and a list of supported keyboards will be displayed.
735     @@ -67,7 +67,7 @@ config KEYBOARD_ATARI
736     module will be called atakbd.
737    
738     config KEYBOARD_ATKBD
739     - tristate "AT keyboard" if EXPERT || !X86
740     + tristate "AT keyboard"
741     default y
742     select SERIO
743     select SERIO_LIBPS2
744     diff --git a/drivers/input/serio/Kconfig b/drivers/input/serio/Kconfig
745     index 1bda828f4b55..0455a2735fb0 100644
746     --- a/drivers/input/serio/Kconfig
747     +++ b/drivers/input/serio/Kconfig
748     @@ -2,7 +2,7 @@
749     # Input core configuration
750     #
751     config SERIO
752     - tristate "Serial I/O support" if EXPERT || !X86
753     + tristate "Serial I/O support"
754     default y
755     help
756     Say Yes here if you have any input device that uses serial I/O to
757     @@ -19,7 +19,7 @@ config SERIO
758     if SERIO
759    
760     config SERIO_I8042
761     - tristate "i8042 PC Keyboard controller" if EXPERT || !X86
762     + tristate "i8042 PC Keyboard controller"
763     default y
764     depends on !PARISC && (!ARM || ARCH_SHARK || FOOTBRIDGE_HOST) && \
765     (!SUPERH || SH_CAYMAN) && !M68K && !BLACKFIN && !S390
766     @@ -169,7 +169,7 @@ config SERIO_MACEPS2
767     module will be called maceps2.
768    
769     config SERIO_LIBPS2
770     - tristate "PS/2 driver library" if EXPERT
771     + tristate "PS/2 driver library"
772     depends on SERIO_I8042 || SERIO_I8042=n
773     help
774     Say Y here if you are using a driver for device connected
775     diff --git a/drivers/misc/enclosure.c b/drivers/misc/enclosure.c
776     index 00e5fcac8fdf..cbee842f8b6b 100644
777     --- a/drivers/misc/enclosure.c
778     +++ b/drivers/misc/enclosure.c
779     @@ -198,6 +198,13 @@ static void enclosure_remove_links(struct enclosure_component *cdev)
780     {
781     char name[ENCLOSURE_NAME_SIZE];
782    
783     + /*
784     + * In odd circumstances, like multipath devices, something else may
785     + * already have removed the links, so check for this condition first.
786     + */
787     + if (!cdev->dev->kobj.sd)
788     + return;
789     +
790     enclosure_link_name(cdev, name);
791     sysfs_remove_link(&cdev->dev->kobj, name);
792     sysfs_remove_link(&cdev->cdev.kobj, "device");
793     diff --git a/drivers/misc/mei/hw-me-regs.h b/drivers/misc/mei/hw-me-regs.h
794     index 6a203b6e8346..66f411a6e8ea 100644
795     --- a/drivers/misc/mei/hw-me-regs.h
796     +++ b/drivers/misc/mei/hw-me-regs.h
797     @@ -109,8 +109,12 @@
798     #define MEI_DEV_ID_PPT_2 0x1CBA /* Panther Point */
799     #define MEI_DEV_ID_PPT_3 0x1DBA /* Panther Point */
800    
801     -#define MEI_DEV_ID_LPT 0x8C3A /* Lynx Point */
802     +#define MEI_DEV_ID_LPT_H 0x8C3A /* Lynx Point H */
803     +#define MEI_DEV_ID_LPT_W 0x8D3A /* Lynx Point - Wellsburg */
804     #define MEI_DEV_ID_LPT_LP 0x9C3A /* Lynx Point LP */
805     +#define MEI_DEV_ID_LPT_HR 0x8CBA /* Lynx Point H Refresh */
806     +
807     +#define MEI_DEV_ID_WPT_LP 0x9CBA /* Wildcat Point LP */
808     /*
809     * MEI HW Section
810     */
811     diff --git a/drivers/misc/mei/pci-me.c b/drivers/misc/mei/pci-me.c
812     index 0f268329bd3a..371c65ae6be6 100644
813     --- a/drivers/misc/mei/pci-me.c
814     +++ b/drivers/misc/mei/pci-me.c
815     @@ -79,8 +79,11 @@ static DEFINE_PCI_DEVICE_TABLE(mei_me_pci_tbl) = {
816     {PCI_DEVICE(PCI_VENDOR_ID_INTEL, MEI_DEV_ID_PPT_1)},
817     {PCI_DEVICE(PCI_VENDOR_ID_INTEL, MEI_DEV_ID_PPT_2)},
818     {PCI_DEVICE(PCI_VENDOR_ID_INTEL, MEI_DEV_ID_PPT_3)},
819     - {PCI_DEVICE(PCI_VENDOR_ID_INTEL, MEI_DEV_ID_LPT)},
820     + {PCI_DEVICE(PCI_VENDOR_ID_INTEL, MEI_DEV_ID_LPT_H)},
821     + {PCI_DEVICE(PCI_VENDOR_ID_INTEL, MEI_DEV_ID_LPT_W)},
822     {PCI_DEVICE(PCI_VENDOR_ID_INTEL, MEI_DEV_ID_LPT_LP)},
823     + {PCI_DEVICE(PCI_VENDOR_ID_INTEL, MEI_DEV_ID_LPT_HR)},
824     + {PCI_DEVICE(PCI_VENDOR_ID_INTEL, MEI_DEV_ID_WPT_LP)},
825    
826     /* required last entry */
827     {0, }
828     diff --git a/drivers/net/can/c_can/c_can.c b/drivers/net/can/c_can/c_can.c
829     index e3fc07cf2f62..e59c42b446a9 100644
830     --- a/drivers/net/can/c_can/c_can.c
831     +++ b/drivers/net/can/c_can/c_can.c
832     @@ -712,22 +712,31 @@ static int c_can_set_mode(struct net_device *dev, enum can_mode mode)
833     return 0;
834     }
835    
836     -static int c_can_get_berr_counter(const struct net_device *dev,
837     - struct can_berr_counter *bec)
838     +static int __c_can_get_berr_counter(const struct net_device *dev,
839     + struct can_berr_counter *bec)
840     {
841     unsigned int reg_err_counter;
842     struct c_can_priv *priv = netdev_priv(dev);
843    
844     - c_can_pm_runtime_get_sync(priv);
845     -
846     reg_err_counter = priv->read_reg(priv, C_CAN_ERR_CNT_REG);
847     bec->rxerr = (reg_err_counter & ERR_CNT_REC_MASK) >>
848     ERR_CNT_REC_SHIFT;
849     bec->txerr = reg_err_counter & ERR_CNT_TEC_MASK;
850    
851     + return 0;
852     +}
853     +
854     +static int c_can_get_berr_counter(const struct net_device *dev,
855     + struct can_berr_counter *bec)
856     +{
857     + struct c_can_priv *priv = netdev_priv(dev);
858     + int err;
859     +
860     + c_can_pm_runtime_get_sync(priv);
861     + err = __c_can_get_berr_counter(dev, bec);
862     c_can_pm_runtime_put_sync(priv);
863    
864     - return 0;
865     + return err;
866     }
867    
868     /*
869     @@ -872,7 +881,7 @@ static int c_can_handle_state_change(struct net_device *dev,
870     if (unlikely(!skb))
871     return 0;
872    
873     - c_can_get_berr_counter(dev, &bec);
874     + __c_can_get_berr_counter(dev, &bec);
875     reg_err_counter = priv->read_reg(priv, C_CAN_ERR_CNT_REG);
876     rx_err_passive = (reg_err_counter & ERR_CNT_RP_MASK) >>
877     ERR_CNT_RP_SHIFT;
878     diff --git a/drivers/net/can/sja1000/sja1000.c b/drivers/net/can/sja1000/sja1000.c
879     index 7164a999f50f..f17c3018b7c7 100644
880     --- a/drivers/net/can/sja1000/sja1000.c
881     +++ b/drivers/net/can/sja1000/sja1000.c
882     @@ -494,20 +494,20 @@ irqreturn_t sja1000_interrupt(int irq, void *dev_id)
883     uint8_t isrc, status;
884     int n = 0;
885    
886     - /* Shared interrupts and IRQ off? */
887     - if (priv->read_reg(priv, SJA1000_IER) == IRQ_OFF)
888     - return IRQ_NONE;
889     -
890     if (priv->pre_irq)
891     priv->pre_irq(priv);
892    
893     + /* Shared interrupts and IRQ off? */
894     + if (priv->read_reg(priv, SJA1000_IER) == IRQ_OFF)
895     + goto out;
896     +
897     while ((isrc = priv->read_reg(priv, SJA1000_IR)) &&
898     (n < SJA1000_MAX_IRQ)) {
899     - n++;
900     +
901     status = priv->read_reg(priv, SJA1000_SR);
902     /* check for absent controller due to hw unplug */
903     if (status == 0xFF && sja1000_is_absent(priv))
904     - return IRQ_NONE;
905     + goto out;
906    
907     if (isrc & IRQ_WUI)
908     netdev_warn(dev, "wakeup interrupt\n");
909     @@ -535,7 +535,7 @@ irqreturn_t sja1000_interrupt(int irq, void *dev_id)
910     status = priv->read_reg(priv, SJA1000_SR);
911     /* check for absent controller */
912     if (status == 0xFF && sja1000_is_absent(priv))
913     - return IRQ_NONE;
914     + goto out;
915     }
916     }
917     if (isrc & (IRQ_DOI | IRQ_EI | IRQ_BEI | IRQ_EPI | IRQ_ALI)) {
918     @@ -543,8 +543,9 @@ irqreturn_t sja1000_interrupt(int irq, void *dev_id)
919     if (sja1000_err(dev, isrc, status))
920     break;
921     }
922     + n++;
923     }
924     -
925     +out:
926     if (priv->post_irq)
927     priv->post_irq(priv);
928    
929     diff --git a/drivers/net/ethernet/broadcom/tg3.c b/drivers/net/ethernet/broadcom/tg3.c
930     index 0877a052e3ee..b51560d56590 100644
931     --- a/drivers/net/ethernet/broadcom/tg3.c
932     +++ b/drivers/net/ethernet/broadcom/tg3.c
933     @@ -6722,12 +6722,6 @@ static int tg3_rx(struct tg3_napi *tnapi, int budget)
934     pci_unmap_single(tp->pdev, dma_addr, skb_size,
935     PCI_DMA_FROMDEVICE);
936    
937     - skb = build_skb(data, frag_size);
938     - if (!skb) {
939     - tg3_frag_free(frag_size != 0, data);
940     - goto drop_it_no_recycle;
941     - }
942     - skb_reserve(skb, TG3_RX_OFFSET(tp));
943     /* Ensure that the update to the data happens
944     * after the usage of the old DMA mapping.
945     */
946     @@ -6735,6 +6729,12 @@ static int tg3_rx(struct tg3_napi *tnapi, int budget)
947    
948     ri->data = NULL;
949    
950     + skb = build_skb(data, frag_size);
951     + if (!skb) {
952     + tg3_frag_free(frag_size != 0, data);
953     + goto drop_it_no_recycle;
954     + }
955     + skb_reserve(skb, TG3_RX_OFFSET(tp));
956     } else {
957     tg3_recycle_rx(tnapi, tpr, opaque_key,
958     desc_idx, *post_ptr);
959     diff --git a/drivers/net/ethernet/smsc/smc91x.h b/drivers/net/ethernet/smsc/smc91x.h
960     index 370e13dde115..fcb94806f4e9 100644
961     --- a/drivers/net/ethernet/smsc/smc91x.h
962     +++ b/drivers/net/ethernet/smsc/smc91x.h
963     @@ -46,7 +46,8 @@
964     defined(CONFIG_MACH_LITTLETON) ||\
965     defined(CONFIG_MACH_ZYLONITE2) ||\
966     defined(CONFIG_ARCH_VIPER) ||\
967     - defined(CONFIG_MACH_STARGATE2)
968     + defined(CONFIG_MACH_STARGATE2) ||\
969     + defined(CONFIG_ARCH_VERSATILE)
970    
971     #include <asm/mach-types.h>
972    
973     @@ -154,6 +155,8 @@ static inline void SMC_outw(u16 val, void __iomem *ioaddr, int reg)
974     #define SMC_outl(v, a, r) writel(v, (a) + (r))
975     #define SMC_insl(a, r, p, l) readsl((a) + (r), p, l)
976     #define SMC_outsl(a, r, p, l) writesl((a) + (r), p, l)
977     +#define SMC_insw(a, r, p, l) readsw((a) + (r), p, l)
978     +#define SMC_outsw(a, r, p, l) writesw((a) + (r), p, l)
979     #define SMC_IRQ_FLAGS (-1) /* from resource */
980    
981     /* We actually can't write halfwords properly if not word aligned */
982     @@ -206,23 +209,6 @@ SMC_outw(u16 val, void __iomem *ioaddr, int reg)
983     #define RPC_LSA_DEFAULT RPC_LED_TX_RX
984     #define RPC_LSB_DEFAULT RPC_LED_100_10
985    
986     -#elif defined(CONFIG_ARCH_VERSATILE)
987     -
988     -#define SMC_CAN_USE_8BIT 1
989     -#define SMC_CAN_USE_16BIT 1
990     -#define SMC_CAN_USE_32BIT 1
991     -#define SMC_NOWAIT 1
992     -
993     -#define SMC_inb(a, r) readb((a) + (r))
994     -#define SMC_inw(a, r) readw((a) + (r))
995     -#define SMC_inl(a, r) readl((a) + (r))
996     -#define SMC_outb(v, a, r) writeb(v, (a) + (r))
997     -#define SMC_outw(v, a, r) writew(v, (a) + (r))
998     -#define SMC_outl(v, a, r) writel(v, (a) + (r))
999     -#define SMC_insl(a, r, p, l) readsl((a) + (r), p, l)
1000     -#define SMC_outsl(a, r, p, l) writesl((a) + (r), p, l)
1001     -#define SMC_IRQ_FLAGS (-1) /* from resource */
1002     -
1003     #elif defined(CONFIG_MN10300)
1004    
1005     /*
1006     diff --git a/drivers/net/wireless/iwlwifi/dvm/tx.c b/drivers/net/wireless/iwlwifi/dvm/tx.c
1007     index a900aaf47790..20e65d3cc3bd 100644
1008     --- a/drivers/net/wireless/iwlwifi/dvm/tx.c
1009     +++ b/drivers/net/wireless/iwlwifi/dvm/tx.c
1010     @@ -445,27 +445,19 @@ int iwlagn_tx_skb(struct iwl_priv *priv,
1011     /* Copy MAC header from skb into command buffer */
1012     memcpy(tx_cmd->hdr, hdr, hdr_len);
1013    
1014     + txq_id = info->hw_queue;
1015     +
1016     if (is_agg)
1017     txq_id = priv->tid_data[sta_id][tid].agg.txq_id;
1018     else if (info->flags & IEEE80211_TX_CTL_SEND_AFTER_DTIM) {
1019     /*
1020     - * Send this frame after DTIM -- there's a special queue
1021     - * reserved for this for contexts that support AP mode.
1022     - */
1023     - txq_id = ctx->mcast_queue;
1024     -
1025     - /*
1026     * The microcode will clear the more data
1027     * bit in the last frame it transmits.
1028     */
1029     hdr->frame_control |=
1030     cpu_to_le16(IEEE80211_FCTL_MOREDATA);
1031     - } else if (info->flags & IEEE80211_TX_CTL_TX_OFFCHAN)
1032     - txq_id = IWL_AUX_QUEUE;
1033     - else
1034     - txq_id = ctx->ac_to_queue[skb_get_queue_mapping(skb)];
1035     + }
1036    
1037     - WARN_ON_ONCE(!is_agg && txq_id != info->hw_queue);
1038     WARN_ON_ONCE(is_agg &&
1039     priv->queue_to_mac80211[txq_id] != info->hw_queue);
1040    
1041     diff --git a/drivers/scsi/3w-9xxx.c b/drivers/scsi/3w-9xxx.c
1042     index 5e1e12c0cf42..0a7325361d29 100644
1043     --- a/drivers/scsi/3w-9xxx.c
1044     +++ b/drivers/scsi/3w-9xxx.c
1045     @@ -2025,7 +2025,8 @@ static struct scsi_host_template driver_template = {
1046     .cmd_per_lun = TW_MAX_CMDS_PER_LUN,
1047     .use_clustering = ENABLE_CLUSTERING,
1048     .shost_attrs = twa_host_attrs,
1049     - .emulated = 1
1050     + .emulated = 1,
1051     + .no_write_same = 1,
1052     };
1053    
1054     /* This function will probe and initialize a card */
1055     diff --git a/drivers/scsi/3w-sas.c b/drivers/scsi/3w-sas.c
1056     index c845bdbeb6c0..4de346017e9f 100644
1057     --- a/drivers/scsi/3w-sas.c
1058     +++ b/drivers/scsi/3w-sas.c
1059     @@ -1600,7 +1600,8 @@ static struct scsi_host_template driver_template = {
1060     .cmd_per_lun = TW_MAX_CMDS_PER_LUN,
1061     .use_clustering = ENABLE_CLUSTERING,
1062     .shost_attrs = twl_host_attrs,
1063     - .emulated = 1
1064     + .emulated = 1,
1065     + .no_write_same = 1,
1066     };
1067    
1068     /* This function will probe and initialize a card */
1069     diff --git a/drivers/scsi/3w-xxxx.c b/drivers/scsi/3w-xxxx.c
1070     index 56662ae03dea..430ee3774c3b 100644
1071     --- a/drivers/scsi/3w-xxxx.c
1072     +++ b/drivers/scsi/3w-xxxx.c
1073     @@ -2277,7 +2277,8 @@ static struct scsi_host_template driver_template = {
1074     .cmd_per_lun = TW_MAX_CMDS_PER_LUN,
1075     .use_clustering = ENABLE_CLUSTERING,
1076     .shost_attrs = tw_host_attrs,
1077     - .emulated = 1
1078     + .emulated = 1,
1079     + .no_write_same = 1,
1080     };
1081    
1082     /* This function will probe and initialize a card */
1083     diff --git a/drivers/scsi/aacraid/linit.c b/drivers/scsi/aacraid/linit.c
1084     index f0d432c139d0..4921ed19a027 100644
1085     --- a/drivers/scsi/aacraid/linit.c
1086     +++ b/drivers/scsi/aacraid/linit.c
1087     @@ -1081,6 +1081,7 @@ static struct scsi_host_template aac_driver_template = {
1088     #endif
1089     .use_clustering = ENABLE_CLUSTERING,
1090     .emulated = 1,
1091     + .no_write_same = 1,
1092     };
1093    
1094     static void __aac_shutdown(struct aac_dev * aac)
1095     diff --git a/drivers/scsi/arcmsr/arcmsr_hba.c b/drivers/scsi/arcmsr/arcmsr_hba.c
1096     index 33c52bc2c7b4..278c9fa62067 100644
1097     --- a/drivers/scsi/arcmsr/arcmsr_hba.c
1098     +++ b/drivers/scsi/arcmsr/arcmsr_hba.c
1099     @@ -137,6 +137,7 @@ static struct scsi_host_template arcmsr_scsi_host_template = {
1100     .cmd_per_lun = ARCMSR_MAX_CMD_PERLUN,
1101     .use_clustering = ENABLE_CLUSTERING,
1102     .shost_attrs = arcmsr_host_attrs,
1103     + .no_write_same = 1,
1104     };
1105     static struct pci_device_id arcmsr_device_id_table[] = {
1106     {PCI_DEVICE(PCI_VENDOR_ID_ARECA, PCI_DEVICE_ID_ARECA_1110)},
1107     diff --git a/drivers/scsi/bfa/bfa_fcs.h b/drivers/scsi/bfa/bfa_fcs.h
1108     index a449706c6bc0..6c6c7c35ca10 100644
1109     --- a/drivers/scsi/bfa/bfa_fcs.h
1110     +++ b/drivers/scsi/bfa/bfa_fcs.h
1111     @@ -299,6 +299,7 @@ wwn_t bfa_fcs_lport_get_rport(struct bfa_fcs_lport_s *port, wwn_t wwn,
1112     struct bfa_fcs_lport_s *bfa_fcs_lookup_port(struct bfa_fcs_s *fcs,
1113     u16 vf_id, wwn_t lpwwn);
1114    
1115     +void bfa_fcs_lport_set_symname(struct bfa_fcs_lport_s *port, char *symname);
1116     void bfa_fcs_lport_get_info(struct bfa_fcs_lport_s *port,
1117     struct bfa_lport_info_s *port_info);
1118     void bfa_fcs_lport_get_attr(struct bfa_fcs_lport_s *port,
1119     diff --git a/drivers/scsi/bfa/bfa_fcs_lport.c b/drivers/scsi/bfa/bfa_fcs_lport.c
1120     index 1224d0462a49..2826961c3806 100644
1121     --- a/drivers/scsi/bfa/bfa_fcs_lport.c
1122     +++ b/drivers/scsi/bfa/bfa_fcs_lport.c
1123     @@ -1097,6 +1097,17 @@ bfa_fcs_lport_init(struct bfa_fcs_lport_s *lport,
1124     bfa_sm_send_event(lport, BFA_FCS_PORT_SM_CREATE);
1125     }
1126    
1127     +void
1128     +bfa_fcs_lport_set_symname(struct bfa_fcs_lport_s *port,
1129     + char *symname)
1130     +{
1131     + strcpy(port->port_cfg.sym_name.symname, symname);
1132     +
1133     + if (bfa_sm_cmp_state(port, bfa_fcs_lport_sm_online))
1134     + bfa_fcs_lport_ns_util_send_rspn_id(
1135     + BFA_FCS_GET_NS_FROM_PORT(port), NULL);
1136     +}
1137     +
1138     /*
1139     * fcs_lport_api
1140     */
1141     @@ -4950,9 +4961,6 @@ bfa_fcs_lport_ns_util_send_rspn_id(void *cbarg, struct bfa_fcxp_s *fcxp_alloced)
1142     u8 *psymbl = &symbl[0];
1143     int len;
1144    
1145     - if (!bfa_sm_cmp_state(port, bfa_fcs_lport_sm_online))
1146     - return;
1147     -
1148     /* Avoid sending RSPN in the following states. */
1149     if (bfa_sm_cmp_state(ns, bfa_fcs_lport_ns_sm_offline) ||
1150     bfa_sm_cmp_state(ns, bfa_fcs_lport_ns_sm_plogi_sending) ||
1151     diff --git a/drivers/scsi/bfa/bfad_attr.c b/drivers/scsi/bfa/bfad_attr.c
1152     index 72f5dc32cc12..58eeca2bbb4b 100644
1153     --- a/drivers/scsi/bfa/bfad_attr.c
1154     +++ b/drivers/scsi/bfa/bfad_attr.c
1155     @@ -610,11 +610,8 @@ bfad_im_vport_set_symbolic_name(struct fc_vport *fc_vport)
1156     return;
1157    
1158     spin_lock_irqsave(&bfad->bfad_lock, flags);
1159     - if (strlen(sym_name) > 0) {
1160     - strcpy(fcs_vport->lport.port_cfg.sym_name.symname, sym_name);
1161     - bfa_fcs_lport_ns_util_send_rspn_id(
1162     - BFA_FCS_GET_NS_FROM_PORT((&fcs_vport->lport)), NULL);
1163     - }
1164     + if (strlen(sym_name) > 0)
1165     + bfa_fcs_lport_set_symname(&fcs_vport->lport, sym_name);
1166     spin_unlock_irqrestore(&bfad->bfad_lock, flags);
1167     }
1168    
1169     diff --git a/drivers/scsi/gdth.c b/drivers/scsi/gdth.c
1170     index 6d55b4e7e792..aec3d4da276f 100644
1171     --- a/drivers/scsi/gdth.c
1172     +++ b/drivers/scsi/gdth.c
1173     @@ -4686,6 +4686,7 @@ static struct scsi_host_template gdth_template = {
1174     .cmd_per_lun = GDTH_MAXC_P_L,
1175     .unchecked_isa_dma = 1,
1176     .use_clustering = ENABLE_CLUSTERING,
1177     + .no_write_same = 1,
1178     };
1179    
1180     #ifdef CONFIG_ISA
1181     diff --git a/drivers/scsi/hosts.c b/drivers/scsi/hosts.c
1182     index df0c3c71ea43..3cafe0d784b8 100644
1183     --- a/drivers/scsi/hosts.c
1184     +++ b/drivers/scsi/hosts.c
1185     @@ -388,6 +388,7 @@ struct Scsi_Host *scsi_host_alloc(struct scsi_host_template *sht, int privsize)
1186     shost->unchecked_isa_dma = sht->unchecked_isa_dma;
1187     shost->use_clustering = sht->use_clustering;
1188     shost->ordered_tag = sht->ordered_tag;
1189     + shost->no_write_same = sht->no_write_same;
1190    
1191     if (sht->supported_mode == MODE_UNKNOWN)
1192     /* means we didn't set it ... default to INITIATOR */
1193     diff --git a/drivers/scsi/hpsa.c b/drivers/scsi/hpsa.c
1194     index 7f4f790a3d71..0353d7f2172b 100644
1195     --- a/drivers/scsi/hpsa.c
1196     +++ b/drivers/scsi/hpsa.c
1197     @@ -538,6 +538,7 @@ static struct scsi_host_template hpsa_driver_template = {
1198     .sdev_attrs = hpsa_sdev_attrs,
1199     .shost_attrs = hpsa_shost_attrs,
1200     .max_sectors = 8192,
1201     + .no_write_same = 1,
1202     };
1203    
1204    
1205     @@ -1265,7 +1266,7 @@ static void complete_scsi_command(struct CommandList *cp)
1206     "has check condition: aborted command: "
1207     "ASC: 0x%x, ASCQ: 0x%x\n",
1208     cp, asc, ascq);
1209     - cmd->result = DID_SOFT_ERROR << 16;
1210     + cmd->result |= DID_SOFT_ERROR << 16;
1211     break;
1212     }
1213     /* Must be some other type of check condition */
1214     @@ -4904,7 +4905,7 @@ reinit_after_soft_reset:
1215     hpsa_hba_inquiry(h);
1216     hpsa_register_scsi(h); /* hook ourselves into SCSI subsystem */
1217     start_controller_lockup_detector(h);
1218     - return 1;
1219     + return 0;
1220    
1221     clean4:
1222     hpsa_free_sg_chain_blocks(h);
1223     diff --git a/drivers/scsi/ipr.c b/drivers/scsi/ipr.c
1224     index 6c4cedb44c07..0ff37a5e286c 100644
1225     --- a/drivers/scsi/ipr.c
1226     +++ b/drivers/scsi/ipr.c
1227     @@ -6267,7 +6267,8 @@ static struct scsi_host_template driver_template = {
1228     .use_clustering = ENABLE_CLUSTERING,
1229     .shost_attrs = ipr_ioa_attrs,
1230     .sdev_attrs = ipr_dev_attrs,
1231     - .proc_name = IPR_NAME
1232     + .proc_name = IPR_NAME,
1233     + .no_write_same = 1,
1234     };
1235    
1236     /**
1237     diff --git a/drivers/scsi/ips.c b/drivers/scsi/ips.c
1238     index 8d5ea8a1e5a6..52a216f21ae5 100644
1239     --- a/drivers/scsi/ips.c
1240     +++ b/drivers/scsi/ips.c
1241     @@ -374,6 +374,7 @@ static struct scsi_host_template ips_driver_template = {
1242     .sg_tablesize = IPS_MAX_SG,
1243     .cmd_per_lun = 3,
1244     .use_clustering = ENABLE_CLUSTERING,
1245     + .no_write_same = 1,
1246     };
1247    
1248    
1249     diff --git a/drivers/scsi/libsas/sas_ata.c b/drivers/scsi/libsas/sas_ata.c
1250     index 161c98efade9..d2895836f9fa 100644
1251     --- a/drivers/scsi/libsas/sas_ata.c
1252     +++ b/drivers/scsi/libsas/sas_ata.c
1253     @@ -211,7 +211,7 @@ static unsigned int sas_ata_qc_issue(struct ata_queued_cmd *qc)
1254     qc->tf.nsect = 0;
1255     }
1256    
1257     - ata_tf_to_fis(&qc->tf, 1, 0, (u8*)&task->ata_task.fis);
1258     + ata_tf_to_fis(&qc->tf, qc->dev->link->pmp, 1, (u8 *)&task->ata_task.fis);
1259     task->uldd_task = qc;
1260     if (ata_is_atapi(qc->tf.protocol)) {
1261     memcpy(task->ata_task.atapi_packet, qc->cdb, qc->dev->cdb_len);
1262     diff --git a/drivers/scsi/megaraid.c b/drivers/scsi/megaraid.c
1263     index 846f475f62c1..60cf7b1f5423 100644
1264     --- a/drivers/scsi/megaraid.c
1265     +++ b/drivers/scsi/megaraid.c
1266     @@ -4244,6 +4244,7 @@ static struct scsi_host_template megaraid_template = {
1267     .eh_device_reset_handler = megaraid_reset,
1268     .eh_bus_reset_handler = megaraid_reset,
1269     .eh_host_reset_handler = megaraid_reset,
1270     + .no_write_same = 1,
1271     };
1272    
1273     static int
1274     diff --git a/drivers/scsi/megaraid/megaraid_mbox.c b/drivers/scsi/megaraid/megaraid_mbox.c
1275     index e6a1e0b38a19..3316d8031e82 100644
1276     --- a/drivers/scsi/megaraid/megaraid_mbox.c
1277     +++ b/drivers/scsi/megaraid/megaraid_mbox.c
1278     @@ -367,6 +367,7 @@ static struct scsi_host_template megaraid_template_g = {
1279     .eh_host_reset_handler = megaraid_reset_handler,
1280     .change_queue_depth = megaraid_change_queue_depth,
1281     .use_clustering = ENABLE_CLUSTERING,
1282     + .no_write_same = 1,
1283     .sdev_attrs = megaraid_sdev_attrs,
1284     .shost_attrs = megaraid_shost_attrs,
1285     };
1286     diff --git a/drivers/scsi/megaraid/megaraid_sas_base.c b/drivers/scsi/megaraid/megaraid_sas_base.c
1287     index 9b60dc129a53..b3e5c1787876 100644
1288     --- a/drivers/scsi/megaraid/megaraid_sas_base.c
1289     +++ b/drivers/scsi/megaraid/megaraid_sas_base.c
1290     @@ -2099,6 +2099,7 @@ static struct scsi_host_template megasas_template = {
1291     .bios_param = megasas_bios_param,
1292     .use_clustering = ENABLE_CLUSTERING,
1293     .change_queue_depth = megasas_change_queue_depth,
1294     + .no_write_same = 1,
1295     };
1296    
1297     /**
1298     diff --git a/drivers/scsi/pmcraid.c b/drivers/scsi/pmcraid.c
1299     index 8e1b73775065..bfb72ec277c7 100644
1300     --- a/drivers/scsi/pmcraid.c
1301     +++ b/drivers/scsi/pmcraid.c
1302     @@ -4314,6 +4314,7 @@ static struct scsi_host_template pmcraid_host_template = {
1303     .this_id = -1,
1304     .sg_tablesize = PMCRAID_MAX_IOADLS,
1305     .max_sectors = PMCRAID_IOA_MAX_SECTORS,
1306     + .no_write_same = 1,
1307     .cmd_per_lun = PMCRAID_MAX_CMD_PER_LUN,
1308     .use_clustering = ENABLE_CLUSTERING,
1309     .shost_attrs = pmcraid_host_attrs,
1310     diff --git a/drivers/scsi/sd.c b/drivers/scsi/sd.c
1311     index 734a29a70f63..9bc913b92d13 100644
1312     --- a/drivers/scsi/sd.c
1313     +++ b/drivers/scsi/sd.c
1314     @@ -2627,6 +2627,12 @@ static void sd_read_write_same(struct scsi_disk *sdkp, unsigned char *buffer)
1315     {
1316     struct scsi_device *sdev = sdkp->device;
1317    
1318     + if (sdev->host->no_write_same) {
1319     + sdev->no_write_same = 1;
1320     +
1321     + return;
1322     + }
1323     +
1324     if (scsi_report_opcode(sdev, buffer, SD_BUF_SIZE, INQUIRY) < 0) {
1325     sdev->no_report_opcodes = 1;
1326    
1327     diff --git a/drivers/scsi/storvsc_drv.c b/drivers/scsi/storvsc_drv.c
1328     index 16a3a0cc9672..fb7437dd5b7a 100644
1329     --- a/drivers/scsi/storvsc_drv.c
1330     +++ b/drivers/scsi/storvsc_drv.c
1331     @@ -1454,6 +1454,7 @@ static struct scsi_host_template scsi_driver = {
1332     .use_clustering = DISABLE_CLUSTERING,
1333     /* Make sure we dont get a sg segment crosses a page boundary */
1334     .dma_boundary = PAGE_SIZE-1,
1335     + .no_write_same = 1,
1336     };
1337    
1338     enum {
1339     diff --git a/drivers/usb/class/cdc-acm.c b/drivers/usb/class/cdc-acm.c
1340     index 9b1cbcf8fb7f..81f59e8b7521 100644
1341     --- a/drivers/usb/class/cdc-acm.c
1342     +++ b/drivers/usb/class/cdc-acm.c
1343     @@ -1529,6 +1529,8 @@ static int acm_reset_resume(struct usb_interface *intf)
1344    
1345     static const struct usb_device_id acm_ids[] = {
1346     /* quirky and broken devices */
1347     + { USB_DEVICE(0x17ef, 0x7000), /* Lenovo USB modem */
1348     + .driver_info = NO_UNION_NORMAL, },/* has no union descriptor */
1349     { USB_DEVICE(0x0870, 0x0001), /* Metricom GS Modem */
1350     .driver_info = NO_UNION_NORMAL, /* has no union descriptor */
1351     },
1352     diff --git a/drivers/usb/serial/ftdi_sio.c b/drivers/usb/serial/ftdi_sio.c
1353     index aa3aed5458a6..92549cc4665f 100644
1354     --- a/drivers/usb/serial/ftdi_sio.c
1355     +++ b/drivers/usb/serial/ftdi_sio.c
1356     @@ -2131,6 +2131,20 @@ static void ftdi_set_termios(struct tty_struct *tty,
1357     termios->c_cflag |= CRTSCTS;
1358     }
1359    
1360     + /*
1361     + * All FTDI UART chips are limited to CS7/8. We won't pretend to
1362     + * support CS5/6 and revert the CSIZE setting instead.
1363     + */
1364     + if ((C_CSIZE(tty) != CS8) && (C_CSIZE(tty) != CS7)) {
1365     + dev_warn(ddev, "requested CSIZE setting not supported\n");
1366     +
1367     + termios->c_cflag &= ~CSIZE;
1368     + if (old_termios)
1369     + termios->c_cflag |= old_termios->c_cflag & CSIZE;
1370     + else
1371     + termios->c_cflag |= CS8;
1372     + }
1373     +
1374     cflag = termios->c_cflag;
1375    
1376     if (!old_termios)
1377     @@ -2167,19 +2181,16 @@ no_skip:
1378     } else {
1379     urb_value |= FTDI_SIO_SET_DATA_PARITY_NONE;
1380     }
1381     - if (cflag & CSIZE) {
1382     - switch (cflag & CSIZE) {
1383     - case CS7:
1384     - urb_value |= 7;
1385     - dev_dbg(ddev, "Setting CS7\n");
1386     - break;
1387     - case CS8:
1388     - urb_value |= 8;
1389     - dev_dbg(ddev, "Setting CS8\n");
1390     - break;
1391     - default:
1392     - dev_err(ddev, "CSIZE was set but not CS7-CS8\n");
1393     - }
1394     + switch (cflag & CSIZE) {
1395     + case CS7:
1396     + urb_value |= 7;
1397     + dev_dbg(ddev, "Setting CS7\n");
1398     + break;
1399     + default:
1400     + case CS8:
1401     + urb_value |= 8;
1402     + dev_dbg(ddev, "Setting CS8\n");
1403     + break;
1404     }
1405    
1406     /* This is needed by the break command since it uses the same command
1407     diff --git a/drivers/usb/serial/mos7840.c b/drivers/usb/serial/mos7840.c
1408     index 8b3d0abe7e14..d06013033def 100644
1409     --- a/drivers/usb/serial/mos7840.c
1410     +++ b/drivers/usb/serial/mos7840.c
1411     @@ -1875,25 +1875,25 @@ static void mos7840_change_port_settings(struct tty_struct *tty,
1412     iflag = tty->termios.c_iflag;
1413    
1414     /* Change the number of bits */
1415     - if (cflag & CSIZE) {
1416     - switch (cflag & CSIZE) {
1417     - case CS5:
1418     - lData = LCR_BITS_5;
1419     - break;
1420     + switch (cflag & CSIZE) {
1421     + case CS5:
1422     + lData = LCR_BITS_5;
1423     + break;
1424    
1425     - case CS6:
1426     - lData = LCR_BITS_6;
1427     - break;
1428     + case CS6:
1429     + lData = LCR_BITS_6;
1430     + break;
1431    
1432     - case CS7:
1433     - lData = LCR_BITS_7;
1434     - break;
1435     - default:
1436     - case CS8:
1437     - lData = LCR_BITS_8;
1438     - break;
1439     - }
1440     + case CS7:
1441     + lData = LCR_BITS_7;
1442     + break;
1443     +
1444     + default:
1445     + case CS8:
1446     + lData = LCR_BITS_8;
1447     + break;
1448     }
1449     +
1450     /* Change the Parity bit */
1451     if (cflag & PARENB) {
1452     if (cflag & PARODD) {
1453     diff --git a/drivers/usb/serial/pl2303.c b/drivers/usb/serial/pl2303.c
1454     index 048cd44d51b1..5e39f5c4941b 100644
1455     --- a/drivers/usb/serial/pl2303.c
1456     +++ b/drivers/usb/serial/pl2303.c
1457     @@ -304,24 +304,22 @@ static void pl2303_set_termios(struct tty_struct *tty,
1458     dev_dbg(&port->dev, "0xa1:0x21:0:0 %d - %x %x %x %x %x %x %x\n", i,
1459     buf[0], buf[1], buf[2], buf[3], buf[4], buf[5], buf[6]);
1460    
1461     - if (cflag & CSIZE) {
1462     - switch (cflag & CSIZE) {
1463     - case CS5:
1464     - buf[6] = 5;
1465     - break;
1466     - case CS6:
1467     - buf[6] = 6;
1468     - break;
1469     - case CS7:
1470     - buf[6] = 7;
1471     - break;
1472     - default:
1473     - case CS8:
1474     - buf[6] = 8;
1475     - break;
1476     - }
1477     - dev_dbg(&port->dev, "data bits = %d\n", buf[6]);
1478     + switch (cflag & CSIZE) {
1479     + case CS5:
1480     + buf[6] = 5;
1481     + break;
1482     + case CS6:
1483     + buf[6] = 6;
1484     + break;
1485     + case CS7:
1486     + buf[6] = 7;
1487     + break;
1488     + default:
1489     + case CS8:
1490     + buf[6] = 8;
1491     + break;
1492     }
1493     + dev_dbg(&port->dev, "data bits = %d\n", buf[6]);
1494    
1495     /* For reference buf[0]:buf[3] baud rate value */
1496     /* NOTE: Only the values defined in baud_sup are supported !
1497     diff --git a/drivers/usb/serial/spcp8x5.c b/drivers/usb/serial/spcp8x5.c
1498     index ddf6c47137dc..1694d4ff1639 100644
1499     --- a/drivers/usb/serial/spcp8x5.c
1500     +++ b/drivers/usb/serial/spcp8x5.c
1501     @@ -346,22 +346,20 @@ static void spcp8x5_set_termios(struct tty_struct *tty,
1502     }
1503    
1504     /* Set Data Length : 00:5bit, 01:6bit, 10:7bit, 11:8bit */
1505     - if (cflag & CSIZE) {
1506     - switch (cflag & CSIZE) {
1507     - case CS5:
1508     - buf[1] |= SET_UART_FORMAT_SIZE_5;
1509     - break;
1510     - case CS6:
1511     - buf[1] |= SET_UART_FORMAT_SIZE_6;
1512     - break;
1513     - case CS7:
1514     - buf[1] |= SET_UART_FORMAT_SIZE_7;
1515     - break;
1516     - default:
1517     - case CS8:
1518     - buf[1] |= SET_UART_FORMAT_SIZE_8;
1519     - break;
1520     - }
1521     + switch (cflag & CSIZE) {
1522     + case CS5:
1523     + buf[1] |= SET_UART_FORMAT_SIZE_5;
1524     + break;
1525     + case CS6:
1526     + buf[1] |= SET_UART_FORMAT_SIZE_6;
1527     + break;
1528     + case CS7:
1529     + buf[1] |= SET_UART_FORMAT_SIZE_7;
1530     + break;
1531     + default:
1532     + case CS8:
1533     + buf[1] |= SET_UART_FORMAT_SIZE_8;
1534     + break;
1535     }
1536    
1537     /* Set Stop bit2 : 0:1bit 1:2bit */
1538     diff --git a/drivers/xen/grant-table.c b/drivers/xen/grant-table.c
1539     index d5418c1be9aa..840604ed0235 100644
1540     --- a/drivers/xen/grant-table.c
1541     +++ b/drivers/xen/grant-table.c
1542     @@ -920,9 +920,10 @@ int gnttab_map_refs(struct gnttab_map_grant_ref *map_ops,
1543     ret = m2p_add_override(mfn, pages[i], kmap_ops ?
1544     &kmap_ops[i] : NULL);
1545     if (ret)
1546     - return ret;
1547     + goto out;
1548     }
1549    
1550     + out:
1551     if (lazy)
1552     arch_leave_lazy_mmu_mode();
1553    
1554     @@ -953,9 +954,10 @@ int gnttab_unmap_refs(struct gnttab_unmap_grant_ref *unmap_ops,
1555     ret = m2p_remove_override(pages[i], kmap_ops ?
1556     &kmap_ops[i] : NULL);
1557     if (ret)
1558     - return ret;
1559     + goto out;
1560     }
1561    
1562     + out:
1563     if (lazy)
1564     arch_leave_lazy_mmu_mode();
1565    
1566     diff --git a/fs/nfs/nfs4proc.c b/fs/nfs/nfs4proc.c
1567     index e78b8c2656ee..23881380dc6f 100644
1568     --- a/fs/nfs/nfs4proc.c
1569     +++ b/fs/nfs/nfs4proc.c
1570     @@ -4401,11 +4401,17 @@ static void nfs4_delegreturn_done(struct rpc_task *task, void *calldata)
1571     return;
1572    
1573     switch (task->tk_status) {
1574     - case -NFS4ERR_STALE_STATEID:
1575     - case -NFS4ERR_EXPIRED:
1576     case 0:
1577     renew_lease(data->res.server, data->timestamp);
1578     break;
1579     + case -NFS4ERR_ADMIN_REVOKED:
1580     + case -NFS4ERR_DELEG_REVOKED:
1581     + case -NFS4ERR_BAD_STATEID:
1582     + case -NFS4ERR_OLD_STATEID:
1583     + case -NFS4ERR_STALE_STATEID:
1584     + case -NFS4ERR_EXPIRED:
1585     + task->tk_status = 0;
1586     + break;
1587     default:
1588     if (nfs4_async_handle_error(task, data->res.server, NULL) ==
1589     -EAGAIN) {
1590     diff --git a/fs/pipe.c b/fs/pipe.c
1591     index d2c45e14e6d8..0e0752ef2715 100644
1592     --- a/fs/pipe.c
1593     +++ b/fs/pipe.c
1594     @@ -726,11 +726,25 @@ pipe_poll(struct file *filp, poll_table *wait)
1595     return mask;
1596     }
1597    
1598     +static void put_pipe_info(struct inode *inode, struct pipe_inode_info *pipe)
1599     +{
1600     + int kill = 0;
1601     +
1602     + spin_lock(&inode->i_lock);
1603     + if (!--pipe->files) {
1604     + inode->i_pipe = NULL;
1605     + kill = 1;
1606     + }
1607     + spin_unlock(&inode->i_lock);
1608     +
1609     + if (kill)
1610     + free_pipe_info(pipe);
1611     +}
1612     +
1613     static int
1614     pipe_release(struct inode *inode, struct file *file)
1615     {
1616     - struct pipe_inode_info *pipe = inode->i_pipe;
1617     - int kill = 0;
1618     + struct pipe_inode_info *pipe = file->private_data;
1619    
1620     __pipe_lock(pipe);
1621     if (file->f_mode & FMODE_READ)
1622     @@ -743,17 +757,9 @@ pipe_release(struct inode *inode, struct file *file)
1623     kill_fasync(&pipe->fasync_readers, SIGIO, POLL_IN);
1624     kill_fasync(&pipe->fasync_writers, SIGIO, POLL_OUT);
1625     }
1626     - spin_lock(&inode->i_lock);
1627     - if (!--pipe->files) {
1628     - inode->i_pipe = NULL;
1629     - kill = 1;
1630     - }
1631     - spin_unlock(&inode->i_lock);
1632     __pipe_unlock(pipe);
1633    
1634     - if (kill)
1635     - free_pipe_info(pipe);
1636     -
1637     + put_pipe_info(inode, pipe);
1638     return 0;
1639     }
1640    
1641     @@ -1014,7 +1020,6 @@ static int fifo_open(struct inode *inode, struct file *filp)
1642     {
1643     struct pipe_inode_info *pipe;
1644     bool is_pipe = inode->i_sb->s_magic == PIPEFS_MAGIC;
1645     - int kill = 0;
1646     int ret;
1647    
1648     filp->f_version = 0;
1649     @@ -1130,15 +1135,9 @@ err_wr:
1650     goto err;
1651    
1652     err:
1653     - spin_lock(&inode->i_lock);
1654     - if (!--pipe->files) {
1655     - inode->i_pipe = NULL;
1656     - kill = 1;
1657     - }
1658     - spin_unlock(&inode->i_lock);
1659     __pipe_unlock(pipe);
1660     - if (kill)
1661     - free_pipe_info(pipe);
1662     +
1663     + put_pipe_info(inode, pipe);
1664     return ret;
1665     }
1666    
1667     diff --git a/include/crypto/scatterwalk.h b/include/crypto/scatterwalk.h
1668     index 3744d2a642df..2cddd2b92c19 100644
1669     --- a/include/crypto/scatterwalk.h
1670     +++ b/include/crypto/scatterwalk.h
1671     @@ -36,6 +36,7 @@ static inline void scatterwalk_sg_chain(struct scatterlist *sg1, int num,
1672     {
1673     sg_set_page(&sg1[num - 1], (void *)sg2, 0, 0);
1674     sg1[num - 1].page_link &= ~0x02;
1675     + sg1[num - 1].page_link |= 0x01;
1676     }
1677    
1678     static inline struct scatterlist *scatterwalk_sg_next(struct scatterlist *sg)
1679     @@ -43,7 +44,7 @@ static inline struct scatterlist *scatterwalk_sg_next(struct scatterlist *sg)
1680     if (sg_is_last(sg))
1681     return NULL;
1682    
1683     - return (++sg)->length ? sg : (void *)sg_page(sg);
1684     + return (++sg)->length ? sg : sg_chain_ptr(sg);
1685     }
1686    
1687     static inline void scatterwalk_crypto_chain(struct scatterlist *head,
1688     diff --git a/include/linux/genalloc.h b/include/linux/genalloc.h
1689     index 661d374aeb2d..f8d41cb1cbe0 100644
1690     --- a/include/linux/genalloc.h
1691     +++ b/include/linux/genalloc.h
1692     @@ -66,8 +66,8 @@ struct gen_pool_chunk {
1693     struct list_head next_chunk; /* next chunk in pool */
1694     atomic_t avail;
1695     phys_addr_t phys_addr; /* physical starting address of memory chunk */
1696     - unsigned long start_addr; /* starting address of memory chunk */
1697     - unsigned long end_addr; /* ending address of memory chunk */
1698     + unsigned long start_addr; /* start address of memory chunk */
1699     + unsigned long end_addr; /* end address of memory chunk (inclusive) */
1700     unsigned long bits[0]; /* bitmap for allocating memory chunk */
1701     };
1702    
1703     diff --git a/include/scsi/scsi_host.h b/include/scsi/scsi_host.h
1704     index 755243572219..50769a72166b 100644
1705     --- a/include/scsi/scsi_host.h
1706     +++ b/include/scsi/scsi_host.h
1707     @@ -475,6 +475,9 @@ struct scsi_host_template {
1708     */
1709     unsigned ordered_tag:1;
1710    
1711     + /* True if the controller does not support WRITE SAME */
1712     + unsigned no_write_same:1;
1713     +
1714     /*
1715     * Countdown for host blocking with no commands outstanding.
1716     */
1717     @@ -674,6 +677,9 @@ struct Scsi_Host {
1718     /* Don't resume host in EH */
1719     unsigned eh_noresume:1;
1720    
1721     + /* The controller does not support WRITE SAME */
1722     + unsigned no_write_same:1;
1723     +
1724     /*
1725     * Optional work queue to be utilized by the transport
1726     */
1727     diff --git a/kernel/irq/pm.c b/kernel/irq/pm.c
1728     index cb228bf21760..abcd6ca86cb7 100644
1729     --- a/kernel/irq/pm.c
1730     +++ b/kernel/irq/pm.c
1731     @@ -50,7 +50,7 @@ static void resume_irqs(bool want_early)
1732     bool is_early = desc->action &&
1733     desc->action->flags & IRQF_EARLY_RESUME;
1734    
1735     - if (is_early != want_early)
1736     + if (!is_early && want_early)
1737     continue;
1738    
1739     raw_spin_lock_irqsave(&desc->lock, flags);
1740     diff --git a/kernel/time/timekeeping.c b/kernel/time/timekeeping.c
1741     index fcc261c5df29..1c5b0fcd83b2 100644
1742     --- a/kernel/time/timekeeping.c
1743     +++ b/kernel/time/timekeeping.c
1744     @@ -1328,7 +1328,7 @@ static inline void old_vsyscall_fixup(struct timekeeper *tk)
1745     tk->xtime_nsec -= remainder;
1746     tk->xtime_nsec += 1ULL << tk->shift;
1747     tk->ntp_error += remainder << tk->ntp_error_shift;
1748     -
1749     + tk->ntp_error -= (1ULL << tk->shift) << tk->ntp_error_shift;
1750     }
1751     #else
1752     #define old_vsyscall_fixup(tk)
1753     diff --git a/lib/genalloc.c b/lib/genalloc.c
1754     index b35cfa9bc3d4..2a39bf62d8c1 100644
1755     --- a/lib/genalloc.c
1756     +++ b/lib/genalloc.c
1757     @@ -37,6 +37,11 @@
1758     #include <linux/of_address.h>
1759     #include <linux/of_device.h>
1760    
1761     +static inline size_t chunk_size(const struct gen_pool_chunk *chunk)
1762     +{
1763     + return chunk->end_addr - chunk->start_addr + 1;
1764     +}
1765     +
1766     static int set_bits_ll(unsigned long *addr, unsigned long mask_to_set)
1767     {
1768     unsigned long val, nval;
1769     @@ -188,7 +193,7 @@ int gen_pool_add_virt(struct gen_pool *pool, unsigned long virt, phys_addr_t phy
1770    
1771     chunk->phys_addr = phys;
1772     chunk->start_addr = virt;
1773     - chunk->end_addr = virt + size;
1774     + chunk->end_addr = virt + size - 1;
1775     atomic_set(&chunk->avail, size);
1776    
1777     spin_lock(&pool->lock);
1778     @@ -213,7 +218,7 @@ phys_addr_t gen_pool_virt_to_phys(struct gen_pool *pool, unsigned long addr)
1779    
1780     rcu_read_lock();
1781     list_for_each_entry_rcu(chunk, &pool->chunks, next_chunk) {
1782     - if (addr >= chunk->start_addr && addr < chunk->end_addr) {
1783     + if (addr >= chunk->start_addr && addr <= chunk->end_addr) {
1784     paddr = chunk->phys_addr + (addr - chunk->start_addr);
1785     break;
1786     }
1787     @@ -242,7 +247,7 @@ void gen_pool_destroy(struct gen_pool *pool)
1788     chunk = list_entry(_chunk, struct gen_pool_chunk, next_chunk);
1789     list_del(&chunk->next_chunk);
1790    
1791     - end_bit = (chunk->end_addr - chunk->start_addr) >> order;
1792     + end_bit = chunk_size(chunk) >> order;
1793     bit = find_next_bit(chunk->bits, end_bit, 0);
1794     BUG_ON(bit < end_bit);
1795    
1796     @@ -283,7 +288,7 @@ unsigned long gen_pool_alloc(struct gen_pool *pool, size_t size)
1797     if (size > atomic_read(&chunk->avail))
1798     continue;
1799    
1800     - end_bit = (chunk->end_addr - chunk->start_addr) >> order;
1801     + end_bit = chunk_size(chunk) >> order;
1802     retry:
1803     start_bit = pool->algo(chunk->bits, end_bit, start_bit, nbits,
1804     pool->data);
1805     @@ -330,8 +335,8 @@ void gen_pool_free(struct gen_pool *pool, unsigned long addr, size_t size)
1806     nbits = (size + (1UL << order) - 1) >> order;
1807     rcu_read_lock();
1808     list_for_each_entry_rcu(chunk, &pool->chunks, next_chunk) {
1809     - if (addr >= chunk->start_addr && addr < chunk->end_addr) {
1810     - BUG_ON(addr + size > chunk->end_addr);
1811     + if (addr >= chunk->start_addr && addr <= chunk->end_addr) {
1812     + BUG_ON(addr + size - 1 > chunk->end_addr);
1813     start_bit = (addr - chunk->start_addr) >> order;
1814     remain = bitmap_clear_ll(chunk->bits, start_bit, nbits);
1815     BUG_ON(remain);
1816     @@ -400,7 +405,7 @@ size_t gen_pool_size(struct gen_pool *pool)
1817    
1818     rcu_read_lock();
1819     list_for_each_entry_rcu(chunk, &pool->chunks, next_chunk)
1820     - size += chunk->end_addr - chunk->start_addr;
1821     + size += chunk_size(chunk);
1822     rcu_read_unlock();
1823     return size;
1824     }
1825     diff --git a/net/ipv4/udp.c b/net/ipv4/udp.c
1826     index c3075b552248..233f1911dc34 100644
1827     --- a/net/ipv4/udp.c
1828     +++ b/net/ipv4/udp.c
1829     @@ -1073,6 +1073,9 @@ int udp_sendpage(struct sock *sk, struct page *page, int offset,
1830     if (flags & MSG_SENDPAGE_NOTLAST)
1831     flags |= MSG_MORE;
1832    
1833     + if (flags & MSG_SENDPAGE_NOTLAST)
1834     + flags |= MSG_MORE;
1835     +
1836     if (!up->pending) {
1837     struct msghdr msg = { .msg_flags = flags|MSG_MORE };
1838    
1839     diff --git a/sound/pci/hda/patch_realtek.c b/sound/pci/hda/patch_realtek.c
1840     index 661afe7d85e4..937079a5265a 100644
1841     --- a/sound/pci/hda/patch_realtek.c
1842     +++ b/sound/pci/hda/patch_realtek.c
1843     @@ -1763,6 +1763,7 @@ enum {
1844     ALC889_FIXUP_DAC_ROUTE,
1845     ALC889_FIXUP_MBP_VREF,
1846     ALC889_FIXUP_IMAC91_VREF,
1847     + ALC889_FIXUP_MBA21_VREF,
1848     ALC882_FIXUP_INV_DMIC,
1849     ALC882_FIXUP_NO_PRIMARY_HP,
1850     ALC887_FIXUP_ASUS_BASS,
1851     @@ -1866,17 +1867,13 @@ static void alc889_fixup_mbp_vref(struct hda_codec *codec,
1852     }
1853     }
1854    
1855     -/* Set VREF on speaker pins on imac91 */
1856     -static void alc889_fixup_imac91_vref(struct hda_codec *codec,
1857     - const struct hda_fixup *fix, int action)
1858     +static void alc889_fixup_mac_pins(struct hda_codec *codec,
1859     + const hda_nid_t *nids, int num_nids)
1860     {
1861     struct alc_spec *spec = codec->spec;
1862     - static hda_nid_t nids[2] = { 0x18, 0x1a };
1863     int i;
1864    
1865     - if (action != HDA_FIXUP_ACT_INIT)
1866     - return;
1867     - for (i = 0; i < ARRAY_SIZE(nids); i++) {
1868     + for (i = 0; i < num_nids; i++) {
1869     unsigned int val;
1870     val = snd_hda_codec_get_pin_target(codec, nids[i]);
1871     val |= AC_PINCTL_VREF_50;
1872     @@ -1885,6 +1882,26 @@ static void alc889_fixup_imac91_vref(struct hda_codec *codec,
1873     spec->gen.keep_vref_in_automute = 1;
1874     }
1875    
1876     +/* Set VREF on speaker pins on imac91 */
1877     +static void alc889_fixup_imac91_vref(struct hda_codec *codec,
1878     + const struct hda_fixup *fix, int action)
1879     +{
1880     + static hda_nid_t nids[2] = { 0x18, 0x1a };
1881     +
1882     + if (action == HDA_FIXUP_ACT_INIT)
1883     + alc889_fixup_mac_pins(codec, nids, ARRAY_SIZE(nids));
1884     +}
1885     +
1886     +/* Set VREF on speaker pins on mba21 */
1887     +static void alc889_fixup_mba21_vref(struct hda_codec *codec,
1888     + const struct hda_fixup *fix, int action)
1889     +{
1890     + static hda_nid_t nids[2] = { 0x18, 0x19 };
1891     +
1892     + if (action == HDA_FIXUP_ACT_INIT)
1893     + alc889_fixup_mac_pins(codec, nids, ARRAY_SIZE(nids));
1894     +}
1895     +
1896     /* Don't take HP output as primary
1897     * Strangely, the speaker output doesn't work on Vaio Z and some Vaio
1898     * all-in-one desktop PCs (for example VGC-LN51JGB) through DAC 0x05
1899     @@ -2079,6 +2096,12 @@ static const struct hda_fixup alc882_fixups[] = {
1900     .chained = true,
1901     .chain_id = ALC882_FIXUP_GPIO1,
1902     },
1903     + [ALC889_FIXUP_MBA21_VREF] = {
1904     + .type = HDA_FIXUP_FUNC,
1905     + .v.func = alc889_fixup_mba21_vref,
1906     + .chained = true,
1907     + .chain_id = ALC889_FIXUP_MBP_VREF,
1908     + },
1909     [ALC882_FIXUP_INV_DMIC] = {
1910     .type = HDA_FIXUP_FUNC,
1911     .v.func = alc_fixup_inv_dmic_0x12,
1912     @@ -2143,7 +2166,7 @@ static const struct snd_pci_quirk alc882_fixup_tbl[] = {
1913     SND_PCI_QUIRK(0x106b, 0x3000, "iMac", ALC889_FIXUP_MBP_VREF),
1914     SND_PCI_QUIRK(0x106b, 0x3200, "iMac 7,1 Aluminum", ALC882_FIXUP_EAPD),
1915     SND_PCI_QUIRK(0x106b, 0x3400, "MacBookAir 1,1", ALC889_FIXUP_MBP_VREF),
1916     - SND_PCI_QUIRK(0x106b, 0x3500, "MacBookAir 2,1", ALC889_FIXUP_MBP_VREF),
1917     + SND_PCI_QUIRK(0x106b, 0x3500, "MacBookAir 2,1", ALC889_FIXUP_MBA21_VREF),
1918     SND_PCI_QUIRK(0x106b, 0x3600, "Macbook 3,1", ALC889_FIXUP_MBP_VREF),
1919     SND_PCI_QUIRK(0x106b, 0x3800, "MacbookPro 4,1", ALC889_FIXUP_MBP_VREF),
1920     SND_PCI_QUIRK(0x106b, 0x3e00, "iMac 24 Aluminum", ALC885_FIXUP_MACPRO_GPIO),
1921     @@ -3041,6 +3064,7 @@ static void alc_headset_mode_ctia(struct hda_codec *codec)
1922     alc_write_coef_idx(codec, 0x18, 0x7388);
1923     break;
1924     case 0x10ec0668:
1925     + alc_write_coef_idx(codec, 0x11, 0x0001);
1926     alc_write_coef_idx(codec, 0x15, 0x0d60);
1927     alc_write_coef_idx(codec, 0xc3, 0x0000);
1928     break;
1929     @@ -3063,6 +3087,7 @@ static void alc_headset_mode_omtp(struct hda_codec *codec)
1930     alc_write_coef_idx(codec, 0x18, 0x7388);
1931     break;
1932     case 0x10ec0668:
1933     + alc_write_coef_idx(codec, 0x11, 0x0001);
1934     alc_write_coef_idx(codec, 0x15, 0x0d50);
1935     alc_write_coef_idx(codec, 0xc3, 0x0000);
1936     break;
1937     @@ -3632,6 +3657,7 @@ static const struct snd_pci_quirk alc269_fixup_tbl[] = {
1938     SND_PCI_QUIRK(0x1028, 0x0613, "Dell", ALC269_FIXUP_DELL1_MIC_NO_PRESENCE),
1939     SND_PCI_QUIRK(0x1028, 0x0614, "Dell Inspiron 3135", ALC269_FIXUP_DELL1_MIC_NO_PRESENCE),
1940     SND_PCI_QUIRK(0x1028, 0x0616, "Dell Vostro 5470", ALC290_FIXUP_MONO_SPEAKERS),
1941     + SND_PCI_QUIRK(0x1028, 0x0638, "Dell Inspiron 5439", ALC290_FIXUP_MONO_SPEAKERS),
1942     SND_PCI_QUIRK(0x103c, 0x1586, "HP", ALC269_FIXUP_HP_MUTE_LED_MIC2),
1943     SND_PCI_QUIRK(0x103c, 0x18e6, "HP", ALC269_FIXUP_HP_GPIO_LED),
1944     SND_PCI_QUIRK(0x103c, 0x1973, "HP Pavilion", ALC269_FIXUP_HP_MUTE_LED_MIC1),
1945     @@ -3896,6 +3922,7 @@ enum {
1946     ALC861_FIXUP_AMP_VREF_0F,
1947     ALC861_FIXUP_NO_JACK_DETECT,
1948     ALC861_FIXUP_ASUS_A6RP,
1949     + ALC660_FIXUP_ASUS_W7J,
1950     };
1951    
1952     /* On some laptops, VREF of pin 0x0f is abused for controlling the main amp */
1953     @@ -3945,10 +3972,22 @@ static const struct hda_fixup alc861_fixups[] = {
1954     .v.func = alc861_fixup_asus_amp_vref_0f,
1955     .chained = true,
1956     .chain_id = ALC861_FIXUP_NO_JACK_DETECT,
1957     + },
1958     + [ALC660_FIXUP_ASUS_W7J] = {
1959     + .type = HDA_FIXUP_VERBS,
1960     + .v.verbs = (const struct hda_verb[]) {
1961     + /* ASUS W7J needs a magic pin setup on unused NID 0x10
1962     + * for enabling outputs
1963     + */
1964     + {0x10, AC_VERB_SET_PIN_WIDGET_CONTROL, 0x24},
1965     + { }
1966     + },
1967     }
1968     };
1969    
1970     static const struct snd_pci_quirk alc861_fixup_tbl[] = {
1971     + SND_PCI_QUIRK(0x1043, 0x1253, "ASUS W7J", ALC660_FIXUP_ASUS_W7J),
1972     + SND_PCI_QUIRK(0x1043, 0x1263, "ASUS Z35HL", ALC660_FIXUP_ASUS_W7J),
1973     SND_PCI_QUIRK(0x1043, 0x1393, "ASUS A6Rp", ALC861_FIXUP_ASUS_A6RP),
1974     SND_PCI_QUIRK_VENDOR(0x1043, "ASUS laptop", ALC861_FIXUP_AMP_VREF_0F),
1975     SND_PCI_QUIRK(0x1462, 0x7254, "HP DX2200", ALC861_FIXUP_NO_JACK_DETECT),
1976     diff --git a/sound/soc/codecs/wm8731.c b/sound/soc/codecs/wm8731.c
1977     index 5276062d6c79..10d492b6a5b4 100644
1978     --- a/sound/soc/codecs/wm8731.c
1979     +++ b/sound/soc/codecs/wm8731.c
1980     @@ -407,10 +407,10 @@ static int wm8731_set_dai_fmt(struct snd_soc_dai *codec_dai,
1981     iface |= 0x0001;
1982     break;
1983     case SND_SOC_DAIFMT_DSP_A:
1984     - iface |= 0x0003;
1985     + iface |= 0x0013;
1986     break;
1987     case SND_SOC_DAIFMT_DSP_B:
1988     - iface |= 0x0013;
1989     + iface |= 0x0003;
1990     break;
1991     default:
1992     return -EINVAL;
1993     diff --git a/sound/soc/codecs/wm8990.c b/sound/soc/codecs/wm8990.c
1994     index 837978e16e9d..ded9ed854a1f 100644
1995     --- a/sound/soc/codecs/wm8990.c
1996     +++ b/sound/soc/codecs/wm8990.c
1997     @@ -1264,6 +1264,8 @@ static int wm8990_set_bias_level(struct snd_soc_codec *codec,
1998    
1999     /* disable POBCTRL, SOFT_ST and BUFDCOPEN */
2000     snd_soc_write(codec, WM8990_ANTIPOP2, 0x0);
2001     +
2002     + codec->cache_sync = 1;
2003     break;
2004     }
2005