Revert "mm: don't hold heap lock in alloc_heap_pages() longer than necessary"
authorAndrew Cooper <andrew.cooper3@citrix.com>
Wed, 30 Aug 2017 10:00:14 +0000 (11:00 +0100)
committerAndrew Cooper <andrew.cooper3@citrix.com>
Wed, 30 Aug 2017 10:00:30 +0000 (11:00 +0100)
commitae4541c81c7441277e29579579da1fcc007e675d
treec502bcc8a9e761fc3ea2bcf4bf6f05cd88fe607c
parentdab6a84aadab11f31332030a1e9f0b9282d76156
Revert "mm: don't hold heap lock in alloc_heap_pages() longer than necessary"

This reverts commit dab6a84aadab11f31332030a1e9f0b9282d76156.  The change is
not safe, and results in a crash such as:

(XEN) ----[ Xen-4.10-unstable  x86_64  debug=y   Tainted:    H ]----
(XEN) CPU:    5
(XEN) RIP:    e008:[<ffff82d0802252fc>] page_alloc.c#free_heap_pages+0x786/0x7a1
(XEN) RFLAGS: 0000000000010286   CONTEXT: hypervisor (d0v2)
(XEN) rax: 0000000000001c80   rbx: ffff82e01066bfa0   rcx: ffff82ffffffffe0
(XEN) rdx: ffff82ffffffffe0   rsi: ffff82d08056f600   rdi: 00000000ffffffff
(XEN) rbp: ffff83083751fda8   rsp: ffff83083751fd48   r8:  00000000000001c8
(XEN) r9:  0000000000000018   r10: 0000000000000018   r11: 0000000000000216
(XEN) r12: 0000000000000000   r13: 00000000000001b0   r14: 0000000000000000
(XEN) r15: 0000000000000000   cr0: 0000000080050033   cr4: 00000000001526e0
(XEN) cr3: 000000072f465000   cr2: ffff82ffffffffe4
(XEN) ds: 002b   es: 002b   fs: 0000   gs: 0000   ss: e010   cs: e008
(XEN) Xen code around <ffff82d0802252fc> (page_alloc.c#free_heap_pages+0x786/0x7a1):
(XEN)  24 89 01 e9 91 fd ff ff <89> 7a 04 8b 03 89 01 e9 4d ff ff ff 48 83 c4 38
(XEN) Xen stack trace from rsp=ffff83083751fd48:
(XEN)    0000000000000001 0000001800000001 0000000000000000 0000000000000018
(XEN)    ffff82e01066bf80 0000000000000000 ffff82e01066b920 0000000000000000
(XEN)    ffff82e01066bf80 0000000000000000 ffff83082b781000 ffff880087e4eca8
(XEN)    ffff83083751fdf8 ffff82d080226785 ffff82d08023afa5 0000000000000203
(XEN)    ffff83082b781000 ffff83082b781340 ffff83082b7814d8 ffff83082b781aa8
(XEN)    ffff83082b781000 ffff880087e4eca8 ffff83083751fe18 ffff82d0802f1e44
(XEN)    ffff83082b781000 ffff83082b781000 ffff83083751fe48 ffff82d0802e0fd5
(XEN)    ffff83082b781000 00000000ffffffff ffff83082b781aa8 ffff83082b781000
(XEN)    ffff83083751fe68 ffff82d080271bc8 ffff83082b781aa8 ffff8300abe45000
(XEN)    ffff83083751fe98 ffff82d080207d74 ffff830837516040 0000000000000000
(XEN)    0000000000000000 ffff83083751ffff ffff83083751fec8 ffff82d080229a3c
(XEN)    ffff82d080572d80 ffff82d080573000 ffff82d080572d80 ffffffffffffffff
(XEN)    ffff83083751fef8 ffff82d08023a68a ffff8300abfa6000 0000000af2019e42
(XEN)    0000000000000000 ffff880087e4ec68 ffff83083751ff08 ffff82d08023a6df
(XEN)    00007cf7c8ae00c7 ffff82d08035f391 ffff880087e4eca8 ffff880087e4ec68
(XEN)    0000000000000000 0000000af2019e42 ffff880087e43d70 0000000000000002
(XEN)    0000000000000216 0000000000000004 0000000000000000 00000000000000b6
(XEN)    0000000000000000 ffffffff8100130a deadbeefdeadf00d deadbeefdeadf00d
(XEN)    deadbeefdeadf00d 0000010000000000 ffffffff8100130a 000000000000e033
(XEN)    0000000000000216 ffff880087e43d38 000000000000e02b c2c2c2c2c2c2beef
(XEN) Xen call trace:
(XEN)    [<ffff82d0802252fc>] page_alloc.c#free_heap_pages+0x786/0x7a1
(XEN)    [<ffff82d080226785>] free_domheap_pages+0x312/0x37c
(XEN)    [<ffff82d0802f1e44>] stdvga_deinit+0x30/0x46
(XEN)    [<ffff82d0802e0fd5>] hvm_domain_destroy+0x60/0x116
(XEN)    [<ffff82d080271bc8>] arch_domain_destroy+0x1a/0x8f
(XEN)    [<ffff82d080207d74>] domain.c#complete_domain_destroy+0x6f/0x182
(XEN)    [<ffff82d080229a3c>] rcupdate.c#rcu_process_callbacks+0x141/0x1a2
(XEN)    [<ffff82d08023a68a>] softirq.c#__do_softirq+0x7f/0x8a
(XEN)    [<ffff82d08023a6df>] do_softirq+0x13/0x15
(XEN)    [<ffff82d08035f391>] x86_64/entry.S#process_softirqs+0x21/0x30
(XEN)
(XEN) Pagetable walk from ffff82ffffffffe4:
(XEN)  L4[0x105] = 00000000abe5b063 ffffffffffffffff
(XEN)  L3[0x1ff] = 0000000000000000 ffffffffffffffff
(XEN)
(XEN) ****************************************
(XEN) Panic on CPU 5:
(XEN) FATAL PAGE FAULT
(XEN) [error_code=0002]
(XEN) Faulting linear address: ffff82ffffffffe4
(XEN) ****************************************
(XEN)
(XEN) Reboot in five seconds...

Signed-off-by: Andrew Cooper <andrew.cooper3@citrix.com>
xen/common/page_alloc.c