1. 10 12月, 2008 1 次提交
  2. 23 10月, 2008 4 次提交
    • A
      PCI, PCI Hotplug: introduce slot_name helpers · 0ad772ec
      Alex Chiang 提交于
      In preparation for cleaning up the various hotplug drivers
      such that they don't have to manage their own 'name' parameters
      anymore, we provide the following convenience functions:
      
      	pci_slot_name()
      	hotplug_slot_name()
      
      These helpers will be used by individual hotplug drivers.
      
      Cc: kristen.c.accardi@intel.com
      Cc: matthew@wil.cx
      Acked-by: NKenji Kaneshige <kaneshige.kenji@jp.fujitsu.com>
      Signed-off-by: NAlex Chiang <achiang@hp.com>
      Signed-off-by: NJesse Barnes <jbarnes@virtuousgeek.org>
      0ad772ec
    • A
      PCI: prevent duplicate slot names · 5fe6cc60
      Alex Chiang 提交于
      Prevent callers of pci_create_slot() from registering slots with
      duplicate names. This condition occurs most often when PCI hotplug
      drivers are loaded on platforms with broken firmware that assigns
      identical names to multiple slots.
      
      We now rename these duplicate slots on behalf of the user.
      
      If firmware assigns the name N to multiple slots, then:
      
      	The first registered slot is assigned N
      	The second registered slot is assigned N-1
      	The third registered slot is assigned N-2
      	etc.
      
      This is the permanent fix mentioned in earlier commits d6a9e9b4 and
      167e782e (shpchp/pciehp: Rename duplicate slot name...).
      
      We take advantage of the new 'hotplug' parameter in pci_create_slot()
      to prevent a slot create/rename race between hotplug drivers and
      detection drivers.
      
      	Scenario A:
      	hotplug driver                  detection driver
      	--------------                  ----------------
      	pci_create_slot(hotplug=set)
      					pci_create_slot(hotplug=NULL)
      
      The hotplug driver creates the slot with its desired name, and then
      releases the semaphore. Now, the detection driver tries to create
      the same slot, but it already exists. We don't care about renaming,
      so return the existing slot.
      
      	Scenario B:
      	hotplug driver                  detection driver
      	--------------                  ----------------
      					pci_create_slot(hotplug=NULL)
      	pci_create_slot(hotplug=set)
      
      The detection driver creates the slot with name "X". Then the hotplug
      driver tries to create the same slot, but wants the name "Y" instead.
      We detect that we're trying to create the same slot and that we also
      want a rename, so rename the slot to "Y" and return.
      
      	Scenario C:
      	hotplug driver                  hotplug driver
      	--------------                  ----------------
      	pci_create_slot(hotplug=set)
      					pci_create_slot(hotplug=set)
      
      Two separate hotplug drivers are attempting to claim the slot and
      are passing valid hotplug_slot args to pci_create_slot(). We detect
      that the slot already has a ->hotplug callback, prevent a rename,
      and return -EBUSY.
      
      Cc: kristen.c.accardi@intel.com
      Cc: matthew@wil.cx
      Acked-by: NKenji Kaneshige <kaneshige.kenji@jp.fujitsu.com>
      Signed-off-by: NAlex Chiang <achiang@hp.com>
      Signed-off-by: NJesse Barnes <jbarnes@virtuousgeek.org>
      5fe6cc60
    • A
      PCI: update pci_create_slot() to take a 'hotplug' param · 828f3768
      Alex Chiang 提交于
      Slot detection drivers can co-exist with hotplug drivers. The names
      of the detected/claimed slots may be different depending on module
      load order.
      
      For legacy reasons, we need to allow hotplug drivers to override
      the slot name if a detection driver is loaded first (and they find
      the same slots).
      
      Creating and overriding slot names should be an atomic operation,
      otherwise you get a locking nightmare as various drivers race to
      call pci_create_slot().
      
      pci_create_slot() is already serialized by grabbing the pci_bus_sem.
      
      We update the API and add a 'hotplug' param, which is:
      
      	set if the caller is a hotplug driver
      	NULL if the caller is a detection driver
      
      pci_create_slot() does not actually use the 'hotplug' parameter in this
      patch. A later patch will add the logic that uses it.
      
      Cc: kristen.c.accardi@intel.com
      Cc: matthew@wil.cx
      Acked-by: NKenji Kaneshige <kaneshige.kenji@jp.fujitsu.com>
      Signed-off-by: NAlex Chiang <achiang@hp.com>
      Signed-off-by: NJesse Barnes <jbarnes@virtuousgeek.org>
      828f3768
    • A
      PCI: rename pci_update_slot_number to pci_renumber_slot · d25b7c8d
      Alex Chiang 提交于
      The GPL exported symbol pci_update_slot_number has been renamed to
      pci_renumber_slot. Some of the safety checks were unnecessary and
      were removed.
      
      Cc: kristen.c.accardi@intel.com
      Cc: matthew@wil.cx
      Acked-by: NKenji Kaneshige <kaneshige.kenji@jp.fujitsu.com>
      Signed-off-by: NAlex Chiang <achiang@hp.com>
      Signed-off-by: NJesse Barnes <jbarnes@virtuousgeek.org>
      d25b7c8d
  3. 21 10月, 2008 1 次提交
    • A
      PCI: connect struct pci_dev to struct pci_slot · cef354db
      Alex Chiang 提交于
      The introduction of struct pci_slot (f46753c5)
      added a struct pci_slot pointer to struct pci_dev, but we forgot to
      associate the two.
      
      Connect the two structs together; the interesting portions of the object
      lifetimes are:
      
      	- when a new pci_slot is created, connect it to the appropriate
      	  pci_dev's. A single pci_slot may be associated with multiple
      	  pci_dev's, e.g. any multi-function PCI device.
      
      	- when a pci_slot is released, look for all the pci_dev's it was
      	  associated with, and set their pci_slot pointers to NULL
      
      	- when a pci_dev is created, look for slots to associate with.
      
      Note -- when a pci_dev is released, we don't need to do any bookkeeping,
      since pci_slot's do not have pointers to pci_dev's.
      Signed-off-by: NAlex Chiang <achiang@hp.com>
      Signed-off-by: NJesse Barnes <jbarnes@virtuousgeek.org>
      cef354db
  4. 11 6月, 2008 1 次提交
    • A
      PCI: introduce pci_slot · f46753c5
      Alex Chiang 提交于
      Currently, /sys/bus/pci/slots/ only exposes hotplug attributes when a
      hotplug driver is loaded, but PCI slots have attributes such as address,
      speed, width, etc.  that are not related to hotplug at all.
      
      Introduce pci_slot as the primary data structure and kobject model.
      Hotplug attributes described in hotplug_slot become a secondary
      structure associated with the pci_slot.
      
      This patch only creates the infrastructure that allows the separation of
      PCI slot attributes and hotplug attributes.  In this patch, the PCI
      hotplug core remains the only user of this infrastructure, and thus,
      /sys/bus/pci/slots/ will still only become populated when a hotplug
      driver is loaded.
      
      A later patch in this series will add a second user of this new
      infrastructure and demonstrate splitting the task of exposing pci_slot
      attributes from hotplug_slot attributes.
      
        - Make pci_slot the primary sysfs entity. hotplug_slot becomes a
          subsidiary structure.
          o pci_create_slot() creates and registers a slot with the PCI core
          o pci_slot_add_hotplug() gives it hotplug capability
      
        - Change the prototype of pci_hp_register() to take the bus and
          slot number (on parent bus) as parameters.
      
        - Remove all the ->get_address methods since this functionality is
          now handled by pci_slot directly.
      
      [achiang@hp.com: rpaphp-correctly-pci_hp_register-for-empty-pci-slots]
      Tested-by: NBadari Pulavarty <pbadari@us.ibm.com>
      Acked-by: NBenjamin Herrenschmidt <benh@kernel.crashing.org>
      [akpm@linux-foundation.org: build fix]
      [akpm@linux-foundation.org: make headers_check happy]
      [akpm@linux-foundation.org: nuther build fix]
      [akpm@linux-foundation.org: fix typo in #include]
      Signed-off-by: NAlex Chiang <achiang@hp.com>
      Signed-off-by: NMatthew Wilcox <matthew@wil.cx>
      Cc: Greg KH <greg@kroah.com>
      Cc: Kristen Carlson Accardi <kristen.c.accardi@intel.com>
      Cc: Len Brown <lenb@kernel.org>
      Acked-by: NKenji Kaneshige <kaneshige.kenji@jp.fujitsu.com>
      Signed-off-by: NAndrew Morton <akpm@linux-foundation.org>
      Signed-off-by: NJesse Barnes <jbarnes@virtuousgeek.org>
      f46753c5