As we mentioned previously, if the primary handler is null and the thread function is non-null, the kernel uses a default primary handler. The function is called irq_default_primary_handler() and all it does is return the IRQ_WAKE_THREAD value, thus waking up (and making schedulable) the kernel thread.
Furthermore, the actual kernel thread that runs your thread_fn routine is created within the code of the request_threaded_irq() API. The call graph (as of version 5.4.0 of the Linux kernel) is as follows:
kernel/irq/manage.c:request_threaded_irq() -- __setup_irq() --
setup_irq_thread() -- kernel/kthread.c:kthread_create()
The invocation of the kthread_create() API is as follows. Here, you can clearly see how the format of the new kernel thread's name will be in irq/irq#-name format:
t = kthread_create(irq_thread, new, "irq/%d-%s", irq, new->name);
Here (we...