Commit 16d79cd4 authored by Luc Van Oostenryck's avatar Luc Van Oostenryck Committed by Bjorn Helgaas
Browse files

PCI: Use 'pci_channel_state_t' instead of 'enum pci_channel_state'

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: default avatarLuc Van Oostenryck <luc.vanoostenryck@gmail.com>
Signed-off-by: default avatarBjorn Helgaas <bhelgaas@google.com>
parent b3a9e3b9
Loading
Loading
Loading
Loading
+4 −4
Original line number Original line Diff line number Diff line
@@ -79,7 +79,7 @@ This structure has the form::


	struct pci_error_handlers
	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 (*mmio_enabled)(struct pci_dev *dev);
		int (*slot_reset)(struct pci_dev *dev);
		int (*slot_reset)(struct pci_dev *dev);
		void (*resume)(struct pci_dev *dev);
		void (*resume)(struct pci_dev *dev);
@@ -87,11 +87,11 @@ This structure has the form::


The possible channel states are::
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_normal,  /* I/O channel is in normal state */
		pci_channel_io_frozen,  /* I/O to channel is blocked */
		pci_channel_io_frozen,  /* I/O to channel is blocked */
		pci_channel_io_perm_failure, /* PCI card is dead */
		pci_channel_io_perm_failure, /* PCI card is dead */
	};
	} pci_channel_state_t;


Possible return values are::
Possible return values are::


@@ -348,7 +348,7 @@ STEP 6: Permanent Failure
-------------------------
-------------------------
A "permanent failure" has occurred, and the platform cannot recover
A "permanent failure" has occurred, and the platform cannot recover
the device.  The platform will call error_detected() with a
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
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
cancel all pending I/O, refuse all new I/O, returning -EIO to
+1 −1
Original line number Original line Diff line number Diff line
@@ -214,7 +214,7 @@ static void eeh_dev_save_state(struct eeh_dev *edev, void *userdata)
	pci_save_state(pdev);
	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_pe *pe;
	struct eeh_dev *edev, *tmp;
	struct eeh_dev *edev, *tmp;
+1 −1
Original line number Original line Diff line number Diff line
@@ -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,
static pci_ers_result_t rsxx_error_detected(struct pci_dev *dev,
					    enum pci_channel_state error)
					    pci_channel_state_t error)
{
{
	int st;
	int st;


+1 −1
Original line number Original line Diff line number Diff line
@@ -1267,7 +1267,7 @@ static void ioat_resume(struct ioatdma_device *ioat_dma)
#define DRV_NAME "ioatdma"
#define DRV_NAME "ioatdma"


static pci_ers_result_t ioat_pcie_error_detected(struct pci_dev *pdev,
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);
	dev_dbg(&pdev->dev, "%s: PCIe AER error %d\n", DRV_NAME, error);


+1 −1
Original line number Original line Diff line number Diff line
@@ -1186,7 +1186,7 @@ MODULE_DEVICE_TABLE(pci, ngene_id_tbl);
/****************************************************************************/
/****************************************************************************/


static pci_ers_result_t ngene_error_detected(struct pci_dev *dev,
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");
	dev_err(&dev->dev, "PCI error\n");
	if (state == pci_channel_io_perm_failure)
	if (state == pci_channel_io_perm_failure)
Loading