[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <55A38698.8080206@imgtec.com>
Date: Mon, 13 Jul 2015 10:36:24 +0100
From: James Hogan <james.hogan@...tec.com>
To: Bjorn Helgaas <bhelgaas@...gle.com>,
Ralf Baechle <ralf@...ux-mips.org>
CC: Andrew Bresticker <abrestic@...omium.org>,
<linux-mips@...ux-mips.org>, <linux-kernel@...r.kernel.org>
Subject: Re: [PATCH 6/9] MIPS: Remove "weak" from get_c0_compare_int() declaration
On 13/07/15 00:11, Bjorn Helgaas wrote:
> Weak header file declarations are error-prone because they make every
> definition weak, and the linker chooses one based on link order (see
> 10629d711ed7 ("PCI: Remove __weak annotation from pcibios_get_phb_of_node
> decl")).
>
> get_c0_compare_int() is defined in several files. Each definition is weak,
> so I assume Kconfig prevents two or more from being included. The caller
> contains default code used when get_c0_compare_int() isn't defined at all.
>
> Add a weak get_c0_compare_int() definition with the default code and remove
> the weak annotation from the declaration.
>
> Then the platform implementations will be strong and will override the weak
> default. If multiple platforms are ever configured in, we'll get a link
> error instead of calling a random platform's implementation.
>
> Signed-off-by: Bjorn Helgaas <bhelgaas@...gle.com>
Reviewed-by: James Hogan <james.hogan@...tec.com>
Cheers
James
> ---
> arch/mips/include/asm/time.h | 2 +-
> arch/mips/kernel/cevt-r4k.c | 11 +++++++----
> 2 files changed, 8 insertions(+), 5 deletions(-)
>
> diff --git a/arch/mips/include/asm/time.h b/arch/mips/include/asm/time.h
> index ce6a7d5..44a9c3a 100644
> --- a/arch/mips/include/asm/time.h
> +++ b/arch/mips/include/asm/time.h
> @@ -51,7 +51,7 @@ extern int get_c0_perfcount_int(void);
> /*
> * Initialize the calling CPU's compare interrupt as clockevent device
> */
> -extern unsigned int __weak get_c0_compare_int(void);
> +extern unsigned int get_c0_compare_int(void);
> extern int r4k_clockevent_init(void);
>
> static inline int mips_clockevent_init(void)
> diff --git a/arch/mips/kernel/cevt-r4k.c b/arch/mips/kernel/cevt-r4k.c
> index d70c4d8..cc7cc46 100644
> --- a/arch/mips/kernel/cevt-r4k.c
> +++ b/arch/mips/kernel/cevt-r4k.c
> @@ -174,6 +174,11 @@ int c0_compare_int_usable(void)
> return 1;
> }
>
> +unsigned int __weak get_c0_compare_int(void)
> +{
> + return MIPS_CPU_IRQ_BASE + cp0_compare_irq;
> +}
> +
> int r4k_clockevent_init(void)
> {
> unsigned int cpu = smp_processor_id();
> @@ -189,11 +194,9 @@ int r4k_clockevent_init(void)
> /*
> * With vectored interrupts things are getting platform specific.
> * get_c0_compare_int is a hook to allow a platform to return the
> - * interrupt number of it's liking.
> + * interrupt number of its liking.
> */
> - irq = MIPS_CPU_IRQ_BASE + cp0_compare_irq;
> - if (get_c0_compare_int)
> - irq = get_c0_compare_int();
> + irq = get_c0_compare_int();
>
> cd = &per_cpu(mips_clockevent_device, cpu);
>
>
Download attachment "signature.asc" of type "application/pgp-signature" (820 bytes)
Powered by blists - more mailing lists