2022-11-04 21:11:33

by John Thomson

[permalink] [raw]
Subject: [PATCH 0/2] mt7621 pci & phy-pci fix future oops from soc_device_match_attr

A change in the mm/slub code identified that the arch/mips/ralink/mt7621.c
soc_dev_init function attempted to kzalloc too early.
https://lore.kernel.org/linux-mm/[email protected]/
RFC fix: https://lore.kernel.org/lkml/[email protected]/

Fixing that mips mt7621 issue exposes an oops in testing the quirk table.
I think we do want these changes committed before the mt7621
kzalloc too early fix, otherwise I introduce oops.

Checkpatch warns on the pci Fixes tag, and suggests
my change for the Fixes tag.

I am not sure if we want these backported to stable trees?
Then, if I need separate patches for the staging drivers in 5.10 pci-phy
and 5.15 pci?


Oops example after the mt7621 kzalloc too early fix atop v6.1-rc2
From Sergio Paracuellos in
https://lore.kernel.org/lkml/CAMhs-H-Eo0ELMpy0iPakTA-3nHdY_mYQG-rrqgSotBKKED=eOg@mail.gmail.com/
[ 20.569959] CPU 0 Unable to handle kernel paging request at virtual
address 675f6b6c, epc == 80403dec, ra == 804ae11c
[ 20.591060] Oops[#1]:
[ 20.595462] CPU: 0 PID: 1 Comm: swapper/0 Not tainted 6.1.0-rc1+ #148
[ 20.608265] $ 0 : 00000000 00000001 82262a00 00000000
[ 20.618615] $ 4 : 675f6b6c 808dea04 00000000 804ae138
[ 20.628983] $ 8 : 00000000 808787ba 00000000 821f4b00
[ 20.639351] $12 : 0000005b 0000005d 0000002d 0000005c
[ 20.649735] $16 : 82253580 807b4034 807b4034 804ae138
[ 20.660087] $20 : fffffff4 82c382b8 809e1094 00000008
[ 20.670455] $24 : 0000002a 0000003f
[ 20.680823] $28 : 82050000 82051c30 80a0d638 804ae11c
[ 20.691190] Hi : 00000037
[ 20.696891] Lo : 5c28f6a0
[ 20.702610] epc : 80403dec glob_match+0x1c/0x240
[ 20.712100] ra : 804ae11c soc_device_match_attr+0xac/0xc8
[ 20.723330] Status: 11000403 KERNEL EXL IE
[ 20.731626] Cause : 40800008 (ExcCode 02)
[ 20.739576] BadVA : 675f6b6c
[ 20.745277] PrId : 0001992f (MIPS 1004Kc)
[ 20.753414] Modules linked in:
[ 20.759448] Process swapper/0 (pid: 1, threadinfo=(ptrval),
task=(ptrval), tls=00000000)
[ 20.775520] Stack : fffffff4 80496ab8 820c6010 828c8518 80950000
ffffffea 80950000 80496b48
[ 20.792106] 00000000 828c8400 820c6010 821f4880 1e160000
821bc754 82253734 7f8268e6
[ 20.808707] 809c6a94 807b4034 804ae138 809c8e88 819a0000
804ae1d8 80a0d638 80438e10
[ 20.825282] 821f3e70 80950000 808c0000 828c8400 820c6000
828c8548 820c6010 80456608
[ 20.841879] 821f3dc0 821d32c0 819a0000 801d8768 821f3dc0
821d32c0 828c8540 80950000
[ 20.858473] ...
[ 20.863298] Call Trace:
[ 20.868137] [<80403dec>] glob_match+0x1c/0x240
[ 20.876955] [<804ae11c>] soc_device_match_attr+0xac/0xc8
[ 20.887500] [<80496b48>] bus_for_each_dev+0x7c/0xc0
[ 20.897176] [<804ae1d8>] soc_device_match+0x98/0xc8
[ 20.906869] [<80456608>] mt7621_pcie_probe+0x90/0x7b8
[ 20.916876] [<8049b46c>] platform_probe+0x54/0x94
[ 20.926206] [<80499058>] really_probe+0x200/0x434
[ 20.935538] [<80499520>] driver_probe_device+0x44/0xd4
[ 20.945732] [<80499ae0>] __driver_attach+0xb8/0x1b0
[ 20.955428] [<80496b48>] bus_for_each_dev+0x7c/0xc0
[ 20.965089] [<80497f18>] bus_add_driver+0x100/0x218
[ 20.974763] [<8049a338>] driver_register+0xd0/0x118
[ 20.984438] [<80001590>] do_one_initcall+0x8c/0x28c
[ 20.994115] [<809e21c8>] kernel_init_freeable+0x254/0x28c
[ 21.004845] [<80781070>] kernel_init+0x24/0x118
[ 21.013830] [<800034f8>] ret_from_kernel_thread+0x14/0x1c
[ 21.024522]
[ 21.027457] Code: 240f005c 2418002a 2419003f <80820000> 24a90001
90a70000 104c006f 24860001 2843005c
[ 21.046810]
[ 21.049830] ---[ end trace 0000000000000000 ]---
[ 21.058935] Kernel panic - not syncing: Fatal exception
[ 21.069310] Rebooting in 1 seconds..


Cheers,

John




2022-11-04 21:11:39

by John Thomson

[permalink] [raw]
Subject: [PATCH 1/2] phy: ralink: mt7621-pci: add sentinel to quirks table

With mt7621 soc_dev_attr fixed to register the soc as a device,
kernel will experience an oops in soc_device_match_attr

This quirk test was introduced in the staging driver in
commit 9445ccb3714c ("staging: mt7621-pci-phy: add quirks for 'E2'
revision using 'soc_device_attribute'"). The staging driver was removed,
and later re-added in commit d87da32372a0 ("phy: ralink: Add PHY driver
for MT7621 PCIe PHY") for kernel 5.11

Link: https://lore.kernel.org/lkml/[email protected]
Fixes: d87da32372a0 ("phy: ralink: Add PHY driver for MT7621 PCIe PHY")
Signed-off-by: John Thomson <[email protected]>
---
drivers/phy/ralink/phy-mt7621-pci.c | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/drivers/phy/ralink/phy-mt7621-pci.c b/drivers/phy/ralink/phy-mt7621-pci.c
index 5e6530f545b5..85888ab2d307 100644
--- a/drivers/phy/ralink/phy-mt7621-pci.c
+++ b/drivers/phy/ralink/phy-mt7621-pci.c
@@ -280,7 +280,8 @@ static struct phy *mt7621_pcie_phy_of_xlate(struct device *dev,
}

static const struct soc_device_attribute mt7621_pci_quirks_match[] = {
- { .soc_id = "mt7621", .revision = "E2" }
+ { .soc_id = "mt7621", .revision = "E2" },
+ { /* sentinel */ }
};

static const struct regmap_config mt7621_pci_phy_regmap_config = {
--
2.37.2


2022-11-04 21:12:41

by John Thomson

[permalink] [raw]
Subject: [PATCH 2/2] PCI: mt7621: add sentinel to quirks table

With mt7621 soc_dev_attr fixed to register the soc as a device,
kernel will experience an oops in soc_device_match_attr

This quirk test was introduced in the staging driver in
commit b483b4e4d3f6 ("staging: mt7621-pci: add quirks for 'E2' revision
using 'soc_device_attribute'"), and the staging driver was moved in
commit 2bdd5238e756 ("PCI: mt7621: Add MediaTek MT7621 PCIe host
controller driver") for the 5.16 kernel

Link: https://lore.kernel.org/lkml/[email protected]
Fixes: b483b4e4d3f6 ("staging: mt7621-pci: add quirks for 'E2' revision
using 'soc_device_attribute'")
Signed-off-by: John Thomson <[email protected]>
---
drivers/pci/controller/pcie-mt7621.c | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/drivers/pci/controller/pcie-mt7621.c b/drivers/pci/controller/pcie-mt7621.c
index 4bd1abf26008..ee7aad09d627 100644
--- a/drivers/pci/controller/pcie-mt7621.c
+++ b/drivers/pci/controller/pcie-mt7621.c
@@ -466,7 +466,8 @@ static int mt7621_pcie_register_host(struct pci_host_bridge *host)
}

static const struct soc_device_attribute mt7621_pcie_quirks_match[] = {
- { .soc_id = "mt7621", .revision = "E2" }
+ { .soc_id = "mt7621", .revision = "E2" },
+ { /* sentinel */ }
};

static int mt7621_pcie_probe(struct platform_device *pdev)
--
2.37.2


2022-11-05 06:36:17

by Sergio Paracuellos

[permalink] [raw]
Subject: Re: [PATCH 1/2] phy: ralink: mt7621-pci: add sentinel to quirks table

On Fri, Nov 4, 2022 at 9:54 PM John Thomson
<[email protected]> wrote:
>
> With mt7621 soc_dev_attr fixed to register the soc as a device,
> kernel will experience an oops in soc_device_match_attr
>
> This quirk test was introduced in the staging driver in
> commit 9445ccb3714c ("staging: mt7621-pci-phy: add quirks for 'E2'
> revision using 'soc_device_attribute'"). The staging driver was removed,
> and later re-added in commit d87da32372a0 ("phy: ralink: Add PHY driver
> for MT7621 PCIe PHY") for kernel 5.11
>
> Link: https://lore.kernel.org/lkml/[email protected]
> Fixes: d87da32372a0 ("phy: ralink: Add PHY driver for MT7621 PCIe PHY")
> Signed-off-by: John Thomson <[email protected]>
> ---
> drivers/phy/ralink/phy-mt7621-pci.c | 3 ++-
> 1 file changed, 2 insertions(+), 1 deletion(-)

Acked-by: Sergio Paracuellos <[email protected]>

Thanks,
Sergio Paracuellos

2022-11-05 06:54:30

by Sergio Paracuellos

[permalink] [raw]
Subject: Re: [PATCH 2/2] PCI: mt7621: add sentinel to quirks table

On Fri, Nov 4, 2022 at 9:54 PM John Thomson
<[email protected]> wrote:
>
> With mt7621 soc_dev_attr fixed to register the soc as a device,
> kernel will experience an oops in soc_device_match_attr
>
> This quirk test was introduced in the staging driver in
> commit b483b4e4d3f6 ("staging: mt7621-pci: add quirks for 'E2' revision
> using 'soc_device_attribute'"), and the staging driver was moved in
> commit 2bdd5238e756 ("PCI: mt7621: Add MediaTek MT7621 PCIe host
> controller driver") for the 5.16 kernel
>
> Link: https://lore.kernel.org/lkml/[email protected]
> Fixes: b483b4e4d3f6 ("staging: mt7621-pci: add quirks for 'E2' revision
> using 'soc_device_attribute'")
> Signed-off-by: John Thomson <[email protected]>
> ---
> drivers/pci/controller/pcie-mt7621.c | 3 ++-
> 1 file changed, 2 insertions(+), 1 deletion(-)

Acked-by: Sergio Paracuellos <[email protected]>

Thanks,
Sergio Paracuellos

2022-11-05 07:51:28

by Vinod Koul

[permalink] [raw]
Subject: Re: [PATCH 1/2] phy: ralink: mt7621-pci: add sentinel to quirks table

On 05-11-22, 06:52, John Thomson wrote:
> With mt7621 soc_dev_attr fixed to register the soc as a device,
> kernel will experience an oops in soc_device_match_attr
>
> This quirk test was introduced in the staging driver in
> commit 9445ccb3714c ("staging: mt7621-pci-phy: add quirks for 'E2'
> revision using 'soc_device_attribute'"). The staging driver was removed,
> and later re-added in commit d87da32372a0 ("phy: ralink: Add PHY driver
> for MT7621 PCIe PHY") for kernel 5.11

Applied, thanks

--
~Vinod

2022-11-11 20:39:26

by John Thomson

[permalink] [raw]
Subject: Re: [PATCH 2/2] PCI: mt7621: add sentinel to quirks table

On Fri, 4 Nov 2022, at 20:52, John Thomson wrote:
> With mt7621 soc_dev_attr fixed to register the soc as a device,
> kernel will experience an oops in soc_device_match_attr
>
> This quirk test was introduced in the staging driver in
> commit b483b4e4d3f6 ("staging: mt7621-pci: add quirks for 'E2' revision
> using 'soc_device_attribute'"), and the staging driver was moved in
> commit 2bdd5238e756 ("PCI: mt7621: Add MediaTek MT7621 PCIe host
> controller driver") for the 5.16 kernel
>
> Link:
> https://lore.kernel.org/lkml/[email protected]
> Fixes: b483b4e4d3f6 ("staging: mt7621-pci: add quirks for 'E2' revision
> using 'soc_device_attribute'")
> Signed-off-by: John Thomson <[email protected]>
> ---
> drivers/pci/controller/pcie-mt7621.c | 3 ++-
> 1 file changed, 2 insertions(+), 1 deletion(-)
>
> diff --git a/drivers/pci/controller/pcie-mt7621.c
> b/drivers/pci/controller/pcie-mt7621.c
> index 4bd1abf26008..ee7aad09d627 100644
> --- a/drivers/pci/controller/pcie-mt7621.c
> +++ b/drivers/pci/controller/pcie-mt7621.c
> @@ -466,7 +466,8 @@ static int mt7621_pcie_register_host(struct
> pci_host_bridge *host)
> }
>
> static const struct soc_device_attribute mt7621_pcie_quirks_match[] = {
> - { .soc_id = "mt7621", .revision = "E2" }
> + { .soc_id = "mt7621", .revision = "E2" },
> + { /* sentinel */ }
> };
>
> static int mt7621_pcie_probe(struct platform_device *pdev)
> --
> 2.37.2

Ping for the PCI change.
Original link: https://lore.kernel.org/lkml/[email protected]/#t
I would like this pci controller patch applied before we fix the MIPS mt7621 early kzalloc boot failure.
The phy-pci patch was accepted.


Cheers,
--
John Thomson

2022-12-05 16:51:52

by Lorenzo Pieralisi

[permalink] [raw]
Subject: Re: [PATCH 2/2] PCI: mt7621: add sentinel to quirks table

Always capitalize the sentence in the subject.

"PCI: mt7621: Add sentinel to quirks table"

On Sat, Nov 05, 2022 at 06:52:42AM +1000, John Thomson wrote:
> With mt7621 soc_dev_attr fixed to register the soc as a device,
> kernel will experience an oops in soc_device_match_attr

Can we reword this please ? What you are describing *exposes* the
bug but it is not describing the bug per-se.

The bug is related to a missing sentinel in the struct
soc_device_attribute array and that's true regardless of whether it is
actually triggered or not.

Please update the commit log promptly and I shall send it upstream.

Thanks,
Lorenzo

> This quirk test was introduced in the staging driver in
> commit b483b4e4d3f6 ("staging: mt7621-pci: add quirks for 'E2' revision
> using 'soc_device_attribute'"), and the staging driver was moved in
> commit 2bdd5238e756 ("PCI: mt7621: Add MediaTek MT7621 PCIe host
> controller driver") for the 5.16 kernel
>
> Link: https://lore.kernel.org/lkml/[email protected]
> Fixes: b483b4e4d3f6 ("staging: mt7621-pci: add quirks for 'E2' revision
> using 'soc_device_attribute'")
> Signed-off-by: John Thomson <[email protected]>
> ---
> drivers/pci/controller/pcie-mt7621.c | 3 ++-
> 1 file changed, 2 insertions(+), 1 deletion(-)
>
> diff --git a/drivers/pci/controller/pcie-mt7621.c b/drivers/pci/controller/pcie-mt7621.c
> index 4bd1abf26008..ee7aad09d627 100644
> --- a/drivers/pci/controller/pcie-mt7621.c
> +++ b/drivers/pci/controller/pcie-mt7621.c
> @@ -466,7 +466,8 @@ static int mt7621_pcie_register_host(struct pci_host_bridge *host)
> }
>
> static const struct soc_device_attribute mt7621_pcie_quirks_match[] = {
> - { .soc_id = "mt7621", .revision = "E2" }
> + { .soc_id = "mt7621", .revision = "E2" },
> + { /* sentinel */ }
> };
>
> static int mt7621_pcie_probe(struct platform_device *pdev)
> --
> 2.37.2
>