On Thu, Mar 06, 2014 at 06:45:31PM +0100, Jiri Bohac wrote: > Hi, > > I'm looking at the printk call in > __timekeeping_inject_sleeptime(), introduced in cb5de2f8 > (time: Catch invalid timespec sleep values in __timekeeping_inject_sleeptime) > > Is it safe to call printk() while timekeeper_seq is held for > writing? > > What about this call chain? > printk > vprintk_emit > console_unlock > up(&console_sem) > __up > wake_up_process > try_to_wake_up > ttwu_do_activate > ttwu_activate > activate_task > enqueue_task > enqueue_task_fair > hrtick_update > hrtick_start_fair > hrtick_start_fair > get_time > ktime_get > --> endless loop on > read_seqcount_retry(&timekeeper_seq, ...) > > > It looks like an unlikely but possible deadlock. > Or did I overlook something?
So HRTICK is disabled by default; but yes this is a problem when you enable it. The problem is that our timers are in an entirely different clock base than our (scheduler) clocks. On SNB+ hardware with TSC deadline timers we have the same clockbase I suppose but I'm not sure that's something we can (and want) to rely on. Now, I've long had the idea to mess up the hrtimer code to optimize this particular timer, but I'm not entirely sure we can get around having to use the timerkeeper_seq thing, we simply have to get into timer clock space :/ -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to [email protected] More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/

