From: James Hogan <james.hogan@imgtec.com>
To: Bjorn Helgaas <bhelgaas@google.com>, Ralf Baechle <ralf@linux-mips.org>
Cc: Andrew Bresticker <abrestic@chromium.org>,
<linux-mips@linux-mips.org>, <linux-kernel@vger.kernel.org>
Subject: Re: [PATCH 8/9] MIPS: Remove "weak" from mips_cdmm_phys_base() declaration
Date: Mon, 13 Jul 2015 10:20:16 +0100 [thread overview]
Message-ID: <55A382D0.9080208@imgtec.com> (raw)
In-Reply-To: <20150712231154.11177.57126.stgit@bhelgaas-glaptop2.roam.corp.google.com>
[-- Attachment #1: Type: text/plain, Size: 3752 bytes --]
Hi Bjorn,
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")).
>
> mips_cdmm_phys_base() is defined only in arch/mips/mti-malta/malta-memory.c
> so 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 mips_cdmm_phys_base() definition and remove the weak annotation
> from the declaration in arch/mips/include/asm/cdmm.h.
>
> Signed-off-by: Bjorn Helgaas <bhelgaas@google.com>
> CC: James Hogan <james.hogan@imgtec.com>
Reviewed-by: James Hogan <james.hogan@imgtec.com>
Thanks for pointing out these problems. Hopefully eventually some of
these uses of weak symbols can be moved to device tree (its almost like
we need a DT binding for "this physical address isn't used for anything,
and would be suitable for an overlay").
Cheers
James
> ---
> arch/mips/include/asm/cdmm.h | 4 ++--
> drivers/bus/mips_cdmm.c | 14 +++++++++++++-
> 2 files changed, 15 insertions(+), 3 deletions(-)
>
> diff --git a/arch/mips/include/asm/cdmm.h b/arch/mips/include/asm/cdmm.h
> index 16e22ce..bece206 100644
> --- a/arch/mips/include/asm/cdmm.h
> +++ b/arch/mips/include/asm/cdmm.h
> @@ -53,7 +53,7 @@ struct mips_cdmm_driver {
> * mips_cdmm_phys_base() - Choose a physical base address for CDMM region.
> *
> * Picking a suitable physical address at which to map the CDMM region is
> - * platform specific, so this weak function can be defined by platform code to
> + * platform specific, so this function can be defined by platform code to
> * pick a suitable value if none is configured by the bootloader.
> *
> * This address must be 32kB aligned, and the region occupies a maximum of 32kB
> @@ -61,7 +61,7 @@ struct mips_cdmm_driver {
> *
> * Returns: Physical base address for CDMM region, or 0 on failure.
> */
> -phys_addr_t __weak mips_cdmm_phys_base(void);
> +phys_addr_t mips_cdmm_phys_base(void);
>
> extern struct bus_type mips_cdmm_bustype;
> void __iomem *mips_cdmm_early_probe(unsigned int dev_type);
> diff --git a/drivers/bus/mips_cdmm.c b/drivers/bus/mips_cdmm.c
> index ab3bde1..1c543ef 100644
> --- a/drivers/bus/mips_cdmm.c
> +++ b/drivers/bus/mips_cdmm.c
> @@ -332,6 +332,18 @@ static phys_addr_t mips_cdmm_cur_base(void)
> }
>
> /**
> + * mips_cdmm_phys_base() - Choose a physical base address for CDMM region.
> + *
> + * Picking a suitable physical address at which to map the CDMM region is
> + * platform specific, so this weak function can be overridden by platform
> + * code to pick a suitable value if none is configured by the bootloader.
> + */
> +phys_addr_t __weak mips_cdmm_phys_base(void)
> +{
> + return 0;
> +}
> +
> +/**
> * mips_cdmm_setup() - Ensure the CDMM bus is initialised and usable.
> * @bus: Pointer to bus information for current CPU.
> * IS_ERR(bus) is checked, so no need for caller to check.
> @@ -368,7 +380,7 @@ static int mips_cdmm_setup(struct mips_cdmm_bus *bus)
> if (!bus->phys)
> bus->phys = mips_cdmm_cur_base();
> /* Otherwise, ask platform code for suggestions */
> - if (!bus->phys && mips_cdmm_phys_base)
> + if (!bus->phys)
> bus->phys = mips_cdmm_phys_base();
> /* Otherwise, copy what other CPUs have done */
> if (!bus->phys)
>
[-- Attachment #2: OpenPGP digital signature --]
[-- Type: application/pgp-signature, Size: 819 bytes --]
WARNING: multiple messages have this Message-ID (diff)
From: James Hogan <james.hogan@imgtec.com>
To: Bjorn Helgaas <bhelgaas@google.com>, Ralf Baechle <ralf@linux-mips.org>
Cc: Andrew Bresticker <abrestic@chromium.org>,
linux-mips@linux-mips.org, linux-kernel@vger.kernel.org
Subject: Re: [PATCH 8/9] MIPS: Remove "weak" from mips_cdmm_phys_base() declaration
Date: Mon, 13 Jul 2015 10:20:16 +0100 [thread overview]
Message-ID: <55A382D0.9080208@imgtec.com> (raw)
Message-ID: <20150713092016.oel1ASWO8s3OHF7qFw2LExmzNi6Z5VcsqHu7koBvDJ4@z> (raw)
In-Reply-To: <20150712231154.11177.57126.stgit@bhelgaas-glaptop2.roam.corp.google.com>
[-- Attachment #1: Type: text/plain, Size: 3752 bytes --]
Hi Bjorn,
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")).
>
> mips_cdmm_phys_base() is defined only in arch/mips/mti-malta/malta-memory.c
> so 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 mips_cdmm_phys_base() definition and remove the weak annotation
> from the declaration in arch/mips/include/asm/cdmm.h.
>
> Signed-off-by: Bjorn Helgaas <bhelgaas@google.com>
> CC: James Hogan <james.hogan@imgtec.com>
Reviewed-by: James Hogan <james.hogan@imgtec.com>
Thanks for pointing out these problems. Hopefully eventually some of
these uses of weak symbols can be moved to device tree (its almost like
we need a DT binding for "this physical address isn't used for anything,
and would be suitable for an overlay").
Cheers
James
> ---
> arch/mips/include/asm/cdmm.h | 4 ++--
> drivers/bus/mips_cdmm.c | 14 +++++++++++++-
> 2 files changed, 15 insertions(+), 3 deletions(-)
>
> diff --git a/arch/mips/include/asm/cdmm.h b/arch/mips/include/asm/cdmm.h
> index 16e22ce..bece206 100644
> --- a/arch/mips/include/asm/cdmm.h
> +++ b/arch/mips/include/asm/cdmm.h
> @@ -53,7 +53,7 @@ struct mips_cdmm_driver {
> * mips_cdmm_phys_base() - Choose a physical base address for CDMM region.
> *
> * Picking a suitable physical address at which to map the CDMM region is
> - * platform specific, so this weak function can be defined by platform code to
> + * platform specific, so this function can be defined by platform code to
> * pick a suitable value if none is configured by the bootloader.
> *
> * This address must be 32kB aligned, and the region occupies a maximum of 32kB
> @@ -61,7 +61,7 @@ struct mips_cdmm_driver {
> *
> * Returns: Physical base address for CDMM region, or 0 on failure.
> */
> -phys_addr_t __weak mips_cdmm_phys_base(void);
> +phys_addr_t mips_cdmm_phys_base(void);
>
> extern struct bus_type mips_cdmm_bustype;
> void __iomem *mips_cdmm_early_probe(unsigned int dev_type);
> diff --git a/drivers/bus/mips_cdmm.c b/drivers/bus/mips_cdmm.c
> index ab3bde1..1c543ef 100644
> --- a/drivers/bus/mips_cdmm.c
> +++ b/drivers/bus/mips_cdmm.c
> @@ -332,6 +332,18 @@ static phys_addr_t mips_cdmm_cur_base(void)
> }
>
> /**
> + * mips_cdmm_phys_base() - Choose a physical base address for CDMM region.
> + *
> + * Picking a suitable physical address at which to map the CDMM region is
> + * platform specific, so this weak function can be overridden by platform
> + * code to pick a suitable value if none is configured by the bootloader.
> + */
> +phys_addr_t __weak mips_cdmm_phys_base(void)
> +{
> + return 0;
> +}
> +
> +/**
> * mips_cdmm_setup() - Ensure the CDMM bus is initialised and usable.
> * @bus: Pointer to bus information for current CPU.
> * IS_ERR(bus) is checked, so no need for caller to check.
> @@ -368,7 +380,7 @@ static int mips_cdmm_setup(struct mips_cdmm_bus *bus)
> if (!bus->phys)
> bus->phys = mips_cdmm_cur_base();
> /* Otherwise, ask platform code for suggestions */
> - if (!bus->phys && mips_cdmm_phys_base)
> + if (!bus->phys)
> bus->phys = mips_cdmm_phys_base();
> /* Otherwise, copy what other CPUs have done */
> if (!bus->phys)
>
[-- Attachment #2: OpenPGP digital signature --]
[-- Type: application/pgp-signature, Size: 819 bytes --]
next prev parent reply other threads:[~2015-07-13 9:20 UTC|newest]
Thread overview: 26+ messages / expand[flat|nested] mbox.gz Atom feed top
2015-07-12 23:10 [PATCH 0/9] MIPS: Remove "weak" usage Bjorn Helgaas
2015-07-12 23:10 ` [PATCH 1/9] MIPS: CPC: Remove "weak" from mips_cpc_phys_base() and make it static Bjorn Helgaas
2015-07-12 23:11 ` [PATCH 2/9] MIPS: Remove "weak" from platform_maar_init() declaration Bjorn Helgaas
2015-07-13 9:46 ` James Hogan
2015-07-13 9:46 ` James Hogan
2015-07-12 23:11 ` [PATCH 3/9] MIPS: VPE: Exit vpe_release() early if vpe_run() isn't defined Bjorn Helgaas
2015-07-12 23:11 ` [PATCH 4/9] MIPS: MT: Remove "weak" from vpe_run() declaration Bjorn Helgaas
2015-07-13 10:27 ` James Hogan
2015-07-13 10:27 ` James Hogan
2015-07-13 21:35 ` Bjorn Helgaas
2015-07-12 23:11 ` [PATCH 5/9] MIPS: Remove "weak" from get_c0_perfcount_int() declaration Bjorn Helgaas
2015-07-13 9:43 ` James Hogan
2015-07-13 9:43 ` James Hogan
2015-07-13 21:13 ` Bjorn Helgaas
2015-07-12 23:11 ` [PATCH 6/9] MIPS: Remove "weak" from get_c0_compare_int() declaration Bjorn Helgaas
2015-07-13 9:36 ` James Hogan
2015-07-13 9:36 ` James Hogan
2015-07-12 23:11 ` [PATCH 7/9] MIPS: Remove "weak" from get_c0_fdc_int() declaration Bjorn Helgaas
2015-07-13 9:31 ` James Hogan
2015-07-13 9:31 ` James Hogan
2015-07-12 23:11 ` [PATCH 8/9] MIPS: Remove "weak" from mips_cdmm_phys_base() declaration Bjorn Helgaas
2015-07-13 9:20 ` James Hogan [this message]
2015-07-13 9:20 ` James Hogan
2015-07-12 23:12 ` [PATCH 9/9] MIPS: Remove "__weak" definition from arch-specific linkage.h Bjorn Helgaas
2015-07-13 10:08 ` James Hogan
2015-07-13 10:08 ` James Hogan
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=55A382D0.9080208@imgtec.com \
--to=james.hogan@imgtec.com \
--cc=abrestic@chromium.org \
--cc=bhelgaas@google.com \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-mips@linux-mips.org \
--cc=ralf@linux-mips.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.