]> xenbits.xensource.com Git - seabios.git/commitdiff
qemu: check rtc presence before reading cpu count from cmos
authorGerd Hoffmann <kraxel@redhat.com>
Thu, 7 May 2020 11:53:26 +0000 (13:53 +0200)
committerGerd Hoffmann <kraxel@redhat.com>
Fri, 15 May 2020 11:33:17 +0000 (13:33 +0200)
Read month register which should never have a value larger than 12.
In case the read returns 0xff assume the rtc isn't there.
Don't try to read the cpu count from cmos without rtc.

Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
Reviewed-by: Philippe Mathieu-Daudé <philmd@redhat.com>
src/fw/paravirt.c

index 3465f97ec0b03f68a3be4164ed171c32772d6301..e76fa65d87a03e05a9d22dd982f40aa175031a6e 100644 (file)
@@ -447,6 +447,11 @@ qemu_get_romfile_key(struct romfile_s *file)
     return qfile->select;
 }
 
+static int rtc_present(void)
+{
+    return rtc_read(CMOS_RTC_MONTH) != 0xff;
+}
+
 u16
 qemu_get_present_cpus_count(void)
 {
@@ -454,9 +459,11 @@ qemu_get_present_cpus_count(void)
     if (qemu_cfg_enabled()) {
         qemu_cfg_read_entry(&smp_count, QEMU_CFG_NB_CPUS, sizeof(smp_count));
     }
-    u16 cmos_cpu_count = rtc_read(CMOS_BIOS_SMP_COUNT) + 1;
-    if (smp_count < cmos_cpu_count) {
-        smp_count = cmos_cpu_count;
+    if (rtc_present()) {
+        u16 cmos_cpu_count = rtc_read(CMOS_BIOS_SMP_COUNT) + 1;
+        if (smp_count < cmos_cpu_count) {
+            smp_count = cmos_cpu_count;
+        }
     }
     return smp_count;
 }