Re: [PATCH v3 7/7] PCI: Change the type of probe argument in reset functions

From: Alex Williamson
Date: Wed May 26 2021 - 15:52:46 EST


On Wed, 26 May 2021 15:44:03 +0530
Amey Narkhede <ameynarkhede03@xxxxxxxxx> wrote:

> Introduce a new enum pci_reset_mode_t to make the context
> of probe argument in reset functions clear and the code
> easier to read.
> Change the type of probe argument in functions which implement
> reset methods from int to pci_reset_mode_t to make the intent clear.
> Add a new line in return statement of pci_reset_bus_function.
>
> Suggested-by: Alex Williamson <alex.williamson@xxxxxxxxxx>
> Suggested-by: Krzysztof Wilczyński <kw@xxxxxxxxx>
> Signed-off-by: Amey Narkhede <ameynarkhede03@xxxxxxxxx>
> ---
> drivers/crypto/cavium/nitrox/nitrox_main.c | 2 +-
> .../ethernet/cavium/liquidio/lio_vf_main.c | 2 +-
> drivers/pci/hotplug/pciehp.h | 2 +-
> drivers/pci/hotplug/pciehp_hpc.c | 7 +-
> drivers/pci/pci.c | 85 +++++++++++++------
> drivers/pci/pci.h | 8 +-
> drivers/pci/pcie/aer.c | 2 +-
> drivers/pci/quirks.c | 46 +++++++---
> include/linux/pci.h | 8 +-
> include/linux/pci_hotplug.h | 2 +-
> 10 files changed, 112 insertions(+), 52 deletions(-)
>
> diff --git a/drivers/crypto/cavium/nitrox/nitrox_main.c b/drivers/crypto/cavium/nitrox/nitrox_main.c
> index 15d6c8452..f97fa8e99 100644
> --- a/drivers/crypto/cavium/nitrox/nitrox_main.c
> +++ b/drivers/crypto/cavium/nitrox/nitrox_main.c
> @@ -306,7 +306,7 @@ static int nitrox_device_flr(struct pci_dev *pdev)
> return -ENOMEM;
> }
>
> - pcie_reset_flr(pdev, 0);
> + pcie_reset_flr(pdev, PCI_RESET_DO_RESET);
>
> pci_restore_state(pdev);
>
> diff --git a/drivers/net/ethernet/cavium/liquidio/lio_vf_main.c b/drivers/net/ethernet/cavium/liquidio/lio_vf_main.c
> index 336d149ee..6e666be69 100644
> --- a/drivers/net/ethernet/cavium/liquidio/lio_vf_main.c
> +++ b/drivers/net/ethernet/cavium/liquidio/lio_vf_main.c
> @@ -526,7 +526,7 @@ static void octeon_destroy_resources(struct octeon_device *oct)
> oct->irq_name_storage = NULL;
> }
> /* Soft reset the octeon device before exiting */
> - if (!pcie_reset_flr(oct->pci_dev, 1))
> + if (!pcie_reset_flr(oct->pci_dev, PCI_RESET_PROBE))
> octeon_pci_flr(oct);
> else
> cn23xx_vf_ask_pf_to_do_flr(oct);
> diff --git a/drivers/pci/hotplug/pciehp.h b/drivers/pci/hotplug/pciehp.h
> index 4fd200d8b..7cbc30dd3 100644
> --- a/drivers/pci/hotplug/pciehp.h
> +++ b/drivers/pci/hotplug/pciehp.h
> @@ -181,7 +181,7 @@ void pciehp_release_ctrl(struct controller *ctrl);
>
> int pciehp_sysfs_enable_slot(struct hotplug_slot *hotplug_slot);
> int pciehp_sysfs_disable_slot(struct hotplug_slot *hotplug_slot);
> -int pciehp_reset_slot(struct hotplug_slot *hotplug_slot, int probe);
> +int pciehp_reset_slot(struct hotplug_slot *hotplug_slot, pci_reset_mode_t probe);
> int pciehp_get_attention_status(struct hotplug_slot *hotplug_slot, u8 *status);
> int pciehp_set_raw_indicator_status(struct hotplug_slot *h_slot, u8 status);
> int pciehp_get_raw_indicator_status(struct hotplug_slot *h_slot, u8 *status);
> diff --git a/drivers/pci/hotplug/pciehp_hpc.c b/drivers/pci/hotplug/pciehp_hpc.c
> index fb3840e22..31f75f5f2 100644
> --- a/drivers/pci/hotplug/pciehp_hpc.c
> +++ b/drivers/pci/hotplug/pciehp_hpc.c
> @@ -834,14 +834,17 @@ void pcie_disable_interrupt(struct controller *ctrl)
> * momentarily, if we see that they could interfere. Also, clear any spurious
> * events after.
> */
> -int pciehp_reset_slot(struct hotplug_slot *hotplug_slot, int probe)
> +int pciehp_reset_slot(struct hotplug_slot *hotplug_slot, enum pci_reset_mode probe)

This should use your typedef, pci_reset_mode_t. Is "probe" still the
best name for this arg? The enum name suggests a "mode", the MAX entry
suggests an "action", "probe" is but one mode/action.

> {
> struct controller *ctrl = to_ctrl(hotplug_slot);
> struct pci_dev *pdev = ctrl_dev(ctrl);
> u16 stat_mask = 0, ctrl_mask = 0;
> int rc;
>
> - if (probe)
> + if (probe >= PCI_RESET_ACTION_MAX)
> + return -EINVAL;
> +
> + if (probe == PCI_RESET_PROBE)
> return 0;
>
> down_write(&ctrl->reset_lock);
> diff --git a/drivers/pci/pci.c b/drivers/pci/pci.c
> index 1d859b100..e731dab9f 100644
> --- a/drivers/pci/pci.c
> +++ b/drivers/pci/pci.c
> @@ -4616,10 +4616,13 @@ EXPORT_SYMBOL_GPL(pcie_flr);
> *
> * Initiate a function level reset on @dev.
> */
> -int pcie_reset_flr(struct pci_dev *dev, int probe)
> +int pcie_reset_flr(struct pci_dev *dev, pci_reset_mode_t probe)
> {
> u32 cap;
>
> + if (probe >= PCI_RESET_ACTION_MAX)
> + return -EINVAL;
> +
> if (dev->dev_flags & PCI_DEV_FLAGS_NO_FLR_RESET)
> return -ENOTTY;
>
> @@ -4627,18 +4630,21 @@ int pcie_reset_flr(struct pci_dev *dev, int probe)
> if (!(cap & PCI_EXP_DEVCAP_FLR))
> return -ENOTTY;
>
> - if (probe)
> + if (probe == PCI_RESET_PROBE)
> return 0;
>
> return pcie_flr(dev);
> }
> EXPORT_SYMBOL_GPL(pcie_reset_flr);
>
> -static int pci_af_flr(struct pci_dev *dev, int probe)
> +static int pci_af_flr(struct pci_dev *dev, pci_reset_mode_t probe)
> {
> int pos;
> u8 cap;
>
> + if (probe >= PCI_RESET_ACTION_MAX)
> + return -EINVAL;
> +
> pos = pci_find_capability(dev, PCI_CAP_ID_AF);
> if (!pos)
> return -ENOTTY;
> @@ -4650,7 +4656,7 @@ static int pci_af_flr(struct pci_dev *dev, int probe)
> if (!(cap & PCI_AF_CAP_TP) || !(cap & PCI_AF_CAP_FLR))
> return -ENOTTY;
>
> - if (probe)
> + if (probe == PCI_RESET_PROBE)
> return 0;
>
> /*
> @@ -4693,10 +4699,13 @@ static int pci_af_flr(struct pci_dev *dev, int probe)
> * by default (i.e. unless the @dev's d3hot_delay field has a different value).
> * Moreover, only devices in D0 can be reset by this function.
> */
> -static int pci_pm_reset(struct pci_dev *dev, int probe)
> +static int pci_pm_reset(struct pci_dev *dev, pci_reset_mode_t probe)
> {
> u16 csr;
>
> + if (probe >= PCI_RESET_ACTION_MAX)
> + return -EINVAL;
> +
> if (!dev->pm_cap || dev->dev_flags & PCI_DEV_FLAGS_NO_PM_RESET)
> return -ENOTTY;
>
> @@ -4704,7 +4713,7 @@ static int pci_pm_reset(struct pci_dev *dev, int probe)
> if (csr & PCI_PM_CTRL_NO_SOFT_RESET)
> return -ENOTTY;
>
> - if (probe)
> + if (probe == PCI_RESET_PROBE)
> return 0;
>
> if (dev->current_state != PCI_D0)
> @@ -4953,10 +4962,13 @@ int pci_bridge_secondary_bus_reset(struct pci_dev *dev)
> }
> EXPORT_SYMBOL_GPL(pci_bridge_secondary_bus_reset);
>
> -static int pci_parent_bus_reset(struct pci_dev *dev, int probe)
> +static int pci_parent_bus_reset(struct pci_dev *dev, pci_reset_mode_t probe)
> {
> struct pci_dev *pdev;
>
> + if (probe >= PCI_RESET_ACTION_MAX)
> + return -EINVAL;
> +
> if (pci_is_root_bus(dev->bus) || dev->subordinate ||
> !dev->bus->self || dev->dev_flags & PCI_DEV_FLAGS_NO_BUS_RESET)
> return -ENOTTY;
> @@ -4965,16 +4977,19 @@ static int pci_parent_bus_reset(struct pci_dev *dev, int probe)
> if (pdev != dev)
> return -ENOTTY;
>
> - if (probe)
> + if (probe == PCI_RESET_PROBE)
> return 0;
>
> return pci_bridge_secondary_bus_reset(dev->bus->self);
> }
>
> -static int pci_reset_hotplug_slot(struct hotplug_slot *hotplug, int probe)
> +static int pci_reset_hotplug_slot(struct hotplug_slot *hotplug, pci_reset_mode_t probe)
> {
> int rc = -ENOTTY;
>
> + if (probe >= PCI_RESET_ACTION_MAX)
> + return -EINVAL;
> +
> if (!hotplug || !try_module_get(hotplug->owner))
> return rc;
>
> @@ -4986,8 +5001,11 @@ static int pci_reset_hotplug_slot(struct hotplug_slot *hotplug, int probe)
> return rc;
> }
>
> -static int pci_dev_reset_slot_function(struct pci_dev *dev, int probe)
> +static int pci_dev_reset_slot_function(struct pci_dev *dev, pci_reset_mode_t probe)
> {
> + if (probe >= PCI_RESET_ACTION_MAX)
> + return -EINVAL;
> +
> if (dev->multifunction || dev->subordinate || !dev->slot ||
> dev->dev_flags & PCI_DEV_FLAGS_NO_BUS_RESET)
> return -ENOTTY;
> @@ -4995,12 +5013,16 @@ static int pci_dev_reset_slot_function(struct pci_dev *dev, int probe)
> return pci_reset_hotplug_slot(dev->slot->hotplug, probe);
> }
>
> -static int pci_reset_bus_function(struct pci_dev *dev, int probe)
> +static int pci_reset_bus_function(struct pci_dev *dev, pci_reset_mode_t probe)
> {
> int rc = pci_dev_reset_slot_function(dev, probe);
>
> + if (probe >= PCI_RESET_ACTION_MAX)
> + return -EINVAL;
> +
> if (rc != -ENOTTY)
> return rc;
> +
> return pci_parent_bus_reset(dev, probe);
> }
>
> @@ -5081,17 +5103,20 @@ static void pci_dev_restore(struct pci_dev *dev)
> * @dev: device to reset
> * @probe: check if _RST method is included in the acpi_device context.
> */
> -static int pci_dev_acpi_reset(struct pci_dev *dev, int probe)
> +static int pci_dev_acpi_reset(struct pci_dev *dev, pci_reset_mode_t probe)
> {
> #ifdef CONFIG_ACPI
> acpi_handle handle = ACPI_HANDLE(&dev->dev);
>
> + if (probe >= PCI_RESET_ACTION_MAX)
> + return -EINVAL;
> +
> /* Return -ENOTTY if _RST method is not included in the dev context */
> if (!handle || !acpi_has_method(handle, "_RST"))
> return -ENOTTY;
>
> /* Return 0 for probe phase indicating that we can reset this device */
> - if (probe)
> + if (probe == PCI_RESET_PROBE)
> return 0;
>
> /* Invoke _RST() method to perform a function level reset */
> @@ -5157,7 +5182,7 @@ int __pci_reset_function_locked(struct pci_dev *dev)
> * other error, we're also finished: this indicates that further
> * reset mechanisms might be broken on the device.
> */
> - rc = pci_reset_fn_methods[i].reset_fn(dev, 0);
> + rc = pci_reset_fn_methods[i].reset_fn(dev, PCI_RESET_DO_RESET);
> if (rc != -ENOTTY)
> return rc;
> break;
> @@ -5193,7 +5218,7 @@ void pci_init_reset_methods(struct pci_dev *dev)
> might_sleep();
>
> for (i = 0; i < PCI_RESET_METHODS_NUM; i++) {
> - rc = pci_reset_fn_methods[i].reset_fn(dev, 1);
> + rc = pci_reset_fn_methods[i].reset_fn(dev, PCI_RESET_PROBE);
> if (!rc)
> reset_methods[i] = prio--;
> else if (rc != -ENOTTY)
> @@ -5509,21 +5534,24 @@ static void pci_slot_restore_locked(struct pci_slot *slot)
> }
> }
>
> -static int pci_slot_reset(struct pci_slot *slot, int probe)
> +static int pci_slot_reset(struct pci_slot *slot, pci_reset_mode_t probe)
> {
> int rc;
>
> + if (probe >= PCI_RESET_ACTION_MAX)
> + return -EINVAL;
> +
> if (!slot || !pci_slot_resetable(slot))
> return -ENOTTY;
>
> - if (!probe)
> + if (probe == PCI_RESET_DO_RESET)
> pci_slot_lock(slot);
>
> might_sleep();
>
> rc = pci_reset_hotplug_slot(slot->hotplug, probe);
>
> - if (!probe)
> + if (probe == PCI_RESET_DO_RESET)
> pci_slot_unlock(slot);
>
> return rc;
> @@ -5537,7 +5565,7 @@ static int pci_slot_reset(struct pci_slot *slot, int probe)
> */
> int pci_probe_reset_slot(struct pci_slot *slot)
> {
> - return pci_slot_reset(slot, 1);
> + return pci_slot_reset(slot, PCI_RESET_PROBE);
> }
> EXPORT_SYMBOL_GPL(pci_probe_reset_slot);
>
> @@ -5560,14 +5588,14 @@ static int __pci_reset_slot(struct pci_slot *slot)
> {
> int rc;
>
> - rc = pci_slot_reset(slot, 1);
> + rc = pci_slot_reset(slot, PCI_RESET_PROBE);
> if (rc)
> return rc;
>
> if (pci_slot_trylock(slot)) {
> pci_slot_save_and_disable_locked(slot);
> might_sleep();
> - rc = pci_reset_hotplug_slot(slot->hotplug, 0);
> + rc = pci_reset_hotplug_slot(slot->hotplug, PCI_RESET_DO_RESET);
> pci_slot_restore_locked(slot);
> pci_slot_unlock(slot);
> } else
> @@ -5576,14 +5604,17 @@ static int __pci_reset_slot(struct pci_slot *slot)
> return rc;
> }
>
> -static int pci_bus_reset(struct pci_bus *bus, int probe)
> +static int pci_bus_reset(struct pci_bus *bus, pci_reset_mode_t probe)
> {
> int ret;
>
> + if (probe >= PCI_RESET_ACTION_MAX)
> + return -EINVAL;
> +
> if (!bus->self || !pci_bus_resetable(bus))
> return -ENOTTY;
>
> - if (probe)
> + if (probe == PCI_RESET_PROBE)
> return 0;
>
> pci_bus_lock(bus);
> @@ -5622,14 +5653,14 @@ int pci_bus_error_reset(struct pci_dev *bridge)
> goto bus_reset;
>
> list_for_each_entry(slot, &bus->slots, list)
> - if (pci_slot_reset(slot, 0))
> + if (pci_slot_reset(slot, PCI_RESET_DO_RESET))
> goto bus_reset;
>
> mutex_unlock(&pci_slot_mutex);
> return 0;
> bus_reset:
> mutex_unlock(&pci_slot_mutex);
> - return pci_bus_reset(bridge->subordinate, 0);
> + return pci_bus_reset(bridge->subordinate, PCI_RESET_DO_RESET);
> }
>
> /**
> @@ -5640,7 +5671,7 @@ int pci_bus_error_reset(struct pci_dev *bridge)
> */
> int pci_probe_reset_bus(struct pci_bus *bus)
> {
> - return pci_bus_reset(bus, 1);
> + return pci_bus_reset(bus, PCI_RESET_PROBE);
> }
> EXPORT_SYMBOL_GPL(pci_probe_reset_bus);
>
> @@ -5654,7 +5685,7 @@ static int __pci_reset_bus(struct pci_bus *bus)
> {
> int rc;
>
> - rc = pci_bus_reset(bus, 1);
> + rc = pci_bus_reset(bus, PCI_RESET_PROBE);
> if (rc)
> return rc;
>
> diff --git a/drivers/pci/pci.h b/drivers/pci/pci.h
> index 1b3ba3116..f05db86af 100644
> --- a/drivers/pci/pci.h
> +++ b/drivers/pci/pci.h
> @@ -609,19 +609,19 @@ static inline int pci_enable_ptm(struct pci_dev *dev, u8 *granularity)
> struct pci_dev_reset_methods {
> u16 vendor;
> u16 device;
> - int (*reset)(struct pci_dev *dev, int probe);
> + int (*reset)(struct pci_dev *dev, pci_reset_mode_t probe);
> };
>
> struct pci_reset_fn_method {
> - int (*reset_fn)(struct pci_dev *, int probe);
> + int (*reset_fn)(struct pci_dev *, pci_reset_mode_t probe);
> char *name;
> };
>
> extern const struct pci_reset_fn_method pci_reset_fn_methods[];
> #ifdef CONFIG_PCI_QUIRKS
> -int pci_dev_specific_reset(struct pci_dev *dev, int probe);
> +int pci_dev_specific_reset(struct pci_dev *dev, pci_reset_mode_t probe);
> #else
> -static inline int pci_dev_specific_reset(struct pci_dev *dev, int probe)
> +static inline int pci_dev_specific_reset(struct pci_dev *dev, pci_reset_mode_t probe)
> {
> return -ENOTTY;
> }
> diff --git a/drivers/pci/pcie/aer.c b/drivers/pci/pcie/aer.c
> index f4e891bd5..1259f1cdb 100644
> --- a/drivers/pci/pcie/aer.c
> +++ b/drivers/pci/pcie/aer.c
> @@ -1405,7 +1405,7 @@ static pci_ers_result_t aer_root_reset(struct pci_dev *dev)
> }
>
> if (type == PCI_EXP_TYPE_RC_EC || type == PCI_EXP_TYPE_RC_END) {
> - rc = pcie_reset_flr(dev, 0);
> + rc = pcie_reset_flr(dev, PCI_RESET_DO_RESET);
> if (!rc)
> pci_info(dev, "has been reset\n");
> else
> diff --git a/drivers/pci/quirks.c b/drivers/pci/quirks.c
> index ceec67342..17ed9a9c8 100644
> --- a/drivers/pci/quirks.c
> +++ b/drivers/pci/quirks.c
> @@ -3693,8 +3693,11 @@ DECLARE_PCI_FIXUP_SUSPEND_LATE(PCI_VENDOR_ID_INTEL,
> * reset a single function if other methods (e.g. FLR, PM D0->D3) are
> * not available.
> */
> -static int reset_intel_82599_sfp_virtfn(struct pci_dev *dev, int probe)
> +static int reset_intel_82599_sfp_virtfn(struct pci_dev *dev, pci_reset_mode_t probe)
> {
> + if (probe >= PCI_RESET_ACTION_MAX)
> + return -EINVAL;
> +
> /*
> * http://www.intel.com/content/dam/doc/datasheet/82599-10-gbe-controller-datasheet.pdf
> *
> @@ -3703,7 +3706,7 @@ static int reset_intel_82599_sfp_virtfn(struct pci_dev *dev, int probe)
> * Thus we must call pcie_flr() directly without first checking if it is
> * supported.
> */
> - if (!probe)
> + if (probe == PCI_RESET_DO_RESET)
> pcie_flr(dev);
> return 0;
> }
> @@ -3715,13 +3718,16 @@ static int reset_intel_82599_sfp_virtfn(struct pci_dev *dev, int probe)
> #define NSDE_PWR_STATE 0xd0100
> #define IGD_OPERATION_TIMEOUT 10000 /* set timeout 10 seconds */
>
> -static int reset_ivb_igd(struct pci_dev *dev, int probe)
> +static int reset_ivb_igd(struct pci_dev *dev, pci_reset_mode_t probe)
> {
> void __iomem *mmio_base;
> unsigned long timeout;
> u32 val;
>
> - if (probe)
> + if (probe >= PCI_RESET_ACTION_MAX)
> + return -EINVAL;
> +
> + if (probe == PCI_RESET_PROBE)
> return 0;
>
> mmio_base = pci_iomap(dev, 0, 0);
> @@ -3758,11 +3764,14 @@ static int reset_ivb_igd(struct pci_dev *dev, int probe)
> }
>
> /* Device-specific reset method for Chelsio T4-based adapters */
> -static int reset_chelsio_generic_dev(struct pci_dev *dev, int probe)
> +static int reset_chelsio_generic_dev(struct pci_dev *dev, pci_reset_mode_t probe)
> {
> u16 old_command;
> u16 msix_flags;
>
> + if (probe >= PCI_RESET_ACTION_MAX)
> + return -EINVAL;
> +
> /*
> * If this isn't a Chelsio T4-based device, return -ENOTTY indicating
> * that we have no device-specific reset method.
> @@ -3774,7 +3783,7 @@ static int reset_chelsio_generic_dev(struct pci_dev *dev, int probe)
> * If this is the "probe" phase, return 0 indicating that we can
> * reset this device.
> */
> - if (probe)
> + if (probe == PCI_RESET_PROBE)
> return 0;
>
> /*
> @@ -3836,17 +3845,20 @@ static int reset_chelsio_generic_dev(struct pci_dev *dev, int probe)
> * Chapter 3: NVMe control registers
> * Chapter 7.3: Reset behavior
> */
> -static int nvme_disable_and_flr(struct pci_dev *dev, int probe)
> +static int nvme_disable_and_flr(struct pci_dev *dev, pci_reset_mode_t probe)
> {
> void __iomem *bar;
> u16 cmd;
> u32 cfg;
>
> + if (probe >= PCI_RESET_ACTION_MAX)
> + return -EINVAL;
> +
> if (dev->class != PCI_CLASS_STORAGE_EXPRESS ||
> - pcie_reset_flr(dev, 1) || !pci_resource_start(dev, 0))
> + pcie_reset_flr(dev, PCI_RESET_PROBE) || !pci_resource_start(dev, 0))
> return -ENOTTY;
>
> - if (probe)
> + if (probe == PCI_RESET_PROBE)
> return 0;
>
> bar = pci_iomap(dev, 0, NVME_REG_CC + sizeof(cfg));
> @@ -3910,11 +3922,16 @@ static int nvme_disable_and_flr(struct pci_dev *dev, int probe)
> * device too soon after FLR. A 250ms delay after FLR has heuristically
> * proven to produce reliably working results for device assignment cases.
> */
> -static int delay_250ms_after_flr(struct pci_dev *dev, int probe)
> +static int delay_250ms_after_flr(struct pci_dev *dev, pci_reset_mode_t probe)
> {
> - int ret = pcie_reset_flr(dev, probe);
> + int ret;
> +
> + if (probe >= PCI_RESET_ACTION_MAX)
> + return -EINVAL;

pcie_reset_flr() handles this case, we could simply test (ret || probe
== PCI_RESET_PROBE) below. In fact, that's probably what the code flow
should have been regardless of this series.

>
> - if (probe)
> + ret = pcie_reset_flr(dev, probe);
> +
> + if (probe == PCI_RESET_PROBE)
> return ret;
>
> msleep(250);
> @@ -3941,10 +3958,13 @@ static const struct pci_dev_reset_methods pci_dev_reset_methods[] = {
> * because when a host assigns a device to a guest VM, the host may need
> * to reset the device but probably doesn't have a driver for it.
> */
> -int pci_dev_specific_reset(struct pci_dev *dev, int probe)
> +int pci_dev_specific_reset(struct pci_dev *dev, pci_reset_mode_t probe)
> {
> const struct pci_dev_reset_methods *i;
>
> + if (probe >= PCI_RESET_ACTION_MAX)
> + return -EINVAL;

If we test this here, none of the device specific resets modified above
need a duplicate check. Thanks,

Alex

> +
> for (i = pci_dev_reset_methods; i->reset; i++) {
> if ((i->vendor == dev->vendor ||
> i->vendor == (u16)PCI_ANY_ID) &&
> diff --git a/include/linux/pci.h b/include/linux/pci.h
> index 9bec3c616..ee7cd3577 100644
> --- a/include/linux/pci.h
> +++ b/include/linux/pci.h
> @@ -51,6 +51,12 @@
>
> #define PCI_RESET_METHODS_NUM 6
>
> +typedef enum pci_reset_mode {
> + PCI_RESET_DO_RESET,
> + PCI_RESET_PROBE,
> + PCI_RESET_ACTION_MAX,
> +} pci_reset_mode_t;
> +
> /*
> * The PCI interface treats multi-function devices as independent
> * devices. The slot/function address of each device is encoded
> @@ -1222,7 +1228,7 @@ u32 pcie_bandwidth_available(struct pci_dev *dev, struct pci_dev **limiting_dev,
> enum pci_bus_speed *speed,
> enum pcie_link_width *width);
> void pcie_print_link_status(struct pci_dev *dev);
> -int pcie_reset_flr(struct pci_dev *dev, int probe);
> +int pcie_reset_flr(struct pci_dev *dev, pci_reset_mode_t probe);
> int pcie_flr(struct pci_dev *dev);
> bool pci_reset_supported(struct pci_dev *dev);
> int __pci_reset_function_locked(struct pci_dev *dev);
> diff --git a/include/linux/pci_hotplug.h b/include/linux/pci_hotplug.h
> index b482e42d7..84976d620 100644
> --- a/include/linux/pci_hotplug.h
> +++ b/include/linux/pci_hotplug.h
> @@ -44,7 +44,7 @@ struct hotplug_slot_ops {
> int (*get_attention_status) (struct hotplug_slot *slot, u8 *value);
> int (*get_latch_status) (struct hotplug_slot *slot, u8 *value);
> int (*get_adapter_status) (struct hotplug_slot *slot, u8 *value);
> - int (*reset_slot) (struct hotplug_slot *slot, int probe);
> + int (*reset_slot) (struct hotplug_slot *slot, pci_reset_mode_t probe);
> };
>
> /**