diff options
| -rw-r--r-- | drivers/scsi/fcoe/fcoe.c | 27 |
1 files changed, 10 insertions, 17 deletions
diff --git a/drivers/scsi/fcoe/fcoe.c b/drivers/scsi/fcoe/fcoe.c index 278958157e24..22ae29520d6e 100644 --- a/drivers/scsi/fcoe/fcoe.c +++ b/drivers/scsi/fcoe/fcoe.c | |||
| @@ -1463,24 +1463,17 @@ static int fcoe_rcv(struct sk_buff *skb, struct net_device *netdev, | |||
| 1463 | * so we're free to queue skbs into it's queue. | 1463 | * so we're free to queue skbs into it's queue. |
| 1464 | */ | 1464 | */ |
| 1465 | 1465 | ||
| 1466 | /* If this is a SCSI-FCP frame, and this is already executing on the | 1466 | /* |
| 1467 | * correct CPU, and the queue for this CPU is empty, then go ahead | 1467 | * Note: We used to have a set of conditions under which we would |
| 1468 | * and process the frame directly in the softirq context. | 1468 | * call fcoe_recv_frame directly, rather than queuing to the rx list |
| 1469 | * This lets us process completions without context switching from the | 1469 | * as it could save a few cycles, but doing so is prohibited, as |
| 1470 | * NET_RX softirq, to our receive processing thread, and then back to | 1470 | * fcoe_recv_frame has several paths that may sleep, which is forbidden |
| 1471 | * BLOCK softirq context. | 1471 | * in softirq context. |
| 1472 | */ | 1472 | */ |
| 1473 | if (fh->fh_type == FC_TYPE_FCP && | 1473 | __skb_queue_tail(&fps->fcoe_rx_list, skb); |
| 1474 | cpu == smp_processor_id() && | 1474 | if (fps->fcoe_rx_list.qlen == 1) |
| 1475 | skb_queue_empty(&fps->fcoe_rx_list)) { | 1475 | wake_up_process(fps->thread); |
| 1476 | spin_unlock_bh(&fps->fcoe_rx_list.lock); | 1476 | spin_unlock_bh(&fps->fcoe_rx_list.lock); |
| 1477 | fcoe_recv_frame(skb); | ||
| 1478 | } else { | ||
| 1479 | __skb_queue_tail(&fps->fcoe_rx_list, skb); | ||
| 1480 | if (fps->fcoe_rx_list.qlen == 1) | ||
| 1481 | wake_up_process(fps->thread); | ||
| 1482 | spin_unlock_bh(&fps->fcoe_rx_list.lock); | ||
| 1483 | } | ||
| 1484 | 1477 | ||
| 1485 | return 0; | 1478 | return 0; |
| 1486 | err: | 1479 | err: |
