diff --git a/xen/arch/x86/domain.c b/xen/arch/x86/domain.c index 6b2e32d244..d5847f70f8 100644 --- a/xen/arch/x86/domain.c +++ b/xen/arch/x86/domain.c @@ -1704,11 +1704,8 @@ static void load_segments(struct vcpu *n) put_guest(uregs->fs, esp - 5) | put_guest(uregs->es, esp - 6) | put_guest(uregs->ds, esp - 7) ) - { - gprintk(XENLOG_ERR, - "error while creating compat failsafe callback frame\n"); - domain_crash(n->domain); - } + domain_crash(n->domain, + "Error creating compat failsafe callback frame\n"); if ( n->arch.pv.vgc_flags & VGCF_failsafe_disables_events ) vcpu_info(n, evtchn_upcall_mask) = 1; @@ -1743,11 +1740,8 @@ static void load_segments(struct vcpu *n) put_guest(uregs->ds, rsp - 9) | put_guest(regs->r11, rsp - 10) | put_guest(regs->rcx, rsp - 11) ) - { - gprintk(XENLOG_ERR, - "error while creating failsafe callback frame\n"); - domain_crash(n->domain); - } + domain_crash(n->domain, + "Error creating failsafe callback frame\n"); if ( n->arch.pv.vgc_flags & VGCF_failsafe_disables_events ) vcpu_info(n, evtchn_upcall_mask) = 1; diff --git a/xen/include/xen/sched.h b/xen/include/xen/sched.h index 12be794002..85242a73d3 100644 --- a/xen/include/xen/sched.h +++ b/xen/include/xen/sched.h @@ -766,10 +766,15 @@ void vcpu_end_shutdown_deferral(struct vcpu *v); * from any processor. */ void __domain_crash(struct domain *d); -#define domain_crash(d) do { \ - printk("domain_crash called from %s:%d\n", __FILE__, __LINE__); \ - __domain_crash(d); \ -} while (0) +#define domain_crash(d, ...) \ + do { \ + if ( count_args(__VA_ARGS__) == 0 ) \ + printk(XENLOG_ERR "domain_crash called from %s:%d\n", \ + __FILE__, __LINE__); \ + else \ + printk(XENLOG_ERR __VA_ARGS__); \ + __domain_crash(d); \ + } while ( 0 ) /* * Called from assembly code, with an optional address to help indicate why