<?xml version="1.0" ?>

<kc>

<title>Kernel Traffic</title>

<author contact="mailto:zbrown@tumblerings.org">Zack Brown</author>

<issue num="278" date="19 Oct 2004 00:00:00 -0800" />

<stats posts="2931" size="16130" contrib="545" multiples="307" lastweek="243">

<person posts="100" size="438" who="Hans Reiser" />
<person posts="76" size="341" who="Linus Torvalds" />
<person posts="69" size="384" who="Spam" />
<person posts="67" size="358" who="William Lee Irwin III" />
<person posts="62" size="306" who="Jamie Lokier" />
<person posts="54" size="258" who="Greg KH" />
<person posts="51" size="185" who="Alan Cox" />
<person posts="47" size="207" who="Andrew Morton" />
<person posts="42" size="179" who="Christoph Hellwig" />
<person posts="40" size="169" who="Tonnerre" />
<person posts="39" size="202" who="Horst von Brand" />
<person posts="39" size="148" who="Pavel Machek" />
<person posts="38" size="169" who="(viro)" />
<person posts="35" size="206" who="Roger Luethi" />
<person posts="35" size="187" who="Robert Love" />
<person posts="34" size="188" who="Nigel Cunningham" />
<person posts="32" size="170" who="Christophe Saout" />
<person posts="31" size="185" who="David Masover" />
<person posts="30" size="206" who="Christoph Lameter" />
<person posts="29" size="236" who="john stultz" />
<person posts="29" size="126" who="Jeff Garzik" />
<person posts="28" size="132" who="Helge Hafting" />
<person posts="26" size="194" who="Denis Vlasenko" />
<person posts="26" size="101" who="Rik van Riel" />
<person posts="25" size="184" who="Stelian Pop" />
<person posts="25" size="111" who="Lee Revell" />
<person posts="24" size="95" who="Andrea Arcangeli" />
<person posts="23" size="175" who="Benjamin Herrenschmidt" />
<person posts="23" size="104" who="Jeff Dike" />
<person posts="22" size="97" who="Marcelo Tosatti" />
<person posts="21" size="176" who="Jens Axboe" />
<person posts="21" size="118" who="Ingo Molnar" />
<person posts="21" size="83" who="Paul Jackson" />
<person posts="21" size="75" who="Christoph Hellwig" />
<person posts="20" size="209" who="James Morris" />
<person posts="20" size="135" who="George Anzinger" />
<person posts="20" size="102" who="Christer Weinigel" />
<person posts="19" size="128" who="Ray Bryant" />
<person posts="18" size="666" who="Michael Hunold" />
<person posts="18" size="95" who="Herbert Poetzl" />
<person posts="18" size="72" who="Jon Smirl" />
<person posts="17" size="73" who="Robert Love" />
<person posts="17" size="64" who="Frank van Maarseveen" />
<person posts="16" size="118" who="Dmitry Torokhov" />
<person posts="16" size="75" who="Russell King" />
<person posts="16" size="54" who="Olaf Hering" />
<person posts="15" size="95" who="Kay Sievers" />
<person posts="15" size="66" who="Gene Heskett" />
<person posts="15" size="59" who=" (Markus  =?ISO-8859-1?Q?=20T=F6rnqvist?=)" />
<person posts="15" size="58" who="Tim Hockin" />
<person posts="14" size="89" who="Marc Ballarin" />
<person posts="13" size="66" who="Bill Huey (hui)" />
<person posts="13" size="61" who="Con Kolivas" />
<person posts="13" size="49" who="Jeremy Allison" />
<person posts="13" size="48" who="Pavel Machek" />
<person posts="12" size="70" who="Vojtech Pavlik" />
<person posts="12" size="57" who="Alexander Lyamin" />
<person posts="12" size="51" who="Andi Kleen" />
<person posts="12" size="49" who="Nikita Danilov" />
<person posts="12" size="48" who="Albert Cahalan" />
<person posts="12" size="48" who="&quot;Martin J. Bligh&quot;" />
<person posts="12" size="39" who="Roman Zippel" />
<person posts="11" size="147" who="Anton Altaparmakov" />
<person posts="11" size="72" who="Jesse Barnes" />
<person posts="11" size="62" who="&quot;Bc. Michal Semler&quot;" />
<person posts="11" size="37" who="Andi Kleen" />
<person posts="11" size="37" who="Chris Friesen" />
<person posts="10" size="77" who="Alex Williamson" />
<person posts="10" size="57" who="Jesper Juhl" />
<person posts="10" size="50" who="Bill Davidsen" />
<person posts="10" size="46" who="Gunnar Ritter" />
<person posts="10" size="45" who="Alex Zarochentsev" />
<person posts="10" size="42" who="Timothy Miller" />
<person posts="10" size="39" who="Arjan van de Ven" />
<person posts="10" size="34" who="Chris Wedgwood" />
<person posts="9" size="46" who="Jakob Oestergaard" />
<person posts="9" size="30" who="&quot;David S. Miller&quot;" />
<person posts="8" size="71" who="Hariprasad Nellitheertha" />
<person posts="8" size="39" who="&quot;Alexander G. M. Smith&quot;" />
<person posts="8" size="36" who="Giuseppe Bilotta" />
<person posts="8" size="33" who="Chris Wright" />
<person posts="8" size="32" who="Francois Romieu" />
<person posts="8" size="31" who="Grzegorz Piotr Jaskiewicz" />
<person posts="8" size="30" who="Luke Kenneth Casson Leighton" />
<person posts="8" size="29" who="&quot;Richard B. Johnson&quot;" />
<person posts="8" size="28" who="David Woodhouse" />
<person posts="7" size="101" who="Pete Zaitcev" />
<person posts="7" size="95" who="Peter Jones" />
<person posts="7" size="67" who="Norberto Bensa" />
<person posts="7" size="48" who="&quot;Antonino A. Daplas&quot;" />
<person posts="7" size="43" who="David Lang" />
<person posts="7" size="35" who="Geert Uytterhoeven" />
<person posts="7" size="34" who="Ihar 'Philips' Filipau" />
<person posts="7" size="30" who="(Valdis.Kletnieks)" />
<person posts="7" size="29" who="Trond Myklebust" />
<person posts="7" size="27" who="Wichert Akkerman" />
<person posts="7" size="27" who="Matthew Wilcox" />
<person posts="7" size="26" who="Mikael Pettersson" />
<person posts="7" size="25" who="Sasha Khapyorsky" />
<person posts="7" size="25" who="Pierre Ossman" />
<person posts="7" size="24" who="Diego Calleja" />
<person posts="6" size="185" who="John McCutchan" />
<person posts="6" size="43" who="Li Shaohua" />
<person posts="6" size="38" who="Dipankar Sarma" />
<person posts="6" size="34" who="&quot;John Stoffel&quot;" />
<person posts="6" size="30" who="Gerd Knorr" />
<person posts="6" size="30" who="Mike Mestnik" />
<person posts="6" size="30" who="&quot;Ulrich Windl&quot;" />
<person posts="6" size="29" who="&quot;Alexander E. Patrakov&quot;" />
<person posts="6" size="27" who="Zilvinas Valinskas" />
<person posts="6" size="26" who="Daniel Stekloff" />
<person posts="6" size="25" who="DervishD" />
<person posts="6" size="25" who="Dominik Brodowski" />
<person posts="6" size="24" who="Hugh Dickins" />
<person posts="6" size="22" who="=?UTF-8?B?R3J6ZWdvcnogSmHFm2tpZXdpY3o=?=" />
<person posts="6" size="21" who="Jan Dittmer" />
<person posts="6" size="21" who="Felipe Alfaro Solana" />
<person posts="6" size="21" who="Duncan Sands" />
<person posts="6" size="21" who="Andreas Schwab" />
<person posts="6" size="21" who="Herbert Xu" />
<person posts="6" size="21" who="Dave Jones" />
<person posts="6" size="21" who="Florian Weimer" />
<person posts="5" size="112" who="Hans-Frieder Vogt" />
<person posts="5" size="55" who="Clemens Schwaighofer" />
<person posts="5" size="49" who="Felipe Alfaro Solana" />
<person posts="5" size="35" who="Arnd Bergmann" />
<person posts="5" size="30" who="Joshua Kwan" />
<person posts="5" size="26" who="&quot;Jeff V. Merkey&quot;" />
<person posts="5" size="25" who="Dave Kleikamp" />
<person posts="5" size="23" who="Henry Margies" />
<person posts="5" size="23" who="Will Dyson" />
<person posts="5" size="22" who="Bjorn Helgaas" />
<person posts="5" size="22" who="&quot;Randy.Dunlap&quot;" />
<person posts="5" size="22" who="Nicholas Miell" />
<person posts="5" size="21" who="Chris Mason" />
<person posts="5" size="21" who="Paul Jakma" />
<person posts="5" size="21" who="&quot;Jack O'Quin&quot;" />
<person posts="5" size="20" who="Ryan Cumming" />
<person posts="5" size="19" who="Greg Banks" />
<person posts="5" size="18" who="Tom Vier" />
<person posts="5" size="17" who="Adrian Bunk" />
<person posts="4" size="93" who="Jay Lan" />
<person posts="4" size="83" who="&quot;Max Michaels&quot;" />
<person posts="4" size="23" who="Dave Airlie" />
<person posts="4" size="21" who="Norbert van Nobelen" />
<person posts="4" size="19" who="Jan Harkes" />
<person posts="4" size="19" who="Utz Lehmann" />
<person posts="4" size="19" who="&quot;Rafael J. Wysocki&quot;" />
<person posts="4" size="18" who="Chris Dukes" />
<person posts="4" size="18" who=" (Eric W. Biederman)" />
<person posts="4" size="18" who="Buddy Lucas" />
<person posts="4" size="17" who="Tigran Aivazian" />
<person posts="4" size="17" who="Andrea Arcangeli" />
<person posts="4" size="17" who="Gianni Tedesco" />
<person posts="4" size="17" who="Robert Picco" />
<person posts="4" size="17" who="=?UTF-8?Q?Grzegorz_Ja=C5=9Bkiewicz?=" />
<person posts="4" size="16" who="Dan Kegel" />
<person posts="4" size="16" who="Yuval Turgeman" />
<person posts="4" size="16" who="David Gibson" />
<person posts="4" size="16" who="Neil Brown" />
<person posts="4" size="15" who="Roland Dreier" />
<person posts="4" size="15" who="Larry McVoy" />
<person posts="4" size="14" who="=?ISO-8859-2?Q?Tomasz_K=B3oczko?=" />
<person posts="4" size="14" who="&quot;Giacomo A. Catenazzi&quot;" />
<person posts="4" size="14" who="Jon Masters" />
<person posts="4" size="14" who="Oliver Neukum" />
<person posts="4" size="13" who="Yoichi Yuasa" />
<person posts="4" size="13" who="SashaK" />
<person posts="4" size="12" who="&quot;Vladimir B. Savkin&quot;" />
<person posts="4" size="10" who="Anton Blanchard" />
<person posts="3" size="85" who="Alan Cox" />
<person posts="3" size="42" who="Hidetoshi Seto" />
<person posts="3" size="35" who="Jody McIntyre" />
<person posts="3" size="23" who="(blaisorblade_spam)" />
<person posts="3" size="23" who="Stuart Young" />
<person posts="3" size="23" who="(dylan)" />
<person posts="3" size="19" who="Alasdair G Kergon" />
<person posts="3" size="17" who="Stephen Smalley" />
<person posts="3" size="15" who="Oliver Hunt" />
<person posts="3" size="15" who="James Bottomley" />
<person posts="3" size="15" who="Andreas Gruenbacher" />
<person posts="3" size="15" who="Yury Umanets" />
<person posts="3" size="15" who="Bernd Petrovitsch" />
<person posts="3" size="14" who="=?ISO-8859-2?Q?Marcin_Ro=BFek?=" />
<person posts="3" size="14" who="Deepak Saxena" />
<person posts="3" size="13" who="Simon Derr" />
<person posts="3" size="13" who="Stephan von Krawczynski" />
<person posts="3" size="13" who="Matt Mackall" />
<person posts="3" size="13" who="Jon Mason" />
<person posts="3" size="13" who="Theodore Ts'o" />
<person posts="3" size="13" who="Ray Lee" />
<person posts="3" size="13" who="Brad Boyer" />
<person posts="3" size="13" who="Christian Mayrhuber" />
<person posts="3" size="12" who="Rainer Weikusat" />
<person posts="3" size="12" who="Luca Ferroni" />
<person posts="3" size="12" who="CaT" />
<person posts="3" size="12" who="Martin Bouzek" />
<person posts="3" size="12" who="Carlos Eduardo Medaglia Dyonisio" />
<person posts="3" size="11" who="Kyle Moffett" />
<person posts="3" size="11" who="Frank Steiner" />
<person posts="3" size="11" who="Kenneth =?iso-8859-1?q?Aafl=F8y?=" />
<person posts="3" size="10" who="&quot;Stephen C. Tweedie&quot;" />
<person posts="3" size="10" who="David Lloyd" />
<person posts="3" size="10" who="(mike.miller)" />
<person posts="3" size="10" who="Nick Piggin" />
<person posts="3" size="10" who="Paul Fulghum" />
<person posts="3" size="9" who="mike cox" />
<person posts="3" size="9" who="&quot;Miquel van Smoorenburg&quot;" />
<person posts="3" size="9" who="Zwane Mwaikambo" />
<person posts="3" size="9" who="Maciej Soltysiak" />
<person posts="3" size="8" who="Ricky Beam" />
<person posts="3" size="8" who="&quot;C.Y.M.&quot;" />
<person posts="2" size="86" who="Brad Campbell" />
<person posts="2" size="42" who="Jeff Mahoney" />
<person posts="2" size="35" who="&quot;Peter Seiderer&quot;" />
<person posts="2" size="33" who="Sean Neakums" />
<person posts="2" size="30" who="maximilian attems" />
<person posts="2" size="28" who="Arnaldo Carvalho de Melo" />
<person posts="2" size="20" who="Kenji Kaneshige" />
<person posts="2" size="20" who="Stephen Hemminger" />
<person posts="2" size="17" who="&quot;Piszcz, Justin Michael&quot;" />
<person posts="2" size="17" who="=?iso-8859-1?Q?Rog=E9rio?= Brito" />
<person posts="2" size="17" who="Yuval Turgeman" />
<person posts="2" size="16" who="Vernon Mauery" />
<person posts="2" size="14" who="Dave Airlie" />
<person posts="2" size="13" who="Marek Habersack" />
<person posts="2" size="12" who="Bob Gill" />
<person posts="2" size="12" who="Yury Umanets" />
<person posts="2" size="12" who="Jan De Luyck" />
<person posts="2" size="11" who="Erik Hensema" />
<person posts="2" size="10" who="&quot;Mario R. Carro&quot;" />
<person posts="2" size="10" who="&quot;Povolotsky, Alexander&quot;" />
<person posts="2" size="10" who="Will Dyson" />
<person posts="2" size="10" who="Stephen Wille Padnos" />
<person posts="2" size="10" who="Steve Bergman" />
<person posts="2" size="10" who="Helge Hafting" />
<person posts="2" size="10" who="Thomas Unger" />
<person posts="2" size="10" who="Torben Mathiasen" />
<person posts="2" size="10" who="Kai Makisara" />
<person posts="2" size="9" who=" (Joseph Fannin)" />
<person posts="2" size="9" who="Andre Bonin" />
<person posts="2" size="9" who="Matthew Wilcox" />
<person posts="2" size="9" who="Ed Hill" />
<person posts="2" size="9" who="Daniel Egger" />
<person posts="2" size="9" who="Nathan Scott" />
<person posts="2" size="9" who="Mikulas Patocka" />
<person posts="2" size="9" who="Andreas Dilger" />
<person posts="2" size="9" who="James Bruce" />
<person posts="2" size="9" who="Andy Lutomirski" />
<person posts="2" size="8" who="Michael Scondo" />
<person posts="2" size="8" who="&quot;H. J. Lu&quot;" />
<person posts="2" size="8" who="Florin Andrei" />
<person posts="2" size="8" who="Stephen Rothwell" />
<person posts="2" size="8" who="Andries Brouwer" />
<person posts="2" size="8" who="Alon Altman" />
<person posts="2" size="8" who="Nishanth Aravamudan" />
<person posts="2" size="8" who="=?iso-8859-1?Q?M=E5rten_Berggren?=" />
<person posts="2" size="8" who="Tomasz Rola" />
<person posts="2" size="8" who="Neil Horman" />
<person posts="2" size="8" who="Manik Raina" />
<person posts="2" size="8" who="Martin Schwidefsky" />
<person posts="2" size="8" who="ADH" />
<person posts="2" size="8" who="David Hollis" />
<person posts="2" size="8" who="Paulo Marques" />
<person posts="2" size="8" who="Aleksandar Milivojevic" />
<person posts="2" size="8" who=" (Dmitry Baryshkov)" />
<person posts="2" size="8" who="Tony Lee" />
<person posts="2" size="8" who="Vladimir Dergachev" />
<person posts="2" size="7" who="Nick Piggin" />
<person posts="2" size="7" who="Jari Ruusu" />
<person posts="2" size="7" who="Ulrich Drepper" />
<person posts="2" size="7" who="Takashi Iwai" />
<person posts="2" size="7" who="Keith Packard" />
<person posts="2" size="7" who="=?ISO-8859-1?Q?Rapha=EBl_Rigo?=" />
<person posts="2" size="7" who=" (=?ISO-8859-1?Q?Claus_F=E4rber?=)" />
<person posts="2" size="7" who="walt" />
<person posts="2" size="7" who="Jonathan Lundell" />
<person posts="2" size="7" who="James Cownie" />
<person posts="2" size="7" who="Max Valdez" />
<person posts="2" size="7" who="Shawn Starr" />
<person posts="2" size="7" who="(torbenh)" />
<person posts="2" size="7" who="(porterzy)" />
<person posts="2" size="7" who="John covici" />
<person posts="2" size="7" who="&quot;Alexander Stohr&quot;" />
<person posts="2" size="7" who="=?iso-8859-1?Q?J=F6rn?= Engel" />
<person posts="2" size="7" who="John Cherry" />
<person posts="2" size="7" who="(Andries.Brouwer)" />
<person posts="2" size="7" who="David Sanders" />
<person posts="2" size="6" who="Joe Korty" />
<person posts="2" size="6" who="Peter Williams" />
<person posts="2" size="6" who="Xavier Bestel" />
<person posts="2" size="6" who="Andries Brouwer" />
<person posts="2" size="6" who="Matt Kavanagh" />
<person posts="2" size="6" who="&quot;J.W. Hoogervorst&quot;" />
<person posts="2" size="6" who="James Cloos" />
<person posts="2" size="6" who="Tim Fairchild" />
<person posts="2" size="6" who=" (Klaus Dittrich)" />
<person posts="2" size="6" who="Andre Tomt" />
<person posts="2" size="6" who="Kirill Korotaev" />
<person posts="2" size="6" who="=?iso-8859-1?q?Jysuis=20Parla?=" />
<person posts="2" size="6" who="Pascal Schmidt" />
<person posts="2" size="6" who="Ronghua Zhang" />
<person posts="2" size="5" who="Meelis Roos" />
<person posts="2" size="5" who="DaMouse" />
<person posts="2" size="5" who="Mark Lord" />
<person posts="2" size="5" who="Michael Thonke" />
<person posts="2" size="5" who="(postmaster)" />
<person posts="1" size="57" who="Alessandro Bono" />
<person posts="1" size="54" who="Mark Lord" />
<person posts="1" size="51" who="Alexander ZVYAGIN" />
<person posts="1" size="42" who="Makan Pourzandi" />
<person posts="1" size="40" who="(keripukki)" />
<person posts="1" size="40" who="&quot;Ronny V. Vindenes&quot;" />
<person posts="1" size="21" who="&quot;Ingo Freund&quot;" />
<person posts="1" size="16" who="&quot;Hoogervorst, J.W.&quot;" />
<person posts="1" size="15" who="Kenji Kaneshige" />
<person posts="1" size="15" who="&quot;Michael S. Tsirkin&quot;" />
<person posts="1" size="14" who="Benjamin Voetterle" />
<person posts="1" size="14" who="Thierry Coutelier" />
<person posts="1" size="12" who="Sami Farin" />
<person posts="1" size="12" who="Bartlomiej Zolnierkiewicz" />
<person posts="1" size="11" who="&quot;Joachim Bremer&quot;" />
<person posts="1" size="10" who="(linuxkernel1.20.sandos)" />
<person posts="1" size="9" who="Andreas Haumer" />
<person posts="1" size="9" who="Haroldo Gamal" />
<person posts="1" size="9" who="Karsten Keil" />
<person posts="1" size="8" who="Michael Halcrow" />
<person posts="1" size="8" who="NIWA Hideyuki" />
<person posts="1" size="8" who="Anando Bhattacharya" />
<person posts="1" size="8" who="Philipp Matthias Hahn" />
<person posts="1" size="8" who="Andreas Huemmer" />
<person posts="1" size="7" who="Jean-Luc Cooke" />
<person posts="1" size="7" who="David Lang" />
<person posts="1" size="7" who="Linas Vepstas" />
<person posts="1" size="6" who="Elladan" />
<person posts="1" size="6" who="&quot;Mark A. Greer&quot;" />
<person posts="1" size="6" who="&quot;Vitaly V. Bursov&quot;" />
<person posts="1" size="6" who="Przemyslaw Hausman" />
<person posts="1" size="6" who="Jay Lan" />
<person posts="1" size="6" who="(hb)" />
<person posts="1" size="6" who="&quot;Mr. Berkley Shands&quot;" />
<person posts="1" size="6" who="&quot;Yu, Luming&quot;" />
<person posts="1" size="6" who="Rajesh Venkatasubramanian" />
<person posts="1" size="6" who="Andy Lutomirski" />
<person posts="1" size="6" who="David Ford" />
<person posts="1" size="6" who="Dave Chinner" />
<person posts="1" size="6" who="Joseph Fannin" />
<person posts="1" size="5" who="Greg Ungerer" />
<person posts="1" size="5" who="Kenichi Okuyama" />
<person posts="1" size="5" who="Tommy Reynolds" />
<person posts="1" size="5" who="&quot;Dr. Giovanni A. Orlando&quot;" />
<person posts="1" size="5" who="(ckottk01)" />
<person posts="1" size="5" who="todd nguyen" />
<person posts="1" size="5" who="Matti Aarnio" />
<person posts="1" size="5" who="Roland McGrath" />
<person posts="1" size="5" who="&quot;Mike Kirk&quot;" />
<person posts="1" size="5" who="&quot;Venkatesan, Ganesh&quot;" />
<person posts="1" size="5" who="Julian Blake Kongslie" />
<person posts="1" size="5" who=" ( =?ISO-8859-1?Q?=C9ric?= Brunet)" />
<person posts="1" size="5" who="Christian Borntraeger" />
<person posts="1" size="5" who="Clay Haapala" />
<person posts="1" size="5" who="Felix =?ISO-8859-1?Q?K=FChling?=" />
<person posts="1" size="5" who="Mikhail Ramendik" />
<person posts="1" size="5" who="Grant Grundler" />
<person posts="1" size="5" who="Brian Beattie" />
<person posts="1" size="5" who="Michelle Konzack" />
<person posts="1" size="5" who="Willy Tarreau" />
<person posts="1" size="5" who="Ian Kumlien" />
<person posts="1" size="4" who="&quot;Cagle, John&quot;" />
<person posts="1" size="4" who="Colin Leroy" />
<person posts="1" size="4" who="Grzegorz Kulewski" />
<person posts="1" size="4" who="Jonathan Abbey" />
<person posts="1" size="4" who="John Engel" />
<person posts="1" size="4" who="Christopher Chan" />
<person posts="1" size="4" who="Peter Nelson" />
<person posts="1" size="4" who="Stefan Hornburg (Racke)" />
<person posts="1" size="4" who="Alexander Nyberg" />
<person posts="1" size="4" who="Seiji Kihara" />
<person posts="1" size="4" who="Chris Leech" />
<person posts="1" size="4" who="Martin Diehl" />
<person posts="1" size="4" who="Robert Hancock" />
<person posts="1" size="4" who="Hans-Frieder Vogt" />
<person posts="1" size="4" who="Nicholas Miell" />
<person posts="1" size="4" who="Jan-Frode Myklebust" />
<person posts="1" size="4" who="Joel Becker" />
<person posts="1" size="4" who="&quot;Randy.Dunlap&quot;" />
<person posts="1" size="4" who="Bjoern Brauel" />
<person posts="1" size="4" who="Linh Dang" />
<person posts="1" size="4" who=" (Kaigai Kohei)" />
<person posts="1" size="4" who="Marcello Barnaba" />
<person posts="1" size="4" who="Kronos" />
<person posts="1" size="4" who="Marcel Bogdan" />
<person posts="1" size="4" who="David Greaves" />
<person posts="1" size="4" who=" (Kai Henningsen)" />
<person posts="1" size="4" who="&quot;www.sveasoft.com&quot;" />
<person posts="1" size="4" who="Toon van der Pas" />
<person posts="1" size="4" who="Andrew McGregor" />
<person posts="1" size="4" who="Bernhard Rosenkraenzer" />
<person posts="1" size="4" who="William Pettersson" />
<person posts="1" size="4" who="Jan Kara" />
<person posts="1" size="4" who="Nicolas Pitre" />
<person posts="1" size="4" who="cluster iCampus" />
<person posts="1" size="4" who="Brad Smith" />
<person posts="1" size="4" who="&quot;michael mattie&quot;" />
<person posts="1" size="4" who=" (Joshua Kwan)" />
<person posts="1" size="4" who="Kenneth Johansson" />
<person posts="1" size="4" who="Mikael Pettersson" />
<person posts="1" size="4" who="Stelian Ionescu" />
<person posts="1" size="4" who="Tuomas Heino" />
<person posts="1" size="4" who="Shaya Potter" />
<person posts="1" size="4" who="Paul Stewart" />
<person posts="1" size="4" who="Emil Larsson" />
<person posts="1" size="4" who="Leandro Santi" />
<person posts="1" size="4" who="&quot;J. Bruce Fields&quot;" />
<person posts="1" size="4" who="James R Bruce" />
<person posts="1" size="4" who="(tuxrocks)" />
<person posts="1" size="4" who="1 1" />
<person posts="1" size="4" who="Peter Foldiak" />
<person posts="1" size="4" who="V13" />
<person posts="1" size="4" who="Patrick Kiwitter- Mailinglist" />
<person posts="1" size="4" who=" (H. Peter Anvin)" />
<person posts="1" size="4" who="&quot;Nguyen, Tom L&quot;" />
<person posts="1" size="4" who="Paul Giordano" />
<person posts="1" size="3" who="(tvrtko.ursulin)" />
<person posts="1" size="3" who="Sriram Karra" />
<person posts="1" size="3" who="&quot;Rusty Russell (IBM)&quot;" />
<person posts="1" size="3" who="Lawrence Wong" />
<person posts="1" size="3" who="David Balazic" />
<person posts="1" size="3" who="Brian Gerst" />
<person posts="1" size="3" who="Srivatsa Vaddagiri" />
<person posts="1" size="3" who="Robin Rosenberg" />
<person posts="1" size="3" who="&quot;Rodrigo FGV&quot;" />
<person posts="1" size="3" who="Andrew Grover" />
<person posts="1" size="3" who="Jakub Jelinek" />
<person posts="1" size="3" who="Ian Campbell" />
<person posts="1" size="3" who="Hanna Linder" />
<person posts="1" size="3" who="Dave Dillow" />
<person posts="1" size="3" who="&quot;Dr. David Alan Gilbert&quot;" />
<person posts="1" size="3" who="Aiko Barz" />
<person posts="1" size="3" who="&quot;Giacomo A. Catenazzi&quot;" />
<person posts="1" size="3" who="Andrey Panin" />
<person posts="1" size="3" who="Yury Umanets" />
<person posts="1" size="3" who="Matthias Urlichs" />
<person posts="1" size="3" who="Zwane Mwaikambo" />
<person posts="1" size="3" who="Mike Christie" />
<person posts="1" size="3" who="&quot;Petr Vandrovec&quot;" />
<person posts="1" size="3" who="Ian Campbell" />
<person posts="1" size="3" who="Len Brown" />
<person posts="1" size="3" who="Erik Tews" />
<person posts="1" size="3" who="Remi Colinet" />
<person posts="1" size="3" who="Werner Almesberger" />
<person posts="1" size="3" who="Mathieu Segaud" />
<person posts="1" size="3" who="Mingming Cao" />
<person posts="1" size="3" who="Wayne Scott" />
<person posts="1" size="3" who="&quot;Srinivas Naga Vutukuri&quot;" />
<person posts="1" size="3" who="(ju)" />
<person posts="1" size="3" who="Thomas Cataldo" />
<person posts="1" size="3" who="Jussi Hamalainen" />
<person posts="1" size="3" who="Alan Stern" />
<person posts="1" size="3" who="Andreas Jellinghaus" />
<person posts="1" size="3" who="Ralf Hildebrandt" />
<person posts="1" size="3" who="Peter Chubb" />
<person posts="1" size="3" who="Erik Mouw" />
<person posts="1" size="3" who="Ingo Molnar" />
<person posts="1" size="3" who="Giuliano Pochini" />
<person posts="1" size="3" who="Tierra" />
<person posts="1" size="3" who="Dave Hansen" />
<person posts="1" size="3" who="=?ISO-8859-1?Q?Rog=E9rio_Brito?=" />
<person posts="1" size="3" who="Giuliano Pochini" />
<person posts="1" size="3" who="Oleg Drokin" />
<person posts="1" size="3" who="Lars Marowsky-Bree" />
<person posts="1" size="3" who="&quot;Shine on this Life That's Burnin' Out&quot;" />
<person posts="1" size="3" who="mikem" />
<person posts="1" size="3" who="Chris Meadors" />
<person posts="1" size="3" who="&quot;Andrew Chew&quot;" />
<person posts="1" size="3" who="&quot;Srinivas G.&quot;" />
<person posts="1" size="3" who="Kurt Wall" />
<person posts="1" size="3" who="Marco d'Itri" />
<person posts="1" size="3" who="&quot;Prakash K. Cheemplavam&quot;" />
<person posts="1" size="3" who="Lennert Buytenhek" />
<person posts="1" size="3" who="Harry Edmon" />
<person posts="1" size="3" who="Manfred Spraul" />
<person posts="1" size="3" who="&quot;P. Benie&quot;" />
<person posts="1" size="3" who="Ben Greear" />
<person posts="1" size="3" who="TEJAS VORA" />
<person posts="1" size="3" who="&quot;Leisner, Martin&quot;" />
<person posts="1" size="3" who="jamal" />
<person posts="1" size="3" who="David =?iso-8859-15?Q?G=F3mez?=" />
<person posts="1" size="3" who="John Covici" />
<person posts="1" size="3" who="&quot;Panos Polychronis&quot;" />
<person posts="1" size="3" who="Ryan Breen" />
<person posts="1" size="3" who="Adam Kropelin" />
<person posts="1" size="3" who="Sid Boyce" />
<person posts="1" size="3" who="Olivier Galibert" />
<person posts="1" size="3" who="Lei Yang" />
<person posts="1" size="3" who="Karol Kozimor" />
<person posts="1" size="3" who="Mark Goodman" />
<person posts="1" size="3" who="&quot;David Dabbs&quot;" />
<person posts="1" size="3" who="Gracjan Jankowski" />
<person posts="1" size="3" who="Steve Underwood" />
<person posts="1" size="3" who="Marc-Christian Petersen" />
<person posts="1" size="3" who="Marcin Garski" />
<person posts="1" size="3" who="Rusty Russell" />
<person posts="1" size="3" who="Hacksaw" />
<person posts="1" size="3" who="Peter Buckingham" />
<person posts="1" size="3" who="Edgar Toernig" />
<person posts="1" size="3" who="roger blofeld" />
<person posts="1" size="3" who="(fluid)" />
<person posts="1" size="3" who="Shobhit Mathur" />
<person posts="1" size="3" who="(tuxrocks)" />
<person posts="1" size="3" who="&quot;Paul E. McKenney&quot;" />
<person posts="1" size="3" who="(fgkldfgh)" />
<person posts="1" size="2" who="&quot;Huber, George K RDECOM CERDEC STCD SRI&quot;" />
<person posts="1" size="2" who="&quot;manish regmi&quot;" />
<person posts="1" size="2" who="Andrea Carpani" />
<person posts="1" size="2" who="Hollis Blanchard" />
<person posts="1" size="2" who="Cyril Wattebled" />
<person posts="1" size="2" who="Aaron Gyes" />
<person posts="1" size="2" who="Linux Guy" />
<person posts="1" size="2" who="=?utf-8?b?0JzQuNC70LXQvSDQpdGA0LjRgdGC0L7Qsg==?=" />
<person posts="1" size="2" who="&quot;shai lifshitz&quot;" />
<person posts="1" size="2" who="walt" />
<person posts="1" size="2" who="(linux)" />
<person posts="1" size="2" who="Long Pu" />
<person posts="1" size="2" who="Kyle Schlansker" />
<person posts="1" size="2" who="Paul Mackerras" />
<person posts="1" size="2" who="(plt)" />
<person posts="1" size="2" who="&quot;Esmeralda Rocamora&quot;" />
<person posts="1" size="2" who="Jody McIntyre" />
<person posts="1" size="2" who="Jeon" />
<person posts="1" size="2" who="Manu Abraham" />
<person posts="1" size="2" who="hooper" />
<person posts="1" size="2" who="=?iso-8859-1?q?SUBODH=20SHRIVASTAVA?=" />
<person posts="1" size="2" who="&quot;Mike R.&quot;" />
<person posts="1" size="2" who="&quot;Him&quot;" />
<person posts="1" size="2" who="manomugdha biswas" />
<person posts="1" size="2" who="Amol" />
<person posts="1" size="2" who="Ruben Puettmann" />
<person posts="1" size="2" who=" (Uwe Ohse)" />
<person posts="1" size="2" who="(mailadmin)" />
<person posts="1" size="2" who="Buddy Lumpkin" />
<person posts="1" size="2" who="&quot;Issac Crump&quot;" />
<person posts="1" size="2" who="&quot;Chase Knapp&quot;" />
<person posts="1" size="1" who="Piotr Perak" />

</stats>

<section
  title="SmartLink Almost GPLs Modem Driver Code"
  subject="GPL source code for Smart USB 56 modem (includes ALSA AC97  patch)"
  archive="http://groups.google.com/groups?hl=en&amp;lr=lang_en&amp;safe=off&amp;selm=2CvrA-Fv-11%40gated-at.bofh.it&amp;prev=/groups%3Fq%3D%2522source%2Bcode%2Bfor%2BSmart%2BUSB%2B56%2Bmodem%2522%26hl%3Den%26btnG%3DGoogle%2BSearch"
  posts="31"
  startdate="09 Sep 2004 03:47:47 -0800"
  enddate="22 Sep 2004 11:07:23 -0800"
>
<topic>Modems</topic>
<topic>PCI</topic>
<topic>Sound: ALSA</topic>
<topic>USB</topic>
<topic>Version Control</topic>

<mention>Erik Mouw</mention>
<mention>Jaroslav Kysela</mention>

<p>Luke Kenneth Casson Leighton was thrilled to discover
that SmartLink had published a GPLed driver for their <a
href="http://www.smlink.com/main/down/slmodem-2.9.9.tar.gz">smart USB 56K
modem</a>. They also provided a PCI version, as well as an AC97 ALSA driver,
all GPLed. He remarked, <quote who="Luke Kenneth Casson Leighton">this PCI ALSA
driver is based on the i8x0 / MX 440 modem driver, by Jaroslav Kysela.</quote>
He also added, <quote who="Luke Kenneth Casson Leighton">the swansmart usb
56k modem is dirt cheap (it was available in the uk six months ago for about
\2439), and is extremely popular in australia and the far east.</quote>
Theodore Ts'o remarked:</p>

<quote who="Theodore Ts'o">

<p>It's mostly GPL'ed, but there are binary-only objects both in the user-mode
daemon (modem/dsplibs.o) and in the kernel driver (drivers/amrlibs.o).</p>

<p>The good news is that there a completely GPL'ed, source-complete driver
already in the 2.6 kernel, sound/pci/intel8x0m.c, which will work with the
user-mode daemon found in the smlink.com distribution.  This driver doesn't
have all of the functionality of slamr driver (which requires the propietary,
binary-only object file) --- most notably, ATM1 doesn't work when using
the completely open-source intl8x0m driver.  However, it does work just
fine, and so as long as you don't mind using the propietary object file in
user-space, it's a great solution.  I've been using the smlink daemon with
both the open-source and partial-propietary driver, and both work just fine
on my T40 laptop.</p>

</quote>

<p>Erik Mouw echoed this, and Luke was deeply disappointed. He sent some
email to SmartLink, asking if they'd be willing to license the full source
under the GPL. Sasha Khapyorsky from SmartLink replied, saying that <quote
who="Sasha Khapyorsky">The final goal is to replace proprietary slamr
driver completely.</quote> Mikael Pettersson said, <quote who="Mikael
Pettersson">I hope you succeed with open-sourcing all of slmodem's driver
code. My Targa Athlon64 laptop has the AMR thingy and the 32-bit x86 binary
only slmodem driver prevents me from using the modem while running a 64-bit
kernel.</quote> Sasha replied, <quote who="Sasha Khapyorsky">You mean to GPL
user-space program slmodemd?  I think it is good idea, but unfortunately
this code is not just my, and final decision was 'no'.</quote> But Mikael
explained, <quote who="Mikael Pettersson">No, I meant the 'slamr' kernel
driver module, which is built from a big binary-only library (amrlibs.o)
and a small amount of kernel glue source code. As long as amrlibs.o is
distributed only as a 32-bit x86 binary, I won't be able to use it with
a 64-bit amd64 kernel.  slmodemd is not the problem since an amd64 kernel
can support 32-bit x86 user-space binaries.</quote> Sasha replied, <quote
who="Sasha Khapyorsky">This is exactly that was discussed - 'slamr' is going
to be replaced by ALSA drivers. I don't know which modem you have, but recent
ALSA driver (CVS version) already supports ICH, SiS, NForce (snd-intel8x0m),
ATI IXP (snd-atiixp-modem) and VIA (snd-via82xx-modem) AC97 modems.</quote></p>

</section>

<section
  title="Real-Time LSM (Linux Security Module)"
  subject="[PATCH] Realtime LSM"
  archive="http://www.google.com/groups?hl=en&amp;lr=&amp;ie=UTF-8&amp;selm=2Natv-7jZ-29%40gated-at.bofh.it&amp;prev=/groups%3Fas_ugroup%3Dlinux.kernel%26as_uauthors%3DLee%2520Revell%26as_usubject%3D%255BPATCH%255D%2520Realtime%2520LSM%26as_drbb%3Db%26as_mind%3D11%26as_minm%3DSep%26as_miny%3D2004%26as_maxd%3D11%26as_maxm%3DSep%26as_maxy%3D2004"
  posts="22"
  startdate="11 Sep 2004 21:46:18 -0800"
  enddate="20 Sep 2004 23:52:24 -0800"
>
<topic>Real-Time</topic>

<mention>Jack O'Quin</mention>

<p>Lee Revell said, <quote who="Lee Revell">The realtime-lsm Linux Security
Module, written by Torben Hohn and Jack O'Quin, selectively grants realtime
capabilities to specific user groups or applications.  The typical use for
this is low latency audio, and the patch has been extensively field tested
by Linux audio users.  The realtime LSM is a major improvement in security
over the 2.4 capablities patch and other workarounds like jackstart, which
rely on CAP_SETPCAP.</quote> A bunch of folks dove in, with various technical
comments and criticisms.</p>

</section>

<section
  title="Status Of BKL (Big Kernel Lock); Some Comparison With FreeBSD"
  subject="[patch] remove the BKL (Big Kernel Lock), this time for real"
  archive="http://groups.google.com/groups?q=g:thl2264176700d&amp;dq=&amp;hl=en&amp;lr=lang_en&amp;safe=off&amp;selm=2EJTp-7bx-1%40gated-at.bofh.it"
  posts="32"
  startdate="15 Sep 2004 07:18:15 -0800"
  enddate="18 Sep 2004 15:36:19 -0800"
>
<topic>BSD: FreeBSD</topic>
<topic>FS: procfs</topic>
<topic>SMP</topic>

<mention>Andrew Morton</mention>

<p>The quest to remove the BKL (big kernel lock) has been ongoing for quite some time. Ingo Molnar said:</p>

<quote who="Ingo Molnar">

<p>the attached patch is a new approach to get rid of Linux's Big Kernel
Lock as we know it today.</p>

<p>The trick is to turn the BKL spinlock + depth counter into a special
type of cpu-affine, recursive semaphore, which gets released by
schedule() but not by preempt_schedule().</p>

<p>this gives the following advantages:</p>

<p>

<ul>

<li>BKL critical sections are fully preemptable with this patch applied</li>

<li>there is no time wasted spinning on the BKL if there's BKL contention</li>

<li>no changes are needed for lock_kernel() users - the new
  semaphore-based approach is fully compatible with the BKL.</li>

</ul>

</p>

<p>code using lock_kernel()/unlock_kernel() will see very similar semantics
as they got from the BKL, so correctness should be fully preserved.
Per-CPU assumptions still work, locking exclusion and lock-recursion
still works the same way as it did with the BKL.</p>

<p>non-BKL code sees no overhead from this approach. (other than the
slighly smaller code due to the uninlining of the BKL APIs.)</p>

<p>(the patch is against vanilla 2.6.9-rc2. I have tested it on x86
UP+PREEMPT, UP+!PREEMPT, SMP+PREEMPT, SMP+!PREEMPT and x64 SMP+PREEMPT.)</p>

</quote>

<p>But Linus Torvalds replied:</p>

<quote who="Linus Torvalds">

<p>I really think this is wrong.</p>

<p>Maybe not from a conceptual standpoint, but that implementation with the
scheduler doing "reaquire_kernel_lock()" and doing a down() there is just
wrong, wrong, wrong.</p>

<p>If we're going to do a down() and block immediately after being scheduled,
I don't think we should have been picked in the first place.</p>

<p>Yeah, yeah, you have all that magic to not recurse by setting lock-depth
negative before doing the down(), but it still feels fundamentally wrong to
me. There's also the question whether this actually _helps_ anything, since
it may well just replace the spinning with lots of new scheduler activity.</p>

<p>And you make schedule() a lot more expensive for kernel lock holders by
copying the CPU map. You may have tested it on a machine where the CPU map
is just a single word, but what about the big machines?</p>

<p>Spinlocks really _are_ cheaper. Wouldn't it be nice to just continue
removing kernel lock users and keeping a very _simple_ kernel lock for
legacy issues?</p>

<p>In other words, I'd _really_ like to see some serious numbers for this.</p>

</quote>

<p>William Lee Irwin III remarked of Ingo's patch, <quote who="William Lee
Irwin III">One thing I like is that this eliminates the implicit dropping
on sleep as a source of bugs (e.g. it was recently pointed out to me that
setfl() uses the BKL to protect ->f_flags in a codepath spanning a sleeping
call to ->fasync()), where the semaphore may be retained while sleeping.
I originally wanted to make sleeping under the BKL illegal and sweep users
to repair when it is, but maybe that's unrealistic, particularly considering
that the sum of my BKL sweeps to date are one removal from procfs "protecting"
its access of nr_threads.</quote> Ingo also defended his approach, agreeing
with Linus that it numbers would be a good measure of the patch's value.</p>

<p>Elsewhere, Andi Kleen said of Ingo's original post, <quote who="Andi
Kleen">Interesting approach. Did you measure what it does to context switch
rates? Usually adding semaphores tends to increase them a lot.</quote>
Bill Davidsen replied:</p>

<quote who="Bill Davidsen">

<p>Is that (necessarily) a bad thing? If it results in less time waiting
for BKL, and/or more time doing user work, that may drive throughput and
responsiveness up. It depends if the time for two ctx is greater or less
than the spin time on BKL.</p>

<p>It would be nice to have the best of both worlds, use the semaphore if
there is a process on the run queue, and spin if not. That sounds complex,
and hopefully not worth the effort.</p>

</quote>

<p>Bill Huey replied, <quote who="Bill Huey">FreeBSD-current uses adaptive
mutexes. However they spin on that mutex only if the thread owning it
is running across another CPU at that time, otherwise it sleeps, maybe
priority inherited depending on the circumstance.</quote> And David S. Miller
remarked, <quote who="David S. Miller">This is how Solaris MUTEX objects
work too.</quote> Bill H. replied:</p>

<quote who="Bill Huey">

<p>FreeBSD can be considered a Solaris style kernel. In contract, I think the
Linux community has a few things up on FreeBSD/Solaris style SMP. Specifically,
the FreeBSD community has ignored a lot of the really hard work of pushing
down locks in favor of "getting fancier locks", which only abuses thread
priorities and the scheduler. A large part of it is because they have really
create a very complicated SMP infrastructure that less than a handful of
their kernel engineers really know how to use, 2-3, it seems.</p>

<p>Judging from how the Linux code is done and the numbers I get from Bill
Irwin in casual conversation, the Linux SMP approach is clearly the right
track at this time with it's hand honed per-CPU awareness of things.</p>

</quote>

<p>And David replied, <quote who="David S. Miller">This is what Linus
proclaimed 6 or 7 years ago when people were trying to convince us to do
things like Solaris and other big Unixes at the time.</quote> Bill H. said,
<quote who="Bill Huey">FreeBSD's SMPng project is stalled for the most part
and developers that disagree with that approach have move onto the DragonFly
BSD community.  It has a much more top-down driven locking system that's
conceptually CPU local called tokens, effectively deadlock free and difficult
to misused.  It's already been able to multi-thread the networking stack
using lock-less techniques, while the FreeBSD-current tree had to retract
their "all or nothing" approach with threading their network stack. Jeffery
Hsu is the main developer pushing that subsystem.</quote></p>

<p>Completely elswhere, after Ingo had posted several revisions of his
original patch, Linus admitted that, although he didn't "love it to death,"
he recommended putting it into Andrew Morton's -mm tree and seeing if anything
shook out.</p>

</section>

<section
  title="inotify 0.9 Released Against Kernel 2.6.8.1"
  subject="[RFC][PATCH] inotify 0.9"
  archive="http://www.google.com/groups?hl=en&amp;lr=&amp;ie=UTF-8&amp;selm=2GEmO-4Vd-45%40gated-at.bofh.it"
  posts="21"
  startdate="15 Sep 2004 07:52:45 -0800"
  enddate="20 Sep 2004 16:02:28 -0800"
>
<topic>Big O Notation</topic>
<topic>Ioctls</topic>
<topic>Real-Time</topic>

<p>John McCutchan said:</p>

<quote who="John McCutchan">

<p>I am releasing a new version of inotify. Attached is a patch for
2.6.8.1.</p>

<p>I am interested in getting inotify included in the mm tree.</p>

<p>Inotify is designed as a replacement for dnotify. The key difference's
are that inotify does not require the file to be opened to watch it,
when you are watching something with inotify it can go away (if path
is unmounted) and you will be sent an event telling you it is gone and
events are delivered over a fd not by using signals.</p>

<p>New in this version:
Driver now supports reading more than one event at a time
Bump maximum number of watches per device from 64 to 8192
Bump maximum number of queued events per device from 64 to 256</p>

<p>--COMPLEXITY--</p>

<p>I have been asked what the complexity of inotify is. Inotify has
2 path codes where complexity could be an issue:</p>

<p>Adding a watcher to a device<br />
        This code has to check if the inode is already being watched
        by the device, this is O(1) since the maximum number of
        devices is limited to 8.</p>

<p>Removing a watch from a device<br />
        This code has to do a search of all watches on the device to
        find the watch descriptor that is being asked to remove.
        This involves a linear search, but should not really be an issue
        because it is limited to 8192 entries. If this does turn in to
        a concern, I would replace the list of watches on the device
        with a sorted binary tree, so that the search could be done
        very quickly.</p>

<p>The calls to inotify from the VFS code has a complexity of O(1) so
inotify does not affect the speed of VFS operations.</p>

<p>--MEMORY USAGE--</p>

<p>The inotify data structures are light weight:</p>

<p>inotify watch is 40 bytes<br />
inotify device is 68 bytes<br />
inotify event is 272 bytes</p>

<p>So assuming a device has 8192 watches, the structures are only going
to consume 320KB of memory. With a maximum number of 8 devices allowed
to exist at a time, this is still only 2.5 MB</p>

<p>Each device can also have 256 events queued at a time, which sums to
68KB per device. And only .5 MB if all devices are opened and have
a full event queue.</p>

<p>So approximately 3 MB of memory are used in the rare case of
everything open and full.</p>

<p>Each inotify watch pins the inode of a directory/file in memory,
the size of an inode is different per file system but lets assume
that it is 512 byes.</p>

<p>So assuming the maximum number of global watches are active, this would
pin down 32 MB of inodes in the inode cache. Again not a problem
on a modern system.</p>

<p>On smaller systems, the maximum watches / events could be lowered
to provide a smaller foot print.</p>

<p>Older release notes:
I am resubmitting inotify for comments and review. Inotify has
changed drastically from the earlier proposal that Al Viro did not
approve of. There is no longer any use of (device number, inode number)
pairs. Please give this version of inotify a fresh view.</p>

<p>Inotify is a character device that when opened offers 2 IOCTL's.
(It actually has 4 but the other 2 are used for debugging)</p>

<p>INOTIFY_WATCH:<br />
        Which takes a path and event mask and returns a unique
        (to the instance of the driver) integer (wd [watcher descriptor]
        from here on) that is a 1:1 mapping to the path passed.
        What happens is inotify gets the inode (and ref's the inode)
        for the path and adds a inotify_watcher structure to the inodes
        list of watchers. If this instance of the driver is already
        watching the path, the event mask will be updated and
        the original wd will be returned.</p>

<p>INOTIFY_IGNORE:<br />
        Which takes an integer (that you got from INOTIFY_WATCH)
        representing a wd that you are not interested in watching
        anymore. This will:</p>

<p>        send an IGNORE event to the device
        remove the inotify_watcher structure from the device and
        from the inode and unref the inode.</p>

<p>After you are watching 1 or more paths, you can read from the fd
and get events. The events are struct inotify_event. If you are
watching a directory and something happens to a file in the directory
the event will contain the filename (just the filename not the full
path).</p>

<p>Aside from the inotify character device driver.
The changes to the kernel are very minor.</p>

<p>The first change is adding calls to inotify_inode_queue_event and
inotify_dentry_parent_queue_event from the various vfs functions. This
is identical to dnotify.</p>

<p>The second change is more serious, it adds a call to
inotify_super_block_umount
inside generic_shutdown_superblock. What inotify_super_block_umount does
is:</p>

<p>find all of the inodes that are on the super block being shut down,
sends each watcher on each inode the UNMOUNT and IGNORED event
removes the watcher structures from each instance of the device driver
and each inode.
unref's the inode.</p>

<p>I have tested this code on my system for over three weeks now and have
not had problems. I would appreciate design review, code review and
testing.</p>

</quote>

<p>Robert Love added:</p>

<quote who="Robert Love">

<p>I want to expand on why dnotify is awful and why inotify is a great
replacement, because dnotify's limitations are really showing up on
modern desktop systems.</p>

<p>Some technical issues with dnotify and why inotify solves the problem:</p>

<p>

<ul>

<li>dnotify requires one fd per watched directory.  this results
        in a lot of file descriptors if you are trying to do anything
        creative.  inotify solves this by only having one open file
        descriptor.</li>

<li>with dnotify, you open the fd on the directory to watch, which
        pins the directory.  this makes unmounting the backing
        filesystem impossible and means using dnotify on removable
        devices is nontrivial.  This is a problem with desktop systems.
        Not only does inotify solve this problem (by not requiring an
        open of each watched directory), but it even sends an "unmount"
        event when the watched directory is unmounted.</li>

<li>Using dnotify is, uh, interesting.  I mean, fcntl(2) and
        SIGIO?  You end up needing to use real-time signals.  Gross
        gross gross.  This does not working well with modern event-
        driven applications that use mainloops.  You end up needing a
        complicated daemon like FAM.  We don't want FAM, and in fact we
        should not even need a daemon (although we might want one).
        Conversely, inotify is trivial to use and integrates well and is
        select()-able.</li>

</ul>

</p>

<p>I have been going over the code for awhile now, and it looks good.  I
would really like to hear Al's opinion so we can move on fixing any
possible issues that he has.</p>

</quote>

<p>There was not a universally positive response to the patch. Very little
constructive discussion took place, but it was clear that some folks consider
John's approach a bit bloated.</p>

</section>

<section
  title="Stricter I/O Typechecking In 2.6"
  subject="Being more anal about iospace accesses.."
  archive="http://www.google.com/groups?hl=en&amp;lr=&amp;ie=UTF-8&amp;selm=2EKZh-7YB-33%40gated-at.bofh.it"
  posts="35"
  startdate="15 Sep 2004 08:30:42 -0800"
  enddate="18 Sep 2004 01:46:00 -0800"
>
<topic>PCI</topic>
<topic>Serial ATA</topic>

<mention>Jeff Garzik</mention>

<p>Linus Torvalds said:</p>

<quote who="Linus Torvalds">

<p>This is a background mail mainly for driver writers and/or architecture
people. Or others that are just interested in really low-level hw access
details. Others - please feel free to ignore.</p>

<blockquote>

<p>[This has been discussed to some degree already on the architecture
  mailing lists and obviously among the people who actually worked on it, but
  I thought I'd bounce it off linux-kernel too, in order to make people more
  aware of what the new type-checking does. Most people may have seen it as
  only generating a ton of new warnings for some crufty device drivers.]</p>

</blockquote>

<p>The background for this iospace type-checking change is that we've long
had some serious confusion about how to access PCI memory mapped IO (MMIO),
mainly because on a PC (and some non-PC's too) that IO really does look
like regular memory, so you can have a driver that just accesses a pointer
directly, and it will actually work on most machines.</p>

<p>At the same time, we've had the proper "accessor" functions (read[bwl](),
write[bwl]() and friends) that on purpose dropped all type information from the
MMIO pointer, mostly just because of historical reasons, and as a result some
drivers didn't use a pointer at all, but some kind of integer.  Sometimes even
one that couldn't _fit_ a MMIO address in it on a 64-bit machine.</p>

<p>In short, the PCI MMIO access case was largely the same as the user
pointer case, except the access functions were different (readb vs get_user)
and they were even less lax about checking for sanity. At least the user
access code required a pointer with the right size.</p>

<p>We've been very successful in annotating user pointers, and that found
a couple of bugs, and more importantly it made the kernel code much more
"aware" of what kind of pointer was passed around. In general, a big success,
I think. And an obvious example for what MMIO pointers should do.</p>

<p>So lately, the kernel infrastructure for MMIO accesses has become a _lot_
more strict about what it accepts. Not only do the MMIO access functions
want a real pointer (which is already more type-checking than we did before,
and causes gcc to spew out lots of warnings for some drivers), but as with
user pointers, sparse annotations mark them as being in a different address
space, and building the kernel with checking on will warn about mixing up
address spaces. So far so good.</p>

<p>So right now the current snapshots (and 2.6.9-rc2) have this enabled,
and some drivers will be _very_ noisy when compiled. Most of the regular
ones are fine, so maybe people haven't even noticed it that much, but some of
them were using things like "u32" to store MMIO pointers, and are generally
extremely broken on anything but an x86.  We'll hopefully get around to
fixing them up eventually, but in the meantime this should at least explain
the background for some of the new noise people may see.</p>

<p>Perhaps even more interesting is _another_ case of driver, though:
one that started warning not because it was ugly and broken, but because
it did something fairly rare but something that does happen occasionally:
it mixed PIO and MMIO accesses on purpose, because it drove hardware that
literally uses one or the other.</p>

<p>Sometimes such a "mixed interface" driver does it based on a compile
option that just #defines 'writel()' to 'inl()', sometimes it's a runtime
decision depending on the hardware or configuration.</p>

<p>The anal typechecking obviously ended up being very unhappy about this,
since it wants "void __iomem *" for MMIO pointers, and a normal "unsigned
long" for PIO accesses. The compile-time option could have been easily
fixed up by adding the proper cast when re-defining the IO accessor, but
that doesn't work for the dynamic case.</p>

<p>Also, the compile-time switchers often really _wanted_ to be dynamic,
but it was just too painful with the regular Linux IO interfaces to duplicate
the code and do things conditionally one way or the other.</p>

<p>To make a long story even longer: rather than scrapping the typechecking,
or requiring drivers to do strange and nasty casts all over the place, there's
now a new interface in town. It's called "iomap", because it extends the old
"ioremap()" interface to work on the PIO accesses too.</p>

<p>That way, the drivers that really want to mix both PIO and MMIO accesses can
very naturally do it: they just need to remap the PIO space too, the same way
that we've required people to remap the MMIO space for a long long time.</p>

<p>For example, if you don't know (or, more importantly - don't care) what
kind of IO interface you use, you can now do something like</p>

<p>        void __iomem * map = pci_iomap(dev, bar, maxbytes);<br />
        ...<br />
        status = ioread32(map + DRIVER_STATUS_OFFSET);</p>

<p>and it will do the proper IO mapping for the named PCI BAR for that
device. Regardless of whether the BAR was an IO or MEM mapping. Very
convenient for cases where the hardware migt expose its IO window in either
(or sometimes both).</p>

<p>Nothing in the current tree actually uses this new interface, although Jeff
has patches for SATA for testing (and they clean up the code quite noticeably,
never mind getting rid of the warnings).  The interface has been implemented
by yours truly for x86 and ppc64, and David did a first-pass version for
sparc64 too (missing the "xxxx_rep()" functions that were added a bit later,
I believe).</p>

<p>So far experience seems to show that it's a very natural interface for
most non-x86 hardware - they all tend to map in both PIO and MMIO into one
address space _anyway_, so the two aren't really any different. It's mainly
just x86 and it's ilk that actually have two different interfaces for the
two kinds of PCI accesses, and at least in that case it's trivial to encode
the difference in the virtual ioremap pointer.</p>

<p>The best way to explain the interface is to just point you guys at
the &lt;asm-generic/iomap.h&gt; file, which isn't very big, has about as
much comments than code, and contains nothing but the necessary function
declarations. The actual meaning of the functions should be pretty obvious
even without the comments.</p>

<p>Feel free to flame or discuss rationally,</p>

</quote>

<p>J&#246;rn Engel was a bit alarmed by Linus' use of void pointer
arithmetic in his code example.  He said, <quote who="J&#246;rn Engel">C
now supports pointer arithmetic with void*?  I hope the width of a void is
not architecture dependent, that would introduce more subtle bugs.</quote>
Jeff Garzik and others pointed out that this was a GCC extension and had
been used in the kernel for a long time. Roland Dreier also said, <quote
who="Roland Dreier">However, I somewhat agree -- it's ugly for drivers rely
on this and do arithmetic on void *.  It should be OK for a driver to use
char __iomem * for its IO base if it needs to add in offsets, right?</quote>
Linus replied:</p>

<quote who="Linus Torvalds">

<p>"char __iomem *" will certainly work - all the normal pointer conversions
are ok. Some people in fact use pointers to structures in MMIO space, and
this is quite reasonable when working with a chip that uses "mailboxes"
for commands.</p>

<p>However, I disagree with "void *" arithmetic being ugly. It's a very nice
feature to have a pointer that can be validly cast to any other type, and
that is the whole _point_ of "void *". The fact that C++ got that wrong is
arguably the worst failing of the language, causing tons of unnecessary
casts that can silently hide real bugs (maybe the thing you cast wasn't a
"void *" in the first place, but you'll never know - the compiler will do
the cast for you).</p>

<p>For example, to go back to the mailbox example, let's say that your
hardware has an IO area that is 8kB in size, with the last 4kB being
mailboxes.</p>

<p>The _sane_ way to do that is to do</p>

<p>        void __iomem *base_io = ioremap(...);<br />
        struct mailbox __iomem *mbox = base_io + MAILBOX_OFFSET;</p>

<p>and then just work on that.</p>

<p>In contrast, havign to cast to a "char *" in order to do arithmetic, and
then casting back to the resultant structure type pointer is not only
ugly and unreadable, it's a lot more prone to errors as a result.</p>

<p>In other words, think of "void *" as a pointer to storage. Not "char"
(which is the C name for a signed byte), but really, it's the pointer to
whatever underlying memory there is. And a _fundamental_ part of such
memory is the fact that it is addressable. Thus "pointer to storage
arithmetic" really does make sense on a very fundamental level. It has
nothing to do with C types, and that also explains why "void *" silently
converts to anything else. It's a very internally consistent world-view.</p>

<p>Now, I disagree with gcc when it comes to actually taking the "size" of
void. Gcc will silently accept</p>

<p>        void *x;<br />
        x = malloc(sizeof(*x));</p>

<p>which I consider to be an abomination (and the above _can_ happen, quite
easily, as part of macros for doing allocation etc - nobody would write
it in that form, but if you have an "MEMALLOC(x)" macro that does the
sizeof, you could end up trying to feed the compiler bogus code).</p>

<p>The fact that you can do arithmetic on typeless storage does _not_ imply
that typeless storage would have a "size" in my book.</p>

<p>So sparse will say:</p>

<p>        warning: cannot size expression</p>

<p>and refuse to look at broken code like the above. But hey, the fact that I
have better taste than anybody else in the universe is just something I
have to live with. It's not easy being me.</p>

</quote>

<p>Elsewhere, Deepak Saxena asked, <quote who="Deepak Saxena">Since we
are on the subject of io-access, I would like a clarification/opinion
on the read*/write* &amp; in*/out* accessors (and now the ioread/write
equivalents). Are these functions only meant to be used for PCI memory-mapped
devices or _any_ memory mapped devices?  Same with ioremap(). I ask because
there are bits of code in the kernel that use these on non-PCI devices and
this sometimes causes some complication in platform-level code.</quote> Linus
replied:</p>

<quote who="Linus Torvalds">

It really depends on the bus architecture.

<p>At some point, if the bus is different enough from a "normal" setup, you
should just use your own accessor functions. Trying to overload
"readl/writel" is just too painful.</p>

<p>However, at that point you should also realize that you can't re-use _any_
of the existing chip drivers, and you'll have to write your own. If the
bus is exotic enough, that's not a problem, and you'd have to do that
anyway. But there really aren't all that many "exotic" buses around any
more.</p>

<p>Quite frankly, of your two suggested interfaces, I would select neither.
I'd just say that if your bus is special enough, just write your own
drivers, and use</p>

<p>        cookie = ixp4xx_iomap(dev, xx);<br />
        ...<br />
        ixp4xx_iowrite(val, cookie + offset);</p>

<p>which is perfectly valid. You don't have to make these devices even _look_
like a PCI device. Why should you?</p>

</quote>

<p>Deepak replied, <quote who="Deepak Saxena">some of those devices are not
that special. For example, the on-board 16550 is accessed using readb/writeb
in the 8250.c driver.  I don't think we want to add that level of low-level
detail to that driver and instead should just hide it in the platform code. I
look at it from the point of view that the driver should not care about
how the access actually occurs on the bus. It just says, write data foo
at location bar regardless of whether bar is ISA, PCI, on-chip, RapidIO,
etc and that writing of the data is hidden in the implementation of the
accessor API.</quote> Linus did not reply to this.</p>

<p>Elsewhere, Roland asked, <quote who="Roland Dreier">while we're on the
subject of new sparse checks, could you give a quick recap of the semantics
of the new __leXX types (and what __bitwise means to sparse)?  I don't think
I've ever seen this stuff described on LKML.</quote> Linus replied:</p>

<quote who="Linus Torvalds">

<blockquote>

<p>[The bitwise checks are actually by Al Viro, but I'll explain the basic
idea. Al is Cc'd so that he can add any corrections or extensions.]</p>

</blockquote>

<p>Sparse allows a number of extra type qualifiers, including address spaces
and various random extra restrictions on what you can do with them. There
are "context" bits that allow you to use a symbol or type only in certain
contexts, for example, and there are type qualifiers like "noderef" that
just say that a pointer cannot be dereferenced (it looks _exactly_ like a
pointer in all other respects, but trying to actually access anything
through it will cause a sparse warning).</p>

<p>The "bitwise" attribute is very much like the "noderef" one, in that it
restricts how you can use an expression of that type. Unlike "noderef",
it's designed for integer types, though. In fact, sparse will refuse to
apply the bitwise attribute to non-integer types.</p>

<p>As the name suggests, a "bitwise" expression is one that is restricted to
only a certain "bitwise" operations that make sense within that class. In
particular, you can't mix a "bitwise" class with a normal integer
expression (the constant zero happens to be special, since it's "safe"
for all bitwise ops), and in fact you can't even mix it with _another_
bitwise expression of a different type.</p>

<p>And when I say "different", I mean even _slightly_ different. Each typedef
creates a type of it's own, and will thus create a bitwise type that is
not compatible with anything else. So if you declare</p>

<blockquote>

<p>        int __bitwise i;<br />
        int __bitwise j;</p>

</blockquote>

<p>the two variables "i" and "j" are _not_ compatible, simply because they
were declared separately, while in the case of</p>

<blockquote>

<p>        int __bitwise i, j;</p>

</blockquote>

<p>they _are_ compatible. The above is a horribly contrieved example, as it
shows an extreme case that doesn't make much sense, but it shows how
"bitwise" always creates its own new "class".</p>

<p>Normally you'd always use "__bitwise"  in a typedef, which effectively
makes that particular typedef one single "bitwise class". After that, you
can obviously declare any number of variables in that class.</p>

<p>Now apart from the classes having to match, "bitwise" as it's name
suggests, also restricts all operations within that class to a subset of
"bit-safe" operations. For example, addition isn't "bit-safe", since
clearly the carry-chain moves bits around. But you can do normal bit-wise
operations, and you can compare the values against other values in the
same class, since those are all "bit-safe".</p>

<p>Oh, as an example of something that isn't obviously bit-safe: look out for
things like bit negation: doing a ~ is ok on an bitwise "int" type, but it
is _not_ ok on a bitwise "short" or "char". Why?  Because on a bitwise
"int" you actually stay within the type. But doing the same thing on a
short or char will move "outside" the type by virtue of setting the high
bits (normal C semantics: a short gets promoted to an "int", so doign a
bitwise negation on a short will actually set the high bits).</p>

<p>So as far as sparse is concerned, a "bitwise" type is not really so much
about endianness as it is about making sure bits are never lost or moved
around.</p>

<p>For example, you can use the bitwise operation to verify the __GFP_XXX
mask bits. Right now they are just regular integers, which means that you
can write</p>

<blockquote>

<p>        kmalloc(GFP_KERNEL, size);</p>

</blockquote>

<p>and the compiler will not notice anything wrong. But something is
_seriously_ wrong: the GFP_KERNEL should be the _second_ argument. If we
mark it to be a "bitwise" type (which it is), that bug would have been
noticed immediately, and you could still do all the operations that are
valid of GFP_xxx values.</p>

<p>See the usage?</p>

<p>In the byte-order case, what we have is:</p>

<blockquote>

<p>        typedef __u16 __bitwise __le16;<br />
        typedef __u16 __bitwise __be16;<br />
        typedef __u32 __bitwise __le32;<br />
        typedef __u32 __bitwise __be32;<br />
        typedef __u64 __bitwise __le64;<br />
        typedef __u64 __bitwise __be64;</p>

</blockquote>

<p>and if you think about the above rules about what is acceptable for
bitwise types, you'll likely immediately notivce that it automatically
means</p>

<p>

<ul>

<li>you can never assign a __le16 type to any other integer type or any
   other bitwise type. You'd get a warnign about incompatible types. Makes
   sense, no?</li>

<li>you can only do operations that are safe within that byte order. For
   example, it is safe to do a bitwise "&amp;" on two __le16 values. Clearly
   the result is meaningful.</li>

<li>

<p>if you want to go outside that bitwise type, you have to convert it
   properly first. For example, if you want to add a constant to a __le16
   type, you can do so, but you have to use the proper sequence:</p>

<blockquote>

<p>        __le16 sum, a, b;</p>

<p>        sum = a + b;    /* INVALID! "warning: incompatible types for operation (+)" */<br />
        sum = cpu_to_le16(le16_to_cpu(a) + le16_to_cpu(b));     /* Ok */</p>

</blockquote>

</li>

</ul>

</p>

<p>See?</p>

<p>In short, "bitwise" is about more than just byte-order, but the semantics
of bitwise-restricted ops happen to be the semantics that are valid for
byte-order operations too.</p>

<p>Oh, btw, right now you only get the warnings from sparse if you use
"-Wbitwise" on the command line. Without that, sparse will ignore the
bitwise attribute.</p>

</quote>

<p>David Woodhouse replied:</p>

<quote who="David Woodhouse">

<p>Yeah right, that latter case is _so_ much more readable, and makes it
_so_ easy for the compiler to optimise precisely when it wants to do the
byte-swapping, especially if the back end has load-and-swap or
store-and-swap instructions. :)</p>

<p>It's even nicer when it ends up as:</p>

<p>        sum = cpu_to_le16(le16_to_cpu(a) + le16_to_cpu(b));     /* Ok */<br />
        sum |= c;<br />
        sum = cpu_to_le16(le16_to_cpu(sum) + le16_to_cpu(d));</p>

<p>I'd really quite like to see the real compiler know about endianness,
too. I dare say I _could_ optimise the above (admittedly contrived but
not _so_ unlikely) case, but I don't _want_ to hand-optimise my code --
that's what I keep a compiler _for_.</p>

</quote>

<p>Linus replied:</p>

<quote who="Linus Torvalds">

<p>It's not about readability.</p>

<p>It's about the first case being WRONG!</p>

<p>You can't add two values in the wrong byte-order. It's not an operation
that makes sense. You _have_ to convert them to CPU byte order first.</p>

<p>I certainly agree that the first version "looks nicer".</p>

</quote>

<p>Regarding David's posted snippet, Linus went on:</p>

<quote who="Linus Torvalds">

<p>This is actually the strongest argument _against_ hiding endianness in the
compiler, or hiding it behind macros. Make it very explicit, and just make
sure there are tools (ie 'sparse') that can tell you when you do something
wrong.</p>

<p>Any programmer who sees the above will go "well that's stupid", and
rewrite it as something saner instead. You can certainly rewrite it as</p>

<p>        cpu_sum = le16_to_cpu(a) + le16_to_cpu(b);<br />
        cpu_sum |= le16_to_cpu(c);<br />
        cpu_sum += le16_to_cpu(d);<br />
        sum = cpu_to_le16(d);</p>

<p>which gets rid of the double conversions.</p>

<p>But if you hide the endianness in macro's, you'll never see the mess at
all, and won't be able to fix it.</p>

</quote>

<p>And regarding the compiler having knowledge of endianness, he added:</p>

<quote who="Linus Torvalds">

<p>I would have agreed with you some time ago. Having been bitten by too damn
many bompiler bugs I'e become convinced that the compiler doing things behind
your back to "help" you just isn't worth it. Not in a kernel, at least. It's
much better to build up good typechecking and the infrastructure to help
you get the job done.</p>

<p>Expressions like the above might happen once or twice in a project with
several million lines of code. It's just not worth compiler infrastructure
for - that just makes people use it as if it is free, and impossible to find
the bugs when they _do_ happen. Much better to have a type system that can
warn about the bad uses, but that doesn't actually change any of the code
generated.</p>

</quote>

</section>

<section
  title="New Maintainers Sought For kbd, man, man-pages, And util-linux"
  subject="OOM &amp; [OT] util-linux-2.12e"
  archive="http://groups.google.com/groups?hl=en&amp;lr=lang_en&amp;safe=off&amp;selm=2Gi2I-68w-13%40gated-at.bofh.it&amp;prev=/groups%3Fq%3D%2522OOM%2B%2526%2B%255BOT%255D%2Butil-linux-2.12e%2522%26hl%3Den%26btnG%3DGoogle%2BSearch"
  posts="44"
  startdate="19 Sep 2004 14:05:02 -0800"
  enddate="22 Sep 2004 10:39:38 -0800"
>

<p>Andries Brouwer said:</p>

<quote who="Andries Brouwer">

<p>Just released (on <a
href="ftp://ftp.win.tue.nl/pub/linux-local/utils/util-linux">ftp.win.tue.nl
in /pub/linux-local/utils/util-linux</a>) util-linux-2.12e.</p>

<p>The reason for this release were complaints that mount and umount OOM the
kernel when the number of mounts is large.  And indeed - I tried with 30000
mounts and the OOM-killer killed everything in sight, including X's console,
making X exit, killing all remaining processes.</p>

<p>The new versions have been polished a little bit so as not to waste too much
memory, and now survive the 30000 mount/umount test for me.  Further polishing
is needed for the case of large numbers of mounts; when /etc/mtab is not a
symlink to /proc/mounts then umount -a has quadratic behaviour (it updates
mtab after each unmount) and that gets terribly slow.</p>

<p>About OOM: I am still of the opinion that the default state of the kernel
must be one where OOM does not occur and malloc() tells us that we are out
of memory. A system that suddenly decides to kill all processes is really
very poor and unreliable.  Users can enable other behaviours if they don't
care about reliability.</p>

<p>About mount: I wondered whether I should rewrite [u]mounts's handling
of /etc/mtab so as to be a bit faster. But it seems a waste of time -
/proc/mounts has many advantages: automatically up-to-date, correct also
when namespaces are used, much faster. On the other hand, /etc/mtab contains
mount options that are sometimes needed later.  If it were possible to store
the mount options in the kernel, making them visible in /proc/mounts, then
we could forget /etc/mtab altogether.</p>

<p>People have asked repeatedly for a way to mark lines in /etc/fstab so
as to make clear that such lines are managed by some GUI or other external
program. Labels like "kudzu".  In this release I added a comment convention
for /etc/fstab: options can have a part starting with \; - that part is
ignored by mount but can be used by other programs managing fstab.</p>

<p>If we would put the mount options in /proc/mounts, and introduced
a comment convention (say, the part starting with \: is ignored by the
kernel but can be used by programs reading /proc/mounts), then /etc/mtab
can die. Comments? Better solutions?</p>

<p>About util-linux and stuff: I have maintained various packages for ten
years or so - it may be time to pass things on to someone else.  Write to
aeb@cwi.nl if you are interested in taking over or co-maintaining kbd or
man or man-pages or util-linux.</p>

</quote>

<p>There was a medium-to-lengthy technical discussion, but no one responded
publically to his request for new maintainers.</p>

</section>

<section
  title="ACPI SysFS Interface And Documentation"
  subject="[PATCH/RFC] exposing ACPI objects in sysfs"
  archive="http://www.google.com/groups?hl=en&amp;lr=&amp;ie=UTF-8&amp;selm=2GEcU-4Pm-17%40gated-at.bofh.it"
  posts="15"
  startdate="20 Sep 2004 13:41:16 -0800"
  enddate="21 Sep 2004 13:02:18 -0800"
>
<topic>FS: sysfs</topic>
<topic>Power Management: ACPI</topic>
<topic>Version Control</topic>

<mention>Pavel Machek</mention>
<mention>Andi Kleen</mention>
<mention>Andrew Morton</mention>

<p>Alex Williamson said:</p>

<quote who="Alex Williamson">

<p>I've lost track of how many of these patches I've done, but here's
the much anticipated next revision ;^)  The purpose of this patch
is to expose ACPI objects in the already existing namespace in sysfs
(/sys/firmware/acpi/namespace/ACPI).  There's a lot of information currently
available in ACPI namespace, but no way to get at it from userspace.
What's new in this version:</p>

<p>

<ul>

<li>Untied from acpi_bus_scan() to be made standalone - loadable as a module
now!</li>

<li>Removed some questionable interfaces (arg count, saving and re- loading
AML).  If you don't know how many args a method takes, don't call it.
The other stuff was likely far too dangerous anyway.</li>

<li>Re-worked the writing of method parameters.  Now users should write an
acpi_object_list structure to the object.  All pointers should be replaced
by offsets into the buffer, just like return buffers, packages and strings
previously</li>

<li>Added "nonstd" and "dangerous" module options to limit what namespace
objects get exposed.  I'm sure these need refinement, but at least a little
protection from shooting yourself in the foot.</li>

<li>Numerous fixes and cleanups</li>

</ul>

</p>

<p>Changes to existing kernel code are pretty trivial now.  The major change
is adding open() and release() functions to the sysfs bin_file support.
This allows backing store on a per-open basis, and eliminates multiple
reader/writer problems.  Besides, it seems reasonable for a file entry to
able to have a little more control over it's private_data structure.</p>

<p>The other generic kernel change is to export acpi_os_allocate(). This
is because I chose to use acpi_buffers for internal management and wanted
a consistent alloc/free interface for them.  I'd be happy to separate these
into individual patches if they're acceptable.</p>

<p>I'll try to make my debug utility available shortly so people can poke
around on their systems and see what's available.  For a lot of things,
using xxd to dump the object provides some info and is sufficient for _ON/_OFF
type methods.  Let me know if you have any feedback or bug reports.  Patch is
against current bitkeeper, but should apply against almost anything recent.
Thanks,</p>

</quote>

<p>Pavel Machek suggested adding some stuff to the /Documentation directory,
and Alex agreed with this. A couple of hours later, he posted a documentation
patch to /Documentation/acpi/acpi_sysfs, explaining the ACPI interface
throught SysFS. Andi Kleen and Pavel offered some technical criticisms,
and the three of them probably went to private email with Andrew Morton to
hash out some details.</p>

</section>

<section
  title="hotplug Scripts Version 20040920 Released"
  subject="[ANNOUNCE] 2004-04-20 release of hotplug scripts"
  archive="http://www.google.com/groups?hl=en&amp;lr=&amp;ie=UTF-8&amp;selm=2GH15-6Tz-15%40gated-at.bofh.it"
  posts="1"
  startdate="20 Sep 2004 16:38:27 -0800"
>
<topic>Backward Compatibility</topic>
<topic>Hot-Plugging</topic>

<p>Greg KH said:</p>

<quote who="Greg KH">

<p>I've just packaged up the latest Linux hotplug scripts into a release,
which can be found at:
        <a href="http://www.kernel.org/pub/linux/utils/kernel/hotplug/hotplug-2004_09_20.tar.gz">kernel.org/pub/linux/utils/kernel/hotplug/hotplug-2004_09_20.tar.gz</a>
or for those who like bz2 packages:
        <a href="http://www.kernel.org/pub/linux/utils/kernel/hotplug/hotplug-2004_09_20.tar.bz2">kernel.org/pub/linux/utils/kernel/hotplug/hotplug-2004_09_20.tar.bz2</a></p>

<p>It contains a lot of little bug fixes, and the addition of the isapnp.rc
support.</p>

<p>The main web site for the linux-hotplug project can be found at:
<a href="http://linux-hotplug.sf.net/">http://linux-hotplug.sf.net/</a>
which contains lots of documentation on the whole linux-hotplug
process.</p>

<p>The release is still backwards compatible with 2.4, so there is no need
to worry about upgrading.</p>

</quote>

</section>

<section
  title="Year 9223372034708485227 Problem"
  subject="year 9223372034708485227 problem"
  archive="http://www.google.com/groups?hl=en&amp;lr=&amp;ie=UTF-8&amp;selm=2Hn0k-2wz-9%40gated-at.bofh.it"
  posts="5"
  startdate="22 Sep 2004 13:30:29 -0800"
  enddate="22 Sep 2004 14:51:21 -0800"
>
<topic>FS: ReiserFS</topic>

<p>Pavel Machek's brain exploded one day, and as he was picking up the broken
shards, he noticed that the 2.4 Linux kernel has a 'year 9223372034708485227
problem'. According to his tests, on January 1, 9223372034708485227 all
2.4 systems will cease to process commands, and just give segfaults. He
said, <quote who="Pavel Machek">I wonder how much damage it will do to my
filesystems: touch foo seems to store the right year into reiserfs. I wonder
if it is still there after reboot? No, it is not. That looks like kernel
bug :-).</quote></p>

</section>

</kc>

