提交 cdb9d6ae 编写于 作者: V Vladislav Zolotarov 提交者: David S. Miller

bnx2x: fix select_queue when FCoE is disabled

Signed-off-by: NDmitry Kravkov <dmitry@broadcom.com>
Signed-off-by: NEilon Greenstein <eilong@broadcom.com>
Signed-off-by: NDavid S. Miller <davem@davemloft.net>
上级 45d3539a
...@@ -1405,10 +1405,9 @@ void bnx2x_netif_stop(struct bnx2x *bp, int disable_hw) ...@@ -1405,10 +1405,9 @@ void bnx2x_netif_stop(struct bnx2x *bp, int disable_hw)
u16 bnx2x_select_queue(struct net_device *dev, struct sk_buff *skb) u16 bnx2x_select_queue(struct net_device *dev, struct sk_buff *skb)
{ {
struct bnx2x *bp = netdev_priv(dev); struct bnx2x *bp = netdev_priv(dev);
#ifdef BCM_CNIC #ifdef BCM_CNIC
if (NO_FCOE(bp)) if (!NO_FCOE(bp)) {
return skb_tx_hash(dev, skb);
else {
struct ethhdr *hdr = (struct ethhdr *)skb->data; struct ethhdr *hdr = (struct ethhdr *)skb->data;
u16 ether_type = ntohs(hdr->h_proto); u16 ether_type = ntohs(hdr->h_proto);
...@@ -1425,8 +1424,7 @@ u16 bnx2x_select_queue(struct net_device *dev, struct sk_buff *skb) ...@@ -1425,8 +1424,7 @@ u16 bnx2x_select_queue(struct net_device *dev, struct sk_buff *skb)
return bnx2x_fcoe_tx(bp, txq_index); return bnx2x_fcoe_tx(bp, txq_index);
} }
#endif #endif
/* Select a none-FCoE queue: if FCoE is enabled, exclude FCoE L2 ring /* select a non-FCoE queue */
*/
return __skb_tx_hash(dev, skb, BNX2X_NUM_ETH_QUEUES(bp)); return __skb_tx_hash(dev, skb, BNX2X_NUM_ETH_QUEUES(bp));
} }
...@@ -1449,6 +1447,28 @@ void bnx2x_set_num_queues(struct bnx2x *bp) ...@@ -1449,6 +1447,28 @@ void bnx2x_set_num_queues(struct bnx2x *bp)
bp->num_queues += NON_ETH_CONTEXT_USE; bp->num_queues += NON_ETH_CONTEXT_USE;
} }
/**
* bnx2x_set_real_num_queues - configure netdev->real_num_[tx,rx]_queues
*
* @bp: Driver handle
*
* We currently support for at most 16 Tx queues for each CoS thus we will
* allocate a multiple of 16 for ETH L2 rings according to the value of the
* bp->max_cos.
*
* If there is an FCoE L2 queue the appropriate Tx queue will have the next
* index after all ETH L2 indices.
*
* If the actual number of Tx queues (for each CoS) is less than 16 then there
* will be the holes at the end of each group of 16 ETh L2 indices (0..15,
* 16..31,...) with indicies that are not coupled with any real Tx queue.
*
* The proper configuration of skb->queue_mapping is handled by
* bnx2x_select_queue() and __skb_tx_hash().
*
* bnx2x_setup_tc() takes care of the proper TC mappings so that __skb_tx_hash()
* will return a proper Tx index if TC is enabled (netdev->num_tc > 0).
*/
static inline int bnx2x_set_real_num_queues(struct bnx2x *bp) static inline int bnx2x_set_real_num_queues(struct bnx2x *bp)
{ {
int rc, tx, rx; int rc, tx, rx;
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册