xen/p2m: Reserve 8MB of _brk space for P2M leafs when populating back.
When we release pages back during bootup:
Freeing 9d-100 pfn range: 99 pages freed
Freeing 9cf36-9d0d2 pfn range: 412 pages freed
Freeing 9f6bd-9f6bf pfn range: 2 pages freed
Freeing 9f714-9f7bf pfn range: 171 pages freed
Freeing 9f7e0-9f7ff pfn range: 31 pages freed
Freeing 9f800-100000 pfn range: 395264 pages freed
Released 395979 pages of unused memory
We then try to populate those pages back. In the P2M tree however
the space for those leafs must be reserved - as such we use extend_brk.
We reserve 8MB of _brk space, which means we can fit over
1048576 PFNs - which is more than we should ever need.
Without this, on certain compilation of the kernel we would hit:
(XEN) domain_crash_sync called from entry.S
(XEN) CPU: 0
(XEN) RIP: e033:[<
ffffffff818aad3b>]
(XEN) RFLAGS:
0000000000000206 EM: 1 CONTEXT: pv guest
(XEN) rax:
ffffffff81a7c000 rbx:
000000000000003d rcx:
0000000000001000
(XEN) rdx:
ffffffff81a7b000 rsi:
0000000000001000 rdi:
0000000000001000
(XEN) rbp:
ffffffff81801cd8 rsp:
ffffffff81801c98 r8:
0000000000100000
(XEN) r9:
ffffffff81a7a000 r10:
0000000000000001 r11:
0000000000000003
(XEN) r12:
0000000000000004 r13:
0000000000000004 r14:
000000000000003d
(XEN) r15:
00000000000001e8 cr0:
000000008005003b cr4:
00000000000006f0
(XEN) cr3:
0000000125803000 cr2:
0000000000000000
(XEN) ds: 0000 es: 0000 fs: 0000 gs: 0000 ss: e02b cs: e033
(XEN) Guest stack trace from rsp=
ffffffff81801c98:
.. which is extend_brk hitting a BUG_ON.
Interestingly enough, most of the time we are not going to hit this
b/c the _brk space is quite large (v3.5):
ffffffff81a25000 B __brk_base
ffffffff81e43000 B __brk_limit
= ~4MB.
vs earlier kernels (with this back-ported), the space is smaller:
ffffffff81a25000 B __brk_base
ffffffff81a7b000 B __brk_limit
= 344 kBytes.
where we would certainly hit this and hit extend_brk.
Note that git commit
c3d93f880197953f86ab90d9da4744e926b38e33
(xen: populate correct number of pages when across mem boundary (v2))
exposed this bug).
[v1: Made it 8MB of _brk space instead of 4MB per Jan's suggestion]
CC: stable@vger.kernel.org #only for 3.5
Signed-off-by: Konrad Rzeszutek Wilk <konrad.wilk@oracle.com>