30 Jun, 2009

1 commit


17 Jun, 2009

1 commit

  • Create symbolic link to hotplug driver module in the PCI slot
    directory (/sys/bus/pci/slots/). In the past, we need to load
    hotplug drivers one by one to identify the hotplug driver that handles
    the slot, and it was very inconvenient especially for trouble shooting.
    With this change, we can easily identify the hotplug driver.

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

    Kenji Kaneshige
     

23 Apr, 2009

1 commit


20 Mar, 2009

1 commit

  • Convert usages of pr_debug to dev_dbg and add physical slot name.

    Note that we use dev_dbg on the struct pci_bus and still manually
    print out the PCI slot number (instead of calling dev_dbg on a
    pci_dev) because a struct pci_bus with empty physical slots will
    not have any pci_devs.

    Reviewed-by: Andrew Patterson
    Signed-off-by: Alex Chiang
    Signed-off-by: Jesse Barnes

    Alex Chiang
     

10 Dec, 2008

1 commit

  • In pci_create_slot(), the local variable 'slot_name' is allocated by
    make_slot_name(), but never freed. We never use it after passing it to
    the kobject core, so we should free it upon function exit.

    Cc: stable@kernel.org
    Signed-off-by: Alex Chiang
    Signed-off-by: Jesse Barnes

    Alex Chiang
     

23 Oct, 2008

4 commits

  • 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: Kenji Kaneshige
    Signed-off-by: Alex Chiang
    Signed-off-by: Jesse Barnes

    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: Kenji Kaneshige
    Signed-off-by: Alex Chiang
    Signed-off-by: Jesse Barnes

    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: Kenji Kaneshige
    Signed-off-by: Alex Chiang
    Signed-off-by: Jesse Barnes

    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: Kenji Kaneshige
    Signed-off-by: Alex Chiang
    Signed-off-by: Jesse Barnes

    Alex Chiang
     

21 Oct, 2008

1 commit

  • The introduction of struct pci_slot (f46753c5e354b857b20ab8e0fe7b25)
    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: Alex Chiang
    Signed-off-by: Jesse Barnes

    Alex Chiang
     

11 Jun, 2008

1 commit

  • 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: Badari Pulavarty
    Acked-by: Benjamin Herrenschmidt
    [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: Alex Chiang
    Signed-off-by: Matthew Wilcox
    Cc: Greg KH
    Cc: Kristen Carlson Accardi
    Cc: Len Brown
    Acked-by: Kenji Kaneshige
    Signed-off-by: Andrew Morton
    Signed-off-by: Jesse Barnes

    Alex Chiang