Skip to content

Commit ea172a0

Browse files
Sathya Perladavem330
authored andcommitted
be2net: no need to query link status
Change in the link status generates an MCC event. This is processed and netif_carrier_on/off is called accordingly. Don't need to query/store the link_status state. Signed-off-by: Sathya Perla <sathya.perla@emulex.com> Signed-off-by: David S. Miller <davem@davemloft.net>
1 parent d09f698 commit ea172a0

File tree

5 files changed

+22
-43
lines changed

5 files changed

+22
-43
lines changed

drivers/net/benet/be.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -521,7 +521,7 @@ static inline bool be_multi_rxq(const struct be_adapter *adapter)
521521

522522
extern void be_cq_notify(struct be_adapter *adapter, u16 qid, bool arm,
523523
u16 num_popped);
524-
extern void be_link_status_update(struct be_adapter *adapter, bool link_up);
524+
extern void be_link_status_update(struct be_adapter *adapter, u32 link_status);
525525
extern void be_parse_stats(struct be_adapter *adapter);
526526
extern int be_load_fw(struct be_adapter *adapter, u8 *func);
527527
#endif /* BE_H */

drivers/net/benet/be_cmds.c

Lines changed: 3 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -110,8 +110,7 @@ static int be_mcc_compl_process(struct be_adapter *adapter,
110110
static void be_async_link_state_process(struct be_adapter *adapter,
111111
struct be_async_event_link_state *evt)
112112
{
113-
be_link_status_update(adapter,
114-
evt->port_link_status == ASYNC_EVENT_LINK_UP);
113+
be_link_status_update(adapter, evt->port_link_status);
115114
}
116115

117116
/* Grp5 CoS Priority evt */
@@ -1261,8 +1260,8 @@ int lancer_cmd_get_pport_stats(struct be_adapter *adapter,
12611260
}
12621261

12631262
/* Uses synchronous mcc */
1264-
int be_cmd_link_status_query(struct be_adapter *adapter,
1265-
bool *link_up, u8 *mac_speed, u16 *link_speed, u32 dom)
1263+
int be_cmd_link_status_query(struct be_adapter *adapter, u8 *mac_speed,
1264+
u16 *link_speed, u32 dom)
12661265
{
12671266
struct be_mcc_wrb *wrb;
12681267
struct be_cmd_req_link_status *req;
@@ -1277,8 +1276,6 @@ int be_cmd_link_status_query(struct be_adapter *adapter,
12771276
}
12781277
req = embedded_payload(wrb);
12791278

1280-
*link_up = false;
1281-
12821279
be_wrb_hdr_prepare(wrb, sizeof(*req), true, 0,
12831280
OPCODE_COMMON_NTWK_LINK_STATUS_QUERY);
12841281

@@ -1289,7 +1286,6 @@ int be_cmd_link_status_query(struct be_adapter *adapter,
12891286
if (!status) {
12901287
struct be_cmd_resp_link_status *resp = embedded_payload(wrb);
12911288
if (resp->mac_speed != PHY_LINK_SPEED_ZERO) {
1292-
*link_up = true;
12931289
*link_speed = le16_to_cpu(resp->link_speed);
12941290
*mac_speed = resp->mac_speed;
12951291
}

drivers/net/benet/be_cmds.h

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -89,9 +89,10 @@ struct be_async_event_trailer {
8989
};
9090

9191
enum {
92-
ASYNC_EVENT_LINK_DOWN = 0x0,
93-
ASYNC_EVENT_LINK_UP = 0x1
92+
LINK_DOWN = 0x0,
93+
LINK_UP = 0x1
9494
};
95+
#define LINK_STATUS_MASK 0x1
9596

9697
/* When the event code of an async trailer is link-state, the mcc_compl
9798
* must be interpreted as follows
@@ -1442,7 +1443,7 @@ extern int be_cmd_q_destroy(struct be_adapter *adapter, struct be_queue_info *q,
14421443
extern int be_cmd_rxq_destroy(struct be_adapter *adapter,
14431444
struct be_queue_info *q);
14441445
extern int be_cmd_link_status_query(struct be_adapter *adapter,
1445-
bool *link_up, u8 *mac_speed, u16 *link_speed, u32 dom);
1446+
u8 *mac_speed, u16 *link_speed, u32 dom);
14461447
extern int be_cmd_reset(struct be_adapter *adapter);
14471448
extern int be_cmd_get_stats(struct be_adapter *adapter,
14481449
struct be_dma_mem *nonemb_cmd);

drivers/net/benet/be_ethtool.c

Lines changed: 3 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -353,15 +353,13 @@ static int be_get_settings(struct net_device *netdev, struct ethtool_cmd *ecmd)
353353
struct be_cmd_resp_get_phy_info *resp;
354354
u8 mac_speed = 0;
355355
u16 link_speed = 0;
356-
bool link_up = false;
357356
int status;
358357
u16 intf_type;
359358

360359
if ((adapter->link_speed < 0) || (!(netdev->flags & IFF_UP))) {
361-
status = be_cmd_link_status_query(adapter, &link_up,
362-
&mac_speed, &link_speed, 0);
360+
status = be_cmd_link_status_query(adapter, &mac_speed,
361+
&link_speed, 0);
363362

364-
be_link_status_update(adapter, link_up);
365363
/* link_speed is in units of 10 Mbps */
366364
if (link_speed) {
367365
ethtool_cmd_speed_set(ecmd, link_speed*10);
@@ -617,7 +615,6 @@ static void
617615
be_self_test(struct net_device *netdev, struct ethtool_test *test, u64 *data)
618616
{
619617
struct be_adapter *adapter = netdev_priv(netdev);
620-
bool link_up;
621618
u8 mac_speed = 0;
622619
u16 qos_link_speed = 0;
623620

@@ -643,7 +640,7 @@ be_self_test(struct net_device *netdev, struct ethtool_test *test, u64 *data)
643640
test->flags |= ETH_TEST_FL_FAILED;
644641
}
645642

646-
if (be_cmd_link_status_query(adapter, &link_up, &mac_speed,
643+
if (be_cmd_link_status_query(adapter, &mac_speed,
647644
&qos_link_speed, 0) != 0) {
648645
test->flags |= ETH_TEST_FL_FAILED;
649646
data[4] = -1;

drivers/net/benet/be_main.c

Lines changed: 11 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -462,21 +462,18 @@ static struct rtnl_link_stats64 *be_get_stats64(struct net_device *netdev,
462462
return stats;
463463
}
464464

465-
void be_link_status_update(struct be_adapter *adapter, bool link_up)
465+
void be_link_status_update(struct be_adapter *adapter, u32 link_status)
466466
{
467467
struct net_device *netdev = adapter->netdev;
468468

469-
/* If link came up or went down */
470-
if (adapter->link_up != link_up) {
471-
adapter->link_speed = -1;
472-
if (link_up) {
473-
netif_carrier_on(netdev);
474-
printk(KERN_INFO "%s: Link up\n", netdev->name);
475-
} else {
476-
netif_carrier_off(netdev);
477-
printk(KERN_INFO "%s: Link down\n", netdev->name);
478-
}
479-
adapter->link_up = link_up;
469+
/* when link status changes, link speed must be re-queried from card */
470+
adapter->link_speed = -1;
471+
if ((link_status & LINK_STATUS_MASK) == LINK_UP) {
472+
netif_carrier_on(netdev);
473+
dev_info(&adapter->pdev->dev, "%s: Link up\n", netdev->name);
474+
} else {
475+
netif_carrier_off(netdev);
476+
dev_info(&adapter->pdev->dev, "%s: Link down\n", netdev->name);
480477
}
481478
}
482479

@@ -2217,8 +2214,6 @@ static int be_close(struct net_device *netdev)
22172214

22182215
be_async_mcc_disable(adapter);
22192216

2220-
adapter->link_up = false;
2221-
22222217
if (!lancer_chip(adapter))
22232218
be_intr_set(adapter, false);
22242219

@@ -2296,10 +2291,7 @@ static int be_open(struct net_device *netdev)
22962291
struct be_adapter *adapter = netdev_priv(netdev);
22972292
struct be_eq_obj *tx_eq = &adapter->tx_eq;
22982293
struct be_rx_obj *rxo;
2299-
bool link_up;
23002294
int status, i;
2301-
u8 mac_speed;
2302-
u16 link_speed;
23032295

23042296
status = be_rx_queues_setup(adapter);
23052297
if (status)
@@ -2322,12 +2314,6 @@ static int be_open(struct net_device *netdev)
23222314
/* Now that interrupts are on we can process async mcc */
23232315
be_async_mcc_enable(adapter);
23242316

2325-
status = be_cmd_link_status_query(adapter, &link_up, &mac_speed,
2326-
&link_speed, 0);
2327-
if (status)
2328-
goto err;
2329-
be_link_status_update(adapter, link_up);
2330-
23312317
if (be_physfn(adapter)) {
23322318
status = be_vid_config(adapter, false, 0);
23332319
if (status)
@@ -3347,7 +3333,6 @@ static int __devinit be_probe(struct pci_dev *pdev,
33473333

33483334
if (be_physfn(adapter) && adapter->sriov_enabled) {
33493335
u8 mac_speed;
3350-
bool link_up;
33513336
u16 vf, lnk_speed;
33523337

33533338
if (!lancer_chip(adapter)) {
@@ -3357,8 +3342,8 @@ static int __devinit be_probe(struct pci_dev *pdev,
33573342
}
33583343

33593344
for (vf = 0; vf < num_vfs; vf++) {
3360-
status = be_cmd_link_status_query(adapter, &link_up,
3361-
&mac_speed, &lnk_speed, vf + 1);
3345+
status = be_cmd_link_status_query(adapter, &mac_speed,
3346+
&lnk_speed, vf + 1);
33623347
if (!status)
33633348
adapter->vf_cfg[vf].vf_tx_rate = lnk_speed * 10;
33643349
else

0 commit comments

Comments
 (0)