]> xenbits.xensource.com Git - libvirt.git/commitdiff
util:hostcpu: Report physical address size based on Architecture
authorNarayana Murty N <nnmlinux@linux.ibm.com>
Wed, 4 Oct 2023 05:58:41 +0000 (01:58 -0400)
committerMichal Privoznik <mprivozn@redhat.com>
Fri, 20 Oct 2023 10:46:47 +0000 (12:46 +0200)
The function virHostCPUGetPhysAddrSize was introduced with commit be1b7d5b18e
fails on architectures other than x86 and SuperH. The commit 8417c1394cd4d
fixed the issue only for s390 but the problem is still seen on other
architectures like ppc which does not report Physical address size in their
cpuinfo output.

command:
systemctl restart libvirtd.service
Output :
<snip>
dnsmasq[2377]: read /var/lib/libvirt/dnsmasq/default.addnhosts - 0
addresses
dnsmasq-dhcp[2377]: read /var/lib/libvirt/dnsmasq/default.hostsfile
libvirtd[3163]: libvirt version: 9.8.0
libvirtd[3163]: hostname: xxxxxxxxxx
libvirtd[3163]: internal error: Missing or invalid CPU address size in
/proc/cpuinfo
 libvirtd.service: Deactivated successfully.
 </snip>

This patch fixes this issue by returning the size=0 for architectures
other than x86 and SuperH.

Signed-off-by: Narayana Murty N <nnmlinux@linux.ibm.com>
Reviewed-by: Michal Privoznik <mprivozn@redhat.com>
src/util/virarch.h
src/util/virhostcpu.c

index 81b1b27a5799e736e1bf0118383b51208040f663..747f77c48ec0cf12ad2f9e29a41143309412aa6a 100644 (file)
@@ -103,6 +103,9 @@ typedef enum {
 #define ARCH_IS_MIPS64(arch) ((arch) == VIR_ARCH_MIPS64 ||\
                               (arch) == VIR_ARCH_MIPS64EL)
 
+#define ARCH_IS_SH4(arch) ((arch) == VIR_ARCH_SH4 ||\
+                           (arch) == VIR_ARCH_SH4EB)
+
 typedef enum {
     VIR_ARCH_LITTLE_ENDIAN,
     VIR_ARCH_BIG_ENDIAN,
index 0389012ef7108d546df25c87f690ba84c29a819e..4027547e1ee63ec4d5a75206a72679093ef29988 100644 (file)
@@ -1650,7 +1650,7 @@ virHostCPUGetPhysAddrSize(const virArch hostArch,
 {
     g_autoptr(FILE) cpuinfo = NULL;
 
-    if (ARCH_IS_S390(hostArch)) {
+    if (!(ARCH_IS_X86(hostArch) || ARCH_IS_SH4(hostArch))) {
         /* Ensure size is set to 0 as physical address size is unknown */
         *size = 0;
         return 0;