Bug 252777 - Cleanup after gpio_alloc_intr_resource
Summary: Cleanup after gpio_alloc_intr_resource
Status: New
Alias: None
Product: Base System
Classification: Unclassified
Component: arm (show other bugs)
Version: CURRENT
Hardware: arm Any
: --- Affects Only Me
Assignee: freebsd-arm (Nobody)
URL:
Keywords:
Depends on:
Blocks:
 
Reported: 2021-01-17 13:16 UTC by Oskar Holmlund
Modified: 2021-01-17 13:21 UTC (History)
4 users (show)

See Also:


Attachments
devicetree example (713 bytes, audio/vnd.dts)
2021-01-17 13:16 UTC, Oskar Holmlund
no flags Details
example driver (2.95 KB, text/plain)
2021-01-17 13:16 UTC, Oskar Holmlund
no flags Details

Note You need to log in before you can comment on or make changes to this bug.
Description Oskar Holmlund 2021-01-17 13:16:09 UTC
Created attachment 221670 [details]
devicetree example

Tested on r368820 on BBBlack

See attached devicetree and example driver.

The attach()/detach() function are more or less the same as in dev/gpio/gpiopps.c / gpiokeys.c etc.

I think the problem is that intr_unmap_irq isnt called (irq_map[res_id] still contains an old address).


# foreach x ( `seq 1 2100` )
foreach? kldload ./gpio_int_test.ko
foreach? kldunload ./gpio_int_test.ko
foreach? end

Will end up in a panic()

gpio2: intr_map_irq
panic: IRQ mapping table is full.
cpuid = 0
time = 1610892198
KDB: stack backtrace:
db_trace_self() at db_trace_self
         pc = 0xc050fde8  lr = 0xc007b080 (db_trace_self_wrapper+0x30)
         sp = 0xd4dce810  fp = 0xd4dce928
db_trace_self_wrapper() at db_trace_self_wrapper+0x30
         pc = 0xc007b080  lr = 0xc0246150 (vpanic+0x170)
         sp = 0xd4dce930  fp = 0xd4dce950
         r4 = 0x00000100  r5 = 0xd4dce964
         r6 = 0xc060c127  r7 = 0x00000000
vpanic() at vpanic+0x170
         pc = 0xc0246150  lr = 0xc0245f04 (doadump)
         sp = 0xd4dce958  fp = 0xd4dce95c
         r4 = 0xd75b75c0  r5 = 0xc095e538
         r6 = 0x00000200  r7 = 0x00000000
         r8 = 0xd0f881e8  r9 = 0x00000002
        r10 = 0x80000803
doadump() at doadump
         pc = 0xc0245f04  lr = 0xc05189b8 (intr_map_irq+0xe8)
         sp = 0xd4dce964  fp = 0xd4dce980
         r4 = 0x80000803  r5 = 0xd4dce95c
         r6 = 0xc0245f04 r10 = 0xd4dce964
intr_map_irq() at intr_map_irq+0xe8
         pc = 0xc05189b8  lr = 0xc0093194 (gpio_alloc_intr_resource+0x5c)
         sp = 0xd4dce988  fp = 0xd4dce9c0
         r4 = 0xd7193f20  r5 = 0xd0f30f00
         r6 = 0xd7185ee0  r7 = 0x00000000
gpio_alloc_intr_resource() at gpio_alloc_intr_resource+0x5c
         pc = 0xc0093194  lr = 0xd72c5a44 (gpio_int_test_attach+0xc0)
         sp = 0xd4dce9c8  fp = 0xd4dce9e8
         r4 = 0xc06dd9b8  r5 = 0xd0f881e4
         r6 = 0xc2370000  r7 = 0xd0f881e0
         r8 = 0xc0968064  r9 = 0x80040001
gpio_int_test_attach() at gpio_int_test_attach+0xc0
         pc = 0xd72c5a44  lr = 0xc0284a24 (device_attach+0x50c)
         sp = 0xd4dce9f0  fp = 0xd4dcea38
         r4 = 0xd0f30f00  r5 = 0xc0968068
         r6 = 0x13916835  r7 = 0x00000000
device_attach() at device_attach+0x50c
         pc = 0xc0284a24  lr = 0xc0284474 (device_probe_and_attach+0x8c)
         sp = 0xd4dcea40  fp = 0xd4dcea58
         r4 = 0xd0f30f00  r5 = 0xc2339f40
         r6 = 0x5e4a6f28  r7 = 0xc2370000
         r8 = 0xd72d5cd0  r9 = 0xd72d5db4
        r10 = 0xd71a0a00
device_probe_and_attach() at device_probe_and_attach+0x8c
         pc = 0xc0284474  lr = 0xc0286734 (bus_generic_driver_added+0x64)
         sp = 0xd4dcea60  fp = 0xd4dcea68
         r4 = 0xd0f30f00  r5 = 0xd72d5cd0
         r6 = 0xc06f5ad4 r10 = 0xd71a0a00
bus_generic_driver_added() at bus_generic_driver_added+0x64
         pc = 0xc0286734  lr = 0xc02820b8 (devclass_driver_added+0x3c)
         sp = 0xd4dcea70  fp = 0xd4dcea88
         r4 = 0x00000000  r5 = 0xc3529500
devclass_driver_added() at devclass_driver_added+0x3c
         pc = 0xc02820b8  lr = 0xc0282150 (devclass_driver_added+0xd4)
         sp = 0xd4dcea90  fp = 0xd4dceaa8
         r4 = 0x00000010  r5 = 0xc35293c0
         r6 = 0xc3529500  r7 = 0x00000000
         r8 = 0xd72d5cd0 r10 = 0xd71a0a00
devclass_driver_added() at devclass_driver_added+0xd4
         pc = 0xc0282150  lr = 0xc0281fdc (devclass_add_driver+0x158)
         sp = 0xd4dceab0  fp = 0xd4dceac8
         r4 = 0xd72d5cd0  r5 = 0x00000000
         r6 = 0xd7087820  r7 = 0x7fffffff
         r8 = 0xc35293c0 r10 = 0xd71a0a00
devclass_add_driver() at devclass_add_driver+0x158
         pc = 0xc0281fdc  lr = 0xc02255e4 (module_register_init+0xe0)
         sp = 0xd4dcead0  fp = 0xd4dceaf0
         r4 = 0xc08de588  r5 = 0xd71a0a00
         r6 = 0xd72d5cac  r7 = 0xd72b581a
         r8 = 0xc073a750  r9 = 0xc0704ef0
module_register_init() at module_register_init+0xe0
         pc = 0xc02255e4  lr = 0xc0214ce0 (linker_load_module+0xccc)
         sp = 0xd4dceaf8  fp = 0xd4dced78
         r4 = 0xc073a750  r5 = 0xd72d5cec
         r6 = 0x00000000  r7 = 0xc0275658
         r8 = 0x00000000  r9 = 0xc0704ef0
linker_load_module() at linker_load_module+0xccc
         pc = 0xc0214ce0  lr = 0xc02165c4 (kern_kldload+0x104)
         sp = 0xd4dced80  fp = 0xd4dceda8
         r4 = 0xd4dcedb4  r5 = 0xd7019800
         r6 = 0x00000000  r7 = 0xd7019800
         r8 = 0x00000000  r9 = 0x5e4a6f28
        r10 = 0xd70bd1a8
kern_kldload() at kern_kldload+0x104
         pc = 0xc02165c4  lr = 0xc021670c (sys_kldload+0x64)
         sp = 0xd4dcedb0  fp = 0xd4dcedc8
         r4 = 0xd711d780  r5 = 0xd7019800
         r6 = 0x00000000  r7 = 0x00000000
         r8 = 0x00000000  r9 = 0xd711da28
sys_kldload() at sys_kldload+0x64
         pc = 0xc021670c  lr = 0xc0531f9c (swi_handler+0x15c)
         sp = 0xd4dcedd0  fp = 0xd4dcee40
         r4 = 0xd711d780  r5 = 0x00000001
         r6 = 0xc06f85d4 r10 = 0xd70bd1a8
swi_handler() at swi_handler+0x15c
         pc = 0xc0531f9c  lr = 0xc05126a0 (swi_exit)
         sp = 0xd4dcee48  fp = 0xbfbfecc0
         r4 = 0xbfbfee54  r5 = 0xbfbfeba8
         r6 = 0x00000000  r7 = 0x00000130
         r8 = 0x00000001  r9 = 0xbfbfe794
        r10 = 0xbfbfeb94
swi_exit() at swi_exit
         pc = 0xc05126a0  lr = 0xc05126a0 (swi_exit)
         sp = 0xd4dcee48  fp = 0xbfbfecc0
KDB: enter: panic
[ thread pid 3162 tid 100082 ]
Comment 1 Oskar Holmlund 2021-01-17 13:16:46 UTC
Created attachment 221671 [details]
example driver