[parisc-linux] 2.4.18-pa35 SMP process hangs on a J200

Matthew Wilcox willy@debian.org
Wed, 12 Jun 2002 15:11:30 +0100


On Tue, Jun 11, 2002 at 01:39:38PM -0500, Michael S. Zick wrote:
> using objdump -d on the kernel.o produced by my compiler
> (a different version of GCC than used for pa-risc) I find that
> for the "c" code sequence:
> ....
> int cpu = smp_processor_id() ;
> 
> __save_flags(flags) ;
> ....
> generates assembly code which modifies the flags during the
> initialization of "cpu" before the flags are actually saved.

are you sure?  every architecture (apart from sparc32) uses:

#define smp_processor_id() (current->processor)

admittedly on i386 (which is where you seem to be investigating), this
expands to:

get_current()->processor

which expands to

andl %%esp,%0

where 8191UL has previously been loaded into register %0.  but i don't
see how this can affect the interrupt flags.  admittedly, i know very
little about x86, but there are many other instances of code like this
in the kernel.

-- 
Revolutions do not require corporate support.