From: Sergei Miroshnichenko <s.miroshnichenko@yadro.com>
To: "helgaas@kernel.org" <helgaas@kernel.org>
Cc: "linux-pci@vger.kernel.org" <linux-pci@vger.kernel.org>,
"linux@yadro.com" <linux@yadro.com>, "sr@denx.de" <sr@denx.de>
Subject: Re: [PATCH v7 09/26] PCI: hotplug: Calculate immovable parts of bridge windows
Date: Fri, 31 Jan 2020 16:59:44 +0000 [thread overview]
Message-ID: <c9112d99415bdbd626362c63a3c473bafcc5ec26.camel@yadro.com> (raw)
In-Reply-To: <20200130212655.GA128349@google.com>
On Thu, 2020-01-30 at 15:26 -0600, Bjorn Helgaas wrote:
> On Wed, Jan 29, 2020 at 06:29:20PM +0300, Sergei Miroshnichenko
> wrote:
> > When movable BARs are enabled, and if a bridge contains a device
> > with fixed
> > (IORESOURCE_PCI_FIXED) or immovable BARs, the corresponding windows
> > can't
>
> What is the difference between fixed (IORESOURCE_PCI_FIXED) and
> immovable BARs? I'm hesitant to add a new concept ("immovable") with
> a different name but very similar meaning.
>
> I understand that in the case of bridge windows, you may need to
> track
> only part of the window, as opposed to a BAR where the entire BAR has
> to be either fixed or movable, but I think adding a new term will be
> confusing.
>
I thought the term "fixed BAR" has some legacy scent, and those marked
with flag IORESOURCE_PCI_FIXED are fixed forever. But a BAR may become
movable after rmmod-ing its driver that didn't support movable BARs.
Still, the IORESOURCE_PCI_FIXED is used just a few times in the kernel,
so the "fixed BAR" term is probably not so well-established, so I don't
mind referring all non-movables as "fixed": both marked with the flag
and not. Will change all of them in v8.
> > be moved too far away from their original positions - they must
> > still
> > contain all the fixed/immovable BARs, like that:
> >
> > 1) Window position before a bus rescan:
> >
> > | <-- root bridge
> > window --> |
> > |
> > |
> > | | <-- bridge window -->
> > | |
> > | | movable BARs | **fixed BAR**
> > | |
> > ^^^^^^^^^^^^
> >
> > 2) Possible valid outcome after rescan and move:
> >
> > | <-- root bridge
> > window --> |
> > |
> > |
> > | | <-- bridge window -->
> > | |
> > | | **fixed BAR** | Movable BARs
> > | |
> > ^^^^^^^^^^^^
> >
> > An immovable area of a bridge window is a range that covers all the
> > fixed
> > and immovable BARs of direct children, and all the fixed area of
> > children
> > bridges:
> >
> > | <-- root bridge
> > window --> |
> > |
> > |
> > | | <-- bridge window level 1 -
> > -> | |
> > | | ******************** immovable area
> > ******************* | |
> > | |
> > | |
> > | | **fixed BAR** | <-- bridge window level 2 --> |
> > BARs | |
> > | | | *********** immovable area ***********
> > | | |
> > | | | |
> > | |
> > | | | **fixed BAR** | BARs | **fixed BAR**
> > | | |
> > ^^^^
> >
> > To store these areas, the .immovable_range field has been added to
> > struct
> > pci_bus for every bridge window type: IO, MEM and PREFETCH. It is
> > filled
> > recursively from leaves to the root before a rescan.
> >
> > Signed-off-by: Sergei Miroshnichenko <s.miroshnichenko@yadro.com>
> > ---
> > drivers/pci/pci.h | 14 ++++++++
> > drivers/pci/probe.c | 88
> > +++++++++++++++++++++++++++++++++++++++++++++
> > include/linux/pci.h | 6 ++++
> > 3 files changed, 108 insertions(+)
> >
> > diff --git a/drivers/pci/pci.h b/drivers/pci/pci.h
> > index 3b4c982772d3..5f2051c8531c 100644
> > --- a/drivers/pci/pci.h
> > +++ b/drivers/pci/pci.h
> > @@ -404,6 +404,20 @@ static inline bool
> > pci_dev_is_disconnected(const struct pci_dev *dev)
> > return dev->error_state == pci_channel_io_perm_failure;
> > }
> >
> > +static inline int pci_get_bridge_resource_idx(struct resource *r)
> > +{
> > + int idx = 1;
> > +
> > + if (r->flags & IORESOURCE_IO)
> > + idx = 0;
> > + else if (!(r->flags & IORESOURCE_PREFETCH))
> > + idx = 1;
> > + else if (r->flags & IORESOURCE_MEM_64)
> > + idx = 2;
>
> Random nit: No variables or elses required:
>
> if (r->flags & IORESOURCE_IO)
> return 0;
> if (!(r->flags & IORESOURCE_PREFETCH))
> return 1;
> ...
>
Thank you!
Best regards,
Serge
> > + return idx;
> > +}
next prev parent reply other threads:[~2020-01-31 16:59 UTC|newest]
Thread overview: 48+ messages / expand[flat|nested] mbox.gz Atom feed top
2020-01-29 15:29 [PATCH v7 00/26] PCI: Allow BAR movement during boot and hotplug Sergei Miroshnichenko
2020-01-29 15:29 ` [PATCH v7 01/26] PCI: Fix race condition in pci_enable/disable_device() Sergei Miroshnichenko
2020-01-29 15:29 ` [PATCH v7 02/26] PCI: Enable bridge's I/O and MEM access for hotplugged devices Sergei Miroshnichenko
2020-01-30 23:12 ` Bjorn Helgaas
2020-01-29 15:29 ` [PATCH v7 03/26] PCI: hotplug: Initial support of the movable BARs feature Sergei Miroshnichenko
2020-01-29 15:29 ` [PATCH v7 04/26] PCI: Add version of release_child_resources() aware of immovable BARs Sergei Miroshnichenko
2020-01-29 15:29 ` [PATCH v7 05/26] PCI: hotplug: Fix reassigning the released BARs Sergei Miroshnichenko
2020-01-29 15:29 ` [PATCH v7 06/26] PCI: hotplug: Recalculate every bridge window during rescan Sergei Miroshnichenko
2020-01-29 15:29 ` [PATCH v7 07/26] PCI: hotplug: Don't allow hot-added devices to steal resources Sergei Miroshnichenko
2020-01-29 15:29 ` [PATCH v7 08/26] PCI: hotplug: Try to reassign movable BARs only once Sergei Miroshnichenko
2020-01-29 15:29 ` [PATCH v7 09/26] PCI: hotplug: Calculate immovable parts of bridge windows Sergei Miroshnichenko
2020-01-30 21:26 ` Bjorn Helgaas
2020-01-31 16:59 ` Sergei Miroshnichenko [this message]
2020-01-31 20:10 ` Bjorn Helgaas
2020-01-29 15:29 ` [PATCH v7 10/26] PCI: Include fixed and immovable BARs into the bus size calculating Sergei Miroshnichenko
2020-01-29 15:29 ` [PATCH v7 11/26] PCI: hotplug: movable BARs: Compute limits for relocated bridge windows Sergei Miroshnichenko
2020-01-29 15:29 ` [PATCH v7 12/26] PCI: Make sure bridge windows include their fixed BARs Sergei Miroshnichenko
2020-01-29 15:29 ` [PATCH v7 13/26] PCI: hotplug: Add support of immovable BARs to pci_assign_resource() Sergei Miroshnichenko
2020-01-29 15:29 ` [PATCH v7 14/26] PCI: hotplug: Sort immovable BARs before assignment Sergei Miroshnichenko
2020-01-29 15:29 ` [PATCH v7 15/26] PCI: hotplug: Enable the movable BARs feature by default Sergei Miroshnichenko
2020-01-29 15:29 ` [PATCH v7 16/26] PCI: Ignore PCIBIOS_MIN_MEM Sergei Miroshnichenko
2020-01-30 23:52 ` Bjorn Helgaas
2020-01-31 18:19 ` Sergei Miroshnichenko
2020-01-31 20:27 ` Bjorn Helgaas
2020-02-05 13:04 ` Sergei Miroshnichenko
2020-02-05 16:32 ` Bjorn Helgaas
2020-02-12 12:16 ` Sergei Miroshnichenko
2020-02-12 14:13 ` Bjorn Helgaas
2020-01-29 15:29 ` [PATCH v7 17/26] PCI: hotplug: Ignore the MEM BAR offsets from BIOS/bootloader Sergei Miroshnichenko
2020-01-31 20:31 ` Bjorn Helgaas
2020-02-05 11:01 ` Sergei Miroshnichenko
2020-02-05 16:42 ` Bjorn Helgaas
2020-02-12 12:29 ` Sergei Miroshnichenko
2020-01-29 15:29 ` [PATCH v7 18/26] PCI: Treat VGA BARs as immovable Sergei Miroshnichenko
2020-01-29 15:29 ` [PATCH v7 19/26] PCI: hotplug: Configure MPS for hot-added bridges during bus rescan Sergei Miroshnichenko
2020-01-29 15:29 ` [PATCH v7 20/26] PNP: Don't reserve BARs for PCI when enabled movable BARs Sergei Miroshnichenko
2020-01-30 14:39 ` Rafael J. Wysocki
2020-01-30 21:14 ` Bjorn Helgaas
2020-01-31 15:48 ` Sergei Miroshnichenko
2020-01-31 19:39 ` Bjorn Helgaas
2020-01-29 15:29 ` [PATCH v7 21/26] PCI: hotplug: Don't disable the released bridge windows immediately Sergei Miroshnichenko
2020-01-29 15:29 ` [PATCH v7 22/26] PCI: pciehp: Trigger a domain rescan on hp events when enabled movable BARs Sergei Miroshnichenko
2020-01-29 15:29 ` [PATCH v7 23/26] PCI: Don't claim immovable BARs Sergei Miroshnichenko
2020-01-29 15:29 ` [PATCH v7 24/26] PCI: hotplug: Don't reserve bus space when enabled movable BARs Sergei Miroshnichenko
2020-01-29 15:29 ` [PATCH v7 25/26] nvme-pci: Handle " Sergei Miroshnichenko
2020-01-29 15:29 ` [PATCH v7 26/26] PCI/portdrv: Declare support of " Sergei Miroshnichenko
2020-01-30 23:37 ` [PATCH v7 00/26] PCI: Allow BAR movement during boot and hotplug Bjorn Helgaas
2020-02-03 4:56 ` Oliver O'Halloran
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=c9112d99415bdbd626362c63a3c473bafcc5ec26.camel@yadro.com \
--to=s.miroshnichenko@yadro.com \
--cc=helgaas@kernel.org \
--cc=linux-pci@vger.kernel.org \
--cc=linux@yadro.com \
--cc=sr@denx.de \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).