Received: by 2002:a05:6358:4e97:b0:b3:742d:4702 with SMTP id ce23csp1322129rwb; Fri, 19 Aug 2022 01:18:27 -0700 (PDT) X-Google-Smtp-Source: AA6agR6vw7cYAg4140i1oa9Y1LTBFt6nun03W9QfTiwndexJxQadTTXX9lG3eumsG/4KSer5gO4X X-Received: by 2002:a17:906:7953:b0:732:345:ef02 with SMTP id l19-20020a170906795300b007320345ef02mr4312979ejo.24.1660897107426; Fri, 19 Aug 2022 01:18:27 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1660897107; cv=none; d=google.com; s=arc-20160816; b=WV/juy53OT2Drz1ENrrLoNh89qQ3R1gEoGiZS2iXMgo32NhDPsgPfTzvhRp53ufA8o 8tt/ZvyUm4B37VK3K+sF784qzJAtYHWMJ1smyhbgNCYbyDIn3YZDfrN8sTMcm3oDNV2i xOf8AKUIZ3l+u7laIi7VncXZNo6n264U7zR3Ud4cltm2YZMQkpwY2fHJwH4aoEkrcrxd m6SlKeVVdPPbMhPbcwaNJ0fb1IgyIEzYH6b3BiGiQ8yElgM1Jyba1ybmVj+ghIGJdVbo PiFmoNulKf24zlEUCFEttICTbEr31pPQwVdbjjzYrX70iwKOKoE4uDui1icim3KFukk8 tqKw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:in-reply-to:content-disposition:mime-version :references:message-id:subject:cc:to:from:date:feedback-id :dkim-signature:dkim-signature; bh=My8sr3xWTACzup96ELiV9JRekYdFH7cwGM6u31VjkYE=; b=a7LrW+YSaDuRek8qiN7YV1hvdzESA8tOVRhRIW8eAcHdCy2Ca8FtQZqO4jAfqlnuB6 NhlQSagKX7omOrXr2usTVsPy9ZfW2VbwPZE2s4QuWltRk225ddXipp5bvV1BTksDfvmZ 834uDULvvtVKlOGAMhworZF025VdbipdBVSt9ktiZsVJRN77SUuLD/6Rc1BwsZmGMFjm bzxJDDTqBraYqZB9IAlYDFYNQ1mUsa8kmO6k5cYkYuyDrYSkQYhDEvHP/u/VTSeOLe9k +XjMNQr86eJIT28wJNlPJilUuNzAfJAIWfW+i+xPCosHnHTY60Dlha3mCSJL+7p2Hh6j sYAQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@cerno.tech header.s=fm3 header.b=itP8Rp+Q; dkim=pass header.i=@messagingengine.com header.s=fm1 header.b=O7Z2N+Hx; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=cerno.tech Return-Path: Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id sc30-20020a1709078a1e00b0073860fb3cddsi2525149ejc.702.2022.08.19.01.18.01; Fri, 19 Aug 2022 01:18:27 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) client-ip=2620:137:e000::1:20; Authentication-Results: mx.google.com; dkim=pass header.i=@cerno.tech header.s=fm3 header.b=itP8Rp+Q; dkim=pass header.i=@messagingengine.com header.s=fm1 header.b=O7Z2N+Hx; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=cerno.tech Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1346935AbiHSH3h (ORCPT + 99 others); Fri, 19 Aug 2022 03:29:37 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:40924 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1345460AbiHSH3f (ORCPT ); Fri, 19 Aug 2022 03:29:35 -0400 Received: from out1-smtp.messagingengine.com (out1-smtp.messagingengine.com [66.111.4.25]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 78BF294EE2 for ; Fri, 19 Aug 2022 00:29:34 -0700 (PDT) Received: from compute4.internal (compute4.nyi.internal [10.202.2.44]) by mailout.nyi.internal (Postfix) with ESMTP id DB9A85C0125; Fri, 19 Aug 2022 03:29:33 -0400 (EDT) Received: from mailfrontend1 ([10.202.2.162]) by compute4.internal (MEProxy); Fri, 19 Aug 2022 03:29:33 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=cerno.tech; h=cc :cc:content-type:date:date:from:from:in-reply-to:in-reply-to :message-id:mime-version:references:reply-to:sender:subject :subject:to:to; s=fm3; t=1660894173; x=1660980573; bh=My8sr3xWTA Czup96ELiV9JRekYdFH7cwGM6u31VjkYE=; b=itP8Rp+QxGIXqHXbdd/1bezVLM y/wf41htSKaS9BwzoEhWgl8+yy99yWE8nb38qaR4rEqdbK7kgnrbQEnfNeTA8SQr rK7LzGF36DHW7ExajUTNGulEi+/R/u/JT5kQZOS2F+JJ3bxeAbdshougk5Oe71zc ux+/KGPT1OOMKYo37qrwYAUAUfomN7D7EMQaNz7Xtjl2jwfIRnkVF9dqdNXVJwqe ux7gN9oPy58VQhEkEqKIQr5sCjK/gcCmq/iB0TypHq2Fi81KnsHYxxQQA2X17jNp cgfxhDF8rN/sD7P1zx6co5w5hNhHq0KLsX6CvBkofypamR7XH0X4czlRHjrQ== DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d= messagingengine.com; h=cc:cc:content-type:date:date:feedback-id :feedback-id:from:from:in-reply-to:in-reply-to:message-id :mime-version:references:reply-to:sender:subject:subject:to:to :x-me-proxy:x-me-proxy:x-me-sender:x-me-sender:x-sasl-enc; s= fm1; t=1660894173; x=1660980573; bh=My8sr3xWTACzup96ELiV9JRekYdF H7cwGM6u31VjkYE=; b=O7Z2N+HxRDIdBr5bFSzqVCi5p6PRFpoJkcXh7K0elAXP vaouQGos/CWBLQRTyuYmWyDDEqlzKhBTvTp8wSFl5/eklY/XqwZrU9T5+CTBmyzC VxspXpQ8qmyrDNSW73KwnVmuowREpc5dxogtue2BBZhclVfVSda0ceGvPDrUxbZc 0JfH8GjTJJBL4YQXnwNrF0kGRCP79ehx7ADWt0rkJ6hn65o06a1bn5VegpoQpItk 7nZC4jWa9qUjSqvjkxWPKGsNPqTd7Uk4vhQX6ooD18JpzGNxYIxTa+R/YoTsT2KB pcmHgDpDcxky/fFpnVTz1RtrRMr8e9bOpc3B7/cE/Q== X-ME-Sender: X-ME-Received: X-ME-Proxy-Cause: gggruggvucftvghtrhhoucdtuddrgedvfedrvdeitddguddvvdcutefuodetggdotefrod ftvfcurfhrohhfihhlvgemucfhrghsthforghilhdpqfgfvfdpuffrtefokffrpgfnqfgh necuuegrihhlohhuthemuceftddtnecusecvtfgvtghiphhivghnthhsucdlqddutddtmd enucfjughrpeffhffvvefukfhfgggtuggjsehgtderredttddvnecuhfhrohhmpeforgig ihhmvgcutfhiphgrrhguuceomhgrgihimhgvsegtvghrnhhordhtvggthheqnecuggftrf grthhtvghrnhepteefffefgfektdefgfeludfgtdejfeejvddttdekteeiffejvdfgheeh fffhvedunecuvehluhhsthgvrhfuihiivgeptdenucfrrghrrghmpehmrghilhhfrhhomh epmhgrgihimhgvsegtvghrnhhordhtvggthh X-ME-Proxy: Feedback-ID: i8771445c:Fastmail Received: by mail.messagingengine.com (Postfix) with ESMTPA; Fri, 19 Aug 2022 03:29:33 -0400 (EDT) Date: Fri, 19 Aug 2022 09:29:30 +0200 From: Maxime Ripard To: Danilo Krummrich Cc: daniel@ffwll.ch, airlied@linux.ie, tzimmermann@suse.de, dri-devel@lists.freedesktop.org, linux-kernel@vger.kernel.org Subject: Re: [PATCH drm-misc-next 3/3] drm/vc4: crtc: protect device resources after removal Message-ID: <20220819072930.fg56dkzbdu6f7s25@houat> References: <20220819002905.82095-1-dakr@redhat.com> <20220819002905.82095-4-dakr@redhat.com> MIME-Version: 1.0 Content-Type: multipart/signed; micalg=pgp-sha512; protocol="application/pgp-signature"; boundary="v6qavohxtl7q5awx" Content-Disposition: inline In-Reply-To: <20220819002905.82095-4-dakr@redhat.com> X-Spam-Status: No, score=-2.8 required=5.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,RCVD_IN_DNSWL_LOW, RCVD_IN_MSPIKE_H3,RCVD_IN_MSPIKE_WL,SPF_HELO_PASS,SPF_PASS, T_SCC_BODY_TEXT_LINE autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lindbergh.monkeyblade.net Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org --v6qavohxtl7q5awx Content-Type: text/plain; charset=us-ascii Content-Disposition: inline Content-Transfer-Encoding: quoted-printable Hi, On Fri, Aug 19, 2022 at 02:29:05AM +0200, Danilo Krummrich wrote: > (Hardware) resources which are bound to the driver and device lifecycle > must not be accessed after the device and driver are unbound. >=20 > However, the DRM device isn't freed as long as the last user closed it, > hence userspace can still call into the driver. >=20 > Therefore protect the critical sections which are accessing those > resources with drm_dev_enter() and drm_dev_exit(). >=20 > Fixes: 7cc4214c27cf ("drm/vc4: crtc: Switch to drmm_kzalloc") > Signed-off-by: Danilo Krummrich > --- > drivers/gpu/drm/vc4/vc4_crtc.c | 41 +++++++++++++++++++++++++++++++++- > 1 file changed, 40 insertions(+), 1 deletion(-) >=20 > diff --git a/drivers/gpu/drm/vc4/vc4_crtc.c b/drivers/gpu/drm/vc4/vc4_crt= c.c > index 2def6e2ad6f0..51daf190196e 100644 > --- a/drivers/gpu/drm/vc4/vc4_crtc.c > +++ b/drivers/gpu/drm/vc4/vc4_crtc.c > @@ -39,6 +39,7 @@ > #include > #include > #include > +#include > #include > #include > #include > @@ -295,10 +296,17 @@ struct drm_encoder *vc4_get_crtc_encoder(struct drm= _crtc *crtc, > static void vc4_crtc_pixelvalve_reset(struct drm_crtc *crtc) > { > struct vc4_crtc *vc4_crtc =3D to_vc4_crtc(crtc); > + struct drm_device *dev =3D crtc->dev; > + int idx; > + > + if (!drm_dev_enter(dev, &idx)) > + return; > =20 > /* The PV needs to be disabled before it can be flushed */ > CRTC_WRITE(PV_CONTROL, CRTC_READ(PV_CONTROL) & ~PV_CONTROL_EN); > CRTC_WRITE(PV_CONTROL, CRTC_READ(PV_CONTROL) | PV_CONTROL_FIFO_CLR); > + > + drm_dev_exit(idx); > } > =20 > static void vc4_crtc_config_pv(struct drm_crtc *crtc, struct drm_encoder= *encoder, > @@ -321,6 +329,10 @@ static void vc4_crtc_config_pv(struct drm_crtc *crtc= , struct drm_encoder *encode > u32 format =3D is_dsi1 ? PV_CONTROL_FORMAT_DSIV_24 : PV_CONTROL_FORMAT_= 24; > u8 ppc =3D pv_data->pixels_per_clock; > bool debug_dump_regs =3D false; > + int idx; > + > + if (!drm_dev_enter(dev, &idx)) > + return; > =20 > if (debug_dump_regs) { > struct drm_printer p =3D drm_info_printer(&vc4_crtc->pdev->dev); > @@ -410,6 +422,8 @@ static void vc4_crtc_config_pv(struct drm_crtc *crtc,= struct drm_encoder *encode > drm_crtc_index(crtc)); > drm_print_regset32(&p, &vc4_crtc->regset); > } > + > + drm_dev_exit(idx); > } > =20 > static void require_hvs_enabled(struct drm_device *dev) > @@ -430,13 +444,18 @@ static int vc4_crtc_disable(struct drm_crtc *crtc, > struct vc4_crtc *vc4_crtc =3D to_vc4_crtc(crtc); > struct drm_device *dev =3D crtc->dev; > struct vc4_dev *vc4 =3D to_vc4_dev(dev); > - int ret; > + int idx, ret; > + > + if (!drm_dev_enter(dev, &idx)) > + return -ENODEV; > =20 > CRTC_WRITE(PV_V_CONTROL, > CRTC_READ(PV_V_CONTROL) & ~PV_VCONTROL_VIDEN); > ret =3D wait_for(!(CRTC_READ(PV_V_CONTROL) & PV_VCONTROL_VIDEN), 1); > WARN_ONCE(ret, "Timeout waiting for !PV_VCONTROL_VIDEN\n"); > =20 > + drm_dev_exit(idx); > + I think this would be easier to follow if we were protecting the entire function with our lock. Having locks taken in the middle of the function is harder to identify whether or not one particular function is safe or not. The same applies to the plane patch Maxime --v6qavohxtl7q5awx Content-Type: application/pgp-signature; name="signature.asc" -----BEGIN PGP SIGNATURE----- iHUEABYKAB0WIQRcEzekXsqa64kGDp7j7w1vZxhRxQUCYv872gAKCRDj7w1vZxhR xS9MAQCa/qo5n5/nskuFs/e0cpI3NV0AjoLytdAPrVVvecr6PwEAuCU6l3kgsan/ a/tIIqMlOAakafUEU6K3H8wEyR1/yAU= =/eO7 -----END PGP SIGNATURE----- --v6qavohxtl7q5awx--