Message ID | 20240318132948.3624333-3-shaojijie@huawei.com (mailing list archive) |
---|---|
State | Superseded |
Delegated to: | Netdev Maintainers |
Headers | show |
Series | There are some bugfix for the HNS3 ethernet driver | expand |
On Mon, Mar 18, 2024 at 09:29:47PM +0800, Jijie Shao wrote: > From: Yonglong Liu <liuyonglong@huawei.com> > > The devlink reload process will access the hardware resources, > but the register operation is done before the hardware is initialized. > so, if process the devlink reload during initialization, may lead to kernel This sentence still seems not so clear. How about: "So, processing the devlink reload during initialization may lead to kernel crash." Thanks, Michal
Mon, Mar 18, 2024 at 02:29:47PM CET, shaojijie@huawei.com wrote: >From: Yonglong Liu <liuyonglong@huawei.com> > >The devlink reload process will access the hardware resources, >but the register operation is done before the hardware is initialized. >so, if process the devlink reload during initialization, may lead to kernel >crash. This patch fixes this by checking whether the NIC is initialized. Fix your locking, you should take devl_lock during your init. That would disallow reload to race with it. pw-bot: cr > >Fixes: b741269b2759 ("net: hns3: add support for registering devlink for PF") >Signed-off-by: Yonglong Liu <liuyonglong@huawei.com> >Signed-off-by: Jijie Shao <shaojijie@huawei.com> >--- > drivers/net/ethernet/hisilicon/hns3/hns3pf/hclge_devlink.c | 5 +++-- > 1 file changed, 3 insertions(+), 2 deletions(-) > >diff --git a/drivers/net/ethernet/hisilicon/hns3/hns3pf/hclge_devlink.c b/drivers/net/ethernet/hisilicon/hns3/hns3pf/hclge_devlink.c >index 9a939c0b217f..80db4f7b05f6 100644 >--- a/drivers/net/ethernet/hisilicon/hns3/hns3pf/hclge_devlink.c >+++ b/drivers/net/ethernet/hisilicon/hns3/hns3pf/hclge_devlink.c >@@ -40,8 +40,9 @@ static int hclge_devlink_reload_down(struct devlink *devlink, bool netns_change, > struct pci_dev *pdev = hdev->pdev; > int ret; > >- if (test_bit(HCLGE_STATE_RST_HANDLING, &hdev->state)) { >- dev_err(&pdev->dev, "reset is handling\n"); >+ if (test_bit(HCLGE_STATE_RST_HANDLING, &hdev->state) || >+ !test_bit(HCLGE_STATE_NIC_REGISTERED, &hdev->state)) { >+ dev_err(&pdev->dev, "reset is handling or driver removed\n"); > return -EBUSY; > } > >-- >2.30.0 > >
on 2024/3/19 19:17, Jiri Pirko wrote: > Mon, Mar 18, 2024 at 02:29:47PM CET, shaojijie@huawei.com wrote: >> From: Yonglong Liu <liuyonglong@huawei.com> >> >> The devlink reload process will access the hardware resources, >> but the register operation is done before the hardware is initialized. >> so, if process the devlink reload during initialization, may lead to kernel >> crash. This patch fixes this by checking whether the NIC is initialized. > Fix your locking, you should take devl_lock during your init. That would > disallow reload to race with it. > > pw-bot: cr Thanks, We have fixed this in v4. Jijie Shao
diff --git a/drivers/net/ethernet/hisilicon/hns3/hns3pf/hclge_devlink.c b/drivers/net/ethernet/hisilicon/hns3/hns3pf/hclge_devlink.c index 9a939c0b217f..80db4f7b05f6 100644 --- a/drivers/net/ethernet/hisilicon/hns3/hns3pf/hclge_devlink.c +++ b/drivers/net/ethernet/hisilicon/hns3/hns3pf/hclge_devlink.c @@ -40,8 +40,9 @@ static int hclge_devlink_reload_down(struct devlink *devlink, bool netns_change, struct pci_dev *pdev = hdev->pdev; int ret; - if (test_bit(HCLGE_STATE_RST_HANDLING, &hdev->state)) { - dev_err(&pdev->dev, "reset is handling\n"); + if (test_bit(HCLGE_STATE_RST_HANDLING, &hdev->state) || + !test_bit(HCLGE_STATE_NIC_REGISTERED, &hdev->state)) { + dev_err(&pdev->dev, "reset is handling or driver removed\n"); return -EBUSY; }