<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"> <HTML ><HEAD ><TITLE >Unreliable Guide To Locking</TITLE ><META NAME="GENERATOR" CONTENT="Modular DocBook HTML Stylesheet Version 1.7"><LINK REL="NEXT" TITLE="Introduction" HREF="c21.html"></HEAD ><BODY CLASS="BOOK" BGCOLOR="#FFFFFF" TEXT="#000000" LINK="#0000FF" VLINK="#840084" ALINK="#0000FF" ><DIV CLASS="BOOK" ><A NAME="LKLOCKINGGUIDE" ></A ><DIV CLASS="TITLEPAGE" ><H1 CLASS="TITLE" ><A NAME="AEN2" ></A >Unreliable Guide To Locking</H1 ><H3 CLASS="AUTHOR" ><A NAME="AEN5" ></A >Paul Rusty Russell</H3 ><DIV CLASS="AFFILIATION" ><DIV CLASS="ADDRESS" ><P CLASS="ADDRESS" > <TT CLASS="EMAIL" ><<A HREF="mailto:rusty@rustcorp.com.au" >rusty@rustcorp.com.au</A >></TT ><br> </P ></DIV ></DIV ><P CLASS="COPYRIGHT" ><A HREF="ln15.html" >Copyright</A > © 2000 Paul Russell</P ><HR></DIV ><DIV CLASS="TOC" ><DL ><DT ><B >Table of Contents</B ></DT ><DT ><A HREF="c21.html" >Introduction</A ></DT ><DD ><DL ><DT ><A HREF="c21.html#RACES" >The Problem With Concurrency</A ></DT ></DL ></DD ><DT ><A HREF="c88.html" >Two Main Types of Kernel Locks: Spinlocks and Semaphores</A ></DT ><DD ><DL ><DT ><A HREF="c88.html#UNIPROCESSOR" >Locks and Uniprocessor Kernels</A ></DT ><DT ><A HREF="x105.html" >Read/Write Lock Variants</A ></DT ><DT ><A HREF="x111.html" >Locking Only In User Context</A ></DT ><DT ><A HREF="x126.html" >Locking Between User Context and BHs</A ></DT ><DT ><A HREF="x138.html" >Locking Between User Context and Tasklets/Soft IRQs</A ></DT ><DT ><A HREF="x144.html" >Locking Between Bottom Halves</A ></DT ><DD ><DL ><DT ><A HREF="x144.html#LOCK-BH-SAME" >The Same BH</A ></DT ><DT ><A HREF="x144.html#LOCK-BH-DIFFERENT" >Different BHs</A ></DT ></DL ></DD ><DT ><A HREF="x153.html" >Locking Between Tasklets</A ></DT ><DD ><DL ><DT ><A HREF="x153.html#LOCK-TASKLETS-SAME" >The Same Tasklet</A ></DT ><DT ><A HREF="x153.html#LOCK-TASKLETS-DIFFERENT" >Different Tasklets</A ></DT ></DL ></DD ><DT ><A HREF="x165.html" >Locking Between Softirqs</A ></DT ><DD ><DL ><DT ><A HREF="x165.html#LOCK-SOFTIRQS-SAME" >The Same Softirq</A ></DT ><DT ><A HREF="x165.html#LOCK-SOFTIRQS-DIFFERENT" >Different Softirqs</A ></DT ></DL ></DD ></DL ></DD ><DT ><A HREF="c181.html" >Hard IRQ Context</A ></DT ><DD ><DL ><DT ><A HREF="c181.html#HARDIRQ-SOFTIRQ" >Locking Between Hard IRQ and Softirqs/Tasklets/BHs</A ></DT ></DL ></DD ><DT ><A HREF="c196.html" >Common Techniques</A ></DT ><DD ><DL ><DT ><A HREF="c196.html#TECHNIQUES-NO-WRITERS" >No Writers in Interrupt Context</A ></DT ><DT ><A HREF="x214.html" >Deadlock: Simple and Advanced</A ></DT ><DD ><DL ><DT ><A HREF="x214.html#TECHS-DEADLOCK-PREVENT" >Preventing Deadlock</A ></DT ><DT ><A HREF="x214.html#TECHS-DEADLOCK-OVERPREVENT" >Overzealous Prevention Of Deadlocks</A ></DT ></DL ></DD ><DT ><A HREF="x250.html" >Per-CPU Data</A ></DT ><DT ><A HREF="x256.html" >Big Reader Locks</A ></DT ><DT ><A HREF="x261.html" >Avoiding Locks: Read And Write Ordering</A ></DT ><DT ><A HREF="x286.html" >Avoiding Locks: Atomic Operations</A ></DT ><DT ><A HREF="x298.html" >Protecting A Collection of Objects: Reference Counts</A ></DT ><DD ><DL ><DT ><A HREF="x298.html#HELPFUL-MACROS" >Macros To Help You</A ></DT ></DL ></DD ><DT ><A HREF="x315.html" >Things Which Sleep</A ></DT ><DT ><A HREF="x348.html" >The Fucked Up Sparc</A ></DT ><DT ><A HREF="x356.html" >Racing Timers: A Kernel Pastime</A ></DT ></DL ></DD ><DT ><A HREF="c374.html" >Further reading</A ></DT ><DT ><A HREF="c383.html" >Thanks</A ></DT ><DT ><A HREF="g388.html" >Glossary</A ></DT ></DL ></DIV ></DIV ><DIV CLASS="NAVFOOTER" ><HR ALIGN="LEFT" WIDTH="100%"><TABLE SUMMARY="Footer navigation table" WIDTH="100%" BORDER="0" CELLPADDING="0" CELLSPACING="0" ><TR ><TD WIDTH="33%" ALIGN="left" VALIGN="top" > </TD ><TD WIDTH="34%" ALIGN="center" VALIGN="top" > </TD ><TD WIDTH="33%" ALIGN="right" VALIGN="top" ><A HREF="c21.html" ACCESSKEY="N" >Next >>></A ></TD ></TR ><TR ><TD WIDTH="33%" ALIGN="left" VALIGN="top" > </TD ><TD WIDTH="34%" ALIGN="center" VALIGN="top" > </TD ><TD WIDTH="33%" ALIGN="right" VALIGN="top" >Introduction</TD ></TR ></TABLE ></DIV ></BODY ></HTML >