2018-08-28 15:07:42

by Punit Agrawal

[permalink] [raw]
Subject: [PATCH 0/2] Drop node-local allocation during host controller initialisation

Hi Bjorn,

As discussed before[0], here are a couple of patches to drop
node-local allocations during host contoller initialisation. This set
covers both arm64 and x86.

I'm posting early to give the patches time on the list as well in next
in case there are issues we've missed.

The patches are based on v4.19-rc1 and has been boot tested on arm64
and compile tested on x86.

Thanks,
Punit

[0] https://www.spinics.net/lists/arm-kernel/msg669746.html

Punit Agrawal (2):
arm64: PCI: Remove node-local allocations when initialising host
controller
x86/PCI: Remove node-local allocation when initialising host
controller

arch/arm64/kernel/pci.c | 5 ++---
arch/x86/pci/acpi.c | 2 +-
2 files changed, 3 insertions(+), 4 deletions(-)

--
2.18.0



2018-08-28 15:07:34

by Punit Agrawal

[permalink] [raw]
Subject: [PATCH 2/2] x86/PCI: Remove node-local allocation when initialising host controller

Memory for host controller data structures is allocated local to the
node to which the controller is associated with. This has been the
behaviour since 965cd0e4a5e5 ("x86, PCI, ACPI: Use kmalloc_node() to
optimize for performance") where the node local allocation was added
without additional context.

Drop the node local allocation as there is no benefit from doing so -
the usage of these structures is independent from where the controller
is located.

Signed-off-by: Punit Agrawal <[email protected]>
Cc: Bjorn Helgaas <[email protected]>
Cc: Thomas Gleixner <[email protected]>
Cc: "H. Peter Anvin" <[email protected]>
Cc: [email protected]
---
arch/x86/pci/acpi.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/arch/x86/pci/acpi.c b/arch/x86/pci/acpi.c
index 5559dcaddd5e..948656069cdd 100644
--- a/arch/x86/pci/acpi.c
+++ b/arch/x86/pci/acpi.c
@@ -356,7 +356,7 @@ struct pci_bus *pci_acpi_scan_root(struct acpi_pci_root *root)
} else {
struct pci_root_info *info;

- info = kzalloc_node(sizeof(*info), GFP_KERNEL, node);
+ info = kzalloc(sizeof(*info), GFP_KERNEL);
if (!info)
dev_err(&root->device->dev,
"pci_bus %04x:%02x: ignored (out of memory)\n",
--
2.18.0


2018-08-28 15:07:34

by Punit Agrawal

[permalink] [raw]
Subject: [PATCH 1/2] arm64: PCI: Remove node-local allocations when initialising host controller

Memory for host controller data structures is allocated local to the
node to which the controller is associated with. This has been the
behaviour since support for ACPI was added in
commit 0cb0786bac15 ("ARM64: PCI: Support ACPI-based PCI host controller").

Drop the node local allocation as there is no benefit from doing so -
the usage of these structures is independent from where the controller
is located.

Signed-off-by: Punit Agrawal <[email protected]>
Cc: Catalin Marinas <[email protected]>
Cc: Will Deacon <[email protected]>
Cc: Lorenzo Pieralisi <[email protected]>
Cc: [email protected]
---
arch/arm64/kernel/pci.c | 5 ++---
1 file changed, 2 insertions(+), 3 deletions(-)

diff --git a/arch/arm64/kernel/pci.c b/arch/arm64/kernel/pci.c
index 0e2ea1c78542..bb85e2f4603f 100644
--- a/arch/arm64/kernel/pci.c
+++ b/arch/arm64/kernel/pci.c
@@ -165,16 +165,15 @@ static void pci_acpi_generic_release_info(struct acpi_pci_root_info *ci)
/* Interface called from ACPI code to setup PCI host controller */
struct pci_bus *pci_acpi_scan_root(struct acpi_pci_root *root)
{
- int node = acpi_get_node(root->device->handle);
struct acpi_pci_generic_root_info *ri;
struct pci_bus *bus, *child;
struct acpi_pci_root_ops *root_ops;

- ri = kzalloc_node(sizeof(*ri), GFP_KERNEL, node);
+ ri = kzalloc(sizeof(*ri), GFP_KERNEL);
if (!ri)
return NULL;

- root_ops = kzalloc_node(sizeof(*root_ops), GFP_KERNEL, node);
+ root_ops = kzalloc(sizeof(*root_ops), GFP_KERNEL);
if (!root_ops) {
kfree(ri);
return NULL;
--
2.18.0


2018-08-28 16:46:14

by Will Deacon

[permalink] [raw]
Subject: Re: [PATCH 1/2] arm64: PCI: Remove node-local allocations when initialising host controller

On Tue, Aug 28, 2018 at 04:05:12PM +0100, Punit Agrawal wrote:
> Memory for host controller data structures is allocated local to the
> node to which the controller is associated with. This has been the
> behaviour since support for ACPI was added in
> commit 0cb0786bac15 ("ARM64: PCI: Support ACPI-based PCI host controller").
>
> Drop the node local allocation as there is no benefit from doing so -
> the usage of these structures is independent from where the controller
> is located.
>
> Signed-off-by: Punit Agrawal <[email protected]>
> Cc: Catalin Marinas <[email protected]>
> Cc: Will Deacon <[email protected]>
> Cc: Lorenzo Pieralisi <[email protected]>
> Cc: [email protected]
> ---
> arch/arm64/kernel/pci.c | 5 ++---
> 1 file changed, 2 insertions(+), 3 deletions(-)

Acked-by: Will Deacon <[email protected]>

Will

> diff --git a/arch/arm64/kernel/pci.c b/arch/arm64/kernel/pci.c
> index 0e2ea1c78542..bb85e2f4603f 100644
> --- a/arch/arm64/kernel/pci.c
> +++ b/arch/arm64/kernel/pci.c
> @@ -165,16 +165,15 @@ static void pci_acpi_generic_release_info(struct acpi_pci_root_info *ci)
> /* Interface called from ACPI code to setup PCI host controller */
> struct pci_bus *pci_acpi_scan_root(struct acpi_pci_root *root)
> {
> - int node = acpi_get_node(root->device->handle);
> struct acpi_pci_generic_root_info *ri;
> struct pci_bus *bus, *child;
> struct acpi_pci_root_ops *root_ops;
>
> - ri = kzalloc_node(sizeof(*ri), GFP_KERNEL, node);
> + ri = kzalloc(sizeof(*ri), GFP_KERNEL);
> if (!ri)
> return NULL;
>
> - root_ops = kzalloc_node(sizeof(*root_ops), GFP_KERNEL, node);
> + root_ops = kzalloc(sizeof(*root_ops), GFP_KERNEL);
> if (!root_ops) {
> kfree(ri);
> return NULL;
> --
> 2.18.0
>

2018-09-04 13:26:05

by Bjorn Helgaas

[permalink] [raw]
Subject: Re: [PATCH 0/2] Drop node-local allocation during host controller initialisation

On Tue, Aug 28, 2018 at 04:05:11PM +0100, Punit Agrawal wrote:
> Hi Bjorn,
>
> As discussed before[0], here are a couple of patches to drop
> node-local allocations during host contoller initialisation. This set
> covers both arm64 and x86.
>
> I'm posting early to give the patches time on the list as well in next
> in case there are issues we've missed.
>
> The patches are based on v4.19-rc1 and has been boot tested on arm64
> and compile tested on x86.
>
> Thanks,
> Punit
>
> [0] https://www.spinics.net/lists/arm-kernel/msg669746.html
>
> Punit Agrawal (2):
> arm64: PCI: Remove node-local allocations when initialising host
> controller
> x86/PCI: Remove node-local allocation when initialising host
> controller
>
> arch/arm64/kernel/pci.c | 5 ++---
> arch/x86/pci/acpi.c | 2 +-
> 2 files changed, 3 insertions(+), 4 deletions(-)

Applied with Will's ack on the arm64 patch to pci/enumeration for v4.20,
thanks!