diff options
author | Suresh Reddy <suresh.reddy@emulex.com> | 2014-01-15 02:53:36 -0500 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2014-01-15 18:52:02 -0500 |
commit | 02308d749fb761ce44d05184193357d327c05a44 (patch) | |
tree | 2bb09216b48567bdd90ff20e09104a1513dc5418 | |
parent | ff32f8abbe4469c409a8e92fa63c2da0d7da55e2 (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.c | 7 | ||||
-rw-r--r-- | drivers/net/ethernet/emulex/benet/be_cmds.h | 8 | ||||
-rw-r--r-- | drivers/net/ethernet/emulex/benet/be_main.c | 11 |
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 | ||
2696 | err: | 2703 | err: |
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 */ | ||
1102 | static 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 */ | ||
125 | static 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 | ||
131 | static void be_queue_free(struct be_adapter *adapter, struct be_queue_info *q) | 125 | static 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) |