linux/drivers/pci/hotplug/TODO

Contributions are solicited in particular to remedy the following issues:

cpcihp:

* There are no implementations of the ->hardware_test, ->get_power and
  ->set_power callbacks in struct cpci_hp_controller_ops.  Why were they
  introduced?  Can they be removed from the struct?

* Returned code from pci_hp_add_bridge() is not checked.

cpqphp:

* The driver spawns a kthread cpqhp_event_thread() which is woken by the
  hardirq handler cpqhp_ctrl_intr().  Convert this to threaded IRQ handling.
  The kthread is also woken from the timer pushbutton_helper_thread(),
  convert it to call irq_wake_thread().  Use pciehp as a template.

* A large portion of cpqphp_ctrl.c and cpqphp_pci.c concerns resource
  management.  Doesn't this duplicate functionality in the core?

* Returned code from pci_hp_add_bridge() is not checked.

ibmphp:

* Implementations of hotplug_slot_ops callbacks such as get_adapter_present()
  in ibmphp_core.c create a copy of the struct slot on the stack, then perform
  the actual operation on that copy.  Determine if this overhead is necessary,
  delete it if not.  The functions also perform a NULL pointer check on the
  struct hotplug_slot, this seems superfluous.

* Several functions access the pci_slot member in struct hotplug_slot even
  though pci_hotplug.h declares it private.  See get_max_bus_speed() for an
  example.  Either the pci_slot member should no longer be declared private
  or ibmphp should store a pointer to its bus in struct slot.  Probably the
  former.

* ibmphp_init_devno() takes a struct slot **, it could instead take a
  struct slot *.

* The return value of pci_hp_register() is not checked.

* The various slot data structures are difficult to follow and need to be
  simplified.  A lot of functions are too large and too complex, they need
  to be broken up into smaller, manageable pieces.  Negative examples are
  ebda_rsrc_controller() and configure_bridge().

* A large portion of ibmphp_res.c and ibmphp_pci.c concerns resource
  management.  Doesn't this duplicate functionality in the core?

* Returned code from pci_hp_add_bridge() is not checked.

shpchp:

* The hardirq handler shpc_isr() queues events on a workqueue.  It can be
  simplified by converting it to threaded IRQ handling.  Use pciehp as a
  template.