Kernel Traffic #284 by Zack Brown

[email protected] Thu, 18 Nov 2004 09:15:51 -0800
Newsgroups gmane.linux.kernel.kernel-traffic
Message-ID <[email protected]>
                        Kernel Traffic #284 For 17 Nov 

                                 By Zack Brown

Table Of Contents

  * Standard Format
  * Text Format
  * XML Source
  * Mailing List Stats For This Week
  * Threads Covered

    1.  18 Oct  - 31 Oct  (145    Linux 2.6.9 Released
                          posts)
    2.  19 Oct  - 1 Nov   (161    Status Of 'arch' Revision Control For The
                          posts)  Kernel
    3.  20 Oct  - 29 Oct  (10     Better SMP Process Migration
                          posts)
    4.  22 Oct  - 28 Oct  (23     Linux 2.4.28-rc1; Straggling Patches
                          posts)  Considered For Inclusion
    5.  22 Oct  - 29 Oct  (121    Some Discussion Of The 2.6 Development Model
                          posts)
    6.  22 Oct  - 29 Oct  (103    Linux 2.6.10-rc1 Released: The 'Woozy
                          posts)  Numbat'; Some Numbering Considerations
    7.  23 Oct  - 28 Oct  (21     Different Perspectives On The Status Of
                          posts)  Real-Time
    8.  27 Oct  - 28 Oct  (5      New Virtual cputime For Micro-Second
                          posts)  Accounting
    9.  27 Oct  - 28 Oct  (7      Some Discussion Of Binary Firmware
                          posts)
    10. 27 Oct  - 30 Oct  (8      Cross-Compilation HOWTO
                          posts)
    11. 28 Oct            (12     Kprobes Updates
                          posts)
    12. 29 Oct  - 2 Nov   (29     Linux 2.6.10-rc1-mm2 Released
                          posts)
    13. 29 Oct  - 31 Oct  (8      Linux 2.6.9-ac5 Released
                          posts)
    14. 30 Oct            (4      Automated Correctness Checking
                          posts)
    15. 31 Oct            (2      man-pages Maintainership
                          posts)
    16. 2 Nov  - 3 Nov    (5      Migration To New Argument-Passing Method For
                          posts)  Some Assembly Interfaces

Mailing List Stats For This Week

We looked at 2980 posts in 16339K.

There were 583 different contributors. 332 posted more than once. 246 posted
last week too.

The top posters of the week were:

  * 135 posts in 670K by Adrian Bunk
  * 103 posts in 438K by Ingo Molnar
  * 60 posts in 318K by Linus Torvalds
  * 54 posts in 381K by Con Kolivas
  * 53 posts in 501K by Geert Uytterhoeven
  * Full Stats

 

1. Linux 2.6.9 Released
18 Oct  - 31 Oct  (145 posts) Archive Link: "Linux v2.6.9..."
Topics: Disks: IDE, FS: JFS, FS: XFS, Ioctls, Kernel Release Announcement, SMP,
User-Mode Linux
People: Linus Torvalds, Jeff V. Merkey, Ingo Molnar, David Weinehall, Alexander
Viro

Linus Torvalds announced Linux 2.6.9, saying:

    despite some naming confusion (expanation: I'm a retard), I did end up
    doing the 2.6.9 release today. And it wasn't the same as the "-final" test
    release (see explanation above).

    Excuses aside, not a lot of changes since -rc4 (which was the last
    announced test-kernel), mainly some UML updates that don't affect anybody
    else. And a number of one-liners or compiler fixes. Full list appended.

Jeff V. Merkey said:

    Although we do not work with them and are in fact on the the other side of
    Unixware from a competing viewpoint, SCO has contacted us and identifed
    with precise detail and factual documentation the code and intellectual
    property in Linux they claim was taken from Unix. We have reviewed their
    claims and they appear to create enough uncertianty to warrant removal of
    the infringing portions.

    We have identified and removed the infringing portions of Linux for our
    products that SCO claims was stolen from Unix. They are:

    JFS, XFS, All SMP support in Linux, and RCU.

    They make claims of other portions of Linux which were taken, however,
    these other claims do not appear to be supported with factual evidence.

Many, many kernel developers either laughed at him, insulted him, or told him
they wouldn't relicense their code or remove the parts he claimed SCO was
entitled to. The discussion meandered all over the place, Jeff trading
blow-for-blow on many fronts, even carrying on part of the debate with
Alexander Viro in the Cherokee tongue.

The vast majority reiterated that SCO had no legitimate claim and that Jeff was
nuts. David Weinehall even quoted Judge Schoefield's written opinion:

    In fact, however, Merkey is not just prone to exaggeration, he also is and
    can be deceptive, not only to his adversaries, but also to his own
    partners, his business associates and to the court. He deliberately
    describes his own, separate reality.

At some point in the course of the thread:

    can you please stop Cc'ing me on this thread?

    No, nobody I know (certainly not me) is willing to re-license Linux under
    anything else than the GPL. Quite frankly, I suspect you'll have an easier
    time just rewriting the whole thing.

    And no, the only offer from SCO I'm interested in is a public apology from
    Darl McSwine. Their made-up stories about copyright ownership weren't
    really that amusing a year ago, and now they're boring and stale.

    So please just remove me from the cc, ok?

Close by, Ingo Molnar also said:

    Jeff, you seem to have proven once more that you live in a fantasy world
    that has its own private rules of physics, ethics and rule of law. While
    this appears to be a dangerous phenomenon, it is fortunately a relatively
    rare one.

    Linus has been intentionally, deliberately and maliciously lied to, smeared
    and mislead for more than 1.5 years. Linus has not mislead anyone, let
    alone lied to anyone. The so-called 'contamination' accusations that you
    repeated are just that: unfounded accusations. A simple question: do you
    know the concept of "truth"? Another simple question: do you even care
    about it? In the world i live SCO owes Linus more than just a simple
    apology. I personally find it admirable that the only thing Linus expects
    of SCO is a simple apology.

It's of note that the thread covered last issue (see Issue #283, Section #7  (
25 Oct : A Little Bit Of SCO Status) ) actually took place after this thread,
so that summary may be seen as the later result of the thread covered in this
issue. Apparently Linus and Jeff spoke off-line and came to some sort of
understanding.

The reason the threads were covered in the wrong order is that the one from
last week was only a single post, from October 25, while the thread covered
this week had an unrelated debugging thread attached to it as a reply, that
continued well beyond October 25. Since I like to wait for threads to end
before summarizing them, the earlier thread ended later than the later thread,
and so was covered later in KT.

In theory this sort of thing can happen whenever a long thread and a short
thread are close to the cut-off point for each week's Kernel Traffic. But in
practice, it only really matters when the two threads are on the same or
similar topics. If a thread about ioctl reorganization is summarized
incorrectly before a thread on an IDE driver, chances are there will be no
time-sensitive information between them. In cases like the current summary,
however, with multiple threads on the same issue being covered in the wrong
order, it can be confusing.

 

2. Status Of 'arch' Revision Control For The Kernel
19 Oct  - 1 Nov  (161 posts) Archive Link: "BK kernel workflow"
Topics: BSD, Version Control
People: Linux Torvalds, Andrea Arcangeli, Linus Torvalds, Jeff Garzik, Miles
Bader, Roman Zippel

In the course of discussion, Andrea Arcangeli argued that the proprietary
BitKeeper license had a negative impact on the ability of Linux to develop. He
felt it likely that if all developers had access to distributed revision
control, the situation would be much better than it was. Linus Torvalds
challenged:

    nobody knows how the universe would look if the speed of light wasn't
    constant.

    Your point is pointless. No such distributed revision control system
    exists. And without BK, the people who have worked on them wouldn't largely
    even understand what's wrong with CVS.

    In fact, I find that people largely _still_ don't understand what's wrong
    with CVS, and are still trying to just make another CVS thing.

    So give Larry the credit he deserves, even if you dislike the license.

Andrea pointed out that arch (tla) "exists and it's exactly as distributed as
BK." Linus replied:

    And I looked at it before starting BK. Trust me, it was nowhere _near_
    usable, which was my point. Nothing you have described has existed for
    three years. Except for BK.

    I doubt arch is there today either, but hey, if it displaces CVS, I
    certainyl won't complain. How are the gcc people doing with it?

Andrea replied:

    gcc people are stuck with CVS AFIK. Apparently CVS is good enough for them.

    arch isn't ready for prime time with the kernel. It would be ready if we
    were ok to limit it to say 5000 changesets and to obsolete the older
    changesets once in a while. the backend needs a rewrite to handle that.

    Thanks to various improvements we did (I only did one that allows caching
    with hardlinked trees, Chris and others did more), probably arch would be
    already way faster than BK in a daily checkout checkin and cloning (nobody
    on the open source side can verify since we cannot use BK, AFIK Miles tried
    to buy a copy of BK but Larry refused to sell it, but I seriously doubt BK
    has such an advanced hardlinking cache mechanism like arch), but the very
    first setup on a new machine would be very inefficient (if compared to CVS)
    and the local copy of the repository would take more space (again if
    compared to CVS).

    The user interface isn't nice either, it'd be nicer at least to avoid
    overlaps between commands.

    I believe this all can be fixed, it just needs a critical mass of users and
    some big initial pain.

Jeff Garzik also commented that arch "doesn't scale or merge as well as BK
though. I've told Larry that, if both BK and <open source tool> were completely
equal in terms of function, I'd use the open source tool. Neither arch
(scalability) nor subversion (scalability + stability) are there yet."

Miles Bader disputed the comment that arch didn't scale or merge as well as
BitKeeper. He said:

    Scalability I'm not sure about; BK's "you must inform BK before you change
    a file" model gives it a potential for being very quick at "tree-compare"
    operations -- but makes it more annoying for the user.

    Merging also seems a bit hard to judge. From what I understand of BK, it
    has a much more limited merging model than arch does; to do a reasonable
    comparison, you'd have to see how well arch did if you limited yourself to
    that restricted model, and then give arch some more points for not forcing
    you to do so.

    BK no doubt wins on the rough-edges-sanded-down front though; there are a
    _few_ advantages to commercial software...

Throughout the discussion, Linus showed no sign of considering anything other
than full support of BitKeeper. At one point he said angrily:

    Andrea, shut up.

    It's not _your_ decision to make, or your decision to complain about. It's
    the developers decision. It was mine, Jeff's, David's, Andrew's... Not
    yours.

    It's your decision is to not use BK. Fine. But then complaining when people
    decide to use the best tool available is fricking impolite. Not just to
    Larry, but to the people who made the choice.

    You whine about BK taking rights away, but the fact is, BK is an _option_
    for people to use. _YOU_ are the one trying to limit what people are
    supposed to do.

    In short, BK isn't the problem. You are.

A couple of posts later he said, "Andrea doesn't actually do anything
constructive when it comes to SCM. He just complains every time somebody says
something positive about a product that (a) he didn't do anything for and (b)
nobody forces him to use, and (c) there are no real alternatives for today
(much less the three years ago he was whining about)." In the same post, he
added:

    No SCM is _ever_ going to be a quality manager.

    And I also claim that people who think that "processes" are quality
    management (see iso9000, or Dilbert) are seriously mistaken too.

    The thing that keeps up the general quality is _people_. Good people, who
    take pride in the quality. They end up being maintainers, not because they
    chose the job, but because people ended up chosing them, for better of for
    worse.

    And the way to help those people is to make the day-to-day job easy, so
    that they can spend as much time as possible on the thing that matters:
    upholding good taste (and in the process keeping quality up). And that's
    where an SCM comes in - not as a primary source of quality, but as a way to
    keep track of the details, so that people can concentrate on what is
    important.

    And the SCM doesn't have to be anything really fancy. It can be a few
    scripts to keep track of patches (that tends to grow and become slightly
    more sophisticated over time). I'm not saying that BK is "it". There's a
    number of BK users there, but clearly there are other ways to maintain
    patches too - and people use them.

    But complaining when a maintainer uses a tool that suits him is _stupid_.
    It's arrogant to think that you can tell me how to do my work, but it's
    really stupid when you can't give any reasonable alternatives that would
    help me do it as efficiently.

    And that's what Andrea is doing. Sure, BK is commercial, but dammit, so is
    that 2GHz dual-G5 too and that Shuttle box in my corner. They happen to be
    the tools I use for what I do. If Andrea told me that I should use a slower
    machine because that's what most people use, I'd consider him a total
    idiot. Similarly, when he complains that people use software tools that
    clearly _do_ make them more productive, I consider his complaint stupid.

    There are other tools I use to make myself more productive. Many of them
    are open source. Some I wrote myself. But I still use "uemacs" and "pine"
    as part of my tool-chest, for example - and last I saw, they weren't open
    source either (but I hear that the uemacs author stopped caring, so that
    one might have been re-licensed).

    Should I (or anybody else) ask Andrea's permission before we start using
    non-opensource tools? No. If Andrea were complaining about my "pine" usage,
    he'd be laughed off the planet. It may be ass-backwards and old and
    text-only, but the fact is, it's really none of his damn business, even
    though he can see the effects in every email I write in the headers.

    Similarly, Andrea can see some of the effects of me using BK when he looks
    at the tar-balls and patches - syntactic markers that show that they have
    been generated by a person who uses BK. It's really _no_ different from the
    fact that I use pine to communicate. And no, neither BK nor pine are under
    an open source license. Deal with it.

    Can Andrea point me to open-source tools and ask me politely whether I've
    considered them as alternatives? Hell yes. I encourage him to do so when
    something appears.

Miles corrected Linus' assertion that Andrea did nothing constructive. Miles
said, "This is not true. Andrea has given some very useful input on the
gnu-arch mailing list. He's definitely doing more than just complaining about
BK." Roman Zippel also remarked to Linus, "nobody cares what you are using
privately, but your decisions as kernel maintainer have an effect on other
people, may this be the patches you include in the next release or the tools
you distribute them with. In the end it's your decision what tools you use, if
you think the advantages outweigh the license which goes contrary to the open
devolopment process, that's fine, but so have other people the right to
disagree with that decision. Maybe you could make some suggestion on how to
articulate this more politically correct? Linus, what disturbs me here is that
I don't see that you don't even try to acknowledge that the bk license might be
part of problem, you don't mention the bk license with a single word. Nobody
hates bk, that's a myth I'd expect from Larry but not from you. bk is a rather
innocent and certainly useful tool, the annoying part are the business
practices of its owner, who tries to push a licence into an environment, where
it has to provoke rejection." Linus replied:

    You don't like it, you don't use it. It's literally that simple.

    This is the same thing as with the GPL. I absolutely _detest_ people who
    whine about the GPL - and there are more GPL haters out there than BK
    haters. It's _their_ problem.

    EXACT SAME THING. Nobody has the right to whine about another persons
    choice of license. You have a choice: use it or don't. Complaining about
    the license to the author isn't part of it.

    Larry can tell you that we've discussed the BK license in private, and he
    definitely knows that I'd really like for it to be an open source license.
    But I also suspect that Larry will tell you that I haven't been whining
    about it - I've been trying to come up with ways it could work out for him,
    considering that he's got employees to take care of, and I haven't been
    able to come up with anything that would convince him. Fair enough.

    Because it really is his choice. Not mine. Not yours. Not Andrea's.

    And dammit, that choice is as close to "sacred" as anything can get in
    software development as far as I'm concerned.

    To paraphrase Voltaire - "I may disagree with your choice of license, but I
    shall defend to the death your right to choose it". That goes for Larry,
    and for the BSD people and for all the people who write software for a
    living using some really nasty licenses.

    And the same thing goes for users. Anybody who tells me I can't use a
    program because it's not open source, go suck on rms. I'm not interested.
    99% of that I run tends to be open source, but that's _my_ choice, dammit.

The flaming went on and on...

Personally, I have two remarks to make on this issue:

  * I think Linus hasn't looked at arch/tla for several years, judging from the
    way he talk about it. It has made huge strides, but Linus still thinks of
    it as a bundle of shell scripts, in spite of the fact that it was long ago
    ported to C and has been gaining quite a lot of developer momentum over the
    past year.
  * Andrea and the other arch advocates should start using arch for their own
    kernel development, instead of merely advocating it in the abstract. If
    arch will work, then create repositories and show everyone else how great
    it is. Until that starts to happen, I don't believe Linus will ever take
    any BitKeeper alternative seriously. In fact, I think Linus will still be
    using BitKeeper when 75% of kernel developers have switched to arch or
    something else. That's just the way he is. Arch can only make headway at
    the grass roots, developer by developer.

 

3. Better SMP Process Migration
20 Oct  - 29 Oct  (10 posts) Archive Link: "[PATCH, 2.6.9] improved
load_balance() tolerance for pinned tasks"
Topics: SMP
People: John Hawkes, Nick Piggin, Ingo Molnar

John Hawkes said, "A large number of processes that are pinned to a single CPU
results in every other CPU's load_balance() seeing this overloaded CPU as
"busiest", yet move_tasks() never finds a task to pull-migrate. This condition
occurs during module unload, but can also occur as a denial-of-service using
sys_sched_setaffinity(). Several hundred CPUs performing this fruitless
load_balance() will livelock on the busiest CPU's runqueue lock. A smaller
number of CPUs will livelock if the pinned task count gets high. This simple
patch remedies the more common first problem: after a move_tasks() failure to
migrate anything, the balance_interval increments. Using a simple increment,
vs. the more dramatic doubling of the balance_interval, is conservative and yet
also effective." Ingo Molnar signed off on the patch, and Nick Piggin worked
with John on a revised version of the patch. It was clear that one version or
the other would be accepted.

 

4. Linux 2.4.28-rc1; Straggling Patches Considered For Inclusion
22 Oct  - 28 Oct  (23 posts) Archive Link: "Linux 2.4.28-rc1"
Topics: Big Memory Support, Disk Arrays: RAID, Disks: IDE, FS: devfs, Kernel
Build System, Networking, Serial ATA, USB
People: Marcelo Tosatti, ?zkan Sezer, Michael Frank, Roger Luethi, Geert
Uytterhoeven, Eric Sandeen, Andre Hedrick, Andrey Borzenkov, Robert White, Ivan
Kokshaysky, Joshua Kwan, David Vrabel, Eric Uhrhane, Hilko Bengen, Corey
Minyard, Dave Jones, Jakub Bogusz, Willy Tarreau

Marcelo Tosatti announced Linux 2.4.28-rc1, saying:

    Here goes the first release candidate of v2.4.28.

    It contains a small number of changes from -pre4, a couple of libata
    bugfixes, a PIIX IDE driver DMA bugfix, USB fixes, and some tmpfs
    corrections.

?zkan Sezer said:

    There are many lost/forgotten patches posted here on lkml. Since 2.4.28 is
    near and 2.4 is going into "deep maintainance" mode soon, I gathered a
    short list of some of them. There, sure, are many more of them, but here it
    goes.

    I think they deserve a re-review and re-consideration for inclusion.

    The "list":

      + Dave Jones: AMD K7 MCE changes backported from 2.6.
        http://marc.theaimsgroup.com/?l=linux-kernel&m=106521456014393&w=2
      + David Vrabel: TI CardBus PCI interrupt routing fix
        http://marc.theaimsgroup.com/?l=linux-kernel&m=108446444125446&w=2
      + Michael Mueller: opti-viper pci-chipset support (have an
        updated-for-2.4.23+ patch for this)
        http://marc.theaimsgroup.com/?t=106698970100002&r=1&w=2
        http://marc.theaimsgroup.com/?l=linux-kernel&m=106698965700864&w=2
      + Michael Frank: Highmem user-friendliness, Shutdown kernel on zone-
        alignment failure (have an updated patch)
        http://lkml.org/lkml/2004/2/7/51
        http://marc.theaimsgroup.com/?t=107619437300052&r=1&w=2
        http://marc.theaimsgroup.com/?l=linux-kernel&m=107619342911564&w=2
      + Terry Hardie: 8 port SIIG serial card support
        http://marc.theaimsgroup.com/?l=linux-kernel&m=107765546507508&w=2
      + Mauricio Martinez/Corey Minyard: fix a problem (multiple reads of the
        same data) while reading from a CDU31 SONY CD-ROM drive
        http://marc.theaimsgroup.com/?l=linux-kernel&m=106824345717317&w=2
      + Roger Luethi: via-rhine, fix force media
        http://marc.theaimsgroup.com/?l=linux-kernel&m=108507431710317&w=2
      + Robert White: usbserial hangup on disconnect
        http://marc.theaimsgroup.com/?t=108114071200002&r=1&w=2
        http://marc.theaimsgroup.com/?l=linux-kernel&m=108114073600529&w=2
      + V Ganesh: ipaq, hangup tty on usb disconnect
        http://marc.theaimsgroup.com/?l=linux-usb-devel&m=109049411609590&w=2
      + David M. Wilson: sis900 Wake-on-LAN support
        http://marc.theaimsgroup.com/?l=linux-kernel&m=105835662823748&w=2
      + Thomas Gleixner: sis5513 fix for SiS962 chipset
        http://marc.theaimsgroup.com/?t=109482706500001&r=1&w=2
        http://marc.theaimsgroup.com/?l=linux-kernel&m=109482716300929&w=2
      + Eric Sandeen: fix for large direct I/O
        http://marc.theaimsgroup.com/?l=linux-kernel&m=108197617129880&w=2
      + Geert Uytterhoeven: smb_ops_unix compiler warning
        http://marc.theaimsgroup.com/?l=linux-kernel&m=107659039710361&w=2
      + David A. Lethe: scsi_scan.c, look for LUNs on XYRATEX RAID subsystems
        http://marc.theaimsgroup.com/?l=linux-kernel&m=105534062611620&w=2
      + Andrey Borzenkov: devfs deadlock on concurrent lookups on non-existent
        entry
        http://marc.theaimsgroup.com/?l=linux-kernel&m=105630542714518&w=2
      + Jim Carter: apm.c, Dell Inspiron, limit rate of power status calls
        (without the star to the asm code)
        http://marc.theaimsgroup.com/?l=linux-kernel&m=106049225722612&w=2
      + Eric Uhrhane: ATP867X PCI IDE driver: driver for the Acard/Artop PCI
        ATA/SATA cards (6885[LP]/6896[S]) based on the ATP867{A,B} chips.
        http://marc.theaimsgroup.com/?l=linux-kernel&m=108198418515134&w=2
      + Jakub Bogusz: missing include in farsync WAN driver
        http://marc.theaimsgroup.com/?l=linux-kernel&m=109376793014054&w=2
      + Willy Tarreau: MTU fix for tulip driver
        http://marc.theaimsgroup.com/?l=linux-kernel&m=109130863303540&w=2
      + Ivan Kokshaysky: alpha, make bootimage and make bootpfile failure, boot
        failure
        http://marc.theaimsgroup.com/?t=109760337800003&r=1&w=2
        http://marc.theaimsgroup.com/?l=linux-kernel&m=109820176212217&w=2
      + Sam King: usbserial, down function call being made from an interrupt
        handler
        http://marc.theaimsgroup.com/?t=109639065100005&r=1&w=2
        http://marc.theaimsgroup.com/?l=linux-usb-devel&m=109639053122263&w=2
      + Wolfgang Mues: auerswald-usb, kernel oops at disconnect or reconnect
        time because of an endless urb resubmit
        http://marc.theaimsgroup.com/?l=linux-usb-devel&m=108465864428213&w=2
      + Hilko Bengen: minor error in /proc/isapnp output
        http://marc.theaimsgroup.com/?l=linux-kernel&m=107607982001162&w=2
      + Joshua Kwan: scripts: Support output of new ld
        http://marc.theaimsgroup.com/?t=109549085600003&r=1&w=2
      + Joshua Kwan: kbuild: use infobox instead of msgbox and 'sleep 5'
        http://marc.theaimsgroup.com/?l=linux-kernel&m=109549111519324&w=2
      + Andre Hedrick: ide updates for 2.4.25
        http://www.kernel.org/pub/linux/kernel/people/hedrick/ide-2.4.25/

Marcelo took some of these on faith, but asked the specific authors for
confirmation in a number of cases. Some folks confirmed, and Marcelo said the
next -pre release would have a bunch of these updates.

 

5. Some Discussion Of The 2.6 Development Model
22 Oct  - 29 Oct  (121 posts) Archive Link: "My thoughts on the "new
development model"(A bit late tho)"
People: Espen Fjellv?r Olsen, Lee Revell, Hua Zhong, Diego Calleja, Paul
Fulghum, Alan Cox, Adrian Bunk, Willy Tarreau, William Lee Irwin III, Rik van
Riel, Andrew Morton

Espen Fjellv?r Olsen disagreed with the entire direction of the Linux
development model in 2.6; instead of adding new features, he said, "I think
that 2.6 should be frozen from now on, just security related stuff should be
merged." He added that a 2.7 branch should be forked off for new features.
Clemens Schwaighofer agreed completely, but William Lee Irwin III felt that
folks should just write code and do real work on the kernel, instead of arguing
over numbering systems. Lee Revell added:

    Part of the reasoning behind the new development model is that if you want
    a stable kernel, there are many vendors who will give you one. The new dev
    model is partially driven by vendors and developers desire to get their
    features into mainline quicker. There is an inherent stability cost
    associated with this, but the price is only paid by users who want
    stability AND the latest kernel.org kernel. The big players all seem to
    agree that the new development model better suits users and their own
    needs. The distros are in a better position to determine what constitutes a
    stable kernel anyway, they have millions of users to test on. Let the
    vendors AND the kernel hackers do what they are each best at.

    We need to continue the rapid pace of development because although Linux
    rules in the small to mid server arena there are other areas where MS and
    Apple are clearly ahead. If you want to make an omelette you have to break
    some eggs...

Elsewhere, Hua Zhong remarked, "The fact is, these days nobody wants to be a
stable-release maintainer anymore. It's boring." But Diego Calleja came back
with, "I doubt it. People like Alan Cox or Marcello have done it in the past,
and I bet many others could do it." Paul Fulghum felt that folks like Alan and
Marcelo "probably suffer emotional scars from the process. Taming the patch
stream must be like drinking from a fire hose while herding angry, computer
literate cats. Wearing, but not boring." Alan Cox confirmed, "For 2.2 certainly
and I suspect for 2.4 it's also like that. The 2.6.x.[1-n] is more like
distribution maintenance its about careful analysis and minimal changes." Close
by, when Hua reiterated that no top developer would take on the task of
maintaining a stable 2.6 tree, Alan replied, "I'll do it if Linus wants" , but
nothing came of this.

Elsewhere, Adrian Bunk remarked, "2.6 is corrently more a development kernel
than a stable kernel." And added, "Andrew+Linus should open a short-living 2.7
tree soon and Andrew (or someone else) should maintain a 2.6 tree with less
changes (like Marcelo did and does with 2.4)."

Elsewhere, Willy Tarreau said, "Linux already got its reputation of a stable
system from its production kernels, 2.0, 2.2 and 2.4 which are largely used in
sensible environments. 2.6 is stable enough for most desktop usage and for
end-users distros to ship it by default. This will encourage many more people
to test it, send reports back and finally stabilize it so that one day it can
finally be used in production environments. At first I was a bit angry that it
had been declared "stable" a bit too early, but now, judging by the amount of
people who use it only because their distros ship with it, I realise that
indeed, it should have been declared "stable" earlier so that all the bug fixes
you see now would be fixed by now." But William Lee Irwin III said, "The
freezes from kernels past led to gross redundancy. Distros all froze at
different points in time with numerous patches atop the then-mainline release.
The mainline freeze was meaningless because the distros were all completely
divorced from it, resulting in numerous simultaneously frozen trees with no
outlet for forward progress." Elsewhere, Rik van Riel said he liked the way the
2.6 tree was currently being handled.

In general, developers closest to the development process were happiest with
the status quo, while developers closer to the user end of things felt there
should be changes. Linus did not weigh in, but several times Alan did volunteer
or hint that he would be willing to maintain a stable 2.6 tree. No one
mentioned that Andrew Morton is still technically the official maintainer, even
though Linus puts out all the releases.

 

6. Linux 2.6.10-rc1 Released: The 'Woozy Numbat'; Some Numbering Considerations
22 Oct  - 29 Oct  (103 posts) Archive Link: "The naming wars continue..."
Topics: Disks: SCSI, Kernel Release Announcement, Serial ATA
People: Linus Torvalds, Matt Mackall, Con Kolivas, Nick Piggin, Bill Davidsen

Linus Torvalds announced Linux 2.6.10-rc1, saying:

    I thought long and hard about the name of this release (In other words, I
    had a beer and watched TV. Mmm... Donuts), since one of the main complaints
    about 2.6.9 was the apparently release naming scheme.

    Should it be "-rc1"? Or "-pre1" to show it's not really considered release
    quality yet? Or should I make like a rocket scientist, and count _down_
    instead of up? Should I make names based on which day of the week the
    release happened? Questions, questions..

    And the fact is, I can't see the point. I'll just call it all "-rcX",
    because I (very obviously) have no clue where the cut-over-point from "pre"
    to "rc" is, or (even more painfully obviously) where it will become the
    final next release.

    So to not overtax my poor brain, I'll just call them all -rc releases, and
    hope that developers see them as a sign that there's been stuff merged, and
    we should start calming down and seeing to the merged patches being stable
    soon enough..

    So without any further ado, here's 2.6.10-rc1 in testing. A fair number of
    patches that were waiting for 2.6.9 to be out are in here, ranging all over
    the map: merges from -mm, network (and net driver) updates, SATA stuff,
    bluetooth, SCSI, device models, janitorial, you name it.

    Oh, and the _real_ name did actually change. It's not Zonked Quokka any
    more, that's so yesterday. Today we're Woozy Numbat! Get your order in!

Several developers felt there was value in putting out a 'pre' series before a
'rc' series, because the 'rc' series was by definition a 'release candidate'.
Matt Mackall said, "the cut-over should be when you're tempted to rename it
2.6.next. If you have no intention (or hope) of renaming 2.6.x-rc1 to 2.6.x, it
is not a "release candidate"" He added, "What's the point? It serves as a
signal that a) we're not accepting more big changes b) we think it's ready for
primetime and needs serious QA c) when 2.6.next gets released, the _exact code_
has gone through a test cycle and we can have some confidence that there won't
be any nasty 0-day bugs when we go to install 2.6.next on a production
machine." Con Kolivas agreed with this, but added, "I have this feeling Linus
is laughing at us when he debates these arguments." William Lee Irwin II felt
the whole discussion was pointless, and that Linus had enough to do without
worrying about these issues. To this, Linus replied:

    Hey guys, calm down, I meant "naming wars" in a silly kind of way, not the
    nasty kind.

    The fact is, Linux naming has always sucked. Well, at least the versioning
    I've used. Others tend to be more organized. Me, I'm the "artistic" type,
    so I sometimes try to do something new, and invariably stupid.

    The best suggestion so far has been to _just_ use another number, which
    makes sense considering my dislike for both -rc and -pre.

    However, for some reason four numbers just looks visually too obnoxious to
    me, so as I don't care that much, I'll just use "-rc", and we can all agree
    that it stands for "Ridiculous Count" rather than "Release Candidate".

    More importantly, maybe we could all realize that it isn't actually that
    big of an issue ;)

Nick Piggin said:

    Linus I agree it isn't a huge issue. The main thing for me is that I could
    just give a _real_ release candidate more testing - run it through some
    regression tests, make sure it functions OK on all my computers, etc. I
    expect this would be helpful for people with large sets of regression
    tests, and maybe those maintaining 'other' architectures too.

    I understand there's always "one more" patch to go in, but now that we're
    doing this stable-development system, I think a week or two weeks or even
    three weeks to stabalize the release with only really-real-bugfixes can't
    be such a bad thing.

    2.6.x-rc (rc for Ridiculous Count) can then be our development releases,
    and 2.6.x-rc (rc for Release Candidate) are then closer to stable releases
    (in terms of getting patches in).

    Optionally, you could change Ridiculous Count to PRErelease to avoid
    confusion :)

    Other than that I don't have much to complain about... so keep up the good
    work!

Bill Davidsen replied, "I do agree that the pre and rc names gave a strong hint
that (-pre) new features would be considered or (-rc) it's worth doing more
serious testing. If Linux doesn't like this any more, perhaps some other way to
indicate the same thing would be desirable. I admit that the kernel has gotten
so good that I only try -rc (by whatever name) kernel, I'm not waiting for the
next big thing. I think that's really good, actually." And Linus replied:

    Well, I actually do try to _explain_ in the kernel mailing list
    annoucements what is going on.

    One of the reasons I don't like "-rcX" vs "-preX" is that they are so
    meaningless. In contrast, when I actually do the write-up on a patch, I
    tend to explain what I expect to have changed, and if I feel we're getting
    ready for a release, I'll say something like

        ..

        Ok,

        trying to make ready for the real 2.6.9 in a week or so, so please give
        this a beating, and if you have pending patches, please hold on to them
        for a bit longer, until after the 2.6.9 release. It would be good to
        have a 2.6.9 that doesn't need a dot-release immediately ;)

        ....

    which is a hell of a lot more descriptive, in my opinion.

    Which is just another reason why the name itself is not that meaningful. It
    can never carry the kind of information that people seem to _expect_ it to
    carry.

 

7. Different Perspectives On The Status Of Real-Time
23 Oct  - 28 Oct  (21 posts) Archive Link: "[RFC][PATCH] Restricted hard
realtime"
Topics: Microkernels: Adeos, Real-Time: RTAI, Real-Time: RTLinux, SMP
People: Paul E. McKenney, Ingo Molnar, Dimitri Sivanich, Thomas Gleixner, Jon
Masters, Karim Yaghmour, Bill Huey, Andrew Morton

The quest for a real-time kernel has been going on for years, with much work
and many contributions by tons of people. And there are always new people
coming up with ideas for how to do it better. This week, Paul E. McKenney
proposed a mechanism to create real-time SMP systems by off-loading
system-calls and other time-consuming operations to other CPUs. He offered up a
partial patch to illustrate his ideas, acknowledging that there were many
shortcomings: it hadn't been merged with existing real-time work by folks like
Ingo Molnar; it hard-coded various things like which CPU was the designated
real-time CPU; it only handled system calls, and not exceptions or traps; it
was completely untested. But it was real code, and he concluded, "the idea is
to provide an evolutionary path towards hard realtime in Linux. Capabilities
within Linux can be given hard-realtime response separately and as needed. And
there are likely a number of capabilities that will never require hard realtime
response, for example, given current techological trends, a 1MB synchronous
write to disk is going to take some time, and will be subject to the usual
retry and error conditions. This approach allows such operations to keep their
simpler non-realtime code."

The patch received a mixed reception. For one thing, as Ingo pointed out, "this
has been implemented in a clean way already: check out the "isolcpus=" boot
option & scheduler feature (implemented by Dimitri Sivanich) which isolates a
set of CPUs via sched-domains for precisely such purposes. The way to enter
such a domain is via the affinity syscall - and balancing will leave such
domains isolated." Paul was happy to see this work, and rushed off to look at
it. After a day of digging through Dimitri Sivanich's code, he said, "I haven't
proven to myself that the isolcpus code gets rid of all of the cross-runqueue
lock acquisitions, but it certainly gets rid of a large number of them. It
doesn't seem to do system-call or exception-handler offload, but it does help
me see how to do this sort of thing cleanly." He offered a minor patch to
Dimitry, to remove an unnecessary #ifdef, and Dimitry replied, "this specific
code wasn't part of my original patch, but after looking at it briefly, I
believe this patch should make sense."

Elsewhere, Thomas Gleixner was skeptical about the whole thing. For one thing,
he said, "I haven't seen an embedded SMP system yet. Focussing this on SMP
systems is ignoring the majority of possible applications." He offered various
existing uniprocessor alternatives; such as the dual kernel approach of
RTLinux, the domain approach of RTAI/Adeos, and the in-kernel approach of KURT/
Libertos. Paul found none of these satisfactory, and also offered a fourth
possibility, of running "something like the Xen VMM, and have it provide a
single OS with the illusion that there are two CPUs. As you say, the OS cannot
be allowed to really disable interrupts, instead, the underlying VMM must track
whether the OS thinks it has interrupts disabled on a given "CPU", and refrain
from delivering the interrupt until the OS is ready. Of course, on a
multithreaded CPU or SMP system, the VMM is not required." He added, regarding
the whole idea of an embedded SMP system, "Seeing SMP support for ARM lead me
to believe that this was not too far over the edge." Jon Masters replied:

    They have an SMP reference implementation, however many folks don't
    actually want to go the dual core approach right now for embedded designs
    (apparently the increased design complexity isn't worth it). I've had
    protracted discussions about this very issue quite recently indeed. Others
    will disagree, I'm only basing my statement upon conversations with various
    engineers - I think your idea eventually becomes interesting, but now is
    not the right moment to be pushing it yet. People still don't want this
    now.

    Talk to smartphone manufacturers who currently have dual ARM core designs,
    one running Linux and the other running an RTOS for the GSM and phone
    stuff, and they'll say they actually want to reduce the design complexity
    down to a single core. Talking to people suggests that multicore designs
    are good in certain situations (such as in the case above), but in general
    people aren't yet going to respond to your way of doing realtime :-) Yes
    you do have only one OS in there, maybe that would change opinion, but
    we're not quite at the point where everything is multicore so you're not
    going to convince the masses.

    Having said all that, for a different perspective, I hack on ppc (Xilinx
    Virtex II Pro) kernel and userspace stuff for some folks that make high
    resolution imaging equipment, involving extremely precise control over a
    pulsed signal and data acquisition (we're talking nanosecond/microsecond
    precision). Since Linux obviously isn't capable of this level of
    deterministic response right now we end up farming out work to a separate
    core - it's unlikely your approach would convince the hardware folks, but I
    guess it might be tempting at some point in the future. Who knows.

Elsewhere, Karim Yaghmour said:

    I've been trying not to get too involved in this, though I've been
    personally very interested in the topic of obtaining deterministic response
    times from Linux for quite some time. Ingo's work is certainly gathering a
    lot of interest, and he's certainly got the brains and the can-do mindset
    that warrant a wait-and-see attitude.

    I must admit though that I'm somewhat skeptical/worried. The issue for me
    isn't whether Linux can actually become deterministic. This kernel has
    reached heights which many of its detractors never believed it could, it
    has come a long way. So whether it _could_ better/surpass existing
    RT-Unixes (such as LynxOS or QNX for example) in terms of real-time
    performance is for me in the realm of the possible.

    That the Linux development community has to answer the question of "how do
    we provide deterministic behavior for users who need it?" was, as for the
    kernel developers of most popular Unixes, just a matter of time. And in
    this regard, this is a piece of history that is yet to be written: What is
    the _correct_ way to provide deterministic response times in a Unix
    environment?

    Like in most other circumstances, the Linux development community's
    approach to this has been: show me the code! In that regard (and this is in
    no way criticism of anyone's work), Ingo's work has gathered a lot of
    interest not because it is breaking new ground in terms of the concepts,
    but largely because of its very rapid development pace. Let's face it, no
    self-respecting effort that has ever labeled itself as wanting to provide
    "hard real-time Linux" has been active on the LKML on the same level as
    Ingo (though many have concentrated a lot of effort and talent on other
    lists.)

    Yet, I believe that this is a case where the concepts do actually matter a
    lot, and that no amount of published code will erase the fundamental
    question: What is the _correct_ way to provide deterministic response times
    in a Unix environment? I keep highlighting the word "correct" because it's
    around this word's definition that the answer probably lies.

    Here are a number of solutions that some have found to be "correct" for
    their needs over time, in chronological order of appearance:

     1. Master/slave kernel (ex.: RTLinux)
     2. Dual-CPU (there are actually many examples of this, some that date back
        quite a few years)
     3. Interrupt levels (ex.: D.Schleef, B.Kuhn, etc.)
     4. Nanokernel/Hypervisor (ex.:Adeos)
     5. Preemption
     6. Uber-preemption and IRQ threading (a.k.a. preemption on acid) (ex.:
        Ingo, TimeSys, MontaVista, Bill)

    My take on this has been that the "correct" way to provide deterministic
    response times in a Unix environment should minimize in as much as
    possible:

     1. the modifications to the targeted kernel's existing API, behavior,
        source code, and functionality in general;
     2. the burden for future mainstream kernel development efforts;
     3. the potential for accidental/casual use of the hard-rt capabilities, as
        this would in itself result in loss of deterministic behavior;

    Also, it should be:

     1. architectured in a way that enables straight-forward extension of the
        real-time capabilities/services without requiring further modifications
        to the targeted kernel's existing API, behavior, sources, and
        functionality in general;
     2. truly deterministic, not simply time-bound by some upper limit found
        during a sample test run;
     3. _very_ simple to use without, as I said above, having the potential of
        being accidentally or casually used (such a solution should strive, in
        as much as possible, to provide the same API as the targeted Unix
        kernel);
     4. easily portable to new architectures, while remaining consistent, both
        in terms of API and in terms of behavior, from one architecture to the
        next;

    From all the solutions that have been put forth over the years, I have
    found that the nanokernel/hypervisor solution fits this description of
    correctness best. The Adeos/RT-nucleus/RTAI-fusion stack is one
    implementation I have been promoting, as it has already reached important
    milestones. All that is needed for it to work is the necessary hooks for
    Adeos to hook itself into Linux by way of an interrupt pipeline; the latter
    being very simple, portable and non-intrusive, yet could not accidentally/
    casually be used without breaking. This interrupt pipeline is all that is
    required for the rest of the stack to provide the services I have alluded
    to in other postings by means of loadable modules, including the ability to
    transparently service existing Linux system calls via RTAI-fusion for
    providing applications with hard- rt deterministic behavior.

    One argument that has been leveled against this approach by those who
    champion the vanilla-Linux-should-become-hard-rt cause (many of whom are
    now in the uber-preemption camp) is that it requires writing separate
    real-time drivers. Yet, this argument contains a fatal flaw: drivers do not
    become deterministic by virtue of running on an RTOS. IOW, even if Linux
    were to be made a Unix RTOS, every single driver in the Linux sources would
    still have to be rewritten with determinism in mind in order to be used in
    a system that requires hard-rt. This is therefore a non-issue.

    Which brings me back to what you said above: "The problem is that the
    entire OS kernel must be modified to ensure that all code paths are
    deterministic." There are two possible paths here.

    Either:

    a) Most current kernel developers intend to eventually convert the entire
    existing code-base into one that contains deterministic code paths only,
    and therefore impose such constraints on all future contributors, in which
    case the path to follow is the one set by the uber-preemption folks;

    or:

    b) Most current kernel developers intend to keep Linux a general purpose
    Unix OS which mainly serves a user-base that does not need deterministic
    hard-rt behavior from Linux, and therefore changes for providing
    deterministic hard-rt behavior are acceptable only if they are demonstrably
    minimal, non-instrusive, yet flexible enough for those that demand hard-rt,
    in which case the path to follow is the one set by the nanokernel/
    hyperviser folks;

    So which is it?

Bill Huey gave a lengthy response to many of Karim's points; but the upshot
was, "This is a non-issue. the uber-preemption folks will continue to do what
they've/we've been doing and it just opens up more opportunities for
dual-domain RT folks. One doesn't exclude from the other." Andrew Morton also
replied to Karim, suggesting:

    uber-preemption is the chosen way for the mainline kernel mainly because
    its mechanisms can be largely hidden inside (increasingly ghastly) header
    files and most developers just don't have to worry about it.

    I have a sneaking suspicion that the day will come when we get nice
    sub-femtosecond latencies in all the trivial benchmarks but it turns out
    that the realtime processes won't be able to *do* anything useful because
    whenever they perform syscalls, those syscalls end up taking long-held
    locks.

    Which does lead me to suggest that we need to identify the target
    application areas for Ingo's current work and confirm that those
    applications are seeing the results which they require. Empirical results
    from the field do seem to indicate success, but I doubt if they're
    sufficiently comprehensive.

Ingo offered a technical rebuttal to the idea that real-time processes would
have problems that the benchmarks wouldn't reveal; the upshot being that he was
confident the problems could be solved; though he admitted his email ignored
some more difficult issues.

 

8. New Virtual cputime For Micro-Second Accounting
27 Oct  - 28 Oct  (5 posts) Archive Link: "[patch] cputime: introduce cputime."
Topics: User-Mode Linux, Version Control
People: Martin Schwidefsky, Rik van Riel, Andrew Morton

Martin Schwidefsky said, "after the three timer-header-cleanup patches have hit
bitkeeper it's time for the next step: the cputime_t patch. We've been using
this patch and the s/390 exploitation patch for micro-second based cpu time
accounting for some time now and it seems rock solid. I didn't get a single bug
report for it so far. Good for s/390, but now the question is what does the
patch do to all the other architectures? 2.6.9 plus the cputime_t patch works
fine on my thinkpad. Could you add this to -mm for broader testing please? The
patch is cut against 2.6.10-rc1-mm1." His proposed Changelog entry said:

    This patch introduces the concept of (virtual) cputime. Each architecture
    can define its method to measure cputime. The main idea is to define a
    cputime_t type and a set of operations on it (see asm-generic/cputime.h).
    Then use the type for utime, stime, cutime, cstime, it_virt_value,
    it_virt_incr, it_prof_value and it_prof_incr and use the cputime operations
    for each access to these variables. The default implementation is jiffies
    based and the effect of this patch for architectures which use the default
    implementation should be neglectible.

    There is a second type cputime64_t which is necessary for the kernel_stat
    cpu statistics. The default cputime_t is 32 bit and based on HZ, this will
    overflow after 49.7 days. This is not enough for kernel_stat (ihmo not
    enough for a processes too), so it is necessary to have a 64 bit type.

    The third thing that gets introduced by this patch is an additional field
    for the /proc/stat interface: cpu steal time. An architecture can account
    cpu steal time by calls to the account_stealtime function. The cpu which
    backs a virtual processor doesn't spent all of its time for the virtual
    cpu. To get meaningful cpu usage numbers this involuntary wait time needs
    to be accounted and exported to user space.

Rik van Riel replied approvingly, "This will be useful for User Mode Linux, Xen
and iSeries too." Andrew Morton also gave the patch a try, and liked it.

 

9. Some Discussion Of Binary Firmware
27 Oct  - 28 Oct  (7 posts) Archive Link: "Intel also needs convincing on
firmware licensing."
Topics: BSD: OpenBSD
People: Han Boetes, Gene Heskett, Dax Kelson, Denis Vlasenko

Han Boetes said:

    The people from the OpenBSD project are currently lobbying to get the
    firmware for Intel wireless chipsets under a license suitable for Open
    Source.

    Since this will not only benefit BSD but also the Linux Project (and even
    Intel) I would like to mention the URL here for people who want to help
    writing to Intel.

    http://undeadly.org/cgi?action=article&sid=20041027193425

Gene Heskett replied:

    Please be aware that for the so-called "software radios" chips/chipsets,
    the FCC, and other similar regulating bodies in other countries has made
    access to the data quite restrictive in an attempt to keep the less ruly
    among us from putting them on frequencies they aren't authorized to use, or
    to set the power levels above whats allowed. These restrictions can vary
    from governing body to governing body so the software is generally supplied
    according to where the chipset is being shipped. The potential for
    mischief, and legal/monetary reprecussions is sufficiently great that I
    have serious doubts that Intel will budge from their current position
    unless we can prove, beyond any doubt, that the regulatory limitations
    imposed will not be violated.

    Since open source, where anyone who can read the code can see exactly what
    the limits are, and 'adjust to suit', virtually guarantees miss-use, sooner
    if not later, for no other reason than its human nature to experiment,
    Intel/moto/etc therefore has very good reasons to treat its chip<->software
    interface as highly secret & proprietary.

    Thats not saying that they may at some point furnish a 'filter' that
    presents the rest of the world with a usable API to control it, but the
    filter will see to it that attempted illegal settings are ignored. The only
    way I can see that actually working is to actually put that filter inside
    the chip, customized for the locale its being shipped to. The radio control
    portion of the chip itself wouldn't even be bonded out to external world
    pins or bga contacts, just the port of the filter that the outside world
    talks to.

    I'd rather doubt they want to make 20 to 40 different filtered versions of
    the same chipset just to satisfy TPTB in some 3rd world country thats less
    than 1% of the total sales. Even the relatively dense market where Han
    lives is probably less than 5% of the total for a popular chipset.

    I'm a broadcast engineer who has been dealing at times with the FCC for
    over 40 years, so you could say I'm biased. But thats not real for over 40
    years, so you could say I'm biased. But thats not real bias, its just from
    being fairly familiar with the regulatory territory.

    I'd like to see an open source solution to this problem myself, but just
    because its open source we are asking for, with the attendent liabilities
    that implies, I would not hold my breath till it happens.

    If you do, you'll probably be talking to the rest of the world through a
    Ouija board.

Denis Vlasenko pointed out that binary firmware didn't really hide anything,
because the code could just be disassembled and its secrets revealed. But Dax
Kelson replied:

    Who cares what the secrets in the firmware are.

    Again, it does not execute on your computer's CPU. It does not taint the
    kernel. The Linux kernel driver is 100% GPLd, no binary blobs.

    Nearly all the devices in your computer have firmware. Your keyboard, your
    CDROM drive, your graphics card. It is hypocritical to clamor for the
    source code to the IPW2100/2200/etc while not clamoring for the source code
    to all the other firmwares in your computer.

    It is unfortunate that the firmware isn't stored onboard the Intel card,
    and instead needs to be loaded, however, this is a pretty minor
    inconvenience.

 

10. Cross-Compilation HOWTO
27 Oct  - 30 Oct  (8 posts) Archive Link: "massive cross-builds without too
much PITA"
Topics: FS: NFS, FS: ext2, SMP, Serial ATA, Version Control
People: Alexander Viro, Geert Uytterhoeven, Alessandro Amici

Alexander Viro said:

    Contrary to popular beliefs, crosscompiling and full builds for a bunch of
    platforms are not hard and not particulary time-consuming. Below are my
    notes on the setup and practices; I hope it will be useful and I really_
    hope that people will start doing similar things.

    On my boxen full rebuild for 6 platforms (allmodconfig on each) takes about
    an hour and normally is done once per new upstream tree; build-and-compare
    after making changes usually takes less than a minute total (again, for all
    these targets). IOW, it's fairly tolerable.

                            Requirements to sane setup:

     1. source tree should be common for as many platforms as possible; and I
        mean physically common, not just cp -rl'ed. Rationale: applying a patch
        (or using emacs and similar inferior editors) would break links.
        Propagating fixes between a bunch of partially shared trees is a PITA.
     2. there should be an easy way to get a diff'able build logs before and
        after a change and do that without heavy massage of logs and without
        forcing full rebuild. There should also be an easy way to carry a
        patchset _and_ get new changes into the patchset without having them
        turn into a huge lump that would need to be split afterwards.

        A way to do that: have a forest of cp -rl'ed trees, starting from the
        baseline one, carrying the changes we'd done to source tree. Common
        sequence of events is

            <work with source tree>
            diff -urN <last tree in forest> <source> > delta
            cp -rl <last tree in forerst> <new tree>
            (cd <new tree> && patch -p1 -E) <delta

        Note that this gives a fast way to see build log changes:

            cd <source>
            patch -p1 -E -R <delta
            make # now it's uptodate
            patch -p1 -E <delta
            make <whatever arguments> >../log-new 2>&1
            patch -p1 -E -R <delta
            make <whatever arguments> >../log-old 2>&1
            patch -p1 -E <delta

        and now we have build logs for *exact* *same* *part* *of* *tree* in old
        and new trees. Ready to be compared. Of course, for multiplatform work
        we want to do each of these for all platforms involved. It's not going
        to be a lot of rebuilds, though - we are only rebuilding the stuff we'd
        been changing.

     3. change of baseline version should be easy. Note that aforementioned
        forest takes care of most of these problems - we can easily convert it
        to sequence of patches (script doing diff between cp -rl'ed trees; fast
        enough) and we can easily convert a series into the forest (cp -rl +
        patch done by another script). Porting to new baseline mostly consists
        of folding the forest into patchset and applying it to new tree.
     4. there should be an easy way to spread the builds between several boxen
        _and_ keep the trees in sync. What I'm doing looks so:

         1. master box where I'm doing most of the work on patchset (not
            particulary fast CPU, preferably enough memory and fast disk).
         2. slave boxen where the builds are done - these are heavily CPU-bound
            [see below] and where editing is going on. Layout:

              # clean tree (right now - RC10-rc1-bk6) on each.
              # base - clean + combined patchset applied to it
                (RC10-rc1-bk6-base; cp -rl'ed from clean)
              # forest (RC10-rc1-bk6-<name>; cp -rl'ed starting from base,
                that's where additions to patchset go)
              # source (RC10-rc1-bk6-current; originally cp -a from base,
                that's where editing and builds are done)
              # linux-<arch> - object trees
              # patches/... - NFS-exported by master and shared by all slaves.

            It's easier to move stuff around that way (scp gets annoying real
            soon)

        Note that sharing the trees between slaves (e.g. by NFS) is not
        practical - too damn slow. Propagating changes is not hard, provided
        that slaves are few.

        *NOTE*: one thing you definitely want to do is to turn
        CONFIG_DEBUG_INFO off. That changes the builds from IO-bound to
        CPU-bound and saves a *lot* of space. When you work with several
        platforms the last part gets really important - we are talking about
        nearly 2Gb per target.

        Splitup of initial patchset lives on master; no point duplicating
        potentially very large forest on slaves. What we have on slaves is the
        tail of patchset - the stuff we'd added. From time to time we can move
        the beginning of that tail to master, collapsing more stuff on slaves.

     5. cross-toolchains themselves and not wearing your fingers by nightmare
        make invokations. I've done a trivial script that takes target name as
        its first argument, sets ARCH, O, CROSS_COMPILE and CHECK (for
        cross-sparse) depending on it and passes them and the rest of arguments
        to make. It also sanitizes stderr a bit (see ftp.linux.org.uk/pub/
        people/viro/kmk for what I'm using right now). That takes care of make
        side of that mess - something like $ for i in i386 alpha ppc; do kmk $i
        C=2 drivers/net/ >../$i-net15 & done is done a lot (and history helps
        enough to make further scripting a non-issue).

        Building cross-toolchain is surprisingly easy these days; I'm using
        debian on build boxen and cross-compilers are not hard to do:

            apt-get build-dep binutils
            apt-get build-dep gcc-3.3
            apt-get install dpkg-cross
            apt-get source binutils
            get binutils-cross-... patch from bugs.debian.org/231707
            cd binutils-...
            apply patch
            TARGET=<target>-linux fakeroot debian/rules binary-cross
            cd ..
            dpkg -i binutils-<target>-....deb
            got linux-kernel-headers, libc6, libc6-dev and libdb1-compat for
            target
            dpkg-cross -a <target> -b on all of those
            dpkg -i resulting packages
            apt-get source gcc-3.3
            cd gcc-3.3-...
            GCC_TARGET=<gcc_target> debian/rules control
            GCC_TARGET=<gcc_target> debian/rules build
            GCC_TARGET=<gcc_target> fakeroot debian/rules binary
            cd ..
            dpkg -i resulting packages.

        One note: <target> here is debian platform name (e.g. ppc), but
        <gcc_target> is *gcc* idea of what that bugger is called (e.g.
        powerpc).

        IIRC, Nikita Youshchenko had pre-built debs somewhere, but they were
        not for the host I'm using (amd64/sid).

        In any case, that's a one-time work (OK, once per target). Major
        limitation here is that one needs several debs for target (AFAICS all
        we really need is a bunch of headers). In practical terms it means no
        ppc64. However, it's not too bad a problem - breaking ppc64 means
        breaking a box Linus is playing with, so problems on that platform are
        noticed fast enough as it is ;-)

     6. cross-sparse: sparse snapshots live on http://www.codemonkey.org.uk/
        projects/bitkeeper/sparse/; I'm probably doing more work than necessary
        since I build a separate binary for each target. What it means is

         1. editing pre-process.h to point to cross-gcc headers (e.g. /usr/lib/
            gcc-lib/alpha-linux/3.3.4/include) and
         2. editing target.c (probably not needed these days)
            make CFLAGS=-O3
            mv ~/bin/sparse-<arch>{,-old}
            cp check ~/bin/sparse-<arch>
            does the build-and-install.

        When switching to new version of sparse (and it's changing pretty
        fast): make for all platforms to make sure that no compiling will get
        in a way, followed by

            kmk <arch> C=2 CHECK=sparse-<arch>-old >../<arch>-sparse-old
            kmk <arch> C=2 >../<arch>-sparse-new

        for everything (works fine in parallel), followed by comparing logs and
        looking for regressions. About 20 minutes for all (well, 20 minutes
        plus whatever it takes to fix the breakage if we get one, obviously).

     7. useful tricks:

         1. I'm carrying a patch that allows to add to CHECKFLAGS from command
            line (CF=-Wbitwise in make/kmk arguments instead of editing
            makefile). It's probably worth merging at some point.
         2. I'm carrying a kludge that teaches allmodconfig to take a given set
            of options from a file and pin them down; Roman has a cleaner patch
            and IIRC he was going to merge it at some point. Anyway, that
            allows to do such things as "allmodconfig on i386, but have CPU
            type set to K7 and disable SMP first, so we'll get all UP-only
            drivers into the build". Or "do PPC build for that
            sub-architecture", etc.

            See ftp.linux.org.uk/pub/people/viro/patchset/XK* for that stuff.

     8. Random notes:

        Of course, all that stuff can be done on a single box; however, having
        a bunch of compiles run in parallel will get painful since too many of
        them == guaranteed way to trash all caches around. I've ended up using
        a two-years-old K7 box as a master (since that was where I was doing
        most of the kernel work anyway) and put two amd64 3400+, both with
        512Mb and 10krpm SATA as slaves. I considered spreading build on other
        local boxen; maybe I'll do that when I add more targets to active set,
        but that's not obvious. The main problem here is doing resyncs between
        the boxen without too much PITFingers - and getting around to doing it,
        of course. So far existing setup had been more than enough for my needs
        - so much that all further scripting, etc. remains theory.

        IME this stuff is *heavily* CPU-bound. Parallel builds on the same
        source make IO load almost a non-issue, as long as you are not spewing
        gigabytes of crap all over the disk (== have CONFIG_DEBUG_INFO turned
        off; again, it's a must-do unless you are reading this posting by
        mistake, having confused your linux-kernel and masochists-r-us
        mailboxen).

        ext2 works fine for build boxen - you are not dealing with
        hard-to-recreate data there (diffs are going to master and you want
        them carved into small chunks from the very beginning anyway). So
        journalling, etc. is a pointless overhead in this situation. Keep in
        mind that forest of cp -rl'ed kernel trees gets hard on caches once it
        grows past ~60 copies regardless of the fs involved; if your patchset
        gets bigger than that, fragment it and do porting, etc. group-by-group.

        Currently i386, amd, sparc32, sparc64, alpha and ppc all survive
        allmodconfig with relatively few patches; amount of new breakage
        showing up is not too bad and so far didn't take much time to deal
        with. Bringing in new targets... hell knows - parisc probably will be
        the next one (which will mean adding delta between Linus' and parisc
        trees into -bird), arm going after it (that will mean untangling the
        mess around drivers/net/8390.c first ;-/) After getting the target to
        build (and barring the acts of Cthulhu or Ingo) it doesn't add a lot of
        overhead...

        Hardware: well, whatever you have, obviously. Parallel builds *do*
        scale nicely, so SMP with relatively slow CPUs can do fine. Out of
        something recent... I went with UP amd64, simply because a couple of UP
        boxen was actually cheaper than equivalent SMP one (~$600 per box,
        counting disks and cases) and everything else would be too far
        overpriced.

Geert Uytterhoeven remarked, "Just in case you ever want to start doing m68k as
well: I already have a few sparse-related cleanups at http://
linux-m68k-cvs.ubb.ca/~geert/linux-m68k-2.6.x-merging/XXX-sparse-*" . Alexander
asked, "Hrm... How far is Linus' tree from building on m68k these days? I
hadn't looked at the delta since 2.6.7 or so, but it used to be fairly invasive
in some places..." And Geert replied:

    For 2.6.8.1, the different task models (cfr. the thread titled `Re: Getting
    kernel.org kernel to build for m68k?' on lkml last September) is the big
    problem. If you apply the patch from that thread to plain 2.6.8.1, it'll
    build fine!

    2.6.9 introduced a new problem with the signal handling (for which BTW we
    don't have a fix yet).

Alessandro Amici also replied to Alexander's original post, saying, "I happen
to be learning how to cross-compile on Debian right now, so i can testify that
building the cross toolchain 'The Debian Way' is even easier than you describe
;)." He went on:

    Detailed instructions are at: http://people.debian.org/~debacle/cross.html

    The short story is:
    # apt-get toolchain-source dpkg-cross autoconf2.13 fakeroot
    # tpkg-install-libc <terget>-linux # grabs, converts and install the
    headers
    $ tpkg-make <target>-linux # no need to patch anything
    $ cd binutils...
    $ debuild -us -uc # no magic env variables
    # dpkg -i ../binutils...deb
    $ cd ../gcc...
    $ debuild -us -uc
    # dpkg -i ../gcc...deb

    If I'm not mistaken, that's all.

But Alexander pointet out, "gcc and binutils in there tend to get out of sync
with native ones. Which is a killer, as far as I'm concerned..."

 

11. Kprobes Updates
28 Oct  (12 posts) Archive Link: "[0/3] PATCH Kprobes for x86_64- 2.6.9-final"
Topics: Assembly, SMP
People: Prasanna S. Panchamukhi, Andi Kleen, Prasanna S. Panchamuk

Prasanna S Panchamukhi said, "Below are the Kprobes patches ported to x86_64
architecture. I have updated these patches with suggestions from Andi Kleen.
Thanks Andi for reviewing and providing your feedback. These patches can be
applied over 2.6.9-final." The first patch modified Kprobes to support porting
it to other architectures. The second patch (and really the whole project), he
said: "

Helps developers to trap at almost any kernel code address, specifying a
handler routine to be invoked when the breakpoint is hit. Useful for analysing
the Linux kernel by collecting debugging information non-disruptively. Employs
single-stepping out-of-line to avoid probe misses on SMP and may be especially
useful in aiding debugging elusive races and problems on live systems. More
elaborate dynamic tracing tools can be built over the kprobes interface.

Sample usage:

        To place a probe on __blockdev_direct_IO:
        static int probe_handler(struct kprobe *p, struct pt_regs *)
        {
                ... whatever ...
        }
        struct kprobe kp = {
                .addr = __blockdev_direct_IO,
                .pre_handler = probe_handler
        };
        register_kprobe(&kp);


Jprobes:

A special kprobe type which can be placed on function entry points, and employs
a simple mirroring principle to allow seamless access to the arguments of a
function being probed. The probe handler routine should have the same prototype
as the function being probed.

The way it works is that when the probe is hit, the breakpoint handler simply
irets to the probe handler's rip while retaining register and stack state
corresponding to the function entry. After it is done, the probe handler calls
jprobe_return() which traps again to restore processor state and switch back to
the probed function. Linus noted correctly at KS that we need to be careful as
gcc assumes that the callee owns arguments. We save and restore enough stack
bytes to cover argument space.

Sample Usage:

        static int jip_queue_xmit(struct sk_buff *skb, int ipfragok)
        {
                ... whatever ...
                jprobe_return();
                return 0;
        }

        struct jprobe jp = {
                {.addr = (kprobe_opcode_t *) ip_queue_xmit},
                .entry = (kprobe_opcode_t *) jip_queue_xmit
        };
        register_jprobe(&jp);

"

And the third patch also consisted of minor changes to facilitate porting. Andi
Kleen replied to the set of them, saying:

    The patch is not ready to be applied yet. You didn't address some issues
    from the last review.

    Like I still would like to have the page fault notifier completely moved
    out of the fast path into no_context (that i386 has it there is also
    wrong). Adding kprobe_runn doesn't make a difference.

    And the jprobe_return_end change is wrong, my suggestion was to move it
    into the inline assembler statement. Adding asmlinkage doesn't help at all
    (I think i386 gets this wrong too)

Prasanna explained regarding the page fault notifier, "The kprobes fault
handler is called if an exception is generated for any instruction within the
fault-handler or when Kprobes single-steps the probed instruction. AFAIK
kprobes does not handle page faults in the above case and just returns
immediately resuming the normal execution." Andi replied, "Ok. It's ugly, but
ok. Can you remove the bogus kprobes_running() then please, it's unnecessary?
With that change it would be ok to merge from my side."

 

12. Linux 2.6.10-rc1-mm2 Released
29 Oct  - 2 Nov  (29 posts) Archive Link: "2.6.10-rc1-mm2"
Topics: Kernel Build System, Kernel Release Announcement, Virtual Memory
People: Andrew Morton

Andrew Morton announced Linux kernel 2.6.10-rc1-mm2, saying:

    ftp://ftp.kernel.org/pub/linux/kernel/people/akpm/patches/2.6/2.6.10-rc1/
    2.6.10-rc1-mm2/

      + There are a bunch of CPU scheduler changes here in the load balancing
        area. They have been shown to help some workloads, but extra
        performance testing is needed.
      + More fiddling with the memory reclaim code. We're making gradual
        progress here, so people who have had issues in the past with VM
        behaviour should keep an eye out for improvements or regressions.
      + sparc64 and possibly other architectures fail to compile at all due to
        a kbuild problem. A fix is in progress. Apparently doing

            touch include/asm-foo/Kbuild

        will work around this.

 

13. Linux 2.6.9-ac5 Released
29 Oct  - 31 Oct  (8 posts) Archive Link: "Linux 2.6.9-ac5"
People: Alan Cox, Nuno Silva, Greg Louis

Alan Cox announced a new release of his own Kernel patch set, 2.6.9-ac5. He
said, "This update adds some of the more minor fixes as well as a fix for a
nasty __init bug. Nothing terribly pressing for non-S390 users unless they are
hitting one of the bugs described or need the new driver bits." Nuno Silva
replied, "Thank god someone started to mantain a stable 2.6 kernel!" Greg Louis
concurred, saying, "I was going to wait till at least 2.6.10 -- need reliable
operation, and all the "this-and-that-major-function-is- broken-again" messages
were putting me off -- but Alan can be trusted."

 

14. Automated Correctness Checking
30 Oct  (4 posts) Archive Link: "Sparse "context" checking.."
Topics: SMP, USB
People: Linus Torvalds, Roland Dreier, Greg KH, Greg KH

Linus Torvalds said:

    I just committed the patches to the kernel to start supporting a new
    automated correctness check that I added to sparse: the counting of static
    "code context" information.

    The sparse infrastructure is pretty agnostic, and you can count pretty much
    anything you want, but it's designed to test that the entry and exit
    contexts match, and that no path through a function is ever entered with
    conflicting contexts.

    In particular, this is designed for doing things like matching up a "lock"
    with the pairing "unlock", and right now that's exactly what the code does:
    it makes each spinlock count as "+1" in the context, and each spinunlock
    count as "-1", and then hopefully it should all add up.

    It doesn't always, of course. Since it's a purely static analyser, it's
    unhappy about code like

            int fn(arg)
            {
                    if (arg)
                            spin_lock(lock);
                    ...
                    if (arg)
                            spin_unlock(lock);
            }

    because the code is not statically deterministic, and the stuff in between
    can be called with or without a lock held. That said, this has long been
    frowned upon, and there aren't that many cases where it happens.

    Right now the counting is only enabled if you use sparse, and add the
    "-Wcontext" flag to the sparse command line by hand - and the spinlocks
    have only been annotated for the SMP case, so right now it only works for
    CONFIG_SMP. Details, details.

    Also, since sparse does purely local decisions, if you actually _intend_ to
    grab a lock in one function and release it in another, you need to tell
    sparse so, by annotating the function that acquires the lock (with
    "__acquires(lockname)") and the function that releases it (with, surprise
    surprise, "__releases(lockname)") in the declaration. That tells sparse to
    update the context in the callers appropriately, but it also tells sparse
    to expect the proper entry/exit contexts for the annotated functions
    themselves.

    I haven't done the annotation for any functions yet, so expect warnings. If
    you do a checking run, the warnings will look something like:

              CHECK   kernel/resource.c
            kernel/resource.c:59:13: warning: context imbalance in 'r_start' - wrong count at exit
            kernel/resource.c:69:13: warning: context imbalance in 'r_stop' - unexpected unlock

    which just shows that "r_start" acquired a lock, and sparse didn't expect
    it to, while "r_stop" released a lock that sparse hadn't realized it had.
    In this case, the cause is pretty obvious, and the annotations are equally
    so.

    A more complicated case is

              CHECK   kernel/sys.c
            kernel/sys.c:465:2: warning: context imbalance in 'sys_reboot' - different lock contexts for basic block

    where that "different lock contexts" warning means that sparse determined
    that some code in that function was reachable with two different lock
    contexts. In this case it's actually harmless, since what happens in this
    case is that the code after rebooting the machine is unreachable, and
    sparse just doesn't understand that.

    But in other cases it's more fundamental, and the lock imbalance is due to
    dynamic data that sparse just can't understand. The warning in that case
    can be disabled by hand, but there doesn't seem to be that many of them. A
    full kernel build for me has about 200 warnings, and most of them seem to
    be the benign kind (ie the kind above where one function acquires the lock
    and another releases it, and they just haven't been annotated as such).

    The sparse thing could be extended to _any_ context that wants pairing, and
    I just wanted to let people know about this in case they find it
    interesting..

Roland Dreier replied, "Do you have a plan for how to handle functions like
spin_trylock()? I notice in the current tree you just didn't annotate
spin_trylock()." Linus replied:

    Actually, the _current_ tree does actually annotate spin_trylock() (as of
    just before I sent out the email). It looks like

            #define spin_trylock(lock)      __cond_lock(_spin_trylock(lock))

    where __cond_lock() for sparse is

            include/linux/compiler.h:# define __cond_lock(x)        ((x) ? ({ __context__(1); 1; }) : 0)

    ie we add a "+1" context marker for the success case.

    NOTE! This works with sparse only because sparse does immediate constant
    folding, so if you do

            if (spin_trylock(lock)) {
                    ..
                    spin_unlock(lock);
            }

    sparse linearizes that the right way unconditionally, and even though there
    is a data-dependency, the data depenency is constant. However, if some code
    does

            success = spin_trylock(lock);
            if (success) {
                    ..
                    spin_unlock(lock);
            }

    sparse would complain about it, because sparse doesn't do any _real_ data
    flow analysis.

    So sparse can follow all the obvious cases, including trylock and
    "atomic_dec_and_lock()".

Greg KH also said to Linus, "Nice, I like this a lot. Already found some bugs
in the USB drivers that have been there forever."

 

15. man-pages Maintainership
31 Oct  (2 posts) Archive Link: "[OT] man-pages-1.70, new maintainer"
People: Andries Brouwer, Rob van Nieuwkerk

After maintaining the man-pages project for 9 years, Andries Brouwer said,
"Just released man-pages-1.70. Find it the usual places. Due to a decreasing
amount of time and increasing RSI, maintaining the man-pages package became
difficult. Fortunately Michael Kerrisk has accepted to take over. Send
corrections and additions to [email protected] (mailto:[email protected])
." Rob van Nieuwkerk said, "Thanks a lot Andries for all your great man-pages
work!"

 

16. Migration To New Argument-Passing Method For Some Assembly Interfaces
2 Nov  - 3 Nov  (5 posts) Archive Link: "RFC: avoid asmlinkage on x86 traps/
interrupts"
Topics: Assembly
People: Linus Torvalds

Linus Torvalds said:

    Here's the second part of a gradual change from using stack argument
    passing to using register argument passing for a number of assembly
    interfaces. As covered in previous discussions, this has the advantage of
    having the caller/callee agree on the ownership of the arguments (well, at
    least the three first ones), and thus gcc won't occasionally possibly
    corrupt the stack frame that assembly code believes it owns.

    It also removes a few instructions when we can pass arguments in registers
    in most places. In other places it adds a "movl %esp,%eax", though, as some
    cases used to just rely on knowing the saved stack layout and use that
    directly as the arguments.. So it's not really a big win either way, and
    the real motivation for this is to move away from the argument ownership
    questions.

    No other architecture should care, since for most of them "asmlinkage" vs
    "fastcall" is a no-op, and when that isn't true (like on ia64) as far as I
    can tell all the actual call-sites in this patch were all in C code for the
    routines that were changed. But architecture maintainers should probably
    take a quick look to verify.

 

 

 

 

 

 

                       We Hope You Enjoy Kernel Traffic
                                        

Kernel Traffic is grateful to be developed on a computer donated by Professor
Greg Benson and Professor Allan Cruse in the Department of Computer Science at
the University of San Francisco. This is the same department that invented
FlashMob Computing. Kernel Traffic is hosted by the generous folks at
kernel.org. All pages on this site are copyright their original authors, and
distributed under the terms of the GNU General Public License, version 2.0.