Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1753057AbcDVN1H (ORCPT ); Fri, 22 Apr 2016 09:27:07 -0400 Received: from mail-oi0-f42.google.com ([209.85.218.42]:32779 "EHLO mail-oi0-f42.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1752593AbcDVN1F (ORCPT ); Fri, 22 Apr 2016 09:27:05 -0400 MIME-Version: 1.0 X-Originating-IP: [2a02:168:56b5:0:ac27:b86c:7764:9429] In-Reply-To: <1406742127-27654-12-git-send-email-benjamin.gaignard@linaro.org> References: <1406742127-27654-1-git-send-email-benjamin.gaignard@linaro.org> <1406742127-27654-12-git-send-email-benjamin.gaignard@linaro.org> Date: Fri, 22 Apr 2016 15:27:03 +0200 X-Google-Sender-Auth: _bn7tARcxgyRBtsV5FKpMAzQ1oE Message-ID: Subject: Re: [PATCH v8 11/11] drm: sti: Add DRM driver itself From: Daniel Vetter To: Benjamin Gaignard Cc: dri-devel , "linaro-mm-sig@lists.linaro.org" , Linux Kernel Mailing List , Dave Airlie Content-Type: text/plain; charset=UTF-8 Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Length: 1970 Lines: 61 On Wed, Jul 30, 2014 at 7:42 PM, Benjamin Gaignard wrote: > +static int sti_drm_crtc_page_flip(struct drm_crtc *crtc, > + struct drm_framebuffer *fb, > + struct drm_pending_vblank_event *event, > + uint32_t page_flip_flags) > +{ > + struct drm_device *drm_dev = crtc->dev; > + struct drm_framebuffer *old_fb; > + struct sti_mixer *mixer = to_sti_mixer(crtc); > + unsigned long flags; > + int ret; > + > + DRM_DEBUG_KMS("fb %d --> fb %d\n", > + crtc->primary->fb->base.id, fb->base.id); > + > + mutex_lock(&drm_dev->struct_mutex); struct_mutex locking here is pure cargo-cult. Please remove asap. -Daniel > + > + old_fb = crtc->primary->fb; > + crtc->primary->fb = fb; > + ret = sti_drm_crtc_mode_set_base(crtc, crtc->x, crtc->y, old_fb); > + if (ret) { > + DRM_ERROR("failed\n"); > + crtc->primary->fb = old_fb; > + goto out; > + } > + > + if (event) { > + event->pipe = mixer->id; > + > + ret = drm_vblank_get(drm_dev, event->pipe); > + if (ret) { > + DRM_ERROR("Cannot get vblank\n"); > + goto out; > + } > + > + spin_lock_irqsave(&drm_dev->event_lock, flags); > + if (mixer->pending_event) { > + drm_vblank_put(drm_dev, event->pipe); > + ret = -EBUSY; > + } else { > + mixer->pending_event = event; > + } > + spin_unlock_irqrestore(&drm_dev->event_lock, flags); > + } > +out: > + mutex_unlock(&drm_dev->struct_mutex); > + return ret; > +} -- Daniel Vetter Software Engineer, Intel Corporation +41 (0) 79 365 57 48 - http://blog.ffwll.ch