Received: by 10.223.185.116 with SMTP id b49csp2593420wrg; Sun, 25 Feb 2018 01:23:53 -0800 (PST) X-Google-Smtp-Source: AH8x227qj2RGfmuMPuhS6oCF++02cmKaqLpyOdZuiESJXCpSXI8BZfGseB2Mn+2FNl9OsSoaGB5V X-Received: by 10.98.60.144 with SMTP id b16mr7095218pfk.61.1519550633345; Sun, 25 Feb 2018 01:23:53 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1519550633; cv=none; d=google.com; s=arc-20160816; b=g4QrAt7TMH2kjNoFPlCGYULGmSUSJgmAKQILcleE96WDaUGwDzjmSlfSxL32xB43Sn A6rUTPZK1+GCg4a2PA06qhCSh5im6X8fze42imuohkXSV+cERKDXSrG7Z/NFgU/Bd+2c k8MLe2SN5dJFaFyHuArEjZuNFg/nFUkv2sloqvsTfuMlX5JaMHcRvL8BfYf9Jbv8cX5E 6y7b5u+n1axjpOWlkEre3JUybTEiFSCZM/d90cw+lsbfhl6x7zfoX5I33SnPc1xFAjjw WDAbwK8LJR8Xcp5kRtuU8g8PpiW17HBpYoI36qMjDVrsn44QUK9CF90/iD71VY9Mhp8L K1ow== 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:message-id:subject:cc :to:from:date:arc-authentication-results; bh=BnPLzD0HhrT8VACW5PpRZzVgilzSwoO+kIfF65OhxZs=; b=O+0O9QGfQfpqlqpH3rTIohMt5LRCSmdzrBnsEiTcz3aPbj4JpJpEaftYmFfhWRgIJR bFwFi+yk/TEY2bQzHQvXM1JO/BOR86UhNmi5NcpDTaNp5661gUCNjxBNifkVmQwJKjg5 k3JLWf6BqM9QoVIkkz2xxRLDgh/KPd2dYFTX+Lpygu7z9YVEkdy1ckzcLDu104DmDvkf c2hCk2OZmNFkkb97Fin6iSkVcs1BRi8+6hencI6PoKkhkAVdVTrqD0eyOd/whi40gNVq 6NXRYYb3cHqYeAB91Ugalk/yepv6g/56aFpD8GpiZCklUDd9zGFseX89vxJSdKsx6Oxl 1K4w== ARC-Authentication-Results: i=1; mx.google.com; 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 15-v6si4913140pla.23.2018.02.25.01.23.27; Sun, 25 Feb 2018 01:23:53 -0800 (PST) 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; 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 S1751633AbeBYJW1 (ORCPT + 99 others); Sun, 25 Feb 2018 04:22:27 -0500 Received: from bmailout2.hostsharing.net ([83.223.90.240]:54621 "EHLO bmailout2.hostsharing.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751568AbeBYJWZ (ORCPT ); Sun, 25 Feb 2018 04:22:25 -0500 Received: from h08.hostsharing.net (h08.hostsharing.net [83.223.95.28]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client CN "*.hostsharing.net", Issuer "COMODO RSA Domain Validation Secure Server CA" (not verified)) by bmailout2.hostsharing.net (Postfix) with ESMTPS id 0DD462800B486; Sun, 25 Feb 2018 10:22:24 +0100 (CET) Received: by h08.hostsharing.net (Postfix, from userid 100393) id BBF73382D1; Sun, 25 Feb 2018 10:22:23 +0100 (CET) Date: Sun, 25 Feb 2018 10:22:23 +0100 From: Lukas Wunner To: Jyri Sarha Cc: linux-kernel@vger.kernel.org, dri-devel@lists.freedesktop.org, tomi.valkeinen@ti.com, thierry.reding@gmail.com, gregkh@linuxfoundation.org, "Rafael J . Wysocki" Subject: Re: [PATCH RFC] driver core: Reprobe consumer if it was unbound by dropped device_link Message-ID: <20180225092223.GB923@wunner.de> References: <57c1d52a5a8f5985dc1dd53260d7d68795be8ea2.1519321145.git.jsarha@ti.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <57c1d52a5a8f5985dc1dd53260d7d68795be8ea2.1519321145.git.jsarha@ti.com> User-Agent: Mutt/1.5.23 (2014-03-12) Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org 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. 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 > cc: Rafael J. Wysocki > cc: Thierry Reding > Signed-off-by: Jyri Sarha > --- > 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)) {