Message ID | E1o5nAZ-004RRE-So@rmk-PC.armlinux.org.uk (mailing list archive) |
---|---|
State | Accepted |
Commit | bfac8c490d605bea03b1f1927582b6f396462164 |
Delegated to: | Netdev Maintainers |
Headers | show |
Series | net: phylink: cleanup pcs code | expand |
On 27.06.22 13:44, Russell King (Oracle) wrote: > While we are performing a major configuration, there is no point having > the PCS polling timer running. Stop it before we begin preparing for > the configuration change, and restart it only once we've successfully > completed the change. > > Reviewed-by: Andrew Lunn <andrew@lunn.ch> > Signed-off-by: Russell King (Oracle) <rmk+kernel@armlinux.org.uk> > --- > drivers/net/phy/phylink.c | 30 ++++++++++++++++++++---------- > 1 file changed, 20 insertions(+), 10 deletions(-) > > diff --git a/drivers/net/phy/phylink.c b/drivers/net/phy/phylink.c > index 0216ea978261..1a7550f5fdf5 100644 > --- a/drivers/net/phy/phylink.c > +++ b/drivers/net/phy/phylink.c > @@ -758,6 +758,18 @@ static void phylink_resolve_flow(struct phylink_link_state *state) > } > } > > +static void phylink_pcs_poll_stop(struct phylink *pl) > +{ > + if (pl->cfg_link_an_mode == MLO_AN_INBAND) > + del_timer(&pl->link_poll); > +} > + > +static void phylink_pcs_poll_start(struct phylink *pl) > +{ > + if (pl->pcs->poll && pl->cfg_link_an_mode == MLO_AN_INBAND) > + mod_timer(&pl->link_poll, jiffies + HZ); > +} > + > static void phylink_mac_config(struct phylink *pl, > const struct phylink_link_state *state) > { > @@ -789,6 +801,7 @@ static void phylink_major_config(struct phylink *pl, bool restart, > const struct phylink_link_state *state) > { > struct phylink_pcs *pcs = NULL; > + bool pcs_changed = false; > int err; > > phylink_dbg(pl, "major config %s\n", phy_modes(state->interface)); > @@ -801,8 +814,12 @@ static void phylink_major_config(struct phylink *pl, bool restart, > pcs); > return; > } > + > + pcs_changed = pcs && pl->pcs != pcs; > } > > + phylink_pcs_poll_stop(pl); > + > if (pl->mac_ops->mac_prepare) { > err = pl->mac_ops->mac_prepare(pl->config, pl->cur_link_an_mode, > state->interface); > @@ -816,18 +833,9 @@ static void phylink_major_config(struct phylink *pl, bool restart, > /* If we have a new PCS, switch to the new PCS after preparing the MAC > * for the change. > */ > - if (pcs) { > + if (pcs_changed) > pl->pcs = pcs; > > - if (!pl->phylink_disable_state && > - pl->cfg_link_an_mode == MLO_AN_INBAND) { > - if (pcs->poll) > - mod_timer(&pl->link_poll, jiffies + HZ); > - else > - del_timer(&pl->link_poll); > - } > - } > - > phylink_mac_config(pl, state); > > if (pl->pcs) { > @@ -852,6 +860,8 @@ static void phylink_major_config(struct phylink *pl, bool restart, > phylink_err(pl, "mac_finish failed: %pe\n", > ERR_PTR(err)); > } > + > + phylink_pcs_poll_start(pl); > } > > /* With latest net-next I got the following crash: Jun 29 21:18:01 zcu104-1 kernel: [ 8.814176] macb ff0e0000.ethernet eth0: PHY [ff0e0000.ethernet-ffffffff:0c] driver [TI DP83867] (irq=POLL) Jun 29 21:18:01 zcu104-1 kernel: [ 8.814193] macb ff0e0000.ethernet eth0: configuring for phy/rgmii-id link mode Jun 29 21:18:01 zcu104-1 kernel: [ 8.814213] Unable to handle kernel NULL pointer dereference at virtual address 0000000000000008 Jun 29 21:18:01 zcu104-1 kernel: [ 8.881046] Mem abort info: Jun 29 21:18:01 zcu104-1 kernel: [ 8.893065] ESR = 0x0000000096000005 Jun 29 21:18:01 zcu104-1 kernel: [ 8.907481] EC = 0x25: DABT (current EL), IL = 32 bits Jun 29 21:18:01 zcu104-1 kernel: [ 8.913269] SET = 0, FnV = 0 Jun 29 21:18:01 zcu104-1 kernel: [ 8.916586] EA = 0, S1PTW = 0 Jun 29 21:18:01 zcu104-1 kernel: [ 8.919719] FSC = 0x05: level 1 translation fault Jun 29 21:18:01 zcu104-1 kernel: [ 8.924667] Data abort info: Jun 29 21:18:01 zcu104-1 kernel: [ 8.927539] ISV = 0, ISS = 0x00000005 Jun 29 21:18:01 zcu104-1 kernel: [ 8.931372] CM = 0, WnR = 0 Jun 29 21:18:01 zcu104-1 kernel: [ 8.934339] user pgtable: 4k pages, 39-bit VAs, pgdp=00000000018b1000 Jun 29 21:18:01 zcu104-1 kernel: [ 8.940778] [0000000000000008] pgd=0000000000000000, p4d=0000000000000000, pud=0000000000000000 Jun 29 21:18:01 zcu104-1 kernel: [ 8.949486] Internal error: Oops: 96000005 [#1] PREEMPT SMP Jun 29 21:18:01 zcu104-1 kernel: [ 8.955048] Modules linked in: uio_pdrv_genirq tsnep Jun 29 21:18:01 zcu104-1 kernel: [ 8.960014] CPU: 1 PID: 345 Comm: ifplugd Not tainted 5.19.0-rc3-zynqmp #5 Jun 29 21:18:01 zcu104-1 kernel: [ 8.960023] Hardware name: TSN endpoint (DT) Jun 29 21:18:01 zcu104-1 kernel: [ 8.960027] pstate: a0000005 (NzCv daif -PAN -UAO -TCO -DIT -SSBS BTYPE=--) Jun 29 21:18:01 zcu104-1 kernel: [ 8.960035] pc : phylink_major_config+0xf8/0x2f0 Jun 29 21:18:01 zcu104-1 kernel: [ 8.960052] lr : phylink_major_config+0xd4/0x2f0 Jun 29 21:18:01 zcu104-1 kernel: [ 8.960061] sp : ffffffc00a6139c0 Jun 29 21:18:01 zcu104-1 kernel: [ 8.960064] x29: ffffffc00a6139c0 x28: ffffff8005ddb180 x27: 0000000000000000 Jun 29 21:18:01 zcu104-1 kernel: [ 8.960076] x26: 0000000000000000 x25: ffffff8005e40240 x24: 0000000000000010 Jun 29 21:18:01 zcu104-1 kernel: [ 8.960087] x23: 0000000000000001 x22: 0000000000000000 x21: 0000000000000000 Jun 29 21:18:01 zcu104-1 kernel: [ 8.960098] x20: ffffffc00a613a20 x19: ffffff8000b43a00 x18: 0000000000000000 Jun 29 21:18:01 zcu104-1 kernel: [ 8.960109] x17: 0000000000000001 x16: 00008c294d41fe3e x15: 0230df5a173cf71e Jun 29 21:18:01 zcu104-1 kernel: [ 8.960121] x14: 0000000000000000 x13: 20726f6620676e69 x12: 72756769666e6f63 Jun 29 21:18:01 zcu104-1 kernel: [ 8.960132] x11: 0000000000000001 x10: 000000000000002f x9 : ffffffc008944714 Jun 29 21:18:01 zcu104-1 kernel: [ 8.960143] x8 : 00000000ffffffff x7 : 0a65646f6d206b6e x6 : 0000000000000000 Jun 29 21:18:01 zcu104-1 kernel: [ 8.960154] x5 : 0000000000000001 x4 : ffffffc008982e28 x3 : 0000000000000000 Jun 29 21:18:01 zcu104-1 kernel: [ 8.960165] x2 : 0000000000000001 x1 : 00000000fffffff5 x0 : 0000000000000000 Jun 29 21:18:01 zcu104-1 kernel: [ 8.960176] Call trace: Jun 29 21:18:01 zcu104-1 kernel: [ 8.960179] phylink_major_config+0xf8/0x2f0 Jun 29 21:18:01 zcu104-1 kernel: [ 8.960188] phylink_mac_initial_config.constprop.0+0xb0/0x11c Jun 29 21:18:01 zcu104-1 kernel: [ 8.960197] phylink_start+0x50/0x260 Jun 29 21:18:01 zcu104-1 kernel: [ 8.960205] macb_phylink_connect+0x64/0x130 Jun 29 21:18:01 zcu104-1 kernel: [ 8.960214] macb_open+0x23c/0x350 Jun 29 21:18:01 zcu104-1 kernel: [ 8.960222] __dev_open+0x11c/0x1b0 Jun 29 21:18:01 zcu104-1 kernel: [ 8.960231] __dev_change_flags+0x198/0x210 Jun 29 21:18:01 zcu104-1 kernel: [ 8.960239] dev_change_flags+0x30/0x70 Jun 29 21:18:01 zcu104-1 kernel: [ 8.960247] dev_ifsioc+0x2c4/0x4f0 Jun 29 21:18:01 zcu104-1 kernel: [ 8.960257] dev_ioctl+0x374/0x650 Jun 29 21:18:01 zcu104-1 kernel: [ 8.960265] sock_do_ioctl.constprop.0+0xac/0xf0 Jun 29 21:18:01 zcu104-1 kernel: [ 8.960272] sock_ioctl+0x138/0x3b0 Jun 29 21:18:01 zcu104-1 kernel: [ 8.960278] __arm64_sys_ioctl+0xb4/0x100 Jun 29 21:18:01 zcu104-1 kernel: [ 8.960289] invoke_syscall+0x5c/0x130 Jun 29 21:18:01 zcu104-1 kernel: [ 8.960299] el0_svc_common.constprop.0+0xd4/0xf4 Jun 29 21:18:01 zcu104-1 kernel: [ 8.960307] do_el0_svc+0x98/0xec Jun 29 21:18:01 zcu104-1 kernel: [ 8.960314] el0_svc+0x50/0xac Jun 29 21:18:01 zcu104-1 kernel: [ 8.960322] el0t_64_sync_handler+0x1ac/0x1b0 Jun 29 21:18:01 zcu104-1 kernel: [ 8.960329] el0t_64_sync+0x18c/0x190 Jun 29 21:18:01 zcu104-1 kernel: [ 8.960340] Code: f9400a60 d63f0060 37f80620 f9400e60 (39402000) Jun 29 21:18:01 zcu104-1 kernel: [ 8.960345] ---[ end trace 0000000000000000 ]--- $ scripts/faddr2line vmlinux.o phylink_major_config+0xf8/0x2f0 phylink_major_config+0xf8/0x2f0: phylink_pcs_poll_start at /home/gerhard/git/linux/drivers/net/phy/phylink.c:769 (discriminator 6) (inlined by) phylink_major_config at /home/gerhard/git/linux/drivers/net/phy/phylink.c:864 (discriminator 6) Crash can be fixed by reverting this commit. Any ideas? Gerhard
8<--- cut here --- Unable to handle kernel NULL pointer dereference at virtual address 00000004 [00000004] *pgd=00000000 Internal error: Oops: 5 [#1] ARM Modules linked in: CPU: 0 PID: 5 Comm: kworker/u2:0 Not tainted 5.19.0-rc3 #21 Hardware name: Atmel SAMA5 Workqueue: events_unbound deferred_probe_work_func PC is at phylink_major_config+0x120/0x2c0 LR is at phylink_major_config+0xf4/0x2c0 pc : [<c0537498>] lr : [<c053746c>] psr: 60000013 sp : d0825be0 ip : c10294c0 fp : c098f0ec r10: c185e180 r9 : 00000000 r8 : 00000001 r7 : 00000000 r6 : 00000000 r5 : d0825c08 r4 : c1848400 r3 : 00000000 r2 : 82f62a40 r1 : 00000000 r0 : c1848400 Flags: nZCv IRQs on FIQs on Mode SVC_32 ISA ARM Segment none Control: 10c53c7d Table: 20004059 DAC: 00000051 Register r0 information: slab kmalloc-256 start c1848400 pointer offset 0 size 256 Register r1 information: NULL pointer Register r2 information: non-paged memory Register r3 information: NULL pointer Register r4 information: slab kmalloc-256 start c1848400 pointer offset 0 size 256 Register r5 information: 2-page vmalloc region starting at 0xd0824000 allocated at kernel_clone+0xb8/0x368 Register r6 information: NULL pointer Register r7 information: NULL pointer Register r8 information: non-paged memory Register r9 information: NULL pointer Register r10 information: slab kmalloc-64 start c185e180 pointer offset 0 size 64 Register r11 information: non-slab/vmalloc memory Register r12 information: slab task_struct start c10294c0 pointer offset 0 Process kworker/u2:0 (pid: 5, stack limit = 0x(ptrval)) Stack: (0xd0825be0 to 0xd0826000) 5be0: c185e078 c0536198 0000e188 c0d0324c c1848400 d0825c08 c185e188 c185e078 5c00: c098ea8c c053860c 00006248 00000000 00000000 00000008 00000000 00000000 5c20: 00000007 00000064 00000001 00000000 00000006 82f62a40 c1848400 00000000 5c40: c1862700 c05386a8 c0a5dab8 00000000 c115a400 00000000 c1862700 c07d4230 5c60: c115a400 c07d4264 c115a400 00000000 c1862700 c07d1184 00000000 c1862700 5c80: c115a400 c07d29bc 00000000 d0825ccc c0d0324c c0d5a708 c0a6bfe4 c0a6af44 5ca0: c185e180 00000000 00000004 00000000 00000000 00000000 00000000 82f62a40 5cc0: 00000000 00000004 c0d5a6f8 cfdf5a78 00000000 00000400 00000dc0 c0956f78 5ce0: c1001240 c01cdf84 00000000 00000dc0 a0000013 00000004 20000013 d0825d20 5d00: c0d0324c c05edfa4 cfde9bb8 c05f1f64 cfde9bb8 82f62a40 00000007 c1848540 5d20: 00000000 c0d0324c c0a21544 cfde94fc 00000000 c0d58d8c c1a491c0 c054cbb8 5d40: 00000000 60000013 c0d0324c 00000000 00000004 82f62a40 c1006000 c0956f78 5d60: 00000000 c1373800 c0d0324c c1848540 c1848558 c0956f78 c1006000 c0552c14 5d80: c0a2a990 0000001b 00000001 00000000 00000000 00000005 00000020 00000000 5da0: 00000000 00000000 00000000 00000000 00000000 00000000 c0552b10 c0552b0c 5dc0: c1848558 00000000 00000000 00000000 00000000 00000000 00000000 00000000 5de0: 00000000 00ffffff 00000000 00000000 00000000 00000000 00000000 00000000 5e00: 00000000 00000000 00000000 00000000 00000000 00000060 00000040 00000000 5e20: 00000000 00000001 00000001 00000000 00000000 00000000 00000000 00000000 5e40: 00000000 82f62a40 c1373800 00000000 c0d2e2b0 c1373800 00000001 c0d28434 5e60: c100700d c052ce70 c1373800 00000000 c0d2e2c0 c04b5744 c1373800 c0d2e2c0 5e80: c1373800 c04b59a0 c0d57d0c c0d57d10 c1373800 c04b5a34 c0d2e2c0 d0825eec 5ea0: c1373800 c0d0324c 00000001 c04b5d68 00000000 d0825eec c04b5ce0 c04b3b00 5ec0: c1373800 c10b3c5c c1387eb4 82f62a40 c0d28434 c0d0324c c1373800 c1373844 5ee0: c0d28410 c04b55d8 c0d0b580 c1373800 00000001 82f62a40 c1373800 c1373800 5f00: c0d2b504 c0d28410 00000000 c04b47bc c1373800 c0d28404 c0d28404 c04b4c78 5f20: c0d28430 c100e500 00000040 c1007000 00000000 c012bbf0 c0d18ca0 c1006000 5f40: c100e500 c1006000 c1006018 c0d18ca0 c100e518 00000088 c0d3f567 c012c060 5f60: 00000000 c0a229e8 c10294c0 c101f940 c012be18 c100e500 c101f700 d0815e98 5f80: c10294c0 00000000 00000000 c0132774 c101f940 c01326ac 00000000 00000000 5fa0: 00000000 00000000 00000000 c0100148 00000000 00000000 00000000 00000000 5fc0: 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 5fe0: 00000000 00000000 00000000 00000000 00000013 00000000 00000000 00000000 phylink_major_config from phylink_mac_initial_config.constprop.19+0xa0/0xf4 phylink_mac_initial_config.constprop.19 from phylink_start+0x48/0x28c phylink_start from dsa_port_enable_rt+0x50/0x68 dsa_port_enable_rt from dsa_port_enable+0x1c/0x2c dsa_port_enable from dsa_port_setup+0xec/0x118 dsa_port_setup from dsa_register_switch+0xa88/0xfa8 dsa_register_switch from ksz_switch_register+0x580/0x5e8 ksz_switch_register from ksz_spi_probe+0x100/0x150 ksz_spi_probe from spi_probe+0x88/0xac spi_probe from really_probe+0xc0/0x298 really_probe from __driver_probe_device+0x84/0xe4 __driver_probe_device from driver_probe_device+0x34/0xd4 driver_probe_device from __device_attach_driver+0x88/0xb4 __device_attach_driver from bus_for_each_drv+0x58/0xb8 bus_for_each_drv from __device_attach+0xf4/0x198 __device_attach from bus_probe_device+0x84/0x8c bus_probe_device from deferred_probe_work_func+0x7c/0xa8 deferred_probe_work_func from process_one_work+0x1d4/0x3fc process_one_work from worker_thread+0x248/0x504 worker_thread from kthread+0xc8/0xe4 kthread from ret_from_fork+0x14/0x2c Exception stack(0xd0825fb0 to 0xd0825ff8) 5fa0: 00000000 00000000 00000000 00000000 5fc0: 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 5fe0: 00000000 00000000 00000000 00000000 00000013 00000000 Code: e12fff33 e2503000 ba00001f e594300c (e5d33004) ---[ end trace 0000000000000000 ]--- After this patch series, crash happens during ksz9477 booting. After reverting it ksz9477 booting works fine.
On Thu, Jun 30, 2022 at 02:34:35PM +0530, Arun Ramadoss wrote: > 8<--- cut here --- > Unable to handle kernel NULL pointer dereference at virtual address 00000004 > [00000004] *pgd=00000000 > Internal error: Oops: 5 [#1] ARM > Modules linked in: > CPU: 0 PID: 5 Comm: kworker/u2:0 Not tainted 5.19.0-rc3 #21 > Hardware name: Atmel SAMA5 > Workqueue: events_unbound deferred_probe_work_func > PC is at phylink_major_config+0x120/0x2c0 > LR is at phylink_major_config+0xf4/0x2c0 > pc : [<c0537498>] lr : [<c053746c>] psr: 60000013 > sp : d0825be0 ip : c10294c0 fp : c098f0ec > r10: c185e180 r9 : 00000000 r8 : 00000001 > r7 : 00000000 r6 : 00000000 r5 : d0825c08 r4 : c1848400 > r3 : 00000000 r2 : 82f62a40 r1 : 00000000 r0 : c1848400 > Flags: nZCv IRQs on FIQs on Mode SVC_32 ISA ARM Segment none > Control: 10c53c7d Table: 20004059 DAC: 00000051 > Register r0 information: slab kmalloc-256 start c1848400 pointer offset 0 size 256 > Register r1 information: NULL pointer > Register r2 information: non-paged memory > Register r3 information: NULL pointer > Register r4 information: slab kmalloc-256 start c1848400 pointer offset 0 size 256 > Register r5 information: 2-page vmalloc region starting at 0xd0824000 allocated at kernel_clone+0xb8/0x368 > Register r6 information: NULL pointer > Register r7 information: NULL pointer > Register r8 information: non-paged memory > Register r9 information: NULL pointer > Register r10 information: slab kmalloc-64 start c185e180 pointer offset 0 size 64 > Register r11 information: non-slab/vmalloc memory > Register r12 information: slab task_struct start c10294c0 pointer offset 0 > Process kworker/u2:0 (pid: 5, stack limit = 0x(ptrval)) > Stack: (0xd0825be0 to 0xd0826000) > 5be0: c185e078 c0536198 0000e188 c0d0324c c1848400 d0825c08 c185e188 c185e078 > 5c00: c098ea8c c053860c 00006248 00000000 00000000 00000008 00000000 00000000 > 5c20: 00000007 00000064 00000001 00000000 00000006 82f62a40 c1848400 00000000 > 5c40: c1862700 c05386a8 c0a5dab8 00000000 c115a400 00000000 c1862700 c07d4230 > 5c60: c115a400 c07d4264 c115a400 00000000 c1862700 c07d1184 00000000 c1862700 > 5c80: c115a400 c07d29bc 00000000 d0825ccc c0d0324c c0d5a708 c0a6bfe4 c0a6af44 > 5ca0: c185e180 00000000 00000004 00000000 00000000 00000000 00000000 82f62a40 > 5cc0: 00000000 00000004 c0d5a6f8 cfdf5a78 00000000 00000400 00000dc0 c0956f78 > 5ce0: c1001240 c01cdf84 00000000 00000dc0 a0000013 00000004 20000013 d0825d20 > 5d00: c0d0324c c05edfa4 cfde9bb8 c05f1f64 cfde9bb8 82f62a40 00000007 c1848540 > 5d20: 00000000 c0d0324c c0a21544 cfde94fc 00000000 c0d58d8c c1a491c0 c054cbb8 > 5d40: 00000000 60000013 c0d0324c 00000000 00000004 82f62a40 c1006000 c0956f78 > 5d60: 00000000 c1373800 c0d0324c c1848540 c1848558 c0956f78 c1006000 c0552c14 > 5d80: c0a2a990 0000001b 00000001 00000000 00000000 00000005 00000020 00000000 > 5da0: 00000000 00000000 00000000 00000000 00000000 00000000 c0552b10 c0552b0c > 5dc0: c1848558 00000000 00000000 00000000 00000000 00000000 00000000 00000000 > 5de0: 00000000 00ffffff 00000000 00000000 00000000 00000000 00000000 00000000 > 5e00: 00000000 00000000 00000000 00000000 00000000 00000060 00000040 00000000 > 5e20: 00000000 00000001 00000001 00000000 00000000 00000000 00000000 00000000 > 5e40: 00000000 82f62a40 c1373800 00000000 c0d2e2b0 c1373800 00000001 c0d28434 > 5e60: c100700d c052ce70 c1373800 00000000 c0d2e2c0 c04b5744 c1373800 c0d2e2c0 > 5e80: c1373800 c04b59a0 c0d57d0c c0d57d10 c1373800 c04b5a34 c0d2e2c0 d0825eec > 5ea0: c1373800 c0d0324c 00000001 c04b5d68 00000000 d0825eec c04b5ce0 c04b3b00 > 5ec0: c1373800 c10b3c5c c1387eb4 82f62a40 c0d28434 c0d0324c c1373800 c1373844 > 5ee0: c0d28410 c04b55d8 c0d0b580 c1373800 00000001 82f62a40 c1373800 c1373800 > 5f00: c0d2b504 c0d28410 00000000 c04b47bc c1373800 c0d28404 c0d28404 c04b4c78 > 5f20: c0d28430 c100e500 00000040 c1007000 00000000 c012bbf0 c0d18ca0 c1006000 > 5f40: c100e500 c1006000 c1006018 c0d18ca0 c100e518 00000088 c0d3f567 c012c060 > 5f60: 00000000 c0a229e8 c10294c0 c101f940 c012be18 c100e500 c101f700 d0815e98 > 5f80: c10294c0 00000000 00000000 c0132774 c101f940 c01326ac 00000000 00000000 > 5fa0: 00000000 00000000 00000000 c0100148 00000000 00000000 00000000 00000000 > 5fc0: 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 > 5fe0: 00000000 00000000 00000000 00000000 00000013 00000000 00000000 00000000 > phylink_major_config from phylink_mac_initial_config.constprop.19+0xa0/0xf4 > phylink_mac_initial_config.constprop.19 from phylink_start+0x48/0x28c > phylink_start from dsa_port_enable_rt+0x50/0x68 > dsa_port_enable_rt from dsa_port_enable+0x1c/0x2c > dsa_port_enable from dsa_port_setup+0xec/0x118 > dsa_port_setup from dsa_register_switch+0xa88/0xfa8 > dsa_register_switch from ksz_switch_register+0x580/0x5e8 > ksz_switch_register from ksz_spi_probe+0x100/0x150 > ksz_spi_probe from spi_probe+0x88/0xac > spi_probe from really_probe+0xc0/0x298 > really_probe from __driver_probe_device+0x84/0xe4 > __driver_probe_device from driver_probe_device+0x34/0xd4 > driver_probe_device from __device_attach_driver+0x88/0xb4 > __device_attach_driver from bus_for_each_drv+0x58/0xb8 > bus_for_each_drv from __device_attach+0xf4/0x198 > __device_attach from bus_probe_device+0x84/0x8c > bus_probe_device from deferred_probe_work_func+0x7c/0xa8 > deferred_probe_work_func from process_one_work+0x1d4/0x3fc > process_one_work from worker_thread+0x248/0x504 > worker_thread from kthread+0xc8/0xe4 > kthread from ret_from_fork+0x14/0x2c > Exception stack(0xd0825fb0 to 0xd0825ff8) > 5fa0: 00000000 00000000 00000000 00000000 > 5fc0: 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 > 5fe0: 00000000 00000000 00000000 00000000 00000013 00000000 > Code: e12fff33 e2503000 ba00001f e594300c (e5d33004) > ---[ end trace 0000000000000000 ]--- > > After this patch series, crash happens during ksz9477 booting. After reverting > it ksz9477 booting works fine. Fix already submitted by Vladimir. Thanks for reporting.
diff --git a/drivers/net/phy/phylink.c b/drivers/net/phy/phylink.c index 0216ea978261..1a7550f5fdf5 100644 --- a/drivers/net/phy/phylink.c +++ b/drivers/net/phy/phylink.c @@ -758,6 +758,18 @@ static void phylink_resolve_flow(struct phylink_link_state *state) } } +static void phylink_pcs_poll_stop(struct phylink *pl) +{ + if (pl->cfg_link_an_mode == MLO_AN_INBAND) + del_timer(&pl->link_poll); +} + +static void phylink_pcs_poll_start(struct phylink *pl) +{ + if (pl->pcs->poll && pl->cfg_link_an_mode == MLO_AN_INBAND) + mod_timer(&pl->link_poll, jiffies + HZ); +} + static void phylink_mac_config(struct phylink *pl, const struct phylink_link_state *state) { @@ -789,6 +801,7 @@ static void phylink_major_config(struct phylink *pl, bool restart, const struct phylink_link_state *state) { struct phylink_pcs *pcs = NULL; + bool pcs_changed = false; int err; phylink_dbg(pl, "major config %s\n", phy_modes(state->interface)); @@ -801,8 +814,12 @@ static void phylink_major_config(struct phylink *pl, bool restart, pcs); return; } + + pcs_changed = pcs && pl->pcs != pcs; } + phylink_pcs_poll_stop(pl); + if (pl->mac_ops->mac_prepare) { err = pl->mac_ops->mac_prepare(pl->config, pl->cur_link_an_mode, state->interface); @@ -816,18 +833,9 @@ static void phylink_major_config(struct phylink *pl, bool restart, /* If we have a new PCS, switch to the new PCS after preparing the MAC * for the change. */ - if (pcs) { + if (pcs_changed) pl->pcs = pcs; - if (!pl->phylink_disable_state && - pl->cfg_link_an_mode == MLO_AN_INBAND) { - if (pcs->poll) - mod_timer(&pl->link_poll, jiffies + HZ); - else - del_timer(&pl->link_poll); - } - } - phylink_mac_config(pl, state); if (pl->pcs) { @@ -852,6 +860,8 @@ static void phylink_major_config(struct phylink *pl, bool restart, phylink_err(pl, "mac_finish failed: %pe\n", ERR_PTR(err)); } + + phylink_pcs_poll_start(pl); } /*