Skip to content

Commit 4b9bc86

Browse files
Sebastian Andrzej Siewiormartinkpetersen
authored andcommitted
fcoe: convert to kworker
The driver creates its own per-CPU threads which are updated based on CPU hotplug events. It is also possible to use kworkers and remove some of the kthread infrastrucure. The code checked ->thread to decide if there is an active per-CPU thread. By using the kworker infrastructure this is no longer possible (or required). The thread pointer is saved in `kthread' instead of `thread' so anything trying to use thread is caught by the compiler. Currently only the bnx2fc driver is using struct fcoe_percpu_s and the kthread member. After a CPU went offline, we may still enqueue items on the "offline" CPU. This isn't much of a problem. The work will be done on a random CPU. The allocated crc_eof_page page won't be cleaned up. It is probably expected that the CPU comes up at some point so it should not be a problem. The crc_eof_page memory is released of course once the module is removed. This patch was only compile-tested due to -ENODEV. Cc: Vasu Dev <vasu.dev@intel.com> Cc: "James E.J. Bottomley" <jejb@linux.vnet.ibm.com> Cc: "Martin K. Petersen" <martin.petersen@oracle.com> Cc: Christoph Hellwig <hch@lst.de> Cc: fcoe-devel@open-fcoe.org Cc: linux-scsi@vger.kernel.org Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de> Tested-by: Johannes Thumshirn <jthumshirn@suse.de> Reviewed-by: Johannes Thumshirn <jthumshirn@suse.de> Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
1 parent 49a7581 commit 4b9bc86

File tree

3 files changed

+34
-256
lines changed

3 files changed

+34
-256
lines changed

drivers/scsi/bnx2fc/bnx2fc_fcoe.c

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -486,7 +486,7 @@ static int bnx2fc_rcv(struct sk_buff *skb, struct net_device *dev,
486486

487487
__skb_queue_tail(&bg->fcoe_rx_list, skb);
488488
if (bg->fcoe_rx_list.qlen == 1)
489-
wake_up_process(bg->thread);
489+
wake_up_process(bg->kthread);
490490

491491
spin_unlock(&bg->fcoe_rx_list.lock);
492492

@@ -2715,7 +2715,7 @@ static int __init bnx2fc_mod_init(void)
27152715
}
27162716
wake_up_process(l2_thread);
27172717
spin_lock_bh(&bg->fcoe_rx_list.lock);
2718-
bg->thread = l2_thread;
2718+
bg->kthread = l2_thread;
27192719
spin_unlock_bh(&bg->fcoe_rx_list.lock);
27202720

27212721
for_each_possible_cpu(cpu) {
@@ -2788,8 +2788,8 @@ static void __exit bnx2fc_mod_exit(void)
27882788
/* Destroy global thread */
27892789
bg = &bnx2fc_global;
27902790
spin_lock_bh(&bg->fcoe_rx_list.lock);
2791-
l2_thread = bg->thread;
2792-
bg->thread = NULL;
2791+
l2_thread = bg->kthread;
2792+
bg->kthread = NULL;
27932793
while ((skb = __skb_dequeue(&bg->fcoe_rx_list)) != NULL)
27942794
kfree_skb(skb);
27952795

0 commit comments

Comments
 (0)