aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPeter Maydell <peter.maydell@linaro.org>2011-12-19 12:01:58 +0000
committerPeter Maydell <peter.maydell@linaro.org>2012-01-04 10:32:16 +0000
commit128939a954194e37bbe67d1b94abcba599d30d10 (patch)
tree11b5f90232ec83b88deec1ac549f92237510bdee
parent624923be11846c3056639986993e0177f931dd44 (diff)
hw/pl110.c: Add post-load hook to invalidate display
Add a post-load hook which invalidates the display. In particular, if we don't do this and the display size we've just reloaded is larger than the default then we will segfault trying to read off the end of the buffer. Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
-rw-r--r--hw/pl110.c11
1 files changed, 11 insertions, 0 deletions
diff --git a/hw/pl110.c b/hw/pl110.c
index 303a9bcdbd..0e1f415aeb 100644
--- a/hw/pl110.c
+++ b/hw/pl110.c
@@ -60,10 +60,13 @@ typedef struct {
qemu_irq irq;
} pl110_state;
+static int vmstate_pl110_post_load(void *opaque, int version_id);
+
static const VMStateDescription vmstate_pl110 = {
.name = "pl110",
.version_id = 2,
.minimum_version_id = 1,
+ .post_load = vmstate_pl110_post_load,
.fields = (VMStateField[]) {
VMSTATE_INT32(version, pl110_state),
VMSTATE_UINT32_ARRAY(timing, pl110_state, 4),
@@ -430,6 +433,14 @@ static void pl110_mux_ctrl_set(void *opaque, int line, int level)
s->mux_ctrl = level;
}
+static int vmstate_pl110_post_load(void *opaque, int version_id)
+{
+ pl110_state *s = opaque;
+ /* Make sure we redraw, and at the right size */
+ pl110_invalidate_display(s);
+ return 0;
+}
+
static int pl110_init(SysBusDevice *dev)
{
pl110_state *s = FROM_SYSBUS(pl110_state, dev);