Rusty is now working for IBM.
Coming back to find Linus had truncated the freeze was a bit of a
disappointment. I had email from Ingo *just* before I left about the
futex issues, which he has handled very well. I have CPU hotplug and
the module rewrite ready to merge, but it's hard with all the flurry
of patches.
So I started a 2.6 todo list: at
the same time Rob Landley started one, so we have two "pending to be
merged" lists. I bet Linus never reads either of them.
More silly debate on Linux kernel, re: strlen optimization.
Clearly some people have too much time on their hands.
Ingo produced a shared runqueue hyperthread patch, which was on my
TODO list (I had an earlier implementation). Same idea, his
implementation differed a little. It's weird: I'm glad it's been done
(and knowing Ingo, done properly), but I'm disappointed that I didn't
get to do it, since it's an interesting hack.
Oh well...
Also sorted out the rustcorp.com.au nameservice, which was broken
by samba.org moving to Datapipe, and since one of my nameservers had
long ago vanished (the old linuxcare.com.au), it bit me harder than
normal. Harald warned me about that ages ago.
Wrote a script to create the trivial patch
monkey homepage. Retransmitting a lot of patches to Linus, in the
hope of reducing my patch list: it's tempting to try sending them as
1/17 etc. Works for some.
Then I can die a happy man.
The patch currently depends on the removal of the assumption that
NR_CPUS < BITS_PER_LONG, so I sent that patch out and got good
feedback from Dave. I hope Linus takes it or says "no way" sometime
soon, because it's a PITA to have 4 levels of patches above it, even
with my patch scripts.
Still, the discipline of keeping the patches separate is definitely
a good thing, as far as keeping implementation ideas apart goes.
Basically I use patches the way real version control systems use
branches, and it works fairly well.
In summary, migration threads are probably still the simplest
solution.
Was also distracted by retransmitting the kprobes patch, which got
feedback from Linus and DaveM. I had to touch x86 assembler, ewww...
Now, there's lots of arch-specific followup, and the "before or
after SMP" brings out the initcall stuff: I think a combination of
Roman's work and my explicit initcalls should make something really
nice and workable.
I find it stressful to have so many outstanding things, so I've
been almost begging Linus to take something from me. The biggest is
the hotplug CPU boot code, but there are lots of little ones too.
The good thing is that everyone's being really great with accepting
and forwarding the designated initializer patches. They're creeping
in.
Re-tested (with Anton's help) the initdepends patch on 2.5.27, and
sent it to Linus again.
Back on netfilter for a little bit, helping focus things for the
upcoming kernel freeze, as well as various other projects. Designated
initializer support patches took some time, too, but we don't want to
be flooded by warnings halfway through the 2.6 series when a new gcc
gets released.
On Friday I finally got back to updating and testing my module
patches on x86. There's a wierd bug with symbol names, and I'm still
looking at that: should find it this week.
I toyed with non-recursive Makefiles for the kernel. The problem
is that it is hard to make them cooexist with non-recursive ones,
since there is so much crap in Rules.make to handle the existing ones.
This means it would have to be completed in one fell swoop, and the
current Makefiles work "well enough" as it is.
Module debates continue/
The second was what I consider the Big Module Question: is module
unloading worth the complexity? The same arguments against pagable
kernel text (or, if you want to be inflammatory, microkernels) apply
against modules. Getting rid of modules altogether is too much pain:
while we could statically link a kernel at boot, the ability to add
support for a new device without rebooting or running a 10MB kernel is
still worthwhile.
However, separating this from the problem of module removal makes
sense: we pay in complexity and performance for the refcounting system
we use to ensure that code doesn't get removed while running. There
was a general consensus (it seemed to me) that we didn't want to add a
struct module * to every registration interface. Hence I'm planning
on allowing three different module types:
Peter Moulder sent a cleanup patch for the build-initcalls shell
script, which is great (hey, at least I got *some* response). Hacked
up a quick patch for checking that the types to put_user and get_user
are the same, but didn't have much time to test it as I'm sitting in
the LAX lounge.
I also tested the non-linear CPUs patch against 2.5.21 and
submitted it to Linus. It's a trivial update for most archs, and
Andrew Morton already submitted a "make NR_CPUS a config option"
patch which overcomes some of the "bloat" complaint.
Got a spelling correction patch for
lkpatch from Brad Hards, who has also been piping small fixes to
trivial.
Interestingly, Alan has said he's not interested in spelling fixes
for 2.2 unless they're part of another patch (which pretty much
eliminates the trivial patch collection from consideration).
Creating a file handle is decidedly non-trivial though: a struct
file needs a dentry, and a dentry needs an inode, and an inode needs a
superblock and a superblock needs a filesystem, ie. you end up
implemented "futexfs". I know Viro is brighter than I am, but he
doesn't design simple interaces.
Speaking of simple interfaces, I took half a day out and wrote
wrappers for explicit initcall dependencies which keep biting us. To
get the data in the section in order I used a structure: this is a
trick I learnt trying to work out a nice event loggin intercace.
The result is a new version of lkpatch, at least. I've dropped the "try to fix up" code: this should be done by post-processing the .rej files.
Trivial saw things pick up a little, too, due to the announcement
on lkml.
Paulus and Anton pointed out that Linus pulled a patch into his
tree which misspelled my name. Anton is in Sydney at the moment, so
he sent a patch to trivial:
Speaking of the trivial patch collection: I noticed we'd passed 100
patches included in the kernel (not counting those already included by
the time I processed them), and decided to send a centenary note by
way of shameless promotion. The trivial patches are a good way for
people to enter the kernel world, and are a nice adjunct to the kernel
janitor project which is IMHO critical. The copy_from_user audit
recently showed just how much code is cut & paste: basically every
architecture and every driver, and thats a huge amount of code.
I'm giving a guest lecture in networking at ANU this Friday: must
prepare my talk for that sometime too.
More work on fastps: more tedious than strenuous, but it'll give us
a basis for deciding whether our ps really does suck.
I hope the copy_from_user thing has died down now.
I've also started hacking up a "fast" ps in my spare time: you know
how everyone complains that ps (and top: one thing at a time) steals
so much CPU time? I'm doing a classic "read from /dev/kmem" for
comparison, so we can finally have something to argue about. Aiming
for SuSv2 compliance as well (thanks Chris!).
Kimio spotted a bug in the hotplug CPU stuff, which I fixed on my
page. He's going to be at OLS, which is great: I'll get to finally
meet him.
Alli and I took soup, bread and some biscuits to Anton, as he was
working late and unlikely to worry about details like feeding himself
(or sleeping for that matter)...
On a happier note, Kimio Suganama sent the ia64 hotplug CPU prep
components, and I put them up on my page. I hope to get back to real
hotplug work, but I need to play with some architecture's boot code
(my experiments with the x86 boot code were less than spectacular):
PPC32 is a good bet, since I can always ask Paulus any hard questions
I have.
Fed futex update and tasklet per-cpu cleanup to Linus. Again.
Seems to be a bit hit and miss at the moment. Sometimes being a Linux
kernel coder is a bit like being a Dragon master in Earthsea: if the
dragon is more likely to talk to you than eat you, then you're a
dragon master. In this case, it means that Linus reponds to more
EMails than not 8).
Meanwhile, talked with Andrew Morton about the possibility of a
CONFIG_SMALL_SYSTEM (or set of config options) for embedded or really
tiny machines. I want to see what the effect of reducing the list.h
macros to a single linked list is, and there are other common hacks
for reducing kernel size which could be included as standard options
in the mainstream kernel.
Of course, Linus is away for a couple of days, but if I can get
consensus that this must change, it should only take a few months to
get Linus to accept the patch 8).
Stephen notices that ccache
only got 1 hit when he compiled an identical kernel. The reason: the
absolute path name is encoded in the BUG() macro, which occurs in many
headers. My patch to fix this is unlikely to go in: Linus said he
wants a BUG macro which takes a string arg, and so I'll probably do
that instead.
Working on my minimal synchronize_kernel patch: I figured out why
the count of how many things are running or preempted was wrong (the
first idle task doesn't get created normally, but the ones for other
CPUs do get created by do_fork(). Now I just need to
think harder to fix the oops when I actually try to synchronize. I
get to sleep in tomorrow, as there is no 8am conference call, so my
mind should be clearer.
Had a nice night tonight: Alli is away so I made an Indian curry
and invited a few people around. I'm also enjoying driving Max (her
car), even though it's not exactly convertible weather at the moment.
My next step was to dust off the kernel patch, but I hit a wall
with the implementation of synchronize_kernel(), which was broken by
preempt. Dipankar has a new test implementation of RCU which handles
this, but I want the minimal possible solution to get past Linus: I
can replace with RCU later. To that end I got distracted on
implementing synchronize_kernel, but decided to stop at 11pm, as
there's an 8am conference call I want to attend tomorrow.
Resent the futex update, and tasklet per-cpu change to Linus. I'm
going to have to step up retransmission: they're piling up, and I have
more I want to do (such as update and send the common exception table
code). Waiting to see what is in the next Linus kernel.
More IA64 work: turns out not to have a TOC, but it does need some
screwed up relocations. I actually put "/* I'm not making this up */"
above R_IA64_LTOFF22 (the imm22 form 1 relocation is really fucked
up).
Linus spat out one of my bogus patches: redid it and sent it again.
Hope he applies this, so I can resend the rest and get on with the
rest of the hotplug CPU code.
Finally got to looking at the ia64 module relocations. Looks like
I was right to do the PPC64 code first, as it's got very similar
elements: a Procedure Linkage Table, a TOC, a Global Offset Table,
double entries for functions, etc. It's got some new twists though: 3
41-bit instructions?
Keith pointed out the problem with discarding init sections of
modules: you need to edit the exception table to take the entries from
the init sections out. I should rip these routines out into common
code (yeah yeah, after this).
Other things on my plate are Hotplug CPU: since Linus wanted the
CPUs plugged in on boot, which is cute but x86 still doesn't always
work correctly. This is probably because of my complete lack of
understanding on x86 APIC & booting issues: I've got Anton doing
the PPC64 version so I can tell that the core code is OK, and I've
sent some of the groundwork patches to Linus.
Also got back to the in-kernel module linker: PPC64 support is now
done. That's Sparc64, PPC, i386 and PPC64. I have access to an IA-64
box, so I will be working on IA64 now (it's the hardest: PPC64 was the
hardest one I'd done so far). I ended up cheating on the PPC64 and
not separating the init and core sections of the module. It can be
done (I think), but it's tricky.
Am spending a couple of days in Langrish House, near Richard
Moore's home, to discuss the RAS stuff (Reliability and
Serviceability). Can't get my modem to work through the hotel
switchboard, but there's a big IBM facility at Hursely Park which I
can use if I get desperate.
On a personal note, yesterday was Alli's birthday, and I bought her
a car: MX5-SP turbo. She had no idea...
Reworked hotplug CPU doesn't boot again. More work and debugging
required to figure out what's happening there.
OLS paper with Hubertus Franke and Matthew Kirkwood was accepted,
so I know where I'll be at the end of June. Speaking of which, I'm at
Dublin Linuxworld on 10th April, which is coming up fast...
Futex debate goes on: how to make them useful for pthreads. I
refuse to implement features just because they might
be useful, in case we find that they're not sufficient and some
pthreads-only feature never gets used anyway.
So I'm trying to implement a minimal pthreads library to check we
have everything we need: I'm not smart enough to do it any other way.
Trivial patch set going well: Marcelo took almost all of them, and
Linus took one of them (oddly, the one that Marcelo didn't take).
Have retransmitted to Linus.
Anton pointed out Andrew Morton's compliment in his kernel-trap
interview: Andrew is truly one of the gentlemen in the Linux Kernel
circle. One of those (unfortunately rare) coders who doesn't feel the
need to rub your face in the fact that he's smarter then you are.
Luckily, I am clever enough to have figured that out some time back
8).
Ben LaHaise introduced the idea of exporting wait queues to
userspace: as a more flexible option than just exporting semaphores.
I especially like his idea of tying the waitqueue to the physical
address of the page (which would have to be pinned so that the
physical address doesn't change) makes sense: a logical extension of
the hashed waitqueues William Irwin has been playing with.
Unfortunately, it is not possible to export waitqueues, because of
the race conditions (you need to add to wait queue, check condition,
then sleep). This is about the third "good idea" which proved
unimplementable.
With his help, much more progress on the IDE part of the oopser:
after some head-scratching, I think I have it now. Will test tomorrow
on the scratch Intel box "mingo" (yes, it's a homage).
Unfortunately, I know nothing about IDE: the actual oopser is easy.
Writing an IDE driver which can dump 8 consecutive sectors to a fixed
location disk requires me to learn about IDE, and I've seen what that
does to people 8)
6am conference call this morning. Could be worse.
Playing more with Ingo's sched changes. Have a version which uses
weights instead of just runqueue lengths: I'll have to test that and
see if it gets the "two low-priority tasks and one high-priority task
on two CPUs" case correct.
I've asked Hugh for an Intel SMP machine for Virtual Anton. It's
sometimes a pain working on bleeding-edge kernels which don't compile
on PPC.
ipfwadm-wrapper bug report today. Might be time for a new release.
And I think I've finally nailed the 2.4 redir compat problem (patch in
testing). The reports of conntrack double-deletions I'm trying to
correlate with compiler version, as I'm out of good ideas 8(.
Buying a townhouse has meant that I've been less productive than
normal... Hopefully after we move next week, I'll be back to 100%.
Tuesday October 29 2002
So much has happened. The wedding was great, reception was nice and
casual, and although I missed several people who couldn't make it, it
was great to have everyone there who was. Honeymoon was great too:
Fiji, sun, sand, swimming.
Monday September 23 2002
5 days to wedding. Module code in good shape: implemented modversions
(ick!) and EXPORT_SYMBOL_GPL/MODULE_LICENSE() today. Testing
tomorrow.
Wednesday September 4 2002
More little cleanups: have hotplug CPUs almost working in x86 (well,
they don't actually shutdown the CPUs, but it's more to test the
generic code).
Sunday September 1 2002
While Alli slept in, I read through Ingo's HT scheduler patch: I
thought my implementation was nicer (although less refined than his:
he looks for hyperthread CPUs when waking up, and has the migration
thread do some extra balancing). In particular, the separation of the
CPU-specific info and the runqueue-specific info was nicer in my
implementation, so I redid it on top of his and posted it. Hope he
likes it: Ingo's taste is usually really good (except for his liking
of typedefs, of course).
Thursday August 29 2002
Tuesday August 27 2002
Eventlogging patches debate continues, and I ceded my crown as Evil
Macro King to Werner Almesberger.
Tuesday August 20 2002
Got my copy of the netfilter core team key sorted out (should have
done that ages ago, but y'know). Looks like we might have someone to
test conntrack optimization patches against.
Wednesday August 14 2002
Linus finally took the DECLARE_PERCPU patch, good. Now if only I
could get him to take the generic CPU masks patch I'd be able to
finish hotplug CPU and concentrate on modutils and parameters.
Friday August 9 2002
Finally got the generic hot-unplug architecture back together and
booting on x86. Next week is going to be reconstructing the
arch-specific code: I have ppc32 and ia64 code, but I'll leave the
ia64 in Kimio's capable hands and update ppc32 and then tackle ppc64.
Tuesday August 6 2002
Spent most of yesterday playing with trying to get rid of the
migration threads by adding a "should I be running on this CPU?" check
to schedule(). Of course, it's not actually that easy: you can remove
yourself from this runqueue, but a wakeup() coming in might add you
back at some stage. If you actually change the current->cpu setting,
then it's even worse since you might start running on a *different*
cpu before you've scheduled off this one (*boom*). You could set
yourself to a priority below the idle task to avoid that, but then
someone has to restore it for you, and you're back to a worker-thread
scenario, or another check in the exit path of the scheduler.
Tuesday July 30 2002
Hotplug CPU boot changes went in on the weekend, followed by Linus
changing the initcalls to be done after CPUs went online (I argued
with him, but he thought it was the right call). Thinking about
drivers, it probably is, but for the core code it's just a PITA, and
it broke ksoftirq and the migration threads.
Thursday July 25 2002
Released module loader code, finally. Just a matter of fixing
/proc/modules and splitting the patch. Also did a new per-cpu patch
(thanks to James Lokier, who noted that DECLARE_PER_CPU(int x[4])
didn't work), and a new eventlogging patch.
Monday July 22 2002
Got the module loader code working again: I'll bundle up the new
minimal utils and release it. I have to check the PPC version and the
Sparc64 version, and add the ia64 and ppc64 versions in.
Sunday July 21 2002
Worked on the automagic initcall ordering, based on link dependencies,
and discovered too many loops to be easily useful, so I'll be pushing
my previous initialization ordering solution.
Saturday July 13 2002
I have a rough kernel TODO list, pasted up on post-it notes near my
desk. Should keep me focussed.
Thursday July 4 2002
Last week was the Linux Kernel Summit and OLS. For me, the Kernel
Summit was remarkably productive: the only sour note was the absence
of Al Viro (visa problems) and David Miller (don't know why). The two
main issues which I was worried about were the naming stuff and the
future of modules. On the naming issue, it looks like Patrick Mochel
was given carte blanche to take over all the sysctl-style interfaces
in the kernel with (the increasingly mis-named) driverfs. This gives
clear direction for my PARAM() macros when I resurrect them.
We'll see how this turns out.
Thursday June 21 2002
This week spent in Austin, Texas. I can't really tell you what it's
like, except warm, since we haven't been out much. Linus took some
hotplug CPU, didn't take others, took the futex work. A new record:
65 trivial patches in one kernel release with 2.5.24!
Saturday June 15 2002
Travelling travelling travelling... I'm in Austin, TX this week, the
kernel summit and OLS next week.
Tuesday June 11 2002
So, I finished and tested the futex async rewrite, backported to
2.4.18 for the NGPT guys (and noticed that I'd previously screwed up
and made the syscall 239 on x86 in my old 2.4.18 patch rather than
240), sent updates to everyone, and released a
new futex library.
Friday June 7 2002
More futex work. Pushed some to Linux, but my disquiet with the async
futex stuff was wellfounded it seems ("What madness is this?... a
black star for being stupid." said Linus).
Thursday May 30 2002
Spent basically a whole day cleaning up my scripts, which encountered problems
with the 10-deep nesting of my hotplug CPU patches.
Wednesday May 29 2002
Booting on PPC, and can also bring CPUs up and down. But the way I
did this gave me an idea to split the patch along new lines: a patch
to change the boot process, and another to support unplugging of CPUS.
That makes it easier for Linus and everyone else to follow, as well as
making it easier for me to track kernel changes. I'll mix in the
"later" stuff next, and then give it a good thrashing.
Date: Wed, 29 May 2002 15:16:37 +1000
From: Anton Blanchard <anton@samba.org>
To: trivial@rustcorp.com.au
Subject: Critical Patch
Message-ID: <20020529051637.GA28409@krispykreme>
Please forward this critical patch. Im no kernel hacker but I think
it could cause severe scheduler problems.
--- linux-2.5/kernel/sched.c~ Wed May 29 15:12:54 2002
+++ linux-2.5/kernel/sched.c Wed May 29 15:12:57 2002
@@ -13,7 +13,7 @@
* hybrid priority-list and round-robin design with
* an array-switch method of distributing timeslices
* and per-CPU runqueues. Additional code by Davide
- * Libenzi, Robert Love, and Rusty Russel.
+ * Libenzi, Robert Love, and Rusty Russell.
*/
#include <linux/mm.h>
Tuesday May 28 2002
Woohoo! Got non-linear CPUS working on PPC (32-bit), and rewrote the
boot code for the one-cpu-at-a-time approach. Something breaks
bringing up the second CPU (looks like the ksoftirqd thread doesn't
start properly, and the box freezes waiting). But at least I have
someone on tap who understands the boot sequence (unlike x86). Of
course, once I get this working, then I have to get back to making it
work on the x86, because Linus is v. unlikely to accept a patch which
breaks his machine. But thanks to Kimio we'll have ia64 supported as
well.
Friday May 24 2002
Slowed down by various side projects: Kimio wrote a version of
"move_all_tasks" which doesn't have the bugs mine does, so I'm testing
them on x86 to track down what I did wrong.
Wednesday May 22 2002
Finally got my "minimal possible" RCU working, called "later", so
there should be no stopping me tomorrow.
Tuesday May 21 2002
Off copy_to/from_user, onto new things today. I sent a final note to
Linus, and an apology to Alan, and I'll let it rest there: it comes
down to how important you think simple interfaces is, and noone else
seems to think this is important.
Monday May 20 2002
copy_from_user et. al flamewar grew, as Linus returned. I think I
almost had Dave and Alan convinced, but Linus believes that returning
partial reads is important. I think that if 8% of competent coders
make the same mistake, the problem is important enough to fix, even if
undocumented behaviour suffers: but if Linus were a God, then the rest
of us would be bored. Still, it's frustrating not to be able to get
my point across: good interfaces are what I love about the kernel, but
it's harder to fix long-standing warts than to prevent new ones.
Friday May 17 2002
I think I let the "set_bit takes a long" success go to my head. I
have not attacked the other trivial cause of newbie kernel bugs:
copy_from_user and copy_to_user return the number of bytes *not*
copied (ie. 0 on success), but most people expect them to return
-EFAULT on failure. Of the 5500 calls in the 2.5.15 kernel, only 52
actually use the return value for something other than "zero or
non-zero", and as far as I can tell, only the mount option code
actually cares. Meanwhile I found some 400-odd incorrect uses.
Thursday May 16 2002
Ported the (2.4) TUX patch to 2.5.15: it was pretty easy. Of course,
Anton will tell me tomorrow if it actually runs...
Wednesday May 15 2002
Got IA64 working! Thanks for the tips from David Mosberger-Tang
(whose Linux kernel ia64 book I'm told is really good: I must buy a
copy now) on the relocations.
Tuesday May 14 2002
Consecutive days in my diary! First time since January...
Monday May 13 2002
Drove to Melbourne for Russell Coker's (aka "Babycakes") wedding to
Faye. Not much time spent visiting friends, since it was basically in
and out.
Thursday May 9 2002
Too long between updates. Have been working on more futex work: the
async interface in particular. I remember telling Andi Kleen that I
wanted to rework the SIGIO handling for Linux years ago, and him
encouraging me: it still hasn't been done, and it still needs it.
Tuesday April 16 2002
Back home in Canberra: didn't make it into work today.
Thursday April 11 2002
Had a great time in Dublin: was very disappointed that the conference
was really badly organized. In the end, Dave Jones, David Woodhouse,
Russell King and I could have just visited Alan and Telsa's house in
Swansea for a couple of days to similar effect: I discussed some cool
things with Alan, and adopted a new project from David Woodhouse's
todo list. Alan and Telsa will be coming to Perth for
LCA 2003, too.
Wednesday April 3 2002
Linus is back, so I've sent the "set_bit takes a long" and "per-cpu"
fixes.
Friday March 22 2002
OK. Per-cpu data debate kind-of resolved: the x86-64 port will
require compiler extensions to use the segment register for per-cpu
areas. I couldn't come at the "set_per_cpu/get_per_cpu" approach
which would otherwise be required: they'll have to use the generic
per-cpu code. Which doesn't return an lvalue on SMP at the moment
anyway, so is broken (but Linus is away, so it'll stay broken until he
gets back).
Tuesday March 19 2002
Public holiday yesterday: Canberra Day. Go figure.
Saturday March 2 2002
Slow week: had to go to Adelaide with Alli on Wednesday, so I'm away
from my dual x86 box. Still, got a release of the fast userspace
semaphores done: must concentrate on hotplug CPU once I get back.
Saturday February 23 2002
Hot plug cpu support was being a PITA this week, so I worked on fast
userspace semaphores instead. Ben LaHaise's "export waitqueues to
userspace" suggestion has come to fruition in my post to linux-kernel:
I just have to figure out why the wallclock time for tdbtorture is the
same with /dev/usem as it was for normal (fcntl) locks, even though
the sum of system and user time was less. Still, not having to tell
kernelspace about the semaphores until you actually want to
sleep/wakeup on them is a really nice simplification.
Sunday February 17 2002
Working on hotplug CPUs: the RCU approach is destroyed by the
preemption patch, so I have a new implementation of "sync_kernel()".
I've been trying several approaches to get the dual x86 box here to
actually take a CPU right down (ie. spinning "hlt" with interrupts
off) but it's unreliable. And bringing it back never works: I might
have to return to the "am I dead?" check in the idle loop, pending
someone who actually knows about APICs et. al.
Tuesday February 12 2002
linux.conf.au last week; all the
usual faces and some new ones: met Ben LaHaise, David Woodhouse and
Bdale Garbee. The main projects I left with were to resurrect the
rsync --fuzzy patch, and the fast userspace semaphores.
Thursday January 31 2002
Strange how things work. Paulus followed an old URL I posted to
linux-kernel, and noticed that my diary was out of date. Fixed by
forcing a proxy reload, but when reading the last one, it turns out he
knows something about IDE (and has a copy of an old draft spec!).
Monday January 28 2002
Public holiday here today. Went out and bought Linux Device Drivers
2nd edition, to get ideas for my kernel hacking tutorial at
linux.conf.au: I don't just want to talk about the things I know.
Saturday January 26 2002
Spent some time conversing with Andrew Morton and Keith Owens on an
oops dumper. I want something that dumps a symbolic oops to an IDE
disk, he wants something that dumps an oops to NVRAM for their
embedded product. The problem is that my solution requires the kernel
memory for the symbols: about 180k worth. With some tricks and
Huffman encoding, I've got it under 80k, and the in-kernel routines
are less than 1 K.
Friday January 25 2002
Frustrating week. Couldn't get "ego" to boot without Anton's magic.
Got an x86 SMP box, and my scheduler changes seem to break it a
little. I'll have to back them out gradually and see what the problem
is. There's also the minor problem that figuring out the optimal fill
of tasks is the classic Knapsack problem, and what weights we give the
different nice levels is fairly arbitrary (do two nice processes equal
one "-19" niced process? Do ten?).
Wednesday January 16 2002
ipchains compat layer redirect fix. Reviewed the code yesterday and
found six separate bugs. How embarrassing.
Tuesday January 15 2002
Forgot to mention that my diary moved. It no longer belongs on the
netfilter site, since very few of my updates are netfilter-related,
and so much netfilter work is being done by Harald and the rest of the
core team.
Monday January 14 2002
Finished first cut of hyperthreading scheduler mod: I'm waiting for
Ingo to sync his scheduler changes to Linus, so I can redo my
patch
page just once, rather than twice a week.
Friday January 11 2002
New Ingo scheduler in 2.5.2-pre10. Working on putting back the
Hyperthreading stuff (doing it the proper way this time) has meant
I've been sending Ingo a few cleanups as I was through.