Check if the i8254 timer is active before deactivating it (Alexander Graf)
authoraliguori <aliguori@c046a42c-6fe2-441c-8c8c-71466251a162>
Mon, 26 Jan 2009 20:32:18 +0000 (20:32 +0000)
committeraliguori <aliguori@c046a42c-6fe2-441c-8c8c-71466251a162>
Mon, 26 Jan 2009 20:32:18 +0000 (20:32 +0000)
The HPET emulation can disable the i8254 when the HPET is
in legacy mode, thus emulating the i8254's behavior.

But if it does, the i8254 doesn't have to be running, so
let's check to see if the timer works and not disable it
if it's not.

This fixes a segmentation fault when running Mac OS X as
guest os.

Signed-off-by: Alexander Graf <agraf@suse.de>
Signed-off-by: Anthony Liguori <aliguori@us.ibm.com>
git-svn-id: svn://svn.savannah.nongnu.org/qemu/trunk@6460 c046a42c-6fe2-441c-8c8c-71466251a162

hw/i8254.c

index a4a1efe9cc867e33a02ddf80a4039456b8599dee..44e453139bdaa8a71fc2a8c10a88b018c32c74e4 100644 (file)
@@ -467,7 +467,8 @@ static void pit_reset(void *opaque)
 void hpet_pit_disable(void) {
     PITChannelState *s;
     s = &pit_state.channels[0];
-    qemu_del_timer(s->irq_timer);
+    if (s->irq_timer)
+        qemu_del_timer(s->irq_timer);
 }
 
 /* When HPET is reset or leaving legacy mode, it must reenable i8254