MIPS - 2.4.20 kernel - wait_on_irq issue

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Hi
  Request some clarification on the 2.4.20 MIPS kernel
port.

Specifically refer to function wait_on_irq() in
arch/mips/kernel/irq.c. This function is called from 
get_irqlock() which in turn is called from
__global_cli eventually by cli().     
                                                      
                                                      
                                                   The
wait_on_irq() function does not return until "all the
CPUS" have run the ISRs.  To reach this state
interrupts have to be disabled on all the CPUs and
then wait for the ISRs to complete.  So __cli()
function called from this function is supposed to
disable the interrupts. The __cli() in MIPS will
disable the Interrupts by resetting the coprocessor
register's "Interrupt Enable"  bit which is per CPU. 
So this is going to just disable the interrupts on the
current CPU and not others.                           
                                                      
                                            

So in  a SMP system with N CPUs, can there be a
situation where wait_on_irq() may never return as an
ISR could be running in one CPU or the other as the
interrupts are not being disabled on all the CPUs? The
irq_running() function may always return TRUE for a
large number of CPUs in this case.

So, is there a problem here or am I missing something?

2.6 kernel seems to be handling the cli() call
differently.

Thanks
Krishnamurthy

__________________________________________________
Do You Yahoo!?
Tired of spam?  Yahoo! Mail has the best spam protection around 
http://mail.yahoo.com 


[Index of Archives]     [Linux MIPS Home]     [LKML Archive]     [Linux ARM Kernel]     [Linux ARM]     [Linux]     [Git]     [Yosemite News]     [Linux SCSI]     [Linux Hams]

  Powered by Linux