lkml.org 
[lkml]   [2014]   [Apr]   [15]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
Patch in this message
/
From
Subject[PATCH V1 Resend 3/5] tick-common: do additional checks in tick_check_preferred()
Date
We return false from tick_check_preferred() if newdev doesn't have ONESHOT
feature but curdev has, but we don't return true when newdev has ONESHOT and
curdev doesn't. Instead we go on, check ratings and other things in that case.

This patch tries to fix this by rewriting some portion of this code and adds
sufficient comments to make logic clear.

Signed-off-by: Viresh Kumar <viresh.kumar@linaro.org>
---
kernel/time/tick-common.c | 25 ++++++++++++++++++-------
1 file changed, 18 insertions(+), 7 deletions(-)

diff --git a/kernel/time/tick-common.c b/kernel/time/tick-common.c
index 69cab28..2f13889 100644
--- a/kernel/time/tick-common.c
+++ b/kernel/time/tick-common.c
@@ -252,18 +252,29 @@ static bool tick_check_percpu(struct clock_event_device *curdev,
static bool tick_check_preferred(struct clock_event_device *curdev,
struct clock_event_device *newdev)
{
- /* Prefer oneshot capable device */
- if (!(newdev->features & CLOCK_EVT_FEAT_ONESHOT)) {
- if (curdev && (curdev->features & CLOCK_EVT_FEAT_ONESHOT))
- return false;
- }
+ if (!curdev)
+ return true;
+
+ /*
+ * Prefer oneshot capable device.
+ * return values based on if ONESHOT is available or not:
+ *
+ * curdev newdev operation
+ * 0 0 check priority
+ * 0 1 return true
+ * 1 0 return false
+ * 1 1 check priority
+ */
+
+ if ((newdev->features & CLOCK_EVT_FEAT_ONESHOT) ^
+ (curdev->features & CLOCK_EVT_FEAT_ONESHOT))
+ return newdev->features & CLOCK_EVT_FEAT_ONESHOT;

/*
* Use the higher rated one, but prefer a CPU local device with a lower
* rating than a non-CPU local device
*/
- return !curdev ||
- newdev->rating > curdev->rating ||
+ return newdev->rating > curdev->rating ||
!cpumask_equal(curdev->cpumask, newdev->cpumask);
}

--
1.7.12.rc2.18.g61b472e


\
 
 \ /
  Last update: 2014-04-15 07:41    [W:0.069 / U:5.068 seconds]
©2003-2018 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site