[PATCH] arm64: Get rid of struct cpu_table
Ard Biesheuvel
ard.biesheuvel at linaro.org
Fri Mar 13 07:19:36 PDT 2015
On 13 March 2015 at 15:03, Marc Zyngier <marc.zyngier at arm.com> wrote:
> Hey Ard,
>
> On 13/03/15 13:33, Ard Biesheuvel wrote:
>> On 13 March 2015 at 13:02, Marc Zyngier <marc.zyngier at arm.com> wrote:
>>> struct cpu_table is an artifact left from the (very) early days of
>>> the arm64 port, and its only real use is to allow the most beautiful
>>> "AArch64 Processor" string to be displayed at boot time.
>>>
>>
>> Heh, I looked at that code and assumed it was there for a reason.
>> Apparently not :-)
>
> So did I, until I actually realised what it did... ;-)
>
>> Acked-by: Ard Biesheuvel <ard.biesheuvel at linaro.org>
>
> Thanks.
>
>> Some comments below.
>>
>>> Really? Yes, really.
>>>
>>> Let's get rid of it. In order to avoid another BogoMips-gate, the
>>> aforementioned string is preserved.
>>>
>>> Acked-by: Catalin Marinas <catalin.marinas at arm.com>
>>> Signed-off-by: Marc Zyngier <marc.zyngier at arm.com>
>>> ---
>>> arch/arm64/include/asm/cputable.h | 30 -------------------
>>> arch/arm64/kernel/Makefile | 2 +-
>>> arch/arm64/kernel/asm-offsets.c | 4 ---
>>> arch/arm64/kernel/cputable.c | 33 ---------------------
>>> arch/arm64/kernel/head.S | 61 ++++-----------------------------------
>>> arch/arm64/kernel/setup.c | 16 ++--------
>>> 6 files changed, 9 insertions(+), 137 deletions(-)
>>> delete mode 100644 arch/arm64/include/asm/cputable.h
>>> delete mode 100644 arch/arm64/kernel/cputable.c
>>>
>>> diff --git a/arch/arm64/include/asm/cputable.h b/arch/arm64/include/asm/cputable.h
>>> deleted file mode 100644
>>> index e3bd983..0000000
>>> --- a/arch/arm64/include/asm/cputable.h
>>> +++ /dev/null
>>> @@ -1,30 +0,0 @@
>>> -/*
>>> - * arch/arm64/include/asm/cputable.h
>>> - *
>>> - * Copyright (C) 2012 ARM Ltd.
>>> - *
>>> - * This program is free software: you can redistribute it and/or modify
>>> - * it under the terms of the GNU General Public License version 2 as
>>> - * published by the Free Software Foundation.
>>> - *
>>> - * This program is distributed in the hope that it will be useful,
>>> - * but WITHOUT ANY WARRANTY; without even the implied warranty of
>>> - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
>>> - * GNU General Public License for more details.
>>> - *
>>> - * You should have received a copy of the GNU General Public License
>>> - * along with this program. If not, see <http://www.gnu.org/licenses/>.
>>> - */
>>> -#ifndef __ASM_CPUTABLE_H
>>> -#define __ASM_CPUTABLE_H
>>> -
>>> -struct cpu_info {
>>> - unsigned int cpu_id_val;
>>> - unsigned int cpu_id_mask;
>>> - const char *cpu_name;
>>> - unsigned long (*cpu_setup)(void);
>>> -};
>>> -
>>> -extern struct cpu_info *lookup_processor_type(unsigned int);
>>> -
>>> -#endif
>>> diff --git a/arch/arm64/kernel/Makefile b/arch/arm64/kernel/Makefile
>>> index 5ee07ee..d5e7074 100644
>>> --- a/arch/arm64/kernel/Makefile
>>> +++ b/arch/arm64/kernel/Makefile
>>> @@ -12,7 +12,7 @@ CFLAGS_REMOVE_insn.o = -pg
>>> CFLAGS_REMOVE_return_address.o = -pg
>>>
>>> # Object file lists.
>>> -arm64-obj-y := cputable.o debug-monitors.o entry.o irq.o fpsimd.o \
>>> +arm64-obj-y := debug-monitors.o entry.o irq.o fpsimd.o \
>>> entry-fpsimd.o process.o ptrace.o setup.o signal.o \
>>> sys.o stacktrace.o time.o traps.o io.o vdso.o \
>>> hyp-stub.o psci.o psci-call.o cpu_ops.o insn.o \
>>> diff --git a/arch/arm64/kernel/asm-offsets.c b/arch/arm64/kernel/asm-offsets.c
>>> index f7fa65d..14dd3d1 100644
>>> --- a/arch/arm64/kernel/asm-offsets.c
>>> +++ b/arch/arm64/kernel/asm-offsets.c
>>> @@ -24,7 +24,6 @@
>>> #include <linux/kvm_host.h>
>>> #include <asm/thread_info.h>
>>> #include <asm/memory.h>
>>> -#include <asm/cputable.h>
>>> #include <asm/smp_plat.h>
>>> #include <asm/suspend.h>
>>> #include <asm/vdso_datapage.h>
>>> @@ -71,9 +70,6 @@ int main(void)
>>> BLANK();
>>> DEFINE(PAGE_SZ, PAGE_SIZE);
>>> BLANK();
>>> - DEFINE(CPU_INFO_SZ, sizeof(struct cpu_info));
>>> - DEFINE(CPU_INFO_SETUP, offsetof(struct cpu_info, cpu_setup));
>>> - BLANK();
>>> DEFINE(DMA_BIDIRECTIONAL, DMA_BIDIRECTIONAL);
>>> DEFINE(DMA_TO_DEVICE, DMA_TO_DEVICE);
>>> DEFINE(DMA_FROM_DEVICE, DMA_FROM_DEVICE);
>>> diff --git a/arch/arm64/kernel/cputable.c b/arch/arm64/kernel/cputable.c
>>> deleted file mode 100644
>>> index fd3993c..0000000
>>> --- a/arch/arm64/kernel/cputable.c
>>> +++ /dev/null
>>> @@ -1,33 +0,0 @@
>>> -/*
>>> - * arch/arm64/kernel/cputable.c
>>> - *
>>> - * Copyright (C) 2012 ARM Ltd.
>>> - *
>>> - * This program is free software: you can redistribute it and/or modify
>>> - * it under the terms of the GNU General Public License version 2 as
>>> - * published by the Free Software Foundation.
>>> - *
>>> - * This program is distributed in the hope that it will be useful,
>>> - * but WITHOUT ANY WARRANTY; without even the implied warranty of
>>> - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
>>> - * GNU General Public License for more details.
>>> - *
>>> - * You should have received a copy of the GNU General Public License
>>> - * along with this program. If not, see <http://www.gnu.org/licenses/>.
>>> - */
>>> -
>>> -#include <linux/init.h>
>>> -
>>> -#include <asm/cputable.h>
>>> -
>>> -extern unsigned long __cpu_setup(void);
>>> -
>>> -struct cpu_info cpu_table[] = {
>>> - {
>>> - .cpu_id_val = 0x000f0000,
>>> - .cpu_id_mask = 0x000f0000,
>>> - .cpu_name = "AArch64 Processor",
>>> - .cpu_setup = __cpu_setup,
>>> - },
>>> - { /* Empty */ },
>>> -};
>>> diff --git a/arch/arm64/kernel/head.S b/arch/arm64/kernel/head.S
>>> index 8ce88e0..3ef9cbc 100644
>>> --- a/arch/arm64/kernel/head.S
>>> +++ b/arch/arm64/kernel/head.S
>>> @@ -245,22 +245,12 @@ ENTRY(stext)
>>> bl __calc_phys_offset // x24=PHYS_OFFSET, x28=PHYS_OFFSET-PAGE_OFFSET
>>> bl set_cpu_boot_mode_flag
>>> mrs x22, midr_el1 // x22=cpuid
>>> - mov x0, x22
>>> - bl lookup_processor_type
>>> - mov x23, x0 // x23=current cpu_table
>>> - /*
>>> - * __error_p may end up out of range for cbz if text areas are
>>> - * aligned up to section sizes.
>>> - */
>>> - cbnz x23, 1f // invalid processor (x23=0)?
>>> - b __error_p
As I mentioned oob, __error_p etc can be removed in its entirety as well.
>>> -1:
>>> +
>>> bl __vet_fdt
>>> bl __create_page_tables // x25=TTBR0, x26=TTBR1
>>> /*
>>> * The following calls CPU specific code in a position independent
>>> - * manner. See arch/arm64/mm/proc.S for details. x23 = base of
>>> - * cpu_info structure selected by lookup_processor_type above.
>>> + * manner. See arch/arm64/mm/proc.S for details.
>>> * On return, the CPU will be ready for the MMU to be turned on and
>>> * the TCR will have been set.
>>> */
>>> @@ -268,8 +258,8 @@ ENTRY(stext)
>>> // MMU has been enabled
>>> adrp lr, __enable_mmu // return (PIC) address
>>> add lr, lr, #:lo12:__enable_mmu
>>> - ldr x12, [x23, #CPU_INFO_SETUP]
>>> - add x12, x12, x28 // __virt_to_phys
>>> + adrp x12, __cpu_setup
>>> + add x12, x12, #:lo12:__cpu_setup
>>> br x12 // initialise processor
>>
>> b __cpu_setup ?
>
> Yeah, it is unlikely that the kernel will soon grow to be bigger than
> 128MB...
>
>>> ENDPROC(stext)
>>>
>>> @@ -634,14 +624,10 @@ ENTRY(secondary_startup)
>>> * Common entry point for secondary CPUs.
>>> */
>>> mrs x22, midr_el1 // x22=cpuid
>>> - mov x0, x22
>>> - bl lookup_processor_type
>>> - mov x23, x0 // x23=current cpu_table
>>> - cbz x23, __error_p // invalid processor (x23=0)?
>>>
>>> pgtbl x25, x26, x28 // x25=TTBR0, x26=TTBR1
>>> - ldr x12, [x23, #CPU_INFO_SETUP]
>>> - add x12, x12, x28 // __virt_to_phys
>>> + adrp x12, __cpu_setup
>>> + add x12, x12, #:lo12:__cpu_setup
>>> blr x12 // initialise processor
>>>
>>
>> bl __cpu_setup ?
>
> Yup, same. I'll fix that.
>
> Thanks,
>
> M.
> --
> Jazz is not dead. It just smells funny...
More information about the linux-arm-kernel
mailing list