lkml.org 
[lkml]   [2015]   [Jul]   [13]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    /
    Date
    From
    SubjectRe: [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@google.com>

    Reviewed-by: James Hogan <james.hogan@imgtec.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);
    >
    >

    [unhandled content-type:application/pgp-signature]
    \
     
     \ /
      Last update: 2015-07-13 11:41    [W:2.420 / U:0.124 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site