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