Based on the code reference in the warning (referring to http://lxr.linux.no/linux+v2.6.26/arch/x86/kernel/smp.c#L207) I believe its due to using the interrupt disabling spinlock functions.
I have not have the system deadlock as indicated by comments in the code near the above link and the code seems to have changed/moved a lot in newer kernels so don't know how much a problem it is. The warning/stack trace goes away with the attached patch. I assume its safe to not disable interrupts once the handler has been unregistered. Thanks Tristan
=== modified file 'kernel/zaphfc/zaphfc.c' --- kernel/zaphfc/zaphfc.c 2009-01-20 19:44:57 +0000 +++ kernel/zaphfc/zaphfc.c 2009-01-20 19:47:46 +0000 @@ -109,7 +109,7 @@ spin_unlock_irqrestore(&hfctmp->lock, flags); set_current_state(TASK_UNINTERRUPTIBLE); schedule_timeout((30 * HZ) / 1000); // wait 30 ms - spin_lock_irqsave(&hfctmp->lock,flags); + spin_lock(&hfctmp->lock); hfc_outb(hfctmp,hfc_CIRM,0); // softreset off @@ -123,7 +123,7 @@ if (hfctmp->pcidev != NULL) { pci_disable_device(hfctmp->pcidev); } - spin_unlock_irqrestore(&hfctmp->lock,flags); + spin_unlock(&hfctmp->lock); if (hfctmp->ztdev != NULL) { zt_unregister(&hfctmp->ztdev->span); vfree(hfctmp->ztdev);