For a multi-core computer running Linux 2.6.x, what happens when a thread makes a system call? Does it drop into the kernel only on the core that the thread is running on, or does it drop into the kernel on all cores (sorry if this is a newbie question).
Is this behaviour (whichever is the correct one) the same when receiving interrupts in general? If not, what are the differences?
Only the thread that does the syscall enters the kernel. All scheduling in Linux is done on thread granularity. As for interrupts – they are routed to one core, i.e. only one processor is interrupted for each given hardware event. Then interrupts could be manually assigned to specific cores. This is done with a mask in
/proc/irq/IRQ-NUMBER/smp_affinity. You can see which CPUs receive what hardware interrupts in/proc/interrupts.