<?xml version="1.0" ?>

<kc>

<title>Kernel Traffic</title>

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

<issue num="66" date="08 May 2000 00:00:00 -0800" />

<stats posts="1116" size="4974" contrib="397" multiples="182" lastweek="136">

<person posts="45" size="156" who="Jeff Garzik " />
<person posts="32" size="92" who="Alan Cox " />
<person posts="26" size="112" who="Andrew Morton " />
<person posts="23" size="115" who="Alexander Viro " />
<person posts="22" size="79" who="Richard Gooch " />
<person posts="21" size="104" who="Rik van Riel " />
<person posts="21" size="80" who="Manfred Spraul " />
<person posts="21" size="75" who="Jamie Lokier " />
<person posts="18" size="81" who="David S. Miller " />
<person posts="17" size="70" who="Oliver Xymoron " />
<person posts="15" size="56" who="Tigran Aivazian " />
<person posts="14" size="49" who="Keith Owens " />
<person posts="13" size="57" who="Stephen C. Tweedie " />
<person posts="13" size="48" who="David Ford " />
<person posts="12" size="47" who="Linus Torvalds " />
<person posts="10" size="46" who="" />
<person posts="10" size="41" who="Jeff V. Merkey " />
<person posts="9" size="46" who="Cesar Eduardo Barros " />
<person posts="9" size="38" who="Trond Myklebust " />
<person posts="9" size="34" who="Martin Mares " />
<person posts="9" size="32" who="Andrea Arcangeli " />
<person posts="8" size="188" who=" (Graham Stoney)" />
<person posts="8" size="36" who="George Anzinger " />
<person posts="8" size="30" who="Juan J. Quintela " />
<person posts="8" size="27" who="Jes Sorensen " />
<person posts="8" size="22" who="Andre Hedrick " />
<person posts="8" size="20" who="" />
<person posts="7" size="42" who="Michael H. Warfield " />
<person posts="7" size="32" who="Amit S. Kale " />
<person posts="7" size="27" who="Riley Williams " />
<person posts="7" size="27" who="Dunlap, Randy " />
<person posts="7" size="26" who="Artur Skawina " />
<person posts="7" size="22" who="Olaf Titz " />
<person posts="7" size="21" who="Tim Waugh " />
<person posts="6" size="40" who="Pavel Machek " />
<person posts="6" size="30" who="Meino Christian Cramer " />
<person posts="6" size="28" who="Russell King " />
<person posts="6" size="27" who="Paul Barton-Davis " />
<person posts="6" size="25" who="Horst von Brand " />
<person posts="6" size="24" who="Khimenko Victor " />
<person posts="6" size="22" who="Gerard Sharp " />
<person posts="6" size="22" who="Richard B. Johnson " />
<person posts="6" size="20" who="Horst von Brand " />
<person posts="6" size="20" who="Guest section DW " />
<person posts="6" size="17" who="" />
<person posts="5" size="54" who=" (david parsons)" />
<person posts="5" size="32" who="Linda Walsh " />
<person posts="5" size="30" who="Jan Evert van Grootheest " />
<person posts="5" size="21" who="Ricky Beam " />
<person posts="5" size="20" who="Jeremy Fitzhardinge " />
<person posts="5" size="20" who="Simon Kirby " />
<person posts="5" size="18" who="Borislav Deianov " />
<person posts="5" size="17" who="Theodore Y. Ts'o " />
<person posts="5" size="17" who="Ulrich Drepper " />
<person posts="4" size="69" who="=?iso-8859-1?Q?Fran=E7ois_romieu?= " />
<person posts="4" size="43" who="" />
<person posts="4" size="28" who="Thomas Molina " />
<person posts="4" size="21" who="Lorenzo Marcantonio " />
<person posts="4" size="19" who="Niels Kristian Bech Jensen " />
<person posts="4" size="17" who="Vandoorselaere Yoann " />
<person posts="4" size="16" who="Adam J. Richter " />
<person posts="4" size="16" who="=?ISO-8859-1?Q?G=E9rard_Roudier?= " />
<person posts="4" size="15" who=" (Rogier Wolff)" />
<person posts="4" size="14" who="Christoph Rohland " />
<person posts="4" size="13" who="Shane Shrybman " />
<person posts="4" size="13" who="" />
<person posts="4" size="13" who="Andrey Savochkin " />
<person posts="4" size="12" who="=?ISO-8859-1?Q?Jerry_Lundstr=F6m?= " />
<person posts="4" size="12" who="Alan Modra " />
<person posts="4" size="12" who="Chad Miller " />
<person posts="4" size="11" who="Bill Wendling " />
<person posts="4" size="11" who="Theodore Ts'o " />
<person posts="4" size="11" who="Ivan Passos " />
<person posts="3" size="44" who="Thorsten Knabe " />
<person posts="3" size="40" who="Erik van Asselt " />
<person posts="3" size="36" who="Sergey Kubushin " />
<person posts="3" size="17" who="ralf willenbacher " />
<person posts="3" size="15" who="Doug Ledford " />
<person posts="3" size="14" who="Christoph Hellwig " />
<person posts="3" size="13" who=" (H. Peter Anvin)" />
<person posts="3" size="12" who="Richard Torkar " />
<person posts="3" size="12" who="=?iso-8859-1?Q?Jakob_=D8stergaard?= " />
<person posts="3" size="12" who="Maciej W. Rozycki " />
<person posts="3" size="11" who="Sean Hunter " />
<person posts="3" size="11" who="David Lang " />
<person posts="3" size="11" who=" (Linus Torvalds)" />
<person posts="3" size="11" who="Matthew Hanselman " />
<person posts="3" size="11" who="Dominik Kubla " />
<person posts="3" size="10" who="Andi Kleen " />
<person posts="3" size="10" who="Timm Gleason " />
<person posts="3" size="10" who="Ivan Kokshaysky " />
<person posts="3" size="10" who="Mikael Pettersson " />
<person posts="3" size="10" who="Roman Seidl " />
<person posts="3" size="10" who="Greg KH " />
<person posts="3" size="9" who="" />
<person posts="3" size="9" who="Jens Axboe " />
<person posts="3" size="9" who="Alex Buell " />
<person posts="3" size="9" who="Art Boulatov " />
<person posts="3" size="9" who="Lars Kellogg-Stedman " />
<person posts="3" size="9" who="Benjamin Redelings I " />
<person posts="3" size="9" who="P.Basker " />
<person posts="3" size="9" who="Riley Williams " />
<person posts="3" size="8" who="really  &lt;lnx-kern@pie-9.soo.com&gt;" />
<person posts="2" size="97" who="Erik Tews " />
<person posts="2" size="24" who="Douglas Kilpatrick " />
<person posts="2" size="20" who="Jeffrey E. Hundstad " />
<person posts="2" size="19" who="Rajagopal Ananthanarayanan " />
<person posts="2" size="19" who="Christian Ehrhardt " />
<person posts="2" size="18" who="Dave Jones " />
<person posts="2" size="17" who="M Sweger " />
<person posts="2" size="16" who="Kentaro Oda " />
<person posts="2" size="14" who="Michael Warfield " />
<person posts="2" size="13" who="Benjamin Close " />
<person posts="2" size="12" who="" />
<person posts="2" size="12" who="Johannes Erdfelt " />
<person posts="2" size="11" who="Jean Tourrilhes " />
<person posts="2" size="10" who="Hitesh Patel " />
<person posts="2" size="10" who="Steve VanDevender " />
<person posts="2" size="9" who="A. Haumer " />
<person posts="2" size="9" who="Matthew Vanecek " />
<person posts="2" size="9" who="dean gaudet " />
<person posts="2" size="9" who="Matthew Dharm " />
<person posts="2" size="9" who="Chris Chabot " />
<person posts="2" size="8" who="Dimitris Michailidis " />
<person posts="2" size="8" who="Peter Rival " />
<person posts="2" size="8" who="Mike Galbraith " />
<person posts="2" size="8" who="Hadmut Danisch " />
<person posts="2" size="8" who="G. Hugh Song " />
<person posts="2" size="8" who="Vojtech Pavlik " />
<person posts="2" size="8" who="" />
<person posts="2" size="8" who="Jesse Pollard " />
<person posts="2" size="8" who="Joerg Schilling " />
<person posts="2" size="8" who="Adam Fritzler " />
<person posts="2" size="8" who="Andreas Haumer " />
<person posts="2" size="8" who="Lech Szychowski " />
<person posts="2" size="8" who="" />
<person posts="2" size="8" who="Karim Yaghmour " />
<person posts="2" size="7" who="Kernel Related Emails " />
<person posts="2" size="7" who="Mani Manoharan Balaraman " />
<person posts="2" size="7" who="Mark Haney " />
<person posts="2" size="7" who="Jos Hulzink " />
<person posts="2" size="7" who="Christoph Lameter " />
<person posts="2" size="7" who="Andi Kleen " />
<person posts="2" size="7" who="khromy " />
<person posts="2" size="7" who="Chip Salzenberg " />
<person posts="2" size="7" who="Mike Castle " />
<person posts="2" size="7" who="Marcus Meissner " />
<person posts="2" size="7" who="=?iso-8859-1?Q?Rodolfo_Garc=EDa?= " />
<person posts="2" size="6" who="Kurt Roeckx " />
<person posts="2" size="6" who="Adam Langley " />
<person posts="2" size="6" who="Simon Richter " />
<person posts="2" size="6" who="david parsons " />
<person posts="2" size="6" who=" (Arjan van de Ven)" />
<person posts="2" size="6" who="James Simmons " />
<person posts="2" size="6" who="Sasi Peter " />
<person posts="2" size="6" who="bug1 " />
<person posts="2" size="6" who="Craig Whitmore " />
<person posts="2" size="6" who="Alexander Demenshin " />
<person posts="2" size="6" who="Pauline Middelink " />
<person posts="2" size="6" who="sat " />
<person posts="2" size="6" who="" />
<person posts="2" size="6" who="Neil Darlow " />
<person posts="2" size="6" who="Alexander Viro " />
<person posts="2" size="6" who="Steve Dodd " />
<person posts="2" size="5" who="Albert Cranford " />
<person posts="2" size="5" who="" />
<person posts="2" size="5" who=" (Arjan van de Ven)" />
<person posts="2" size="5" who="Ville Herva " />
<person posts="2" size="5" who="Johan Kullstam " />
<person posts="2" size="5" who="Lawrence Manning " />
<person posts="2" size="5" who="Sujit Vaidya " />
<person posts="2" size="5" who="Wakko Warner " />
<person posts="2" size="5" who="akshata " />
<person posts="2" size="5" who="Nathan Thompson " />
<person posts="2" size="5" who="" />
<person posts="2" size="5" who="=?ISO-8859-1?Q? =C4=E5=AA=E1=B5=D3=A4l ?= " />
<person posts="2" size="5" who="Jason Fayre " />
<person posts="2" size="5" who="Brian Gerst " />
<person posts="2" size="4" who="Chris Evans " />
<person posts="2" size="4" who="Yuri Dennis Ramos Ramirez " />
<person posts="2" size="4" who="Sascha Ziemann " />
<person posts="2" size="4" who="Velizar Bodoursky " />
<person posts="1" size="35" who="" />
<person posts="1" size="22" who="" />
<person posts="1" size="16" who="Andreas Schuldei " />
<person posts="1" size="15" who="Chris Buchanan " />
<person posts="1" size="14" who="Julio C Castillo Leyton (EPY) " />
<person posts="1" size="12" who="=?iso-8859-1?Q?Jos=E9?= Lello " />
<person posts="1" size="12" who="George " />
<person posts="1" size="10" who="Christian Klippel " />
<person posts="1" size="10" who="Ralf Gerbig " />
<person posts="1" size="9" who="William Stearns " />
<person posts="1" size="8" who="Peter Enderborg " />
<person posts="1" size="7" who="Rene Mayrhofer " />
<person posts="1" size="7" who="Thomas Davis " />
<person posts="1" size="7" who="Corey Thomas " />
<person posts="1" size="7" who="Cyrille Chepelov (home) " />
<person posts="1" size="7" who="David Whysong " />
<person posts="1" size="6" who="Manuel Estrada " />
<person posts="1" size="6" who="Saxena, Sunil " />
<person posts="1" size="6" who="Tim Walberg " />
<person posts="1" size="6" who="" />
<person posts="1" size="6" who="Arthur Pedyczak " />
<person posts="1" size="5" who="Mr. Berkley Shands " />
<person posts="1" size="5" who="Therien, Guy " />
<person posts="1" size="5" who="George France " />
<person posts="1" size="5" who="Sean McElroy " />
<person posts="1" size="5" who="Mike Hudson " />
<person posts="1" size="5" who="=?iso-8859-1?Q?Alberto_Parga_Fern=E1ndez?= " />
<person posts="1" size="5" who="Harald Koenig " />
<person posts="1" size="5" who="" />
<person posts="1" size="5" who="Andrey Panin " />
<person posts="1" size="4" who=" (Kai Henningsen)" />
<person posts="1" size="4" who="Marc Duponcheel " />
<person posts="1" size="4" who="Evan Langlois " />
<person posts="1" size="4" who="dmdaiko " />
<person posts="1" size="4" who="Tzvetan Chaliavski " />
<person posts="1" size="4" who="Andreas Dilger " />
<person posts="1" size="4" who="Piotr Wilkin " />
<person posts="1" size="4" who="Jesse Pollard " />
<person posts="1" size="4" who="Oliver Paukstadt " />
<person posts="1" size="4" who="Klaus Naumann " />
<person posts="1" size="4" who="Alex Belits " />
<person posts="1" size="4" who="David Weinehall " />
<person posts="1" size="4" who="" />
<person posts="1" size="4" who="Raj, Ashok " />
<person posts="1" size="4" who="Steve Snyder " />
<person posts="1" size="4" who="Gregory Maxwell " />
<person posts="1" size="4" who="Steve Lord " />
<person posts="1" size="4" who="" />
<person posts="1" size="4" who="Jim Schutt " />
<person posts="1" size="4" who="Oertel, Tim " />
<person posts="1" size="4" who="Victor Zandy " />
<person posts="1" size="4" who="Iain McClatchie " />
<person posts="1" size="4" who="Roberto Oppedisano " />
<person posts="1" size="4" who="Christoph Rohland " />
<person posts="1" size="4" who="mogibiwa staff " />
<person posts="1" size="4" who="Kip Matthew Macy " />
<person posts="1" size="4" who="David Arendt " />
<person posts="1" size="4" who=" (Kai Henningsen)" />
<person posts="1" size="4" who="David A. Bandel " />
<person posts="1" size="4" who=" (Kanoj Sarcar)" />
<person posts="1" size="4" who="Tom Diehl " />
<person posts="1" size="3" who="Michael Ivanov " />
<person posts="1" size="3" who="Robson Miranda " />
<person posts="1" size="3" who="Daniel Podlejski " />
<person posts="1" size="3" who="Brian Parris " />
<person posts="1" size="3" who="Mike Porter " />
<person posts="1" size="3" who="Mr.Aphirak Jansang " />
<person posts="1" size="3" who="Martin Haller " />
<person posts="1" size="3" who="Andy Glew " />
<person posts="1" size="3" who="Derek Leong " />
<person posts="1" size="3" who="Daniel Stone " />
<person posts="1" size="3" who=" (Robert V. Baron)" />
<person posts="1" size="3" who="Erik Andersen " />
<person posts="1" size="3" who="Arjan van de Ven " />
<person posts="1" size="3" who="Steffen Kern " />
<person posts="1" size="3" who="Philipp Thomas " />
<person posts="1" size="3" who=".sig " />
<person posts="1" size="3" who="Eric Lemar " />
<person posts="1" size="3" who=" (Rogier Wolff)" />
<person posts="1" size="3" who="Ari Pollak " />
<person posts="1" size="3" who="Hans Reiser " />
<person posts="1" size="3" who="Ingo Oeser " />
<person posts="1" size="3" who=" (Stephen Harris)" />
<person posts="1" size="3" who="Jonathan Case Nicklin " />
<person posts="1" size="3" who="Jeff Dike " />
<person posts="1" size="3" who="Chris Meadors " />
<person posts="1" size="3" who="Andi Kleen " />
<person posts="1" size="3" who="Joerg Stroettchen " />
<person posts="1" size="3" who="James Sutherland " />
<person posts="1" size="3" who="Frank van Maarseveen " />
<person posts="1" size="3" who="" />
<person posts="1" size="3" who="Dylan Griffiths " />
<person posts="1" size="3" who="peter swain " />
<person posts="1" size="3" who="Chris Wedgwood " />
<person posts="1" size="3" who="Christian Zietz " />
<person posts="1" size="3" who="Bradley M Keryan " />
<person posts="1" size="3" who="Albert D. Cahalan " />
<person posts="1" size="3" who="=?iso-8859-1?Q?Mads_Martin_J=F8rgensen?= " />
<person posts="1" size="3" who="Jon Masters " />
<person posts="1" size="3" who="Adam K Kirchhoff " />
<person posts="1" size="3" who="The Digital Yearbook " />
<person posts="1" size="3" who="Stephen Liu " />
<person posts="1" size="3" who="" />
<person posts="1" size="3" who="Tim Waugh " />
<person posts="1" size="3" who="Peter Gervai " />
<person posts="1" size="3" who="Jamie Lokier " />
<person posts="1" size="3" who="bert hubert " />
<person posts="1" size="3" who="Stepan Kasal " />
<person posts="1" size="3" who="Forwarded SuSE Mail " />
<person posts="1" size="3" who="Jan-Benedict Glaw " />
<person posts="1" size="3" who="Jan Harkes " />
<person posts="1" size="3" who="Frank Mehnert " />
<person posts="1" size="3" who="Daniel Kobras " />
<person posts="1" size="3" who="Roman V. Shaposhnick " />
<person posts="1" size="3" who="John Reiser " />
<person posts="1" size="3" who="Ove Ewerlid " />
<person posts="1" size="3" who="Sridhar Uravakonda " />
<person posts="1" size="3" who="Remco Nonhebel " />
<person posts="1" size="3" who="Mark Hahn " />
<person posts="1" size="3" who="Matti Aarnio " />
<person posts="1" size="3" who="Thomas Dodd " />
<person posts="1" size="3" who=" (Dave Jones)" />
<person posts="1" size="3" who="Benhanokh Gabriel " />
<person posts="1" size="3" who="James A Simmons " />
<person posts="1" size="3" who="Meelis Roos " />
<person posts="1" size="3" who="Stepan Kasal " />
<person posts="1" size="3" who="Stefan Monnier " />
<person posts="1" size="3" who="James " />
<person posts="1" size="3" who="Andrew Stubbs " />
<person posts="1" size="3" who="David Hinds " />
<person posts="1" size="3" who="James R Bruce " />
<person posts="1" size="3" who="Michael Riepe " />
<person posts="1" size="3" who="Francois romieu " />
<person posts="1" size="3" who="Robert L. Harris " />
<person posts="1" size="3" who="Barry K. Nathan " />
<person posts="1" size="3" who="Brian Hall " />
<person posts="1" size="3" who="Adam Heath " />
<person posts="1" size="3" who="Matthew Kirkwood " />
<person posts="1" size="3" who="Juanjo Ciarlante " />
<person posts="1" size="3" who="Badrinath Venkatachari " />
<person posts="1" size="3" who="ejc " />
<person posts="1" size="3" who="Chris Mason " />
<person posts="1" size="2" who="Frank Bernard " />
<person posts="1" size="2" who="Mark Aikens " />
<person posts="1" size="2" who="Mark Zealey " />
<person posts="1" size="2" who="Tigran Aivazian " />
<person posts="1" size="2" who="Dan Kegel " />
<person posts="1" size="2" who="Michael David " />
<person posts="1" size="2" who="J Scott Berg " />
<person posts="1" size="2" who="Matthias Andree " />
<person posts="1" size="2" who="Erik Mouw " />
<person posts="1" size="2" who="Lawrence Walton " />
<person posts="1" size="2" who="Enrico Weigelt " />
<person posts="1" size="2" who="Ed Boraas " />
<person posts="1" size="2" who="Dr. Kelsey Hudson " />
<person posts="1" size="2" who="Chester " />
<person posts="1" size="2" who="Linux Kernel " />
<person posts="1" size="2" who="Nick Clifford " />
<person posts="1" size="2" who="David Huggins-Daines " />
<person posts="1" size="2" who="Dale Amon " />
<person posts="1" size="2" who="V Ganesh " />
<person posts="1" size="2" who="Jim Nance " />
<person posts="1" size="2" who="Dan Malek " />
<person posts="1" size="2" who="Pavel Machek " />
<person posts="1" size="2" who="Tom Goodman " />
<person posts="1" size="2" who="Justin " />
<person posts="1" size="2" who="Vermont Rutherfoord " />
<person posts="1" size="2" who=" (David A. Wagner)" />
<person posts="1" size="2" who="Jeffrey C. Becker " />
<person posts="1" size="2" who=" (Andreas Jellinghaus)" />
<person posts="1" size="2" who="Fausto Saporito " />
<person posts="1" size="2" who="Stepan Kasal " />
<person posts="1" size="2" who="Mikulas Patocka " />
<person posts="1" size="2" who="" />
<person posts="1" size="2" who="Stead, Colin " />
<person posts="1" size="2" who="Roy Sigurd Karlsbakk " />
<person posts="1" size="2" who="" />
<person posts="1" size="2" who="" />
<person posts="1" size="2" who="Per Kristian Gjermshus " />
<person posts="1" size="2" who="Patrick Lerda " />
<person posts="1" size="2" who="Lehel Bernadt " />
<person posts="1" size="2" who="" />
<person posts="1" size="2" who="Dieter =?iso-8859-1?Q?N=FCtzel?= " />
<person posts="1" size="2" who="" />
<person posts="1" size="2" who="" />
<person posts="1" size="2" who="=?ks_c_5601-1987?B?sei068ij?= " />
<person posts="1" size="2" who="Jochen Dolze " />
<person posts="1" size="2" who="Pete Zaitcev " />
<person posts="1" size="2" who="Bill Huey " />
<person posts="1" size="2" who="Robert S. Irrgang " />
<person posts="1" size="2" who="Wartan Hachaturow " />
<person posts="1" size="2" who="Andrew McNabb " />
<person posts="1" size="2" who="Jun Hamano " />
<person posts="1" size="2" who="" />
<person posts="1" size="2" who="octave klaba " />
<person posts="1" size="2" who="Vinodkumar Parasmal " />
<person posts="1" size="2" who="" />
<person posts="1" size="2" who="Mattias Kunkel " />
<person posts="1" size="2" who="Raghavendra Bhat " />
<person posts="1" size="2" who="Chen Chen " />
<person posts="1" size="2" who="Alessandro Barbieri " />
<person posts="1" size="2" who="" />
<person posts="1" size="2" who="Karel Kulhavy " />
<person posts="1" size="2" who="Bernhard Rosenkraenzer " />
<person posts="1" size="2" who="Anthony Barbachan " />
<person posts="1" size="2" who="Andrew G. Gilpin  " />
<person posts="1" size="2" who="Catilina " />
<person posts="1" size="2" who="Roel van der Goot " />
<person posts="1" size="2" who="Matt Eaton " />
<person posts="1" size="2" who="John Kennedy " />
<person posts="1" size="2" who="Ralf Baechle " />
<person posts="1" size="2" who="f5ibh " />
<person posts="1" size="2" who="Alexander Koch " />
<person posts="1" size="1" who="Kim " />

</stats>

<section
  title="'movb' Instruction On Intel"
  subject="namei() query"
  archive="http://kernelnotes.org/lnxlists/linux-kernel/lk_0004_03/msg00457.html"
  posts="97"
  startdate="18 Apr 2000 00:00:00 -0800"
  enddate="29 Apr 2000 00:00:00 -0800"
>
<topic>SMP</topic>

<mention>Manfred Spraul</mention>
<mention>Jamie Lokier</mention>

<correction date="09 May 2000 07:34:00 -0800">Many thanks to Kenneth Topp, who
pointed out that this problem was covered earlier, in <kcref
subject="spin_unlock optimization(i386)" startdate="20 Nov 1999 00:00:00 -0800"></kcref><!--
kt19991220_47.html#1 -->. Thanks, Kenneth!</correction>

<p>In the course of discussion, Linus Torvalds explained:</p>

<quote who="Linus Torvalds">

<p>I have conflicting reports about the safety of
"movb" from Intel. According to some people in there, "movb" is always safe,
and there should not be any need for any config option at all.</p>

<p>However, at the same time my original contact at intel was Andy Glew, who
probably knows more about the ia32 core than anybody else I know. And Andy
says that yes "movb" is legal, but that some very early P6 steppings may be
buggy. And Andy is God.</p>

<p>I'd hate to have a kernel that works 99% of the time but then has occasional
problems on some very rare machines that are really hard to track down. But
I'd _almost_ like to just make the movb the default and have a
CONFIG_BROKEN_P6_ORDERING options for the very very special case.</p>

</quote>

<p>Jamie Lokier replied that he remembered the discussion where the 'movb'
issues were hashed out, but that he (and others) still didn't understand
exactly what the problems were. Oliver Xymoron speculated that the whole
problem might not even exist. He said, <quote who="Oliver Xymoron">There are
very few things that could cause the movb to be a problem. For instance, it
can't be in the cache coherency protocol as the unlock can be lazy at it
likes and still be safe. My only guess is that somehow the movb can get
scheduled ahead of reads or writes inside the critical section. If that's
the case, then the whole coherency scheme is broken, no? We'd need to
rethink quite a number of things we've presumed safe.</quote> He added that
before working on the problem, he'd like to see confirmation that there was
actually a bug at all.</p>

<p>Some folks offered to test out any sample code, and Oliver replied to
himself almost exactly a day later, with a pointer to Intel's <a
href="http://developer.intel.com/design/pro/specupdt/242689.htm">Pentium Pro
errata</a> page. He included some code by Manfred Spraul that tested for the
bug, and invited folks with Pentium Pro's to try it out. If it locked up the
systems, he said, that meant there was a problem. Jakob &#216;stergaar
confirmed the lock-up, but it turned out that Manfred's code was not
actually a proper test. Before realizing this, Linus was happy to finally
put the issue to rest without a shadow of a doubt; but Oliver replied,
explaining the confusion, and adding that actually, some new code he'd
posted would be a much better test. In fact, if anyone locked up their
Pentium Pro's with it, he said, it would indicate even more serious
problems. But the only tests reported, came back negative. No machines
locked.</p>

<p>The question remained open until, under the Subject: <a
href="http://kernelnotes.org/lnxlists/linux-kernel/lk_0004_04/msg00332.html">Re:
Linux spin_unlock debate (fwd)</a>, Oliver quoted some private email,
between Andy Glew and him, in which Andy had said:</p>

<quote who="Andy Glew">

<p>Use MOVB already!!!! Tell Linus I told you so!!!!
(I've passed this on to about a dozen LINUX people. Send me Linus' email
address, and I'll tell him myself. Forward this on, whatever.)</p>

<p>I know why this misunderstanding happened:</p>

<p>Back in 90/91, Intel had a "Memory Ordering Task Force", whose
recommendation was that Intel adopt a weakly ordered memory consistency
model. To make this work, you have to be able to identify lock releases.
Lacking a special "RELEASE LOCK" instruction - on the i486 you could apply
the LOCK prefix to an ordinary write, not just a read-modify-write -- this
task force said that locks should be released by a locked read-modify-write.
Like, and XCHG that wrote zero.</p>

<p>That's still official Intel policy.</p>

<p>However, the P6 processor decided to go for "speculative processir
consistency" - we snoop the bus appropriately, and are *not* weakly
consistent. Indeed. it would be close to impossible to build a weakly
consistent P6 system, without having to require special external hardware.</p>

<p>So, on P6 (and Willamette, I believe) it is correct to use an ordinary write
to release the lock.</p>

<p>Now, there *was* a bug on early P6 silicon in this regard. But it would not
bite you so long as you used a locked read-modify-write to acquire the lock.</p>

<p>So: if you are willing to write code that should work correctly on every x86
multiprocessor to date (except for some of the earliest i386 and i486 MPs
that were weakly ordered) you can use MOVB to release the lock.</p>

<p>Now, I'm in absolutely no position to say that, but I think that I can
reasonably say that, if Intel ever builds a MP-capable system that is weakly
ordered, there will be a CPUID bit indicating it. In fact, I think it;'s
time that we defined what it is - one of the bits that currently reads as 0
- so that you can write forward looking code. I'll see if I can get that
defined for you. For now, check that CPUID indicates a P6 or a earlier, or
whatever Willamette turns out to be.</p>

<p>Caveat: although Intel's "glueless MP" works as I have described, it is
always possible for a system vendor to break the consistency model, e.g. by
reordering stores in external inter-bus bridges. So, don't abandon the
conservative code - just don't make it the default, since 90% of the x86 MP
systems are processor consistent.</p>

<p>Caveat #2: IA64 Merced systems are not, IIRC, processor consistent.
(Fortunately, they do define an efficient lock release.) I'm CC'ing Gil
Neiger on this - he took over the role of :"memory model maven" when I left
Intel, knows what the IA64 memory model is, and will undoubtedly correct any
errors in my email.</p>

<p>BOTTOM LINE: use MOVB already!!!!</p>

</quote>

<p>Linus replied:</p>

<quote who="Linus Torvalds">

<p>Heh. Ok, the next kernel version will definitely
use the movb based spinlock unlocks.</p>

<p>In fact, that allows us to do the "lock decb"-based spinlock, so I'll get
rid of the slow bit-op-based version entirely.</p>

<p>Thanks for following up on all this.</p>

</quote>

</section>

<section
  title="Cleaning Up Unnecessary Kernel Locks"
  subject="[PATCH] f_op-&gt;poll() without lock_kernel()"
  archive="http://kernelnotes.org/lnxlists/linux-kernel/lk_0004_03/msg01063.html"
  posts="32"
  startdate="21 Apr 2000 00:00:00 -0800"
  enddate="25 Apr 2000 00:00:00 -0800"
>
<topic>Networking</topic>
<topic>SMP</topic>

<mention>Alan Cox</mention>
<mention>Manfred Spraul</mention>
<mention>David S. Miller</mention>

<p>In the course of a previous subthread of the Subject: <a
href="http://kernelnotes.org/lnxlists/linux-kernel/lk_0004_03/msg00457.html">namei()
query</a>, while folks were tracking down some performance issues, there was
some question of whether 'schedule()' required a full kernel lock. Linus
Torvalds finally pointed out that</p>

<quote who="Linus Torvalds">

<p>What schedule() does is to just re-instate a
previously held lock (yes, you obviously know that, I'm just stating it
clearly). Which means that it's not really schedule() itself that needs the
lock, and that you should not look at schedule() as the "offender".</p>

<p>The real offender, of course, is the caller of schedule(). So the "cost" is
reall yjust attributed to the wrong function.</p>

</quote>

<p>In the same post, he went on, <quote who="Linus Torvalds">It's almost
certainly going to be "poll()" that is the big one contributing to
schedule(), judging by your other numbers. In fact, poll() looks to be badly
written wrt the big kernel lock.</quote> Elsewhere but close by, Manfred
Spraul suggested that 'poll()' might not even need the kernel lock. Linus
replied:</p>

<quote who="Linus Torvalds">

<p>I suspect that pretty much every poll() function
is already SMP-safe. The networking versions of poll() in fact drop the lock
explicitly, and those are just about the most complex poll() implementations
anywhere.</p>

<p>So the right solution may in fact be to remove the kernel lock altogether,
and also make sure that the networking code stops playing with it for their
poll() implementation. I doubt you'll find anything that breaks, simply
because the way poll() is done under Linux is rather thread-safe (ie the
double-calling on failure gets rid of all the hard races). And most poll()
implementations just check a flag and add themselves to the wait queues, all
of which is perfectly SMP-safe already.</p>

</quote>

<p>All this took place in the previous thread. Now in this new one, Manfred
posted a patch to take the kernel lock out of 'poll()'. Alan Cox said this
wasn't a good idea if they were trying to stablize for 2.4; but David S.
Miller replied that on the contrary, now was the time to find out if the
change would break anything. At this point, Linus said:</p>

<quote who="Linus Torvalds">

<p>I decided to take a look at the actual
functions, and having looked at them I definitely think that poll() should
run without the kernel lock.</p>

<p>Getting rid of the kernel lock makes the networking poll() cleaner, and of
the 25 other poll functions I looked at, every single one seemed safe. I'm
told the ISDN one is SMP-unsafe, but that the ISDN code is not SMP-safe for
read() or write() either. I didn't look at that one.</p>

<p>The sound drivers, for example, already did all the locking they needed,
simply because they needed the locking against their own interrupts anyway.
And they obviously didn't use the kernel lock for that.. Some of the bad
ones used the global irq lock, which also works but isn't as nice as having
your own spinlock.</p>

<p>Most of the other things just didn't need any locking at all (just test a
flag and add the poll-queue entry).</p>

<p>The only questionable entry I found was usb_device_poll() which I fixed up
with a lock_kernel()/unlock_kernel() pair.</p>

<p>I probably missed one or two. I added comments to the ones I went through,
and I definitely think it is worth doing at this point.</p>

</quote>

<p>A number of people pitched in to find all the problems, and the discussion
continued for several more days.</p>

</section>

<section
  title="'kswapd' Instability; Debugging Deadlocks"
  subject="[PATCH] 2.3.99-pre6-3+  VM rebalancing"
  archive="http://kernelnotes.org/lnxlists/linux-kernel/lk_0004_04/msg00092.html"
  posts="23"
  startdate="22 Apr 2000 00:00:00 -0800"
  enddate="28 Apr 2000 00:00:00 -0800"
>
<topic>Virtual Memory</topic>

<p>There were a lot of scattered reports of hangs and high CPU usage related to
'kswapd' this week. Andrew Stubbs even called it the <quote who="Andrew
Stubbs">kswapd of death.</quote></p>

<p>It may have all started with Rik van Riel's patch, when he announced:</p>

<quote who="Rik van Riel">

<p>the following patch makes VM in 2.3.99-pre6+
behave more nice than in previous versions. It does that by:</p>

<p>
<ul>

<li>having a global lru queue for shrink_mmap()</li>

<li>slightly improving the lru scanning</li>

<li>being less agressive with lru scanning, so we'll have more pages in the
lru queue and will do better page aging (and also gives us a bigger buffer
of clean pages, this way big memory hogs have less impact on the rest of the
system)</li>

<li>freeing some pages from the "wrong" zone when freeing from one
particular zone ... this keeps memory balanced because __alloc_pages() will
allocate most pages from the least busy zone</li>

</ul>
</p>

<p>It has done some amazing things in test situations on my machine, but I have
no idea what it'll do to kswapd cpu usage on &gt;GB machines. I think that
the extra freedom in allocation will offset the slightly more expensive
freeing code almost all of the time.</p>

</quote>

<p>Reports of 'kswapd' using huge amounts of CPU cropped up in many threads,
but eventually, Shane Nay summarized his experiences:</p>

<quote who="Shane Nay">

<p>I have been having extremely serious problems with
kswapd. I noted that changes had occured after Rik's patch to 2.3.99pre3, I
grabbed that and my kswapd problem is gone. As a case in point, while
running 2.3.99pre6 I was getting 2 gig/hr backing up to my tape drive, and
my system was fully unusable in the process. With 2.3.99pre3 my system was
really usable during the process and transfered 5gig/hr. I removed all my
swap partitions and the problem still persisted under 2.3.pre6 . So I'm
pretty sure that Rik's patch was the cause of the problem... but why? He
just got rid of the silly while, right? Didn't someone mention that
basically that just kept the process spinning around for the rest of it's
time slice? Maybe it really did something during that time that prevented a
context switch problem? (That doesn't make any sense to me..., but it feels
right if that makes any sense at all... which it doesn't I know. i.e.
obviously didn't do anything..., but maybe somebody knows what I mean
because I'm having trouble putting it to words)</p>

<p>Anyway, just wanted to throw out a "me too", and bring up the history of it.
Rik if you want to send me a patch to test, I'd be happy to help you out in
testing, and might mess arround with the code later this week. (Oh, BTW Rik,
I don't mean to "blame" you, just wanted to bring up the history of it) Has
anyone tried copying Riks changes into a 2.3.99pre3 based kernel to isolate
that one change and tried? Rik if you forward me your original patch against
2.3.99pre3 I'll do that (or send me a URL). Maybe the problem creaped in
from another change. I noted however, that pre6 seemed a lot faster until
kswapd started going crazy..., was there another change to the caching code
that may have "interacted" with Rik's patch? (Caching seems to be much much
more aggressive)</p>

<p>One other note.  This is ALL related to disk i/o.  But not swapping to disk.
It seems that the caching of disk files is causing the problem... over
aggressive maybe? Because basically anything I do that's disk intensive, it
fills the cache, and then it's spending loads of CPU time swapping stuff in
and out of *memory* not virtual memory. (Like I noted, the problem persists
even if you turn off all swap partitions)</p>

</quote>

<p>One great tidbit came out of the experience. Linus Torvalds described a way
to debug deadlocks:</p>

<quote who="Linus Torvalds">

<p>Note that if you have an EIP, debugging these
kinds of things is usually quite easy. You should not be discouraged at all
by the fact that it is "somewhere in stext_lock" - with the EIP it is very
easy to figure out exactly which lock it is, and which caller to the lock
routine it is that failed.</p>

<p>For example, if I knew that I had a lock-up, and the EIP I got was
0xc024b5f9 on my machine, I'd do:</p>

<blockquote>

<code>

        gdb vmlinux<br />
        (gdb) x/5i 0xc024b5f9<br />
        0xc024b5f9 &lt;stext_lock+1833&gt;:   jle    0xc024b5f0 &lt;stext_lock+1824&gt;<br />
        0xc024b5fb &lt;stext_lock+1835&gt;:   jmp    0xc0119164 &lt;schedule+296&gt;<br />
        0xc024b600 &lt;stext_lock+1840&gt;:   cmpb   $0x0,0xc02c46c0<br />
        0xc024b607 &lt;stext_lock+1847&gt;:   repz nop<br />
        0xc024b609 &lt;stext_lock+1849&gt;:   jle    0xc024b600 &lt;stext_lock+1840&gt;<br />

</code>

</blockquote>

<p>which tells me that yes, it seems to be in the stext_lock region, but more
than that it also tells me that the lock stuff will exit to 0xc0119164, or
in the middle of schedule. So then just disassemble that area:</p>

<blockquote>

<code>

        (gdb) x/5i 0xc0119164<br />
        0xc0119164 &lt;schedule+296&gt;:      lock decb 0xc02c46c0<br />
        0xc011916b &lt;schedule+303&gt;:      js     0xc024b5f0 &lt;stext_lock+1824&gt;<br />
        0xc0119171 &lt;schedule+309&gt;:      mov    0xffffffc8(%ebp),%ebx<br />
        0xc0119174 &lt;schedule+312&gt;:      cmpl   $0x2,0x28(%ebx)<br />
        0xc0119178 &lt;schedule+316&gt;:      je     0xc0119b00 &lt;schedule+2756&gt;<br />

</code>

</blockquote>

<p>which tells us that it's a spinlock at address 0xc02c46c0, and the
out-of-line code for the contention case starts at 0xc024b5f0 (which was
roughly where we were: the whole sequence was</p>

<blockquote>

<code>

        (gdb) x/4i 0xc024b5f0<br />
        0xc024b5f0 &lt;stext_lock+1824&gt;:   cmpb   $0x0,0xc02c46c0<br />
        0xc024b5f7 &lt;stext_lock+1831&gt;:   repz nop<br />
        0xc024b5f9 &lt;stext_lock+1833&gt;:   jle    0xc024b5f0 &lt;stext_lock+1824&gt;<br />
        0xc024b5fb &lt;stext_lock+1835&gt;:   jmp    0xc0119164 &lt;schedule+296&gt;<br />

</code>

</blockquote>

<p>which includes the EIP that we were found looping at.</p>

<p>More than that, you can then look at the spinlock (this only works for
static spinlocks, but 99% of all spinlocks are of that kind):</p>

<blockquote>

<code>

        (gdb) x/x 0xc02c46c0<br />
        0xc02c46c0 &lt;runqueue_lock&gt;:     0x00000001<br />

</code>

</blockquote>

<p>which shows us that the spinlock in question was the runqueue_lock in
thismade up example. So this told us that somebody got stuck in schedule()
waiting for the runqueue lock, and we know which lock it is that has
problems. We do NOT know how that lock came to be locked forever, but by
this time we have much better information... It is often useful to look at
where the other CPU seems to be spinning at this point, because that will
often show what lock _that_ CPU is waiting for, and that in turn often gives
the deadlock sequence at which point you go "DUH!" and fix it.</p>

<p>Now, this gets a bit more complex if you have semaphore trouble, because
when a semaphore blocks forever you will just find the machine idle with
processes blocked in "D" state, and it looks worse as a debugging issue
because you have so little to go on. But semaphores can very easily be
turned into "debugging semaphores" with this trivial change to __down() in
arch/i386/kernel/semaphore.c:</p>

<blockquote>

<code>

        -               schedule();<br />
        +               if (!schedule_timeout(20*HZ)) BUG();<br />

</code>

</blockquote>

<p>which is not actually 100% correct in the general case (having a semaphore
that sleeps for more than 20 seconds is possible in theory, but in 99.9% of
all cases it is indicative of a kernel bug and a deadlock on the semaphore).</p>

<p>Now you'll get a nice Oops when the lockup happens (or rather, 20seconds
after the lockup happened), with full stack-trace etc. Again, this way you
can see exactly which semaphore and where it was that it blocked on.</p>

<p>(Btw - careful here. You want to make sure you only check the first oops.
Quite often you can get secondary oopses due to killing a process in the
middle of a critical region, so it's usually the first oops that tells you
the most. But sometimes the secondary oopses can give you more deadlock
information - like who was the other process involved in the deadlock if it
wasn't simply a recursive one)..</p>

<p>Thus endeth this lesson on debugging deadlocks. I've done it often
enough..</p>

<p>PS. If the deadlock occurs with interrupts disabled, you won't get the EIP
with the "alt+scroll-lock" method, so they used to be quite horrible to
debug. These days those are the trivial cases, because the automatic irq
deadlock detector will kick in and give you a nice oops when they happen
without you having to do anything extra.</p>

</quote>

</section>

<section
  title="'modutils' Cleanup"
  subject="RE: Announce: modutils 2.3.11 is available - the debugger's helper"
  archive="http://kernelnotes.org/lnxlists/linux-kernel/lk_0004_04/msg00154.html"
  posts="8"
  startdate="23 Apr 2000 00:00:00 -0800"
  enddate="28 Apr 2000 00:00:00 -0800"
>
<topic>Backward Compatibility</topic>

<mention>Jamie Lokier</mention>

<p>Continuing the discussion from <kcref subject="Announce: modutils 2.3.11 is
available - the debugger's helper" startdate="21 Apr 2000 00:00:00 -0800"></kcref><!--
kt20000501_65.html#15 -->, Jamie Lokier suggested naming the '/lib/modules'
directory tree after the kernel source's 'driver' and 'net' trees, for
consistancy. Keith Owens replied:</p>

<quote who="Keith Owens">

<p>That would work.  Define /lib/modules/.../kernel
with the same internal structure as the kernel. modutils scans all
directories under /lib/modules/..., kernel first, then any defined path
entries then any directrory not already scanned.</p>

<p>It preserves the existing scan order, kernel before third party modules.
Putting everything under kernel lets "make modules_install" erase all old
kernel modules before installing a new set of kernel modules, leaving third
party modules alone. It keeps modules separate for those people who dislike
a single flat directory. And most importantly it removes the version skew
between the list of module directories in the kernel and modutils.</p>

<p>Unless anybody has a violent objection to this, I will add the .../kernel
directory to modutils 2.3.12 then do a kernel patch to "make
modules_install" under .../kernel and remove old modules. It will all be
backwards compatible.</p>

</quote>

<p>Jeff Garzik concluded, <quote who="Jeff Garzik">Sounds ok; this sort of
scanning definitely needs to occur, to prevent the current problem of having
an unknown directory get skipped in the scan. If it exists under
/lib/modules/..., modprobe should be able to find it :)</quote></p>

</section>

<section
  title="To Do Before 2.4: Saga Continues"
  subject="Linux Jobs as of 2.3.99pre6-5"
  archive="http://kernelnotes.org/lnxlists/linux-kernel/lk_0004_04/msg00303.html"
  posts="68"
  startdate="24 Apr 2000 00:00:00 -0800"
  enddate="30 Apr 2000 00:00:00 -0800"
>
<topic>Compression</topic>
<topic>Disk Arrays: RAID</topic>
<topic>Disks: IDE</topic>
<topic>Disks: SCSI</topic>
<topic>FS: Coda</topic>
<topic>FS: FAT</topic>
<topic>FS: NFS</topic>
<topic>FS: NTFS</topic>
<topic>FS: UMSDOS</topic>
<topic>I2O</topic>
<topic>Modems</topic>
<topic>Networking</topic>
<topic>PCI</topic>
<topic>Power Management: ACPI</topic>
<topic>SMP</topic>
<topic>Samba</topic>
<topic>Security</topic>
<topic>USB</topic>
<topic>Virtual Memory</topic>
<topic>VisWS</topic>

<mention>Randy Dunlap</mention>
<mention>Tim Waugh</mention>

<p>Alan Cox's list of things to do before 2.4 could come out, was first covered
in <kcref subject="First draft list of 2.3.x 'Things to fix'"
startdate="04 Jan 2000 00:00:00 -0800"></kcref><!-- kt20000124_52.html#1 -->, then again in
<kcref subject="Updated 2.3.x job list (its getting shorter)"
startdate="28 Jan 2000 00:00:00 -0800"></kcref><!-- kt20000214_54.html#1 -->, <kcref
subject="Linux Status For 2.3.x: v 2.3.43"
startdate="10 Feb 2000 00:00:00 -0800"></kcref><!-- kt20000228_56.html#3 -->, <kcref
subject="Running JOBS list." startdate="10 Mar 2000 00:00:00 -0800"></kcref><!--
kt20000327_60.html#3 -->, <kcref subject="The 2.3.x Job List (Updated)"
startdate="28 Mar 2000 00:00:00 -0800"></kcref><!-- kt20000410_62.html#8 -->, <kcref
subject="Linux 2.4 Jobs Update" startdate="03 Apr 2000 00:00:00 -0800"></kcref><!--
kt20000417_63.html#6 -->, and most recently in <kcref subject="Linux
2.3.99pre6-3 job list" startdate="16 Apr 2000 00:00:00 -0800"></kcref><!--
kt20000424_64.html#10 -->. This week Alan posted:</p>

<quote who="Alan Cox">

<p>
<ol>

<li>Fixed</li>

<p>
<ol>

<li>Tulip hang on rmmod (fixed in .51 ?)</li>

<li>Incredibly slow loopback tcp bug (believed fixed about 2.3.48)</li>

<li>COMX series WAN now merged</li>

<li>VM needs rebalancing or we have a bad leak</li>

<li>SHM works chroot</li>

<li>SHM back compatibility</li>

<li>Intel i960 problems with I2O</li>

<li>Symbol clashes and other mess from _three_ copies of zlib!</li>

<li>PCI buffer overruns</li>

<li>Shared memory changes change the API breaking applications (eg
gimp)</li>

<li>Finish softnet driver port over and cleanups</li>

<li>via rhine oopses under load ?</li>

<li>SCSI generic driver crashes controllers (need to pass
PCI_DIR_UNKNOWN..)</li>

<li>UMSDOS fixups resync (not quite done)</li>

<li>Make NTFS sort of work</li>

<li>Any user can crash FAT fs code with ftruncate</li>

<li>AFFS fixups</li>

<li>Directory race fix for UFS</li>

<li>Security holes in execve()</li>

<li>Lan Media WAN update for 2.3</li>

<li>Get the Emu10K merged</li>

</ol>
</p>

<li>In Progress</li>

<p>
<ol>

<li>Merge the network fixes  (DaveM)</li>

<li>Merge 2.2.15 changes     (Alan)</li>

<li>Get RAID 0.90 in         (Ingo)</li>

<li>Finish I2O merge</li>

<li>Still some SHM bug reports</li>

</ol>
</p>

<li>Fix Exists In -AC Tree</li>

<p>
<ol>

<li>Signals leak kernel memory (security)</li>

<li>S/390 Merge</li>

<li>1.07 AMI MegaRAID</li>

<li>Fix Space.c duplicate string/write to constants</li>

<li>Merge the RIO driver (probably do post 2.4.0 as it is large)</li>

</ol>
</p>

<li>Fix Exists But Isnt Merged</li>

<p>
<ol>

<li>msync fails on NFS</li>

<li>Semaphore races</li>

<li>Semaphore memory leak</li>

<li>Exploitable leak in file locking</li>

<li>Mark SGI VisWS obsolete</li>

<li>64bit lockf support</li>

<li>TTY and N_HDLC layer called poll_wait twice per fd and corrupt
memory</li>

<li>ATM layer calls poll_wait twice per fd and corrupts memory</li>

<li>Random calls poll_wait twice per fd and corrupts memory</li>

<li>PCI sound calls poll_wait twice per fd and corrupts memory</li>

<li>sbus audio calls poll_wait twice per fd and corrupts memory</li>

<li>Support MP table above 1Gig</li>

<li>Finish sorting out VM balancing (Rik Van Riel)</li>

</ol>
</p>

<li>To Do</li>

<p>
<ol>

<li>Restore O_SYNC functionality</li>

<li>Fix eth= command line</li>

<li>Trace numerous random crashes in the inode cache</li>

<li>VM kswapd has some serious problems</li>

<li>vmalloc(GFP_DMA) is needed for DMA drivers</li>

<li>put_user is broken for i386 machines (security)</li>

<li>Fix module remove race bug              (mostly done - Al Viro)</li>

<li>Test other file systems on write</li>

<li>access_process_mm oops/lockup if task-&gt;mm changes</li>

<li>Audit all char and block drivers to ensure they are safe with the 2.3
locking - a lot of them are not especially on the open() path.</li>

<li>Stick lock_kernel() calls around driver with issues to hard to fix nicely for 2.4
itself</li>

<li>IDE fails on some VIA boards (eg the i-opener)</li>

<li>PCMCIA/Cardbus hangs, IRQ problems, Keyboard/mouse problem (may be fixed
?)</li>

<li>Use PCI DMA by default in IDE is unsafe (must not do so on via VPx
x&lt;3)</li>

<li>Use PCI DMA 'lost interrupt' problem with some hw [which ?]</li>

<li>Crashes on boot on some Compaqs ?</li>

<li>pci_set_master forces a 64 latency on low latency setting devices.Some
boards require all cards have latency &lt;= 32</li>

<li>usbfs hangs on mount sometimes</li>

<li>Loopback fs hangs</li>

<li>Problems with ip autoconfig according to Zaitcev</li>

<li>SMP affinity code creates multiple dirs with the same name</li>

<li>TLB flush should use highest priority</li>

<li>Set SMP affinity mask to actual cpu online mask (needed for some
boards)</li>

<li>pci_socket crash on unload</li>

<li>truncate_inode_pages does unsafe page cache operations</li>

<li>heavy swapping corrupts ptes</li>

<li>Linux sends a 1K buffer with SCSI inquiries. The ANSI-SCSI limit is
255.</li>

<li>Linux uses TEST_UNIT_READY to chck for device presence on a PUN/LUN. The INQUIRY is the only valid test allowed by the
spec.</li>

</ol>
</p>

<li>To Do But Non Showstopper</li>

<p>
<ol>

<li>Make syncppp use new ppp code</li>

<li>Finish 64bit vfs merges (lockf64 and friends missing)</li>

<li>NCR5380 isnt smp safe</li>

<li>DMFE is not SMP safe</li>

<li>ACPI hangs on boot for some systems</li>

<li>Go through as 2.4pre kicks in and figure what we should mark obsolete for the final
2.4</li>

<li>Per Process rtsigio limit</li>

<li>Fix SPX socket code</li>

<li>Boot hangs on a range of Dell docking stations (Latitude)</li>

<li>HFS is still broken</li>

<li>iget abuse in knfsd</li>

<li>Paride seems to need fixes for the block changes yet</li>

<li>Some people report 2.3.x serial problems</li>

<li>AIC7xxx doesnt work non PCI ?</li>

<li>USB hangs on APM suspend on some machines</li>

<li>PCMCIA crashes on unloading pci_socket</li>

<li>DEFXX driver appears broken</li>

<li>ISAPnP IRQ handling failing on SB1000 + resource handling bug</li>

<li>TB Multisound driver hasnt been updated for new isa I/O totally.</li>

</ol>
</p>

<li>Compatibility Errors</li>

<li>Probably Post 2.4</li>

<p>
<ol>

<li>per super block write_super needs an async flag</li>

<li>addres_space needs a VM pressure/flush callback</li>

<li>per file_op rw_kiovec</li>

<li>enhanced disk statistics</li>

<li>PIII FXSAVE/FXRESTORE support</li>

</ol>
</p>

<li>Drivers In 2.2 not 2.4</li>

<li>To Check</li>

<p>
<ol>

<li>Truncate races (Debian apt shows it nicely) [done ? - all but Coda]</li>

<li>Elevator and block handling queue change errors are all sorted</li>

<li>Check O_APPEND atomicity bug fixing is complete</li>

<li>Make sure all drivers return 1 from their __setup functions (Done
?)</li>

<li>Protection on isize  (sct) [Al Viro mostly done]</li>

<li>Mikulas claims we need to fix the getblk/mark_buffer_uptodate thing for 2.3.x as
well</li>

<li>Network block device seems broken by block device changes</li>

<li>Fbcon races</li>

<li>Fix all remaining PCI code to use new resources and enable_Device</li>

<li>VFS?VM - mmap/write deadlock (demo code seems to show lock is
there)</li>

<li>rw sempahores on page faults (mmap_sem)</li>

<li>kiobuf seperate lock functions/bounce/page_address fixes</li>

<li>Fix routing by fwmark</li>

<li>Some FB drivers check the A000 area and find it busy then bomb out</li>

<li>rw semaphores on inodes to fix read/truncate races ? [Probably
fixed]</li>

<li>Not all device drivers are safe now the write inode lock isnt taken on
write</li>

<li>File locking needs checking for races</li>

<li>Multiwrite IDE breaks on a disk error [minor issue at best]</li>

<li>ACPI/APM suspend issue</li>

<li>NFS bugs are fixed</li>

<li>BusLogic crashes when you cat /proc/scsi/BusLogic/0</li>

<li>Floppy last block cache flush error</li>

<li>NFS causes dup kmem_create on reload</li>

<li>Chase reports of SMB not working</li>

</ol>
</p>

</ol>
</p>

</quote>

<p>For item 5.18 (usbfs hangs on mount sometimes), Randy Dunlap asked for more
details, and Alan replied that this had been reported for 2.3.51, so was
probably out of date. He asked anyone still experiencing the problem to tell
him, so he wouldn't delete it from the list.</p>

<p>For item 6.12 (Paride seems to need fixes for the block changes yet), Tim
Waugh said he thought this was fixed, though he didn't have the hardware to
verify it. Andrea Arcangeli replied, <quote who="Andrea Arcangeli">I don't
have hardware either but people with hardware tested the fix and I merged
the fix with Linus a few weeks ago. There are been no futher changes since
that time so, yes, it should be fixed now.</quote></p>

<p>David Ford commented on a number of items in the list. For item 1.1 (Tulip
hang on rmmod (fixed in .51 ?)), which was supposed to be fixed, he reported
that it was definitely <i>not</i> fixed, and <quote who="David
Ford">modprobe/rmmod w/ a sleep inbetween causes an oops on the second
cycle.</quote> He also confirmed that item 5.19 (Loopback fs hangs) was
still a problem. For item 6.16 (PCMCIA crashes on unloading pci_socket) he
amended the description, saying, <quote who="David Ford">crash is not just
pcmcia system, it kills the whole machine with oopses until it's dead dead
dead.</quote> Alan replied, <quote who="Alan Cox">Yeah it seems to vary by
box. Its a known bug and a known explanation it just lacks a known fix
8)</quote></p>

<p>Finally, he confirmed that item 5.13 (PCMCIA/Cardbus hangs, IRQ problems,
Keyboard/mouse problem (may be fixed ?)) was still a problem. He reported,
<quote who="David Ford">sadly not fixed. hangs, oopses, irq, keyboard,
mouse, all still faulty in pre6-3.</quote> Alan asked if it was okay in
pre6-5, and David did some testing. After a few posts and replies to
himself, David reported:</p>

<quote who="David Ford">

<p>In summary: things are actually worse.  Every pcmcia
card I have causes something bad even a generic modem, a Hitachi cellular
capable 28.8/14.4 xjack modem. (came as an unknown bonus in my ambicom
box...gotta love Fry's, sometimes you get more than you paid for).</p>

<p>
<ul>

<li>Linksys:<br />

16bit 10/100 &amp; 56K modem(ne2k) - causes hangs on insertion or removal except
for shutdown state 32bit 10/100(tulip) - causes hangs on boot (socket 0) or
OOPS (socket 1) on insertion/removal</li>

<li>Ambicom:<br />
32bit 10/100(tulip) - same as 32bit linksys.</li>

       <li>Aviator 2.2:<br />

16bit wireless(ray_cs) - causes hang on insertion/removal for socket 0,
works for one ins/rem cycle in socket 1 then OOPSes. crashes on shutdown
(major long long OOPSes until random perm crash)</li>

<li>Hitachi:<br />

16bit 28.8 modem(serial) - hangs machine on insert/eject</li>

</ul>
</p>

</quote>

<p>Linus Torvalds asked, <quote who="Linus Torvalds">Can you send the bootup
messages that are relevant to the PCMCIA stuff? In particular, the interrupt
routing info is interesting, and you might want to turn on debugging in
arch/i386/kernel/pci-i386.h to get more of those messages...</quote> but if
there was any reply, it was made in private.</p>

</section>

<section
  title="Scheduler Problems And Patches"
  subject="SCHED_RR is broken + patch"
  archive="http://kernelnotes.org/lnxlists/linux-kernel/lk_0004_04/msg00386.html"
  posts="11"
  startdate="25 Apr 2000 00:00:00 -0800"
  enddate="29 Apr 2000 00:00:00 -0800"
>
<topic>Real-Time</topic>
<topic>SMP</topic>

<p>Christian Ehrhardt posted some test code, and reported, <quote
who="Christian Ehrhardt">I think I found a Bug in the linux scheduler: A
running SCHED_RR process is not preempted when its time slice is exhausted
but the process is still running. The following program demonstrates the
problem: In theory the child should be preempted when the time slice is
exhausted and the parent should be allowed to run. Unfortunately this
doesn't work.</quote> Borislav Deianov added ominously:</p>

<quote who="Borislav Deianov">

<p>Yes, this and other problems with the
scheduler have been known for quite a while and are still present in 2.3.99:</p>

<p>
<ol>

<li>SCHED_RR threads don't work</li>

<li>sched_yield doesn't work for RT threads</li>

<li>sched_yield doesn't always yield for SCHED_OTHER threads</li>

<li>wrong wake up order for RT threads</li>

<li>sched_rr_get_interval returns constant bogus value</li>

<li>counter for SCHED_FIFO threads is never reset</li>

<li>several wrong and misleading comments in the code</li>

</ol>
</p>

<p>Alan, _please_ add the first item (at least) to the 2.4 jobs list. It's a
documented feature that just plain doesn't work and I think it's a bloody
shame, especially since a fix exists (by Artur Skawina).</p>

</quote>

<p>There were two brief subthreads, consisting of several threadlets, coming
off of this post (for the purposes of KT, a subthread is a chain of
individual posts, while a threadlet is a single topic discussed in a thread
or subthread. So there may be many threadlets in a single subthread).
Dimitris Michailidis felt that item 3 of Borislav's list was not actually a
problem, because <quote who="Dimitris Michailidis">Processes should yield
only to higher or equal priority processes. A SCHED_OTHER thread executing
sched_yield doesn't have to yield just because there may be other
SCHED_OTHER processes available.</quote> Artur Skawina replied, <quote
who="Artur Skawina">depends on the priority model chosen. (ie if all
SCHED_OTHER threads run with equal static priority then having a
sched_yield() that defers to any SCHED_OTHER thread eligible to run makes
sense)</quote> Dimitris agreed with this, but the threadlet dropped off
there.</p>

<p>In the same subthread, Dimitris replied to item 6 of Borislav's list, <quote
who="Dimitris Michailidis">It should not expire in the first place.
SCHED_FIFO processes do not have slices.</quote> Borislav agreed, but Artur
pointed out, <quote who="Artur Skawina">it's not about expiring; it's about
entering the scheduler on every clock tick, because of the way the counter
is handled.</quote> Dimitris in turn explained, <quote who="Dimitris
Michailidis">And that, in turn, is because the counter for SCHED_FIFO
processes is allowed to reach 0 and then it stays there causing a trip to
the scheduler at every tick. Ideally, counter should be ingored for
SCHED_FIFO, but that would require special case code in the timer interrupt.
In my scheduler patch I set SCHED_FIFO counters to LONG_MAX, which
effectively gives them an infinite slice.</quote> Artur had the last word of
the threadlet, with:</p>

<quote who="Artur Skawina">

<p>last time i looked at the timer interrupt
overhead it was so big that the extra check+branch wouldn't make any
significant difference. the extra scheduler invocations did show up though.</p>

<p>In general, for real time the only thing that counts is worst case; loosing
a bit of performance isn't a problem, having some latency peaks might be.
Esp. ones that occur very rarely; ie won't happen during testing, but show
up several weeks later... No, it probably doesn't matter in this case, but
still, i'm not sure postponing the bug by a few weeks is an improvment
:)</p>

</quote>

<p>In the other subthread, George Anzinger posted a patch and replied to
Borislav's list:</p>

<quote who="George Anzinger">

<p>Have a look at this patch for the 2.2.14
sched.c. It fixes the first 4 of the above items and also fixes the "misses
'need_resched' if set after selection of the new task but before the
switch". For this latter I also test the flag just before exit and go round
again if set. On my system this makes a real difference, probably due to
missing the need_resched flag in idle or in the interrupt return path.</p>

<p>This patch reduces the loop for UP systems but adds a test for SMP systems.
Also, the SCHED_YIELD survives a counter reset.</p>

<p>Note prev_goodness() is no longer used, but not patched out.</p>

<p>For the SCHED_FIFO counter not reset, I notice later versions of the
scheduler are not counting down the counter if it is negative to avoid
counting down the idle tasks. Given this, I suggest that sched_setscheduler
just set the counter negative for SCHED_FIFO tasks.</p>

</quote>

<p>Later, he reported, <quote who="George Anzinger">My patch does have an
interesting flaw, however. If the only non-idle task in the run list is the
one yielding, the patch will go into a loop resetting the counters until
some other task enters the list (which can happen as the interrupts are
turned on for part of the loop). Not what one wants from yield. The fix, of
course, is to detect the second counter reset and just making next=prev at
that point.</quote> There was a bit more discussion, and a new patch from
Christian Ehrhardt addressing other problems.</p>

</section>

<section
  title="C++ And The Kernel"
  subject="[PATCH] C++ breaks on linux/ioport.h"
  archive="http://kernelnotes.org/lnxlists/linux-kernel/lk_0004_04/msg00709.html"
  posts="39"
  startdate="27 Apr 2000 00:00:00 -0800"
  enddate="01 May 2000 00:00:00 -0800"
>
<topic>Assembly</topic>

<mention>Andries Brouwer</mention>
<mention>Bill Huey</mention>
<mention>Dominik Kubla</mention>

<p>This debate was first covered in <kcref subject="Re: C++ in kernel"
startdate="08 Jan 1999 00:00:00 -0800"></kcref><!-- kt19990114_1.html#4 -->; then again in
<kcref subject="CALL FOR MAINTAINER:  modutils package"
startdate="13 Feb 1999 00:00:00 -0800"></kcref><!-- kt19990218_6.html#4 -->; and most
recently in <kcref subject="bug in socket.h (and maybe many other kernel
headerfiles)" startdate="17 Sep 1999 00:00:00 -0800"></kcref><!-- kt19991004_37.html#2 -->.
This week, Stepan Kasal wanted to include kernel headers in his C++ program,
but found that files like 'ioport.h' used the C++ reserved keyword 'new' as
a variable name, which caused errors. He posted a patch to change the
occurrences of that variable name, but Jes Sorensen replied that kernel
headers simply should not be included in C++ programs (more specifically, he
added later, one should not write kernel modules in C++). Over the course of
discussion, Andries Brouwer added that really, no user-space program should
directly include kernel headers, ever. Instead they should simply copy the
code they need from the headers into their own source. That way user
binaries would continue to run regardless of any future kernel changes. At
some point, Paul Barton-Davis argued:</p>

<quote who="Paul Barton-Davis">

<p>The issue is using the keyword "new" for a
declaration's argument. It would be nice if this was avoided, just like
"delete", "catch", "throw" and the rest of the C++ keyword superset.</p>

<p>If the relevant declaration is inside __KERNEL__ and so are some constants
that user-space needs, the programmer is out of luck if these keywords are
used in the declarations.</p>

</quote>

<p>Alexander Viro replied:</p>

<quote who="Alexander Viro">

<p>everything under __KERNEL__ belongs to the
kernel and is subject to change without notice. If you really need something
from that area - you've either</p>

<p>
<ol>

<li>found a bug or</li>

<li>missed a portable way to achieve your goal.</li>

</ol>
</p>

<p>Userland should never, ever define __KERNEL__, unless it's consent with
breakage upon the upgrade from 2.2.18-pre9 to 2.2.18-pre10-pre1.</p>

</quote>

<p>Elsewhere, Dominik Kubla felt that including C headers in C++ programs
should be feasible, with something like:</p>

<blockquote>

<code>

extern "C" {<br />
#include &lt;linux/header1.h&gt;<br />
#include &lt;linux/header2.h&gt;<br />
...<br />
}

</code>

</blockquote>

<p>Manfred Spraul pointed out that this wouldn't help if the headers contained
C++ reserved words such as 'new' and 'virtual'; but Jamie Lokier amended
Dominik's code to be:</p>

<blockquote>

<code>

extern "C" {<br />
#define new     c_new<br />
#define virtual c_virtual<br />
#include &lt;linux/header1.h&gt;<br />
#include &lt;linux/header2.h&gt;<br />
#undef  new<br />
#undef  virtual<br />
...<br />
}

</code>

</blockquote>

<p>Manfred pointed out that this would only work if the user's code didn't
dereference variables with those names, and Jamie said, <quote who="Jamie
Lokier">Just leave out the #undefs. You're not actually using new &amp; virtual
in your code, are you? :-)</quote></p>

<p>Earlier, Manfred had argued that kernel code should not use C++ reserved
words. Jes argued in reply, <quote who="Jes Sorensen">Making it easy to
write C++ driver modules means somebody will do it. Once somebody has done
it, somebody else will try to use some of the brain dread C++ features such
as exceptions - therefore totally preventing people from writing any bits of
the kernel in C++ is a good thing.</quote> Manfred replied sardonically,
<quote who="Manfred Spraul">What about stopping to distribute the Linux
source code? Somebody will write broken drivers, therefore totally
preventing people from writing any bits of of the kernel is a good
thing.</quote> Jes replied that opening the kernel up for C++ would
introduce terrible problems for maintainability and usability. Bill Huey
asserted that these would not be more significant problems than the
assembler linkage layer in 'egcs'; but Victor Khimenko disagreed, with
<quote who="Victor Khimenko">Hmm. This is not true. Lots of nice features of
C++ need support from run-time systems and using lots of space on stack. NOT
what you want in kernel where even gcc run-time was stripped out (kernel is
NOT linked with libgcc and it's done deliberately), where you have only
4-5KiB on stack to play with and where heap is bonus (kmalloc, vmalloc and
other things exist but should not be used if not REALLY necessary). I'm not
sure if C++ is needed even in userspace but in kernel space it's not
appropriate.</quote> Alan Cox added, <quote who="Alan Cox">C++ is just a
syntax wrapper over C with some bad exeception handling included. It doesn't
even do a good job on object orientation compared to stuff like smalltalk.
People do object oriented programming in cobol. Its a programmer feature not
a language feature.</quote> [...] <quote who="Alan Cox">You also need to
provide an interrupt safe, thread safe and smp safe lockless exception
handling mechanism for the C++ exceptions. You can't really avoid that as
you will want to do memory allocation and a memory allocation can and must
fail gracefully.</quote> Finally Richard B. Johnson concluded the thread,
with:</p>

<quote who="Richard B. Johnson">

<p>It's interesting to observe the advocates of
a specific computer language. Most often a discussion about a particular
compiler of similar tool results from the failure of persons to understand
the basic nature of any computer language.</p>

<p>Computers don't communicate very well, even with other computers. When
humans try to communicate with them, they have to use certain tools. These
tools may range from devices such as keyboards to software tools such as
compilers and editors.</p>

<p>Since computers don't understand the human languages very well, although
there is continual work in this area, humans have to learn computers'
languages. Since the computers' internal languages do not interface well
with human languages, we have created tools to translate. There are called
assemblers, compilers, and interpreters.</p>

<p>Every one of these tools, and probably those to be created in the future,
pose major communications and control limitations. It becomes necessary, for
programmers using these tools, to provide work-arounds for the limitations
of these tools.</p>

<p>An expert in a particular computer language is really an expert in the
work-arounds necessary to use this language to perform useful work. An ideal
computer language would do exactly what it was told simply from reading a
specification. In the absence of a specification, it would ask enough
questions to produce such a specification, then it would generate the code
necessary to perform the specified functions.</p>

<p>So a programmer becomes a captive of the tools used to communicate with the
computer. With experience, the programmer starts to identify with its
captors and starts to believe that the language mastered, is in fact, the
only true language. Once captured, the programmer becomes an advocate.
Psychology teaches the name of this effect as the "Stockholm Syndrome". It
was first recognized during the detention of World-Games competitors in
Stockholm, Sweden.</p>

<p>You see this problem mostly with programmers who have mastered only one
language. If you have been around computers since 4-bit nibbles on
paper-tape, you have long ago abandoned the notion that there is only one
true language. But the first language you truly mastered still seems to have
been the best. The Stockholm Syndrome affects us all to some extent.</p>

<p>I advise to not get trapped into the notion of the "correct" tool for a
particular use. Just because you have become expert in C++, don't presume
that it is the "correct" language for the kernel.</p>

<p>Even C has its shortcomings which have to be handled with assembly language
extensions. A Master Carpenter has many tools and is expert with most of
them. If you only know how to use a hammer, every problem begins to look
like a nail. Stay away from that trap. It bytes (sic).</p>

</quote>

</section>

<section
  title="2.0.x Development Continues"
  subject="[Announcement] pre-patch-2.0.39-4"
  archive="http://kernelnotes.org/lnxlists/linux-kernel/lk_0004_05/msg00175.html"
  posts="1"
  startdate="30 Apr 2000 00:00:00 -0800"
  enddate="30 Apr 2000 00:00:00 -0800"
>
<topic>CREDITS File</topic>
<topic>MAINTAINERS File</topic>
<topic>Networking</topic>

<mention>Matthew Grant</mention>
<mention>Jan Kara</mention>
<mention>Andrea Arcangeli</mention>
<mention>Michal Jaegermann</mention>
<mention>Jean Tourrilhes</mention>
<mention>Andries Brouwer</mention>
<mention>Andre Hedrick</mention>

<p>David Weinehall announced:</p>

<quote who="David Weinehall">

<p>Sorry to all of you for taking so long for
getting this one out. This one addresses some more things in v2.0.38 that I
considered relatively safe to change. There are several persons that have
reported the ability to resource-starve or crash the kernel by various
methods. However, most of these things would demand quite significant
changes to the memory-management to be addressed, and I will not carry out
any such. There is a reason that there are a v2.2 kernel series and soon
also a v2.4 kernel series. I hope you all can understand this point of view.</p>

<p>Most of v2.0.39 seems to be ready for release. Now is a perfectly good time
to yell "Snarfel!" if you consider this opinion of mine to be totally beyond
the edges of sanity.</p>

<p>What I'm most curious about to know is whether the Large-disk fixes works
properly for everyone (of course, any problems with the other fixes should
be reported too...) The only thing I am considering to adding now is Andre
Hedrick's ide-patch.</p>

<p>2.0.39pre4</p>

<p>
<ul>

<li>Large-disk fixes                        (Andries Brouwer)</li>

<li>Wavelan-driver cleanup &amp; bugfixes       (Jean Tourrilhes)</li>

<li>Security-fixes                          (Solar Designer)</li>

<li>Quota-fixes                             (Jan Kara)</li>

<li>Fixed GPF using IPsec Masquerade        (Rudolf Lippan)</li>

<li>(s)size_t-patch for fs/proc/mem.c reverted      (Me)</li>

</ul>
</p>

<p>2.0.39pre3</p>

<p>
<ul>

<li>Fixed Config.in bugs in drivers/net and drivers/isdn                (Marc
Martinez)</li>

<li>int to (s)size_t in fs/proc/mem.c       (Michal Jaegermann)</li>

<li>Added IPX-routing of NetBIOS packages   (Jan Rafaj)</li>

</ul>
</p>

<p>2.0.39pre2</p>

<p>
<ul>

<li>Fix for a bug in paride                 (Wolfram Gloger)</li>

<li>Fix an erroneous printk in ip_fw.c      (Todd Sabin)</li>

<li>Fix for IP multicast on WAN-adapters    (Matthew Grant)</li>

<li>Big updates to MAINTAINERS              (me)</li>

<li>Big updates to CREDITS                  (me)</li>

<li>Various updates in Documentation/*      (me)</li>

<li>Styled up all Configuration-files in a similar manner to newer v2.3 kernels
(me)</li>

<li>Updated CodingStyle to the one used in recent v2.3 kernels    (me)</li>

<li>Backported nls_8859-14                  (me)</li>

<li>Added support to sparse superblocks     (Theodore T'so)</li>

</ul>
</p>

<p>2.0.39pre1</p>

<p>
<ul>

<li>Fix for the ping -s 65468 exploit       (Andrea Arcangeli + others)</li>

<li>Small updates to MAINTAINERS            (me)</li>

<li>Small updates to CREDITS                (me)</li>

<li>Update Documentation/Changes to mirror the needed binutils version
(me)</li>

</ul>
</p>

</quote>

<p>There was no reply.</p>

</section>

</kc>
