Skip to content

Commit 720bd58

Browse files
Huazhong Tandavem330
authored andcommitted
net: hns3: add set_default_reset_request in the hnae3_ae_ops
Currently, when reset_event is called because of tx timeout, it will upgrade the reset level (For PF, HNAE3_FUNC_RESET -> HNAE3_CORE_RESET -> HNAE3_GLOBAL_RESET) if the time between the new reset and last reset is within 20 secs, or restore the reset level to HNAE3_FUNC_RESET if the time between the new reset and last reset is over 20 secs. There is requirement that the caller needs to decide the reset level when triggering a reset, for example, RAS recovery. So this patch adds the set_default_reset_request to meet this requirement. Signed-off-by: Huazhong Tan <[email protected]> Signed-off-by: David S. Miller <[email protected]>
1 parent 814da63 commit 720bd58

File tree

5 files changed

+45
-1
lines changed

5 files changed

+45
-1
lines changed

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

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -403,6 +403,8 @@ struct hnae3_ae_ops {
403403
u16 vlan, u8 qos, __be16 proto);
404404
int (*enable_hw_strip_rxvtag)(struct hnae3_handle *handle, bool enable);
405405
void (*reset_event)(struct pci_dev *pdev, struct hnae3_handle *handle);
406+
void (*set_default_reset_request)(struct hnae3_ae_dev *ae_dev,
407+
enum hnae3_reset_type rst_type);
406408
void (*get_channels)(struct hnae3_handle *handle,
407409
struct ethtool_channels *ch);
408410
void (*get_tqps_and_rss_info)(struct hnae3_handle *h,

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

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2517,6 +2517,10 @@ static void hclge_reset_event(struct pci_dev *pdev, struct hnae3_handle *handle)
25172517

25182518
if (time_before(jiffies, (handle->last_reset_time + 3 * HZ)))
25192519
return;
2520+
else if (hdev->default_reset_request)
2521+
handle->reset_level =
2522+
hclge_get_reset_level(hdev,
2523+
&hdev->default_reset_request);
25202524
else if (time_after(jiffies, (handle->last_reset_time + 4 * 5 * HZ)))
25212525
handle->reset_level = HNAE3_FUNC_RESET;
25222526

@@ -2531,6 +2535,14 @@ static void hclge_reset_event(struct pci_dev *pdev, struct hnae3_handle *handle)
25312535
handle->reset_level++;
25322536
}
25332537

2538+
static void hclge_set_def_reset_request(struct hnae3_ae_dev *ae_dev,
2539+
enum hnae3_reset_type rst_type)
2540+
{
2541+
struct hclge_dev *hdev = ae_dev->priv;
2542+
2543+
set_bit(rst_type, &hdev->default_reset_request);
2544+
}
2545+
25342546
static void hclge_reset_subtask(struct hclge_dev *hdev)
25352547
{
25362548
/* check if there is any ongoing reset in the hardware. This status can
@@ -7321,6 +7333,7 @@ static const struct hnae3_ae_ops hclge_ops = {
73217333
.set_vf_vlan_filter = hclge_set_vf_vlan_filter,
73227334
.enable_hw_strip_rxvtag = hclge_en_hw_strip_rxvtag,
73237335
.reset_event = hclge_reset_event,
7336+
.set_default_reset_request = hclge_set_def_reset_request,
73247337
.get_tqps_and_rss_info = hclge_get_tqps_and_rss_info,
73257338
.set_channels = hclge_set_channels,
73267339
.get_channels = hclge_get_channels,

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

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -595,6 +595,7 @@ struct hclge_dev {
595595
unsigned long state;
596596

597597
enum hnae3_reset_type reset_type;
598+
unsigned long default_reset_request;
598599
unsigned long reset_request; /* reset has been requested */
599600
unsigned long reset_pending; /* client rst is pending to be served */
600601
u32 fw_version;

drivers/net/ethernet/hisilicon/hns3/hns3vf/hclgevf_main.c

Lines changed: 28 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1219,14 +1219,32 @@ static int hclgevf_do_reset(struct hclgevf_dev *hdev)
12191219
return status;
12201220
}
12211221

1222+
static enum hnae3_reset_type hclgevf_get_reset_level(struct hclgevf_dev *hdev,
1223+
unsigned long *addr)
1224+
{
1225+
enum hnae3_reset_type rst_level = HNAE3_NONE_RESET;
1226+
1227+
if (test_bit(HNAE3_VF_RESET, addr)) {
1228+
rst_level = HNAE3_VF_RESET;
1229+
clear_bit(HNAE3_VF_RESET, addr);
1230+
}
1231+
1232+
return rst_level;
1233+
}
1234+
12221235
static void hclgevf_reset_event(struct pci_dev *pdev,
12231236
struct hnae3_handle *handle)
12241237
{
12251238
struct hclgevf_dev *hdev = hclgevf_ae_get_hdev(handle);
12261239

12271240
dev_info(&hdev->pdev->dev, "received reset request from VF enet\n");
12281241

1229-
handle->reset_level = HNAE3_VF_RESET;
1242+
if (!hdev->default_reset_request)
1243+
handle->reset_level =
1244+
hclgevf_get_reset_level(hdev,
1245+
&hdev->default_reset_request);
1246+
else
1247+
handle->reset_level = HNAE3_VF_RESET;
12301248

12311249
/* reset of this VF requested */
12321250
set_bit(HCLGEVF_RESET_REQUESTED, &hdev->reset_state);
@@ -1235,6 +1253,14 @@ static void hclgevf_reset_event(struct pci_dev *pdev,
12351253
handle->last_reset_time = jiffies;
12361254
}
12371255

1256+
static void hclgevf_set_def_reset_request(struct hnae3_ae_dev *ae_dev,
1257+
enum hnae3_reset_type rst_type)
1258+
{
1259+
struct hclgevf_dev *hdev = ae_dev->priv;
1260+
1261+
set_bit(rst_type, &hdev->default_reset_request);
1262+
}
1263+
12381264
static u32 hclgevf_get_fw_version(struct hnae3_handle *handle)
12391265
{
12401266
struct hclgevf_dev *hdev = hclgevf_ae_get_hdev(handle);
@@ -2193,6 +2219,7 @@ static const struct hnae3_ae_ops hclgevf_ops = {
21932219
.set_vlan_filter = hclgevf_set_vlan_filter,
21942220
.enable_hw_strip_rxvtag = hclgevf_en_hw_strip_rxvtag,
21952221
.reset_event = hclgevf_reset_event,
2222+
.set_default_reset_request = hclgevf_set_def_reset_request,
21962223
.get_channels = hclgevf_get_channels,
21972224
.get_tqps_and_rss_info = hclgevf_get_tqps_and_rss_info,
21982225
.get_status = hclgevf_get_status,

drivers/net/ethernet/hisilicon/hns3/hns3vf/hclgevf_main.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -145,6 +145,7 @@ struct hclgevf_dev {
145145
struct hclgevf_misc_vector misc_vector;
146146
struct hclgevf_rss_cfg rss_cfg;
147147
unsigned long state;
148+
unsigned long default_reset_request;
148149

149150
#define HCLGEVF_RESET_REQUESTED 0
150151
#define HCLGEVF_RESET_PENDING 1

0 commit comments

Comments
 (0)