Messages in this thread Patch in this message | | | Date | Fri, 6 Feb 2015 12:50:51 +0100 | From | Peter Zijlstra <> | Subject | Re: Linux 3.19-rc5 |
| |
On Thu, Feb 05, 2015 at 10:14:36PM +0100, Bruno Prémont wrote: > The loop is now replaced by a single WARN() trace - I guess expected:
> From my reading of the thread fixing pccardd/sched TASK_RUNNING usage/check > is another issue left for the future.
Yeah, something like the below will make it go away -- under the assumption that that comment is actually correct, I don't know, the pcmcia people should probably write a better comment :/
Also, set_current_state(TASK_RUNNING) is almost always pointless, nobody cares about that barrier, so make it go away.
--- drivers/pcmcia/cs.c | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-)
diff --git a/drivers/pcmcia/cs.c b/drivers/pcmcia/cs.c index 5292db69c426..5678e161a17d 100644 --- a/drivers/pcmcia/cs.c +++ b/drivers/pcmcia/cs.c @@ -635,6 +635,12 @@ static int pccardd(void *__skt) skt->sysfs_events = 0; spin_unlock_irqrestore(&skt->thread_lock, flags); + /* + * Supposedly this is a rarely contended mutex and + * sleeping is therefore unlikely, the occasional + * extra loop iteration is harmless. + */ + sched_annotate_sleep(); mutex_lock(&skt->skt_mutex); if (events & SS_DETECT) socket_detect_change(skt); @@ -679,7 +685,7 @@ static int pccardd(void *__skt) try_to_freeze(); } /* make sure we are running before we exit */ - set_current_state(TASK_RUNNING); + __set_current_state(TASK_RUNNING); /* shut down socket, if a device is still present */ if (skt->state & SOCKET_PRESENT) {
| |