timer: remove QEMU_TICKLESS_WORKAROUND
Qemu icount mode enabled, remove QEMU_TICKLESS_WORKAROUND. Signed-off-by: Wentong Wu <wentong.wu@intel.com>
This commit is contained in:
parent
b8724377e8
commit
72227574d8
15 changed files with 9 additions and 42 deletions
|
@ -305,20 +305,4 @@ config TICKLESS_CAPABLE
|
|||
z_clock_announce() (really, not to produce an interrupt at
|
||||
all) until the specified expiration.
|
||||
|
||||
config QEMU_TICKLESS_WORKAROUND
|
||||
bool "Disable tickless on qemu due to asynchrony bug"
|
||||
depends on QEMU_TARGET && TICKLESS_KERNEL
|
||||
help
|
||||
Qemu (without -icount) has trouble keeping time when the
|
||||
host process needs to timeshare. The host OS will routinely
|
||||
schedule out a process at timescales equivalent to the guest
|
||||
tick rate. With traditional ticks delivered regularly by
|
||||
the hardware, that's mostly OK as it looks like a late
|
||||
interrupt. But in tickless mode, the driver needs some CPU
|
||||
in order to schedule the tick in the first place. If that
|
||||
gets delayed across a tick boundary, time gets wonky. This
|
||||
tunable is a hint to the driver to disable tickless
|
||||
accounting on qemu. Use it only on tests that are known to
|
||||
have problems.
|
||||
|
||||
endmenu
|
||||
|
|
|
@ -30,8 +30,7 @@ static void arm_arch_timer_compare_isr(void *arg)
|
|||
|
||||
last_cycle += delta_ticks * CYC_PER_TICK;
|
||||
|
||||
if (!IS_ENABLED(CONFIG_TICKLESS_KERNEL) ||
|
||||
IS_ENABLED(CONFIG_QEMU_TICKLESS_WORKAROUND)) {
|
||||
if (!IS_ENABLED(CONFIG_TICKLESS_KERNEL)) {
|
||||
u64_t next_cycle = last_cycle + CYC_PER_TICK;
|
||||
|
||||
if ((s64_t)(next_cycle - curr_cycle) < MIN_DELAY) {
|
||||
|
@ -62,7 +61,7 @@ void z_clock_set_timeout(s32_t ticks, bool idle)
|
|||
{
|
||||
ARG_UNUSED(idle);
|
||||
|
||||
#if defined(CONFIG_TICKLESS_KERNEL) && !defined(CONFIG_QEMU_TICKLESS_WORKAROUND)
|
||||
#if defined(CONFIG_TICKLESS_KERNEL)
|
||||
|
||||
if (idle) {
|
||||
return;
|
||||
|
|
|
@ -59,8 +59,7 @@ static void hpet_isr(void *arg)
|
|||
|
||||
last_count += dticks * cyc_per_tick;
|
||||
|
||||
if (!IS_ENABLED(CONFIG_TICKLESS_KERNEL) ||
|
||||
IS_ENABLED(CONFIG_QEMU_TICKLESS_WORKAROUND)) {
|
||||
if (!IS_ENABLED(CONFIG_TICKLESS_KERNEL)) {
|
||||
u32_t next = last_count + cyc_per_tick;
|
||||
|
||||
if ((s32_t)(next - now) < MIN_DELAY) {
|
||||
|
@ -128,7 +127,7 @@ void z_clock_set_timeout(s32_t ticks, bool idle)
|
|||
{
|
||||
ARG_UNUSED(idle);
|
||||
|
||||
#if defined(CONFIG_TICKLESS_KERNEL) && !defined(CONFIG_QEMU_TICKLESS_WORKAROUND)
|
||||
#if defined(CONFIG_TICKLESS_KERNEL)
|
||||
if (ticks == K_TICKS_FOREVER && idle) {
|
||||
GENERAL_CONF_REG &= ~GCONF_ENABLE;
|
||||
return;
|
||||
|
|
|
@ -14,8 +14,7 @@
|
|||
#define MAX_TICKS ((MAX_CYC - CYC_PER_TICK) / CYC_PER_TICK)
|
||||
#define MIN_DELAY 1000
|
||||
|
||||
#define TICKLESS (IS_ENABLED(CONFIG_TICKLESS_KERNEL) && \
|
||||
!IS_ENABLED(CONFIG_QEMU_TICKLESS_WORKAROUND))
|
||||
#define TICKLESS IS_ENABLED(CONFIG_TICKLESS_KERNEL)
|
||||
|
||||
static struct k_spinlock lock;
|
||||
static u64_t last_count;
|
||||
|
@ -93,7 +92,7 @@ void z_clock_set_timeout(s32_t ticks, bool idle)
|
|||
{
|
||||
ARG_UNUSED(idle);
|
||||
|
||||
#if defined(CONFIG_TICKLESS_KERNEL) && !defined(CONFIG_QEMU_TICKLESS_WORKAROUND)
|
||||
#if defined(CONFIG_TICKLESS_KERNEL)
|
||||
/* RISCV has no idle handler yet, so if we try to spin on the
|
||||
* logic below to reset the comparator, we'll always bump it
|
||||
* forward to the "next tick" due to MIN_DELAY handling and
|
||||
|
|
|
@ -44,8 +44,7 @@ static void ccompare_isr(void *arg)
|
|||
|
||||
last_count += dticks * CYC_PER_TICK;
|
||||
|
||||
if (!IS_ENABLED(CONFIG_TICKLESS_KERNEL) ||
|
||||
IS_ENABLED(CONFIG_QEMU_TICKLESS_WORKAROUND)) {
|
||||
if (!IS_ENABLED(CONFIG_TICKLESS_KERNEL)) {
|
||||
u32_t next = last_count + CYC_PER_TICK;
|
||||
|
||||
if ((s32_t)(next - curr) < MIN_DELAY) {
|
||||
|
@ -70,7 +69,7 @@ void z_clock_set_timeout(s32_t ticks, bool idle)
|
|||
{
|
||||
ARG_UNUSED(idle);
|
||||
|
||||
#if defined(CONFIG_TICKLESS_KERNEL) && !defined(CONFIG_QEMU_TICKLESS_WORKAROUND)
|
||||
#if defined(CONFIG_TICKLESS_KERNEL)
|
||||
ticks = ticks == K_TICKS_FOREVER ? MAX_TICKS : ticks;
|
||||
ticks = MAX(MIN(ticks - 1, (s32_t)MAX_TICKS), 0);
|
||||
|
||||
|
|
|
@ -9,6 +9,5 @@ CONFIG_THREAD_MONITOR=y
|
|||
CONFIG_INIT_STACKS=y
|
||||
CONFIG_POLL=y
|
||||
CONFIG_SCHED_SCALABLE=y
|
||||
CONFIG_QEMU_TICKLESS_WORKAROUND=y
|
||||
# The Zephyr CMSIS v2 emulation assumes that ticks are ms, currently
|
||||
CONFIG_SYS_CLOCK_TICKS_PER_SEC=1000
|
||||
|
|
|
@ -2,7 +2,6 @@ CONFIG_ZTEST=y
|
|||
CONFIG_PRINTK=y
|
||||
CONFIG_LOG=y
|
||||
CONFIG_POLL=y
|
||||
CONFIG_QEMU_TICKLESS_WORKAROUND=y
|
||||
CONFIG_BOOT_DELAY=500
|
||||
CONFIG_IRQ_OFFLOAD=y
|
||||
CONFIG_TEST_USERSPACE=y
|
||||
|
|
|
@ -2,7 +2,6 @@ CONFIG_ZTEST=y
|
|||
CONFIG_IRQ_OFFLOAD=y
|
||||
CONFIG_NUM_PREEMPT_PRIORITIES=30
|
||||
#CONFIG_SCHED_SCALABLE=y
|
||||
CONFIG_QEMU_TICKLESS_WORKAROUND=y
|
||||
CONFIG_MAX_THREAD_BYTES=4
|
||||
CONFIG_TEST_USERSPACE=y
|
||||
CONFIG_MP_NUM_CPUS=1
|
||||
|
|
|
@ -2,6 +2,5 @@ CONFIG_ZTEST=y
|
|||
CONFIG_IRQ_OFFLOAD=y
|
||||
CONFIG_TEST_USERSPACE=y
|
||||
CONFIG_SCHED_MULTIQ=y
|
||||
CONFIG_QEMU_TICKLESS_WORKAROUND=y
|
||||
CONFIG_MAX_THREAD_BYTES=4
|
||||
CONFIG_MP_NUM_CPUS=1
|
||||
|
|
|
@ -1,5 +1,4 @@
|
|||
CONFIG_IRQ_OFFLOAD=y
|
||||
CONFIG_ZTEST=y
|
||||
CONFIG_QEMU_TICKLESS_WORKAROUND=y
|
||||
CONFIG_TEST_USERSPACE=y
|
||||
CONFIG_MP_NUM_CPUS=1
|
|
@ -1,5 +1,4 @@
|
|||
CONFIG_ZTEST=y
|
||||
CONFIG_QEMU_TICKLESS_WORKAROUND=y
|
||||
CONFIG_TEST_USERSPACE=y
|
||||
|
||||
CONFIG_MP_NUM_CPUS=1
|
||||
|
|
|
@ -1,5 +1,4 @@
|
|||
CONFIG_ZTEST=y
|
||||
CONFIG_QEMU_TICKLESS_WORKAROUND=y
|
||||
CONFIG_POLL=y
|
||||
|
||||
# Not a single test case here is SMP-safe. Save the cycles needed for
|
||||
|
|
|
@ -20,7 +20,5 @@ CONFIG_MAIN_STACK_SIZE=2048
|
|||
|
||||
CONFIG_ZTEST=y
|
||||
|
||||
CONFIG_QEMU_TICKLESS_WORKAROUND=y
|
||||
|
||||
CONFIG_NET_TEST=y
|
||||
CONFIG_NET_LOOPBACK=y
|
||||
|
|
|
@ -26,5 +26,3 @@ CONFIG_ZTEST=y
|
|||
# User mode requirements
|
||||
CONFIG_TEST_USERSPACE=y
|
||||
CONFIG_HEAP_MEM_POOL_SIZE=128
|
||||
|
||||
CONFIG_QEMU_TICKLESS_WORKAROUND=y
|
||||
|
|
|
@ -30,5 +30,3 @@ CONFIG_ZTEST=y
|
|||
# User mode requirements
|
||||
CONFIG_TEST_USERSPACE=y
|
||||
CONFIG_HEAP_MEM_POOL_SIZE=2048
|
||||
|
||||
CONFIG_QEMU_TICKLESS_WORKAROUND=y
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue