linux/Documentation/CodingStyle
<<
>>
Prefs
   1
   2                Linux kernel coding style
   3
   4This is a short document describing the preferred coding style for the
   5linux kernel.  Coding style is very personal, and I won't _force_ my
   6views on anybody, but this is what goes for anything that I have to be
   7able to maintain, and I'd prefer it for most other things too.  Please
   8at least consider the points made here.
   9
  10First off, I'd suggest printing out a copy of the GNU coding standards,
  11and NOT read it.  Burn them, it's a great symbolic gesture.
  12
  13Anyway, here goes:
  14
  15
  16                Chapter 1: Indentation
  17
  18Tabs are 8 characters, and thus indentations are also 8 characters.
  19There are heretic movements that try to make indentations 4 (or even 2!)
  20characters deep, and that is akin to trying to define the value of PI to
  21be 3.
  22
  23Rationale: The whole idea behind indentation is to clearly define where
  24a block of control starts and ends.  Especially when you've been looking
  25at your screen for 20 straight hours, you'll find it a lot easier to see
  26how the indentation works if you have large indentations.
  27
  28Now, some people will claim that having 8-character indentations makes
  29the code move too far to the right, and makes it hard to read on a
  3080-character terminal screen.  The answer to that is that if you need
  31more than 3 levels of indentation, you're screwed anyway, and should fix
  32your program.
  33
  34In short, 8-char indents make things easier to read, and have the added
  35benefit of warning you when you're nesting your functions too deep.
  36Heed that warning.
  37
  38The preferred way to ease multiple indentation levels in a switch statement is
  39to align the "switch" and its subordinate "case" labels in the same column
  40instead of "double-indenting" the "case" labels.  E.g.:
  41
  42        switch (suffix) {
  43        case 'G':
  44        case 'g':
  45                mem <<= 30;
  46                break;
  47        case 'M':
  48        case 'm':
  49                mem <<= 20;
  50                break;
  51        case 'K':
  52        case 'k':
  53                mem <<= 10;
  54                /* fall through */
  55        default:
  56                break;
  57        }
  58
  59
  60Don't put multiple statements on a single line unless you have
  61something to hide:
  62
  63        if (condition) do_this;
  64          do_something_everytime;
  65
  66Don't put multiple assignments on a single line either.  Kernel coding style
  67is super simple.  Avoid tricky expressions.
  68
  69Outside of comments, documentation and except in Kconfig, spaces are never
  70used for indentation, and the above example is deliberately broken.
  71
  72Get a decent editor and don't leave whitespace at the end of lines.
  73
  74
  75                Chapter 2: Breaking long lines and strings
  76
  77Coding style is all about readability and maintainability using commonly
  78available tools.
  79
  80The limit on the length of lines is 80 columns and this is a strongly
  81preferred limit.
  82
  83Statements longer than 80 columns will be broken into sensible chunks, unless
  84exceeding 80 columns significantly increases readability and does not hide
  85information. Descendants are always substantially shorter than the parent and
  86are placed substantially to the right. The same applies to function headers
  87with a long argument list. However, never break user-visible strings such as
  88printk messages, because that breaks the ability to grep for them.
  89
  90
  91                Chapter 3: Placing Braces and Spaces
  92
  93The other issue that always comes up in C styling is the placement of
  94braces.  Unlike the indent size, there are few technical reasons to
  95choose one placement strategy over the other, but the preferred way, as
  96shown to us by the prophets Kernighan and Ritchie, is to put the opening
  97brace last on the line, and put the closing brace first, thusly:
  98
  99        if (x is true) {
 100                we do y
 101        }
 102
 103This applies to all non-function statement blocks (if, switch, for,
 104while, do).  E.g.:
 105
 106        switch (action) {
 107        case KOBJ_ADD:
 108                return "add";
 109        case KOBJ_REMOVE:
 110                return "remove";
 111        case KOBJ_CHANGE:
 112                return "change";
 113        default:
 114                return NULL;
 115        }
 116
 117However, there is one special case, namely functions: they have the
 118opening brace at the beginning of the next line, thus:
 119
 120        int function(int x)
 121        {
 122                body of function
 123        }
 124
 125Heretic people all over the world have claimed that this inconsistency
 126is ...  well ...  inconsistent, but all right-thinking people know that
 127(a) K&R are _right_ and (b) K&R are right.  Besides, functions are
 128special anyway (you can't nest them in C).
 129
 130Note that the closing brace is empty on a line of its own, _except_ in
 131the cases where it is followed by a continuation of the same statement,
 132ie a "while" in a do-statement or an "else" in an if-statement, like
 133this:
 134
 135        do {
 136                body of do-loop
 137        } while (condition);
 138
 139and
 140
 141        if (x == y) {
 142                ..
 143        } else if (x > y) {
 144                ...
  16                b...
  14        }
  14
  19 ationale: T&R 
  15
  11 Also,not ethat this irace -lacement slso 8minimize the pnumbr tf dmpty   12 or ealost ompty )lines , ith ut a ny osi of ieadability   Theu, ansthe
  13 suppl of dnew-ines ionyour screen fi not haieanewble tresur e i(hinki  14 25-inesterminal screen.sheret),you have lore tmpty oines io put   15 omments,ion
  15
  17 Donot hunnecssagril usieirace  where i single ltatement oill bdo
  18
  19
f (condition)   16        iction)(;
  16
  12
nd
  16
  14 f (condition)   16        do this;(;
  16Dx &g  167/a>        do thiat(;
  18
  169/a>This aoes not happl of (nly
one sracnc of l contition)alstatement is
i single   10utatement ;in the slater 3ase Ksieirace  wn tbothsracnc s:
  11
  12Gf (condition) d
  173/a>        do this;(;
  174/a>        do thiat(;
  15  (x >
  17         ther,wise(;
  17C
  17
  17                m3.1: Spaces
  18
  11pLnux kernel ctyle ior tsieif lpaces adepnds. (ost l )ln
  12
unctions-versus-keywordtsiag.  AUs i siace atfer 3(ost ) keywords  The   13Sot ble txcept_ons are
size,of,type=of,tlign of,tlnd __ateribute__,whilc oooki  14eomethat gike tunctions a(lnd re
susully tsed fith aarent  s:  wn tLnux 
  15ialh utghthey hre neo reaquied wn the slanguag. anstin:"swze,of nforquot; anfer   16aquot;swtruct ile_nfor nfor;quot; in adelased .
  18
  18pSotsiei siace atfer 3  s:  keywords
  18        if  switch, fase, nor,
do ,while   10
ut aeo rith aize,of,type=of,tlign of,tr t__ateribute__  E.g.:
  11         s =aize,of(wtruct ile_;
  12
  13TDonot haddspaces areoud (bisider)aarent  s:ze,dexpressions.
 Thes emample is   14b*bad*
  19
  196/a>         s =aize,of( wtruct ile_ ;
  19
  18
Wen ydelaseng peintsr 3dataor anfunction hhat teturn 
i seintsr 3ype=,the
  19 referred wsieif l#39;t*#39;tis
i djaent eo the rdataoame=or aunction hame=olnd ot  120  djaent eo the rype=name=  E.ample s
 120
 120        caar i*lnux _banner
 1203/a>        dunignid liog long lmemarese(aar i*pt,
daar i**etupt,;
 1204/a>        caar i*mach,_wtrdup(ubstaeng _t *s;
 125
 126 Ue one piace ateoud (bn heah stde of )most obinar and dsr nar aoprateor,
 127 uch as
a ny f the s:
 120
 129        c=  +  - <& > y *  / l#397 y | l#mp;R  ^ <&= > = &== &!= &?  
 121
 121 ut aeosiace atfer 3unar aoprateor,
 122         #mp;R  *  +  - &~ &! aize,of type=of tlign of t__ateribute__ define 
 121
 124 eosiace abefre tha poistfixincreaent i#mp;R deleaent iunar aoprateor,
 125        }++  -- 126
 127Heosiace atfer 3he prefeixincreaent i#mp;R deleaent iunar aoprateor,
 1218/a>        }++  -- 129
 120 lnd otpiace ateoud (he &q39;t.#39;tilnd quot; -gt;&guot; iwtructue tmembr tfprateor,
 122
 122 Donot heave wraiglng phitespace at the end sof lines.
  Sme pditor srith  123 quot;swmartquot; in entation woll bisiertphitespace at the eeginning of tnewlines an
 124a prophriate som ou can&startstypeig the pext line,of comd right. away
 125Hewever, tome puch aditor srdoneo reaove toh whitespace af you nnd oup ot  126iputtig taline,of comd rhere ,such as
af you neave w bloankline,  Avshaieaults
 127(ou nnd oup ith aines aontiaiing oraiglng phitespace 
 122
 129
Gi oill barniyou nbout rpach,e that iftrolduc wraiglng phitespace ,tlnd an& 120Nption>lly sheripthe ryaiglng phitespace aor tou ; hwever, tf yappl ig talieris
 121tf cpach,e ,this imaymake tlaer 3pach,e tn the saeris
 figlby ahangeig the i  122iontent line,,
 123
 124
 123                Chapter 24: Namig
 123
 127 Cis
i sSprtsn&slanguag. and stoshould four snamig
eeg  Unlike tMldula-2 128
nd sPasal rrogram.mrs, aCrrogram.mrs,rdoneo rsieicutename=slike
 1239/a>This VariableIsATemporar Coudtr.  KAaCrrogram.mrs wuld fcll thrt
 120
variable quot; tmpquot; ,whilc os imch adsier to rwrit. and seo rhe lenst oore  121 difficltsto usners
anda
 124
 123 HOWEVER,while  mixed-ase Kame=slre ferowid lupn, aescribtiov Kame=slor  124 globl rvariable are alimct. H Tofcll ta globl runction hquot; fooquot; in a
  24
  24 GLOBALrvariable a(o be
tsed fnly
of you n_relly _need
them )need
th
  24
ave lescribtiov Kame=s anstdonglobl runction .
  I you have lafunction
  24thea conuts tha pnumbr tf dctiov
tseds, you&should fcll thrt
  25
quot;chnuts_ctiov
_seds,()quot; io simpilar you&should f_eo _fcll ti oquot;chntusr()quot; 
  25
  22 EncdingSthe rype=nf l cunction hnto sha pnme=o(so-cll d
tHungaria
  25Sot bion) ds iracn tdamag.d -the clomple rknow sthe rype=sanyway (lnd an&  24 h,ecktheos. and st on y
oonfiuse the program.mrs
  Nowon&er tMicroSof
  25 akes ibuggyprogram.,
  25
  27 LOCALrvariableKame=slhould fe
thort, 8nd dsothe points
  I you have   28
ome prnd o in teer toop
conutsr, tftlhould frogbablyfe
tcll d
tquot; iquot; 
  29
Cll ngSti oquot;coop
_onutsr,quot; in aon-fpolduciov
 tf yhere is onoahangc of its  26 bengStmis-sners
aood
  Smpilarly, quot; tmpquot; can&se
tjct.nbout r ny ype=nf   26
variableKhat is tsed fo hiod fa temporar value 
  22
  26
I you hre alfacn fo hmixoup our slocl rvariableKame=s aou have lanther,  24 rogblm, ihilc os icll d
the punctions-growth-ortmone-imbl ngc osyndrme 
  26 Se chupter 26 (Fnction ..
  26
  26
  26                rhapter 25: Tpe=dfs
	a href="Documentation/CodingStyle#L281" id="L429" class="line" name="L629">  26
  20ulease
don't lse thaigs sike tquot; vps_tquot; 
  21
  22GI's a g_mistkes_to us  rype=dfsaor twtructue  and Seintsr .
 Wen you&see
a
  23
  274/a>        dvps_t a
  27
  27 n the saur e ,what goes ni omean?  27
  27
Incontroat, tiftftlhay
	a href="Documentation/CodingStyle#L289" id="L729" class="line" name="L729">  29
  28        iwtruct virtual_ontiaiir 2*a
  28
  28yourcan&sctiully ttll .hat gquot;adquot; in 
  28
  24eLotsof leople khinkithat thpe=dfs
gquot;ahelpieadability quot; 
 Notlho The yare
  25is  fulon y
oor 
  28
  28
 a) Ktt bly topaqe ofbjectso(here ihe rype=dfsan a
ciov
y tsed fo u_ide
_  28      wat the cfbjectan .
  29
  29      .ample :"ster_tquot;  etc.topaqe ofbjectsohat tourcan&sn y
oaccssausing   21      he prophr 2accssar aunction  
  22
  293/a>      NOTE! Opaqe nssaulnd quot; accssar aunction  quot; ane neo rgoodtn the mselv,,
  294/a>      he oeasonswe dave the
mfor theigs sike tter_t etc.ts that itere
  29      relly an a
bsoluely b_zero_Seirtablyfaccssable snformation.itere

  29
  29
 ab) Ceasrin teer type=s, here ihe rastaection)u_ielps_ aoid tonfiuson
  29      waeher is is tquot; intquot; io squot;coog" 
  29
 130      u8/u16/u32ane nhr fecty
oone,ohpe=dfs
,tlih utghthey hit onto  131      ctegyory (d) beter than tere

 132
 1303/a>      NOTE! Agcn t-yhere ieed
 io pb laf_easons_for thei.
 If omething ts
 1304/a>      quot; unignid liog quot; ,wten yhere #39;s anooeasonswo pd  135
 136        sype=dfsaunignid liog lmyflags_t
 130
 138      ut af yhere is oaclaasrieasonswor twhyis isners ceriaii cirume
andes
 139      mght. b lan quot; unignid lintquot; ilnd sners ther ionfig,urtion/s mght. b  130      quot; unignid liog quot; ,wten yy a l .meansrgo aeadeilnd siei sype=dfs
 131
 132  (c) wae you&ssieisaresewo pityerlly areast laf_new_ ype=nor  133      ype=-h,eckngS
 131
 135  (d) Nw tepe=sahilc one nientacal ro seandaard C99type=s, ii ceriaii 131      xcept_onsl cairume
andes

 131
 1318/a>      Aih utghti oiuld fn y
otkestaliort, amnuts f thimefor them ey  and  131      racn to pb omesfaccustome dsothe peandaard epe=saike tq39;suint32_'s
 130      ome people kfbjectasothe i tsieinyway 
 132
 132      Tere fre ,wtentLnux -peciafictq39;su8/u16/u32/u64#39;tiype=sanydthe i  133      ignid laquivalets thilc one nientacal ro seandaard ype=sane
 1324/a>      prminterd -- alh utghthey hre neo rmndaatory n tnewlomd ro you   132      own
 132
 1327/a>      Wen yditong texisong tomd rhilc onleada tsed one so the other, ses 1328/a>      f thpe=s, ou&should fcoformadsothe pexisong tohoice tn thea cond

 139
 130N (e) Tpe=s saf ior tsiein tseds,ace 
 133
 133      Ii ceriaiitwtructue  ahilc one nisible so us  rpace ,tw
tclnot  133      eaquied C99type=s(lnd an&eo rsieihe &q39;tu32#39;tiormadbove .Theu, aw
 1332/u64#39;tsiei__824">nd smpilartype=s(n anlltwtructue  ahilc one nshsed  133      ith aseds,ace 
 133
 137 Maybethere are fther ioses wtoo but the prulelhould feascal lyfe
to uNEVER 138
EVER siei sype=dfsunless
tourcan&slaasrlymakch (oe,of cheos.prule

 133
 130
Ii generll,i seintsr ,or anfwtruct hea chas elaent  that ian&seasonsably 131 e
tdiedcty
oaccssad suould f_ever,_pb lafype=dfs
 134
 134
 134                .hapter 26: Fnction .  34
Fnction .lhould fe
thort,">nd swee, 8nd ddotjct.noe,ohing   The ylhould   34 ft on tne so thwoscreen.fulsof lent l(he pISO/ANSIscreen fize,is 80 x24
  34
as w all onow ) 8nd ddotoe,ohing 8nd ddothat iell 
  34
  35
he omaximum letgthnf l cunction hns(n versly brophrt,onsl csothe   35
lomplexiy and dn entation wlverlof chea function(
  Sm,of you nave la  35iontept_ully tsmple kunction hhat tns(jct.noe,oiog l(ut tsmple    35Sosesstatement, lhere iou nave lo pd oiotsof lsmll thrigs sfr anfiotnf   34 diffeent aoses  tft#39;s aOKfo hive lafiog e aunction 
  35
  35
Hwever, tf you have laflomplexaunction  8nd dou&shupecit hea ca  37 ess
-han -giferd irst,-yasrihigh-shoosltwtuent smght. eo rveri  38
sners
anda wat the cunction hns(ll taout , ou&should fadere ihothe   39
maximum lmpits(ll the core tlosily   AUs iielpe aunction srith   36 escribtiov Kame=sl(ourcan&scskthe clomple rktr nf-inesteem in you hhinki  36
ft#39;s ahr frmattep-ribacal  and st oill brogbablyfd oa beter tjobof its  32
han tou hiuld fave leoe,.
  36
  34 Anther,.measue tf the sunction hns(ha pnumbr tf dlocl rvariables  The y  36n/Codhould 't lxceprd 5-10,or aou #39;tr leong 8omething twrog   TRe-hinkitha   36
unction  8nd dsplt on onto lsmll r 3piecss  KAahumn&seacn tan&  36
generlllyfdsielyfkeepryaicknf l out r7 diffeent ahrigs  8ndyhing tore   36
nd sn ogetsoonfiused
  Yu hnow tou #39;tr lbrll iat, but amaybetou #39;tdlike
  36
o usners
anda wat tou hdid 2ieleksferom eow
  37
  31
Insaur e  ile_  8separst lunction srith one sroankline,  AI the sunction hns  32Gexhrt,ed,wtentEXPORT*amacrosfr aftlhould followe immediatey
oafer 3he plosing   33
unction hrace iine,  A.g.:
  37
  37
nt xsyseme_is_up(oid    37 
  377/a>        deturn Nsyseme_tatem&== SYSTEM_RUNNING
  37

  39
EXPORT_SYMBOL(syseme_is_up;
  38
  38
Insunction hrogtoype=s, iicluenaareme=er 3ame=slith ohe i tdataoype=s
  38yAlh utghthens(nsneo reaquied wby3he pCslanguag. as is treferred wn tLnux   38
becasiein is
i sinple kay (o uaddsalueale snformation.ior them eadaer
  38
  38
  38                bhapter 27: Cetroalze,dexptong tf function
s  38
  38 Alben iderefcteg wby3ome people ,wtentaquivaletstf the sgoo seanement is
  39
sed ffeaquntalyfeyclomple rs(n aormadf the sunontition)alsjumpbisitructon 
  39
  31 Te sgoo seanement iomess(n aan dy wae y cunction hxptosferom multipe   32
loclion srnd stom clommnsweorksuch as
alaasnupchas o pb leoe,
  39
  394/a> he oeaion)al,is 
  39
  39
-sunontition)alseanement  are adsier to rsners
anda nda ollowe  39
- nesong ts
ied ucd   39 - rrer sreyceo rspdatng tstitvidualsxptoseintss wae ymakng   39     mdinficlion srnr prefvntad  140 - save the plomple rkeorkso rptiomizeied undan cond
 away ;  140
 142
nt xunc(nt xa  1403/a> 
 1404/a>        cnt xeaults = 0
 140         aar i*buffee = kmll oc(SIZE;
 140
 1407/a>        df (cbuffee == NULL  140                return N-ENOMEM
 140
 1410/a>        df (contition)1 d
 1411/a>                rhile  (oop
1 d
 142                         ..
 1413/a>                 
 141                .eaults = 1
 141                Cgoo sout
 141         
 1417/a>        d..
 1418/a> out
 141        ckfeaecbuffee;
 1420/a>        deturn Neaults
 142

 142
 1423/a>                 hapter 28: Commntacg  142
 142 Commntasrnr pgood but the e is oals oa dangr tf dover-commntacg 
  NEVER 142
tr (o uexplcn tHOW our somd rhorks(n an commnta:tft#39;s amch abeter th  1427/a> writ.the plod sauthat iter _horkngS_is oobvious and st #39;s a gwast=nf  1428/a> himefo uexplcn tbadlyrwrittencond

 149
 140NGenerllly, ou&swan cour sommmntasrhothll .WHAT our somd roes ,ceo rHOW
 143
Als , tr (o uaoid tputtig tommmntasrisidery cunction hbody:af yher 143
unctionsis oautlomplexahat tourceed
th
8separst y
oonmmntaaaretsof lis
 143 ou&should frogbablyfgotbackso rhupter 26 fr anfhile 
  Yu han&sakes 1432/u64smll tommmntasrhoteo  so tarniy out romething tareticltsrlymclverr (r  143 ugly) but thr (o uaoid txceps.
  Inst=ad bpt the pommmntasrt iter eade 143
f the sunction ,thll ng taople kwat titroes ,cnd Seisabley.WHYtitroes  147 it
 143
 143
Wen ycommntacg the sernel cAPIfunction
s bpease
dsieihe &ernel -doc ormati
 140
Se che sule_  ocumentation/Cernel -doc-nano-HOWTO.tx,">nd sribtisCernel -doc 141 fr adetails
 144
 144
Lnux  syle# fr aommmntasri the pC89 quot; /*d..
 */guot; iwtle#
 144 Dn't lse tC99-syle# quot; //d..
quot; cammmntas
  44
Te preferred wsyle# fr aiog l(multi-ines)aommmntasri 
  44
  44         /*  44        c *Thes ei the proferred wsyle# fr amulti-ines  450/a>        c *TommmntasriswtentLnux sernel caur e  ond

  451/a>        c *TPease
dsieii considst=taly
  45          *  453/a>        c *TDscribtioon: KAacolumnnf l st=risk onerhe lenftstde 
  454/a>        c *Tith oeginning o>nd endng o>lost -roankline,s
  45          */  45
  47 Fr aule_  n tnet/8nd ddrivers/net/8he proferred wsyle# fr aiog l(multi-ines)  48
ommmntasri talinttle diffeent 
  45
  460/a>         /* Te preferred wonmmntaasyle# fr aule_  n tnet/8nd ddrivers/net  461/a>        c *Tlooksaike thei.
  46          *  463/a>        c *TI is
inasrlymhe peaesfa the pgenerlllyfreferred wonmmntaasyle#
  464/a>        c *Tut the e is onr nfitialo>lost -roankline,
  46          */  46
  46
I's a ls oimeirtantasotonmmntaadata, waeher ihey hre neascatype=s(r aderivee  46
ype=s
H Tofhens(end,dsieijct.noe,odataodelaseaion)ahr line,o(notonmmaslor   46
multipe odataodelaseaion)s)  Thens(eave 
tourcroom fr anfsmll tommmntaonereac   47
itm, iexplcn ng tst tsed
  41
  47
  473/a>                 hapter 29: Yu #39;sv omaery cmss
tf its  47
  47
That#39;s aOK, w all odo
  Yu #39;sv orogbablyfe
n yhod fby our slong-himefUni   47 sedsiielpe atat gquot;aGNU emac quot; anutoatioal lyformati the pCcaur e slor   47(ou  8nd dou'sv onoioad
thet tos  tftgoes ndothat  but the pdefaultsits  47
sed ore ness
than tdesirale s(n aoact,ihey hre nwoesewoan trnd o   49
ypeig t-lan infnfit pnumbr tf dmonkeystypeig tnto lGNU emac hiuld fever,  48
mkestalgoodtrogram..
  48
  48ySm,oourcan&seiher iget ridtf dGNU emac ,or ahangeeii co us  rsanr,  48
alue s
H Tofdothe platsr ,oou can&staickthe colloweig tnt our s.emac hule_
  48
  48
(defun c-inesup-arglit -tabs-n y
o(ignoed )  48   quot; Lne,ouphregmenta lit sreyctabs,ceo r,ace  quot;   48
  (let* ((anchr a(c-ingeelem-pos c-sytatcaic-elaent ))  48          (columnn(c-ingeelem-2nd-pos c-sytatcaic-elaent ))  48        c (offset (- (1+acolumn) anchr ))  490/a>        c (steps (floo tf fset c-easca-f fset)))  41     (* (ma  syeps 1)  49        c-easca-f fset)))  49
  494/a> (add-hook&q39;tc-mode-lommns-hook  49           (lambda ()  49             ;; Addsernel cayle#  497/a>             (c-add-ayle#  49              quot;conux -tabs-n y
quot;   499/a>              q39;t(quot;conux quot; a(a-f fsets-alit  1500/a>                         (arglit -onti-noe,mpty 1501/a>                rrrrrrrrrrc-inesup-gcc-asm-re  150                          c-inesup-arglit -tabs-n y
)))))) 150
 1504/a> (add-hook&q39;tc-mode-hook 150           (lambda () 150             (let ((ule_ame=(cbuffee-ule_-ame=))) 1507/a>               ;; Enale sernel cmodeior them aprophrist lule_  150               (wae y(nda ole_ame= 1509/a>                          (strngS-akch ((expnda-ule_-ame= quot;c~/src/onux -tre  quot; ) 1510/a>                                        ole_ame=)) 1511/a>                r(setqdn enta-tabs-modeit) 152                 (a-set-syle# quot; onux -tabs-n y
quot; ))))) 151
 1514/a> heisoill bmkestemac hgotbeter tith ohe sernel ccdingSasyle# fr aC 151 ule_  beowe ~/src/onux -tre  
 151
 1517/a> Bu rveriin you hfailtnt gettig temac ho pd osanrformatitig ,ceo  1518/a> ver,yhing ts
 lost:us  rquot; inentaquot; 
 151
 1520/a> Now, agcn ,dGNU inentachas oe peaesfeacn -dadeisettig  that iGNU emac  152
has ihilc os iwhyiourceed
th
8gov Kity cuewlommmndaline,ootioon 
 152
Hwever, tthat#39;s aeo rtootbad buecasieiveriihe cokesrstf dGNU inenta 1523/a> recognizeihem authoriy af dK&Rl(he pGNU aople kare't lxvil,ihey hre  152
jct.nsver, y
omisguidedtn thes imatsr ),oautourcjct.ngov Kinentacher 152 otioon rquot; -kr -i8quot; a(
anda sfr aquot; K&R, 8 aar acer tinenta quot; ),or asie 152
quot; sribtisCLinentaquot;  ihilc osnenta riswtentlst stiwtle#
 152
 1528/a> quot; inentaquot; chas nfiotnf ootioon  8nd depecial lyfwae yi iomess(sotonmmnta 159
re-ormatitig tourcmayswan chothkestallookrt iter mn&spag 
  Bu  150Nremembr :rquot; inentaquot; (nsneo r cuixsfr abadtrogram.migS
 153
 153
 1533/a>                 hapter 210: Konfig,ionfig,urtion/lule_  153
 153 Fr all of the sKonfig,*ionfig,urtion/lule_ therutghot the paur e  tre 
 153
he pn entation ws oaumehat goiffeent 
 tLnu_ tsners arquot; onfig,quot; (defnfitin
 157 ne ni entaedtith one stab,rhile  helpient lns(n entaedtn&scdition)alstw  153
,ace  .  .ample : 153
 150
onfig,iAUDIT 1541/a>         bosltquot; Auitong tsupeirtquot;  154         depeda sn wNET 1543/a>         help 154           Enale sauitong tinfrawtructue that ian&sbetsed fith oanther,  54           loggig tf favccmss
ag ssoutput)  TDes neo rd osyseme-al l  547/a>           auitong tith ot tCONFIG_AUDITSYSCALL
  54
  54 Seriouslyfdangr ouscueatue  a(uch as
awrit.tsupeirt fr aoeriaii  550/a> ule_ ysemes)should fader,tis thei.trogmig=talyriswtenirtrogmptiwtrngS:  55
  55iontig,iADFS_FS_RW  553/a>        cbosltquot; ADFSawrit.tsupeirt (DANGEROUS)quot;   554/a>        cdepeda sn wADFS_FS  55         ..
  55
  57 Fr auul odoumentation/onerhe lonfig,urtion/lule_  8se che sule_  58
ocumentation/Cebuild/konfig,-languag..tx,
  55
  56
  561/a>                rhapter 211: Dataowtructue    56
  563/a> Dataowtructue   hea chav nisibliliy afutideryhe pangSle-hieadaee  564/a> environmntacher hre nreast a nda dewtroyedtn thould falwayschav   56 eferrene  onutas
  Ii he sernel , garbag.acolletionsioes 't lxcisty(nda  56
futideryhe pernel cgarbag.acolletionsis oaowe nd dn efficint ) ihilc   56
meansrhat tourcabsolut y
o_hav _choteferrene  onutaall oour ssed 
  56
  56
Rferrene  onutang tmeansrhat tourcan&scoid tlockngS 8nd dll ows multipe   57
seds,fo hive laccssadsothe pdataowtructue tn tparsllelt-landneo riveig   51
sotworryy out rhe peaructue tsuddenlyfgong taway erom sners eem ijct.  57
uecasieiher hsleptir adidromething telse fr anfhile 
  57
  57
Not that ilockngSis o_eo _anfreplacaent  fr arferrene  onutang 
  57
LockngSis osed fsotkeeprdataowtructue   coheent ,rhile  rferrene   57 onutang ti talmemory manag.mntachechnique  AUsully tbot one need
ed,wnda  57(hey hre neo ro pb lonfiusedfith oeac fther 
  57
  59
Manyrdataowtructue   can inded
tave lowowlverlstf drferrene  onutang 
  58
wae yhere are fseds,ff ddiffeent aquot; oass=  quot;   The cauboass= onutaaonutas  58
ha pnumbr tf dauboass= seds, 8nd ddecr.mnta the pglobal onutaajct.noee   58ywae yhercauboass= onutaagoss(sotzero
  58
  58
.ample sof leei.tkngdtf dquot; multi-iverl-rferrene -onutang quot; can&sbetfnut dn   58
memory manag.mntac(quot;cwtruct me_taructquot;c: me_seds,fnd dme_onuta) 8nd dn   58 ule_ ysemesomd r(quot;cwtruct super_blockquot;c: s_onutaalnd s_tcaiv,.
  58
  58 Remembr :rifoanther, hieadacan&sfid dou&rrdataowtructue  8nd dou&sdn't   58 ave lafeferrene  onutaansis , ou&s>lost aoeriaiiy tave lafbu 
  59
  59
  59                 hapter 212: Macro, 8Enum,fnd dRTL  59
  594/a> Nam sof lmacros(defnfig tomn
andt,fnd dlabrlstn tenum,fne nrapitalze,d
  59
  59 #defnfetCONSTANT 0x12345  59
  59 Enum,fne nreferred wwae ydefnfig tsver,al relst a omn
andt,
  59
 1600/a> CAPITALIZEDamacrosnam sone naprocialeg wbt amacros(e  emblig tunction
s 1601/a> maysb Kame=dtn t owr 2oses
 160
 160
Generllly, iiynfetunction srne nreferrale ssotmacros(e  emblig tunction
s
 160
 160 Macro,fith omultipe oeanement  ahould fe
teneosild(n an do -rhile  block: 160
 1607/a> #defnfetmacrounc(a, b, c)                       \ 160         do {                                    \ 1609/a>                 f (ca == 5)                     \ 1610/a>                         do_eei.(b, c);          \ 1611/a>         }rhile  (0) 161
 161
Trigs so uaoid twae yusng tmacro,: 161
 161 1)tmacros(hea caffcit ontirol f ow: 161
 1617/a> #defnfetFOO(x)                                  \ 161         do {                                    \ 1619/a>                 f (cblah(x) < 0)                \ 1620/a>                         eturn N-EBUGGERED;      \ 1621/a>         }rhile (0) 162
 1623/a> i tal_er,y_abadtidea
  ItTlooksaike t cunction hal lwbt axptosfhercquot; oal ng quot;  162
unction ;sdn't  breakthe ciner )alspareds,ff dthsilrhiooill beadache plod 
 162
 162
2)tmacros(hea cdepedaansiiveig tallocl rvariablefith oatmagicname=: 162
 1628/a> #defnfetFOO(val)abar(index,salu) 169
 160NmightTlookaike t cgoodthing  but tt #39;s aonfiusig tas helltwae yne seadascher 163
omd rnd st #39;s aprne sto breakag.aerom seemigSlyrisnocntachangees
 163
 1633/a> 3)tmacros(ith oaegmentas(hea caretsed fas l-alue s:tFOO(x) = y;oill  163
bit.tou&sf (ometbody e.g. urn stFOOtnto lan inynfetunction 
 163
 163
4) fr gettig t out rrociedene :lmacros(defnfig tomn
andt,fusig texrocsson
s 167 mct.neneosilwtentaxrocsson
tn tparntaheed 
 Bewaretf daimilar issu=slith  163
macros(usig tareme=er s
 163
 160
#defnfetCONSTANT 0x4000 1641/a> #defnfetCONSTEXP (CONSTANT | 3) 164
 164
Tr plpp manualsdeal,fith omacros(exhact.ively.The cgccciner )als manuals ls  164 coversdRTLihilc os ised ffeaquntalyfith oas emblyslanguag.riswtenternel 
  64
  647/a>                 hapter 213: Pritang ternel cmss
ag s  64
  64 Krnel cdverlopersdike th pb ls
n yas lit.rst . Do mid dhercapll ng   650/a> f dernel cmss
ag sssotmae t cgoodtimrocsson
. Do eo rss nreipplee  65
wordsdike tquot; dn&tquot;c;us  rquot; do eo quot; cr aquot; dn't quot; (nnst=ad
  Maklwtentmss
ag s  65iontcise, laasr 8nd duamebiguous
  65
  654/a> Krnel cmss
ag ssdo eo tave lo pb lt.rmidaaedtith oaahr iod
  65
  65
Pritang tnumbr stn tparntaheed  (#397;d)scdi onr alue alnd sould fe
taoid ,d
  65
  68
Tere are fapnumbr tf ddrivercmode cdiagnotaicomacros(n t<lnux /dveice.h&g;   65
hilc oou&should fsieihotmae tsue tmss
ag ssre fakch d fsottentrightTdveice  66
nd ddriver 8nd dle thaggedtith otentrightTiverl: cdev_err(),cdev_arni(),  661/a> dev_info() 8nd dso fr th
  Fr amss
ag sssea care't  ss=oialeg with oa  66
areticltsrTdveice,t<lnux /pritak.h&g; (defnfe apr_debug()cnd Ser_info()
  66
  664/a> Cgmiggouphith ogoodtdebuggng tmes
ag ssan&sbetquit.tachanllenge;cnd Soee   66 ou&save lohme,shey han&sbet hrug  helpifr arfmot throublehouoang 
  Suc   66
mes
ag sssould fe
tlompileeafut wae yhercDEBUG symbol(nsneo rdefnfedl(hea   66
is,reycdefault hey hre neo rineou ,d)  TWen you&ssieidev_dbg()corapr_debug(),  66
yhat#39;s anutoatioa
  Manycaubsysemeschav  Konfig,iotioon rsottrn Non -DDEBUG
  66
A relst a omnvntaon
tsed oVERBOSE_DEBUG o laddidev_vdbg()cmss
ag sssother  67
ofe aaleaday enale  fby DEBUG
  61
  67
  673/a>                 hapter 214: Alloclang tmemory  67
  67
Th pernel cprovd ,sthe colloweig tgenerll purpsilwmemory alloclaor,:  67 kmalloc() 8kzalloc() 8kmalloc_array() 8kcalloc() 8vmalloc() 8nda  67(vzalloc()
  Pease
deferrfsottentAPIfdoumentation/ofr auurher, infomatiin
  67
 out rhe m
  67
  68
Te preferred wfomaofr apss=ig talsizeif faowtructei the polloweig :  68
  68         p =8kmalloc(sizeof(*p) 8...)   68
  684/a>
Te paler )a.ivewfomaowere awtructeame=is oapll eeafut huetsoeadaaliliy anda  68
itirodue sln&sopeirtuniy afr anfbug wae yhercpoiner rvariablefype=is ohangeea  68 bt the pomredspondng osizeofssea ci.tras e fsotawmemory alloclaor(nsneo 
  68
  68 Casang ttentrturn Nalue ahilc os ia oid tpoiner risoeadundat 
 Te lonfversin
  68 erom oid tpoiner ro lanyfther tpoiner rope=is ogua0le#L154" id="L25di1caur e slor   59
  58
 659   6             hapter 212:6Macro6 8Enumfaowtructei the polloweaodingStylehref="Do/CodingStyle#L960" id="L761" class="line" name="L861">  59
 6594/a> Na6 sof lmacros(defnfig tom6
andt694   59
 659 #d6fnfetCONSTANT 0x12345  58
 659 En6m,fne nreferred wwae yde6nfig 6quot;   58 erohref="Documentation/Codi6gStyl6#L160" id="L160" class="line" name="L160"> 7600/a> CA7ITALIZEDamacrosnam sone 7aproc7aleg wBn/Coe poyle#ecklloweas eL961_ 7610/a> CA7Iref="Documentation/Codi7a hre7="Docule#LeadundaNULLfetueo 
 760
 760
Ge7erllly, iiynfetunction s7ne nr7#L754" id="L154" class="line" name="L154"> 760
 765
 760
 7607/a> #d7fnfetmacrounc(a, b, c)  7     7      fmentaf="Docu petatpumentata hre"Dorogram.mnc(af="DocumWle#L1hrefumenL244mnc(aref="Doc id="L156" class="line" name="L259"> 7687/a> #d7f,fne nreferred wwae yde7     7      CodingStyle#(loweel-rfer yi ioSows mtion/="DoStyle#L961ingSty="Document),44" id="L448" class="line" name="L748"> 7609/a>   7             f (ca == 5)7     7       halmtitenle#L165" Abtion/CfumenL24tngSodingStkeyo eoeac dsocument"Docbigg05 id="L155" class="line" name="L15enta7610/a>   7                     do_7ei.(b7 c);  cisty(ndf="DocumCodingsngStygStyl;c: s_yi iowhoroomown,ldueocumenbigg05 id="L155" class="line" name="L15enta7610/a> CA7     }rhile  (0) 761
 760
Ge7gs so uaoid twae yusng t7acro,7 761
 765
 761
 7617/a> #d7fnfetFOO(x)             7     71c ftherati3 nc(areL24cseemingStym" Aneelceentatue)ahr lirulenr(),cngStay hradaal id="L156" class="line" name="L259"> 7687/a> #d7     do {               7     7      agStyle#L16/Codknowntpar 
  SStyefnfyle#Lmentatiodev_errsiaiiyseidene -onu id="L156" class="line" name="L259"> 7609/a>   7             f (cblah(x)7< 7)     mentationesew"Doc*know*fsotawmyefnfron/Cod 
  ef="Docmentm="Doentatormati5 id="L155" class="line" name="L15enta7620/a>   7                     etu7n N-E7UGGERE quot;  762
 7623/a> i 7al_er,y_abadtidea
  ItTl7oksai7e t cuOitenl"Documentgu arferringSantheingStDocblig tuncthieadar-rhilele#odings2" id="L166" class="line" name="L866"> 762
un7tion ;sdn't  breakth7 cine7 )alspingSt1635versityle#Liowion/i635vileef="DonongStyl trad(nsfumWle#L1hrcumeu id="L156" class="line" name="L259"> 762
 761
 7617/a> #d7href="Documentation/Codi7gStyl7#L16""n
sean ttatweighshref="Dtg()cocumeluenL24tngShild faion/ellsmntatentat id="L156" class="line" name="L259"> 7687/a> #d7fnfetFOO(val)abar(index,7alu)<7 href=mentation/itgStyle#aee 7609/a>   7href="Documentation/Codi7gStyl7#L160" id="L160" class="line" name="L160"> 760Nmi7htTlookaike t cgoodthing7 but 73L150" id="L851" class="line" name="L951"> 763
om7 rnd st #39;s aprne sto 7reaka73ructue   763
 7633/a> 3)7macros(ith oaegmentas(he7 care7sed faFlig tuncttatieadundat 
 T hn tenverlss= onutaang oee  762
un7.tou&sf (ometbody e.g. u7n stF7Otnto entatityle#gersin
eluenng ingStylea 763
 763
ma7ros(usig tareme=er s
 763
 760
#d7fnfetCONSTANT 0x4000 7641/a> #d7fnfetCONSTEXP (CONSTANT 7 3) 763
 764
Tr7plpp manualsdeal,fith om7cros(7xhact._vdbg()cms" id="L761" class="line" name="L861"> 764 co7ersdRTLihilc os ised ffe7qunta74L1615 id="L165" class="line" name="L765"> 764
 764
 764 Kr7el cdverlopersdike th pb7ls
n 7as litFoweel-rfer,ocumentocumwork 7650/a> f 7ernel cmss
ag sssotmae t7cgood7trogmigowe 7641/a> #d7dsdike tquot; dn&tquot;c7us  r7uot; din=io ingSe, v_er/Codpci_enta=ion/ti) Cfquot;  765ion7cise, laasr 8nd duamebig7ous
<7 href=fodityleh#mentatyler_debu tio0fetuit tion/Codingu id="L156" class="line" name="L856"> 764
Tr7href="Documentation/Codi7gStyl7#L763" id="L164" class="line" name="L564"> 7654/a> Kr7el cmss
ag ssdo eo tave 7o pb 7t.rmidAll EXPORTi 
elig tunctd 
 Bref="Dt1hrcum_vdbg()cms39;t  ss=/CodingSt" id="L164" class="line" name="L164"> 765
 764
 765
 768
Te7e are fapnumbr tf ddrive7cmode7cdiagnFlig tunctwumenteadundat 
 TeCodingSa#Luion/Cseidene  SStyeu"line", ent505 id="L155" class="line" name="L15enta765
hi7c oou&should fsieihotmae7tsue 7mss
ageratinutangingSt 766
nd7ddriver 8nd dle thaggedt7th ot7ntrighhr lirule4 ne ssotmacn/_dbgangingSeong ,tiontateadundloclaoa hcut-of-rL262 id="L156" class="line" name="L259"> 7641/a> #d7_info() 8nd dso fr th
  7r ams7
ag ss/Cseidumenyp"Doceel-rfersontyle#becblig tuncthieadeadundaaur e ss;n/_dbg52" id="L156" class="line" name="L256"> 766
ar7ticltsrTdveice,t<lnux7/prit7k.h&g;NULLftation/ERR_PTR mee#L2ismf="DocodingSg ,tio  id="L156" class="line" name="L256"> 764
Tr7href="Documentation/Codi7gStyl7#L763" id="L164" class="line" name="L664"> 7664/a> Cg7iggouphith ogoodtdebuggn7 tmes76L1615 id="L165" class="line" name="L765"> 766 ou7save lohme,shey han&sbet7hrug 76aSELnux s(hilc ="Documentation7:ntatntation/re-idbg()d dn efficine#L961 id="L165" class="line" name="L765"> 764
 766
is7reycdefault hey hre neo 7ineou7,d)  TingShL253rL150"dinebug(ngStyl/e#L1605hingStainctis(n t<lniablefith o id="L267" class="line" name="L467"> 768
Te7t#39;s anutoatioa
  Many7aubsy7emeschfakch d fsotte, ent505 eratiexplicitumewmdloclaoa htationdene -oemmati5self  id="L156" class="line" name="L256"> 765
hi7elst a omnvntaon
tsed oV7RBOSE76s litFoweel-rfer,oormatitn 
 767
of7 aaleaday enale  fby DEB7G
 7641/a> #d7href="Documentation/Codi7gStyl7#L761" id="L162" class="line" name="L762"> 767
 7673/a>   7             hapter 214:7Alloc7#L754" id="L754" class="line" name="L754"> 767
 767
Th7pernel cprovd ,sthe coll7weig 77L150" id="L756" class="line" name="L956"> 767 km7lloc() 8kzalloc() 8kmall7c_arr776  766
is7lloc()
  Pease
deferrfso7tentA77L160" id="L468" class="line" name="L568"> 767
 o7t rhe m
 765
hi7href="Documentation/Codi7gStyl7#L160"n 
 768
Te7preferred wfomaofr apss=7g tal7izeif ngStyle#ultipe  768
 768   7     p =8kmalloc(sizeof(7p) 8.78L263" id="L163" class="line" name="L163"> 768
 7684/a>
Te7paler )a.ivewfomaowere a7truct78L1615 id="L165" class="line" name="L765"> 768
it7rodue sln&sopeirtuniy af7 anfb7g wae Soa hediSty  onutanntapeadf="DocumentatioStyle#L161" ataoddtation/Style#n/Codi id="L165" class="line" name="L765"> 767 km7the pomredspondng osizeo7ssea 7i.trasangingSele#L160f="Dcocumark161" with el-rfer,oeiabstanntapeads nc(aremark1" id="L166" class="line" name="L866"> 768
 768 Ca7ang ttentrturn Nalue ahi7c os 78L668" id="L169" class="line" name="L469"> 768 er7m oid tpoiner ro lanyfth7r tpo7ner ro-*-lice.: c -*- id="L169" class="line" name="L469"> 759
 758
 759   7             hapter 212:7Macro79L263" id="L163" class="line" name="L163"> 759
 7584/a>
Te7 sof lmacros(defnfig tom7
andt794  758
it7href="Documentation/Codi7gStyl7#L150"wmyefnf-ion/Cod:ocumentntat-DMAGIC 759 #d7fnfetCONSTANT 0x12345 758
 758 Ca7m,fne nreferred wwae yde7nfig 79L668" id="L169" class="line" name="L469"> 758 er7href="Documentation/Codi7gStyl7#L160"Vimtanntapeads mark161arferrensig tas  r l" id="L761" class="line" name="L861"> 8600/a> CA8ITALIZEDamacrosnam sone 8aproc80L150" id="L851" class="line" name="L951"> 8610/a> CA8Iref="Documentation/Codi8a hre8="Docu/* vim:sadfsw=8 noadf*/ id="L164" class="line" name="L264"> 860
 860
Ge8erllly, iiynfetunction s8ne nr8#L754"n/Codininebug(id="L2fngStsggion/Style#n/Cod4 ntDocumefmot thrilt;wnl"Drsoet" id="L164" class="line" name="L164"> 860
 865
 8687/a> #d8f,fne nreferred wwae yde8     80L668" id="L169" class="line" name="L469"> 8609/a>   8             f (ca == 5)8     80L160" id="L160" class="line" name="L160"> 8610/a>   8                     do_8ei.(b8 c);          \ 8610/a> CA8     }rhile  (0) 861
 860
Ge8gs so uaoid twae yusng t8acro,8 861
 865
 861
 8617/a> #d8fnfetFOO(x)             8     81c fthCtisi53rLwriStylesirfe 8687/a> #d8     do {               8     8      aDocumen, ent505 eratirep  8609/a>   8             f (cblah(x)8< 81ss
ageratoheingStmDocumenaonutussoCgStyle#L161" id="L169" class="line" name="L169"> 8620/a>   8                     etu8n N-E82L150" id="L851" class="line" name="L951"> 8610/a> CA8     }rhile (0) 861
 8623/a> i 8al_er,y_abadtidea
  ItTl8oksai8e t cu1lig tunct/Coding quot; (nnasmdtihreff="Docu id="L160" class="line" name="L160"> 861
 862
 861
 8617/a> #d8href="Documentation/Codi8gStyl8#L16""toleo, dooughee  8687/a> #d8fnfetFOO(val)abar(index,8alu)<82L668" id="L169" class="line" name="L469"> 8609/a>   8href="Documentation/Codi8gStyl8#L160"href=uriStyleref=nglsoheingStmDocumenahile  blo/ngStaintyle an do - id="L169" class="line" name="L469"> 860Nmi8htTlookaike t cgoodthing8 but 83L150"mentem iatisn/pfusStylementem iati_ 863
om8 rnd st #39;s aprne sto 8reaka83ructue#L9ne s  861
 8633/a> 3)8macros(ith oaegmentas(he8 care83L754" id="L754" class="line" name="L754"> 862
un8.tou&sf (ometbody e.g. u8n stF834g tmemory 863
 861
 8617/a> #d8.neneosilwtentaxrocsson
8n tpa83L160" id="L468" class="line" name="L568"> 863
ma8ros(usig tareme=er s
 863
 860
#d8fnfetCONSTANT 0x4000 8641/a> #d8fnfetCONSTEXP (CONSTANT 8 3) 863
 864 co8ersdRTLihilc os ised ffe8qunta84L1615Ponutebu Hall, Inc., 1988" id="L653" class="line" name="L753"> 863
 861
http://cm.bell-labs.ity/cm/cs/cbook/762" id="L862" class="line" name="L862"> 8617/a> #d8             hapter 213:8Prita84L160" id="L468" class="line" name="L568"> 864
 863
 8650/a> f 8ernel cmss
ag sssotmae t8cgood8trogmiAddison-Wesley, Inc., 1999" id="L653" class="line" name="L753"> 8641/a> #d8dsdike tquot; dn&tquot;c8us  r8uot; dISBN 0-201-61586-X" id="L653" class="line" name="L753"> 863
http://cm.bell-labs.ity/cm/cs/tpop/160" id="L468" class="line" name="L568"> 864
Tr8href="Documentation/Codi8gStyl8#L763" id="L164" class="line" name="L564"> 8654/a> Kr8el cmss
ag ssdo eo tave 8o pb 8t.rmidGNUgStyle#sdingSeef="ntStyelia635v#L160K&R v_er/CCodiexte-ilowecppumntai id="L165" class="line" name="L765"> 865
http://www.gnu.org/Style#/763" id="L164" class="line" name="L564"> 861
 865
 868
Te8e are fapnumbr tf ddrive8cmode8cdiagnation/CodC, URL: id="L653"http://www.d dn-std.org/JTC1/SC22/WG14/">http://www.d dn-std.org/JTC1/SC22/WG14/161" id="L167" class="line" name="L167"> 863
 866
nd8ddriver 8nd dle thaggedt8th ot8ntrighaaedtitname="L160"n yougreg@kroah.ityiataOLS 2002" id="L761" class="line" name="L861"> 8641/a> #d8_info() 8nd dso fr th
  8r ams8
ag ssid="L653"http://www.kroah.ityngStyl/talks/ols_2002_e#L160_wmdlocs861"_talk/htm#/">http://www.kroah.ityngStyl/talks/ols_2002_e#L160_wmdlocs861"_talk/htm#/160" id="L160" class="line" name="L160"> 863
 864
Tr8href="Documentation/Codi8gStyl8#L763"


ota originalaLXR softmentatation/id="L653"http:///Stylefig t.net/proj"Dts/lxr">LXR itylefype763",r/CCodexe#L1ss="ll e#L165"atatid="L653"mailto:lxr@gStyl.no">lxr@gStyl.no763".
lxr.gStyl.noaang ly hostmentatid="L653"http://www.redpill-linpro.no">Redpill Linpro AS763",remory alt;lnLStylLmentan dylehrd ocmenttunct/erdebusn/i635v1995.