78 lines
2.8 KiB
Diff
78 lines
2.8 KiB
Diff
|
|
From d50be5295c49be1b6024f5902948b52e683b4c23 Mon Sep 17 00:00:00 2001
|
||
|
|
From: lizhengui <lizhengui@huawei.com>
|
||
|
|
Date: Wed, 9 Sep 2020 14:18:35 +0800
|
||
|
|
Subject: [PATCH] lm32: do not leak memory on object_new/object_unref
|
||
|
|
MIME-Version: 1.0
|
||
|
|
Content-Type: text/plain; charset=UTF-8
|
||
|
|
Content-Transfer-Encoding: 8bit
|
||
|
|
|
||
|
|
Bottom halves and ptimers are malloced, but nothing in these
|
||
|
|
files is freeing memory allocated by instance_init. Since
|
||
|
|
these are sysctl devices that are never unrealized, just moving
|
||
|
|
the allocations to realize is enough to avoid the leak in
|
||
|
|
practice (and also to avoid upsetting asan when running
|
||
|
|
device-introspect-test).
|
||
|
|
|
||
|
|
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
|
||
|
|
Reviewed-by: Philippe Mathieu-Daudé <philmd@redhat.com>
|
||
|
|
---
|
||
|
|
hw/timer/lm32_timer.c | 6 +++---
|
||
|
|
hw/timer/milkymist-sysctl.c | 10 +++++-----
|
||
|
|
2 files changed, 8 insertions(+), 8 deletions(-)
|
||
|
|
|
||
|
|
diff --git a/hw/timer/lm32_timer.c b/hw/timer/lm32_timer.c
|
||
|
|
index 6ce876c6..13f15825 100644
|
||
|
|
--- a/hw/timer/lm32_timer.c
|
||
|
|
+++ b/hw/timer/lm32_timer.c
|
||
|
|
@@ -184,9 +184,6 @@ static void lm32_timer_init(Object *obj)
|
||
|
|
|
||
|
|
sysbus_init_irq(dev, &s->irq);
|
||
|
|
|
||
|
|
- s->bh = qemu_bh_new(timer_hit, s);
|
||
|
|
- s->ptimer = ptimer_init(s->bh, PTIMER_POLICY_DEFAULT);
|
||
|
|
-
|
||
|
|
memory_region_init_io(&s->iomem, obj, &timer_ops, s,
|
||
|
|
"timer", R_MAX * 4);
|
||
|
|
sysbus_init_mmio(dev, &s->iomem);
|
||
|
|
@@ -196,6 +193,9 @@ static void lm32_timer_realize(DeviceState *dev, Error **errp)
|
||
|
|
{
|
||
|
|
LM32TimerState *s = LM32_TIMER(dev);
|
||
|
|
|
||
|
|
+ s->bh = qemu_bh_new(timer_hit, s);
|
||
|
|
+ s->ptimer = ptimer_init(s->bh, PTIMER_POLICY_DEFAULT);
|
||
|
|
+
|
||
|
|
ptimer_set_freq(s->ptimer, s->freq_hz);
|
||
|
|
}
|
||
|
|
|
||
|
|
diff --git a/hw/timer/milkymist-sysctl.c b/hw/timer/milkymist-sysctl.c
|
||
|
|
index a9d25087..2f1ecc6d 100644
|
||
|
|
--- a/hw/timer/milkymist-sysctl.c
|
||
|
|
+++ b/hw/timer/milkymist-sysctl.c
|
||
|
|
@@ -280,11 +280,6 @@ static void milkymist_sysctl_init(Object *obj)
|
||
|
|
sysbus_init_irq(dev, &s->timer0_irq);
|
||
|
|
sysbus_init_irq(dev, &s->timer1_irq);
|
||
|
|
|
||
|
|
- s->bh0 = qemu_bh_new(timer0_hit, s);
|
||
|
|
- s->bh1 = qemu_bh_new(timer1_hit, s);
|
||
|
|
- s->ptimer0 = ptimer_init(s->bh0, PTIMER_POLICY_DEFAULT);
|
||
|
|
- s->ptimer1 = ptimer_init(s->bh1, PTIMER_POLICY_DEFAULT);
|
||
|
|
-
|
||
|
|
memory_region_init_io(&s->regs_region, obj, &sysctl_mmio_ops, s,
|
||
|
|
"milkymist-sysctl", R_MAX * 4);
|
||
|
|
sysbus_init_mmio(dev, &s->regs_region);
|
||
|
|
@@ -294,6 +289,11 @@ static void milkymist_sysctl_realize(DeviceState *dev, Error **errp)
|
||
|
|
{
|
||
|
|
MilkymistSysctlState *s = MILKYMIST_SYSCTL(dev);
|
||
|
|
|
||
|
|
+ s->bh0 = qemu_bh_new(timer0_hit, s);
|
||
|
|
+ s->bh1 = qemu_bh_new(timer1_hit, s);
|
||
|
|
+ s->ptimer0 = ptimer_init(s->bh0, PTIMER_POLICY_DEFAULT);
|
||
|
|
+ s->ptimer1 = ptimer_init(s->bh1, PTIMER_POLICY_DEFAULT);
|
||
|
|
+
|
||
|
|
ptimer_set_freq(s->ptimer0, s->freq_hz);
|
||
|
|
ptimer_set_freq(s->ptimer1, s->freq_hz);
|
||
|
|
}
|
||
|
|
--
|
||
|
|
2.19.1
|
||
|
|
|