From: "Jan Beulich" <JBeulich@novell.com>
To: "xen-devel@lists.xensource.com" <xen-devel@lists.xensource.com>
Subject: [PATCH 0/5] x86: properly propagate errors to hypercall callee
Date: Wed, 09 Mar 2011 10:53:22 +0000 [thread overview]
Message-ID: <4D776A320200007800035752@vpn.id2.novell.com> (raw)
Xen should not BUG() or crash when processing a hypercall and running
out of memory, but currently it does:
(XEN) Xen BUG at mm.c:83
(XEN) ----[ Xen-4.0.2_02-3.6 x86_64 debug=n Tainted: M ]----
(XEN) CPU: 0
(XEN) RIP: e008:[<ffff82c4801f0a1b>] alloc_xen_pagetable+0x8b/0xa0
(XEN) RFLAGS: 0000000000010246 CONTEXT: hypervisor
(XEN) rax: 0000000000000000 rbx: 0000000000000173 rcx: 0000000000000040
(XEN) rdx: 0000000000000040 rsi: 0000000000000000 rdi: ffff82c48022caa4
(XEN) rbp: ffff830193dd8000 rsp: ffff82c480477908 r8: 0000000000000001
(XEN) r9: 00ff00ff00ff00ff r10: 0f0f0f0f0f0f0f0f r11: 0000000000000000
(XEN) r12: 000ffffffffff000 r13: 0000000000193dd8 r14: ffff8300cbffb4f0
(XEN) r15: 0000000000000001 cr0: 000000008005003b cr4: 00000000000026f0
(XEN) cr3: 0000000024275000 cr2: ffff8800068a1d80
(XEN) ds: 0000 es: 0000 fs: 0000 gs: 0000 ss: 0000 cs: e008
(XEN) Xen stack trace from rsp=ffff82c480477908:
(XEN) 000ffffffffff000 ffff82c480161614 0000000000000010 ffff82c48015d631
(XEN) 000ffff830193dd8 ffff8300cba7d030 0000000100000000 0000000000000000
(XEN) 0000000000000000 0000000000000173 0000000000000173 00000000000001f3
(XEN) 0000000000000111 0000000000193dd8 0000000000000010 0000000000000000
(XEN) ffff82c5487d8000 ffff83022fd82000 ffff82f60327bb00 ffff82c480161e0c
(XEN) ffff83022fd82000 0000000000000001 0000000000193dd8 8010000193dd8077
(XEN) ffff83022fd82000 ffff82c480165bda ffff83019563f000 ffff82c480164b1f
(XEN) ffff83022fd82000 ffff8800507b7728 0000000000801077 0000000000000002
(XEN) ffff83022fd82000 ffff8300cbe8e000 0000000000000008 8010000193dd8077
(XEN) ffff8800068a1d80 ffff8300cbe8e000 0000000000000008 80100002268a1065
(XEN) 0000000000000000 ffff82c480165e06 0000000000000000 0000000000000000
(XEN) ffff83022fd82000 ffff83022fd82000 ffff8800068a1d80 0000000000000005
(XEN) 0000000000000000 ffff82c4801662a1 ffff82c480477e78 0000000000000000
(XEN) ffff82c480477e78 0000000000000089 0000000000000008 ffff82c480233540
(XEN) 0000000000000048 ffff82c480182d43 ffff83022fde0a70 ffff82f6032ad7a0
(XEN) 0000000000000048 0000000000000000 ffff8302000000d6 ffff82c480111007
(XEN) 0000000000000001 0000000000000008 ffff830100000010 000000d680477f28
(XEN) ffff82c480477b98 ffff82c480477ca8 00000008032ad7a0 ffff82c480477e20
(XEN) 0000000000000000 ffff8800068a1d80 00ff82c480121418 0000000100000008
(XEN) ffff82c480269203 0000000000000096 ffff83022fd82000 ffff82c480269200
(XEN) Xen call trace:
(XEN) [<ffff82c4801f0a1b>] alloc_xen_pagetable+0x8b/0xa0
(XEN) [<ffff82c480161614>] map_pages_to_xen+0x5e4/0xd10
(XEN) [<ffff82c48015d631>] do_IRQ+0x291/0x600
(XEN) [<ffff82c480161e0c>] update_xen_mappings+0xcc/0x170
(XEN) [<ffff82c480165bda>] get_page_from_l1e+0x3fa/0x520
(XEN) [<ffff82c480164b1f>] free_page_type+0x3af/0x690
(XEN) [<ffff82c480165e06>] ptwr_emulated_update+0x106/0x450
(XEN) [<ffff82c4801662a1>] ptwr_emulated_write+0x71/0xa0
(XEN) [<ffff82c480182d43>] x86_emulate+0x4773/0xff10
(XEN) [<ffff82c480111007>] do_xen_version+0x217/0x520
(XEN) [<ffff82c48015d631>] do_IRQ+0x291/0x600
(XEN) [<ffff82c4801716fc>] flush_area_mask+0x7c/0x130
(XEN) [<ffff82c4801524ec>] context_switch+0x18c/0xec0
(XEN) [<ffff82c480161fad>] get_page+0x2d/0x100
(XEN) [<ffff82c48015bae0>] set_eoi_ready+0x0/0x40
(XEN) [<ffff82c4801622eb>] ptwr_do_page_fault+0x1ab/0x200
(XEN) [<ffff82c48012169a>] timer_softirq_action+0x21a/0x360
(XEN) [<ffff82c48017d764>] do_page_fault+0x114/0x450
(XEN) [<ffff82c4801f0605>] handle_exception_saved+0x2d/0x6b
(XEN)
(XEN)
(XEN) ****************************************
(XEN) Panic on CPU 0:
(XEN) Xen BUG at mm.c:83
(XEN) ****************************************
This patch set makes it so that not only the offending BUG() gets
eliminated, but also properly propagates the error to the guest,
so that the latter can take action (which will itself require quite
some changes to prevent crashing the guest in that situation,
particularly where utilizing Xen's writeable page table support).
1: don't BUG() post-boot in alloc_xen_pagetable()
2: run-time callers of map_pages_to_xen() must check for errors
3: make get_page_from_l1e() return a proper error code
4: make mod_l1_entry() return a proper error code
5: make mod_l2_entry() return a proper error code
All but the last are clear candidates for backporting to 4.1 and 4.0,
albeit for the former perhaps only after 4.1.0.
Signed-off-by: Jan Beulich <jbeulich@novell.com>
next reply other threads:[~2011-03-09 10:53 UTC|newest]
Thread overview: 12+ messages / expand[flat|nested] mbox.gz Atom feed top
2011-03-09 10:53 Jan Beulich [this message]
2011-03-09 11:07 ` [PATCH 0/5] x86: properly propagate errors to hypercall callee Keir Fraser
2011-03-09 11:21 ` Jan Beulich
2011-03-09 13:44 ` Keir Fraser
2011-03-09 14:20 ` Jan Beulich
2011-03-09 15:10 ` Konrad Rzeszutek Wilk
2011-03-09 15:40 ` Jan Beulich
2011-03-11 9:25 ` Jan Beulich
2011-03-11 9:45 ` Keir Fraser
2011-03-11 10:44 ` Jan Beulich
2011-03-11 12:33 ` Keir Fraser
2011-03-15 12:29 ` Jan Beulich
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=4D776A320200007800035752@vpn.id2.novell.com \
--to=jbeulich@novell.com \
--cc=xen-devel@lists.xensource.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).