[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-users] Debugging DomU
(Reinstating the list, please keep cc's) On Tue, 2015-05-05 at 21:57 +0000, Chris Brand wrote: > Hi Ian, > > Thanks for the help! > > I think that you're right about a very early abort. > > I've been trying to do what you suggested. The problem is that > tools/libxc is part of libxenguest, but most (all ?) those functions > that your ma_zero_hack() calls are in Xen proper. I guess that there's > a quite a lot of difference between the way Dom0 is brought and up and > the way DomU is. I'm going to keep plugging away at it, but thought it > was worth mentioning just in case you have one of those "oh, that's > easy. All you need to do is..." reactions :-) ma_zero_hack was more for a vague reference than anything. alloc_magic_pages is an OK reference for this from the domain builder side. From that the userspace equivalent of p2m_populate_ram is xc_domain_populate_physmap_exact and the call to xc_clear_domain_page encapsulates the equivalents of gvirt_to_maddr and (un)map_domain_page, which is essentially xc_map_foreign_range+munmap+xc_domain_cacheflush, but you don't want that memset as is of course. Ian. > > Thanks again for the help so far, > > Chris > > -----Original Message----- > From: Ian Campbell [mailto:ian.campbell@xxxxxxxxxx] > Sent: Saturday, 02 May, 2015 2:00 AM > To: Chris Brand > Cc: xen-users@xxxxxxxxxxxxx > Subject: Re: [Xen-users] Debugging DomU > > On Fri, 2015-05-01 at 19:16 +0000, Chris Brand wrote: > > > I think xenctx (from $prefix/lib/xen/bin) should work, which will get you > > > at least register state including, hopefully, a useful r15 which gdb or > > > addr2line can convert back to a source line in the kernel. > > > > Thanks, Ian. That does give me something to go on, at least. One thing that > > leaps out is "PC = 0000000c". > > That usually suggests that the kernel has taken an abort before the vector > table has been initialised... > > You might find that the LR register for the current mode gives you the PC > where the fault occurred, but often these things are recursive since there is > nothing mapped at address 0 so it just keeps on faulting which clobbers the > LR repeatedly. > > For dom0 I have in the past used the patch below to turn such events into > something more useful, you could try applying something similar to the > userspace domain builder. Perhaps bodge something into > tools/libxc/xc_dom_arm.c e.g. in alloc_magic_pages or maybe > arch_setup_bootlate? > > If you do get something like that working then posting it (maybe to > -devel) so people can pull it from the archives next time (since I would > assume it would be too ugly to actually apply) would be very useful. Be sure > to say "Potentially useful debug hack, not to be applied" to warn off > potential reviewers ;-) > > Ian. > > commit 731d32f462353635deeddc24ae530acd5702ec80 > Author: Ian Campbell <ian.campbell@xxxxxxxxxx> > Date: Fri Dec 6 10:00:58 2013 +0000 > > DEBUG-HACK: Add hypervisor traps to page at address 0 > > This catches any early guest traps and redirects them to the hypervisor. > > diff --git a/xen/arch/arm/domain_build.c b/xen/arch/arm/domain_build.c index > e501d2a..5fefdab 100644 > --- a/xen/arch/arm/domain_build.c > +++ b/xen/arch/arm/domain_build.c > @@ -958,6 +958,34 @@ static void initrd_load(struct kernel_info *kinfo) > unmap_domain_page(dst); > offs += l; > } > + > +static void ma_zero_hack(struct domain *d) { > + paddr_t ma = 0; > + uint32_t *dst; > + int res; > +// return; > + > + /* > + * Set temporary guest traps with 0xe14fff7c which is hvc(0xfffc) a hyp > + * panic! TODO: Find why: > + * 1) Xen abort directly after local_abort_enable when > + * the p2m_populate_ram is not here. > + * 2) Linux doesn't start without this trick > + */ > + p2m_populate_ram(d, 0x0, 0x1000 - 1); > + > + res = gvirt_to_maddr(0, &ma); > + if ( res ) > + panic(XENLOG_ERR "Unable to translate guest address\n"); > + > + printk("MA0 hack MFN at %"PRIpaddr"\n", ma); > + > + dst = map_domain_page(ma >> PAGE_SHIFT); > +// dst[0] = dst[1] = dst[2] = 0xe14fff7f; > + dst[0] = dst[1] = dst[2] = 0xe14fff7c; > + dst[3] = dst[4] = dst[5] = 0xe14fff7c; > + unmap_domain_page(dst); > } > > int construct_dom0(struct domain *d) > @@ -1015,6 +1043,8 @@ int construct_dom0(struct domain *d) > initrd_load(&kinfo); > dtb_load(&kinfo); > > + ma_zero_hack(d); > + > discard_initial_modules(); > > v->is_initialised = 1; > > _______________________________________________ Xen-users mailing list Xen-users@xxxxxxxxxxxxx http://lists.xen.org/xen-users
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |