From: Aurelien Jarno Date: Mon, 14 Sep 2009 22:30:41 +0000 (+0200) Subject: Fix Linux task preemption on Versatile board X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=5c59f6c246249f4c03281d0ab02b81f38f65b398;p=thirdparty%2Fqemu.git Fix Linux task preemption on Versatile board Backport from master: Recent versions of the Linux kernel will not preempt CPU-intensive tasks unless the clock used by sched_clock() works. On -M versatilepb that's the 24MHz timer in the system controller. It's a very simple timer, so implement it. Signed-off-by: Daniel Jacobowitz Signed-off-by: Aurelien Jarno --- diff --git a/hw/arm_sysctl.c b/hw/arm_sysctl.c index 62222a1ab3b..06661d8e756 100644 --- a/hw/arm_sysctl.c +++ b/hw/arm_sysctl.c @@ -8,6 +8,7 @@ */ #include "hw.h" +#include "qemu-timer.h" #include "primecell.h" #include "sysemu.h" @@ -70,8 +71,7 @@ static uint32_t arm_sysctl_read(void *opaque, target_phys_addr_t offset) case 0x58: /* BOOTCS */ return 0; case 0x5c: /* 24MHz */ - /* ??? not implemented. */ - return 0; + return muldiv64(qemu_get_clock(vm_clock), 24000000, ticks_per_sec); case 0x60: /* MISC */ return 0; case 0x84: /* PROCID0 */