From patchwork Tue Jun 14 18:50:58 2016 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Daniel Vetter X-Patchwork-Id: 9176503 Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork.web.codeaurora.org (Postfix) with ESMTP id 8A3B660772 for ; Tue, 14 Jun 2016 18:51:42 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 72B112793B for ; Tue, 14 Jun 2016 18:51:42 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 678DE2824A; Tue, 14 Jun 2016 18:51:42 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-4.1 required=2.0 tests=BAYES_00,DKIM_SIGNED, RCVD_IN_DNSWL_MED,T_DKIM_INVALID autolearn=ham version=3.3.1 Received: from gabe.freedesktop.org (gabe.freedesktop.org [131.252.210.177]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id E63232793B for ; Tue, 14 Jun 2016 18:51:41 +0000 (UTC) Received: from gabe.freedesktop.org (localhost [127.0.0.1]) by gabe.freedesktop.org (Postfix) with ESMTP id 8B1736E805; Tue, 14 Jun 2016 18:51:24 +0000 (UTC) X-Original-To: intel-gfx@lists.freedesktop.org Delivered-To: intel-gfx@lists.freedesktop.org Received: from mail-wm0-x243.google.com (mail-wm0-x243.google.com [IPv6:2a00:1450:400c:c09::243]) by gabe.freedesktop.org (Postfix) with ESMTPS id A75696E800 for ; Tue, 14 Jun 2016 18:51:21 +0000 (UTC) Received: by mail-wm0-x243.google.com with SMTP id r5so647358wmr.0 for ; Tue, 14 Jun 2016 11:51:21 -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=0usTn7bbUoF4WBzDSoVeUz0ssC0m2d3IdkmvKyN1Ha8=; b=ZS68SzyEB3siTnGOrNZNdxN5A7oG3ikHlx3qXZdeMSiGXh/6PlULtX2IUmLq47gfKk pHp401Yxlt9d8Q6UPpK3alavc+tIYYZ2vKmLyZTNbMJqshNNW84pL7RbdfnBm4XRAXun 9KOqj7i2iXJrTGAa9o6DQ09fyfmBONMooljiM= 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=0usTn7bbUoF4WBzDSoVeUz0ssC0m2d3IdkmvKyN1Ha8=; b=jvr7g8jr49SnZZZLoMIoqSszxI+GzVwv3TBXLe7/IOguRZENENui7xA3pqTiqE6x5L 5CVqQkpR9J0tHHQZOJWa9/pv9r4eQ7qXLt05UBajpSwRdUu0RAL3tT+o+1lFJcUD8zMM Pz6AFD8veEWinNMZaWMB/MufVBB39cb8aMe1vCzUj5FnqWPVKno05n8aHku+qeaMqMUV wUCFZ7LsmnQyqOfH61SSeZE/OVacO68+YzcLs+G39XPIkFh4o8ZfgnD+d1jSjb5UYbto 6WjWgQVn69rH42diO/sEJwbfSz+3Mga8DX42XABy6AMluiEJEckS2VybPlxdRZzn63Rr mlzw== X-Gm-Message-State: ALyK8tJxCGt6EWzc5KVpuHtf1T/oSCz4Vh7zL9sfgUovfjzQ8zYd5QU7j2uZpFwWcnehTg== X-Received: by 10.194.145.244 with SMTP id sx20mr8612247wjb.169.1465930279637; Tue, 14 Jun 2016 11:51:19 -0700 (PDT) Received: from phenom.ffwll.local ([2a02:168:56b5:0:ac27:b86c:7764:9429]) by smtp.gmail.com with ESMTPSA id xs9sm31416882wjc.11.2016.06.14.11.51.18 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Tue, 14 Jun 2016 11:51:19 -0700 (PDT) From: Daniel Vetter To: DRI Development Date: Tue, 14 Jun 2016 20:50:58 +0200 Message-Id: <1465930269-7883-4-git-send-email-daniel.vetter@ffwll.ch> X-Mailer: git-send-email 2.8.1 In-Reply-To: <1465930269-7883-1-git-send-email-daniel.vetter@ffwll.ch> References: <1465930269-7883-1-git-send-email-daniel.vetter@ffwll.ch> Cc: Daniel Vetter , Intel Graphics Development , Daniel Vetter Subject: [Intel-gfx] [PATCH 03/14] drm: Link directly from drm_master to drm_device X-BeenThere: intel-gfx@lists.freedesktop.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: Intel graphics driver community testing & development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , MIME-Version: 1.0 Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" X-Virus-Scanned: ClamAV using ClamSMTP Master-based auth only exists for the legacy/primary drm_minor, hence there can only be one per device. The goal here is to untangle the epic dereference games of minor->master and master->minor which is just massively confusing. Signed-off-by: Daniel Vetter Reviewed-by: Chris Wilson Reviewed-by: Emil Velikov --- drivers/gpu/drm/drm_drv.c | 6 +++--- drivers/gpu/drm/drm_fops.c | 2 +- drivers/gpu/drm/drm_internal.h | 2 +- include/drm/drmP.h | 7 +++++-- 4 files changed, 10 insertions(+), 7 deletions(-) diff --git a/drivers/gpu/drm/drm_drv.c b/drivers/gpu/drm/drm_drv.c index 8b2582aeaab6..3c01a16bbb77 100644 --- a/drivers/gpu/drm/drm_drv.c +++ b/drivers/gpu/drm/drm_drv.c @@ -93,7 +93,7 @@ void drm_ut_debug_printk(const char *function_name, const char *format, ...) } EXPORT_SYMBOL(drm_ut_debug_printk); -struct drm_master *drm_master_create(struct drm_minor *minor) +struct drm_master *drm_master_create(struct drm_device *dev) { struct drm_master *master; @@ -105,7 +105,7 @@ struct drm_master *drm_master_create(struct drm_minor *minor) spin_lock_init(&master->lock.spinlock); init_waitqueue_head(&master->lock.lock_queue); idr_init(&master->magic_map); - master->minor = minor; + master->dev = dev; return master; } @@ -120,7 +120,7 @@ EXPORT_SYMBOL(drm_master_get); static void drm_master_destroy(struct kref *kref) { struct drm_master *master = container_of(kref, struct drm_master, refcount); - struct drm_device *dev = master->minor->dev; + struct drm_device *dev = master->dev; if (dev->driver->master_destroy) dev->driver->master_destroy(dev, master); diff --git a/drivers/gpu/drm/drm_fops.c b/drivers/gpu/drm/drm_fops.c index 2fd4f42b907a..bfbf1381f55d 100644 --- a/drivers/gpu/drm/drm_fops.c +++ b/drivers/gpu/drm/drm_fops.c @@ -185,7 +185,7 @@ int drm_new_set_master(struct drm_device *dev, struct drm_file *fpriv) lockdep_assert_held_once(&dev->master_mutex); /* create a new master */ - fpriv->minor->master = drm_master_create(fpriv->minor); + fpriv->minor->master = drm_master_create(fpriv->minor->dev); if (!fpriv->minor->master) return -ENOMEM; diff --git a/drivers/gpu/drm/drm_internal.h b/drivers/gpu/drm/drm_internal.h index 56a9b1cf99d7..f5c1d17fa51f 100644 --- a/drivers/gpu/drm/drm_internal.h +++ b/drivers/gpu/drm/drm_internal.h @@ -92,7 +92,7 @@ int drm_setmaster_ioctl(struct drm_device *dev, void *data, struct drm_file *file_priv); int drm_dropmaster_ioctl(struct drm_device *dev, void *data, struct drm_file *file_priv); -struct drm_master *drm_master_create(struct drm_minor *minor); +struct drm_master *drm_master_create(struct drm_device *dev); /* drm_debugfs.c */ #if defined(CONFIG_DEBUG_FS) diff --git a/include/drm/drmP.h b/include/drm/drmP.h index cd3995d82477..17dcbea4f259 100644 --- a/include/drm/drmP.h +++ b/include/drm/drmP.h @@ -379,16 +379,19 @@ struct drm_lock_data { * struct drm_master - drm master structure * * @refcount: Refcount for this master object. - * @minor: Link back to minor char device we are master for. Immutable. + * @dev: Link back to the DRM device * @unique: Unique identifier: e.g. busid. Protected by drm_global_mutex. * @unique_len: Length of unique field. Protected by drm_global_mutex. * @magic_map: Map of used authentication tokens. Protected by struct_mutex. * @lock: DRI lock information. * @driver_priv: Pointer to driver-private information. + * + * Note that master structures are only relevant for the legacy/primary device + * nodes, hence there can only be one per device, not one per drm_minor. */ struct drm_master { struct kref refcount; - struct drm_minor *minor; + struct drm_device *dev; char *unique; int unique_len; struct idr magic_map;