Magellan Linux

Annotation of /trunk/kernel-magellan/patches-3.8/0103-3.8.4-all-fixes.patch

Parent Directory Parent Directory | Revision Log Revision Log


Revision 2132 - (hide annotations) (download)
Thu Mar 21 09:09:19 2013 UTC (11 years, 2 months ago) by niro
File size: 100638 byte(s)
-linux-3.8.4
1 niro 2132 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, &param_ops_uint, &share_irqs, 0644);
1438     + module_param_cb(nr_uarts, &param_ops_uint, &nr_uarts, 0644);
1439     + module_param_cb(skip_txen_test, &param_ops_uint, &skip_txen_test, 0644);
1440     +#ifdef CONFIG_SERIAL_8250_RSA
1441     + __module_param_call(MODULE_PARAM_PREFIX, probe_rsa,
1442     + &param_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 ********************************/