On 16 April 2014 00:00, Thomas Gleixner tglx@linutronix.de wrote:
On Tue, 15 Apr 2014, Viresh Kumar wrote:
If 'curdev' passed to tick_check_preferred() is the current clock_event_device then these two checks look exactly same, because td->mode is set to TICKDEV_MODE_ONESHOT only when the event device has ONESHOT feature.
if (curdev && (curdev->features & CLOCK_EVT_FEAT_ONESHOT)) return false; if (tick_oneshot_mode_active()) return false;
Now left the case where 'curdev' is not the current clock_event_device. This can happen from the sequence started from clockevents_replace(). Here we are trying to find the best possible device that we should choose. And so even in this case we don't need the above check as we aren't really worried about the current device.
Wrong. If curdev is NULL, you might select a device w/o ONESHOT if the system is in oneshot mode. Go figure.
Okay, so the logs must have another case where curdev is NULL. But codewise we are already taking care of that here:
return !curdev || newdev->rating > curdev->rating || !cpumask_equal(curdev->cpumask, newdev->cpumask);
And so this patch wouldn't harm. And this is preserved in the next patch (3/5) as well, which adds checks for other cases as well.