From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1751097AbcGWEEp (ORCPT ); Sat, 23 Jul 2016 00:04:45 -0400 Received: from mail-vk0-f49.google.com ([209.85.213.49]:34588 "EHLO mail-vk0-f49.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1750774AbcGWEEn (ORCPT ); Sat, 23 Jul 2016 00:04:43 -0400 MIME-Version: 1.0 In-Reply-To: <1468469749-12636-1-git-send-email-ykk@rock-chips.com> References: <1468469704-12440-1-git-send-email-ykk@rock-chips.com> <1468469749-12636-1-git-send-email-ykk@rock-chips.com> From: Doug Anderson Date: Fri, 22 Jul 2016 21:04:41 -0700 X-Google-Sender-Auth: utGSyvvQ-94iOxcZu1qLnJguDU0 Message-ID: Subject: Re: [PATCH v4 2/4] drm/rockchip: add an common abstracted PSR driver To: Yakir Yang Cc: Mark Yao , Inki Dae , Jingoo Han , Heiko Stuebner , Javier Martinez Canillas , =?UTF-8?Q?St=C3=A9phane_Marchesin?= , Sean Paul , Tomasz Figa , David Airlie , Daniel Vetter , Thierry Reding , Krzysztof Kozlowski , Emil Velikov , Dan Carpenter , "linux-kernel@vger.kernel.org" , "dri-devel@lists.freedesktop.org" , linux-samsung-soc , "open list:ARM/Rockchip SoC..." Content-Type: text/plain; charset=UTF-8 Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Yakir, On Wed, Jul 13, 2016 at 9:15 PM, Yakir Yang wrote: > +static void psr_set_state(struct psr_drv *psr, enum psr_state state) > +{ > + mutex_lock(&psr->state_mutex); > + > + if (psr->state == state) { > + mutex_unlock(&psr->state_mutex); > + return; > + } > + > + psr->state = state; > + switch (state) { > + case PSR_ENABLE: > + psr->set(psr->encoder, true); > + break; > + > + case PSR_DISABLE: > + case PSR_FLUSH: > + psr->set(psr->encoder, false); > + break; > + }; > + > + mutex_unlock(&psr->state_mutex); > +} > + > +static void psr_flush_handler(unsigned long data) > +{ > + struct psr_drv *psr = (struct psr_drv *)data; > + > + if (!psr || psr->state != PSR_FLUSH) > + return; > + > + psr_set_state(psr, PSR_ENABLE); As mentioned in a separate thread, this is probably not OK. psr_set_state() grabs a mutex and that might sleep. ...but psr_flush_handler() is a timer. I'm nearly certain that timers can't sleep. I believe this is the source of "sleeping function called from invalid context" that I've seen at times. -Doug