aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/net/enic/enic_main.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/net/enic/enic_main.c')
-rw-r--r--drivers/net/enic/enic_main.c326
1 files changed, 36 insertions, 290 deletions
diff --git a/drivers/net/enic/enic_main.c b/drivers/net/enic/enic_main.c
index a0af48c51fb..8b9cad5e971 100644
--- a/drivers/net/enic/enic_main.c
+++ b/drivers/net/enic/enic_main.c
@@ -44,6 +44,7 @@
44#include "vnic_vic.h" 44#include "vnic_vic.h"
45#include "enic_res.h" 45#include "enic_res.h"
46#include "enic.h" 46#include "enic.h"
47#include "enic_dev.h"
47 48
48#define ENIC_NOTIFY_TIMER_PERIOD (2 * HZ) 49#define ENIC_NOTIFY_TIMER_PERIOD (2 * HZ)
49#define WQ_ENET_MAX_DESC_LEN (1 << WQ_ENET_LEN_BITS) 50#define WQ_ENET_MAX_DESC_LEN (1 << WQ_ENET_LEN_BITS)
@@ -190,18 +191,6 @@ static int enic_get_settings(struct net_device *netdev,
190 return 0; 191 return 0;
191} 192}
192 193
193static int enic_dev_fw_info(struct enic *enic,
194 struct vnic_devcmd_fw_info **fw_info)
195{
196 int err;
197
198 spin_lock(&enic->devcmd_lock);
199 err = vnic_dev_fw_info(enic->vdev, fw_info);
200 spin_unlock(&enic->devcmd_lock);
201
202 return err;
203}
204
205static void enic_get_drvinfo(struct net_device *netdev, 194static void enic_get_drvinfo(struct net_device *netdev,
206 struct ethtool_drvinfo *drvinfo) 195 struct ethtool_drvinfo *drvinfo)
207{ 196{
@@ -246,17 +235,6 @@ static int enic_get_sset_count(struct net_device *netdev, int sset)
246 } 235 }
247} 236}
248 237
249static int enic_dev_stats_dump(struct enic *enic, struct vnic_stats **vstats)
250{
251 int err;
252
253 spin_lock(&enic->devcmd_lock);
254 err = vnic_dev_stats_dump(enic->vdev, vstats);
255 spin_unlock(&enic->devcmd_lock);
256
257 return err;
258}
259
260static void enic_get_ethtool_stats(struct net_device *netdev, 238static void enic_get_ethtool_stats(struct net_device *netdev,
261 struct ethtool_stats *stats, u64 *data) 239 struct ethtool_stats *stats, u64 *data)
262{ 240{
@@ -896,9 +874,10 @@ static struct net_device_stats *enic_get_stats(struct net_device *netdev)
896 return net_stats; 874 return net_stats;
897} 875}
898 876
899static void enic_reset_multicast_list(struct enic *enic) 877static void enic_reset_addr_lists(struct enic *enic)
900{ 878{
901 enic->mc_count = 0; 879 enic->mc_count = 0;
880 enic->uc_count = 0;
902 enic->flags = 0; 881 enic->flags = 0;
903} 882}
904 883
@@ -919,32 +898,6 @@ static int enic_set_mac_addr(struct net_device *netdev, char *addr)
919 return 0; 898 return 0;
920} 899}
921 900
922static int enic_dev_add_station_addr(struct enic *enic)
923{
924 int err = 0;
925
926 if (is_valid_ether_addr(enic->netdev->dev_addr)) {
927 spin_lock(&enic->devcmd_lock);
928 err = vnic_dev_add_addr(enic->vdev, enic->netdev->dev_addr);
929 spin_unlock(&enic->devcmd_lock);
930 }
931
932 return err;
933}
934
935static int enic_dev_del_station_addr(struct enic *enic)
936{
937 int err = 0;
938
939 if (is_valid_ether_addr(enic->netdev->dev_addr)) {
940 spin_lock(&enic->devcmd_lock);
941 err = vnic_dev_del_addr(enic->vdev, enic->netdev->dev_addr);
942 spin_unlock(&enic->devcmd_lock);
943 }
944
945 return err;
946}
947
948static int enic_set_mac_address_dynamic(struct net_device *netdev, void *p) 901static int enic_set_mac_address_dynamic(struct net_device *netdev, void *p)
949{ 902{
950 struct enic *enic = netdev_priv(netdev); 903 struct enic *enic = netdev_priv(netdev);
@@ -989,42 +942,7 @@ static int enic_set_mac_address(struct net_device *netdev, void *p)
989 return enic_dev_add_station_addr(enic); 942 return enic_dev_add_station_addr(enic);
990} 943}
991 944
992static int enic_dev_packet_filter(struct enic *enic, int directed, 945static void enic_update_multicast_addr_list(struct enic *enic)
993 int multicast, int broadcast, int promisc, int allmulti)
994{
995 int err;
996
997 spin_lock(&enic->devcmd_lock);
998 err = vnic_dev_packet_filter(enic->vdev, directed,
999 multicast, broadcast, promisc, allmulti);
1000 spin_unlock(&enic->devcmd_lock);
1001
1002 return err;
1003}
1004
1005static int enic_dev_add_addr(struct enic *enic, u8 *addr)
1006{
1007 int err;
1008
1009 spin_lock(&enic->devcmd_lock);
1010 err = vnic_dev_add_addr(enic->vdev, addr);
1011 spin_unlock(&enic->devcmd_lock);
1012
1013 return err;
1014}
1015
1016static int enic_dev_del_addr(struct enic *enic, u8 *addr)
1017{
1018 int err;
1019
1020 spin_lock(&enic->devcmd_lock);
1021 err = vnic_dev_del_addr(enic->vdev, addr);
1022 spin_unlock(&enic->devcmd_lock);
1023
1024 return err;
1025}
1026
1027static void enic_add_multicast_addr_list(struct enic *enic)
1028{ 946{
1029 struct net_device *netdev = enic->netdev; 947 struct net_device *netdev = enic->netdev;
1030 struct netdev_hw_addr *ha; 948 struct netdev_hw_addr *ha;
@@ -1079,7 +997,7 @@ static void enic_add_multicast_addr_list(struct enic *enic)
1079 enic->mc_count = mc_count; 997 enic->mc_count = mc_count;
1080} 998}
1081 999
1082static void enic_add_unicast_addr_list(struct enic *enic) 1000static void enic_update_unicast_addr_list(struct enic *enic)
1083{ 1001{
1084 struct net_device *netdev = enic->netdev; 1002 struct net_device *netdev = enic->netdev;
1085 struct netdev_hw_addr *ha; 1003 struct netdev_hw_addr *ha;
@@ -1156,9 +1074,9 @@ static void enic_set_rx_mode(struct net_device *netdev)
1156 } 1074 }
1157 1075
1158 if (!promisc) { 1076 if (!promisc) {
1159 enic_add_unicast_addr_list(enic); 1077 enic_update_unicast_addr_list(enic);
1160 if (!allmulti) 1078 if (!allmulti)
1161 enic_add_multicast_addr_list(enic); 1079 enic_update_multicast_addr_list(enic);
1162 } 1080 }
1163} 1081}
1164 1082
@@ -1170,26 +1088,6 @@ static void enic_vlan_rx_register(struct net_device *netdev,
1170 enic->vlan_group = vlan_group; 1088 enic->vlan_group = vlan_group;
1171} 1089}
1172 1090
1173/* rtnl lock is held */
1174static void enic_vlan_rx_add_vid(struct net_device *netdev, u16 vid)
1175{
1176 struct enic *enic = netdev_priv(netdev);
1177
1178 spin_lock(&enic->devcmd_lock);
1179 enic_add_vlan(enic, vid);
1180 spin_unlock(&enic->devcmd_lock);
1181}
1182
1183/* rtnl lock is held */
1184static void enic_vlan_rx_kill_vid(struct net_device *netdev, u16 vid)
1185{
1186 struct enic *enic = netdev_priv(netdev);
1187
1188 spin_lock(&enic->devcmd_lock);
1189 enic_del_vlan(enic, vid);
1190 spin_unlock(&enic->devcmd_lock);
1191}
1192
1193/* netif_tx_lock held, BHs disabled */ 1091/* netif_tx_lock held, BHs disabled */
1194static void enic_tx_timeout(struct net_device *netdev) 1092static void enic_tx_timeout(struct net_device *netdev)
1195{ 1093{
@@ -1197,40 +1095,6 @@ static void enic_tx_timeout(struct net_device *netdev)
1197 schedule_work(&enic->reset); 1095 schedule_work(&enic->reset);
1198} 1096}
1199 1097
1200static int enic_vnic_dev_deinit(struct enic *enic)
1201{
1202 int err;
1203
1204 spin_lock(&enic->devcmd_lock);
1205 err = vnic_dev_deinit(enic->vdev);
1206 spin_unlock(&enic->devcmd_lock);
1207
1208 return err;
1209}
1210
1211static int enic_dev_init_prov(struct enic *enic, struct vic_provinfo *vp)
1212{
1213 int err;
1214
1215 spin_lock(&enic->devcmd_lock);
1216 err = vnic_dev_init_prov(enic->vdev,
1217 (u8 *)vp, vic_provinfo_size(vp));
1218 spin_unlock(&enic->devcmd_lock);
1219
1220 return err;
1221}
1222
1223static int enic_dev_init_done(struct enic *enic, int *done, int *error)
1224{
1225 int err;
1226
1227 spin_lock(&enic->devcmd_lock);
1228 err = vnic_dev_init_done(enic->vdev, done, error);
1229 spin_unlock(&enic->devcmd_lock);
1230
1231 return err;
1232}
1233
1234static int enic_set_vf_mac(struct net_device *netdev, int vf, u8 *mac) 1098static int enic_set_vf_mac(struct net_device *netdev, int vf, u8 *mac)
1235{ 1099{
1236 struct enic *enic = netdev_priv(netdev); 1100 struct enic *enic = netdev_priv(netdev);
@@ -1262,6 +1126,8 @@ static int enic_set_port_profile(struct enic *enic, u8 *mac)
1262 if (err) 1126 if (err)
1263 return err; 1127 return err;
1264 1128
1129 enic_reset_addr_lists(enic);
1130
1265 switch (enic->pp.request) { 1131 switch (enic->pp.request) {
1266 1132
1267 case PORT_REQUEST_ASSOCIATE: 1133 case PORT_REQUEST_ASSOCIATE:
@@ -1318,18 +1184,20 @@ static int enic_set_port_profile(struct enic *enic, u8 *mac)
1318 vic_provinfo_free(vp); 1184 vic_provinfo_free(vp);
1319 if (err) 1185 if (err)
1320 return err; 1186 return err;
1321
1322 enic->pp.set |= ENIC_SET_APPLIED;
1323 break; 1187 break;
1324 1188
1325 case PORT_REQUEST_DISASSOCIATE: 1189 case PORT_REQUEST_DISASSOCIATE:
1326 enic->pp.set &= ~ENIC_SET_APPLIED;
1327 break; 1190 break;
1328 1191
1329 default: 1192 default:
1330 return -EINVAL; 1193 return -EINVAL;
1331 } 1194 }
1332 1195
1196 /* Set flag to indicate that the port assoc/disassoc
1197 * request has been sent out to fw
1198 */
1199 enic->pp.set |= ENIC_PORT_REQUEST_APPLIED;
1200
1333 return 0; 1201 return 0;
1334} 1202}
1335 1203
@@ -1379,9 +1247,6 @@ static int enic_set_vf_port(struct net_device *netdev, int vf,
1379 1247
1380 if (is_zero_ether_addr(netdev->dev_addr)) 1248 if (is_zero_ether_addr(netdev->dev_addr))
1381 random_ether_addr(netdev->dev_addr); 1249 random_ether_addr(netdev->dev_addr);
1382 } else if (new_pp.request == PORT_REQUEST_DISASSOCIATE) {
1383 if (!is_zero_ether_addr(enic->pp.mac_addr))
1384 enic_dev_del_addr(enic, enic->pp.mac_addr);
1385 } 1250 }
1386 1251
1387 memcpy(&enic->pp, &new_pp, sizeof(struct enic_port_profile)); 1252 memcpy(&enic->pp, &new_pp, sizeof(struct enic_port_profile));
@@ -1390,9 +1255,6 @@ static int enic_set_vf_port(struct net_device *netdev, int vf,
1390 if (err) 1255 if (err)
1391 goto set_port_profile_cleanup; 1256 goto set_port_profile_cleanup;
1392 1257
1393 if (!is_zero_ether_addr(enic->pp.mac_addr))
1394 enic_dev_add_addr(enic, enic->pp.mac_addr);
1395
1396set_port_profile_cleanup: 1258set_port_profile_cleanup:
1397 memset(enic->pp.vf_mac, 0, ETH_ALEN); 1259 memset(enic->pp.vf_mac, 0, ETH_ALEN);
1398 1260
@@ -1411,7 +1273,7 @@ static int enic_get_vf_port(struct net_device *netdev, int vf,
1411 int err, error, done; 1273 int err, error, done;
1412 u16 response = PORT_PROFILE_RESPONSE_SUCCESS; 1274 u16 response = PORT_PROFILE_RESPONSE_SUCCESS;
1413 1275
1414 if (!(enic->pp.set & ENIC_SET_APPLIED)) 1276 if (!(enic->pp.set & ENIC_PORT_REQUEST_APPLIED))
1415 return -ENODATA; 1277 return -ENODATA;
1416 1278
1417 err = enic_dev_init_done(enic, &done, &error); 1279 err = enic_dev_init_done(enic, &done, &error);
@@ -1489,62 +1351,6 @@ static int enic_rq_alloc_buf(struct vnic_rq *rq)
1489 return 0; 1351 return 0;
1490} 1352}
1491 1353
1492static int enic_rq_alloc_buf_a1(struct vnic_rq *rq)
1493{
1494 struct rq_enet_desc *desc = vnic_rq_next_desc(rq);
1495
1496 if (vnic_rq_posting_soon(rq)) {
1497
1498 /* SW workaround for A0 HW erratum: if we're just about
1499 * to write posted_index, insert a dummy desc
1500 * of type resvd
1501 */
1502
1503 rq_enet_desc_enc(desc, 0, RQ_ENET_TYPE_RESV2, 0);
1504 vnic_rq_post(rq, 0, 0, 0, 0);
1505 } else {
1506 return enic_rq_alloc_buf(rq);
1507 }
1508
1509 return 0;
1510}
1511
1512static int enic_dev_hw_version(struct enic *enic,
1513 enum vnic_dev_hw_version *hw_ver)
1514{
1515 int err;
1516
1517 spin_lock(&enic->devcmd_lock);
1518 err = vnic_dev_hw_version(enic->vdev, hw_ver);
1519 spin_unlock(&enic->devcmd_lock);
1520
1521 return err;
1522}
1523
1524static int enic_set_rq_alloc_buf(struct enic *enic)
1525{
1526 enum vnic_dev_hw_version hw_ver;
1527 int err;
1528
1529 err = enic_dev_hw_version(enic, &hw_ver);
1530 if (err)
1531 return err;
1532
1533 switch (hw_ver) {
1534 case VNIC_DEV_HW_VER_A1:
1535 enic->rq_alloc_buf = enic_rq_alloc_buf_a1;
1536 break;
1537 case VNIC_DEV_HW_VER_A2:
1538 case VNIC_DEV_HW_VER_UNKNOWN:
1539 enic->rq_alloc_buf = enic_rq_alloc_buf;
1540 break;
1541 default:
1542 return -ENODEV;
1543 }
1544
1545 return 0;
1546}
1547
1548static void enic_rq_indicate_buf(struct vnic_rq *rq, 1354static void enic_rq_indicate_buf(struct vnic_rq *rq,
1549 struct cq_desc *cq_desc, struct vnic_rq_buf *buf, 1355 struct cq_desc *cq_desc, struct vnic_rq_buf *buf,
1550 int skipped, void *opaque) 1356 int skipped, void *opaque)
@@ -1681,7 +1487,7 @@ static int enic_poll(struct napi_struct *napi, int budget)
1681 0 /* don't unmask intr */, 1487 0 /* don't unmask intr */,
1682 0 /* don't reset intr timer */); 1488 0 /* don't reset intr timer */);
1683 1489
1684 err = vnic_rq_fill(&enic->rq[0], enic->rq_alloc_buf); 1490 err = vnic_rq_fill(&enic->rq[0], enic_rq_alloc_buf);
1685 1491
1686 /* Buffer allocation failed. Stay in polling 1492 /* Buffer allocation failed. Stay in polling
1687 * mode so we can try to fill the ring again. 1493 * mode so we can try to fill the ring again.
@@ -1731,7 +1537,7 @@ static int enic_poll_msix(struct napi_struct *napi, int budget)
1731 0 /* don't unmask intr */, 1537 0 /* don't unmask intr */,
1732 0 /* don't reset intr timer */); 1538 0 /* don't reset intr timer */);
1733 1539
1734 err = vnic_rq_fill(&enic->rq[rq], enic->rq_alloc_buf); 1540 err = vnic_rq_fill(&enic->rq[rq], enic_rq_alloc_buf);
1735 1541
1736 /* Buffer allocation failed. Stay in polling mode 1542 /* Buffer allocation failed. Stay in polling mode
1737 * so we can try to fill the ring again. 1543 * so we can try to fill the ring again.
@@ -1901,39 +1707,6 @@ static int enic_dev_notify_set(struct enic *enic)
1901 return err; 1707 return err;
1902} 1708}
1903 1709
1904static int enic_dev_notify_unset(struct enic *enic)
1905{
1906 int err;
1907
1908 spin_lock(&enic->devcmd_lock);
1909 err = vnic_dev_notify_unset(enic->vdev);
1910 spin_unlock(&enic->devcmd_lock);
1911
1912 return err;
1913}
1914
1915static int enic_dev_enable(struct enic *enic)
1916{
1917 int err;
1918
1919 spin_lock(&enic->devcmd_lock);
1920 err = vnic_dev_enable_wait(enic->vdev);
1921 spin_unlock(&enic->devcmd_lock);
1922
1923 return err;
1924}
1925
1926static int enic_dev_disable(struct enic *enic)
1927{
1928 int err;
1929
1930 spin_lock(&enic->devcmd_lock);
1931 err = vnic_dev_disable(enic->vdev);
1932 spin_unlock(&enic->devcmd_lock);
1933
1934 return err;
1935}
1936
1937static void enic_notify_timer_start(struct enic *enic) 1710static void enic_notify_timer_start(struct enic *enic)
1938{ 1711{
1939 switch (vnic_dev_get_intr_mode(enic->vdev)) { 1712 switch (vnic_dev_get_intr_mode(enic->vdev)) {
@@ -1967,7 +1740,7 @@ static int enic_open(struct net_device *netdev)
1967 } 1740 }
1968 1741
1969 for (i = 0; i < enic->rq_count; i++) { 1742 for (i = 0; i < enic->rq_count; i++) {
1970 vnic_rq_fill(&enic->rq[i], enic->rq_alloc_buf); 1743 vnic_rq_fill(&enic->rq[i], enic_rq_alloc_buf);
1971 /* Need at least one buffer on ring to get going */ 1744 /* Need at least one buffer on ring to get going */
1972 if (vnic_rq_desc_used(&enic->rq[i]) == 0) { 1745 if (vnic_rq_desc_used(&enic->rq[i]) == 0) {
1973 netdev_err(netdev, "Unable to alloc receive buffers\n"); 1746 netdev_err(netdev, "Unable to alloc receive buffers\n");
@@ -2285,29 +2058,6 @@ static int enic_set_rss_nic_cfg(struct enic *enic)
2285 rss_hash_bits, rss_base_cpu, rss_enable); 2058 rss_hash_bits, rss_base_cpu, rss_enable);
2286} 2059}
2287 2060
2288static int enic_dev_hang_notify(struct enic *enic)
2289{
2290 int err;
2291
2292 spin_lock(&enic->devcmd_lock);
2293 err = vnic_dev_hang_notify(enic->vdev);
2294 spin_unlock(&enic->devcmd_lock);
2295
2296 return err;
2297}
2298
2299static int enic_dev_set_ig_vlan_rewrite_mode(struct enic *enic)
2300{
2301 int err;
2302
2303 spin_lock(&enic->devcmd_lock);
2304 err = vnic_dev_set_ig_vlan_rewrite_mode(enic->vdev,
2305 IG_VLAN_REWRITE_MODE_PRIORITY_TAG_DEFAULT_VLAN);
2306 spin_unlock(&enic->devcmd_lock);
2307
2308 return err;
2309}
2310
2311static void enic_reset(struct work_struct *work) 2061static void enic_reset(struct work_struct *work)
2312{ 2062{
2313 struct enic *enic = container_of(work, struct enic, reset); 2063 struct enic *enic = container_of(work, struct enic, reset);
@@ -2320,7 +2070,7 @@ static void enic_reset(struct work_struct *work)
2320 enic_dev_hang_notify(enic); 2070 enic_dev_hang_notify(enic);
2321 enic_stop(enic->netdev); 2071 enic_stop(enic->netdev);
2322 enic_dev_hang_reset(enic); 2072 enic_dev_hang_reset(enic);
2323 enic_reset_multicast_list(enic); 2073 enic_reset_addr_lists(enic);
2324 enic_init_vnic_resources(enic); 2074 enic_init_vnic_resources(enic);
2325 enic_set_rss_nic_cfg(enic); 2075 enic_set_rss_nic_cfg(enic);
2326 enic_dev_set_ig_vlan_rewrite_mode(enic); 2076 enic_dev_set_ig_vlan_rewrite_mode(enic);
@@ -2332,7 +2082,7 @@ static void enic_reset(struct work_struct *work)
2332static int enic_set_intr_mode(struct enic *enic) 2082static int enic_set_intr_mode(struct enic *enic)
2333{ 2083{
2334 unsigned int n = min_t(unsigned int, enic->rq_count, ENIC_RQ_MAX); 2084 unsigned int n = min_t(unsigned int, enic->rq_count, ENIC_RQ_MAX);
2335 unsigned int m = 1; 2085 unsigned int m = min_t(unsigned int, enic->wq_count, ENIC_WQ_MAX);
2336 unsigned int i; 2086 unsigned int i;
2337 2087
2338 /* Set interrupt mode (INTx, MSI, MSI-X) depending 2088 /* Set interrupt mode (INTx, MSI, MSI-X) depending
@@ -2475,9 +2225,7 @@ static const struct net_device_ops enic_netdev_dynamic_ops = {
2475 .ndo_tx_timeout = enic_tx_timeout, 2225 .ndo_tx_timeout = enic_tx_timeout,
2476 .ndo_set_vf_port = enic_set_vf_port, 2226 .ndo_set_vf_port = enic_set_vf_port,
2477 .ndo_get_vf_port = enic_get_vf_port, 2227 .ndo_get_vf_port = enic_get_vf_port,
2478#ifdef IFLA_VF_MAX
2479 .ndo_set_vf_mac = enic_set_vf_mac, 2228 .ndo_set_vf_mac = enic_set_vf_mac,
2480#endif
2481#ifdef CONFIG_NET_POLL_CONTROLLER 2229#ifdef CONFIG_NET_POLL_CONTROLLER
2482 .ndo_poll_controller = enic_poll_controller, 2230 .ndo_poll_controller = enic_poll_controller,
2483#endif 2231#endif
@@ -2556,25 +2304,12 @@ static int enic_dev_init(struct enic *enic)
2556 2304
2557 enic_init_vnic_resources(enic); 2305 enic_init_vnic_resources(enic);
2558 2306
2559 err = enic_set_rq_alloc_buf(enic);
2560 if (err) {
2561 dev_err(dev, "Failed to set RQ buffer allocator, aborting\n");
2562 goto err_out_free_vnic_resources;
2563 }
2564
2565 err = enic_set_rss_nic_cfg(enic); 2307 err = enic_set_rss_nic_cfg(enic);
2566 if (err) { 2308 if (err) {
2567 dev_err(dev, "Failed to config nic, aborting\n"); 2309 dev_err(dev, "Failed to config nic, aborting\n");
2568 goto err_out_free_vnic_resources; 2310 goto err_out_free_vnic_resources;
2569 } 2311 }
2570 2312
2571 err = enic_dev_set_ig_vlan_rewrite_mode(enic);
2572 if (err) {
2573 dev_err(dev,
2574 "Failed to set ingress vlan rewrite mode, aborting.\n");
2575 goto err_out_free_vnic_resources;
2576 }
2577
2578 switch (vnic_dev_get_intr_mode(enic->vdev)) { 2313 switch (vnic_dev_get_intr_mode(enic->vdev)) {
2579 default: 2314 default:
2580 netif_napi_add(netdev, &enic->napi[0], enic_poll, 64); 2315 netif_napi_add(netdev, &enic->napi[0], enic_poll, 64);
@@ -2713,6 +2448,22 @@ static int __devinit enic_probe(struct pci_dev *pdev,
2713 goto err_out_vnic_unregister; 2448 goto err_out_vnic_unregister;
2714 } 2449 }
2715 2450
2451 /* Setup devcmd lock
2452 */
2453
2454 spin_lock_init(&enic->devcmd_lock);
2455
2456 /*
2457 * Set ingress vlan rewrite mode before vnic initialization
2458 */
2459
2460 err = enic_dev_set_ig_vlan_rewrite_mode(enic);
2461 if (err) {
2462 dev_err(dev,
2463 "Failed to set ingress vlan rewrite mode, aborting.\n");
2464 goto err_out_dev_close;
2465 }
2466
2716 /* Issue device init to initialize the vnic-to-switch link. 2467 /* Issue device init to initialize the vnic-to-switch link.
2717 * We'll start with carrier off and wait for link UP 2468 * We'll start with carrier off and wait for link UP
2718 * notification later to turn on carrier. We don't need 2469 * notification later to turn on carrier. We don't need
@@ -2736,11 +2487,6 @@ static int __devinit enic_probe(struct pci_dev *pdev,
2736 } 2487 }
2737 } 2488 }
2738 2489
2739 /* Setup devcmd lock
2740 */
2741
2742 spin_lock_init(&enic->devcmd_lock);
2743
2744 err = enic_dev_init(enic); 2490 err = enic_dev_init(enic);
2745 if (err) { 2491 if (err) {
2746 dev_err(dev, "Device initialization failed, aborting\n"); 2492 dev_err(dev, "Device initialization failed, aborting\n");