public inbox for linux-kernel@vger.kernel.org
 help / color / mirror / Atom feed
* setup_arch/arch_get_boot_command_line changes
@ 2008-12-09 22:20 Rusty Russell
  2008-12-09 22:59 ` Kyle McMartin
  2008-12-09 23:54 ` Linus Torvalds
  0 siblings, 2 replies; 7+ messages in thread
From: Rusty Russell @ 2008-12-09 22:20 UTC (permalink / raw)
  To: Stephen Rothwell
  Cc: linux-kernel, dhowells, Richard Henderson, Russell King,
	Haavard Skinnemoen, Bryan Wu, Mikael Starvik, Yoshinori Sato,
	Tony Luck, Hirokazu Takata, Geert Uytterhoeven, Greg Ungerer,
	Ralf Baechle, linux-parisc, Paul Mackerras, Heiko Carstens,
	Paul Mundt, David S. Miller, Jeff Dike, Ingo Molnar, Chris Zankel,
	Linus Torvalds

OK, I've folded in all the fixes, thanks.  Git tree is here:

	git://git.kernel.org/pub/scm/linux/kernel/git/rusty/linux-2.6-boot-params.git

Stephen, please include in linux-next.  Clearly this hits every arch.  I'll
try to avoid rebasing unless I've broken some arch horribly.

Thanks,
Rusty.

David Howells (2):
      param: Adapt MN10300 to the new parameter handling regime
      param: Adapt FRV to the new parameter handling regime    

Rusty Russell (10):
      USB: Don't use __module_param_call
      param: allow parse_args to work non-destructively.
      core_param: call these really, really early.      
      param: make sure charp isn't used as a core_param 
      param: arch_get_boot_command_line()               
      params: move core_param() parsing to before setup_arch.
      Call early_param earlier.                              
      param: combine core_param and early_param parsing.     
      params: don't use alloc_bootmem for saved_command_line 
      param: move banner printing to top of start_kernel.    

 arch/alpha/kernel/setup.c                  |   36 ++++++++-----
 arch/arm/kernel/setup.c                    |   43 +++++++++-------
 arch/avr32/kernel/setup.c                  |   15 ++---           
 arch/blackfin/kernel/setup.c               |   22 ++++----        
 arch/cris/kernel/setup.c                   |   29 +++++-----      
 arch/frv/kernel/setup.c                    |   50 +++++++-----------
 arch/h8300/kernel/setup.c                  |   27 +++++-----        
 arch/ia64/dig/setup.c                      |    2 +-                
 arch/ia64/hp/sim/hpsim_setup.c             |    2 +-                
 arch/ia64/include/asm/machvec.h            |    4 +-                
 arch/ia64/include/asm/paravirt.h           |    8 ++--              
 arch/ia64/kernel/machvec.c                 |    8 +++-              
 arch/ia64/kernel/setup.c                   |   32 ++++++------      
 arch/ia64/sn/kernel/setup.c                |   13 ++---             
 arch/ia64/uv/kernel/setup.c                |    2 +-                
 arch/ia64/xen/xen_pv_ops.c                 |    2 +-                
 arch/m32r/kernel/setup.c                   |   16 +++---            
 arch/m68k/kernel/setup.c                   |   27 ++++++----        
 arch/m68knommu/include/asm/machdep.h       |    2 +-                
 arch/m68knommu/kernel/setup.c              |   33 ++++++------      
 arch/m68knommu/platform/5206/config.c      |    2 +-                
 arch/m68knommu/platform/5206e/config.c     |   14 +++--             
 arch/m68knommu/platform/520x/config.c      |    2 +-                
 arch/m68knommu/platform/523x/config.c      |    2 +-                
 arch/m68knommu/platform/5249/config.c      |    2 +-                
 arch/m68knommu/platform/5272/config.c      |   23 ++++----          
 arch/m68knommu/platform/527x/config.c      |    2 +-                
 arch/m68knommu/platform/528x/config.c      |    2 +-                
 arch/m68knommu/platform/5307/config.c      |   13 +++--             
 arch/m68knommu/platform/532x/config.c      |   22 ++++----          
 arch/m68knommu/platform/5407/config.c      |    2 +-                
 arch/m68knommu/platform/68328/config.c     |    2 +-                
 arch/m68knommu/platform/68328/head-pilot.S |    2 +-                
 arch/m68knommu/platform/68360/config.c     |    6 ++-               
 arch/m68knommu/platform/68EZ328/config.c   |    4 +-                
 arch/m68knommu/platform/68VZ328/config.c   |   12 +++--             
 arch/mips/kernel/setup.c                   |   20 ++++----          
 arch/mn10300/kernel/setup.c                |   61 +++++++++-------------
 arch/parisc/kernel/setup.c                 |   30 +++++------           
 arch/powerpc/kernel/prom.c                 |    1 -                     
 arch/powerpc/kernel/setup_32.c             |   10 +++-                  
 arch/powerpc/kernel/setup_64.c             |    8 ++-                   
 arch/s390/kernel/setup.c                   |    8 +---                  
 arch/sh/boards/board-magicpanelr2.c        |    2 +-                    
 arch/sh/boards/board-sh7785lcr.c           |    2 +-
 arch/sh/boards/mach-dreamcast/setup.c      |    2 +-
 arch/sh/boards/mach-highlander/setup.c     |    2 +-
 arch/sh/boards/mach-hp6xx/setup.c          |    2 +-
 arch/sh/boards/mach-landisk/setup.c        |    2 +-
 arch/sh/boards/mach-microdev/setup.c       |    2 +-
 arch/sh/boards/mach-migor/setup.c          |    2 +-
 arch/sh/boards/mach-r2d/setup.c            |    2 +-
 arch/sh/boards/mach-sdk7780/setup.c        |    2 +-
 arch/sh/boards/mach-se/7343/setup.c        |    2 +-
 arch/sh/boards/mach-se/770x/setup.c        |    2 +-
 arch/sh/boards/mach-se/7721/setup.c        |    2 +-
 arch/sh/boards/mach-se/7722/setup.c        |    2 +-
 arch/sh/boards/mach-se/7780/setup.c        |    2 +-
 arch/sh/boards/mach-sh03/setup.c           |    2 +-
 arch/sh/boards/mach-sh7763rdp/setup.c      |    2 +-
 arch/sh/include/asm/machvec.h              |    2 +-
 arch/sh/kernel/setup.c                     |   28 +++++-----
 arch/sparc/kernel/setup.c                  |   14 +++---
 arch/sparc64/kernel/setup.c                |   12 ++--
 arch/um/kernel/um_arch.c                   |   10 +++-
 arch/x86/kernel/setup.c                    |   41 +++++++--------
 arch/xtensa/kernel/setup.c                 |   19 ++++---
 drivers/usb/core/usb.c                     |    8 ++-
 include/asm-generic/vmlinux.lds.h          |    3 +
 include/linux/init.h                       |    5 +-
 include/linux/moduleparam.h                |   43 ++++++++++++----
 init/main.c                                |   74 ++++++++++++--------------
 kernel/kexec.c                             |    1 +
 kernel/module.c                            |    2 +-
 kernel/params.c                            |   77 +++++++++++++++++++++------
 75 files changed, 535 insertions(+), 461 deletions(-)

^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: setup_arch/arch_get_boot_command_line changes
  2008-12-09 22:20 setup_arch/arch_get_boot_command_line changes Rusty Russell
@ 2008-12-09 22:59 ` Kyle McMartin
  2008-12-09 23:02   ` Kyle McMartin
  2008-12-10 12:44   ` Rusty Russell
  2008-12-09 23:54 ` Linus Torvalds
  1 sibling, 2 replies; 7+ messages in thread
From: Kyle McMartin @ 2008-12-09 22:59 UTC (permalink / raw)
  To: Rusty Russell
  Cc: Stephen Rothwell, linux-kernel, dhowells, Richard Henderson,
	Russell King, Haavard Skinnemoen, Bryan Wu, Mikael Starvik,
	Yoshinori Sato, Tony Luck, Hirokazu Takata, Geert Uytterhoeven,
	Greg Ungerer, Ralf Baechle, linux-parisc, Paul Mackerras,
	Heiko Carstens, Paul Mundt, David S. Miller, Jeff Dike,
	Ingo Molnar, Chris Zankel, Linus Torvalds

On Wed, Dec 10, 2008 at 08:50:24AM +1030, Rusty Russell wrote:
> Rusty Russell (10):
> <snip>
>       param: move banner printing to top of start_kernel.    
> 

Will this not run afoul of lockdep since it will be attempting to take
locks before lockdep has initialized?

(as an aside, it would be nice if it came after setup_arch, since on
some horrible platforms, printk_time needs the fpu turned on for
(integer) division, but there's no arch hook before the first printk, so
one needs to hijack the start_kernel entrypoint...)

regards, Kyle

^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: setup_arch/arch_get_boot_command_line changes
  2008-12-09 22:59 ` Kyle McMartin
@ 2008-12-09 23:02   ` Kyle McMartin
  2008-12-09 23:33     ` Kyle McMartin
  2008-12-10 12:44   ` Rusty Russell
  1 sibling, 1 reply; 7+ messages in thread
From: Kyle McMartin @ 2008-12-09 23:02 UTC (permalink / raw)
  To: Kyle McMartin
  Cc: Rusty Russell, Stephen Rothwell, linux-kernel, dhowells,
	Richard Henderson, Russell King, Haavard Skinnemoen, Bryan Wu,
	Mikael Starvik, Yoshinori Sato, Tony Luck, Hirokazu Takata,
	Geert Uytterhoeven, Greg Ungerer, Ralf Baechle, linux-parisc,
	Paul Mackerras, Heiko Carstens, Paul Mundt, David S. Miller,
	Jeff Dike, Ingo Molnar, Chris Zankel, Linus Torvalds

On Tue, Dec 09, 2008 at 05:59:31PM -0500, Kyle McMartin wrote:
> Will this not run afoul of lockdep since it will be attempting to take
> locks before lockdep has initialized?
> 

Ah, printk calls lockdep_off now. Handy.


^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: setup_arch/arch_get_boot_command_line changes
  2008-12-09 23:02   ` Kyle McMartin
@ 2008-12-09 23:33     ` Kyle McMartin
  0 siblings, 0 replies; 7+ messages in thread
From: Kyle McMartin @ 2008-12-09 23:33 UTC (permalink / raw)
  To: Kyle McMartin
  Cc: Rusty Russell, Stephen Rothwell, linux-kernel, dhowells,
	Richard Henderson, Russell King, Haavard Skinnemoen, Bryan Wu,
	Mikael Starvik, Yoshinori Sato, Tony Luck, Hirokazu Takata,
	Geert Uytterhoeven, Greg Ungerer, Ralf Baechle, linux-parisc,
	Paul Mackerras, Heiko Carstens, Paul Mundt, David S. Miller,
	Jeff Dike, Ingo Molnar, Chris Zankel, Linus Torvalds

On Tue, Dec 09, 2008 at 06:02:14PM -0500, Kyle McMartin wrote:
> On Tue, Dec 09, 2008 at 05:59:31PM -0500, Kyle McMartin wrote:
> > Will this not run afoul of lockdep since it will be attempting to take
> > locks before lockdep has initialized?
> > 
> 
> Ah, printk calls lockdep_off now. Handy.
> 

Nevermind, this doesn't do what I think it does... Rusty, does this work
with lockdep enabled?

^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: setup_arch/arch_get_boot_command_line changes
  2008-12-09 22:20 setup_arch/arch_get_boot_command_line changes Rusty Russell
  2008-12-09 22:59 ` Kyle McMartin
@ 2008-12-09 23:54 ` Linus Torvalds
  2008-12-10 12:27   ` Rusty Russell
  1 sibling, 1 reply; 7+ messages in thread
From: Linus Torvalds @ 2008-12-09 23:54 UTC (permalink / raw)
  To: Rusty Russell
  Cc: Stephen Rothwell, linux-kernel, dhowells, Richard Henderson,
	Russell King, Haavard Skinnemoen, Bryan Wu, Mikael Starvik,
	Yoshinori Sato, Tony Luck, Hirokazu Takata, Geert Uytterhoeven,
	Greg Ungerer, Ralf Baechle, linux-parisc, Paul Mackerras,
	Heiko Carstens, Paul Mundt, David S. Miller, Jeff Dike,
	Ingo Molnar, Chris Zankel



On Wed, 10 Dec 2008, Rusty Russell wrote:
>
> OK, I've folded in all the fixes, thanks.  Git tree is here:
> 
> 	git://git.kernel.org/pub/scm/linux/kernel/git/rusty/linux-2.6-boot-params.git
> 
> Stephen, please include in linux-next.  Clearly this hits every arch.  I'll
> try to avoid rebasing unless I've broken some arch horribly.

This looks really invasive, with absolutely zero explanations of what the 
point of it all is.

What?

		Linus

^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: setup_arch/arch_get_boot_command_line changes
  2008-12-09 23:54 ` Linus Torvalds
@ 2008-12-10 12:27   ` Rusty Russell
  0 siblings, 0 replies; 7+ messages in thread
From: Rusty Russell @ 2008-12-10 12:27 UTC (permalink / raw)
  To: Linus Torvalds
  Cc: Stephen Rothwell, linux-kernel, dhowells, Richard Henderson,
	Russell King, Haavard Skinnemoen, Bryan Wu, Mikael Starvik,
	Yoshinori Sato, Tony Luck, Hirokazu Takata, Geert Uytterhoeven,
	Greg Ungerer, Ralf Baechle, linux-parisc, Paul Mackerras,
	Heiko Carstens, Paul Mundt, David S. Miller, Jeff Dike,
	Ingo Molnar, Chris Zankel

On Wednesday 10 December 2008 10:24:11 Linus Torvalds wrote:
> This looks really invasive, with absolutely zero explanations of what the 
> point of it all is.
> 
> What?

Sorry, it's a cleanup.  I wanted start_kernel(const char *cmdline), but that
was even more invasive.

Justification: there are about five command line parsing systems in the
kernel at the moment, and about the same number of copies of the command
line.  Here's how it works at the moment:

1) setup_arch(char **cmdlinep) is called.  This copies the command line
   into boot_command_line, and also returns a pointer in cmdlinep.  That
   pointer is not usually boot_command_line, but an arch-internal cmdline
   which for some archs have deleted already-parsed options.  Some archs
   do strstr parsing of the command line here.

2) parse_early_param() is called by some archs from setup_arch.  This copies
   boot_command_line into an __initdata temporary to parse for early_param().
   early_param() look like foo[=bar] and go for a generic callback: they
   are usually sloppily parsed but simple.

   Other archs don't call this, so we call it again later in start_kernel.

   (parse_early_param() can't be called before setup_arch because we don't
   know the command line yet, but many archs need the parsing done to
   complete setup_arch.)

3) setup_command_line() copies boot_command_line into saved_command_line,
   because boot_command_line is __initdata, and we need to save it for proc.
   It also copies the cmdlinep returned from setup_arch into
   static_command_line, because cmdlinep may point to initdata, and
   traditionally command line callbacks are allowed to keep pointers to
   their args so we need to keep the (mangled) cmdline around.

4) We parse the command line again, matching for core_param, module_param
   and __setup.  module_param is the standard modname.arg, and core_param
   is just 'arg'.  They both can (optionally) make the args read/writable
   in sysfs, and are trivial and typesafe to use.  __setup() is a generic
   prefix-matching callback which has been around forever.

5) IA64 needs machvec= processed before any of the other early_param()
   calls, so it grabs this manually.  It leaves it in the command line, so
   it seems that init gets a $machvec in its environment if this was set.

6) Arm uses __early_param which is arm-specific.  This is like early_param,
   only different.

New code:
1) arch_get_boot_command_line() just gets the command-line at the start of
   setup_arch.  Making copies etc. is all in generic code.
2) early_param and core_param are parsed just after, so you can rely
   on the results in setup_arch(), which no longer does any command line
   stuff.
3) Three copies of command line total: char __initdata boot_command_line[]
   since we can't alloc, char *saved_command_line for proc, and static char *
   static_command_line for __setup/module_param to keep references to.
4) Some archs still have working copies of the command line, but they don't
   need to and I put in FIXMEs.
5) IA64 still has to handle machvec= manually.  AFAICT it's the only one, so
   not worth putting in a boutique pre-early_param for that.

It's a nice cleanup, but it's not a revolutionary improvement IMHO.

Rusty.

^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: setup_arch/arch_get_boot_command_line changes
  2008-12-09 22:59 ` Kyle McMartin
  2008-12-09 23:02   ` Kyle McMartin
@ 2008-12-10 12:44   ` Rusty Russell
  1 sibling, 0 replies; 7+ messages in thread
From: Rusty Russell @ 2008-12-10 12:44 UTC (permalink / raw)
  To: Kyle McMartin
  Cc: Stephen Rothwell, linux-kernel, dhowells, Richard Henderson,
	Russell King, Haavard Skinnemoen, Bryan Wu, Mikael Starvik,
	Yoshinori Sato, Tony Luck, Hirokazu Takata, Geert Uytterhoeven,
	Greg Ungerer, Ralf Baechle, linux-parisc, Paul Mackerras,
	Heiko Carstens, Paul Mundt, David S. Miller, Jeff Dike,
	Ingo Molnar, Chris Zankel, Linus Torvalds

On Wednesday 10 December 2008 09:29:31 Kyle McMartin wrote:
> On Wed, Dec 10, 2008 at 08:50:24AM +1030, Rusty Russell wrote:
> > Rusty Russell (10):
> > <snip>
> >       param: move banner printing to top of start_kernel.    
> > 
> 
> Will this not run afoul of lockdep since it will be attempting to take
> locks before lockdep has initialized?

Hmm, works for me here.  But then, i386_start_kernel -> reserve_ebda_region
->printk already, so that banner is *still* not first line.

> (as an aside, it would be nice if it came after setup_arch, since on
> some horrible platforms, printk_time needs the fpu turned on for
> (integer) division, but there's no arch hook before the first printk, so
> one needs to hijack the start_kernel entrypoint...)

That won't help much, since a failed kernel parameter parse will also call
printk.  I don't think it's sane to call start_kernel without the
ability to do integer division!

Rusty.

^ permalink raw reply	[flat|nested] 7+ messages in thread

end of thread, other threads:[~2008-12-10 12:45 UTC | newest]

Thread overview: 7+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2008-12-09 22:20 setup_arch/arch_get_boot_command_line changes Rusty Russell
2008-12-09 22:59 ` Kyle McMartin
2008-12-09 23:02   ` Kyle McMartin
2008-12-09 23:33     ` Kyle McMartin
2008-12-10 12:44   ` Rusty Russell
2008-12-09 23:54 ` Linus Torvalds
2008-12-10 12:27   ` Rusty Russell

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox