Skip to content

Commit d156250

Browse files
committed
Merge branch 'hns3-next'
Guangbin Huang says: ==================== net: hns3: updates for -next This series includes some updates for the HNS3 ethernet driver. ==================== Signed-off-by: David S. Miller <[email protected]>
2 parents 4593222 + db59629 commit d156250

File tree

8 files changed

+118
-37
lines changed

8 files changed

+118
-37
lines changed

drivers/net/ethernet/hisilicon/hns3/hclge_mbx.h

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -80,6 +80,9 @@ enum hclge_mbx_tbl_cfg_subcode {
8080
#define HCLGE_MBX_MAX_RESP_DATA_SIZE 8U
8181
#define HCLGE_MBX_MAX_RING_CHAIN_PARAM_NUM 4
8282

83+
#define HCLGE_RESET_SCHED_TIMEOUT (3 * HZ)
84+
#define HCLGE_MBX_SCHED_TIMEOUT (HZ / 2)
85+
8386
struct hclge_ring_chain_param {
8487
u8 ring_type;
8588
u8 tqp_index;

drivers/net/ethernet/hisilicon/hns3/hnae3.h

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -859,6 +859,20 @@ struct hnae3_handle {
859859
#define hnae3_get_bit(origin, shift) \
860860
hnae3_get_field(origin, 0x1 << (shift), shift)
861861

862+
#define HNAE3_FORMAT_MAC_ADDR_LEN 18
863+
#define HNAE3_FORMAT_MAC_ADDR_OFFSET_0 0
864+
#define HNAE3_FORMAT_MAC_ADDR_OFFSET_4 4
865+
#define HNAE3_FORMAT_MAC_ADDR_OFFSET_5 5
866+
867+
static inline void hnae3_format_mac_addr(char *format_mac_addr,
868+
const u8 *mac_addr)
869+
{
870+
snprintf(format_mac_addr, HNAE3_FORMAT_MAC_ADDR_LEN, "%02x:**:**:**:%02x:%02x",
871+
mac_addr[HNAE3_FORMAT_MAC_ADDR_OFFSET_0],
872+
mac_addr[HNAE3_FORMAT_MAC_ADDR_OFFSET_4],
873+
mac_addr[HNAE3_FORMAT_MAC_ADDR_OFFSET_5]);
874+
}
875+
862876
int hnae3_register_ae_dev(struct hnae3_ae_dev *ae_dev);
863877
void hnae3_unregister_ae_dev(struct hnae3_ae_dev *ae_dev);
864878

drivers/net/ethernet/hisilicon/hns3/hns3_enet.c

Lines changed: 27 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -2251,6 +2251,8 @@ netdev_tx_t hns3_nic_net_xmit(struct sk_buff *skb, struct net_device *netdev)
22512251

22522252
static int hns3_nic_net_set_mac_address(struct net_device *netdev, void *p)
22532253
{
2254+
char format_mac_addr_perm[HNAE3_FORMAT_MAC_ADDR_LEN];
2255+
char format_mac_addr_sa[HNAE3_FORMAT_MAC_ADDR_LEN];
22542256
struct hnae3_handle *h = hns3_get_handle(netdev);
22552257
struct sockaddr *mac_addr = p;
22562258
int ret;
@@ -2259,8 +2261,9 @@ static int hns3_nic_net_set_mac_address(struct net_device *netdev, void *p)
22592261
return -EADDRNOTAVAIL;
22602262

22612263
if (ether_addr_equal(netdev->dev_addr, mac_addr->sa_data)) {
2262-
netdev_info(netdev, "already using mac address %pM\n",
2263-
mac_addr->sa_data);
2264+
hnae3_format_mac_addr(format_mac_addr_sa, mac_addr->sa_data);
2265+
netdev_info(netdev, "already using mac address %s\n",
2266+
format_mac_addr_sa);
22642267
return 0;
22652268
}
22662269

@@ -2269,8 +2272,10 @@ static int hns3_nic_net_set_mac_address(struct net_device *netdev, void *p)
22692272
*/
22702273
if (!hns3_is_phys_func(h->pdev) &&
22712274
!is_zero_ether_addr(netdev->perm_addr)) {
2272-
netdev_err(netdev, "has permanent MAC %pM, user MAC %pM not allow\n",
2273-
netdev->perm_addr, mac_addr->sa_data);
2275+
hnae3_format_mac_addr(format_mac_addr_perm, netdev->perm_addr);
2276+
hnae3_format_mac_addr(format_mac_addr_sa, mac_addr->sa_data);
2277+
netdev_err(netdev, "has permanent MAC %s, user MAC %s not allow\n",
2278+
format_mac_addr_perm, format_mac_addr_sa);
22742279
return -EPERM;
22752280
}
22762281

@@ -2678,6 +2683,13 @@ static bool hns3_get_tx_timeo_queue_info(struct net_device *ndev)
26782683
if (netif_xmit_stopped(q) &&
26792684
time_after(jiffies,
26802685
(trans_start + ndev->watchdog_timeo))) {
2686+
#ifdef CONFIG_BQL
2687+
struct dql *dql = &q->dql;
2688+
2689+
netdev_info(ndev, "DQL info last_cnt: %u, queued: %u, adj_limit: %u, completed: %u\n",
2690+
dql->last_obj_cnt, dql->num_queued,
2691+
dql->adj_limit, dql->num_completed);
2692+
#endif
26812693
timeout_queue = i;
26822694
netdev_info(ndev, "queue state: 0x%lx, delta msecs: %u\n",
26832695
q->state,
@@ -2832,14 +2844,16 @@ static int hns3_nic_set_vf_rate(struct net_device *ndev, int vf,
28322844
static int hns3_nic_set_vf_mac(struct net_device *netdev, int vf_id, u8 *mac)
28332845
{
28342846
struct hnae3_handle *h = hns3_get_handle(netdev);
2847+
char format_mac_addr[HNAE3_FORMAT_MAC_ADDR_LEN];
28352848

28362849
if (!h->ae_algo->ops->set_vf_mac)
28372850
return -EOPNOTSUPP;
28382851

28392852
if (is_multicast_ether_addr(mac)) {
2853+
hnae3_format_mac_addr(format_mac_addr, mac);
28402854
netdev_err(netdev,
2841-
"Invalid MAC:%pM specified. Could not set MAC\n",
2842-
mac);
2855+
"Invalid MAC:%s specified. Could not set MAC\n",
2856+
format_mac_addr);
28432857
return -EINVAL;
28442858
}
28452859

@@ -4930,6 +4944,7 @@ static void hns3_uninit_all_ring(struct hns3_nic_priv *priv)
49304944
static int hns3_init_mac_addr(struct net_device *netdev)
49314945
{
49324946
struct hns3_nic_priv *priv = netdev_priv(netdev);
4947+
char format_mac_addr[HNAE3_FORMAT_MAC_ADDR_LEN];
49334948
struct hnae3_handle *h = priv->ae_handle;
49344949
u8 mac_addr_temp[ETH_ALEN];
49354950
int ret = 0;
@@ -4940,8 +4955,9 @@ static int hns3_init_mac_addr(struct net_device *netdev)
49404955
/* Check if the MAC address is valid, if not get a random one */
49414956
if (!is_valid_ether_addr(mac_addr_temp)) {
49424957
eth_hw_addr_random(netdev);
4943-
dev_warn(priv->dev, "using random MAC address %pM\n",
4944-
netdev->dev_addr);
4958+
hnae3_format_mac_addr(format_mac_addr, netdev->dev_addr);
4959+
dev_warn(priv->dev, "using random MAC address %s\n",
4960+
format_mac_addr);
49454961
} else if (!ether_addr_equal(netdev->dev_addr, mac_addr_temp)) {
49464962
eth_hw_addr_set(netdev, mac_addr_temp);
49474963
ether_addr_copy(netdev->perm_addr, mac_addr_temp);
@@ -4993,8 +5009,10 @@ static void hns3_client_stop(struct hnae3_handle *handle)
49935009
static void hns3_info_show(struct hns3_nic_priv *priv)
49945010
{
49955011
struct hnae3_knic_private_info *kinfo = &priv->ae_handle->kinfo;
5012+
char format_mac_addr[HNAE3_FORMAT_MAC_ADDR_LEN];
49965013

4997-
dev_info(priv->dev, "MAC address: %pM\n", priv->netdev->dev_addr);
5014+
hnae3_format_mac_addr(format_mac_addr, priv->netdev->dev_addr);
5015+
dev_info(priv->dev, "MAC address: %s\n", format_mac_addr);
49985016
dev_info(priv->dev, "Task queue pairs numbers: %u\n", kinfo->num_tqps);
49995017
dev_info(priv->dev, "RSS size: %u\n", kinfo->rss_size);
50005018
dev_info(priv->dev, "Allocated RSS size: %u\n", kinfo->req_rss_size);

drivers/net/ethernet/hisilicon/hns3/hns3pf/hclge_debugfs.h

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -321,10 +321,10 @@ static const struct hclge_dbg_dfx_message hclge_dbg_igu_egu_reg[] = {
321321
{true, "IGU_RX_OUT_UDP0_PKT"},
322322

323323
{true, "IGU_RX_IN_UDP0_PKT"},
324-
{false, "Reserved"},
325-
{false, "Reserved"},
326-
{false, "Reserved"},
327-
{false, "Reserved"},
324+
{true, "IGU_MC_CAR_DROP_PKT_L"},
325+
{true, "IGU_MC_CAR_DROP_PKT_H"},
326+
{true, "IGU_BC_CAR_DROP_PKT_L"},
327+
{true, "IGU_BC_CAR_DROP_PKT_H"},
328328
{false, "Reserved"},
329329

330330
{true, "IGU_RX_OVERSIZE_PKT_L"},

drivers/net/ethernet/hisilicon/hns3/hns3pf/hclge_main.c

Lines changed: 55 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -2933,16 +2933,20 @@ static int hclge_mac_init(struct hclge_dev *hdev)
29332933
static void hclge_mbx_task_schedule(struct hclge_dev *hdev)
29342934
{
29352935
if (!test_bit(HCLGE_STATE_REMOVING, &hdev->state) &&
2936-
!test_and_set_bit(HCLGE_STATE_MBX_SERVICE_SCHED, &hdev->state))
2936+
!test_and_set_bit(HCLGE_STATE_MBX_SERVICE_SCHED, &hdev->state)) {
2937+
hdev->last_mbx_scheduled = jiffies;
29372938
mod_delayed_work(hclge_wq, &hdev->service_task, 0);
2939+
}
29382940
}
29392941

29402942
static void hclge_reset_task_schedule(struct hclge_dev *hdev)
29412943
{
29422944
if (!test_bit(HCLGE_STATE_REMOVING, &hdev->state) &&
29432945
test_bit(HCLGE_STATE_SERVICE_INITED, &hdev->state) &&
2944-
!test_and_set_bit(HCLGE_STATE_RST_SERVICE_SCHED, &hdev->state))
2946+
!test_and_set_bit(HCLGE_STATE_RST_SERVICE_SCHED, &hdev->state)) {
2947+
hdev->last_rst_scheduled = jiffies;
29452948
mod_delayed_work(hclge_wq, &hdev->service_task, 0);
2949+
}
29462950
}
29472951

29482952
static void hclge_errhand_task_schedule(struct hclge_dev *hdev)
@@ -3831,6 +3835,13 @@ static void hclge_mailbox_service_task(struct hclge_dev *hdev)
38313835
test_and_set_bit(HCLGE_STATE_MBX_HANDLING, &hdev->state))
38323836
return;
38333837

3838+
if (time_is_before_jiffies(hdev->last_mbx_scheduled +
3839+
HCLGE_MBX_SCHED_TIMEOUT))
3840+
dev_warn(&hdev->pdev->dev,
3841+
"mbx service task is scheduled after %ums on cpu%u!\n",
3842+
jiffies_to_msecs(jiffies - hdev->last_mbx_scheduled),
3843+
smp_processor_id());
3844+
38343845
hclge_mbx_handler(hdev);
38353846

38363847
clear_bit(HCLGE_STATE_MBX_HANDLING, &hdev->state);
@@ -4480,6 +4491,13 @@ static void hclge_reset_service_task(struct hclge_dev *hdev)
44804491
if (!test_and_clear_bit(HCLGE_STATE_RST_SERVICE_SCHED, &hdev->state))
44814492
return;
44824493

4494+
if (time_is_before_jiffies(hdev->last_rst_scheduled +
4495+
HCLGE_RESET_SCHED_TIMEOUT))
4496+
dev_warn(&hdev->pdev->dev,
4497+
"reset service task is scheduled after %ums on cpu%u!\n",
4498+
jiffies_to_msecs(jiffies - hdev->last_rst_scheduled),
4499+
smp_processor_id());
4500+
44834501
down(&hdev->reset_sem);
44844502
set_bit(HCLGE_STATE_RST_HANDLING, &hdev->state);
44854503

@@ -8743,6 +8761,7 @@ int hclge_update_mac_list(struct hclge_vport *vport,
87438761
enum HCLGE_MAC_ADDR_TYPE mac_type,
87448762
const unsigned char *addr)
87458763
{
8764+
char format_mac_addr[HNAE3_FORMAT_MAC_ADDR_LEN];
87468765
struct hclge_dev *hdev = vport->back;
87478766
struct hclge_mac_node *mac_node;
87488767
struct list_head *list;
@@ -8767,9 +8786,10 @@ int hclge_update_mac_list(struct hclge_vport *vport,
87678786
/* if this address is never added, unnecessary to delete */
87688787
if (state == HCLGE_MAC_TO_DEL) {
87698788
spin_unlock_bh(&vport->mac_list_lock);
8789+
hnae3_format_mac_addr(format_mac_addr, addr);
87708790
dev_err(&hdev->pdev->dev,
8771-
"failed to delete address %pM from mac list\n",
8772-
addr);
8791+
"failed to delete address %s from mac list\n",
8792+
format_mac_addr);
87738793
return -ENOENT;
87748794
}
87758795

@@ -8802,6 +8822,7 @@ static int hclge_add_uc_addr(struct hnae3_handle *handle,
88028822
int hclge_add_uc_addr_common(struct hclge_vport *vport,
88038823
const unsigned char *addr)
88048824
{
8825+
char format_mac_addr[HNAE3_FORMAT_MAC_ADDR_LEN];
88058826
struct hclge_dev *hdev = vport->back;
88068827
struct hclge_mac_vlan_tbl_entry_cmd req;
88078828
struct hclge_desc desc;
@@ -8812,9 +8833,10 @@ int hclge_add_uc_addr_common(struct hclge_vport *vport,
88128833
if (is_zero_ether_addr(addr) ||
88138834
is_broadcast_ether_addr(addr) ||
88148835
is_multicast_ether_addr(addr)) {
8836+
hnae3_format_mac_addr(format_mac_addr, addr);
88158837
dev_err(&hdev->pdev->dev,
8816-
"Set_uc mac err! invalid mac:%pM. is_zero:%d,is_br=%d,is_mul=%d\n",
8817-
addr, is_zero_ether_addr(addr),
8838+
"Set_uc mac err! invalid mac:%s. is_zero:%d,is_br=%d,is_mul=%d\n",
8839+
format_mac_addr, is_zero_ether_addr(addr),
88188840
is_broadcast_ether_addr(addr),
88198841
is_multicast_ether_addr(addr));
88208842
return -EINVAL;
@@ -8871,6 +8893,7 @@ static int hclge_rm_uc_addr(struct hnae3_handle *handle,
88718893
int hclge_rm_uc_addr_common(struct hclge_vport *vport,
88728894
const unsigned char *addr)
88738895
{
8896+
char format_mac_addr[HNAE3_FORMAT_MAC_ADDR_LEN];
88748897
struct hclge_dev *hdev = vport->back;
88758898
struct hclge_mac_vlan_tbl_entry_cmd req;
88768899
int ret;
@@ -8879,8 +8902,9 @@ int hclge_rm_uc_addr_common(struct hclge_vport *vport,
88798902
if (is_zero_ether_addr(addr) ||
88808903
is_broadcast_ether_addr(addr) ||
88818904
is_multicast_ether_addr(addr)) {
8882-
dev_dbg(&hdev->pdev->dev, "Remove mac err! invalid mac:%pM.\n",
8883-
addr);
8905+
hnae3_format_mac_addr(format_mac_addr, addr);
8906+
dev_dbg(&hdev->pdev->dev, "Remove mac err! invalid mac:%s.\n",
8907+
format_mac_addr);
88848908
return -EINVAL;
88858909
}
88868910

@@ -8911,6 +8935,7 @@ static int hclge_add_mc_addr(struct hnae3_handle *handle,
89118935
int hclge_add_mc_addr_common(struct hclge_vport *vport,
89128936
const unsigned char *addr)
89138937
{
8938+
char format_mac_addr[HNAE3_FORMAT_MAC_ADDR_LEN];
89148939
struct hclge_dev *hdev = vport->back;
89158940
struct hclge_mac_vlan_tbl_entry_cmd req;
89168941
struct hclge_desc desc[3];
@@ -8919,9 +8944,10 @@ int hclge_add_mc_addr_common(struct hclge_vport *vport,
89198944

89208945
/* mac addr check */
89218946
if (!is_multicast_ether_addr(addr)) {
8947+
hnae3_format_mac_addr(format_mac_addr, addr);
89228948
dev_err(&hdev->pdev->dev,
8923-
"Add mc mac err! invalid mac:%pM.\n",
8924-
addr);
8949+
"Add mc mac err! invalid mac:%s.\n",
8950+
format_mac_addr);
89258951
return -EINVAL;
89268952
}
89278953
memset(&req, 0, sizeof(req));
@@ -8973,16 +8999,18 @@ static int hclge_rm_mc_addr(struct hnae3_handle *handle,
89738999
int hclge_rm_mc_addr_common(struct hclge_vport *vport,
89749000
const unsigned char *addr)
89759001
{
9002+
char format_mac_addr[HNAE3_FORMAT_MAC_ADDR_LEN];
89769003
struct hclge_dev *hdev = vport->back;
89779004
struct hclge_mac_vlan_tbl_entry_cmd req;
89789005
enum hclge_cmd_status status;
89799006
struct hclge_desc desc[3];
89809007

89819008
/* mac addr check */
89829009
if (!is_multicast_ether_addr(addr)) {
9010+
hnae3_format_mac_addr(format_mac_addr, addr);
89839011
dev_dbg(&hdev->pdev->dev,
8984-
"Remove mc mac err! invalid mac:%pM.\n",
8985-
addr);
9012+
"Remove mc mac err! invalid mac:%s.\n",
9013+
format_mac_addr);
89869014
return -EINVAL;
89879015
}
89889016

@@ -9422,30 +9450,32 @@ static int hclge_set_vf_mac(struct hnae3_handle *handle, int vf,
94229450
u8 *mac_addr)
94239451
{
94249452
struct hclge_vport *vport = hclge_get_vport(handle);
9453+
char format_mac_addr[HNAE3_FORMAT_MAC_ADDR_LEN];
94259454
struct hclge_dev *hdev = vport->back;
94269455

94279456
vport = hclge_get_vf_vport(hdev, vf);
94289457
if (!vport)
94299458
return -EINVAL;
94309459

9460+
hnae3_format_mac_addr(format_mac_addr, mac_addr);
94319461
if (ether_addr_equal(mac_addr, vport->vf_info.mac)) {
94329462
dev_info(&hdev->pdev->dev,
9433-
"Specified MAC(=%pM) is same as before, no change committed!\n",
9434-
mac_addr);
9463+
"Specified MAC(=%s) is same as before, no change committed!\n",
9464+
format_mac_addr);
94359465
return 0;
94369466
}
94379467

94389468
ether_addr_copy(vport->vf_info.mac, mac_addr);
94399469

94409470
if (test_bit(HCLGE_VPORT_STATE_ALIVE, &vport->state)) {
94419471
dev_info(&hdev->pdev->dev,
9442-
"MAC of VF %d has been set to %pM, and it will be reinitialized!\n",
9443-
vf, mac_addr);
9472+
"MAC of VF %d has been set to %s, and it will be reinitialized!\n",
9473+
vf, format_mac_addr);
94449474
return hclge_inform_reset_assert_to_vf(vport);
94459475
}
94469476

9447-
dev_info(&hdev->pdev->dev, "MAC of VF %d has been set to %pM\n",
9448-
vf, mac_addr);
9477+
dev_info(&hdev->pdev->dev, "MAC of VF %d has been set to %s\n",
9478+
vf, format_mac_addr);
94499479
return 0;
94509480
}
94519481

@@ -9549,6 +9579,7 @@ static int hclge_set_mac_addr(struct hnae3_handle *handle, const void *p,
95499579
{
95509580
const unsigned char *new_addr = (const unsigned char *)p;
95519581
struct hclge_vport *vport = hclge_get_vport(handle);
9582+
char format_mac_addr[HNAE3_FORMAT_MAC_ADDR_LEN];
95529583
struct hclge_dev *hdev = vport->back;
95539584
unsigned char *old_addr = NULL;
95549585
int ret;
@@ -9557,9 +9588,10 @@ static int hclge_set_mac_addr(struct hnae3_handle *handle, const void *p,
95579588
if (is_zero_ether_addr(new_addr) ||
95589589
is_broadcast_ether_addr(new_addr) ||
95599590
is_multicast_ether_addr(new_addr)) {
9591+
hnae3_format_mac_addr(format_mac_addr, new_addr);
95609592
dev_err(&hdev->pdev->dev,
9561-
"change uc mac err! invalid mac: %pM.\n",
9562-
new_addr);
9593+
"change uc mac err! invalid mac: %s.\n",
9594+
format_mac_addr);
95639595
return -EINVAL;
95649596
}
95659597

@@ -9577,9 +9609,10 @@ static int hclge_set_mac_addr(struct hnae3_handle *handle, const void *p,
95779609
spin_lock_bh(&vport->mac_list_lock);
95789610
ret = hclge_update_mac_node_for_dev_addr(vport, old_addr, new_addr);
95799611
if (ret) {
9612+
hnae3_format_mac_addr(format_mac_addr, new_addr);
95809613
dev_err(&hdev->pdev->dev,
9581-
"failed to change the mac addr:%pM, ret = %d\n",
9582-
new_addr, ret);
9614+
"failed to change the mac addr:%s, ret = %d\n",
9615+
format_mac_addr, ret);
95839616
spin_unlock_bh(&vport->mac_list_lock);
95849617

95859618
if (!is_first)

drivers/net/ethernet/hisilicon/hns3/hns3pf/hclge_main.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -955,6 +955,8 @@ struct hclge_dev {
955955
u16 hclge_fd_rule_num;
956956
unsigned long serv_processed_cnt;
957957
unsigned long last_serv_processed;
958+
unsigned long last_rst_scheduled;
959+
unsigned long last_mbx_scheduled;
958960
unsigned long fd_bmap[BITS_TO_LONGS(MAX_FD_FILTER_NUM)];
959961
enum HCLGE_FD_ACTIVE_RULE_TYPE fd_active_type;
960962
u8 fd_en;

drivers/net/ethernet/hisilicon/hns3/hns3pf/hclge_mbx.c

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -848,6 +848,14 @@ void hclge_mbx_handler(struct hclge_dev *hdev)
848848
if (hnae3_get_bit(req->mbx_need_resp, HCLGE_MBX_NEED_RESP_B) &&
849849
req->msg.code < HCLGE_MBX_GET_VF_FLR_STATUS) {
850850
resp_msg.status = ret;
851+
if (time_is_before_jiffies(hdev->last_mbx_scheduled +
852+
HCLGE_MBX_SCHED_TIMEOUT))
853+
dev_warn(&hdev->pdev->dev,
854+
"resp vport%u mbx(%u,%u) late\n",
855+
req->mbx_src_vfid,
856+
req->msg.code,
857+
req->msg.subcode);
858+
851859
hclge_gen_resp_to_vf(vport, req, &resp_msg);
852860
}
853861

0 commit comments

Comments
 (0)