Received: by 2002:ac0:a594:0:0:0:0:0 with SMTP id m20-v6csp1753930imm; Wed, 16 May 2018 02:31:49 -0700 (PDT) X-Google-Smtp-Source: AB8JxZr6wRFeauNkFsyZSUqcMRkpLBp6Uq59JbE6XUxX4Ed4Yq5D0Kvb9UdgHMJA+81B8Nk9LiWb X-Received: by 2002:a62:f80c:: with SMTP id d12-v6mr104213pfh.159.1526463109094; Wed, 16 May 2018 02:31:49 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1526463109; cv=none; d=google.com; s=arc-20160816; b=GJTpmxoK7648PFfA8a5lvQLuEiiT5NchI6j+q45Zv8D//VLJHDHOpDRG3BihTepgu8 sfHAg9hB6pdHYeAV8YygWPSxnXM3OoI8dFa/mtQaYtFyIj3QNtfqiS1TfxcU1jzQx2fM 6sQekx5Pax8gzUvi01uPZKUl35JVs2f1Nx+tnVRVIVsmoPS///D5g0e+V+ZswG2XRu+4 5poeAsvyWtFyXISl7Uam2K6NbYHRP5oAcA7OuE2Ffsa91l0Olb3CA8J3E1Oezr00XLwj ouSUj+d7T1PF+3kcDfZkE8TNwyAZ4qoa9yj8EQEMp1SlCvRMInNCpDC47pJxOvGh/515 dYdg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:user-agent:in-reply-to :content-disposition:mime-version:references:mail-followup-to :message-id:subject:cc:to:from:date:dkim-signature :arc-authentication-results; bh=DrvagcF/iiBQ7/snOZb6bVc2jDLcNjtFUcMY/NWfXZk=; b=C9YQEtrENk9o57gKaKWL/Q6Zk1diF8Lq7N5trxddFTsUL+1Jt3tsHa8B3td8JaLQmK WyCwByK6jV/RPufvg6NUL9vwh+yDURrGozWuJ/ggZqloXG/uyEYDhG4xjjhfmWXBKsmD 4BaokZPQ6/PZgPfNeT6m19wTt7rzunltGu//oOj83TugIPE6zsCIqbH/NdOmpKI56d31 W6C9dZLbuBvC9hkVpkT/50/XD0uEYkJRFEWTf1qAD1uNwC+JZ2M/CyjAotODMBM0kxAe lQOc9P79PIVS5TawYXlFflrPhCpr0qXfmjHrZuBmQUOt3dP/XqKsYxrXCMoX06qfjkmL AMFA== ARC-Authentication-Results: i=1; mx.google.com; dkim=fail header.i=@ffwll.ch header.s=google header.b=Qcnzz+L8; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id r14-v6si2165323pfa.296.2018.05.16.02.31.34; Wed, 16 May 2018 02:31:49 -0700 (PDT) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; dkim=fail header.i=@ffwll.ch header.s=google header.b=Qcnzz+L8; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1751662AbeEPJbV (ORCPT + 99 others); Wed, 16 May 2018 05:31:21 -0400 Received: from mail-wm0-f65.google.com ([74.125.82.65]:37678 "EHLO mail-wm0-f65.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751395AbeEPJbP (ORCPT ); Wed, 16 May 2018 05:31:15 -0400 Received: by mail-wm0-f65.google.com with SMTP id l1-v6so60757wmb.2 for ; Wed, 16 May 2018 02:31:15 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=ffwll.ch; s=google; h=sender:date:from:to:cc:subject:message-id:mail-followup-to :references:mime-version:content-disposition:in-reply-to:user-agent; bh=DrvagcF/iiBQ7/snOZb6bVc2jDLcNjtFUcMY/NWfXZk=; b=Qcnzz+L8RjlddEPrhmuObkl/8QpPyvuhCgtrYuVTY/zN18qQ5d3pBiaHtwQTDyv219 1uxT91nU1thlEXV/Gpd/s4MXKuWVWnwFdH6ay80Hwrk4+7iiyt6SRP0RRh4AWm7+z1sm 0o4yhQ5Xt9mVWxBb563PieNFbq/W0LLMTdUrU= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:sender:date:from:to:cc:subject:message-id :mail-followup-to:references:mime-version:content-disposition :in-reply-to:user-agent; bh=DrvagcF/iiBQ7/snOZb6bVc2jDLcNjtFUcMY/NWfXZk=; b=hCgWXFShey/kIMo8SXypclHAW0KIVz90geoNvLzSIUOUEtkdkuQizlEyAZwFJ+C8WQ QSiF6TDUb8GvZ79Zp+16VRCM6llufXt362OHblIQQ/mtGnsmiWDr6DNkq3+caD2aeFS6 nopDJKgxNiOj9J6IE4IYPqPATlzvhk9zygvfKDc0KHx5/APaWaIK90lcEWOrGBDEijQi fLIS3sMDfwj7IdFDtXshDv5sZle+UoFZnemHHwEyLdh3cuAIBrDResJcyT6/6kkg5m6y TuHDvVsl1o1CHrz1RQkeTJP/fOodf6taUlHlTeZDZbRY7WzmVL/Qs0H7aI9SosCqymjR V5yA== X-Gm-Message-State: ALKqPwffskKKfU4oSPKlnI/7R7aFmNEUpI++b7uqMjQ9kgV4kPZPjOEa 9ipccfdhSt+cea7fLfFX8Nu2bQ== X-Received: by 2002:a50:b654:: with SMTP id c20-v6mr119792ede.190.1526463074440; Wed, 16 May 2018 02:31:14 -0700 (PDT) Received: from phenom.ffwll.local ([2a02:168:5628:0:d0c7:bcda:eea:9e5d]) by smtp.gmail.com with ESMTPSA id d17-v6sm1133263ede.65.2018.05.16.02.31.12 (version=TLS1_2 cipher=ECDHE-RSA-CHACHA20-POLY1305 bits=256/256); Wed, 16 May 2018 02:31:13 -0700 (PDT) Date: Wed, 16 May 2018 11:31:10 +0200 From: Daniel Vetter To: Peter Rosin Cc: Daniel Vetter , Andrzej Hajda , Linux Kernel Mailing List , Archit Taneja , Laurent Pinchart , David Airlie , Peter Senna Tschudin , Martin Donnelly , Martyn Welch , Gustavo Padovan , Maarten Lankhorst , Sean Paul , Inki Dae , Joonyoung Shim , Seung-Woo Kim , Kyungmin Park , Kukjin Kim , Krzysztof Kozlowski , CK Hu , Philipp Zabel , Matthias Brugger , Rob Clark , Sandy Huang , Heiko =?iso-8859-1?Q?St=FCbner?= , Benjamin Gaignard , Vincent Abriou , dri-devel , Linux ARM , linux-samsung-soc , "moderated list:ARM/Mediatek SoC support" , linux-arm-msm , freedreno , "open list:DRM DRIVERS FOR RENESAS" , "open list:ARM/Rockchip SoC..." , Jyri Sarha Subject: Re: [PATCH v2 26/26] drm/bridge: establish a link between the bridge supplier and consumer Message-ID: <20180516093110.GC3438@phenom.ffwll.local> Mail-Followup-To: Peter Rosin , Andrzej Hajda , Linux Kernel Mailing List , Archit Taneja , Laurent Pinchart , David Airlie , Peter Senna Tschudin , Martin Donnelly , Martyn Welch , Gustavo Padovan , Maarten Lankhorst , Sean Paul , Inki Dae , Joonyoung Shim , Seung-Woo Kim , Kyungmin Park , Kukjin Kim , Krzysztof Kozlowski , CK Hu , Philipp Zabel , Matthias Brugger , Rob Clark , Sandy Huang , Heiko =?iso-8859-1?Q?St=FCbner?= , Benjamin Gaignard , Vincent Abriou , dri-devel , Linux ARM , linux-samsung-soc , "moderated list:ARM/Mediatek SoC support" , linux-arm-msm , freedreno , "open list:DRM DRIVERS FOR RENESAS" , "open list:ARM/Rockchip SoC..." , Jyri Sarha References: <20180504135212.26977-1-peda@axentia.se> <20180504135212.26977-27-peda@axentia.se> <20180514162828.GE28661@phenom.ffwll.local> <73fa1ca3-28e4-96c5-1fc6-23e9c0cebb49@axentia.se> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: X-Operating-System: Linux phenom 4.15.0-3-amd64 User-Agent: Mutt/1.9.5 (2018-04-13) Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On Tue, May 15, 2018 at 01:09:59PM +0200, Peter Rosin wrote: > On 2018-05-15 12:22, Daniel Vetter wrote: > > On Mon, May 14, 2018 at 10:40 PM, Peter Rosin wrote: > >> On 2018-05-14 18:28, Daniel Vetter wrote: > >>> On Fri, May 11, 2018 at 09:37:47AM +0200, Peter Rosin wrote: > >>>> On 2018-05-10 10:10, Andrzej Hajda wrote: > >>>>> On 04.05.2018 15:52, Peter Rosin wrote: > >>>>>> If the bridge supplier is unbound, this will bring the bridge consumer > >>>>>> down along with the bridge. Thus, there will no longer linger any > >>>>>> dangling pointers from the bridge consumer (the drm_device) to some > >>>>>> non-existent bridge supplier. > >>>>>> > >>>>>> Signed-off-by: Peter Rosin > >>>>>> --- > >>>>>> drivers/gpu/drm/drm_bridge.c | 18 ++++++++++++++++++ > >>>>>> include/drm/drm_bridge.h | 2 ++ > >>>>>> 2 files changed, 20 insertions(+) > >>>>>> > >>>>>> diff --git a/drivers/gpu/drm/drm_bridge.c b/drivers/gpu/drm/drm_bridge.c > >>>>>> index 78d186b6831b..0259f0a3ff27 100644 > >>>>>> --- a/drivers/gpu/drm/drm_bridge.c > >>>>>> +++ b/drivers/gpu/drm/drm_bridge.c > >>>>>> @@ -26,6 +26,7 @@ > >>>>>> #include > >>>>>> > >>>>>> #include > >>>>>> +#include > >>>>>> #include > >>>>>> > >>>>>> #include "drm_crtc_internal.h" > >>>>>> @@ -127,12 +128,25 @@ int drm_bridge_attach(struct drm_encoder *encoder, struct drm_bridge *bridge, > >>>>>> if (bridge->dev) > >>>>>> return -EBUSY; > >>>>>> > >>>>>> + if (encoder->dev->dev != bridge->odev) { > >>>>> > >>>>> I wonder why device_link_add does not handle this case (self dependency) > >>>>> silently as noop, as it seems to be a correct behavior. > >>>> > >>>> It's kind-of a silly corner-case though, so perfectly understandable > >>>> that it isn't handled. > >>>> > >>>>>> + bridge->link = device_link_add(encoder->dev->dev, > >>>>>> + bridge->odev, 0); > >>>>>> + if (!bridge->link) { > >>>>>> + dev_err(bridge->odev, "failed to link bridge to %s\n", > >>>>>> + dev_name(encoder->dev->dev)); > >>>>>> + return -EINVAL; > >>>>>> + } > >>>>>> + } > >>>>>> + > >>>>>> bridge->dev = encoder->dev; > >>>>>> bridge->encoder = encoder; > >>>>>> > >>>>>> if (bridge->funcs->attach) { > >>>>>> ret = bridge->funcs->attach(bridge); > >>>>>> if (ret < 0) { > >>>>>> + if (bridge->link) > >>>>>> + device_link_del(bridge->link); > >>>>>> + bridge->link = NULL; > >>>>>> bridge->dev = NULL; > >>>>>> bridge->encoder = NULL; > >>>>>> return ret; > >>>>>> @@ -159,6 +173,10 @@ void drm_bridge_detach(struct drm_bridge *bridge) > >>>>>> if (bridge->funcs->detach) > >>>>>> bridge->funcs->detach(bridge); > >>>>>> > >>>>>> + if (bridge->link) > >>>>>> + device_link_del(bridge->link); > >>>>>> + bridge->link = NULL; > >>>>>> + > >>>>>> bridge->dev = NULL; > >>>>>> } > >>>>>> > >>>>>> diff --git a/include/drm/drm_bridge.h b/include/drm/drm_bridge.h > >>>>>> index b656e505d11e..804189c63a4c 100644 > >>>>>> --- a/include/drm/drm_bridge.h > >>>>>> +++ b/include/drm/drm_bridge.h > >>>>>> @@ -261,6 +261,7 @@ struct drm_bridge_timings { > >>>>>> * @list: to keep track of all added bridges > >>>>>> * @timings: the timing specification for the bridge, if any (may > >>>>>> * be NULL) > >>>>>> + * @link: drm consumer <-> bridge supplier > >>>>> > >>>>> Nitpick: "<->" suggests symmetry, maybe "device link from drm consumer > >>>>> to the bridge" would be better. > >>>> > >>>> I meant "<->" to indicate that the link is bidirectional, not that the > >>>> relationship is in any way symmetric. I wasn't aware of any implication > >>>> of a symmetric relationship when using "<->", do you have a reference? > >>>> But I guess the different arrow notations in math are somewhat overloaded > >>>> and that someone at some point must have used "<->" to indicate a > >>>> symmetric relationship... > >>> > >>> Yeah I agree with Andrzej here, for me <-> implies a symmetric > >>> relationship. Spelling it out like Andrzej suggested sounds like the > >>> better idea. > >>> -Daniel > >> > >> Ok, I guess that means I have to do a v3 after all. Or can this > >> trivial documentation update be done by the committer? I hate to > >> spam everyone with another volley... > >> > >> Or perhaps I should squash patches 2-23 that are all rather similar > >> and mechanic? I separated them to allow for easier review from > >> individual driver maintainers, but that didn't seem to happen > >> anyway... > > > > Do another volley of the full set, or in-reply-to to just replace the > > patch that needs to be respun (but some people don't like that). > > > > When resending just make sure you're picking up all the acks/r-bs you > > have already. > > Right, I always try to do that. One Ack that I did not include in v2 > was the one you had on v1 24/24 (i.e. this patch). The reason I did > not add your Ack for v2 even on the patch where it obviously applied > was that I didn't know if you'd barf on the odev name. > > But it was (and still is) a bit unclear if that was on Ack on the > last patch only, or if it was for the whole series? I think it might > have been for the whole series, but I'm not sure and I hate to be a > presumptuous idiot... Ack on the overall concept, and I'm ok with odev too. But definitely get acks from relevant people (bridge/driver maintainers). In terms of patches, I'd say patch 1 + 24-26 have my Acked-by: Daniel Vetter -Daniel > > Cheers, > Peter > > > -Daniel > >> Cheers, > >> Peter > >> > >>> > >>>> > >>>>> Anyway: > >>>>> Reviewed-by: Andrzej Hajda > >>>> > >>>> Thanks! > >>>> > >>>> Cheers, > >>>> Peter > >>>> > >>>>> -- > >>>>> Regards > >>>>> Andrzej > >>>>> > >>>>>> * @funcs: control functions > >>>>>> * @driver_private: pointer to the bridge driver's internal context > >>>>>> */ > >>>>>> @@ -271,6 +272,7 @@ struct drm_bridge { > >>>>>> struct drm_bridge *next; > >>>>>> struct list_head list; > >>>>>> const struct drm_bridge_timings *timings; > >>>>>> + struct device_link *link; > >>>>>> > >>>>>> const struct drm_bridge_funcs *funcs; > >>>>>> void *driver_private; > >>>>> > >>>>> > >>>> > >>> > >> > >> _______________________________________________ > >> dri-devel mailing list > >> dri-devel@lists.freedesktop.org > >> https://lists.freedesktop.org/mailman/listinfo/dri-devel > > > > > > > -- Daniel Vetter Software Engineer, Intel Corporation http://blog.ffwll.ch