From: David Daney <ddaney@caviumnetworks.com>
To: Guenter Roeck <guenter.roeck@ericsson.com>,
Ralf Baechle <ralf@linux-mips.org>
Cc: linux-mips@linux-mips.org
Subject: Re: [PATCH v6 01/01] Virtual memory size detection for 64 bit MIPS CPUs
Date: Tue, 02 Feb 2010 10:29:25 -0800 [thread overview]
Message-ID: <4B686F05.9090109@caviumnetworks.com> (raw)
In-Reply-To: <1265129540-10884-2-git-send-email-guenter.roeck@ericsson.com>
Guenter Roeck wrote:
> Linux kernel 2.6.32 and later allocates memory from the top of virtual memory
> space.
>
> This patch implements virtual memory size detection for 64 bit MIPS CPUs
> to avoid resulting crashes.
>
> Signed-off-by: Guenter Roeck <guenter.roeck@ericsson.com>
Reviewed-by: David Daney <ddaney@caviumnetworks.com>
> ---
> arch/mips/include/asm/cpu-features.h | 7 +++++++
> arch/mips/include/asm/cpu-info.h | 3 +++
> arch/mips/include/asm/pgtable-64.h | 4 +++-
> arch/mips/kernel/cpu-probe.c | 11 +++++++++++
> 4 files changed, 24 insertions(+), 1 deletions(-)
>
> diff --git a/arch/mips/include/asm/cpu-features.h b/arch/mips/include/asm/cpu-features.h
> index 1f4df64..e5835dd 100644
> --- a/arch/mips/include/asm/cpu-features.h
> +++ b/arch/mips/include/asm/cpu-features.h
> @@ -191,6 +191,9 @@
> # ifndef cpu_has_64bit_addresses
> # define cpu_has_64bit_addresses 0
> # endif
> +# ifndef cpu_vmbits
> +# define cpu_vmbits 31
> +# endif
> #endif
>
> #ifdef CONFIG_64BIT
> @@ -209,6 +212,10 @@
> # ifndef cpu_has_64bit_addresses
> # define cpu_has_64bit_addresses 1
> # endif
> +# ifndef cpu_vmbits
> +# define cpu_vmbits cpu_data[0].vmbits
> +# define __NEED_VMBITS_PROBE
> +# endif
> #endif
>
> #if defined(CONFIG_CPU_MIPSR2_IRQ_VI) && !defined(cpu_has_vint)
> diff --git a/arch/mips/include/asm/cpu-info.h b/arch/mips/include/asm/cpu-info.h
> index 1260443..b39def3 100644
> --- a/arch/mips/include/asm/cpu-info.h
> +++ b/arch/mips/include/asm/cpu-info.h
> @@ -58,6 +58,9 @@ struct cpuinfo_mips {
> struct cache_desc tcache; /* Tertiary/split secondary cache */
> int srsets; /* Shadow register sets */
> int core; /* physical core number */
> +#ifdef CONFIG_64BIT
> + int vmbits; /* Virtual memory size in bits */
> +#endif
> #if defined(CONFIG_MIPS_MT_SMP) || defined(CONFIG_MIPS_MT_SMTC)
> /*
> * In the MIPS MT "SMTC" model, each TC is considered
> diff --git a/arch/mips/include/asm/pgtable-64.h b/arch/mips/include/asm/pgtable-64.h
> index 9cd5089..8eda30b 100644
> --- a/arch/mips/include/asm/pgtable-64.h
> +++ b/arch/mips/include/asm/pgtable-64.h
> @@ -110,7 +110,9 @@
> #define VMALLOC_START MAP_BASE
> #define VMALLOC_END \
> (VMALLOC_START + \
> - PTRS_PER_PGD * PTRS_PER_PMD * PTRS_PER_PTE * PAGE_SIZE - (1UL << 32))
> + min(PTRS_PER_PGD * PTRS_PER_PMD * PTRS_PER_PTE * PAGE_SIZE, \
> + (1UL << cpu_vmbits)) - (1UL << 32))
> +
> #if defined(CONFIG_MODULES) && defined(KBUILD_64BIT_SYM32) && \
> VMALLOC_START != CKSSEG
> /* Load modules into 32bit-compatible segment. */
> diff --git a/arch/mips/kernel/cpu-probe.c b/arch/mips/kernel/cpu-probe.c
> index 7a51866..00d7124 100644
> --- a/arch/mips/kernel/cpu-probe.c
> +++ b/arch/mips/kernel/cpu-probe.c
> @@ -282,6 +282,15 @@ static inline int __cpu_has_fpu(void)
> return ((cpu_get_fpu_id() & 0xff00) != FPIR_IMP_NONE);
> }
>
> +static inline void cpu_probe_vmbits(struct cpuinfo_mips *c)
> +{
> +#ifdef __NEED_VMBITS_PROBE
> + write_c0_entryhi(0x3ffffffffffff000ULL);
> + back_to_back_c0_hazard();
> + c->vmbits = fls64(read_c0_entryhi() & 0x3ffffffffffff000ULL);
> +#endif
> +}
> +
> #define R4K_OPTS (MIPS_CPU_TLB | MIPS_CPU_4KEX | MIPS_CPU_4K_CACHE \
> | MIPS_CPU_COUNTER)
>
> @@ -967,6 +976,8 @@ __cpuinit void cpu_probe(void)
> c->srsets = ((read_c0_srsctl() >> 26) & 0x0f) + 1;
> else
> c->srsets = 1;
> +
> + cpu_probe_vmbits(c);
> }
>
> __cpuinit void cpu_report(void)
next prev parent reply other threads:[~2010-02-02 18:35 UTC|newest]
Thread overview: 5+ messages / expand[flat|nested] mbox.gz Atom feed top
2010-02-02 16:52 [PATCH v6 00/01] Virtual memory size detection for 64 bit MIPS CPUs Guenter Roeck
2010-02-02 16:52 ` [PATCH v6 01/01] " Guenter Roeck
2010-02-02 18:29 ` David Daney [this message]
2010-02-02 18:49 ` Ralf Baechle
2010-02-02 17:50 ` [PATCH v6 00/01] " Ralf Baechle
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=4B686F05.9090109@caviumnetworks.com \
--to=ddaney@caviumnetworks.com \
--cc=guenter.roeck@ericsson.com \
--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.