I happened to be looking at this stretch of code and I have realized
that this is quite simply the wrong fix.
The problem is that it depends intimately on the details of
alloc_bootmem_pages_low. Essentially the problem is that when
we are setting up the identity mappings in paging_init we assume
the identity mappings already exist.
If there are holes in the memory map or someone changes the way
pages are returned from alloc_bootmem_pages_low() this code
will break again.