linux/arch/arm64/include/asm
Christoffer Dall d35268da66 arm/arm64: KVM: arch_timer: Only schedule soft timer on vcpu_block
We currently schedule a soft timer every time we exit the guest if the
timer did not expire while running the guest.  This is really not
necessary, because the only work we do in the timer work function is to
kick the vcpu.

Kicking the vcpu does two things:
(1) If the vpcu thread is on a waitqueue, make it runnable and remove it
from the waitqueue.
(2) If the vcpu is running on a different physical CPU from the one
doing the kick, it sends a reschedule IPI.

The second case cannot happen, because the soft timer is only ever
scheduled when the vcpu is not running.  The first case is only relevant
when the vcpu thread is on a waitqueue, which is only the case when the
vcpu thread has called kvm_vcpu_block().

Therefore, we only need to make sure a timer is scheduled for
kvm_vcpu_block(), which we do by encapsulating all calls to
kvm_vcpu_block() with kvm_timer_{un}schedule calls.

Additionally, we only schedule a soft timer if the timer is enabled and
unmasked, since it is useless otherwise.

Note that theoretically userspace can use the SET_ONE_REG interface to
change registers that should cause the timer to fire, even if the vcpu
is blocked without a scheduled timer, but this case was not supported
before this patch and we leave it for future work for now.

Signed-off-by: Christoffer Dall <christoffer.dall@linaro.org>
2015-10-22 23:01:42 +02:00
..
xen xen/events: Support event channel rebind on ARM 2015-08-20 12:24:15 +01:00
acenv.h ARM64 / ACPI: Get RSDP and ACPI boot-time tables 2015-03-25 11:49:30 +00:00
acpi.h arm64: psci: factor invocation code to drivers 2015-08-03 12:33:39 +01:00
alternative.h arm64: alternative: put secondary CPUs into polling loop during patch 2015-07-30 19:07:28 +01:00
arch_timer.h arm64: fix missing linux/bug.h include in asm/arch_timer.h 2015-01-07 11:40:59 +00:00
arm-cci.h arm-cci: Get rid of secure transactions for PMU driver 2015-03-27 13:44:35 +00:00
asm-offsets.h
assembler.h arm64: force CONFIG_SMP=y and remove redundant #ifdefs 2015-07-27 11:08:40 +01:00
atomic_ll_sc.h arm64: make ll/sc __cmpxchg_case_##name asm consistent 2015-08-04 18:51:04 +01:00
atomic_lse.h arm64: lse: fix lse cmpxchg code indentation 2015-07-29 18:32:09 +01:00
atomic.h arm64: atomics: implement atomic{,64}_cmpxchg using cmpxchg 2015-07-27 15:28:53 +01:00
barrier.h locking, arch: use WRITE_ONCE()/READ_ONCE() in smp_store_release()/smp_load_acquire() 2015-08-03 10:59:30 +02:00
bitops.h
bitrev.h ARM: 8189/1: arm64:add bitrev.h file to support rbit instruction 2014-12-22 16:47:32 +00:00
boot.h arm64: use fixmap region for permanent FDT mapping 2015-06-02 16:31:33 +01:00
bug.h arm64/BUG: Use BRK instruction for generic BUG traps 2015-07-27 11:08:42 +01:00
cache.h arm64: Implement support for read-mostly sections 2014-12-03 10:19:35 +00:00
cacheflush.h arm64: kill flush_cache_all() 2015-05-19 15:27:42 +01:00
cachetype.h arm64: kernel: add support for cpu cache information 2015-01-15 11:55:07 +00:00
cmpxchg.h arm64: cmpxchg: truncate sub-word signed types before comparison 2015-07-30 20:16:53 +01:00
compat.h arm64: compat: Remove incorrect comment in compat_siginfo 2015-02-02 16:44:39 +00:00
compiler.h
cpu_ops.h ARM64: kernel: unify ACPI and DT cpus initialization 2015-05-19 16:09:29 +01:00
cpu.h arm64: sanity checks: add missing AArch32 registers 2015-01-07 11:40:58 +00:00
cpufeature.h arm64: lse: rename ARM64_CPU_FEAT_LSE_ATOMICS for consistency 2015-07-27 15:28:54 +01:00
cpuidle.h arm64: kernel: rename __cpu_suspend to keep it aligned with arm 2015-06-19 14:46:39 +01:00
cputype.h arm64: kernel: Move config_sctlr_el1 2015-07-27 11:08:41 +01:00
debug-monitors.h arm64: debug: rename enum debug_el to avoid symbol collision 2015-07-27 18:36:54 +01:00
device.h arm64: introduce is_device_dma_coherent 2014-12-04 12:41:49 +00:00
dma-mapping.h dma-mapping: consolidate dma_set_mask 2015-09-10 13:29:01 -07:00
dmi.h arm64: dmi: Add SMBIOS/DMI support 2014-11-05 09:03:25 +01:00
efi.h arm64/efi: move virtmap init to early initcall 2015-01-22 14:59:25 +00:00
elf.h mm: fold arch_randomize_brk into ARCH_HAS_ELF_RANDOMIZE 2015-04-14 16:49:05 -07:00
esr.h arm64/debug: Add missing #includes 2015-07-27 11:08:42 +01:00
exception.h arm64: Add __exception_irq_entry definition for function graph 2015-08-12 17:23:45 +01:00
exec.h
fb.h
fixmap.h arm64: Fix source code file path in comments 2015-08-24 10:18:11 +01:00
fpsimd.h
fpsimdmacros.h arm64: Avoid breakage caused by .altmacro in fpsimd save/restore macros 2015-01-29 17:24:39 +00:00
ftrace.h
futex.h arm64: atomics: prefetch the destination word for write prior to stxr 2015-07-27 15:28:53 +01:00
hardirq.h arm64: force CONFIG_SMP=y and remove redundant #ifdefs 2015-07-27 11:08:40 +01:00
hugetlb.h arm64: hugetlb: remove paragraph about writing to FSF 2015-07-27 11:08:40 +01:00
hw_breakpoint.h KVM: arm64: enable KVM_CAP_SET_GUEST_DEBUG 2015-07-21 12:50:43 +01:00
hwcap.h arm64: Add COMPAT_HWCAP_LPAE 2014-11-17 10:43:42 +00:00
hypervisor.h
insn.h arm64: insn: Add aarch64_{get,set}_branch_offset 2015-06-03 15:43:24 +01:00
io.h arm64 updates for 4.2, mostly refactoring/clean-up: 2015-06-24 10:02:15 -07:00
irq_work.h arm64: force CONFIG_SMP=y and remove redundant #ifdefs 2015-07-27 11:08:40 +01:00
irq.h irqchip: Add GICv2 specific ACPI boot support 2015-03-26 15:13:07 +00:00
irqflags.h
jump_label.h locking/static_keys: Add a new static_key interface 2015-08-03 11:34:15 +02:00
Kbuild mm: clean up per architecture MM hook header files 2015-07-17 16:39:53 -07:00
kgdb.h arm64: Fix typos in KGDB macros 2014-09-25 15:35:41 +01:00
kvm_arm.h arm64: KVM: Remove all traces of the ThumbEE registers 2015-09-17 13:13:26 +01:00
kvm_asm.h arm64: KVM: Remove all traces of the ThumbEE registers 2015-09-17 13:13:26 +01:00
kvm_coproc.h arm64: KVM: common infrastructure for handling AArch32 CP14/CP15 2014-07-11 04:57:44 -07:00
kvm_emulate.h Fairly small update, but there are some interesting new features. 2015-02-13 09:55:09 -08:00
kvm_host.h arm/arm64: KVM: arch_timer: Only schedule soft timer on vcpu_block 2015-10-22 23:01:42 +02:00
kvm_mmio.h KVM: arm/arm64: rework MMIO abort handling to use KVM MMIO bus 2015-03-30 17:07:19 +01:00
kvm_mmu.h arm64 updates for 4.1: 2015-04-16 13:58:29 -05:00
kvm_psci.h
linkage.h
lse.h arm64: lse: rename ARM64_CPU_FEAT_LSE_ATOMICS for consistency 2015-07-27 15:28:54 +01:00
memblock.h
memory.h libnvdimm for 4.3: 2015-09-08 14:35:59 -07:00
mmu_context.h arm64 updates for 4.1: 2015-04-16 13:58:29 -05:00
mmu.h arm64: remove dead code 2015-07-27 11:08:39 +01:00
module.h
neon.h
opcodes.h arm64: Add AArch32 instruction set condition code checks 2014-11-20 16:33:45 +00:00
page.h arm64 updates for 4.1: 2015-04-16 13:58:29 -05:00
pci.h ARM64 / ACPI: Introduce PCI stub functions for ACPI 2015-03-25 11:49:31 +00:00
percpu.h arm64: force CONFIG_SMP=y and remove redundant #ifdefs 2015-07-27 11:08:40 +01:00
perf_event.h arm64: perf: factor out callchain code 2015-07-27 11:08:39 +01:00
pgalloc.h arm64: expose number of page table levels on Kconfig level 2015-04-14 16:49:01 -07:00
pgtable-hwdef.h arm64: Add support for hardware updates of the access and dirty pte bits 2015-07-27 11:08:39 +01:00
pgtable-types.h arm64: expose number of page table levels on Kconfig level 2015-04-14 16:49:01 -07:00
pgtable.h arm64: pgtable: fix definition of pte_valid 2015-07-28 16:14:03 +01:00
pmu.h arm64: pmu: add support for interrupt-affinity property 2015-03-24 15:09:47 +00:00
proc-fns.h arm64: kill flush_cache_all() 2015-05-19 15:27:42 +01:00
processor.h arm64: kernel: Add support for Privileged Access Never 2015-07-27 11:08:41 +01:00
ptrace.h arm64: force CONFIG_SMP=y and remove redundant #ifdefs 2015-07-27 11:08:40 +01:00
seccomp.h arm64: add seccomp support 2014-11-28 10:24:59 +00:00
shmparam.h
signal32.h arm64: Use get_signal() signal_setup_done() 2014-08-06 12:56:16 +02:00
smp_plat.h arm64: remove dead-code depending on CONFIG_UP_LATE_INIT 2015-07-29 18:32:09 +01:00
smp.h arm64: force CONFIG_SMP=y and remove redundant #ifdefs 2015-07-27 11:08:40 +01:00
sparsemem.h arm64: mm: update max pa bits to 48 2014-08-19 20:23:02 +01:00
spinlock_types.h arm64: include linux/types.h in asm/spinlock_types.h 2015-07-27 11:09:34 +01:00
spinlock.h arm64: spinlock: fix ll/sc unlock on big-endian systems 2015-07-28 14:48:00 +01:00
stackprotector.h arm64: Add CONFIG_CC_STACKPROTECTOR 2014-07-09 12:23:48 +01:00
stacktrace.h
stat.h
string.h
suspend.h arm64: kernel: rename __cpu_suspend to keep it aligned with arm 2015-06-19 14:46:39 +01:00
sync_bitops.h
syscall.h arm64: Add audit support 2014-07-10 11:06:00 +01:00
sysreg.h arm64: kernel: Add support for Privileged Access Never 2015-07-27 11:08:41 +01:00
system_misc.h arm64: use private ratelimit state along with show_unhandled_signals 2015-06-19 16:26:15 +01:00
thread_info.h arm64: Remove signal translation and exec_domain 2015-04-12 20:58:24 +02:00
timex.h
tlb.h arm64: Use last level TLBI for user pte changes 2015-07-28 11:44:01 +01:00
tlbflush.h arm64: Use last level TLBI for user pte changes 2015-07-28 11:44:01 +01:00
topology.h arm64: force CONFIG_SMP=y and remove redundant #ifdefs 2015-07-27 11:08:40 +01:00
traps.h arm64: Add __exception_irq_entry definition for function graph 2015-08-12 17:23:45 +01:00
uaccess.h arm64: kernel: Add support for Privileged Access Never 2015-07-27 11:08:41 +01:00
unistd32.h arm64: fix implementation of mmap2 compat syscall 2015-03-19 10:43:51 +00:00
unistd.h arm64 updates for 3.20: 2015-02-11 18:03:54 -08:00
vdso_datapage.h
vdso.h
virt.h arm64: KVM: remove __kvm_hyp_code_{start,end} from hyp.S 2014-07-11 04:57:35 -07:00
word-at-a-time.h