[EMULATORS] arm_mptimer: Don't reload timer from timer event callback

On SMP host, we have per-host CPU active timer event list. When
we start timer event from __timer_block_reload(), the timer event
is scheduled on host CPU executing __timer_block_reload(). Currently,
if a per-VCPU timer block is programmed by Guest OS in auto-reload
mode then __timer_block_reload() is called upon every timer event
expirey hence timer event of the per-VCPU timer block will be always
scheduled on host CPU on which it was first started. This is very
problematic for SMP host because a VCPU will be moved from one host
CPU to another host CPU by load balancer and the timer block of the
VCPU will be stuck scheduling timer events on a particular host CPU.
This in-turn causes lot of contention in vmm_vcpu_irq and gic emulator
thereby also making the system unstable.

To solve this issue, we call __timer_block_reload() for a timer block
in auto-reload mode only when VCPU acknowledges timer interrupt by
writing to timer block interrupt status register.

This patch implements the above described fix in arm_mptimer for
making VExpress-A9x2 guest work reliably on VExpress-A9x4 host.

Signed-off-by: Anup Patel <anup@brainfault.org>