1. 14 10月, 2008 1 次提交
    • S
      ftrace: create __mcount_loc section · 8da3821b
      Steven Rostedt 提交于
      This patch creates a section in the kernel called "__mcount_loc".
      This will hold a list of pointers to the mcount relocation for
      each call site of mcount.
      
      For example:
      
      objdump -dr init/main.o
      [...]
      Disassembly of section .text:
      
      0000000000000000 <do_one_initcall>:
         0:   55                      push   %rbp
      [...]
      000000000000017b <init_post>:
       17b:   55                      push   %rbp
       17c:   48 89 e5                mov    %rsp,%rbp
       17f:   53                      push   %rbx
       180:   48 83 ec 08             sub    $0x8,%rsp
       184:   e8 00 00 00 00          callq  189 <init_post+0xe>
                              185: R_X86_64_PC32      mcount+0xfffffffffffffffc
      [...]
      
      We will add a section to point to each function call.
      
         .section __mcount_loc,"a",@progbits
      [...]
         .quad .text + 0x185
      [...]
      
      The offset to of the mcount call site in init_post is an offset from
      the start of the section, and not the start of the function init_post.
      The mcount relocation is at the call site 0x185 from the start of the
      .text section.
      
        .text + 0x185  == init_post + 0xa
      
      We need a way to add this __mcount_loc section in a way that we do not
      lose the relocations after final link.  The .text section here will
      be attached to all other .text sections after final link and the
      offsets will be meaningless.  We need to keep track of where these
      .text sections are.
      
      To do this, we use the start of the first function in the section.
      do_one_initcall.  We can make a tmp.s file with this function as a reference
      to the start of the .text section.
      
         .section __mcount_loc,"a",@progbits
      [...]
         .quad do_one_initcall + 0x185
      [...]
      
      Then we can compile the tmp.s into a tmp.o
      
        gcc -c tmp.s -o tmp.o
      
      And link it into back into main.o.
      
        ld -r main.o tmp.o -o tmp_main.o
        mv tmp_main.o main.o
      
      But we have a problem.  What happens if the first function in a section
      is not exported, and is a static function. The linker will not let
      the tmp.o use it.  This case exists in main.o as well.
      
      Disassembly of section .init.text:
      
      0000000000000000 <set_reset_devices>:
         0:   55                      push   %rbp
         1:   48 89 e5                mov    %rsp,%rbp
         4:   e8 00 00 00 00          callq  9 <set_reset_devices+0x9>
                              5: R_X86_64_PC32        mcount+0xfffffffffffffffc
      
      The first function in .init.text is a static function.
      
      00000000000000a8 t __setup_set_reset_devices
      000000000000105f t __setup_str_set_reset_devices
      0000000000000000 t set_reset_devices
      
      The lowercase 't' means that set_reset_devices is local and is not exported.
      If we simply try to link the tmp.o with the set_reset_devices we end
      up with two symbols: one local and one global.
      
       .section __mcount_loc,"a",@progbits
       .quad set_reset_devices + 0x10
      
      00000000000000a8 t __setup_set_reset_devices
      000000000000105f t __setup_str_set_reset_devices
      0000000000000000 t set_reset_devices
                       U set_reset_devices
      
      We still have an undefined reference to set_reset_devices, and if we try
      to compile the kernel, we will end up with an undefined reference to
      set_reset_devices, or even worst, it could be exported someplace else,
      and then we will have a reference to the wrong location.
      
      To handle this case, we make an intermediate step using objcopy.
      We convert set_reset_devices into a global exported symbol before linking
      it with tmp.o and set it back afterwards.
      
      00000000000000a8 t __setup_set_reset_devices
      000000000000105f t __setup_str_set_reset_devices
      0000000000000000 T set_reset_devices
      
      00000000000000a8 t __setup_set_reset_devices
      000000000000105f t __setup_str_set_reset_devices
      0000000000000000 T set_reset_devices
      
      00000000000000a8 t __setup_set_reset_devices
      000000000000105f t __setup_str_set_reset_devices
      0000000000000000 t set_reset_devices
      
      Now we have a section in main.o called __mcount_loc that we can place
      somewhere in the kernel using vmlinux.ld.S and access it to convert
      all these locations that call mcount into nops before starting SMP
      and thus, eliminating the need to do this with kstop_machine.
      
      Note, A well documented perl script (scripts/recordmcount.pl) is used
      to do all this in one location.
      Signed-off-by: NSteven Rostedt <srostedt@redhat.com>
      Signed-off-by: NIngo Molnar <mingo@elte.hu>
      8da3821b
  2. 11 10月, 2008 1 次提交
  3. 07 10月, 2008 1 次提交
    • M
      Marker depmod fix core kernel list · 87f3b6b6
      Mathieu Desnoyers 提交于
      * Theodore Ts'o (tytso@mit.edu) wrote:
      >
      > I've been playing with adding some markers into ext4 to see if they
      > could be useful in solving some problems along with Systemtap.  It
      > appears, though, that as of 2.6.27-rc8, markers defined in code which is
      > compiled directly into the kernel (i.e., not as modules) don't show up
      > in Module.markers:
      >
      > kvm_trace_entryexit arch/x86/kvm/kvm-intel  %u %p %u %u %u %u %u %u
      > kvm_trace_handler arch/x86/kvm/kvm-intel  %u %p %u %u %u %u %u %u
      > kvm_trace_entryexit arch/x86/kvm/kvm-amd  %u %p %u %u %u %u %u %u
      > kvm_trace_handler arch/x86/kvm/kvm-amd  %u %p %u %u %u %u %u %u
      >
      > (Note the lack of any of the kernel_sched_* markers, and the markers I
      > added for ext4_* and jbd2_* are missing as wel.)
      >
      > Systemtap apparently depends on in-kernel trace_mark being recorded in
      > Module.markers, and apparently it's been claimed that it used to be
      > there.  Is this a bug in systemtap, or in how Module.markers is getting
      > built?   And is there a file that contains the equivalent information
      > for markers located in non-modules code?
      
      I think the problem comes from "markers: fix duplicate modpost entry"
      (commit d35cb360)
      
      Especially :
      
        -   add_marker(mod, marker, fmt);
        +   if (!mod->skip)
        +     add_marker(mod, marker, fmt);
          }
          return;
         fail:
      
      Here is a fix that should take care if this problem.
      
      Thanks for the bug report!
      Signed-off-by: NMathieu Desnoyers <mathieu.desnoyers@polymtl.ca>
      Tested-by: N"Theodore Ts'o" <tytso@mit.edu>
      CC: Greg KH <greg@kroah.com>
      CC: David Smith <dsmith@redhat.com>
      CC: Roland McGrath <roland@redhat.com>
      CC: Sam Ravnborg <sam@ravnborg.org>
      CC: Wenji Huang <wenji.huang@oracle.com>
      CC: Takashi Nishiie <t-nishiie@np.css.fujitsu.com>
      Signed-off-by: NLinus Torvalds <torvalds@linux-foundation.org>
      87f3b6b6
  4. 29 9月, 2008 2 次提交
  5. 23 9月, 2008 1 次提交
  6. 10 9月, 2008 1 次提交
  7. 05 9月, 2008 1 次提交
  8. 27 8月, 2008 1 次提交
    • S
      selinux: add support for installing a dummy policy (v2) · 93c06cbb
      Serge E. Hallyn 提交于
      In August 2006 I posted a patch generating a minimal SELinux policy.  This
      week, David P. Quigley posted an updated version of that as a patch against
      the kernel.  It also had nice logic for auto-installing the policy.
      
      Following is David's original patch intro (preserved especially
      bc it has stats on the generated policies):
      
      se interested in the changes there were only two significant
      changes. The first is that the iteration through the list of classes
      used NULL as a sentinel value. The problem with this is that the
      class_to_string array actually has NULL entries in its table as place
      holders for the user space object classes.
      
      The second change was that it would seem at some point the initial sids
      table was NULL terminated. This is no longer the case so that iteration
      has to be done on array length instead of looking for NULL.
      
      Some statistics on the policy that it generates:
      
      The policy consists of 523 lines which contain no blank lines. Of those
      523 lines 453 of them are class, permission, and initial sid
      definitions. These lines are usually little to no concern to the policy
      developer since they will not be adding object classes or permissions.
      Of the remaining 70 lines there is one type, one role, and one user
      statement. The remaining lines are broken into three portions. The first
      group are TE allow rules which make up 29 of the remaining lines, the
      second is assignment of labels to the initial sids which consist of 27
      lines, and file system labeling statements which are the remaining 11.
      
      In addition to the policy.conf generated there is a single file_contexts
      file containing two lines which labels the entire system with base_t.
      
      This policy generates a policy.23 binary that is 7920 bytes.
      
      (then a few versions later...):
      
      The new policy is 587 lines (stripped of blank lines) with 476 of those
      lines being the boilerplate that I mentioned last time. The remaining
      111 lines have the 3 lines for type, user, and role, 70 lines for the
      allow rules (one for each object class including user space object
      classes), 27 lines to assign types to the initial sids, and 11 lines for
      file system labeling. The policy binary is 9194 bytes.
      
      Changelog:
      
      	Aug 26: Added Documentation/SELinux.txt
      	Aug 26: Incorporated a set of comments by Stephen Smalley:
      		1. auto-setup SELINUXTYPE=dummy
      		2. don't auto-install if selinux is enabled with
      			non-dummy policy
      		3. don't re-compute policy version
      		4. /sbin/setfiles not /usr/sbin/setfiles
      	Aug 22: As per JMorris comments, made sure make distclean
      		cleans up the mdp directory.
      		Removed a check for file_contexts which is now
      		created in the same file as the check, making it
      		superfluous.
      Signed-off-by: NSerge Hallyn <serue@us.ibm.com>
      Signed-off-by: NDavid Quigley <dpquigl@tycho.nsa.gov>
      Signed-off-by: NJames Morris <jmorris@namei.org>
      93c06cbb
  9. 22 8月, 2008 1 次提交
  10. 07 8月, 2008 1 次提交
  11. 06 8月, 2008 1 次提交
  12. 05 8月, 2008 2 次提交
  13. 02 8月, 2008 1 次提交
  14. 01 8月, 2008 3 次提交
  15. 31 7月, 2008 3 次提交
  16. 26 7月, 2008 17 次提交
    • S
      setlocalversion: do not describe if there is nothing to describe · 56b2f070
      Sebastian Siewior 提交于
      Jan Engelhardt wrote:
      > Just a note that when you run git-describe, you should probably quiten it.
      >
      > fatal: cannot describe 'bd7364a0fd5a4a2878fe4a224be1b142a4e6698e'
      >
      > This happens when tags are not present, which can happen if Linus's tree
      > is sent upwards again, IOW:
      >
      >  machine1$  git-clone torvalds/linux-2.6.git
      >  machine1$  git push elsewhere master
      >
      >  machine2$  git-clone elsewhere:/linux
      >  machine2$  git-describe HEAD
      >  fatal: cannot describe that
      Signed-off-by: NSebastian Siewior <sebastian@breakpoint.cc>
      Acked-by: NJan Engelhardt <jengelh@medozas.de>
      Signed-off-by: NSam Ravnborg <sam@ravnborg.org>
      56b2f070
    • S
      kconfig: make defconfig is no longer chatty · 09748e17
      Sam Ravnborg 提交于
      make defconfig generated a lot of output
      then noone actually read.
      Use conf_set_all_new_symbols() to generate the default
      configuration and avoid the chatty output.
      
      A typical run now looks like this:
      $ make  defconfig
      *** Default configuration is based on 'i386_defconfig'
      arch/x86/configs/i386_defconfig:13:warning: trying to assign nonexistent symbol SEMAPHORE_SLEEPERS
      arch/x86/configs/i386_defconfig:176:warning: trying to assign nonexistent symbol PREEMPT_BKL
      ...
      arch/x86/configs/i386_defconfig:1386:warning: trying to assign nonexistent symbol INSTRUMENTATION
      $
      
      As an added benefit we now clearly see the warnings generated
      in the start of the process.
      Signed-off-by: NSam Ravnborg <sam@ravnborg.org>
      Cc: Roman Zippel <zippel@linux-m68k.org>
      09748e17
    • S
      kconfig: make oldconfig is now less chatty · cd9140e1
      Sam Ravnborg 提交于
      Previously when running "make oldconfig" we saw all the propmt lines
      from kconfig and noone actully read this.
      
      With this patch the user will only see output if there is new symbols.
      This will be seen as "make oldconfig" runs which does not generate any output.
      
      A typical run now looks like this:
      
      $ make oldconfig
      scripts/kconfig/conf -o arch/x86/Kconfig
      $
      
      If a new symbol is found then we restart the config process like this:
      $ make oldconfig
      scripts/kconfig/conf -o arch/x86/Kconfig
      *
      * Restart config...
      *
      *
      * General setup
      *
      Prompt for development and/or incomplete code/drivers (EXPERIMENTAL) [Y/n/?] y
      Local version - append to kernel release (LOCALVERSION) []
      ...
      
      The bahaviour is similar to what we know when running the implicit
      oldconfig target "make silentoldconfig".
      "make silentoldconfig" are run as part of the kernel build process
      if the configuration has changed.
      Signed-off-by: NSam Ravnborg <sam@ravnborg.org>
      Cc: Roman Zippel <zippel@linux-m68k.org>
      cd9140e1
    • S
      kconfig: speed up all*config + randconfig · f443d2ec
      Sam Ravnborg 提交于
      Drop the chatty mode when we generate the all*config, randconfig
      configurations.
      Ths speeds up the process considerably and noone looked
      at the output anyway.
      This patch uses the conf_set_all_new_symbols() function
      just added to kconfig.
      Signed-off-by: NSam Ravnborg <sam@ravnborg.org>
      Cc: Roman Zippel <zippel@linux-m68k.org>
      f443d2ec
    • R
      kconfig: set all new symbols automatically · dc7862e5
      Roman Zippel 提交于
      Add conf_set_all_new_symbols() which set all symbols (which don't have a
      value yet) to a specifed value.
      Signed-off-by: NRoman Zippel <zippel@linux-m68k.org>
      Signed-off-by: NSam Ravnborg <sam@ravnborg.org>
      dc7862e5
    • T
      kconfig: add diffconfig utility · a717417e
      Tim Bird 提交于
      Diffconfig is a simple utility for comparing two kernel configuration files.
      See usage in the script for more info.
      Signed-off-by: NTim Bird <tim.bird@am.sony.com>
      Signed-off-by: NSam Ravnborg <sam@ravnborg.org>
      a717417e
    • R
      kernel-doc: handle/strip __init · 74fc5c65
      Randy Dunlap 提交于
      Handle __init in functions with kernel-doc notation by stripping the
      __init away from the output doc.  This is already being done for
      "__devinit".  This patch fixes these kernel-doc error/aborts:
      
      Error(linux-next-20080619//drivers/usb/gadget/config.c:132): cannot understand prototype: 'struct usb_descriptor_header **__init usb_copy_descriptors(struct usb_descriptor_header **src) '
      Error(linux-next-20080619//drivers/usb/gadget/config.c:182): cannot understand prototype: 'struct usb_endpoint_descriptor *__init usb_find_endpoint( 	struct usb_descriptor_header **src, 	struct usb_descriptor_header **copy, 	struct usb_endpoint_descriptor *match ) '
      Signed-off-by: NRandy Dunlap <randy.dunlap@oracle.com>
      Cc: David Brownell <dbrownell@users.sourceforge.net>
      Signed-off-by: NSam Ravnborg <sam@ravnborg.org>
      74fc5c65
    • S
      kbuild: prepare headers_* for arch/$ARCH/include · 2fb9b1bd
      Sam Ravnborg 提交于
      Factor out the headers_*_all support to a seperate
      shell script and add support for arch specific
      header files can be located in either
      
          arch/$ARCH/include/asm
      or
          include/asm-$ARCH/
      
      In "make help" always display the headers_* targets.
      Signed-off-by: NSam Ravnborg <sam@ravnborg.org>
      2fb9b1bd
    • S
      kbuild: install all headers when arch is changed · db1bec4f
      Sam Ravnborg 提交于
      We see some header files that are selected dependent on
      the actual architecture so force a reinstallation
      of all header files when the arch changes.
      This slows down "make headers_check_all" but then
      we better reflect reality.
      Signed-off-by: NSam Ravnborg <sam@ravnborg.org>
      db1bec4f
    • S
      kbuild: optimize headers_* targets · 7712401a
      Sam Ravnborg 提交于
      Move the core functionality of headers_install
      and headers_check to two small perl scripts.
      The makefile is adapted to use the perl scrip and
      changed to operate on all files in a directory.
      So if one file is changed then all files in the
      directory is processed.
      
      perl were chosen for the helper scripts because this
      is pure text processing which perl is good at and
      especially the headers_check.pl script are expected to
      see changes / new checks implmented.
      
      The speed is ~300% faster on this box.
      And the output generated to the screen is now down to
      two lines per directory (one for install, one for check)
      so it is easier to scroll back after a kernel build.
      
      The perl scripts has been brought to sanity by patient
      feedback from: Vegard Nossum <vegard.nossum@gmail.com>
      Signed-off-by: NSam Ravnborg <sam@ravnborg.org>
      7712401a
    • S
      kbuild: only one call for include/ in make headers_* · 88181ec3
      Sam Ravnborg 提交于
      Move it to the top-level file to decide if we install/check
      the generic headers or the arch specific headers.
      
      This revealed a long standing bug where "make headers_check_all"
      relied on the files in asm/ for the current architecture.
      So make headers_check_all is now broken by this commit.
      
      In addition:
      
      o add a simpler way to detect if an arch support
        exporting header files.
      
      o add 'set -e;' so we error out early if
        make headers_check_all fails.
      
      o add sparc64 and cris to arch we do not process
        in make headers_*_all because:
      
          sparc64 - use sparc to export headers
          cris    - is know seriously broken
      
      Includes suggestions from: David Woodhouse
      <dwmw2@infradead.org>.
      Signed-off-by: NSam Ravnborg <sam@ravnborg.org>
      Cc: David Woodhouse <dwmw2@infradead.org>
      88181ec3
    • S
      kbuild: code refactoring in Makefile.headerinst · 62284a37
      Sam Ravnborg 提交于
      No functional changes just improved readability
      Signed-off-by: NSam Ravnborg <sam@ravnborg.org>
      62284a37
    • S
      kbuild: drop support of ALTARCH for headers_* · 283039fb
      Sam Ravnborg 提交于
      ALTARCH is no longer used by any arch(*) so drop
      support for this from Makefile.headerinst
      
      Dropping ALTARCH support simplifies Makefile.headerinst
      
      (*) sparc64 uses it but work is ongoing to drop it
      and no furter usage is planned.
      Signed-off-by: NSam Ravnborg <sam@ravnborg.org>
      Cc: David Woodhouse <dwmw2@infradead.org>
      Cc: David Miller <davem@davemloft.net>
      283039fb
    • S
      kbuild: always unifdef files in headers_install* · 4e420aa9
      Sam Ravnborg 提交于
      unifdef utility is fast enough to warrant that we always
      run the scripts through unifdef.
      
      This patch runs all headers listed with header-y and unifdef-y
      through unifdef.
      Next step is to drop unifdef-y in all Kbuild files and
      that can now be done in smaller steps.
      Signed-off-by: NSam Ravnborg <sam@ravnborg.org>
      Cc: David Woodhouse <dwmw2@infradead.org>
      Cc: Adrian Bunk <bunk@kernel.org>
      4e420aa9
    • D
      firmware: create firmware binaries during 'make modules'. · 44463f7d
      David Woodhouse 提交于
      This means that we no longer need write access to the source tree while
      doing 'make modules_install'.
      Signed-off-by: NDavid Woodhouse <David.Woodhouse@intel.com>
      44463f7d
    • E
      fix checkstack.pl arch detection · abddaec5
      Eric Sandeen 提交于
      uname -m was leaving a newline in $arch, and not passing the tests.
      
      Also, printing the unknown arch on failure is probably helpful.
      Signed-off-by: NEric Sandeen <sandeen@redhat.com>
      Signed-off-by: NAndrew Morton <akpm@linux-foundation.org>
      Signed-off-by: NLinus Torvalds <torvalds@linux-foundation.org>
      abddaec5
    • E
      find dynamic stack allocations in checkstack.pl · 585e93ae
      Eric Sandeen 提交于
      Currently, checkstack.pl only looks for fixed subtractions from the stack
      pointer.  However, things like this:
      
      void function(int size)
      {
              char stackbuster[size << 2];
      ...
      
      are certainly worth pointing out, I think.
      
      This could perhaps be done more cleanly, and the following patch only
      adds "dynamic" REs for x86 and x86_64, but it works:
      
      0x00b0 crypto_cbc_decrypt_inplace [cbc]:                Dynamic (%rax)
      0x00ad crypto_pcbc_decrypt_inplace [pcbc]:              Dynamic (%rax)
      0x02f6 crypto_pcbc_encrypt_inplace [pcbc]:              Dynamic (%rax)
      0x036c _crypto_xcbc_digest_setkey [xcbc]:               Dynamic (%rax)
      ...
      
      (Inspired by Keith Owens' old stack-check script)
      Signed-off-by: NEric Sandeen <sandeen@redhat.com>
      Signed-off-by: NAndrew Morton <akpm@linux-foundation.org>
      Signed-off-by: NLinus Torvalds <torvalds@linux-foundation.org>
      585e93ae
  17. 25 7月, 2008 2 次提交