On Mon, 21 Dec 1998, Linus Torvalds wrote:
> Basically, the low 8 bits of the destination is the "destination
> mask" to the APIC. The other bits are the destination shorthands
> (ie stuff like "everybody but me") and the destination mode bits
> (ie "fixed" or "NMI" etc).
>
> But basically you should be able to try:
> - set the low eight bits to the CPU number
> - make send_IPI() clear the low eight bits after it has used them for the
> target chip field.
>
> Looking at the code that should work, but I'd test it a bit first
> if I were you ;)
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);
/*
* Send the IPI. The write to APIC_ICR fires this off.
---
Here I changed the last cfg line from 'cfg |= dest' because we
now pass actual values to send_IPI()...
and smp.c::smp_message_pass():
else
{
dest=target;
target_map=(1<<target);
cpu_callin_map[0]=0;
}
---
Just the way you told me, but still it doesn't seem to work :(
There are several other things/possibilities I worry about:
- the message is sent and arrives but isn't processed until
the next trip to kernel-land (???)
- the IPI: count in /proc/interrupts is 0, but that doesn't
really worry me since nothing seems to update the stats...
- performance under X is acceptable, sometimes even good,
on the console things tend to suck eggs however
- I could be doing something wrong so the IPI never gets
sent -- this is the least worrying option :)
cheers,
Rik -- the flu hits, the flu hits, the flu hits -- MORE
+-------------------------------------------------------------------+
| Linux memory management tour guide. [EMAIL PROTECTED] |
| Scouting Vries cubscout leader. http://www.phys.uu.nl/~riel/ |
+-------------------------------------------------------------------+
-
Linux SMP list: FIRST see FAQ at http://www.irisa.fr/prive/mentre/smp-faq/
To Unsubscribe: send "unsubscribe linux-smp" to [EMAIL PROTECTED]