Magellan Linux

Annotation of /trunk/kernel-alx/patches-3.10/0162-3.10.63-all-fixes.patch

Parent Directory Parent Directory | Revision Log Revision Log


Revision 2650 - (hide annotations) (download)
Tue Jul 21 16:20:21 2015 UTC (8 years, 9 months ago) by niro
File size: 16564 byte(s)
-linux-3.10.63
1 niro 2650 diff --git a/Makefile b/Makefile
2     index a0b86250d6ca..9383fe24baa9 100644
3     --- a/Makefile
4     +++ b/Makefile
5     @@ -1,6 +1,6 @@
6     VERSION = 3
7     PATCHLEVEL = 10
8     -SUBLEVEL = 62
9     +SUBLEVEL = 63
10     EXTRAVERSION =
11     NAME = TOSSUG Baby Fish
12    
13     diff --git a/arch/arm/kernel/sched_clock.c b/arch/arm/kernel/sched_clock.c
14     index e8edcaa0e432..a57cc5d33540 100644
15     --- a/arch/arm/kernel/sched_clock.c
16     +++ b/arch/arm/kernel/sched_clock.c
17     @@ -51,10 +51,11 @@ static inline u64 notrace cyc_to_ns(u64 cyc, u32 mult, u32 shift)
18     return (cyc * mult) >> shift;
19     }
20    
21     -static unsigned long long notrace cyc_to_sched_clock(u32 cyc, u32 mask)
22     +static unsigned long long notrace sched_clock_32(void)
23     {
24     u64 epoch_ns;
25     u32 epoch_cyc;
26     + u32 cyc;
27    
28     if (cd.suspended)
29     return cd.epoch_ns;
30     @@ -73,7 +74,9 @@ static unsigned long long notrace cyc_to_sched_clock(u32 cyc, u32 mask)
31     smp_rmb();
32     } while (epoch_cyc != cd.epoch_cyc_copy);
33    
34     - return epoch_ns + cyc_to_ns((cyc - epoch_cyc) & mask, cd.mult, cd.shift);
35     + cyc = read_sched_clock();
36     + cyc = (cyc - epoch_cyc) & sched_clock_mask;
37     + return epoch_ns + cyc_to_ns(cyc, cd.mult, cd.shift);
38     }
39    
40     /*
41     @@ -165,12 +168,6 @@ void __init setup_sched_clock(u32 (*read)(void), int bits, unsigned long rate)
42     pr_debug("Registered %pF as sched_clock source\n", read);
43     }
44    
45     -static unsigned long long notrace sched_clock_32(void)
46     -{
47     - u32 cyc = read_sched_clock();
48     - return cyc_to_sched_clock(cyc, sched_clock_mask);
49     -}
50     -
51     unsigned long long __read_mostly (*sched_clock_func)(void) = sched_clock_32;
52    
53     unsigned long long notrace sched_clock(void)
54     diff --git a/arch/powerpc/kernel/vdso32/getcpu.S b/arch/powerpc/kernel/vdso32/getcpu.S
55     index 47afd08c90f7..fe7e97a1aad9 100644
56     --- a/arch/powerpc/kernel/vdso32/getcpu.S
57     +++ b/arch/powerpc/kernel/vdso32/getcpu.S
58     @@ -30,8 +30,8 @@
59     V_FUNCTION_BEGIN(__kernel_getcpu)
60     .cfi_startproc
61     mfspr r5,SPRN_USPRG3
62     - cmpdi cr0,r3,0
63     - cmpdi cr1,r4,0
64     + cmpwi cr0,r3,0
65     + cmpwi cr1,r4,0
66     clrlwi r6,r5,16
67     rlwinm r7,r5,16,31-15,31-0
68     beq cr0,1f
69     diff --git a/arch/x86/include/uapi/asm/vmx.h b/arch/x86/include/uapi/asm/vmx.h
70     index d651082c7cf7..7a34e8fe54bd 100644
71     --- a/arch/x86/include/uapi/asm/vmx.h
72     +++ b/arch/x86/include/uapi/asm/vmx.h
73     @@ -65,6 +65,7 @@
74     #define EXIT_REASON_EOI_INDUCED 45
75     #define EXIT_REASON_EPT_VIOLATION 48
76     #define EXIT_REASON_EPT_MISCONFIG 49
77     +#define EXIT_REASON_INVEPT 50
78     #define EXIT_REASON_PREEMPTION_TIMER 52
79     #define EXIT_REASON_WBINVD 54
80     #define EXIT_REASON_XSETBV 55
81     diff --git a/arch/x86/kvm/vmx.c b/arch/x86/kvm/vmx.c
82     index 51139ff34917..7112be5f1eaf 100644
83     --- a/arch/x86/kvm/vmx.c
84     +++ b/arch/x86/kvm/vmx.c
85     @@ -6242,6 +6242,12 @@ static int handle_vmptrst(struct kvm_vcpu *vcpu)
86     return 1;
87     }
88    
89     +static int handle_invept(struct kvm_vcpu *vcpu)
90     +{
91     + kvm_queue_exception(vcpu, UD_VECTOR);
92     + return 1;
93     +}
94     +
95     /*
96     * The exit handlers return 1 if the exit was handled fully and guest execution
97     * may resume. Otherwise they set the kvm_run parameter to indicate what needs
98     @@ -6286,6 +6292,7 @@ static int (*const kvm_vmx_exit_handlers[])(struct kvm_vcpu *vcpu) = {
99     [EXIT_REASON_PAUSE_INSTRUCTION] = handle_pause,
100     [EXIT_REASON_MWAIT_INSTRUCTION] = handle_invalid_op,
101     [EXIT_REASON_MONITOR_INSTRUCTION] = handle_invalid_op,
102     + [EXIT_REASON_INVEPT] = handle_invept,
103     };
104    
105     static const int kvm_vmx_max_exit_handlers =
106     @@ -6512,6 +6519,7 @@ static bool nested_vmx_exit_handled(struct kvm_vcpu *vcpu)
107     case EXIT_REASON_VMPTRST: case EXIT_REASON_VMREAD:
108     case EXIT_REASON_VMRESUME: case EXIT_REASON_VMWRITE:
109     case EXIT_REASON_VMOFF: case EXIT_REASON_VMON:
110     + case EXIT_REASON_INVEPT:
111     /*
112     * VMX instructions trap unconditionally. This allows L1 to
113     * emulate them for its L2 guest, i.e., allows 3-level nesting!
114     diff --git a/drivers/ata/ahci.c b/drivers/ata/ahci.c
115     index 64150a9ffff3..9064a2f2760c 100644
116     --- a/drivers/ata/ahci.c
117     +++ b/drivers/ata/ahci.c
118     @@ -320,6 +320,9 @@ static const struct pci_device_id ahci_pci_tbl[] = {
119     { PCI_VDEVICE(INTEL, 0x8c87), board_ahci }, /* 9 Series RAID */
120     { PCI_VDEVICE(INTEL, 0x8c8e), board_ahci }, /* 9 Series RAID */
121     { PCI_VDEVICE(INTEL, 0x8c8f), board_ahci }, /* 9 Series RAID */
122     + { PCI_VDEVICE(INTEL, 0x9d03), board_ahci }, /* Sunrise Point-LP AHCI */
123     + { PCI_VDEVICE(INTEL, 0x9d05), board_ahci }, /* Sunrise Point-LP RAID */
124     + { PCI_VDEVICE(INTEL, 0x9d07), board_ahci }, /* Sunrise Point-LP RAID */
125     { PCI_VDEVICE(INTEL, 0xa103), board_ahci }, /* Sunrise Point-H AHCI */
126     { PCI_VDEVICE(INTEL, 0xa103), board_ahci }, /* Sunrise Point-H RAID */
127     { PCI_VDEVICE(INTEL, 0xa105), board_ahci }, /* Sunrise Point-H RAID */
128     @@ -491,6 +494,7 @@ static const struct pci_device_id ahci_pci_tbl[] = {
129     * enabled. https://bugzilla.kernel.org/show_bug.cgi?id=60731
130     */
131     { PCI_VDEVICE(SAMSUNG, 0x1600), board_ahci_nomsi },
132     + { PCI_VDEVICE(SAMSUNG, 0xa800), board_ahci_nomsi },
133    
134     /* Enmotus */
135     { PCI_DEVICE(0x1c44, 0x8000), board_ahci },
136     diff --git a/drivers/ata/sata_fsl.c b/drivers/ata/sata_fsl.c
137     index 8401061b4040..38a2389f5b1b 100644
138     --- a/drivers/ata/sata_fsl.c
139     +++ b/drivers/ata/sata_fsl.c
140     @@ -1501,7 +1501,7 @@ static int sata_fsl_probe(struct platform_device *ofdev)
141     host_priv->csr_base = csr_base;
142    
143     irq = irq_of_parse_and_map(ofdev->dev.of_node, 0);
144     - if (irq < 0) {
145     + if (!irq) {
146     dev_err(&ofdev->dev, "invalid irq from platform\n");
147     goto error_exit_with_cleanup;
148     }
149     diff --git a/drivers/gpu/drm/i915/intel_lvds.c b/drivers/gpu/drm/i915/intel_lvds.c
150     index 08e8e18b3f85..f5d1dc5b5563 100644
151     --- a/drivers/gpu/drm/i915/intel_lvds.c
152     +++ b/drivers/gpu/drm/i915/intel_lvds.c
153     @@ -1097,6 +1097,17 @@ bool intel_lvds_init(struct drm_device *dev)
154     int pipe;
155     u8 pin;
156    
157     + /*
158     + * Unlock registers and just leave them unlocked. Do this before
159     + * checking quirk lists to avoid bogus WARNINGs.
160     + */
161     + if (HAS_PCH_SPLIT(dev)) {
162     + I915_WRITE(PCH_PP_CONTROL,
163     + I915_READ(PCH_PP_CONTROL) | PANEL_UNLOCK_REGS);
164     + } else {
165     + I915_WRITE(PP_CONTROL,
166     + I915_READ(PP_CONTROL) | PANEL_UNLOCK_REGS);
167     + }
168     if (!intel_lvds_supported(dev))
169     return false;
170    
171     @@ -1280,17 +1291,6 @@ out:
172     DRM_DEBUG_KMS("detected %s-link lvds configuration\n",
173     lvds_encoder->is_dual_link ? "dual" : "single");
174    
175     - /*
176     - * Unlock registers and just
177     - * leave them unlocked
178     - */
179     - if (HAS_PCH_SPLIT(dev)) {
180     - I915_WRITE(PCH_PP_CONTROL,
181     - I915_READ(PCH_PP_CONTROL) | PANEL_UNLOCK_REGS);
182     - } else {
183     - I915_WRITE(PP_CONTROL,
184     - I915_READ(PP_CONTROL) | PANEL_UNLOCK_REGS);
185     - }
186     lvds_connector->lid_notifier.notifier_call = intel_lid_notify;
187     if (acpi_lid_notifier_register(&lvds_connector->lid_notifier)) {
188     DRM_DEBUG_KMS("lid notifier registration failed\n");
189     diff --git a/drivers/gpu/drm/radeon/radeon_kms.c b/drivers/gpu/drm/radeon/radeon_kms.c
190     index 1113e8f69137..2c3c4c58a765 100644
191     --- a/drivers/gpu/drm/radeon/radeon_kms.c
192     +++ b/drivers/gpu/drm/radeon/radeon_kms.c
193     @@ -666,6 +666,8 @@ int radeon_get_vblank_timestamp_kms(struct drm_device *dev, int crtc,
194    
195     /* Get associated drm_crtc: */
196     drmcrtc = &rdev->mode_info.crtcs[crtc]->base;
197     + if (!drmcrtc)
198     + return -EINVAL;
199    
200     /* Helper routine in DRM core does all the work: */
201     return drm_calc_vbltimestamp_from_scanoutpos(dev, crtc, max_error,
202     diff --git a/drivers/i2c/busses/i2c-davinci.c b/drivers/i2c/busses/i2c-davinci.c
203     index cf20e06a88e1..09f29e92095a 100644
204     --- a/drivers/i2c/busses/i2c-davinci.c
205     +++ b/drivers/i2c/busses/i2c-davinci.c
206     @@ -414,11 +414,9 @@ i2c_davinci_xfer_msg(struct i2c_adapter *adap, struct i2c_msg *msg, int stop)
207     if (dev->cmd_err & DAVINCI_I2C_STR_NACK) {
208     if (msg->flags & I2C_M_IGNORE_NAK)
209     return msg->len;
210     - if (stop) {
211     - w = davinci_i2c_read_reg(dev, DAVINCI_I2C_MDR_REG);
212     - w |= DAVINCI_I2C_MDR_STP;
213     - davinci_i2c_write_reg(dev, DAVINCI_I2C_MDR_REG, w);
214     - }
215     + w = davinci_i2c_read_reg(dev, DAVINCI_I2C_MDR_REG);
216     + w |= DAVINCI_I2C_MDR_STP;
217     + davinci_i2c_write_reg(dev, DAVINCI_I2C_MDR_REG, w);
218     return -EREMOTEIO;
219     }
220     return -EIO;
221     diff --git a/drivers/i2c/busses/i2c-omap.c b/drivers/i2c/busses/i2c-omap.c
222     index b06be8e3bb76..7645924f9f8b 100644
223     --- a/drivers/i2c/busses/i2c-omap.c
224     +++ b/drivers/i2c/busses/i2c-omap.c
225     @@ -928,14 +928,12 @@ omap_i2c_isr_thread(int this_irq, void *dev_id)
226     if (stat & OMAP_I2C_STAT_NACK) {
227     err |= OMAP_I2C_STAT_NACK;
228     omap_i2c_ack_stat(dev, OMAP_I2C_STAT_NACK);
229     - break;
230     }
231    
232     if (stat & OMAP_I2C_STAT_AL) {
233     dev_err(dev->dev, "Arbitration lost\n");
234     err |= OMAP_I2C_STAT_AL;
235     omap_i2c_ack_stat(dev, OMAP_I2C_STAT_AL);
236     - break;
237     }
238    
239     /*
240     @@ -960,11 +958,13 @@ omap_i2c_isr_thread(int this_irq, void *dev_id)
241     if (dev->fifo_size)
242     num_bytes = dev->buf_len;
243    
244     - omap_i2c_receive_data(dev, num_bytes, true);
245     -
246     - if (dev->errata & I2C_OMAP_ERRATA_I207)
247     + if (dev->errata & I2C_OMAP_ERRATA_I207) {
248     i2c_omap_errata_i207(dev, stat);
249     + num_bytes = (omap_i2c_read_reg(dev,
250     + OMAP_I2C_BUFSTAT_REG) >> 8) & 0x3F;
251     + }
252    
253     + omap_i2c_receive_data(dev, num_bytes, true);
254     omap_i2c_ack_stat(dev, OMAP_I2C_STAT_RDR);
255     continue;
256     }
257     diff --git a/drivers/media/i2c/smiapp/smiapp-core.c b/drivers/media/i2c/smiapp/smiapp-core.c
258     index cae4f4683851..b280216de31b 100644
259     --- a/drivers/media/i2c/smiapp/smiapp-core.c
260     +++ b/drivers/media/i2c/smiapp/smiapp-core.c
261     @@ -2139,7 +2139,7 @@ static int smiapp_set_selection(struct v4l2_subdev *subdev,
262     ret = smiapp_set_compose(subdev, fh, sel);
263     break;
264     default:
265     - BUG();
266     + ret = -EINVAL;
267     }
268    
269     mutex_unlock(&sensor->mutex);
270     diff --git a/drivers/net/ethernet/broadcom/tg3.c b/drivers/net/ethernet/broadcom/tg3.c
271     index 3de4069f020e..5501cad30cfa 100644
272     --- a/drivers/net/ethernet/broadcom/tg3.c
273     +++ b/drivers/net/ethernet/broadcom/tg3.c
274     @@ -8392,7 +8392,8 @@ static int tg3_init_rings(struct tg3 *tp)
275     if (tnapi->rx_rcb)
276     memset(tnapi->rx_rcb, 0, TG3_RX_RCB_RING_BYTES(tp));
277    
278     - if (tg3_rx_prodring_alloc(tp, &tnapi->prodring)) {
279     + if (tnapi->prodring.rx_std &&
280     + tg3_rx_prodring_alloc(tp, &tnapi->prodring)) {
281     tg3_free_rings(tp);
282     return -ENOMEM;
283     }
284     diff --git a/drivers/net/ethernet/intel/igb/igb_main.c b/drivers/net/ethernet/intel/igb/igb_main.c
285     index 4d3c8122e2aa..3f342fbe9ccf 100644
286     --- a/drivers/net/ethernet/intel/igb/igb_main.c
287     +++ b/drivers/net/ethernet/intel/igb/igb_main.c
288     @@ -1584,6 +1584,8 @@ void igb_power_up_link(struct igb_adapter *adapter)
289     igb_power_up_phy_copper(&adapter->hw);
290     else
291     igb_power_up_serdes_link_82575(&adapter->hw);
292     +
293     + igb_setup_link(&adapter->hw);
294     }
295    
296     /**
297     diff --git a/drivers/net/ethernet/marvell/mvneta.c b/drivers/net/ethernet/marvell/mvneta.c
298     index f8821ce27802..8b6c9237eda4 100644
299     --- a/drivers/net/ethernet/marvell/mvneta.c
300     +++ b/drivers/net/ethernet/marvell/mvneta.c
301     @@ -210,7 +210,7 @@
302     /* Various constants */
303    
304     /* Coalescing */
305     -#define MVNETA_TXDONE_COAL_PKTS 16
306     +#define MVNETA_TXDONE_COAL_PKTS 1
307     #define MVNETA_RX_COAL_PKTS 32
308     #define MVNETA_RX_COAL_USEC 100
309    
310     diff --git a/drivers/net/ethernet/mellanox/mlx4/resource_tracker.c b/drivers/net/ethernet/mellanox/mlx4/resource_tracker.c
311     index 1157f028a90f..6cc808865e95 100644
312     --- a/drivers/net/ethernet/mellanox/mlx4/resource_tracker.c
313     +++ b/drivers/net/ethernet/mellanox/mlx4/resource_tracker.c
314     @@ -1207,7 +1207,7 @@ static int qp_alloc_res(struct mlx4_dev *dev, int slave, int op, int cmd,
315    
316     switch (op) {
317     case RES_OP_RESERVE:
318     - count = get_param_l(&in_param);
319     + count = get_param_l(&in_param) & 0xffffff;
320     align = get_param_h(&in_param);
321     err = __mlx4_qp_reserve_range(dev, count, align, &base);
322     if (err)
323     diff --git a/drivers/net/xen-netfront.c b/drivers/net/xen-netfront.c
324     index 82e0f1fd2254..a1db958df4a4 100644
325     --- a/drivers/net/xen-netfront.c
326     +++ b/drivers/net/xen-netfront.c
327     @@ -459,9 +459,6 @@ static void xennet_make_frags(struct sk_buff *skb, struct net_device *dev,
328     len = skb_frag_size(frag);
329     offset = frag->page_offset;
330    
331     - /* Data must not cross a page boundary. */
332     - BUG_ON(len + offset > PAGE_SIZE<<compound_order(page));
333     -
334     /* Skip unused frames from start of page */
335     page += offset >> PAGE_SHIFT;
336     offset &= ~PAGE_MASK;
337     @@ -469,8 +466,6 @@ static void xennet_make_frags(struct sk_buff *skb, struct net_device *dev,
338     while (len > 0) {
339     unsigned long bytes;
340    
341     - BUG_ON(offset >= PAGE_SIZE);
342     -
343     bytes = PAGE_SIZE - offset;
344     if (bytes > len)
345     bytes = len;
346     diff --git a/fs/ext2/super.c b/fs/ext2/super.c
347     index 288534920fe5..20d6697bd638 100644
348     --- a/fs/ext2/super.c
349     +++ b/fs/ext2/super.c
350     @@ -1493,6 +1493,7 @@ static ssize_t ext2_quota_write(struct super_block *sb, int type,
351     sb->s_blocksize - offset : towrite;
352    
353     tmp_bh.b_state = 0;
354     + tmp_bh.b_size = sb->s_blocksize;
355     err = ext2_get_block(inode, blk, &tmp_bh, 1);
356     if (err < 0)
357     goto out;
358     diff --git a/mm/frontswap.c b/mm/frontswap.c
359     index 1b24bdcb3197..a55036a68487 100644
360     --- a/mm/frontswap.c
361     +++ b/mm/frontswap.c
362     @@ -244,8 +244,10 @@ int __frontswap_store(struct page *page)
363     the (older) page from frontswap
364     */
365     inc_frontswap_failed_stores();
366     - if (dup)
367     + if (dup) {
368     __frontswap_clear(sis, offset);
369     + frontswap_ops->invalidate_page(type, offset);
370     + }
371     }
372     if (frontswap_writethrough_enabled)
373     /* report failure so swap also writes to swap device */
374     diff --git a/mm/memory.c b/mm/memory.c
375     index 0984f398d746..0926ccd04d7a 100644
376     --- a/mm/memory.c
377     +++ b/mm/memory.c
378     @@ -834,20 +834,20 @@ copy_one_pte(struct mm_struct *dst_mm, struct mm_struct *src_mm,
379     if (!pte_file(pte)) {
380     swp_entry_t entry = pte_to_swp_entry(pte);
381    
382     - if (swap_duplicate(entry) < 0)
383     - return entry.val;
384     -
385     - /* make sure dst_mm is on swapoff's mmlist. */
386     - if (unlikely(list_empty(&dst_mm->mmlist))) {
387     - spin_lock(&mmlist_lock);
388     - if (list_empty(&dst_mm->mmlist))
389     - list_add(&dst_mm->mmlist,
390     - &src_mm->mmlist);
391     - spin_unlock(&mmlist_lock);
392     - }
393     - if (likely(!non_swap_entry(entry)))
394     + if (likely(!non_swap_entry(entry))) {
395     + if (swap_duplicate(entry) < 0)
396     + return entry.val;
397     +
398     + /* make sure dst_mm is on swapoff's mmlist. */
399     + if (unlikely(list_empty(&dst_mm->mmlist))) {
400     + spin_lock(&mmlist_lock);
401     + if (list_empty(&dst_mm->mmlist))
402     + list_add(&dst_mm->mmlist,
403     + &src_mm->mmlist);
404     + spin_unlock(&mmlist_lock);
405     + }
406     rss[MM_SWAPENTS]++;
407     - else if (is_migration_entry(entry)) {
408     + } else if (is_migration_entry(entry)) {
409     page = migration_entry_to_page(entry);
410    
411     if (PageAnon(page))
412     diff --git a/net/core/rtnetlink.c b/net/core/rtnetlink.c
413     index ae43dd807bb2..25c4dd563a79 100644
414     --- a/net/core/rtnetlink.c
415     +++ b/net/core/rtnetlink.c
416     @@ -1318,6 +1318,7 @@ static int do_setlink(const struct sk_buff *skb,
417     goto errout;
418     }
419     if (!netlink_ns_capable(skb, net->user_ns, CAP_NET_ADMIN)) {
420     + put_net(net);
421     err = -EPERM;
422     goto errout;
423     }
424     diff --git a/net/ipv6/ip6_gre.c b/net/ipv6/ip6_gre.c
425     index 6c20f4731f1a..65156a73b3f3 100644
426     --- a/net/ipv6/ip6_gre.c
427     +++ b/net/ipv6/ip6_gre.c
428     @@ -512,11 +512,11 @@ static int ip6gre_rcv(struct sk_buff *skb)
429    
430     skb->protocol = gre_proto;
431     /* WCCP version 1 and 2 protocol decoding.
432     - * - Change protocol to IP
433     + * - Change protocol to IPv6
434     * - When dealing with WCCPv2, Skip extra 4 bytes in GRE header
435     */
436     if (flags == 0 && gre_proto == htons(ETH_P_WCCP)) {
437     - skb->protocol = htons(ETH_P_IP);
438     + skb->protocol = htons(ETH_P_IPV6);
439     if ((*(h + offset) & 0xF0) != 0x40)
440     offset += 4;
441     }
442     diff --git a/net/sctp/output.c b/net/sctp/output.c
443     index b6f5fc3127b9..73b8ca51ba14 100644
444     --- a/net/sctp/output.c
445     +++ b/net/sctp/output.c
446     @@ -413,12 +413,12 @@ int sctp_packet_transmit(struct sctp_packet *packet)
447     sk = chunk->skb->sk;
448    
449     /* Allocate the new skb. */
450     - nskb = alloc_skb(packet->size + LL_MAX_HEADER, GFP_ATOMIC);
451     + nskb = alloc_skb(packet->size + MAX_HEADER, GFP_ATOMIC);
452     if (!nskb)
453     goto nomem;
454    
455     /* Make sure the outbound skb has enough header room reserved. */
456     - skb_reserve(nskb, packet->overhead + LL_MAX_HEADER);
457     + skb_reserve(nskb, packet->overhead + MAX_HEADER);
458    
459     /* Set the owning socket so that we know where to get the
460     * destination IP address.
461     diff --git a/sound/usb/midi.c b/sound/usb/midi.c
462     index 8e01fa4991c5..93249133aeec 100644
463     --- a/sound/usb/midi.c
464     +++ b/sound/usb/midi.c
465     @@ -364,6 +364,8 @@ static void snd_usbmidi_error_timer(unsigned long data)
466     if (in && in->error_resubmit) {
467     in->error_resubmit = 0;
468     for (j = 0; j < INPUT_URBS; ++j) {
469     + if (atomic_read(&in->urbs[j]->use_count))
470     + continue;
471     in->urbs[j]->dev = umidi->dev;
472     snd_usbmidi_submit_urb(in->urbs[j], GFP_ATOMIC);
473     }