Re: [PATCH 7/9] MIPS: Remove "weak" from get_c0_fdc_int() declaration

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



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_fdc_int() is defined only in arch/mips/mti-malta/malta-time.c so

well, until 6b5e741e9a83 ("MIPS: Pistachio: Support CDMM & Fast Debug
Channel") in v4.2-rc2 ;-)

> there's no problem with multiple definitions.  But it works better to have
> a weak default implementation and allow a strong function to override it.
> Then we don't have to test whether a definition is present, and if there
> are ever multiple strong definitions, we get a link error instead of
> calling a random definition.
> 
> Add a weak get_c0_fdc_int() definition with the default code and remove the
> weak annotation from the declaration.
> 
> Signed-off-by: Bjorn Helgaas <bhelgaas@xxxxxxxxxx>
> CC: James Hogan <james.hogan@xxxxxxxxxx>

Reviewed-by: James Hogan <james.hogan@xxxxxxxxxx>

Thanks
James

> ---
>  arch/mips/include/asm/irq.h  |    2 +-
>  drivers/tty/mips_ejtag_fdc.c |    9 ++++++---
>  2 files changed, 7 insertions(+), 4 deletions(-)
> 
> diff --git a/arch/mips/include/asm/irq.h b/arch/mips/include/asm/irq.h
> index f0db99f8..15e0fec 100644
> --- a/arch/mips/include/asm/irq.h
> +++ b/arch/mips/include/asm/irq.h
> @@ -49,7 +49,7 @@ extern int cp0_compare_irq_shift;
>  extern int cp0_perfcount_irq;
>  extern int cp0_fdc_irq;
>  
> -extern int __weak get_c0_fdc_int(void);
> +extern int get_c0_fdc_int(void);
>  
>  void arch_trigger_all_cpu_backtrace(bool);
>  #define arch_trigger_all_cpu_backtrace arch_trigger_all_cpu_backtrace
> diff --git a/drivers/tty/mips_ejtag_fdc.c b/drivers/tty/mips_ejtag_fdc.c
> index 358323c..a8c8cfd 100644
> --- a/drivers/tty/mips_ejtag_fdc.c
> +++ b/drivers/tty/mips_ejtag_fdc.c
> @@ -879,6 +879,11 @@ static const struct tty_operations mips_ejtag_fdc_tty_ops = {
>  	.chars_in_buffer	= mips_ejtag_fdc_tty_chars_in_buffer,
>  };
>  
> +int __weak get_c0_fdc_int(void)
> +{
> +	return -1;
> +}
> +
>  static int mips_ejtag_fdc_tty_probe(struct mips_cdmm_device *dev)
>  {
>  	int ret, nport;
> @@ -967,9 +972,7 @@ static int mips_ejtag_fdc_tty_probe(struct mips_cdmm_device *dev)
>  	wake_up_process(priv->thread);
>  
>  	/* Look for an FDC IRQ */
> -	priv->irq = -1;
> -	if (get_c0_fdc_int)
> -		priv->irq = get_c0_fdc_int();
> +	priv->irq = get_c0_fdc_int();
>  
>  	/* Try requesting the IRQ */
>  	if (priv->irq >= 0) {
> 

Attachment: signature.asc
Description: OpenPGP digital signature


[Index of Archives]     [Linux MIPS Home]     [LKML Archive]     [Linux ARM Kernel]     [Linux ARM]     [Linux]     [Git]     [Yosemite News]     [Linux SCSI]     [Linux Hams]

  Powered by Linux