[PATCH 00/25] PCI: Resource fitting/assignment fixes and cleanups

Ilpo Järvinen posted 25 patches 1 year, 1 month ago
drivers/pci/pci.h       |  44 +++-
drivers/pci/setup-bus.c | 566 +++++++++++++++++++++++-----------------
drivers/pci/setup-res.c |   8 +-
3 files changed, 364 insertions(+), 254 deletions(-)
[PATCH 00/25] PCI: Resource fitting/assignment fixes and cleanups
Posted by Ilpo Järvinen 1 year, 1 month ago
Hi all,

This series focuses on PCI resource fitting and assignment algorithms.
I've further changes in works to enable handling resizable BARs better
during resource fitting built on top of these, but that's still WIP and
this series seems way too large as is to have more stuff included.

First there are small tweaks and fixes to the relaxed tail alignment
code and applying the lessons learned to other similar cases. They are
sort of independent of the rest. Then a large set of pure cleanups and
refactoring that are not intended to make any functional changes.
Finally, starting from "PCI: Extend enable to check for any optional
resource" are again patches that aim to make behavioral changes to fix
bridge window sizing to consider expansion ROM as an optional resource
(to fix a remove/rescan cycle issue) and improve resource fitting
algorithm in general.

The series includes one of the change from Michał Winiarski
<michal.winiarski@intel.com> as these changes also touch the same IOV
checks.

Please let me know if you'd prefer me to order the changes differently
or split it into smaller chunks.


I've extensively tested this series over the hosts in our lab which
have quite heterogeneous PCI setup each. There were no losses of any
important resource. Without pci=realloc, there's some churn in which of
the disabled expansion ROMs gets a scarce memory space assigned (with
pci=realloc, they are all assigned large enough bridge window).


Ilpo Järvinen (24):
  PCI: Remove add_align overwrite unrelated to size0
  PCI: size0 is unrelated to add_align
  PCI: Simplify size1 assignment logic
  PCI: Optional bridge window size too may need relaxing
  PCI: Fix old_size lower bound in calculate_iosize() too
  PCI: Use SZ_* instead of literals in setup-bus.c
  PCI: resource_set_range/size() conversions
  PCI: Check resource_size() separately
  PCI: Add pci_resource_num() helper
  PCI: Add dev & res local variables to resource assignment funcs
  PCI: Converge return paths in __assign_resources_sorted()
  PCI: Refactor pdev_sort_resources() & __dev_sort_resources()
  PCI: Use while loop and break instead of gotos
  PCI: Rename retval to ret
  PCI: Consolidate assignment loop next round preparation
  PCI: Remove wrong comment from pci_reassign_resource()
  PCI: Add restore_dev_resource()
  PCI: Extend enable to check for any optional resource
  PCI: Always have realloc_head in __assign_resources_sorted()
  PCI: Indicate optional resource assignment failures
  PCI: Add debug print when releasing resources before retry
  PCI: Use res->parent to check is resource is assigned
  PCI: Perform reset_resource() and build fail list in sync
  PCI: Rework optional resource handling

Michał Winiarski (1):
  PCI: Add a helper to identify IOV resources

 drivers/pci/pci.h       |  44 +++-
 drivers/pci/setup-bus.c | 566 +++++++++++++++++++++++-----------------
 drivers/pci/setup-res.c |   8 +-
 3 files changed, 364 insertions(+), 254 deletions(-)

-- 
2.39.5

Re: [PATCH 00/25] PCI: Resource fitting/assignment fixes and cleanups
Posted by Bjorn Helgaas 12 months ago
On Mon, Dec 16, 2024 at 07:56:07PM +0200, Ilpo Järvinen wrote:
> Hi all,
> 
> This series focuses on PCI resource fitting and assignment algorithms.
> I've further changes in works to enable handling resizable BARs better
> during resource fitting built on top of these, but that's still WIP and
> this series seems way too large as is to have more stuff included.
> 
> First there are small tweaks and fixes to the relaxed tail alignment
> code and applying the lessons learned to other similar cases. They are
> sort of independent of the rest. Then a large set of pure cleanups and
> refactoring that are not intended to make any functional changes.
> Finally, starting from "PCI: Extend enable to check for any optional
> resource" are again patches that aim to make behavioral changes to fix
> bridge window sizing to consider expansion ROM as an optional resource
> (to fix a remove/rescan cycle issue) and improve resource fitting
> algorithm in general.
> 
> The series includes one of the change from Michał Winiarski
> <michal.winiarski@intel.com> as these changes also touch the same IOV
> checks.
> 
> Please let me know if you'd prefer me to order the changes differently
> or split it into smaller chunks.
> 
> 
> I've extensively tested this series over the hosts in our lab which
> have quite heterogeneous PCI setup each. There were no losses of any
> important resource. Without pci=realloc, there's some churn in which of
> the disabled expansion ROMs gets a scarce memory space assigned (with
> pci=realloc, they are all assigned large enough bridge window).
> 
> 
> Ilpo Järvinen (24):
>   PCI: Remove add_align overwrite unrelated to size0
>   PCI: size0 is unrelated to add_align
>   PCI: Simplify size1 assignment logic
>   PCI: Optional bridge window size too may need relaxing
>   PCI: Fix old_size lower bound in calculate_iosize() too
>   PCI: Use SZ_* instead of literals in setup-bus.c
>   PCI: resource_set_range/size() conversions
>   PCI: Check resource_size() separately
>   PCI: Add pci_resource_num() helper
>   PCI: Add dev & res local variables to resource assignment funcs
>   PCI: Converge return paths in __assign_resources_sorted()
>   PCI: Refactor pdev_sort_resources() & __dev_sort_resources()
>   PCI: Use while loop and break instead of gotos
>   PCI: Rename retval to ret
>   PCI: Consolidate assignment loop next round preparation
>   PCI: Remove wrong comment from pci_reassign_resource()
>   PCI: Add restore_dev_resource()
>   PCI: Extend enable to check for any optional resource
>   PCI: Always have realloc_head in __assign_resources_sorted()
>   PCI: Indicate optional resource assignment failures
>   PCI: Add debug print when releasing resources before retry
>   PCI: Use res->parent to check is resource is assigned
>   PCI: Perform reset_resource() and build fail list in sync
>   PCI: Rework optional resource handling
> 
> Michał Winiarski (1):
>   PCI: Add a helper to identify IOV resources
> 
>  drivers/pci/pci.h       |  44 +++-
>  drivers/pci/setup-bus.c | 566 +++++++++++++++++++++++-----------------
>  drivers/pci/setup-res.c |   8 +-
>  3 files changed, 364 insertions(+), 254 deletions(-)

Applied to pci/resource for v6.15, thanks, Ilpo!