What's Happening?

Rusty's (new) GPG Key

Rusty is now working for IBM.

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.

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.

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

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...

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.

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.

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.

Then I can die a happy man.

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.

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.

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.

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...

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.

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.

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.

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.

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.

Re-tested (with Anton's help) the initdepends patch on 2.5.27, and sent it to Linus again.

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.

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.

Saturday July 13 2002

I have a rough kernel TODO list, pasted up on post-it notes near my desk. Should keep me focussed.

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/

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.

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:

  1. A module which only provides "int init(void)". If the init fails, the module memory is never released. This for backwards compatibility.
  2. A module which provides "int init(void)" and "void start(void)". The idea is that there are no external references after init: this requires that some other interfaces be split into two stages (reserve and use, rather than just register). If init() fails, then start() is not called and the module can be safely freed.
  3. A module which also provides "int cleanup()". This module can be replaced with another one, but the module memory is not freed. This is probably only available with a config option, for kernel hackers or people who are prepared to leak memory to upgrade without reboots (note: this is not a panacea, for example a filesystem module would require you to remount every filesystem to use the new one).
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.

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.

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.

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).

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).

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.

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.

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.

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.

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:

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>

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.

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.

I'm giving a guest lecture in networking at ANU this Friday: must prepare my talk for that sometime too.

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.

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.

Wednesday May 22 2002

Finally got my "minimal possible" RCU working, called "later", so there should be no stopping me tomorrow.

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)...

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.

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).

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.

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.

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.

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.

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...

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.

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.

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.

Tuesday May 14 2002

Consecutive days in my diary! First time since January...

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).

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.

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).

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.

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.

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.

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.

Wednesday April 3 2002

Linus is back, so I've sent the "set_bit takes a long" and "per-cpu" fixes.

On a personal note, yesterday was Alli's birthday, and I bought her a car: MX5-SP turbo. She had no idea...

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).

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...

Tuesday March 19 2002

Public holiday yesterday: Canberra Day. Go figure.

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.

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.

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.

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.

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).

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.

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.

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!).

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).

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.

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.

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.

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.

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.

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(.

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.

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%.


Rusty's 2001 Diary