page 0 -------> used by the Ethernet driver
page 1 -------> free
page 2 -------> free
page 3 -------> used by the SCSI driver
page 4 -------> free
can't be used either. Neither can page three of
page 0 -------> used by
page 1 -------> a big
page 2 -------> network buffer
page 3 -------> would be free if kmalloc didn't use power-of-two
page 4 -------> free
So the new system instantly allows you to allocate a lot more pages. That
might be enough, statistically, if you always reserve a certain percentage
of pages for GPF_ATOMIC (or was that GFP_ATOMIC?) allocations.
An interrupt-safe vmalloc wouldn't exactly be a bad idea either, of course.
Idea: Collect a few of the reserved pages into a reserved memory map,
allocate bigger chunks from the front of the map, and create a kernel
daemon to auto-enlarge the thing if it gets too small, and to really free
the chunks which were only marked free by vfree() because it got called
from an interrupt.
Shouldn't be _too_ difficult.
-- Enough research will tend to confirm your conclusions.-- Matthias Urlichs \ noris network GmbH / Xlink-POP Nürnberg Schleiermacherstraße 12 \ Linux+Internet / EMail: urlichs@noris.de 90491 Nürnberg (Germany) \ Consulting+Programming+Networking+etc'ing PGP: 1024/4F578875 1B 89 E2 1C 43 EA 80 44 15 D2 29 CF C6 C7 E0 DE Click <A HREF="http://info.noris.de/~smurf/finger">here</A>. 42