From nobody Mon Apr 29 00:54:04 2024 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 6F245C433F5 for ; Sat, 1 Oct 2022 01:22:57 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S231740AbiJABWz (ORCPT ); Fri, 30 Sep 2022 21:22:55 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:55338 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S232772AbiJABVw (ORCPT ); Fri, 30 Sep 2022 21:21:52 -0400 Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.133.124]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 5B21F19624B for ; Fri, 30 Sep 2022 18:19:18 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1664587157; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=fLaZVg/Gn3THIn1ghLrf5MedEqRFiq/AUqXfvtIcrvk=; b=TluYmOiChs4IoH9AM+n+In++qRO0U/eXVS4LaErL+AbFBH+BnhSbSuKCZk/Zf3BLiZt1I6 OdfQDWCF9hFJ68s0o2hakl97p+gVtXfJJGY/z19o2wOImhvGlQvP76K169RfzGLpuNLGv9 TplEKEoU0RJhmscCcbgHI7PynJiUlMU= Received: from mail-ed1-f72.google.com (mail-ed1-f72.google.com [209.85.208.72]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_128_GCM_SHA256) id us-mta-48-ZhG7oWhAMMS5EYoNHWQg8Q-1; Fri, 30 Sep 2022 21:19:13 -0400 X-MC-Unique: ZhG7oWhAMMS5EYoNHWQg8Q-1 Received: by mail-ed1-f72.google.com with SMTP id z2-20020a056402274200b004516734e755so4645719edd.3 for ; Fri, 30 Sep 2022 18:19:13 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date; bh=fLaZVg/Gn3THIn1ghLrf5MedEqRFiq/AUqXfvtIcrvk=; b=zaOa1th0rLeLJ9L47ACEuMSFU5qJ2FiTcS3dU6mwgj9TfOEDZglzEZ5kp9/3LfshP1 09ERTSsNVFi313Nlm67jX0okk4A9OGVSi3745KqjID8zPXHwJW3/Qpk0GRx5GTjDWP7b z2Ey25J7FnZit/7Ce8LVkzhCCR+67ALNxV4n/NY+/KrgvBFkzg/4hPl/764UoWp8//Dl RDv/asEx4DWQyDhUT+3Sm02qOZVn56wJcR9iHCsj8/v6xhCQuk2cTZGibxNx8UR1vD5E xdT6G1w/JJvShxM7lYMu6Qo0TpEfB7gL6BTPnz2TO9ASurWy/5orFaV9h2XCEt6+JtuS Qmmg== X-Gm-Message-State: ACrzQf1s0zpQyECWocRs/GYnxSuEU1oi8yDZ6oKbbqMM+maCWRGyZye2 5IYUf+i2YJjdTA/eft6cj5ldSb7yTWYmi/5/BY8qwCgRaHyL+fSC1s/nae5lMeXoVPmk1uTztLr ss2j/6UyU7f1NVivujBgSByMJ X-Received: by 2002:a17:907:8a23:b0:782:6a5:6dd5 with SMTP id sc35-20020a1709078a2300b0078206a56dd5mr7966640ejc.581.1664587152865; Fri, 30 Sep 2022 18:19:12 -0700 (PDT) X-Google-Smtp-Source: AMsMyM78eXx11AzAz/KYCu4ClVlwjL9PudeR4cdFQOhob9od/+BuIzr8TrZGeicdldxZ/IHZxleCMg== X-Received: by 2002:a17:907:8a23:b0:782:6a5:6dd5 with SMTP id sc35-20020a1709078a2300b0078206a56dd5mr7966632ejc.581.1664587152705; Fri, 30 Sep 2022 18:19:12 -0700 (PDT) Received: from pollux.redhat.com ([2a02:810d:4b40:2ee8:642:1aff:fe31:a15c]) by smtp.gmail.com with ESMTPSA id g18-20020a17090604d200b007822196378asm1934302eja.176.2022.09.30.18.19.11 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 30 Sep 2022 18:19:12 -0700 (PDT) From: Danilo Krummrich To: daniel@ffwll.ch, airlied@linux.ie, tzimmermann@suse.de, mripard@kernel.org, liviu.dudau@arm.com, brian.starkey@arm.com Cc: dri-devel@lists.freedesktop.org, linux-kernel@vger.kernel.org, Danilo Krummrich Subject: [PATCH drm-misc-next v3 1/7] drm/arm/hdlcd: use drmm_* to allocate driver structures Date: Sat, 1 Oct 2022 03:18:59 +0200 Message-Id: <20221001011905.433408-2-dakr@redhat.com> X-Mailer: git-send-email 2.37.3 In-Reply-To: <20221001011905.433408-1-dakr@redhat.com> References: <20221001011905.433408-1-dakr@redhat.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Type: text/plain; charset="utf-8" Use drm managed resources to allocate driver structures and get rid of the deprecated drm_dev_alloc() call and replace it with devm_drm_dev_alloc(). This also serves as preparation to get rid of drm_device->dev_private and to fix use-after-free issues on driver unload. Signed-off-by: Danilo Krummrich --- drivers/gpu/drm/arm/hdlcd_drv.c | 12 ++++-------- drivers/gpu/drm/arm/hdlcd_drv.h | 1 + 2 files changed, 5 insertions(+), 8 deletions(-) diff --git a/drivers/gpu/drm/arm/hdlcd_drv.c b/drivers/gpu/drm/arm/hdlcd_dr= v.c index a032003c340c..463381d11cff 100644 --- a/drivers/gpu/drm/arm/hdlcd_drv.c +++ b/drivers/gpu/drm/arm/hdlcd_drv.c @@ -247,13 +247,11 @@ static int hdlcd_drm_bind(struct device *dev) struct hdlcd_drm_private *hdlcd; int ret; =20 - hdlcd =3D devm_kzalloc(dev, sizeof(*hdlcd), GFP_KERNEL); - if (!hdlcd) - return -ENOMEM; + hdlcd =3D devm_drm_dev_alloc(dev, &hdlcd_driver, typeof(*hdlcd), base); + if (IS_ERR(hdlcd)) + return PTR_ERR(hdlcd); =20 - drm =3D drm_dev_alloc(&hdlcd_driver, dev); - if (IS_ERR(drm)) - return PTR_ERR(drm); + drm =3D &hdlcd->base; =20 drm->dev_private =3D hdlcd; dev_set_drvdata(dev, drm); @@ -319,7 +317,6 @@ static int hdlcd_drm_bind(struct device *dev) err_free: drm_mode_config_cleanup(drm); dev_set_drvdata(dev, NULL); - drm_dev_put(drm); =20 return ret; } @@ -344,7 +341,6 @@ static void hdlcd_drm_unbind(struct device *dev) drm_mode_config_cleanup(drm); drm->dev_private =3D NULL; dev_set_drvdata(dev, NULL); - drm_dev_put(drm); } =20 static const struct component_master_ops hdlcd_master_ops =3D { diff --git a/drivers/gpu/drm/arm/hdlcd_drv.h b/drivers/gpu/drm/arm/hdlcd_dr= v.h index 909c39c28487..3892b36767ac 100644 --- a/drivers/gpu/drm/arm/hdlcd_drv.h +++ b/drivers/gpu/drm/arm/hdlcd_drv.h @@ -7,6 +7,7 @@ #define __HDLCD_DRV_H__ =20 struct hdlcd_drm_private { + struct drm_device base; void __iomem *mmio; struct clk *clk; struct drm_crtc crtc; --=20 2.37.3 From nobody Mon Apr 29 00:54:04 2024 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 47E29C433F5 for ; Sat, 1 Oct 2022 01:23:17 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S232650AbiJABXP (ORCPT ); Fri, 30 Sep 2022 21:23:15 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:55626 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S233013AbiJABV6 (ORCPT ); Fri, 30 Sep 2022 21:21:58 -0400 Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.129.124]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id E7B23F3C7D for ; Fri, 30 Sep 2022 18:19:20 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1664587158; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=yZIl1OKGrL3KJyd7ruXlclzCfjtYvrZNcDLCxG8/BBY=; b=Axqjy2xWBoG45kdWLPudk3agk+oVMxYTId/CAEhe8ikIrYIVKrEKvl5hNsXSBa/i6hz6FR G+BfVKHSg4/cotEfHeRxruL13EN7h+/qbFFd9pgXiTqXdVqatFeAv/izCfr5It5YA60xhJ OAnpKsCNcLaimu4wZ2VTf9R5vw9vFKw= Received: from mail-ed1-f72.google.com (mail-ed1-f72.google.com [209.85.208.72]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_128_GCM_SHA256) id us-mta-459-EAU4_hTOPwqGGzwpJ3KKEw-1; Fri, 30 Sep 2022 21:19:17 -0400 X-MC-Unique: EAU4_hTOPwqGGzwpJ3KKEw-1 Received: by mail-ed1-f72.google.com with SMTP id b16-20020a056402279000b0044f1102e6e2so4743371ede.20 for ; Fri, 30 Sep 2022 18:19:17 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date; bh=yZIl1OKGrL3KJyd7ruXlclzCfjtYvrZNcDLCxG8/BBY=; b=4Lpej9dc6+OhKgy/t2g6CbMkaCg8hAy1HZ7hkdkrVkPEEUXBjPy/Tl1zsn+tABVdDW HBeMXqQGAov6EHP0jpKjW5KjgR0tsaPPdEGNhM8m4XcmYh+8PjHO4qOyRrtxdAUBxl/y EhRQJ7oEk0cWBdD/7tTx6JIG8LGe7HE10uz7DQLPBCJCALdLWUEGi5sd1AOiYwn2GTsO +zjys77FWyywQ2uN2fhuwnLI25auaaHAGQp8Kf2YUmU2OOGxwYQe5eLBx+e7cDQju3Ca m2aTuPxC7Up1TV3q5w/aeuikbJ23q1K/9uS+2xpNmtIwsBddCXYlt0jEH1N2Ys1hAFEh 1qKQ== X-Gm-Message-State: ACrzQf3djMFJv7hfJ5BXEi/aBfVa8+f7YHAv999rZoY+VLFr7YTbSDFF Owo+si7+JX7jVilwkhnKuJbhHmTXrVRKuQeJftDt2xixc5vVlG8Ba/fCE/FIqLzacKaB4E4jiHO a0qPYYx3eCg42qyXVKEBSmGEh X-Received: by 2002:a17:907:a044:b0:770:da0d:171d with SMTP id gz4-20020a170907a04400b00770da0d171dmr7828114ejc.742.1664587156484; Fri, 30 Sep 2022 18:19:16 -0700 (PDT) X-Google-Smtp-Source: AMsMyM4eBxmC9x/tkFzxVy0Ywf9ks7MiJUJ5b/u5kQtcjdJwQnAOGv3FCHcSaFJN6022V7sq0e0VMg== X-Received: by 2002:a17:907:a044:b0:770:da0d:171d with SMTP id gz4-20020a170907a04400b00770da0d171dmr7828106ejc.742.1664587156315; Fri, 30 Sep 2022 18:19:16 -0700 (PDT) Received: from pollux.redhat.com ([2a02:810d:4b40:2ee8:642:1aff:fe31:a15c]) by smtp.gmail.com with ESMTPSA id t14-20020a170906a10e00b0077e6be40e4asm1914914ejy.175.2022.09.30.18.19.15 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 30 Sep 2022 18:19:16 -0700 (PDT) From: Danilo Krummrich To: daniel@ffwll.ch, airlied@linux.ie, tzimmermann@suse.de, mripard@kernel.org, liviu.dudau@arm.com, brian.starkey@arm.com Cc: dri-devel@lists.freedesktop.org, linux-kernel@vger.kernel.org, Danilo Krummrich Subject: [PATCH drm-misc-next v3 2/7] drm/arm/hdlcd: replace drm->dev_private with drm_to_hdlcd_priv() Date: Sat, 1 Oct 2022 03:19:00 +0200 Message-Id: <20221001011905.433408-3-dakr@redhat.com> X-Mailer: git-send-email 2.37.3 In-Reply-To: <20221001011905.433408-1-dakr@redhat.com> References: <20221001011905.433408-1-dakr@redhat.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Type: text/plain; charset="utf-8" Using drm_device->dev_private is deprecated. Since we've switched to devm_drm_dev_alloc(), struct drm_device is now embedded in struct hdlcd_drm_private, hence we can use container_of() to get the struct drm_device instance instead. Signed-off-by: Danilo Krummrich --- drivers/gpu/drm/arm/hdlcd_crtc.c | 4 ++-- drivers/gpu/drm/arm/hdlcd_drv.c | 10 ++++------ drivers/gpu/drm/arm/hdlcd_drv.h | 1 + 3 files changed, 7 insertions(+), 8 deletions(-) diff --git a/drivers/gpu/drm/arm/hdlcd_crtc.c b/drivers/gpu/drm/arm/hdlcd_c= rtc.c index 7030339fa232..4a8959d0b2a6 100644 --- a/drivers/gpu/drm/arm/hdlcd_crtc.c +++ b/drivers/gpu/drm/arm/hdlcd_crtc.c @@ -275,7 +275,7 @@ static void hdlcd_plane_atomic_update(struct drm_plane = *plane, dest_h =3D drm_rect_height(&new_plane_state->dst); scanout_start =3D drm_fb_dma_get_gem_addr(fb, new_plane_state, 0); =20 - hdlcd =3D plane->dev->dev_private; + hdlcd =3D drm_to_hdlcd_priv(plane->dev); hdlcd_write(hdlcd, HDLCD_REG_FB_LINE_LENGTH, fb->pitches[0]); hdlcd_write(hdlcd, HDLCD_REG_FB_LINE_PITCH, fb->pitches[0]); hdlcd_write(hdlcd, HDLCD_REG_FB_LINE_COUNT, dest_h - 1); @@ -325,7 +325,7 @@ static struct drm_plane *hdlcd_plane_init(struct drm_de= vice *drm) =20 int hdlcd_setup_crtc(struct drm_device *drm) { - struct hdlcd_drm_private *hdlcd =3D drm->dev_private; + struct hdlcd_drm_private *hdlcd =3D drm_to_hdlcd_priv(drm); struct drm_plane *primary; int ret; =20 diff --git a/drivers/gpu/drm/arm/hdlcd_drv.c b/drivers/gpu/drm/arm/hdlcd_dr= v.c index 463381d11cff..120c87934a91 100644 --- a/drivers/gpu/drm/arm/hdlcd_drv.c +++ b/drivers/gpu/drm/arm/hdlcd_drv.c @@ -98,7 +98,7 @@ static void hdlcd_irq_uninstall(struct hdlcd_drm_private = *hdlcd) =20 static int hdlcd_load(struct drm_device *drm, unsigned long flags) { - struct hdlcd_drm_private *hdlcd =3D drm->dev_private; + struct hdlcd_drm_private *hdlcd =3D drm_to_hdlcd_priv(drm); struct platform_device *pdev =3D to_platform_device(drm->dev); struct resource *res; u32 version; @@ -190,7 +190,7 @@ static int hdlcd_show_underrun_count(struct seq_file *m= , void *arg) { struct drm_info_node *node =3D (struct drm_info_node *)m->private; struct drm_device *drm =3D node->minor->dev; - struct hdlcd_drm_private *hdlcd =3D drm->dev_private; + struct hdlcd_drm_private *hdlcd =3D drm_to_hdlcd_priv(drm); =20 seq_printf(m, "underrun : %d\n", atomic_read(&hdlcd->buffer_underrun_coun= t)); seq_printf(m, "dma_end : %d\n", atomic_read(&hdlcd->dma_end_count)); @@ -203,7 +203,7 @@ static int hdlcd_show_pxlclock(struct seq_file *m, void= *arg) { struct drm_info_node *node =3D (struct drm_info_node *)m->private; struct drm_device *drm =3D node->minor->dev; - struct hdlcd_drm_private *hdlcd =3D drm->dev_private; + struct hdlcd_drm_private *hdlcd =3D drm_to_hdlcd_priv(drm); unsigned long clkrate =3D clk_get_rate(hdlcd->clk); unsigned long mode_clock =3D hdlcd->crtc.mode.crtc_clock * 1000; =20 @@ -253,7 +253,6 @@ static int hdlcd_drm_bind(struct device *dev) =20 drm =3D &hdlcd->base; =20 - drm->dev_private =3D hdlcd; dev_set_drvdata(dev, drm); =20 hdlcd_setup_mode_config(drm); @@ -324,7 +323,7 @@ static int hdlcd_drm_bind(struct device *dev) static void hdlcd_drm_unbind(struct device *dev) { struct drm_device *drm =3D dev_get_drvdata(dev); - struct hdlcd_drm_private *hdlcd =3D drm->dev_private; + struct hdlcd_drm_private *hdlcd =3D drm_to_hdlcd_priv(drm); =20 drm_dev_unregister(drm); drm_kms_helper_poll_fini(drm); @@ -339,7 +338,6 @@ static void hdlcd_drm_unbind(struct device *dev) pm_runtime_disable(dev); of_reserved_mem_device_release(dev); drm_mode_config_cleanup(drm); - drm->dev_private =3D NULL; dev_set_drvdata(dev, NULL); } =20 diff --git a/drivers/gpu/drm/arm/hdlcd_drv.h b/drivers/gpu/drm/arm/hdlcd_dr= v.h index 3892b36767ac..f1c1da2ac2db 100644 --- a/drivers/gpu/drm/arm/hdlcd_drv.h +++ b/drivers/gpu/drm/arm/hdlcd_drv.h @@ -21,6 +21,7 @@ struct hdlcd_drm_private { #endif }; =20 +#define drm_to_hdlcd_priv(x) container_of(x, struct hdlcd_drm_private, bas= e) #define crtc_to_hdlcd_priv(x) container_of(x, struct hdlcd_drm_private, cr= tc) =20 static inline void hdlcd_write(struct hdlcd_drm_private *hdlcd, --=20 2.37.3 From nobody Mon Apr 29 00:54:04 2024 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 7D349C433FE for ; Sat, 1 Oct 2022 01:23:12 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S233205AbiJABXJ (ORCPT ); Fri, 30 Sep 2022 21:23:09 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:57174 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S233001AbiJABV5 (ORCPT ); Fri, 30 Sep 2022 21:21:57 -0400 Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.129.124]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 8119B7C312 for ; Fri, 30 Sep 2022 18:19:31 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1664587170; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=3NFp4VgvnrWlpf0cR1jJD5RUagyd6mZ8BYx1FSeEHWg=; b=PaN05dkn8/vKovjRUU8WjWUFhAcxmkyZYE0Gsb+J/q4dNrMExCldqBbTWlIv0YAP47fmG7 e3Za/7u2/1tjLiJlpjgmD0688V3Lz9JjmHsBGFDytUlOV5TXiEMznT3Nv1WtTwZhBzMA2D oemiU3YhTwnhCKSrStfIYgyfID2nVEE= Received: from mail-ed1-f69.google.com (mail-ed1-f69.google.com [209.85.208.69]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_128_GCM_SHA256) id us-mta-195-il05Y-GNPbSFB8DW4yJkrA-1; Fri, 30 Sep 2022 21:19:21 -0400 X-MC-Unique: il05Y-GNPbSFB8DW4yJkrA-1 Received: by mail-ed1-f69.google.com with SMTP id s17-20020a056402521100b004511c8d59e3so4683963edd.11 for ; Fri, 30 Sep 2022 18:19:20 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date; bh=3NFp4VgvnrWlpf0cR1jJD5RUagyd6mZ8BYx1FSeEHWg=; b=miKzWX67nBaCnrRhjoTiVKjpY3QRXxKeU25P2w7eN6HikUSdDVy40RJmPwYnZbN/pB PwiNOqq/5yp+OFin0fwVSId2jF3N3CFSpCyrzHXVZo92I2Dq1XQE7LIc3Cmb3sDuB4P1 K10u5hCOi66FIIGataF5JhQLwqW3Uql3HbXgrIgpRQ3loha6Z1AqqmXkYW/PIj80UYAh S26yftPb7RuEyiqcDKLQI+3rywHFkCnFfoPhe+RMNCqxMrP0TEI2WXTGztr4xaLs18yA PHXs2Wj18rH2CtlvlmfrSesl9uVODt0Ivw+LNpTukKRScpyq2w1FwEW9w5Bp/l/UIrPB 6k3A== X-Gm-Message-State: ACrzQf1BaLDiOUae5gAITRNoJ5BzVyM6Hf2UxEoqXJF7UTxvGfmziiOr lA8TZrLlTdfRfACvb1hk40pioGnBNDCNT2dbWRZejU8ovLFEhOeWeQ3kXTKEIlPa+TPv5NptFZe TXtQVh/9Tl6pxx/PyOA4FVeGr X-Received: by 2002:a17:907:9812:b0:781:bbff:1d20 with SMTP id ji18-20020a170907981200b00781bbff1d20mr8193513ejc.33.1664587160117; Fri, 30 Sep 2022 18:19:20 -0700 (PDT) X-Google-Smtp-Source: AMsMyM7CQSQnjdvUmSQnJbZMdXRbmz2WBI2YEXp3z+zGa5bI24ZgAEiRi9g+ipz6Q5+W+HezYugKOw== X-Received: by 2002:a17:907:9812:b0:781:bbff:1d20 with SMTP id ji18-20020a170907981200b00781bbff1d20mr8193507ejc.33.1664587159964; Fri, 30 Sep 2022 18:19:19 -0700 (PDT) Received: from pollux.redhat.com ([2a02:810d:4b40:2ee8:642:1aff:fe31:a15c]) by smtp.gmail.com with ESMTPSA id rk14-20020a170907214e00b0078238c1c182sm1870090ejb.222.2022.09.30.18.19.19 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 30 Sep 2022 18:19:19 -0700 (PDT) From: Danilo Krummrich To: daniel@ffwll.ch, airlied@linux.ie, tzimmermann@suse.de, mripard@kernel.org, liviu.dudau@arm.com, brian.starkey@arm.com Cc: dri-devel@lists.freedesktop.org, linux-kernel@vger.kernel.org, Danilo Krummrich Subject: [PATCH drm-misc-next v3 3/7] drm/arm/hdlcd: plane: use drm managed resources Date: Sat, 1 Oct 2022 03:19:01 +0200 Message-Id: <20221001011905.433408-4-dakr@redhat.com> X-Mailer: git-send-email 2.37.3 In-Reply-To: <20221001011905.433408-1-dakr@redhat.com> References: <20221001011905.433408-1-dakr@redhat.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Type: text/plain; charset="utf-8" Use drm managed resource allocation (drmm_universal_plane_alloc()) in order to get rid of the explicit destroy hook in struct drm_plane_funcs. Signed-off-by: Danilo Krummrich --- drivers/gpu/drm/arm/hdlcd_crtc.c | 20 +++++++------------- 1 file changed, 7 insertions(+), 13 deletions(-) diff --git a/drivers/gpu/drm/arm/hdlcd_crtc.c b/drivers/gpu/drm/arm/hdlcd_c= rtc.c index 4a8959d0b2a6..1de0f7b23766 100644 --- a/drivers/gpu/drm/arm/hdlcd_crtc.c +++ b/drivers/gpu/drm/arm/hdlcd_crtc.c @@ -290,7 +290,6 @@ static const struct drm_plane_helper_funcs hdlcd_plane_= helper_funcs =3D { static const struct drm_plane_funcs hdlcd_plane_funcs =3D { .update_plane =3D drm_atomic_helper_update_plane, .disable_plane =3D drm_atomic_helper_disable_plane, - .destroy =3D drm_plane_cleanup, .reset =3D drm_atomic_helper_plane_reset, .atomic_duplicate_state =3D drm_atomic_helper_plane_duplicate_state, .atomic_destroy_state =3D drm_atomic_helper_plane_destroy_state, @@ -298,24 +297,19 @@ static const struct drm_plane_funcs hdlcd_plane_funcs= =3D { =20 static struct drm_plane *hdlcd_plane_init(struct drm_device *drm) { - struct hdlcd_drm_private *hdlcd =3D drm->dev_private; + struct hdlcd_drm_private *hdlcd =3D drm_to_hdlcd_priv(drm); struct drm_plane *plane =3D NULL; u32 formats[ARRAY_SIZE(supported_formats)], i; - int ret; - - plane =3D devm_kzalloc(drm->dev, sizeof(*plane), GFP_KERNEL); - if (!plane) - return ERR_PTR(-ENOMEM); =20 for (i =3D 0; i < ARRAY_SIZE(supported_formats); i++) formats[i] =3D supported_formats[i].fourcc; =20 - ret =3D drm_universal_plane_init(drm, plane, 0xff, &hdlcd_plane_funcs, - formats, ARRAY_SIZE(formats), - NULL, - DRM_PLANE_TYPE_PRIMARY, NULL); - if (ret) - return ERR_PTR(ret); + plane =3D drmm_universal_plane_alloc(drm, struct drm_plane, dev, 0xff, + &hdlcd_plane_funcs, + formats, ARRAY_SIZE(formats), + NULL, DRM_PLANE_TYPE_PRIMARY, NULL); + if (IS_ERR(plane)) + return plane; =20 drm_plane_helper_add(plane, &hdlcd_plane_helper_funcs); hdlcd->plane =3D plane; --=20 2.37.3 From nobody Mon Apr 29 00:54:04 2024 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id F1D0EC433FE for ; Sat, 1 Oct 2022 01:23:03 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S231895AbiJABXB (ORCPT ); Fri, 30 Sep 2022 21:23:01 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:59294 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S232861AbiJABVz (ORCPT ); Fri, 30 Sep 2022 21:21:55 -0400 Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.129.124]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 8C57D62A88 for ; Fri, 30 Sep 2022 18:19:27 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1664587166; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=hsWBexLFDVqUOZMqbhy+SL8q312glCS9Mla/+vP6MEc=; b=anabbgehR3pSIQ5Lp31FUWC0WlsHQQbeGPpT03z9mABgQ2izp/+yR9JAUJsh7Ko2wPfupR 7zt/b23f5SSuTkeJ2ZyWscF/sDZzinzZFhY0ewe01FcO6IH0c3cmrxs0O2gAbtUx7RNp8J R/vHQebEgXXEiOH7bC7PotFiJr2Ecto= Received: from mail-ed1-f71.google.com (mail-ed1-f71.google.com [209.85.208.71]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_128_GCM_SHA256) id us-mta-79-oVjPkZFvPuS1D9XrFEkFMQ-1; Fri, 30 Sep 2022 21:19:24 -0400 X-MC-Unique: oVjPkZFvPuS1D9XrFEkFMQ-1 Received: by mail-ed1-f71.google.com with SMTP id w17-20020a056402269100b0045249bc17a9so4620225edd.9 for ; Fri, 30 Sep 2022 18:19:24 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date; bh=hsWBexLFDVqUOZMqbhy+SL8q312glCS9Mla/+vP6MEc=; b=PRiEwNC08jd96JC83S5Qs9XHbPNVzGbZPihV3s/NtsJ8tzZijKkwQizf6SPBY2g1iL owcSCy3Wk6YN2kNrGi4kBLuAYSI3rm3GRe+v5X2+fS2RdQg15HiaFj3TV2ZsziPAazBK sUvCq+K+HZ9tdQxtRHEqD3QG3tzJYL86VI3oN2guBkpY/h7YaHBh6ti0O6cYmJb4fZe+ FVao6PD1Y2CgQ+Pm9sr7TX2USxy59w2om+8F9p65i1OP75Rd9cIV5V5b2nn8txx4bO49 XkT+DJPXVFIvThM1xMUoC+NEljjAfPztDzZDFH5AdaFQlCR6hkOOMNUYht9MMQw1AdZI uzFQ== X-Gm-Message-State: ACrzQf2KF5m9UoJX+gymdmjmb28cyhkHc57+lwxJqGWz1Xzq6fx2Nbbl OKdX3W1xLZlNmZopdFRdXCb7CRCTXr+R5zGqUEIzuhx7gRjxJvtWnoGTnXO9FF0SRlZs3uRi0XV vqiyEfpV3Pp3/hBq8IjC5ykeK X-Received: by 2002:a17:907:2c77:b0:77c:59aa:c011 with SMTP id ib23-20020a1709072c7700b0077c59aac011mr8480021ejc.724.1664587163740; Fri, 30 Sep 2022 18:19:23 -0700 (PDT) X-Google-Smtp-Source: AMsMyM4zcMskX82KTUkI5E7f0f84qForNAwCdRF+W3G2xOEagDWoB9NXlhmTv0aJC4uLhVIyAmcViA== X-Received: by 2002:a17:907:2c77:b0:77c:59aa:c011 with SMTP id ib23-20020a1709072c7700b0077c59aac011mr8480004ejc.724.1664587163596; Fri, 30 Sep 2022 18:19:23 -0700 (PDT) Received: from pollux.redhat.com ([2a02:810d:4b40:2ee8:642:1aff:fe31:a15c]) by smtp.gmail.com with ESMTPSA id r20-20020aa7c154000000b004582a37889csm2573958edp.16.2022.09.30.18.19.22 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 30 Sep 2022 18:19:23 -0700 (PDT) From: Danilo Krummrich To: daniel@ffwll.ch, airlied@linux.ie, tzimmermann@suse.de, mripard@kernel.org, liviu.dudau@arm.com, brian.starkey@arm.com Cc: dri-devel@lists.freedesktop.org, linux-kernel@vger.kernel.org, Danilo Krummrich Subject: [PATCH drm-misc-next v3 4/7] drm/arm/hdlcd: use drm_dev_unplug() Date: Sat, 1 Oct 2022 03:19:02 +0200 Message-Id: <20221001011905.433408-5-dakr@redhat.com> X-Mailer: git-send-email 2.37.3 In-Reply-To: <20221001011905.433408-1-dakr@redhat.com> References: <20221001011905.433408-1-dakr@redhat.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Type: text/plain; charset="utf-8" When the driver is unbound, there might still be users in userspace having an open fd and are calling into the driver. While this is fine for drm managed resources, it is not for resources bound to the device/driver lifecycle, e.g. clocks or MMIO mappings. To prevent use-after-free issues we need to protect those resources with drm_dev_enter() and drm_dev_exit(). This does only work if we indicate that the drm device was unplugged, hence use drm_dev_unplug() instead of drm_dev_unregister(). Protecting the particular resources with drm_dev_enter()/drm_dev_exit() is handled by subsequent patches. Signed-off-by: Danilo Krummrich --- drivers/gpu/drm/arm/hdlcd_drv.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/drivers/gpu/drm/arm/hdlcd_drv.c b/drivers/gpu/drm/arm/hdlcd_dr= v.c index 120c87934a91..e41def6d47cc 100644 --- a/drivers/gpu/drm/arm/hdlcd_drv.c +++ b/drivers/gpu/drm/arm/hdlcd_drv.c @@ -325,7 +325,7 @@ static void hdlcd_drm_unbind(struct device *dev) struct drm_device *drm =3D dev_get_drvdata(dev); struct hdlcd_drm_private *hdlcd =3D drm_to_hdlcd_priv(drm); =20 - drm_dev_unregister(drm); + drm_dev_unplug(drm); drm_kms_helper_poll_fini(drm); component_unbind_all(dev, drm); of_node_put(hdlcd->crtc.port); --=20 2.37.3 From nobody Mon Apr 29 00:54:04 2024 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id EBBD0C433F5 for ; Sat, 1 Oct 2022 01:24:06 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S232881AbiJABYE (ORCPT ); Fri, 30 Sep 2022 21:24:04 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:33470 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S233344AbiJABXi (ORCPT ); Fri, 30 Sep 2022 21:23:38 -0400 Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.129.124]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id E75B224F12 for ; Fri, 30 Sep 2022 18:21:01 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1664587261; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=VOw+nn7ti+m5Q8fWTW3IpLkOdVFAAWp2wbEVH0hCZZg=; b=bymKsMN9ihNMksK9IMJv1tO+WfMv78zcMQdAldbpGKuExcTO60sTqNxO3IYhG//qIRR/sc +3fHKD1VIyThxlb4LwGUsPnl56K0pZUSl1pko7aCfJDYyoy09taWX9yG7P0N6SNTXkyXQS 8pxxw+1eVVKfuaobsxF2pefu52N0l4U= Received: from mail-ed1-f70.google.com (mail-ed1-f70.google.com [209.85.208.70]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_128_GCM_SHA256) id us-mta-2-IkMrQ0KHP-yJnwUxAIqabQ-1; Fri, 30 Sep 2022 21:19:28 -0400 X-MC-Unique: IkMrQ0KHP-yJnwUxAIqabQ-1 Received: by mail-ed1-f70.google.com with SMTP id s17-20020a056402521100b004511c8d59e3so4684098edd.11 for ; Fri, 30 Sep 2022 18:19:28 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date; bh=VOw+nn7ti+m5Q8fWTW3IpLkOdVFAAWp2wbEVH0hCZZg=; b=TIx9wK7iteOxtW5Um3VNVlRpPzzESjAcOzNMZj27sH9u6+LPAvBOkXCraB72c14WXn IaEo3yA2dmUg4PeawlnO5SdPYX6vxFBSa755lOFuQFAXbQL0jz314QtI8h1ZT1SoCSo+ ArFOAb2iqytGRTAv1MAo6Mi36LNk/cQTB6tIj0Ery34xsaimoqEXz/ZxRYb8qYSx9PTp KGt5IMmYi3LX/y/EZ4ZJLFdcwU7lsTpGXBCxwLULDt3Fvs0BT1P7vt959DeiB+lUnQiy 6cQvOM9KOEqLOrJCBirAaU/suxl0EPZexM7zfKsJX148TPTXEOeagXC0yzgrRUc+tKAe JK4g== X-Gm-Message-State: ACrzQf19Zzw47Q4XMFCdqEQoFCA+DnzUufQluBXkOZJcER0ZzcqUKANJ 1p4Dnvo3gCRrFf97DXUWNQLoqJ3M3XNLrgvarkzgylLh1KkQ2dkZ43+C3X9bAgxusEnRrTtpv73 rwk5DCLHLH2jhxPYNySevM1AW X-Received: by 2002:a05:6402:1f89:b0:453:8093:c4e5 with SMTP id c9-20020a0564021f8900b004538093c4e5mr10144849edc.182.1664587167487; Fri, 30 Sep 2022 18:19:27 -0700 (PDT) X-Google-Smtp-Source: AMsMyM6Cz2MhkPwjR82bZuuI/cuJB5Tw0OCSgZ/P3E5KDFUBi+NqgMptkOjbE77f1V0GFF7/gDVgWg== X-Received: by 2002:a05:6402:1f89:b0:453:8093:c4e5 with SMTP id c9-20020a0564021f8900b004538093c4e5mr10144830edc.182.1664587167242; Fri, 30 Sep 2022 18:19:27 -0700 (PDT) Received: from pollux.redhat.com ([2a02:810d:4b40:2ee8:642:1aff:fe31:a15c]) by smtp.gmail.com with ESMTPSA id c9-20020a17090618a900b007821f4bc328sm1948804ejf.178.2022.09.30.18.19.26 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 30 Sep 2022 18:19:26 -0700 (PDT) From: Danilo Krummrich To: daniel@ffwll.ch, airlied@linux.ie, tzimmermann@suse.de, mripard@kernel.org, liviu.dudau@arm.com, brian.starkey@arm.com Cc: dri-devel@lists.freedesktop.org, linux-kernel@vger.kernel.org, Danilo Krummrich Subject: [PATCH drm-misc-next v3 5/7] drm/arm/hdlcd: crtc: protect device resources after removal Date: Sat, 1 Oct 2022 03:19:03 +0200 Message-Id: <20221001011905.433408-6-dakr@redhat.com> X-Mailer: git-send-email 2.37.3 In-Reply-To: <20221001011905.433408-1-dakr@redhat.com> References: <20221001011905.433408-1-dakr@redhat.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Type: text/plain; charset="utf-8" (Hardware) resources which are bound to the driver and device lifecycle must not be accessed after the device and driver are unbound. However, the DRM device isn't freed as long as the last user didn't close it, hence userspace can still call into the driver. Therefore protect the critical sections which are accessing those resources with drm_dev_enter() and drm_dev_exit(). Signed-off-by: Danilo Krummrich --- drivers/gpu/drm/arm/hdlcd_crtc.c | 60 +++++++++++++++++++++++++++++--- 1 file changed, 55 insertions(+), 5 deletions(-) diff --git a/drivers/gpu/drm/arm/hdlcd_crtc.c b/drivers/gpu/drm/arm/hdlcd_c= rtc.c index 1de0f7b23766..7ce88fb6e822 100644 --- a/drivers/gpu/drm/arm/hdlcd_crtc.c +++ b/drivers/gpu/drm/arm/hdlcd_crtc.c @@ -18,6 +18,7 @@ #include #include #include +#include #include #include #include @@ -39,28 +40,50 @@ static void hdlcd_crtc_cleanup(struct drm_crtc *crtc) { struct hdlcd_drm_private *hdlcd =3D crtc_to_hdlcd_priv(crtc); + int idx; + + if (!drm_dev_enter(crtc->dev, &idx)) + goto cleanup; =20 /* stop the controller on cleanup */ hdlcd_write(hdlcd, HDLCD_REG_COMMAND, 0); + + drm_dev_exit(idx); + +cleanup: drm_crtc_cleanup(crtc); } =20 static int hdlcd_crtc_enable_vblank(struct drm_crtc *crtc) { struct hdlcd_drm_private *hdlcd =3D crtc_to_hdlcd_priv(crtc); - unsigned int mask =3D hdlcd_read(hdlcd, HDLCD_REG_INT_MASK); + unsigned int mask; + int idx; =20 + if (!drm_dev_enter(crtc->dev, &idx)) + return -ENODEV; + + mask =3D hdlcd_read(hdlcd, HDLCD_REG_INT_MASK); hdlcd_write(hdlcd, HDLCD_REG_INT_MASK, mask | HDLCD_INTERRUPT_VSYNC); =20 + drm_dev_exit(idx); + return 0; } =20 static void hdlcd_crtc_disable_vblank(struct drm_crtc *crtc) { struct hdlcd_drm_private *hdlcd =3D crtc_to_hdlcd_priv(crtc); - unsigned int mask =3D hdlcd_read(hdlcd, HDLCD_REG_INT_MASK); + unsigned int mask; + int idx; =20 + if (!drm_dev_enter(crtc->dev, &idx)) + return; + + mask =3D hdlcd_read(hdlcd, HDLCD_REG_INT_MASK); hdlcd_write(hdlcd, HDLCD_REG_INT_MASK, mask & ~HDLCD_INTERRUPT_VSYNC); + + drm_dev_exit(idx); } =20 static const struct drm_crtc_funcs hdlcd_crtc_funcs =3D { @@ -171,21 +194,33 @@ static void hdlcd_crtc_atomic_enable(struct drm_crtc = *crtc, struct drm_atomic_state *state) { struct hdlcd_drm_private *hdlcd =3D crtc_to_hdlcd_priv(crtc); + int idx; + + if (!drm_dev_enter(crtc->dev, &idx)) + return; =20 clk_prepare_enable(hdlcd->clk); hdlcd_crtc_mode_set_nofb(crtc); hdlcd_write(hdlcd, HDLCD_REG_COMMAND, 1); drm_crtc_vblank_on(crtc); + + drm_dev_exit(idx); } =20 static void hdlcd_crtc_atomic_disable(struct drm_crtc *crtc, struct drm_atomic_state *state) { struct hdlcd_drm_private *hdlcd =3D crtc_to_hdlcd_priv(crtc); + int idx; + + if (!drm_dev_enter(crtc->dev, &idx)) + return; =20 drm_crtc_vblank_off(crtc); hdlcd_write(hdlcd, HDLCD_REG_COMMAND, 0); clk_disable_unprepare(hdlcd->clk); + + drm_dev_exit(idx); } =20 static enum drm_mode_status hdlcd_crtc_mode_valid(struct drm_crtc *crtc, @@ -193,15 +228,23 @@ static enum drm_mode_status hdlcd_crtc_mode_valid(str= uct drm_crtc *crtc, { struct hdlcd_drm_private *hdlcd =3D crtc_to_hdlcd_priv(crtc); long rate, clk_rate =3D mode->clock * 1000; + enum drm_mode_status status =3D MODE_OK; + int idx; + + if (!drm_dev_enter(crtc->dev, &idx)) + return MODE_NOCLOCK; =20 rate =3D clk_round_rate(hdlcd->clk, clk_rate); /* 0.1% seems a close enough tolerance for the TDA19988 on Juno */ if (abs(rate - clk_rate) * 1000 > clk_rate) { /* clock required by mode not supported by hardware */ - return MODE_NOCLOCK; + status =3D MODE_NOCLOCK; + goto out; } =20 - return MODE_OK; +out: + drm_dev_exit(idx); + return status; } =20 static void hdlcd_crtc_atomic_begin(struct drm_crtc *crtc, @@ -268,10 +311,14 @@ static void hdlcd_plane_atomic_update(struct drm_plan= e *plane, struct hdlcd_drm_private *hdlcd; u32 dest_h; dma_addr_t scanout_start; + int idx; =20 - if (!fb) + if (!drm_dev_enter(plane->dev, &idx)) return; =20 + if (!fb) + goto out; + dest_h =3D drm_rect_height(&new_plane_state->dst); scanout_start =3D drm_fb_dma_get_gem_addr(fb, new_plane_state, 0); =20 @@ -280,6 +327,9 @@ static void hdlcd_plane_atomic_update(struct drm_plane = *plane, hdlcd_write(hdlcd, HDLCD_REG_FB_LINE_PITCH, fb->pitches[0]); hdlcd_write(hdlcd, HDLCD_REG_FB_LINE_COUNT, dest_h - 1); hdlcd_write(hdlcd, HDLCD_REG_FB_BASE, scanout_start); + +out: + drm_dev_exit(idx); } =20 static const struct drm_plane_helper_funcs hdlcd_plane_helper_funcs =3D { --=20 2.37.3 From nobody Mon Apr 29 00:54:04 2024 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 5FA66C433F5 for ; Sat, 1 Oct 2022 01:23:21 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S233238AbiJABXS (ORCPT ); Fri, 30 Sep 2022 21:23:18 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:37700 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S229952AbiJABWR (ORCPT ); Fri, 30 Sep 2022 21:22:17 -0400 Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.129.124]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id C26A71110 for ; Fri, 30 Sep 2022 18:19:35 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1664587173; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=IDL/AgTFWdm+PP/N7/EovNn2CFq5LCV9poLaDqClvoQ=; b=FVkx7Pr4QJZre7vkhoYsIU3kCsNK+ONERx9BkHuVS4zEuGZpIZlWeTArHC2KfnVF7AyvQu ZO8ZmD+fMOc2u8TTwkQr4YJJozxmx2gi0kVZ03cNaS4xKl5PtUK52qk4CmvDYFPGzCBuyI b+wuj1vR9wLaraCcqwzRkIlNiVhph8E= Received: from mail-ed1-f71.google.com (mail-ed1-f71.google.com [209.85.208.71]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_128_GCM_SHA256) id us-mta-369-fDxz7-gXP0yITLD4Fy3f0Q-1; Fri, 30 Sep 2022 21:19:32 -0400 X-MC-Unique: fDxz7-gXP0yITLD4Fy3f0Q-1 Received: by mail-ed1-f71.google.com with SMTP id y14-20020a056402440e00b0044301c7ccd9so4618970eda.19 for ; Fri, 30 Sep 2022 18:19:31 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date; bh=IDL/AgTFWdm+PP/N7/EovNn2CFq5LCV9poLaDqClvoQ=; b=cQcqSviRv2mj85wbQKQ0np5OPACL2zu0ERnik03oCDpKhT3TNkDLTrp6PWeh0Iyxjb S10H+ZRadeRg+DkT9IqfRzhcZG3vL52UcSv6oxphXmrcFNK+2+jlY0HsJ6EfmHk+Zaxa F7eS7idUnTrg7kerP1jyU1QbgRmlktvRG+ucBHI4p2uF7fzU4ziZ/sfHP+QyFv8iWmXS m94rwM9sFO77bknEcsjF353CTxWsDn7mAzxW26FDy1fYSJ3K/aAV+oDUw88+VHWD7PFC DzeflDQpHHmotZt40UG/2p3fkAGOJH1O+CvUu14sQYTTqoftXlknsYpYJAJWReZGE35C KrtA== X-Gm-Message-State: ACrzQf27v4SIMnNJ6ONSLSrMDdyfa5RC1v6JtE8YWz29Q8ltxQ73sA73 t1qp0r43k3Wkoc52LP93/Za2A+jPTDAT4Ev4S90tgOsvL+rcXlbuwiDtKOYdqpecP4JinJRXsKC SuE8BtU5jJz/Chv7n/qGcUhxr X-Received: by 2002:a17:907:7f13:b0:783:6227:b939 with SMTP id qf19-20020a1709077f1300b007836227b939mr7826775ejc.416.1664587171148; Fri, 30 Sep 2022 18:19:31 -0700 (PDT) X-Google-Smtp-Source: AMsMyM7wyZtxUwtQbZgS2YO5wic9h7BmWOQ9xCf4l19faoKnOUNoHKq43TyHpezKHLZZwq7kSKONgA== X-Received: by 2002:a17:907:7f13:b0:783:6227:b939 with SMTP id qf19-20020a1709077f1300b007836227b939mr7826762ejc.416.1664587170962; Fri, 30 Sep 2022 18:19:30 -0700 (PDT) Received: from pollux.redhat.com ([2a02:810d:4b40:2ee8:642:1aff:fe31:a15c]) by smtp.gmail.com with ESMTPSA id oz23-20020a170906cd1700b007724b8e6576sm1931950ejb.32.2022.09.30.18.19.30 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 30 Sep 2022 18:19:30 -0700 (PDT) From: Danilo Krummrich To: daniel@ffwll.ch, airlied@linux.ie, tzimmermann@suse.de, mripard@kernel.org, liviu.dudau@arm.com, brian.starkey@arm.com Cc: dri-devel@lists.freedesktop.org, linux-kernel@vger.kernel.org, Danilo Krummrich Subject: [PATCH drm-misc-next v3 6/7] drm/arm/hdlcd: debugfs: protect device resources after removal Date: Sat, 1 Oct 2022 03:19:04 +0200 Message-Id: <20221001011905.433408-7-dakr@redhat.com> X-Mailer: git-send-email 2.37.3 In-Reply-To: <20221001011905.433408-1-dakr@redhat.com> References: <20221001011905.433408-1-dakr@redhat.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Type: text/plain; charset="utf-8" (Hardware) resources which are bound to the driver and device lifecycle must not be accessed after the device and driver are unbound. However, the DRM device isn't freed as long as the last user didn't close it, hence userspace can still call into the driver. Therefore protect the critical sections which are accessing those resources with drm_dev_enter() and drm_dev_exit(). Signed-off-by: Danilo Krummrich --- drivers/gpu/drm/arm/hdlcd_drv.c | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/drivers/gpu/drm/arm/hdlcd_drv.c b/drivers/gpu/drm/arm/hdlcd_dr= v.c index e41def6d47cc..020c7d0c70a5 100644 --- a/drivers/gpu/drm/arm/hdlcd_drv.c +++ b/drivers/gpu/drm/arm/hdlcd_drv.c @@ -204,11 +204,19 @@ static int hdlcd_show_pxlclock(struct seq_file *m, vo= id *arg) struct drm_info_node *node =3D (struct drm_info_node *)m->private; struct drm_device *drm =3D node->minor->dev; struct hdlcd_drm_private *hdlcd =3D drm_to_hdlcd_priv(drm); - unsigned long clkrate =3D clk_get_rate(hdlcd->clk); - unsigned long mode_clock =3D hdlcd->crtc.mode.crtc_clock * 1000; + unsigned long clkrate, mode_clock; + int idx; + + if (!drm_dev_enter(drm, &idx)) + return -ENODEV; + + clkrate =3D clk_get_rate(hdlcd->clk); + mode_clock =3D hdlcd->crtc.mode.crtc_clock * 1000; =20 seq_printf(m, "hw : %lu\n", clkrate); seq_printf(m, "mode: %lu\n", mode_clock); + + drm_dev_exit(idx); return 0; } =20 --=20 2.37.3 From nobody Mon Apr 29 00:54:04 2024 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id E6384C433FE for ; Sat, 1 Oct 2022 01:23:23 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S233249AbiJABXW (ORCPT ); Fri, 30 Sep 2022 21:23:22 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:33818 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S232448AbiJABWT (ORCPT ); Fri, 30 Sep 2022 21:22:19 -0400 Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.129.124]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id C29CF113C for ; Fri, 30 Sep 2022 18:19:38 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1664587177; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=FflVPY5URLlO/QnD0oVlID0lCcDMEG9+FRQWDZ3uQVQ=; b=VxU5y0OkNRq/bHunntn/G99Fe2V88WVDMYvSgg+bQ8zQYsxOfSgjG+YhrzWpU/WCXPF2kd fse1rAuZ69tGnNj5tWYwzLdNXLOB0OUJ7l/MtehNDK8mntTrspdbVTrJnhm41me1JaBJ+s Ggt7XVfTAejc6V3tPw+PPlrgYM7QNhs= Received: from mail-ed1-f70.google.com (mail-ed1-f70.google.com [209.85.208.70]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_128_GCM_SHA256) id us-mta-81-ZJwmnA6MO3mopCO5aGBlFQ-1; Fri, 30 Sep 2022 21:19:36 -0400 X-MC-Unique: ZJwmnA6MO3mopCO5aGBlFQ-1 Received: by mail-ed1-f70.google.com with SMTP id x5-20020a05640226c500b00451ec193793so4667657edd.16 for ; Fri, 30 Sep 2022 18:19:35 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date; bh=FflVPY5URLlO/QnD0oVlID0lCcDMEG9+FRQWDZ3uQVQ=; b=WL1xcXJQmiJeTGbxplKBaggA6by2sUi6jwc+fCiensvgphQfrZoO5gjTwB8y7CxOEj jWMocl+1NeShT4NUI1NvJq3dA+PI/o5w4HkobkouhSPL6p6XY8pYxADngZ7gIoL8yny6 oL0un7iPmJWJlSWz2ExAFJiLK71aeLpXInWvY23lnJiPpIhWjswMRimCanOT6pg7Zzwf cocqa4tU8iLb1MsDtEJeC34JmaDrL06Eghxb8xmGX+bWDCnicINr+p+6QXkOo4X5Pxn6 j+Hq8miszhOV9OSSD79ZyvaWfOSKKza3wSocnpP4A2k6CjkaGOMmpgAc00FcrhG3nHtW uVoA== X-Gm-Message-State: ACrzQf1FoSKlOUuWcK9I0JesRYS+tmRzoV//VDiE5T4sheVqVvFaXAFG xt40Y80VtMVWDGM0Uf2n2doqeFaNIBmNJNs0htYIUkUZCvvWqQBdObRccK2mIxufYXmOfhakLb5 X+SEXcnQ3kCbJ74HL0EeGgAzu X-Received: by 2002:a17:906:7310:b0:782:cfd4:9c07 with SMTP id di16-20020a170906731000b00782cfd49c07mr8553112ejc.708.1664587174774; Fri, 30 Sep 2022 18:19:34 -0700 (PDT) X-Google-Smtp-Source: AMsMyM4x4xTB6S0FGXzv4kk/zNUKjUE/t9WGKOcAeGn0jSeAtcx2ggB6JSwppKVYxMJjyrcRCJ5xeQ== X-Received: by 2002:a17:906:7310:b0:782:cfd4:9c07 with SMTP id di16-20020a170906731000b00782cfd49c07mr8553105ejc.708.1664587174628; Fri, 30 Sep 2022 18:19:34 -0700 (PDT) Received: from pollux.redhat.com ([2a02:810d:4b40:2ee8:642:1aff:fe31:a15c]) by smtp.gmail.com with ESMTPSA id g18-20020a17090604d200b0073c8d4c9f38sm1927167eja.177.2022.09.30.18.19.33 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 30 Sep 2022 18:19:34 -0700 (PDT) From: Danilo Krummrich To: daniel@ffwll.ch, airlied@linux.ie, tzimmermann@suse.de, mripard@kernel.org, liviu.dudau@arm.com, brian.starkey@arm.com Cc: dri-devel@lists.freedesktop.org, linux-kernel@vger.kernel.org, Danilo Krummrich Subject: [PATCH drm-misc-next v3 7/7] drm/arm/hdlcd: remove calls to drm_mode_config_cleanup() Date: Sat, 1 Oct 2022 03:19:05 +0200 Message-Id: <20221001011905.433408-8-dakr@redhat.com> X-Mailer: git-send-email 2.37.3 In-Reply-To: <20221001011905.433408-1-dakr@redhat.com> References: <20221001011905.433408-1-dakr@redhat.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Type: text/plain; charset="utf-8" drm_mode_config_init() simply calls drmm_mode_config_init(), hence cleanup is automatically handled through registering drm_mode_config_cleanup() with drmm_add_action_or_reset(). While at it, get rid of the deprecated drm_mode_config_init() and replace it with drmm_mode_config_init() directly. Signed-off-by: Danilo Krummrich --- drivers/gpu/drm/arm/hdlcd_drv.c | 19 +++++++++++++------ 1 file changed, 13 insertions(+), 6 deletions(-) diff --git a/drivers/gpu/drm/arm/hdlcd_drv.c b/drivers/gpu/drm/arm/hdlcd_dr= v.c index 020c7d0c70a5..e242b6223d77 100644 --- a/drivers/gpu/drm/arm/hdlcd_drv.c +++ b/drivers/gpu/drm/arm/hdlcd_drv.c @@ -175,14 +175,21 @@ static const struct drm_mode_config_funcs hdlcd_mode_= config_funcs =3D { .atomic_commit =3D drm_atomic_helper_commit, }; =20 -static void hdlcd_setup_mode_config(struct drm_device *drm) +static int hdlcd_setup_mode_config(struct drm_device *drm) { - drm_mode_config_init(drm); + int ret; + + ret =3D drmm_mode_config_init(drm); + if (ret) + return ret; + drm->mode_config.min_width =3D 0; drm->mode_config.min_height =3D 0; drm->mode_config.max_width =3D HDLCD_MAX_XRES; drm->mode_config.max_height =3D HDLCD_MAX_YRES; drm->mode_config.funcs =3D &hdlcd_mode_config_funcs; + + return 0; } =20 #ifdef CONFIG_DEBUG_FS @@ -263,7 +270,10 @@ static int hdlcd_drm_bind(struct device *dev) =20 dev_set_drvdata(dev, drm); =20 - hdlcd_setup_mode_config(drm); + ret =3D hdlcd_setup_mode_config(drm); + if (ret) + goto err_free; + ret =3D hdlcd_load(drm, 0); if (ret) goto err_free; @@ -322,9 +332,7 @@ static int hdlcd_drm_bind(struct device *dev) hdlcd_irq_uninstall(hdlcd); of_reserved_mem_device_release(drm->dev); err_free: - drm_mode_config_cleanup(drm); dev_set_drvdata(dev, NULL); - return ret; } =20 @@ -345,7 +353,6 @@ static void hdlcd_drm_unbind(struct device *dev) if (pm_runtime_enabled(dev)) pm_runtime_disable(dev); of_reserved_mem_device_release(dev); - drm_mode_config_cleanup(drm); dev_set_drvdata(dev, NULL); } =20 --=20 2.37.3