bnx2x: change to the rss engine
This patch revises the way by which rss are configured, removing an unnecessary module paramater and unrequired modes. Signed-off-by: Dmitry Kravkov <dmitry@broadcom.com> Signed-off-by: Yuval Mintz <yuvalmin@broadcom.com> Signed-off-by: Eilon Greenstein <eilong@broadcom.com> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
Родитель
b475d78f46
Коммит
963052348f
|
@ -1382,7 +1382,6 @@ struct bnx2x {
|
|||
#define BNX2X_STATE_DIAG 0xe000
|
||||
#define BNX2X_STATE_ERROR 0xf000
|
||||
|
||||
int multi_mode;
|
||||
#define BNX2X_MAX_PRIORITY 8
|
||||
#define BNX2X_MAX_ENTRIES_PER_PRI 16
|
||||
#define BNX2X_MAX_COS 3
|
||||
|
|
|
@ -1460,20 +1460,11 @@ u16 bnx2x_select_queue(struct net_device *dev, struct sk_buff *skb)
|
|||
return __skb_tx_hash(dev, skb, BNX2X_NUM_ETH_QUEUES(bp));
|
||||
}
|
||||
|
||||
|
||||
void bnx2x_set_num_queues(struct bnx2x *bp)
|
||||
{
|
||||
switch (bp->multi_mode) {
|
||||
case ETH_RSS_MODE_DISABLED:
|
||||
bp->num_queues = 1;
|
||||
break;
|
||||
case ETH_RSS_MODE_REGULAR:
|
||||
bp->num_queues = bnx2x_calc_num_queues(bp);
|
||||
break;
|
||||
|
||||
default:
|
||||
bp->num_queues = 1;
|
||||
break;
|
||||
}
|
||||
/* RSS queues */
|
||||
bp->num_queues = bnx2x_calc_num_queues(bp);
|
||||
|
||||
#ifdef BCM_CNIC
|
||||
/* override in STORAGE SD mode */
|
||||
|
@ -1572,16 +1563,13 @@ static inline int bnx2x_init_rss_pf(struct bnx2x *bp)
|
|||
u8 ind_table[T_ETH_INDIRECTION_TABLE_SIZE] = {0};
|
||||
u8 num_eth_queues = BNX2X_NUM_ETH_QUEUES(bp);
|
||||
|
||||
/*
|
||||
* Prepare the inital contents fo the indirection table if RSS is
|
||||
/* Prepare the initial contents fo the indirection table if RSS is
|
||||
* enabled
|
||||
*/
|
||||
if (bp->multi_mode != ETH_RSS_MODE_DISABLED) {
|
||||
for (i = 0; i < sizeof(ind_table); i++)
|
||||
ind_table[i] =
|
||||
bp->fp->cl_id +
|
||||
ethtool_rxfh_indir_default(i, num_eth_queues);
|
||||
}
|
||||
for (i = 0; i < sizeof(ind_table); i++)
|
||||
ind_table[i] =
|
||||
bp->fp->cl_id +
|
||||
ethtool_rxfh_indir_default(i, num_eth_queues);
|
||||
|
||||
/*
|
||||
* For 57710 and 57711 SEARCHER configuration (rss_keys) is
|
||||
|
@ -1591,11 +1579,12 @@ static inline int bnx2x_init_rss_pf(struct bnx2x *bp)
|
|||
* For 57712 and newer on the other hand it's a per-function
|
||||
* configuration.
|
||||
*/
|
||||
return bnx2x_config_rss_pf(bp, ind_table,
|
||||
bp->port.pmf || !CHIP_IS_E1x(bp));
|
||||
return bnx2x_config_rss_eth(bp, ind_table,
|
||||
bp->port.pmf || !CHIP_IS_E1x(bp));
|
||||
}
|
||||
|
||||
int bnx2x_config_rss_pf(struct bnx2x *bp, u8 *ind_table, bool config_hash)
|
||||
int bnx2x_config_rss_pf(struct bnx2x *bp, struct bnx2x_rss_config_obj *rss_obj,
|
||||
u8 *ind_table, bool config_hash)
|
||||
{
|
||||
struct bnx2x_config_rss_params params = {NULL};
|
||||
int i;
|
||||
|
@ -1607,52 +1596,29 @@ int bnx2x_config_rss_pf(struct bnx2x *bp, u8 *ind_table, bool config_hash)
|
|||
* bp->multi_mode = ETH_RSS_MODE_DISABLED;
|
||||
*/
|
||||
|
||||
params.rss_obj = &bp->rss_conf_obj;
|
||||
params.rss_obj = rss_obj;
|
||||
|
||||
__set_bit(RAMROD_COMP_WAIT, ¶ms.ramrod_flags);
|
||||
|
||||
/* RSS mode */
|
||||
switch (bp->multi_mode) {
|
||||
case ETH_RSS_MODE_DISABLED:
|
||||
__set_bit(BNX2X_RSS_MODE_DISABLED, ¶ms.rss_flags);
|
||||
break;
|
||||
case ETH_RSS_MODE_REGULAR:
|
||||
__set_bit(BNX2X_RSS_MODE_REGULAR, ¶ms.rss_flags);
|
||||
break;
|
||||
case ETH_RSS_MODE_VLAN_PRI:
|
||||
__set_bit(BNX2X_RSS_MODE_VLAN_PRI, ¶ms.rss_flags);
|
||||
break;
|
||||
case ETH_RSS_MODE_E1HOV_PRI:
|
||||
__set_bit(BNX2X_RSS_MODE_E1HOV_PRI, ¶ms.rss_flags);
|
||||
break;
|
||||
case ETH_RSS_MODE_IP_DSCP:
|
||||
__set_bit(BNX2X_RSS_MODE_IP_DSCP, ¶ms.rss_flags);
|
||||
break;
|
||||
default:
|
||||
BNX2X_ERR("Unknown multi_mode: %d\n", bp->multi_mode);
|
||||
return -EINVAL;
|
||||
}
|
||||
__set_bit(BNX2X_RSS_MODE_REGULAR, ¶ms.rss_flags);
|
||||
|
||||
/* If RSS is enabled */
|
||||
if (bp->multi_mode != ETH_RSS_MODE_DISABLED) {
|
||||
/* RSS configuration */
|
||||
__set_bit(BNX2X_RSS_IPV4, ¶ms.rss_flags);
|
||||
__set_bit(BNX2X_RSS_IPV4_TCP, ¶ms.rss_flags);
|
||||
__set_bit(BNX2X_RSS_IPV6, ¶ms.rss_flags);
|
||||
__set_bit(BNX2X_RSS_IPV6_TCP, ¶ms.rss_flags);
|
||||
/* RSS configuration */
|
||||
__set_bit(BNX2X_RSS_IPV4, ¶ms.rss_flags);
|
||||
__set_bit(BNX2X_RSS_IPV4_TCP, ¶ms.rss_flags);
|
||||
__set_bit(BNX2X_RSS_IPV6, ¶ms.rss_flags);
|
||||
__set_bit(BNX2X_RSS_IPV6_TCP, ¶ms.rss_flags);
|
||||
|
||||
/* Hash bits */
|
||||
params.rss_result_mask = MULTI_MASK;
|
||||
/* Hash bits */
|
||||
params.rss_result_mask = MULTI_MASK;
|
||||
|
||||
memcpy(params.ind_table, ind_table, sizeof(params.ind_table));
|
||||
memcpy(params.ind_table, ind_table, sizeof(params.ind_table));
|
||||
|
||||
if (config_hash) {
|
||||
/* RSS keys */
|
||||
for (i = 0; i < sizeof(params.rss_key) / 4; i++)
|
||||
params.rss_key[i] = random32();
|
||||
if (config_hash) {
|
||||
/* RSS keys */
|
||||
for (i = 0; i < sizeof(params.rss_key) / 4; i++)
|
||||
params.rss_key[i] = random32();
|
||||
|
||||
__set_bit(BNX2X_RSS_SET_SRCH, ¶ms.rss_flags);
|
||||
}
|
||||
__set_bit(BNX2X_RSS_SET_SRCH, ¶ms.rss_flags);
|
||||
}
|
||||
|
||||
return bnx2x_config_rss(bp, ¶ms);
|
||||
|
|
|
@ -86,13 +86,15 @@ u32 bnx2x_send_unload_req(struct bnx2x *bp, int unload_mode);
|
|||
void bnx2x_send_unload_done(struct bnx2x *bp);
|
||||
|
||||
/**
|
||||
* bnx2x_config_rss_pf - configure RSS parameters.
|
||||
* bnx2x_config_rss_pf - configure RSS parameters in a PF.
|
||||
*
|
||||
* @bp: driver handle
|
||||
* @rss_obj RSS object to use
|
||||
* @ind_table: indirection table to configure
|
||||
* @config_hash: re-configure RSS hash keys configuration
|
||||
*/
|
||||
int bnx2x_config_rss_pf(struct bnx2x *bp, u8 *ind_table, bool config_hash);
|
||||
int bnx2x_config_rss_pf(struct bnx2x *bp, struct bnx2x_rss_config_obj *rss_obj,
|
||||
u8 *ind_table, bool config_hash);
|
||||
|
||||
/**
|
||||
* bnx2x__init_func_obj - init function object
|
||||
|
@ -970,6 +972,13 @@ static inline int func_by_vn(struct bnx2x *bp, int vn)
|
|||
return 2 * vn + BP_PORT(bp);
|
||||
}
|
||||
|
||||
static inline int bnx2x_config_rss_eth(struct bnx2x *bp, u8 *ind_table,
|
||||
bool config_hash)
|
||||
{
|
||||
return bnx2x_config_rss_pf(bp, &bp->rss_conf_obj, ind_table,
|
||||
config_hash);
|
||||
}
|
||||
|
||||
/**
|
||||
* bnx2x_func_start - init function
|
||||
*
|
||||
|
|
|
@ -2393,10 +2393,7 @@ static int bnx2x_get_rxnfc(struct net_device *dev, struct ethtool_rxnfc *info,
|
|||
|
||||
static u32 bnx2x_get_rxfh_indir_size(struct net_device *dev)
|
||||
{
|
||||
struct bnx2x *bp = netdev_priv(dev);
|
||||
|
||||
return (bp->multi_mode == ETH_RSS_MODE_DISABLED ?
|
||||
0 : T_ETH_INDIRECTION_TABLE_SIZE);
|
||||
return T_ETH_INDIRECTION_TABLE_SIZE;
|
||||
}
|
||||
|
||||
static int bnx2x_get_rxfh_indir(struct net_device *dev, u32 *indir)
|
||||
|
@ -2442,7 +2439,7 @@ static int bnx2x_set_rxfh_indir(struct net_device *dev, const u32 *indir)
|
|||
ind_table[i] = indir[i] + bp->fp->cl_id;
|
||||
}
|
||||
|
||||
return bnx2x_config_rss_pf(bp, ind_table, false);
|
||||
return bnx2x_config_rss_eth(bp, ind_table, false);
|
||||
}
|
||||
|
||||
static const struct ethtool_ops bnx2x_ethtool_ops = {
|
||||
|
|
|
@ -92,15 +92,11 @@ MODULE_FIRMWARE(FW_FILE_NAME_E1);
|
|||
MODULE_FIRMWARE(FW_FILE_NAME_E1H);
|
||||
MODULE_FIRMWARE(FW_FILE_NAME_E2);
|
||||
|
||||
static int multi_mode = 1;
|
||||
module_param(multi_mode, int, 0);
|
||||
MODULE_PARM_DESC(multi_mode, " Multi queue mode "
|
||||
"(0 Disable; 1 Enable (default))");
|
||||
|
||||
int num_queues;
|
||||
module_param(num_queues, int, 0);
|
||||
MODULE_PARM_DESC(num_queues, " Number of queues for multi_mode=1"
|
||||
" (default is as a number of CPUs)");
|
||||
MODULE_PARM_DESC(num_queues,
|
||||
" Set number of queues (default is as a number of CPUs)");
|
||||
|
||||
static int disable_tpa;
|
||||
module_param(disable_tpa, int, 0);
|
||||
|
@ -10244,8 +10240,6 @@ static int __devinit bnx2x_init_bp(struct bnx2x *bp)
|
|||
if (BP_NOMCP(bp) && (func == 0))
|
||||
dev_err(&bp->pdev->dev, "MCP disabled, must load devices in order!\n");
|
||||
|
||||
bp->multi_mode = multi_mode;
|
||||
|
||||
bp->disable_tpa = disable_tpa;
|
||||
|
||||
#ifdef BCM_CNIC
|
||||
|
|
|
@ -4090,12 +4090,6 @@ static int bnx2x_setup_rss(struct bnx2x *bp,
|
|||
rss_mode = ETH_RSS_MODE_DISABLED;
|
||||
else if (test_bit(BNX2X_RSS_MODE_REGULAR, &p->rss_flags))
|
||||
rss_mode = ETH_RSS_MODE_REGULAR;
|
||||
else if (test_bit(BNX2X_RSS_MODE_VLAN_PRI, &p->rss_flags))
|
||||
rss_mode = ETH_RSS_MODE_VLAN_PRI;
|
||||
else if (test_bit(BNX2X_RSS_MODE_E1HOV_PRI, &p->rss_flags))
|
||||
rss_mode = ETH_RSS_MODE_E1HOV_PRI;
|
||||
else if (test_bit(BNX2X_RSS_MODE_IP_DSCP, &p->rss_flags))
|
||||
rss_mode = ETH_RSS_MODE_IP_DSCP;
|
||||
|
||||
data->rss_mode = rss_mode;
|
||||
|
||||
|
|
|
@ -685,9 +685,6 @@ enum {
|
|||
/* RSS_MODE bits are mutually exclusive */
|
||||
BNX2X_RSS_MODE_DISABLED,
|
||||
BNX2X_RSS_MODE_REGULAR,
|
||||
BNX2X_RSS_MODE_VLAN_PRI,
|
||||
BNX2X_RSS_MODE_E1HOV_PRI,
|
||||
BNX2X_RSS_MODE_IP_DSCP,
|
||||
|
||||
BNX2X_RSS_SET_SRCH, /* Setup searcher, E1x specific flag */
|
||||
|
||||
|
|
Загрузка…
Ссылка в новой задаче