Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]


Groups > linux.kernel > #1182443 > unrolled thread

[PATCH 6/9] MIPS: Remove "weak" from get_c0_compare_int() declaration

Started byBjorn Helgaas <bhelgaas@google.com>
First post2015-07-13 01:20 +0200
Last post2015-07-13 11:40 +0200
Articles 2 — 2 participants

Back to article view | Back to linux.kernel

This discussion starts older than the indexed window; earlier articles aren't shown. The article labeled Started by below is the oldest one visible, not the original post.


Contents

  [PATCH 6/9] MIPS: Remove "weak" from get_c0_compare_int()  declaration Bjorn Helgaas <bhelgaas@google.com> - 2015-07-13 01:20 +0200
    Re: [PATCH 6/9] MIPS: Remove "weak" from get_c0_compare_int() declaration James Hogan <james.hogan@imgtec.com> - 2015-07-13 11:40 +0200

#1182443 — [PATCH 6/9] MIPS: Remove "weak" from get_c0_compare_int() declaration

FromBjorn Helgaas <bhelgaas@google.com>
Date2015-07-13 01:20 +0200
Subject[PATCH 6/9] MIPS: Remove "weak" from get_c0_compare_int() declaration
Message-ID<pLyHn-5YP-1@gated-at.bofh.it>
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>
---
 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);
 

--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/

[toc] | [next] | [standalone]


#1182636 — Re: [PATCH 6/9] MIPS: Remove "weak" from get_c0_compare_int() declaration

FromJames Hogan <james.hogan@imgtec.com>
Date2015-07-13 11:40 +0200
SubjectRe: [PATCH 6/9] MIPS: Remove "weak" from get_c0_compare_int() declaration
Message-ID<pLIno-3kU-1@gated-at.bofh.it>
In reply to#1182443

[Multipart message — attachments visible in raw view] — view raw

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);
>  
> 

[toc] | [prev] | [standalone]


Back to top | Article view | linux.kernel


csiph-web