diff mbox

[Xen-devel] libxl: Recognise ARM architectures

Message ID 1393418058-14113-1-git-send-email-ian.campbell@citrix.com
State Accepted
Commit bf5dbce61e5c0ded4c7b7592e69e1bfb3220fcfe
Headers show

Commit Message

Ian Campbell Feb. 26, 2014, 12:34 p.m. UTC
Only tested on v7 but the v8 equivalent seems pretty obvious.

XEN_CAP_REGEX already accepts more than it should (e.g. x86_64p or x86_32be)
but I have stuck with the existing pattern.

With this I can create a guest from:
  <domain type='xen'>
    <name>libvirt-test</name>
    <uuid>6343998e-9eda-11e3-98f6-77252a7d02f3</uuid>
    <memory>393216</memory>
    <currentMemory>393216</currentMemory>
    <vcpu>1</vcpu>
    <os>
      <type arch='armv7l' machine='xenpv'>linux</type>
      <kernel>/boot/vmlinuz-arm-native</kernel>
      <cmdline>console=hvc0 earlyprintk debug root=/dev/xvda1</cmdline>
    </os>
    <clock offset='utc'/>
    <on_poweroff>destroy</on_poweroff>
    <on_reboot>restart</on_reboot>
    <on_crash>destroy</on_crash>
    <devices>
      <disk type='block' device='disk'>
        <source dev='/dev/marilith-n0/debian-disk'/>
        <target dev='xvda1'/>
      </disk>
      <interface type='bridge'>
        <mac address='8e:a7:8e:3c:f4:f6'/>
        <source bridge='xenbr0'/>
      </interface>
    </devices>
  </domain>

Using virsh create and I can destroy it too.

Currently virsh console fails with:
  Connected to domain libvirt-test
  Escape character is ^]
  error: internal error: cannot find character device <null>

I haven't investigated yet.

Signed-off-by: Ian Campbell <ian.campbell@citrix.com>
---
 src/libxl/libxl_conf.c |    7 +++++--
 1 file changed, 5 insertions(+), 2 deletions(-)

Comments

Ian Campbell Feb. 26, 2014, 12:42 p.m. UTC | #1
On Wed, 2014-02-26 at 12:37 +0000, Daniel P. Berrange wrote:
> On Wed, Feb 26, 2014 at 12:34:17PM +0000, Ian Campbell wrote:
> > Currently virsh console fails with:
> >   Connected to domain libvirt-test
> >   Escape character is ^]
> >   error: internal error: cannot find character device <null>
> > 
> > I haven't investigated yet.
> 
> That'll be because no <console> or <serial> device is
> listed in your config above I expect. Also looks like
> bogus error handling in the console API, not checking
> for <null>.

Thanks. I've just tried (inside <devices>...</...>):
         <console tty='/dev/pts/5'/>
and
     <console type='pty'>
      <target port='0'/>
    </console>
which I gleaned from http://libvirt.org/drvxen.html but neither seem to
do the trick (and the first ones use of an explicit pts looks odd to
me...).

> ACK

Thanks.

Ian.
Ian Campbell Feb. 26, 2014, 2:55 p.m. UTC | #2
On Wed, 2014-02-26 at 15:00 +0100, Olaf Hering wrote:
> On Wed, Feb 26, Ian Campbell wrote:
> 
> > On Wed, 2014-02-26 at 12:37 +0000, Daniel P. Berrange wrote:
> > > On Wed, Feb 26, 2014 at 12:34:17PM +0000, Ian Campbell wrote:
> > > > Currently virsh console fails with:
> > > >   Connected to domain libvirt-test
> > > >   Escape character is ^]
> > > >   error: internal error: cannot find character device <null>
> > > That'll be because no <console> or <serial> device is
> > > listed in your config above I expect. Also looks like
> > > bogus error handling in the console API, not checking
> > > for <null>.
> > Thanks. I've just tried (inside <devices>...</...>):
> >          <console tty='/dev/pts/5'/>
> > and
> >      <console type='pty'>
> >       <target port='0'/>
> >     </console>
> > which I gleaned from http://libvirt.org/drvxen.html but neither seem to
> > do the trick (and the first ones use of an explicit pts looks odd to
> > me...).
> 
> I learned yesterday this should be "serial" instead of "console", maybe
> it fixes also your case.

My understanding was that this was for HVM guests, whereas ARM has a PV
console but I suppose I should try it anyway. I've got a flight to catch
so it'll be a few days I expect.

Thanks,

Ian.
Ian Campbell Feb. 26, 2014, 3:28 p.m. UTC | #3
On Wed, 2014-02-26 at 06:34 -0700, Eric Blake wrote:
> On 02/26/2014 05:37 AM, Daniel P. Berrange wrote:
> > On Wed, Feb 26, 2014 at 12:34:17PM +0000, Ian Campbell wrote:
> >> Only tested on v7 but the v8 equivalent seems pretty obvious.
> >>
> >> XEN_CAP_REGEX already accepts more than it should (e.g. x86_64p or x86_32be)
> >> but I have stuck with the existing pattern.
> >>
> >> With this I can create a guest from:
> >>   <domain type='xen'>
> >>     <name>libvirt-test</name>
> >>     <uuid>6343998e-9eda-11e3-98f6-77252a7d02f3</uuid>
> >>     <memory>393216</memory>
> >>     <currentMemory>393216</currentMemory>
> >>     <vcpu>1</vcpu>
> >>     <os>
> >>       <type arch='armv7l' machine='xenpv'>linux</type>
> >>       <kernel>/boot/vmlinuz-arm-native</kernel>
> >>       <cmdline>console=hvc0 earlyprintk debug root=/dev/xvda1</cmdline>
> >>     </os>
> 
> > 
> > ACK
> 
> I've gone ahead and pushed the patch.

Wow, that was quick, thanks!

Ian.
Ian Campbell Feb. 28, 2014, 2:12 a.m. UTC | #4
On Wed, 2014-02-26 at 15:01 +0000, Daniel P. Berrange wrote:
> Yep, if ARM has a PV console, then we'd need to add  tiny bit to the XML
> to allow us to configure that explicitly, similar to how we do for KVM's
> virtio-console support.

Do you mean I need to add something to the XML config snippet, or I need
to add some special handling in the XML parser/consumer?

I've grepped around the virtio-console stuff and I'm none the wiser.

Thanks,
Ian.
Stefano Stabellini Feb. 28, 2014, 2:29 p.m. UTC | #5
On Fri, 28 Feb 2014, Daniel P. Berrange wrote:
> On Fri, Feb 28, 2014 at 02:12:30AM +0000, Ian Campbell wrote:
> > On Wed, 2014-02-26 at 15:01 +0000, Daniel P. Berrange wrote:
> > > Yep, if ARM has a PV console, then we'd need to add  tiny bit to the XML
> > > to allow us to configure that explicitly, similar to how we do for KVM's
> > > virtio-console support.
> > 
> > Do you mean I need to add something to the XML config snippet, or I need
> > to add some special handling in the XML parser/consumer?
> > 
> > I've grepped around the virtio-console stuff and I'm none the wiser.
> 
> Opps, yes, I should have explained this better, since our docs here are
> about as clear as mud.
> 
> With traditional x86 paravirt Xen, we just have the plain paravirt console
> devices
> 
>     <console type='pty'>
>       <target type='xen'/>
>     </console>
> 
> With x86  fullvirt Xen/KVM/QEMU, the console type just defaults to being
> a serial port so you would usually just add
> 
>     <serial type='pty'>
>     </serial>
> 
> and then libvirt would automatically add a <console> with
> 
>     <console type='pty'>
>       <target type='serial'/>
>     </console>
> 
> 
> With x86 fullvirt KVM, we also have support for virtio which is
> done using
> 
>     <console type='pty'>
>       <target type='virtio'/>
>     </console>
> 
> 
> So actually this leads me to ask what kind of console Arm fullvirt Xen
> guests actually have ? If they just use the traditional Xen paravirt
> console, then we just need to make sure that this works for them by
> default:
> 
>     <console type='pty'>
>       <target type='xen'/>
>     </console>
> 
> 
> If there's a different type of console device that's not related to
> the Xen paravirt console device, then we'd need to invent a new
> <target type='xxx'/> value for Arm.

It is just the traditional Xen paravirt console.

--
libvir-list mailing list
libvir-list@redhat.com
https://www.redhat.com/mailman/listinfo/libvir-list
Ian Campbell Feb. 28, 2014, 3:55 p.m. UTC | #6
On Fri, 2014-02-28 at 14:29 +0000, Stefano Stabellini wrote:
> On Fri, 28 Feb 2014, Daniel P. Berrange wrote:
> > So actually this leads me to ask what kind of console Arm fullvirt Xen
> > guests actually have ? If they just use the traditional Xen paravirt
> > console, then we just need to make sure that this works for them by
> > default:
> > 
> >     <console type='pty'>
> >       <target type='xen'/>
> >     </console>
> > 
> > 
> > If there's a different type of console device that's not related to
> > the Xen paravirt console device, then we'd need to invent a new
> > <target type='xxx'/> value for Arm.
> 
> It is just the traditional Xen paravirt console.

I tried the above,which AIUI should work, but it fails with the same
"cannot find character device <null>" error. I'll investigate properly
next week.

Ian.
diff mbox

Patch

diff --git a/src/libxl/libxl_conf.c b/src/libxl/libxl_conf.c
index 4cefadf..7ed692d 100644
--- a/src/libxl/libxl_conf.c
+++ b/src/libxl/libxl_conf.c
@@ -61,7 +61,7 @@  struct guest_arch {
     int ia64_be;
 };
 
-#define XEN_CAP_REGEX "(xen|hvm)-[[:digit:]]+\\.[[:digit:]]+-(x86_32|x86_64|ia64|powerpc64)(p|be)?"
+#define XEN_CAP_REGEX "(xen|hvm)-[[:digit:]]+\\.[[:digit:]]+-(aarch64|armv7l|x86_32|x86_64|ia64|powerpc64)(p|be)?"
 
 
 static virClassPtr libxlDriverConfigClass;
@@ -319,8 +319,11 @@  libxlCapsInitGuests(libxl_ctx *ctx, virCapsPtr caps)
             }
             else if (STRPREFIX(&token[subs[2].rm_so], "powerpc64")) {
                 arch = VIR_ARCH_PPC64;
+            } else if (STRPREFIX(&token[subs[2].rm_so], "armv7l")) {
+                arch = VIR_ARCH_ARMV7L;
+            } else if (STRPREFIX(&token[subs[2].rm_so], "aarch64")) {
+                arch = VIR_ARCH_AARCH64;
             } else {
-                /* XXX arm ? */
                 continue;
             }