Introduce hpet_add_fw_cfg_bytes() to restrict accesses to hpet_cfg[] within hw/timer/hpet.c.
Signed-off-by: Philippe Mathieu-Daudé <phi...@linaro.org> --- include/hw/timer/hpet.h | 2 ++ hw/i386/fw_cfg.c | 5 ++--- hw/timer/hpet.c | 10 ++++++++++ 3 files changed, 14 insertions(+), 3 deletions(-) diff --git a/include/hw/timer/hpet.h b/include/hw/timer/hpet.h index d17a8d43199..d361ab9e931 100644 --- a/include/hw/timer/hpet.h +++ b/include/hw/timer/hpet.h @@ -85,4 +85,6 @@ static inline bool hpet_find(void) return object_resolve_path_type("", TYPE_HPET, NULL); } +bool hpet_add_fw_cfg_bytes(FWCfgState *fw_cfg, Error **errp); + #endif diff --git a/hw/i386/fw_cfg.c b/hw/i386/fw_cfg.c index 0e4494627c2..16f806e76b1 100644 --- a/hw/i386/fw_cfg.c +++ b/hw/i386/fw_cfg.c @@ -26,8 +26,6 @@ #include CONFIG_DEVICES #include "target/i386/cpu.h" -struct hpet_fw_config hpet_cfg = {.count = UINT8_MAX}; - const char *fw_cfg_arch_key_name(uint16_t key) { static const struct { @@ -149,7 +147,8 @@ FWCfgState *fw_cfg_arch_create(MachineState *ms, #endif fw_cfg_add_i32(fw_cfg, FW_CFG_IRQ0_OVERRIDE, 1); - fw_cfg_add_bytes(fw_cfg, FW_CFG_HPET, &hpet_cfg, sizeof(hpet_cfg)); + hpet_add_fw_cfg_bytes(fw_cfg, &error_fatal); + /* allocate memory for the NUMA channel: one (64bit) word for the number * of nodes, one word for each VCPU->node and one word for each node to * hold the amount of memory. diff --git a/hw/timer/hpet.c b/hw/timer/hpet.c index 5399f1b2a3f..9ca1424565f 100644 --- a/hw/timer/hpet.c +++ b/hw/timer/hpet.c @@ -36,6 +36,7 @@ #include "hw/rtc/mc146818rtc_regs.h" #include "migration/vmstate.h" #include "hw/timer/i8254.h" +#include "hw/i386/fw_cfg.h" #include "exec/address-spaces.h" #include "qom/object.h" #include "trace.h" @@ -86,6 +87,8 @@ struct HPETState { uint8_t hpet_id; /* instance id */ }; +struct hpet_fw_config hpet_cfg = {.count = UINT8_MAX}; + static uint32_t hpet_in_legacy_mode(HPETState *s) { return s->config & HPET_CFG_LEGACY; @@ -777,3 +780,10 @@ static void hpet_register_types(void) } type_init(hpet_register_types) + +bool hpet_add_fw_cfg_bytes(FWCfgState *fw_cfg, Error **errp) +{ + fw_cfg_add_bytes(fw_cfg, FW_CFG_HPET, &hpet_cfg, sizeof(hpet_cfg)); + + return true; +} -- 2.45.2