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 ]
Created attachment 221671 [details] example driver