Maybe not so crappy, because even for i386 code, you might use not a strict
vmalloc() implementation but at least reserving percpu space inside the
vmalloc range. (ie not use a dedicated area as your current patchset does)
This is because NR_CPUS is defaulted to 32 on i386 (with a limit of 256), so
reserving 256*256KB = 64 MB of virtual space might be too much. (this is half
the typical vmalloc area)
The idea would be :
- Reserving an area of NR_CPUS*256KB inside vmalloc() space (but of course not
allocating pages)
- Then for each non possible cpu, 'release' its 256KB area and give it back to
vmalloc free areas pool.
Once you add in mm/vmalloc.c all needed helpers, no need to use BSS Megablob
anymore ?
-