Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 300454
b: refs/heads/master
c: 9630523
h: refs/heads/master
v: v3
  • Loading branch information
Dmitry Kravkov authored and David S. Miller committed Apr 4, 2012
1 parent 4042f4e commit 24d38d3
Show file tree
Hide file tree
Showing 8 changed files with 43 additions and 87 deletions.
2 changes: 1 addition & 1 deletion [refs]
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
---
refs/heads/master: b475d78f464195cbdeeda0d80a2ffbd54653a4bd
refs/heads/master: 963052348fd33221d9ae4212d6cdaa2346e2678e
1 change: 0 additions & 1 deletion trunk/drivers/net/ethernet/broadcom/bnx2x/bnx2x.h
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
88 changes: 27 additions & 61 deletions trunk/drivers/net/ethernet/broadcom/bnx2x/bnx2x_cmn.c
Original file line number Diff line number Diff line change
Expand Up @@ -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 */
Expand Down Expand Up @@ -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
Expand All @@ -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;
Expand All @@ -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, &params.ramrod_flags);

/* RSS mode */
switch (bp->multi_mode) {
case ETH_RSS_MODE_DISABLED:
__set_bit(BNX2X_RSS_MODE_DISABLED, &params.rss_flags);
break;
case ETH_RSS_MODE_REGULAR:
__set_bit(BNX2X_RSS_MODE_REGULAR, &params.rss_flags);
break;
case ETH_RSS_MODE_VLAN_PRI:
__set_bit(BNX2X_RSS_MODE_VLAN_PRI, &params.rss_flags);
break;
case ETH_RSS_MODE_E1HOV_PRI:
__set_bit(BNX2X_RSS_MODE_E1HOV_PRI, &params.rss_flags);
break;
case ETH_RSS_MODE_IP_DSCP:
__set_bit(BNX2X_RSS_MODE_IP_DSCP, &params.rss_flags);
break;
default:
BNX2X_ERR("Unknown multi_mode: %d\n", bp->multi_mode);
return -EINVAL;
}
__set_bit(BNX2X_RSS_MODE_REGULAR, &params.rss_flags);

/* If RSS is enabled */
if (bp->multi_mode != ETH_RSS_MODE_DISABLED) {
/* RSS configuration */
__set_bit(BNX2X_RSS_IPV4, &params.rss_flags);
__set_bit(BNX2X_RSS_IPV4_TCP, &params.rss_flags);
__set_bit(BNX2X_RSS_IPV6, &params.rss_flags);
__set_bit(BNX2X_RSS_IPV6_TCP, &params.rss_flags);
/* RSS configuration */
__set_bit(BNX2X_RSS_IPV4, &params.rss_flags);
__set_bit(BNX2X_RSS_IPV4_TCP, &params.rss_flags);
__set_bit(BNX2X_RSS_IPV6, &params.rss_flags);
__set_bit(BNX2X_RSS_IPV6_TCP, &params.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, &params.rss_flags);
}
__set_bit(BNX2X_RSS_SET_SRCH, &params.rss_flags);
}

return bnx2x_config_rss(bp, &params);
Expand Down
13 changes: 11 additions & 2 deletions trunk/drivers/net/ethernet/broadcom/bnx2x/bnx2x_cmn.h
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down Expand Up @@ -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
*
Expand Down
7 changes: 2 additions & 5 deletions trunk/drivers/net/ethernet/broadcom/bnx2x/bnx2x_ethtool.c
Original file line number Diff line number Diff line change
Expand Up @@ -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)
Expand Down Expand Up @@ -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 = {
Expand Down
10 changes: 2 additions & 8 deletions trunk/drivers/net/ethernet/broadcom/bnx2x/bnx2x_main.c
Original file line number Diff line number Diff line change
Expand Up @@ -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);
Expand Down Expand Up @@ -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
Expand Down
6 changes: 0 additions & 6 deletions trunk/drivers/net/ethernet/broadcom/bnx2x/bnx2x_sp.c
Original file line number Diff line number Diff line change
Expand Up @@ -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;

Expand Down
3 changes: 0 additions & 3 deletions trunk/drivers/net/ethernet/broadcom/bnx2x/bnx2x_sp.h
Original file line number Diff line number Diff line change
Expand Up @@ -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 */

Expand Down

0 comments on commit 24d38d3

Please sign in to comment.