From: "Ilpo Järvinen" <ilpo.jarvinen@linux.intel.com>
To: "Peng Fan (OSS)" <peng.fan@oss.nxp.com>
Cc: bhelgaas@google.com, pali@kernel.org, linux-pci@vger.kernel.org,
LKML <linux-kernel@vger.kernel.org>, Peng Fan <peng.fan@nxp.com>
Subject: Re: [PATCH] pci: introduce static_nr to indicate domain_nr from which IDA
Date: Mon, 14 Aug 2023 18:11:24 +0300 (EEST) [thread overview]
Message-ID: <ae888d-67c2-768-6985-e5cca038987e@linux.intel.com> (raw)
In-Reply-To: <20230812122128.3409733-1-peng.fan@oss.nxp.com>
On Sat, 12 Aug 2023, Peng Fan (OSS) wrote:
> From: Peng Fan <peng.fan@nxp.com>
>
> When pci node is created used an overlay, when the overlay is
pci -> PCI
created used -> created using
is created -> was created ? The current form with "is created" + "is
reverted/destroyed" is contradictory.
Double "when" makes it hard to understand what you say. Perhaps convert
the second when to "and".
> reverted/destroyed, the "linux,pci-domain" property is no longer
> existed
property no longer exists
>, so of_get_pci_domain_nr will return failure. Then
> of_pci_bus_release_domain_nr will actually use the dynamic IDA,
> even if the IDA was allocated in static IDA.
>
> Introduce a static_nr field in pci_bus to indicate the IDA
> is in dynamic or static IDA to address the upper issue.
I'd say:
... to indicated whether the IDA is a dynamic or static in order to
free the correct one.
> Fixes: c14f7ccc9f5d ("PCI: Assign PCI domain IDs by ida_alloc()")
> Signed-off-by: Peng Fan <peng.fan@nxp.com>
> ---
> drivers/pci/pci.c | 22 ++++++++++++++--------
> include/linux/pci.h | 1 +
> 2 files changed, 15 insertions(+), 8 deletions(-)
>
> diff --git a/drivers/pci/pci.c b/drivers/pci/pci.c
> index 60230da957e0..5c98502bcda6 100644
> --- a/drivers/pci/pci.c
> +++ b/drivers/pci/pci.c
> @@ -6881,10 +6881,10 @@ static void of_pci_reserve_static_domain_nr(void)
> }
> }
>
> -static int of_pci_bus_find_domain_nr(struct device *parent)
> +static int of_pci_bus_find_domain_nr(struct pci_bus *bus, struct device *parent)
> {
> static bool static_domains_reserved = false;
> - int domain_nr;
> + int domain_nr, ret;
>
> /* On the first call scan device tree for static allocations. */
> if (!static_domains_reserved) {
> @@ -6892,6 +6892,8 @@ static int of_pci_bus_find_domain_nr(struct device *parent)
> static_domains_reserved = true;
> }
>
> + bus->static_nr = 0;
> +
> if (parent) {
> /*
> * If domain is in DT, allocate it in static IDA. This
> @@ -6899,10 +6901,14 @@ static int of_pci_bus_find_domain_nr(struct device *parent)
> * in DT.
> */
> domain_nr = of_get_pci_domain_nr(parent->of_node);
> - if (domain_nr >= 0)
> - return ida_alloc_range(&pci_domain_nr_static_ida,
> - domain_nr, domain_nr,
> - GFP_KERNEL);
> + if (domain_nr >= 0) {
> + ret = ida_alloc_range(&pci_domain_nr_static_ida,
> + domain_nr, domain_nr, GFP_KERNEL);
> + if (ret >= 0)
> + bus->static_nr = 1;
> +
> + return ret;
> + }
> }
>
> /*
> @@ -6920,7 +6926,7 @@ static void of_pci_bus_release_domain_nr(struct pci_bus *bus, struct device *par
> return;
>
> /* Release domain from IDA where it was allocated. */
> - if (of_get_pci_domain_nr(parent->of_node) == bus->domain_nr)
> + if (bus->static_nr)
> ida_free(&pci_domain_nr_static_ida, bus->domain_nr);
> else
> ida_free(&pci_domain_nr_dynamic_ida, bus->domain_nr);
> @@ -6928,7 +6934,7 @@ static void of_pci_bus_release_domain_nr(struct pci_bus *bus, struct device *par
>
> int pci_bus_find_domain_nr(struct pci_bus *bus, struct device *parent)
> {
> - return acpi_disabled ? of_pci_bus_find_domain_nr(parent) :
> + return acpi_disabled ? of_pci_bus_find_domain_nr(bus, parent) :
> acpi_pci_bus_find_domain_nr(bus);
> }
>
> diff --git a/include/linux/pci.h b/include/linux/pci.h
> index eeb2e6f6130f..6dd16e069ab8 100644
> --- a/include/linux/pci.h
> +++ b/include/linux/pci.h
> @@ -665,6 +665,7 @@ struct pci_bus {
> unsigned char cur_bus_speed; /* enum pci_bus_speed */
> #ifdef CONFIG_PCI_DOMAINS_GENERIC
> int domain_nr;
> + unsigned int static_nr:1;
> #endif
>
> char name[48];
If you put it into where the other unsigned int xx:1's are in the struct,
it won't increase the size of the struct (but the downside is that they're
no longer next to each other).
--
i.
prev parent reply other threads:[~2023-08-14 15:12 UTC|newest]
Thread overview: 2+ messages / expand[flat|nested] mbox.gz Atom feed top
2023-08-12 12:21 [PATCH] pci: introduce static_nr to indicate domain_nr from which IDA Peng Fan (OSS)
2023-08-14 15:11 ` Ilpo Järvinen [this message]
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=ae888d-67c2-768-6985-e5cca038987e@linux.intel.com \
--to=ilpo.jarvinen@linux.intel.com \
--cc=bhelgaas@google.com \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-pci@vger.kernel.org \
--cc=pali@kernel.org \
--cc=peng.fan@nxp.com \
--cc=peng.fan@oss.nxp.com \
/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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.