aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorKevin O'Connor <kevin@koconnor.net>2013-02-09 19:45:45 -0500
committerKevin O'Connor <kevin@koconnor.net>2013-02-12 21:21:28 -0500
commitf9e4e3774598041b99481f88ea32617c0371b5d0 (patch)
treeb2ca6052f3b9cead086f947359fbdb803bc5aaa6
parent56c5089e237a763235bad8c912cb52b267f09b10 (diff)
downloadseabios-f9e4e3774598041b99481f88ea32617c0371b5d0.tar.gz
Convert fw_cfg NUMA entries into a romfile entry.
Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
-rw-r--r--src/acpi.c24
-rw-r--r--src/paravirt.c24
-rw-r--r--src/paravirt.h2
3 files changed, 16 insertions, 34 deletions
diff --git a/src/acpi.c b/src/acpi.c
index aebf26e..f7a2e55 100644
--- a/src/acpi.c
+++ b/src/acpi.c
@@ -12,8 +12,8 @@
#include "pci_ids.h" // PCI_VENDOR_ID_INTEL
#include "pci_regs.h" // PCI_INTERRUPT_LINE
#include "ioport.h" // inl
-#include "paravirt.h" // qemu_cfg_irq0_override
-#include "dev-q35.h" // qemu_cfg_irq0_override
+#include "config.h" // CONFIG_*
+#include "dev-q35.h"
/****************************************************/
/* ACPI tables init */
@@ -672,22 +672,16 @@ acpi_build_srat_memory(struct srat_memory_affinity *numamem,
static void *
build_srat(void)
{
- int nb_numa_nodes = qemu_cfg_get_numa_nodes();
-
- if (nb_numa_nodes == 0)
- return NULL;
-
- u64 *numadata = malloc_tmphigh(sizeof(u64) * (MaxCountCPUs + nb_numa_nodes));
- if (!numadata) {
- warn_noalloc();
+ int filesize;
+ u64 *numadata = romfile_loadfile("etc/numa-nodes", &filesize);
+ if (!numadata)
return NULL;
- }
-
- qemu_cfg_get_numa_data(numadata, MaxCountCPUs + nb_numa_nodes);
+ int max_cpu = romfile_loadint("etc/max-cpus", 0);
+ int nb_numa_nodes = (filesize / sizeof(u64)) - max_cpu;
struct system_resource_affinity_table *srat;
int srat_size = sizeof(*srat) +
- sizeof(struct srat_processor_affinity) * MaxCountCPUs +
+ sizeof(struct srat_processor_affinity) * max_cpu +
sizeof(struct srat_memory_affinity) * (nb_numa_nodes + 2);
srat = malloc_high(srat_size);
@@ -703,7 +697,7 @@ build_srat(void)
int i;
u64 curnode;
- for (i = 0; i < MaxCountCPUs; ++i) {
+ for (i = 0; i < max_cpu; ++i) {
core->type = SRAT_PROCESSOR;
core->length = sizeof(*core);
core->local_apic_id = i;
diff --git a/src/paravirt.c b/src/paravirt.c
index 79b1c56..0c91c8d 100644
--- a/src/paravirt.c
+++ b/src/paravirt.c
@@ -189,23 +189,6 @@ void* qemu_cfg_e820_load_next(void *addr)
return addr;
}
-int qemu_cfg_get_numa_nodes(void)
-{
- u64 cnt;
-
- qemu_cfg_read_entry(&cnt, QEMU_CFG_NUMA, sizeof(cnt));
-
- return (int)cnt;
-}
-
-void qemu_cfg_get_numa_data(u64 *data, int n)
-{
- int i;
-
- for (i = 0; i < n; i++)
- qemu_cfg_read((u8*)(data + i), sizeof(u64));
-}
-
static int
qemu_cfg_read_file(struct romfile_s *file, void *dst, u32 maxlen)
{
@@ -254,6 +237,13 @@ qemu_cfg_legacy(void)
qemu_romfile_add("etc/irq0-override", QEMU_CFG_IRQ0_OVERRIDE, 0, 1);
qemu_romfile_add("etc/max-cpus", QEMU_CFG_MAX_CPUS, 0, 2);
+ // NUMA data
+ u64 numacount;
+ qemu_cfg_read_entry(&numacount, QEMU_CFG_NUMA, sizeof(numacount));
+ numacount += romfile_loadint("etc/max-cpus", 0);
+ qemu_romfile_add("etc/numa-nodes", QEMU_CFG_NUMA, sizeof(numacount)
+ , numacount*sizeof(u64));
+
// ACPI tables
char name[128];
u16 cnt;
diff --git a/src/paravirt.h b/src/paravirt.h
index e92e236..527522b 100644
--- a/src/paravirt.h
+++ b/src/paravirt.h
@@ -26,8 +26,6 @@ static inline int runningOnKVM(void) {
void qemu_ramsize_preinit(void);
void qemu_biostable_setup(void);
void qemu_cfg_preinit(void);
-int qemu_cfg_get_numa_nodes(void);
-void qemu_cfg_get_numa_data(u64 *data, int n);
u32 qemu_cfg_e820_entries(void);
void* qemu_cfg_e820_load_next(void *addr);
void qemu_romfile_init(void);