mbox series

[v3,0/8] PCI: Solve two bridge window sizing issues

Message ID 20240507102523.57320-1-ilpo.jarvinen@linux.intel.com (mailing list archive)
Headers show
Series PCI: Solve two bridge window sizing issues | expand

Message

Ilpo Järvinen May 7, 2024, 10:25 a.m. UTC
Hi all,

Here's a series that contains two fixes to PCI bridge window sizing
algorithm. Together, they should enable remove & rescan cycle to work
for a PCI bus that has PCI devices with optional resources and/or
disparity in BAR sizes.

For the second fix, I chose to expose find_resource_space() from
kernel/resource.c because it should increase accuracy of the cannot-fit
decision (currently that function is called find_resource()). In order
to do that sensibly, a few improvements seemed in order to make its
interface and name of the function sane before exposing it. Thus, the
few extra patches on resource side.

v3:
- Removed "slot" wording
        - Renamed find_empty_resource_slot() -> find_resource_space()
- find_resource_space() returns bool instead of int
- Added patch to convert literal 20 related to bridge win minimum
  alignment to __ffs(SZ_1M)
- Fixed kerneldoc missing "struct"
- Tweaked prints (one dbg -> info, added new dbg one for success case)
- Changelog tweaks
        - Take account largest >> 1 (in alignment calc)
        - Adjust to minor changes made into calculate_memsize()
        - Take logs from more recent kernel to get rid of reg 0xXX

v2:
- Add "typedef" to kerneldoc to get correct formatting
- Use RESOURCE_SIZE_MAX instead of literal
- Remove unnecessary checks for io{port/mem}_resource
- Apply a few style tweaks from Andy

Ilpo Järvinen (8):
  PCI: Fix resource double counting on remove & rescan
  resource: Rename find_resource() to find_resource_space()
  resource: Document find_resource_space() and resource_constraint
  resource: Use typedef for alignf callback
  resource: Handle simple alignment inside __find_resource_space()
  resource: Export find_resource_space()
  PCI: Make minimum bridge window alignment reference more obvious
  PCI: Relax bridge window tail sizing rules

 drivers/pci/bus.c       | 10 +----
 drivers/pci/setup-bus.c | 91 +++++++++++++++++++++++++++++++++++++----
 include/linux/ioport.h  | 44 ++++++++++++++++++--
 include/linux/pci.h     |  5 +--
 kernel/resource.c       | 68 ++++++++++++++----------------
 5 files changed, 157 insertions(+), 61 deletions(-)

Comments

Ilpo Järvinen May 28, 2024, 1:10 p.m. UTC | #1
On Tue, 7 May 2024, Ilpo Järvinen wrote:

> Hi all,
> 
> Here's a series that contains two fixes to PCI bridge window sizing
> algorithm. Together, they should enable remove & rescan cycle to work
> for a PCI bus that has PCI devices with optional resources and/or
> disparity in BAR sizes.
> 
> For the second fix, I chose to expose find_resource_space() from
> kernel/resource.c because it should increase accuracy of the cannot-fit
> decision (currently that function is called find_resource()). In order
> to do that sensibly, a few improvements seemed in order to make its
> interface and name of the function sane before exposing it. Thus, the
> few extra patches on resource side.
> 
> v3:

Hi Bjorn,

It's a bit unclear to me what is your view about the status of this 
series? I see you placed these first into some wip branches and then into 
resource branch but the state of the patches in patchwork is still marked 
as "New" nor have you sent any notice they'd have been "applied".

I'm thinking this from the perspective of whether I should send v4 with 
those minor comments from Andy addressed or not? I could also send those
minor things as separate patches on top of the series if that's 
easier/better for you.
Bjorn Helgaas June 11, 2024, 11:12 p.m. UTC | #2
On Tue, May 28, 2024 at 04:10:48PM +0300, Ilpo Järvinen wrote:
> On Tue, 7 May 2024, Ilpo Järvinen wrote:
> 
> > Hi all,
> > 
> > Here's a series that contains two fixes to PCI bridge window sizing
> > algorithm. Together, they should enable remove & rescan cycle to work
> > for a PCI bus that has PCI devices with optional resources and/or
> > disparity in BAR sizes.
> > 
> > For the second fix, I chose to expose find_resource_space() from
> > kernel/resource.c because it should increase accuracy of the cannot-fit
> > decision (currently that function is called find_resource()). In order
> > to do that sensibly, a few improvements seemed in order to make its
> > interface and name of the function sane before exposing it. Thus, the
> > few extra patches on resource side.
> > 
> > v3:
> 
> Hi Bjorn,
> 
> It's a bit unclear to me what is your view about the status of this 
> series? I see you placed these first into some wip branches and then into 
> resource branch but the state of the patches in patchwork is still marked 
> as "New" nor have you sent any notice they'd have been "applied".
> 
> I'm thinking this from the perspective of whether I should send v4 with 
> those minor comments from Andy addressed or not? I could also send those
> minor things as separate patches on top of the series if that's 
> easier/better for you.

Sorry, I dropped the ball in the middle here.  The pci/resource branch
has been in linux-next since May 29, but I forgot to send a note.  If
you want to tweak for Andy's comments, send an incremental patch and
I'll be happy to squash it/them in.
Bjorn Helgaas June 11, 2024, 11:12 p.m. UTC | #3
On Tue, May 07, 2024 at 01:25:15PM +0300, Ilpo Järvinen wrote:
> Hi all,
> 
> Here's a series that contains two fixes to PCI bridge window sizing
> algorithm. Together, they should enable remove & rescan cycle to work
> for a PCI bus that has PCI devices with optional resources and/or
> disparity in BAR sizes.
> 
> For the second fix, I chose to expose find_resource_space() from
> kernel/resource.c because it should increase accuracy of the cannot-fit
> decision (currently that function is called find_resource()). In order
> to do that sensibly, a few improvements seemed in order to make its
> interface and name of the function sane before exposing it. Thus, the
> few extra patches on resource side.
> 
> v3:
> - Removed "slot" wording
>         - Renamed find_empty_resource_slot() -> find_resource_space()
> - find_resource_space() returns bool instead of int
> - Added patch to convert literal 20 related to bridge win minimum
>   alignment to __ffs(SZ_1M)
> - Fixed kerneldoc missing "struct"
> - Tweaked prints (one dbg -> info, added new dbg one for success case)
> - Changelog tweaks
>         - Take account largest >> 1 (in alignment calc)
>         - Adjust to minor changes made into calculate_memsize()
>         - Take logs from more recent kernel to get rid of reg 0xXX
> 
> v2:
> - Add "typedef" to kerneldoc to get correct formatting
> - Use RESOURCE_SIZE_MAX instead of literal
> - Remove unnecessary checks for io{port/mem}_resource
> - Apply a few style tweaks from Andy
> 
> Ilpo Järvinen (8):
>   PCI: Fix resource double counting on remove & rescan
>   resource: Rename find_resource() to find_resource_space()
>   resource: Document find_resource_space() and resource_constraint
>   resource: Use typedef for alignf callback
>   resource: Handle simple alignment inside __find_resource_space()
>   resource: Export find_resource_space()
>   PCI: Make minimum bridge window alignment reference more obvious
>   PCI: Relax bridge window tail sizing rules
> 
>  drivers/pci/bus.c       | 10 +----
>  drivers/pci/setup-bus.c | 91 +++++++++++++++++++++++++++++++++++++----
>  include/linux/ioport.h  | 44 ++++++++++++++++++--
>  include/linux/pci.h     |  5 +--
>  kernel/resource.c       | 68 ++++++++++++++----------------
>  5 files changed, 157 insertions(+), 61 deletions(-)

Applied to pci/resource for v6.11, thanks!