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