mbox series

[v16,0/9] PCI: Expose and manage PCI device reset

Message ID 20210817180500.1253-1-ameynarkhede03@gmail.com (mailing list archive)
Headers show
Series PCI: Expose and manage PCI device reset | expand

Message

Amey Narkhede Aug. 17, 2021, 6:04 p.m. UTC
PCI and PCIe devices may support a number of possible reset mechanisms
for example Function Level Reset (FLR) provided via Advanced Feature or
PCIe capabilities, Power Management reset, bus reset, or device specific reset.
Currently the PCI subsystem creates a policy prioritizing these reset methods
which provides neither visibility nor control to userspace.

Expose the reset methods available per device to userspace, via sysfs
and allow an administrative user or device owner to have ability to
manage per device reset method priorities or exclusions.
This feature aims to allow greater control of a device for use cases
as device assignment, where specific device or platform issues may
interact poorly with a given reset method, and for which device specific
quirks have not been developed.

Changes in v16:
	- Refactor acpi_pci_bridge_d3() in patch 7/9
	- Fixed consistency issues in patch 9/9

Changes in v15:
	- Fix use of uninitialized variable in patch 3/9

Changes in v14:
	- Remove duplicate entries from pdev->reset_methods as per
	  Shanker's suggestion

Changes in v13:
	- Added "PCI: Cache PCIe FLR capability"
	- Removed memcpy in pci_init_reset_methods() and reset_method_show
	- Moved reset_method sysfs attribute code from pci-sysfs.c to
	  pci.c

Changes in v12:
        - Corrected subject in 0/8 (cover letter).

Changes in v11:
        - Alex's suggestion fallback back to other resets if the ACPI RST
          fails. Fix "s/-EINVAL/-ENOTTY/" in 7/8 patch.

Changes in v10:
        - Fix build error on ppc as reported by build bot

Changes in v9:
        - Renamed has_flr bitfield to has_pcie_flr and restored
          use of PCI_DEV_FLAGS_NO_FLR_RESET in quirk_no_flr()
        - Cleaned up sysfs code

Changes in v8:
        - Added has_flr bitfield to struct pci_dev to cache flr
          capability
        - Updated encoding scheme used in reset_methods array as per
          Bjorn's suggestion
        - Updated Shanker's ACPI patches

Changes in v7:
        - Fix the pci_dev_acpi_reset() prototype mismatch
          in case of CONFIG_ACPI=n

Changes in v6:
        - Address Bjorn's and Krzysztof's review comments
        - Add Shanker's updated patches along with new
          "PCI: Setup ACPI_COMPANION early" patch

Changes in v5:
        - Rebase the series over pci/reset branch of
          Bjorn's pci tree to avoid merge conflicts
          caused by recent changes in existing reset
          sysfs attribute

Changes in v4:
        - Change the order or strlen and strim in reset_method_store
          function to avoid extra strlen call.
        - Use consistent terminology in new
          pci_reset_mode enum and rename the probe argument
          of reset functions.

Changes in v3:
        - Dropped "PCI: merge slot and bus reset implementations" which was
          already accepted separately
        - Grammar fixes
        - Added Shanker's patches which were rebased on v2 of this series
        - Added "PCI: Change the type of probe argument in reset functions"
          and additional user input sanitization code in reset_method_store
          function per review feedback from Krzysztof

Changes in v2:
        - Use byte array instead of bitmap to keep track of
          ordering of reset methods
        - Fix incorrect use of reset_fn field in octeon driver
        - Allow writing comma separated list of names of supported reset
          methods to reset_method sysfs attribute
        - Writing empty string instead of "none" to reset_method attribute
          disables ability of reset the device

Amey Narkhede (6):
  PCI: Cache PCIe FLR capability
  PCI: Add pcie_reset_flr to follow calling convention of other reset
    methods
  PCI: Add new array for keeping track of ordering of reset methods
  PCI: Remove reset_fn field from pci_dev
  PCI: Allow userspace to query and set device reset mechanism
  PCI: Change the type of probe argument in reset functions

Shanker Donthineni (3):
  PCI: Define a function to set ACPI_COMPANION in pci_dev
  PCI: Setup ACPI fwnode early and at the same time with OF
  PCI: Add support for ACPI _RST reset method

 Documentation/ABI/testing/sysfs-bus-pci       |  19 ++
 drivers/crypto/cavium/nitrox/nitrox_main.c    |   4 +-
 .../ethernet/cavium/liquidio/lio_vf_main.c    |   2 +-
 drivers/pci/hotplug/pciehp.h                  |   2 +-
 drivers/pci/hotplug/pciehp_hpc.c              |   2 +-
 drivers/pci/hotplug/pnv_php.c                 |   4 +-
 drivers/pci/pci-acpi.c                        |  83 +++--
 drivers/pci/pci-sysfs.c                       |   3 +-
 drivers/pci/pci.c                             | 287 +++++++++++++-----
 drivers/pci/pci.h                             |  24 +-
 drivers/pci/pcie/aer.c                        |  12 +-
 drivers/pci/probe.c                           |  16 +-
 drivers/pci/quirks.c                          |  25 +-
 drivers/pci/remove.c                          |   1 -
 include/linux/pci.h                           |  14 +-
 include/linux/pci_hotplug.h                   |   2 +-
 16 files changed, 351 insertions(+), 149 deletions(-)

--
2.32.0

Comments

Amey Narkhede Aug. 17, 2021, 6:12 p.m. UTC | #1
On 21/08/17 11:34PM, Amey Narkhede wrote:
> PCI and PCIe devices may support a number of possible reset mechanisms
> for example Function Level Reset (FLR) provided via Advanced Feature or
> PCIe capabilities, Power Management reset, bus reset, or device specific reset.
> Currently the PCI subsystem creates a policy prioritizing these reset methods
> which provides neither visibility nor control to userspace.
>
> Expose the reset methods available per device to userspace, via sysfs
> and allow an administrative user or device owner to have ability to
> manage per device reset method priorities or exclusions.
> This feature aims to allow greater control of a device for use cases
> as device assignment, where specific device or platform issues may
> interact poorly with a given reset method, and for which device specific
> quirks have not been developed.
>

Apologies. I messed my git branch dance. I sent old 9/9 patch again.
You can find updated patches here https://lore.kernel.org/linux-pci/20210817180937.3123-1-ameynarkhede03@gmail.com/
Again apologies for the spam.

> Changes in v16:
> 	- Refactor acpi_pci_bridge_d3() in patch 7/9
> 	- Fixed consistency issues in patch 9/9
>
> Changes in v15:
> 	- Fix use of uninitialized variable in patch 3/9
>
> Changes in v14:
> 	- Remove duplicate entries from pdev->reset_methods as per
> 	  Shanker's suggestion
>
> Changes in v13:
> 	- Added "PCI: Cache PCIe FLR capability"
> 	- Removed memcpy in pci_init_reset_methods() and reset_method_show
> 	- Moved reset_method sysfs attribute code from pci-sysfs.c to
> 	  pci.c
>
> Changes in v12:
>         - Corrected subject in 0/8 (cover letter).
>
> Changes in v11:
>         - Alex's suggestion fallback back to other resets if the ACPI RST
>           fails. Fix "s/-EINVAL/-ENOTTY/" in 7/8 patch.
>
> Changes in v10:
>         - Fix build error on ppc as reported by build bot
>
> Changes in v9:
>         - Renamed has_flr bitfield to has_pcie_flr and restored
>           use of PCI_DEV_FLAGS_NO_FLR_RESET in quirk_no_flr()
>         - Cleaned up sysfs code
>
> Changes in v8:
>         - Added has_flr bitfield to struct pci_dev to cache flr
>           capability
>         - Updated encoding scheme used in reset_methods array as per
>           Bjorn's suggestion
>         - Updated Shanker's ACPI patches
>
> Changes in v7:
>         - Fix the pci_dev_acpi_reset() prototype mismatch
>           in case of CONFIG_ACPI=n
>
> Changes in v6:
>         - Address Bjorn's and Krzysztof's review comments
>         - Add Shanker's updated patches along with new
>           "PCI: Setup ACPI_COMPANION early" patch
>
> Changes in v5:
>         - Rebase the series over pci/reset branch of
>           Bjorn's pci tree to avoid merge conflicts
>           caused by recent changes in existing reset
>           sysfs attribute
>
> Changes in v4:
>         - Change the order or strlen and strim in reset_method_store
>           function to avoid extra strlen call.
>         - Use consistent terminology in new
>           pci_reset_mode enum and rename the probe argument
>           of reset functions.
>
> Changes in v3:
>         - Dropped "PCI: merge slot and bus reset implementations" which was
>           already accepted separately
>         - Grammar fixes
>         - Added Shanker's patches which were rebased on v2 of this series
>         - Added "PCI: Change the type of probe argument in reset functions"
>           and additional user input sanitization code in reset_method_store
>           function per review feedback from Krzysztof
>
> Changes in v2:
>         - Use byte array instead of bitmap to keep track of
>           ordering of reset methods
>         - Fix incorrect use of reset_fn field in octeon driver
>         - Allow writing comma separated list of names of supported reset
>           methods to reset_method sysfs attribute
>         - Writing empty string instead of "none" to reset_method attribute
>           disables ability of reset the device
>
> Amey Narkhede (6):
>   PCI: Cache PCIe FLR capability
>   PCI: Add pcie_reset_flr to follow calling convention of other reset
>     methods
>   PCI: Add new array for keeping track of ordering of reset methods
>   PCI: Remove reset_fn field from pci_dev
>   PCI: Allow userspace to query and set device reset mechanism
>   PCI: Change the type of probe argument in reset functions
>
> Shanker Donthineni (3):
>   PCI: Define a function to set ACPI_COMPANION in pci_dev
>   PCI: Setup ACPI fwnode early and at the same time with OF
>   PCI: Add support for ACPI _RST reset method
>
>  Documentation/ABI/testing/sysfs-bus-pci       |  19 ++
>  drivers/crypto/cavium/nitrox/nitrox_main.c    |   4 +-
>  .../ethernet/cavium/liquidio/lio_vf_main.c    |   2 +-
>  drivers/pci/hotplug/pciehp.h                  |   2 +-
>  drivers/pci/hotplug/pciehp_hpc.c              |   2 +-
>  drivers/pci/hotplug/pnv_php.c                 |   4 +-
>  drivers/pci/pci-acpi.c                        |  83 +++--
>  drivers/pci/pci-sysfs.c                       |   3 +-
>  drivers/pci/pci.c                             | 287 +++++++++++++-----
>  drivers/pci/pci.h                             |  24 +-
>  drivers/pci/pcie/aer.c                        |  12 +-
>  drivers/pci/probe.c                           |  16 +-
>  drivers/pci/quirks.c                          |  25 +-
>  drivers/pci/remove.c                          |   1 -
>  include/linux/pci.h                           |  14 +-
>  include/linux/pci_hotplug.h                   |   2 +-
>  16 files changed, 351 insertions(+), 149 deletions(-)
>
> --
> 2.32.0