Patch "net: marvell: prestera: fix port event handling on init" has been added to the 5.10-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: marvell: prestera: fix port event handling on init

to the 5.10-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-marvell-prestera-fix-port-event-handling-on-init.patch
and it can be found in the queue-5.10 subdirectory.

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



commit 295b400408894aa88ed989de1c37b45e0e6aa90b
Author: Vadym Kochan <vkochan@xxxxxxxxxxx>
Date:   Tue Apr 20 16:31:51 2021 +0300

    net: marvell: prestera: fix port event handling on init
    
    [ Upstream commit 333980481b99edb24ebd5d1a53af70a15d9146de ]
    
    For some reason there might be a crash during ports creation if port
    events are handling at the same time  because fw may send initial
    port event with down state.
    
    The crash points to cancel_delayed_work() which is called when port went
    is down.  Currently I did not find out the real cause of the issue, so
    fixed it by cancel port stats work only if previous port's state was up
    & runnig.
    
    The following is the crash which can be triggered:
    
    [   28.311104] Unable to handle kernel paging request at virtual address
    000071775f776600
    [   28.319097] Mem abort info:
    [   28.321914]   ESR = 0x96000004
    [   28.324996]   EC = 0x25: DABT (current EL), IL = 32 bits
    [   28.330350]   SET = 0, FnV = 0
    [   28.333430]   EA = 0, S1PTW = 0
    [   28.336597] Data abort info:
    [   28.339499]   ISV = 0, ISS = 0x00000004
    [   28.343362]   CM = 0, WnR = 0
    [   28.346354] user pgtable: 4k pages, 48-bit VAs, pgdp=0000000100bf7000
    [   28.352842] [000071775f776600] pgd=0000000000000000,
    p4d=0000000000000000
    [   28.359695] Internal error: Oops: 96000004 [#1] PREEMPT SMP
    [   28.365310] Modules linked in: prestera_pci(+) prestera
    uio_pdrv_genirq
    [   28.372005] CPU: 0 PID: 1291 Comm: kworker/0:1H Not tainted
    5.11.0-rc4 #1
    [   28.378846] Hardware name: DNI AmazonGo1 A7040 board (DT)
    [   28.384283] Workqueue: prestera_fw_wq prestera_fw_evt_work_fn
    [prestera_pci]
    [   28.391413] pstate: 60000085 (nZCv daIf -PAN -UAO -TCO BTYPE=--)
    [   28.397468] pc : get_work_pool+0x48/0x60
    [   28.401442] lr : try_to_grab_pending+0x6c/0x1b0
    [   28.406018] sp : ffff80001391bc60
    [   28.409358] x29: ffff80001391bc60 x28: 0000000000000000
    [   28.414725] x27: ffff000104fc8b40 x26: ffff80001127de88
    [   28.420089] x25: 0000000000000000 x24: ffff000106119760
    [   28.425452] x23: ffff00010775dd60 x22: ffff00010567e000
    [   28.430814] x21: 0000000000000000 x20: ffff80001391bcb0
    [   28.436175] x19: ffff00010775deb8 x18: 00000000000000c0
    [   28.441537] x17: 0000000000000000 x16: 000000008d9b0e88
    [   28.446898] x15: 0000000000000001 x14: 00000000000002ba
    [   28.452261] x13: 80a3002c00000002 x12: 00000000000005f4
    [   28.457622] x11: 0000000000000030 x10: 000000000000000c
    [   28.462985] x9 : 000000000000000c x8 : 0000000000000030
    [   28.468346] x7 : ffff800014400000 x6 : ffff000106119758
    [   28.473708] x5 : 0000000000000003 x4 : ffff00010775dc60
    [   28.479068] x3 : 0000000000000000 x2 : 0000000000000060
    [   28.484429] x1 : 000071775f776600 x0 : ffff00010775deb8
    [   28.489791] Call trace:
    [   28.492259]  get_work_pool+0x48/0x60
    [   28.495874]  cancel_delayed_work+0x38/0xb0
    [   28.500011]  prestera_port_handle_event+0x90/0xa0 [prestera]
    [   28.505743]  prestera_evt_recv+0x98/0xe0 [prestera]
    [   28.510683]  prestera_fw_evt_work_fn+0x180/0x228 [prestera_pci]
    [   28.516660]  process_one_work+0x1e8/0x360
    [   28.520710]  worker_thread+0x44/0x480
    [   28.524412]  kthread+0x154/0x160
    [   28.527670]  ret_from_fork+0x10/0x38
    [   28.531290] Code: a8c17bfd d50323bf d65f03c0 9278dc21 (f9400020)
    [   28.537429] ---[ end trace 5eced933df3a080b ]---
    
    Fixes: 501ef3066c89 ("net: marvell: prestera: Add driver for Prestera family ASIC devices")
    Signed-off-by: Vadym Kochan <vkochan@xxxxxxxxxxx>
    Signed-off-by: David S. Miller <davem@xxxxxxxxxxxxx>
    Signed-off-by: Sasha Levin <sashal@xxxxxxxxxx>

diff --git a/drivers/net/ethernet/marvell/prestera/prestera_main.c b/drivers/net/ethernet/marvell/prestera/prestera_main.c
index da4b286d1337..feb69fcd908e 100644
--- a/drivers/net/ethernet/marvell/prestera/prestera_main.c
+++ b/drivers/net/ethernet/marvell/prestera/prestera_main.c
@@ -436,7 +436,8 @@ static void prestera_port_handle_event(struct prestera_switch *sw,
 			netif_carrier_on(port->dev);
 			if (!delayed_work_pending(caching_dw))
 				queue_delayed_work(prestera_wq, caching_dw, 0);
-		} else {
+		} else if (netif_running(port->dev) &&
+			   netif_carrier_ok(port->dev)) {
 			netif_carrier_off(port->dev);
 			if (delayed_work_pending(caching_dw))
 				cancel_delayed_work(caching_dw);



[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