Patch "net: hns3: don't auto enable misc vector" has been added to the 6.11-stable tree

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



This is a note to let you know that I've just added the patch titled

    net: hns3: don't auto enable misc vector

to the 6.11-stable tree which can be found at:
    http://www.kernel.org/git/?p=linux/kernel/git/stable/stable-queue.git;a=summary

The filename of the patch is:
     net-hns3-don-t-auto-enable-misc-vector.patch
and it can be found in the queue-6.11 subdirectory.

If you, or anyone else, feels it should not be added to the stable tree,
please let <stable@xxxxxxxxxxxxxxx> know about it.



commit e3c9ddb035062a6ea334b5a0b660b1e074f51a7d
Author: Jian Shen <shenjian15@xxxxxxxxxx>
Date:   Fri Oct 25 17:29:35 2024 +0800

    net: hns3: don't auto enable misc vector
    
    [ Upstream commit 5f62009ff10826fefa215da68831f42b0c36b6fb ]
    
    Currently, there is a time window between misc irq enabled
    and service task inited. If an interrupte is reported at
    this time, it will cause warning like below:
    
    [   16.324639] Call trace:
    [   16.324641]  __queue_delayed_work+0xb8/0xe0
    [   16.324643]  mod_delayed_work_on+0x78/0xd0
    [   16.324655]  hclge_errhand_task_schedule+0x58/0x90 [hclge]
    [   16.324662]  hclge_misc_irq_handle+0x168/0x240 [hclge]
    [   16.324666]  __handle_irq_event_percpu+0x64/0x1e0
    [   16.324667]  handle_irq_event+0x80/0x170
    [   16.324670]  handle_fasteoi_edge_irq+0x110/0x2bc
    [   16.324671]  __handle_domain_irq+0x84/0xfc
    [   16.324673]  gic_handle_irq+0x88/0x2c0
    [   16.324674]  el1_irq+0xb8/0x140
    [   16.324677]  arch_cpu_idle+0x18/0x40
    [   16.324679]  default_idle_call+0x5c/0x1bc
    [   16.324682]  cpuidle_idle_call+0x18c/0x1c4
    [   16.324684]  do_idle+0x174/0x17c
    [   16.324685]  cpu_startup_entry+0x30/0x6c
    [   16.324687]  secondary_start_kernel+0x1a4/0x280
    [   16.324688] ---[ end trace 6aa0bff672a964aa ]---
    
    So don't auto enable misc vector when request irq..
    
    Fixes: 7be1b9f3e99f ("net: hns3: make hclge_service use delayed workqueue")
    Signed-off-by: Jian Shen <shenjian15@xxxxxxxxxx>
    Signed-off-by: Jijie Shao <shaojijie@xxxxxxxxxx>
    Signed-off-by: Paolo Abeni <pabeni@xxxxxxxxxx>
    Signed-off-by: Sasha Levin <sashal@xxxxxxxxxx>

diff --git a/drivers/net/ethernet/hisilicon/hns3/hns3pf/hclge_main.c b/drivers/net/ethernet/hisilicon/hns3/hns3pf/hclge_main.c
index 116098033dfba..83a6cb9ceb020 100644
--- a/drivers/net/ethernet/hisilicon/hns3/hns3pf/hclge_main.c
+++ b/drivers/net/ethernet/hisilicon/hns3/hns3pf/hclge_main.c
@@ -6,6 +6,7 @@
 #include <linux/etherdevice.h>
 #include <linux/init.h>
 #include <linux/interrupt.h>
+#include <linux/irq.h>
 #include <linux/kernel.h>
 #include <linux/module.h>
 #include <linux/netdevice.h>
@@ -3779,7 +3780,7 @@ static int hclge_misc_irq_init(struct hclge_dev *hdev)
 	snprintf(hdev->misc_vector.name, HNAE3_INT_NAME_LEN, "%s-misc-%s",
 		 HCLGE_NAME, pci_name(hdev->pdev));
 	ret = request_irq(hdev->misc_vector.vector_irq, hclge_misc_irq_handle,
-			  0, hdev->misc_vector.name, hdev);
+			  IRQ_NOAUTOEN, hdev->misc_vector.name, hdev);
 	if (ret) {
 		hclge_free_vector(hdev, 0);
 		dev_err(&hdev->pdev->dev, "request misc irq(%d) fail\n",
@@ -11917,9 +11918,6 @@ static int hclge_init_ae_dev(struct hnae3_ae_dev *ae_dev)
 
 	hclge_init_rxd_adv_layout(hdev);
 
-	/* Enable MISC vector(vector0) */
-	hclge_enable_vector(&hdev->misc_vector, true);
-
 	ret = hclge_init_wol(hdev);
 	if (ret)
 		dev_warn(&pdev->dev,
@@ -11932,6 +11930,10 @@ static int hclge_init_ae_dev(struct hnae3_ae_dev *ae_dev)
 	hclge_state_init(hdev);
 	hdev->last_reset_time = jiffies;
 
+	/* Enable MISC vector(vector0) */
+	enable_irq(hdev->misc_vector.vector_irq);
+	hclge_enable_vector(&hdev->misc_vector, true);
+
 	dev_info(&hdev->pdev->dev, "%s driver initialization finished.\n",
 		 HCLGE_DRIVER_NAME);
 
@@ -12337,7 +12339,7 @@ static void hclge_uninit_ae_dev(struct hnae3_ae_dev *ae_dev)
 
 	/* Disable MISC vector(vector0) */
 	hclge_enable_vector(&hdev->misc_vector, false);
-	synchronize_irq(hdev->misc_vector.vector_irq);
+	disable_irq(hdev->misc_vector.vector_irq);
 
 	/* Disable all hw interrupts */
 	hclge_config_mac_tnl_int(hdev, false);




[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Index of Archives]     [Linux USB Devel]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux