Annotation of /trunk/kernel-alx/patches-3.8/0103-3.8.4-all-fixes.patch
Parent Directory | Revision Log
Revision 2133 -
(hide annotations)
(download)
Thu Mar 21 09:09:59 2013 UTC (11 years, 6 months ago) by niro
File size: 100638 byte(s)
Thu Mar 21 09:09:59 2013 UTC (11 years, 6 months ago) by niro
File size: 100638 byte(s)
-linux-3.8.4
1 | niro | 2133 | diff --git a/Documentation/devicetree/bindings/tty/serial/of-serial.txt b/Documentation/devicetree/bindings/tty/serial/of-serial.txt |
2 | index 1e1145c..8f01cb1 100644 | ||
3 | --- a/Documentation/devicetree/bindings/tty/serial/of-serial.txt | ||
4 | +++ b/Documentation/devicetree/bindings/tty/serial/of-serial.txt | ||
5 | @@ -11,6 +11,9 @@ Required properties: | ||
6 | - "nvidia,tegra20-uart" | ||
7 | - "nxp,lpc3220-uart" | ||
8 | - "ibm,qpace-nwp-serial" | ||
9 | + - "altr,16550-FIFO32" | ||
10 | + - "altr,16550-FIFO64" | ||
11 | + - "altr,16550-FIFO128" | ||
12 | - "serial" if the port type is unknown. | ||
13 | - reg : offset and length of the register set for the device. | ||
14 | - interrupts : should contain uart interrupt. | ||
15 | diff --git a/arch/arm/mach-at91/board-foxg20.c b/arch/arm/mach-at91/board-foxg20.c | ||
16 | index 191d37c..1478294 100644 | ||
17 | --- a/arch/arm/mach-at91/board-foxg20.c | ||
18 | +++ b/arch/arm/mach-at91/board-foxg20.c | ||
19 | @@ -176,6 +176,7 @@ static struct w1_gpio_platform_data w1_gpio_pdata = { | ||
20 | /* If you choose to use a pin other than PB16 it needs to be 3.3V */ | ||
21 | .pin = AT91_PIN_PB16, | ||
22 | .is_open_drain = 1, | ||
23 | + .ext_pullup_enable_pin = -EINVAL, | ||
24 | }; | ||
25 | |||
26 | static struct platform_device w1_device = { | ||
27 | diff --git a/arch/arm/mach-at91/board-stamp9g20.c b/arch/arm/mach-at91/board-stamp9g20.c | ||
28 | index 48a962b..58a6758 100644 | ||
29 | --- a/arch/arm/mach-at91/board-stamp9g20.c | ||
30 | +++ b/arch/arm/mach-at91/board-stamp9g20.c | ||
31 | @@ -188,6 +188,7 @@ static struct spi_board_info portuxg20_spi_devices[] = { | ||
32 | static struct w1_gpio_platform_data w1_gpio_pdata = { | ||
33 | .pin = AT91_PIN_PA29, | ||
34 | .is_open_drain = 1, | ||
35 | + .ext_pullup_enable_pin = -EINVAL, | ||
36 | }; | ||
37 | |||
38 | static struct platform_device w1_device = { | ||
39 | diff --git a/arch/arm/mach-davinci/dma.c b/arch/arm/mach-davinci/dma.c | ||
40 | index a685e97..45b7c71 100644 | ||
41 | --- a/arch/arm/mach-davinci/dma.c | ||
42 | +++ b/arch/arm/mach-davinci/dma.c | ||
43 | @@ -743,6 +743,9 @@ EXPORT_SYMBOL(edma_free_channel); | ||
44 | */ | ||
45 | int edma_alloc_slot(unsigned ctlr, int slot) | ||
46 | { | ||
47 | + if (!edma_cc[ctlr]) | ||
48 | + return -EINVAL; | ||
49 | + | ||
50 | if (slot >= 0) | ||
51 | slot = EDMA_CHAN_SLOT(slot); | ||
52 | |||
53 | diff --git a/arch/arm/mach-ixp4xx/vulcan-setup.c b/arch/arm/mach-ixp4xx/vulcan-setup.c | ||
54 | index 2798f43..1dddc1b 100644 | ||
55 | --- a/arch/arm/mach-ixp4xx/vulcan-setup.c | ||
56 | +++ b/arch/arm/mach-ixp4xx/vulcan-setup.c | ||
57 | @@ -163,6 +163,7 @@ static struct platform_device vulcan_max6369 = { | ||
58 | |||
59 | static struct w1_gpio_platform_data vulcan_w1_gpio_pdata = { | ||
60 | .pin = 14, | ||
61 | + .ext_pullup_enable_pin = -EINVAL, | ||
62 | }; | ||
63 | |||
64 | static struct platform_device vulcan_w1_gpio = { | ||
65 | diff --git a/arch/arm/mach-kirkwood/board-dt.c b/arch/arm/mach-kirkwood/board-dt.c | ||
66 | index de4fd2b..e714ead 100644 | ||
67 | --- a/arch/arm/mach-kirkwood/board-dt.c | ||
68 | +++ b/arch/arm/mach-kirkwood/board-dt.c | ||
69 | @@ -41,16 +41,12 @@ static void __init kirkwood_legacy_clk_init(void) | ||
70 | |||
71 | struct device_node *np = of_find_compatible_node( | ||
72 | NULL, NULL, "marvell,kirkwood-gating-clock"); | ||
73 | - | ||
74 | struct of_phandle_args clkspec; | ||
75 | + struct clk *clk; | ||
76 | |||
77 | clkspec.np = np; | ||
78 | clkspec.args_count = 1; | ||
79 | |||
80 | - clkspec.args[0] = CGC_BIT_GE0; | ||
81 | - orion_clkdev_add(NULL, "mv643xx_eth_port.0", | ||
82 | - of_clk_get_from_provider(&clkspec)); | ||
83 | - | ||
84 | clkspec.args[0] = CGC_BIT_PEX0; | ||
85 | orion_clkdev_add("0", "pcie", | ||
86 | of_clk_get_from_provider(&clkspec)); | ||
87 | @@ -63,14 +59,24 @@ static void __init kirkwood_legacy_clk_init(void) | ||
88 | orion_clkdev_add("1", "pcie", | ||
89 | of_clk_get_from_provider(&clkspec)); | ||
90 | |||
91 | - clkspec.args[0] = CGC_BIT_GE1; | ||
92 | - orion_clkdev_add(NULL, "mv643xx_eth_port.1", | ||
93 | - of_clk_get_from_provider(&clkspec)); | ||
94 | - | ||
95 | clkspec.args[0] = CGC_BIT_SDIO; | ||
96 | orion_clkdev_add(NULL, "mvsdio", | ||
97 | of_clk_get_from_provider(&clkspec)); | ||
98 | |||
99 | + /* | ||
100 | + * The ethernet interfaces forget the MAC address assigned by | ||
101 | + * u-boot if the clocks are turned off. Until proper DT support | ||
102 | + * is available we always enable them for now. | ||
103 | + */ | ||
104 | + clkspec.args[0] = CGC_BIT_GE0; | ||
105 | + clk = of_clk_get_from_provider(&clkspec); | ||
106 | + orion_clkdev_add(NULL, "mv643xx_eth_port.0", clk); | ||
107 | + clk_prepare_enable(clk); | ||
108 | + | ||
109 | + clkspec.args[0] = CGC_BIT_GE1; | ||
110 | + clk = of_clk_get_from_provider(&clkspec); | ||
111 | + orion_clkdev_add(NULL, "mv643xx_eth_port.1", clk); | ||
112 | + clk_prepare_enable(clk); | ||
113 | } | ||
114 | |||
115 | static void __init kirkwood_of_clk_init(void) | ||
116 | diff --git a/arch/arm/mach-pxa/raumfeld.c b/arch/arm/mach-pxa/raumfeld.c | ||
117 | index 25b08bfa..6283fcb 100644 | ||
118 | --- a/arch/arm/mach-pxa/raumfeld.c | ||
119 | +++ b/arch/arm/mach-pxa/raumfeld.c | ||
120 | @@ -505,6 +505,7 @@ static struct w1_gpio_platform_data w1_gpio_platform_data = { | ||
121 | .pin = GPIO_ONE_WIRE, | ||
122 | .is_open_drain = 0, | ||
123 | .enable_external_pullup = w1_enable_external_pullup, | ||
124 | + .ext_pullup_enable_pin = -EINVAL, | ||
125 | }; | ||
126 | |||
127 | struct platform_device raumfeld_w1_gpio_device = { | ||
128 | diff --git a/arch/powerpc/include/asm/mmu-hash64.h b/arch/powerpc/include/asm/mmu-hash64.h | ||
129 | index 2fdb47a..b59e06f 100644 | ||
130 | --- a/arch/powerpc/include/asm/mmu-hash64.h | ||
131 | +++ b/arch/powerpc/include/asm/mmu-hash64.h | ||
132 | @@ -343,17 +343,16 @@ extern void slb_set_size(u16 size); | ||
133 | /* | ||
134 | * VSID allocation (256MB segment) | ||
135 | * | ||
136 | - * We first generate a 38-bit "proto-VSID". For kernel addresses this | ||
137 | - * is equal to the ESID | 1 << 37, for user addresses it is: | ||
138 | - * (context << USER_ESID_BITS) | (esid & ((1U << USER_ESID_BITS) - 1) | ||
139 | + * We first generate a 37-bit "proto-VSID". Proto-VSIDs are generated | ||
140 | + * from mmu context id and effective segment id of the address. | ||
141 | * | ||
142 | - * This splits the proto-VSID into the below range | ||
143 | - * 0 - (2^(CONTEXT_BITS + USER_ESID_BITS) - 1) : User proto-VSID range | ||
144 | - * 2^(CONTEXT_BITS + USER_ESID_BITS) - 2^(VSID_BITS) : Kernel proto-VSID range | ||
145 | - * | ||
146 | - * We also have CONTEXT_BITS + USER_ESID_BITS = VSID_BITS - 1 | ||
147 | - * That is, we assign half of the space to user processes and half | ||
148 | - * to the kernel. | ||
149 | + * For user processes max context id is limited to ((1ul << 19) - 5) | ||
150 | + * for kernel space, we use the top 4 context ids to map address as below | ||
151 | + * NOTE: each context only support 64TB now. | ||
152 | + * 0x7fffc - [ 0xc000000000000000 - 0xc0003fffffffffff ] | ||
153 | + * 0x7fffd - [ 0xd000000000000000 - 0xd0003fffffffffff ] | ||
154 | + * 0x7fffe - [ 0xe000000000000000 - 0xe0003fffffffffff ] | ||
155 | + * 0x7ffff - [ 0xf000000000000000 - 0xf0003fffffffffff ] | ||
156 | * | ||
157 | * The proto-VSIDs are then scrambled into real VSIDs with the | ||
158 | * multiplicative hash: | ||
159 | @@ -363,41 +362,49 @@ extern void slb_set_size(u16 size); | ||
160 | * VSID_MULTIPLIER is prime, so in particular it is | ||
161 | * co-prime to VSID_MODULUS, making this a 1:1 scrambling function. | ||
162 | * Because the modulus is 2^n-1 we can compute it efficiently without | ||
163 | - * a divide or extra multiply (see below). | ||
164 | - * | ||
165 | - * This scheme has several advantages over older methods: | ||
166 | - * | ||
167 | - * - We have VSIDs allocated for every kernel address | ||
168 | - * (i.e. everything above 0xC000000000000000), except the very top | ||
169 | - * segment, which simplifies several things. | ||
170 | + * a divide or extra multiply (see below). The scramble function gives | ||
171 | + * robust scattering in the hash table (at least based on some initial | ||
172 | + * results). | ||
173 | * | ||
174 | - * - We allow for USER_ESID_BITS significant bits of ESID and | ||
175 | - * CONTEXT_BITS bits of context for user addresses. | ||
176 | - * i.e. 64T (46 bits) of address space for up to half a million contexts. | ||
177 | + * We also consider VSID 0 special. We use VSID 0 for slb entries mapping | ||
178 | + * bad address. This enables us to consolidate bad address handling in | ||
179 | + * hash_page. | ||
180 | * | ||
181 | - * - The scramble function gives robust scattering in the hash | ||
182 | - * table (at least based on some initial results). The previous | ||
183 | - * method was more susceptible to pathological cases giving excessive | ||
184 | - * hash collisions. | ||
185 | + * We also need to avoid the last segment of the last context, because that | ||
186 | + * would give a protovsid of 0x1fffffffff. That will result in a VSID 0 | ||
187 | + * because of the modulo operation in vsid scramble. But the vmemmap | ||
188 | + * (which is what uses region 0xf) will never be close to 64TB in size | ||
189 | + * (it's 56 bytes per page of system memory). | ||
190 | */ | ||
191 | |||
192 | +#define CONTEXT_BITS 19 | ||
193 | +#define ESID_BITS 18 | ||
194 | +#define ESID_BITS_1T 6 | ||
195 | + | ||
196 | +/* | ||
197 | + * 256MB segment | ||
198 | + * The proto-VSID space has 2^(CONTEX_BITS + ESID_BITS) - 1 segments | ||
199 | + * available for user + kernel mapping. The top 4 contexts are used for | ||
200 | + * kernel mapping. Each segment contains 2^28 bytes. Each | ||
201 | + * context maps 2^46 bytes (64TB) so we can support 2^19-1 contexts | ||
202 | + * (19 == 37 + 28 - 46). | ||
203 | + */ | ||
204 | +#define MAX_USER_CONTEXT ((ASM_CONST(1) << CONTEXT_BITS) - 5) | ||
205 | + | ||
206 | /* | ||
207 | * This should be computed such that protovosid * vsid_mulitplier | ||
208 | * doesn't overflow 64 bits. It should also be co-prime to vsid_modulus | ||
209 | */ | ||
210 | #define VSID_MULTIPLIER_256M ASM_CONST(12538073) /* 24-bit prime */ | ||
211 | -#define VSID_BITS_256M 38 | ||
212 | +#define VSID_BITS_256M (CONTEXT_BITS + ESID_BITS) | ||
213 | #define VSID_MODULUS_256M ((1UL<<VSID_BITS_256M)-1) | ||
214 | |||
215 | #define VSID_MULTIPLIER_1T ASM_CONST(12538073) /* 24-bit prime */ | ||
216 | -#define VSID_BITS_1T 26 | ||
217 | +#define VSID_BITS_1T (CONTEXT_BITS + ESID_BITS_1T) | ||
218 | #define VSID_MODULUS_1T ((1UL<<VSID_BITS_1T)-1) | ||
219 | |||
220 | -#define CONTEXT_BITS 19 | ||
221 | -#define USER_ESID_BITS 18 | ||
222 | -#define USER_ESID_BITS_1T 6 | ||
223 | |||
224 | -#define USER_VSID_RANGE (1UL << (USER_ESID_BITS + SID_SHIFT)) | ||
225 | +#define USER_VSID_RANGE (1UL << (ESID_BITS + SID_SHIFT)) | ||
226 | |||
227 | /* | ||
228 | * This macro generates asm code to compute the VSID scramble | ||
229 | @@ -421,7 +428,8 @@ extern void slb_set_size(u16 size); | ||
230 | srdi rx,rt,VSID_BITS_##size; \ | ||
231 | clrldi rt,rt,(64-VSID_BITS_##size); \ | ||
232 | add rt,rt,rx; /* add high and low bits */ \ | ||
233 | - /* Now, r3 == VSID (mod 2^36-1), and lies between 0 and \ | ||
234 | + /* NOTE: explanation based on VSID_BITS_##size = 36 \ | ||
235 | + * Now, r3 == VSID (mod 2^36-1), and lies between 0 and \ | ||
236 | * 2^36-1+2^28-1. That in particular means that if r3 >= \ | ||
237 | * 2^36-1, then r3+1 has the 2^36 bit set. So, if r3+1 has \ | ||
238 | * the bit clear, r3 already has the answer we want, if it \ | ||
239 | @@ -513,34 +521,6 @@ typedef struct { | ||
240 | }) | ||
241 | #endif /* 1 */ | ||
242 | |||
243 | -/* | ||
244 | - * This is only valid for addresses >= PAGE_OFFSET | ||
245 | - * The proto-VSID space is divided into two class | ||
246 | - * User: 0 to 2^(CONTEXT_BITS + USER_ESID_BITS) -1 | ||
247 | - * kernel: 2^(CONTEXT_BITS + USER_ESID_BITS) to 2^(VSID_BITS) - 1 | ||
248 | - * | ||
249 | - * With KERNEL_START at 0xc000000000000000, the proto vsid for | ||
250 | - * the kernel ends up with 0xc00000000 (36 bits). With 64TB | ||
251 | - * support we need to have kernel proto-VSID in the | ||
252 | - * [2^37 to 2^38 - 1] range due to the increased USER_ESID_BITS. | ||
253 | - */ | ||
254 | -static inline unsigned long get_kernel_vsid(unsigned long ea, int ssize) | ||
255 | -{ | ||
256 | - unsigned long proto_vsid; | ||
257 | - /* | ||
258 | - * We need to make sure proto_vsid for the kernel is | ||
259 | - * >= 2^(CONTEXT_BITS + USER_ESID_BITS[_1T]) | ||
260 | - */ | ||
261 | - if (ssize == MMU_SEGSIZE_256M) { | ||
262 | - proto_vsid = ea >> SID_SHIFT; | ||
263 | - proto_vsid |= (1UL << (CONTEXT_BITS + USER_ESID_BITS)); | ||
264 | - return vsid_scramble(proto_vsid, 256M); | ||
265 | - } | ||
266 | - proto_vsid = ea >> SID_SHIFT_1T; | ||
267 | - proto_vsid |= (1UL << (CONTEXT_BITS + USER_ESID_BITS_1T)); | ||
268 | - return vsid_scramble(proto_vsid, 1T); | ||
269 | -} | ||
270 | - | ||
271 | /* Returns the segment size indicator for a user address */ | ||
272 | static inline int user_segment_size(unsigned long addr) | ||
273 | { | ||
274 | @@ -550,17 +530,41 @@ static inline int user_segment_size(unsigned long addr) | ||
275 | return MMU_SEGSIZE_256M; | ||
276 | } | ||
277 | |||
278 | -/* This is only valid for user addresses (which are below 2^44) */ | ||
279 | static inline unsigned long get_vsid(unsigned long context, unsigned long ea, | ||
280 | int ssize) | ||
281 | { | ||
282 | + /* | ||
283 | + * Bad address. We return VSID 0 for that | ||
284 | + */ | ||
285 | + if ((ea & ~REGION_MASK) >= PGTABLE_RANGE) | ||
286 | + return 0; | ||
287 | + | ||
288 | if (ssize == MMU_SEGSIZE_256M) | ||
289 | - return vsid_scramble((context << USER_ESID_BITS) | ||
290 | + return vsid_scramble((context << ESID_BITS) | ||
291 | | (ea >> SID_SHIFT), 256M); | ||
292 | - return vsid_scramble((context << USER_ESID_BITS_1T) | ||
293 | + return vsid_scramble((context << ESID_BITS_1T) | ||
294 | | (ea >> SID_SHIFT_1T), 1T); | ||
295 | } | ||
296 | |||
297 | +/* | ||
298 | + * This is only valid for addresses >= PAGE_OFFSET | ||
299 | + * | ||
300 | + * For kernel space, we use the top 4 context ids to map address as below | ||
301 | + * 0x7fffc - [ 0xc000000000000000 - 0xc0003fffffffffff ] | ||
302 | + * 0x7fffd - [ 0xd000000000000000 - 0xd0003fffffffffff ] | ||
303 | + * 0x7fffe - [ 0xe000000000000000 - 0xe0003fffffffffff ] | ||
304 | + * 0x7ffff - [ 0xf000000000000000 - 0xf0003fffffffffff ] | ||
305 | + */ | ||
306 | +static inline unsigned long get_kernel_vsid(unsigned long ea, int ssize) | ||
307 | +{ | ||
308 | + unsigned long context; | ||
309 | + | ||
310 | + /* | ||
311 | + * kernel take the top 4 context from the available range | ||
312 | + */ | ||
313 | + context = (MAX_USER_CONTEXT) + ((ea >> 60) - 0xc) + 1; | ||
314 | + return get_vsid(context, ea, ssize); | ||
315 | +} | ||
316 | #endif /* __ASSEMBLY__ */ | ||
317 | |||
318 | #endif /* _ASM_POWERPC_MMU_HASH64_H_ */ | ||
319 | diff --git a/arch/powerpc/kernel/cputable.c b/arch/powerpc/kernel/cputable.c | ||
320 | index 75a3d71..19599ef 100644 | ||
321 | --- a/arch/powerpc/kernel/cputable.c | ||
322 | +++ b/arch/powerpc/kernel/cputable.c | ||
323 | @@ -275,7 +275,7 @@ static struct cpu_spec __initdata cpu_specs[] = { | ||
324 | .cpu_features = CPU_FTRS_PPC970, | ||
325 | .cpu_user_features = COMMON_USER_POWER4 | | ||
326 | PPC_FEATURE_HAS_ALTIVEC_COMP, | ||
327 | - .mmu_features = MMU_FTR_HPTE_TABLE, | ||
328 | + .mmu_features = MMU_FTRS_PPC970, | ||
329 | .icache_bsize = 128, | ||
330 | .dcache_bsize = 128, | ||
331 | .num_pmcs = 8, | ||
332 | diff --git a/arch/powerpc/kernel/exceptions-64s.S b/arch/powerpc/kernel/exceptions-64s.S | ||
333 | index 4665e82..3684cbd 100644 | ||
334 | --- a/arch/powerpc/kernel/exceptions-64s.S | ||
335 | +++ b/arch/powerpc/kernel/exceptions-64s.S | ||
336 | @@ -1268,20 +1268,36 @@ do_ste_alloc: | ||
337 | _GLOBAL(do_stab_bolted) | ||
338 | stw r9,PACA_EXSLB+EX_CCR(r13) /* save CR in exc. frame */ | ||
339 | std r11,PACA_EXSLB+EX_SRR0(r13) /* save SRR0 in exc. frame */ | ||
340 | + mfspr r11,SPRN_DAR /* ea */ | ||
341 | |||
342 | + /* | ||
343 | + * check for bad kernel/user address | ||
344 | + * (ea & ~REGION_MASK) >= PGTABLE_RANGE | ||
345 | + */ | ||
346 | + rldicr. r9,r11,4,(63 - 46 - 4) | ||
347 | + li r9,0 /* VSID = 0 for bad address */ | ||
348 | + bne- 0f | ||
349 | + | ||
350 | + /* | ||
351 | + * Calculate VSID: | ||
352 | + * This is the kernel vsid, we take the top for context from | ||
353 | + * the range. context = (MAX_USER_CONTEXT) + ((ea >> 60) - 0xc) + 1 | ||
354 | + * Here we know that (ea >> 60) == 0xc | ||
355 | + */ | ||
356 | + lis r9,(MAX_USER_CONTEXT + 1)@ha | ||
357 | + addi r9,r9,(MAX_USER_CONTEXT + 1)@l | ||
358 | + | ||
359 | + srdi r10,r11,SID_SHIFT | ||
360 | + rldimi r10,r9,ESID_BITS,0 /* proto vsid */ | ||
361 | + ASM_VSID_SCRAMBLE(r10, r9, 256M) | ||
362 | + rldic r9,r10,12,16 /* r9 = vsid << 12 */ | ||
363 | + | ||
364 | +0: | ||
365 | /* Hash to the primary group */ | ||
366 | ld r10,PACASTABVIRT(r13) | ||
367 | - mfspr r11,SPRN_DAR | ||
368 | - srdi r11,r11,28 | ||
369 | + srdi r11,r11,SID_SHIFT | ||
370 | rldimi r10,r11,7,52 /* r10 = first ste of the group */ | ||
371 | |||
372 | - /* Calculate VSID */ | ||
373 | - /* This is a kernel address, so protovsid = ESID | 1 << 37 */ | ||
374 | - li r9,0x1 | ||
375 | - rldimi r11,r9,(CONTEXT_BITS + USER_ESID_BITS),0 | ||
376 | - ASM_VSID_SCRAMBLE(r11, r9, 256M) | ||
377 | - rldic r9,r11,12,16 /* r9 = vsid << 12 */ | ||
378 | - | ||
379 | /* Search the primary group for a free entry */ | ||
380 | 1: ld r11,0(r10) /* Test valid bit of the current ste */ | ||
381 | andi. r11,r11,0x80 | ||
382 | diff --git a/arch/powerpc/kvm/book3s_64_mmu_host.c b/arch/powerpc/kvm/book3s_64_mmu_host.c | ||
383 | index ead58e3..5d7d29a 100644 | ||
384 | --- a/arch/powerpc/kvm/book3s_64_mmu_host.c | ||
385 | +++ b/arch/powerpc/kvm/book3s_64_mmu_host.c | ||
386 | @@ -326,8 +326,8 @@ int kvmppc_mmu_init(struct kvm_vcpu *vcpu) | ||
387 | vcpu3s->context_id[0] = err; | ||
388 | |||
389 | vcpu3s->proto_vsid_max = ((vcpu3s->context_id[0] + 1) | ||
390 | - << USER_ESID_BITS) - 1; | ||
391 | - vcpu3s->proto_vsid_first = vcpu3s->context_id[0] << USER_ESID_BITS; | ||
392 | + << ESID_BITS) - 1; | ||
393 | + vcpu3s->proto_vsid_first = vcpu3s->context_id[0] << ESID_BITS; | ||
394 | vcpu3s->proto_vsid_next = vcpu3s->proto_vsid_first; | ||
395 | |||
396 | kvmppc_mmu_hpte_init(vcpu); | ||
397 | diff --git a/arch/powerpc/mm/hash_utils_64.c b/arch/powerpc/mm/hash_utils_64.c | ||
398 | index 3a292be..004630b 100644 | ||
399 | --- a/arch/powerpc/mm/hash_utils_64.c | ||
400 | +++ b/arch/powerpc/mm/hash_utils_64.c | ||
401 | @@ -194,6 +194,11 @@ int htab_bolt_mapping(unsigned long vstart, unsigned long vend, | ||
402 | unsigned long vpn = hpt_vpn(vaddr, vsid, ssize); | ||
403 | unsigned long tprot = prot; | ||
404 | |||
405 | + /* | ||
406 | + * If we hit a bad address return error. | ||
407 | + */ | ||
408 | + if (!vsid) | ||
409 | + return -1; | ||
410 | /* Make kernel text executable */ | ||
411 | if (overlaps_kernel_text(vaddr, vaddr + step)) | ||
412 | tprot &= ~HPTE_R_N; | ||
413 | @@ -758,6 +763,8 @@ void __init early_init_mmu(void) | ||
414 | /* Initialize stab / SLB management */ | ||
415 | if (mmu_has_feature(MMU_FTR_SLB)) | ||
416 | slb_initialize(); | ||
417 | + else | ||
418 | + stab_initialize(get_paca()->stab_real); | ||
419 | } | ||
420 | |||
421 | #ifdef CONFIG_SMP | ||
422 | @@ -921,11 +928,6 @@ int hash_page(unsigned long ea, unsigned long access, unsigned long trap) | ||
423 | DBG_LOW("hash_page(ea=%016lx, access=%lx, trap=%lx\n", | ||
424 | ea, access, trap); | ||
425 | |||
426 | - if ((ea & ~REGION_MASK) >= PGTABLE_RANGE) { | ||
427 | - DBG_LOW(" out of pgtable range !\n"); | ||
428 | - return 1; | ||
429 | - } | ||
430 | - | ||
431 | /* Get region & vsid */ | ||
432 | switch (REGION_ID(ea)) { | ||
433 | case USER_REGION_ID: | ||
434 | @@ -956,6 +958,11 @@ int hash_page(unsigned long ea, unsigned long access, unsigned long trap) | ||
435 | } | ||
436 | DBG_LOW(" mm=%p, mm->pgdir=%p, vsid=%016lx\n", mm, mm->pgd, vsid); | ||
437 | |||
438 | + /* Bad address. */ | ||
439 | + if (!vsid) { | ||
440 | + DBG_LOW("Bad address!\n"); | ||
441 | + return 1; | ||
442 | + } | ||
443 | /* Get pgdir */ | ||
444 | pgdir = mm->pgd; | ||
445 | if (pgdir == NULL) | ||
446 | @@ -1125,6 +1132,8 @@ void hash_preload(struct mm_struct *mm, unsigned long ea, | ||
447 | /* Get VSID */ | ||
448 | ssize = user_segment_size(ea); | ||
449 | vsid = get_vsid(mm->context.id, ea, ssize); | ||
450 | + if (!vsid) | ||
451 | + return; | ||
452 | |||
453 | /* Hash doesn't like irqs */ | ||
454 | local_irq_save(flags); | ||
455 | @@ -1217,6 +1226,9 @@ static void kernel_map_linear_page(unsigned long vaddr, unsigned long lmi) | ||
456 | hash = hpt_hash(vpn, PAGE_SHIFT, mmu_kernel_ssize); | ||
457 | hpteg = ((hash & htab_hash_mask) * HPTES_PER_GROUP); | ||
458 | |||
459 | + /* Don't create HPTE entries for bad address */ | ||
460 | + if (!vsid) | ||
461 | + return; | ||
462 | ret = ppc_md.hpte_insert(hpteg, vpn, __pa(vaddr), | ||
463 | mode, HPTE_V_BOLTED, | ||
464 | mmu_linear_psize, mmu_kernel_ssize); | ||
465 | diff --git a/arch/powerpc/mm/mmu_context_hash64.c b/arch/powerpc/mm/mmu_context_hash64.c | ||
466 | index 40bc5b0..d1d1b92 100644 | ||
467 | --- a/arch/powerpc/mm/mmu_context_hash64.c | ||
468 | +++ b/arch/powerpc/mm/mmu_context_hash64.c | ||
469 | @@ -29,15 +29,6 @@ | ||
470 | static DEFINE_SPINLOCK(mmu_context_lock); | ||
471 | static DEFINE_IDA(mmu_context_ida); | ||
472 | |||
473 | -/* | ||
474 | - * 256MB segment | ||
475 | - * The proto-VSID space has 2^(CONTEX_BITS + USER_ESID_BITS) - 1 segments | ||
476 | - * available for user mappings. Each segment contains 2^28 bytes. Each | ||
477 | - * context maps 2^46 bytes (64TB) so we can support 2^19-1 contexts | ||
478 | - * (19 == 37 + 28 - 46). | ||
479 | - */ | ||
480 | -#define MAX_CONTEXT ((1UL << CONTEXT_BITS) - 1) | ||
481 | - | ||
482 | int __init_new_context(void) | ||
483 | { | ||
484 | int index; | ||
485 | @@ -56,7 +47,7 @@ again: | ||
486 | else if (err) | ||
487 | return err; | ||
488 | |||
489 | - if (index > MAX_CONTEXT) { | ||
490 | + if (index > MAX_USER_CONTEXT) { | ||
491 | spin_lock(&mmu_context_lock); | ||
492 | ida_remove(&mmu_context_ida, index); | ||
493 | spin_unlock(&mmu_context_lock); | ||
494 | diff --git a/arch/powerpc/mm/pgtable_64.c b/arch/powerpc/mm/pgtable_64.c | ||
495 | index e212a27..654258f 100644 | ||
496 | --- a/arch/powerpc/mm/pgtable_64.c | ||
497 | +++ b/arch/powerpc/mm/pgtable_64.c | ||
498 | @@ -61,7 +61,7 @@ | ||
499 | #endif | ||
500 | |||
501 | #ifdef CONFIG_PPC_STD_MMU_64 | ||
502 | -#if TASK_SIZE_USER64 > (1UL << (USER_ESID_BITS + SID_SHIFT)) | ||
503 | +#if TASK_SIZE_USER64 > (1UL << (ESID_BITS + SID_SHIFT)) | ||
504 | #error TASK_SIZE_USER64 exceeds user VSID range | ||
505 | #endif | ||
506 | #endif | ||
507 | diff --git a/arch/powerpc/mm/slb_low.S b/arch/powerpc/mm/slb_low.S | ||
508 | index 1a16ca2..17aa6df 100644 | ||
509 | --- a/arch/powerpc/mm/slb_low.S | ||
510 | +++ b/arch/powerpc/mm/slb_low.S | ||
511 | @@ -31,10 +31,15 @@ | ||
512 | * No other registers are examined or changed. | ||
513 | */ | ||
514 | _GLOBAL(slb_allocate_realmode) | ||
515 | - /* r3 = faulting address */ | ||
516 | + /* | ||
517 | + * check for bad kernel/user address | ||
518 | + * (ea & ~REGION_MASK) >= PGTABLE_RANGE | ||
519 | + */ | ||
520 | + rldicr. r9,r3,4,(63 - 46 - 4) | ||
521 | + bne- 8f | ||
522 | |||
523 | srdi r9,r3,60 /* get region */ | ||
524 | - srdi r10,r3,28 /* get esid */ | ||
525 | + srdi r10,r3,SID_SHIFT /* get esid */ | ||
526 | cmpldi cr7,r9,0xc /* cmp PAGE_OFFSET for later use */ | ||
527 | |||
528 | /* r3 = address, r10 = esid, cr7 = <> PAGE_OFFSET */ | ||
529 | @@ -56,12 +61,14 @@ _GLOBAL(slb_allocate_realmode) | ||
530 | */ | ||
531 | _GLOBAL(slb_miss_kernel_load_linear) | ||
532 | li r11,0 | ||
533 | - li r9,0x1 | ||
534 | /* | ||
535 | - * for 1T we shift 12 bits more. slb_finish_load_1T will do | ||
536 | - * the necessary adjustment | ||
537 | + * context = (MAX_USER_CONTEXT) + ((ea >> 60) - 0xc) + 1 | ||
538 | + * r9 = region id. | ||
539 | */ | ||
540 | - rldimi r10,r9,(CONTEXT_BITS + USER_ESID_BITS),0 | ||
541 | + addis r9,r9,(MAX_USER_CONTEXT - 0xc + 1)@ha | ||
542 | + addi r9,r9,(MAX_USER_CONTEXT - 0xc + 1)@l | ||
543 | + | ||
544 | + | ||
545 | BEGIN_FTR_SECTION | ||
546 | b slb_finish_load | ||
547 | END_MMU_FTR_SECTION_IFCLR(MMU_FTR_1T_SEGMENT) | ||
548 | @@ -91,24 +98,19 @@ _GLOBAL(slb_miss_kernel_load_vmemmap) | ||
549 | _GLOBAL(slb_miss_kernel_load_io) | ||
550 | li r11,0 | ||
551 | 6: | ||
552 | - li r9,0x1 | ||
553 | /* | ||
554 | - * for 1T we shift 12 bits more. slb_finish_load_1T will do | ||
555 | - * the necessary adjustment | ||
556 | + * context = (MAX_USER_CONTEXT) + ((ea >> 60) - 0xc) + 1 | ||
557 | + * r9 = region id. | ||
558 | */ | ||
559 | - rldimi r10,r9,(CONTEXT_BITS + USER_ESID_BITS),0 | ||
560 | + addis r9,r9,(MAX_USER_CONTEXT - 0xc + 1)@ha | ||
561 | + addi r9,r9,(MAX_USER_CONTEXT - 0xc + 1)@l | ||
562 | + | ||
563 | BEGIN_FTR_SECTION | ||
564 | b slb_finish_load | ||
565 | END_MMU_FTR_SECTION_IFCLR(MMU_FTR_1T_SEGMENT) | ||
566 | b slb_finish_load_1T | ||
567 | |||
568 | -0: /* user address: proto-VSID = context << 15 | ESID. First check | ||
569 | - * if the address is within the boundaries of the user region | ||
570 | - */ | ||
571 | - srdi. r9,r10,USER_ESID_BITS | ||
572 | - bne- 8f /* invalid ea bits set */ | ||
573 | - | ||
574 | - | ||
575 | +0: | ||
576 | /* when using slices, we extract the psize off the slice bitmaps | ||
577 | * and then we need to get the sllp encoding off the mmu_psize_defs | ||
578 | * array. | ||
579 | @@ -164,15 +166,13 @@ END_MMU_FTR_SECTION_IFCLR(MMU_FTR_1T_SEGMENT) | ||
580 | ld r9,PACACONTEXTID(r13) | ||
581 | BEGIN_FTR_SECTION | ||
582 | cmpldi r10,0x1000 | ||
583 | -END_MMU_FTR_SECTION_IFSET(MMU_FTR_1T_SEGMENT) | ||
584 | - rldimi r10,r9,USER_ESID_BITS,0 | ||
585 | -BEGIN_FTR_SECTION | ||
586 | bge slb_finish_load_1T | ||
587 | END_MMU_FTR_SECTION_IFSET(MMU_FTR_1T_SEGMENT) | ||
588 | b slb_finish_load | ||
589 | |||
590 | 8: /* invalid EA */ | ||
591 | li r10,0 /* BAD_VSID */ | ||
592 | + li r9,0 /* BAD_VSID */ | ||
593 | li r11,SLB_VSID_USER /* flags don't much matter */ | ||
594 | b slb_finish_load | ||
595 | |||
596 | @@ -221,8 +221,6 @@ _GLOBAL(slb_allocate_user) | ||
597 | |||
598 | /* get context to calculate proto-VSID */ | ||
599 | ld r9,PACACONTEXTID(r13) | ||
600 | - rldimi r10,r9,USER_ESID_BITS,0 | ||
601 | - | ||
602 | /* fall through slb_finish_load */ | ||
603 | |||
604 | #endif /* __DISABLED__ */ | ||
605 | @@ -231,9 +229,10 @@ _GLOBAL(slb_allocate_user) | ||
606 | /* | ||
607 | * Finish loading of an SLB entry and return | ||
608 | * | ||
609 | - * r3 = EA, r10 = proto-VSID, r11 = flags, clobbers r9, cr7 = <> PAGE_OFFSET | ||
610 | + * r3 = EA, r9 = context, r10 = ESID, r11 = flags, clobbers r9, cr7 = <> PAGE_OFFSET | ||
611 | */ | ||
612 | slb_finish_load: | ||
613 | + rldimi r10,r9,ESID_BITS,0 | ||
614 | ASM_VSID_SCRAMBLE(r10,r9,256M) | ||
615 | /* | ||
616 | * bits above VSID_BITS_256M need to be ignored from r10 | ||
617 | @@ -298,10 +297,11 @@ _GLOBAL(slb_compare_rr_to_size) | ||
618 | /* | ||
619 | * Finish loading of a 1T SLB entry (for the kernel linear mapping) and return. | ||
620 | * | ||
621 | - * r3 = EA, r10 = proto-VSID, r11 = flags, clobbers r9 | ||
622 | + * r3 = EA, r9 = context, r10 = ESID(256MB), r11 = flags, clobbers r9 | ||
623 | */ | ||
624 | slb_finish_load_1T: | ||
625 | - srdi r10,r10,40-28 /* get 1T ESID */ | ||
626 | + srdi r10,r10,(SID_SHIFT_1T - SID_SHIFT) /* get 1T ESID */ | ||
627 | + rldimi r10,r9,ESID_BITS_1T,0 | ||
628 | ASM_VSID_SCRAMBLE(r10,r9,1T) | ||
629 | /* | ||
630 | * bits above VSID_BITS_1T need to be ignored from r10 | ||
631 | diff --git a/arch/powerpc/mm/tlb_hash64.c b/arch/powerpc/mm/tlb_hash64.c | ||
632 | index 0d82ef5..023ec8a 100644 | ||
633 | --- a/arch/powerpc/mm/tlb_hash64.c | ||
634 | +++ b/arch/powerpc/mm/tlb_hash64.c | ||
635 | @@ -82,11 +82,11 @@ void hpte_need_flush(struct mm_struct *mm, unsigned long addr, | ||
636 | if (!is_kernel_addr(addr)) { | ||
637 | ssize = user_segment_size(addr); | ||
638 | vsid = get_vsid(mm->context.id, addr, ssize); | ||
639 | - WARN_ON(vsid == 0); | ||
640 | } else { | ||
641 | vsid = get_kernel_vsid(addr, mmu_kernel_ssize); | ||
642 | ssize = mmu_kernel_ssize; | ||
643 | } | ||
644 | + WARN_ON(vsid == 0); | ||
645 | vpn = hpt_vpn(addr, vsid, ssize); | ||
646 | rpte = __real_pte(__pte(pte), ptep); | ||
647 | |||
648 | diff --git a/arch/s390/include/asm/tlbflush.h b/arch/s390/include/asm/tlbflush.h | ||
649 | index 1d8fe2b..6b32af3 100644 | ||
650 | --- a/arch/s390/include/asm/tlbflush.h | ||
651 | +++ b/arch/s390/include/asm/tlbflush.h | ||
652 | @@ -74,8 +74,6 @@ static inline void __tlb_flush_idte(unsigned long asce) | ||
653 | |||
654 | static inline void __tlb_flush_mm(struct mm_struct * mm) | ||
655 | { | ||
656 | - if (unlikely(cpumask_empty(mm_cpumask(mm)))) | ||
657 | - return; | ||
658 | /* | ||
659 | * If the machine has IDTE we prefer to do a per mm flush | ||
660 | * on all cpus instead of doing a local flush if the mm | ||
661 | diff --git a/arch/s390/kernel/entry.S b/arch/s390/kernel/entry.S | ||
662 | index 5502285..94feff7 100644 | ||
663 | --- a/arch/s390/kernel/entry.S | ||
664 | +++ b/arch/s390/kernel/entry.S | ||
665 | @@ -636,7 +636,8 @@ ENTRY(mcck_int_handler) | ||
666 | UPDATE_VTIME %r14,%r15,__LC_MCCK_ENTER_TIMER | ||
667 | mcck_skip: | ||
668 | SWITCH_ASYNC __LC_GPREGS_SAVE_AREA+32,__LC_PANIC_STACK,PAGE_SHIFT | ||
669 | - mvc __PT_R0(64,%r11),__LC_GPREGS_SAVE_AREA | ||
670 | + stm %r0,%r7,__PT_R0(%r11) | ||
671 | + mvc __PT_R8(32,%r11),__LC_GPREGS_SAVE_AREA+32 | ||
672 | stm %r8,%r9,__PT_PSW(%r11) | ||
673 | xc __SF_BACKCHAIN(4,%r15),__SF_BACKCHAIN(%r15) | ||
674 | l %r1,BASED(.Ldo_machine_check) | ||
675 | diff --git a/arch/s390/kernel/entry64.S b/arch/s390/kernel/entry64.S | ||
676 | index 6d34e0c..082b845 100644 | ||
677 | --- a/arch/s390/kernel/entry64.S | ||
678 | +++ b/arch/s390/kernel/entry64.S | ||
679 | @@ -678,8 +678,9 @@ ENTRY(mcck_int_handler) | ||
680 | UPDATE_VTIME %r14,__LC_MCCK_ENTER_TIMER | ||
681 | LAST_BREAK %r14 | ||
682 | mcck_skip: | ||
683 | - lghi %r14,__LC_GPREGS_SAVE_AREA | ||
684 | - mvc __PT_R0(128,%r11),0(%r14) | ||
685 | + lghi %r14,__LC_GPREGS_SAVE_AREA+64 | ||
686 | + stmg %r0,%r7,__PT_R0(%r11) | ||
687 | + mvc __PT_R8(64,%r11),0(%r14) | ||
688 | stmg %r8,%r9,__PT_PSW(%r11) | ||
689 | xc __SF_BACKCHAIN(8,%r15),__SF_BACKCHAIN(%r15) | ||
690 | lgr %r2,%r11 # pass pointer to pt_regs | ||
691 | diff --git a/arch/x86/kernel/cpu/perf_event_intel_ds.c b/arch/x86/kernel/cpu/perf_event_intel_ds.c | ||
692 | index 826054a..b05a575 100644 | ||
693 | --- a/arch/x86/kernel/cpu/perf_event_intel_ds.c | ||
694 | +++ b/arch/x86/kernel/cpu/perf_event_intel_ds.c | ||
695 | @@ -729,3 +729,13 @@ void intel_ds_init(void) | ||
696 | } | ||
697 | } | ||
698 | } | ||
699 | + | ||
700 | +void perf_restore_debug_store(void) | ||
701 | +{ | ||
702 | + struct debug_store *ds = __this_cpu_read(cpu_hw_events.ds); | ||
703 | + | ||
704 | + if (!x86_pmu.bts && !x86_pmu.pebs) | ||
705 | + return; | ||
706 | + | ||
707 | + wrmsrl(MSR_IA32_DS_AREA, (unsigned long)ds); | ||
708 | +} | ||
709 | diff --git a/arch/x86/power/cpu.c b/arch/x86/power/cpu.c | ||
710 | index 120cee1..3c68768 100644 | ||
711 | --- a/arch/x86/power/cpu.c | ||
712 | +++ b/arch/x86/power/cpu.c | ||
713 | @@ -11,6 +11,7 @@ | ||
714 | #include <linux/suspend.h> | ||
715 | #include <linux/export.h> | ||
716 | #include <linux/smp.h> | ||
717 | +#include <linux/perf_event.h> | ||
718 | |||
719 | #include <asm/pgtable.h> | ||
720 | #include <asm/proto.h> | ||
721 | @@ -228,6 +229,7 @@ static void __restore_processor_state(struct saved_context *ctxt) | ||
722 | do_fpu_end(); | ||
723 | x86_platform.restore_sched_clock_state(); | ||
724 | mtrr_bp_restore(); | ||
725 | + perf_restore_debug_store(); | ||
726 | } | ||
727 | |||
728 | /* Needed by apm.c */ | ||
729 | diff --git a/drivers/block/loop.c b/drivers/block/loop.c | ||
730 | index ae12512..8bc6d39 100644 | ||
731 | --- a/drivers/block/loop.c | ||
732 | +++ b/drivers/block/loop.c | ||
733 | @@ -1285,11 +1285,9 @@ static int loop_set_capacity(struct loop_device *lo, struct block_device *bdev) | ||
734 | /* the width of sector_t may be narrow for bit-shift */ | ||
735 | sz = sec; | ||
736 | sz <<= 9; | ||
737 | - mutex_lock(&bdev->bd_mutex); | ||
738 | bd_set_size(bdev, sz); | ||
739 | /* let user-space know about the new size */ | ||
740 | kobject_uevent(&disk_to_dev(bdev->bd_disk)->kobj, KOBJ_CHANGE); | ||
741 | - mutex_unlock(&bdev->bd_mutex); | ||
742 | |||
743 | out: | ||
744 | return err; | ||
745 | @@ -1858,11 +1856,15 @@ static int __init loop_init(void) | ||
746 | max_part = (1UL << part_shift) - 1; | ||
747 | } | ||
748 | |||
749 | - if ((1UL << part_shift) > DISK_MAX_PARTS) | ||
750 | - return -EINVAL; | ||
751 | + if ((1UL << part_shift) > DISK_MAX_PARTS) { | ||
752 | + err = -EINVAL; | ||
753 | + goto misc_out; | ||
754 | + } | ||
755 | |||
756 | - if (max_loop > 1UL << (MINORBITS - part_shift)) | ||
757 | - return -EINVAL; | ||
758 | + if (max_loop > 1UL << (MINORBITS - part_shift)) { | ||
759 | + err = -EINVAL; | ||
760 | + goto misc_out; | ||
761 | + } | ||
762 | |||
763 | /* | ||
764 | * If max_loop is specified, create that many devices upfront. | ||
765 | @@ -1880,8 +1882,10 @@ static int __init loop_init(void) | ||
766 | range = 1UL << MINORBITS; | ||
767 | } | ||
768 | |||
769 | - if (register_blkdev(LOOP_MAJOR, "loop")) | ||
770 | - return -EIO; | ||
771 | + if (register_blkdev(LOOP_MAJOR, "loop")) { | ||
772 | + err = -EIO; | ||
773 | + goto misc_out; | ||
774 | + } | ||
775 | |||
776 | blk_register_region(MKDEV(LOOP_MAJOR, 0), range, | ||
777 | THIS_MODULE, loop_probe, NULL, NULL); | ||
778 | @@ -1894,6 +1898,10 @@ static int __init loop_init(void) | ||
779 | |||
780 | printk(KERN_INFO "loop: module loaded\n"); | ||
781 | return 0; | ||
782 | + | ||
783 | +misc_out: | ||
784 | + misc_deregister(&loop_misc); | ||
785 | + return err; | ||
786 | } | ||
787 | |||
788 | static int loop_exit_cb(int id, void *ptr, void *data) | ||
789 | diff --git a/drivers/char/hw_random/virtio-rng.c b/drivers/char/hw_random/virtio-rng.c | ||
790 | index b65c103..1acc4e0 100644 | ||
791 | --- a/drivers/char/hw_random/virtio-rng.c | ||
792 | +++ b/drivers/char/hw_random/virtio-rng.c | ||
793 | @@ -92,14 +92,22 @@ static int probe_common(struct virtio_device *vdev) | ||
794 | { | ||
795 | int err; | ||
796 | |||
797 | + if (vq) { | ||
798 | + /* We only support one device for now */ | ||
799 | + return -EBUSY; | ||
800 | + } | ||
801 | /* We expect a single virtqueue. */ | ||
802 | vq = virtio_find_single_vq(vdev, random_recv_done, "input"); | ||
803 | - if (IS_ERR(vq)) | ||
804 | - return PTR_ERR(vq); | ||
805 | + if (IS_ERR(vq)) { | ||
806 | + err = PTR_ERR(vq); | ||
807 | + vq = NULL; | ||
808 | + return err; | ||
809 | + } | ||
810 | |||
811 | err = hwrng_register(&virtio_hwrng); | ||
812 | if (err) { | ||
813 | vdev->config->del_vqs(vdev); | ||
814 | + vq = NULL; | ||
815 | return err; | ||
816 | } | ||
817 | |||
818 | @@ -112,6 +120,7 @@ static void remove_common(struct virtio_device *vdev) | ||
819 | busy = false; | ||
820 | hwrng_unregister(&virtio_hwrng); | ||
821 | vdev->config->del_vqs(vdev); | ||
822 | + vq = NULL; | ||
823 | } | ||
824 | |||
825 | static int virtrng_probe(struct virtio_device *vdev) | ||
826 | diff --git a/drivers/gpu/drm/i915/i915_dma.c b/drivers/gpu/drm/i915/i915_dma.c | ||
827 | index 5206f24..99daa89 100644 | ||
828 | --- a/drivers/gpu/drm/i915/i915_dma.c | ||
829 | +++ b/drivers/gpu/drm/i915/i915_dma.c | ||
830 | @@ -1297,21 +1297,19 @@ static int i915_load_modeset_init(struct drm_device *dev) | ||
831 | if (ret) | ||
832 | goto cleanup_vga_switcheroo; | ||
833 | |||
834 | - ret = drm_irq_install(dev); | ||
835 | - if (ret) | ||
836 | - goto cleanup_gem_stolen; | ||
837 | - | ||
838 | - /* Important: The output setup functions called by modeset_init need | ||
839 | - * working irqs for e.g. gmbus and dp aux transfers. */ | ||
840 | intel_modeset_init(dev); | ||
841 | |||
842 | ret = i915_gem_init(dev); | ||
843 | if (ret) | ||
844 | - goto cleanup_irq; | ||
845 | + goto cleanup_gem_stolen; | ||
846 | + | ||
847 | + intel_modeset_gem_init(dev); | ||
848 | |||
849 | INIT_WORK(&dev_priv->console_resume_work, intel_console_resume); | ||
850 | |||
851 | - intel_modeset_gem_init(dev); | ||
852 | + ret = drm_irq_install(dev); | ||
853 | + if (ret) | ||
854 | + goto cleanup_gem; | ||
855 | |||
856 | /* Always safe in the mode setting case. */ | ||
857 | /* FIXME: do pre/post-mode set stuff in core KMS code */ | ||
858 | @@ -1319,10 +1317,7 @@ static int i915_load_modeset_init(struct drm_device *dev) | ||
859 | |||
860 | ret = intel_fbdev_init(dev); | ||
861 | if (ret) | ||
862 | - goto cleanup_gem; | ||
863 | - | ||
864 | - /* Only enable hotplug handling once the fbdev is fully set up. */ | ||
865 | - dev_priv->enable_hotplug_processing = true; | ||
866 | + goto cleanup_irq; | ||
867 | |||
868 | drm_kms_helper_poll_init(dev); | ||
869 | |||
870 | @@ -1331,13 +1326,13 @@ static int i915_load_modeset_init(struct drm_device *dev) | ||
871 | |||
872 | return 0; | ||
873 | |||
874 | +cleanup_irq: | ||
875 | + drm_irq_uninstall(dev); | ||
876 | cleanup_gem: | ||
877 | mutex_lock(&dev->struct_mutex); | ||
878 | i915_gem_cleanup_ringbuffer(dev); | ||
879 | mutex_unlock(&dev->struct_mutex); | ||
880 | i915_gem_cleanup_aliasing_ppgtt(dev); | ||
881 | -cleanup_irq: | ||
882 | - drm_irq_uninstall(dev); | ||
883 | cleanup_gem_stolen: | ||
884 | i915_gem_cleanup_stolen(dev); | ||
885 | cleanup_vga_switcheroo: | ||
886 | diff --git a/drivers/gpu/drm/i915/i915_drv.c b/drivers/gpu/drm/i915/i915_drv.c | ||
887 | index fb6454c..79f5fc5 100644 | ||
888 | --- a/drivers/gpu/drm/i915/i915_drv.c | ||
889 | +++ b/drivers/gpu/drm/i915/i915_drv.c | ||
890 | @@ -486,7 +486,6 @@ static int i915_drm_freeze(struct drm_device *dev) | ||
891 | intel_modeset_disable(dev); | ||
892 | |||
893 | drm_irq_uninstall(dev); | ||
894 | - dev_priv->enable_hotplug_processing = false; | ||
895 | } | ||
896 | |||
897 | i915_save_state(dev); | ||
898 | @@ -563,19 +562,9 @@ static int __i915_drm_thaw(struct drm_device *dev) | ||
899 | error = i915_gem_init_hw(dev); | ||
900 | mutex_unlock(&dev->struct_mutex); | ||
901 | |||
902 | - /* We need working interrupts for modeset enabling ... */ | ||
903 | - drm_irq_install(dev); | ||
904 | - | ||
905 | intel_modeset_init_hw(dev); | ||
906 | intel_modeset_setup_hw_state(dev, false); | ||
907 | - | ||
908 | - /* | ||
909 | - * ... but also need to make sure that hotplug processing | ||
910 | - * doesn't cause havoc. Like in the driver load code we don't | ||
911 | - * bother with the tiny race here where we might loose hotplug | ||
912 | - * notifications. | ||
913 | - * */ | ||
914 | - dev_priv->enable_hotplug_processing = true; | ||
915 | + drm_irq_install(dev); | ||
916 | } | ||
917 | |||
918 | intel_opregion_init(dev); | ||
919 | diff --git a/drivers/gpu/drm/i915/i915_drv.h b/drivers/gpu/drm/i915/i915_drv.h | ||
920 | index 66ad64f..7339a4b 100644 | ||
921 | --- a/drivers/gpu/drm/i915/i915_drv.h | ||
922 | +++ b/drivers/gpu/drm/i915/i915_drv.h | ||
923 | @@ -672,7 +672,6 @@ typedef struct drm_i915_private { | ||
924 | |||
925 | u32 hotplug_supported_mask; | ||
926 | struct work_struct hotplug_work; | ||
927 | - bool enable_hotplug_processing; | ||
928 | |||
929 | int num_pipe; | ||
930 | int num_pch_pll; | ||
931 | diff --git a/drivers/gpu/drm/i915/i915_irq.c b/drivers/gpu/drm/i915/i915_irq.c | ||
932 | index 3c00403..fe84338 100644 | ||
933 | --- a/drivers/gpu/drm/i915/i915_irq.c | ||
934 | +++ b/drivers/gpu/drm/i915/i915_irq.c | ||
935 | @@ -287,10 +287,6 @@ static void i915_hotplug_work_func(struct work_struct *work) | ||
936 | struct drm_mode_config *mode_config = &dev->mode_config; | ||
937 | struct intel_encoder *encoder; | ||
938 | |||
939 | - /* HPD irq before everything is fully set up. */ | ||
940 | - if (!dev_priv->enable_hotplug_processing) | ||
941 | - return; | ||
942 | - | ||
943 | mutex_lock(&mode_config->mutex); | ||
944 | DRM_DEBUG_KMS("running encoder hotplug functions\n"); | ||
945 | |||
946 | diff --git a/drivers/hwmon/lineage-pem.c b/drivers/hwmon/lineage-pem.c | ||
947 | index 41df29f..ebbb9f4 100644 | ||
948 | --- a/drivers/hwmon/lineage-pem.c | ||
949 | +++ b/drivers/hwmon/lineage-pem.c | ||
950 | @@ -422,6 +422,7 @@ static struct attribute *pem_input_attributes[] = { | ||
951 | &sensor_dev_attr_in2_input.dev_attr.attr, | ||
952 | &sensor_dev_attr_curr1_input.dev_attr.attr, | ||
953 | &sensor_dev_attr_power1_input.dev_attr.attr, | ||
954 | + NULL | ||
955 | }; | ||
956 | |||
957 | static const struct attribute_group pem_input_group = { | ||
958 | @@ -432,6 +433,7 @@ static struct attribute *pem_fan_attributes[] = { | ||
959 | &sensor_dev_attr_fan1_input.dev_attr.attr, | ||
960 | &sensor_dev_attr_fan2_input.dev_attr.attr, | ||
961 | &sensor_dev_attr_fan3_input.dev_attr.attr, | ||
962 | + NULL | ||
963 | }; | ||
964 | |||
965 | static const struct attribute_group pem_fan_group = { | ||
966 | diff --git a/drivers/hwmon/pmbus/ltc2978.c b/drivers/hwmon/pmbus/ltc2978.c | ||
967 | index a58de38..6d61307 100644 | ||
968 | --- a/drivers/hwmon/pmbus/ltc2978.c | ||
969 | +++ b/drivers/hwmon/pmbus/ltc2978.c | ||
970 | @@ -59,7 +59,7 @@ enum chips { ltc2978, ltc3880 }; | ||
971 | struct ltc2978_data { | ||
972 | enum chips id; | ||
973 | int vin_min, vin_max; | ||
974 | - int temp_min, temp_max; | ||
975 | + int temp_min, temp_max[2]; | ||
976 | int vout_min[8], vout_max[8]; | ||
977 | int iout_max[2]; | ||
978 | int temp2_max; | ||
979 | @@ -113,9 +113,10 @@ static int ltc2978_read_word_data_common(struct i2c_client *client, int page, | ||
980 | ret = pmbus_read_word_data(client, page, | ||
981 | LTC2978_MFR_TEMPERATURE_PEAK); | ||
982 | if (ret >= 0) { | ||
983 | - if (lin11_to_val(ret) > lin11_to_val(data->temp_max)) | ||
984 | - data->temp_max = ret; | ||
985 | - ret = data->temp_max; | ||
986 | + if (lin11_to_val(ret) | ||
987 | + > lin11_to_val(data->temp_max[page])) | ||
988 | + data->temp_max[page] = ret; | ||
989 | + ret = data->temp_max[page]; | ||
990 | } | ||
991 | break; | ||
992 | case PMBUS_VIRT_RESET_VOUT_HISTORY: | ||
993 | @@ -266,7 +267,7 @@ static int ltc2978_write_word_data(struct i2c_client *client, int page, | ||
994 | break; | ||
995 | case PMBUS_VIRT_RESET_TEMP_HISTORY: | ||
996 | data->temp_min = 0x7bff; | ||
997 | - data->temp_max = 0x7c00; | ||
998 | + data->temp_max[page] = 0x7c00; | ||
999 | ret = ltc2978_clear_peaks(client, page, data->id); | ||
1000 | break; | ||
1001 | default: | ||
1002 | @@ -323,7 +324,8 @@ static int ltc2978_probe(struct i2c_client *client, | ||
1003 | data->vin_min = 0x7bff; | ||
1004 | data->vin_max = 0x7c00; | ||
1005 | data->temp_min = 0x7bff; | ||
1006 | - data->temp_max = 0x7c00; | ||
1007 | + for (i = 0; i < ARRAY_SIZE(data->temp_max); i++) | ||
1008 | + data->temp_max[i] = 0x7c00; | ||
1009 | data->temp2_max = 0x7c00; | ||
1010 | |||
1011 | switch (data->id) { | ||
1012 | diff --git a/drivers/mtd/nand/nand_base.c b/drivers/mtd/nand/nand_base.c | ||
1013 | index 3766682..db04f53 100644 | ||
1014 | --- a/drivers/mtd/nand/nand_base.c | ||
1015 | +++ b/drivers/mtd/nand/nand_base.c | ||
1016 | @@ -1527,6 +1527,14 @@ static int nand_do_read_ops(struct mtd_info *mtd, loff_t from, | ||
1017 | oobreadlen -= toread; | ||
1018 | } | ||
1019 | } | ||
1020 | + | ||
1021 | + if (chip->options & NAND_NEED_READRDY) { | ||
1022 | + /* Apply delay or wait for ready/busy pin */ | ||
1023 | + if (!chip->dev_ready) | ||
1024 | + udelay(chip->chip_delay); | ||
1025 | + else | ||
1026 | + nand_wait_ready(mtd); | ||
1027 | + } | ||
1028 | } else { | ||
1029 | memcpy(buf, chip->buffers->databuf + col, bytes); | ||
1030 | buf += bytes; | ||
1031 | @@ -1791,6 +1799,14 @@ static int nand_do_read_oob(struct mtd_info *mtd, loff_t from, | ||
1032 | len = min(len, readlen); | ||
1033 | buf = nand_transfer_oob(chip, buf, ops, len); | ||
1034 | |||
1035 | + if (chip->options & NAND_NEED_READRDY) { | ||
1036 | + /* Apply delay or wait for ready/busy pin */ | ||
1037 | + if (!chip->dev_ready) | ||
1038 | + udelay(chip->chip_delay); | ||
1039 | + else | ||
1040 | + nand_wait_ready(mtd); | ||
1041 | + } | ||
1042 | + | ||
1043 | readlen -= len; | ||
1044 | if (!readlen) | ||
1045 | break; | ||
1046 | diff --git a/drivers/mtd/nand/nand_ids.c b/drivers/mtd/nand/nand_ids.c | ||
1047 | index e3aa274..9c61238 100644 | ||
1048 | --- a/drivers/mtd/nand/nand_ids.c | ||
1049 | +++ b/drivers/mtd/nand/nand_ids.c | ||
1050 | @@ -22,49 +22,51 @@ | ||
1051 | * 512 512 Byte page size | ||
1052 | */ | ||
1053 | struct nand_flash_dev nand_flash_ids[] = { | ||
1054 | +#define SP_OPTIONS NAND_NEED_READRDY | ||
1055 | +#define SP_OPTIONS16 (SP_OPTIONS | NAND_BUSWIDTH_16) | ||
1056 | |||
1057 | #ifdef CONFIG_MTD_NAND_MUSEUM_IDS | ||
1058 | - {"NAND 1MiB 5V 8-bit", 0x6e, 256, 1, 0x1000, 0}, | ||
1059 | - {"NAND 2MiB 5V 8-bit", 0x64, 256, 2, 0x1000, 0}, | ||
1060 | - {"NAND 4MiB 5V 8-bit", 0x6b, 512, 4, 0x2000, 0}, | ||
1061 | - {"NAND 1MiB 3,3V 8-bit", 0xe8, 256, 1, 0x1000, 0}, | ||
1062 | - {"NAND 1MiB 3,3V 8-bit", 0xec, 256, 1, 0x1000, 0}, | ||
1063 | - {"NAND 2MiB 3,3V 8-bit", 0xea, 256, 2, 0x1000, 0}, | ||
1064 | - {"NAND 4MiB 3,3V 8-bit", 0xd5, 512, 4, 0x2000, 0}, | ||
1065 | - {"NAND 4MiB 3,3V 8-bit", 0xe3, 512, 4, 0x2000, 0}, | ||
1066 | - {"NAND 4MiB 3,3V 8-bit", 0xe5, 512, 4, 0x2000, 0}, | ||
1067 | - {"NAND 8MiB 3,3V 8-bit", 0xd6, 512, 8, 0x2000, 0}, | ||
1068 | - | ||
1069 | - {"NAND 8MiB 1,8V 8-bit", 0x39, 512, 8, 0x2000, 0}, | ||
1070 | - {"NAND 8MiB 3,3V 8-bit", 0xe6, 512, 8, 0x2000, 0}, | ||
1071 | - {"NAND 8MiB 1,8V 16-bit", 0x49, 512, 8, 0x2000, NAND_BUSWIDTH_16}, | ||
1072 | - {"NAND 8MiB 3,3V 16-bit", 0x59, 512, 8, 0x2000, NAND_BUSWIDTH_16}, | ||
1073 | + {"NAND 1MiB 5V 8-bit", 0x6e, 256, 1, 0x1000, SP_OPTIONS}, | ||
1074 | + {"NAND 2MiB 5V 8-bit", 0x64, 256, 2, 0x1000, SP_OPTIONS}, | ||
1075 | + {"NAND 4MiB 5V 8-bit", 0x6b, 512, 4, 0x2000, SP_OPTIONS}, | ||
1076 | + {"NAND 1MiB 3,3V 8-bit", 0xe8, 256, 1, 0x1000, SP_OPTIONS}, | ||
1077 | + {"NAND 1MiB 3,3V 8-bit", 0xec, 256, 1, 0x1000, SP_OPTIONS}, | ||
1078 | + {"NAND 2MiB 3,3V 8-bit", 0xea, 256, 2, 0x1000, SP_OPTIONS}, | ||
1079 | + {"NAND 4MiB 3,3V 8-bit", 0xd5, 512, 4, 0x2000, SP_OPTIONS}, | ||
1080 | + {"NAND 4MiB 3,3V 8-bit", 0xe3, 512, 4, 0x2000, SP_OPTIONS}, | ||
1081 | + {"NAND 4MiB 3,3V 8-bit", 0xe5, 512, 4, 0x2000, SP_OPTIONS}, | ||
1082 | + {"NAND 8MiB 3,3V 8-bit", 0xd6, 512, 8, 0x2000, SP_OPTIONS}, | ||
1083 | + | ||
1084 | + {"NAND 8MiB 1,8V 8-bit", 0x39, 512, 8, 0x2000, SP_OPTIONS}, | ||
1085 | + {"NAND 8MiB 3,3V 8-bit", 0xe6, 512, 8, 0x2000, SP_OPTIONS}, | ||
1086 | + {"NAND 8MiB 1,8V 16-bit", 0x49, 512, 8, 0x2000, SP_OPTIONS16}, | ||
1087 | + {"NAND 8MiB 3,3V 16-bit", 0x59, 512, 8, 0x2000, SP_OPTIONS16}, | ||
1088 | #endif | ||
1089 | |||
1090 | - {"NAND 16MiB 1,8V 8-bit", 0x33, 512, 16, 0x4000, 0}, | ||
1091 | - {"NAND 16MiB 3,3V 8-bit", 0x73, 512, 16, 0x4000, 0}, | ||
1092 | - {"NAND 16MiB 1,8V 16-bit", 0x43, 512, 16, 0x4000, NAND_BUSWIDTH_16}, | ||
1093 | - {"NAND 16MiB 3,3V 16-bit", 0x53, 512, 16, 0x4000, NAND_BUSWIDTH_16}, | ||
1094 | - | ||
1095 | - {"NAND 32MiB 1,8V 8-bit", 0x35, 512, 32, 0x4000, 0}, | ||
1096 | - {"NAND 32MiB 3,3V 8-bit", 0x75, 512, 32, 0x4000, 0}, | ||
1097 | - {"NAND 32MiB 1,8V 16-bit", 0x45, 512, 32, 0x4000, NAND_BUSWIDTH_16}, | ||
1098 | - {"NAND 32MiB 3,3V 16-bit", 0x55, 512, 32, 0x4000, NAND_BUSWIDTH_16}, | ||
1099 | - | ||
1100 | - {"NAND 64MiB 1,8V 8-bit", 0x36, 512, 64, 0x4000, 0}, | ||
1101 | - {"NAND 64MiB 3,3V 8-bit", 0x76, 512, 64, 0x4000, 0}, | ||
1102 | - {"NAND 64MiB 1,8V 16-bit", 0x46, 512, 64, 0x4000, NAND_BUSWIDTH_16}, | ||
1103 | - {"NAND 64MiB 3,3V 16-bit", 0x56, 512, 64, 0x4000, NAND_BUSWIDTH_16}, | ||
1104 | - | ||
1105 | - {"NAND 128MiB 1,8V 8-bit", 0x78, 512, 128, 0x4000, 0}, | ||
1106 | - {"NAND 128MiB 1,8V 8-bit", 0x39, 512, 128, 0x4000, 0}, | ||
1107 | - {"NAND 128MiB 3,3V 8-bit", 0x79, 512, 128, 0x4000, 0}, | ||
1108 | - {"NAND 128MiB 1,8V 16-bit", 0x72, 512, 128, 0x4000, NAND_BUSWIDTH_16}, | ||
1109 | - {"NAND 128MiB 1,8V 16-bit", 0x49, 512, 128, 0x4000, NAND_BUSWIDTH_16}, | ||
1110 | - {"NAND 128MiB 3,3V 16-bit", 0x74, 512, 128, 0x4000, NAND_BUSWIDTH_16}, | ||
1111 | - {"NAND 128MiB 3,3V 16-bit", 0x59, 512, 128, 0x4000, NAND_BUSWIDTH_16}, | ||
1112 | - | ||
1113 | - {"NAND 256MiB 3,3V 8-bit", 0x71, 512, 256, 0x4000, 0}, | ||
1114 | + {"NAND 16MiB 1,8V 8-bit", 0x33, 512, 16, 0x4000, SP_OPTIONS}, | ||
1115 | + {"NAND 16MiB 3,3V 8-bit", 0x73, 512, 16, 0x4000, SP_OPTIONS}, | ||
1116 | + {"NAND 16MiB 1,8V 16-bit", 0x43, 512, 16, 0x4000, SP_OPTIONS16}, | ||
1117 | + {"NAND 16MiB 3,3V 16-bit", 0x53, 512, 16, 0x4000, SP_OPTIONS16}, | ||
1118 | + | ||
1119 | + {"NAND 32MiB 1,8V 8-bit", 0x35, 512, 32, 0x4000, SP_OPTIONS}, | ||
1120 | + {"NAND 32MiB 3,3V 8-bit", 0x75, 512, 32, 0x4000, SP_OPTIONS}, | ||
1121 | + {"NAND 32MiB 1,8V 16-bit", 0x45, 512, 32, 0x4000, SP_OPTIONS16}, | ||
1122 | + {"NAND 32MiB 3,3V 16-bit", 0x55, 512, 32, 0x4000, SP_OPTIONS16}, | ||
1123 | + | ||
1124 | + {"NAND 64MiB 1,8V 8-bit", 0x36, 512, 64, 0x4000, SP_OPTIONS}, | ||
1125 | + {"NAND 64MiB 3,3V 8-bit", 0x76, 512, 64, 0x4000, SP_OPTIONS}, | ||
1126 | + {"NAND 64MiB 1,8V 16-bit", 0x46, 512, 64, 0x4000, SP_OPTIONS16}, | ||
1127 | + {"NAND 64MiB 3,3V 16-bit", 0x56, 512, 64, 0x4000, SP_OPTIONS16}, | ||
1128 | + | ||
1129 | + {"NAND 128MiB 1,8V 8-bit", 0x78, 512, 128, 0x4000, SP_OPTIONS}, | ||
1130 | + {"NAND 128MiB 1,8V 8-bit", 0x39, 512, 128, 0x4000, SP_OPTIONS}, | ||
1131 | + {"NAND 128MiB 3,3V 8-bit", 0x79, 512, 128, 0x4000, SP_OPTIONS}, | ||
1132 | + {"NAND 128MiB 1,8V 16-bit", 0x72, 512, 128, 0x4000, SP_OPTIONS16}, | ||
1133 | + {"NAND 128MiB 1,8V 16-bit", 0x49, 512, 128, 0x4000, SP_OPTIONS16}, | ||
1134 | + {"NAND 128MiB 3,3V 16-bit", 0x74, 512, 128, 0x4000, SP_OPTIONS16}, | ||
1135 | + {"NAND 128MiB 3,3V 16-bit", 0x59, 512, 128, 0x4000, SP_OPTIONS16}, | ||
1136 | + | ||
1137 | + {"NAND 256MiB 3,3V 8-bit", 0x71, 512, 256, 0x4000, SP_OPTIONS}, | ||
1138 | |||
1139 | /* | ||
1140 | * These are the new chips with large page size. The pagesize and the | ||
1141 | diff --git a/drivers/net/bonding/bond_main.c b/drivers/net/bonding/bond_main.c | ||
1142 | index b7d45f3..a079da17 100644 | ||
1143 | --- a/drivers/net/bonding/bond_main.c | ||
1144 | +++ b/drivers/net/bonding/bond_main.c | ||
1145 | @@ -1943,7 +1943,6 @@ int bond_release(struct net_device *bond_dev, struct net_device *slave_dev) | ||
1146 | } | ||
1147 | |||
1148 | block_netpoll_tx(); | ||
1149 | - call_netdevice_notifiers(NETDEV_RELEASE, bond_dev); | ||
1150 | write_lock_bh(&bond->lock); | ||
1151 | |||
1152 | slave = bond_get_slave_by_dev(bond, slave_dev); | ||
1153 | @@ -2047,8 +2046,10 @@ int bond_release(struct net_device *bond_dev, struct net_device *slave_dev) | ||
1154 | write_unlock_bh(&bond->lock); | ||
1155 | unblock_netpoll_tx(); | ||
1156 | |||
1157 | - if (bond->slave_cnt == 0) | ||
1158 | + if (bond->slave_cnt == 0) { | ||
1159 | call_netdevice_notifiers(NETDEV_CHANGEADDR, bond->dev); | ||
1160 | + call_netdevice_notifiers(NETDEV_RELEASE, bond->dev); | ||
1161 | + } | ||
1162 | |||
1163 | bond_compute_features(bond); | ||
1164 | if (!(bond_dev->features & NETIF_F_VLAN_CHALLENGED) && | ||
1165 | diff --git a/drivers/net/ethernet/atheros/atl1c/atl1c_main.c b/drivers/net/ethernet/atheros/atl1c/atl1c_main.c | ||
1166 | index 0035c01..bfcb8bc 100644 | ||
1167 | --- a/drivers/net/ethernet/atheros/atl1c/atl1c_main.c | ||
1168 | +++ b/drivers/net/ethernet/atheros/atl1c/atl1c_main.c | ||
1169 | @@ -2075,7 +2075,7 @@ static int atl1c_tx_map(struct atl1c_adapter *adapter, | ||
1170 | if (unlikely(pci_dma_mapping_error(adapter->pdev, | ||
1171 | buffer_info->dma))) | ||
1172 | goto err_dma; | ||
1173 | - | ||
1174 | + ATL1C_SET_BUFFER_STATE(buffer_info, ATL1C_BUFFER_BUSY); | ||
1175 | ATL1C_SET_PCIMAP_TYPE(buffer_info, ATL1C_PCIMAP_SINGLE, | ||
1176 | ATL1C_PCIMAP_TODEVICE); | ||
1177 | mapped_len += map_len; | ||
1178 | diff --git a/drivers/net/ethernet/mellanox/mlx4/en_netdev.c b/drivers/net/ethernet/mellanox/mlx4/en_netdev.c | ||
1179 | index 88291bb..bf3f4bc 100644 | ||
1180 | --- a/drivers/net/ethernet/mellanox/mlx4/en_netdev.c | ||
1181 | +++ b/drivers/net/ethernet/mellanox/mlx4/en_netdev.c | ||
1182 | @@ -1434,12 +1434,11 @@ int mlx4_en_alloc_resources(struct mlx4_en_priv *priv) | ||
1183 | } | ||
1184 | |||
1185 | #ifdef CONFIG_RFS_ACCEL | ||
1186 | - priv->dev->rx_cpu_rmap = alloc_irq_cpu_rmap(priv->mdev->dev->caps.comp_pool); | ||
1187 | - if (!priv->dev->rx_cpu_rmap) | ||
1188 | - goto err; | ||
1189 | - | ||
1190 | - INIT_LIST_HEAD(&priv->filters); | ||
1191 | - spin_lock_init(&priv->filters_lock); | ||
1192 | + if (priv->mdev->dev->caps.comp_pool) { | ||
1193 | + priv->dev->rx_cpu_rmap = alloc_irq_cpu_rmap(priv->mdev->dev->caps.comp_pool); | ||
1194 | + if (!priv->dev->rx_cpu_rmap) | ||
1195 | + goto err; | ||
1196 | + } | ||
1197 | #endif | ||
1198 | |||
1199 | return 0; | ||
1200 | @@ -1634,6 +1633,11 @@ int mlx4_en_init_netdev(struct mlx4_en_dev *mdev, int port, | ||
1201 | if (err) | ||
1202 | goto out; | ||
1203 | |||
1204 | +#ifdef CONFIG_RFS_ACCEL | ||
1205 | + INIT_LIST_HEAD(&priv->filters); | ||
1206 | + spin_lock_init(&priv->filters_lock); | ||
1207 | +#endif | ||
1208 | + | ||
1209 | /* Allocate page for receive rings */ | ||
1210 | err = mlx4_alloc_hwq_res(mdev->dev, &priv->res, | ||
1211 | MLX4_EN_PAGE_SIZE, MLX4_EN_PAGE_SIZE); | ||
1212 | diff --git a/drivers/net/macvlan.c b/drivers/net/macvlan.c | ||
1213 | index d3fb97d..e5cb723 100644 | ||
1214 | --- a/drivers/net/macvlan.c | ||
1215 | +++ b/drivers/net/macvlan.c | ||
1216 | @@ -628,6 +628,7 @@ void macvlan_common_setup(struct net_device *dev) | ||
1217 | ether_setup(dev); | ||
1218 | |||
1219 | dev->priv_flags &= ~(IFF_XMIT_DST_RELEASE | IFF_TX_SKB_SHARING); | ||
1220 | + dev->priv_flags |= IFF_UNICAST_FLT; | ||
1221 | dev->netdev_ops = &macvlan_netdev_ops; | ||
1222 | dev->destructor = free_netdev; | ||
1223 | dev->header_ops = &macvlan_hard_header_ops, | ||
1224 | diff --git a/drivers/net/team/team.c b/drivers/net/team/team.c | ||
1225 | index ad86660..8efe47a 100644 | ||
1226 | --- a/drivers/net/team/team.c | ||
1227 | +++ b/drivers/net/team/team.c | ||
1228 | @@ -1139,6 +1139,8 @@ static int team_port_del(struct team *team, struct net_device *port_dev) | ||
1229 | netdev_set_master(port_dev, NULL); | ||
1230 | team_port_disable_netpoll(port); | ||
1231 | vlan_vids_del_by_dev(port_dev, dev); | ||
1232 | + dev_uc_unsync(port_dev, dev); | ||
1233 | + dev_mc_unsync(port_dev, dev); | ||
1234 | dev_close(port_dev); | ||
1235 | team_port_leave(team, port); | ||
1236 | team_port_set_orig_dev_addr(port); | ||
1237 | diff --git a/drivers/net/tun.c b/drivers/net/tun.c | ||
1238 | index 2917a86..cb95fe5 100644 | ||
1239 | --- a/drivers/net/tun.c | ||
1240 | +++ b/drivers/net/tun.c | ||
1241 | @@ -748,6 +748,8 @@ static netdev_tx_t tun_net_xmit(struct sk_buff *skb, struct net_device *dev) | ||
1242 | goto drop; | ||
1243 | skb_orphan(skb); | ||
1244 | |||
1245 | + nf_reset(skb); | ||
1246 | + | ||
1247 | /* Enqueue packet */ | ||
1248 | skb_queue_tail(&tfile->socket.sk->sk_receive_queue, skb); | ||
1249 | |||
1250 | diff --git a/drivers/net/vxlan.c b/drivers/net/vxlan.c | ||
1251 | index 656230e..6993bfa 100644 | ||
1252 | --- a/drivers/net/vxlan.c | ||
1253 | +++ b/drivers/net/vxlan.c | ||
1254 | @@ -1491,6 +1491,15 @@ static __net_init int vxlan_init_net(struct net *net) | ||
1255 | static __net_exit void vxlan_exit_net(struct net *net) | ||
1256 | { | ||
1257 | struct vxlan_net *vn = net_generic(net, vxlan_net_id); | ||
1258 | + struct vxlan_dev *vxlan; | ||
1259 | + struct hlist_node *pos; | ||
1260 | + unsigned h; | ||
1261 | + | ||
1262 | + rtnl_lock(); | ||
1263 | + for (h = 0; h < VNI_HASH_SIZE; ++h) | ||
1264 | + hlist_for_each_entry(vxlan, pos, &vn->vni_list[h], hlist) | ||
1265 | + dev_close(vxlan->dev); | ||
1266 | + rtnl_unlock(); | ||
1267 | |||
1268 | if (vn->sock) { | ||
1269 | sk_release_kernel(vn->sock->sk); | ||
1270 | diff --git a/drivers/staging/comedi/drivers/dt9812.c b/drivers/staging/comedi/drivers/dt9812.c | ||
1271 | index 1767998..3e7f961 100644 | ||
1272 | --- a/drivers/staging/comedi/drivers/dt9812.c | ||
1273 | +++ b/drivers/staging/comedi/drivers/dt9812.c | ||
1274 | @@ -948,12 +948,13 @@ static int dt9812_di_rinsn(struct comedi_device *dev, | ||
1275 | unsigned int *data) | ||
1276 | { | ||
1277 | struct comedi_dt9812 *devpriv = dev->private; | ||
1278 | + unsigned int channel = CR_CHAN(insn->chanspec); | ||
1279 | int n; | ||
1280 | u8 bits = 0; | ||
1281 | |||
1282 | dt9812_digital_in(devpriv->slot, &bits); | ||
1283 | for (n = 0; n < insn->n; n++) | ||
1284 | - data[n] = ((1 << insn->chanspec) & bits) != 0; | ||
1285 | + data[n] = ((1 << channel) & bits) != 0; | ||
1286 | return n; | ||
1287 | } | ||
1288 | |||
1289 | @@ -962,12 +963,13 @@ static int dt9812_do_winsn(struct comedi_device *dev, | ||
1290 | unsigned int *data) | ||
1291 | { | ||
1292 | struct comedi_dt9812 *devpriv = dev->private; | ||
1293 | + unsigned int channel = CR_CHAN(insn->chanspec); | ||
1294 | int n; | ||
1295 | u8 bits = 0; | ||
1296 | |||
1297 | dt9812_digital_out_shadow(devpriv->slot, &bits); | ||
1298 | for (n = 0; n < insn->n; n++) { | ||
1299 | - u8 mask = 1 << insn->chanspec; | ||
1300 | + u8 mask = 1 << channel; | ||
1301 | |||
1302 | bits &= ~mask; | ||
1303 | if (data[n]) | ||
1304 | @@ -982,13 +984,13 @@ static int dt9812_ai_rinsn(struct comedi_device *dev, | ||
1305 | unsigned int *data) | ||
1306 | { | ||
1307 | struct comedi_dt9812 *devpriv = dev->private; | ||
1308 | + unsigned int channel = CR_CHAN(insn->chanspec); | ||
1309 | int n; | ||
1310 | |||
1311 | for (n = 0; n < insn->n; n++) { | ||
1312 | u16 value = 0; | ||
1313 | |||
1314 | - dt9812_analog_in(devpriv->slot, insn->chanspec, &value, | ||
1315 | - DT9812_GAIN_1); | ||
1316 | + dt9812_analog_in(devpriv->slot, channel, &value, DT9812_GAIN_1); | ||
1317 | data[n] = value; | ||
1318 | } | ||
1319 | return n; | ||
1320 | @@ -999,12 +1001,13 @@ static int dt9812_ao_rinsn(struct comedi_device *dev, | ||
1321 | unsigned int *data) | ||
1322 | { | ||
1323 | struct comedi_dt9812 *devpriv = dev->private; | ||
1324 | + unsigned int channel = CR_CHAN(insn->chanspec); | ||
1325 | int n; | ||
1326 | u16 value; | ||
1327 | |||
1328 | for (n = 0; n < insn->n; n++) { | ||
1329 | value = 0; | ||
1330 | - dt9812_analog_out_shadow(devpriv->slot, insn->chanspec, &value); | ||
1331 | + dt9812_analog_out_shadow(devpriv->slot, channel, &value); | ||
1332 | data[n] = value; | ||
1333 | } | ||
1334 | return n; | ||
1335 | @@ -1015,10 +1018,11 @@ static int dt9812_ao_winsn(struct comedi_device *dev, | ||
1336 | unsigned int *data) | ||
1337 | { | ||
1338 | struct comedi_dt9812 *devpriv = dev->private; | ||
1339 | + unsigned int channel = CR_CHAN(insn->chanspec); | ||
1340 | int n; | ||
1341 | |||
1342 | for (n = 0; n < insn->n; n++) | ||
1343 | - dt9812_analog_out(devpriv->slot, insn->chanspec, data[n]); | ||
1344 | + dt9812_analog_out(devpriv->slot, channel, data[n]); | ||
1345 | return n; | ||
1346 | } | ||
1347 | |||
1348 | diff --git a/drivers/staging/vt6656/main_usb.c b/drivers/staging/vt6656/main_usb.c | ||
1349 | index f33086d..f726970 100644 | ||
1350 | --- a/drivers/staging/vt6656/main_usb.c | ||
1351 | +++ b/drivers/staging/vt6656/main_usb.c | ||
1352 | @@ -644,8 +644,6 @@ static int vt6656_suspend(struct usb_interface *intf, pm_message_t message) | ||
1353 | if (device->flags & DEVICE_FLAGS_OPENED) | ||
1354 | device_close(device->dev); | ||
1355 | |||
1356 | - usb_put_dev(interface_to_usbdev(intf)); | ||
1357 | - | ||
1358 | return 0; | ||
1359 | } | ||
1360 | |||
1361 | @@ -656,8 +654,6 @@ static int vt6656_resume(struct usb_interface *intf) | ||
1362 | if (!device || !device->dev) | ||
1363 | return -ENODEV; | ||
1364 | |||
1365 | - usb_get_dev(interface_to_usbdev(intf)); | ||
1366 | - | ||
1367 | if (!(device->flags & DEVICE_FLAGS_OPENED)) | ||
1368 | device_open(device->dev); | ||
1369 | |||
1370 | diff --git a/drivers/tty/pty.c b/drivers/tty/pty.c | ||
1371 | index 79ff3a5..ac35c90 100644 | ||
1372 | --- a/drivers/tty/pty.c | ||
1373 | +++ b/drivers/tty/pty.c | ||
1374 | @@ -47,7 +47,6 @@ static void pty_close(struct tty_struct *tty, struct file *filp) | ||
1375 | /* Review - krefs on tty_link ?? */ | ||
1376 | if (!tty->link) | ||
1377 | return; | ||
1378 | - tty->link->packet = 0; | ||
1379 | set_bit(TTY_OTHER_CLOSED, &tty->link->flags); | ||
1380 | wake_up_interruptible(&tty->link->read_wait); | ||
1381 | wake_up_interruptible(&tty->link->write_wait); | ||
1382 | diff --git a/drivers/tty/serial/8250/8250.c b/drivers/tty/serial/8250/8250.c | ||
1383 | index f932043..733f22c 100644 | ||
1384 | --- a/drivers/tty/serial/8250/8250.c | ||
1385 | +++ b/drivers/tty/serial/8250/8250.c | ||
1386 | @@ -308,7 +308,28 @@ static const struct serial8250_config uart_config[] = { | ||
1387 | }, | ||
1388 | [PORT_8250_CIR] = { | ||
1389 | .name = "CIR port" | ||
1390 | - } | ||
1391 | + }, | ||
1392 | + [PORT_ALTR_16550_F32] = { | ||
1393 | + .name = "Altera 16550 FIFO32", | ||
1394 | + .fifo_size = 32, | ||
1395 | + .tx_loadsz = 32, | ||
1396 | + .fcr = UART_FCR_ENABLE_FIFO | UART_FCR_R_TRIG_10, | ||
1397 | + .flags = UART_CAP_FIFO | UART_CAP_AFE, | ||
1398 | + }, | ||
1399 | + [PORT_ALTR_16550_F64] = { | ||
1400 | + .name = "Altera 16550 FIFO64", | ||
1401 | + .fifo_size = 64, | ||
1402 | + .tx_loadsz = 64, | ||
1403 | + .fcr = UART_FCR_ENABLE_FIFO | UART_FCR_R_TRIG_10, | ||
1404 | + .flags = UART_CAP_FIFO | UART_CAP_AFE, | ||
1405 | + }, | ||
1406 | + [PORT_ALTR_16550_F128] = { | ||
1407 | + .name = "Altera 16550 FIFO128", | ||
1408 | + .fifo_size = 128, | ||
1409 | + .tx_loadsz = 128, | ||
1410 | + .fcr = UART_FCR_ENABLE_FIFO | UART_FCR_R_TRIG_10, | ||
1411 | + .flags = UART_CAP_FIFO | UART_CAP_AFE, | ||
1412 | + }, | ||
1413 | }; | ||
1414 | |||
1415 | /* Uart divisor latch read */ | ||
1416 | @@ -3430,3 +3451,32 @@ module_param_array(probe_rsa, ulong, &probe_rsa_count, 0444); | ||
1417 | MODULE_PARM_DESC(probe_rsa, "Probe I/O ports for RSA"); | ||
1418 | #endif | ||
1419 | MODULE_ALIAS_CHARDEV_MAJOR(TTY_MAJOR); | ||
1420 | + | ||
1421 | +#ifndef MODULE | ||
1422 | +/* This module was renamed to 8250_core in 3.7. Keep the old "8250" name | ||
1423 | + * working as well for the module options so we don't break people. We | ||
1424 | + * need to keep the names identical and the convenient macros will happily | ||
1425 | + * refuse to let us do that by failing the build with redefinition errors | ||
1426 | + * of global variables. So we stick them inside a dummy function to avoid | ||
1427 | + * those conflicts. The options still get parsed, and the redefined | ||
1428 | + * MODULE_PARAM_PREFIX lets us keep the "8250." syntax alive. | ||
1429 | + * | ||
1430 | + * This is hacky. I'm sorry. | ||
1431 | + */ | ||
1432 | +static void __used s8250_options(void) | ||
1433 | +{ | ||
1434 | +#undef MODULE_PARAM_PREFIX | ||
1435 | +#define MODULE_PARAM_PREFIX "8250." | ||
1436 | + | ||
1437 | + module_param_cb(share_irqs, ¶m_ops_uint, &share_irqs, 0644); | ||
1438 | + module_param_cb(nr_uarts, ¶m_ops_uint, &nr_uarts, 0644); | ||
1439 | + module_param_cb(skip_txen_test, ¶m_ops_uint, &skip_txen_test, 0644); | ||
1440 | +#ifdef CONFIG_SERIAL_8250_RSA | ||
1441 | + __module_param_call(MODULE_PARAM_PREFIX, probe_rsa, | ||
1442 | + ¶m_array_ops, .arr = &__param_arr_probe_rsa, | ||
1443 | + 0444, -1); | ||
1444 | +#endif | ||
1445 | +} | ||
1446 | +#else | ||
1447 | +MODULE_ALIAS("8250"); | ||
1448 | +#endif | ||
1449 | diff --git a/drivers/tty/serial/8250/8250_pci.c b/drivers/tty/serial/8250/8250_pci.c | ||
1450 | index a27a98e..5cdb092 100644 | ||
1451 | --- a/drivers/tty/serial/8250/8250_pci.c | ||
1452 | +++ b/drivers/tty/serial/8250/8250_pci.c | ||
1453 | @@ -1321,6 +1321,7 @@ pci_wch_ch353_setup(struct serial_private *priv, | ||
1454 | |||
1455 | /* Unknown vendors/cards - this should not be in linux/pci_ids.h */ | ||
1456 | #define PCI_SUBDEVICE_ID_UNKNOWN_0x1584 0x1584 | ||
1457 | +#define PCI_SUBDEVICE_ID_UNKNOWN_0x1588 0x1588 | ||
1458 | |||
1459 | /* | ||
1460 | * Master list of serial port init/setup/exit quirks. | ||
1461 | @@ -1592,15 +1593,6 @@ static struct pci_serial_quirk pci_serial_quirks[] __refdata = { | ||
1462 | }, | ||
1463 | { | ||
1464 | .vendor = PCI_VENDOR_ID_PLX, | ||
1465 | - .device = PCI_DEVICE_ID_PLX_9050, | ||
1466 | - .subvendor = PCI_VENDOR_ID_PLX, | ||
1467 | - .subdevice = PCI_SUBDEVICE_ID_UNKNOWN_0x1584, | ||
1468 | - .init = pci_plx9050_init, | ||
1469 | - .setup = pci_default_setup, | ||
1470 | - .exit = pci_plx9050_exit, | ||
1471 | - }, | ||
1472 | - { | ||
1473 | - .vendor = PCI_VENDOR_ID_PLX, | ||
1474 | .device = PCI_DEVICE_ID_PLX_ROMULUS, | ||
1475 | .subvendor = PCI_VENDOR_ID_PLX, | ||
1476 | .subdevice = PCI_DEVICE_ID_PLX_ROMULUS, | ||
1477 | @@ -3456,7 +3448,12 @@ static struct pci_device_id serial_pci_tbl[] = { | ||
1478 | { PCI_VENDOR_ID_PLX, PCI_DEVICE_ID_PLX_9050, | ||
1479 | PCI_VENDOR_ID_PLX, | ||
1480 | PCI_SUBDEVICE_ID_UNKNOWN_0x1584, 0, 0, | ||
1481 | - pbn_b0_4_115200 }, | ||
1482 | + pbn_b2_4_115200 }, | ||
1483 | + /* Unknown card - subdevice 0x1588 */ | ||
1484 | + { PCI_VENDOR_ID_PLX, PCI_DEVICE_ID_PLX_9050, | ||
1485 | + PCI_VENDOR_ID_PLX, | ||
1486 | + PCI_SUBDEVICE_ID_UNKNOWN_0x1588, 0, 0, | ||
1487 | + pbn_b2_8_115200 }, | ||
1488 | { PCI_VENDOR_ID_PLX, PCI_DEVICE_ID_PLX_9050, | ||
1489 | PCI_SUBVENDOR_ID_KEYSPAN, | ||
1490 | PCI_SUBDEVICE_ID_KEYSPAN_SX2, 0, 0, | ||
1491 | @@ -4449,6 +4446,10 @@ static struct pci_device_id serial_pci_tbl[] = { | ||
1492 | PCI_VENDOR_ID_IBM, 0x0299, | ||
1493 | 0, 0, pbn_b0_bt_2_115200 }, | ||
1494 | |||
1495 | + { PCI_VENDOR_ID_NETMOS, PCI_DEVICE_ID_NETMOS_9835, | ||
1496 | + 0x1000, 0x0012, | ||
1497 | + 0, 0, pbn_b0_bt_2_115200 }, | ||
1498 | + | ||
1499 | { PCI_VENDOR_ID_NETMOS, PCI_DEVICE_ID_NETMOS_9901, | ||
1500 | 0xA000, 0x1000, | ||
1501 | 0, 0, pbn_b0_1_115200 }, | ||
1502 | diff --git a/drivers/tty/serial/8250/8250_pnp.c b/drivers/tty/serial/8250/8250_pnp.c | ||
1503 | index 35d9ab9..b3455a9 100644 | ||
1504 | --- a/drivers/tty/serial/8250/8250_pnp.c | ||
1505 | +++ b/drivers/tty/serial/8250/8250_pnp.c | ||
1506 | @@ -429,6 +429,7 @@ serial_pnp_probe(struct pnp_dev *dev, const struct pnp_device_id *dev_id) | ||
1507 | { | ||
1508 | struct uart_8250_port uart; | ||
1509 | int ret, line, flags = dev_id->driver_data; | ||
1510 | + struct resource *res = NULL; | ||
1511 | |||
1512 | if (flags & UNKNOWN_DEV) { | ||
1513 | ret = serial_pnp_guess_board(dev); | ||
1514 | @@ -439,11 +440,12 @@ serial_pnp_probe(struct pnp_dev *dev, const struct pnp_device_id *dev_id) | ||
1515 | memset(&uart, 0, sizeof(uart)); | ||
1516 | if (pnp_irq_valid(dev, 0)) | ||
1517 | uart.port.irq = pnp_irq(dev, 0); | ||
1518 | - if ((flags & CIR_PORT) && pnp_port_valid(dev, 2)) { | ||
1519 | - uart.port.iobase = pnp_port_start(dev, 2); | ||
1520 | - uart.port.iotype = UPIO_PORT; | ||
1521 | - } else if (pnp_port_valid(dev, 0)) { | ||
1522 | - uart.port.iobase = pnp_port_start(dev, 0); | ||
1523 | + if ((flags & CIR_PORT) && pnp_port_valid(dev, 2)) | ||
1524 | + res = pnp_get_resource(dev, IORESOURCE_IO, 2); | ||
1525 | + else if (pnp_port_valid(dev, 0)) | ||
1526 | + res = pnp_get_resource(dev, IORESOURCE_IO, 0); | ||
1527 | + if (pnp_resource_enabled(res)) { | ||
1528 | + uart.port.iobase = res->start; | ||
1529 | uart.port.iotype = UPIO_PORT; | ||
1530 | } else if (pnp_mem_valid(dev, 0)) { | ||
1531 | uart.port.mapbase = pnp_mem_start(dev, 0); | ||
1532 | diff --git a/drivers/tty/serial/Kconfig b/drivers/tty/serial/Kconfig | ||
1533 | index 59c23d0..02e706e 100644 | ||
1534 | --- a/drivers/tty/serial/Kconfig | ||
1535 | +++ b/drivers/tty/serial/Kconfig | ||
1536 | @@ -209,14 +209,14 @@ config SERIAL_SAMSUNG | ||
1537 | config SERIAL_SAMSUNG_UARTS_4 | ||
1538 | bool | ||
1539 | depends on PLAT_SAMSUNG | ||
1540 | - default y if !(CPU_S3C2410 || SERIAL_S3C2412 || CPU_S3C2440 || CPU_S3C2442) | ||
1541 | + default y if !(CPU_S3C2410 || CPU_S3C2412 || CPU_S3C2440 || CPU_S3C2442) | ||
1542 | help | ||
1543 | Internal node for the common case of 4 Samsung compatible UARTs | ||
1544 | |||
1545 | config SERIAL_SAMSUNG_UARTS | ||
1546 | int | ||
1547 | depends on PLAT_SAMSUNG | ||
1548 | - default 6 if ARCH_S5P6450 | ||
1549 | + default 6 if CPU_S5P6450 | ||
1550 | default 4 if SERIAL_SAMSUNG_UARTS_4 || CPU_S3C2416 | ||
1551 | default 3 | ||
1552 | help | ||
1553 | diff --git a/drivers/tty/serial/of_serial.c b/drivers/tty/serial/of_serial.c | ||
1554 | index e7cae1c..3490629 100644 | ||
1555 | --- a/drivers/tty/serial/of_serial.c | ||
1556 | +++ b/drivers/tty/serial/of_serial.c | ||
1557 | @@ -240,6 +240,12 @@ static struct of_device_id of_platform_serial_table[] = { | ||
1558 | { .compatible = "ns16850", .data = (void *)PORT_16850, }, | ||
1559 | { .compatible = "nvidia,tegra20-uart", .data = (void *)PORT_TEGRA, }, | ||
1560 | { .compatible = "nxp,lpc3220-uart", .data = (void *)PORT_LPC3220, }, | ||
1561 | + { .compatible = "altr,16550-FIFO32", | ||
1562 | + .data = (void *)PORT_ALTR_16550_F32, }, | ||
1563 | + { .compatible = "altr,16550-FIFO64", | ||
1564 | + .data = (void *)PORT_ALTR_16550_F64, }, | ||
1565 | + { .compatible = "altr,16550-FIFO128", | ||
1566 | + .data = (void *)PORT_ALTR_16550_F128, }, | ||
1567 | #ifdef CONFIG_SERIAL_OF_PLATFORM_NWPSERIAL | ||
1568 | { .compatible = "ibm,qpace-nwp-serial", | ||
1569 | .data = (void *)PORT_NWPSERIAL, }, | ||
1570 | diff --git a/drivers/tty/tty_buffer.c b/drivers/tty/tty_buffer.c | ||
1571 | index 45d9161..cd1f861 100644 | ||
1572 | --- a/drivers/tty/tty_buffer.c | ||
1573 | +++ b/drivers/tty/tty_buffer.c | ||
1574 | @@ -473,7 +473,7 @@ static void flush_to_ldisc(struct work_struct *work) | ||
1575 | struct tty_ldisc *disc; | ||
1576 | |||
1577 | tty = port->itty; | ||
1578 | - if (WARN_RATELIMIT(tty == NULL, "tty is NULL\n")) | ||
1579 | + if (tty == NULL) | ||
1580 | return; | ||
1581 | |||
1582 | disc = tty_ldisc_ref(tty); | ||
1583 | diff --git a/drivers/usb/class/cdc-wdm.c b/drivers/usb/class/cdc-wdm.c | ||
1584 | index 5f0cb41..122d056 100644 | ||
1585 | --- a/drivers/usb/class/cdc-wdm.c | ||
1586 | +++ b/drivers/usb/class/cdc-wdm.c | ||
1587 | @@ -56,6 +56,7 @@ MODULE_DEVICE_TABLE (usb, wdm_ids); | ||
1588 | #define WDM_RESPONDING 7 | ||
1589 | #define WDM_SUSPENDING 8 | ||
1590 | #define WDM_RESETTING 9 | ||
1591 | +#define WDM_OVERFLOW 10 | ||
1592 | |||
1593 | #define WDM_MAX 16 | ||
1594 | |||
1595 | @@ -155,6 +156,7 @@ static void wdm_in_callback(struct urb *urb) | ||
1596 | { | ||
1597 | struct wdm_device *desc = urb->context; | ||
1598 | int status = urb->status; | ||
1599 | + int length = urb->actual_length; | ||
1600 | |||
1601 | spin_lock(&desc->iuspin); | ||
1602 | clear_bit(WDM_RESPONDING, &desc->flags); | ||
1603 | @@ -185,9 +187,17 @@ static void wdm_in_callback(struct urb *urb) | ||
1604 | } | ||
1605 | |||
1606 | desc->rerr = status; | ||
1607 | - desc->reslength = urb->actual_length; | ||
1608 | - memmove(desc->ubuf + desc->length, desc->inbuf, desc->reslength); | ||
1609 | - desc->length += desc->reslength; | ||
1610 | + if (length + desc->length > desc->wMaxCommand) { | ||
1611 | + /* The buffer would overflow */ | ||
1612 | + set_bit(WDM_OVERFLOW, &desc->flags); | ||
1613 | + } else { | ||
1614 | + /* we may already be in overflow */ | ||
1615 | + if (!test_bit(WDM_OVERFLOW, &desc->flags)) { | ||
1616 | + memmove(desc->ubuf + desc->length, desc->inbuf, length); | ||
1617 | + desc->length += length; | ||
1618 | + desc->reslength = length; | ||
1619 | + } | ||
1620 | + } | ||
1621 | skip_error: | ||
1622 | wake_up(&desc->wait); | ||
1623 | |||
1624 | @@ -435,6 +445,11 @@ retry: | ||
1625 | rv = -ENODEV; | ||
1626 | goto err; | ||
1627 | } | ||
1628 | + if (test_bit(WDM_OVERFLOW, &desc->flags)) { | ||
1629 | + clear_bit(WDM_OVERFLOW, &desc->flags); | ||
1630 | + rv = -ENOBUFS; | ||
1631 | + goto err; | ||
1632 | + } | ||
1633 | i++; | ||
1634 | if (file->f_flags & O_NONBLOCK) { | ||
1635 | if (!test_bit(WDM_READ, &desc->flags)) { | ||
1636 | @@ -478,6 +493,7 @@ retry: | ||
1637 | spin_unlock_irq(&desc->iuspin); | ||
1638 | goto retry; | ||
1639 | } | ||
1640 | + | ||
1641 | if (!desc->reslength) { /* zero length read */ | ||
1642 | dev_dbg(&desc->intf->dev, "%s: zero length - clearing WDM_READ\n", __func__); | ||
1643 | clear_bit(WDM_READ, &desc->flags); | ||
1644 | @@ -1004,6 +1020,7 @@ static int wdm_post_reset(struct usb_interface *intf) | ||
1645 | struct wdm_device *desc = wdm_find_device(intf); | ||
1646 | int rv; | ||
1647 | |||
1648 | + clear_bit(WDM_OVERFLOW, &desc->flags); | ||
1649 | clear_bit(WDM_RESETTING, &desc->flags); | ||
1650 | rv = recover_from_urb_loss(desc); | ||
1651 | mutex_unlock(&desc->wlock); | ||
1652 | diff --git a/drivers/usb/dwc3/core.c b/drivers/usb/dwc3/core.c | ||
1653 | index 3a4004a..f00c749 100644 | ||
1654 | --- a/drivers/usb/dwc3/core.c | ||
1655 | +++ b/drivers/usb/dwc3/core.c | ||
1656 | @@ -575,6 +575,7 @@ static int dwc3_remove(struct platform_device *pdev) | ||
1657 | break; | ||
1658 | } | ||
1659 | |||
1660 | + dwc3_free_event_buffers(dwc); | ||
1661 | dwc3_core_exit(dwc); | ||
1662 | |||
1663 | return 0; | ||
1664 | diff --git a/drivers/usb/host/ehci-q.c b/drivers/usb/host/ehci-q.c | ||
1665 | index fd252f0..eda2cf4 100644 | ||
1666 | --- a/drivers/usb/host/ehci-q.c | ||
1667 | +++ b/drivers/usb/host/ehci-q.c | ||
1668 | @@ -135,7 +135,7 @@ qh_refresh (struct ehci_hcd *ehci, struct ehci_qh *qh) | ||
1669 | * qtd is updated in qh_completions(). Update the QH | ||
1670 | * overlay here. | ||
1671 | */ | ||
1672 | - if (cpu_to_hc32(ehci, qtd->qtd_dma) == qh->hw->hw_current) { | ||
1673 | + if (qh->hw->hw_token & ACTIVE_BIT(ehci)) { | ||
1674 | qh->hw->hw_qtd_next = qtd->hw_next; | ||
1675 | qtd = NULL; | ||
1676 | } | ||
1677 | @@ -449,11 +449,19 @@ qh_completions (struct ehci_hcd *ehci, struct ehci_qh *qh) | ||
1678 | else if (last_status == -EINPROGRESS && !urb->unlinked) | ||
1679 | continue; | ||
1680 | |||
1681 | - /* qh unlinked; token in overlay may be most current */ | ||
1682 | - if (state == QH_STATE_IDLE | ||
1683 | - && cpu_to_hc32(ehci, qtd->qtd_dma) | ||
1684 | - == hw->hw_current) { | ||
1685 | + /* | ||
1686 | + * If this was the active qtd when the qh was unlinked | ||
1687 | + * and the overlay's token is active, then the overlay | ||
1688 | + * hasn't been written back to the qtd yet so use its | ||
1689 | + * token instead of the qtd's. After the qtd is | ||
1690 | + * processed and removed, the overlay won't be valid | ||
1691 | + * any more. | ||
1692 | + */ | ||
1693 | + if (state == QH_STATE_IDLE && | ||
1694 | + qh->qtd_list.next == &qtd->qtd_list && | ||
1695 | + (hw->hw_token & ACTIVE_BIT(ehci))) { | ||
1696 | token = hc32_to_cpu(ehci, hw->hw_token); | ||
1697 | + hw->hw_token &= ~ACTIVE_BIT(ehci); | ||
1698 | |||
1699 | /* An unlink may leave an incomplete | ||
1700 | * async transaction in the TT buffer. | ||
1701 | diff --git a/drivers/usb/serial/cp210x.c b/drivers/usb/serial/cp210x.c | ||
1702 | index edc0f0d..4747d1c 100644 | ||
1703 | --- a/drivers/usb/serial/cp210x.c | ||
1704 | +++ b/drivers/usb/serial/cp210x.c | ||
1705 | @@ -85,6 +85,7 @@ static const struct usb_device_id id_table[] = { | ||
1706 | { USB_DEVICE(0x10C4, 0x813F) }, /* Tams Master Easy Control */ | ||
1707 | { USB_DEVICE(0x10C4, 0x814A) }, /* West Mountain Radio RIGblaster P&P */ | ||
1708 | { USB_DEVICE(0x10C4, 0x814B) }, /* West Mountain Radio RIGtalk */ | ||
1709 | + { USB_DEVICE(0x2405, 0x0003) }, /* West Mountain Radio RIGblaster Advantage */ | ||
1710 | { USB_DEVICE(0x10C4, 0x8156) }, /* B&G H3000 link cable */ | ||
1711 | { USB_DEVICE(0x10C4, 0x815E) }, /* Helicomm IP-Link 1220-DVM */ | ||
1712 | { USB_DEVICE(0x10C4, 0x815F) }, /* Timewave HamLinkUSB */ | ||
1713 | @@ -150,6 +151,25 @@ static const struct usb_device_id id_table[] = { | ||
1714 | { USB_DEVICE(0x1BE3, 0x07A6) }, /* WAGO 750-923 USB Service Cable */ | ||
1715 | { USB_DEVICE(0x1E29, 0x0102) }, /* Festo CPX-USB */ | ||
1716 | { USB_DEVICE(0x1E29, 0x0501) }, /* Festo CMSP */ | ||
1717 | + { USB_DEVICE(0x1FB9, 0x0100) }, /* Lake Shore Model 121 Current Source */ | ||
1718 | + { USB_DEVICE(0x1FB9, 0x0200) }, /* Lake Shore Model 218A Temperature Monitor */ | ||
1719 | + { USB_DEVICE(0x1FB9, 0x0201) }, /* Lake Shore Model 219 Temperature Monitor */ | ||
1720 | + { USB_DEVICE(0x1FB9, 0x0202) }, /* Lake Shore Model 233 Temperature Transmitter */ | ||
1721 | + { USB_DEVICE(0x1FB9, 0x0203) }, /* Lake Shore Model 235 Temperature Transmitter */ | ||
1722 | + { USB_DEVICE(0x1FB9, 0x0300) }, /* Lake Shore Model 335 Temperature Controller */ | ||
1723 | + { USB_DEVICE(0x1FB9, 0x0301) }, /* Lake Shore Model 336 Temperature Controller */ | ||
1724 | + { USB_DEVICE(0x1FB9, 0x0302) }, /* Lake Shore Model 350 Temperature Controller */ | ||
1725 | + { USB_DEVICE(0x1FB9, 0x0303) }, /* Lake Shore Model 371 AC Bridge */ | ||
1726 | + { USB_DEVICE(0x1FB9, 0x0400) }, /* Lake Shore Model 411 Handheld Gaussmeter */ | ||
1727 | + { USB_DEVICE(0x1FB9, 0x0401) }, /* Lake Shore Model 425 Gaussmeter */ | ||
1728 | + { USB_DEVICE(0x1FB9, 0x0402) }, /* Lake Shore Model 455A Gaussmeter */ | ||
1729 | + { USB_DEVICE(0x1FB9, 0x0403) }, /* Lake Shore Model 475A Gaussmeter */ | ||
1730 | + { USB_DEVICE(0x1FB9, 0x0404) }, /* Lake Shore Model 465 Three Axis Gaussmeter */ | ||
1731 | + { USB_DEVICE(0x1FB9, 0x0600) }, /* Lake Shore Model 625A Superconducting MPS */ | ||
1732 | + { USB_DEVICE(0x1FB9, 0x0601) }, /* Lake Shore Model 642A Magnet Power Supply */ | ||
1733 | + { USB_DEVICE(0x1FB9, 0x0602) }, /* Lake Shore Model 648 Magnet Power Supply */ | ||
1734 | + { USB_DEVICE(0x1FB9, 0x0700) }, /* Lake Shore Model 737 VSM Controller */ | ||
1735 | + { USB_DEVICE(0x1FB9, 0x0701) }, /* Lake Shore Model 776 Hall Matrix */ | ||
1736 | { USB_DEVICE(0x3195, 0xF190) }, /* Link Instruments MSO-19 */ | ||
1737 | { USB_DEVICE(0x3195, 0xF280) }, /* Link Instruments MSO-28 */ | ||
1738 | { USB_DEVICE(0x3195, 0xF281) }, /* Link Instruments MSO-28 */ | ||
1739 | diff --git a/drivers/usb/serial/option.c b/drivers/usb/serial/option.c | ||
1740 | index f7d339d..558adfc 100644 | ||
1741 | --- a/drivers/usb/serial/option.c | ||
1742 | +++ b/drivers/usb/serial/option.c | ||
1743 | @@ -341,6 +341,8 @@ static void option_instat_callback(struct urb *urb); | ||
1744 | #define CINTERION_PRODUCT_EU3_E 0x0051 | ||
1745 | #define CINTERION_PRODUCT_EU3_P 0x0052 | ||
1746 | #define CINTERION_PRODUCT_PH8 0x0053 | ||
1747 | +#define CINTERION_PRODUCT_AH6 0x0055 | ||
1748 | +#define CINTERION_PRODUCT_PLS8 0x0060 | ||
1749 | |||
1750 | /* Olivetti products */ | ||
1751 | #define OLIVETTI_VENDOR_ID 0x0b3c | ||
1752 | @@ -579,6 +581,7 @@ static const struct usb_device_id option_ids[] = { | ||
1753 | { USB_DEVICE(QUANTA_VENDOR_ID, 0xea42), | ||
1754 | .driver_info = (kernel_ulong_t)&net_intf4_blacklist }, | ||
1755 | { USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0x1c05, USB_CLASS_COMM, 0x02, 0xff) }, | ||
1756 | + { USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0x1c1f, USB_CLASS_COMM, 0x02, 0xff) }, | ||
1757 | { USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0x1c23, USB_CLASS_COMM, 0x02, 0xff) }, | ||
1758 | { USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_E173, 0xff, 0xff, 0xff), | ||
1759 | .driver_info = (kernel_ulong_t) &net_intf1_blacklist }, | ||
1760 | @@ -1260,6 +1263,8 @@ static const struct usb_device_id option_ids[] = { | ||
1761 | { USB_DEVICE(CINTERION_VENDOR_ID, CINTERION_PRODUCT_EU3_E) }, | ||
1762 | { USB_DEVICE(CINTERION_VENDOR_ID, CINTERION_PRODUCT_EU3_P) }, | ||
1763 | { USB_DEVICE(CINTERION_VENDOR_ID, CINTERION_PRODUCT_PH8) }, | ||
1764 | + { USB_DEVICE(CINTERION_VENDOR_ID, CINTERION_PRODUCT_AH6) }, | ||
1765 | + { USB_DEVICE(CINTERION_VENDOR_ID, CINTERION_PRODUCT_PLS8) }, | ||
1766 | { USB_DEVICE(CINTERION_VENDOR_ID, CINTERION_PRODUCT_HC28_MDM) }, | ||
1767 | { USB_DEVICE(CINTERION_VENDOR_ID, CINTERION_PRODUCT_HC28_MDMNET) }, | ||
1768 | { USB_DEVICE(SIEMENS_VENDOR_ID, CINTERION_PRODUCT_HC25_MDM) }, | ||
1769 | diff --git a/drivers/usb/serial/qcaux.c b/drivers/usb/serial/qcaux.c | ||
1770 | index 9b1b96f..31f81c3 100644 | ||
1771 | --- a/drivers/usb/serial/qcaux.c | ||
1772 | +++ b/drivers/usb/serial/qcaux.c | ||
1773 | @@ -69,6 +69,7 @@ static struct usb_device_id id_table[] = { | ||
1774 | { USB_VENDOR_AND_INTERFACE_INFO(UTSTARCOM_VENDOR_ID, 0xff, 0xfd, 0xff) }, /* NMEA */ | ||
1775 | { USB_VENDOR_AND_INTERFACE_INFO(UTSTARCOM_VENDOR_ID, 0xff, 0xfe, 0xff) }, /* WMC */ | ||
1776 | { USB_VENDOR_AND_INTERFACE_INFO(UTSTARCOM_VENDOR_ID, 0xff, 0xff, 0xff) }, /* DIAG */ | ||
1777 | + { USB_DEVICE_AND_INTERFACE_INFO(0x1fac, 0x0151, 0xff, 0xff, 0xff) }, | ||
1778 | { }, | ||
1779 | }; | ||
1780 | MODULE_DEVICE_TABLE(usb, id_table); | ||
1781 | diff --git a/drivers/usb/serial/qcserial.c b/drivers/usb/serial/qcserial.c | ||
1782 | index 2466254..59b32b7 100644 | ||
1783 | --- a/drivers/usb/serial/qcserial.c | ||
1784 | +++ b/drivers/usb/serial/qcserial.c | ||
1785 | @@ -197,12 +197,15 @@ static int qcprobe(struct usb_serial *serial, const struct usb_device_id *id) | ||
1786 | |||
1787 | if (is_gobi1k) { | ||
1788 | /* Gobi 1K USB layout: | ||
1789 | - * 0: serial port (doesn't respond) | ||
1790 | + * 0: DM/DIAG (use libqcdm from ModemManager for communication) | ||
1791 | * 1: serial port (doesn't respond) | ||
1792 | * 2: AT-capable modem port | ||
1793 | * 3: QMI/net | ||
1794 | */ | ||
1795 | - if (ifnum == 2) | ||
1796 | + if (ifnum == 0) { | ||
1797 | + dev_dbg(dev, "Gobi 1K DM/DIAG interface found\n"); | ||
1798 | + altsetting = 1; | ||
1799 | + } else if (ifnum == 2) | ||
1800 | dev_dbg(dev, "Modem port found\n"); | ||
1801 | else | ||
1802 | altsetting = -1; | ||
1803 | diff --git a/drivers/usb/storage/initializers.c b/drivers/usb/storage/initializers.c | ||
1804 | index 7ab9046..105d900 100644 | ||
1805 | --- a/drivers/usb/storage/initializers.c | ||
1806 | +++ b/drivers/usb/storage/initializers.c | ||
1807 | @@ -92,8 +92,8 @@ int usb_stor_ucr61s2b_init(struct us_data *us) | ||
1808 | return 0; | ||
1809 | } | ||
1810 | |||
1811 | -/* This places the HUAWEI usb dongles in multi-port mode */ | ||
1812 | -static int usb_stor_huawei_feature_init(struct us_data *us) | ||
1813 | +/* This places the HUAWEI E220 devices in multi-port mode */ | ||
1814 | +int usb_stor_huawei_e220_init(struct us_data *us) | ||
1815 | { | ||
1816 | int result; | ||
1817 | |||
1818 | @@ -104,75 +104,3 @@ static int usb_stor_huawei_feature_init(struct us_data *us) | ||
1819 | US_DEBUGP("Huawei mode set result is %d\n", result); | ||
1820 | return 0; | ||
1821 | } | ||
1822 | - | ||
1823 | -/* | ||
1824 | - * It will send a scsi switch command called rewind' to huawei dongle. | ||
1825 | - * When the dongle receives this command at the first time, | ||
1826 | - * it will reboot immediately. After rebooted, it will ignore this command. | ||
1827 | - * So it is unnecessary to read its response. | ||
1828 | - */ | ||
1829 | -static int usb_stor_huawei_scsi_init(struct us_data *us) | ||
1830 | -{ | ||
1831 | - int result = 0; | ||
1832 | - int act_len = 0; | ||
1833 | - struct bulk_cb_wrap *bcbw = (struct bulk_cb_wrap *) us->iobuf; | ||
1834 | - char rewind_cmd[] = {0x11, 0x06, 0x20, 0x00, 0x00, 0x01, 0x01, 0x00, | ||
1835 | - 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}; | ||
1836 | - | ||
1837 | - bcbw->Signature = cpu_to_le32(US_BULK_CB_SIGN); | ||
1838 | - bcbw->Tag = 0; | ||
1839 | - bcbw->DataTransferLength = 0; | ||
1840 | - bcbw->Flags = bcbw->Lun = 0; | ||
1841 | - bcbw->Length = sizeof(rewind_cmd); | ||
1842 | - memset(bcbw->CDB, 0, sizeof(bcbw->CDB)); | ||
1843 | - memcpy(bcbw->CDB, rewind_cmd, sizeof(rewind_cmd)); | ||
1844 | - | ||
1845 | - result = usb_stor_bulk_transfer_buf(us, us->send_bulk_pipe, bcbw, | ||
1846 | - US_BULK_CB_WRAP_LEN, &act_len); | ||
1847 | - US_DEBUGP("transfer actual length=%d, result=%d\n", act_len, result); | ||
1848 | - return result; | ||
1849 | -} | ||
1850 | - | ||
1851 | -/* | ||
1852 | - * It tries to find the supported Huawei USB dongles. | ||
1853 | - * In Huawei, they assign the following product IDs | ||
1854 | - * for all of their mobile broadband dongles, | ||
1855 | - * including the new dongles in the future. | ||
1856 | - * So if the product ID is not included in this list, | ||
1857 | - * it means it is not Huawei's mobile broadband dongles. | ||
1858 | - */ | ||
1859 | -static int usb_stor_huawei_dongles_pid(struct us_data *us) | ||
1860 | -{ | ||
1861 | - struct usb_interface_descriptor *idesc; | ||
1862 | - int idProduct; | ||
1863 | - | ||
1864 | - idesc = &us->pusb_intf->cur_altsetting->desc; | ||
1865 | - idProduct = le16_to_cpu(us->pusb_dev->descriptor.idProduct); | ||
1866 | - /* The first port is CDROM, | ||
1867 | - * means the dongle in the single port mode, | ||
1868 | - * and a switch command is required to be sent. */ | ||
1869 | - if (idesc && idesc->bInterfaceNumber == 0) { | ||
1870 | - if ((idProduct == 0x1001) | ||
1871 | - || (idProduct == 0x1003) | ||
1872 | - || (idProduct == 0x1004) | ||
1873 | - || (idProduct >= 0x1401 && idProduct <= 0x1500) | ||
1874 | - || (idProduct >= 0x1505 && idProduct <= 0x1600) | ||
1875 | - || (idProduct >= 0x1c02 && idProduct <= 0x2202)) { | ||
1876 | - return 1; | ||
1877 | - } | ||
1878 | - } | ||
1879 | - return 0; | ||
1880 | -} | ||
1881 | - | ||
1882 | -int usb_stor_huawei_init(struct us_data *us) | ||
1883 | -{ | ||
1884 | - int result = 0; | ||
1885 | - | ||
1886 | - if (usb_stor_huawei_dongles_pid(us)) { | ||
1887 | - if (le16_to_cpu(us->pusb_dev->descriptor.idProduct) >= 0x1446) | ||
1888 | - result = usb_stor_huawei_scsi_init(us); | ||
1889 | - else | ||
1890 | - result = usb_stor_huawei_feature_init(us); | ||
1891 | - } | ||
1892 | - return result; | ||
1893 | -} | ||
1894 | diff --git a/drivers/usb/storage/initializers.h b/drivers/usb/storage/initializers.h | ||
1895 | index 5376d4f..529327f 100644 | ||
1896 | --- a/drivers/usb/storage/initializers.h | ||
1897 | +++ b/drivers/usb/storage/initializers.h | ||
1898 | @@ -46,5 +46,5 @@ int usb_stor_euscsi_init(struct us_data *us); | ||
1899 | * flash reader */ | ||
1900 | int usb_stor_ucr61s2b_init(struct us_data *us); | ||
1901 | |||
1902 | -/* This places the HUAWEI usb dongles in multi-port mode */ | ||
1903 | -int usb_stor_huawei_init(struct us_data *us); | ||
1904 | +/* This places the HUAWEI E220 devices in multi-port mode */ | ||
1905 | +int usb_stor_huawei_e220_init(struct us_data *us); | ||
1906 | diff --git a/drivers/usb/storage/unusual_devs.h b/drivers/usb/storage/unusual_devs.h | ||
1907 | index 72923b5..d305a5a 100644 | ||
1908 | --- a/drivers/usb/storage/unusual_devs.h | ||
1909 | +++ b/drivers/usb/storage/unusual_devs.h | ||
1910 | @@ -1527,10 +1527,335 @@ UNUSUAL_DEV( 0x1210, 0x0003, 0x0100, 0x0100, | ||
1911 | /* Reported by fangxiaozhi <huananhu@huawei.com> | ||
1912 | * This brings the HUAWEI data card devices into multi-port mode | ||
1913 | */ | ||
1914 | -UNUSUAL_VENDOR_INTF(0x12d1, 0x08, 0x06, 0x50, | ||
1915 | +UNUSUAL_DEV( 0x12d1, 0x1001, 0x0000, 0x0000, | ||
1916 | "HUAWEI MOBILE", | ||
1917 | "Mass Storage", | ||
1918 | - USB_SC_DEVICE, USB_PR_DEVICE, usb_stor_huawei_init, | ||
1919 | + USB_SC_DEVICE, USB_PR_DEVICE, usb_stor_huawei_e220_init, | ||
1920 | + 0), | ||
1921 | +UNUSUAL_DEV( 0x12d1, 0x1003, 0x0000, 0x0000, | ||
1922 | + "HUAWEI MOBILE", | ||
1923 | + "Mass Storage", | ||
1924 | + USB_SC_DEVICE, USB_PR_DEVICE, usb_stor_huawei_e220_init, | ||
1925 | + 0), | ||
1926 | +UNUSUAL_DEV( 0x12d1, 0x1004, 0x0000, 0x0000, | ||
1927 | + "HUAWEI MOBILE", | ||
1928 | + "Mass Storage", | ||
1929 | + USB_SC_DEVICE, USB_PR_DEVICE, usb_stor_huawei_e220_init, | ||
1930 | + 0), | ||
1931 | +UNUSUAL_DEV( 0x12d1, 0x1401, 0x0000, 0x0000, | ||
1932 | + "HUAWEI MOBILE", | ||
1933 | + "Mass Storage", | ||
1934 | + USB_SC_DEVICE, USB_PR_DEVICE, usb_stor_huawei_e220_init, | ||
1935 | + 0), | ||
1936 | +UNUSUAL_DEV( 0x12d1, 0x1402, 0x0000, 0x0000, | ||
1937 | + "HUAWEI MOBILE", | ||
1938 | + "Mass Storage", | ||
1939 | + USB_SC_DEVICE, USB_PR_DEVICE, usb_stor_huawei_e220_init, | ||
1940 | + 0), | ||
1941 | +UNUSUAL_DEV( 0x12d1, 0x1403, 0x0000, 0x0000, | ||
1942 | + "HUAWEI MOBILE", | ||
1943 | + "Mass Storage", | ||
1944 | + USB_SC_DEVICE, USB_PR_DEVICE, usb_stor_huawei_e220_init, | ||
1945 | + 0), | ||
1946 | +UNUSUAL_DEV( 0x12d1, 0x1404, 0x0000, 0x0000, | ||
1947 | + "HUAWEI MOBILE", | ||
1948 | + "Mass Storage", | ||
1949 | + USB_SC_DEVICE, USB_PR_DEVICE, usb_stor_huawei_e220_init, | ||
1950 | + 0), | ||
1951 | +UNUSUAL_DEV( 0x12d1, 0x1405, 0x0000, 0x0000, | ||
1952 | + "HUAWEI MOBILE", | ||
1953 | + "Mass Storage", | ||
1954 | + USB_SC_DEVICE, USB_PR_DEVICE, usb_stor_huawei_e220_init, | ||
1955 | + 0), | ||
1956 | +UNUSUAL_DEV( 0x12d1, 0x1406, 0x0000, 0x0000, | ||
1957 | + "HUAWEI MOBILE", | ||
1958 | + "Mass Storage", | ||
1959 | + USB_SC_DEVICE, USB_PR_DEVICE, usb_stor_huawei_e220_init, | ||
1960 | + 0), | ||
1961 | +UNUSUAL_DEV( 0x12d1, 0x1407, 0x0000, 0x0000, | ||
1962 | + "HUAWEI MOBILE", | ||
1963 | + "Mass Storage", | ||
1964 | + USB_SC_DEVICE, USB_PR_DEVICE, usb_stor_huawei_e220_init, | ||
1965 | + 0), | ||
1966 | +UNUSUAL_DEV( 0x12d1, 0x1408, 0x0000, 0x0000, | ||
1967 | + "HUAWEI MOBILE", | ||
1968 | + "Mass Storage", | ||
1969 | + USB_SC_DEVICE, USB_PR_DEVICE, usb_stor_huawei_e220_init, | ||
1970 | + 0), | ||
1971 | +UNUSUAL_DEV( 0x12d1, 0x1409, 0x0000, 0x0000, | ||
1972 | + "HUAWEI MOBILE", | ||
1973 | + "Mass Storage", | ||
1974 | + USB_SC_DEVICE, USB_PR_DEVICE, usb_stor_huawei_e220_init, | ||
1975 | + 0), | ||
1976 | +UNUSUAL_DEV( 0x12d1, 0x140A, 0x0000, 0x0000, | ||
1977 | + "HUAWEI MOBILE", | ||
1978 | + "Mass Storage", | ||
1979 | + USB_SC_DEVICE, USB_PR_DEVICE, usb_stor_huawei_e220_init, | ||
1980 | + 0), | ||
1981 | +UNUSUAL_DEV( 0x12d1, 0x140B, 0x0000, 0x0000, | ||
1982 | + "HUAWEI MOBILE", | ||
1983 | + "Mass Storage", | ||
1984 | + USB_SC_DEVICE, USB_PR_DEVICE, usb_stor_huawei_e220_init, | ||
1985 | + 0), | ||
1986 | +UNUSUAL_DEV( 0x12d1, 0x140C, 0x0000, 0x0000, | ||
1987 | + "HUAWEI MOBILE", | ||
1988 | + "Mass Storage", | ||
1989 | + USB_SC_DEVICE, USB_PR_DEVICE, usb_stor_huawei_e220_init, | ||
1990 | + 0), | ||
1991 | +UNUSUAL_DEV( 0x12d1, 0x140D, 0x0000, 0x0000, | ||
1992 | + "HUAWEI MOBILE", | ||
1993 | + "Mass Storage", | ||
1994 | + USB_SC_DEVICE, USB_PR_DEVICE, usb_stor_huawei_e220_init, | ||
1995 | + 0), | ||
1996 | +UNUSUAL_DEV( 0x12d1, 0x140E, 0x0000, 0x0000, | ||
1997 | + "HUAWEI MOBILE", | ||
1998 | + "Mass Storage", | ||
1999 | + USB_SC_DEVICE, USB_PR_DEVICE, usb_stor_huawei_e220_init, | ||
2000 | + 0), | ||
2001 | +UNUSUAL_DEV( 0x12d1, 0x140F, 0x0000, 0x0000, | ||
2002 | + "HUAWEI MOBILE", | ||
2003 | + "Mass Storage", | ||
2004 | + USB_SC_DEVICE, USB_PR_DEVICE, usb_stor_huawei_e220_init, | ||
2005 | + 0), | ||
2006 | +UNUSUAL_DEV( 0x12d1, 0x1410, 0x0000, 0x0000, | ||
2007 | + "HUAWEI MOBILE", | ||
2008 | + "Mass Storage", | ||
2009 | + USB_SC_DEVICE, USB_PR_DEVICE, usb_stor_huawei_e220_init, | ||
2010 | + 0), | ||
2011 | +UNUSUAL_DEV( 0x12d1, 0x1411, 0x0000, 0x0000, | ||
2012 | + "HUAWEI MOBILE", | ||
2013 | + "Mass Storage", | ||
2014 | + USB_SC_DEVICE, USB_PR_DEVICE, usb_stor_huawei_e220_init, | ||
2015 | + 0), | ||
2016 | +UNUSUAL_DEV( 0x12d1, 0x1412, 0x0000, 0x0000, | ||
2017 | + "HUAWEI MOBILE", | ||
2018 | + "Mass Storage", | ||
2019 | + USB_SC_DEVICE, USB_PR_DEVICE, usb_stor_huawei_e220_init, | ||
2020 | + 0), | ||
2021 | +UNUSUAL_DEV( 0x12d1, 0x1413, 0x0000, 0x0000, | ||
2022 | + "HUAWEI MOBILE", | ||
2023 | + "Mass Storage", | ||
2024 | + USB_SC_DEVICE, USB_PR_DEVICE, usb_stor_huawei_e220_init, | ||
2025 | + 0), | ||
2026 | +UNUSUAL_DEV( 0x12d1, 0x1414, 0x0000, 0x0000, | ||
2027 | + "HUAWEI MOBILE", | ||
2028 | + "Mass Storage", | ||
2029 | + USB_SC_DEVICE, USB_PR_DEVICE, usb_stor_huawei_e220_init, | ||
2030 | + 0), | ||
2031 | +UNUSUAL_DEV( 0x12d1, 0x1415, 0x0000, 0x0000, | ||
2032 | + "HUAWEI MOBILE", | ||
2033 | + "Mass Storage", | ||
2034 | + USB_SC_DEVICE, USB_PR_DEVICE, usb_stor_huawei_e220_init, | ||
2035 | + 0), | ||
2036 | +UNUSUAL_DEV( 0x12d1, 0x1416, 0x0000, 0x0000, | ||
2037 | + "HUAWEI MOBILE", | ||
2038 | + "Mass Storage", | ||
2039 | + USB_SC_DEVICE, USB_PR_DEVICE, usb_stor_huawei_e220_init, | ||
2040 | + 0), | ||
2041 | +UNUSUAL_DEV( 0x12d1, 0x1417, 0x0000, 0x0000, | ||
2042 | + "HUAWEI MOBILE", | ||
2043 | + "Mass Storage", | ||
2044 | + USB_SC_DEVICE, USB_PR_DEVICE, usb_stor_huawei_e220_init, | ||
2045 | + 0), | ||
2046 | +UNUSUAL_DEV( 0x12d1, 0x1418, 0x0000, 0x0000, | ||
2047 | + "HUAWEI MOBILE", | ||
2048 | + "Mass Storage", | ||
2049 | + USB_SC_DEVICE, USB_PR_DEVICE, usb_stor_huawei_e220_init, | ||
2050 | + 0), | ||
2051 | +UNUSUAL_DEV( 0x12d1, 0x1419, 0x0000, 0x0000, | ||
2052 | + "HUAWEI MOBILE", | ||
2053 | + "Mass Storage", | ||
2054 | + USB_SC_DEVICE, USB_PR_DEVICE, usb_stor_huawei_e220_init, | ||
2055 | + 0), | ||
2056 | +UNUSUAL_DEV( 0x12d1, 0x141A, 0x0000, 0x0000, | ||
2057 | + "HUAWEI MOBILE", | ||
2058 | + "Mass Storage", | ||
2059 | + USB_SC_DEVICE, USB_PR_DEVICE, usb_stor_huawei_e220_init, | ||
2060 | + 0), | ||
2061 | +UNUSUAL_DEV( 0x12d1, 0x141B, 0x0000, 0x0000, | ||
2062 | + "HUAWEI MOBILE", | ||
2063 | + "Mass Storage", | ||
2064 | + USB_SC_DEVICE, USB_PR_DEVICE, usb_stor_huawei_e220_init, | ||
2065 | + 0), | ||
2066 | +UNUSUAL_DEV( 0x12d1, 0x141C, 0x0000, 0x0000, | ||
2067 | + "HUAWEI MOBILE", | ||
2068 | + "Mass Storage", | ||
2069 | + USB_SC_DEVICE, USB_PR_DEVICE, usb_stor_huawei_e220_init, | ||
2070 | + 0), | ||
2071 | +UNUSUAL_DEV( 0x12d1, 0x141D, 0x0000, 0x0000, | ||
2072 | + "HUAWEI MOBILE", | ||
2073 | + "Mass Storage", | ||
2074 | + USB_SC_DEVICE, USB_PR_DEVICE, usb_stor_huawei_e220_init, | ||
2075 | + 0), | ||
2076 | +UNUSUAL_DEV( 0x12d1, 0x141E, 0x0000, 0x0000, | ||
2077 | + "HUAWEI MOBILE", | ||
2078 | + "Mass Storage", | ||
2079 | + USB_SC_DEVICE, USB_PR_DEVICE, usb_stor_huawei_e220_init, | ||
2080 | + 0), | ||
2081 | +UNUSUAL_DEV( 0x12d1, 0x141F, 0x0000, 0x0000, | ||
2082 | + "HUAWEI MOBILE", | ||
2083 | + "Mass Storage", | ||
2084 | + USB_SC_DEVICE, USB_PR_DEVICE, usb_stor_huawei_e220_init, | ||
2085 | + 0), | ||
2086 | +UNUSUAL_DEV( 0x12d1, 0x1420, 0x0000, 0x0000, | ||
2087 | + "HUAWEI MOBILE", | ||
2088 | + "Mass Storage", | ||
2089 | + USB_SC_DEVICE, USB_PR_DEVICE, usb_stor_huawei_e220_init, | ||
2090 | + 0), | ||
2091 | +UNUSUAL_DEV( 0x12d1, 0x1421, 0x0000, 0x0000, | ||
2092 | + "HUAWEI MOBILE", | ||
2093 | + "Mass Storage", | ||
2094 | + USB_SC_DEVICE, USB_PR_DEVICE, usb_stor_huawei_e220_init, | ||
2095 | + 0), | ||
2096 | +UNUSUAL_DEV( 0x12d1, 0x1422, 0x0000, 0x0000, | ||
2097 | + "HUAWEI MOBILE", | ||
2098 | + "Mass Storage", | ||
2099 | + USB_SC_DEVICE, USB_PR_DEVICE, usb_stor_huawei_e220_init, | ||
2100 | + 0), | ||
2101 | +UNUSUAL_DEV( 0x12d1, 0x1423, 0x0000, 0x0000, | ||
2102 | + "HUAWEI MOBILE", | ||
2103 | + "Mass Storage", | ||
2104 | + USB_SC_DEVICE, USB_PR_DEVICE, usb_stor_huawei_e220_init, | ||
2105 | + 0), | ||
2106 | +UNUSUAL_DEV( 0x12d1, 0x1424, 0x0000, 0x0000, | ||
2107 | + "HUAWEI MOBILE", | ||
2108 | + "Mass Storage", | ||
2109 | + USB_SC_DEVICE, USB_PR_DEVICE, usb_stor_huawei_e220_init, | ||
2110 | + 0), | ||
2111 | +UNUSUAL_DEV( 0x12d1, 0x1425, 0x0000, 0x0000, | ||
2112 | + "HUAWEI MOBILE", | ||
2113 | + "Mass Storage", | ||
2114 | + USB_SC_DEVICE, USB_PR_DEVICE, usb_stor_huawei_e220_init, | ||
2115 | + 0), | ||
2116 | +UNUSUAL_DEV( 0x12d1, 0x1426, 0x0000, 0x0000, | ||
2117 | + "HUAWEI MOBILE", | ||
2118 | + "Mass Storage", | ||
2119 | + USB_SC_DEVICE, USB_PR_DEVICE, usb_stor_huawei_e220_init, | ||
2120 | + 0), | ||
2121 | +UNUSUAL_DEV( 0x12d1, 0x1427, 0x0000, 0x0000, | ||
2122 | + "HUAWEI MOBILE", | ||
2123 | + "Mass Storage", | ||
2124 | + USB_SC_DEVICE, USB_PR_DEVICE, usb_stor_huawei_e220_init, | ||
2125 | + 0), | ||
2126 | +UNUSUAL_DEV( 0x12d1, 0x1428, 0x0000, 0x0000, | ||
2127 | + "HUAWEI MOBILE", | ||
2128 | + "Mass Storage", | ||
2129 | + USB_SC_DEVICE, USB_PR_DEVICE, usb_stor_huawei_e220_init, | ||
2130 | + 0), | ||
2131 | +UNUSUAL_DEV( 0x12d1, 0x1429, 0x0000, 0x0000, | ||
2132 | + "HUAWEI MOBILE", | ||
2133 | + "Mass Storage", | ||
2134 | + USB_SC_DEVICE, USB_PR_DEVICE, usb_stor_huawei_e220_init, | ||
2135 | + 0), | ||
2136 | +UNUSUAL_DEV( 0x12d1, 0x142A, 0x0000, 0x0000, | ||
2137 | + "HUAWEI MOBILE", | ||
2138 | + "Mass Storage", | ||
2139 | + USB_SC_DEVICE, USB_PR_DEVICE, usb_stor_huawei_e220_init, | ||
2140 | + 0), | ||
2141 | +UNUSUAL_DEV( 0x12d1, 0x142B, 0x0000, 0x0000, | ||
2142 | + "HUAWEI MOBILE", | ||
2143 | + "Mass Storage", | ||
2144 | + USB_SC_DEVICE, USB_PR_DEVICE, usb_stor_huawei_e220_init, | ||
2145 | + 0), | ||
2146 | +UNUSUAL_DEV( 0x12d1, 0x142C, 0x0000, 0x0000, | ||
2147 | + "HUAWEI MOBILE", | ||
2148 | + "Mass Storage", | ||
2149 | + USB_SC_DEVICE, USB_PR_DEVICE, usb_stor_huawei_e220_init, | ||
2150 | + 0), | ||
2151 | +UNUSUAL_DEV( 0x12d1, 0x142D, 0x0000, 0x0000, | ||
2152 | + "HUAWEI MOBILE", | ||
2153 | + "Mass Storage", | ||
2154 | + USB_SC_DEVICE, USB_PR_DEVICE, usb_stor_huawei_e220_init, | ||
2155 | + 0), | ||
2156 | +UNUSUAL_DEV( 0x12d1, 0x142E, 0x0000, 0x0000, | ||
2157 | + "HUAWEI MOBILE", | ||
2158 | + "Mass Storage", | ||
2159 | + USB_SC_DEVICE, USB_PR_DEVICE, usb_stor_huawei_e220_init, | ||
2160 | + 0), | ||
2161 | +UNUSUAL_DEV( 0x12d1, 0x142F, 0x0000, 0x0000, | ||
2162 | + "HUAWEI MOBILE", | ||
2163 | + "Mass Storage", | ||
2164 | + USB_SC_DEVICE, USB_PR_DEVICE, usb_stor_huawei_e220_init, | ||
2165 | + 0), | ||
2166 | +UNUSUAL_DEV( 0x12d1, 0x1430, 0x0000, 0x0000, | ||
2167 | + "HUAWEI MOBILE", | ||
2168 | + "Mass Storage", | ||
2169 | + USB_SC_DEVICE, USB_PR_DEVICE, usb_stor_huawei_e220_init, | ||
2170 | + 0), | ||
2171 | +UNUSUAL_DEV( 0x12d1, 0x1431, 0x0000, 0x0000, | ||
2172 | + "HUAWEI MOBILE", | ||
2173 | + "Mass Storage", | ||
2174 | + USB_SC_DEVICE, USB_PR_DEVICE, usb_stor_huawei_e220_init, | ||
2175 | + 0), | ||
2176 | +UNUSUAL_DEV( 0x12d1, 0x1432, 0x0000, 0x0000, | ||
2177 | + "HUAWEI MOBILE", | ||
2178 | + "Mass Storage", | ||
2179 | + USB_SC_DEVICE, USB_PR_DEVICE, usb_stor_huawei_e220_init, | ||
2180 | + 0), | ||
2181 | +UNUSUAL_DEV( 0x12d1, 0x1433, 0x0000, 0x0000, | ||
2182 | + "HUAWEI MOBILE", | ||
2183 | + "Mass Storage", | ||
2184 | + USB_SC_DEVICE, USB_PR_DEVICE, usb_stor_huawei_e220_init, | ||
2185 | + 0), | ||
2186 | +UNUSUAL_DEV( 0x12d1, 0x1434, 0x0000, 0x0000, | ||
2187 | + "HUAWEI MOBILE", | ||
2188 | + "Mass Storage", | ||
2189 | + USB_SC_DEVICE, USB_PR_DEVICE, usb_stor_huawei_e220_init, | ||
2190 | + 0), | ||
2191 | +UNUSUAL_DEV( 0x12d1, 0x1435, 0x0000, 0x0000, | ||
2192 | + "HUAWEI MOBILE", | ||
2193 | + "Mass Storage", | ||
2194 | + USB_SC_DEVICE, USB_PR_DEVICE, usb_stor_huawei_e220_init, | ||
2195 | + 0), | ||
2196 | +UNUSUAL_DEV( 0x12d1, 0x1436, 0x0000, 0x0000, | ||
2197 | + "HUAWEI MOBILE", | ||
2198 | + "Mass Storage", | ||
2199 | + USB_SC_DEVICE, USB_PR_DEVICE, usb_stor_huawei_e220_init, | ||
2200 | + 0), | ||
2201 | +UNUSUAL_DEV( 0x12d1, 0x1437, 0x0000, 0x0000, | ||
2202 | + "HUAWEI MOBILE", | ||
2203 | + "Mass Storage", | ||
2204 | + USB_SC_DEVICE, USB_PR_DEVICE, usb_stor_huawei_e220_init, | ||
2205 | + 0), | ||
2206 | +UNUSUAL_DEV( 0x12d1, 0x1438, 0x0000, 0x0000, | ||
2207 | + "HUAWEI MOBILE", | ||
2208 | + "Mass Storage", | ||
2209 | + USB_SC_DEVICE, USB_PR_DEVICE, usb_stor_huawei_e220_init, | ||
2210 | + 0), | ||
2211 | +UNUSUAL_DEV( 0x12d1, 0x1439, 0x0000, 0x0000, | ||
2212 | + "HUAWEI MOBILE", | ||
2213 | + "Mass Storage", | ||
2214 | + USB_SC_DEVICE, USB_PR_DEVICE, usb_stor_huawei_e220_init, | ||
2215 | + 0), | ||
2216 | +UNUSUAL_DEV( 0x12d1, 0x143A, 0x0000, 0x0000, | ||
2217 | + "HUAWEI MOBILE", | ||
2218 | + "Mass Storage", | ||
2219 | + USB_SC_DEVICE, USB_PR_DEVICE, usb_stor_huawei_e220_init, | ||
2220 | + 0), | ||
2221 | +UNUSUAL_DEV( 0x12d1, 0x143B, 0x0000, 0x0000, | ||
2222 | + "HUAWEI MOBILE", | ||
2223 | + "Mass Storage", | ||
2224 | + USB_SC_DEVICE, USB_PR_DEVICE, usb_stor_huawei_e220_init, | ||
2225 | + 0), | ||
2226 | +UNUSUAL_DEV( 0x12d1, 0x143C, 0x0000, 0x0000, | ||
2227 | + "HUAWEI MOBILE", | ||
2228 | + "Mass Storage", | ||
2229 | + USB_SC_DEVICE, USB_PR_DEVICE, usb_stor_huawei_e220_init, | ||
2230 | + 0), | ||
2231 | +UNUSUAL_DEV( 0x12d1, 0x143D, 0x0000, 0x0000, | ||
2232 | + "HUAWEI MOBILE", | ||
2233 | + "Mass Storage", | ||
2234 | + USB_SC_DEVICE, USB_PR_DEVICE, usb_stor_huawei_e220_init, | ||
2235 | + 0), | ||
2236 | +UNUSUAL_DEV( 0x12d1, 0x143E, 0x0000, 0x0000, | ||
2237 | + "HUAWEI MOBILE", | ||
2238 | + "Mass Storage", | ||
2239 | + USB_SC_DEVICE, USB_PR_DEVICE, usb_stor_huawei_e220_init, | ||
2240 | + 0), | ||
2241 | +UNUSUAL_DEV( 0x12d1, 0x143F, 0x0000, 0x0000, | ||
2242 | + "HUAWEI MOBILE", | ||
2243 | + "Mass Storage", | ||
2244 | + USB_SC_DEVICE, USB_PR_DEVICE, usb_stor_huawei_e220_init, | ||
2245 | 0), | ||
2246 | |||
2247 | /* Reported by Vilius Bilinkevicius <vilisas AT xxx DOT lt) */ | ||
2248 | diff --git a/drivers/video/atmel_lcdfb.c b/drivers/video/atmel_lcdfb.c | ||
2249 | index 12cf5f3..025428e 100644 | ||
2250 | --- a/drivers/video/atmel_lcdfb.c | ||
2251 | +++ b/drivers/video/atmel_lcdfb.c | ||
2252 | @@ -422,17 +422,22 @@ static int atmel_lcdfb_check_var(struct fb_var_screeninfo *var, | ||
2253 | = var->bits_per_pixel; | ||
2254 | break; | ||
2255 | case 16: | ||
2256 | + /* Older SOCs use IBGR:555 rather than BGR:565. */ | ||
2257 | + if (sinfo->have_intensity_bit) | ||
2258 | + var->green.length = 5; | ||
2259 | + else | ||
2260 | + var->green.length = 6; | ||
2261 | + | ||
2262 | if (sinfo->lcd_wiring_mode == ATMEL_LCDC_WIRING_RGB) { | ||
2263 | - /* RGB:565 mode */ | ||
2264 | - var->red.offset = 11; | ||
2265 | + /* RGB:5X5 mode */ | ||
2266 | + var->red.offset = var->green.length + 5; | ||
2267 | var->blue.offset = 0; | ||
2268 | } else { | ||
2269 | - /* BGR:565 mode */ | ||
2270 | + /* BGR:5X5 mode */ | ||
2271 | var->red.offset = 0; | ||
2272 | - var->blue.offset = 11; | ||
2273 | + var->blue.offset = var->green.length + 5; | ||
2274 | } | ||
2275 | var->green.offset = 5; | ||
2276 | - var->green.length = 6; | ||
2277 | var->red.length = var->blue.length = 5; | ||
2278 | break; | ||
2279 | case 32: | ||
2280 | @@ -679,8 +684,7 @@ static int atmel_lcdfb_setcolreg(unsigned int regno, unsigned int red, | ||
2281 | |||
2282 | case FB_VISUAL_PSEUDOCOLOR: | ||
2283 | if (regno < 256) { | ||
2284 | - if (cpu_is_at91sam9261() || cpu_is_at91sam9263() | ||
2285 | - || cpu_is_at91sam9rl()) { | ||
2286 | + if (sinfo->have_intensity_bit) { | ||
2287 | /* old style I+BGR:555 */ | ||
2288 | val = ((red >> 11) & 0x001f); | ||
2289 | val |= ((green >> 6) & 0x03e0); | ||
2290 | @@ -870,6 +874,10 @@ static int __init atmel_lcdfb_probe(struct platform_device *pdev) | ||
2291 | } | ||
2292 | sinfo->info = info; | ||
2293 | sinfo->pdev = pdev; | ||
2294 | + if (cpu_is_at91sam9261() || cpu_is_at91sam9263() || | ||
2295 | + cpu_is_at91sam9rl()) { | ||
2296 | + sinfo->have_intensity_bit = true; | ||
2297 | + } | ||
2298 | |||
2299 | strcpy(info->fix.id, sinfo->pdev->name); | ||
2300 | info->flags = ATMEL_LCDFB_FBINFO_DEFAULT; | ||
2301 | diff --git a/drivers/w1/masters/w1-gpio.c b/drivers/w1/masters/w1-gpio.c | ||
2302 | index d39dfa4..012817a 100644 | ||
2303 | --- a/drivers/w1/masters/w1-gpio.c | ||
2304 | +++ b/drivers/w1/masters/w1-gpio.c | ||
2305 | @@ -158,7 +158,7 @@ static int w1_gpio_probe(struct platform_device *pdev) | ||
2306 | return err; | ||
2307 | } | ||
2308 | |||
2309 | -static int __exit w1_gpio_remove(struct platform_device *pdev) | ||
2310 | +static int w1_gpio_remove(struct platform_device *pdev) | ||
2311 | { | ||
2312 | struct w1_bus_master *master = platform_get_drvdata(pdev); | ||
2313 | struct w1_gpio_platform_data *pdata = pdev->dev.platform_data; | ||
2314 | @@ -210,7 +210,7 @@ static struct platform_driver w1_gpio_driver = { | ||
2315 | .of_match_table = of_match_ptr(w1_gpio_dt_ids), | ||
2316 | }, | ||
2317 | .probe = w1_gpio_probe, | ||
2318 | - .remove = __exit_p(w1_gpio_remove), | ||
2319 | + .remove = w1_gpio_remove, | ||
2320 | .suspend = w1_gpio_suspend, | ||
2321 | .resume = w1_gpio_resume, | ||
2322 | }; | ||
2323 | diff --git a/drivers/w1/w1.c b/drivers/w1/w1.c | ||
2324 | index 7994d933..7ce277d 100644 | ||
2325 | --- a/drivers/w1/w1.c | ||
2326 | +++ b/drivers/w1/w1.c | ||
2327 | @@ -924,7 +924,8 @@ void w1_search(struct w1_master *dev, u8 search_type, w1_slave_found_callback cb | ||
2328 | tmp64 = (triplet_ret >> 2); | ||
2329 | rn |= (tmp64 << i); | ||
2330 | |||
2331 | - if (kthread_should_stop()) { | ||
2332 | + /* ensure we're called from kthread and not by netlink callback */ | ||
2333 | + if (!dev->priv && kthread_should_stop()) { | ||
2334 | mutex_unlock(&dev->bus_mutex); | ||
2335 | dev_dbg(&dev->dev, "Abort w1_search\n"); | ||
2336 | return; | ||
2337 | diff --git a/drivers/xen/xen-pciback/pciback_ops.c b/drivers/xen/xen-pciback/pciback_ops.c | ||
2338 | index 37c1f82..b98cf0c 100644 | ||
2339 | --- a/drivers/xen/xen-pciback/pciback_ops.c | ||
2340 | +++ b/drivers/xen/xen-pciback/pciback_ops.c | ||
2341 | @@ -113,7 +113,8 @@ void xen_pcibk_reset_device(struct pci_dev *dev) | ||
2342 | if (dev->msi_enabled) | ||
2343 | pci_disable_msi(dev); | ||
2344 | #endif | ||
2345 | - pci_disable_device(dev); | ||
2346 | + if (pci_is_enabled(dev)) | ||
2347 | + pci_disable_device(dev); | ||
2348 | |||
2349 | pci_write_config_word(dev, PCI_COMMAND, 0); | ||
2350 | |||
2351 | diff --git a/fs/block_dev.c b/fs/block_dev.c | ||
2352 | index 78333a3..78edf76 100644 | ||
2353 | --- a/fs/block_dev.c | ||
2354 | +++ b/fs/block_dev.c | ||
2355 | @@ -1033,7 +1033,9 @@ void bd_set_size(struct block_device *bdev, loff_t size) | ||
2356 | { | ||
2357 | unsigned bsize = bdev_logical_block_size(bdev); | ||
2358 | |||
2359 | - bdev->bd_inode->i_size = size; | ||
2360 | + mutex_lock(&bdev->bd_inode->i_mutex); | ||
2361 | + i_size_write(bdev->bd_inode, size); | ||
2362 | + mutex_unlock(&bdev->bd_inode->i_mutex); | ||
2363 | while (bsize < PAGE_CACHE_SIZE) { | ||
2364 | if (size & bsize) | ||
2365 | break; | ||
2366 | diff --git a/fs/btrfs/volumes.c b/fs/btrfs/volumes.c | ||
2367 | index ac8ff8d..1fd234a 100644 | ||
2368 | --- a/fs/btrfs/volumes.c | ||
2369 | +++ b/fs/btrfs/volumes.c | ||
2370 | @@ -681,6 +681,12 @@ int btrfs_close_devices(struct btrfs_fs_devices *fs_devices) | ||
2371 | __btrfs_close_devices(fs_devices); | ||
2372 | free_fs_devices(fs_devices); | ||
2373 | } | ||
2374 | + /* | ||
2375 | + * Wait for rcu kworkers under __btrfs_close_devices | ||
2376 | + * to finish all blkdev_puts so device is really | ||
2377 | + * free when umount is done. | ||
2378 | + */ | ||
2379 | + rcu_barrier(); | ||
2380 | return ret; | ||
2381 | } | ||
2382 | |||
2383 | diff --git a/fs/ext3/super.c b/fs/ext3/super.c | ||
2384 | index 6e50223..0a7f2d0b 100644 | ||
2385 | --- a/fs/ext3/super.c | ||
2386 | +++ b/fs/ext3/super.c | ||
2387 | @@ -353,7 +353,7 @@ static struct block_device *ext3_blkdev_get(dev_t dev, struct super_block *sb) | ||
2388 | return bdev; | ||
2389 | |||
2390 | fail: | ||
2391 | - ext3_msg(sb, "error: failed to open journal device %s: %ld", | ||
2392 | + ext3_msg(sb, KERN_ERR, "error: failed to open journal device %s: %ld", | ||
2393 | __bdevname(dev, b), PTR_ERR(bdev)); | ||
2394 | |||
2395 | return NULL; | ||
2396 | @@ -887,7 +887,7 @@ static ext3_fsblk_t get_sb_block(void **data, struct super_block *sb) | ||
2397 | /*todo: use simple_strtoll with >32bit ext3 */ | ||
2398 | sb_block = simple_strtoul(options, &options, 0); | ||
2399 | if (*options && *options != ',') { | ||
2400 | - ext3_msg(sb, "error: invalid sb specification: %s", | ||
2401 | + ext3_msg(sb, KERN_ERR, "error: invalid sb specification: %s", | ||
2402 | (char *) *data); | ||
2403 | return 1; | ||
2404 | } | ||
2405 | diff --git a/include/linux/mtd/nand.h b/include/linux/mtd/nand.h | ||
2406 | index 7ccb3c5..ef52d9c 100644 | ||
2407 | --- a/include/linux/mtd/nand.h | ||
2408 | +++ b/include/linux/mtd/nand.h | ||
2409 | @@ -187,6 +187,13 @@ typedef enum { | ||
2410 | * This happens with the Renesas AG-AND chips, possibly others. | ||
2411 | */ | ||
2412 | #define BBT_AUTO_REFRESH 0x00000080 | ||
2413 | +/* | ||
2414 | + * Chip requires ready check on read (for auto-incremented sequential read). | ||
2415 | + * True only for small page devices; large page devices do not support | ||
2416 | + * autoincrement. | ||
2417 | + */ | ||
2418 | +#define NAND_NEED_READRDY 0x00000100 | ||
2419 | + | ||
2420 | /* Chip does not allow subpage writes */ | ||
2421 | #define NAND_NO_SUBPAGE_WRITE 0x00000200 | ||
2422 | |||
2423 | diff --git a/include/linux/perf_event.h b/include/linux/perf_event.h | ||
2424 | index 6bfb2faa..a280650 100644 | ||
2425 | --- a/include/linux/perf_event.h | ||
2426 | +++ b/include/linux/perf_event.h | ||
2427 | @@ -794,6 +794,12 @@ static inline int __perf_event_disable(void *info) { return -1; } | ||
2428 | static inline void perf_event_task_tick(void) { } | ||
2429 | #endif | ||
2430 | |||
2431 | +#if defined(CONFIG_PERF_EVENTS) && defined(CONFIG_CPU_SUP_INTEL) | ||
2432 | +extern void perf_restore_debug_store(void); | ||
2433 | +#else | ||
2434 | +static inline void perf_restore_debug_store(void) { } | ||
2435 | +#endif | ||
2436 | + | ||
2437 | #define perf_output_put(handle, x) perf_output_copy((handle), &(x), sizeof(x)) | ||
2438 | |||
2439 | /* | ||
2440 | diff --git a/include/uapi/linux/serial_core.h b/include/uapi/linux/serial_core.h | ||
2441 | index 8f6e50a..c019b24 100644 | ||
2442 | --- a/include/uapi/linux/serial_core.h | ||
2443 | +++ b/include/uapi/linux/serial_core.h | ||
2444 | @@ -51,7 +51,10 @@ | ||
2445 | #define PORT_8250_CIR 23 /* CIR infrared port, has its own driver */ | ||
2446 | #define PORT_XR17V35X 24 /* Exar XR17V35x UARTs */ | ||
2447 | #define PORT_BRCM_TRUMANAGE 25 | ||
2448 | -#define PORT_MAX_8250 25 /* max port ID */ | ||
2449 | +#define PORT_ALTR_16550_F32 26 /* Altera 16550 UART with 32 FIFOs */ | ||
2450 | +#define PORT_ALTR_16550_F64 27 /* Altera 16550 UART with 64 FIFOs */ | ||
2451 | +#define PORT_ALTR_16550_F128 28 /* Altera 16550 UART with 128 FIFOs */ | ||
2452 | +#define PORT_MAX_8250 28 /* max port ID */ | ||
2453 | |||
2454 | /* | ||
2455 | * ARM specific type numbers. These are not currently guaranteed | ||
2456 | diff --git a/include/video/atmel_lcdc.h b/include/video/atmel_lcdc.h | ||
2457 | index 28447f1..5f0e234 100644 | ||
2458 | --- a/include/video/atmel_lcdc.h | ||
2459 | +++ b/include/video/atmel_lcdc.h | ||
2460 | @@ -62,6 +62,7 @@ struct atmel_lcdfb_info { | ||
2461 | void (*atmel_lcdfb_power_control)(int on); | ||
2462 | struct fb_monspecs *default_monspecs; | ||
2463 | u32 pseudo_palette[16]; | ||
2464 | + bool have_intensity_bit; | ||
2465 | }; | ||
2466 | |||
2467 | #define ATMEL_LCDC_DMABADDR1 0x00 | ||
2468 | diff --git a/kernel/signal.c b/kernel/signal.c | ||
2469 | index 3d09cf6..7591ccc 100644 | ||
2470 | --- a/kernel/signal.c | ||
2471 | +++ b/kernel/signal.c | ||
2472 | @@ -485,6 +485,9 @@ flush_signal_handlers(struct task_struct *t, int force_default) | ||
2473 | if (force_default || ka->sa.sa_handler != SIG_IGN) | ||
2474 | ka->sa.sa_handler = SIG_DFL; | ||
2475 | ka->sa.sa_flags = 0; | ||
2476 | +#ifdef SA_RESTORER | ||
2477 | + ka->sa.sa_restorer = NULL; | ||
2478 | +#endif | ||
2479 | sigemptyset(&ka->sa.sa_mask); | ||
2480 | ka++; | ||
2481 | } | ||
2482 | diff --git a/net/bridge/br_mdb.c b/net/bridge/br_mdb.c | ||
2483 | index acc9f4c..2897e40 100644 | ||
2484 | --- a/net/bridge/br_mdb.c | ||
2485 | +++ b/net/bridge/br_mdb.c | ||
2486 | @@ -82,6 +82,7 @@ static int br_mdb_fill_info(struct sk_buff *skb, struct netlink_callback *cb, | ||
2487 | port = p->port; | ||
2488 | if (port) { | ||
2489 | struct br_mdb_entry e; | ||
2490 | + memset(&e, 0, sizeof(e)); | ||
2491 | e.ifindex = port->dev->ifindex; | ||
2492 | e.state = p->state; | ||
2493 | if (p->addr.proto == htons(ETH_P_IP)) | ||
2494 | @@ -138,6 +139,7 @@ static int br_mdb_dump(struct sk_buff *skb, struct netlink_callback *cb) | ||
2495 | break; | ||
2496 | |||
2497 | bpm = nlmsg_data(nlh); | ||
2498 | + memset(bpm, 0, sizeof(*bpm)); | ||
2499 | bpm->ifindex = dev->ifindex; | ||
2500 | if (br_mdb_fill_info(skb, cb, dev) < 0) | ||
2501 | goto out; | ||
2502 | @@ -173,6 +175,7 @@ static int nlmsg_populate_mdb_fill(struct sk_buff *skb, | ||
2503 | return -EMSGSIZE; | ||
2504 | |||
2505 | bpm = nlmsg_data(nlh); | ||
2506 | + memset(bpm, 0, sizeof(*bpm)); | ||
2507 | bpm->family = AF_BRIDGE; | ||
2508 | bpm->ifindex = dev->ifindex; | ||
2509 | nest = nla_nest_start(skb, MDBA_MDB); | ||
2510 | @@ -230,6 +233,7 @@ void br_mdb_notify(struct net_device *dev, struct net_bridge_port *port, | ||
2511 | { | ||
2512 | struct br_mdb_entry entry; | ||
2513 | |||
2514 | + memset(&entry, 0, sizeof(entry)); | ||
2515 | entry.ifindex = port->dev->ifindex; | ||
2516 | entry.addr.proto = group->proto; | ||
2517 | entry.addr.u.ip4 = group->u.ip4; | ||
2518 | diff --git a/net/core/dev.c b/net/core/dev.c | ||
2519 | index f64e439..1339f77 100644 | ||
2520 | --- a/net/core/dev.c | ||
2521 | +++ b/net/core/dev.c | ||
2522 | @@ -3419,6 +3419,7 @@ ncls: | ||
2523 | } | ||
2524 | switch (rx_handler(&skb)) { | ||
2525 | case RX_HANDLER_CONSUMED: | ||
2526 | + ret = NET_RX_SUCCESS; | ||
2527 | goto unlock; | ||
2528 | case RX_HANDLER_ANOTHER: | ||
2529 | goto another_round; | ||
2530 | diff --git a/net/core/rtnetlink.c b/net/core/rtnetlink.c | ||
2531 | index 1868625..798f920 100644 | ||
2532 | --- a/net/core/rtnetlink.c | ||
2533 | +++ b/net/core/rtnetlink.c | ||
2534 | @@ -976,6 +976,7 @@ static int rtnl_fill_ifinfo(struct sk_buff *skb, struct net_device *dev, | ||
2535 | * report anything. | ||
2536 | */ | ||
2537 | ivi.spoofchk = -1; | ||
2538 | + memset(ivi.mac, 0, sizeof(ivi.mac)); | ||
2539 | if (dev->netdev_ops->ndo_get_vf_config(dev, i, &ivi)) | ||
2540 | break; | ||
2541 | vf_mac.vf = | ||
2542 | diff --git a/net/dcb/dcbnl.c b/net/dcb/dcbnl.c | ||
2543 | index 1b588e2..21291f1 100644 | ||
2544 | --- a/net/dcb/dcbnl.c | ||
2545 | +++ b/net/dcb/dcbnl.c | ||
2546 | @@ -284,6 +284,7 @@ static int dcbnl_getperm_hwaddr(struct net_device *netdev, struct nlmsghdr *nlh, | ||
2547 | if (!netdev->dcbnl_ops->getpermhwaddr) | ||
2548 | return -EOPNOTSUPP; | ||
2549 | |||
2550 | + memset(perm_addr, 0, sizeof(perm_addr)); | ||
2551 | netdev->dcbnl_ops->getpermhwaddr(netdev, perm_addr); | ||
2552 | |||
2553 | return nla_put(skb, DCB_ATTR_PERM_HWADDR, sizeof(perm_addr), perm_addr); | ||
2554 | @@ -1042,6 +1043,7 @@ static int dcbnl_ieee_fill(struct sk_buff *skb, struct net_device *netdev) | ||
2555 | |||
2556 | if (ops->ieee_getets) { | ||
2557 | struct ieee_ets ets; | ||
2558 | + memset(&ets, 0, sizeof(ets)); | ||
2559 | err = ops->ieee_getets(netdev, &ets); | ||
2560 | if (!err && | ||
2561 | nla_put(skb, DCB_ATTR_IEEE_ETS, sizeof(ets), &ets)) | ||
2562 | @@ -1050,6 +1052,7 @@ static int dcbnl_ieee_fill(struct sk_buff *skb, struct net_device *netdev) | ||
2563 | |||
2564 | if (ops->ieee_getmaxrate) { | ||
2565 | struct ieee_maxrate maxrate; | ||
2566 | + memset(&maxrate, 0, sizeof(maxrate)); | ||
2567 | err = ops->ieee_getmaxrate(netdev, &maxrate); | ||
2568 | if (!err) { | ||
2569 | err = nla_put(skb, DCB_ATTR_IEEE_MAXRATE, | ||
2570 | @@ -1061,6 +1064,7 @@ static int dcbnl_ieee_fill(struct sk_buff *skb, struct net_device *netdev) | ||
2571 | |||
2572 | if (ops->ieee_getpfc) { | ||
2573 | struct ieee_pfc pfc; | ||
2574 | + memset(&pfc, 0, sizeof(pfc)); | ||
2575 | err = ops->ieee_getpfc(netdev, &pfc); | ||
2576 | if (!err && | ||
2577 | nla_put(skb, DCB_ATTR_IEEE_PFC, sizeof(pfc), &pfc)) | ||
2578 | @@ -1094,6 +1098,7 @@ static int dcbnl_ieee_fill(struct sk_buff *skb, struct net_device *netdev) | ||
2579 | /* get peer info if available */ | ||
2580 | if (ops->ieee_peer_getets) { | ||
2581 | struct ieee_ets ets; | ||
2582 | + memset(&ets, 0, sizeof(ets)); | ||
2583 | err = ops->ieee_peer_getets(netdev, &ets); | ||
2584 | if (!err && | ||
2585 | nla_put(skb, DCB_ATTR_IEEE_PEER_ETS, sizeof(ets), &ets)) | ||
2586 | @@ -1102,6 +1107,7 @@ static int dcbnl_ieee_fill(struct sk_buff *skb, struct net_device *netdev) | ||
2587 | |||
2588 | if (ops->ieee_peer_getpfc) { | ||
2589 | struct ieee_pfc pfc; | ||
2590 | + memset(&pfc, 0, sizeof(pfc)); | ||
2591 | err = ops->ieee_peer_getpfc(netdev, &pfc); | ||
2592 | if (!err && | ||
2593 | nla_put(skb, DCB_ATTR_IEEE_PEER_PFC, sizeof(pfc), &pfc)) | ||
2594 | @@ -1280,6 +1286,7 @@ static int dcbnl_cee_fill(struct sk_buff *skb, struct net_device *netdev) | ||
2595 | /* peer info if available */ | ||
2596 | if (ops->cee_peer_getpg) { | ||
2597 | struct cee_pg pg; | ||
2598 | + memset(&pg, 0, sizeof(pg)); | ||
2599 | err = ops->cee_peer_getpg(netdev, &pg); | ||
2600 | if (!err && | ||
2601 | nla_put(skb, DCB_ATTR_CEE_PEER_PG, sizeof(pg), &pg)) | ||
2602 | @@ -1288,6 +1295,7 @@ static int dcbnl_cee_fill(struct sk_buff *skb, struct net_device *netdev) | ||
2603 | |||
2604 | if (ops->cee_peer_getpfc) { | ||
2605 | struct cee_pfc pfc; | ||
2606 | + memset(&pfc, 0, sizeof(pfc)); | ||
2607 | err = ops->cee_peer_getpfc(netdev, &pfc); | ||
2608 | if (!err && | ||
2609 | nla_put(skb, DCB_ATTR_CEE_PEER_PFC, sizeof(pfc), &pfc)) | ||
2610 | diff --git a/net/ieee802154/6lowpan.h b/net/ieee802154/6lowpan.h | ||
2611 | index 8c2251f..bba5f83 100644 | ||
2612 | --- a/net/ieee802154/6lowpan.h | ||
2613 | +++ b/net/ieee802154/6lowpan.h | ||
2614 | @@ -84,7 +84,7 @@ | ||
2615 | (memcmp(addr1, addr2, length >> 3) == 0) | ||
2616 | |||
2617 | /* local link, i.e. FE80::/10 */ | ||
2618 | -#define is_addr_link_local(a) (((a)->s6_addr16[0]) == 0x80FE) | ||
2619 | +#define is_addr_link_local(a) (((a)->s6_addr16[0]) == htons(0xFE80)) | ||
2620 | |||
2621 | /* | ||
2622 | * check whether we can compress the IID to 16 bits, | ||
2623 | diff --git a/net/ipv4/tcp_input.c b/net/ipv4/tcp_input.c | ||
2624 | index ad70a96..66702d3 100644 | ||
2625 | --- a/net/ipv4/tcp_input.c | ||
2626 | +++ b/net/ipv4/tcp_input.c | ||
2627 | @@ -5498,6 +5498,9 @@ int tcp_rcv_established(struct sock *sk, struct sk_buff *skb, | ||
2628 | if (tcp_checksum_complete_user(sk, skb)) | ||
2629 | goto csum_error; | ||
2630 | |||
2631 | + if ((int)skb->truesize > sk->sk_forward_alloc) | ||
2632 | + goto step5; | ||
2633 | + | ||
2634 | /* Predicted packet is in window by definition. | ||
2635 | * seq == rcv_nxt and rcv_wup <= rcv_nxt. | ||
2636 | * Hence, check seq<=rcv_wup reduces to: | ||
2637 | @@ -5509,9 +5512,6 @@ int tcp_rcv_established(struct sock *sk, struct sk_buff *skb, | ||
2638 | |||
2639 | tcp_rcv_rtt_measure_ts(sk, skb); | ||
2640 | |||
2641 | - if ((int)skb->truesize > sk->sk_forward_alloc) | ||
2642 | - goto step5; | ||
2643 | - | ||
2644 | NET_INC_STATS_BH(sock_net(sk), LINUX_MIB_TCPHPHITS); | ||
2645 | |||
2646 | /* Bulk data transfer: receiver */ | ||
2647 | diff --git a/net/ipv6/ip6_input.c b/net/ipv6/ip6_input.c | ||
2648 | index a52d864..b196852 100644 | ||
2649 | --- a/net/ipv6/ip6_input.c | ||
2650 | +++ b/net/ipv6/ip6_input.c | ||
2651 | @@ -270,7 +270,8 @@ int ip6_mc_input(struct sk_buff *skb) | ||
2652 | * IPv6 multicast router mode is now supported ;) | ||
2653 | */ | ||
2654 | if (dev_net(skb->dev)->ipv6.devconf_all->mc_forwarding && | ||
2655 | - !(ipv6_addr_type(&hdr->daddr) & IPV6_ADDR_LINKLOCAL) && | ||
2656 | + !(ipv6_addr_type(&hdr->daddr) & | ||
2657 | + (IPV6_ADDR_LOOPBACK|IPV6_ADDR_LINKLOCAL)) && | ||
2658 | likely(!(IP6CB(skb)->flags & IP6SKB_FORWARDED))) { | ||
2659 | /* | ||
2660 | * Okay, we try to forward - split and duplicate | ||
2661 | diff --git a/net/ipv6/route.c b/net/ipv6/route.c | ||
2662 | index 6f9f7b6..5845613 100644 | ||
2663 | --- a/net/ipv6/route.c | ||
2664 | +++ b/net/ipv6/route.c | ||
2665 | @@ -1990,7 +1990,8 @@ void rt6_purge_dflt_routers(struct net *net) | ||
2666 | restart: | ||
2667 | read_lock_bh(&table->tb6_lock); | ||
2668 | for (rt = table->tb6_root.leaf; rt; rt = rt->dst.rt6_next) { | ||
2669 | - if (rt->rt6i_flags & (RTF_DEFAULT | RTF_ADDRCONF)) { | ||
2670 | + if (rt->rt6i_flags & (RTF_DEFAULT | RTF_ADDRCONF) && | ||
2671 | + (!rt->rt6i_idev || rt->rt6i_idev->cnf.accept_ra != 2)) { | ||
2672 | dst_hold(&rt->dst); | ||
2673 | read_unlock_bh(&table->tb6_lock); | ||
2674 | ip6_del_rt(rt); | ||
2675 | diff --git a/net/l2tp/l2tp_ppp.c b/net/l2tp/l2tp_ppp.c | ||
2676 | index 716605c..044e9e1 100644 | ||
2677 | --- a/net/l2tp/l2tp_ppp.c | ||
2678 | +++ b/net/l2tp/l2tp_ppp.c | ||
2679 | @@ -355,6 +355,7 @@ static int pppol2tp_sendmsg(struct kiocb *iocb, struct socket *sock, struct msgh | ||
2680 | l2tp_xmit_skb(session, skb, session->hdr_len); | ||
2681 | |||
2682 | sock_put(ps->tunnel_sock); | ||
2683 | + sock_put(sk); | ||
2684 | |||
2685 | return error; | ||
2686 | |||
2687 | diff --git a/net/netlabel/netlabel_unlabeled.c b/net/netlabel/netlabel_unlabeled.c | ||
2688 | index 847d495..8a6c6ea 100644 | ||
2689 | --- a/net/netlabel/netlabel_unlabeled.c | ||
2690 | +++ b/net/netlabel/netlabel_unlabeled.c | ||
2691 | @@ -1189,8 +1189,6 @@ static int netlbl_unlabel_staticlist(struct sk_buff *skb, | ||
2692 | struct netlbl_unlhsh_walk_arg cb_arg; | ||
2693 | u32 skip_bkt = cb->args[0]; | ||
2694 | u32 skip_chain = cb->args[1]; | ||
2695 | - u32 skip_addr4 = cb->args[2]; | ||
2696 | - u32 skip_addr6 = cb->args[3]; | ||
2697 | u32 iter_bkt; | ||
2698 | u32 iter_chain = 0, iter_addr4 = 0, iter_addr6 = 0; | ||
2699 | struct netlbl_unlhsh_iface *iface; | ||
2700 | @@ -1215,7 +1213,7 @@ static int netlbl_unlabel_staticlist(struct sk_buff *skb, | ||
2701 | continue; | ||
2702 | netlbl_af4list_foreach_rcu(addr4, | ||
2703 | &iface->addr4_list) { | ||
2704 | - if (iter_addr4++ < skip_addr4) | ||
2705 | + if (iter_addr4++ < cb->args[2]) | ||
2706 | continue; | ||
2707 | if (netlbl_unlabel_staticlist_gen( | ||
2708 | NLBL_UNLABEL_C_STATICLIST, | ||
2709 | @@ -1231,7 +1229,7 @@ static int netlbl_unlabel_staticlist(struct sk_buff *skb, | ||
2710 | #if IS_ENABLED(CONFIG_IPV6) | ||
2711 | netlbl_af6list_foreach_rcu(addr6, | ||
2712 | &iface->addr6_list) { | ||
2713 | - if (iter_addr6++ < skip_addr6) | ||
2714 | + if (iter_addr6++ < cb->args[3]) | ||
2715 | continue; | ||
2716 | if (netlbl_unlabel_staticlist_gen( | ||
2717 | NLBL_UNLABEL_C_STATICLIST, | ||
2718 | @@ -1250,10 +1248,10 @@ static int netlbl_unlabel_staticlist(struct sk_buff *skb, | ||
2719 | |||
2720 | unlabel_staticlist_return: | ||
2721 | rcu_read_unlock(); | ||
2722 | - cb->args[0] = skip_bkt; | ||
2723 | - cb->args[1] = skip_chain; | ||
2724 | - cb->args[2] = skip_addr4; | ||
2725 | - cb->args[3] = skip_addr6; | ||
2726 | + cb->args[0] = iter_bkt; | ||
2727 | + cb->args[1] = iter_chain; | ||
2728 | + cb->args[2] = iter_addr4; | ||
2729 | + cb->args[3] = iter_addr6; | ||
2730 | return skb->len; | ||
2731 | } | ||
2732 | |||
2733 | @@ -1273,12 +1271,9 @@ static int netlbl_unlabel_staticlistdef(struct sk_buff *skb, | ||
2734 | { | ||
2735 | struct netlbl_unlhsh_walk_arg cb_arg; | ||
2736 | struct netlbl_unlhsh_iface *iface; | ||
2737 | - u32 skip_addr4 = cb->args[0]; | ||
2738 | - u32 skip_addr6 = cb->args[1]; | ||
2739 | - u32 iter_addr4 = 0; | ||
2740 | + u32 iter_addr4 = 0, iter_addr6 = 0; | ||
2741 | struct netlbl_af4list *addr4; | ||
2742 | #if IS_ENABLED(CONFIG_IPV6) | ||
2743 | - u32 iter_addr6 = 0; | ||
2744 | struct netlbl_af6list *addr6; | ||
2745 | #endif | ||
2746 | |||
2747 | @@ -1292,7 +1287,7 @@ static int netlbl_unlabel_staticlistdef(struct sk_buff *skb, | ||
2748 | goto unlabel_staticlistdef_return; | ||
2749 | |||
2750 | netlbl_af4list_foreach_rcu(addr4, &iface->addr4_list) { | ||
2751 | - if (iter_addr4++ < skip_addr4) | ||
2752 | + if (iter_addr4++ < cb->args[0]) | ||
2753 | continue; | ||
2754 | if (netlbl_unlabel_staticlist_gen(NLBL_UNLABEL_C_STATICLISTDEF, | ||
2755 | iface, | ||
2756 | @@ -1305,7 +1300,7 @@ static int netlbl_unlabel_staticlistdef(struct sk_buff *skb, | ||
2757 | } | ||
2758 | #if IS_ENABLED(CONFIG_IPV6) | ||
2759 | netlbl_af6list_foreach_rcu(addr6, &iface->addr6_list) { | ||
2760 | - if (iter_addr6++ < skip_addr6) | ||
2761 | + if (iter_addr6++ < cb->args[1]) | ||
2762 | continue; | ||
2763 | if (netlbl_unlabel_staticlist_gen(NLBL_UNLABEL_C_STATICLISTDEF, | ||
2764 | iface, | ||
2765 | @@ -1320,8 +1315,8 @@ static int netlbl_unlabel_staticlistdef(struct sk_buff *skb, | ||
2766 | |||
2767 | unlabel_staticlistdef_return: | ||
2768 | rcu_read_unlock(); | ||
2769 | - cb->args[0] = skip_addr4; | ||
2770 | - cb->args[1] = skip_addr6; | ||
2771 | + cb->args[0] = iter_addr4; | ||
2772 | + cb->args[1] = iter_addr6; | ||
2773 | return skb->len; | ||
2774 | } | ||
2775 | |||
2776 | diff --git a/net/rds/message.c b/net/rds/message.c | ||
2777 | index f0a4658..aff589c 100644 | ||
2778 | --- a/net/rds/message.c | ||
2779 | +++ b/net/rds/message.c | ||
2780 | @@ -197,6 +197,9 @@ struct rds_message *rds_message_alloc(unsigned int extra_len, gfp_t gfp) | ||
2781 | { | ||
2782 | struct rds_message *rm; | ||
2783 | |||
2784 | + if (extra_len > KMALLOC_MAX_SIZE - sizeof(struct rds_message)) | ||
2785 | + return NULL; | ||
2786 | + | ||
2787 | rm = kzalloc(sizeof(struct rds_message) + extra_len, gfp); | ||
2788 | if (!rm) | ||
2789 | goto out; | ||
2790 | diff --git a/net/sctp/socket.c b/net/sctp/socket.c | ||
2791 | index cedd9bf..9ef5c73 100644 | ||
2792 | --- a/net/sctp/socket.c | ||
2793 | +++ b/net/sctp/socket.c | ||
2794 | @@ -5653,6 +5653,9 @@ static int sctp_getsockopt_assoc_stats(struct sock *sk, int len, | ||
2795 | if (len < sizeof(sctp_assoc_t)) | ||
2796 | return -EINVAL; | ||
2797 | |||
2798 | + /* Allow the struct to grow and fill in as much as possible */ | ||
2799 | + len = min_t(size_t, len, sizeof(sas)); | ||
2800 | + | ||
2801 | if (copy_from_user(&sas, optval, len)) | ||
2802 | return -EFAULT; | ||
2803 | |||
2804 | @@ -5686,9 +5689,6 @@ static int sctp_getsockopt_assoc_stats(struct sock *sk, int len, | ||
2805 | /* Mark beginning of a new observation period */ | ||
2806 | asoc->stats.max_obs_rto = asoc->rto_min; | ||
2807 | |||
2808 | - /* Allow the struct to grow and fill in as much as possible */ | ||
2809 | - len = min_t(size_t, len, sizeof(sas)); | ||
2810 | - | ||
2811 | if (put_user(len, optlen)) | ||
2812 | return -EFAULT; | ||
2813 | |||
2814 | diff --git a/scripts/Makefile.headersinst b/scripts/Makefile.headersinst | ||
2815 | index 06ba4a7..e253917 100644 | ||
2816 | --- a/scripts/Makefile.headersinst | ||
2817 | +++ b/scripts/Makefile.headersinst | ||
2818 | @@ -8,7 +8,7 @@ | ||
2819 | # ========================================================================== | ||
2820 | |||
2821 | # called may set destination dir (when installing to asm/) | ||
2822 | -_dst := $(or $(destination-y),$(dst),$(obj)) | ||
2823 | +_dst := $(if $(destination-y),$(destination-y),$(if $(dst),$(dst),$(obj))) | ||
2824 | |||
2825 | # generated header directory | ||
2826 | gen := $(if $(gen),$(gen),$(subst include/,include/generated/,$(obj))) | ||
2827 | @@ -48,13 +48,14 @@ all-files := $(header-y) $(genhdr-y) $(wrapper-files) | ||
2828 | output-files := $(addprefix $(installdir)/, $(all-files)) | ||
2829 | |||
2830 | input-files := $(foreach hdr, $(header-y), \ | ||
2831 | - $(or \ | ||
2832 | + $(if $(wildcard $(srcdir)/$(hdr)), \ | ||
2833 | $(wildcard $(srcdir)/$(hdr)), \ | ||
2834 | - $(wildcard $(oldsrcdir)/$(hdr)), \ | ||
2835 | - $(error Missing UAPI file $(srcdir)/$(hdr)) \ | ||
2836 | + $(if $(wildcard $(oldsrcdir)/$(hdr)), \ | ||
2837 | + $(wildcard $(oldsrcdir)/$(hdr)), \ | ||
2838 | + $(error Missing UAPI file $(srcdir)/$(hdr))) \ | ||
2839 | )) \ | ||
2840 | $(foreach hdr, $(genhdr-y), \ | ||
2841 | - $(or \ | ||
2842 | + $(if $(wildcard $(gendir)/$(hdr)), \ | ||
2843 | $(wildcard $(gendir)/$(hdr)), \ | ||
2844 | $(error Missing generated UAPI file $(gendir)/$(hdr)) \ | ||
2845 | )) | ||
2846 | diff --git a/security/selinux/xfrm.c b/security/selinux/xfrm.c | ||
2847 | index 48665ec..8ab2951 100644 | ||
2848 | --- a/security/selinux/xfrm.c | ||
2849 | +++ b/security/selinux/xfrm.c | ||
2850 | @@ -310,7 +310,7 @@ int selinux_xfrm_policy_clone(struct xfrm_sec_ctx *old_ctx, | ||
2851 | |||
2852 | if (old_ctx) { | ||
2853 | new_ctx = kmalloc(sizeof(*old_ctx) + old_ctx->ctx_len, | ||
2854 | - GFP_KERNEL); | ||
2855 | + GFP_ATOMIC); | ||
2856 | if (!new_ctx) | ||
2857 | return -ENOMEM; | ||
2858 | |||
2859 | diff --git a/sound/core/seq/seq_timer.c b/sound/core/seq/seq_timer.c | ||
2860 | index 160b1bd..24d44b2 100644 | ||
2861 | --- a/sound/core/seq/seq_timer.c | ||
2862 | +++ b/sound/core/seq/seq_timer.c | ||
2863 | @@ -290,10 +290,10 @@ int snd_seq_timer_open(struct snd_seq_queue *q) | ||
2864 | tid.device = SNDRV_TIMER_GLOBAL_SYSTEM; | ||
2865 | err = snd_timer_open(&t, str, &tid, q->queue); | ||
2866 | } | ||
2867 | - if (err < 0) { | ||
2868 | - snd_printk(KERN_ERR "seq fatal error: cannot create timer (%i)\n", err); | ||
2869 | - return err; | ||
2870 | - } | ||
2871 | + } | ||
2872 | + if (err < 0) { | ||
2873 | + snd_printk(KERN_ERR "seq fatal error: cannot create timer (%i)\n", err); | ||
2874 | + return err; | ||
2875 | } | ||
2876 | t->callback = snd_seq_timer_interrupt; | ||
2877 | t->callback_data = q; | ||
2878 | diff --git a/tools/usb/ffs-test.c b/tools/usb/ffs-test.c | ||
2879 | index 8674b9e..fe1e66b 100644 | ||
2880 | --- a/tools/usb/ffs-test.c | ||
2881 | +++ b/tools/usb/ffs-test.c | ||
2882 | @@ -38,7 +38,7 @@ | ||
2883 | #include <unistd.h> | ||
2884 | #include <tools/le_byteshift.h> | ||
2885 | |||
2886 | -#include "../../include/linux/usb/functionfs.h" | ||
2887 | +#include "../../include/uapi/linux/usb/functionfs.h" | ||
2888 | |||
2889 | |||
2890 | /******************** Little Endian Handling ********************************/ |