On 5/8/20 1:37 PM, Gerd Hoffmann wrote:
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 <kra...@redhat.com>

Reviewed-by: Philippe Mathieu-Daudé <phi...@redhat.com>

---
  src/fw/paravirt.c | 13 ++++++++++---
  1 file changed, 10 insertions(+), 3 deletions(-)

diff --git a/src/fw/paravirt.c b/src/fw/paravirt.c
index 3465f97ec0b0..e76fa65d87a0 100644
--- a/src/fw/paravirt.c
+++ b/src/fw/paravirt.c
@@ -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;
  }

_______________________________________________
SeaBIOS mailing list -- seabios@seabios.org
To unsubscribe send an email to seabios-le...@seabios.org

Reply via email to