Merge tag 'block-5.11-2021-01-10' of git://git.kernel.dk/linux-block
[linux/fpc-iii.git] / drivers / pci / hotplug / TODO
bloba32070be5adf95921aa00b277b827ae881e8a2a1
1 Contributions are solicited in particular to remedy the following issues:
3 cpcihp:
5 * There are no implementations of the ->hardware_test, ->get_power and
6   ->set_power callbacks in struct cpci_hp_controller_ops.  Why were they
7   introduced?  Can they be removed from the struct?
9 cpqphp:
11 * The driver spawns a kthread cpqhp_event_thread() which is woken by the
12   hardirq handler cpqhp_ctrl_intr().  Convert this to threaded IRQ handling.
13   The kthread is also woken from the timer pushbutton_helper_thread(),
14   convert it to call irq_wake_thread().  Use pciehp as a template.
16 * A large portion of cpqphp_ctrl.c and cpqphp_pci.c concerns resource
17   management.  Doesn't this duplicate functionality in the core?
19 ibmphp:
21 * Implementations of hotplug_slot_ops callbacks such as get_adapter_present()
22   in ibmphp_core.c create a copy of the struct slot on the stack, then perform
23   the actual operation on that copy.  Determine if this overhead is necessary,
24   delete it if not.  The functions also perform a NULL pointer check on the
25   struct hotplug_slot, this seems superfluous.
27 * Several functions access the pci_slot member in struct hotplug_slot even
28   though pci_hotplug.h declares it private.  See get_max_bus_speed() for an
29   example.  Either the pci_slot member should no longer be declared private
30   or ibmphp should store a pointer to its bus in struct slot.  Probably the
31   former.
33 * The functions get_max_adapter_speed() and get_bus_name() are commented out.
34   Can they be deleted?  There are also forward declarations at the top of
35   ibmphp_core.c as well as pointers in ibmphp_hotplug_slot_ops, likewise
36   commented out.
38 * ibmphp_init_devno() takes a struct slot **, it could instead take a
39   struct slot *.
41 * The return value of pci_hp_register() is not checked.
43 * iounmap(io_mem) is called in the error path of ebda_rsrc_controller()
44   and once more in the error path of its caller ibmphp_access_ebda().
46 * The various slot data structures are difficult to follow and need to be
47   simplified.  A lot of functions are too large and too complex, they need
48   to be broken up into smaller, manageable pieces.  Negative examples are
49   ebda_rsrc_controller() and configure_bridge().
51 * A large portion of ibmphp_res.c and ibmphp_pci.c concerns resource
52   management.  Doesn't this duplicate functionality in the core?
54 sgi_hotplug:
56 * Several functions access the pci_slot member in struct hotplug_slot even
57   though pci_hotplug.h declares it private.  See sn_hp_destroy() for an
58   example.  Either the pci_slot member should no longer be declared private
59   or sgi_hotplug should store a pointer to it in struct slot.  Probably the
60   former.
62 shpchp:
64 * There is only a single implementation of struct hpc_ops.  Can the struct be
65   removed and its functions invoked directly?  This has already been done in
66   pciehp with commit 82a9e79ef132 ("PCI: pciehp: remove hpc_ops").  Clarify
67   if there was a specific reason not to apply the same change to shpchp.
69 * The ->get_mode1_ECC_cap callback in shpchp_hpc_ops is never invoked.
70   Why was it introduced?  Can it be removed?
72 * The hardirq handler shpc_isr() queues events on a workqueue.  It can be
73   simplified by converting it to threaded IRQ handling.  Use pciehp as a
74   template.