net: hns3: refactor the procedure of VF FLR
authorHuazhong Tan <tanhuazhong@huawei.com>
Sat, 11 Jan 2020 08:33:50 +0000 (16:33 +0800)
committerDavid S. Miller <davem@davemloft.net>
Sat, 11 Jan 2020 22:52:22 +0000 (14:52 -0800)
commitf28368bb4542dbc3c5b6e818211a68cbca6f4d75
tree6a89f6ed7b314487d0f7a1f03d836da8a235f561
parent8627bdedc435865b015cedeb26e3791dec5b3a41
net: hns3: refactor the procedure of VF FLR

Currently, the actual work of VF FLR is handled in the reset task,
which is asynchronous. So in some case, if the preparing and
rebuilding are not done, then the VF FLR will trigger some problems,
for example, makes hardware go into chaos.

So this patch separates the process of VF FLR from reset task, and
adds a semaphore to serialize this reset and others.

When FLR's preparing fails, if there has other higher level reset
pending or failing times less than the HCLGE_FLR_RETRY_CNT, this
preparing should be retried, otherwise it will get into a wrong state.

BTW, while the hardware reports misc interrupt during pcie_flr(),
the driver can not receive this interrupt anymore, so disable it
when hclgevf_flr_prepare() return, and re-enable it when enter
hclgevf_flr_done().

Avoid declaring internal function hclgevf_enable_vector(), this patch
also moves its definition forward, and removes unused enum
hnae3_flr_state.

Signed-off-by: Huazhong Tan <tanhuazhong@huawei.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
drivers/net/ethernet/hisilicon/hns3/hnae3.h
drivers/net/ethernet/hisilicon/hns3/hns3vf/hclgevf_main.c
drivers/net/ethernet/hisilicon/hns3/hns3vf/hclgevf_main.h