mirror of
https://github.com/torvalds/linux.git
synced 2026-09-22 12:44:03 +02:00
Merge branch 'net-hns3-some-cleanups-for-hns3-driver'
Jijie Shao says: ==================== net: hns3: some cleanups for hns3 driver Patch 1 sets msg->desc to NULL after kfree to avoid leaving a dangling pointer in a struct that is reused across loop iterations. Patch 2 adds the missing const qualifier to the reg parameter of hclge_log_error(), which is never modified within the function. Patch 3 uses the txqueue parameter passed by the ndo_tx_timeout callback directly, instead of iterating all tx queues to find the timed out one. ==================== Link: https://patch.msgid.link/20260807095435.2959246-1-shaojijie@huawei.com Signed-off-by: Paolo Abeni <pabeni@redhat.com>
This commit is contained in:
commit
31397cf181
|
|
@ -2825,32 +2825,28 @@ static int hns3_nic_change_mtu(struct net_device *netdev, int new_mtu)
|
|||
return ret;
|
||||
}
|
||||
|
||||
static int hns3_get_timeout_queue(struct net_device *ndev)
|
||||
static bool hns3_dump_timeout_queue(struct net_device *ndev,
|
||||
unsigned int txqueue)
|
||||
{
|
||||
unsigned int i;
|
||||
unsigned int timedout_ms;
|
||||
struct netdev_queue *q;
|
||||
|
||||
/* Find the stopped queue the same way the stack does */
|
||||
for (i = 0; i < ndev->num_tx_queues; i++) {
|
||||
unsigned int timedout_ms;
|
||||
struct netdev_queue *q;
|
||||
|
||||
q = netdev_get_tx_queue(ndev, i);
|
||||
timedout_ms = netif_xmit_timeout_ms(q);
|
||||
if (timedout_ms) {
|
||||
q = netdev_get_tx_queue(ndev, txqueue);
|
||||
timedout_ms = netif_xmit_timeout_ms(q);
|
||||
if (timedout_ms) {
|
||||
#ifdef CONFIG_BQL
|
||||
struct dql *dql = &q->dql;
|
||||
struct dql *dql = &q->dql;
|
||||
|
||||
netdev_info(ndev, "DQL info last_cnt: %u, queued: %u, adj_limit: %u, completed: %u\n",
|
||||
dql->last_obj_cnt, dql->num_queued,
|
||||
dql->adj_limit, dql->num_completed);
|
||||
netdev_info(ndev, "DQL info last_cnt: %u, queued: %u, adj_limit: %u, completed: %u\n",
|
||||
dql->last_obj_cnt, dql->num_queued,
|
||||
dql->adj_limit, dql->num_completed);
|
||||
#endif
|
||||
netdev_info(ndev, "queue state: 0x%lx, delta msecs: %u\n",
|
||||
q->state, timedout_ms);
|
||||
break;
|
||||
}
|
||||
netdev_info(ndev, "queue state: 0x%lx, delta msecs: %u\n",
|
||||
q->state, timedout_ms);
|
||||
return true;
|
||||
}
|
||||
|
||||
return i;
|
||||
return false;
|
||||
}
|
||||
|
||||
static void hns3_dump_queue_stats(struct net_device *ndev,
|
||||
|
|
@ -2900,15 +2896,15 @@ static void hns3_dump_queue_reg(struct net_device *ndev,
|
|||
HNS3_RING_TX_RING_EBD_OFFSET_REG));
|
||||
}
|
||||
|
||||
static bool hns3_get_tx_timeo_queue_info(struct net_device *ndev)
|
||||
static bool hns3_get_tx_timeo_queue_info(struct net_device *ndev,
|
||||
unsigned int txqueue)
|
||||
{
|
||||
struct hns3_nic_priv *priv = netdev_priv(ndev);
|
||||
struct hnae3_handle *h = hns3_get_handle(ndev);
|
||||
struct hns3_enet_ring *tx_ring;
|
||||
u32 timeout_queue;
|
||||
|
||||
timeout_queue = hns3_get_timeout_queue(ndev);
|
||||
if (timeout_queue >= ndev->num_tx_queues) {
|
||||
if (txqueue >= h->kinfo.num_tqps ||
|
||||
!hns3_dump_timeout_queue(ndev, txqueue)) {
|
||||
netdev_info(ndev,
|
||||
"no netdev TX timeout queue found, timeout count: %llu\n",
|
||||
priv->tx_timeout_count);
|
||||
|
|
@ -2917,8 +2913,8 @@ static bool hns3_get_tx_timeo_queue_info(struct net_device *ndev)
|
|||
|
||||
priv->tx_timeout_count++;
|
||||
|
||||
tx_ring = &priv->ring[timeout_queue];
|
||||
hns3_dump_queue_stats(ndev, tx_ring, timeout_queue);
|
||||
tx_ring = &priv->ring[txqueue];
|
||||
hns3_dump_queue_stats(ndev, tx_ring, txqueue);
|
||||
|
||||
/* When mac received many pause frames continuous, it's unable to send
|
||||
* packets, which may cause tx timeout
|
||||
|
|
@ -2941,7 +2937,7 @@ static void hns3_nic_net_timeout(struct net_device *ndev, unsigned int txqueue)
|
|||
struct hns3_nic_priv *priv = netdev_priv(ndev);
|
||||
struct hnae3_handle *h = priv->ae_handle;
|
||||
|
||||
if (!hns3_get_tx_timeo_queue_info(ndev))
|
||||
if (!hns3_get_tx_timeo_queue_info(ndev, txqueue))
|
||||
return;
|
||||
|
||||
/* request the reset, and let the hclge to determine
|
||||
|
|
|
|||
|
|
@ -1592,6 +1592,7 @@ hclge_query_reg_info(struct hclge_dev *hdev,
|
|||
}
|
||||
|
||||
kfree(msg->desc);
|
||||
msg->desc = NULL;
|
||||
}
|
||||
|
||||
static void hclge_query_reg_info_of_ssu(struct hclge_dev *hdev)
|
||||
|
|
@ -1761,7 +1762,7 @@ static const struct hclge_hw_type_id hclge_hw_type_id_st[] = {
|
|||
},
|
||||
};
|
||||
|
||||
static void hclge_log_error(struct device *dev, char *reg,
|
||||
static void hclge_log_error(struct device *dev, const char *reg,
|
||||
const struct hclge_hw_error *err,
|
||||
u32 err_sts, unsigned long *reset_requests)
|
||||
{
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user