Patches look clean enough, apart from this: > +#define C(i) per_cpu(cpu_gdt_table, cpu)[GDT_ENTRY_TLS_MIN + i] = t->tls_array[i] > + C(0); C(1); C(2); > +#undef C which is foul ... but you moved it, not wrote it ;-) But ... not sure doing this bottom up is going to be the easiest way to do it? If we want to make clean abstractions, would seem easier to work downwards from what areas we need to change. Maybe that's just me. Is harder to understand the objective of what you're trying to do, going bottom up. On the upside, some of the changes actually make the code *more* readable by actually explaining what its doing with sensible function names. Some of the files Xen makes big enough changes to there seems no point doing anything but just giving them their own copy of the file. Some of them are just tiny tweaks. The ones that are more problematic are where they hack the hell out of half the functions, and leave the others untouched. Either you split the whole file in half, or ifdef out a bunch of stuff (either way makes a mess, esp when there's no clean logical split line) M. PS. Andrew, do you want to be CC'ed on this stuff, or you want us to piss off and work it out and send you the result? ;-)