While it was me to add them, I'm afraid I don't see justification for
the assertions: A vCPU may very well have got preempted while in user
mode. Limit compat guest user mode stack dumps to the containing page
(like is done when using do_page_walk()), and suppress user mode stack
dumping altogether for 64-bit domains.
Fixes: cc0de53a903c ("x86: improve output resulting from sending '0' over serial")
Signed-off-by: Jan Beulich <jbeulich@suse.com>
Reviewed-by: Roger Pau Monné <roger.pau@citrix.com>
struct vcpu *vcpu;
unsigned long mfn;
- ASSERT(guest_kernel_mode(v, regs));
mfn = read_cr3() >> PAGE_SHIFT;
for_each_vcpu( v->domain, vcpu )
if ( pagetable_get_pfn(vcpu->arch.guest_table) == mfn )
}
mask = PAGE_SIZE;
}
+ else if ( !guest_kernel_mode(v, regs) )
+ mask = PAGE_SIZE;
}
for ( i = 0; i < debug_stack_lines * 8; i++ )
{
struct vcpu *vcpu;
- ASSERT(guest_kernel_mode(v, regs));
+ if ( !guest_kernel_mode(v, regs) )
+ {
+ printk("User mode stack\n");
+ return;
+ }
+
vcpu = maddr_get_owner(read_cr3()) == v->domain ? v : NULL;
if ( !vcpu )
{