aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSuresh Reddy <suresh.reddy@emulex.com>2014-01-15 02:53:36 -0500
committerDavid S. Miller <davem@davemloft.net>2014-01-15 18:52:02 -0500
commit02308d749fb761ce44d05184193357d327c05a44 (patch)
tree2bb09216b48567bdd90ff20e09104a1513dc5418
parentff32f8abbe4469c409a8e92fa63c2da0d7da55e2 (diff)
be2net: fix incorrect setting of cmd_privileges for VFs
An earlier commit (f25b119c "Fix error messages while driver load for VFs") incorrectly set the adapter->cmd_privileges value for VFs (in a multi-channel config) to MAX_PRIVILEGES. This causes FW cmd failures and avoidable error logs when certian cmds are issued by a VF. Also, move the multi-channel hack to be_cmds.c inside be_cmd_get_fn_privileges() routine. Fixes: f25b119c "Fix error messages while driver load for VFs" Signed-off-by: Suresh Reddy <suresh.reddy@emulex.com> Signed-off-by: Sathya Perla <sathya.perla@emulex.com> Signed-off-by: David S. Miller <davem@davemloft.net>
-rw-r--r--drivers/net/ethernet/emulex/benet/be_cmds.c7
-rw-r--r--drivers/net/ethernet/emulex/benet/be_cmds.h8
-rw-r--r--drivers/net/ethernet/emulex/benet/be_main.c11
3 files changed, 15 insertions, 11 deletions
diff --git a/drivers/net/ethernet/emulex/benet/be_cmds.c b/drivers/net/ethernet/emulex/benet/be_cmds.c
index b0a2fd6d2210..cf5b8b0c5925 100644
--- a/drivers/net/ethernet/emulex/benet/be_cmds.c
+++ b/drivers/net/ethernet/emulex/benet/be_cmds.c
@@ -2691,6 +2691,13 @@ int be_cmd_get_fn_privileges(struct be_adapter *adapter, u32 *privilege,
2691 struct be_cmd_resp_get_fn_privileges *resp = 2691 struct be_cmd_resp_get_fn_privileges *resp =
2692 embedded_payload(wrb); 2692 embedded_payload(wrb);
2693 *privilege = le32_to_cpu(resp->privilege_mask); 2693 *privilege = le32_to_cpu(resp->privilege_mask);
2694
2695 /* In UMC mode FW does not return right privileges.
2696 * Override with correct privilege equivalent to PF.
2697 */
2698 if (BEx_chip(adapter) && be_is_mc(adapter) &&
2699 be_physfn(adapter))
2700 *privilege = MAX_PRIVILEGES;
2694 } 2701 }
2695 2702
2696err: 2703err:
diff --git a/drivers/net/ethernet/emulex/benet/be_cmds.h b/drivers/net/ethernet/emulex/benet/be_cmds.h
index 39b99f2f7113..da182c0583f1 100644
--- a/drivers/net/ethernet/emulex/benet/be_cmds.h
+++ b/drivers/net/ethernet/emulex/benet/be_cmds.h
@@ -1098,6 +1098,14 @@ struct be_cmd_resp_query_fw_cfg {
1098 u32 function_caps; 1098 u32 function_caps;
1099}; 1099};
1100 1100
1101/* Is BE in a multi-channel mode */
1102static inline bool be_is_mc(struct be_adapter *adapter)
1103{
1104 return adapter->function_mode & FLEX10_MODE ||
1105 adapter->function_mode & VNIC_MODE ||
1106 adapter->function_mode & UMC_ENABLED;
1107}
1108
1101/******************** RSS Config ****************************************/ 1109/******************** RSS Config ****************************************/
1102/* RSS type Input parameters used to compute RX hash 1110/* RSS type Input parameters used to compute RX hash
1103 * RSS_ENABLE_IPV4 SRC IPv4, DST IPv4 1111 * RSS_ENABLE_IPV4 SRC IPv4, DST IPv4
diff --git a/drivers/net/ethernet/emulex/benet/be_main.c b/drivers/net/ethernet/emulex/benet/be_main.c
index ce589b43bd51..9c90a87052d5 100644
--- a/drivers/net/ethernet/emulex/benet/be_main.c
+++ b/drivers/net/ethernet/emulex/benet/be_main.c
@@ -121,12 +121,6 @@ static const char * const ue_status_hi_desc[] = {
121 "Unknown" 121 "Unknown"
122}; 122};
123 123
124/* Is BE in a multi-channel mode */
125static inline bool be_is_mc(struct be_adapter *adapter) {
126 return (adapter->function_mode & FLEX10_MODE ||
127 adapter->function_mode & VNIC_MODE ||
128 adapter->function_mode & UMC_ENABLED);
129}
130 124
131static void be_queue_free(struct be_adapter *adapter, struct be_queue_info *q) 125static void be_queue_free(struct be_adapter *adapter, struct be_queue_info *q)
132{ 126{
@@ -3410,11 +3404,6 @@ static int be_setup(struct be_adapter *adapter)
3410 goto err; 3404 goto err;
3411 3405
3412 be_cmd_get_fn_privileges(adapter, &adapter->cmd_privileges, 0); 3406 be_cmd_get_fn_privileges(adapter, &adapter->cmd_privileges, 0);
3413 /* In UMC mode FW does not return right privileges.
3414 * Override with correct privilege equivalent to PF.
3415 */
3416 if (be_is_mc(adapter))
3417 adapter->cmd_privileges = MAX_PRIVILEGES;
3418 3407
3419 status = be_mac_setup(adapter); 3408 status = be_mac_setup(adapter);
3420 if (status) 3409 if (status)