hw/sparse-mem: clear memory on reset
We use sparse-mem for fuzzing. For long-running fuzzing processes, we eventually end up with many allocated sparse-mem pages. To avoid this, clear the allocated pages on system-reset. Signed-off-by: Alexander Bulekov <alxndr@bu.edu> Reviewed-by: Darren Kenny <darren.kenny@oracle.com> Reviewed-by: Philippe Mathieu-Daudé <philmd@linaro.org>
This commit is contained in:
parent
6dffbe36af
commit
66169c3c60
@ -77,6 +77,13 @@ static void sparse_mem_write(void *opaque, hwaddr addr, uint64_t v,
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void sparse_mem_enter_reset(Object *obj, ResetType type)
|
||||||
|
{
|
||||||
|
SparseMemState *s = SPARSE_MEM(obj);
|
||||||
|
g_hash_table_remove_all(s->mapped);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
static const MemoryRegionOps sparse_mem_ops = {
|
static const MemoryRegionOps sparse_mem_ops = {
|
||||||
.read = sparse_mem_read,
|
.read = sparse_mem_read,
|
||||||
.write = sparse_mem_write,
|
.write = sparse_mem_write,
|
||||||
@ -123,7 +130,8 @@ static void sparse_mem_realize(DeviceState *dev, Error **errp)
|
|||||||
|
|
||||||
assert(s->baseaddr + s->length > s->baseaddr);
|
assert(s->baseaddr + s->length > s->baseaddr);
|
||||||
|
|
||||||
s->mapped = g_hash_table_new(NULL, NULL);
|
s->mapped = g_hash_table_new_full(NULL, NULL, NULL,
|
||||||
|
(GDestroyNotify)g_free);
|
||||||
memory_region_init_io(&s->mmio, OBJECT(s), &sparse_mem_ops, s,
|
memory_region_init_io(&s->mmio, OBJECT(s), &sparse_mem_ops, s,
|
||||||
"sparse-mem", s->length);
|
"sparse-mem", s->length);
|
||||||
sysbus_init_mmio(sbd, &s->mmio);
|
sysbus_init_mmio(sbd, &s->mmio);
|
||||||
@ -131,12 +139,15 @@ static void sparse_mem_realize(DeviceState *dev, Error **errp)
|
|||||||
|
|
||||||
static void sparse_mem_class_init(ObjectClass *klass, void *data)
|
static void sparse_mem_class_init(ObjectClass *klass, void *data)
|
||||||
{
|
{
|
||||||
|
ResettableClass *rc = RESETTABLE_CLASS(klass);
|
||||||
DeviceClass *dc = DEVICE_CLASS(klass);
|
DeviceClass *dc = DEVICE_CLASS(klass);
|
||||||
|
|
||||||
device_class_set_props(dc, sparse_mem_properties);
|
device_class_set_props(dc, sparse_mem_properties);
|
||||||
|
|
||||||
dc->desc = "Sparse Memory Device";
|
dc->desc = "Sparse Memory Device";
|
||||||
dc->realize = sparse_mem_realize;
|
dc->realize = sparse_mem_realize;
|
||||||
|
|
||||||
|
rc->phases.enter = sparse_mem_enter_reset;
|
||||||
}
|
}
|
||||||
|
|
||||||
static const TypeInfo sparse_mem_types[] = {
|
static const TypeInfo sparse_mem_types[] = {
|
||||||
|
Loading…
x
Reference in New Issue
Block a user