Kernel Traffic #229 by Zack Brown
[email protected] Mon, 08 Sep 2003 11:10:43 -0700
| Newsgroups | gmane.linux.kernel.kernel-traffic |
|---|---|
| Message-ID | <E19wQTL-00067l-00@renegade> |
Kernel Traffic #229 For 8 Sep
By Zack Brown
If you like Kernel Traffic and want to send me a little money, click here:
https://www.paypal.com/xclick/business=zbrown%40tumblerings.org&no_note=1&tax=0¤cy_code=USD
Table Of Contents
* Standard Format
* Text Format
* XML Source
* Mailing List Stats For This Week
* Threads Covered
1. 11 Aug - 14 Aug (27 Code-Formatting Patches And BitKeeper
posts) Revision History
2. 11 Aug - 16 Aug (20 ext2 Corruption In 2.4.22-rc2
posts)
3. 12 Aug - 14 Aug (10 Pre-Loading Modules Before Bootup
posts)
4. 13 Aug - 17 Aug (18 Linux 2.6.0-test3-mm2 Released
posts)
5. 14 Aug - 18 Aug (16 /proc/kcore May Be Going Away
posts)
6. 18 Aug (12 Development Strategy For Unmaintained Drivers
posts)
7. 20 Aug (1 post) New AEM (Asynchronous Event Mechanism) For
Linux
8. 20 Aug - 21 Aug (2 FUSD v1.10 Released
posts)
Mailing List Stats For This Week
We looked at 2320 posts in 10655K.
There were 527 different contributors. 289 posted more than once. 211 posted
last week too.
The top posters of the week were:
* 94 posts in 366K by Greg KH
* 73 posts in 268K by Con Kolivas
* 69 posts in 259K by Jamie Lokier
* 68 posts in 215K by Jeff Garzik
* 44 posts in 216K by Matt Mackall
* Full Stats
1. Code-Formatting Patches And BitKeeper Revision History
11 Aug - 14 Aug (27 posts) Subject: "[PATCH] CodingStyle fixes for
drm_agpsupport"
Topics: Version Control
People: Larry McVoy, Eli Carter, Philip Brown, Dave Jones
Dave Jones posted some formatting changes to a file, to make it conform more
closely to the CodingStyle document. Larry McVoy objected to the patch, in part
because, "It's a formatting only patch. That screws over people who are using
BK for debugging, now when I double click on these changes I'll get to your
cleanup patch, not the patch that was the last substantive change." Jeff
replied that in Linux development, CodingStyle patches were culturally
acceptable, as long as the developer kept each indifidual patch small. Larry
replied, "That ought to be balanced with "don't screw up the revision history,
people use it". It's one thing to reformat code that is unreadable, for the
most part this code didn't come close to unreadable." Eli Carter remarked,
"perhaps the (revision control) tool is getting in the way of doing the job and
should be fixed? :) Perhaps being able to flag a changeset as a 'formatting
change', and have the option to hide it or make it 'transparent' in some
fashion? Hmm... "Annotate only the changes that relate to feature X."" Larry
said he'd thought about that and rejected it, and in fact, "we have a policy at
BitMover where "formatting changes" are prohibited and we make people redo
their changesets until they get them right." Philip Brown suggested, "You
should allow for changes that are "formatting change only", with no actual code
structural change. You could pass the results through stage 1 of gcc, and only
allow it if the parsing tree is identical." Larry replied that BitKeeper was
used for more than just GCC-compilable files. Eli asked, "I assume you can have
content-specific validators run before a commit? (CVS can.) A validator could
see that it was formatting only and mark it in someway perhaps?" Larry said
yes, BitKeeper had triggers, which could do what Eli wanted.
2. ext2 Corruption In 2.4.22-rc2
11 Aug - 16 Aug (20 posts) Subject: "2.4.22-rc2 ext2 filesystem corruption"
Topics: FS: ext2
People: Martin Maney, Marcelo Tosatti, Alan Cox, Stephan von Krawczynski
Martin Maney reported, "I've got a very repeatable file corruption under
2.4.22-rc2 that does not manifest under 2.4.21. My repeatable test case only
(so far?) causes the data in the file to be corrupted, but I suspect metadata
can get hit as well, and I have seen some filesystem errors that were probably
caused by this, but not so that I can say so with certainty." Stephan von
Krawczynski suggested running memtest to confirm there were no problems with
his RAM chips. And Marcelo Tosatti asked for a clear recipe to repeat the
corruption. Martin said that copying any large file (perhaps 50M in size)
across filesystems, and then umounting the destination filesystem would
reproduce the corruption. After remounting, the data would have changed.
Marcelo asked, "can you try to isolate the corruption. You said it didnt happen
with 2.4.21 -- which pre shows up the problem?" Martin replied, "The problem
appears only in rc2 (okay, assuming it's not a regression). With 2.4.21-rc1 the
file corruption I've been seeing does not happen." ... "I will also try an rc2
with unnecessary features omitted from the build. So far I've stayed with the
base config, but it's a config shared by most of the machines on the LAN and
thus has plenty of extras."
Marcelo thought the problem might have something to do with the Promise driver,
which changed in -rc2. He posted a patch to revert that change, but instead of
this, Martin disabled his Promise chip entirely. After that, he no longer
observed the corruption. Marcelo asked him to try again with the same hardware,
and just that one patch reverted, so they could be sure where the problem was.
Martin did this, and confirmed that the corruption could not be reproduced with
the patch reverted.
Having located the problem, Alan Cox pointed out that it would still be
necessary to audit the code in order to find a fix. There were a couple more
posts, and the thread petered out.
3. Pre-Loading Modules Before Bootup
12 Aug - 14 Aug (10 posts) Subject: "multibooting the linux kernel"
Topics: FS: initramfs, FS: ramfs
People: Nufarul Alb, Christoph Hellwig, H. Peter Anvin
Nufarul Alb posted a patch (http://home.t-online.de/home/ChristianK./patches/)
that made it possible to pre-load modules before the kernel actually booted.
Christoph Hellwig pointed out that Nufarul's patch was against 2.4, and so did
not have much chance of being accepted. He suggested porting the work to
2.6-test and resubmitting it. He also suggested coding in the Linux style
rather than the GNU style. Nufarul clarified, "Those are not my patches. They
belong to a certain Christian Koenig. He doesn't mantain them any more and I'm
searching for someone to mantain this project." H. Peter Anvin suggested just
using initramfs instead.
4. Linux 2.6.0-test3-mm2 Released
13 Aug - 17 Aug (18 posts) Subject: "2.6.0-test3-mm2"
Topics: Framebuffer
People: Peter Osterlund, Andrew Morton
Andrew Morton announced 2.6.0-test3-mm2 (ftp://ftp.kernel.org/pub/linux/kernel/
people/akpm/patches/2.6/2.6.0-test3/2.6.0-test3-mm2/) , saying it included
"zillions" of bugfixes, framebuffer updates, and some more CPU scheduler
tweaking. Peter Osterlund posted "a fix for synaptics touchpads with "multi
buttons". The patch comes from Hartwig Felger, who wrote the original multi
button support patch (p00003_synaptics-multi-button.patch). The same bug fix
has been included in the XFree86 driver for a few weeks, and seems to work
fine. (That part of the X driver is only used for 2.4 kernels.)"
5. /proc/kcore May Be Going Away
14 Aug - 18 Aug (16 posts) Subject: "[PATCH] Make modules work in Linus' tree
on ARM"
People: Russell King, Linus Torvalds, Tony Luck, Eli Carter, Alan Cox, Daniel
Jacobowitz, John Levon, John Bradford
Russell King said:
This patch allows modules to work in Linus' tree for ARM, and is the one
thing which prevents Linus' tree from building for any ARM machine.
After reviewing the /proc/kcore and kclist issues, I've decided that I'm no
longer prepared to even _think_ about supporting /proc/kcore on ARM - it
just gets too ugly, and adds too much code to make it worth the effort, the
time or the energy to implement a solution to that problem. This is
especially true since most people use kgdb or similar rather than /proc/
kcore anyway. /proc/kcore is a "wouldn't it be nice" feature.
The reasons that I'm going with this solution rather than fixing /proc/
kcore is that:
+ to add a kclist entry for each module would mean hacking the kclist
structure into vm_struct's ->page pointer with disgusting hacks. I
think we can all agree that this isn't the way to go. The alternative
is to create Yet Another Memory Allocator, and this isn't something I
want to see in what is now an embedded architecture.
+ we'd need to find some way to dynamically reserve the virtual mapped
memory regions for the kernel direct mapped RAM. Since ARM uses a
generic memory initialisation implementation which handles contiguous
and discontiguous memory, it doesn't lend itself well to the kclist
approach, and I'm not about to add extra callbacks from init/main.c (so
we have kmalloc available) just to support this.
If someone _else_ wants to put the effort into fixing ARM modules to work
nicely with /proc/kcore, be my guest - I'm just no longer interested in
this problem space.
Maybe in 2.7 a generic "reserve an area of memory in this region" function
like __get_vm_area below is in order?
Therefore, I'm providing a patch which adds the necessary changes to the
core kernel code to make the current modules solution work for ARM.
Linus Torvalds suggested just removing /proc/kcore entirely. He said, "Does
anybody actually _use_ /proc/kcore? It was one of those "cool feature" things,
but I certainly haven't ever used it myself except for testing, and it's
historically often been broken after various kernel infrastructure updates, and
people haven't complained.."
John Bradford said he'd used it on a few rare occassions, to recover files that
had been in RAM when its application had crashed. Daniel Jacobowitz also said
he used /proc/kcore for debugging, though he said he'd much rather have kgdb in
the kernel. And Tony Luck from Intel disclaimed:
I only fixed it up because someone at SGI complained that my ia64 kernel
virtual space re-arrangements had broken it (even more ... it had never
been right for ia64).
Even now, it's still full of races (e.g. if you start gdb to look at /proc/
kcore, then load or unload modules).
Plus gdb doesn't really understand that kcore is a special file, so it
caches values (read "jiffies" twice and notice that it doesn't change ...
because gdb cached the read).
So don't mistake my recent activity fixing kcore for interest in its
continued existence.
Alan Cox urged Linus to put kgdb in the kernel, and added that he wouldn't mind
seeing /proc/kcore become arch-specific, or even go away altogether. Eli Carter
also said he'd like to see kgdb in the kernel.
John Levon said that /proc/kcore was the only way to figure out the kernel
pointer size from user-space, and he pointed out that all suggestions for how
to do it had objections listed in an earlier linux-kernel discussion (http://
marc.theaimsgroup.com/?t=104205635900001&r=1&w=2) . Russell summarized,
"oprofile requires /proc/kcore support" . Linus said, "Why not just fix the
oprofile interfaces to contain that information? You already have to export CPU
type, buffer size etc.." John said he'd be happy to do that, but he'd been
under the impression that such a patch would be rejected as unnecessary bloat.
He whipped up a patch and posted it.
6. Development Strategy For Unmaintained Drivers
18 Aug (12 posts) Subject: "Re: Fix up riscom8 driver to use work queues
instead of task queueing."
Topics: SMP
People: Russell King, Linus Torvalds
In the course of discussion, Russell King suggested that for older serial
drivers, the "correct approach is for someone to convert them to use the new
serial driver core (and fix the driver core interface to allow them to work
with it.)" He didn't have any of that hardware, but he'd been hoping for
someone who did to step up and fix them. Linus replied:
Hey, I'm all for that for 2.7.x. In the meantime, they've been broken for a
year, so let's just try to fix them up into a "limping along" state.
I don't have the hardware either, but at least now they should be testable
on UP configurations (SMP is generally still broken due to the drivers
expecting to be able to disable all interrups globally instead of using
proper locking).
I'd be interested to hear whether the dang things work. Of course, there
probably aren't that many people around with the hardware any more. I could
just have added them to the BROKEN list, but since they _might_ work it
seemed like a better idea to be hugely optimistic instead ;)
Russell replied, "True. However, there is the opposite point of view which is
equally valid. There aren't many people with the hardware, and the people that
there are aren't interested in development kernel series, so even if we did
convert them during 2.7, we wouldn't hear about it until 2.8." And Linus said:
Yes. However, what worries me more is that there are people who have the
hardware, but because the driver won't even compile for them, they just go
"oh, well, I'll try it again when the _real_ 2.6.0 hits the streets".
Which obviously won't work.
So I'm trying to make sure that all the broken drivers are gotten to a
working state. Right now, considering how long they've been broken, that
means "it must compile" so that people can test them.
The "leave it broken, so that somebody will fix it properly some day"
approach is a fine one for early development series. But right now I'd
prefer to see patches to make drivers compile cleanly, even if people can't
test them on real hardware.
The intersection of people who have the hardware, and people who have the
time/knowledge to convert a driver, may be empty. Expecially for odd
hardware. So let's get those drivers compiling, even if we can't test them,
so that others _can_ test them.
7. New AEM (Asynchronous Event Mechanism) For Linux
20 Aug (1 post) Subject: "[ANNOUNCE] Supporting asynchronous events in Linux
with AEM"
People: Frederic Rossi
Frederic Rossi announced:
I'd like to announce the availability of AEM (async. event mech.). This
project is an attempt to provide a generic and native support for
asynchronous events in the Linux kernel.
See below for an overview of AEM. More information can be found here http:/
/aem.sourceforge.net
Your comments are valuable and I will be pleased to get any feedback from
you.
Overview
The primary objective of AEM is to provide a native kernel mechanism, which
doesn't make use of other techniques to support the semantic. The reason
behind this is to be able to handle a very huge number of events in a
scalable and responsive way.
Basically, AEM allows an application to register to system events by
supplying user-space event handlers during registration. When an event
occurs in the kernel the corresponding event handler is executed with the
data in parameter.
AEM is a communication mechanism more than a notification mechanism in the
sense the main goal is really to pass information quickly from the kernel
to the user space applications, both ways. This means the data can be
modified by event handlers and be re-interpreted when back into the kernel.
The second goal behind AEM is to provide the atomic execution of user space
handlers directly in reaction to events. Priorities can be associated with
events to give high priority events the possibility to boost their
corresponding processes. As opposed to other styles of event monitoring
mechanisms AEM is working bottom-up, i.e user processes are executed/
created by system events.
Generally, we assume that event handlers are short lived executing quickly
in the same execution context as the calling process. But if necessary an
event handler can also be executed inside a new process context permitting
its execution in parallel with the main thread of execution. In this case,
processes are created on the fly.
I'm taking special care to integrate AEM with existing mechanisms providing
similar, although different, functionalities. I want to stress the fact
that the goal of AEM is not to replace what already exist but to provide a
complementary support in Linux.
I'm conscious the current implementation is not perfect and a lot of work
is still to be done. Any suggestion for improvement is welcome.
Current status
Specific structures and activation points for events must be present in the
kernel. This is implemented by a patch supplying this basic infrastructure.
The whole implementation is provided by independent kernel modules. One
module supplies the core functionalities while the other modules supply
specific implementations of event handling mechanisms (fetching and
handling of data). Also, definitions of the calling APIs are implemented by
modules.
This architecture is very flexible. Different implementations can coexist
in the same time. This gives the possibility to stay compatible in case of
a change of API or semantics.
AEM is currently supported on Linux kernels 2.6.0-test1 and 2.4.20.
8. FUSD v1.10 Released
20 Aug - 21 Aug (2 posts) Subject: "[ANNOUNCE] FUSD v1.10 now available"
Topics: FS: devfs, Real-Time, SMP
People: Jeremy Elson
Jeremy Elson announced FUSD v1.10 (http://www.circlemud.org/~jelson/software/
fusd) :
We're happy to announce release 1.10 of FUSD, the Linux Framework for
User-Space Devices.
If you have a Linux 2.4 kernel running devfs, FUSD is a combination of
Linux kernel module and userspace library that lets you write userspace
programs that can act as character device drivers for files under /dev.
Your program reigsters the device with the kernel module; then, it proxies
system calls (e.g., open(), read()...) to your program. Your userspace
program can respond to these system calls as a kernel module would. Strict
error checking at the user/kernel boundary prevents such userspace drivers
from corrupting each other, the kernel, or even the processes using the
devices they manage.
v1.10 has a number of enhancements, including:
+ Now safe for SMP and preemptible kernels
+ Includes both C and Python bindings
+ /dev/fusd/status device shows a summary of devices registered and in
use
+ Updated documentation and various other bugfixes
Unfortunately, FUSD does NOT work under later 2.5 or any 2.6 kernels. The
recent changes to the devfs API break FUSD in a way that we haven't yet
looked into fixing.
We Hope You Enjoy Kernel Traffic
Kernel Traffic is hosted by the generous folks at Tux.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.