From patchwork Mon Sep 28 19:42:40 2015 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Daniel Vetter X-Patchwork-Id: 7279641 Return-Path: X-Original-To: patchwork-dri-devel@patchwork.kernel.org Delivered-To: patchwork-parsemail@patchwork1.web.kernel.org Received: from mail.kernel.org (mail.kernel.org [198.145.29.136]) by patchwork1.web.kernel.org (Postfix) with ESMTP id 2515A9F39B for ; Mon, 28 Sep 2015 19:39:58 +0000 (UTC) Received: from mail.kernel.org (localhost [127.0.0.1]) by mail.kernel.org (Postfix) with ESMTP id 46E6920755 for ; Mon, 28 Sep 2015 19:39:57 +0000 (UTC) Received: from gabe.freedesktop.org (gabe.freedesktop.org [131.252.210.177]) by mail.kernel.org (Postfix) with ESMTP id 46AFD2076C for ; Mon, 28 Sep 2015 19:39:56 +0000 (UTC) Received: from gabe.freedesktop.org (localhost [127.0.0.1]) by gabe.freedesktop.org (Postfix) with ESMTP id 441CE6EA3A; Mon, 28 Sep 2015 12:39:54 -0700 (PDT) X-Original-To: dri-devel@lists.freedesktop.org Delivered-To: dri-devel@lists.freedesktop.org Received: from mail-wi0-f179.google.com (mail-wi0-f179.google.com [209.85.212.179]) by gabe.freedesktop.org (Postfix) with ESMTPS id 5D8156EA3A for ; Mon, 28 Sep 2015 12:39:52 -0700 (PDT) Received: by wiclk2 with SMTP id lk2so116577246wic.1 for ; Mon, 28 Sep 2015 12:39:50 -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:in-reply-to:references; bh=hby63/YylLuHTY2TA/AATyTdnWCqJ7DW/QMU0jzWVC0=; b=XUdGzsgNoAytny3PFwDWWDMoGph186dTA9xDneiB6KbXspr7DflWI3i9dkS44yfImz 3lME9NetiCe4sV+edUbg141N7v/GrZNCWO3DethjHNeDSULHVcOlPFB/FtNyLYODzNZD O6gUjlijmYS6j28Ht+RR8mv1ZDmx5dL8UG67A= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20130820; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references; bh=hby63/YylLuHTY2TA/AATyTdnWCqJ7DW/QMU0jzWVC0=; b=O9mweEFh/raz83Z544OrX1efHfu+hu7JZXEdGLoZM0lIJ9iuYH6QDBRrCY5Tmnztwj U1xjkCXy1diNjKLYQjIPARXck5sOIUrW0Ad5lCuETQ+QVKCI2WxVU5jgfwQeCvPI+ChB AofuN7spCIFXqZIJZJurkgK3R2Vji0n26WPx/1sk1YPR9Ul0hrzmMBpUtoZrSvzE3A9k ySJvRyOwYexVJOphSfHEd7VIvty/ZJwnD4nLBtg6d+FiZGCbUnh1Fp29BDr9BPKDOpQI QJknRFsKSx6LrXjbNgcwMej7tpncxH3EmdOyeZzYkLS7+dI/fozB2yAkYUbrgQb9/JrD qXVg== X-Gm-Message-State: ALoCoQnRdGTquCs6UrwwOmJ2LJLfiYYQKQNNvN4O/MHmqKBKAEzRADkCYiukjOWSsQwHwHDOlzpZ X-Received: by 10.180.8.132 with SMTP id r4mr22071084wia.70.1443469190737; Mon, 28 Sep 2015 12:39:50 -0700 (PDT) Received: from phenom.ffwll.local (212-51-149-109.fiber7.init7.net. [212.51.149.109]) by smtp.gmail.com with ESMTPSA id go2sm19888833wib.20.2015.09.28.12.39.49 (version=TLS1_2 cipher=ECDHE-RSA-AES128-SHA bits=128/128); Mon, 28 Sep 2015 12:39:49 -0700 (PDT) From: Daniel Vetter To: DRI Development Subject: [PATCH] drm: Enforce unlocked ioctl operation for kms driver ioctls Date: Mon, 28 Sep 2015 21:42:40 +0200 Message-Id: <1443469360-17902-1-git-send-email-daniel.vetter@ffwll.ch> X-Mailer: git-send-email 2.5.1 In-Reply-To: <1441713391-24732-9-git-send-email-daniel.vetter@ffwll.ch> References: <1441713391-24732-9-git-send-email-daniel.vetter@ffwll.ch> Cc: Daniel Vetter , Daniel Vetter , Intel Graphics Development X-BeenThere: dri-devel@lists.freedesktop.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: Direct Rendering Infrastructure - Development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , MIME-Version: 1.0 Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" X-Spam-Status: No, score=-4.1 required=5.0 tests=BAYES_00,DKIM_SIGNED, RCVD_IN_DNSWL_MED, T_DKIM_INVALID, T_RP_MATCHES_RCVD, 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 With the prep patches for i915 all kms drivers either have DRM_UNLOCKED on all their ioctls. Or the ioctl always directly returns with an invariant return value when in modeset mode. But that's only the case for i915 and radeon. The drm core ioctls are unfortunately too much a mess still to dare this. Follow-up patches will remove DRM_UNLOCKED from all kms drivers to prove that this is indeed the case. Also update the documentation. v2: Really only do this for driver ioctls, spotted by David Herrmann. And drop spurious whitespace change. Cc: David Herrmann Signed-off-by: Daniel Vetter --- Documentation/DocBook/drm.tmpl | 4 +++- drivers/gpu/drm/drm_ioctl.c | 10 ++++++++-- 2 files changed, 11 insertions(+), 3 deletions(-) diff --git a/Documentation/DocBook/drm.tmpl b/Documentation/DocBook/drm.tmpl index 8c654866e1a2..5395cde6905e 100644 --- a/Documentation/DocBook/drm.tmpl +++ b/Documentation/DocBook/drm.tmpl @@ -3747,7 +3747,9 @@ int num_ioctls; DRM_UNLOCKED - The ioctl handler will be called without locking - the DRM global mutex + the DRM global mutex. This is the enforced default for kms drivers + (i.e. using the DRIVER_MODESET flag) and hence shouldn't be used + any more for new drivers. diff --git a/drivers/gpu/drm/drm_ioctl.c b/drivers/gpu/drm/drm_ioctl.c index 530c501422fd..8ce2a0c59116 100644 --- a/drivers/gpu/drm/drm_ioctl.c +++ b/drivers/gpu/drm/drm_ioctl.c @@ -691,13 +691,16 @@ long drm_ioctl(struct file *filp, char stack_kdata[128]; char *kdata = NULL; unsigned int usize, asize, drv_size; + bool is_driver_ioctl; dev = file_priv->minor->dev; if (drm_device_is_unplugged(dev)) return -ENODEV; - if (nr >= DRM_COMMAND_BASE && nr < DRM_COMMAND_END) { + is_driver_ioctl = nr >= DRM_COMMAND_BASE && nr < DRM_COMMAND_END; + + if (is_driver_ioctl) { /* driver ioctl */ if (nr - DRM_COMMAND_BASE >= dev->driver->num_ioctls) goto err_i1; @@ -756,7 +759,10 @@ long drm_ioctl(struct file *filp, memset(kdata, 0, usize); } - if (ioctl->flags & DRM_UNLOCKED) + /* Enforce sane locking for kms driver ioctls. Core ioctls are + * too messy still. */ + if ((drm_core_check_feature(dev, DRIVER_MODESET) && is_driver_ioctl) || + (ioctl->flags & DRM_UNLOCKED)) retcode = func(dev, kdata, file_priv); else { mutex_lock(&drm_global_mutex);