<?xml version="1.0" ?>

<kc>

<title>Kernel Traffic</title>

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

<issue num="47" date="20 Dec 1999 00:00:00 -0800" />

<intro>

<p>I've been working on a sister-page for Kernel Traffic for awhile, called the
<a href="http://www.linuxcare.com/developers/kernel">Kernel Journal</a>, and
now it's pretty much ready. It keeps tracks of kernel-related project
announcements on the linux-kernel mailing list.</p>

</intro>

<stats posts="1388" size="5397" contrib="415" multiples="193" lastweek="116">

<person posts="64" size="214" who="Alan Cox " />
<person posts="63" size="244" who="Andrea Arcangeli " />
<person posts="58" size="251" who="Ingo Molnar " />
<person posts="46" size="180" who="Linus Torvalds " />
<person posts="30" size="103" who="Alexander Viro " />
<person posts="29" size="104" who="Richard Gooch " />
<person posts="24" size="85" who="Guest section DW " />
<person posts="23" size="82" who="Pavel Machek " />
<person posts="19" size="64" who="Manfred Spraul " />
<person posts="19" size="62" who="Tigran Aivazian " />
<person posts="18" size="80" who="Erich Boleyn " />
<person posts="18" size="55" who="Stephen C. Tweedie " />
<person posts="16" size="71" who="Gerard Roudier " />
<person posts="16" size="59" who="Andrei Pitis " />
<person posts="16" size="51" who="Richard B. Johnson " />
<person posts="16" size="50" who=" (Davide Libenzi)" />
<person posts="15" size="47" who="Jamie Lokier " />
<person posts="14" size="46" who="Peter Samuelson " />
<person posts="14" size="43" who="Jeff Garzik " />
<person posts="13" size="47" who="Keith Owens " />
<person posts="12" size="55" who="" />
<person posts="12" size="41" who="James Simmons " />
<person posts="11" size="43" who="Oliver Xymoron " />
<person posts="11" size="35" who="Johannes Erdfelt " />
<person posts="11" size="34" who="Jens Axboe " />
<person posts="10" size="44" who="Khimenko Victor " />
<person posts="10" size="33" who="Ulrich Drepper " />
<person posts="9" size="35" who="Jeff V. Merkey " />
<person posts="9" size="31" who="Wakko Warner " />
<person posts="9" size="29" who="Jes Sorensen " />
<person posts="9" size="29" who="Andi Kleen " />
<person posts="8" size="106" who="Martin Dalecki " />
<person posts="8" size="56" who="David Schwartz " />
<person posts="8" size="30" who="Benjamin C.R. LaHaise " />
<person posts="8" size="30" who="Wichert Akkerman " />
<person posts="8" size="29" who=" (Rogier Wolff)" />
<person posts="8" size="24" who="Thomas Sailer " />
<person posts="8" size="22" who="David S. Miller " />
<person posts="7" size="32" who="Artur Skawina " />
<person posts="7" size="28" who="David Dyck " />
<person posts="7" size="27" who="Manfred " />
<person posts="7" size="27" who="" />
<person posts="7" size="26" who="Steve Dodd " />
<person posts="7" size="26" who="Ryan Lortie " />
<person posts="6" size="27" who="William J. Earl " />
<person posts="6" size="24" who="Andre Hedrick " />
<person posts="6" size="23" who="David Weinehall " />
<person posts="6" size="22" who="" />
<person posts="6" size="22" who="Adam J. Richter " />
<person posts="6" size="19" who="Vojtech Pavlik " />
<person posts="6" size="17" who="Jeffrey B. Siegal " />
<person posts="6" size="16" who="Tim Waugh " />
<person posts="5" size="30" who="Linux Lists " />
<person posts="5" size="19" who="Brandon S. Allbery KF8NH " />
<person posts="5" size="19" who="Zachary Amsden " />
<person posts="5" size="18" who="Erich Boleyn " />
<person posts="5" size="16" who="Peter T. Breuer " />
<person posts="5" size="16" who="Mike Phillips " />
<person posts="5" size="13" who="Dan Hollis " />
<person posts="5" size="13" who=" (Hans-Joachim Baader)" />
<person posts="4" size="42" who="Marco Colombo " />
<person posts="4" size="25" who="Prasanna Subash " />
<person posts="4" size="22" who="Josef =?iso-8859-1?Q?H=F6=F6k?= " />
<person posts="4" size="20" who="Rik Faith " />
<person posts="4" size="19" who="Marcin Dalecki " />
<person posts="4" size="16" who="Brion Vibber " />
<person posts="4" size="16" who="Olivier Galibert " />
<person posts="4" size="15" who="Mike Galbraith " />
<person posts="4" size="15" who="Peter J. Braam " />
<person posts="4" size="15" who=" (Kanoj Sarcar)" />
<person posts="4" size="14" who="Horst von Brand " />
<person posts="4" size="14" who="Brian Gerst " />
<person posts="4" size="13" who="Russell Coker " />
<person posts="3" size="17" who="John Wright " />
<person posts="3" size="15" who="Heinz Diehl " />
<person posts="3" size="14" who="Stuart Inglis " />
<person posts="3" size="13" who="Davide Libenzi " />
<person posts="3" size="13" who="Terry Hardie " />
<person posts="3" size="13" who="Marius Aamodt Eriksen " />
<person posts="3" size="13" who=" (Knut Aksel =?iso-8859-1?Q?R=F8ysland?= )" />
<person posts="3" size="12" who="Jean-Philippe GRIMALDI " />
<person posts="3" size="12" who="Hans Reiser " />
<person posts="3" size="12" who="David Malone " />
<person posts="3" size="12" who="Egbert Eich " />
<person posts="3" size="12" who="ELEMENTI S.A. " />
<person posts="3" size="12" who="Richard A Nelson " />
<person posts="3" size="11" who=" (H. Peter Anvin)" />
<person posts="3" size="11" who="Marek Habersack " />
<person posts="3" size="11" who="Paul Flinders " />
<person posts="3" size="10" who="Zach Brown " />
<person posts="3" size="10" who="Jeff DeFouw " />
<person posts="3" size="10" who="David Whysong " />
<person posts="3" size="10" who="Eleonora Autore " />
<person posts="3" size="10" who="Dave Gilbert " />
<person posts="3" size="9" who="Theodore Y. Ts'o " />
<person posts="3" size="9" who=" (Jim Gettys)" />
<person posts="3" size="9" who="Pauline Middelink " />
<person posts="3" size="9" who="Khimenko Victor " />
<person posts="3" size="9" who="Sergey Kubushin " />
<person posts="3" size="9" who="Paul Rusty Russell " />
<person posts="3" size="9" who="Jeff Dike " />
<person posts="3" size="9" who="Matti Aarnio " />
<person posts="3" size="9" who="Chris Wedgwood " />
<person posts="3" size="9" who="Alan Curry " />
<person posts="3" size="9" who="" />
<person posts="3" size="9" who="Richard Henderson " />
<person posts="3" size="9" who="Pete Wyckoff " />
<person posts="3" size="8" who="Pavel Machek " />
<person posts="3" size="8" who="Trond Myklebust " />
<person posts="3" size="8" who="Jan Kara " />
<person posts="3" size="8" who="Stefan Monnier " />
<person posts="3" size="8" who="Francis GALIEGUE " />
<person posts="3" size="8" who=" (Miquel van Smoorenburg)" />
<person posts="3" size="8" who="Jones D (ISaCS) " />
<person posts="3" size="8" who=" (Miklos Szeredi)" />
<person posts="3" size="8" who="Matthias Riese " />
<person posts="3" size="7" who="Aaron Tiensivu " />
<person posts="2" size="44" who="Chip Salzenberg " />
<person posts="2" size="20" who="Matthew Harrell " />
<person posts="2" size="16" who="M Sweger " />
<person posts="2" size="14" who="" />
<person posts="2" size="13" who="Alexandre Hautequest " />
<person posts="2" size="13" who="Nagy Tibor " />
<person posts="2" size="10" who="Zdenek Kabelac " />
<person posts="2" size="10" who="Leeuw van der, Tim " />
<person posts="2" size="10" who="Scott Henry " />
<person posts="2" size="10" who="Dr. Michael Weller " />
<person posts="2" size="9" who="Serge Robyns " />
<person posts="2" size="9" who="Julian Anastasov " />
<person posts="2" size="9" who="" />
<person posts="2" size="9" who="Drago Goricanec " />
<person posts="2" size="9" who="Paul " />
<person posts="2" size="8" who="Dimitris Michailidis " />
<person posts="2" size="8" who="Gabriel Paubert " />
<person posts="2" size="8" who="TimO " />
<person posts="2" size="8" who="Sean Goodman " />
<person posts="2" size="8" who="Anton Ivanov " />
<person posts="2" size="8" who="Jakma, Paul " />
<person posts="2" size="8" who="Anders Hammarquist " />
<person posts="2" size="7" who="Riley Williams " />
<person posts="2" size="7" who="Chris Wing " />
<person posts="2" size="7" who="M.J. Galan " />
<person posts="2" size="7" who="Clayton Weaver " />
<person posts="2" size="7" who="" />
<person posts="2" size="7" who="Matthias Andree " />
<person posts="2" size="7" who="Paul Ho " />
<person posts="2" size="7" who=" (Kai Henningsen)" />
<person posts="2" size="7" who="Nicholas R LeRoy " />
<person posts="2" size="7" who="" />
<person posts="2" size="7" who="Deon Stoltz " />
<person posts="2" size="6" who="Richard van Denzel " />
<person posts="2" size="6" who="Harald Dunkel " />
<person posts="2" size="6" who="Gregoire FAVRE " />
<person posts="2" size="6" who="Martin Vogt " />
<person posts="2" size="6" who="Kjetil Torgrim Homme " />
<person posts="2" size="6" who="Dominik Kubla " />
<person posts="2" size="6" who="Neil Brown " />
<person posts="2" size="6" who="David Mosberger " />
<person posts="2" size="6" who="Adam Heath " />
<person posts="2" size="6" who="Steve Underwood " />
<person posts="2" size="6" who="Brent M. Smith " />
<person posts="2" size="6" who="David Wragg " />
<person posts="2" size="6" who="Rik van Riel " />
<person posts="2" size="6" who="Daniel Kobras " />
<person posts="2" size="6" who="=?iso-8859-1?Q?Herv=E9_MORILLON?= " />
<person posts="2" size="6" who="Gergely Madarasz " />
<person posts="2" size="6" who="Jim Nance " />
<person posts="2" size="6" who="H. Peter Anvin " />
<person posts="2" size="6" who="Joseph Acosta " />
<person posts="2" size="6" who="Benno Senoner " />
<person posts="2" size="5" who="Nat Lanza " />
<person posts="2" size="5" who="Martin Mares " />
<person posts="2" size="5" who="Roman Zippel " />
<person posts="2" size="5" who="Matthew Kirkwood " />
<person posts="2" size="5" who="" />
<person posts="2" size="5" who="Thomas Waldmann " />
<person posts="2" size="5" who="Richard Henderson " />
<person posts="2" size="5" who="SK " />
<person posts="2" size="5" who="Ralf Baechle " />
<person posts="2" size="5" who="Yann DRONEAUD " />
<person posts="2" size="5" who="Eric PAIRE " />
<person posts="2" size="5" who="Marc SCHAEFER " />
<person posts="2" size="5" who="John Anthony Kazos Jr. " />
<person posts="2" size="5" who="Chris Sears " />
<person posts="2" size="5" who="DAVID BALAZIC " />
<person posts="2" size="5" who="Jussi Hamalainen " />
<person posts="2" size="5" who="Erik Petersen " />
<person posts="2" size="5" who="Mikulas Patocka " />
<person posts="2" size="5" who="Harald Milz " />
<person posts="2" size="5" who="Dale Harris " />
<person posts="2" size="5" who="Brian Macy " />
<person posts="2" size="4" who="Samuli Kaski " />
<person posts="2" size="4" who="Brad Douglas " />
<person posts="1" size="26" who="Robert de Vries " />
<person posts="1" size="21" who="Peter Rival " />
<person posts="1" size="18" who="Kjartan Maraas " />
<person posts="1" size="16" who="=?ISO-8859-1?Q?Pasi_K=E4rkk=E4inen?= " />
<person posts="1" size="16" who="Max Parke " />
<person posts="1" size="15" who="Alex Buell " />
<person posts="1" size="15" who="Alessandro Sala " />
<person posts="1" size="14" who="Chris Noe " />
<person posts="1" size="12" who="Hao Li " />
<person posts="1" size="9" who="Andris Pavenis " />
<person posts="1" size="8" who="Andreas Bombe " />
<person posts="1" size="8" who="Gilbert Ramirez " />
<person posts="1" size="8" who="Chris Rankin " />
<person posts="1" size="7" who="Michal Jaegermann " />
<person posts="1" size="6" who="Lawrence Manning " />
<person posts="1" size="6" who="Thomas Zimmerman " />
<person posts="1" size="6" who="Petr Soucek " />
<person posts="1" size="6" who="Kevin O'Connor " />
<person posts="1" size="6" who="Gilbert Ramirez Jr. " />
<person posts="1" size="5" who="Marc ZYNGIER " />
<person posts="1" size="5" who="Marcus Sundberg " />
<person posts="1" size="5" who="Ulrich Weigand " />
<person posts="1" size="5" who="masahiro adegawa " />
<person posts="1" size="5" who="Paul Ho " />
<person posts="1" size="5" who="Albrecht Jacobs " />
<person posts="1" size="5" who="Simon Kirby " />
<person posts="1" size="5" who="Eric Dumazet " />
<person posts="1" size="5" who="Johan Kullstam " />
<person posts="1" size="4" who="Dimitris Michailidis " />
<person posts="1" size="4" who="Martin Schulz " />
<person posts="1" size="4" who="Klaus Espenlaub " />
<person posts="1" size="4" who="Jakub Jelinek " />
<person posts="1" size="4" who="Adrian Bridgett " />
<person posts="1" size="4" who="Borislav Deianov " />
<person posts="1" size="4" who="Urban Widmark " />
<person posts="1" size="4" who="Michael Nelson " />
<person posts="1" size="4" who="Bret Indrelee " />
<person posts="1" size="4" who=" (Scott Lurndal)" />
<person posts="1" size="4" who="Petr Sebor " />
<person posts="1" size="4" who="brandon " />
<person posts="1" size="4" who="Jonas Jochum " />
<person posts="1" size="4" who="Olaf Kirch " />
<person posts="1" size="4" who="Haavard Lygre " />
<person posts="1" size="4" who="Richard Gooch " />
<person posts="1" size="4" who="Larry Woodman " />
<person posts="1" size="4" who="Thomas Duffy " />
<person posts="1" size="4" who="Jakob Sandgren " />
<person posts="1" size="4" who="Joel Becker " />
<person posts="1" size="4" who="Trever Adams " />
<person posts="1" size="4" who="REDELINGS,BENJAMIN DAVID " />
<person posts="1" size="4" who="Bret Indrelee " />
<person posts="1" size="4" who="ELEMENTI SA " />
<person posts="1" size="4" who="" />
<person posts="1" size="4" who="Christopher Curtis " />
<person posts="1" size="4" who="Dunlap, Randy " />
<person posts="1" size="4" who="BOSZORMENYI Zoltan " />
<person posts="1" size="4" who="Teresa Macklin " />
<person posts="1" size="3" who="Brian Kelly " />
<person posts="1" size="3" who="George " />
<person posts="1" size="3" who="Russell King " />
<person posts="1" size="3" who="" />
<person posts="1" size="3" who="Derek Fawcus " />
<person posts="1" size="3" who="Mr. James W. Laferriere " />
<person posts="1" size="3" who="Carlo E. Prelz " />
<person posts="1" size="3" who="Jan Harkes " />
<person posts="1" size="3" who="Adrian Cox " />
<person posts="1" size="3" who="Marc Lehmann " />
<person posts="1" size="3" who="Dan Yocum " />
<person posts="1" size="3" who="Helge Hafting " />
<person posts="1" size="3" who="Petr Vandrovec Ing. VTEI " />
<person posts="1" size="3" who=" (david parsons)" />
<person posts="1" size="3" who=" (Simon Patience)" />
<person posts="1" size="3" who="Philip Blundell " />
<person posts="1" size="3" who="Byron R. Stanoszek " />
<person posts="1" size="3" who="Hans de Goede " />
<person posts="1" size="3" who="Peter Steiner " />
<person posts="1" size="3" who="Chris Kloiber " />
<person posts="1" size="3" who="Eilert Brinkmann " />
<person posts="1" size="3" who="pramodh mallipatna " />
<person posts="1" size="3" who="Geert Uytterhoeven " />
<person posts="1" size="3" who="Karsten Keil " />
<person posts="1" size="3" who="John Newman " />
<person posts="1" size="3" who="Mark Lord " />
<person posts="1" size="3" who="Paulo Henrique Baptista de Oliveira " />
<person posts="1" size="3" who="Doug McNaught " />
<person posts="1" size="3" who="Henning P. Schmiedehausen " />
<person posts="1" size="3" who="Lyle Seaman " />
<person posts="1" size="3" who="Donald Sharp " />
<person posts="1" size="3" who="Brett Person " />
<person posts="1" size="3" who="=?iso-8859-1?q?kolley=20kibber?= " />
<person posts="1" size="3" who="" />
<person posts="1" size="3" who="Lincoln Dale " />
<person posts="1" size="3" who="Lawrence Walton " />
<person posts="1" size="3" who="Jyan-Min Fang " />
<person posts="1" size="3" who="Bernhard Rosenkraenzer " />
<person posts="1" size="3" who="Siddharth Srivastav " />
<person posts="1" size="3" who="Michal Vitecek " />
<person posts="1" size="3" who="Jens Benecke " />
<person posts="1" size="3" who="Bernhard Kaindl " />
<person posts="1" size="3" who="Steve Davies " />
<person posts="1" size="3" who="Daniel Veillard " />
<person posts="1" size="3" who="Eric Pouech " />
<person posts="1" size="3" who="David Woodhouse " />
<person posts="1" size="3" who="Vinche " />
<person posts="1" size="3" who="Alan Olsen " />
<person posts="1" size="3" who="Eric Paire " />
<person posts="1" size="3" who="Stephen Donnelly " />
<person posts="1" size="3" who="Mike Shaver " />
<person posts="1" size="3" who="Steinar H. Gunderson " />
<person posts="1" size="3" who="Kelly STriker Price " />
<person posts="1" size="3" who="Horst von Brand " />
<person posts="1" size="3" who="mike burrell " />
<person posts="1" size="3" who="imel... " />
<person posts="1" size="3" who="BIONDI Philippe " />
<person posts="1" size="3" who="" />
<person posts="1" size="3" who="Stefan Monnier " />
<person posts="1" size="3" who="Ingo Molnar " />
<person posts="1" size="3" who="Brendan Cully " />
<person posts="1" size="3" who="Artur Frysiak " />
<person posts="1" size="3" who="Brad Midgley " />
<person posts="1" size="3" who="" />
<person posts="1" size="3" who="Erez Zadok " />
<person posts="1" size="3" who="Matthijs Melchior " />
<person posts="1" size="3" who="Malcolm Beattie " />
<person posts="1" size="3" who="" />
<person posts="1" size="3" who="Joshua M. Thompson " />
<person posts="1" size="3" who="Olaf Titz " />
<person posts="1" size="3" who="Bernard Wei " />
<person posts="1" size="3" who="Folkert van Heusden " />
<person posts="1" size="3" who="Robert Lowery " />
<person posts="1" size="3" who="B. James Phillippe " />
<person posts="1" size="3" who="Christoph Lorenz " />
<person posts="1" size="3" who="David DeGeorge " />
<person posts="1" size="3" who="Bjorn Andersson " />
<person posts="1" size="3" who="" />
<person posts="1" size="3" who="Kristofer T. Karas " />
<person posts="1" size="3" who="David Ford " />
<person posts="1" size="3" who="Craig I. Hagan " />
<person posts="1" size="3" who="Frank van Maarseveen " />
<person posts="1" size="3" who="Greg Treantos " />
<person posts="1" size="3" who="Michael Barabanov " />
<person posts="1" size="3" who="Prashant TR " />
<person posts="1" size="3" who="Andrej Todosic " />
<person posts="1" size="3" who="Alex Belits " />
<person posts="1" size="3" who="Kelly A. Price " />
<person posts="1" size="3" who="" />
<person posts="1" size="3" who="Ian Ehrenwald " />
<person posts="1" size="3" who="Sashka Nochkin " />
<person posts="1" size="3" who="Matthew Dharm " />
<person posts="1" size="3" who="Ralph Blach " />
<person posts="1" size="3" who="Rene Janssen " />
<person posts="1" size="2" who="Jason Gunthorpe " />
<person posts="1" size="2" who="Michael Elizabeth Chastain " />
<person posts="1" size="2" who=" (Eric Brunet)" />
<person posts="1" size="2" who="Gabor Lenart " />
<person posts="1" size="2" who="Nicholas Waltham " />
<person posts="1" size="2" who="Charles 'Buck' Krasic " />
<person posts="1" size="2" who="=?iso-8859-1?Q?Magnus_N=E4slund=28gr=29?= " />
<person posts="1" size="2" who="" />
<person posts="1" size="2" who="Ed Hall " />
<person posts="1" size="2" who="Ruben Schattevoy " />
<person posts="1" size="2" who="Miquel van Smoorenburg " />
<person posts="1" size="2" who="JF Martinez " />
<person posts="1" size="2" who="Albert D. Cahalan " />
<person posts="1" size="2" who="Catalin Muresan " />
<person posts="1" size="2" who="Ralf Baechle " />
<person posts="1" size="2" who="shisheng " />
<person posts="1" size="2" who="Dmitry Brodsky " />
<person posts="1" size="2" who="Dag Brattli " />
<person posts="1" size="2" who="Douglas Gilbert " />
<person posts="1" size="2" who="Joel Jaeggli " />
<person posts="1" size="2" who="Adam Kennedy (Fuzzy Logic) " />
<person posts="1" size="2" who="Yann Doussot " />
<person posts="1" size="2" who="Sushil Agrawal " />
<person posts="1" size="2" who="Tom Zerucha " />
<person posts="1" size="2" who="Meelis Roos " />
<person posts="1" size="2" who="Ben Collins " />
<person posts="1" size="2" who=" (Matthias Urlichs)" />
<person posts="1" size="2" who="Udi Finkelstein " />
<person posts="1" size="2" who="Chris Bayly " />
<person posts="1" size="2" who="Phil Brutsche " />
<person posts="1" size="2" who="Coy A Hile " />
<person posts="1" size="2" who="Robert Louis Murphy " />
<person posts="1" size="2" who="Brad Proctor " />
<person posts="1" size="2" who="Lauri Tischler " />
<person posts="1" size="2" who="Nate Eldredge " />
<person posts="1" size="2" who="" />
<person posts="1" size="2" who="solar " />
<person posts="1" size="2" who="" />
<person posts="1" size="2" who="Anders Qvist " />
<person posts="1" size="2" who="Raj, Ashok " />
<person posts="1" size="2" who="VT " />
<person posts="1" size="2" who="Taso Hatzi " />
<person posts="1" size="2" who="swoop " />
<person posts="1" size="2" who="Sasi Peter " />
<person posts="1" size="2" who="" />
<person posts="1" size="2" who="Dennis Boylan " />
<person posts="1" size="2" who="Torben Mathiasen " />
<person posts="1" size="2" who="Henrik Olsen " />
<person posts="1" size="2" who="Callum Lerwick " />
<person posts="1" size="2" who="" />
<person posts="1" size="2" who=" (Arjan van de Ven)" />
<person posts="1" size="2" who="Paul Damplon " />
<person posts="1" size="2" who="Lauri Tischler " />
<person posts="1" size="2" who="Jeremy Fitzhardinge " />
<person posts="1" size="2" who="Robbert Muller " />
<person posts="1" size="2" who="John Schweitzer " />
<person posts="1" size="2" who="" />
<person posts="1" size="2" who="Tim Keating " />
<person posts="1" size="2" who="Jeff Garzik " />
<person posts="1" size="2" who="Andrey Panin " />
<person posts="1" size="2" who="Michael Bacarella " />
<person posts="1" size="2" who="Tomasz Wegrzanowski " />
<person posts="1" size="2" who="Keith Duthie " />
<person posts="1" size="2" who="Dax Kelson " />
<person posts="1" size="2" who="Peix Fabrice " />
<person posts="1" size="2" who="Mofeed Shahin " />
<person posts="1" size="2" who="Matija Nalis " />
<person posts="1" size="2" who="unslider " />
<person posts="1" size="2" who="Jeremy Hansen " />
<person posts="1" size="2" who=" (root)" />

</stats>

<section
  title="spin_unlock() Optimization On Intel"
  subject="spin_unlock optimization(i386)"
  archive="http://kernelnotes.org/lnxlists/linux-kernel/lk_9911_03/msg00864.html"
  posts="143"
  startdate="20 Nov 1999 00:00:00 -0800"
  enddate="07 Dec 1999 00:00:00 -0800"
>
<topic>BSD: FreeBSD</topic>
<topic>SMP</topic>

<mention>Manfred Spraul</mention>
<mention>Peter Samuelson</mention>
<mention>Ingo Molnar</mention>

<p>Manfred Spraul thought he'd found a way to shave spin_unlock() down from
about 22 ticks for the "lock; btrl $0,%0" asm code, to 1 tick for a simple
"movl $0,%0" instruction, a huge gain. Later, he reported that Ingo Molnar
noticed a 4% speed-up in a benchmark test, making the optimization very
valuable. Ingo also added that the same optimization cropped up in the
FreeBSD mailing list a few days previously. But Linus Torvalds poured cold
water on the whole thing, saying:</p>

<quote who="Linus Torvalds">

<p>It does NOT WORK!</p>

<p>Let the FreBSD people use it, and let them get faster timings. They will
crash, eventually.</p>

<p>The window may be small, but if you do this, then suddenly spinlocks aren't
reliable any more.</p>

<p>The issue is not writes being issued in-order (although all the Intel CPU
books warn you NOT to assume that in-order write behaviour - I bet it won't
be the case in the long run).</p>

<p>The issue is that you _have_ to have a serializing instruction in order to
make sure that the processor doesn't re-order things around the unlock.</p>

<p>For example, with a simple write, the CPU can legally delay a read that
happened inside the critical region (maybe it missed a cache line), and get
a stale value for any of the reads that _should_ have been serialized by the
spinlock.</p>

<p>Note that I actually thought this was a legal optimization, and for a while
I had this in the kernel. It crashed. In random ways.</p>

<p>Note that the fact that it does not crash now is quite possibly because of
either</p>

<p>

<ul>

<li>we have a lot less contention on our spinlocks these days. That might
hide the problem, because the _spinlock_ will be fine (the cache coherency
still means that the spinlock itself works fine - it's just that it no
longer works reliably as an exclusion thing)</li>

<li>the window is probably very very small, and you have to be unlucky to
hit it. Faster CPU's, different compilers, whatever.</li>

</ul>

</p>

<p>I might be proven wrong, but I don't think I am.</p>

<p>Note that another thing is that yes, "btcl" may be the worst possible thing
to use for this, and you might test whether a simpler "xor+xchgl" might be
better - it's still serializing because it is locked, but it should be the
normal 12 cycles that Intel always seems to waste on serializing
instructions rather than 22 cycles.</p>

</quote>

<p>Elsewhere, he gave a potential (though unlikely) exploit:</p>

<quote who="Linus Torvalds">

<p>As a completely made-up example
(which will probably never show the problem in real life, but is instructive
as an example), imaging running the following test in a loop on multiple
CPU's:</p>

<blockquote>

<code>

<p>

        int test_locking(void)<br />
        {<br />
<blockquote>

                static int a;   /* protected by spinlock */<br />
                int b;<br />
&#160;<br />
                spin_lock()<br />
                a = 1;<br />
                mb();<br />
                a = 0;<br />
                mb();<br />
                b = a;<br />
                spin_unlock();<br />
                return b;<br />

</blockquote>
        }

</p>

</code>

</blockquote>

<p>Now, OBVIOUSLY the above always has to return 0, right? All accesses to "a"
are inside the spinlock, and we always set it to zero before we read it into
"b" and return it. So if we EVER returned anything else, the spinlock would
obviously be completely broken, wouldn't you say?</p>

<p>And yes, the above CAN return 1 with the proposed optimization. I doubt you
can make it do so in real life, but hey, add another access to another
variable in the same cache line that is accessed through another spinlock
(to get cache-line ping-pong and timing effects), and I suspect you can make
it happen even with a simple example like the above.</p>

<p>The reason it can return 1 quite legally is that your new "spin_unlock()"
isnot serializing any more, so there is very little effective ordering
between the two actions</p>

<blockquote>

<code>

<p>

        b = a;<br />
        spin_unlock();

</p>

</code>

</blockquote>

<p>as they access completely different data (ie no data dependencies in sight).
So what you could end up doing is equivalent to</p>

<blockquote>

<table border="0">

<tr><td>CPU#1                                       </td><td>CPU#2                  </td></tr>
<tr><td>b = a;  /* cache miss, we'll delay this.. */</td><td>                       </td></tr>
<tr><td>spin_unlock();                              </td><td>                       </td></tr>
<tr><td>                                            </td><td>spin_lock();           </td></tr>
<tr><td>                                            </td><td>a = 1;                 </td></tr>
<tr><td>/* cache miss satisfied, the "a" line is bouncing back and forth */</td><td></td></tr>
<tr><td>b gets the value 1                          </td><td>                       </td></tr>
<tr><td>                                            </td><td>a = 0;                 </td></tr>

</table>

</blockquote>

<p>and it returns "1", which is wrong for any working spinlock.</p>

<p>Unlikely? Yes, definitely. Something we are willing to live with as a
potential bug in any real kernel? Definitely not.</p>

</quote>

<p>Manfred objected that according to the <i>Pentium Processor Family
Developers Manual, Vol3, Chapter 19.2 Memory Access Ordering</i>, "to
optimize performance, the Pentium processor allows memory reads to be
reordered ahead of buffered writes in most situations. Internally, CPU reads
(cache hits) can be reordered around buffered writes. Memory reordering does
not occur at the pins, reads (cache miss) and writes appear in-order." He
concluded from this that the second CPU would never see the spin_unlock()
before the "b=a" line. Linus agreed that on a Pentium, Manfred was right.
However, he quoted in turn from the Pentium Pro manual, "The only
enhancement in the PentiumPro processor is the added support for speculative
reads and store-buffer forwarding." He explained:</p>

<quote who="Linus Torvalds">

<p>A Pentium is a in-order machine,
without any of the interesting speculation wrt reads etc. So on a Pentium
you'll never see the problem.</p>

<p>But a Pentium is also very uninteresting from a SMP standpoint these days.
It's just too weak with too little per-CPU cache etc..</p>

<p>This is why the PPro has the MTRR's - exactly to let the core do speculation
(a Pentium doesn't need MTRR's, as it won't re-order anything external to
the CPU anyway, and in fact won't even re-order things internally).</p>

</quote>

<p>Jeff V. Merkey added:</p>

<quote who="Jeff V. Merkey">

<p>What Linus says here is
correct for PPro and above. Using a mov instruction to unlock does work fine
on a 486 or Pentium SMP system, but as of the PPro, this was no longer the
case, though the window is so infintesimally small, most kernels don't hit
it (Netware 4/5 uses this method but it's spinlocks understand this and the
code is writtne to handle it. The most obvious aberrant behavior was that
cache inconsistencies would occur randomly. PPro uses lock to signal that
the piplines are no longer invalid and the buffers should be blown out.</p>

<p>I have seen the behavior Linus describes on a hardware analyzer, BUT ONLY ON
SYSTEMS THAT WERE PPRO AND ABOVE. I guess the BSD people must still be on
older Pentium hardware and that's why they don't know this can bite in some
cases.</p>

</quote>

<p>Erich Boleyn, an Architect in an IA32 development group
at Intel, also replied to Linus, pointing out a possible misconception in
his proposed exploit. Regarding the code Linus posted, Erich replied:</p>

<quote who="Erich Boleyn">

<p>It will always return 0.
You don't need "spin_unlock()" to be serializing.</p>

<p>The only thing you need is to make sure there is a store in "spin_unlock()",
and that is kind of true by the fact that you're changing something to be
observable on other processors.</p>

<p>The reason for this is that stores can only possibly be observed when all
prior instructions have retired (i.e. the store is not sent outside of the
processor until it is committed state, and the earlier instructions are
already committed by that time), so the any loads, stores, etc absolutely
have to have completed first, cache-miss or not.</p>

</quote>

<p>He went on:</p>

<quote who="Erich Boleyn">

<p>Since the instructions for
the store in the spin_unlock have to have been externally observed for
spin_lock to be aquired (presuming a correctly functioning spinlock, of
course), then the earlier instructions to set "b" to the value of "a" have
to have completed first.</p>

<p>In general, IA32 is Processor Ordered for cacheable accesses.  Speculation
doesn't affect this. Also, stores are not observed speculatively on other
processors.</p>

</quote>

<p>There was a long clarification discussion, resulting in a complete
turnaround by Linus:</p>

<quote who="Linus Torvalds">

<p>Everybody has convinced me that
yes, the Intel ordering rules _are_ strong enough that all of this really is
legal, and that's what I wanted. I've gotten sane explanations for why
serialization (as opposed to just the simple locked access) is required for
the lock() side but not the unlock() side, and that lack of symmetry was
what bothered me the most.</p>

<p>Oliver made a strong case that the lack of symmetry can be adequately
explained by just simply the lack of symmetry wrt speculation of reads vs
writes. I feel comfortable again.</p>

<p>Thanks, guys, we'll be that much faster due to this..</p>

</quote>

<p>Erich then argued that serialization was not required for the lock() side
either, but after a long and interesting discussion he apparently was unable
to win people over.</p>

<correction date="23 Dec 1999 00:00:00 -0800">

<p>In fact, as Peter Samuelson pointed out to me
after KT publication (and many thanks to him for it):</p>

<p>"You report that Linus was convinced to do the spinlock optimization on
Intel, but apparently someone has since changed his mind back. See
&lt;asm-i386/spinlock.h&gt; from 2.3.30pre5 and above:</p>

<blockquote>

<code>

<p>
  /*<br />
   * Sadly, some early PPro chips require the locked access,<br />
   * otherwise we could just always simply do<br />
   *<br />
   *    #define spin_unlock_string \<br />
   *            "movb $0,%0"<br />
   *<br />
   * Which is noticeably faster.<br />
   */<br />
  #define spin_unlock_string \<br />
        "lock ; btrl $0,%0""
</p>

</code>

</blockquote>

</correction>

</section>

<section
  title="Buggy Toshiba Satellite Keyboard Hardware; Parenthood"
  subject="Toshiba Satellite 2595XDVD"
  archive="http://kernelnotes.org/lnxlists/linux-kernel/lk_9912_01/msg00301.html"
  posts="38"
  startdate="01 Dec 1999 00:00:00 -0800"
  enddate="11 Dec 1999 00:00:00 -0800"
>

<mention>Andries Brouwer</mention>

<p>Andrei Pitis noticed that the Toshiba Satellite 2595XDVD had a buggy
keyboard controller, which would occassionally ignore the repeat delay, and
send a lot of key-down interrupts very quickly. He posted a short patch
against handle_scancode() in drivers/char/keyboard.c, to enforce a 200 ms
delay on all repeated scancodes. Eric Dumazet (on the Satellite 4080XCDT
running Windows 98) and Pavel Machek (on the Satellite 4030CDT) confirmed
the repeating problem. Pavel suggested that instead of silently correcting
the problem, a warning would be nice, and posted a patch.</p>

<p>Elsewhere, under the Subject: <a
href="http://kernelnotes.org/lnxlists/linux-kernel/lk_9912_01/msg01220.html">Toshiba
kbd patch</a>, Andrei posted his latest version of the patch, enforcing a
250 ms delay. Linus Torvalds pointed out that this would cause missed
keystrokes in the case of someone intentionally typing the same key more
than four times per second. He asked if anyone could assure him that this
didn't matter.</p>

<p>A lot of people replied that yes, in fact, it <b>did</b> matter. Even slow
typists were capable of intentionally pressing the same key multiple times
per second. Andrei insisted that no one would want to press the same key
multiple times in a row, but others disagreed, and Andries Brouwer pointed
out that the delay would slow intentional auto-repeats down to a crawl.
Andrei posted a new patch, adding, <quote who="Andrei Pitis">It's funny, I
started by writing a quick'n'dirty patch for my own use and I will probably
end up writing kbd software repeat (is it really a demand for such a
feature? imagine that we would be able to set up repeat rates of up to 100
cps!!</quote> Pavel Machek came in with a dose of practicality, saying,
<quote who="Pavel Machek">Wait with soft repeat for vojtech's input patches
and for 2.5. Or look at other architectures, they need soft repeat.
Implement minimal fix now.</quote></p>

<p>There was also a cute exchange of recipes for soothing crying newborns,
between Linus and Andrei. In his previously quoted post, Andrei continued,
<quote who="Andrei Pitis">Anyway, I am happy doing this, between two
consecutive cries (she has stomach aches, any known remedies for a 1 month
baby?) of my first newborn (Andra, 12 nov) late in the night (in my TZ - EET
Bucharest/Romania). It would be neat if a child's crying repeat delay/rate
would be customizable :-)))</quote> Linus replied, <quote who="Linus
Torvalds">Try sugarwater. Two-three tablespoons sugar to one deciliter of
purified water, if I remember correctly. Spoonfeed. No guarantees.</quote>
Andrei replied, <quote who="Andrei Pitis">Thanks for the advices to all of you
who replied :-) I will try some (of course, after verifying them with a doctor,
now it's the first time I regret not going to a medical school
:-))...</quote></p>

</section>

<section
  title="ext2/ext3 Compatibility"
  subject="Oops with ext3 journaling"
  archive="http://kernelnotes.org/lnxlists/linux-kernel/lk_9912_01/msg00453.html"
  posts="46"
  startdate="01 Dec 1999 00:00:00 -0800"
  enddate="13 Dec 1999 00:00:00 -0800"
>
<topic>FS: ext2</topic>
<topic>FS: ext3</topic>
<topic>SMP</topic>

<mention>Jens Axboe</mention>
<mention>Pavel Machek</mention>

<p>Brion Vibber was running Linux 2.2.13 SMP with Jens Axboe's CD-ROM patch and
ext3-0.0.2c (with the KDB patch applied but not activated). After a week and
a half of use, he got an oops during a big copy, and posted it to the list.
It turned out that the problem was his own fault (his copy command overwrote
the journal.dat file), but in the course of discussion, Pavel Machek
expressed a fear that if Stephen C. Tweedie eventually made the journal.dat
file hidden, it would make it much more difficult to switch between ext2 and
ext3. But Theodore Y. Ts'o assuaged his fears, with, <quote who="Theodore Y.
Ts'o">Never fear, there will be an very easy way to
switch back and forth between ext2 and ext3. A single mount command, or at
most a single tune2fs command, should be all that it takes, no matter how
the journal is stored.</quote> And Stephen confirmed this sentiment, saying:</p>

<quote who="Stephen C. Tweedie">

<p>Absolutely.  I am
100% committed to this. Apart from anything else, this is the mechanism
which will allow for incompatible revisions of the ext3 journal format: you
will always be able to mount a journaled ext3 partition as ext2, and then
remount as the new ext3, if you want to upgrade ext3 partitions to a new,
incompatible format (which should not happen after final release, but there
will be at least one such incompatible format revision required in the next
month or so).</p>

<p>Any such format changes will be limited to the journal format: there will be
no journaling changes which prevent backing the filesystem revision back
down to ext2. Ever.</p>

</quote>

<p>Elsewhere, under the Subject: <a
href="http://kernelnotes.org/lnxlists/linux-kernel/lk_9912_01/msg00960.html">unsigned
short for nlink_t</a>, he reiterated, <quote who="Stephen C. Tweedie">the
on-disk format in ext3 does not change, with the exception of the addition
of the journal inode. You can migrate between ext2 and ext3 without a
reformat.</quote></p>

<p>Elsewhere, under the Subject: <a
href="http://kernelnotes.org/lnxlists/linux-kernel/lk_9912_01/msg01121.html">Ext3
Filesystem</a>, Byron Stanoszek was surprised to find that aside from
journal.dat, the two filesystems ext2 and ext3 were identical. He felt that
instead of journal.dat, ext3 should just use one of the reserved bits in the
ext2 header to label it as a journalling filesystem. A number of people took
his suggestion to mean that the journalling functionality should be inserted
into the existing ext2 code. Matti Aarnio replied, <quote who="Matti
Aarnio">Sure yes, it *may* become folded back into
EXT2, but while the development is under way, it is better to be called
something different so that you may choose which partitions you want to
endanger with unknown behaviour of the code.. (Be the name 'ext3', or
'ext2j', or whatever..)</quote> Stephen also replied to Byron, with
<quote who="Stephen C. Tweedie">The filesystem
internals have to be substantially changed for journaling, but the on-disk
filesystem *is* just marked by a flag in the ext2 superblock which indicates
that there is a journal present. You can thus migrate between ext2 and ext3
on disk easily, but you cannot use the same kernel code to mount ext2 and
ext3.</quote> Brion Vibber also replied to Byron, adding, <quote who="Brion
Vibber">giving it a separate name just makes it
safer since the stable ext2 code can be run simultaneously on other
filesystems that don't need the journaling while the experimental ext3 eats
your test partitions if something goes wrong.</quote></p>

<p>Byron also added in his original post, <quote who="Byron Stanoszek">I've
read recently about the problems with root seeing journal.dat, being able to
modify it, etc.</quote> Stephen replied that the final release would have the
journal in a hidden inode.  Byron also asked, in its current visible form,
what if root removed journal.dat? Would the system rebuild the log or would
it try to restore the filesystem by replaying the empty journal log? Stephen
replied, <quote who="Stephen C. Tweedie">Right now the world falls apart.
Eventually you won't be able to: the journal will be in a hidden
inode.</quote></p>

</section>

<section
  title="Yamaha Spits On The Open Source World"
  subject="Yamaha Sound Drivers"
  archive="http://kernelnotes.org/lnxlists/linux-kernel/lk_9912_02/msg00140.html"
  posts="15"
  startdate="08 Dec 1999 00:00:00 -0800"
  enddate="09 Dec 1999 00:00:00 -0800"
>
<topic>PCI</topic>
<topic>Sound: ALSA</topic>

<mention>Jeff Garzik</mention>
<mention>Alan Olsen</mention>

<p>Alan Olsen asked about the status of sound drivers for the newer Yamaha
sound chipsets. Dan Hollis replied, <quote who="Dan Hollis">Yamaha refuses to
release required documentation for the PCI YMF chips. And no, the supplied PDF
files on the yamahayst pages is not enough.</quote> David Whysong added that
the chipset was <quote who="David Whysong">blacklisted by ALSA due to lack
of programming information.</quote> He added, <quote who="David Whysong">I
have been in contact with someone at Yamaha about this issue, unfortunately
specs are not available without an NDA for now.</quote> Jeff Garzik said an
NDA would be acceptable as long as source code could be released, but David
replied, <quote who="David Whysong">I asked but the NDA would not allow
source to be released.  I'm still hoping that something can be worked out,
but it doesn't look too likely unless Yamaha changes their policy.</quote>
Vojtech Pavlik suggested that <quote who="Vojtech Pavlik">Perhaps an Open
Source friendly NDA could be arranged? I've done this a couple times now -
I can't give the docs I received to anyone, but I can distribute the driver
I made based on them, under GNU GPL. For example the Logitech joystick
driver.</quote> David replied, <quote who="David Whysong">I'm trying to
arrange something like this... I'll let you know what happens.</quote></p>

<p>Elsewhere, Alan Cox replied to Alan Olsen's original post, reiterating that
the drivers were <quote who="Alan Cox">basically dead. Even the SB emulation
mode seems to need some kind of undocumented setup.</quote> Jeff replied
that the docs looks sufficient to him, but Dan replied:</p>

<quote who="Dan Hollis">

<p>I think Alan had a go at it and couldnt get it to work using the
docs. Basically there is some undocumented setup required for the ymf744b
to work at all. Maybe someone can reverse engineer the DOS init program and
figure it out.</p>

<p>Basically this isnt going to work until Yamaha wakes up. Makes you wonder
what theyre hiding.</p>

</quote>

</section>

</kc>

