From: lorenzo.pieralisi@arm.com (Lorenzo Pieralisi)
To: linux-arm-kernel@lists.infradead.org
Subject: [PATCH 11/14] arm64: add function to get a cpu's MADT GICC table
Date: Thu, 23 Mar 2017 18:33:06 +0000 [thread overview]
Message-ID: <20170323183306.GA28797@red-moon> (raw)
In-Reply-To: <1489143891-11596-12-git-send-email-mark.rutland@arm.com>
On Fri, Mar 10, 2017 at 11:04:48AM +0000, Mark Rutland wrote:
> Currently the ACPI parking protocol code needs to parse each CPU's MADT
> GICC table to extract the mailbox address and so on. Each time we parse
> a GICC table, we call back to the parking protocol code to parse it.
>
> This has been fine so far, but we're about to have more code that needs
> to extract data from the GICC tables, and adding a callback for each
> user is going to get unwieldy.
>
> Instead, this patch ensures that we stash a copy of each CPU's GICC
> table at boot time, such that anything needing to parse it can later
> request it. This will allow for other parsers of GICC, and for
> simplification to the ACPI parking protocol code. Note that we must
> store a copy, rather than a pointer, since the core ACPI code
> temporarily maps/unmaps tables while iterating over them.
>
> Since we parse the MADT before we know how many CPUs we have (and hence
> before we setup the percpu areas), we must use an NR_CPUS sized array.
>
> Signed-off-by: Mark Rutland <mark.rutland@arm.com>
> Cc: Catalin Marinas <catalin.marinas@arm.com>
> Cc: Lorenzo Pieralisi <lorenzo.pieralisi@arm.com>
> Cc: Will Deacon <will.deacon@arm.com>
> ---
> arch/arm64/include/asm/acpi.h | 2 ++
> arch/arm64/kernel/smp.c | 10 ++++++++++
> 2 files changed, 12 insertions(+)
Most of the static array storage is a waste of memory but it makes
things much simpler and if it does become a problem we know how to
fix it so:
Reviewed-by: Lorenzo Pieralisi <lorenzo.pieralisi@arm.com>
> diff --git a/arch/arm64/include/asm/acpi.h b/arch/arm64/include/asm/acpi.h
> index c1976c0..0e99978 100644
> --- a/arch/arm64/include/asm/acpi.h
> +++ b/arch/arm64/include/asm/acpi.h
> @@ -85,6 +85,8 @@ static inline bool acpi_has_cpu_in_madt(void)
> return true;
> }
>
> +struct acpi_madt_generic_interrupt *acpi_cpu_get_madt_gicc(int cpu);
> +
> static inline void arch_fix_phys_package_id(int num, u32 slot) { }
> void __init acpi_init_cpus(void);
>
> diff --git a/arch/arm64/kernel/smp.c b/arch/arm64/kernel/smp.c
> index ef1caae..390c277 100644
> --- a/arch/arm64/kernel/smp.c
> +++ b/arch/arm64/kernel/smp.c
> @@ -518,6 +518,13 @@ static int __init smp_cpu_setup(int cpu)
> static unsigned int cpu_count = 1;
>
> #ifdef CONFIG_ACPI
> +static struct acpi_madt_generic_interrupt cpu_madt_gicc[NR_CPUS];
> +
> +struct acpi_madt_generic_interrupt *acpi_cpu_get_madt_gicc(int cpu)
> +{
> + return &cpu_madt_gicc[cpu];
> +}
> +
> /*
> * acpi_map_gic_cpu_interface - parse processor MADT entry
> *
> @@ -552,6 +559,7 @@ static int __init smp_cpu_setup(int cpu)
> return;
> }
> bootcpu_valid = true;
> + cpu_madt_gicc[0] = *processor;
> early_map_cpu_to_node(0, acpi_numa_get_nid(0, hwid));
> return;
> }
> @@ -562,6 +570,8 @@ static int __init smp_cpu_setup(int cpu)
> /* map the logical cpu id to cpu MPIDR */
> cpu_logical_map(cpu_count) = hwid;
>
> + cpu_madt_gicc[cpu_count] = *processor;
> +
> /*
> * Set-up the ACPI parking protocol cpu entries
> * while initializing the cpu_logical_map to
> --
> 1.9.1
>
next prev parent reply other threads:[~2017-03-23 18:33 UTC|newest]
Thread overview: 45+ messages / expand[flat|nested] mbox.gz Atom feed top
2017-03-10 11:04 [PATCH 00/14] arm_pmu: ACPI support Mark Rutland
2017-03-10 11:04 ` [PATCH 01/14] drivers/perf: arm_pmu: remove pointless PMU disabling Mark Rutland
2017-03-10 11:04 ` [PATCH 02/14] drivers/perf: arm_pmu: define armpmu_init_fn Mark Rutland
2017-03-10 11:04 ` [PATCH 03/14] drivers/perf: arm_pmu: fold init into alloc Mark Rutland
2017-03-10 11:04 ` [PATCH 04/14] drivers/perf: arm_pmu: factor out pmu registration Mark Rutland
2017-03-10 11:04 ` [PATCH 05/14] drivers/perf: arm_pmu: simplify cpu_pmu_request_irqs() Mark Rutland
2017-03-10 11:04 ` [PATCH 06/14] drivers/perf: arm_pmu: handle no platform_device Mark Rutland
2017-03-10 11:04 ` [PATCH 07/14] drivers/perf: arm_pmu: rename irq request/free functions Mark Rutland
2017-03-10 11:04 ` [PATCH 08/14] drivers/perf: arm_pmu: split cpu-local irq request/free Mark Rutland
2017-03-10 11:04 ` [PATCH 09/14] drivers/perf: arm_pmu: move irq request/free into probe Mark Rutland
2017-03-10 11:04 ` [PATCH 10/14] drivers/perf: arm_pmu: split out platform device probe logic Mark Rutland
2017-03-10 11:04 ` [PATCH 11/14] arm64: add function to get a cpu's MADT GICC table Mark Rutland
2017-03-23 18:33 ` Lorenzo Pieralisi [this message]
2017-03-10 11:04 ` [PATCH 12/14] arm64: kill acpi_set_mailbox_entry() Mark Rutland
2017-03-21 18:00 ` Lorenzo Pieralisi
2017-03-21 18:15 ` Mark Rutland
2017-03-21 18:37 ` Lorenzo Pieralisi
2017-03-21 18:53 ` Mark Rutland
2017-03-22 11:38 ` Mark Rutland
2017-03-10 11:04 ` [PATCH 13/14] drivers/perf: arm_pmu: add ACPI framework Mark Rutland
2017-03-10 11:04 ` [PATCH 14/14] arm64: pmuv3: use arm_pmu " Mark Rutland
2017-03-14 6:00 ` Ganapatrao Kulkarni
2017-03-14 10:51 ` Mark Rutland
2017-03-14 12:12 ` Jayachandran C.
2017-03-17 10:24 ` Ganapatrao Kulkarni
2017-04-12 2:40 ` Hanjun Guo
2017-03-10 22:14 ` [PATCH 00/14] arm_pmu: ACPI support Jeremy Linton
2017-03-14 11:49 ` Mark Rutland
2017-03-14 18:47 ` Mark Rutland
2017-03-14 22:06 ` Agustin Vega-Frias
2017-03-15 2:49 ` Hanjun Guo
2017-03-22 12:19 ` Lorenzo Pieralisi
2017-03-22 14:06 ` Agustin Vega-Frias
2017-03-22 23:23 ` Hanjun Guo
2017-03-15 15:34 ` Mark Rutland
2017-03-16 13:00 ` Hanjun Guo
2017-03-20 18:11 ` Ganapatrao Kulkarni
2017-03-22 9:16 ` Ganapatrao Kulkarni
2017-03-22 15:59 ` Mark Rutland
2017-04-03 10:41 ` Ganapatrao Kulkarni
2017-04-03 11:12 ` Mark Rutland
2017-04-11 9:32 ` Hanjun Guo
2017-03-24 21:36 ` Jeremy Linton
2017-03-28 11:31 ` Mark Rutland
2017-03-28 14:41 ` Jeremy Linton
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=20170323183306.GA28797@red-moon \
--to=lorenzo.pieralisi@arm.com \
--cc=linux-arm-kernel@lists.infradead.org \
/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).