From patchwork Fri Jun 14 06:17:23 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Daniel Vetter X-Patchwork-Id: 10994327 Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id 1314813AF for ; Fri, 14 Jun 2019 06:18:38 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id EFDC526C9B for ; Fri, 14 Jun 2019 06:18:37 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id E04FD27CF9; Fri, 14 Jun 2019 06:18:37 +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=-5.2 required=2.0 tests=BAYES_00,MAILING_LIST_MULTI, RCVD_IN_DNSWL_MED autolearn=ham version=3.3.1 Received: from gabe.freedesktop.org (gabe.freedesktop.org [131.252.210.177]) (using TLSv1.2 with cipher DHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.wl.linuxfoundation.org (Postfix) with ESMTPS id 6E63526C9B for ; Fri, 14 Jun 2019 06:18:37 +0000 (UTC) Received: from gabe.freedesktop.org (localhost [127.0.0.1]) by gabe.freedesktop.org (Postfix) with ESMTP id E85D7892B0; Fri, 14 Jun 2019 06:18:34 +0000 (UTC) X-Original-To: dri-devel@lists.freedesktop.org Delivered-To: dri-devel@lists.freedesktop.org Received: from mail-ed1-x544.google.com (mail-ed1-x544.google.com [IPv6:2a00:1450:4864:20::544]) by gabe.freedesktop.org (Postfix) with ESMTPS id B9F18892F3 for ; Fri, 14 Jun 2019 06:18:33 +0000 (UTC) Received: by mail-ed1-x544.google.com with SMTP id z25so1810850edq.9 for ; Thu, 13 Jun 2019 23:18:33 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:mime-version :content-transfer-encoding; bh=3C/qUXp8aczHmHtf8/5/PFxFflnNtEfB9brG9+Ex3bU=; b=Vsj9F1GALLJr0OvhzdCAQOXU1q70+QB+fvbNabDotCMxV6BJdouj7r/aZR1tQcrQ85 eX+qAgYFQPsrjJTbDKMP8vL1Hp2p65DOLHOmG5vK7NJJmgyj23f3N/dLOBXIaS4cl05G qN7ZHwcRQofRsvhbjqOdlb8ckeP1rjzSJ5owG5k/wL+zFQhJZ1UEckx+kwmndRchLtTF LzVZShtR7dXw2NDWvmNKRONu65Z3a+RjxUOYFF1CYXUq6dH73l300wLJWacWFrr23EmJ ei/ST2Z1yqcgsxHfOXkW0Ef3S6XIJo55OahfoKCeqBe0psZ770M51+f6h7hI7cIUeT4w m19w== X-Gm-Message-State: APjAAAWOfj0iEm4aOLaH6blHOAFt0lrnAyneFIgRbzObvsMU6t8ve2KS nnfJkI4hVqpStMC4iDVcz880y1LqiL8= X-Google-Smtp-Source: APXvYqxkVdkll9QjFd6tFY0aZxoRukIgkdwq8DHzIg/GYLU7EFMLsvwb1i6Apq4/QTxK8bUDlQhrMw== X-Received: by 2002:a50:9107:: with SMTP id e7mr13817081eda.280.1560493112131; Thu, 13 Jun 2019 23:18:32 -0700 (PDT) Received: from phenom.ffwll.local ([2a02:168:569e:0:3106:d637:d723:e855]) by smtp.gmail.com with ESMTPSA id s27sm576873eda.36.2019.06.13.23.18.31 (version=TLS1_3 cipher=AEAD-AES256-GCM-SHA384 bits=256/256); Thu, 13 Jun 2019 23:18:31 -0700 (PDT) From: Daniel Vetter To: DRI Development Subject: [PATCH] drm/kms: Catch mode_object lifetime errors Date: Fri, 14 Jun 2019 08:17:23 +0200 Message-Id: <20190614061723.1173-1-daniel.vetter@ffwll.ch> X-Mailer: git-send-email 2.20.1 MIME-Version: 1.0 X-Mailman-Original-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=ffwll.ch; s=google; h=from:to:cc:subject:date:message-id:mime-version :content-transfer-encoding; bh=3C/qUXp8aczHmHtf8/5/PFxFflnNtEfB9brG9+Ex3bU=; b=E0RUy5xsqdQAaLwT747kPTnkJmPd2WRa8OFKVrhckgEHmxNYeP3/slvqo2oUBXBnhq wHI3Rr0P3CV4wWvjBpBRjkGD1Ek0DM2DgE9LMx9Ftsd0PHOJ+b9IiQO33/FwehNE7V8H UJTIsJS+YTCslqneojLNzq8zVamv1l62qOHSM= X-BeenThere: dri-devel@lists.freedesktop.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: Direct Rendering Infrastructure - Development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Daniel Vetter , Intel Graphics Development , Daniel Vetter Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" X-Virus-Scanned: ClamAV using ClamSMTP Only dynamic mode objects, i.e. those which are refcounted and have a free callback, can be added while the overall drm_device is visible to userspace. All others must be added before drm_dev_register and removed after drm_dev_unregister. Small issue around drivers still using the load/unload callbacks, we need to make sure we set dev->registered so that load/unload code in these callbacks doesn't trigger false warnings. Only a small adjustement in drm_dev_register was needed. Motivated by some irc discussions about object ids of dynamic objects like blobs become invalid, and me going on a bit an audit spree. Signed-off-by: Daniel Vetter Reviewed-by: Sean Paul --- drivers/gpu/drm/drm_drv.c | 4 ++-- drivers/gpu/drm/drm_mode_object.c | 4 ++++ 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/drivers/gpu/drm/drm_drv.c b/drivers/gpu/drm/drm_drv.c index cb6f0245de7c..48c84e3e1931 100644 --- a/drivers/gpu/drm/drm_drv.c +++ b/drivers/gpu/drm/drm_drv.c @@ -997,14 +997,14 @@ int drm_dev_register(struct drm_device *dev, unsigned long flags) if (ret) goto err_minors; - dev->registered = true; - if (dev->driver->load) { ret = dev->driver->load(dev, flags); if (ret) goto err_minors; } + dev->registered = true; + if (drm_core_check_feature(dev, DRIVER_MODESET)) drm_modeset_register_all(dev); diff --git a/drivers/gpu/drm/drm_mode_object.c b/drivers/gpu/drm/drm_mode_object.c index 1c6e51135962..c355ba8e6d5d 100644 --- a/drivers/gpu/drm/drm_mode_object.c +++ b/drivers/gpu/drm/drm_mode_object.c @@ -42,6 +42,8 @@ int __drm_mode_object_add(struct drm_device *dev, struct drm_mode_object *obj, { int ret; + WARN_ON(dev->registered && !obj_free_cb); + mutex_lock(&dev->mode_config.idr_mutex); ret = idr_alloc(&dev->mode_config.object_idr, register_obj ? obj : NULL, 1, 0, GFP_KERNEL); @@ -102,6 +104,8 @@ void drm_mode_object_register(struct drm_device *dev, void drm_mode_object_unregister(struct drm_device *dev, struct drm_mode_object *object) { + WARN_ON(dev->registered && !object->free_cb); + mutex_lock(&dev->mode_config.idr_mutex); if (object->id) { idr_remove(&dev->mode_config.object_idr, object->id);