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: Luc Van Oostenryck <luc.vanoostenryck@gmail.com> Signed-off-by: Bjorn Helgaas <bhelgaas@google.com>
This commit is contained in:
Родитель
b3a9e3b962
Коммит
16d79cd4e2
|
@ -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
|
||||||
|
|
|
@ -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;
|
||||||
|
|
|
@ -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;
|
||||||
|
|
||||||
|
|
|
@ -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);
|
||||||
|
|
||||||
|
|
|
@ -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)
|
||||||
|
|
|
@ -1240,7 +1240,7 @@ static void genwqe_remove(struct pci_dev *pci_dev)
|
||||||
* error is detected.
|
* error is detected.
|
||||||
*/
|
*/
|
||||||
static pci_ers_result_t genwqe_err_error_detected(struct pci_dev *pci_dev,
|
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;
|
struct genwqe_dev *cd;
|
||||||
|
|
||||||
|
|
|
@ -15465,7 +15465,7 @@ unmap:
|
||||||
* remediation.
|
* remediation.
|
||||||
**/
|
**/
|
||||||
static pci_ers_result_t i40e_pci_error_detected(struct pci_dev *pdev,
|
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);
|
struct i40e_pf *pf = pci_get_drvdata(pdev);
|
||||||
|
|
||||||
|
|
|
@ -3586,7 +3586,7 @@ static void ice_remove(struct pci_dev *pdev)
|
||||||
* is in progress. Allows the driver to gracefully prepare/handle PCI errors.
|
* is in progress. Allows the driver to gracefully prepare/handle PCI errors.
|
||||||
*/
|
*/
|
||||||
static pci_ers_result_t
|
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);
|
struct ice_pf *pf = pci_get_drvdata(pdev);
|
||||||
|
|
||||||
|
|
|
@ -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 void ixgb_restore_vlan(struct ixgb_adapter *adapter);
|
||||||
|
|
||||||
static pci_ers_result_t ixgb_io_error_detected (struct pci_dev *pdev,
|
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 pci_ers_result_t ixgb_io_slot_reset (struct pci_dev *pdev);
|
||||||
static void ixgb_io_resume (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.
|
* a PCI bus error is detected.
|
||||||
*/
|
*/
|
||||||
static pci_ers_result_t ixgb_io_error_detected(struct pci_dev *pdev,
|
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 net_device *netdev = pci_get_drvdata(pdev);
|
||||||
struct ixgb_adapter *adapter = netdev_priv(netdev);
|
struct ixgb_adapter *adapter = netdev_priv(netdev);
|
||||||
|
|
|
@ -1519,7 +1519,7 @@ static const struct dev_pm_ops efx_pm_ops = {
|
||||||
* Stop the software path and request a slot reset.
|
* Stop the software path and request a slot reset.
|
||||||
*/
|
*/
|
||||||
static pci_ers_result_t efx_io_error_detected(struct pci_dev *pdev,
|
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;
|
pci_ers_result_t status = PCI_ERS_RESULT_RECOVERED;
|
||||||
struct efx_nic *efx = pci_get_drvdata(pdev);
|
struct efx_nic *efx = pci_get_drvdata(pdev);
|
||||||
|
|
|
@ -3118,7 +3118,7 @@ static const struct dev_pm_ops ef4_pm_ops = {
|
||||||
* Stop the software path and request a slot reset.
|
* Stop the software path and request a slot reset.
|
||||||
*/
|
*/
|
||||||
static pci_ers_result_t ef4_io_error_detected(struct pci_dev *pdev,
|
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;
|
pci_ers_result_t status = PCI_ERS_RESULT_RECOVERED;
|
||||||
struct ef4_nic *efx = pci_get_drvdata(pdev);
|
struct ef4_nic *efx = pci_get_drvdata(pdev);
|
||||||
|
|
|
@ -555,7 +555,7 @@ static inline int pci_dev_specific_disable_acs_redir(struct pci_dev *dev)
|
||||||
|
|
||||||
/* PCI error reporting and recovery */
|
/* PCI error reporting and recovery */
|
||||||
pci_ers_result_t pcie_do_recovery(struct pci_dev *dev,
|
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 (*reset_link)(struct pci_dev *pdev));
|
||||||
|
|
||||||
bool pcie_wait_for_link(struct pci_dev *pdev, bool active);
|
bool pcie_wait_for_link(struct pci_dev *pdev, bool active);
|
||||||
|
|
|
@ -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,
|
static int report_error_detected(struct pci_dev *dev,
|
||||||
enum pci_channel_state state,
|
pci_channel_state_t state,
|
||||||
enum pci_ers_result *result)
|
enum pci_ers_result *result)
|
||||||
{
|
{
|
||||||
pci_ers_result_t vote;
|
pci_ers_result_t vote;
|
||||||
|
@ -147,7 +147,7 @@ out:
|
||||||
}
|
}
|
||||||
|
|
||||||
pci_ers_result_t pcie_do_recovery(struct pci_dev *dev,
|
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 (*reset_link)(struct pci_dev *pdev))
|
||||||
{
|
{
|
||||||
pci_ers_result_t status = PCI_ERS_RESULT_CAN_RECOVER;
|
pci_ers_result_t status = PCI_ERS_RESULT_CAN_RECOVER;
|
||||||
|
|
|
@ -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,
|
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. */
|
/* Root Port has no impact. Always recovers. */
|
||||||
return PCI_ERS_RESULT_CAN_RECOVER;
|
return PCI_ERS_RESULT_CAN_RECOVER;
|
||||||
|
|
|
@ -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,
|
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 Scsi_Host *shost = pci_get_drvdata(pdev);
|
||||||
struct aac_dev *aac = shost_priv(shost);
|
struct aac_dev *aac = shost_priv(shost);
|
||||||
|
|
|
@ -1743,7 +1743,7 @@ static void sym2_remove(struct pci_dev *pdev)
|
||||||
* @state: current state of the PCI slot
|
* @state: current state of the PCI slot
|
||||||
*/
|
*/
|
||||||
static pci_ers_result_t sym2_io_error_detected(struct pci_dev *pdev,
|
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 slot is permanently frozen, turn everything off */
|
||||||
if (state == pci_channel_io_perm_failure) {
|
if (state == pci_channel_io_perm_failure) {
|
||||||
|
|
|
@ -4678,7 +4678,7 @@ static void ql_eeh_close(struct net_device *ndev)
|
||||||
* a PCI bus error is detected.
|
* a PCI bus error is detected.
|
||||||
*/
|
*/
|
||||||
static pci_ers_result_t qlge_io_error_detected(struct pci_dev *pdev,
|
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 net_device *ndev = pci_get_drvdata(pdev);
|
||||||
struct ql_adapter *qdev = netdev_priv(ndev);
|
struct ql_adapter *qdev = netdev_priv(ndev);
|
||||||
|
|
|
@ -179,7 +179,7 @@ static inline const char *pci_power_name(pci_power_t state)
|
||||||
*/
|
*/
|
||||||
typedef unsigned int __bitwise pci_channel_state_t;
|
typedef unsigned int __bitwise pci_channel_state_t;
|
||||||
|
|
||||||
enum pci_channel_state {
|
enum {
|
||||||
/* I/O channel is in normal state */
|
/* I/O channel is in normal state */
|
||||||
pci_channel_io_normal = (__force pci_channel_state_t) 1,
|
pci_channel_io_normal = (__force pci_channel_state_t) 1,
|
||||||
|
|
||||||
|
@ -785,7 +785,7 @@ enum pci_ers_result {
|
||||||
struct pci_error_handlers {
|
struct pci_error_handlers {
|
||||||
/* PCI bus error detected on this device */
|
/* PCI bus error detected on this device */
|
||||||
pci_ers_result_t (*error_detected)(struct pci_dev *dev,
|
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 */
|
/* MMIO has been re-enabled, but not DMA */
|
||||||
pci_ers_result_t (*mmio_enabled)(struct pci_dev *dev);
|
pci_ers_result_t (*mmio_enabled)(struct pci_dev *dev);
|
||||||
|
|
Загрузка…
Ссылка в новой задаче