From: Daniel Vetter <daniel@ffwll.ch>
To: Jyri Sarha <jsarha@ti.com>
Cc: Daniel Vetter <daniel@ffwll.ch>,
Sean Paul <seanpaul@chromium.org>, Lukas Wunner <lukas@wunner.de>,
Greg KH <gregkh@linuxfoundation.org>,
"Rafael J . Wysocki" <rafael.j.wysocki@intel.com>,
Linux Kernel Mailing List <linux-kernel@vger.kernel.org>,
dri-devel <dri-devel@lists.freedesktop.org>,
Tomi Valkeinen <tomi.valkeinen@ti.com>,
Thierry Reding <thierry.reding@gmail.com>
Subject: Re: [PATCH RFC] driver core: Reprobe consumer if it was unbound by dropped device_link
Date: Wed, 15 Aug 2018 10:49:54 +0200 [thread overview]
Message-ID: <20180815084954.GQ21634@phenom.ffwll.local> (raw)
In-Reply-To: <8e3bbebb-80b6-1747-6a5b-ee63fa70af6c@ti.com>
On Wed, Aug 15, 2018 at 09:49:58AM +0300, Jyri Sarha wrote:
> On 14/08/18 17:17, Daniel Vetter wrote:
> > On Mon, Feb 26, 2018 at 8:52 AM, Jyri Sarha <jsarha@ti.com> wrote:
> >> On 25/02/18 11:22, Lukas Wunner wrote:
> >>> On Thu, Feb 22, 2018 at 07:42:46PM +0200, Jyri Sarha wrote:
> >>>> Put consumer device to deferred probe list if it is unbound due to a
> >>>> dropped link to a supplier.
> >>>>
> >>>> When a device link supplier is unbound (either manually or because one
> >>>> of its own suppliers was unbound), its consumers are unbound as
> >>>> well. Currently if the supplier binds again after this the consumer
> >>>> does not automatically probe again. With this patch it does.
> >>>
> >>> Yes I think this makes sense, based on the rationale that the consumer
> >>> was automatically unbound, so by symmetry it should also be automatically
> >>> rebound.
> >>>
> >>> The only thing I don't understand is you wrote in an earlier e-mail of a
> >>> difference in behavior depending on whether driver_deferred_probe_add()
> >>> is called before or after device_release_driver_internal().
> >>> That's really odd, it shouldn't make a difference.
> >>>
> >>
> >> In that version there was a couple of other bugs elsewhere in the
> >> system. I tried to reproduce that situation again multiple times, but I
> >> could not (even write those bugs back in there, and move the link
> >> creation back to panel bridge code). But even from reading the code that
> >> difference did not make any sense. I suspect a heisen-bug, after I have
> >> read the code and understood that the crash is not possible, it does not
> >> happen anymore :).
> >>
> >> With the current version I could not find any difference in behaviour
> >> depending on the order of device_release_driver_internal() and
> >> driver_deferred_probe_add() calls. I just thought having them in this
> >> order just lookes nicer.
> >>
> >> I stress tested the code by unloading and loading the panel driver in a
> >> tight loop, for several minutes, but it simply wont crash (not in this
> >> setup anyway). The probe of tilcdc eventually gracefully fails in a CMA
> >> failure.
> >
> > Is this still moving or stuck? Pinging since Sean just brought up the
> > drm_bridge lifetime issues, and I think it'd be nice if we could solve
> > those by using device_link, like we've added already for drm_panel.
> > From my very layman understanding of the discussions, device_link not
> > quite working for deferred probing is the blocker for this plan.
> >
>
> I would say stuck. As there is has not been any traffic regarding this
> patch after Lukas' reply. And I've been busy with other things since
> then. Perhaps I did not know to cc the right people.
>
> A reviewed-by or tested-by from someone would probably help to get this
> spinning again. I am happy to do changes or improvements etc., but for
> that I would need suggestions.
>
> As far as I can tell the patch is good to apply as it is, but then again
> I am no device core expert.
I do think the cc list is good and has all the stakeholders on it
(Greg/Rafeal are the main ones I think).
Maybe this also didn't get much attention since it's not (yet) a big
problem in drm? Only drm_panel uses device_link, the discussion to add
that for drm_bridge also seems to have died down. But from my far-away
observer vantage point (we don't use device_link nor panel or bridge in
drm/i915) it does all sound like a good approach.
Interest from i915 side might go up, since we're using component already
and device_link will probably happen eventually too (for better handling
the suspend/resume ordering of i915 vs. snd-hda and other stuff), and then
I guess we'll need this? Otoh we're not big on EPROBE_DEFER in x86 :-)
Cheers, Daniel
>
> Best regards,
> Jyri
>
> > Also adding Sean.
> > -Daniel
> >
> >>
> >> Best regards,
> >> Jyri
> >>
> >>> Thanks,
> >>>
> >>> Lukas
> >>>
> >>>>
> >>>> If this patch is not acceptable as such, how about adding this
> >>>> behavior behind a new device link flag?
> >>>>
> >>>> The idea to this patch was gotten from this post by Lucas Wunner:
> >>>> https://www.spinics.net/lists/dri-devel/msg166318.html
> >>>>
> >>>> Part of the code and the description is borrowed from him.
> >>>>
> >>>> cc: Lukas Wunner <lukas@wunner.de>
> >>>> cc: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
> >>>> cc: Thierry Reding <thierry.reding@gmail.com>
> >>>> Signed-off-by: Jyri Sarha <jsarha@ti.com>
> >>>> ---
> >>>> drivers/base/base.h | 1 +
> >>>> drivers/base/core.c | 2 ++
> >>>> drivers/base/dd.c | 2 +-
> >>>> 3 files changed, 4 insertions(+), 1 deletion(-)
> >>>>
> >>>> diff --git a/drivers/base/base.h b/drivers/base/base.h
> >>>> index d800de6..39370eb 100644
> >>>> --- a/drivers/base/base.h
> >>>> +++ b/drivers/base/base.h
> >>>> @@ -114,6 +114,7 @@ extern void device_release_driver_internal(struct device *dev,
> >>>>
> >>>> extern void driver_detach(struct device_driver *drv);
> >>>> extern int driver_probe_device(struct device_driver *drv, struct device *dev);
> >>>> +extern void driver_deferred_probe_add(struct device *dev);
> >>>> extern void driver_deferred_probe_del(struct device *dev);
> >>>> static inline int driver_match_device(struct device_driver *drv,
> >>>> struct device *dev)
> >>>> diff --git a/drivers/base/core.c b/drivers/base/core.c
> >>>> index b2261f9..0964ed5 100644
> >>>> --- a/drivers/base/core.c
> >>>> +++ b/drivers/base/core.c
> >>>> @@ -570,6 +570,8 @@ void device_links_unbind_consumers(struct device *dev)
> >>>>
> >>>> device_release_driver_internal(consumer, NULL,
> >>>> consumer->parent);
> >>>> + driver_deferred_probe_add(consumer);
> >>>> +
> >>>> put_device(consumer);
> >>>> goto start;
> >>>> }
> >>>> diff --git a/drivers/base/dd.c b/drivers/base/dd.c
> >>>> index de6fd09..846ae78 100644
> >>>> --- a/drivers/base/dd.c
> >>>> +++ b/drivers/base/dd.c
> >>>> @@ -140,7 +140,7 @@ static void deferred_probe_work_func(struct work_struct *work)
> >>>> }
> >>>> static DECLARE_WORK(deferred_probe_work, deferred_probe_work_func);
> >>>>
> >>>> -static void driver_deferred_probe_add(struct device *dev)
> >>>> +void driver_deferred_probe_add(struct device *dev)
> >>>> {
> >>>> mutex_lock(&deferred_probe_mutex);
> >>>> if (list_empty(&dev->p->deferred_probe)) {
> >>
> >>
> >> --
> >> Texas Instruments Finland Oy, Porkkalankatu 22, 00180 Helsinki.
> >> Y-tunnus/Business ID: 0615521-4. Kotipaikka/Domicile: Helsinki
> >> _______________________________________________
> >> dri-devel mailing list
> >> dri-devel@lists.freedesktop.org
> >> https://lists.freedesktop.org/mailman/listinfo/dri-devel
> >
> >
> >
>
>
> --
> Texas Instruments Finland Oy, Porkkalankatu 22, 00180 Helsinki.
> Y-tunnus/Business ID: 0615521-4. Kotipaikka/Domicile: Helsinki
--
Daniel Vetter
Software Engineer, Intel Corporation
http://blog.ffwll.ch
prev parent reply other threads:[~2018-08-15 8:50 UTC|newest]
Thread overview: 6+ messages / expand[flat|nested] mbox.gz Atom feed top
[not found] <cover.1519321145.git.jsarha@ti.com>
2018-02-22 17:42 ` [PATCH RFC] driver core: Reprobe consumer if it was unbound by dropped device_link Jyri Sarha
2018-02-25 9:22 ` Lukas Wunner
2018-02-26 7:52 ` Jyri Sarha
2018-08-14 14:17 ` Daniel Vetter
2018-08-15 6:49 ` Jyri Sarha
2018-08-15 8:49 ` Daniel Vetter [this message]
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20180815084954.GQ21634@phenom.ffwll.local \
--to=daniel@ffwll.ch \
--cc=dri-devel@lists.freedesktop.org \
--cc=gregkh@linuxfoundation.org \
--cc=jsarha@ti.com \
--cc=linux-kernel@vger.kernel.org \
--cc=lukas@wunner.de \
--cc=rafael.j.wysocki@intel.com \
--cc=seanpaul@chromium.org \
--cc=thierry.reding@gmail.com \
--cc=tomi.valkeinen@ti.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox