Re: Deadlock in ia64_mca_cmc_int_caller

From: Alex Williamson <alex.williamson_at_hp.com>
Date: 2003-12-07 02:23:50
Keith,

   We debugged a similar problem with the old CMC/CPE code recently. 
However, the latest version in 2.4/2.6 fixed that problem.  So are you
actually hitting a deadlock when ia64_mca_cmc_int_caller() calls
smp_call_function(ia64_mca_cmc_vector_enable, NULL, 1, 0)?  I've reached
the same conclusion about smp_call_function, my mistake for using it in
the first place, it's way too dangerous.  We need to enable/disable the
CMC vector in a better context or use another mechanism.

	Alex

On Fri, 2003-12-05 at 21:16, Keith Owens wrote:
> ia64_mca_cmc_int_caller() calls smp_call_function() which waits until
> all cpus have taken the IPI before returning.  This interacts badly
> with locks that are sometimes taken with interrupts disabled and
> sometimes with interrupts enabled, smp_call_function can deadlock.
> 
> cpu 3                                                   cpu 0
> Holds tasklist_lock with interrupts enabled,
> it did read_lock() or write_lock().
> 
>                                                 Does read_lock_irq() or
>                                                 write_lock_irq().  Spinning
>                                                 disabled waiting for tasklist_lock.
> 
> CMC interrupt occurs
> 
> ia64_mca_cmc_int_caller() calls smp_call_function()
> 
> smp_call_function() sends IPI to other cpus
> 
>                                                 IPI on cpu 0 blocked, it is disabled
> 						waiting for tasklist_lock.
> 
> smp_call_function() waits until IPI reaches
> all other cpus.
> 
> cpu 0 never responds, we never release the
> tasklist lock, deadlock.
> 
> AFAICT it is never safe to call smp_call_function() from an interrupt
> handler.
> 
> The unsafe nature of smp_call_function is not ia64 specific.  ix86 can
> deadlock this way if any ix86 code calls smp_call_function from an
> interrupt handler.
> 
> -
> To unsubscribe from this list: send the line "unsubscribe linux-ia64" in
> the body of a message to majordomo@vger.kernel.org
> More majordomo info at  http://vger.kernel.org/majordomo-info.html
> 

-
To unsubscribe from this list: send the line "unsubscribe linux-ia64" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Received on Sat Dec 6 10:24:11 2003

This archive was generated by hypermail 2.1.8 : 2005-08-02 09:20:20 EST