14 Apr, 2009

1 commit


11 Apr, 2009

1 commit

  • If the BIOS does something obviously stupid, like claiming that the
    registers for the IOMMU are at physical address zero, then print a nasty
    message and abort, rather than trying to set up the IOMMU and then later
    panicking.

    It's becoming more and more obvious that trusting this stuff to the BIOS
    was a mistake.

    Signed-off-by: David Woodhouse

    David Woodhouse
     

08 Apr, 2009

1 commit

  • * 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/jbarnes/pci-2.6:
    PCI: pci_slot: grab refcount on slot's bus
    PCI Hotplug: acpiphp: grab refcount on p2p subordinate bus
    PCI: allow PCI core hotplug to remove PCI root bus
    PCI: Fix oops in pci_vpd_truncate
    PCI: don't corrupt enable_cnt when doing manual resource alignment
    PCI: annotate pci_rescan_bus as __ref, not __devinit
    PCI-IOV: fix missing kernel-doc
    PCI: Setup disabled bridges even if buses are added
    PCI: SR-IOV quirk for Intel 82576 NIC

    Linus Torvalds
     

07 Apr, 2009

15 commits

  • Replace all DMA_32BIT_MASK macro with DMA_BIT_MASK(32)

    Signed-off-by: Yang Hongyang
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Yang Hongyang
     
  • Replace all DMA_64BIT_MASK macro with DMA_BIT_MASK(64)

    Signed-off-by: Yang Hongyang
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Yang Hongyang
     
  • pci_vpd_truncate() should check for dev->vpd->attr, otherwise this might
    happen:

    sky2 driver version 1.22
    Unable to handle kernel paging request for data at address 0x0000000c
    Faulting instruction address: 0xc01836fc
    Oops: Kernel access of bad area, sig: 11 [#1]
    [...]
    NIP [c01836fc] pci_vpd_truncate+0x38/0x40
    LR [c029be18] sky2_probe+0x14c/0x518
    Call Trace:
    [ef82bde0] [c029bda4] sky2_probe+0xd8/0x518 (unreliable)
    [ef82be20] [c018a11c] local_pci_probe+0x24/0x34
    [ef82be30] [c018a14c] pci_call_probe+0x20/0x30
    [ef82be50] [c018a330] __pci_device_probe+0x64/0x78
    [ef82be60] [c018a44c] pci_device_probe+0x30/0x58
    [ef82be80] [c01aa270] really_probe+0x78/0x1a0
    [ef82bea0] [c01aa460] __driver_attach+0xa4/0xa8
    [ef82bec0] [c01a96ac] bus_for_each_dev+0x60/0x9c
    [ef82bef0] [c01aa0b4] driver_attach+0x24/0x34
    [ef82bf00] [c01a9e08] bus_add_driver+0x12c/0x1cc
    [ef82bf20] [c01aa87c] driver_register+0x6c/0x110
    [ef82bf30] [c018a770] __pci_register_driver+0x4c/0x9c
    [ef82bf50] [c03782c8] sky2_init_module+0x30/0x40
    [ef82bf60] [c0001dbc] do_one_initcall+0x34/0x1a0
    [ef82bfd0] [c0362240] do_initcalls+0x38/0x58

    This happens with CONFIG_SKY2=y, and "ip=on" kernel command line, so
    pci_vpd_truncate() is called before late_initcall(pci_sysfs_init),
    therefore ->attr isn't yet initialized.

    Acked-by: Stephen Hemminger
    Signed-off-by: Anton Vorontsov
    Signed-off-by: Jesse Barnes
    Signed-off-by: Linus Torvalds

    Anton Vorontsov
     
  • This issue was pointed out by Linus.

    In dma_pte_clear_range() in intel-iommu.c

    start = PAGE_ALIGN(start);
    end &= PAGE_MASK;
    npages = (end - start) / VTD_PAGE_SIZE;

    In partial page case, start could be bigger than end and npages will be
    negative.

    Currently the issue doesn't show up as a real bug in because start and
    end have been aligned to page boundary already by all callers. So the
    issue has been hidden. But it is dangerous programming practice.

    Signed-off-by: Fenghua Yu
    Signed-off-by: David Woodhouse

    Fenghua Yu
     
  • * git://git.infradead.org/iommu-2.6:
    drivers/pci/intr_remapping.c: include acpi.h
    intel-iommu: Fix oops in device_to_iommu() when devices not found.
    intel-iommu: Handle PCI domains appropriately.
    intel-iommu: Fix device-to-iommu mapping for PCI-PCI bridges.
    x2apic/intr-remap: decouple interrupt remapping from x2apic
    x86, dmar: check if it's initialized before disable queue invalidation
    intel-iommu: set compatibility format interrupt
    Intel IOMMU Suspend/Resume Support - Interrupt Remapping
    Intel IOMMU Suspend/Resume Support - Queued Invalidation
    Intel IOMMU Suspend/Resume Support - DMAR
    intel-iommu: Add for_each_iommu() and for_each_active_iommu() macros

    Linus Torvalds
     
  • Fix this build error:
    drivers/pci/intr_remapping.c: In function 'ir_parse_ioapic_scope':
    drivers/pci/intr_remapping.c:617: error: invalid use of undefined type
    'struct acpi_dmar_hardware_unit'

    Signed-off-by: Alexander Beregalov
    Signed-off-by: David Woodhouse

    Alexander Beregalov
     
  • It's possible for a device in the drhd->devices[] array to be NULL if
    it wasn't found at boot time, which means we have to check for that
    case.

    Signed-off-by: David Woodhouse

    David Woodhouse
     
  • If a logical hot unplug (remove) is performed on a bridge claimed
    by acpiphp and then acpiphp is unloaded, we will encounter an oops.

    This is because acpiphp will access the bridge's subordinate bus,
    which was released by the user's prior hot unplug.

    The solution is to grab a reference on the subordinate PCI bus.
    This will prevent the bus from release until acpiphp is unloaded.

    Reviewed-by: Kenji Kaneshige
    Tested-by: Kenji Kaneshige
    Reported-by: Kenji Kaneshige
    Signed-off-by: Alex Chiang
    Signed-off-by: Jesse Barnes

    Alex Chiang
     
  • There is no reason to prevent removal of root bus devices. A subsequent
    rescan will find them just fine.

    Reviewed-by: Kenji Kaneshige
    Signed-off-by: Alex Chiang
    Signed-off-by: Jesse Barnes

    Alex Chiang
     
  • pci_vpd_truncate() should check for dev->vpd->attr, otherwise
    this might happen:

    sky2 driver version 1.22
    Unable to handle kernel paging request for data at address 0x0000000c
    Faulting instruction address: 0xc01836fc
    Oops: Kernel access of bad area, sig: 11 [#1]
    [...]
    NIP [c01836fc] pci_vpd_truncate+0x38/0x40
    LR [c029be18] sky2_probe+0x14c/0x518
    Call Trace:
    [ef82bde0] [c029bda4] sky2_probe+0xd8/0x518 (unreliable)
    [ef82be20] [c018a11c] local_pci_probe+0x24/0x34
    [ef82be30] [c018a14c] pci_call_probe+0x20/0x30
    [ef82be50] [c018a330] __pci_device_probe+0x64/0x78
    [ef82be60] [c018a44c] pci_device_probe+0x30/0x58
    [ef82be80] [c01aa270] really_probe+0x78/0x1a0
    [ef82bea0] [c01aa460] __driver_attach+0xa4/0xa8
    [ef82bec0] [c01a96ac] bus_for_each_dev+0x60/0x9c
    [ef82bef0] [c01aa0b4] driver_attach+0x24/0x34
    [ef82bf00] [c01a9e08] bus_add_driver+0x12c/0x1cc
    [ef82bf20] [c01aa87c] driver_register+0x6c/0x110
    [ef82bf30] [c018a770] __pci_register_driver+0x4c/0x9c
    [ef82bf50] [c03782c8] sky2_init_module+0x30/0x40
    [ef82bf60] [c0001dbc] do_one_initcall+0x34/0x1a0
    [ef82bfd0] [c0362240] do_initcalls+0x38/0x58

    This happens with CONFIG_SKY2=y, and "ip=on" kernel command line, so
    pci_vpd_truncate() is called before late_initcall(pci_sysfs_init),
    therefore ->attr isn't yet initialized.

    Acked-by: Stephen Hemminger
    Signed-off-by: Anton Vorontsov
    Signed-off-by: Jesse Barnes

    Anton Vorontsov
     
  • This patch fixes breakage of of enable_cnt in quirk_resource_alignment.

    Currently, quirk_resource_alignment calls pci_disable_device.
    pci_disable_device decrements enable_cnt, so that enable_cnt becomes -1.

    The patch disables memory decoding, writing command register directly.
    So enable_cnt is not broken.

    Signed-off-by: Yuji Shimada
    Signed-off-by: Jesse Barnes

    Yuji Shimada
     
  • pci_rescan_bus was annotated as __devinit, which is wrong,
    because it will never be part of device initialization.
    Howevever, we can't simply drop the annotation, because then we
    get section warnings about calling pci_scan_child_bus (which is
    correctly marked as __devinit).

    pci_rescan_bus will only get built when CONFIG_HOTPLUG is set,
    meaning that __devinit is a nop, so we know that pci_scan_child_bus
    has not been freed.

    Annotate as __ref to silence modpost.

    Signed-off-by: Alex Chiang
    Signed-off-by: Jesse Barnes

    Alex Chiang
     
  • Fix PCI iov kernel-doc warning:

    Warning(drivers/pci/iov.c:638): No description found for parameter 'nr_virtfn'

    Signed-off-by: Randy Dunlap
    Signed-off-by: Jesse Barnes

    Randy Dunlap
     
  • This patch sets up disabled bridges even if buses have already been
    added.

    pci_assign_unassigned_resources is called after buses are added.
    pci_assign_unassigned_resources calls pci_bus_assign_resources.
    pci_bus_assign_resources calls pci_setup_bridge to configure BARs of
    bridges.

    Currently pci_setup_bridge returns immediately if the bus have already
    been added. So pci_assign_unassigned_resources can't configure BARs of
    bridges that were added in a disabled state; this patch fixes the issue.

    On logical hot-add, we need to prevent the kernel from re-initializing
    bridges that have already been initialized. To achieve this,
    pci_setup_bridge returns immediately if the bridge have already been
    enabled.

    We don't need to check whether the specified bus is a root bus or not.
    pci_setup_bridge is not called on a root bus, because a root bus does
    not have a bridge.

    The patch adds a new helper function, pci_is_enabled. I made the
    function name similar to pci_is_managed. The codes which use
    enable_cnt directly are changed to use pci_is_enabled.

    Acked-by: Alex Chiang
    Signed-off-by: Yuji Shimada
    Signed-off-by: Jesse Barnes

    Yuji Shimada
     
  • If BIOS doesn't allocate resources for the SR-IOV BARs, zero the Flash
    BAR and program the SR-IOV BARs to use the old Flash Memory Space.

    Please refer to Intel 82576 Gigabit Ethernet Controller Datasheet
    section 7.9.2.14.2 for details.
    http://download.intel.com/design/network/datashts/82576_Datasheet.pdf

    Signed-off-by: Yu Zhao
    Signed-off-by: Jesse Barnes

    Yu Zhao
     

06 Apr, 2009

2 commits

  • * 'release' of git://git.kernel.org/pub/scm/linux/kernel/git/lenb/linux-acpi-2.6: (140 commits)
    ACPI: processor: use .notify method instead of installing handler directly
    ACPI: button: use .notify method instead of installing handler directly
    ACPI: support acpi_device_ops .notify methods
    toshiba-acpi: remove MAINTAINERS entry
    ACPI: battery: asynchronous init
    acer-wmi: Update copyright notice & documentation
    acer-wmi: Cleanup the failure cleanup handling
    acer-wmi: Blacklist Acer Aspire One
    video: build fix
    thinkpad-acpi: rework brightness support
    thinkpad-acpi: enhanced debugging messages for the fan subdriver
    thinkpad-acpi: enhanced debugging messages for the hotkey subdriver
    thinkpad-acpi: enhanced debugging messages for rfkill subdrivers
    thinkpad-acpi: restrict access to some firmware LEDs
    thinkpad-acpi: remove HKEY disable functionality
    thinkpad-acpi: add new debug helpers and warn of deprecated atts
    thinkpad-acpi: add missing log levels
    thinkpad-acpi: cleanup debug helpers
    thinkpad-acpi: documentation cleanup
    thinkpad-acpi: drop ibm-acpi alias
    ...

    Linus Torvalds
     
  • * git://git.kernel.org/pub/scm/linux/kernel/git/rusty/linux-2.6-cpumask: (36 commits)
    cpumask: remove cpumask allocation from idle_balance, fix
    numa, cpumask: move numa_node_id default implementation to topology.h, fix
    cpumask: remove cpumask allocation from idle_balance
    x86: cpumask: x86 mmio-mod.c use cpumask_var_t for downed_cpus
    x86: cpumask: update 32-bit APM not to mug current->cpus_allowed
    x86: microcode: cleanup
    x86: cpumask: use work_on_cpu in arch/x86/kernel/microcode_core.c
    cpumask: fix CONFIG_CPUMASK_OFFSTACK=y cpu hotunplug crash
    numa, cpumask: move numa_node_id default implementation to topology.h
    cpumask: convert node_to_cpumask_map[] to cpumask_var_t
    cpumask: remove x86 cpumask_t uses.
    cpumask: use cpumask_var_t in uv_flush_tlb_others.
    cpumask: remove cpumask_t assignment from vector_allocation_domain()
    cpumask: make Xen use the new operators.
    cpumask: clean up summit's send_IPI functions
    cpumask: use new cpumask functions throughout x86
    x86: unify cpu_callin_mask/cpu_callout_mask/cpu_initialized_mask/cpu_sibling_setup_mask
    cpumask: convert struct cpuinfo_x86's llc_shared_map to cpumask_var_t
    cpumask: convert node_to_cpumask_map[] to cpumask_var_t
    x86: unify 32 and 64-bit node_to_cpumask_map
    ...

    Linus Torvalds
     

05 Apr, 2009

1 commit


04 Apr, 2009

10 commits

  • We were comparing {bus,devfn} and assuming that a match meant it was the
    same device. It doesn't -- the same {bus,devfn} can exist in
    multiple PCI domains. Include domain number in device identification
    (and call it 'segment' in most places, because there's already a lot of
    references to 'domain' which means something else, and this code is
    infected with ACPI thinking already).

    Signed-off-by: David Woodhouse

    David Woodhouse
     
  • When the DMAR table identifies that a PCI-PCI bridge belongs to a given
    IOMMU, that means that the bridge and all devices behind it should be
    associated with the IOMMU. Not just the bridge itself.

    This fixes the device_to_iommu() function accordingly.

    (It's broken if you have the same PCI bus numbers in multiple domains,
    but this function was always broken in that way; I'll be dealing with
    that later).

    Signed-off-by: David Woodhouse

    David Woodhouse
     
  • interrupt remapping must be enabled before enabling x2apic, but
    interrupt remapping doesn't depend on x2apic, it can be used
    separately. Enable interrupt remapping in init_dmars even x2apic
    is not supported.

    [dwmw2: Update Kconfig accordingly, fix build with INTR_REMAP && !X2APIC]

    Signed-off-by: Weidong Han
    Acked-by: Ingo Molnar
    Signed-off-by: David Woodhouse

    Han, Weidong
     
  • If queue invalidation is disabled after it's already initialized,
    dmar_enable_qi won't re-enable it due to iommu->qi is allocated.
    It may result in system hang when use queue invalidation. Add this
    check to avoid this case.

    Signed-off-by: Weidong Han
    Signed-off-by: David Woodhouse

    Han, Weidong
     
  • * 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/jikos/trivial: (28 commits)
    trivial: Update my email address
    trivial: NULL noise: drivers/mtd/tests/mtd_*test.c
    trivial: NULL noise: drivers/media/dvb/frontends/drx397xD_fw.h
    trivial: Fix misspelling of "Celsius".
    trivial: remove unused variable 'path' in alloc_file()
    trivial: fix a pdlfush -> pdflush typo in comment
    trivial: jbd header comment typo fix for JBD_PARANOID_IOFAIL
    trivial: wusb: Storage class should be before const qualifier
    trivial: drivers/char/bsr.c: Storage class should be before const qualifier
    trivial: h8300: Storage class should be before const qualifier
    trivial: fix where cgroup documentation is not correctly referred to
    trivial: Give the right path in Documentation example
    trivial: MTD: remove EOL from MODULE_DESCRIPTION
    trivial: Fix typo in bio_split()'s documentation
    trivial: PWM: fix of #endif comment
    trivial: fix typos/grammar errors in Kconfig texts
    trivial: Fix misspelling of firmware
    trivial: cgroups: documentation typo and spelling corrections
    trivial: Update contact info for Jochen Hein
    trivial: fix typo "resgister" -> "register"
    ...

    Linus Torvalds
     
  • When extended interrupt mode (x2apic mode) is not supported in a
    system, it must set compatibility format interrupt to bypass
    interrupt remapping, otherwise compatibility format interrupts
    will be blocked.

    This will be used when interrupt remapping is enabled while x2apic
    is not supported.

    Signed-off-by: Weidong Han
    Acked-by: Ingo Molnar
    Signed-off-by: David Woodhouse

    Han, Weidong
     
  • This patch enables suspend/resume for interrupt remapping. During suspend,
    interrupt remapping is disabled. When resume, interrupt remapping is enabled
    again.

    Signed-off-by: Fenghua Yu
    Acked-by: Ingo Molnar
    Signed-off-by: David Woodhouse

    Fenghua Yu
     
  • This patch supports queued invalidation suspend/resume.

    Signed-off-by: Fenghua Yu
    Acked-by: Ingo Molnar
    Signed-off-by: David Woodhouse

    Fenghua Yu
     
  • This patch implements the suspend and resume feature for Intel IOMMU
    DMAR. It hooks to kernel suspend and resume interface. When suspend happens, it
    saves necessary hardware registers. When resume happens, it restores the
    registers and restarts IOMMU by enabling translation, setting up root entry, and
    re-enabling queued invalidation.

    Signed-off-by: Fenghua Yu
    Acked-by: Ingo Molnar
    Signed-off-by: David Woodhouse

    Fenghua Yu
     
  • * git://git.infradead.org/iommu-2.6:
    intel-iommu: Fix address wrap on 32-bit kernel.
    intel-iommu: Enable DMAR on 32-bit kernel.
    intel-iommu: fix PCI device detach from virtual machine
    intel-iommu: VT-d page table to support snooping control bit
    iommu: Add domain_has_cap iommu_ops
    intel-iommu: Snooping control support

    Fixed trivial conflicts in arch/x86/Kconfig and drivers/pci/intel-iommu.c

    Linus Torvalds
     

02 Apr, 2009

1 commit

  • * 'linux-next' of git://git.kernel.org/pub/scm/linux/kernel/git/jbarnes/pci-2.6: (88 commits)
    PCI: fix HT MSI mapping fix
    PCI: don't enable too much HT MSI mapping
    x86/PCI: make pci=lastbus=255 work when acpi is on
    PCI: save and restore PCIe 2.0 registers
    PCI: update fakephp for bus_id removal
    PCI: fix kernel oops on bridge removal
    PCI: fix conflict between SR-IOV and config space sizing
    powerpc/PCI: include pci.h in powerpc MSI implementation
    PCI Hotplug: schedule fakephp for feature removal
    PCI Hotplug: rename legacy_fakephp to fakephp
    PCI Hotplug: restore fakephp interface with complete reimplementation
    PCI: Introduce /sys/bus/pci/devices/.../rescan
    PCI: Introduce /sys/bus/pci/devices/.../remove
    PCI: Introduce /sys/bus/pci/rescan
    PCI: Introduce pci_rescan_bus()
    PCI: do not enable bridges more than once
    PCI: do not initialize bridges more than once
    PCI: always scan child buses
    PCI: pci_scan_slot() returns newly found devices
    PCI: don't scan existing devices
    ...

    Fix trivial append-only conflict in Documentation/feature-removal-schedule.txt

    Linus Torvalds
     

31 Mar, 2009

8 commits

  • Conflicts:

    arch/x86/include/asm/topology.h
    drivers/oprofile/buffer_sync.c
    (Both cases: changed in Linus' tree, removed in Ingo's).

    Rusty Russell
     
  • * 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/rafael/suspend-2.6:
    PCI PM: Make pci_prepare_to_sleep() disable wake-up if needed
    radeonfb: Use __pci_complete_power_transition()
    PCI PM: Introduce __pci_[start|complete]_power_transition() (rev. 2)
    PCI PM: Restore config spaces of all devices during early resume
    PCI PM: Make pci_set_power_state() handle devices with no PM support
    PCI PM: Put devices into low power states during late suspend (rev. 2)
    PCI PM: Move pci_restore_standard_config to pci-driver.c
    PCI PM: Use pci_set_power_state during early resume
    PCI PM: Consistently use variable name "error" for pm call return values
    kexec: Change kexec jump code ordering
    PM: Change hibernation code ordering
    PM: Change suspend code ordering
    PM: Rework handling of interrupts during suspend-resume
    PM: Introduce functions for suspending and resuming device interrupts

    Linus Torvalds
     
  • Conflicts:
    arch/x86/kernel/cpu/common.c

    Ingo Molnar
     
  • * 'iommu-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/linux-2.6-tip: (60 commits)
    dma-debug: make memory range checks more consistent
    dma-debug: warn of unmapping an invalid dma address
    dma-debug: fix dma_debug_add_bus() definition for !CONFIG_DMA_API_DEBUG
    dma-debug/x86: register pci bus for dma-debug leak detection
    dma-debug: add a check dma memory leaks
    dma-debug: add checks for kernel text and rodata
    dma-debug: print stacktrace of mapping path on unmap error
    dma-debug: Documentation update
    dma-debug: x86 architecture bindings
    dma-debug: add function to dump dma mappings
    dma-debug: add checks for sync_single_sg_*
    dma-debug: add checks for sync_single_range_*
    dma-debug: add checks for sync_single_*
    dma-debug: add checking for [alloc|free]_coherent
    dma-debug: add add checking for map/unmap_sg
    dma-debug: add checking for map/unmap_page/single
    dma-debug: add core checking functions
    dma-debug: add debugfs interface
    dma-debug: add kernel command line parameters
    dma-debug: add initialization code
    ...

    Fix trivial conflicts due to whitespace changes in arch/x86/kernel/pci-nommu.c

    Linus Torvalds
     
  • If the device is not supposed to wake up the system, ie. when
    device_may_wakeup(&dev->dev) returns 'false', pci_prepare_to_sleep()
    should pass 'false' to pci_enable_wake() so that it calls the
    platform to disable the wake-up capability of the device.

    Signed-off-by: Rafael J. Wysocki
    Acked-by: Jesse Barnes

    Rafael J. Wysocki
     
  • The radeonfb driver needs to program the device's PMCSR directly due
    to some quirky hardware it has to handle (see
    http://bugzilla.kernel.org/show_bug.cgi?id=12846 for details) and
    after doing that it needs to call the platform (usually ACPI) to
    finish the power transition of the device. Currently it uses
    pci_set_power_state() for this purpose, however making a specific
    assumption about the internal behavior of this function, which has
    changed recently so that this assumption is no longer satisfied.
    For this reason, introduce __pci_complete_power_transition() that may
    be called by the radeonfb driver to complete the power transition of
    the device. For symmetry, introduce __pci_start_power_transition().

    Signed-off-by: Rafael J. Wysocki
    Acked-by: Jesse Barnes

    Rafael J. Wysocki
     
  • At present the configuration spaces of PCI devices that have no
    drivers or no PM support in the drivers (either legacy or through a
    pm object) are not saved during suspend and, consequently, they are
    not restored during resume. This generally may lead to the state of
    the system being slightly inconsistent after the resume, so it's
    better to save and restore the configuration spaces of these devices
    as well.

    Signed-off-by: Rafael J. Wysocki
    Acked-by: Ingo Molnar
    Acked-by: Jesse Barnes

    Rafael J. Wysocki
     
  • There is a problem with PCI devices without any PM support (either
    native or through the platform) that pci_set_power_state() always
    returns error code for them, even if they are being put into D0.
    However, such devices are always in D0, so pci_set_power_state()
    should return success when attempting to put such a device into D0.
    It also should update the current_state field for these devices as
    appropriate. This modification is necessary so that the standard
    configuration registers of these devices are successfully restored by
    pci_restore_standard_config() during the "early" phase of resume.

    In addition, pci_set_power_state() should check the value of
    current_state before calling the platform to change the power state
    of the device to avoid doing that unnecessarily.

    Signed-off-by: Rafael J. Wysocki
    Acked-by: Ingo Molnar
    Acked-by: Jesse Barnes

    Rafael J. Wysocki