diff options
author | Igor Mammedov <imammedo@redhat.com> | 2016-10-13 14:38:27 +0200 |
---|---|---|
committer | Kevin O'Connor <kevin@koconnor.net> | 2016-10-25 09:58:17 -0400 |
commit | 023b1d0d6a59a2555fd9b1c4d25e687a5844cf2c (patch) | |
tree | 13ae1960ca6a673ca65ff2d64d67fc667d487cd0 /src/fw/paravirt.c | |
parent | eb516e4204ffa25ef94796e1e58f8dc649761fd5 (diff) | |
download | seabios-023b1d0d6a59a2555fd9b1c4d25e687a5844cf2c.tar.gz |
add helpers to read etc/boot-cpus at resume time
Signed-off-by: Igor Mammedov <imammedo@redhat.com>
Diffstat (limited to 'src/fw/paravirt.c')
-rw-r--r-- | src/fw/paravirt.c | 38 |
1 files changed, 38 insertions, 0 deletions
diff --git a/src/fw/paravirt.c b/src/fw/paravirt.c index 33a471bd..125066dd 100644 --- a/src/fw/paravirt.c +++ b/src/fw/paravirt.c @@ -319,6 +319,44 @@ qemu_romfile_add(char *name, int select, int skip, int size) romfile_add(&qfile->file); } +static int +qemu_romfile_get_fwcfg_entry(char *name, int *select) +{ + struct romfile_s *file = romfile_find(name); + if (!file) + return 0; + struct qemu_romfile_s *qfile; + qfile = container_of(file, struct qemu_romfile_s, file); + if (select) + *select = qfile->select; + return file->size; +} + +static int boot_cpus_sel; +static int boot_cpus_file_sz; + +u16 +qemu_init_present_cpus_count(void) +{ + u16 smp_count = romfile_loadint("etc/boot-cpus", + rtc_read(CMOS_BIOS_SMP_COUNT) + 1); + boot_cpus_file_sz = + qemu_romfile_get_fwcfg_entry("etc/boot-cpus", &boot_cpus_sel); + return smp_count; +} + +u16 +qemu_get_present_cpus_count(void) +{ + u16 smp_count; + if (!boot_cpus_file_sz) { + smp_count = rtc_read(CMOS_BIOS_SMP_COUNT) + 1; + } else { + qemu_cfg_read_entry(&smp_count, boot_cpus_sel, boot_cpus_file_sz); + } + return smp_count; +} + struct e820_reservation { u64 address; u64 length; |