From patchwork Fri Apr 12 23:58:17 2013 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Rafael Wysocki X-Patchwork-Id: 2439611 X-Patchwork-Delegate: bhelgaas@google.com Return-Path: X-Original-To: patchwork-linux-pci@patchwork.kernel.org Delivered-To: patchwork-process-083081@patchwork2.kernel.org Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by patchwork2.kernel.org (Postfix) with ESMTP id 08E46DF2A1 for ; Fri, 12 Apr 2013 23:50:49 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1753976Ab3DLXua (ORCPT ); Fri, 12 Apr 2013 19:50:30 -0400 Received: from hydra.sisk.pl ([212.160.235.94]:57538 "EHLO hydra.sisk.pl" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1754808Ab3DLXu2 (ORCPT ); Fri, 12 Apr 2013 19:50:28 -0400 Received: from vostro.rjw.lan (afct76.neoplus.adsl.tpnet.pl [95.49.71.76]) by hydra.sisk.pl (Postfix) with ESMTPSA id 2974BE5648; Sat, 13 Apr 2013 01:48:46 +0200 (CEST) From: "Rafael J. Wysocki" To: Bjorn Helgaas Cc: LKML , Linux PM list , Linux PCI , "Benenati, Chris J" Subject: [PATCH] PCI / PM: Fix fallback to PCI_D0 in pci_platform_power_transition() Date: Sat, 13 Apr 2013 01:58:17 +0200 Message-ID: <48795235.crcTAaJqPb@vostro.rjw.lan> User-Agent: KMail/4.9.5 (Linux/3.9.0-rc6+; KDE/4.9.5; x86_64; ; ) MIME-Version: 1.0 Sender: linux-pci-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-pci@vger.kernel.org From: Rafael J. Wysocki Commit b51306c (PCI: Set device power state to PCI_D0 for device without native PM support) modified pci_platform_power_transition() by adding code causing dev->current_state for devices that don't support native PCI PM but are power-manageable by the platform to be changed to PCI_D0 regardless of the value returned by the preceding platform_pci_set_power_state(). In particular, that also is done if the platform_pci_set_power_state() has been successful, which causes the correct power state of the device set by pci_update_current_state() in that case to be overwritten by PCI_D0. Fix that mistake by making the fallback to PCI_D0 only happen if the platform_pci_set_power_state() has returned an error. Reported-by: Chris J. Benenati Signed-off-by: Rafael J. Wysocki Cc: --- drivers/pci/pci.c | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) -- To unsubscribe from this list: send the line "unsubscribe linux-pci" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Index: linux-pm/drivers/pci/pci.c =================================================================== --- linux-pm.orig/drivers/pci/pci.c +++ linux-pm/drivers/pci/pci.c @@ -646,8 +646,7 @@ static int pci_platform_power_transition error = platform_pci_set_power_state(dev, state); if (!error) pci_update_current_state(dev, state); - /* Fall back to PCI_D0 if native PM is not supported */ - if (!dev->pm_cap) + else if (!dev->pm_cap) /* Fall back to PCI_D0 */ dev->current_state = PCI_D0; } else { error = -ENODEV;