5.1.8.4Tasklets

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.5Work 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.9Processor 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.10Machine 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

Page 66
Image 66
IBM 10 SP1 EAL4 manual Processor interrupts, Machine check, Tasklets, Work queue