1. 20 12月, 2013 3 次提交
  2. 19 12月, 2013 4 次提交
    • Y
      PCI: Remove from bus_list and release resources in pci_release_dev() · ef83b078
      Yinghai Lu 提交于
      Previously we removed the pci_dev from the bus_list and released its
      resources in pci_destroy_dev().  But that's too early: it's possible to
      call pci_destroy_dev() twice for the same device (e.g., via sysfs), and
      that will cause an oops when we try to remove it from bus_list the second
      time.
      
      We should remove it from the bus_list only when the last reference to the
      pci_dev has been released, i.e., in pci_release_dev().
      
      [bhelgaas: changelog]
      Signed-off-by: NYinghai Lu <yinghai@kernel.org>
      Signed-off-by: NBjorn Helgaas <bhelgaas@google.com>
      ef83b078
    • Y
      PCI: Move pci_proc_attach_device() to pci_bus_add_device() · ef37702e
      Yinghai Lu 提交于
      4f535093 ("PCI: Put pci_dev in device tree as early as possible")
      moved pci_proc_attach_device() from pci_bus_add_device() to
      pci_device_add().
      
      This moves it back to pci_bus_add_device(), essentially reverting that
      part of 4f535093.  This makes it symmetric with pci_stop_dev(),
      where we call pci_proc_detach_device() and pci_remove_sysfs_dev_files()
      and set dev->is_added = 0.
      
      [bhelgaas: changelog, create sysfs then attach proc for symmetry]
      Signed-off-by: NYinghai Lu <yinghai@kernel.org>
      Signed-off-by: NBjorn Helgaas <bhelgaas@google.com>
      ef37702e
    • Y
      PCI: Use device_release_driver() in pci_stop_root_bus() · e3b439e1
      Yinghai Lu 提交于
      To be consistent with 4bff6749 ("PCI: Move device_del() from
      pci_stop_dev() to pci_destroy_dev()", this changes pci_stop_root_bus()
      to use device_release_driver() instead of device_del().
      
      This also changes pci_remove_root_bus() to use device_unregister()
      instead of put_device() so it corresponds with the device_register()
      call in pci_create_root_bus().
      
      [bhelgaas: changelog]
      Signed-off-by: NYinghai Lu <yinghai@kernel.org>
      Signed-off-by: NBjorn Helgaas <bhelgaas@google.com>
      Acked-by: NRafael J. Wysocki <rafael.j.wysocki@intel.com>
      e3b439e1
    • R
      PCI: Move device_del() from pci_stop_dev() to pci_destroy_dev() · c4a0a5d9
      Rafael J. Wysocki 提交于
      After commit bcdde7e2 (sysfs: make __sysfs_remove_dir() recursive)
      I'm seeing traces analogous to the one below in Thunderbolt testing:
      
      WARNING: CPU: 3 PID: 76 at /scratch/rafael/work/linux-pm/fs/sysfs/group.c:214 sysfs_remove_group+0x59/0xe0()
       sysfs group ffffffff81c6c500 not found for kobject '0000:08'
       Modules linked in: ...
       CPU: 3 PID: 76 Comm: kworker/u16:7 Not tainted 3.13.0-rc1+ #76
       Hardware name: Acer Aspire S5-391/Venus    , BIOS V1.02 05/29/2012
       Workqueue: kacpi_hotplug acpi_hotplug_work_fn
        0000000000000009 ffff8801644b9ac8 ffffffff816b23bf 0000000000000007
        ffff8801644b9b18 ffff8801644b9b08 ffffffff81046607 ffff88016925b800
        0000000000000000 ffffffff81c6c500 ffff88016924f928 ffff88016924f800
       Call Trace:
        [<ffffffff816b23bf>] dump_stack+0x4e/0x71
        [<ffffffff81046607>] warn_slowpath_common+0x87/0xb0
        [<ffffffff810466d1>] warn_slowpath_fmt+0x41/0x50
        [<ffffffff811e42ef>] ? sysfs_get_dirent_ns+0x6f/0x80
        [<ffffffff811e5389>] sysfs_remove_group+0x59/0xe0
        [<ffffffff8149f00b>] dpm_sysfs_remove+0x3b/0x50
        [<ffffffff81495818>] device_del+0x58/0x1c0
        [<ffffffff814959c8>] device_unregister+0x48/0x60
        [<ffffffff813254fe>] pci_remove_bus+0x6e/0x80
        [<ffffffff81325548>] pci_remove_bus_device+0x38/0x110
        [<ffffffff8132555d>] pci_remove_bus_device+0x4d/0x110
        [<ffffffff81325639>] pci_stop_and_remove_bus_device+0x19/0x20
        [<ffffffff813418d0>] disable_slot+0x20/0xe0
        [<ffffffff81341a38>] acpiphp_check_bridge+0xa8/0xd0
        [<ffffffff813427ad>] hotplug_event+0x17d/0x220
        [<ffffffff81342880>] hotplug_event_work+0x30/0x70
        [<ffffffff8136d665>] acpi_hotplug_work_fn+0x18/0x24
        [<ffffffff81061331>] process_one_work+0x261/0x450
        [<ffffffff81061a7e>] worker_thread+0x21e/0x370
        [<ffffffff81061860>] ? rescuer_thread+0x300/0x300
        [<ffffffff81068342>] kthread+0xd2/0xe0
        [<ffffffff81068270>] ? flush_kthread_worker+0x70/0x70
        [<ffffffff816c19bc>] ret_from_fork+0x7c/0xb0
        [<ffffffff81068270>] ? flush_kthread_worker+0x70/0x70
      
      (Mika Westerberg sees them too in his tests).
      
      Some investigation documented in kernel bug #65281 led me to the
      conclusion that the source of the problem is the device_del() in
      pci_stop_dev() as it now causes the sysfs directory of the device to be
      removed recursively along with all of its subdirectories.  That includes
      the sysfs directory of the device's subordinate bus (dev->subordinate) and
      its "power" group.
      
      Consequently, when pci_remove_bus() is called for dev->subordinate in
      pci_remove_bus_device(), it calls device_unregister(&bus->dev), but at this
      point the sysfs directory of bus->dev doesn't exist any more and its
      "power" group doesn't exist either.  Thus, when dpm_sysfs_remove() called
      from device_del() tries to remove that group, it triggers the above
      warning.
      
      That indicates a logical mistake in the design of
      pci_stop_and_remove_bus_device(), which causes bus device objects to be
      left behind their parents (bridge device objects) and can be fixed by
      moving the device_del() from pci_stop_dev() into pci_destroy_dev(), so
      pci_remove_bus() can be called for the device's subordinate bus before the
      device itself is unregistered from the hierarchy.  Still, the driver, if
      any, should be detached from the device in pci_stop_dev(), so use
      device_release_driver() directly from there.
      
      References: https://bugzilla.kernel.org/show_bug.cgi?id=65281#c6Reported-by: NMika Westerberg <mika.westerberg@linux.intel.com>
      Signed-off-by: NRafael J. Wysocki <rafael.j.wysocki@intel.com>
      Signed-off-by: NBjorn Helgaas <bhelgaas@google.com>
      c4a0a5d9
  3. 21 11月, 2013 1 次提交
  4. 20 11月, 2013 1 次提交
  5. 15 11月, 2013 4 次提交
    • S
      kfifo API type safety · 498d319b
      Stefani Seibold 提交于
      This patch enhances the type safety for the kfifo API.  It is now safe
      to put const data into a non const FIFO and the API will now generate a
      compiler warning when reading from the fifo where the destination
      address is pointing to a const variable.
      
      As a side effect the kfifo_put() does now expect the value of an element
      instead a pointer to the element.  This was suggested Russell King.  It
      make the handling of the kfifo_put easier since there is no need to
      create a helper variable for getting the address of a pointer or to pass
      integers of different sizes.
      
      IMHO the API break is okay, since there are currently only six users of
      kfifo_put().
      
      The code is also cleaner by kicking out the "if (0)" expressions.
      
      [akpm@linux-foundation.org: coding-style fixes]
      Signed-off-by: NStefani Seibold <stefani@seibold.net>
      Cc: Russell King <rmk@arm.linux.org.uk>
      Cc: Hauke Mehrtens <hauke@hauke-m.de>
      Signed-off-by: NAndrew Morton <akpm@linux-foundation.org>
      Signed-off-by: NLinus Torvalds <torvalds@linux-foundation.org>
      498d319b
    • R
      ACPI: Eliminate the DEVICE_ACPI_HANDLE() macro · 3a83f992
      Rafael J. Wysocki 提交于
      Since DEVICE_ACPI_HANDLE() is now literally identical to
      ACPI_HANDLE(), replace it with the latter everywhere and drop its
      definition from include/acpi.h.
      Signed-off-by: NRafael J. Wysocki <rafael.j.wysocki@intel.com>
      Acked-by: NGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      3a83f992
    • R
      ACPI / driver core: Store an ACPI device pointer in struct acpi_dev_node · 7b199811
      Rafael J. Wysocki 提交于
      Modify struct acpi_dev_node to contain a pointer to struct acpi_device
      associated with the given device object (that is, its ACPI companion
      device) instead of an ACPI handle corresponding to it.  Introduce two
      new macros for manipulating that pointer in a CONFIG_ACPI-safe way,
      ACPI_COMPANION() and ACPI_COMPANION_SET(), and rework the
      ACPI_HANDLE() macro to take the above changes into account.
      Drop the ACPI_HANDLE_SET() macro entirely and rework its users to
      use ACPI_COMPANION_SET() instead.  For some of them who used to
      pass the result of acpi_get_child() directly to ACPI_HANDLE_SET()
      introduce a helper routine acpi_preset_companion() doing an
      equivalent thing.
      
      The main motivation for doing this is that there are things
      represented by struct acpi_device objects that don't have valid
      ACPI handles (so called fixed ACPI hardware features, such as
      power and sleep buttons) and we would like to create platform
      device objects for them and "glue" them to their ACPI companions
      in the usual way (which currently is impossible due to the
      lack of valid ACPI handles).  However, there are more reasons
      why it may be useful.
      
      First, struct acpi_device pointers allow of much better type checking
      than void pointers which are ACPI handles, so it should be more
      difficult to write buggy code using modified struct acpi_dev_node
      and the new macros.  Second, the change should help to reduce (over
      time) the number of places in which the result of ACPI_HANDLE() is
      passed to acpi_bus_get_device() in order to obtain a pointer to the
      struct acpi_device associated with the given "physical" device,
      because now that pointer is returned by ACPI_COMPANION() directly.
      Finally, the change should make it easier to write generic code that
      will build both for CONFIG_ACPI set and unset without adding explicit
      compiler directives to it.
      Signed-off-by: NRafael J. Wysocki <rafael.j.wysocki@intel.com>
      Acked-by: NGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      Tested-by: Mika Westerberg <mika.westerberg@linux.intel.com> # on Haswell
      Reviewed-by: NMika Westerberg <mika.westerberg@linux.intel.com>
      Reviewed-by: Aaron Lu <aaron.lu@intel.com> # for ATA and SDIO part
      7b199811
    • B
      PCI: Fix whitespace, capitalization, and spelling errors · f7625980
      Bjorn Helgaas 提交于
      Fix whitespace, capitalization, and spelling errors.  No functional change.
      I know "busses" is not an error, but "buses" was more common, so I used it
      consistently.
      
      Signed-off-by: Marta Rybczynska <rybczynska@gmail.com> (pci_reset_bridge_secondary_bus())
      Signed-off-by: NBjorn Helgaas <bhelgaas@google.com>
      Acked-by: NRafael J. Wysocki <rafael.j.wysocki@intel.com>
      f7625980
  6. 08 11月, 2013 2 次提交
    • B
      PCI: Enable upstream bridges even for VFs on virtual buses · 79272138
      Bjorn Helgaas 提交于
      Previously we enabled the upstream PCI-to-PCI bridge only when
      "dev->bus->self != NULL".  In the case of a VF on a virtual bus, where
      "bus->self == NULL", we didn't enable the upstream bridge.
      
      This fixes that by enabling the upstream bridge of the PF corresponding to
      the VF.
      Signed-off-by: NBjorn Helgaas <bhelgaas@google.com>
      Acked-by: NYinghai Lu <yinghai@kernel.org>
      79272138
    • R
      ACPI / hotplug: Consolidate deferred execution of ACPI hotplug routines · 7b98118a
      Rafael J. Wysocki 提交于
      There are two different interfaces for queuing up work items on the
      ACPI hotplug workqueue, alloc_acpi_hp_work() used by PCI and PCI host
      bridge hotplug code and acpi_os_hotplug_execute() used by the common
      ACPI hotplug code and docking stations.  They both are somewhat
      cumbersome to use and work slightly differently.
      
      The users of alloc_acpi_hp_work() have to submit a work function that
      will extract the necessary data items from a struct acpi_hp_work
      object allocated by alloc_acpi_hp_work() and then will free that
      object, while it would be more straightforward to simply use a work
      function with one more argument and let the interface take care of
      the execution details.
      
      The users of acpi_os_hotplug_execute() also have to deal with the
      fact that it takes only one argument in addition to the work function
      pointer, although acpi_os_execute_deferred() actually takes care of
      the allocation and freeing of memory, so it would have been able to
      pass more arguments to the work function if it hadn't been
      constrained by the connection with acpi_os_execute().
      
      Moreover, while alloc_acpi_hp_work() makes GFP_KERNEL memory
      allocations, which is correct, because hotplug work items are
      always queued up from process context, acpi_os_hotplug_execute()
      uses GFP_ATOMIC, as that is needed by acpi_os_execute().  Also,
      acpi_os_execute_deferred() queued up by it waits for the ACPI event
      workqueues to flush before executing the work function, whereas
      alloc_acpi_hp_work() can't do anything similar.  That leads to
      somewhat arbitrary differences in behavior between various ACPI
      hotplug code paths and has to be straightened up.
      
      For this reason, replace both alloc_acpi_hp_work() and
      acpi_os_hotplug_execute() with a single interface,
      acpi_hotplug_execute(), combining their behavior and being more
      friendly to its users than any of the two.
      Signed-off-by: NRafael J. Wysocki <rafael.j.wysocki@intel.com>
      Tested-by: NMika Westerberg <mika.westerberg@linux.intel.com>
      7b98118a
  7. 07 11月, 2013 2 次提交
    • K
      PCI: Add x86_msi.msi_mask_irq() and msix_mask_irq() · 0e4ccb15
      Konrad Rzeszutek Wilk 提交于
      Certain platforms do not allow writes in the MSI-X BARs to setup or tear
      down vector values.  To combat against the generic code trying to write to
      that and either silently being ignored or crashing due to the pagetables
      being marked R/O this patch introduces a platform override.
      
      Note that we keep two separate, non-weak, functions default_mask_msi_irqs()
      and default_mask_msix_irqs() for the behavior of the arch_mask_msi_irqs()
      and arch_mask_msix_irqs(), as the default behavior is needed by x86 PCI
      code.
      
      For Xen, which does not allow the guest to write to MSI-X tables - as the
      hypervisor is solely responsible for setting the vector values - we
      implement two nops.
      
      This fixes a Xen guest crash when passing a PCI device with MSI-X to the
      guest.  See the bugzilla for more details.
      
      [bhelgaas: add bugzilla info]
      Reference: https://bugzilla.kernel.org/show_bug.cgi?id=64581Signed-off-by: NKonrad Rzeszutek Wilk <konrad.wilk@oracle.com>
      Signed-off-by: NBjorn Helgaas <bhelgaas@google.com>
      CC: Sucheta Chakraborty <sucheta.chakraborty@qlogic.com>
      CC: Zhenzhong Duan <zhenzhong.duan@oracle.com>
      0e4ccb15
    • S
      PCI: Warn on driver probe return value greater than zero · f92d74c1
      Stephen M. Cameron 提交于
      Ages ago, drivers could return values greater than zero from their probe
      function and this would be regarded as success.
      
      But after f3ec4f87 ("PCI: change device runtime PM settings for probe
      and remove") and 967577b0 ("PCI/PM: Keep runtime PM enabled for unbound
      PCI devices"), we set dev->driver to NULL if the driver's probe function
      returns a value greater than zero.
      
      __pci_device_probe() treats this as success, and drivers can still mostly
      work even with dev->driver == NULL, but PCI power management doesn't work,
      and we don't call the driver's remove function on rmmod.
      
      To help catch these driver problems, issue a warning in this case.
      
      [bhelgaas: changelog]
      Signed-off-by: NStephen M. Cameron <scameron@beardog.cce.hp.com>
      Signed-off-by: NBjorn Helgaas <bhelgaas@google.com>
      f92d74c1
  8. 06 11月, 2013 2 次提交
    • B
      PCI: Drop warning about drivers that don't use pci_set_master() · fbeeb822
      Bjorn Helgaas 提交于
      f41f064c ("PCI: Workaround missing pci_set_master in pci drivers") made
      pci_enable_bridge() turn on bus mastering if the driver hadn't done so
      already.  It also added a warning in this case.  But there's no reason to
      warn about it unless it's actually a problem to enable bus mastering here.
      
      This patch drops the warning because I'm not aware of any such problem.
      Signed-off-by: NBjorn Helgaas <bhelgaas@google.com>
      CC: Paul Bolle <pebolle@tiscali.nl>
      fbeeb822
    • Y
      PCI: Workaround missing pci_set_master in pci drivers · cf3e1feb
      Yinghai Lu 提交于
      Ben Herrenschmidt found that commit 928bea96 ("PCI: Delay enabling
      bridges until they're needed") breaks PCI in some powerpc environments.
      
      The reason is that the PCIe port driver will call pci_enable_device() on
      the bridge, so the device is enabled, but skips pci_set_master because
      pcie_port_auto and no acpi on powerpc.
      
      Because of that, pci_enable_bridge() later on (called as a result of the
      child device driver doing pci_enable_device) will see the bridge as
      already enabled and will not call pci_set_master() on it.
      
      Fixed by add checking in pci_enable_bridge, and call pci_set_master
      if driver skip that.
      
      That will make the code more robot and wade off problem for missing
      pci_set_master in drivers.
      Reported-by: NBenjamin Herrenschmidt <benh@kernel.crashing.org>
      Signed-off-by: NYinghai Lu <yinghai@kernel.org>
      Signed-off-by: NLinus Torvalds <torvalds@linux-foundation.org>
      cf3e1feb
  9. 01 11月, 2013 2 次提交
    • A
      PCI: Update pcie_ports 'auto' behavior for non-ACPI platforms · 6b87e700
      Andrew Murray 提交于
      The pcie_ports parameter, which defaults to 'auto', allows a user
      to specify if PCIe port services are disabled ('compat'), always
      enabled ('native'), or only used when allowed by the BIOS
      ('auto').
      
      Where CONFIG_ACPI isn't enabled, as is often the case for non
      x86/ia64 platforms, the 'auto' behavior results in that of
      'compat'. Thus in order to use port services on these platforms
      'pcie_ports=native' must be added to the kernel command line.
      
      This patch results in the 'native' behavior being followed where
      'auto' is selected and ACPI is not enabled.
      Signed-off-by: NAndrew Murray <amurray@embedded-bits.co.uk>
      Signed-off-by: NBjorn Helgaas <bhelgaas@google.com>
      6b87e700
    • M
      PCI: imx6: Probe the PCIe in fs_initcall() · f216f57f
      Marek Vasut 提交于
      Probe the PCIe driver in fs_initcall() instead of module_init()
      to assure that pci_assign_unassigned_resources() will be called
      early.  This function is called in dw_pcie_host_init(), which is
      in turn called from imx6_add_pcie_port(), which is called from
      imx6_pcie_probe().  If this is not called early, we will hit
      resource collisions since pcieport driver is then probed way too
      late.
      Signed-off-by: NMarek Vasut <marex@denx.de>
      Signed-off-by: NBjorn Helgaas <bhelgaas@google.com>
      Acked-by: NShawn Guo <shawn.guo@linaro.org>
      Cc: Frank Li <lznuaa@gmail.com>
      Cc: Jingoo Han <jg1.han@samsung.com>
      Cc: Mohit KUMAR <Mohit.KUMAR@st.com>
      Cc: Pratyush Anand <pratyush.anand@st.com>
      Cc: Richard Zhu <r65037@freescale.com>
      Cc: Sascha Hauer <s.hauer@pengutronix.de>
      Cc: Sean Cross <xobs@kosagi.com>
      Cc: Siva Reddy Kallam <siva.kallam@samsung.com>
      Cc: Srikanth T Shivanand <ts.srikanth@samsung.com>
      Cc: Tim Harvey <tharvey@gateworks.com>
      Cc: Troy Kisky <troy.kisky@boundarydevices.com>
      Cc: Yinghai Lu <yinghai@kernel.org>
      f216f57f
  10. 31 10月, 2013 2 次提交
  11. 30 10月, 2013 7 次提交
  12. 24 10月, 2013 5 次提交
  13. 12 10月, 2013 2 次提交
  14. 09 10月, 2013 3 次提交