From patchwork Wed Jul 10 12:11:45 2013 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Daniel Vetter X-Patchwork-Id: 2825672 Return-Path: X-Original-To: patchwork-dri-devel@patchwork.kernel.org Delivered-To: patchwork-parsemail@patchwork2.web.kernel.org Received: from mail.kernel.org (mail.kernel.org [198.145.19.201]) by patchwork2.web.kernel.org (Postfix) with ESMTP id CF46AC0AB2 for ; Wed, 10 Jul 2013 12:22:44 +0000 (UTC) Received: from mail.kernel.org (localhost [127.0.0.1]) by mail.kernel.org (Postfix) with ESMTP id 0B5D8201C3 for ; Wed, 10 Jul 2013 12:22:39 +0000 (UTC) Received: from gabe.freedesktop.org (gabe.freedesktop.org [131.252.210.177]) by mail.kernel.org (Postfix) with ESMTP id 6D467201B8 for ; Wed, 10 Jul 2013 12:22:37 +0000 (UTC) Received: from gabe.freedesktop.org (localhost [127.0.0.1]) by gabe.freedesktop.org (Postfix) with ESMTP id 35349E607A for ; Wed, 10 Jul 2013 05:22:37 -0700 (PDT) X-Original-To: dri-devel@lists.freedesktop.org Delivered-To: dri-devel@lists.freedesktop.org Received: from mail-ea0-f171.google.com (mail-ea0-f171.google.com [209.85.215.171]) by gabe.freedesktop.org (Postfix) with ESMTP id 37BBDE5F9A for ; Wed, 10 Jul 2013 05:12:36 -0700 (PDT) Received: by mail-ea0-f171.google.com with SMTP id m14so4900300eaj.2 for ; Wed, 10 Jul 2013 05:12:35 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=ffwll.ch; s=google; h=from:to:cc:subject:date:message-id:x-mailer:in-reply-to:references; bh=MIlFR181iz+Xuh3szFpysFFJW90CqwKjtmz4YRr2c0Q=; b=AU1MF7zemQG513NPgJ8U19RNTzghA4weXw1z9ZM7GaztDJMYoT3BOjdmh7JYYOk/ey YQhzMwDlnmKQqJXgMF+cFn20XzvDxtNTVOw1hBBBFX2k2KeqpBE62q0/StLF9e+kmfhe V2g1Bj6zd7s7FDMbrQmBmRV28flzgU2vs2y3E= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20120113; h=from:to:cc:subject:date:message-id:x-mailer:in-reply-to:references :x-gm-message-state; bh=MIlFR181iz+Xuh3szFpysFFJW90CqwKjtmz4YRr2c0Q=; b=i0pRC9k6cAo9oZ0ufs9VcRBJPds5Kpp/X7DvpFqu9i7Sw9cDx2Cj6QzdoIaoJg123w 9VSc6qeQpXjGvYIwSb2K3FLGzdnE6OiuXhh63tOUJZ0beRgjQ2nN6YAT1SWkveHeht9x lXbggWBBFgVAilpg01Ka+nranan2SBppFFz5Y3qQlaS/Ya/j41sFNlOUv3TBbzYNSuFE V8Pl6HumRmqUttMCEsxnIwpc6EP5Ny/5jUff2IHcWKqQWDywjGw49pws4wXWvigoHzkJ QZ8qK8ix//Jv6opqB1I0TDRxZAf1/kXkJtjkSD/dudWfdltIWdGBMLLD3SfQp9OCWiVl P5qQ== X-Received: by 10.14.241.136 with SMTP id g8mr35609461eer.104.1373458355527; Wed, 10 Jul 2013 05:12:35 -0700 (PDT) Received: from phenom.ffwll.local (178-83-130-250.dynamic.hispeed.ch. [178.83.130.250]) by mx.google.com with ESMTPSA id i2sm59527012eeu.4.2013.07.10.05.12.33 for (version=TLSv1.2 cipher=ECDHE-RSA-RC4-SHA bits=128/128); Wed, 10 Jul 2013 05:12:34 -0700 (PDT) From: Daniel Vetter To: DRI Development Subject: [PATCH 11/39] drm/imx: kill firstopen callback Date: Wed, 10 Jul 2013 14:11:45 +0200 Message-Id: <1373458333-5988-12-git-send-email-daniel.vetter@ffwll.ch> X-Mailer: git-send-email 1.8.3.2 In-Reply-To: <1373458333-5988-1-git-send-email-daniel.vetter@ffwll.ch> References: <1373458333-5988-1-git-send-email-daniel.vetter@ffwll.ch> X-Gm-Message-State: ALoCoQnb5lBdAptONSsDP3yTJQZ41SckJvHwsI3MY3tvSu/APmbGqDEl6nvbvsyuJ6hHKQumTogW Cc: Daniel Vetter , Greg Kroah-Hartman X-BeenThere: dri-devel@lists.freedesktop.org X-Mailman-Version: 2.1.13 Precedence: list List-Id: Direct Rendering Infrastructure - Development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , MIME-Version: 1.0 Sender: dri-devel-bounces+patchwork-dri-devel=patchwork.kernel.org@lists.freedesktop.org Errors-To: dri-devel-bounces+patchwork-dri-devel=patchwork.kernel.org@lists.freedesktop.org X-Spam-Status: No, score=-4.4 required=5.0 tests=BAYES_00,DKIM_SIGNED, RCVD_IN_DNSWL_MED,RP_MATCHES_RCVD,T_DKIM_INVALID,UNPARSEABLE_RELAY autolearn=unavailable version=3.3.1 X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on mail.kernel.org X-Virus-Scanned: ClamAV using ClamSMTP This thing seems to do some kind of delayed setup. Really, real kms drivers shouldn't do that at all. Either stuff needs to be dynamically hotplugged or the driver setup sequence needs to be fixed. This patch here just moves the setup at the very end of the driver load callback, with the locking adjusted accordingly. v2: Also move the corresponding put from ->lastclose to ->unload. Cc: Sascha Hauer Cc: Greg Kroah-Hartman Signed-off-by: Daniel Vetter --- drivers/staging/imx-drm/imx-drm-core.c | 20 +++++--------------- 1 file changed, 5 insertions(+), 15 deletions(-) diff --git a/drivers/staging/imx-drm/imx-drm-core.c b/drivers/staging/imx-drm/imx-drm-core.c index 6455305..70f9650 100644 --- a/drivers/staging/imx-drm/imx-drm-core.c +++ b/drivers/staging/imx-drm/imx-drm-core.c @@ -69,28 +69,20 @@ struct imx_drm_connector { struct module *owner; }; -static int imx_drm_driver_firstopen(struct drm_device *drm) -{ - if (!imx_drm_device_get()) - return -EINVAL; - - return 0; -} - static void imx_drm_driver_lastclose(struct drm_device *drm) { struct imx_drm_device *imxdrm = drm->dev_private; if (imxdrm->fbhelper) drm_fbdev_cma_restore_mode(imxdrm->fbhelper); - - imx_drm_device_put(); } static int imx_drm_driver_unload(struct drm_device *drm) { struct imx_drm_device *imxdrm = drm->dev_private; + imx_drm_device_put(); + drm_mode_config_cleanup(imxdrm->drm); drm_kms_helper_poll_fini(imxdrm->drm); @@ -226,8 +218,6 @@ struct drm_device *imx_drm_device_get(void) struct imx_drm_connector *con; struct imx_drm_crtc *crtc; - mutex_lock(&imxdrm->mutex); - list_for_each_entry(enc, &imxdrm->encoder_list, list) { if (!try_module_get(enc->owner)) { dev_err(imxdrm->dev, "could not get module %s\n", @@ -254,8 +244,6 @@ struct drm_device *imx_drm_device_get(void) imxdrm->references++; - mutex_unlock(&imxdrm->mutex); - return imxdrm->drm; unwind_crtc: @@ -447,6 +435,9 @@ static int imx_drm_driver_load(struct drm_device *drm, unsigned long flags) */ imxdrm->drm->vblank_disable_allowed = 1; + if (!imx_drm_device_get()) + ret = -EINVAL; + ret = 0; err_init: @@ -794,7 +785,6 @@ static struct drm_driver imx_drm_driver = { .driver_features = DRIVER_MODESET | DRIVER_GEM, .load = imx_drm_driver_load, .unload = imx_drm_driver_unload, - .firstopen = imx_drm_driver_firstopen, .lastclose = imx_drm_driver_lastclose, .gem_free_object = drm_gem_cma_free_object, .gem_vm_ops = &drm_gem_cma_vm_ops,