[libvirt] [PATCH V3] AArch64: Porting of armv7l conditons to run qemu for aarch64.
AArch64 qemu has similar behavior as armv7l, like use of mmio etc. This patch adds similar bypass checks what we have for armv7l to aarch64. E.g. we are enabling mmio transport for Nicdev. Making addDefaultUSB and addDefaultMemballoon to false etc. V3: - Adding missing domain rng schema for aarcg64 and test case in testutilsqemu.c which was causing test suite failure while running make check. V2: - Added testcase to qemuxml2argvtest as suggested during review comments of V1. V1: - Initial patch. Signed-off-by: Anup Patel Signed-off-by: Pranavkumar Sawargaonkar --- docs/schemas/domaincommon.rng | 19 + src/qemu/qemu_capabilities.c |2 +- src/qemu/qemu_command.c|8 ++-- src/qemu/qemu_domain.c |4 ++ .../qemuxml2argv-aarch64-virt-virtio.args | 14 ++ .../qemuxml2argv-aarch64-virt-virtio.xml | 45 tests/qemuxml2argvtest.c |5 +++ tests/testutilsqemu.c | 30 + 8 files changed, 123 insertions(+), 4 deletions(-) create mode 100644 tests/qemuxml2argvdata/qemuxml2argv-aarch64-virt-virtio.args create mode 100644 tests/qemuxml2argvdata/qemuxml2argv-aarch64-virt-virtio.xml diff --git a/docs/schemas/domaincommon.rng b/docs/schemas/domaincommon.rng index be32c6b..86a60c9 100644 --- a/docs/schemas/domaincommon.rng +++ b/docs/schemas/domaincommon.rng @@ -305,6 +305,7 @@ + hvm @@ -432,6 +433,24 @@ + + + + + +aarch64 + + + + + + +[a-zA-Z0-9_\.\-]+ + + + + + diff --git a/src/qemu/qemu_capabilities.c b/src/qemu/qemu_capabilities.c index 4f64f87..ed182e0 100644 --- a/src/qemu/qemu_capabilities.c +++ b/src/qemu/qemu_capabilities.c @@ -2917,7 +2917,7 @@ virQEMUCapsSupportsChardev(virDomainDefPtr def, !virQEMUCapsGet(qemuCaps, QEMU_CAPS_DEVICE)) return false; -if (def->os.arch != VIR_ARCH_ARMV7L) +if ((def->os.arch != VIR_ARCH_ARMV7L) && (def->os.arch != VIR_ARCH_AARCH64)) return true; /* This may not be true for all ARM machine types, but at least diff --git a/src/qemu/qemu_command.c b/src/qemu/qemu_command.c index d723dc8..2c66718 100644 --- a/src/qemu/qemu_command.c +++ b/src/qemu/qemu_command.c @@ -427,7 +427,8 @@ qemuDomainSupportsNicdev(virDomainDefPtr def, return false; /* non-virtio ARM nics require legacy -net nic */ -if (def->os.arch == VIR_ARCH_ARMV7L && +if (((def->os.arch == VIR_ARCH_ARMV7L) || +(def->os.arch == VIR_ARCH_AARCH64)) && net->info.type != VIR_DOMAIN_DEVICE_ADDRESS_TYPE_VIRTIO_MMIO) return false; @@ -1340,7 +1341,8 @@ static int qemuDomainAssignARMVirtioMMIOAddresses(virDomainDefPtr def, virQEMUCapsPtr qemuCaps) { -if (def->os.arch == VIR_ARCH_ARMV7L && +if (((def->os.arch == VIR_ARCH_ARMV7L) || +(def->os.arch == VIR_ARCH_AARCH64)) && (STRPREFIX(def->os.machine, "vexpress-") || STREQ(def->os.machine, "virt")) && virQEMUCapsGet(qemuCaps, QEMU_CAPS_DEVICE_VIRTIO_MMIO)) { @@ -1872,7 +1874,7 @@ cleanup: static bool qemuDomainSupportsPCI(virDomainDefPtr def) { -if (def->os.arch != VIR_ARCH_ARMV7L) +if ((def->os.arch != VIR_ARCH_ARMV7L) && (def->os.arch != VIR_ARCH_AARCH64)) return true; if (STREQ(def->os.machine, "versatilepb")) diff --git a/src/qemu/qemu_domain.c b/src/qemu/qemu_domain.c index e964c75..c947e2e 100644 --- a/src/qemu/qemu_domain.c +++ b/src/qemu/qemu_domain.c @@ -727,6 +727,10 @@ qemuDomainDefPostParse(virDomainDefPtr def, addDefaultUSB = false; addDefaultMemballoon = false; break; +case VIR_ARCH_AARCH64: + addDefaultUSB = false; + addDefaultMemballoon = false; + break; case VIR_ARCH_ALPHA: case VIR_ARCH_PPC: diff --git a/tests/qemuxml2argvdata/qemuxml2argv-aarch64-virt-virtio.args b/tests/qemuxml2argvdata/qemuxml2argv-aarch64-virt-virtio.args new file mode 100644 index 000..afd6e41 --- /dev/null +++ b/tests/qemuxml2argvdata/qemuxml2argv-aarch64-virt-virtio.args @@ -0,0 +1,14 @@ +LC_ALL=C PATH=/bin HOME=/home/test USER=test LOGNAME=test QEMU_AUDIO_DRV=none \ +/usr/bin/qemu-system-aarch64 -S -M virt -m 1024 -smp 1 -nographic \ +-nodefconfig -nodefaults -monitor unix:/tmp/test-monitor,server,nowait \ +-boot c -kernel /aarch64.kernel -initrd /aarch64.initrd -append \ +'earlyprintk console=ttyAMA0,115200n8 rw root=/dev/vda rootwait' \ +-dtb /aarch64.dtb -device virtio-serial-device,id=vir
[libvirt] [PATCH V2] AArch64: Porting of armv7l conditons to run qemu for aarch64.
AArch64 qemu has similar behavior as armv7l, like use of mmio etc. This patch adds similar bypass checks what we have for armv7l to aarch64. E.g. we are enabling mmio transport for Nicdev. Making addDefaultUSB and addDefaultMemballoon to false etc. This patch also adds testcase to qemuxml2argvtest as suggested during review comments of V1 of same patch. Signed-off-by: Anup Patel Signed-off-by: Pranavkumar Sawargaonkar --- src/qemu/qemu_capabilities.c |2 +- src/qemu/qemu_command.c|8 ++-- src/qemu/qemu_domain.c |4 ++ .../qemuxml2argv-aarch64-virt-virtio.args | 14 ++ .../qemuxml2argv-aarch64-virt-virtio.xml | 45 tests/qemuxml2argvtest.c |4 ++ 6 files changed, 73 insertions(+), 4 deletions(-) create mode 100644 tests/qemuxml2argvdata/qemuxml2argv-aarch64-virt-virtio.args create mode 100644 tests/qemuxml2argvdata/qemuxml2argv-aarch64-virt-virtio.xml diff --git a/src/qemu/qemu_capabilities.c b/src/qemu/qemu_capabilities.c index a68e555..9df3292 100644 --- a/src/qemu/qemu_capabilities.c +++ b/src/qemu/qemu_capabilities.c @@ -2889,7 +2889,7 @@ virQEMUCapsSupportsChardev(virDomainDefPtr def, !virQEMUCapsGet(qemuCaps, QEMU_CAPS_DEVICE)) return false; -if (def->os.arch != VIR_ARCH_ARMV7L) +if ((def->os.arch != VIR_ARCH_ARMV7L) && (def->os.arch != VIR_ARCH_AARCH64)) return true; /* This may not be true for all ARM machine types, but at least diff --git a/src/qemu/qemu_command.c b/src/qemu/qemu_command.c index 9539be7..62a16a2 100644 --- a/src/qemu/qemu_command.c +++ b/src/qemu/qemu_command.c @@ -427,7 +427,8 @@ qemuDomainSupportsNicdev(virDomainDefPtr def, return false; /* non-virtio ARM nics require legacy -net nic */ -if (def->os.arch == VIR_ARCH_ARMV7L && +if (((def->os.arch == VIR_ARCH_ARMV7L) || +(def->os.arch == VIR_ARCH_AARCH64)) && net->info.type != VIR_DOMAIN_DEVICE_ADDRESS_TYPE_VIRTIO_MMIO) return false; @@ -1340,7 +1341,8 @@ static int qemuDomainAssignARMVirtioMMIOAddresses(virDomainDefPtr def, virQEMUCapsPtr qemuCaps) { -if (def->os.arch == VIR_ARCH_ARMV7L && +if (((def->os.arch == VIR_ARCH_ARMV7L) || +(def->os.arch == VIR_ARCH_AARCH64)) && (STRPREFIX(def->os.machine, "vexpress-") || STREQ(def->os.machine, "virt")) && virQEMUCapsGet(qemuCaps, QEMU_CAPS_DEVICE_VIRTIO_MMIO)) { @@ -1872,7 +1874,7 @@ cleanup: static bool qemuDomainSupportsPCI(virDomainDefPtr def) { -if (def->os.arch != VIR_ARCH_ARMV7L) +if ((def->os.arch != VIR_ARCH_ARMV7L) && (def->os.arch != VIR_ARCH_AARCH64)) return true; if (STREQ(def->os.machine, "versatilepb")) diff --git a/src/qemu/qemu_domain.c b/src/qemu/qemu_domain.c index 346fec3..529b367 100644 --- a/src/qemu/qemu_domain.c +++ b/src/qemu/qemu_domain.c @@ -727,6 +727,10 @@ qemuDomainDefPostParse(virDomainDefPtr def, addDefaultUSB = false; addDefaultMemballoon = false; break; +case VIR_ARCH_AARCH64: + addDefaultUSB = false; + addDefaultMemballoon = false; + break; case VIR_ARCH_ALPHA: case VIR_ARCH_PPC: diff --git a/tests/qemuxml2argvdata/qemuxml2argv-aarch64-virt-virtio.args b/tests/qemuxml2argvdata/qemuxml2argv-aarch64-virt-virtio.args new file mode 100644 index 000..afd6e41 --- /dev/null +++ b/tests/qemuxml2argvdata/qemuxml2argv-aarch64-virt-virtio.args @@ -0,0 +1,14 @@ +LC_ALL=C PATH=/bin HOME=/home/test USER=test LOGNAME=test QEMU_AUDIO_DRV=none \ +/usr/bin/qemu-system-aarch64 -S -M virt -m 1024 -smp 1 -nographic \ +-nodefconfig -nodefaults -monitor unix:/tmp/test-monitor,server,nowait \ +-boot c -kernel /aarch64.kernel -initrd /aarch64.initrd -append \ +'earlyprintk console=ttyAMA0,115200n8 rw root=/dev/vda rootwait' \ +-dtb /aarch64.dtb -device virtio-serial-device,id=virtio-serial0 -usb \ +-drive file=/aarch64.raw,if=none,id=drive-virtio-disk0 \ +-device virtio-blk-device,drive=drive-virtio-disk0,id=virtio-disk0 \ +-device virtio-net-device,vlan=0,id=net0,mac=52:54:00:09:a4:37 \ +-net user,vlan=0,name=hostnet0 -serial pty -chardev pty,id=charconsole1 \ +-device virtconsole,chardev=charconsole1,id=console1 \ +-device virtio-balloon-device,id=balloon0 \ +-object rng-random,id=rng0,filename=/dev/random \ +-device virtio-rng-device,rng=rng0 diff --git a/tests/qemuxml2argvdata/qemuxml2argv-aarch64-virt-virtio.xml b/tests/qemuxml2argvdata/qemuxml2argv-aarch64-virt-virtio.xml new file mode 100644 index 000..184b62c --- /dev/null +++ b/tests/qemuxml2argvdata/qemuxml2argv-aarch64-virt-virtio.xml @@ -0,0 +1,45 @@ + + aarch64test + 496d7ea8-9739-544b-4ebd-ef08be936e8b + 1048576 +
Re: [libvirt] [PATCH 0/6] AArch64 support for libvirt.
Hi Cole, On 16 October 2013 02:34, Cole Robinson wrote: > On 10/08/2013 09:49 AM, Pranavkumar Sawargaonkar wrote: >> This patchset extends libvirt for AArch64 (armv8a). >> >> All patches have been tested on APM X-Gene SoC and we are able >> to run libvirtd on APM X-Gene SOC and spawn VMs remotely using >> virsh and virt-manager. >> >> Pranavkumar Sawargaonkar (6): >> AArch64: Add AArch64 architecture to list of valid arches. >> AArch64: CPU Support for AArch64 (ARMv8 64bit). >> AArch64: Parse cputopology from /proc/cpuinfo. >> Implement minimal sysinfo for AArch64 platforms. >> Add parsing of AArch64 qemu capabilities. >> AArch64: Add qemu capabilities schemeta for test. >> >> src/Makefile.am |1 + >> src/cpu/cpu.c|2 + >> src/cpu/cpu_aarch64.c| 79 >> ++ >> src/cpu/cpu_aarch64.h| 31 ++ >> src/nodeinfo.c |5 +- >> src/qemu/qemu_capabilities.c |4 ++ >> src/util/virarch.c |1 + >> src/util/virarch.h |1 + >> src/util/virsysinfo.c|3 +- >> tests/capabilityschemadata/caps-qemu-kvm.xml | 11 >> tests/sysinfodata/aarch64cpuinfo.data| 10 >> tests/sysinfodata/aarch64sysinfo.expect | 10 >> tests/sysinfotest.c | 14 - >> 13 files changed, 168 insertions(+), 4 deletions(-) >> create mode 100644 src/cpu/cpu_aarch64.c >> create mode 100644 src/cpu/cpu_aarch64.h >> create mode 100644 tests/sysinfodata/aarch64cpuinfo.data >> create mode 100644 tests/sysinfodata/aarch64sysinfo.expect >> > > I pushed 1-4 and 6, skipping 5 since as Dan pointed out it shouldn't be > required. > > 2 needed a small fix due to a recent libvirt refactoring. > 6 needed a small schema addition, please make sure you have xmllint installed, > since certain tests need it. Thanks for pushing the patches. Sure i will install xmllint. > > - Cole Thanks, Pranav -- libvir-list mailing list libvir-list@redhat.com https://www.redhat.com/mailman/listinfo/libvir-list
Re: [libvirt] [PATCH] AArch64: Porting of armv7l conditons to run qemu for aarch64.
Hi, On 10 October 2013 17:20, Daniel P. Berrange wrote: > On Thu, Oct 10, 2013 at 05:10:41PM +0530, Pranavkumar Sawargaonkar wrote: >> AArch64 qemu has similar behavior as armv7l, like use of mmio etc. >> This patch adds similar bypass checks what we have for armv7l to aarch64. >> E.g. we are enabling mmio transport for Nicdev. >> Making addDefaultUSB and addDefaultMemballoon to false etc. >> >> Signed-off-by: Anup Patel >> Signed-off-by: Pranavkumar Sawargaonkar >> --- >> src/qemu/qemu_capabilities.c |2 +- >> src/qemu/qemu_command.c |8 +--- >> src/qemu/qemu_domain.c |5 - >> 3 files changed, 10 insertions(+), 5 deletions(-) > > Our general rule is that changes to qemu_command.c should be accompanied > by additions to tests/qemuxml2argvtest.c to validate their correctness, > otherwise it is all to easy for us to have regressions in behaviour later. Ok i will revise this patch. > > Daniel > -- > |: http://berrange.com -o-http://www.flickr.com/photos/dberrange/ :| > |: http://libvirt.org -o- http://virt-manager.org :| > |: http://autobuild.org -o- http://search.cpan.org/~danberr/ :| > |: http://entangle-photo.org -o- http://live.gnome.org/gtk-vnc :| Thanks, Pranav -- libvir-list mailing list libvir-list@redhat.com https://www.redhat.com/mailman/listinfo/libvir-list
Re: [libvirt] [PATCH 1/6] AArch64: Add AArch64 architecture to list of valid arches.
Hi Daniel, On 9 October 2013 20:14, Daniel P. Berrange wrote: > On Tue, Oct 08, 2013 at 07:19:06PM +0530, Pranavkumar Sawargaonkar wrote: >> Adding AArch64(ARMv8 64bit) to the current list of valid architectures. >> >> For now, AArch64 name would imply AArch64 LE mode only. In future, >> we might have separate names for AArch64 LE and BE. > > Presumably the kernel has fixed 'aarch64' as always referring > to LE and would add a variant like 'aarch64b' for BE mode if > that was ever supported ? Firstly thanks for Acking my patches. Yes linux currently uses aarch64 for LE . There is a BE port going on and should add a variant similar to what you have mentioned to distinguish. > >> Signed-off-by: Anup Patel >> Signed-off-by: Pranavkumar Sawargaonkar >> --- >> src/util/virarch.c |1 + >> src/util/virarch.h |1 + >> 2 files changed, 2 insertions(+) >> >> diff --git a/src/util/virarch.c b/src/util/virarch.c >> index 694eba1..9e88c68 100644 >> --- a/src/util/virarch.c >> +++ b/src/util/virarch.c >> @@ -38,6 +38,7 @@ static const struct virArchData { >> { "armv6l", 32, VIR_ARCH_LITTLE_ENDIAN }, >> { "armv7l", 32, VIR_ARCH_LITTLE_ENDIAN }, >> { "armv7b", 32, VIR_ARCH_BIG_ENDIAN }, >> +{ "aarch64", 64, VIR_ARCH_LITTLE_ENDIAN }, >> >> { "cris", 32, VIR_ARCH_LITTLE_ENDIAN }, >> { "i686", 32, VIR_ARCH_LITTLE_ENDIAN }, >> diff --git a/src/util/virarch.h b/src/util/virarch.h >> index 3530f7c..d0bf9d9 100644 >> --- a/src/util/virarch.h >> +++ b/src/util/virarch.h >> @@ -30,6 +30,7 @@ typedef enum { >> VIR_ARCH_ARMV6L, /* ARMv6 32 LE >> http://en.wikipedia.org/wiki/ARM_architecture */ >> VIR_ARCH_ARMV7L, /* ARMv7 32 LE >> http://en.wikipedia.org/wiki/ARM_architecture */ >> VIR_ARCH_ARMV7B, /* ARMv7 32 BE >> http://en.wikipedia.org/wiki/ARM_architecture */ >> +VIR_ARCH_AARCH64, /* ARMv8 64 LE >> http://en.wikipedia.org/wiki/ARM_architecture */ >> >> VIR_ARCH_CRIS, /* ETRAX 32 LE >> http://en.wikipedia.org/wiki/ETRAX_CRIS */ >> VIR_ARCH_I686, /* x86 32 LE >> http://en.wikipedia.org/wiki/X86 */ > > ACK > > > Daniel > -- > |: http://berrange.com -o-http://www.flickr.com/photos/dberrange/ :| > |: http://libvirt.org -o- http://virt-manager.org :| > |: http://autobuild.org -o- http://search.cpan.org/~danberr/ :| > |: http://entangle-photo.org -o- http://live.gnome.org/gtk-vnc :| > > -- > libvir-list mailing list > libvir-list@redhat.com > https://www.redhat.com/mailman/listinfo/libvir-list Thanks, Pranav -- libvir-list mailing list libvir-list@redhat.com https://www.redhat.com/mailman/listinfo/libvir-list
[libvirt] [PATCH] AArch64: Porting of armv7l conditons to run qemu for aarch64.
AArch64 qemu has similar behavior as armv7l, like use of mmio etc. This patch adds similar bypass checks what we have for armv7l to aarch64. E.g. we are enabling mmio transport for Nicdev. Making addDefaultUSB and addDefaultMemballoon to false etc. Signed-off-by: Anup Patel Signed-off-by: Pranavkumar Sawargaonkar --- src/qemu/qemu_capabilities.c |2 +- src/qemu/qemu_command.c |8 +--- src/qemu/qemu_domain.c |5 - 3 files changed, 10 insertions(+), 5 deletions(-) diff --git a/src/qemu/qemu_capabilities.c b/src/qemu/qemu_capabilities.c index 1eae4ba..74a1690 100644 --- a/src/qemu/qemu_capabilities.c +++ b/src/qemu/qemu_capabilities.c @@ -2872,7 +2872,7 @@ virQEMUCapsSupportsChardev(virDomainDefPtr def, !virQEMUCapsGet(qemuCaps, QEMU_CAPS_DEVICE)) return false; -if (def->os.arch != VIR_ARCH_ARMV7L) +if ((def->os.arch != VIR_ARCH_ARMV7L) && (def->os.arch != VIR_ARCH_AARCH64)) return true; /* This may not be true for all ARM machine types, but at least diff --git a/src/qemu/qemu_command.c b/src/qemu/qemu_command.c index 22cc5f2..1c4de84 100644 --- a/src/qemu/qemu_command.c +++ b/src/qemu/qemu_command.c @@ -427,7 +427,8 @@ qemuDomainSupportsNicdev(virDomainDefPtr def, return false; /* non-virtio ARM nics require legacy -net nic */ -if (def->os.arch == VIR_ARCH_ARMV7L && +if (((def->os.arch == VIR_ARCH_ARMV7L) || +(def->os.arch == VIR_ARCH_AARCH64)) && net->info.type != VIR_DOMAIN_DEVICE_ADDRESS_TYPE_VIRTIO_MMIO) return false; @@ -1339,7 +1340,8 @@ static int qemuDomainAssignARMVirtioMMIOAddresses(virDomainDefPtr def, virQEMUCapsPtr qemuCaps) { -if (def->os.arch == VIR_ARCH_ARMV7L && +if (((def->os.arch == VIR_ARCH_ARMV7L) || +(def->os.arch == VIR_ARCH_AARCH64)) && STRPREFIX(def->os.machine, "vexpress-") && virQEMUCapsGet(qemuCaps, QEMU_CAPS_DEVICE_VIRTIO_MMIO)) { qemuDomainPrimeVirtioDeviceAddresses( @@ -1870,7 +1872,7 @@ cleanup: static bool qemuDomainSupportsPCI(virDomainDefPtr def) { -if (def->os.arch != VIR_ARCH_ARMV7L) +if ((def->os.arch != VIR_ARCH_ARMV7L) && (def->os.arch != VIR_ARCH_AARCH64)) return true; if (STREQ(def->os.machine, "versatilepb")) diff --git a/src/qemu/qemu_domain.c b/src/qemu/qemu_domain.c index 968e323..f4986d7 100644 --- a/src/qemu/qemu_domain.c +++ b/src/qemu/qemu_domain.c @@ -727,7 +727,10 @@ qemuDomainDefPostParse(virDomainDefPtr def, addDefaultUSB = false; addDefaultMemballoon = false; break; - +case VIR_ARCH_AARCH64: + addDefaultUSB = false; + addDefaultMemballoon = false; + break; case VIR_ARCH_ALPHA: case VIR_ARCH_PPC: case VIR_ARCH_PPC64: -- 1.7.9.5 -- libvir-list mailing list libvir-list@redhat.com https://www.redhat.com/mailman/listinfo/libvir-list
[libvirt] [PATCH 6/6] AArch64: Add qemu capabilities schemeta for test.
Add qemu AArch64 capabilities schemeta in caps-qemu-kvm.xml. Signed-off-by: Anup Patel Signed-off-by: Pranavkumar Sawargaonkar --- tests/capabilityschemadata/caps-qemu-kvm.xml | 11 +++ 1 file changed, 11 insertions(+) diff --git a/tests/capabilityschemadata/caps-qemu-kvm.xml b/tests/capabilityschemadata/caps-qemu-kvm.xml index 1fbc22b..de0c57f 100644 --- a/tests/capabilityschemadata/caps-qemu-kvm.xml +++ b/tests/capabilityschemadata/caps-qemu-kvm.xml @@ -113,6 +113,17 @@ hvm + + 64 + /usr/bin/qemu-system-aarch64 + machvirt + + + + + + +hvm 32 /usr/bin/qemu-system-microblaze -- 1.7.9.5 -- libvir-list mailing list libvir-list@redhat.com https://www.redhat.com/mailman/listinfo/libvir-list
[libvirt] [PATCH 5/6] Add parsing of AArch64 qemu capabilities.
Parse qemu capabilities AArch64 just like arm 32bit. Signed-off-by: Anup Patel Signed-off-by: Pranavkumar Sawargaonkar --- src/qemu/qemu_capabilities.c |4 1 file changed, 4 insertions(+) diff --git a/src/qemu/qemu_capabilities.c b/src/qemu/qemu_capabilities.c index 7c39c1c..1eae4ba 100644 --- a/src/qemu/qemu_capabilities.c +++ b/src/qemu/qemu_capabilities.c @@ -300,6 +300,8 @@ static virArch virQEMUCapsArchFromString(const char *arch) return VIR_ARCH_I686; if (STREQ(arch, "arm")) return VIR_ARCH_ARMV7L; +if (STREQ(arch, "aarch64")) +return VIR_ARCH_AARCH64; return virArchFromString(arch); } @@ -311,6 +313,8 @@ static const char *virQEMUCapsArchToString(virArch arch) return "i386"; else if (arch == VIR_ARCH_ARMV7L) return "arm"; +else if (arch == VIR_ARCH_AARCH64) +return "aarch64"; return virArchToString(arch); } -- 1.7.9.5 -- libvir-list mailing list libvir-list@redhat.com https://www.redhat.com/mailman/listinfo/libvir-list
[libvirt] [PATCH 3/6] AArch64: Parse cputopology from /proc/cpuinfo.
CPU "parser" for AArch64. Showing cputopology in arm64 linux is work-in-progress so for now all AArch64 cpus belong to same socket (like PPC). Also we parse BogoMIPS same like arm 32bit. Signed-off-by: Anup Patel Signed-off-by: Pranavkumar Sawargaonkar --- src/nodeinfo.c |5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/nodeinfo.c b/src/nodeinfo.c index 320d8f8..309066c 100644 --- a/src/nodeinfo.c +++ b/src/nodeinfo.c @@ -205,7 +205,8 @@ virNodeParseSocket(const char *dir, unsigned int cpu) # if defined(__powerpc__) || \ defined(__powerpc64__) || \ defined(__s390__) || \ -defined(__s390x__) +defined(__s390x__) || \ +defined(__aarch64__) /* ppc and s390(x) has -1 */ if (ret < 0) ret = 0; @@ -441,7 +442,7 @@ int linuxNodeInfoCPUPopulate(FILE *cpuinfo, * and parsed in next iteration, because it is not in expected * format and thus lead to error. */ } -# elif defined(__arm__) +# elif defined(__arm__) || defined(__aarch64__) char *buf = line; if (STRPREFIX(buf, "BogoMIPS")) { char *p; -- 1.7.9.5 -- libvir-list mailing list libvir-list@redhat.com https://www.redhat.com/mailman/listinfo/libvir-list
[libvirt] [PATCH 1/6] AArch64: Add AArch64 architecture to list of valid arches.
Adding AArch64(ARMv8 64bit) to the current list of valid architectures. For now, AArch64 name would imply AArch64 LE mode only. In future, we might have separate names for AArch64 LE and BE. Signed-off-by: Anup Patel Signed-off-by: Pranavkumar Sawargaonkar --- src/util/virarch.c |1 + src/util/virarch.h |1 + 2 files changed, 2 insertions(+) diff --git a/src/util/virarch.c b/src/util/virarch.c index 694eba1..9e88c68 100644 --- a/src/util/virarch.c +++ b/src/util/virarch.c @@ -38,6 +38,7 @@ static const struct virArchData { { "armv6l", 32, VIR_ARCH_LITTLE_ENDIAN }, { "armv7l", 32, VIR_ARCH_LITTLE_ENDIAN }, { "armv7b", 32, VIR_ARCH_BIG_ENDIAN }, +{ "aarch64", 64, VIR_ARCH_LITTLE_ENDIAN }, { "cris", 32, VIR_ARCH_LITTLE_ENDIAN }, { "i686", 32, VIR_ARCH_LITTLE_ENDIAN }, diff --git a/src/util/virarch.h b/src/util/virarch.h index 3530f7c..d0bf9d9 100644 --- a/src/util/virarch.h +++ b/src/util/virarch.h @@ -30,6 +30,7 @@ typedef enum { VIR_ARCH_ARMV6L, /* ARMv6 32 LE http://en.wikipedia.org/wiki/ARM_architecture */ VIR_ARCH_ARMV7L, /* ARMv7 32 LE http://en.wikipedia.org/wiki/ARM_architecture */ VIR_ARCH_ARMV7B, /* ARMv7 32 BE http://en.wikipedia.org/wiki/ARM_architecture */ +VIR_ARCH_AARCH64, /* ARMv8 64 LE http://en.wikipedia.org/wiki/ARM_architecture */ VIR_ARCH_CRIS, /* ETRAX 32 LE http://en.wikipedia.org/wiki/ETRAX_CRIS */ VIR_ARCH_I686, /* x86 32 LE http://en.wikipedia.org/wiki/X86 */ -- 1.7.9.5 -- libvir-list mailing list libvir-list@redhat.com https://www.redhat.com/mailman/listinfo/libvir-list
[libvirt] [PATCH 0/6] AArch64 support for libvirt.
This patchset extends libvirt for AArch64 (armv8a). All patches have been tested on APM X-Gene SoC and we are able to run libvirtd on APM X-Gene SOC and spawn VMs remotely using virsh and virt-manager. Pranavkumar Sawargaonkar (6): AArch64: Add AArch64 architecture to list of valid arches. AArch64: CPU Support for AArch64 (ARMv8 64bit). AArch64: Parse cputopology from /proc/cpuinfo. Implement minimal sysinfo for AArch64 platforms. Add parsing of AArch64 qemu capabilities. AArch64: Add qemu capabilities schemeta for test. src/Makefile.am |1 + src/cpu/cpu.c|2 + src/cpu/cpu_aarch64.c| 79 ++ src/cpu/cpu_aarch64.h| 31 ++ src/nodeinfo.c |5 +- src/qemu/qemu_capabilities.c |4 ++ src/util/virarch.c |1 + src/util/virarch.h |1 + src/util/virsysinfo.c|3 +- tests/capabilityschemadata/caps-qemu-kvm.xml | 11 tests/sysinfodata/aarch64cpuinfo.data| 10 tests/sysinfodata/aarch64sysinfo.expect | 10 tests/sysinfotest.c | 14 - 13 files changed, 168 insertions(+), 4 deletions(-) create mode 100644 src/cpu/cpu_aarch64.c create mode 100644 src/cpu/cpu_aarch64.h create mode 100644 tests/sysinfodata/aarch64cpuinfo.data create mode 100644 tests/sysinfodata/aarch64sysinfo.expect -- 1.7.9.5 -- libvir-list mailing list libvir-list@redhat.com https://www.redhat.com/mailman/listinfo/libvir-list
[libvirt] [PATCH 2/6] AArch64: CPU Support for AArch64 (ARMv8 64bit).
Adding CPU encoder/decoder for AArch64. Signed-off-by: Anup Patel Signed-off-by: Pranavkumar Sawargaonkar --- src/Makefile.am |1 + src/cpu/cpu.c |2 ++ src/cpu/cpu_aarch64.c | 79 + src/cpu/cpu_aarch64.h | 31 +++ 4 files changed, 113 insertions(+) create mode 100644 src/cpu/cpu_aarch64.c create mode 100644 src/cpu/cpu_aarch64.h diff --git a/src/Makefile.am b/src/Makefile.am index 201c268..d5e62d8 100644 --- a/src/Makefile.am +++ b/src/Makefile.am @@ -900,6 +900,7 @@ CPU_SOURCES = \ cpu/cpu_x86.h cpu/cpu_x86.c cpu/cpu_x86_data.h \ cpu/cpu_s390.h cpu/cpu_s390.c \ cpu/cpu_arm.h cpu/cpu_arm.c \ + cpu/cpu_aarch64.h cpu/cpu_aarch64.c \ cpu/cpu_map.h cpu/cpu_map.c cpu/cpu_powerpc.h \ cpu/cpu_powerpc.c cpu/cpu_ppc_data.h diff --git a/src/cpu/cpu.c b/src/cpu/cpu.c index 31de857..e611452 100644 --- a/src/cpu/cpu.c +++ b/src/cpu/cpu.c @@ -32,6 +32,7 @@ #include "cpu_powerpc.h" #include "cpu_s390.h" #include "cpu_arm.h" +#include "cpu_aarch64.h" #include "cpu_generic.h" #include "util/virstring.h" @@ -44,6 +45,7 @@ static struct cpuArchDriver *drivers[] = { &cpuDriverPowerPC, &cpuDriverS390, &cpuDriverArm, +&cpuDriverAARCH64, /* generic driver must always be the last one */ &cpuDriverGeneric }; diff --git a/src/cpu/cpu_aarch64.c b/src/cpu/cpu_aarch64.c new file mode 100644 index 000..8c78eca --- /dev/null +++ b/src/cpu/cpu_aarch64.c @@ -0,0 +1,79 @@ +/* + * cpu_aarch64.c: CPU driver for AArch64 CPUs + * + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library. If not, see + * <http://www.gnu.org/licenses/>. + * + * Authors: + * Anup Patel + * Pranavkumar Sawargaonkar + */ + +#include + +#include "viralloc.h" +#include "cpu.h" + +#define VIR_FROM_THIS VIR_FROM_CPU + +static const virArch archs[] = { VIR_ARCH_AARCH64 }; + +static virCPUDataPtr +AArch64NodeData(virArch arch) +{ +virCPUDataPtr data; + +if (VIR_ALLOC(data) < 0) +return NULL; + +data->arch = arch; + +return data; +} + +static int +AArch64Decode(virCPUDefPtr cpu ATTRIBUTE_UNUSED, + const virCPUDataPtr data ATTRIBUTE_UNUSED, + const char **models ATTRIBUTE_UNUSED, + unsigned int nmodels ATTRIBUTE_UNUSED, + const char *preferred ATTRIBUTE_UNUSED, + unsigned int flags) +{ + +virCheckFlags(VIR_CONNECT_BASELINE_CPU_EXPAND_FEATURES, -1); + +return 0; +} + +static void +AArch64DataFree(virCPUDataPtr data) +{ +VIR_FREE(data); +} + +struct cpuArchDriver cpuDriverAARCH64 = { +.name = "aarch64", +.arch = archs, +.narch = ARRAY_CARDINALITY(archs), +.compare = NULL, +.decode = AArch64Decode, +.encode = NULL, +.free = AArch64DataFree, +.nodeData = AArch64NodeData, +.guestData = NULL, +.baseline = NULL, +.update = NULL, +.hasFeature = NULL, +}; diff --git a/src/cpu/cpu_aarch64.h b/src/cpu/cpu_aarch64.h new file mode 100644 index 000..8e48368 --- /dev/null +++ b/src/cpu/cpu_aarch64.h @@ -0,0 +1,31 @@ +/* + * cpu_aarch64.h: CPU driver for AArch64 CPUs + * + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library. If not, see + * <http://www.gnu.org/licenses/>. + * + * Authors: + * Anup Patel + * Pravakumar Sawargaonkar + */ + +#ifndef __VIR_CPU_AARCH64_H__ +# define __VIR_CPU_AARCH64_H__ + +# include "cpu.h" + +extern struct cpuArchDriver cpuDriverAARCH64; + +#endif /* __VIR_CPU_AARCH64_H__ */ -- 1.7.9.5 -- libvir-list mailing list libvir-list@redhat.com https://www.redhat.com/mailman/listinfo/libvir-list
[libvirt] [PATCH 4/6] Implement minimal sysinfo for AArch64 platforms.
Implement the bare minimal sysinfo for AArch64 platforms by reading the CPU models from /proc/cpuinfo. Signed-off-by: Anup Patel Signed-off-by: Pranavkumar Sawargaonkar --- src/util/virsysinfo.c |3 ++- tests/sysinfodata/aarch64cpuinfo.data | 10 ++ tests/sysinfodata/aarch64sysinfo.expect | 10 ++ tests/sysinfotest.c | 14 +- 4 files changed, 35 insertions(+), 2 deletions(-) create mode 100644 tests/sysinfodata/aarch64cpuinfo.data create mode 100644 tests/sysinfodata/aarch64sysinfo.expect diff --git a/src/util/virsysinfo.c b/src/util/virsysinfo.c index 0802124..1c8cae5 100644 --- a/src/util/virsysinfo.c +++ b/src/util/virsysinfo.c @@ -244,7 +244,7 @@ no_memory: return NULL; } -#elif defined(__arm__) +#elif defined(__arm__) || defined(__aarch64__) static int virSysinfoParseSystem(const char *base, virSysinfoDefPtr ret) { @@ -505,6 +505,7 @@ no_memory: defined(__i386__) || \ defined(__amd64__) || \ defined(__arm__) || \ + defined(__aarch64__) || \ defined(__powerpc__)) virSysinfoDefPtr virSysinfoRead(void) { diff --git a/tests/sysinfodata/aarch64cpuinfo.data b/tests/sysinfodata/aarch64cpuinfo.data new file mode 100644 index 000..0d63139 --- /dev/null +++ b/tests/sysinfodata/aarch64cpuinfo.data @@ -0,0 +1,10 @@ +Processor : AArch64 Processor rev 0 (aarch64) +BogoMIPS : 100.00 + +Features : fp asimd +CPU architecture: AArch64 +CPU variant: 0x0 +CPU part : 0x000 +CPU revision : 0 + +Hardware : Generic AArch64 diff --git a/tests/sysinfodata/aarch64sysinfo.expect b/tests/sysinfodata/aarch64sysinfo.expect new file mode 100644 index 000..518434d --- /dev/null +++ b/tests/sysinfodata/aarch64sysinfo.expect @@ -0,0 +1,10 @@ + + +0 +AArch64 Processor rev 0 (aarch64) + + +1 +AArch64 Processor rev 0 (aarch64) + + diff --git a/tests/sysinfotest.c b/tests/sysinfotest.c index ba57a7a..a88328f 100644 --- a/tests/sysinfotest.c +++ b/tests/sysinfotest.c @@ -43,7 +43,7 @@ # if defined(__s390__) || defined(__s390x__) || \ defined(__powerpc__) || defined(__powerpc64__) || \ defined(__i386__) || defined(__x86_64__) || defined(__amd64__) || \ - defined(__arm__) + defined(__arm__) || defined(__aarch64__) /* from sysinfo.c */ void virSysinfoSetup(const char *decoder, @@ -179,6 +179,18 @@ test_arm(void) } VIRT_TEST_MAIN(test_arm) +# elif defined(__aarch64__) +static int +test_aarch64(void) +{ +return sysinfotest_run("aarch64 sysinfo", + NULL, + NULL, + "/sysinfodata/aarch64cpuinfo.data", + "/sysinfodata/aarch64sysinfo.expect"); +} + +VIRT_TEST_MAIN(test_aarch64) # else int main(void) -- 1.7.9.5 -- libvir-list mailing list libvir-list@redhat.com https://www.redhat.com/mailman/listinfo/libvir-list