Hi Mikhail, On Mon, Jan 17, 2022 at 05:49:19AM +0500, Mikhail Gavrilov wrote: > Hi! > Between commits 7ddb58cb0eca and d2f38a3c6507, the kernel stops > loading on my devices. > On the kernel log I see such a trace: > [ 5.868358] primary-ws kernel: Oops: 0000 [#1] PREEMPT SMP NOPTI > [ 5.868360] primary-ws kernel: CPU: 23 PID: 305 Comm: kworker/23:2 > Tainted: G W --------- --- > 5.17.0-0.rc0.20220113git455e73a07f6e.64.fc36.x86_64 #1 > [ 5.868363] primary-ws kernel: Hardware name: System manufacturer > System Product Name/ROG STRIX X570-I GAMING, BIOS 4021 08/09/2021 > [ 5.868365] primary-ws kernel: Workqueue: events_long > ucsi_init_work [typec_ucsi] > [ 5.868370] primary-ws kernel: RIP: 0010:typec_port_match+0x44/0x80 [typec] > [ 5.868377] primary-ws kernel: Code: 06 48 8b 98 00 05 00 00 48 89 > df 48 83 eb 10 e8 b2 53 3b f3 84 c0 b8 00 00 00 00 48 0f 44 d8 4c 39 > eb 74 0a 8b 85 70 fd ff ff <39> 03 74 09 5b 31 c0 5d 41 5c 41 5d c3 49 > 8b 3c 24 49 8d 74 24 08 > [ 5.868379] primary-ws kernel: RSP: 0018:ffffbf704494bd60 EFLAGS: 00010207 > [ 5.868381] primary-ws kernel: RAX: 0000000000000000 RBX: > 0000000000000000 RCX: 0000000000000000 > [ 5.868382] primary-ws kernel: RDX: 0000000000000001 RSI: > ffffbf704494bdb8 RDI: 0000000000000000 > [ 5.868384] primary-ws kernel: RBP: ffff9a23c2bbf290 R08: > 0000000000000001 R09: 0000000000000001 > [ 5.868385] primary-ws kernel: R10: 0000000000000001 R11: > 0000000000000000 R12: ffffbf704494bdb8 > [ 5.868386] primary-ws kernel: R13: ffff9a23c2bbf000 R14: > ffff9a23c1b99008 R15: ffff9a23c1b01820 > [ 5.868388] primary-ws kernel: FS: 0000000000000000(0000) > GS:ffff9a32a8600000(0000) knlGS:0000000000000000 > [ 5.868389] primary-ws kernel: CS: 0010 DS: 0000 ES: 0000 CR0: > 0000000080050033 > [ 5.868391] primary-ws kernel: CR2: 0000000000000000 CR3: > 000000017c482000 CR4: 0000000000350ee0 > [ 5.868393] primary-ws kernel: Call Trace: > [ 5.868394] primary-ws kernel: <TASK> > [ 5.868396] primary-ws kernel: ? typec_port_compare+0x10/0x10 [typec] > [ 5.868401] primary-ws kernel: bus_for_each_dev+0x67/0x90 > [ 5.868406] primary-ws kernel: typec_link_ports+0x32/0x50 [typec] > [ 5.868411] primary-ws kernel: typec_register_port+0x1e6/0x2e0 [typec] > [ 5.868416] primary-ws kernel: ucsi_init_work+0x463/0x840 [typec_ucsi] > [ 5.868420] primary-ws kernel: process_one_work+0x2bb/0x600 > [ 5.868426] primary-ws kernel: worker_thread+0x55/0x3b0 > [ 5.868429] primary-ws kernel: ? process_one_work+0x600/0x600 > [ 5.868431] primary-ws kernel: kthread+0x17c/0x1a0 > [ 5.868433] primary-ws kernel: ? set_kthread_struct+0x40/0x40 > [ 5.868436] primary-ws kernel: ret_from_fork+0x22/0x30 > [ 5.868441] primary-ws kernel: </TASK> > [ 5.868442] primary-ws kernel: Modules linked in: crct10dif_pclmul > crc32_pclmul crc32c_intel ucsi_ccg drm_ttm_helper ghash_clmulni_intel > typec_ucsi ttm ccp sp5100_tco typec igb iommu_v2 gpu_sched nvme > nvme_core dca wmi ipmi_devintf ipmi_msghandler fuse > [ 5.868455] primary-ws kernel: CR2: 0000000000000000 > [ 5.868457] primary-ws kernel: ---[ end trace c5a60084d820dc9c ]--- > [ 5.868459] primary-ws kernel: RIP: 0010:typec_port_match+0x44/0x80 [typec] > [ 5.868463] primary-ws kernel: Code: 06 48 8b 98 00 05 00 00 48 89 > df 48 83 eb 10 e8 b2 53 3b f3 84 c0 b8 00 00 00 00 48 0f 44 d8 4c 39 > eb 74 0a 8b 85 70 fd ff ff <39> 03 74 09 5b 31 c0 5d 41 5c 41 5d c3 49 > 8b 3c 24 49 8d 74 24 08 > [ 5.868465] primary-ws kernel: RSP: 0018:ffffbf704494bd60 EFLAGS: 00010207 > [ 5.868467] primary-ws kernel: RAX: 0000000000000000 RBX: > 0000000000000000 RCX: 0000000000000000 > [ 5.868468] primary-ws kernel: RDX: 0000000000000001 RSI: > ffffbf704494bdb8 RDI: 0000000000000000 > [ 5.868469] primary-ws kernel: RBP: ffff9a23c2bbf290 R08: > 0000000000000001 R09: 0000000000000001 > [ 5.868470] primary-ws kernel: R10: 0000000000000001 R11: > 0000000000000000 R12: ffffbf704494bdb8 > [ 5.868471] primary-ws kernel: R13: ffff9a23c2bbf000 R14: > ffff9a23c1b99008 R15: ffff9a23c1b01820 > [ 5.868473] primary-ws kernel: FS: 0000000000000000(0000) > GS:ffff9a32a8600000(0000) knlGS:0000000000000000 > [ 5.868475] primary-ws kernel: CS: 0010 DS: 0000 ES: 0000 CR0: > 0000000080050033 > [ 5.868476] primary-ws kernel: CR2: 0000000000000000 CR3: > 000000017c482000 CR4: 0000000000350ee0 > > I also bisect kernel and found first bad commit: > > $ git bisect log > git bisect start > # good: [daadb3bd0e8d3e317e36bc2c1542e86c528665e5] Merge tag > 'locking_core_for_v5.17_rc1' of > git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip > git bisect good daadb3bd0e8d3e317e36bc2c1542e86c528665e5 > # bad: [455e73a07f6e288b0061dfcf4fcf54fa9fe06458] Merge tag > 'clk-for-linus' of > git://git.kernel.org/pub/scm/linux/kernel/git/clk/linux > git bisect bad 455e73a07f6e288b0061dfcf4fcf54fa9fe06458 > # good: [342465f5337f7bd5b8bd3b6f939ac12b620cbb43] Merge tag > 'tty-5.17-rc1' of > git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/tty > git bisect good 342465f5337f7bd5b8bd3b6f939ac12b620cbb43 > # bad: [362f533a2a1098fe95020cb59340023e9b11d062] Merge tag > 'cxl-for-5.17' of > git://git.kernel.org/pub/scm/linux/kernel/git/cxl/cxl > git bisect bad 362f533a2a1098fe95020cb59340023e9b11d062 > # bad: [6020c204be997e3f5129839ff9c801800fb4336e] Merge tag > 'folio-5.17' of git://git.infradead.org/users/willy/pagecache > git bisect bad 6020c204be997e3f5129839ff9c801800fb4336e > # bad: [e681a9d2050cdcaf24adeabc9f1aea6cff94be22] Merge 5.16-rc8 into usb-next > git bisect bad e681a9d2050cdcaf24adeabc9f1aea6cff94be22 > # good: [a5b5b45fce2bed5560159095b4777afb18590740] dt-bindings: usb: > dwc3-xilinx: Convert USB DWC3 bindings > git bisect good a5b5b45fce2bed5560159095b4777afb18590740 > # good: [cf081d009c447647c6b36aced535ca427dbebe72] usb: musb: Set the > DT node on the child device > git bisect good cf081d009c447647c6b36aced535ca427dbebe72 > # good: [78e17d69999521b52b9db9656e9b9b397f59f228] usb: cdns3: Use > platform_get_irq_byname() to get the interrupt > git bisect good 78e17d69999521b52b9db9656e9b9b397f59f228 > # good: [13068b7472f9720f807fe72b9bf3f76b9fd6d6ab] acpi: Export acpi_bus_type > git bisect good 13068b7472f9720f807fe72b9bf3f76b9fd6d6ab > # bad: [730b49aac426e1e8016d3c2dd6b407e500423821] usb: typec: > port-mapper: Convert to the component framework > git bisect bad 730b49aac426e1e8016d3c2dd6b407e500423821 > # good: [8c67d06f3fd9639c44d8147483fb1c132d71388f] usb: Link the ports > to the connectors they are attached to > git bisect good 8c67d06f3fd9639c44d8147483fb1c132d71388f > # first bad commit: [730b49aac426e1e8016d3c2dd6b407e500423821] usb: > typec: port-mapper: Convert to the component framework > > $ git bisect good > 730b49aac426e1e8016d3c2dd6b407e500423821 is the first bad commit > commit 730b49aac426e1e8016d3c2dd6b407e500423821 > Author: Heikki Krogerus <heikki.krogerus@xxxxxxxxxxxxxxx> > Date: Thu Dec 23 11:24:22 2021 +0300 > > usb: typec: port-mapper: Convert to the component framework > > Instead of trying to keep track of the connections to the > USB Type-C connectors separately, letting the component > framework take care of that. > > From now on every USB Type-C connector will register itself > as "aggregate" - component master - and anything that can be > connected to it inside the system can then simply register > itself as a generic component. > > The matching of the components and the connector shall rely > on ACPI _PLD initially. Before registering itself as the > aggregate, the connector will find all other ACPI devices > that have matching _PLD crc hash with it (matching value in > the pld_crc member of struct acpi_device), and add a > component match entry for each one of them. Because only > ACPI is supported for now, the driver shall only be build > when ACPI is supported. > > This removes the need for the custom API that the driver > exposed. The components and the connector can therefore > exist completely independently of each other. The order in > which they are registered, as well as are they modules or > not, is now irrelevant. > > Acked-by: Rafael J. Wysocki <rafael.j.wysocki@xxxxxxxxx> > Signed-off-by: Heikki Krogerus <heikki.krogerus@xxxxxxxxxxxxxxx> > Link: https://lore.kernel.org/r/20211223082422.45637-1-heikki.krogerus@xxxxxxxxxxxxxxx > Signed-off-by: Greg Kroah-Hartman <gregkh@xxxxxxxxxxxxxxxxxxx> > > drivers/usb/typec/Makefile | 3 +- > drivers/usb/typec/class.c | 2 - > drivers/usb/typec/class.h | 10 +- > drivers/usb/typec/port-mapper.c | 279 ++++++---------------------------------- > include/linux/usb/typec.h | 12 -- > 5 files changed, 46 insertions(+), 260 deletions(-) > > Full kernel log is here: https://pastebin.com/byYtHyxZ Thank you for bisecting the problem. The code assumes currently that every USB Type-C port has an ACPI device node defined for it in the ACPI tables, but it looks like we can't make that assumption. Could you send me the acpidump? I'm attaching a test patch where I check the Type-C port ACPI nodes. Let me know it that fixes the problem. thanks, -- heikki
>From bf49bc022577a6bfdded6916122664a06236ccd2 Mon Sep 17 00:00:00 2001 From: Heikki Krogerus <heikki.krogerus@xxxxxxxxxxxxxxx> Date: Mon, 17 Jan 2022 11:42:36 +0300 Subject: [PATCH] usb: typec: Test fix Interim. NOT-Signed-off-by: Heikki Krogerus <heikki.krogerus@xxxxxxxxxxxxxxx> --- drivers/usb/typec/port-mapper.c | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/drivers/usb/typec/port-mapper.c b/drivers/usb/typec/port-mapper.c index 07d307418b470..b6e0c6acc628c 100644 --- a/drivers/usb/typec/port-mapper.c +++ b/drivers/usb/typec/port-mapper.c @@ -56,6 +56,9 @@ int typec_link_ports(struct typec_port *con) { struct each_port_arg arg = { .port = con, .match = NULL }; + if (!has_acpi_companion(&con->dev)) + return 0; + bus_for_each_dev(&acpi_bus_type, NULL, &arg, typec_port_match); /* @@ -74,5 +77,6 @@ int typec_link_ports(struct typec_port *con) void typec_unlink_ports(struct typec_port *con) { - component_master_del(&con->dev, &typec_aggregate_ops); + if (has_acpi_companion(&con->dev)) + component_master_del(&con->dev, &typec_aggregate_ops); } -- 2.34.1