Re: [PATCH 05/14] all-archs: consolidate .data section definition in asm-generic

2007-05-18 Thread Sam Ravnborg
On Fri, May 18, 2007 at 03:21:26AM -0700, David Miller wrote:
> From: Sam Ravnborg <[EMAIL PROTECTED]>
> Date: Fri, 18 May 2007 11:42:31 +0200
> 
> > On Fri, May 18, 2007 at 12:16:04AM -0700, David Miller wrote:
> > > 
> > > Looking at these patches reminds me of a quirk in the generic
> > > RODATA definition:
> > > 
> > > >  #define RODATA 
> > > > \
> > > > . = ALIGN(4096);
> > > > \
> > > > .rodata   : AT(ADDR(.rodata) - LOAD_OFFSET) {   
> > > > \
> > > 
> > > It uses ALIGN(4096) which is likely supposed to be something
> > > like ALIGN(PAGE_SIZE).  Perhaps we should handle this by
> > > definiting a LD_PAGE_SIZE at the top of vmlinux.ld.S files
> > > that need a value other than 4096, and define the default of
> > > 4096 in asm-generic/vmlinux.lds.h?
> > 
> > I would much rather use PAGE_SIZE direct since we have access to that 
> > symbol.
> 
> I completely agree, that seems to be what platforms which have
> a configurable page size such as powerpc, ia64, etc. are already
> using in their vmlinux.lds.S files, and I'll likely follow suit on
> sparc64. :-)

If you hold of a bit I would like to use sparc64 as template for
a bit more consolidation.
Most likely I will try to consolidate vmlinux.lds for sparc64 and ARM
at the same time and then take the other arch's one by one.

In the process the vmlinux.lds will start to use a consistent
indenting like the following.

Sample diff only on top of -linus.
I will redo it when I have my current patch-set applied.

Sam

diff --git a/arch/sparc64/kernel/vmlinux.lds.S 
b/arch/sparc64/kernel/vmlinux.lds.S
index 13fa2a2..e9469ea 100644
--- a/arch/sparc64/kernel/vmlinux.lds.S
+++ b/arch/sparc64/kernel/vmlinux.lds.S
@@ -9,105 +9,149 @@ ENTRY(_start)
 jiffies = jiffies_64;
 SECTIONS
 {
-  swapper_low_pmd_dir = 0x00402000;
-  . = 0x4000;
-  .text 0x00404000 :
-  {
-_text = .;
-*(.text)
-SCHED_TEXT
-LOCK_TEXT
-KPROBES_TEXT
-*(.gnu.warning)
-  } =0
-  _etext = .;
-  PROVIDE (etext = .);
-
-  RODATA
-
-  .data:
-  {
-*(.data)
-CONSTRUCTORS
-  }
-  .data1   : { *(.data1) }
-  . = ALIGN(64);
-  .data.cacheline_aligned : { *(.data.cacheline_aligned) }
-  . = ALIGN(64);
-  .data.read_mostly : { *(.data.read_mostly) }
-  _edata  =  .;
-  PROVIDE (edata = .);
-  .fixup   : { *(.fixup) }
-
-  . = ALIGN(16);
-  __start___ex_table = .;
-  __ex_table : { *(__ex_table) }
-  __stop___ex_table = .;
-
-  . = ALIGN(8192);
-  __init_begin = .;
-  .init.text : { 
-   _sinittext = .;
-   *(.init.text)
-   _einittext = .;
-  }
-  .init.data : { *(.init.data) }
-  . = ALIGN(16);
-  __setup_start = .;
-  .init.setup : { *(.init.setup) }
-  __setup_end = .;
-  __initcall_start = .;
-  .initcall.init : {
-   INITCALLS
-  }
-  __initcall_end = .;
-  __con_initcall_start = .;
-  .con_initcall.init : { *(.con_initcall.init) }
-  __con_initcall_end = .;
-  SECURITY_INIT
-  . = ALIGN(4);
-  __tsb_ldquad_phys_patch = .;
-  .tsb_ldquad_phys_patch : { *(.tsb_ldquad_phys_patch) }
-  __tsb_ldquad_phys_patch_end = .;
-  __tsb_phys_patch = .;
-  .tsb_phys_patch : { *(.tsb_phys_patch) }
-  __tsb_phys_patch_end = .;
-  __cpuid_patch = .;
-  .cpuid_patch : { *(.cpuid_patch) }
-  __cpuid_patch_end = .;
-  __sun4v_1insn_patch = .;
-  .sun4v_1insn_patch : { *(.sun4v_1insn_patch) }
-  __sun4v_1insn_patch_end = .;
-  __sun4v_2insn_patch = .;
-  .sun4v_2insn_patch : { *(.sun4v_2insn_patch) }
-  __sun4v_2insn_patch_end = .;
+   swapper_low_pmd_dir = 0x00402000;
+   . = 0x4000;
+   .text 0x00404000 : {
+   _text = .;
+   *(.text)
+   SCHED_TEXT
+   LOCK_TEXT
+   KPROBES_TEXT
+   *(.gnu.warning)
+   } =0
+   _etext = .;
+   PROVIDE (etext = .);
+
+   RODATA
+
+   .data : {
+   *(.data)
+   CONSTRUCTORS
+   }
+   .data1 : {
+   *(.data1)
+   }
+
+   . = ALIGN(64);
+   .data.cacheline_aligned : {
+   *(.data.cacheline_aligned)
+   }
+
+   . = ALIGN(64);
+   .data.read_mostly : {
+   *(.data.read_mostly)
+   }
+   _edata  =  .;
+   PROVIDE (edata = .);
+   .fixup : {
+   *(.fixup)
+   }
+
+   . = ALIGN(16);
+   __start___ex_table = .;
+   __ex_table : {
+   *(__ex_table)
+   }
+   __stop___ex_table = .;
+
+   . = ALIGN(8192);
+   __init_begin = .;
+   .init.text : {
+   _sinittext = .;
+   *(.init.text)
+   _einittext = .;
+   }
+
+   .init.data : {
+   *(.init.data)
+   }
+
+   . = ALIGN(16);
+   __setup_start = .;
+   .init.setup : {
+   *(.init.setup)
+   }
+   __setup_end = .;
+
+   __initcall_start = .;
+   .initcall.init : {

Re: [PATCH 05/14] all-archs: consolidate .data section definition in asm-generic

2007-05-18 Thread David Miller
From: Sam Ravnborg <[EMAIL PROTECTED]>
Date: Fri, 18 May 2007 11:42:31 +0200

> On Fri, May 18, 2007 at 12:16:04AM -0700, David Miller wrote:
> > 
> > Looking at these patches reminds me of a quirk in the generic
> > RODATA definition:
> > 
> > >  #define RODATA   
> > > \
> > >   . = ALIGN(4096);\
> > >   .rodata   : AT(ADDR(.rodata) - LOAD_OFFSET) {   \
> > 
> > It uses ALIGN(4096) which is likely supposed to be something
> > like ALIGN(PAGE_SIZE).  Perhaps we should handle this by
> > definiting a LD_PAGE_SIZE at the top of vmlinux.ld.S files
> > that need a value other than 4096, and define the default of
> > 4096 in asm-generic/vmlinux.lds.h?
> 
> I would much rather use PAGE_SIZE direct since we have access to that symbol.

I completely agree, that seems to be what platforms which have
a configurable page size such as powerpc, ia64, etc. are already
using in their vmlinux.lds.S files, and I'll likely follow suit on
sparc64. :-)

> > If you could take care of this I'd really appreciate it.
> Will do.
> And may expend the effort a bit further when attacking the .lds files.
> 
> It will be a week or two before I get at it.

Thanks a lot.
-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/


Re: [PATCH 05/14] all-archs: consolidate .data section definition in asm-generic

2007-05-18 Thread Sam Ravnborg
On Fri, May 18, 2007 at 12:16:04AM -0700, David Miller wrote:
> 
> Looking at these patches reminds me of a quirk in the generic
> RODATA definition:
> 
> >  #define RODATA 
> > \
> > . = ALIGN(4096);\
> > .rodata   : AT(ADDR(.rodata) - LOAD_OFFSET) {   \
> 
> It uses ALIGN(4096) which is likely supposed to be something
> like ALIGN(PAGE_SIZE).  Perhaps we should handle this by
> definiting a LD_PAGE_SIZE at the top of vmlinux.ld.S files
> that need a value other than 4096, and define the default of
> 4096 in asm-generic/vmlinux.lds.h?

I would much rather use PAGE_SIZE direct since we have access to that symbol.
I would require a small modification in most asm-*/page.h files
so ld can parse them:

#define PAGE_SIZE (1UL << PAGE_SHIFT)
will become
#define PAGE_SIZE (_AC(1,UL) << PAGE_SHIFT)

This will allow the arch's to use that symbol in assembler too
which is a win.

Then we could do something like:

#define RODATA(alignment)   \
ALIGN(alignment)\

And on the call site we will most likely use

RODATA(PAGE_SIZE)

But the architecture can override it.
Full flexibility and acceptable documentation.

> 
> If you could take care of this I'd really appreciate it.
Will do.
And may expend the effort a bit further when attacking the .lds files.

It will be a week or two before I get at it.

Sam
-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/


Re: [PATCH 05/14] all-archs: consolidate .data section definition in asm-generic

2007-05-18 Thread David Miller
From: Sam Ravnborg <[EMAIL PROTECTED]>
Date: Fri, 18 May 2007 08:52:57 +0200

> >From 653bc43c6c2c292e6abc98860fd241eb12e2c80f Mon Sep 17 00:00:00 2001
> From: Sam Ravnborg <[EMAIL PROTECTED]>
> Date: Thu, 17 May 2007 13:38:44 +0200
> Subject: [PATCH 05/14] all-archs: consolidate .data section definition in 
> asm-generic
> 
> With this consolidation we can now modify the .data
> section definition in one spot for all archs.
> 
> Signed-off-by: Sam Ravnborg <[EMAIL PROTECTED]>

Thanks for doing these kinds of consolidations Sam, most of
us arch maintainers really appreciate it.

Looking at these patches reminds me of a quirk in the generic
RODATA definition:

>  #define RODATA   
> \
>   . = ALIGN(4096);\
>   .rodata   : AT(ADDR(.rodata) - LOAD_OFFSET) {   \

It uses ALIGN(4096) which is likely supposed to be something
like ALIGN(PAGE_SIZE).  Perhaps we should handle this by
definiting a LD_PAGE_SIZE at the top of vmlinux.ld.S files
that need a value other than 4096, and define the default of
4096 in asm-generic/vmlinux.lds.h?

If you could take care of this I'd really appreciate it.
-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/


Re: [PATCH 05/14] all-archs: consolidate .data section definition in asm-generic

2007-05-18 Thread David Miller
From: Sam Ravnborg [EMAIL PROTECTED]
Date: Fri, 18 May 2007 08:52:57 +0200

 From 653bc43c6c2c292e6abc98860fd241eb12e2c80f Mon Sep 17 00:00:00 2001
 From: Sam Ravnborg [EMAIL PROTECTED]
 Date: Thu, 17 May 2007 13:38:44 +0200
 Subject: [PATCH 05/14] all-archs: consolidate .data section definition in 
 asm-generic
 
 With this consolidation we can now modify the .data
 section definition in one spot for all archs.
 
 Signed-off-by: Sam Ravnborg [EMAIL PROTECTED]

Thanks for doing these kinds of consolidations Sam, most of
us arch maintainers really appreciate it.

Looking at these patches reminds me of a quirk in the generic
RODATA definition:

  #define RODATA   
 \
   . = ALIGN(4096);\
   .rodata   : AT(ADDR(.rodata) - LOAD_OFFSET) {   \

It uses ALIGN(4096) which is likely supposed to be something
like ALIGN(PAGE_SIZE).  Perhaps we should handle this by
definiting a LD_PAGE_SIZE at the top of vmlinux.ld.S files
that need a value other than 4096, and define the default of
4096 in asm-generic/vmlinux.lds.h?

If you could take care of this I'd really appreciate it.
-
To unsubscribe from this list: send the line unsubscribe linux-kernel in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/


Re: [PATCH 05/14] all-archs: consolidate .data section definition in asm-generic

2007-05-18 Thread Sam Ravnborg
On Fri, May 18, 2007 at 12:16:04AM -0700, David Miller wrote:
 
 Looking at these patches reminds me of a quirk in the generic
 RODATA definition:
 
   #define RODATA 
  \
  . = ALIGN(4096);\
  .rodata   : AT(ADDR(.rodata) - LOAD_OFFSET) {   \
 
 It uses ALIGN(4096) which is likely supposed to be something
 like ALIGN(PAGE_SIZE).  Perhaps we should handle this by
 definiting a LD_PAGE_SIZE at the top of vmlinux.ld.S files
 that need a value other than 4096, and define the default of
 4096 in asm-generic/vmlinux.lds.h?

I would much rather use PAGE_SIZE direct since we have access to that symbol.
I would require a small modification in most asm-*/page.h files
so ld can parse them:

#define PAGE_SIZE (1UL  PAGE_SHIFT)
will become
#define PAGE_SIZE (_AC(1,UL)  PAGE_SHIFT)

This will allow the arch's to use that symbol in assembler too
which is a win.

Then we could do something like:

#define RODATA(alignment)   \
ALIGN(alignment)\

And on the call site we will most likely use

RODATA(PAGE_SIZE)

But the architecture can override it.
Full flexibility and acceptable documentation.

 
 If you could take care of this I'd really appreciate it.
Will do.
And may expend the effort a bit further when attacking the .lds files.

It will be a week or two before I get at it.

Sam
-
To unsubscribe from this list: send the line unsubscribe linux-kernel in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/


Re: [PATCH 05/14] all-archs: consolidate .data section definition in asm-generic

2007-05-18 Thread David Miller
From: Sam Ravnborg [EMAIL PROTECTED]
Date: Fri, 18 May 2007 11:42:31 +0200

 On Fri, May 18, 2007 at 12:16:04AM -0700, David Miller wrote:
  
  Looking at these patches reminds me of a quirk in the generic
  RODATA definition:
  
#define RODATA   
   \
 . = ALIGN(4096);\
 .rodata   : AT(ADDR(.rodata) - LOAD_OFFSET) {   \
  
  It uses ALIGN(4096) which is likely supposed to be something
  like ALIGN(PAGE_SIZE).  Perhaps we should handle this by
  definiting a LD_PAGE_SIZE at the top of vmlinux.ld.S files
  that need a value other than 4096, and define the default of
  4096 in asm-generic/vmlinux.lds.h?
 
 I would much rather use PAGE_SIZE direct since we have access to that symbol.

I completely agree, that seems to be what platforms which have
a configurable page size such as powerpc, ia64, etc. are already
using in their vmlinux.lds.S files, and I'll likely follow suit on
sparc64. :-)

  If you could take care of this I'd really appreciate it.
 Will do.
 And may expend the effort a bit further when attacking the .lds files.
 
 It will be a week or two before I get at it.

Thanks a lot.
-
To unsubscribe from this list: send the line unsubscribe linux-kernel in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/


Re: [PATCH 05/14] all-archs: consolidate .data section definition in asm-generic

2007-05-18 Thread Sam Ravnborg
On Fri, May 18, 2007 at 03:21:26AM -0700, David Miller wrote:
 From: Sam Ravnborg [EMAIL PROTECTED]
 Date: Fri, 18 May 2007 11:42:31 +0200
 
  On Fri, May 18, 2007 at 12:16:04AM -0700, David Miller wrote:
   
   Looking at these patches reminds me of a quirk in the generic
   RODATA definition:
   
 #define RODATA 
\
. = ALIGN(4096);
\
.rodata   : AT(ADDR(.rodata) - LOAD_OFFSET) {   
\
   
   It uses ALIGN(4096) which is likely supposed to be something
   like ALIGN(PAGE_SIZE).  Perhaps we should handle this by
   definiting a LD_PAGE_SIZE at the top of vmlinux.ld.S files
   that need a value other than 4096, and define the default of
   4096 in asm-generic/vmlinux.lds.h?
  
  I would much rather use PAGE_SIZE direct since we have access to that 
  symbol.
 
 I completely agree, that seems to be what platforms which have
 a configurable page size such as powerpc, ia64, etc. are already
 using in their vmlinux.lds.S files, and I'll likely follow suit on
 sparc64. :-)

If you hold of a bit I would like to use sparc64 as template for
a bit more consolidation.
Most likely I will try to consolidate vmlinux.lds for sparc64 and ARM
at the same time and then take the other arch's one by one.

In the process the vmlinux.lds will start to use a consistent
indenting like the following.

Sample diff only on top of -linus.
I will redo it when I have my current patch-set applied.

Sam

diff --git a/arch/sparc64/kernel/vmlinux.lds.S 
b/arch/sparc64/kernel/vmlinux.lds.S
index 13fa2a2..e9469ea 100644
--- a/arch/sparc64/kernel/vmlinux.lds.S
+++ b/arch/sparc64/kernel/vmlinux.lds.S
@@ -9,105 +9,149 @@ ENTRY(_start)
 jiffies = jiffies_64;
 SECTIONS
 {
-  swapper_low_pmd_dir = 0x00402000;
-  . = 0x4000;
-  .text 0x00404000 :
-  {
-_text = .;
-*(.text)
-SCHED_TEXT
-LOCK_TEXT
-KPROBES_TEXT
-*(.gnu.warning)
-  } =0
-  _etext = .;
-  PROVIDE (etext = .);
-
-  RODATA
-
-  .data:
-  {
-*(.data)
-CONSTRUCTORS
-  }
-  .data1   : { *(.data1) }
-  . = ALIGN(64);
-  .data.cacheline_aligned : { *(.data.cacheline_aligned) }
-  . = ALIGN(64);
-  .data.read_mostly : { *(.data.read_mostly) }
-  _edata  =  .;
-  PROVIDE (edata = .);
-  .fixup   : { *(.fixup) }
-
-  . = ALIGN(16);
-  __start___ex_table = .;
-  __ex_table : { *(__ex_table) }
-  __stop___ex_table = .;
-
-  . = ALIGN(8192);
-  __init_begin = .;
-  .init.text : { 
-   _sinittext = .;
-   *(.init.text)
-   _einittext = .;
-  }
-  .init.data : { *(.init.data) }
-  . = ALIGN(16);
-  __setup_start = .;
-  .init.setup : { *(.init.setup) }
-  __setup_end = .;
-  __initcall_start = .;
-  .initcall.init : {
-   INITCALLS
-  }
-  __initcall_end = .;
-  __con_initcall_start = .;
-  .con_initcall.init : { *(.con_initcall.init) }
-  __con_initcall_end = .;
-  SECURITY_INIT
-  . = ALIGN(4);
-  __tsb_ldquad_phys_patch = .;
-  .tsb_ldquad_phys_patch : { *(.tsb_ldquad_phys_patch) }
-  __tsb_ldquad_phys_patch_end = .;
-  __tsb_phys_patch = .;
-  .tsb_phys_patch : { *(.tsb_phys_patch) }
-  __tsb_phys_patch_end = .;
-  __cpuid_patch = .;
-  .cpuid_patch : { *(.cpuid_patch) }
-  __cpuid_patch_end = .;
-  __sun4v_1insn_patch = .;
-  .sun4v_1insn_patch : { *(.sun4v_1insn_patch) }
-  __sun4v_1insn_patch_end = .;
-  __sun4v_2insn_patch = .;
-  .sun4v_2insn_patch : { *(.sun4v_2insn_patch) }
-  __sun4v_2insn_patch_end = .;
+   swapper_low_pmd_dir = 0x00402000;
+   . = 0x4000;
+   .text 0x00404000 : {
+   _text = .;
+   *(.text)
+   SCHED_TEXT
+   LOCK_TEXT
+   KPROBES_TEXT
+   *(.gnu.warning)
+   } =0
+   _etext = .;
+   PROVIDE (etext = .);
+
+   RODATA
+
+   .data : {
+   *(.data)
+   CONSTRUCTORS
+   }
+   .data1 : {
+   *(.data1)
+   }
+
+   . = ALIGN(64);
+   .data.cacheline_aligned : {
+   *(.data.cacheline_aligned)
+   }
+
+   . = ALIGN(64);
+   .data.read_mostly : {
+   *(.data.read_mostly)
+   }
+   _edata  =  .;
+   PROVIDE (edata = .);
+   .fixup : {
+   *(.fixup)
+   }
+
+   . = ALIGN(16);
+   __start___ex_table = .;
+   __ex_table : {
+   *(__ex_table)
+   }
+   __stop___ex_table = .;
+
+   . = ALIGN(8192);
+   __init_begin = .;
+   .init.text : {
+   _sinittext = .;
+   *(.init.text)
+   _einittext = .;
+   }
+
+   .init.data : {
+   *(.init.data)
+   }
+
+   . = ALIGN(16);
+   __setup_start = .;
+   .init.setup : {
+   *(.init.setup)
+   }
+   __setup_end = .;
+
+   __initcall_start = .;
+   .initcall.init : {
+   INITCALLS
+   }
+   __initcall_end = .;
+
+