Contents of /trunk/kernel-alx/patches-3.10/0123-3.10.24-all-fixes.patch
Parent Directory | Revision Log
Revision 2351 -
(show annotations)
(download)
Mon Dec 16 10:05:33 2013 UTC (10 years, 9 months ago) by niro
File size: 65409 byte(s)
Mon Dec 16 10:05:33 2013 UTC (10 years, 9 months ago) by niro
File size: 65409 byte(s)
-linux-3.10.24
1 | 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 |