From: Gerd Hoffmann Date: Thu, 7 May 2020 11:53:26 +0000 (+0200) Subject: qemu: check rtc presence before reading cpu count from cmos X-Git-Tag: rel-1.14.0~25 X-Git-Url: http://xenbits.xensource.com/gitweb?a=commitdiff_plain;h=51c6fc699e5a42343ff1f2884f67fee1ae12eac8;p=seabios.git qemu: check rtc presence before reading cpu count from cmos 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 Reviewed-by: Philippe Mathieu-Daudé --- diff --git a/src/fw/paravirt.c b/src/fw/paravirt.c index 3465f97..e76fa65 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; }