Received: by 2002:ac0:a5a7:0:0:0:0:0 with SMTP id m36-v6csp1657328imm; Tue, 10 Jul 2018 05:54:06 -0700 (PDT) X-Google-Smtp-Source: AAOMgpd2W2bKXQVqxeZQMPWJDoTijXxDMKA8BpxL4wd5kj8RhqDqAnVEIg3KIi4gzzgfUbd0NP7g X-Received: by 2002:a17:902:4c88:: with SMTP id b8-v6mr23796076ple.285.1531227245948; Tue, 10 Jul 2018 05:54:05 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1531227245; cv=none; d=google.com; s=arc-20160816; b=DsOF0QAWn70PPs390PWjkHMQDuNXYOny1sSEW2AfuxfJ8wYkxqjjiSjy+EmRmqDaoC orCtI4QS0/aq6W+zls4KlocRaVGgoWA1+G7PKbojdpj0XFw/2VC4K0vBjdd6JMRwqFbe OXXd75PQK7hW8JLbk7W3ur2PtIstwz8H/tXfQuuoYQX2jo1lp2+NYXqedEzlfaUL3A9r 4D2iz44cqi1GFQJgAXRzAAWFqPhm1kG5+sbMbGYiAZ9n6kkD9NcD6eLS3Hc5OJXzv1rp BtKaPgZlGSbpcuv3SmSEiJqNfY1kBZNsfjkPtrTNf8nJGFn2TRzpXVr0+mK4ieb07Ovb ktfg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:content-transfer-encoding:mime-version :references:in-reply-to:message-id:date:subject:cc:to:from :arc-authentication-results; bh=2t/mtyDEcw9y2TjcUDDlONaHz0P6LVDhL+BeHZN/ndg=; b=YZW+SWFYjraWIHYp4wDdd57+p4pJJ1v1LZX/5alBnY0Qk04y6CDvJksutI8luRWwRv uJz5cikR2b0EDvFVw8EhZraiDzaF2kg5cIzdxkvKwf0h0Op7NHaTbfYbTifizEKAryUv ROFupz5my7MXHk/IjTK36y3YKZMx867q3hdDD+gUx4uCcf/8hPKozE18y+8YRJ+NrtNW Q0OoiOhRuaA1ksFbeGkcthbb1KfUfecpdcdGjdenKLLV3WCR1KZ7Z0mtOMOl53gBQ7lb XMP2hxwnHML6ztboew81HcGFdCH9/1dLF1rY/d7GX5HrIsIepW63lCBxKAbnZUbH3iVm YbnA== 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 83-v6si15686543pgg.663.2018.07.10.05.53.50; Tue, 10 Jul 2018 05:54:05 -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; 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 S933377AbeGJMxJ (ORCPT + 99 others); Tue, 10 Jul 2018 08:53:09 -0400 Received: from cloudserver094114.home.pl ([79.96.170.134]:64113 "EHLO cloudserver094114.home.pl" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S933132AbeGJMxG (ORCPT ); Tue, 10 Jul 2018 08:53:06 -0400 Received: from 79.184.255.246.ipv4.supernova.orange.pl (79.184.255.246) (HELO aspire.rjw.lan) by serwer1319399.home.pl (79.96.170.134) with SMTP (IdeaSmtpServer 0.83) id 6f96726e6321e058; Tue, 10 Jul 2018 14:53:03 +0200 From: "Rafael J. Wysocki" To: Greg Kroah-Hartman Cc: Pingfan Liu , linux-kernel@vger.kernel.org, Grygorii Strashko , Christoph Hellwig , Bjorn Helgaas , Dave Young , linux-pci@vger.kernel.org, Lukas Wunner , Linux PM , Kishon Vijay Abraham I Subject: [PATCH v2] driver core: Partially revert "driver core: correct device's shutdown order" Date: Tue, 10 Jul 2018 14:51:33 +0200 Message-ID: <5284251.Resgjlja2Q@aspire.rjw.lan> In-Reply-To: <2927655.Y1qg3UnIrE@aspire.rjw.lan> References: <1530600642-25090-1-git-send-email-kernelfans@gmail.com> <8816662.k3KXbdkA2e@aspire.rjw.lan> <2927655.Y1qg3UnIrE@aspire.rjw.lan> MIME-Version: 1.0 Content-Transfer-Encoding: 7Bit Content-Type: text/plain; charset="us-ascii" Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org From: Rafael J. Wysocki Commit 52cdbdd49853 (driver core: correct device's shutdown order) introduced a regression by breaking device shutdown on some systems. Namely, the devices_kset_move_last() call in really_probe() added by that commit is a mistake as it may cause parents to follow children in the devices_kset list which then causes shutdown to fail. For example, if a device has children before really_probe() is called for it (which is not uncommon), that call will cause it to be reordered after the children in the devices_kset list and the ordering of that list will not reflect the correct device shutdown order any more. Also it causes the devices_kset list to be constantly reordered until all drivers have been probed which is totally pointless overhead in the majority of cases and it only covered an issue with system shutdown, while system-wide suspend/resume potentially had the same issue on the affected platforms (which was not covered). Moreover, the shutdown issue originally addressed by the change in really_probe() made by commit 52cdbdd49853 is not present in 4.18-rc any more, since dra7 started to use the sdhci-omap driver which doesn't disable any regulators during shutdown, so the really_probe() part of commit 52cdbdd49853 can be safely reverted. [The original issue was related to the omap_hsmmc driver used by dra7 previously.] For the above reasons, revert the really_probe() modifications made by commit 52cdbdd49853. The other code changes made by commit 52cdbdd49853 are useful and they need not be reverted. Fixes: 52cdbdd49853 (driver core: correct device's shutdown order) Link: https://lore.kernel.org/lkml/CAFgQCTt7VfqM=UyCnvNFxrSw8Z6cUtAi3HUwR4_xPAc03SgHjQ@mail.gmail.com/ Reported-by: Pingfan Liu Tested-by: Pingfan Liu Reviewed-by: Kishon Vijay Abraham I Signed-off-by: Rafael J. Wysocki --- -> v2: Added information from Kishon on the fact that it should be safe to revert the really_probe() modifications added by the problematic commit. Also added the Reviewed-by tag from Kishon. --- drivers/base/dd.c | 8 -------- 1 file changed, 8 deletions(-) Index: linux-pm/drivers/base/dd.c =================================================================== --- linux-pm.orig/drivers/base/dd.c +++ linux-pm/drivers/base/dd.c @@ -434,14 +434,6 @@ re_probe: goto probe_failed; } - /* - * Ensure devices are listed in devices_kset in correct order - * It's important to move Dev to the end of devices_kset before - * calling .probe, because it could be recursive and parent Dev - * should always go first - */ - devices_kset_move_last(dev); - if (dev->bus->probe) { ret = dev->bus->probe(dev); if (ret)