IBM 10 SP1 EAL4 User Manual

Page of 246
 5.1.8.4  Tasklets
Tasklets are dynamically linked and built on top of softirq mechanisms.  Tasklets differ from softirqs in that a 
tasklet is always serialized with respect to itself.  In other words, a tasklet cannot be executed by two CPUs at 
the same time.  However, different tasklets can be executed concurrently on several CPUs. 
 5.1.8.5  Work queue
The work queue mechanism was introduced in the 2.6 Linux kernel.  Work queues execute in process context, 
as opposed to the interrupt context of softirqs and tasklets.  Work queues defer work to kernel threads, which 
are schedulable, and can therefore sleep.  Thus, work queues provide an interface to create kernel threads to 
handle work queued from other operations. The work queue infrastructure allows a device driver to create its 
own kernel thread or use generic worker threads, one per processor, provided by the kernel.
 5.1.9  Processor interrupts
A symmetrical multiprocessing (SMP) system sets slightly different requirements to interrupt handling by 
hardware and software than an ordinary uniprocessing (UP) system.  Distributed handling of hardware 
interrupts has to be implemented to take advantage of parallelism, and an efficient mechanism for 
communicating between CPUs must be provided.
Inter-processor interrupts (IPIs) are used to exchange messages between CPUs in SMP system. The following 
group of functions helps in issuing IPIs:
send_IPI_all()
Sends an IPI to all CPUs (including the sender)
send_IPI_allbutself()
Sends an IPI to all CPUs except the sender
send_IPI_self()
Sends an IPI to the sender CPU
send_IPI_single()
Sends an IPI to a single, specified CPU
On a multiprocessor system, Linux defines the following five types of  IPIs:
CALL_FUNCTION_VECTOR(vector 0xfb)  Used to call functions with a given argument on other 
CPUs like flush tlb_all_ipi() and stop_this_cpu().  Handler: 
smp_call_function_interrupt().
RESCHEDULE_VECTOR(0xfc)  Used at least when the best CPU for the woken up task is not this 
CPU. Handler: smp_reschedule_interrupt().
INVALIDATE_TLB_VECTOR(VECTOR 0xfd)  Used when the TLBs of the other CPU need to be 
invalidated. Handler: smp_invalidate_interrupt().
ERROR_APIC_VECTOR(vector 0xfe)  This interrupt should never occur.
SPURIOUS_APIC_VECTOR(vector 0xff)  This interrupt should  never occur.
 5.1.10  Machine check
A machine check exception is an imprecise non-recoverable exception, which means that the CPU does not 
guarantee it will give a coherent set of register values after the exception occurs.  A machine check exception 
occurs when something goes wrong inside the CPU, such as cosmic rays causing bits to randomly flip, or the 
CPU overheating causing electrons to drift.
54