Skip to content

Commit eaecca9

Browse files
Kefeng Wangctmarinas
authored andcommitted
arm64: Fix __cpu_logical_map undefined issue
The __cpu_logical_map undefined issue occued when the new tegra194-cpufreq drvier building as a module. ERROR: modpost: "__cpu_logical_map" [drivers/cpufreq/tegra194-cpufreq.ko] undefined! The driver using cpu_logical_map() macro which will expand to __cpu_logical_map, we can't access it in a drvier. Let's turn cpu_logical_map() into a C wrapper and export it to fix the build issue. Also create a function set_cpu_logical_map(cpu, hwid) when assign a value to cpu_logical_map(cpu). Reported-by: Hulk Robot <[email protected]> Signed-off-by: Kefeng Wang <[email protected]> Signed-off-by: Catalin Marinas <[email protected]>
1 parent 489577d commit eaecca9

File tree

3 files changed

+16
-5
lines changed

3 files changed

+16
-5
lines changed

arch/arm64/include/asm/smp.h

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -47,7 +47,12 @@ DECLARE_PER_CPU_READ_MOSTLY(int, cpu_number);
4747
* Logical CPU mapping.
4848
*/
4949
extern u64 __cpu_logical_map[NR_CPUS];
50-
#define cpu_logical_map(cpu) __cpu_logical_map[cpu]
50+
extern u64 cpu_logical_map(int cpu);
51+
52+
static inline void set_cpu_logical_map(int cpu, u64 hwid)
53+
{
54+
__cpu_logical_map[cpu] = hwid;
55+
}
5156

5257
struct seq_file;
5358

arch/arm64/kernel/setup.c

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -85,7 +85,7 @@ u64 __cacheline_aligned boot_args[4];
8585
void __init smp_setup_processor_id(void)
8686
{
8787
u64 mpidr = read_cpuid_mpidr() & MPIDR_HWID_BITMASK;
88-
cpu_logical_map(0) = mpidr;
88+
set_cpu_logical_map(0, mpidr);
8989

9090
/*
9191
* clear __my_cpu_offset on boot CPU to avoid hang caused by
@@ -276,6 +276,12 @@ arch_initcall(reserve_memblock_reserved_regions);
276276

277277
u64 __cpu_logical_map[NR_CPUS] = { [0 ... NR_CPUS-1] = INVALID_HWID };
278278

279+
u64 cpu_logical_map(int cpu)
280+
{
281+
return __cpu_logical_map[cpu];
282+
}
283+
EXPORT_SYMBOL_GPL(cpu_logical_map);
284+
279285
void __init setup_arch(char **cmdline_p)
280286
{
281287
init_mm.start_code = (unsigned long) _text;

arch/arm64/kernel/smp.c

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -567,7 +567,7 @@ acpi_map_gic_cpu_interface(struct acpi_madt_generic_interrupt *processor)
567567
return;
568568

569569
/* map the logical cpu id to cpu MPIDR */
570-
cpu_logical_map(cpu_count) = hwid;
570+
set_cpu_logical_map(cpu_count, hwid);
571571

572572
cpu_madt_gicc[cpu_count] = *processor;
573573

@@ -681,7 +681,7 @@ static void __init of_parse_and_init_cpus(void)
681681
goto next;
682682

683683
pr_debug("cpu logical map 0x%llx\n", hwid);
684-
cpu_logical_map(cpu_count) = hwid;
684+
set_cpu_logical_map(cpu_count, hwid);
685685

686686
early_map_cpu_to_node(cpu_count, of_node_to_nid(dn));
687687
next:
@@ -722,7 +722,7 @@ void __init smp_init_cpus(void)
722722
for (i = 1; i < nr_cpu_ids; i++) {
723723
if (cpu_logical_map(i) != INVALID_HWID) {
724724
if (smp_cpu_setup(i))
725-
cpu_logical_map(i) = INVALID_HWID;
725+
set_cpu_logical_map(i, INVALID_HWID);
726726
}
727727
}
728728
}

0 commit comments

Comments
 (0)