linux-pci.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH v2 0/3] pci: enforce usage of 'pci_channel_state_t'
@ 2020-07-02 16:26 Luc Van Oostenryck
  2020-07-02 16:26 ` [PATCH v2 1/3] pci: use 'pci_channel_state_t' instead of 'enum pci_channel_state' Luc Van Oostenryck
                   ` (3 more replies)
  0 siblings, 4 replies; 5+ messages in thread
From: Luc Van Oostenryck @ 2020-07-02 16:26 UTC (permalink / raw)
  To: Bjorn Helgaas; +Cc: linux-pci, linux-kernel, Luc Van Oostenryck

The definition of pci_channel_io_normal and friends is relatively
complicated and ugly:
	typedef unsigned int __bitwise pci_channel_state_t;
	enum pci_channel_state {
		pci_channel_io_normal = (__force pci_channel_state_t) 1,
		...
	};

This is clearly motivated by a desire to have some strong typing
for this constants but:
* in C enums are weakly typed (they're essentially the same as 'int')
* sparse only allow to define bitwise ints, not bitwise enums.

This series is a preparation step to introduce bitwise enums.
This would allow to define these constant without having to use
the force cast:
	enum __bitwise pci_channel_state {
		pci_channel_io_normal = 1,
		...
	};
or, equivalently:
	typedef enum __bitwise {
		pci_channel_io_normal = 1,
		...
	} pci_channel_state_t;


Note: the first patch is, I think, uncontroversial, the other ones
      less so but can be safely dropped.


Changes since v1:
* add missing conversion
* try to avoid using 'enum pci_channel_state' in include/linux/pci.h
* try to avoid using 'enum pci_channel_state' in the documentation


Luc Van Oostenryck (3):
  pci: use 'pci_channel_state_t' instead of 'enum pci_channel_state'
  pci: use anonymous 'enum' instead of 'enum pci_channel_state'
  pci: update to doc to use 'pci_channel_state_t'

 Documentation/PCI/pci-error-recovery.rst    | 8 ++++----
 arch/powerpc/kernel/eeh_driver.c            | 2 +-
 drivers/block/rsxx/core.c                   | 2 +-
 drivers/dma/ioat/init.c                     | 2 +-
 drivers/media/pci/ngene/ngene-cards.c       | 2 +-
 drivers/misc/genwqe/card_base.c             | 2 +-
 drivers/net/ethernet/intel/i40e/i40e_main.c | 2 +-
 drivers/net/ethernet/intel/ice/ice_main.c   | 2 +-
 drivers/net/ethernet/intel/ixgb/ixgb_main.c | 4 ++--
 drivers/net/ethernet/sfc/efx.c              | 2 +-
 drivers/net/ethernet/sfc/falcon/efx.c       | 2 +-
 drivers/pci/pci.h                           | 2 +-
 drivers/pci/pcie/err.c                      | 4 ++--
 drivers/pci/pcie/portdrv_pci.c              | 2 +-
 drivers/scsi/aacraid/linit.c                | 2 +-
 drivers/scsi/sym53c8xx_2/sym_glue.c         | 2 +-
 drivers/staging/qlge/qlge_main.c            | 2 +-
 include/linux/pci.h                         | 4 ++--
 18 files changed, 24 insertions(+), 24 deletions(-)

-- 
2.27.0


^ permalink raw reply	[flat|nested] 5+ messages in thread

* [PATCH v2 1/3] pci: use 'pci_channel_state_t' instead of 'enum pci_channel_state'
  2020-07-02 16:26 [PATCH v2 0/3] pci: enforce usage of 'pci_channel_state_t' Luc Van Oostenryck
@ 2020-07-02 16:26 ` Luc Van Oostenryck
  2020-07-02 16:26 ` [PATCH v2 2/3] pci: use anonymous 'enum' " Luc Van Oostenryck
                   ` (2 subsequent siblings)
  3 siblings, 0 replies; 5+ messages in thread
From: Luc Van Oostenryck @ 2020-07-02 16:26 UTC (permalink / raw)
  To: Bjorn Helgaas; +Cc: linux-pci, linux-kernel, Luc Van Oostenryck

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.

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

Note: Currently, from a typechecking point of view this patch change
      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.

Signed-off-by: Luc Van Oostenryck <luc.vanoostenryck@gmail.com>
---
 Documentation/PCI/pci-error-recovery.rst    | 4 ++--
 arch/powerpc/kernel/eeh_driver.c            | 2 +-
 drivers/block/rsxx/core.c                   | 2 +-
 drivers/dma/ioat/init.c                     | 2 +-
 drivers/media/pci/ngene/ngene-cards.c       | 2 +-
 drivers/misc/genwqe/card_base.c             | 2 +-
 drivers/net/ethernet/intel/i40e/i40e_main.c | 2 +-
 drivers/net/ethernet/intel/ice/ice_main.c   | 2 +-
 drivers/net/ethernet/intel/ixgb/ixgb_main.c | 4 ++--
 drivers/net/ethernet/sfc/efx.c              | 2 +-
 drivers/net/ethernet/sfc/falcon/efx.c       | 2 +-
 drivers/pci/pci.h                           | 2 +-
 drivers/pci/pcie/err.c                      | 4 ++--
 drivers/pci/pcie/portdrv_pci.c              | 2 +-
 drivers/scsi/aacraid/linit.c                | 2 +-
 drivers/scsi/sym53c8xx_2/sym_glue.c         | 2 +-
 drivers/staging/qlge/qlge_main.c            | 2 +-
 include/linux/pci.h                         | 2 +-
 18 files changed, 21 insertions(+), 21 deletions(-)

diff --git a/Documentation/PCI/pci-error-recovery.rst b/Documentation/PCI/pci-error-recovery.rst
index 13beee23cb04..c055deec8c56 100644
--- a/Documentation/PCI/pci-error-recovery.rst
+++ b/Documentation/PCI/pci-error-recovery.rst
@@ -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);
@@ -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
diff --git a/arch/powerpc/kernel/eeh_driver.c b/arch/powerpc/kernel/eeh_driver.c
index 7b048cee767c..ab8806d2e03e 100644
--- a/arch/powerpc/kernel/eeh_driver.c
+++ b/arch/powerpc/kernel/eeh_driver.c
@@ -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;
diff --git a/drivers/block/rsxx/core.c b/drivers/block/rsxx/core.c
index 10f6368117d8..34e937dd6bca 100644
--- a/drivers/block/rsxx/core.c
+++ b/drivers/block/rsxx/core.c
@@ -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;
 
diff --git a/drivers/dma/ioat/init.c b/drivers/dma/ioat/init.c
index 58d13564f88b..089893f2bbb8 100644
--- a/drivers/dma/ioat/init.c
+++ b/drivers/dma/ioat/init.c
@@ -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);
 
diff --git a/drivers/media/pci/ngene/ngene-cards.c b/drivers/media/pci/ngene/ngene-cards.c
index 6185806a00e0..8bfb3d8ea610 100644
--- a/drivers/media/pci/ngene/ngene-cards.c
+++ b/drivers/media/pci/ngene/ngene-cards.c
@@ -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)
diff --git a/drivers/misc/genwqe/card_base.c b/drivers/misc/genwqe/card_base.c
index 1dc6c7c5cbce..97b8ecc42383 100644
--- a/drivers/misc/genwqe/card_base.c
+++ b/drivers/misc/genwqe/card_base.c
@@ -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;
 
diff --git a/drivers/net/ethernet/intel/i40e/i40e_main.c b/drivers/net/ethernet/intel/i40e/i40e_main.c
index 5d807c8004f8..f0de2d1842b4 100644
--- a/drivers/net/ethernet/intel/i40e/i40e_main.c
+++ b/drivers/net/ethernet/intel/i40e/i40e_main.c
@@ -15465,7 +15465,7 @@ static void i40e_remove(struct pci_dev *pdev)
  * 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);
 
diff --git a/drivers/net/ethernet/intel/ice/ice_main.c b/drivers/net/ethernet/intel/ice/ice_main.c
index 082825e3cb39..4dd9226a12df 100644
--- a/drivers/net/ethernet/intel/ice/ice_main.c
+++ b/drivers/net/ethernet/intel/ice/ice_main.c
@@ -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);
 
diff --git a/drivers/net/ethernet/intel/ixgb/ixgb_main.c b/drivers/net/ethernet/intel/ixgb/ixgb_main.c
index b64e91ea3465..00db4b5863b1 100644
--- a/drivers/net/ethernet/intel/ixgb/ixgb_main.c
+++ b/drivers/net/ethernet/intel/ixgb/ixgb_main.c
@@ -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);
diff --git a/drivers/net/ethernet/sfc/efx.c b/drivers/net/ethernet/sfc/efx.c
index 256807c28ff7..ed627aff7b36 100644
--- a/drivers/net/ethernet/sfc/efx.c
+++ b/drivers/net/ethernet/sfc/efx.c
@@ -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);
diff --git a/drivers/net/ethernet/sfc/falcon/efx.c b/drivers/net/ethernet/sfc/falcon/efx.c
index 42bcd34fc508..f8979991970e 100644
--- a/drivers/net/ethernet/sfc/falcon/efx.c
+++ b/drivers/net/ethernet/sfc/falcon/efx.c
@@ -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);
diff --git a/drivers/pci/pci.h b/drivers/pci/pci.h
index 6d3f75867106..c6c0c455f59f 100644
--- a/drivers/pci/pci.h
+++ b/drivers/pci/pci.h
@@ -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);
diff --git a/drivers/pci/pcie/err.c b/drivers/pci/pcie/err.c
index 14bb8f54723e..467686ee2d8b 100644
--- a/drivers/pci/pcie/err.c
+++ b/drivers/pci/pcie/err.c
@@ -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 @@ static int report_resume(struct pci_dev *dev, void *data)
 }
 
 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;
diff --git a/drivers/pci/pcie/portdrv_pci.c b/drivers/pci/pcie/portdrv_pci.c
index 3acf151ae015..3a3ce40ae1ab 100644
--- a/drivers/pci/pcie/portdrv_pci.c
+++ b/drivers/pci/pcie/portdrv_pci.c
@@ -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;
diff --git a/drivers/scsi/aacraid/linit.c b/drivers/scsi/aacraid/linit.c
index a308e86a97f1..37f65602b0ec 100644
--- a/drivers/scsi/aacraid/linit.c
+++ b/drivers/scsi/aacraid/linit.c
@@ -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);
diff --git a/drivers/scsi/sym53c8xx_2/sym_glue.c b/drivers/scsi/sym53c8xx_2/sym_glue.c
index 2ca018ce796f..f455243bdb9b 100644
--- a/drivers/scsi/sym53c8xx_2/sym_glue.c
+++ b/drivers/scsi/sym53c8xx_2/sym_glue.c
@@ -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) {
diff --git a/drivers/staging/qlge/qlge_main.c b/drivers/staging/qlge/qlge_main.c
index 402edaeffe12..ac30aefe49a1 100644
--- a/drivers/staging/qlge/qlge_main.c
+++ b/drivers/staging/qlge/qlge_main.c
@@ -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);
diff --git a/include/linux/pci.h b/include/linux/pci.h
index c79d83304e52..7ee85e89e8ed 100644
--- a/include/linux/pci.h
+++ b/include/linux/pci.h
@@ -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);
-- 
2.27.0


^ permalink raw reply related	[flat|nested] 5+ messages in thread

* [PATCH v2 2/3] pci: use anonymous 'enum' instead of 'enum pci_channel_state'
  2020-07-02 16:26 [PATCH v2 0/3] pci: enforce usage of 'pci_channel_state_t' Luc Van Oostenryck
  2020-07-02 16:26 ` [PATCH v2 1/3] pci: use 'pci_channel_state_t' instead of 'enum pci_channel_state' Luc Van Oostenryck
@ 2020-07-02 16:26 ` Luc Van Oostenryck
  2020-07-02 16:26 ` [PATCH v2 3/3] pci: update to doc to use 'pci_channel_state_t' Luc Van Oostenryck
  2020-07-07 22:17 ` [PATCH v2 0/3] pci: enforce usage of 'pci_channel_state_t' Bjorn Helgaas
  3 siblings, 0 replies; 5+ messages in thread
From: Luc Van Oostenryck @ 2020-07-02 16:26 UTC (permalink / raw)
  To: Bjorn Helgaas; +Cc: linux-pci, linux-kernel, Luc Van Oostenryck

For typechecking reasons, the typedef 'pci_channel_state_t'
should be used instead of the 'enum pci_channel_state'.

One simple way to enforce this is to remove the definition of
'enum pci_channel_state' and replace it by an anonymous 'enum'.

Signed-off-by: Luc Van Oostenryck <luc.vanoostenryck@gmail.com>
---
 include/linux/pci.h | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/include/linux/pci.h b/include/linux/pci.h
index 7ee85e89e8ed..adcee9e30bfa 100644
--- a/include/linux/pci.h
+++ b/include/linux/pci.h
@@ -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,
 
-- 
2.27.0


^ permalink raw reply related	[flat|nested] 5+ messages in thread

* [PATCH v2 3/3] pci: update to doc to use 'pci_channel_state_t'
  2020-07-02 16:26 [PATCH v2 0/3] pci: enforce usage of 'pci_channel_state_t' Luc Van Oostenryck
  2020-07-02 16:26 ` [PATCH v2 1/3] pci: use 'pci_channel_state_t' instead of 'enum pci_channel_state' Luc Van Oostenryck
  2020-07-02 16:26 ` [PATCH v2 2/3] pci: use anonymous 'enum' " Luc Van Oostenryck
@ 2020-07-02 16:26 ` Luc Van Oostenryck
  2020-07-07 22:17 ` [PATCH v2 0/3] pci: enforce usage of 'pci_channel_state_t' Bjorn Helgaas
  3 siblings, 0 replies; 5+ messages in thread
From: Luc Van Oostenryck @ 2020-07-02 16:26 UTC (permalink / raw)
  To: Bjorn Helgaas; +Cc: linux-pci, linux-kernel, Luc Van Oostenryck

The type used to describe the PCI channel state is a combination
of a bitwise typedef 'pci_channel_state_t' and an enumeration
of constant __force casted to this typedef: enum pci_channel_state.

It's a bit complex and quite ugly because:
* in C enums are weakly typed (they're essentially the same as 'int')
* sparse only allow to define bitwise ints, not bitwise enums.
But the idea is clearly to enforce typechecking and thus to
use 'pci_channel_state_t' everywhere.

So, update the documentation to use 'pci_chanell_state_t' and hide
'enum pci_channel_state' by showing a simplified but somehow equivalent
definition:
	typedef enum { ... } pci_channel_state_t;
which makes abstraction of the '__bitwise' which would otherwise
just bring unneeded complications here.

Signed-off-by: Luc Van Oostenryck <luc.vanoostenryck@gmail.com>
---
 Documentation/PCI/pci-error-recovery.rst | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/Documentation/PCI/pci-error-recovery.rst b/Documentation/PCI/pci-error-recovery.rst
index c055deec8c56..ccd713423133 100644
--- a/Documentation/PCI/pci-error-recovery.rst
+++ b/Documentation/PCI/pci-error-recovery.rst
@@ -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::
 
-- 
2.27.0


^ permalink raw reply related	[flat|nested] 5+ messages in thread

* Re: [PATCH v2 0/3] pci: enforce usage of 'pci_channel_state_t'
  2020-07-02 16:26 [PATCH v2 0/3] pci: enforce usage of 'pci_channel_state_t' Luc Van Oostenryck
                   ` (2 preceding siblings ...)
  2020-07-02 16:26 ` [PATCH v2 3/3] pci: update to doc to use 'pci_channel_state_t' Luc Van Oostenryck
@ 2020-07-07 22:17 ` Bjorn Helgaas
  3 siblings, 0 replies; 5+ messages in thread
From: Bjorn Helgaas @ 2020-07-07 22:17 UTC (permalink / raw)
  To: Luc Van Oostenryck; +Cc: Bjorn Helgaas, linux-pci, linux-kernel

On Thu, Jul 02, 2020 at 06:26:48PM +0200, Luc Van Oostenryck wrote:
> The definition of pci_channel_io_normal and friends is relatively
> complicated and ugly:
> 	typedef unsigned int __bitwise pci_channel_state_t;
> 	enum pci_channel_state {
> 		pci_channel_io_normal = (__force pci_channel_state_t) 1,
> 		...
> 	};
> 
> This is clearly motivated by a desire to have some strong typing
> for this constants but:
> * in C enums are weakly typed (they're essentially the same as 'int')
> * sparse only allow to define bitwise ints, not bitwise enums.
> 
> This series is a preparation step to introduce bitwise enums.
> This would allow to define these constant without having to use
> the force cast:
> 	enum __bitwise pci_channel_state {
> 		pci_channel_io_normal = 1,
> 		...
> 	};
> or, equivalently:
> 	typedef enum __bitwise {
> 		pci_channel_io_normal = 1,
> 		...
> 	} pci_channel_state_t;
> 
> 
> Note: the first patch is, I think, uncontroversial, the other ones
>       less so but can be safely dropped.
> 
> 
> Changes since v1:
> * add missing conversion
> * try to avoid using 'enum pci_channel_state' in include/linux/pci.h
> * try to avoid using 'enum pci_channel_state' in the documentation
> 
> 
> Luc Van Oostenryck (3):
>   pci: use 'pci_channel_state_t' instead of 'enum pci_channel_state'
>   pci: use anonymous 'enum' instead of 'enum pci_channel_state'
>   pci: update to doc to use 'pci_channel_state_t'
> 
>  Documentation/PCI/pci-error-recovery.rst    | 8 ++++----
>  arch/powerpc/kernel/eeh_driver.c            | 2 +-
>  drivers/block/rsxx/core.c                   | 2 +-
>  drivers/dma/ioat/init.c                     | 2 +-
>  drivers/media/pci/ngene/ngene-cards.c       | 2 +-
>  drivers/misc/genwqe/card_base.c             | 2 +-
>  drivers/net/ethernet/intel/i40e/i40e_main.c | 2 +-
>  drivers/net/ethernet/intel/ice/ice_main.c   | 2 +-
>  drivers/net/ethernet/intel/ixgb/ixgb_main.c | 4 ++--
>  drivers/net/ethernet/sfc/efx.c              | 2 +-
>  drivers/net/ethernet/sfc/falcon/efx.c       | 2 +-
>  drivers/pci/pci.h                           | 2 +-
>  drivers/pci/pcie/err.c                      | 4 ++--
>  drivers/pci/pcie/portdrv_pci.c              | 2 +-
>  drivers/scsi/aacraid/linit.c                | 2 +-
>  drivers/scsi/sym53c8xx_2/sym_glue.c         | 2 +-
>  drivers/staging/qlge/qlge_main.c            | 2 +-
>  include/linux/pci.h                         | 4 ++--
>  18 files changed, 24 insertions(+), 24 deletions(-)

Since it's all basically "use pci_channel_state_t instead of enum
pci_channel_state", I squashed these all together and applied the
result to pci/error for v5.8, thanks!

^ permalink raw reply	[flat|nested] 5+ messages in thread

end of thread, other threads:[~2020-07-07 22:17 UTC | newest]

Thread overview: 5+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2020-07-02 16:26 [PATCH v2 0/3] pci: enforce usage of 'pci_channel_state_t' Luc Van Oostenryck
2020-07-02 16:26 ` [PATCH v2 1/3] pci: use 'pci_channel_state_t' instead of 'enum pci_channel_state' Luc Van Oostenryck
2020-07-02 16:26 ` [PATCH v2 2/3] pci: use anonymous 'enum' " Luc Van Oostenryck
2020-07-02 16:26 ` [PATCH v2 3/3] pci: update to doc to use 'pci_channel_state_t' Luc Van Oostenryck
2020-07-07 22:17 ` [PATCH v2 0/3] pci: enforce usage of 'pci_channel_state_t' Bjorn Helgaas

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).