mirror of https://gitee.com/openkylin/linux.git
bnx2x: fix select_queue when FCoE is disabled
Signed-off-by: Dmitry Kravkov <dmitry@broadcom.com> Signed-off-by: Eilon Greenstein <eilong@broadcom.com> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
parent
45d3539a23
commit
cdb9d6ae8d
|
@ -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)
|
||||
{
|
||||
struct bnx2x *bp = netdev_priv(dev);
|
||||
|
||||
#ifdef BCM_CNIC
|
||||
if (NO_FCOE(bp))
|
||||
return skb_tx_hash(dev, skb);
|
||||
else {
|
||||
if (!NO_FCOE(bp)) {
|
||||
struct ethhdr *hdr = (struct ethhdr *)skb->data;
|
||||
u16 ether_type = ntohs(hdr->h_proto);
|
||||
|
||||
|
@ -1425,8 +1424,7 @@ u16 bnx2x_select_queue(struct net_device *dev, struct sk_buff *skb)
|
|||
return bnx2x_fcoe_tx(bp, txq_index);
|
||||
}
|
||||
#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));
|
||||
}
|
||||
|
||||
|
@ -1449,6 +1447,28 @@ void bnx2x_set_num_queues(struct bnx2x *bp)
|
|||
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)
|
||||
{
|
||||
int rc, tx, rx;
|
||||
|
|
Loading…
Reference in New Issue