[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Xen-users] ARM: Xen on Vexpress

On Mon, 2014-06-30 at 13:21 +0100, Jeenu Viswambharan wrote:
> On Mon, Jun 30, 2014 at 11:27:11, Ian Campbell wrote:
> > On Mon, 2014-06-30 at 11:17 +0100, Jeenu Viswambharan wrote:
> > > On Fri, Jun 27, 2014 at 15:51:09, Ian Campbell wrote:
> > > > The error messages suggest to me that you are missing some key
> > > > piece of generic infrastructure, like perhaps /dev/pts.
> > > >
> > > > I'd strongly recommend you find a way to run udev on this platform
> > > > so that it can sort out the content of /dev for you (this was the
> > > > cause of all the missing device nodes which you tripped over
> > > > earlier too).
> > >
> > > Um, starting udev (via. /etc/init.d/udev start) effectively wipes
> > > out the /dev/ directory contents, barring few! I can't find any udev
> > > logs, despite changing log level to debug.
> >
> > http://community.arm.com/groups/processors/blog/2014/03/28/virtualization-on-arm-with-xen
> >  has an example initscript in it which seems to suggest that
> >         mount -t devtmpfs dev /dev
> >         /sbin/udevd --daemon
> >         udevadm trigger --action=add
> > should do the right thing (I was advising Andrew when he wrote that
> > and it sounds familiar to me to). If you are going to skip the usual
> > /sbin/init based setup then I would recommend you use something akin
> > to the init.sh proposed in that blog post (it doesn't look like it is
> > terribly openSUSE specific, but YMMV).
> Thanks. It looks like that helped. The VM creation no more prints any
> error (about creating terminals, previously) when it returns the shell
> prompt. 'xl list' lists a guest by name 'guest'. However, when I execute
> 'xl console guest', the command goes dead; there are no verbose logs
> even if I pass -vvv to xl.
> It's almost the same effect if I run the command 'xl -vvv create
> guest.cfg -c', that it appears stuck and doesn't return prompt.

IME this usually indicates that the guest has crashed before it has
managed to get as far as putting anything onto its console ring. Are you
running an identical zImage to what you are booting in dom0?

Please can you check that you have exactly one xenconsoled and one
xenstored process in dom0 (sometimes people end up with two and
confusion reigns).

It's also worth double checking that you have a multiplatform kernel
configuration with no DEBUG_LL options enabled, since any UART which
that might point to will not exist within a guest. I think the option
conflicts with CONFIG_MULTIPLATFORM so I guess it is unlikely that you
have it enabled.

The next thing to try is to use /usr/local/lib/xen/bin/xenctx to examine
the guest vcpu's state. The tool takes a domid (numeric, not the name)
as an argument and prints its current register state. You can translate
the PC using the guest kernel's vmlinux file and gdb or addr2line etc.
You'll probably find it is either in the idle loop or spinning in panic.

Unfortunately earlyprintk doesn't work for Xen guests. What I usually do
is modify the kernel to insert calls to xen_raw_printk somewhere in the
printk path. With a debug=y build of Xen this will then cause the
guest's early output to go to the hypervisor's console.  I'm afraid I
don't have such a patch in known good state handy to share
though :-( But I do have this against kernel/printk/printk.c:

@@ -1542,6 +1549,9 @@ asmlinkage int vprintk_emit(int facility, int level,
        text_len = vscnprintf(text, sizeof(textbuf), fmt, args);
+       if (xen_domain() && !xen_initial_domain())
+               xen_raw_printk(textbuf);
        /* mark and strip a trailing newline */
        if (text_len && text[text_len-1] == '\n') {

Which is roughly the sort of thing I mean but doesn't look like it will
apply to a recent kernel. I also have this floating around which might
do the job (along with earlyprint on your guest kernel command line):

diff --git a/arch/arm/kernel/early_printk.c b/arch/arm/kernel/early_printk.c
index 4307653..52e3461 100644
--- a/arch/arm/kernel/early_printk.c
+++ b/arch/arm/kernel/early_printk.c
@@ -36,10 +36,12 @@ static struct console early_console_dev = {
        .index =        -1,
+extern struct console xenboot_console;
 static int __init setup_early_printk(char *buf)
-       early_console = &early_console_dev;
-       register_console(&early_console_dev);
+       early_console = &xenboot_console;
+       register_console(arly_console);
        return 0;


Xen-users mailing list



Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.