PCI: Use 'pci_channel_state_t' instead of 'enum pci_channel_state'
authorLuc Van Oostenryck <luc.vanoostenryck@gmail.com>
Thu, 2 Jul 2020 16:26:49 +0000 (18:26 +0200)
committerBjorn Helgaas <bhelgaas@google.com>
Tue, 7 Jul 2020 22:11:52 +0000 (17:11 -0500)
The method struct pci_error_handlers.error_detected() is defined and
documented as taking an 'enum pci_channel_state' for the second argument,
but most drivers use 'pci_channel_state_t' instead.

This 'pci_channel_state_t' is not a typedef for the enum but a typedef for
a bitwise type in order to have better/stricter typechecking.

Consolidate everything by using 'pci_channel_state_t' in the method's
definition, in the related helpers and in the drivers.

Enforce use of 'pci_channel_state_t' by replacing 'enum pci_channel_state'
with an anonymous 'enum'.

Note: Currently, from a typechecking point of view this patch changes
nothing because only the constants defined by the enum are bitwise, not the
enum itself (sparse doesn't have the notion of 'bitwise enum'). This may
change in some not too far future, hence the patch.

[bhelgaas: squash in
  https://lore.kernel.org/r/20200702162651.49526-3-luc.vanoostenryck@gmail.com
  https://lore.kernel.org/r/20200702162651.49526-4-luc.vanoostenryck@gmail.com]
Link: https://lore.kernel.org/r/20200702162651.49526-2-luc.vanoostenryck@gmail.com
Signed-off-by: Luc Van Oostenryck <luc.vanoostenryck@gmail.com>
Signed-off-by: Bjorn Helgaas <bhelgaas@google.com>
18 files changed:
Documentation/PCI/pci-error-recovery.rst
arch/powerpc/kernel/eeh_driver.c
drivers/block/rsxx/core.c
drivers/dma/ioat/init.c
drivers/media/pci/ngene/ngene-cards.c
drivers/misc/genwqe/card_base.c
drivers/net/ethernet/intel/i40e/i40e_main.c
drivers/net/ethernet/intel/ice/ice_main.c
drivers/net/ethernet/intel/ixgb/ixgb_main.c
drivers/net/ethernet/sfc/efx.c
drivers/net/ethernet/sfc/falcon/efx.c
drivers/pci/pci.h
drivers/pci/pcie/err.c
drivers/pci/pcie/portdrv_pci.c
drivers/scsi/aacraid/linit.c
drivers/scsi/sym53c8xx_2/sym_glue.c
drivers/staging/qlge/qlge_main.c
include/linux/pci.h

index 13beee23cb04fbf330994527a4e8f94128b61783..ccd71342313383c96fff4dc81ce2fe5958671b14 100644 (file)
@@ -79,7 +79,7 @@ This structure has the form::
 
        struct pci_error_handlers
        {
-               int (*error_detected)(struct pci_dev *dev, enum pci_channel_state);
+               int (*error_detected)(struct pci_dev *dev, pci_channel_state_t);
                int (*mmio_enabled)(struct pci_dev *dev);
                int (*slot_reset)(struct pci_dev *dev);
                void (*resume)(struct pci_dev *dev);
@@ -87,11 +87,11 @@ This structure has the form::
 
 The possible channel states are::
 
-       enum pci_channel_state {
+       typedef enum {
                pci_channel_io_normal,  /* I/O channel is in normal state */
                pci_channel_io_frozen,  /* I/O to channel is blocked */
                pci_channel_io_perm_failure, /* PCI card is dead */
-       };
+       } pci_channel_state_t;
 
 Possible return values are::
 
@@ -348,7 +348,7 @@ STEP 6: Permanent Failure
 -------------------------
 A "permanent failure" has occurred, and the platform cannot recover
 the device.  The platform will call error_detected() with a
-pci_channel_state value of pci_channel_io_perm_failure.
+pci_channel_state_t value of pci_channel_io_perm_failure.
 
 The device driver should, at this point, assume the worst. It should
 cancel all pending I/O, refuse all new I/O, returning -EIO to
index 7b048cee767c746fefe8a75cb991fb94fe757164..ab8806d2e03e6cf1212e5e9f301f7f256a8af4a0 100644 (file)
@@ -214,7 +214,7 @@ static void eeh_dev_save_state(struct eeh_dev *edev, void *userdata)
        pci_save_state(pdev);
 }
 
-static void eeh_set_channel_state(struct eeh_pe *root, enum pci_channel_state s)
+static void eeh_set_channel_state(struct eeh_pe *root, pci_channel_state_t s)
 {
        struct eeh_pe *pe;
        struct eeh_dev *edev, *tmp;
index 10f6368117d8142e9e2275b479467f76c12c776d..34e937dd6bca1b9a4165cb876b0ea1d997e1885c 100644 (file)
@@ -625,7 +625,7 @@ static int rsxx_eeh_fifo_flush_poll(struct rsxx_cardinfo *card)
 }
 
 static pci_ers_result_t rsxx_error_detected(struct pci_dev *dev,
-                                           enum pci_channel_state error)
+                                           pci_channel_state_t error)
 {
        int st;
 
index 58d13564f88b4ea36394706955c0595b01dc074b..089893f2bbb8b40be949e34c6fc718cc9550b111 100644 (file)
@@ -1267,7 +1267,7 @@ static void ioat_resume(struct ioatdma_device *ioat_dma)
 #define DRV_NAME "ioatdma"
 
 static pci_ers_result_t ioat_pcie_error_detected(struct pci_dev *pdev,
-                                                enum pci_channel_state error)
+                                                pci_channel_state_t error)
 {
        dev_dbg(&pdev->dev, "%s: PCIe AER error %d\n", DRV_NAME, error);
 
index 6185806a00e00b8d0fc2e0803e6f6f6320f826fb..8bfb3d8ea6103b82e08d464dbacecf60ccbaf402 100644 (file)
@@ -1186,7 +1186,7 @@ MODULE_DEVICE_TABLE(pci, ngene_id_tbl);
 /****************************************************************************/
 
 static pci_ers_result_t ngene_error_detected(struct pci_dev *dev,
-                                            enum pci_channel_state state)
+                                            pci_channel_state_t state)
 {
        dev_err(&dev->dev, "PCI error\n");
        if (state == pci_channel_io_perm_failure)
index 1dc6c7c5cbce929d40118cf1a0fb7213963744f6..97b8ecc423833a3a56f805f0d0d300222d466e1b 100644 (file)
@@ -1240,7 +1240,7 @@ static void genwqe_remove(struct pci_dev *pci_dev)
  * error is detected.
  */
 static pci_ers_result_t genwqe_err_error_detected(struct pci_dev *pci_dev,
-                                                enum pci_channel_state state)
+                                                pci_channel_state_t state)
 {
        struct genwqe_dev *cd;
 
index 5d807c8004f85635c1243cd7352c511f6a12f856..f0de2d1842b418cdfdce13d6e9da6803ba5e149d 100644 (file)
@@ -15465,7 +15465,7 @@ unmap:
  * remediation.
  **/
 static pci_ers_result_t i40e_pci_error_detected(struct pci_dev *pdev,
-                                               enum pci_channel_state error)
+                                               pci_channel_state_t error)
 {
        struct i40e_pf *pf = pci_get_drvdata(pdev);
 
index 082825e3cb39529fb814d0666d5f058324a00910..4dd9226a12dfa4aa222339420d2c07d977e70200 100644 (file)
@@ -3586,7 +3586,7 @@ static void ice_remove(struct pci_dev *pdev)
  * is in progress.  Allows the driver to gracefully prepare/handle PCI errors.
  */
 static pci_ers_result_t
-ice_pci_err_detected(struct pci_dev *pdev, enum pci_channel_state err)
+ice_pci_err_detected(struct pci_dev *pdev, pci_channel_state_t err)
 {
        struct ice_pf *pf = pci_get_drvdata(pdev);
 
index b64e91ea3465d52ee490e5e1691313674b517af5..00db4b5863b1c0ee6c2f45058b6ddf9cf97e867e 100644 (file)
@@ -82,7 +82,7 @@ static int ixgb_vlan_rx_kill_vid(struct net_device *netdev,
 static void ixgb_restore_vlan(struct ixgb_adapter *adapter);
 
 static pci_ers_result_t ixgb_io_error_detected (struct pci_dev *pdev,
-                             enum pci_channel_state state);
+                             pci_channel_state_t state);
 static pci_ers_result_t ixgb_io_slot_reset (struct pci_dev *pdev);
 static void ixgb_io_resume (struct pci_dev *pdev);
 
@@ -2194,7 +2194,7 @@ ixgb_restore_vlan(struct ixgb_adapter *adapter)
  * a PCI bus error is detected.
  */
 static pci_ers_result_t ixgb_io_error_detected(struct pci_dev *pdev,
-                                               enum pci_channel_state state)
+                                               pci_channel_state_t state)
 {
        struct net_device *netdev = pci_get_drvdata(pdev);
        struct ixgb_adapter *adapter = netdev_priv(netdev);
index 256807c28ff7c596631f4d09fdf536d33ff32821..ed627aff7b36f1da6c5b79e648965fb019a55482 100644 (file)
@@ -1519,7 +1519,7 @@ static const struct dev_pm_ops efx_pm_ops = {
  * Stop the software path and request a slot reset.
  */
 static pci_ers_result_t efx_io_error_detected(struct pci_dev *pdev,
-                                             enum pci_channel_state state)
+                                             pci_channel_state_t state)
 {
        pci_ers_result_t status = PCI_ERS_RESULT_RECOVERED;
        struct efx_nic *efx = pci_get_drvdata(pdev);
index 42bcd34fc508ed3f218cd70d5262d1686cfaf0c9..f8979991970ef828976e24f14170addabf21d565 100644 (file)
@@ -3118,7 +3118,7 @@ static const struct dev_pm_ops ef4_pm_ops = {
  * Stop the software path and request a slot reset.
  */
 static pci_ers_result_t ef4_io_error_detected(struct pci_dev *pdev,
-                                             enum pci_channel_state state)
+                                             pci_channel_state_t state)
 {
        pci_ers_result_t status = PCI_ERS_RESULT_RECOVERED;
        struct ef4_nic *efx = pci_get_drvdata(pdev);
index 6d3f758671064ff5fd2a35af093bce6a69174b45..c6c0c455f59fc113b6ff5326854fcf9fcdde2c3b 100644 (file)
@@ -555,7 +555,7 @@ static inline int pci_dev_specific_disable_acs_redir(struct pci_dev *dev)
 
 /* PCI error reporting and recovery */
 pci_ers_result_t pcie_do_recovery(struct pci_dev *dev,
-                       enum pci_channel_state state,
+                       pci_channel_state_t state,
                        pci_ers_result_t (*reset_link)(struct pci_dev *pdev));
 
 bool pcie_wait_for_link(struct pci_dev *pdev, bool active);
index 14bb8f54723eddf34be207db6c9ff326496027e7..467686ee2d8bed8e9297dd3041d8ebb44179d83c 100644 (file)
@@ -46,7 +46,7 @@ static pci_ers_result_t merge_result(enum pci_ers_result orig,
 }
 
 static int report_error_detected(struct pci_dev *dev,
-                                enum pci_channel_state state,
+                                pci_channel_state_t state,
                                 enum pci_ers_result *result)
 {
        pci_ers_result_t vote;
@@ -147,7 +147,7 @@ out:
 }
 
 pci_ers_result_t pcie_do_recovery(struct pci_dev *dev,
-                       enum pci_channel_state state,
+                       pci_channel_state_t state,
                        pci_ers_result_t (*reset_link)(struct pci_dev *pdev))
 {
        pci_ers_result_t status = PCI_ERS_RESULT_CAN_RECOVER;
index 3acf151ae015a836917569e26af4f04f41488d33..3a3ce40ae1abdbe90fc8a828f1392ebfde512efd 100644 (file)
@@ -146,7 +146,7 @@ static void pcie_portdrv_remove(struct pci_dev *dev)
 }
 
 static pci_ers_result_t pcie_portdrv_error_detected(struct pci_dev *dev,
-                                       enum pci_channel_state error)
+                                       pci_channel_state_t error)
 {
        /* Root Port has no impact. Always recovers. */
        return PCI_ERS_RESULT_CAN_RECOVER;
index a308e86a97f191f7abd2f9ba49317a56d29083ef..37f65602b0ec7bbf1713a68fe508ca487cfd3354 100644 (file)
@@ -2002,7 +2002,7 @@ static void aac_remove_one(struct pci_dev *pdev)
 }
 
 static pci_ers_result_t aac_pci_error_detected(struct pci_dev *pdev,
-                                       enum pci_channel_state error)
+                                       pci_channel_state_t error)
 {
        struct Scsi_Host *shost = pci_get_drvdata(pdev);
        struct aac_dev *aac = shost_priv(shost);
index 2ca018ce796f74446488e0e5965d07faf5e6c3d7..f455243bdb9bed7f001844717506a0ca24e5f11f 100644 (file)
@@ -1743,7 +1743,7 @@ static void sym2_remove(struct pci_dev *pdev)
  * @state: current state of the PCI slot
  */
 static pci_ers_result_t sym2_io_error_detected(struct pci_dev *pdev,
-                                         enum pci_channel_state state)
+                                         pci_channel_state_t state)
 {
        /* If slot is permanently frozen, turn everything off */
        if (state == pci_channel_io_perm_failure) {
index 402edaeffe12d6d9f05d03a698fbb0cde21788b1..ac30aefe49a11446061a38f109017c2779e32ad3 100644 (file)
@@ -4678,7 +4678,7 @@ static void ql_eeh_close(struct net_device *ndev)
  * a PCI bus error is detected.
  */
 static pci_ers_result_t qlge_io_error_detected(struct pci_dev *pdev,
-                                              enum pci_channel_state state)
+                                              pci_channel_state_t state)
 {
        struct net_device *ndev = pci_get_drvdata(pdev);
        struct ql_adapter *qdev = netdev_priv(ndev);
index c79d83304e5293330f38ebb73a630daa499c9a6c..adcee9e30bfa50a088e44207f41270e1c44277a5 100644 (file)
@@ -179,7 +179,7 @@ static inline const char *pci_power_name(pci_power_t state)
  */
 typedef unsigned int __bitwise pci_channel_state_t;
 
-enum pci_channel_state {
+enum {
        /* I/O channel is in normal state */
        pci_channel_io_normal = (__force pci_channel_state_t) 1,
 
@@ -785,7 +785,7 @@ enum pci_ers_result {
 struct pci_error_handlers {
        /* PCI bus error detected on this device */
        pci_ers_result_t (*error_detected)(struct pci_dev *dev,
-                                          enum pci_channel_state error);
+                                          pci_channel_state_t error);
 
        /* MMIO has been re-enabled, but not DMA */
        pci_ers_result_t (*mmio_enabled)(struct pci_dev *dev);