diff options
author | Peter Maydell <peter.maydell@linaro.org> | 2018-12-16 16:32:42 +0000 |
---|---|---|
committer | Peter Maydell <peter.maydell@linaro.org> | 2018-12-16 16:32:43 +0000 |
commit | b019f5e5375224a003f260c89d424fea7767b7fc (patch) | |
tree | d57c8a5643f4ef8d7df6a292a00b2d9dc32e0be6 /target | |
parent | 58b1f0f21edcab13f78a376b1d90267626be1275 (diff) | |
parent | bbac02f1e8edfd0663543f6fdad1e7094d860b29 (diff) |
Merge remote-tracking branch 'remotes/pmaydell/tags/pull-misc-20181214' into staging
miscellaneous patches:
* checkpatch.pl: Enforce multiline comment syntax
* Rename cpu_physical_memory_write_rom() to address_space_write_rom()
* disas, monitor, elf_ops: Use address_space_read() to read memory
* Remove load_image() in favour of load_image_size()
* Fix some minor memory leaks in arm boards/devices
* virt: fix broken indentation
# gpg: Signature made Fri 14 Dec 2018 14:41:20 GMT
# gpg: using RSA key 3C2525ED14360CDE
# gpg: Good signature from "Peter Maydell <peter.maydell@linaro.org>"
# gpg: aka "Peter Maydell <pmaydell@gmail.com>"
# gpg: aka "Peter Maydell <pmaydell@chiark.greenend.org.uk>"
# Primary key fingerprint: E1A5 C593 CD41 9DE2 8E83 15CF 3C25 25ED 1436 0CDE
* remotes/pmaydell/tags/pull-misc-20181214: (22 commits)
virt: Fix broken indentation
target/arm: Create timers in realize, not init
tests/test-arm-mptimer: Don't leak string memory
hw/sd/sdhci: Don't leak memory region in sdhci_sysbus_realize()
hw/arm/mps2-tz.c: Free mscname string in make_dma()
target/arm: Free name string in ARMCPRegInfo hashtable entries
include/hw/loader.h: Document load_image_size()
hw/core/loader.c: Remove load_image()
device_tree.c: Don't use load_image()
hw/block/tc58128.c: Don't use load_image()
hw/i386/multiboot.c: Don't use load_image()
hw/i386/pc.c: Don't use load_image()
hw/pci/pci.c: Don't use load_image()
hw/smbios/smbios.c: Don't use load_image()
hw/ppc/ppc405_boards: Don't use load_image()
hw/ppc/mac_newworld, mac_oldworld: Don't use load_image()
elf_ops.h: Use address_space_write() to write memory
monitor: Use address_space_read() to read memory
disas.c: Use address_space_read() to read memory
Rename cpu_physical_memory_write_rom() to address_space_write_rom()
...
Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
Diffstat (limited to 'target')
-rw-r--r-- | target/arm/cpu.c | 33 |
1 files changed, 24 insertions, 9 deletions
diff --git a/target/arm/cpu.c b/target/arm/cpu.c index 0b185f8d30..c8505eaaee 100644 --- a/target/arm/cpu.c +++ b/target/arm/cpu.c @@ -642,6 +642,20 @@ uint64_t arm_cpu_mp_affinity(int idx, uint8_t clustersz) return (Aff1 << ARM_AFF1_SHIFT) | Aff0; } +static void cpreg_hashtable_data_destroy(gpointer data) +{ + /* + * Destroy function for cpu->cp_regs hashtable data entries. + * We must free the name string because it was g_strdup()ed in + * add_cpreg_to_hashtable(). It's OK to cast away the 'const' + * from r->name because we know we definitely allocated it. + */ + ARMCPRegInfo *r = data; + + g_free((void *)r->name); + g_free(r); +} + static void arm_cpu_initfn(Object *obj) { CPUState *cs = CPU(obj); @@ -649,7 +663,7 @@ static void arm_cpu_initfn(Object *obj) cs->env_ptr = &cpu->env; cpu->cp_regs = g_hash_table_new_full(g_int_hash, g_int_equal, - g_free, g_free); + g_free, cpreg_hashtable_data_destroy); QLIST_INIT(&cpu->pre_el_change_hooks); QLIST_INIT(&cpu->el_change_hooks); @@ -665,14 +679,6 @@ static void arm_cpu_initfn(Object *obj) qdev_init_gpio_in(DEVICE(cpu), arm_cpu_set_irq, 4); } - cpu->gt_timer[GTIMER_PHYS] = timer_new(QEMU_CLOCK_VIRTUAL, GTIMER_SCALE, - arm_gt_ptimer_cb, cpu); - cpu->gt_timer[GTIMER_VIRT] = timer_new(QEMU_CLOCK_VIRTUAL, GTIMER_SCALE, - arm_gt_vtimer_cb, cpu); - cpu->gt_timer[GTIMER_HYP] = timer_new(QEMU_CLOCK_VIRTUAL, GTIMER_SCALE, - arm_gt_htimer_cb, cpu); - cpu->gt_timer[GTIMER_SEC] = timer_new(QEMU_CLOCK_VIRTUAL, GTIMER_SCALE, - arm_gt_stimer_cb, cpu); qdev_init_gpio_out(DEVICE(cpu), cpu->gt_timer_outputs, ARRAY_SIZE(cpu->gt_timer_outputs)); @@ -868,6 +874,15 @@ static void arm_cpu_realizefn(DeviceState *dev, Error **errp) return; } } + + cpu->gt_timer[GTIMER_PHYS] = timer_new(QEMU_CLOCK_VIRTUAL, GTIMER_SCALE, + arm_gt_ptimer_cb, cpu); + cpu->gt_timer[GTIMER_VIRT] = timer_new(QEMU_CLOCK_VIRTUAL, GTIMER_SCALE, + arm_gt_vtimer_cb, cpu); + cpu->gt_timer[GTIMER_HYP] = timer_new(QEMU_CLOCK_VIRTUAL, GTIMER_SCALE, + arm_gt_htimer_cb, cpu); + cpu->gt_timer[GTIMER_SEC] = timer_new(QEMU_CLOCK_VIRTUAL, GTIMER_SCALE, + arm_gt_stimer_cb, cpu); #endif cpu_exec_realizefn(cs, &local_err); |