linux/drivers
Ajaykumar Hotchandani b51306c634 PCI: Set device power state to PCI_D0 for device without native PM support
During test of one IB card with guest VM, found that, msi is not
initialized properly.

It turns out __write_msi_msg will do nothing if device current_state is
not PCI_D0.  And, that pci device does not have pm_cap in guest VM.

There is an error in setting of power state to PCI_D0 in
pci_enable_device(), but error is not returned for this.  Following is
code flow:

pci_enable_device() -->   __pci_enable_device_flags() -->
do_pci_enable_device() -->   pci_set_power_state() -->
__pci_start_power_transition()

We have following condition inside __pci_start_power_transition():
         if (platform_pci_power_manageable(dev)) {
                 error = platform_pci_set_power_state(dev, state);
                 if (!error)
                         pci_update_current_state(dev, state);
         } else {
                 error = -ENODEV;
                 /* Fall back to PCI_D0 if native PM is not supported */
                 if (!dev->pm_cap)
                         dev->current_state = PCI_D0;
         }

Here, from platform_pci_set_power_state(), acpi_pci_set_power_state() is
getting called and that is failing with ENODEV because of following
condition:

         if (!handle || ACPI_SUCCESS(acpi_get_handle(handle, "_EJ0",&tmp)))
                 return -ENODEV;

Because of that, pci_update_current_state() is not getting called.

With this patch, if device power state can not be set via
platform_pci_set_power_state and that device does not have native pm
support, then PCI device power state will be set to PCI_D0.

-v2: This also reverts 47e9037ac1, as it's
     not needed after this change.

Acked-by: "Rafael J. Wysocki" <rjw@sisk.pl>
Signed-off-by: Ajaykumar Hotchandani<ajaykumar.hotchandani@oracle.com>
Signed-off-by: Yinghai Lu<yinghai.lu@oracle.com>
Signed-off-by: Jesse Barnes <jbarnes@virtuousgeek.org>
2011-12-14 08:26:42 -08:00
..
accessibility
acpi pstore: pass allocated memory region back to caller 2011-11-17 12:58:07 -08:00
amba
ata libata: fix build without BMDMA 2011-11-17 02:11:42 -05:00
atm
auxdisplay
base Merge branch 'driver-core-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/driver-core 2011-11-21 20:36:26 -08:00
bcma bcma: fix implicit use of export.h contents 2011-10-31 19:32:02 -04:00
block paride: fix potential information leak in pg_read() 2011-11-16 09:21:50 +01:00
bluetooth Merge branch 'for-davem' of git://git.kernel.org/pub/scm/linux/kernel/git/linville/wireless 2011-11-09 16:22:15 -05:00
cdrom
char fix typo/thinko in get_random_bytes() 2011-11-17 11:42:54 -02:00
clk
clocksource Merge branch 'modsplit-Oct31_2011' of git://git.kernel.org/pub/scm/linux/kernel/git/paulg/linux 2011-11-06 19:44:47 -08:00
connector
cpufreq [CPUFREQ] db8500: fix build error due to undeclared i variable 2011-11-11 22:28:33 -05:00
cpuidle Merge branch 'release' of git://git.kernel.org/pub/scm/linux/kernel/git/lenb/linux 2011-11-07 10:13:52 -08:00
crypto Merge git://github.com/herbertx/crypto 2011-11-25 21:55:07 -08:00
dca drivers/dca: Add export.h for THIS_MODULE to dca-sysfs.c 2011-10-31 19:31:43 -04:00
devfreq PM / devfreq: correct Kconfig dependency 2011-11-14 23:31:35 +01:00
dio
dma Merge branch 'modsplit-Oct31_2011' of git://git.kernel.org/pub/scm/linux/kernel/git/paulg/linux 2011-11-06 19:44:47 -08:00
edac drivers/edac/mpc85xx_edac.c: fix memory controller compatible for edac 2011-11-24 01:59:38 -06:00
eisa
firewire Merge branch 'modsplit-Oct31_2011' of git://git.kernel.org/pub/scm/linux/kernel/git/paulg/linux 2011-11-06 19:44:47 -08:00
firmware Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tiwai/sound 2011-12-02 08:10:51 -08:00
gpio gpio: pca953x: Staticise pca953x_get_altdata() 2011-11-21 20:53:15 +01:00
gpu vmwgfx: integer overflow in vmw_kms_update_layout_ioctl() 2011-12-02 10:49:41 +00:00
hid Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/jikos/hid 2011-12-02 08:25:46 -08:00
hv
hwmon hwmon: convert drivers/hwmon/* to use module_platform_driver() 2011-11-26 09:48:20 -08:00
hwspinlock Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/paulg/linux 2011-11-08 18:34:16 -08:00
i2c Merge branch 'fixes' of http://ftp.arm.linux.org.uk/pub/linux/arm/kernel/git-cur/linux-2.6-arm 2011-12-01 11:53:54 -08:00
ide Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/ide 2011-11-18 22:04:12 -02:00
idle Merge branch 'release' of git://git.kernel.org/pub/scm/linux/kernel/git/lenb/linux 2011-11-07 10:13:52 -08:00
ieee802154
infiniband Merge branches 'cxgb4', 'ipoib', 'misc' and 'qib' into for-next 2011-11-29 18:01:53 -08:00
input Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/dtor/input 2011-11-22 09:18:06 -08:00
iommu iommu: omap: Fix compile failure 2011-11-08 17:11:57 +01:00
isdn isdn: avoid copying too long drvid 2011-11-29 18:39:37 -05:00
leds Revert "leds: save the delay values after a successful call to blink_set()" 2011-11-15 22:41:50 -02:00
lguest lguest: add export.h to lguest files for THIS_MODULE/EXPORT_SYMBOL 2011-10-31 19:32:13 -04:00
macintosh m68k/irq: Remove obsolete IRQ_FLG_* users 2011-11-08 22:35:48 +01:00
mca
md md/raid5: STRIPE_ACTIVE has lock semantics, add barriers 2011-11-08 16:22:06 +11:00
media Merge branch 'v4l_for_linus' of git://git.kernel.org/pub/scm/linux/kernel/git/mchehab/linux-media 2011-11-12 00:03:50 -02:00
memstick drivers/memstick: Add module.h to the prev. implicit modular users 2011-10-31 19:31:52 -04:00
message drivers/message: Add module.h to i2o/pci.c 2011-10-31 19:31:53 -04:00
mfd mfd: fix build failures in recently added ab5500 code 2011-11-07 21:45:14 -05:00
misc Merge branch 'char-misc-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/char-misc 2011-11-21 20:36:05 -08:00
mmc arm/imx: fix imx6q mmc error when mounting rootfs 2011-11-11 16:53:35 +01:00
mtd MTD: MAPS: bcm963xx-flash.c: explicitly include module.h 2011-11-07 21:26:55 -05:00
net bonding: only use primary address for ARP 2011-11-30 22:59:11 -05:00
nfc drivers/nfc: add module.h to nfcwilink.c 2011-10-31 19:31:54 -04:00
nubus
of of/irq: of_irq_init: add check for parent equal to child node 2011-11-29 08:22:40 -06:00
oprofile
parisc
parport
pci PCI: Set device power state to PCI_D0 for device without native PM support 2011-12-14 08:26:42 -08:00
pcmcia Merge branch 'modsplit-Oct31_2011' of git://git.kernel.org/pub/scm/linux/kernel/git/paulg/linux 2011-11-06 19:44:47 -08:00
pinctrl pinctrl: hide subsystem from the populace 2011-11-10 09:02:12 +01:00
platform platform/x86: fix dell-laptop function prototypes 2011-11-17 10:29:02 -02:00
pnp Merge branch 'release' of git://git.kernel.org/pub/scm/linux/kernel/git/lenb/linux 2011-11-07 10:13:52 -08:00
power Merge branch 'modsplit-Oct31_2011' of git://git.kernel.org/pub/scm/linux/kernel/git/paulg/linux 2011-11-06 19:44:47 -08:00
pps pps gpio client: add missing dependency 2011-11-02 16:07:02 -07:00
ps3 powerpc/ps3: irq: Remove IRQF_DISABLED 2011-11-08 14:51:46 +11:00
ptp
rapidio Merge branch 'modsplit-Oct31_2011' of git://git.kernel.org/pub/scm/linux/kernel/git/paulg/linux 2011-11-06 19:44:47 -08:00
regulator regulator: twl: fix twl4030 support for smps regulators 2011-11-28 18:58:31 +00:00
rtc rtc: rtc-puv3: Add __devinit and __devexit markers for probe and remove 2011-11-15 17:13:17 +08:00
s390 Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/net 2011-11-20 14:59:33 -08:00
sbus
scsi [SCSI] hpsa: Disable ASPM 2011-11-14 10:47:01 -06:00
sfi drivers/sfi: sfi_acpi.c needs sysfs.h 2011-10-31 19:31:57 -04:00
sh Merge branches 'sh/pm-runtime' and 'common/clkfwk' into sh-fixes-for-linus 2011-11-11 16:16:25 +09:00
sn
spi ARM: 7175/1: add subname parameter to mfp_set_groupg callers 2011-11-26 21:58:54 +00:00
ssb ssb: Add export.h to files using EXPORT_SYMBOL/THIS_MODULE 2011-10-31 19:32:08 -04:00
staging Merge branch 'staging-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/staging 2011-12-02 13:30:25 -08:00
target Merge branch 'modsplit-Oct31_2011' of git://git.kernel.org/pub/scm/linux/kernel/git/paulg/linux 2011-11-06 19:44:47 -08:00
tc
telephony
thermal thermal: Prevent polling from happening during system suspend 2011-11-06 20:38:49 -05:00
tty Merge branch 'tty-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/tty 2011-11-21 20:36:46 -08:00
uio uio: Add module.h to implicit drivers/uio users 2011-10-31 19:32:10 -04:00
usb Merge branch 'for-usb-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/sarah/xhci into usb-linus 2011-12-01 11:11:52 -08:00
uwb uwb: Add export.h for EXPORT_SYMBOL/THIS_MODULE as required 2011-10-31 19:32:19 -04:00
vhost
video viafb: correct sync polarity for OLPC DCON 2011-11-22 00:56:17 +00:00
virt
virtio virtio-pci: make reset operation safer 2011-11-24 13:04:48 +10:30
vlynq
w1 Merge branch 'modsplit-Oct31_2011' of git://git.kernel.org/pub/scm/linux/kernel/git/paulg/linux 2011-11-06 19:44:47 -08:00
watchdog watchdog: fix initialisation printout in s3c2410_wdt 2011-11-16 22:04:17 +01:00
xen xen-gntalloc: signedness bug in add_grefs() 2011-11-16 12:13:48 -05:00
zorro drivers/zorro: Add export.h to proc.c 2011-10-31 19:32:01 -04:00
Kconfig
Makefile