From patchwork Sat Apr 13 05:50:38 2013 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Yinghai Lu X-Patchwork-Id: 2440061 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 A0207DFE76 for ; Sat, 13 Apr 2013 05:50:59 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1752469Ab3DMFuk (ORCPT ); Sat, 13 Apr 2013 01:50:40 -0400 Received: from mail-ia0-f180.google.com ([209.85.210.180]:39076 "EHLO mail-ia0-f180.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1752354Ab3DMFuj (ORCPT ); Sat, 13 Apr 2013 01:50:39 -0400 Received: by mail-ia0-f180.google.com with SMTP id l29so2943517iag.39 for ; Fri, 12 Apr 2013 22:50:38 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=mime-version:x-received:sender:in-reply-to:references:date :x-google-sender-auth:message-id:subject:from:to:cc:content-type; bh=T1ROdlDyHtBlcK1wlZ4ZG3x7kHkezjELN8mZOe1PHjw=; b=pg+W9K6wVFXocsf+Pz3w8yxzAjHorjpDDMzNBURtZq12O8JOKsYyvBRPG3hOeZTANo 3f//bKgd7sxt3oo7W7WMa6ctwuO75ujOkJO+8Tz7+fSOpbO8Ip47Kh0Y2pL7i33w+wPe xx1IOwy5P4QnJVtYTga5Z8HJ4hnTMY3LbeJqKROs1+XauZ8FdkJxaHEK0afPyNKfmlwH kr2RrCwJe4FIoPVRACU6DQ5chHx+87fKqKVwhsWw/jcOFq98ZMvNEFiWctTR5BVWHNsy PAMU1clGm2BZCKRSycXkrPnyZbxDxxoly5vxETxIRMcLdjSwffw6Btdg9kbEAniwQ0iT IqrA== MIME-Version: 1.0 X-Received: by 10.50.119.102 with SMTP id kt6mr948147igb.12.1365832238842; Fri, 12 Apr 2013 22:50:38 -0700 (PDT) Received: by 10.64.13.202 with HTTP; Fri, 12 Apr 2013 22:50:38 -0700 (PDT) In-Reply-To: <48795235.crcTAaJqPb@vostro.rjw.lan> References: <48795235.crcTAaJqPb@vostro.rjw.lan> Date: Fri, 12 Apr 2013 22:50:38 -0700 X-Google-Sender-Auth: XTFbdHaeY4Su1LPQt5Ev9571S_U Message-ID: Subject: Re: [PATCH] PCI / PM: Fix fallback to PCI_D0 in pci_platform_power_transition() From: Yinghai Lu To: "Rafael J. Wysocki" Cc: Bjorn Helgaas , LKML , Linux PM list , Linux PCI , "Benenati, Chris J" , Ajaykumar Hotchandani Sender: linux-pci-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-pci@vger.kernel.org On Fri, Apr 12, 2013 at 4:58 PM, Rafael J. Wysocki wrote: > 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(-) > > 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; > Acked-by: Yinghai Lu also could simplify it further. --- drivers/pci/pci.c | 12 ++++-------- 1 file changed, 4 insertions(+), 8 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-2.6/drivers/pci/pci.c =================================================================== --- linux-2.6.orig/drivers/pci/pci.c +++ linux-2.6/drivers/pci/pci.c @@ -646,15 +646,11 @@ 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) - dev->current_state = PCI_D0; - } else { + } else error = -ENODEV; - /* Fall back to PCI_D0 if native PM is not supported */ - if (!dev->pm_cap) - dev->current_state = PCI_D0; - } + + if (error && !dev->pm_cap) /* Fall back to PCI_D0 */ + dev->current_state = PCI_D0; return error; }