Chris Leech
e09056b25c
[SCSI] fnic: BUG: sleeping function called from invalid context during probe
...
I hit this during driver probe with the latest fnic updates (this trace
is from a backport into a distro kernel, but the issue is the same).
> BUG: sleeping function called from invalid context at mm/slab.c:3113
> in_atomic(): 0, irqs_disabled(): 1, pid: 610, name: work_for_cpu
> INFO: lockdep is turned off.
> irq event stamp: 0
> hardirqs last enabled at (0): [<(null)>] (null)
> hardirqs last disabled at (0): [<ffffffff81070aa5>]
> copy_process+0x5e5/0x1670
> softirqs last enabled at (0): [<ffffffff81070aa5>]
> copy_process+0x5e5/0x1670
> softirqs last disabled at (0): [<(null)>] (null)
> Pid: 610, comm: work_for_cpu Not tainted
> Call Trace:
> [<ffffffff810b2d10>] ? print_irqtrace_events+0xd0/0xe0
> [<ffffffff8105c1a7>] ? __might_sleep+0xf7/0x130
> [<ffffffff81184efb>] ? kmem_cache_alloc_trace+0x20b/0x2d0
> [<ffffffff8109709e>] ? __create_workqueue_key+0x3e/0x1d0
> [<ffffffff8109709e>] ? __create_workqueue_key+0x3e/0x1d0
> [<ffffffffa00c101c>] ? fnic_probe+0x977/0x11aa [fnic]
> [<ffffffffa00c1048>] ? fnic_probe+0x9a3/0x11aa [fnic]
> [<ffffffff81096f00>] ? do_work_for_cpu+0x0/0x30
> [<ffffffff812c6da7>] ? local_pci_probe+0x17/0x20
> [<ffffffff81096f18>] ? do_work_for_cpu+0x18/0x30
> [<ffffffff8109cdc6>] ? kthread+0x96/0xa0
> [<ffffffff8100c1ca>] ? child_rip+0xa/0x20
> [<ffffffff81550f80>] ? _spin_unlock_irq+0x30/0x40
> [<ffffffff8100bb10>] ? restore_args+0x0/0x30
> [<ffffffff8109cd30>] ? kthread+0x0/0xa0
> [<ffffffff8100c1c0>] ? child_rip+0x0/0x20
The problem is in this hunk of "FIP VLAN Discovery Feature Support"
(d3c995f1dcf938f1084388d92b8fb97bec366566)
create_singlethreaded_workqueue cannot be called with irqs disabled
@@ -620,7 +634,29 @@ static int __devinit fnic_probe(struct pci_dev
*pdev,
vnic_dev_packet_filter(fnic->vdev, 1, 1, 0, 0, 0);
vnic_dev_add_addr(fnic->vdev, FIP_ALL_ENODE_MACS);
vnic_dev_add_addr(fnic->vdev, fnic->ctlr.ctl_src_addr);
+ fnic->set_vlan = fnic_set_vlan;
fcoe_ctlr_init(&fnic->ctlr, FIP_MODE_AUTO);
+ setup_timer(&fnic->fip_timer, fnic_fip_notify_timer,
+ (unsigned long)fnic);
+ spin_lock_init(&fnic->vlans_lock);
+ INIT_WORK(&fnic->fip_frame_work, fnic_handle_fip_frame);
+ INIT_WORK(&fnic->event_work, fnic_handle_event);
+ skb_queue_head_init(&fnic->fip_frame_queue);
+ spin_lock_irqsave(&fnic_list_lock, flags);
+ if (!fnic_fip_queue) {
+ fnic_fip_queue =
+ create_singlethread_workqueue("fnic_fip_q");
+ if (!fnic_fip_queue) {
+ spin_unlock_irqrestore(&fnic_list_lock, flags);
+ printk(KERN_ERR PFX "fnic FIP work queue "
+ "create failed\n");
+ err = -ENOMEM;
+ goto err_out_free_max_pool;
+ }
+ }
+ spin_unlock_irqrestore(&fnic_list_lock, flags);
+ INIT_LIST_HEAD(&fnic->evlist);
+ INIT_LIST_HEAD(&fnic->vlans);
} else {
shost_printk(KERN_INFO, fnic->lport->host,
"firmware uses non-FIP mode\n");
The attempts to make fnic_fip_queue a single instance for the driver
while it's being created in probe look awkward anyway, why is this not
created in fnic_init_module like the event workqueue?
Signed-off-by: Chris Leech <cleech@redhat.com>
Tested-by: Anantha Tungarakodi <atungara@cisco.com>
Acked-by: Hiral Patel <hiralpat@cisco.com>
Signed-off-by: James Bottomley <JBottomley@Parallels.com>
2013-08-02 13:16:38 -07:00
..
2013-07-04 12:30:30 -07:00
2013-04-09 14:13:26 -04:00
2013-05-28 12:02:12 +02:00
2013-06-04 11:15:59 -07:00
2012-08-20 14:51:24 -07:00
2013-04-09 14:13:27 -04:00
2013-07-03 16:07:41 -07:00
2013-07-04 12:30:30 -07:00
2013-05-02 07:32:26 -07:00
2013-04-24 16:43:00 +02:00
2013-06-04 11:16:28 -07:00
2013-07-09 18:24:39 -07:00
2013-04-11 16:00:31 -07:00
2011-07-26 16:49:47 -07:00
2013-07-13 17:41:21 -07:00
2013-08-02 13:16:38 -07:00
2013-05-02 11:58:18 -07:00
2013-07-24 14:18:12 -07:00
2013-07-13 08:22:56 +04:00
2013-06-04 11:15:59 -07:00
2013-07-04 12:30:30 -07:00
2013-08-02 13:01:29 -07:00
2013-06-24 12:55:34 -07:00
2013-07-09 09:01:47 +01:00
2013-07-23 15:23:08 -07:00
2013-07-03 16:07:25 -07:00
2013-04-09 14:13:21 -04:00
2013-07-05 22:42:43 +01:00
2013-07-23 07:23:47 -07:00
2013-07-03 16:07:41 -07:00
2013-04-09 14:13:15 -04:00
2013-06-28 13:17:35 -07:00
2013-02-22 23:31:31 -05:00
2011-03-31 11:26:23 -03:00
2013-02-22 23:31:31 -05:00
2013-06-24 16:32:22 -07:00
2011-03-31 11:26:23 -03:00
2011-03-31 11:26:23 -03:00
2012-03-28 18:30:03 +01:00
2011-03-31 11:26:23 -03:00
2013-01-03 15:57:01 -08:00
2013-04-09 14:13:15 -04:00
2013-06-24 19:44:18 +02:00
2013-06-24 19:44:18 +02:00
2013-04-09 14:13:22 -04:00
2013-04-09 14:13:22 -04:00
2012-06-28 11:44:36 +02:00
2013-04-09 14:13:23 -04:00
2013-04-09 14:13:28 -04:00
2013-04-09 14:13:29 -04:00
2013-04-09 14:13:29 -04:00
2013-04-09 14:13:29 -04:00
2013-04-09 14:13:24 -04:00
2013-06-26 18:32:47 -07:00
2013-06-26 18:32:47 -07:00
2013-01-03 15:57:01 -08:00
2013-02-27 19:10:18 -08:00
2013-07-09 22:52:29 +01:00
2013-04-09 14:13:24 -04:00
2011-03-31 11:26:23 -03:00
2013-01-03 15:57:01 -08:00
2013-04-09 14:13:24 -04:00
2013-04-09 14:13:17 -04:00
2013-04-09 14:13:17 -04:00
2013-04-09 14:13:23 -04:00
2011-05-01 10:22:40 -05:00
2012-04-05 17:09:40 -07:00
2013-01-03 15:57:01 -08:00
2013-06-26 18:32:47 -07:00
2013-04-09 14:13:17 -04:00
2013-04-09 14:13:16 -04:00
2013-04-09 14:13:16 -04:00
2013-04-09 14:13:16 -04:00
2013-04-09 14:13:16 -04:00
2013-04-09 14:13:15 -04:00
2013-02-06 12:18:56 -08:00
2012-05-10 09:19:39 +01:00
2013-02-24 09:36:58 +00:00
2012-05-10 09:19:39 +01:00
2013-01-03 15:57:01 -08:00
2012-11-27 08:59:43 +04:00
2013-04-09 14:13:16 -04:00
2013-04-09 14:13:25 -04:00
2013-01-03 15:57:01 -08:00
2011-03-31 11:26:23 -03:00
2013-07-03 19:49:46 -07:00
2013-06-04 11:16:22 -07:00
2013-04-09 14:13:27 -04:00
2013-04-09 14:13:27 -04:00
2012-01-03 22:54:55 -05:00
2013-04-11 16:55:04 -07:00
2013-01-03 15:57:01 -08:00
2013-06-26 18:32:47 -07:00
2013-01-03 15:57:01 -08:00
2013-07-09 18:24:39 -07:00
2013-06-26 18:04:11 -07:00
2011-10-31 19:31:24 -04:00
2012-03-28 18:30:03 +01:00
2013-01-03 15:57:01 -08:00
2013-04-09 14:13:17 -04:00
2013-04-09 14:13:17 -04:00
2012-12-01 10:09:17 +00:00
2013-06-05 13:49:36 -06:00
2013-04-29 15:41:57 -04:00
2012-03-28 18:30:03 +01:00
2013-01-03 15:57:01 -08:00
2013-04-09 14:13:15 -04:00
2013-04-15 14:30:44 -06:00
2013-04-15 14:30:44 -06:00
2012-03-28 18:30:03 +01:00
2013-04-09 14:13:17 -04:00
2013-04-09 14:13:17 -04:00
2013-01-03 15:57:01 -08:00
2013-01-03 15:57:01 -08:00
2011-05-10 10:16:21 +02:00
2013-06-19 17:53:35 +02:00
2011-03-31 11:26:23 -03:00
2012-03-28 18:30:03 +01:00
2011-03-31 11:26:23 -03:00
2013-04-09 14:13:17 -04:00
2013-04-09 14:13:17 -04:00
2013-06-18 13:48:45 +02:00
2012-02-21 11:40:37 +01:00
2013-04-09 14:13:17 -04:00
2013-01-03 15:57:01 -08:00
2013-01-03 15:57:01 -08:00
2013-01-03 15:57:01 -08:00
2013-01-03 15:57:01 -08:00
2013-07-13 17:41:21 -07:00
2013-06-24 13:00:10 -07:00
2013-07-04 12:30:30 -07:00
2011-10-31 19:31:23 -04:00
2013-07-09 12:14:09 +01:00
2013-03-28 14:27:24 -04:00
2013-06-03 21:49:52 +02:00
2012-07-20 09:05:54 +01:00
2013-05-31 15:16:51 -04:00
2013-06-24 13:00:10 -07:00
2013-06-04 11:16:24 -07:00
2011-10-31 19:31:23 -04:00
2011-05-01 10:20:10 -05:00
2011-05-24 12:38:36 -04:00
2013-07-03 16:07:41 -07:00
2013-06-26 18:04:11 -07:00
2012-12-01 10:08:41 +00:00
2012-05-10 09:06:12 +01:00
2012-11-30 17:40:33 -08:00
2013-06-26 17:56:18 -07:00
2012-01-03 22:54:07 -05:00
2013-05-02 15:37:03 -07:00
2013-07-23 07:41:53 -07:00
2013-06-26 17:56:18 -07:00
2011-06-29 12:14:25 -05:00
2013-05-07 20:16:25 -07:00
2013-01-03 15:57:01 -08:00
2013-01-03 15:57:01 -08:00
2013-01-03 15:57:01 -08:00
2011-10-31 19:31:24 -04:00
2013-05-07 02:16:21 -04:00
2011-07-21 14:15:58 -07:00
2013-04-06 11:14:20 +01:00
2012-09-14 17:59:29 +01:00
2013-01-03 15:57:01 -08:00
2013-07-08 15:23:15 +01:00
2013-05-04 14:50:16 -04:00
2012-03-28 18:30:03 +01:00
2013-05-04 14:50:16 -04:00
2013-05-04 14:50:16 -04:00
2013-01-03 15:57:01 -08:00
2013-01-03 15:57:01 -08:00
2013-01-03 15:57:01 -08:00
2013-04-09 14:13:17 -04:00
2013-04-09 14:13:17 -04:00
2013-01-03 15:57:01 -08:00
2012-03-28 18:30:03 +01:00
2012-03-28 18:30:03 +01:00
2013-04-08 23:06:56 +09:30
2013-01-03 15:57:01 -08:00
2012-03-27 08:26:36 +01:00
2013-04-09 14:13:15 -04:00
2013-04-09 14:13:15 -04:00
2013-04-09 14:13:15 -04:00
2013-01-03 15:57:01 -08:00
2013-01-03 15:57:01 -08:00