Magellan Linux

Annotation of /trunk/kernel-lts/patches-3.4/0154-3.4.55-all-fixes.patch

Parent Directory Parent Directory | Revision Log Revision Log


Revision 2259 - (hide annotations) (download)
Mon Aug 19 09:25:31 2013 UTC (10 years, 9 months ago) by niro
File size: 58426 byte(s)
-linux-3.4.55
1 niro 2259 diff --git a/Makefile b/Makefile
2     index 6ca3657..c11116f 100644
3     --- a/Makefile
4     +++ b/Makefile
5     @@ -1,6 +1,6 @@
6     VERSION = 3
7     PATCHLEVEL = 4
8     -SUBLEVEL = 54
9     +SUBLEVEL = 55
10     EXTRAVERSION =
11     NAME = Saber-toothed Squirrel
12    
13     diff --git a/arch/sparc/kernel/asm-offsets.c b/arch/sparc/kernel/asm-offsets.c
14     index 68f7e11..ce48203 100644
15     --- a/arch/sparc/kernel/asm-offsets.c
16     +++ b/arch/sparc/kernel/asm-offsets.c
17     @@ -34,6 +34,8 @@ int foo(void)
18     DEFINE(AOFF_task_thread, offsetof(struct task_struct, thread));
19     BLANK();
20     DEFINE(AOFF_mm_context, offsetof(struct mm_struct, context));
21     + BLANK();
22     + DEFINE(VMA_VM_MM, offsetof(struct vm_area_struct, vm_mm));
23    
24     /* DEFINE(NUM_USER_SEGMENTS, TASK_SIZE>>28); */
25     return 0;
26     diff --git a/arch/sparc/mm/hypersparc.S b/arch/sparc/mm/hypersparc.S
27     index 44aad32..969f964 100644
28     --- a/arch/sparc/mm/hypersparc.S
29     +++ b/arch/sparc/mm/hypersparc.S
30     @@ -74,7 +74,7 @@ hypersparc_flush_cache_mm_out:
31    
32     /* The things we do for performance... */
33     hypersparc_flush_cache_range:
34     - ld [%o0 + 0x0], %o0 /* XXX vma->vm_mm, GROSS XXX */
35     + ld [%o0 + VMA_VM_MM], %o0
36     #ifndef CONFIG_SMP
37     ld [%o0 + AOFF_mm_context], %g1
38     cmp %g1, -1
39     @@ -163,7 +163,7 @@ hypersparc_flush_cache_range_out:
40     */
41     /* Verified, my ass... */
42     hypersparc_flush_cache_page:
43     - ld [%o0 + 0x0], %o0 /* XXX vma->vm_mm, GROSS XXX */
44     + ld [%o0 + VMA_VM_MM], %o0
45     ld [%o0 + AOFF_mm_context], %g2
46     #ifndef CONFIG_SMP
47     cmp %g2, -1
48     @@ -284,7 +284,7 @@ hypersparc_flush_tlb_mm_out:
49     sta %g5, [%g1] ASI_M_MMUREGS
50    
51     hypersparc_flush_tlb_range:
52     - ld [%o0 + 0x00], %o0 /* XXX vma->vm_mm GROSS XXX */
53     + ld [%o0 + VMA_VM_MM], %o0
54     mov SRMMU_CTX_REG, %g1
55     ld [%o0 + AOFF_mm_context], %o3
56     lda [%g1] ASI_M_MMUREGS, %g5
57     @@ -307,7 +307,7 @@ hypersparc_flush_tlb_range_out:
58     sta %g5, [%g1] ASI_M_MMUREGS
59    
60     hypersparc_flush_tlb_page:
61     - ld [%o0 + 0x00], %o0 /* XXX vma->vm_mm GROSS XXX */
62     + ld [%o0 + VMA_VM_MM], %o0
63     mov SRMMU_CTX_REG, %g1
64     ld [%o0 + AOFF_mm_context], %o3
65     andn %o1, (PAGE_SIZE - 1), %o1
66     diff --git a/arch/sparc/mm/init_64.c b/arch/sparc/mm/init_64.c
67     index 0791618..7f8238f 100644
68     --- a/arch/sparc/mm/init_64.c
69     +++ b/arch/sparc/mm/init_64.c
70     @@ -1067,7 +1067,14 @@ static int __init grab_mblocks(struct mdesc_handle *md)
71     m->size = *val;
72     val = mdesc_get_property(md, node,
73     "address-congruence-offset", NULL);
74     - m->offset = *val;
75     +
76     + /* The address-congruence-offset property is optional.
77     + * Explicity zero it be identifty this.
78     + */
79     + if (val)
80     + m->offset = *val;
81     + else
82     + m->offset = 0UL;
83    
84     numadbg("MBLOCK[%d]: base[%llx] size[%llx] offset[%llx]\n",
85     count - 1, m->base, m->size, m->offset);
86     diff --git a/arch/sparc/mm/swift.S b/arch/sparc/mm/swift.S
87     index c801c39..5d2b88d 100644
88     --- a/arch/sparc/mm/swift.S
89     +++ b/arch/sparc/mm/swift.S
90     @@ -105,7 +105,7 @@ swift_flush_cache_mm_out:
91    
92     .globl swift_flush_cache_range
93     swift_flush_cache_range:
94     - ld [%o0 + 0x0], %o0 /* XXX vma->vm_mm, GROSS XXX */
95     + ld [%o0 + VMA_VM_MM], %o0
96     sub %o2, %o1, %o2
97     sethi %hi(4096), %o3
98     cmp %o2, %o3
99     @@ -116,7 +116,7 @@ swift_flush_cache_range:
100    
101     .globl swift_flush_cache_page
102     swift_flush_cache_page:
103     - ld [%o0 + 0x0], %o0 /* XXX vma->vm_mm, GROSS XXX */
104     + ld [%o0 + VMA_VM_MM], %o0
105     70:
106     ld [%o0 + AOFF_mm_context], %g2
107     cmp %g2, -1
108     @@ -219,7 +219,7 @@ swift_flush_sig_insns:
109     .globl swift_flush_tlb_range
110     .globl swift_flush_tlb_all
111     swift_flush_tlb_range:
112     - ld [%o0 + 0x00], %o0 /* XXX vma->vm_mm GROSS XXX */
113     + ld [%o0 + VMA_VM_MM], %o0
114     swift_flush_tlb_mm:
115     ld [%o0 + AOFF_mm_context], %g2
116     cmp %g2, -1
117     @@ -233,7 +233,7 @@ swift_flush_tlb_all_out:
118    
119     .globl swift_flush_tlb_page
120     swift_flush_tlb_page:
121     - ld [%o0 + 0x00], %o0 /* XXX vma->vm_mm GROSS XXX */
122     + ld [%o0 + VMA_VM_MM], %o0
123     mov SRMMU_CTX_REG, %g1
124     ld [%o0 + AOFF_mm_context], %o3
125     andn %o1, (PAGE_SIZE - 1), %o1
126     diff --git a/arch/sparc/mm/tlb.c b/arch/sparc/mm/tlb.c
127     index afd021e..072f553 100644
128     --- a/arch/sparc/mm/tlb.c
129     +++ b/arch/sparc/mm/tlb.c
130     @@ -115,8 +115,8 @@ no_cache_flush:
131     }
132    
133     if (!tb->active) {
134     - global_flush_tlb_page(mm, vaddr);
135     flush_tsb_user_page(mm, vaddr);
136     + global_flush_tlb_page(mm, vaddr);
137     goto out;
138     }
139    
140     diff --git a/arch/sparc/mm/tsunami.S b/arch/sparc/mm/tsunami.S
141     index 4e55e8f..bf10a34 100644
142     --- a/arch/sparc/mm/tsunami.S
143     +++ b/arch/sparc/mm/tsunami.S
144     @@ -24,7 +24,7 @@
145     /* Sliiick... */
146     tsunami_flush_cache_page:
147     tsunami_flush_cache_range:
148     - ld [%o0 + 0x0], %o0 /* XXX vma->vm_mm, GROSS XXX */
149     + ld [%o0 + VMA_VM_MM], %o0
150     tsunami_flush_cache_mm:
151     ld [%o0 + AOFF_mm_context], %g2
152     cmp %g2, -1
153     @@ -46,7 +46,7 @@ tsunami_flush_sig_insns:
154    
155     /* More slick stuff... */
156     tsunami_flush_tlb_range:
157     - ld [%o0 + 0x00], %o0 /* XXX vma->vm_mm GROSS XXX */
158     + ld [%o0 + VMA_VM_MM], %o0
159     tsunami_flush_tlb_mm:
160     ld [%o0 + AOFF_mm_context], %g2
161     cmp %g2, -1
162     @@ -65,7 +65,7 @@ tsunami_flush_tlb_out:
163    
164     /* This one can be done in a fine grained manner... */
165     tsunami_flush_tlb_page:
166     - ld [%o0 + 0x00], %o0 /* XXX vma->vm_mm GROSS XXX */
167     + ld [%o0 + VMA_VM_MM], %o0
168     mov SRMMU_CTX_REG, %g1
169     ld [%o0 + AOFF_mm_context], %o3
170     andn %o1, (PAGE_SIZE - 1), %o1
171     diff --git a/arch/sparc/mm/viking.S b/arch/sparc/mm/viking.S
172     index 6dfcc13..a516372 100644
173     --- a/arch/sparc/mm/viking.S
174     +++ b/arch/sparc/mm/viking.S
175     @@ -109,7 +109,7 @@ viking_mxcc_flush_page:
176     viking_flush_cache_page:
177     viking_flush_cache_range:
178     #ifndef CONFIG_SMP
179     - ld [%o0 + 0x0], %o0 /* XXX vma->vm_mm, GROSS XXX */
180     + ld [%o0 + VMA_VM_MM], %o0
181     #endif
182     viking_flush_cache_mm:
183     #ifndef CONFIG_SMP
184     @@ -149,7 +149,7 @@ viking_flush_tlb_mm:
185     #endif
186    
187     viking_flush_tlb_range:
188     - ld [%o0 + 0x00], %o0 /* XXX vma->vm_mm GROSS XXX */
189     + ld [%o0 + VMA_VM_MM], %o0
190     mov SRMMU_CTX_REG, %g1
191     ld [%o0 + AOFF_mm_context], %o3
192     lda [%g1] ASI_M_MMUREGS, %g5
193     @@ -174,7 +174,7 @@ viking_flush_tlb_range:
194     #endif
195    
196     viking_flush_tlb_page:
197     - ld [%o0 + 0x00], %o0 /* XXX vma->vm_mm GROSS XXX */
198     + ld [%o0 + VMA_VM_MM], %o0
199     mov SRMMU_CTX_REG, %g1
200     ld [%o0 + AOFF_mm_context], %o3
201     lda [%g1] ASI_M_MMUREGS, %g5
202     @@ -240,7 +240,7 @@ sun4dsmp_flush_tlb_range:
203     tst %g5
204     bne 3f
205     mov SRMMU_CTX_REG, %g1
206     - ld [%o0 + 0x00], %o0 /* XXX vma->vm_mm GROSS XXX */
207     + ld [%o0 + VMA_VM_MM], %o0
208     ld [%o0 + AOFF_mm_context], %o3
209     lda [%g1] ASI_M_MMUREGS, %g5
210     sethi %hi(~((1 << SRMMU_PGDIR_SHIFT) - 1)), %o4
211     @@ -266,7 +266,7 @@ sun4dsmp_flush_tlb_page:
212     tst %g5
213     bne 2f
214     mov SRMMU_CTX_REG, %g1
215     - ld [%o0 + 0x00], %o0 /* XXX vma->vm_mm GROSS XXX */
216     + ld [%o0 + VMA_VM_MM], %o0
217     ld [%o0 + AOFF_mm_context], %o3
218     lda [%g1] ASI_M_MMUREGS, %g5
219     and %o1, PAGE_MASK, %o1
220     diff --git a/drivers/ata/ata_piix.c b/drivers/ata/ata_piix.c
221     index af58f9b..45cc02b 100644
222     --- a/drivers/ata/ata_piix.c
223     +++ b/drivers/ata/ata_piix.c
224     @@ -352,6 +352,8 @@ static const struct pci_device_id piix_pci_tbl[] = {
225     /* SATA Controller IDE (BayTrail) */
226     { 0x8086, 0x0F20, PCI_ANY_ID, PCI_ANY_ID, 0, 0, ich8_2port_sata_byt },
227     { 0x8086, 0x0F21, PCI_ANY_ID, PCI_ANY_ID, 0, 0, ich8_2port_sata_byt },
228     + /* SATA Controller IDE (Coleto Creek) */
229     + { 0x8086, 0x23a6, PCI_ANY_ID, PCI_ANY_ID, 0, 0, ich8_2port_sata },
230    
231     { } /* terminate list */
232     };
233     diff --git a/drivers/ata/libata-pmp.c b/drivers/ata/libata-pmp.c
234     index 21b80c5..f63a588 100644
235     --- a/drivers/ata/libata-pmp.c
236     +++ b/drivers/ata/libata-pmp.c
237     @@ -389,9 +389,13 @@ static void sata_pmp_quirks(struct ata_port *ap)
238     /* link reports offline after LPM */
239     link->flags |= ATA_LFLAG_NO_LPM;
240    
241     - /* Class code report is unreliable. */
242     + /*
243     + * Class code report is unreliable and SRST times
244     + * out under certain configurations.
245     + */
246     if (link->pmp < 5)
247     - link->flags |= ATA_LFLAG_ASSUME_ATA;
248     + link->flags |= ATA_LFLAG_NO_SRST |
249     + ATA_LFLAG_ASSUME_ATA;
250    
251     /* port 5 is for SEMB device and it doesn't like SRST */
252     if (link->pmp == 5)
253     @@ -399,20 +403,17 @@ static void sata_pmp_quirks(struct ata_port *ap)
254     ATA_LFLAG_ASSUME_SEMB;
255     }
256     } else if (vendor == 0x1095 && devid == 0x4723) {
257     - /* sil4723 quirks */
258     - ata_for_each_link(link, ap, EDGE) {
259     - /* link reports offline after LPM */
260     - link->flags |= ATA_LFLAG_NO_LPM;
261     -
262     - /* class code report is unreliable */
263     - if (link->pmp < 2)
264     - link->flags |= ATA_LFLAG_ASSUME_ATA;
265     -
266     - /* the config device at port 2 locks up on SRST */
267     - if (link->pmp == 2)
268     - link->flags |= ATA_LFLAG_NO_SRST |
269     - ATA_LFLAG_ASSUME_ATA;
270     - }
271     + /*
272     + * sil4723 quirks
273     + *
274     + * Link reports offline after LPM. Class code report is
275     + * unreliable. SIMG PMPs never got SRST reliable and the
276     + * config device at port 2 locks up on SRST.
277     + */
278     + ata_for_each_link(link, ap, EDGE)
279     + link->flags |= ATA_LFLAG_NO_LPM |
280     + ATA_LFLAG_NO_SRST |
281     + ATA_LFLAG_ASSUME_ATA;
282     } else if (vendor == 0x1095 && devid == 0x4726) {
283     /* sil4726 quirks */
284     ata_for_each_link(link, ap, EDGE) {
285     diff --git a/drivers/iommu/amd_iommu.c b/drivers/iommu/amd_iommu.c
286     index 99a8444..c0536ed 100644
287     --- a/drivers/iommu/amd_iommu.c
288     +++ b/drivers/iommu/amd_iommu.c
289     @@ -1309,6 +1309,10 @@ static unsigned long iommu_unmap_page(struct protection_domain *dom,
290    
291     /* Large PTE found which maps this address */
292     unmap_size = PTE_PAGE_SIZE(*pte);
293     +
294     + /* Only unmap from the first pte in the page */
295     + if ((unmap_size - 1) & bus_addr)
296     + break;
297     count = PAGE_SIZE_PTE_COUNT(unmap_size);
298     for (i = 0; i < count; i++)
299     pte[i] = 0ULL;
300     @@ -1318,7 +1322,7 @@ static unsigned long iommu_unmap_page(struct protection_domain *dom,
301     unmapped += unmap_size;
302     }
303    
304     - BUG_ON(!is_power_of_2(unmapped));
305     + BUG_ON(unmapped && !is_power_of_2(unmapped));
306    
307     return unmapped;
308     }
309     diff --git a/drivers/net/dummy.c b/drivers/net/dummy.c
310     index bab0158..b33ad12 100644
311     --- a/drivers/net/dummy.c
312     +++ b/drivers/net/dummy.c
313     @@ -186,6 +186,8 @@ static int __init dummy_init_module(void)
314    
315     rtnl_lock();
316     err = __rtnl_link_register(&dummy_link_ops);
317     + if (err < 0)
318     + goto out;
319    
320     for (i = 0; i < numdummies && !err; i++) {
321     err = dummy_init_one();
322     @@ -193,6 +195,8 @@ static int __init dummy_init_module(void)
323     }
324     if (err < 0)
325     __rtnl_link_unregister(&dummy_link_ops);
326     +
327     +out:
328     rtnl_unlock();
329    
330     return err;
331     diff --git a/drivers/net/ethernet/atheros/atl1e/atl1e_main.c b/drivers/net/ethernet/atheros/atl1e/atl1e_main.c
332     index d53509e..d4a747a 100644
333     --- a/drivers/net/ethernet/atheros/atl1e/atl1e_main.c
334     +++ b/drivers/net/ethernet/atheros/atl1e/atl1e_main.c
335     @@ -1688,8 +1688,8 @@ check_sum:
336     return 0;
337     }
338    
339     -static void atl1e_tx_map(struct atl1e_adapter *adapter,
340     - struct sk_buff *skb, struct atl1e_tpd_desc *tpd)
341     +static int atl1e_tx_map(struct atl1e_adapter *adapter,
342     + struct sk_buff *skb, struct atl1e_tpd_desc *tpd)
343     {
344     struct atl1e_tpd_desc *use_tpd = NULL;
345     struct atl1e_tx_buffer *tx_buffer = NULL;
346     @@ -1700,6 +1700,8 @@ static void atl1e_tx_map(struct atl1e_adapter *adapter,
347     u16 nr_frags;
348     u16 f;
349     int segment;
350     + int ring_start = adapter->tx_ring.next_to_use;
351     + int ring_end;
352    
353     nr_frags = skb_shinfo(skb)->nr_frags;
354     segment = (tpd->word3 >> TPD_SEGMENT_EN_SHIFT) & TPD_SEGMENT_EN_MASK;
355     @@ -1712,6 +1714,9 @@ static void atl1e_tx_map(struct atl1e_adapter *adapter,
356     tx_buffer->length = map_len;
357     tx_buffer->dma = pci_map_single(adapter->pdev,
358     skb->data, hdr_len, PCI_DMA_TODEVICE);
359     + if (dma_mapping_error(&adapter->pdev->dev, tx_buffer->dma))
360     + return -ENOSPC;
361     +
362     ATL1E_SET_PCIMAP_TYPE(tx_buffer, ATL1E_TX_PCIMAP_SINGLE);
363     mapped_len += map_len;
364     use_tpd->buffer_addr = cpu_to_le64(tx_buffer->dma);
365     @@ -1738,6 +1743,22 @@ static void atl1e_tx_map(struct atl1e_adapter *adapter,
366     tx_buffer->dma =
367     pci_map_single(adapter->pdev, skb->data + mapped_len,
368     map_len, PCI_DMA_TODEVICE);
369     +
370     + if (dma_mapping_error(&adapter->pdev->dev, tx_buffer->dma)) {
371     + /* We need to unwind the mappings we've done */
372     + ring_end = adapter->tx_ring.next_to_use;
373     + adapter->tx_ring.next_to_use = ring_start;
374     + while (adapter->tx_ring.next_to_use != ring_end) {
375     + tpd = atl1e_get_tpd(adapter);
376     + tx_buffer = atl1e_get_tx_buffer(adapter, tpd);
377     + pci_unmap_single(adapter->pdev, tx_buffer->dma,
378     + tx_buffer->length, PCI_DMA_TODEVICE);
379     + }
380     + /* Reset the tx rings next pointer */
381     + adapter->tx_ring.next_to_use = ring_start;
382     + return -ENOSPC;
383     + }
384     +
385     ATL1E_SET_PCIMAP_TYPE(tx_buffer, ATL1E_TX_PCIMAP_SINGLE);
386     mapped_len += map_len;
387     use_tpd->buffer_addr = cpu_to_le64(tx_buffer->dma);
388     @@ -1773,6 +1794,23 @@ static void atl1e_tx_map(struct atl1e_adapter *adapter,
389     (i * MAX_TX_BUF_LEN),
390     tx_buffer->length,
391     DMA_TO_DEVICE);
392     +
393     + if (dma_mapping_error(&adapter->pdev->dev, tx_buffer->dma)) {
394     + /* We need to unwind the mappings we've done */
395     + ring_end = adapter->tx_ring.next_to_use;
396     + adapter->tx_ring.next_to_use = ring_start;
397     + while (adapter->tx_ring.next_to_use != ring_end) {
398     + tpd = atl1e_get_tpd(adapter);
399     + tx_buffer = atl1e_get_tx_buffer(adapter, tpd);
400     + dma_unmap_page(&adapter->pdev->dev, tx_buffer->dma,
401     + tx_buffer->length, DMA_TO_DEVICE);
402     + }
403     +
404     + /* Reset the ring next to use pointer */
405     + adapter->tx_ring.next_to_use = ring_start;
406     + return -ENOSPC;
407     + }
408     +
409     ATL1E_SET_PCIMAP_TYPE(tx_buffer, ATL1E_TX_PCIMAP_PAGE);
410     use_tpd->buffer_addr = cpu_to_le64(tx_buffer->dma);
411     use_tpd->word2 = (use_tpd->word2 & (~TPD_BUFLEN_MASK)) |
412     @@ -1790,6 +1828,7 @@ static void atl1e_tx_map(struct atl1e_adapter *adapter,
413     /* The last buffer info contain the skb address,
414     so it will be free after unmap */
415     tx_buffer->skb = skb;
416     + return 0;
417     }
418    
419     static void atl1e_tx_queue(struct atl1e_adapter *adapter, u16 count,
420     @@ -1857,10 +1896,15 @@ static netdev_tx_t atl1e_xmit_frame(struct sk_buff *skb,
421     return NETDEV_TX_OK;
422     }
423    
424     - atl1e_tx_map(adapter, skb, tpd);
425     + if (atl1e_tx_map(adapter, skb, tpd)) {
426     + dev_kfree_skb_any(skb);
427     + goto out;
428     + }
429     +
430     atl1e_tx_queue(adapter, tpd_req, tpd);
431    
432     netdev->trans_start = jiffies; /* NETIF_F_LLTX driver :( */
433     +out:
434     spin_unlock_irqrestore(&adapter->tx_lock, flags);
435     return NETDEV_TX_OK;
436     }
437     diff --git a/drivers/net/ethernet/renesas/sh_eth.c b/drivers/net/ethernet/renesas/sh_eth.c
438     index d63e09b..16caeba 100644
439     --- a/drivers/net/ethernet/renesas/sh_eth.c
440     +++ b/drivers/net/ethernet/renesas/sh_eth.c
441     @@ -137,8 +137,9 @@ static struct sh_eth_cpu_data sh_eth_my_cpu_data = {
442     .rmcr_value = 0x00000001,
443    
444     .tx_check = EESR_FTC | EESR_CND | EESR_DLC | EESR_CD | EESR_RTO,
445     - .eesr_err_check = EESR_TWB | EESR_TABT | EESR_RABT | EESR_RDE |
446     - EESR_RFRMER | EESR_TFE | EESR_TDE | EESR_ECI,
447     + .eesr_err_check = EESR_TWB | EESR_TABT | EESR_RABT | EESR_RFE |
448     + EESR_RDE | EESR_RFRMER | EESR_TFE | EESR_TDE |
449     + EESR_ECI,
450     .tx_error_check = EESR_TWB | EESR_TABT | EESR_TDE | EESR_TFE,
451    
452     .apr = 1,
453     @@ -252,9 +253,9 @@ static struct sh_eth_cpu_data sh_eth_my_cpu_data_giga = {
454     .eesipr_value = DMAC_M_RFRMER | DMAC_M_ECI | 0x003fffff,
455    
456     .tx_check = EESR_TC1 | EESR_FTC,
457     - .eesr_err_check = EESR_TWB1 | EESR_TWB | EESR_TABT | EESR_RABT | \
458     - EESR_RDE | EESR_RFRMER | EESR_TFE | EESR_TDE | \
459     - EESR_ECI,
460     + .eesr_err_check = EESR_TWB1 | EESR_TWB | EESR_TABT | EESR_RABT |
461     + EESR_RFE | EESR_RDE | EESR_RFRMER | EESR_TFE |
462     + EESR_TDE | EESR_ECI,
463     .tx_error_check = EESR_TWB1 | EESR_TWB | EESR_TABT | EESR_TDE | \
464     EESR_TFE,
465     .fdr_value = 0x0000072f,
466     @@ -361,9 +362,9 @@ static struct sh_eth_cpu_data sh_eth_my_cpu_data = {
467     .eesipr_value = DMAC_M_RFRMER | DMAC_M_ECI | 0x003fffff,
468    
469     .tx_check = EESR_TC1 | EESR_FTC,
470     - .eesr_err_check = EESR_TWB1 | EESR_TWB | EESR_TABT | EESR_RABT | \
471     - EESR_RDE | EESR_RFRMER | EESR_TFE | EESR_TDE | \
472     - EESR_ECI,
473     + .eesr_err_check = EESR_TWB1 | EESR_TWB | EESR_TABT | EESR_RABT |
474     + EESR_RFE | EESR_RDE | EESR_RFRMER | EESR_TFE |
475     + EESR_TDE | EESR_ECI,
476     .tx_error_check = EESR_TWB1 | EESR_TWB | EESR_TABT | EESR_TDE | \
477     EESR_TFE,
478    
479     diff --git a/drivers/net/ethernet/renesas/sh_eth.h b/drivers/net/ethernet/renesas/sh_eth.h
480     index 0fa14afc..c49097f 100644
481     --- a/drivers/net/ethernet/renesas/sh_eth.h
482     +++ b/drivers/net/ethernet/renesas/sh_eth.h
483     @@ -467,7 +467,7 @@ enum EESR_BIT {
484    
485     #define DEFAULT_TX_CHECK (EESR_FTC | EESR_CND | EESR_DLC | EESR_CD | \
486     EESR_RTO)
487     -#define DEFAULT_EESR_ERR_CHECK (EESR_TWB | EESR_TABT | EESR_RABT | \
488     +#define DEFAULT_EESR_ERR_CHECK (EESR_TWB | EESR_TABT | EESR_RABT | EESR_RFE | \
489     EESR_RDE | EESR_RFRMER | EESR_ADE | \
490     EESR_TFE | EESR_TDE | EESR_ECI)
491     #define DEFAULT_TX_ERROR_CHECK (EESR_TWB | EESR_TABT | EESR_ADE | EESR_TDE | \
492     diff --git a/drivers/net/ethernet/sun/sunvnet.c b/drivers/net/ethernet/sun/sunvnet.c
493     index 38e3ae9..8e2ac64 100644
494     --- a/drivers/net/ethernet/sun/sunvnet.c
495     +++ b/drivers/net/ethernet/sun/sunvnet.c
496     @@ -1243,6 +1243,8 @@ static int vnet_port_remove(struct vio_dev *vdev)
497     dev_set_drvdata(&vdev->dev, NULL);
498    
499     kfree(port);
500     +
501     + unregister_netdev(vp->dev);
502     }
503     return 0;
504     }
505     diff --git a/drivers/net/ifb.c b/drivers/net/ifb.c
506     index 344dceb..635d01c 100644
507     --- a/drivers/net/ifb.c
508     +++ b/drivers/net/ifb.c
509     @@ -290,11 +290,17 @@ static int __init ifb_init_module(void)
510    
511     rtnl_lock();
512     err = __rtnl_link_register(&ifb_link_ops);
513     + if (err < 0)
514     + goto out;
515    
516     - for (i = 0; i < numifbs && !err; i++)
517     + for (i = 0; i < numifbs && !err; i++) {
518     err = ifb_init_one(i);
519     + cond_resched();
520     + }
521     if (err)
522     __rtnl_link_unregister(&ifb_link_ops);
523     +
524     +out:
525     rtnl_unlock();
526    
527     return err;
528     diff --git a/drivers/net/macvtap.c b/drivers/net/macvtap.c
529     index b99c418..5151f06 100644
530     --- a/drivers/net/macvtap.c
531     +++ b/drivers/net/macvtap.c
532     @@ -534,8 +534,10 @@ static int zerocopy_sg_from_iovec(struct sk_buff *skb, const struct iovec *from,
533     return -EMSGSIZE;
534     num_pages = get_user_pages_fast(base, size, 0, &page[i]);
535     if (num_pages != size) {
536     - for (i = 0; i < num_pages; i++)
537     - put_page(page[i]);
538     + int j;
539     +
540     + for (j = 0; j < num_pages; j++)
541     + put_page(page[i + j]);
542     }
543     truesize = size * PAGE_SIZE;
544     skb->data_len += len;
545     @@ -654,6 +656,7 @@ static ssize_t macvtap_get_user(struct macvtap_queue *q, struct msghdr *m,
546     int vnet_hdr_len = 0;
547     int copylen = 0;
548     bool zerocopy = false;
549     + size_t linear;
550    
551     if (q->flags & IFF_VNET_HDR) {
552     vnet_hdr_len = q->vnet_hdr_sz;
553     @@ -708,11 +711,14 @@ static ssize_t macvtap_get_user(struct macvtap_queue *q, struct msghdr *m,
554     copylen = vnet_hdr.hdr_len;
555     if (!copylen)
556     copylen = GOODCOPY_LEN;
557     - } else
558     + linear = copylen;
559     + } else {
560     copylen = len;
561     + linear = vnet_hdr.hdr_len;
562     + }
563    
564     skb = macvtap_alloc_skb(&q->sk, NET_IP_ALIGN, copylen,
565     - vnet_hdr.hdr_len, noblock, &err);
566     + linear, noblock, &err);
567     if (!skb)
568     goto err;
569    
570     diff --git a/drivers/net/wireless/ath/ath9k/calib.c b/drivers/net/wireless/ath/ath9k/calib.c
571     index bbd249d..85e7453 100644
572     --- a/drivers/net/wireless/ath/ath9k/calib.c
573     +++ b/drivers/net/wireless/ath/ath9k/calib.c
574     @@ -389,7 +389,6 @@ bool ath9k_hw_getnf(struct ath_hw *ah, struct ath9k_channel *chan)
575    
576     if (!caldata) {
577     chan->noisefloor = nf;
578     - ah->noise = ath9k_hw_getchan_noise(ah, chan);
579     return false;
580     }
581    
582     diff --git a/drivers/net/wireless/rt2x00/rt2800lib.c b/drivers/net/wireless/rt2x00/rt2800lib.c
583     index 2ce6bf5..72cb121 100644
584     --- a/drivers/net/wireless/rt2x00/rt2800lib.c
585     +++ b/drivers/net/wireless/rt2x00/rt2800lib.c
586     @@ -4627,8 +4627,8 @@ int rt2800_probe_hw_mode(struct rt2x00_dev *rt2x00dev)
587     default_power2 = rt2x00_eeprom_addr(rt2x00dev, EEPROM_TXPOWER_A2);
588    
589     for (i = 14; i < spec->num_channels; i++) {
590     - info[i].default_power1 = default_power1[i];
591     - info[i].default_power2 = default_power2[i];
592     + info[i].default_power1 = default_power1[i - 14];
593     + info[i].default_power2 = default_power2[i - 14];
594     }
595     }
596    
597     diff --git a/drivers/net/wireless/rt2x00/rt61pci.c b/drivers/net/wireless/rt2x00/rt61pci.c
598     index bdaba3f..0cb0eec 100644
599     --- a/drivers/net/wireless/rt2x00/rt61pci.c
600     +++ b/drivers/net/wireless/rt2x00/rt61pci.c
601     @@ -2822,7 +2822,8 @@ static int rt61pci_probe_hw_mode(struct rt2x00_dev *rt2x00dev)
602     tx_power = rt2x00_eeprom_addr(rt2x00dev, EEPROM_TXPOWER_A_START);
603     for (i = 14; i < spec->num_channels; i++) {
604     info[i].max_power = MAX_TXPOWER;
605     - info[i].default_power1 = TXPOWER_FROM_DEV(tx_power[i]);
606     + info[i].default_power1 =
607     + TXPOWER_FROM_DEV(tx_power[i - 14]);
608     }
609     }
610    
611     diff --git a/drivers/net/wireless/rt2x00/rt73usb.c b/drivers/net/wireless/rt2x00/rt73usb.c
612     index fda8671..ffdd32e 100644
613     --- a/drivers/net/wireless/rt2x00/rt73usb.c
614     +++ b/drivers/net/wireless/rt2x00/rt73usb.c
615     @@ -2167,7 +2167,8 @@ static int rt73usb_probe_hw_mode(struct rt2x00_dev *rt2x00dev)
616     tx_power = rt2x00_eeprom_addr(rt2x00dev, EEPROM_TXPOWER_A_START);
617     for (i = 14; i < spec->num_channels; i++) {
618     info[i].max_power = MAX_TXPOWER;
619     - info[i].default_power1 = TXPOWER_FROM_DEV(tx_power[i]);
620     + info[i].default_power1 =
621     + TXPOWER_FROM_DEV(tx_power[i - 14]);
622     }
623     }
624    
625     diff --git a/drivers/s390/scsi/zfcp_fsf.c b/drivers/s390/scsi/zfcp_fsf.c
626     index 2136fc2..5fdf70b 100644
627     --- a/drivers/s390/scsi/zfcp_fsf.c
628     +++ b/drivers/s390/scsi/zfcp_fsf.c
629     @@ -563,6 +563,10 @@ static void zfcp_fsf_exchange_config_data_handler(struct zfcp_fsf_req *req)
630     fc_host_port_type(shost) = FC_PORTTYPE_UNKNOWN;
631     adapter->hydra_version = 0;
632    
633     + /* avoids adapter shutdown to be able to recognize
634     + * events such as LINK UP */
635     + atomic_set_mask(ZFCP_STATUS_ADAPTER_XCONFIG_OK,
636     + &adapter->status);
637     zfcp_fsf_link_down_info_eval(req,
638     &qtcb->header.fsf_status_qual.link_down_info);
639     break;
640     diff --git a/drivers/s390/scsi/zfcp_scsi.c b/drivers/s390/scsi/zfcp_scsi.c
641     index b79576b..7b35364 100644
642     --- a/drivers/s390/scsi/zfcp_scsi.c
643     +++ b/drivers/s390/scsi/zfcp_scsi.c
644     @@ -3,7 +3,7 @@
645     *
646     * Interface to Linux SCSI midlayer.
647     *
648     - * Copyright IBM Corporation 2002, 2010
649     + * Copyright IBM Corp. 2002, 2013
650     */
651    
652     #define KMSG_COMPONENT "zfcp"
653     @@ -311,8 +311,12 @@ static struct scsi_host_template zfcp_scsi_host_template = {
654     .proc_name = "zfcp",
655     .can_queue = 4096,
656     .this_id = -1,
657     - .sg_tablesize = 1, /* adjusted later */
658     - .max_sectors = 8, /* adjusted later */
659     + .sg_tablesize = (((QDIO_MAX_ELEMENTS_PER_BUFFER - 1)
660     + * ZFCP_QDIO_MAX_SBALS_PER_REQ) - 2),
661     + /* GCD, adjusted later */
662     + .max_sectors = (((QDIO_MAX_ELEMENTS_PER_BUFFER - 1)
663     + * ZFCP_QDIO_MAX_SBALS_PER_REQ) - 2) * 8,
664     + /* GCD, adjusted later */
665     .dma_boundary = ZFCP_QDIO_SBALE_LEN - 1,
666     .cmd_per_lun = 1,
667     .use_clustering = 1,
668     diff --git a/drivers/scsi/bnx2fc/bnx2fc_io.c b/drivers/scsi/bnx2fc/bnx2fc_io.c
669     index e897ce9..f8a2d12 100644
670     --- a/drivers/scsi/bnx2fc/bnx2fc_io.c
671     +++ b/drivers/scsi/bnx2fc/bnx2fc_io.c
672     @@ -1786,7 +1786,7 @@ static void bnx2fc_parse_fcp_rsp(struct bnx2fc_cmd *io_req,
673     fcp_sns_len = SCSI_SENSE_BUFFERSIZE;
674     }
675    
676     - memset(sc_cmd->sense_buffer, 0, sizeof(sc_cmd->sense_buffer));
677     + memset(sc_cmd->sense_buffer, 0, SCSI_SENSE_BUFFERSIZE);
678     if (fcp_sns_len)
679     memcpy(sc_cmd->sense_buffer, rq_data, fcp_sns_len);
680    
681     diff --git a/drivers/scsi/megaraid/megaraid_sas_base.c b/drivers/scsi/megaraid/megaraid_sas_base.c
682     index 6308a8d..073d5ad 100644
683     --- a/drivers/scsi/megaraid/megaraid_sas_base.c
684     +++ b/drivers/scsi/megaraid/megaraid_sas_base.c
685     @@ -4817,10 +4817,12 @@ megasas_mgmt_fw_ioctl(struct megasas_instance *instance,
686     sense, sense_handle);
687     }
688    
689     - for (i = 0; i < ioc->sge_count && kbuff_arr[i]; i++) {
690     - dma_free_coherent(&instance->pdev->dev,
691     - kern_sge32[i].length,
692     - kbuff_arr[i], kern_sge32[i].phys_addr);
693     + for (i = 0; i < ioc->sge_count; i++) {
694     + if (kbuff_arr[i])
695     + dma_free_coherent(&instance->pdev->dev,
696     + kern_sge32[i].length,
697     + kbuff_arr[i],
698     + kern_sge32[i].phys_addr);
699     }
700    
701     megasas_return_cmd(instance, cmd);
702     diff --git a/drivers/scsi/mpt2sas/mpt2sas_scsih.c b/drivers/scsi/mpt2sas/mpt2sas_scsih.c
703     index d953a57..35a05d1 100644
704     --- a/drivers/scsi/mpt2sas/mpt2sas_scsih.c
705     +++ b/drivers/scsi/mpt2sas/mpt2sas_scsih.c
706     @@ -3963,11 +3963,7 @@ _scsih_qcmd_lck(struct scsi_cmnd *scmd, void (*done)(struct scsi_cmnd *))
707     else
708     mpi_control |= MPI2_SCSIIO_CONTROL_SIMPLEQ;
709     } else
710     -/* MPI Revision I (UNIT = 0xA) - removed MPI2_SCSIIO_CONTROL_UNTAGGED */
711     -/* mpi_control |= MPI2_SCSIIO_CONTROL_UNTAGGED;
712     - */
713     - mpi_control |= (0x500);
714     -
715     + mpi_control |= MPI2_SCSIIO_CONTROL_SIMPLEQ;
716     } else
717     mpi_control |= MPI2_SCSIIO_CONTROL_SIMPLEQ;
718     /* Make sure Device is not raid volume.
719     diff --git a/drivers/usb/serial/cp210x.c b/drivers/usb/serial/cp210x.c
720     index d9811e4..b53065b 100644
721     --- a/drivers/usb/serial/cp210x.c
722     +++ b/drivers/usb/serial/cp210x.c
723     @@ -60,6 +60,7 @@ static const struct usb_device_id id_table[] = {
724     { USB_DEVICE(0x0489, 0xE000) }, /* Pirelli Broadband S.p.A, DP-L10 SIP/GSM Mobile */
725     { USB_DEVICE(0x0489, 0xE003) }, /* Pirelli Broadband S.p.A, DP-L10 SIP/GSM Mobile */
726     { USB_DEVICE(0x0745, 0x1000) }, /* CipherLab USB CCD Barcode Scanner 1000 */
727     + { USB_DEVICE(0x0846, 0x1100) }, /* NetGear Managed Switch M4100 series, M5300 series, M7100 series */
728     { USB_DEVICE(0x08e6, 0x5501) }, /* Gemalto Prox-PU/CU contactless smartcard reader */
729     { USB_DEVICE(0x08FD, 0x000A) }, /* Digianswer A/S , ZigBee/802.15.4 MAC Device */
730     { USB_DEVICE(0x0BED, 0x1100) }, /* MEI (TM) Cashflow-SC Bill/Voucher Acceptor */
731     @@ -124,6 +125,8 @@ static const struct usb_device_id id_table[] = {
732     { USB_DEVICE(0x10C4, 0x85F8) }, /* Virtenio Preon32 */
733     { USB_DEVICE(0x10C4, 0x8664) }, /* AC-Services CAN-IF */
734     { USB_DEVICE(0x10C4, 0x8665) }, /* AC-Services OBD-IF */
735     + { USB_DEVICE(0x10C4, 0x88A4) }, /* MMB Networks ZigBee USB Device */
736     + { USB_DEVICE(0x10C4, 0x88A5) }, /* Planet Innovation Ingeni ZigBee USB Device */
737     { USB_DEVICE(0x10C4, 0xEA60) }, /* Silicon Labs factory default */
738     { USB_DEVICE(0x10C4, 0xEA61) }, /* Silicon Labs factory default */
739     { USB_DEVICE(0x10C4, 0xEA70) }, /* Silicon Labs factory default */
740     @@ -154,6 +157,7 @@ static const struct usb_device_id id_table[] = {
741     { USB_DEVICE(0x17F4, 0xAAAA) }, /* Wavesense Jazz blood glucose meter */
742     { USB_DEVICE(0x1843, 0x0200) }, /* Vaisala USB Instrument Cable */
743     { USB_DEVICE(0x18EF, 0xE00F) }, /* ELV USB-I2C-Interface */
744     + { USB_DEVICE(0x1ADB, 0x0001) }, /* Schweitzer Engineering C662 Cable */
745     { USB_DEVICE(0x1BE3, 0x07A6) }, /* WAGO 750-923 USB Service Cable */
746     { USB_DEVICE(0x1E29, 0x0102) }, /* Festo CPX-USB */
747     { USB_DEVICE(0x1E29, 0x0501) }, /* Festo CMSP */
748     diff --git a/drivers/usb/serial/option.c b/drivers/usb/serial/option.c
749     index 33e20e4..a37f14c 100644
750     --- a/drivers/usb/serial/option.c
751     +++ b/drivers/usb/serial/option.c
752     @@ -347,17 +347,12 @@ static void option_instat_callback(struct urb *urb);
753     #define OLIVETTI_VENDOR_ID 0x0b3c
754     #define OLIVETTI_PRODUCT_OLICARD100 0xc000
755     #define OLIVETTI_PRODUCT_OLICARD145 0xc003
756     +#define OLIVETTI_PRODUCT_OLICARD200 0xc005
757    
758     /* Celot products */
759     #define CELOT_VENDOR_ID 0x211f
760     #define CELOT_PRODUCT_CT680M 0x6801
761    
762     -/* ONDA Communication vendor id */
763     -#define ONDA_VENDOR_ID 0x1ee8
764     -
765     -/* ONDA MT825UP HSDPA 14.2 modem */
766     -#define ONDA_MT825UP 0x000b
767     -
768     /* Samsung products */
769     #define SAMSUNG_VENDOR_ID 0x04e8
770     #define SAMSUNG_PRODUCT_GT_B3730 0x6889
771     @@ -450,7 +445,8 @@ static void option_instat_callback(struct urb *urb);
772    
773     /* Hyundai Petatel Inc. products */
774     #define PETATEL_VENDOR_ID 0x1ff4
775     -#define PETATEL_PRODUCT_NP10T 0x600e
776     +#define PETATEL_PRODUCT_NP10T_600A 0x600a
777     +#define PETATEL_PRODUCT_NP10T_600E 0x600e
778    
779     /* TP-LINK Incorporated products */
780     #define TPLINK_VENDOR_ID 0x2357
781     @@ -797,6 +793,7 @@ static const struct usb_device_id option_ids[] = {
782     { USB_DEVICE(KYOCERA_VENDOR_ID, KYOCERA_PRODUCT_KPC680) },
783     { USB_DEVICE(QUALCOMM_VENDOR_ID, 0x6000)}, /* ZTE AC8700 */
784     { USB_DEVICE(QUALCOMM_VENDOR_ID, 0x6613)}, /* Onda H600/ZTE MF330 */
785     + { USB_DEVICE(QUALCOMM_VENDOR_ID, 0x0023)}, /* ONYX 3G device */
786     { USB_DEVICE(QUALCOMM_VENDOR_ID, 0x9000)}, /* SIMCom SIM5218 */
787     { USB_DEVICE(CMOTECH_VENDOR_ID, CMOTECH_PRODUCT_6280) }, /* BP3-USB & BP3-EXT HSDPA */
788     { USB_DEVICE(CMOTECH_VENDOR_ID, CMOTECH_PRODUCT_6008) },
789     @@ -832,7 +829,8 @@ static const struct usb_device_id option_ids[] = {
790     { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x0017, 0xff, 0xff, 0xff),
791     .driver_info = (kernel_ulong_t)&net_intf3_blacklist },
792     { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x0018, 0xff, 0xff, 0xff) },
793     - { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x0019, 0xff, 0xff, 0xff) },
794     + { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x0019, 0xff, 0xff, 0xff),
795     + .driver_info = (kernel_ulong_t)&net_intf3_blacklist },
796     { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x0020, 0xff, 0xff, 0xff) },
797     { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x0021, 0xff, 0xff, 0xff),
798     .driver_info = (kernel_ulong_t)&net_intf4_blacklist },
799     @@ -1278,8 +1276,8 @@ static const struct usb_device_id option_ids[] = {
800    
801     { USB_DEVICE(OLIVETTI_VENDOR_ID, OLIVETTI_PRODUCT_OLICARD100) },
802     { USB_DEVICE(OLIVETTI_VENDOR_ID, OLIVETTI_PRODUCT_OLICARD145) },
803     + { USB_DEVICE(OLIVETTI_VENDOR_ID, OLIVETTI_PRODUCT_OLICARD200) },
804     { USB_DEVICE(CELOT_VENDOR_ID, CELOT_PRODUCT_CT680M) }, /* CT-650 CDMA 450 1xEVDO modem */
805     - { USB_DEVICE(ONDA_VENDOR_ID, ONDA_MT825UP) }, /* ONDA MT825UP modem */
806     { USB_DEVICE_AND_INTERFACE_INFO(SAMSUNG_VENDOR_ID, SAMSUNG_PRODUCT_GT_B3730, USB_CLASS_CDC_DATA, 0x00, 0x00) }, /* Samsung GT-B3730 LTE USB modem.*/
807     { USB_DEVICE(YUGA_VENDOR_ID, YUGA_PRODUCT_CEM600) },
808     { USB_DEVICE(YUGA_VENDOR_ID, YUGA_PRODUCT_CEM610) },
809     @@ -1351,9 +1349,12 @@ static const struct usb_device_id option_ids[] = {
810     { USB_DEVICE_AND_INTERFACE_INFO(MEDIATEK_VENDOR_ID, MEDIATEK_PRODUCT_DC_4COM2, 0xff, 0x02, 0x01) },
811     { USB_DEVICE_AND_INTERFACE_INFO(MEDIATEK_VENDOR_ID, MEDIATEK_PRODUCT_DC_4COM2, 0xff, 0x00, 0x00) },
812     { USB_DEVICE(CELLIENT_VENDOR_ID, CELLIENT_PRODUCT_MEN200) },
813     - { USB_DEVICE(PETATEL_VENDOR_ID, PETATEL_PRODUCT_NP10T) },
814     + { USB_DEVICE(PETATEL_VENDOR_ID, PETATEL_PRODUCT_NP10T_600A) },
815     + { USB_DEVICE(PETATEL_VENDOR_ID, PETATEL_PRODUCT_NP10T_600E) },
816     { USB_DEVICE(TPLINK_VENDOR_ID, TPLINK_PRODUCT_MA180),
817     .driver_info = (kernel_ulong_t)&net_intf4_blacklist },
818     + { USB_DEVICE(TPLINK_VENDOR_ID, 0x9000), /* TP-Link MA260 */
819     + .driver_info = (kernel_ulong_t)&net_intf4_blacklist },
820     { USB_DEVICE(CHANGHONG_VENDOR_ID, CHANGHONG_PRODUCT_CH690) },
821     { USB_DEVICE_AND_INTERFACE_INFO(0x2001, 0x7d01, 0xff, 0x02, 0x01) }, /* D-Link DWM-156 (variant) */
822     { USB_DEVICE_AND_INTERFACE_INFO(0x2001, 0x7d01, 0xff, 0x00, 0x00) }, /* D-Link DWM-156 (variant) */
823     @@ -1361,6 +1362,8 @@ static const struct usb_device_id option_ids[] = {
824     { USB_DEVICE_AND_INTERFACE_INFO(0x2001, 0x7d02, 0xff, 0x00, 0x00) },
825     { USB_DEVICE_AND_INTERFACE_INFO(0x2001, 0x7d03, 0xff, 0x02, 0x01) },
826     { USB_DEVICE_AND_INTERFACE_INFO(0x2001, 0x7d03, 0xff, 0x00, 0x00) },
827     + { USB_DEVICE_AND_INTERFACE_INFO(0x07d1, 0x3e01, 0xff, 0xff, 0xff) }, /* D-Link DWM-152/C1 */
828     + { USB_DEVICE_AND_INTERFACE_INFO(0x07d1, 0x3e02, 0xff, 0xff, 0xff) }, /* D-Link DWM-156/C1 */
829     { } /* Terminating entry */
830     };
831     MODULE_DEVICE_TABLE(usb, option_ids);
832     diff --git a/fs/block_dev.c b/fs/block_dev.c
833     index 2f3879c..319d9c7 100644
834     --- a/fs/block_dev.c
835     +++ b/fs/block_dev.c
836     @@ -57,17 +57,24 @@ static void bdev_inode_switch_bdi(struct inode *inode,
837     struct backing_dev_info *dst)
838     {
839     struct backing_dev_info *old = inode->i_data.backing_dev_info;
840     + bool wakeup_bdi = false;
841    
842     if (unlikely(dst == old)) /* deadlock avoidance */
843     return;
844     bdi_lock_two(&old->wb, &dst->wb);
845     spin_lock(&inode->i_lock);
846     inode->i_data.backing_dev_info = dst;
847     - if (inode->i_state & I_DIRTY)
848     + if (inode->i_state & I_DIRTY) {
849     + if (bdi_cap_writeback_dirty(dst) && !wb_has_dirty_io(&dst->wb))
850     + wakeup_bdi = true;
851     list_move(&inode->i_wb_list, &dst->wb.b_dirty);
852     + }
853     spin_unlock(&inode->i_lock);
854     spin_unlock(&old->wb.list_lock);
855     spin_unlock(&dst->wb.list_lock);
856     +
857     + if (wakeup_bdi)
858     + bdi_wakeup_thread_delayed(dst);
859     }
860    
861     sector_t blkdev_max_block(struct block_device *bdev)
862     diff --git a/fs/ext3/inode.c b/fs/ext3/inode.c
863     index 0752817..aad0f39 100644
864     --- a/fs/ext3/inode.c
865     +++ b/fs/ext3/inode.c
866     @@ -218,7 +218,8 @@ void ext3_evict_inode (struct inode *inode)
867     */
868     if (inode->i_nlink && ext3_should_journal_data(inode) &&
869     EXT3_SB(inode->i_sb)->s_journal &&
870     - (S_ISLNK(inode->i_mode) || S_ISREG(inode->i_mode))) {
871     + (S_ISLNK(inode->i_mode) || S_ISREG(inode->i_mode)) &&
872     + inode->i_ino != EXT3_JOURNAL_INO) {
873     tid_t commit_tid = atomic_read(&ei->i_datasync_tid);
874     journal_t *journal = EXT3_SB(inode->i_sb)->s_journal;
875    
876     diff --git a/fs/lockd/svclock.c b/fs/lockd/svclock.c
877     index e46353f..aff1c61 100644
878     --- a/fs/lockd/svclock.c
879     +++ b/fs/lockd/svclock.c
880     @@ -941,6 +941,7 @@ nlmsvc_retry_blocked(void)
881     unsigned long timeout = MAX_SCHEDULE_TIMEOUT;
882     struct nlm_block *block;
883    
884     + spin_lock(&nlm_blocked_lock);
885     while (!list_empty(&nlm_blocked) && !kthread_should_stop()) {
886     block = list_entry(nlm_blocked.next, struct nlm_block, b_list);
887    
888     @@ -950,6 +951,7 @@ nlmsvc_retry_blocked(void)
889     timeout = block->b_when - jiffies;
890     break;
891     }
892     + spin_unlock(&nlm_blocked_lock);
893    
894     dprintk("nlmsvc_retry_blocked(%p, when=%ld)\n",
895     block, block->b_when);
896     @@ -959,7 +961,9 @@ nlmsvc_retry_blocked(void)
897     retry_deferred_block(block);
898     } else
899     nlmsvc_grant_blocked(block);
900     + spin_lock(&nlm_blocked_lock);
901     }
902     + spin_unlock(&nlm_blocked_lock);
903    
904     return timeout;
905     }
906     diff --git a/include/linux/if_pppox.h b/include/linux/if_pppox.h
907     index b5f927f..732c962 100644
908     --- a/include/linux/if_pppox.h
909     +++ b/include/linux/if_pppox.h
910     @@ -128,11 +128,11 @@ struct pppoe_tag {
911    
912     struct pppoe_hdr {
913     #if defined(__LITTLE_ENDIAN_BITFIELD)
914     - __u8 ver : 4;
915     __u8 type : 4;
916     + __u8 ver : 4;
917     #elif defined(__BIG_ENDIAN_BITFIELD)
918     - __u8 type : 4;
919     __u8 ver : 4;
920     + __u8 type : 4;
921     #else
922     #error "Please fix <asm/byteorder.h>"
923     #endif
924     diff --git a/include/net/addrconf.h b/include/net/addrconf.h
925     index 757a176..1a77dbb 100644
926     --- a/include/net/addrconf.h
927     +++ b/include/net/addrconf.h
928     @@ -81,6 +81,9 @@ extern int ipv6_dev_get_saddr(struct net *net,
929     const struct in6_addr *daddr,
930     unsigned int srcprefs,
931     struct in6_addr *saddr);
932     +extern int __ipv6_get_lladdr(struct inet6_dev *idev,
933     + struct in6_addr *addr,
934     + unsigned char banned_flags);
935     extern int ipv6_get_lladdr(struct net_device *dev,
936     struct in6_addr *addr,
937     unsigned char banned_flags);
938     diff --git a/include/net/udp.h b/include/net/udp.h
939     index 5d606d9..d0bf5b6 100644
940     --- a/include/net/udp.h
941     +++ b/include/net/udp.h
942     @@ -181,6 +181,7 @@ extern int udp_get_port(struct sock *sk, unsigned short snum,
943     extern void udp_err(struct sk_buff *, u32);
944     extern int udp_sendmsg(struct kiocb *iocb, struct sock *sk,
945     struct msghdr *msg, size_t len);
946     +extern int udp_push_pending_frames(struct sock *sk);
947     extern void udp_flush_pending_frames(struct sock *sk);
948     extern int udp_rcv(struct sk_buff *skb);
949     extern int udp_ioctl(struct sock *sk, int cmd, unsigned long arg);
950     diff --git a/kernel/events/core.c b/kernel/events/core.c
951     index 7ceb270..d074cf0 100644
952     --- a/kernel/events/core.c
953     +++ b/kernel/events/core.c
954     @@ -719,8 +719,18 @@ perf_lock_task_context(struct task_struct *task, int ctxn, unsigned long *flags)
955     {
956     struct perf_event_context *ctx;
957    
958     - rcu_read_lock();
959     retry:
960     + /*
961     + * One of the few rules of preemptible RCU is that one cannot do
962     + * rcu_read_unlock() while holding a scheduler (or nested) lock when
963     + * part of the read side critical section was preemptible -- see
964     + * rcu_read_unlock_special().
965     + *
966     + * Since ctx->lock nests under rq->lock we must ensure the entire read
967     + * side critical section is non-preemptible.
968     + */
969     + preempt_disable();
970     + rcu_read_lock();
971     ctx = rcu_dereference(task->perf_event_ctxp[ctxn]);
972     if (ctx) {
973     /*
974     @@ -736,6 +746,8 @@ retry:
975     raw_spin_lock_irqsave(&ctx->lock, *flags);
976     if (ctx != rcu_dereference(task->perf_event_ctxp[ctxn])) {
977     raw_spin_unlock_irqrestore(&ctx->lock, *flags);
978     + rcu_read_unlock();
979     + preempt_enable();
980     goto retry;
981     }
982    
983     @@ -745,6 +757,7 @@ retry:
984     }
985     }
986     rcu_read_unlock();
987     + preempt_enable();
988     return ctx;
989     }
990    
991     @@ -1702,7 +1715,16 @@ static int __perf_event_enable(void *info)
992     struct perf_cpu_context *cpuctx = __get_cpu_context(ctx);
993     int err;
994    
995     - if (WARN_ON_ONCE(!ctx->is_active))
996     + /*
997     + * There's a time window between 'ctx->is_active' check
998     + * in perf_event_enable function and this place having:
999     + * - IRQs on
1000     + * - ctx->lock unlocked
1001     + *
1002     + * where the task could be killed and 'ctx' deactivated
1003     + * by perf_event_exit_task.
1004     + */
1005     + if (!ctx->is_active)
1006     return -EINVAL;
1007    
1008     raw_spin_lock(&ctx->lock);
1009     @@ -6933,7 +6955,7 @@ inherit_task_group(struct perf_event *event, struct task_struct *parent,
1010     * child.
1011     */
1012    
1013     - child_ctx = alloc_perf_context(event->pmu, child);
1014     + child_ctx = alloc_perf_context(parent_ctx->pmu, child);
1015     if (!child_ctx)
1016     return -ENOMEM;
1017    
1018     diff --git a/kernel/hrtimer.c b/kernel/hrtimer.c
1019     index 60f7e32..a57ef25 100644
1020     --- a/kernel/hrtimer.c
1021     +++ b/kernel/hrtimer.c
1022     @@ -707,17 +707,20 @@ static int hrtimer_switch_to_hres(void)
1023     return 1;
1024     }
1025    
1026     +static void clock_was_set_work(struct work_struct *work)
1027     +{
1028     + clock_was_set();
1029     +}
1030     +
1031     +static DECLARE_WORK(hrtimer_work, clock_was_set_work);
1032     +
1033     /*
1034     - * Called from timekeeping code to reprogramm the hrtimer interrupt
1035     - * device. If called from the timer interrupt context we defer it to
1036     - * softirq context.
1037     + * Called from timekeeping and resume code to reprogramm the hrtimer
1038     + * interrupt device on all cpus.
1039     */
1040     void clock_was_set_delayed(void)
1041     {
1042     - struct hrtimer_cpu_base *cpu_base = &__get_cpu_var(hrtimer_bases);
1043     -
1044     - cpu_base->clock_was_set = 1;
1045     - __raise_softirq_irqoff(HRTIMER_SOFTIRQ);
1046     + schedule_work(&hrtimer_work);
1047     }
1048    
1049     #else
1050     @@ -766,8 +769,10 @@ void hrtimers_resume(void)
1051     WARN_ONCE(!irqs_disabled(),
1052     KERN_INFO "hrtimers_resume() called with IRQs enabled!");
1053    
1054     + /* Retrigger on the local CPU */
1055     retrigger_next_event(NULL);
1056     - timerfd_clock_was_set();
1057     + /* And schedule a retrigger for all others */
1058     + clock_was_set_delayed();
1059     }
1060    
1061     static inline void timer_stats_hrtimer_set_start_info(struct hrtimer *timer)
1062     @@ -1416,13 +1421,6 @@ void hrtimer_peek_ahead_timers(void)
1063    
1064     static void run_hrtimer_softirq(struct softirq_action *h)
1065     {
1066     - struct hrtimer_cpu_base *cpu_base = &__get_cpu_var(hrtimer_bases);
1067     -
1068     - if (cpu_base->clock_was_set) {
1069     - cpu_base->clock_was_set = 0;
1070     - clock_was_set();
1071     - }
1072     -
1073     hrtimer_peek_ahead_timers();
1074     }
1075    
1076     diff --git a/kernel/time/tick-broadcast.c b/kernel/time/tick-broadcast.c
1077     index 239a323..f8961bf 100644
1078     --- a/kernel/time/tick-broadcast.c
1079     +++ b/kernel/time/tick-broadcast.c
1080     @@ -400,7 +400,15 @@ void tick_check_oneshot_broadcast(int cpu)
1081     if (cpumask_test_cpu(cpu, to_cpumask(tick_broadcast_oneshot_mask))) {
1082     struct tick_device *td = &per_cpu(tick_cpu_device, cpu);
1083    
1084     - clockevents_set_mode(td->evtdev, CLOCK_EVT_MODE_ONESHOT);
1085     + /*
1086     + * We might be in the middle of switching over from
1087     + * periodic to oneshot. If the CPU has not yet
1088     + * switched over, leave the device alone.
1089     + */
1090     + if (td->mode == TICKDEV_MODE_ONESHOT) {
1091     + clockevents_set_mode(td->evtdev,
1092     + CLOCK_EVT_MODE_ONESHOT);
1093     + }
1094     }
1095     }
1096    
1097     diff --git a/kernel/trace/trace.c b/kernel/trace/trace.c
1098     index 75c11bf..13cd224 100644
1099     --- a/kernel/trace/trace.c
1100     +++ b/kernel/trace/trace.c
1101     @@ -687,7 +687,15 @@ __update_max_tr(struct trace_array *tr, struct task_struct *tsk, int cpu)
1102    
1103     memcpy(max_data->comm, tsk->comm, TASK_COMM_LEN);
1104     max_data->pid = tsk->pid;
1105     - max_data->uid = task_uid(tsk);
1106     + /*
1107     + * If tsk == current, then use current_uid(), as that does not use
1108     + * RCU. The irq tracer can be called out of RCU scope.
1109     + */
1110     + if (tsk == current)
1111     + max_data->uid = current_uid();
1112     + else
1113     + max_data->uid = task_uid(tsk);
1114     +
1115     max_data->nice = tsk->static_prio - 20 - MAX_RT_PRIO;
1116     max_data->policy = tsk->policy;
1117     max_data->rt_priority = tsk->rt_priority;
1118     diff --git a/kernel/trace/trace_syscalls.c b/kernel/trace/trace_syscalls.c
1119     index 96fc733..e675182 100644
1120     --- a/kernel/trace/trace_syscalls.c
1121     +++ b/kernel/trace/trace_syscalls.c
1122     @@ -305,6 +305,8 @@ void ftrace_syscall_enter(void *ignore, struct pt_regs *regs, long id)
1123     struct ring_buffer *buffer;
1124     int size;
1125     int syscall_nr;
1126     + unsigned long irq_flags;
1127     + int pc;
1128    
1129     syscall_nr = syscall_get_nr(current, regs);
1130     if (syscall_nr < 0)
1131     @@ -318,8 +320,11 @@ void ftrace_syscall_enter(void *ignore, struct pt_regs *regs, long id)
1132    
1133     size = sizeof(*entry) + sizeof(unsigned long) * sys_data->nb_args;
1134    
1135     + local_save_flags(irq_flags);
1136     + pc = preempt_count();
1137     +
1138     event = trace_current_buffer_lock_reserve(&buffer,
1139     - sys_data->enter_event->event.type, size, 0, 0);
1140     + sys_data->enter_event->event.type, size, irq_flags, pc);
1141     if (!event)
1142     return;
1143    
1144     @@ -329,7 +334,8 @@ void ftrace_syscall_enter(void *ignore, struct pt_regs *regs, long id)
1145    
1146     if (!filter_current_check_discard(buffer, sys_data->enter_event,
1147     entry, event))
1148     - trace_current_buffer_unlock_commit(buffer, event, 0, 0);
1149     + trace_current_buffer_unlock_commit(buffer, event,
1150     + irq_flags, pc);
1151     }
1152    
1153     void ftrace_syscall_exit(void *ignore, struct pt_regs *regs, long ret)
1154     @@ -339,6 +345,8 @@ void ftrace_syscall_exit(void *ignore, struct pt_regs *regs, long ret)
1155     struct ring_buffer_event *event;
1156     struct ring_buffer *buffer;
1157     int syscall_nr;
1158     + unsigned long irq_flags;
1159     + int pc;
1160    
1161     syscall_nr = syscall_get_nr(current, regs);
1162     if (syscall_nr < 0)
1163     @@ -351,7 +359,8 @@ void ftrace_syscall_exit(void *ignore, struct pt_regs *regs, long ret)
1164     return;
1165    
1166     event = trace_current_buffer_lock_reserve(&buffer,
1167     - sys_data->exit_event->event.type, sizeof(*entry), 0, 0);
1168     + sys_data->exit_event->event.type, sizeof(*entry),
1169     + irq_flags, pc);
1170     if (!event)
1171     return;
1172    
1173     @@ -361,7 +370,8 @@ void ftrace_syscall_exit(void *ignore, struct pt_regs *regs, long ret)
1174    
1175     if (!filter_current_check_discard(buffer, sys_data->exit_event,
1176     entry, event))
1177     - trace_current_buffer_unlock_commit(buffer, event, 0, 0);
1178     + trace_current_buffer_unlock_commit(buffer, event,
1179     + irq_flags, pc);
1180     }
1181    
1182     int reg_event_syscall_enter(struct ftrace_event_call *call)
1183     diff --git a/net/8021q/vlan_dev.c b/net/8021q/vlan_dev.c
1184     index daeb19d..8f45392 100644
1185     --- a/net/8021q/vlan_dev.c
1186     +++ b/net/8021q/vlan_dev.c
1187     @@ -73,6 +73,8 @@ vlan_dev_get_egress_qos_mask(struct net_device *dev, struct sk_buff *skb)
1188     {
1189     struct vlan_priority_tci_mapping *mp;
1190    
1191     + smp_rmb(); /* coupled with smp_wmb() in vlan_dev_set_egress_priority() */
1192     +
1193     mp = vlan_dev_priv(dev)->egress_priority_map[(skb->priority & 0xF)];
1194     while (mp) {
1195     if (mp->priority == skb->priority) {
1196     @@ -235,6 +237,11 @@ int vlan_dev_set_egress_priority(const struct net_device *dev,
1197     np->next = mp;
1198     np->priority = skb_prio;
1199     np->vlan_qos = vlan_qos;
1200     + /* Before inserting this element in hash table, make sure all its fields
1201     + * are committed to memory.
1202     + * coupled with smp_rmb() in vlan_dev_get_egress_qos_mask()
1203     + */
1204     + smp_wmb();
1205     vlan->egress_priority_map[skb_prio & 0xF] = np;
1206     if (vlan_qos)
1207     vlan->nr_egress_mappings++;
1208     diff --git a/net/9p/trans_common.c b/net/9p/trans_common.c
1209     index de8df95..2ee3879 100644
1210     --- a/net/9p/trans_common.c
1211     +++ b/net/9p/trans_common.c
1212     @@ -24,11 +24,11 @@
1213     */
1214     void p9_release_pages(struct page **pages, int nr_pages)
1215     {
1216     - int i = 0;
1217     - while (pages[i] && nr_pages--) {
1218     - put_page(pages[i]);
1219     - i++;
1220     - }
1221     + int i;
1222     +
1223     + for (i = 0; i < nr_pages; i++)
1224     + if (pages[i])
1225     + put_page(pages[i]);
1226     }
1227     EXPORT_SYMBOL(p9_release_pages);
1228    
1229     diff --git a/net/bridge/br_multicast.c b/net/bridge/br_multicast.c
1230     index 27ca25e..9069071 100644
1231     --- a/net/bridge/br_multicast.c
1232     +++ b/net/bridge/br_multicast.c
1233     @@ -467,8 +467,9 @@ static struct sk_buff *br_ip6_multicast_alloc_query(struct net_bridge *br,
1234     skb_set_transport_header(skb, skb->len);
1235     mldq = (struct mld_msg *) icmp6_hdr(skb);
1236    
1237     - interval = ipv6_addr_any(group) ? br->multicast_last_member_interval :
1238     - br->multicast_query_response_interval;
1239     + interval = ipv6_addr_any(group) ?
1240     + br->multicast_query_response_interval :
1241     + br->multicast_last_member_interval;
1242    
1243     mldq->mld_type = ICMPV6_MGM_QUERY;
1244     mldq->mld_code = 0;
1245     diff --git a/net/core/neighbour.c b/net/core/neighbour.c
1246     index ac88107..69b7ca3 100644
1247     --- a/net/core/neighbour.c
1248     +++ b/net/core/neighbour.c
1249     @@ -237,7 +237,7 @@ static void neigh_flush_dev(struct neigh_table *tbl, struct net_device *dev)
1250     we must kill timers etc. and move
1251     it to safe state.
1252     */
1253     - skb_queue_purge(&n->arp_queue);
1254     + __skb_queue_purge(&n->arp_queue);
1255     n->arp_queue_len_bytes = 0;
1256     n->output = neigh_blackhole;
1257     if (n->nud_state & NUD_VALID)
1258     @@ -300,7 +300,7 @@ static struct neighbour *neigh_alloc(struct neigh_table *tbl, struct net_device
1259     if (!n)
1260     goto out_entries;
1261    
1262     - skb_queue_head_init(&n->arp_queue);
1263     + __skb_queue_head_init(&n->arp_queue);
1264     rwlock_init(&n->lock);
1265     seqlock_init(&n->ha_lock);
1266     n->updated = n->used = now;
1267     @@ -721,7 +721,9 @@ void neigh_destroy(struct neighbour *neigh)
1268     if (neigh_del_timer(neigh))
1269     printk(KERN_WARNING "Impossible event.\n");
1270    
1271     - skb_queue_purge(&neigh->arp_queue);
1272     + write_lock_bh(&neigh->lock);
1273     + __skb_queue_purge(&neigh->arp_queue);
1274     + write_unlock_bh(&neigh->lock);
1275     neigh->arp_queue_len_bytes = 0;
1276    
1277     if (dev->netdev_ops->ndo_neigh_destroy)
1278     @@ -867,7 +869,7 @@ static void neigh_invalidate(struct neighbour *neigh)
1279     neigh->ops->error_report(neigh, skb);
1280     write_lock(&neigh->lock);
1281     }
1282     - skb_queue_purge(&neigh->arp_queue);
1283     + __skb_queue_purge(&neigh->arp_queue);
1284     neigh->arp_queue_len_bytes = 0;
1285     }
1286    
1287     @@ -1206,7 +1208,7 @@ int neigh_update(struct neighbour *neigh, const u8 *lladdr, u8 new,
1288    
1289     write_lock_bh(&neigh->lock);
1290     }
1291     - skb_queue_purge(&neigh->arp_queue);
1292     + __skb_queue_purge(&neigh->arp_queue);
1293     neigh->arp_queue_len_bytes = 0;
1294     }
1295     out:
1296     diff --git a/net/ipv4/tcp_ipv4.c b/net/ipv4/tcp_ipv4.c
1297     index 76f50e1..ae03b7b 100644
1298     --- a/net/ipv4/tcp_ipv4.c
1299     +++ b/net/ipv4/tcp_ipv4.c
1300     @@ -974,7 +974,7 @@ int tcp_md5_do_add(struct sock *sk, const union tcp_md5_addr *addr,
1301     struct tcp_sock *tp = tcp_sk(sk);
1302     struct tcp_md5sig_info *md5sig;
1303    
1304     - key = tcp_md5_do_lookup(sk, (union tcp_md5_addr *)&addr, AF_INET);
1305     + key = tcp_md5_do_lookup(sk, addr, family);
1306     if (key) {
1307     /* Pre-existing entry - just update that one. */
1308     memcpy(key->key, newkey, newkeylen);
1309     @@ -1019,7 +1019,7 @@ int tcp_md5_do_del(struct sock *sk, const union tcp_md5_addr *addr, int family)
1310     struct tcp_md5sig_key *key;
1311     struct tcp_md5sig_info *md5sig;
1312    
1313     - key = tcp_md5_do_lookup(sk, (union tcp_md5_addr *)&addr, AF_INET);
1314     + key = tcp_md5_do_lookup(sk, addr, family);
1315     if (!key)
1316     return -ENOENT;
1317     hlist_del_rcu(&key->node);
1318     diff --git a/net/ipv4/udp.c b/net/ipv4/udp.c
1319     index fe14105..0b6136d 100644
1320     --- a/net/ipv4/udp.c
1321     +++ b/net/ipv4/udp.c
1322     @@ -768,7 +768,7 @@ send:
1323     /*
1324     * Push out all pending data as one UDP datagram. Socket is locked.
1325     */
1326     -static int udp_push_pending_frames(struct sock *sk)
1327     +int udp_push_pending_frames(struct sock *sk)
1328     {
1329     struct udp_sock *up = udp_sk(sk);
1330     struct inet_sock *inet = inet_sk(sk);
1331     @@ -787,6 +787,7 @@ out:
1332     up->pending = 0;
1333     return err;
1334     }
1335     +EXPORT_SYMBOL(udp_push_pending_frames);
1336    
1337     int udp_sendmsg(struct kiocb *iocb, struct sock *sk, struct msghdr *msg,
1338     size_t len)
1339     diff --git a/net/ipv6/addrconf.c b/net/ipv6/addrconf.c
1340     index f4fe3c0..d427f1b 100644
1341     --- a/net/ipv6/addrconf.c
1342     +++ b/net/ipv6/addrconf.c
1343     @@ -1233,6 +1233,23 @@ try_nextdev:
1344     }
1345     EXPORT_SYMBOL(ipv6_dev_get_saddr);
1346    
1347     +int __ipv6_get_lladdr(struct inet6_dev *idev, struct in6_addr *addr,
1348     + unsigned char banned_flags)
1349     +{
1350     + struct inet6_ifaddr *ifp;
1351     + int err = -EADDRNOTAVAIL;
1352     +
1353     + list_for_each_entry(ifp, &idev->addr_list, if_list) {
1354     + if (ifp->scope == IFA_LINK &&
1355     + !(ifp->flags & banned_flags)) {
1356     + *addr = ifp->addr;
1357     + err = 0;
1358     + break;
1359     + }
1360     + }
1361     + return err;
1362     +}
1363     +
1364     int ipv6_get_lladdr(struct net_device *dev, struct in6_addr *addr,
1365     unsigned char banned_flags)
1366     {
1367     @@ -1242,17 +1259,8 @@ int ipv6_get_lladdr(struct net_device *dev, struct in6_addr *addr,
1368     rcu_read_lock();
1369     idev = __in6_dev_get(dev);
1370     if (idev) {
1371     - struct inet6_ifaddr *ifp;
1372     -
1373     read_lock_bh(&idev->lock);
1374     - list_for_each_entry(ifp, &idev->addr_list, if_list) {
1375     - if (ifp->scope == IFA_LINK &&
1376     - !(ifp->flags & banned_flags)) {
1377     - *addr = ifp->addr;
1378     - err = 0;
1379     - break;
1380     - }
1381     - }
1382     + err = __ipv6_get_lladdr(idev, addr, banned_flags);
1383     read_unlock_bh(&idev->lock);
1384     }
1385     rcu_read_unlock();
1386     @@ -2429,6 +2437,9 @@ static void init_loopback(struct net_device *dev)
1387     if (sp_ifa->flags & (IFA_F_DADFAILED | IFA_F_TENTATIVE))
1388     continue;
1389    
1390     + if (sp_ifa->rt)
1391     + continue;
1392     +
1393     sp_rt = addrconf_dst_alloc(idev, &sp_ifa->addr, 0);
1394    
1395     /* Failure cases are ignored */
1396     diff --git a/net/ipv6/ip6_output.c b/net/ipv6/ip6_output.c
1397     index bf290ce..d6b9d56 100644
1398     --- a/net/ipv6/ip6_output.c
1399     +++ b/net/ipv6/ip6_output.c
1400     @@ -912,11 +912,17 @@ static struct dst_entry *ip6_sk_dst_check(struct sock *sk,
1401     const struct flowi6 *fl6)
1402     {
1403     struct ipv6_pinfo *np = inet6_sk(sk);
1404     - struct rt6_info *rt = (struct rt6_info *)dst;
1405     + struct rt6_info *rt;
1406    
1407     if (!dst)
1408     goto out;
1409    
1410     + if (dst->ops->family != AF_INET6) {
1411     + dst_release(dst);
1412     + return NULL;
1413     + }
1414     +
1415     + rt = (struct rt6_info *)dst;
1416     /* Yes, checking route validity in not connected
1417     * case is not very simple. Take into account,
1418     * that we do not support routing by source, TOS,
1419     @@ -1181,11 +1187,12 @@ static inline struct ipv6_rt_hdr *ip6_rthdr_dup(struct ipv6_rt_hdr *src,
1420     return src ? kmemdup(src, (src->hdrlen + 1) * 8, gfp) : NULL;
1421     }
1422    
1423     -static void ip6_append_data_mtu(int *mtu,
1424     +static void ip6_append_data_mtu(unsigned int *mtu,
1425     int *maxfraglen,
1426     unsigned int fragheaderlen,
1427     struct sk_buff *skb,
1428     - struct rt6_info *rt)
1429     + struct rt6_info *rt,
1430     + bool pmtuprobe)
1431     {
1432     if (!(rt->dst.flags & DST_XFRM_TUNNEL)) {
1433     if (skb == NULL) {
1434     @@ -1197,7 +1204,9 @@ static void ip6_append_data_mtu(int *mtu,
1435     * this fragment is not first, the headers
1436     * space is regarded as data space.
1437     */
1438     - *mtu = dst_mtu(rt->dst.path);
1439     + *mtu = min(*mtu, pmtuprobe ?
1440     + rt->dst.dev->mtu :
1441     + dst_mtu(rt->dst.path));
1442     }
1443     *maxfraglen = ((*mtu - fragheaderlen) & ~7)
1444     + fragheaderlen - sizeof(struct frag_hdr);
1445     @@ -1214,11 +1223,10 @@ int ip6_append_data(struct sock *sk, int getfrag(void *from, char *to,
1446     struct ipv6_pinfo *np = inet6_sk(sk);
1447     struct inet_cork *cork;
1448     struct sk_buff *skb, *skb_prev = NULL;
1449     - unsigned int maxfraglen, fragheaderlen;
1450     + unsigned int maxfraglen, fragheaderlen, mtu;
1451     int exthdrlen;
1452     int dst_exthdrlen;
1453     int hh_len;
1454     - int mtu;
1455     int copy;
1456     int err;
1457     int offset = 0;
1458     @@ -1381,7 +1389,9 @@ alloc_new_skb:
1459     /* update mtu and maxfraglen if necessary */
1460     if (skb == NULL || skb_prev == NULL)
1461     ip6_append_data_mtu(&mtu, &maxfraglen,
1462     - fragheaderlen, skb, rt);
1463     + fragheaderlen, skb, rt,
1464     + np->pmtudisc ==
1465     + IPV6_PMTUDISC_PROBE);
1466    
1467     skb_prev = skb;
1468    
1469     diff --git a/net/ipv6/mcast.c b/net/ipv6/mcast.c
1470     index b2869ca..6a4ab24 100644
1471     --- a/net/ipv6/mcast.c
1472     +++ b/net/ipv6/mcast.c
1473     @@ -1334,8 +1334,9 @@ mld_scount(struct ifmcaddr6 *pmc, int type, int gdeleted, int sdeleted)
1474     return scount;
1475     }
1476    
1477     -static struct sk_buff *mld_newpack(struct net_device *dev, int size)
1478     +static struct sk_buff *mld_newpack(struct inet6_dev *idev, int size)
1479     {
1480     + struct net_device *dev = idev->dev;
1481     struct net *net = dev_net(dev);
1482     struct sock *sk = net->ipv6.igmp_sk;
1483     struct sk_buff *skb;
1484     @@ -1360,7 +1361,7 @@ static struct sk_buff *mld_newpack(struct net_device *dev, int size)
1485    
1486     skb_reserve(skb, hlen);
1487    
1488     - if (ipv6_get_lladdr(dev, &addr_buf, IFA_F_TENTATIVE)) {
1489     + if (__ipv6_get_lladdr(idev, &addr_buf, IFA_F_TENTATIVE)) {
1490     /* <draft-ietf-magma-mld-source-05.txt>:
1491     * use unspecified address as the source address
1492     * when a valid link-local address is not available.
1493     @@ -1456,7 +1457,7 @@ static struct sk_buff *add_grhead(struct sk_buff *skb, struct ifmcaddr6 *pmc,
1494     struct mld2_grec *pgr;
1495    
1496     if (!skb)
1497     - skb = mld_newpack(dev, dev->mtu);
1498     + skb = mld_newpack(pmc->idev, dev->mtu);
1499     if (!skb)
1500     return NULL;
1501     pgr = (struct mld2_grec *)skb_put(skb, sizeof(struct mld2_grec));
1502     @@ -1476,7 +1477,8 @@ static struct sk_buff *add_grhead(struct sk_buff *skb, struct ifmcaddr6 *pmc,
1503     static struct sk_buff *add_grec(struct sk_buff *skb, struct ifmcaddr6 *pmc,
1504     int type, int gdeleted, int sdeleted)
1505     {
1506     - struct net_device *dev = pmc->idev->dev;
1507     + struct inet6_dev *idev = pmc->idev;
1508     + struct net_device *dev = idev->dev;
1509     struct mld2_report *pmr;
1510     struct mld2_grec *pgr = NULL;
1511     struct ip6_sf_list *psf, *psf_next, *psf_prev, **psf_list;
1512     @@ -1505,7 +1507,7 @@ static struct sk_buff *add_grec(struct sk_buff *skb, struct ifmcaddr6 *pmc,
1513     AVAILABLE(skb) < grec_size(pmc, type, gdeleted, sdeleted)) {
1514     if (skb)
1515     mld_sendpack(skb);
1516     - skb = mld_newpack(dev, dev->mtu);
1517     + skb = mld_newpack(idev, dev->mtu);
1518     }
1519     }
1520     first = 1;
1521     @@ -1532,7 +1534,7 @@ static struct sk_buff *add_grec(struct sk_buff *skb, struct ifmcaddr6 *pmc,
1522     pgr->grec_nsrcs = htons(scount);
1523     if (skb)
1524     mld_sendpack(skb);
1525     - skb = mld_newpack(dev, dev->mtu);
1526     + skb = mld_newpack(idev, dev->mtu);
1527     first = 1;
1528     scount = 0;
1529     }
1530     @@ -1587,8 +1589,8 @@ static void mld_send_report(struct inet6_dev *idev, struct ifmcaddr6 *pmc)
1531     struct sk_buff *skb = NULL;
1532     int type;
1533    
1534     + read_lock_bh(&idev->lock);
1535     if (!pmc) {
1536     - read_lock_bh(&idev->lock);
1537     for (pmc=idev->mc_list; pmc; pmc=pmc->next) {
1538     if (pmc->mca_flags & MAF_NOREPORT)
1539     continue;
1540     @@ -1600,7 +1602,6 @@ static void mld_send_report(struct inet6_dev *idev, struct ifmcaddr6 *pmc)
1541     skb = add_grec(skb, pmc, type, 0, 0);
1542     spin_unlock_bh(&pmc->mca_lock);
1543     }
1544     - read_unlock_bh(&idev->lock);
1545     } else {
1546     spin_lock_bh(&pmc->mca_lock);
1547     if (pmc->mca_sfcount[MCAST_EXCLUDE])
1548     @@ -1610,6 +1611,7 @@ static void mld_send_report(struct inet6_dev *idev, struct ifmcaddr6 *pmc)
1549     skb = add_grec(skb, pmc, type, 0, 0);
1550     spin_unlock_bh(&pmc->mca_lock);
1551     }
1552     + read_unlock_bh(&idev->lock);
1553     if (skb)
1554     mld_sendpack(skb);
1555     }
1556     diff --git a/net/ipv6/route.c b/net/ipv6/route.c
1557     index 5a272c6..016ed7c 100644
1558     --- a/net/ipv6/route.c
1559     +++ b/net/ipv6/route.c
1560     @@ -1032,10 +1032,13 @@ static void ip6_link_failure(struct sk_buff *skb)
1561    
1562     rt = (struct rt6_info *) skb_dst(skb);
1563     if (rt) {
1564     - if (rt->rt6i_flags & RTF_CACHE)
1565     - rt6_update_expires(rt, 0);
1566     - else if (rt->rt6i_node && (rt->rt6i_flags & RTF_DEFAULT))
1567     + if (rt->rt6i_flags & RTF_CACHE) {
1568     + dst_hold(&rt->dst);
1569     + if (ip6_del_rt(rt))
1570     + dst_free(&rt->dst);
1571     + } else if (rt->rt6i_node && (rt->rt6i_flags & RTF_DEFAULT)) {
1572     rt->rt6i_node->fn_sernum = -1;
1573     + }
1574     }
1575     }
1576    
1577     diff --git a/net/ipv6/udp.c b/net/ipv6/udp.c
1578     index aa2f18b..f79bfdb 100644
1579     --- a/net/ipv6/udp.c
1580     +++ b/net/ipv6/udp.c
1581     @@ -895,11 +895,16 @@ static int udp_v6_push_pending_frames(struct sock *sk)
1582     struct udphdr *uh;
1583     struct udp_sock *up = udp_sk(sk);
1584     struct inet_sock *inet = inet_sk(sk);
1585     - struct flowi6 *fl6 = &inet->cork.fl.u.ip6;
1586     + struct flowi6 *fl6;
1587     int err = 0;
1588     int is_udplite = IS_UDPLITE(sk);
1589     __wsum csum = 0;
1590    
1591     + if (up->pending == AF_INET)
1592     + return udp_push_pending_frames(sk);
1593     +
1594     + fl6 = &inet->cork.fl.u.ip6;
1595     +
1596     /* Grab the skbuff where UDP header space exists. */
1597     if ((skb = skb_peek(&sk->sk_write_queue)) == NULL)
1598     goto out;
1599     diff --git a/net/key/af_key.c b/net/key/af_key.c
1600     index 7e5d927..5bbab6a 100644
1601     --- a/net/key/af_key.c
1602     +++ b/net/key/af_key.c
1603     @@ -1705,6 +1705,7 @@ static int key_notify_sa_flush(const struct km_event *c)
1604     hdr->sadb_msg_version = PF_KEY_V2;
1605     hdr->sadb_msg_errno = (uint8_t) 0;
1606     hdr->sadb_msg_len = (sizeof(struct sadb_msg) / sizeof(uint64_t));
1607     + hdr->sadb_msg_reserved = 0;
1608    
1609     pfkey_broadcast(skb, GFP_ATOMIC, BROADCAST_ALL, NULL, c->net);
1610    
1611     @@ -2686,6 +2687,7 @@ static int key_notify_policy_flush(const struct km_event *c)
1612     hdr->sadb_msg_version = PF_KEY_V2;
1613     hdr->sadb_msg_errno = (uint8_t) 0;
1614     hdr->sadb_msg_len = (sizeof(struct sadb_msg) / sizeof(uint64_t));
1615     + hdr->sadb_msg_reserved = 0;
1616     pfkey_broadcast(skb_out, GFP_ATOMIC, BROADCAST_ALL, NULL, c->net);
1617     return 0;
1618    
1619     diff --git a/net/l2tp/l2tp_ppp.c b/net/l2tp/l2tp_ppp.c
1620     index c6dee80..b2982f4 100644
1621     --- a/net/l2tp/l2tp_ppp.c
1622     +++ b/net/l2tp/l2tp_ppp.c
1623     @@ -1778,7 +1778,8 @@ static const struct proto_ops pppol2tp_ops = {
1624    
1625     static const struct pppox_proto pppol2tp_proto = {
1626     .create = pppol2tp_create,
1627     - .ioctl = pppol2tp_ioctl
1628     + .ioctl = pppol2tp_ioctl,
1629     + .owner = THIS_MODULE,
1630     };
1631    
1632     #ifdef CONFIG_L2TP_V3
1633     diff --git a/net/x25/af_x25.c b/net/x25/af_x25.c
1634     index a306bc6..b943e3e 100644
1635     --- a/net/x25/af_x25.c
1636     +++ b/net/x25/af_x25.c
1637     @@ -1586,11 +1586,11 @@ out_cud_release:
1638     case SIOCX25CALLACCPTAPPRV: {
1639     rc = -EINVAL;
1640     lock_sock(sk);
1641     - if (sk->sk_state != TCP_CLOSE)
1642     - break;
1643     - clear_bit(X25_ACCPT_APPRV_FLAG, &x25->flags);
1644     + if (sk->sk_state == TCP_CLOSE) {
1645     + clear_bit(X25_ACCPT_APPRV_FLAG, &x25->flags);
1646     + rc = 0;
1647     + }
1648     release_sock(sk);
1649     - rc = 0;
1650     break;
1651     }
1652    
1653     @@ -1598,14 +1598,15 @@ out_cud_release:
1654     rc = -EINVAL;
1655     lock_sock(sk);
1656     if (sk->sk_state != TCP_ESTABLISHED)
1657     - break;
1658     + goto out_sendcallaccpt_release;
1659     /* must call accptapprv above */
1660     if (test_bit(X25_ACCPT_APPRV_FLAG, &x25->flags))
1661     - break;
1662     + goto out_sendcallaccpt_release;
1663     x25_write_internal(sk, X25_CALL_ACCEPTED);
1664     x25->state = X25_STATE_3;
1665     - release_sock(sk);
1666     rc = 0;
1667     +out_sendcallaccpt_release:
1668     + release_sock(sk);
1669     break;
1670     }
1671    
1672     diff --git a/sound/soc/codecs/sgtl5000.h b/sound/soc/codecs/sgtl5000.h
1673     index 8a9f435..d3a68bb 100644
1674     --- a/sound/soc/codecs/sgtl5000.h
1675     +++ b/sound/soc/codecs/sgtl5000.h
1676     @@ -347,7 +347,7 @@
1677     #define SGTL5000_PLL_INT_DIV_MASK 0xf800
1678     #define SGTL5000_PLL_INT_DIV_SHIFT 11
1679     #define SGTL5000_PLL_INT_DIV_WIDTH 5
1680     -#define SGTL5000_PLL_FRAC_DIV_MASK 0x0700
1681     +#define SGTL5000_PLL_FRAC_DIV_MASK 0x07ff
1682     #define SGTL5000_PLL_FRAC_DIV_SHIFT 0
1683     #define SGTL5000_PLL_FRAC_DIV_WIDTH 11
1684    
1685     diff --git a/sound/usb/6fire/pcm.c b/sound/usb/6fire/pcm.c
1686     index c97d05f..4da9ca9 100644
1687     --- a/sound/usb/6fire/pcm.c
1688     +++ b/sound/usb/6fire/pcm.c
1689     @@ -540,7 +540,7 @@ static snd_pcm_uframes_t usb6fire_pcm_pointer(
1690     snd_pcm_uframes_t ret;
1691    
1692     if (rt->panic || !sub)
1693     - return SNDRV_PCM_STATE_XRUN;
1694     + return SNDRV_PCM_POS_XRUN;
1695    
1696     spin_lock_irqsave(&sub->lock, flags);
1697     ret = sub->dma_off;