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