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);

Reply via email to