On Thu, Oct 14, 2010 at 21:36, David Daney <ddaney@caviumnetworks.com> wrote:
> Just do what everyone else is doing by placing __read_mostly things in
> the .data.read_mostly section.
>
> mips_io_port_base can not be read-only (const) and writable
> (__read_mostly) at the same time. One of them has to go, so I chose
> to eliminate the __read_mostly. It will still get stuck in a portion
> of memory that is not adjacent to things that are written, and thus
> not be on a dirty cache line, for whatever that is worth.
>
> Signed-off-by: David Daney <ddaney@caviumnetworks.com>
> ---
> arch/mips/include/asm/cache.h | 2 ++
> arch/mips/kernel/setup.c | 2 +-
> 2 files changed, 3 insertions(+), 1 deletions(-)
>
> diff --git a/arch/mips/include/asm/cache.h b/arch/mips/include/asm/cache.h
> index 37f175c..650ac9b 100644
> --- a/arch/mips/include/asm/cache.h
> +++ b/arch/mips/include/asm/cache.h
> @@ -17,4 +17,6 @@
> #define SMP_CACHE_SHIFT L1_CACHE_SHIFT
> #define SMP_CACHE_BYTES L1_CACHE_BYTES
>
> +#define __read_mostly __attribute__((__section__(".data.read_mostly")))
> +
> #endif /* _ASM_CACHE_H */
> diff --git a/arch/mips/kernel/setup.c b/arch/mips/kernel/setup.c
> index 4e68a51..6d0c3be 100644
> --- a/arch/mips/kernel/setup.c
> +++ b/arch/mips/kernel/setup.c
> @@ -69,7 +69,7 @@ static char __initdata builtin_cmdline[COMMAND_LINE_SIZE] =
> CONFIG_CMDLINE;
> * mips_io_port_base is the begin of the address space to which x86 style
> * I/O ports are mapped.
> */
> -const unsigned long mips_io_port_base __read_mostly = -1;
> +const unsigned long mips_io_port_base = -1;
> EXPORT_SYMBOL(mips_io_port_base);
Ugh. So as soon as someone implements MMU protection for the read-only data
section, it'll break silently?
Gr{oetje,eeting}s,
Geert
--
Geert Uytterhoeven -- There's lots of Linux beyond ia32 -- geert@linux-m68k.org
In personal conversations with technical people, I call myself a hacker. But
when I'm talking to journalists I just say "programmer" or something like that.
-- Linus Torvalds
|