Commit f520957d authored by David S. Miller's avatar David S. Miller

Merge branch 'hns3-reset-refactor'

Salil Mehta says:

====================
net: hns3: Refactors "reset" handling code in HCLGE layer of HNS3 driver

This patch refactors the code of the reset feature in HCLGE layer
of HNS3 PF driver. Prime motivation to do this change is:
1. To reduce the time for which common miscellaneous Vector 0
   interrupt is disabled because of the reset. Simplification
   of the common miscellaneous interrupt handler routine(for
   Vector 0) used to handle reset and other sources of Vector
   0 interrupt.
2. Separate the task for handling the reset
3. Simplification of reset request submission and pending reset
   logic.

To achieve above below few things have been done:
1. Interrupt is disabled while common miscellaneous interrupt
   handler is entered and re-enabled before it is exit. This
   reduces the interrupt handling latency as compared to older
   interrupt handling scheme where interrupt was being disabled
   in interrupt handler context and re-enabled in task context
   some time later. Made Miscellaneous interrupt handler more
   generic to handle all sources including reset interrupt source.
2. New reset service task has been introduced to service the
   reset handling.
3. Introduces new reset service task for honoring software reset
   requests like from network stack related to timeout and serving
   the pending reset request(to reset the driver and associated
   clients).

Change Log:
Patch V2: Addressed comment by Andrew Lunn
   Link: https://lkml.org/lkml/2017/12/1/366
Patch V1: Initial Submit
====================
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parents 81da3bf6 f2f432f2
...@@ -99,12 +99,19 @@ enum HCLGE_DEV_STATE { ...@@ -99,12 +99,19 @@ enum HCLGE_DEV_STATE {
HCLGE_STATE_REMOVING, HCLGE_STATE_REMOVING,
HCLGE_STATE_SERVICE_INITED, HCLGE_STATE_SERVICE_INITED,
HCLGE_STATE_SERVICE_SCHED, HCLGE_STATE_SERVICE_SCHED,
HCLGE_STATE_RST_SERVICE_SCHED,
HCLGE_STATE_RST_HANDLING,
HCLGE_STATE_MBX_HANDLING, HCLGE_STATE_MBX_HANDLING,
HCLGE_STATE_MBX_IRQ, HCLGE_STATE_MBX_IRQ,
HCLGE_STATE_RESET_INT,
HCLGE_STATE_MAX HCLGE_STATE_MAX
}; };
enum hclge_evt_cause {
HCLGE_VECTOR0_EVENT_RST,
HCLGE_VECTOR0_EVENT_MBX,
HCLGE_VECTOR0_EVENT_OTHER,
};
#define HCLGE_MPF_ENBALE 1 #define HCLGE_MPF_ENBALE 1
struct hclge_caps { struct hclge_caps {
u16 num_tqp; u16 num_tqp;
...@@ -420,6 +427,8 @@ struct hclge_dev { ...@@ -420,6 +427,8 @@ struct hclge_dev {
unsigned long state; unsigned long state;
enum hnae3_reset_type reset_type; enum hnae3_reset_type reset_type;
unsigned long reset_request; /* reset has been requested */
unsigned long reset_pending; /* client rst is pending to be served */
u32 fw_version; u32 fw_version;
u16 num_vmdq_vport; /* Num vmdq vport this PF has set up */ u16 num_vmdq_vport; /* Num vmdq vport this PF has set up */
u16 num_tqps; /* Num task queue pairs of this PF */ u16 num_tqps; /* Num task queue pairs of this PF */
...@@ -469,6 +478,7 @@ struct hclge_dev { ...@@ -469,6 +478,7 @@ struct hclge_dev {
unsigned long service_timer_previous; unsigned long service_timer_previous;
struct timer_list service_timer; struct timer_list service_timer;
struct work_struct service_task; struct work_struct service_task;
struct work_struct rst_service_task;
bool cur_promisc; bool cur_promisc;
int num_alloc_vfs; /* Actual number of VFs allocated */ int num_alloc_vfs; /* Actual number of VFs allocated */
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment