We don't need 'broadcast' to be set to 'zero or one', but to 'zero or non-zero'
and so the extra operation to convert it to 'zero or one' can be skipped.
Also change type of 'broadcast' to unsigned int, i.e. type of
drv->states[*].flags.
Signed-off-by: Viresh Kumar <viresh.kumar(a)linaro.org>
---
Rebased over: 3.16-rc2.
kernel/sched/idle.c | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/kernel/sched/idle.c b/kernel/sched/idle.c
index cf009fb..9f1608f 100644
--- a/kernel/sched/idle.c
+++ b/kernel/sched/idle.c
@@ -79,7 +79,7 @@ static void cpuidle_idle_call(void)
struct cpuidle_device *dev = __this_cpu_read(cpuidle_devices);
struct cpuidle_driver *drv = cpuidle_get_cpu_driver(dev);
int next_state, entered_state;
- bool broadcast;
+ unsigned int broadcast;
/*
* Check if the idle task must be rescheduled. If it is the
@@ -135,7 +135,7 @@ use_default:
goto exit_idle;
}
- broadcast = !!(drv->states[next_state].flags & CPUIDLE_FLAG_TIMER_STOP);
+ broadcast = drv->states[next_state].flags & CPUIDLE_FLAG_TIMER_STOP;
/*
* Tell the time framework to switch to a broadcast timer
--
2.0.0.rc2
This is a note to let you know that I have just added a patch titled
hrtimer: Set expiry time before switch_hrtimer_base()
to the linux-3.8.y-queue branch of the 3.8.y.z extended stable tree
which can be found at:
http://kernel.ubuntu.com/git?p=ubuntu/linux.git;a=shortlog;h=refs/heads/lin…
This patch is scheduled to be released in version 3.8.13.25.
If you, or anyone else, feels it should not be added to this tree, please
reply to this email.
For more information about the 3.8.y.z tree, see
https://wiki.ubuntu.com/Kernel/Dev/ExtendedStable
Thanks.
-Kamal
------
>From aa47826370c46dcfda97623f9ec636228401a869 Mon Sep 17 00:00:00 2001
From: Viresh Kumar <viresh.kumar(a)linaro.org>
Date: Mon, 12 May 2014 13:42:29 +0530
Subject: [PATCH 13/66] hrtimer: Set expiry time before switch_hrtimer_base()
commit 84ea7fe37908254c3bd90910921f6e1045c1747a upstream.
switch_hrtimer_base() calls hrtimer_check_target() which ensures that
we do not migrate a timer to a remote cpu if the timer expires before
the current programmed expiry time on that remote cpu.
But __hrtimer_start_range_ns() calls switch_hrtimer_base() before the
new expiry time is set. So the sanity check in hrtimer_check_target()
is operating on stale or even uninitialized data.
Update expiry time before calling switch_hrtimer_base().
[ tglx: Rewrote changelog once again ]
Signed-off-by: Viresh Kumar <viresh.kumar(a)linaro.org>
Cc: linaro-kernel(a)lists.linaro.org
Cc: linaro-networking(a)linaro.org
Cc: fweisbec(a)gmail.com
Cc: arvind.chauhan(a)arm.com
Link: http://lkml.kernel.org/r/81999e148745fc51bbcd0615823fbab9b2e87e23.139988225…
Signed-off-by: Thomas Gleixner <tglx(a)linutronix.de>
Signed-off-by: Kamal Mostafa <kamal(a)canonical.com>
---
kernel/hrtimer.c | 8 ++++----
1 file changed, 4 insertions(+), 4 deletions(-)
diff --git a/kernel/hrtimer.c b/kernel/hrtimer.c
index 9873816..20e88af 100644
--- a/kernel/hrtimer.c
+++ b/kernel/hrtimer.c
@@ -980,11 +980,8 @@ int __hrtimer_start_range_ns(struct hrtimer *timer, ktime_t tim,
/* Remove an active timer from the queue: */
ret = remove_hrtimer(timer, base);
- /* Switch the timer base, if necessary: */
- new_base = switch_hrtimer_base(timer, base, mode & HRTIMER_MODE_PINNED);
-
if (mode & HRTIMER_MODE_REL) {
- tim = ktime_add_safe(tim, new_base->get_time());
+ tim = ktime_add_safe(tim, base->get_time());
/*
* CONFIG_TIME_LOW_RES is a temporary way for architectures
* to signal that they simply return xtime in
@@ -999,6 +996,9 @@ int __hrtimer_start_range_ns(struct hrtimer *timer, ktime_t tim,
hrtimer_set_expires_range_ns(timer, tim, delta_ns);
+ /* Switch the timer base, if necessary: */
+ new_base = switch_hrtimer_base(timer, base, mode & HRTIMER_MODE_PINNED);
+
timer_stats_hrtimer_set_start_info(timer);
leftmost = enqueue_hrtimer(timer, new_base);
--
1.9.1
Hi Christoffer, Marc,
Could you please look at updated ARM BE KVM series. We worked
separately on specific patches, I believe now they should look
OK.
Changes since previous V3 version of series [1]:
o Updated Review-by Acked-by tags where appropriate
o 'ARM: KVM: __kvm_vcpu_run function return result fix in BE case'
patch changed __ARMEB__ to CONFIG_CPU_ENDIAN_BE8 as Marc suggested
o 'ARM: KVM: one_reg coproc set and get BE fixes' patch was
siginificantly reworked based on separate thread discussion with
Christoffer - In short summry now we fix only oddball places where
reg_[from|to]_user function is used in case target variable
mismatching register size
o 'ARM64: KVM: fix vgic_bitmap_get_reg function for BE 64bit case'
incorporated Christoffer's review comments about code comments
(spelling, grammar, etc)
o 'ARM64: KVM: set and get of sys registers in BE case' changed
patch siginificantly based on separate email thread feedback from
Christoffer and Marc - now patch just removes comment about
reg_[to|form]_user being little endian, since it handles only
64 bit register size current code is endian agnostic.
o 'ARM64: KVM: fix big endian issue in access_vm_reg for 32bit guest'
incorporoated Christoffer's review comments - two macros
vcpu_cp15_64_high and vcpu_cp15_64_low now introduced which
defined differently between BE and LE cases
Series were tested on top of v3.15. On V7 4 combinations, BE/LE
host x BE/LE guest, were tested with TC2. On V8 8 combinations,
BE/LE host x BE/LE guest x 32/64 bit guest, were tested on
Fast models.
Thanks,
Victor
[1] http://lists.infradead.org/pipermail/linux-arm-kernel/2014-May/255849.html
Victor Kamensky (14):
ARM: KVM: switch hypervisor into BE mode in case of BE host
ARM: KVM: fix vgic V7 assembler code to work in BE image
ARM: KVM: handle 64bit values passed to mrcc or from mcrr instructions
in BE case
ARM: KVM: __kvm_vcpu_run function return result fix in BE case
ARM: KVM: vgic mmio should hold data as LE bytes array in BE case
ARM: KVM: MMIO support BE host running LE code
ARM: KVM: one_reg coproc set and get BE fixes
ARM: KVM: enable KVM in Kconfig on big-endian systems
ARM64: KVM: MMIO support BE host running LE code
ARM64: KVM: store kvm_vcpu_fault_info est_el2 as word
ARM64: KVM: fix vgic_bitmap_get_reg function for BE 64bit case
ARM64: KVM: vgic_elrsr and vgic_eisr need to be byteswapped in BE case
ARM64: KVM: set and get of sys registers in BE case
ARM64: KVM: fix big endian issue in access_vm_reg for 32bit guest
arch/arm/include/asm/kvm_asm.h | 18 ++++++++
arch/arm/include/asm/kvm_emulate.h | 22 ++++++++--
arch/arm/kvm/Kconfig | 2 +-
arch/arm/kvm/coproc.c | 84 ++++++++++++++++++++++++++++++++----
arch/arm/kvm/init.S | 7 ++-
arch/arm/kvm/interrupts.S | 9 +++-
arch/arm/kvm/interrupts_head.S | 20 +++++++--
arch/arm64/include/asm/kvm_emulate.h | 22 ++++++++++
arch/arm64/include/asm/kvm_host.h | 8 ++++
arch/arm64/kvm/hyp.S | 9 +++-
arch/arm64/kvm/sys_regs.c | 10 ++---
virt/kvm/arm/vgic.c | 28 ++++++++++--
12 files changed, 207 insertions(+), 32 deletions(-)
--
1.8.1.4