1<html><head><meta http-equiv="Content-Type" content="text/html; charset=ANSI_X3.4-1968"><title>Glossary</title><meta name="generator" content="DocBook XSL Stylesheets V1.78.1"><link rel="home" href="index.html" title="Unreliable Guide To Locking"><link rel="up" href="index.html" title="Unreliable Guide To Locking"><link rel="prev" href="thanks.html" title="Chapter 14. Thanks"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Glossary</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="thanks.html">Prev</a> </td><th width="60%" align="center"> </th><td width="20%" align="right"> </td></tr></table><hr></div><div class="glossary"><div class="titlepage"><div><div><h1 class="title"><a name="glossary"></a>Glossary</h1></div></div></div><dl><dt><a name="gloss-preemption"></a><span class="glossterm">preemption</span></dt><dd class="glossdef"><p> 2 Prior to 2.5, or when <span class="symbol">CONFIG_PREEMPT</span> is 3 unset, processes in user context inside the kernel would not 4 preempt each other (ie. you had that CPU until you gave it up, 5 except for interrupts). With the addition of 6 <span class="symbol">CONFIG_PREEMPT</span> in 2.5.4, this changed: when 7 in user context, higher priority tasks can "cut in": spinlocks 8 were changed to disable preemption, even on UP. 9 </p></dd><dt><a name="gloss-bh"></a><span class="glossterm">bh</span></dt><dd class="glossdef"><p> 10 Bottom Half: for historical reasons, functions with 11 '_bh' in them often now refer to any software interrupt, e.g. 12 <code class="function">spin_lock_bh()</code> blocks any software interrupt 13 on the current CPU. Bottom halves are deprecated, and will 14 eventually be replaced by tasklets. Only one bottom half will be 15 running at any time. 16 </p></dd><dt><a name="gloss-hwinterrupt"></a><span class="glossterm">Hardware Interrupt / Hardware IRQ</span></dt><dd class="glossdef"><p> 17 Hardware interrupt request. <code class="function">in_irq()</code> returns 18 <span class="returnvalue">true</span> in a hardware interrupt handler. 19 </p></dd><dt><a name="gloss-interruptcontext"></a><span class="glossterm">Interrupt Context</span></dt><dd class="glossdef"><p> 20 Not user context: processing a hardware irq or software irq. 21 Indicated by the <code class="function">in_interrupt()</code> macro 22 returning <span class="returnvalue">true</span>. 23 </p></dd><dt><a name="gloss-smp"></a><span class="glossterm"><acronym class="acronym">SMP</acronym></span></dt><dd class="glossdef"><p> 24 Symmetric Multi-Processor: kernels compiled for multiple-CPU 25 machines. (CONFIG_SMP=y). 26 </p></dd><dt><a name="gloss-softirq"></a><span class="glossterm">Software Interrupt / softirq</span></dt><dd class="glossdef"><p> 27 Software interrupt handler. <code class="function">in_irq()</code> returns 28 <span class="returnvalue">false</span>; <code class="function">in_softirq()</code> 29 returns <span class="returnvalue">true</span>. Tasklets and softirqs 30 both fall into the category of 'software interrupts'. 31 </p><p> 32 Strictly speaking a softirq is one of up to 32 enumerated software 33 interrupts which can run on multiple CPUs at once. 34 Sometimes used to refer to tasklets as 35 well (ie. all software interrupts). 36 </p></dd><dt><a name="gloss-tasklet"></a><span class="glossterm">tasklet</span></dt><dd class="glossdef"><p> 37 A dynamically-registrable software interrupt, 38 which is guaranteed to only run on one CPU at a time. 39 </p></dd><dt><a name="gloss-timers"></a><span class="glossterm">timer</span></dt><dd class="glossdef"><p> 40 A dynamically-registrable software interrupt, which is run at 41 (or close to) a given time. When running, it is just like a 42 tasklet (in fact, they are called from the TIMER_SOFTIRQ). 43 </p></dd><dt><a name="gloss-up"></a><span class="glossterm"><acronym class="acronym">UP</acronym></span></dt><dd class="glossdef"><p> 44 Uni-Processor: Non-SMP. (CONFIG_SMP=n). 45 </p></dd><dt><a name="gloss-usercontext"></a><span class="glossterm">User Context</span></dt><dd class="glossdef"><p> 46 The kernel executing on behalf of a particular process (ie. a 47 system call or trap) or kernel thread. You can tell which 48 process with the <span class="symbol">current</span> macro.) Not to 49 be confused with userspace. Can be interrupted by software or 50 hardware interrupts. 51 </p></dd><dt><a name="gloss-userspace"></a><span class="glossterm">Userspace</span></dt><dd class="glossdef"><p> 52 A process executing its own code outside the kernel. 53 </p></dd></dl></div><div class="navfooter"><hr><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="thanks.html">Prev</a> </td><td width="20%" align="center"> </td><td width="40%" align="right"> </td></tr><tr><td width="40%" align="left" valign="top">Chapter 14. Thanks </td><td width="20%" align="center"><a accesskey="h" href="index.html">Home</a></td><td width="40%" align="right" valign="top"> </td></tr></table></div></body></html> 54