On Tue, 22 Dec 1998, Rik van Riel wrote:
>
> Currently my kernel looks like this now:
>
> smp.c::send_IPI():
>
> cfg = apic_read(APIC_ICR);
> cfg &= ~0xFDFFF;
> cfg |= APIC_DEST_FIELD|APIC_DEST_DM_FIXED|vector;
> cfg |= (dest & 0xFFFFFF00);
Fine.
> and smp.c::smp_message_pass():
>
> else
> {
> dest=target;
> target_map=(1<<target);
> cpu_callin_map[0]=0;
> }
That should be
dest = cpu_logical_map(target);
I do believe. Does that change fix it for you?
Anyway, if you're really playing with this then I'd strongly suggest that
before you start using it for scheduling purposes you verify that it
actually does work with some simpler case (make some early boot thing that
sends an IPI to the other CPU's and the IPI handler just does a printk()
or something).
Ingo is cleaning this all up right now, I do believe. The current
"smp_message_pass()" is really from rather early in the Linux/SMP stuff,
and it can be done in a clearer way and with a lot less overhead by simply
having more specialized functions rather than one function that tries to
handle many cases.
Linus
-
Linux SMP list: FIRST see FAQ at http://www.irisa.fr/prive/mentre/smp-faq/
To Unsubscribe: send "unsubscribe linux-smp" to [EMAIL PROTECTED]