1. 17 Oct, 2007 2 commits
    • Neil Horman's avatar
      core_pattern: ignore RLIMIT_CORE if core_pattern is a pipe · 7dc0b22e
      Neil Horman authored
      
      For some time /proc/sys/kernel/core_pattern has been able to set its output
      destination as a pipe, allowing a user space helper to receive and
      intellegently process a core.  This infrastructure however has some
      shortcommings which can be enhanced.  Specifically:
      
      1) The coredump code in the kernel should ignore RLIMIT_CORE limitation
         when core_pattern is a pipe, since file system resources are not being
         consumed in this case, unless the user application wishes to save the core,
         at which point the app is restricted by usual file system limits and
         restrictions.
      
      2) The core_pattern code should be able to parse and pass options to the
         user space helper as an argv array.  The real core limit of the uid of the
         crashing proces should also be passable to the user space helper (since it
         is overridden to zero when called).
      
      3) Some miscellaneous bugs need to be cleaned up (specifically the
         recognition of a recursive core dump, should the user mode helper itself
         crash.  Also, the core dump code in the kernel should not wait for the user
         mode helper to exit, since the same context is responsible for writing to
         the pipe, and a read of the pipe by the user mode helper will result in a
         deadlock.
      
      This patch:
      
      Remove the check of RLIMIT_CORE if core_pattern is a pipe.  In the event that
      core_pattern is a pipe, the entire core will be fed to the user mode helper.
      Signed-off-by: default avatarNeil Horman <nhorman@tuxdriver.com>
      Cc: <martin.pitt@ubuntu.com>
      Cc: <wwoods@redhat.com>
      Cc: Jeremy Fitzhardinge <jeremy@goop.org>
      Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
      Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
      7dc0b22e
    • Mark Nelson's avatar
      x86: replace NT_PRXFPREG with ELF_CORE_XFPREG_TYPE #define · 5b20cd80
      Mark Nelson authored
      
      Replace NT_PRXFPREG with ELF_CORE_XFPREG_TYPE in the coredump code which
      allows for more flexibility in the note type for the state of 'extended
      floating point' implementations in coredumps.  New note types can now be
      added with an appropriate #define.
      
      This does #define ELF_CORE_XFPREG_TYPE to be NT_PRXFPREG in all
      current users so there's are no change in behaviour.
      
      This will let us use different note types on powerpc for the Altivec/VMX
      state that some PowerPC cpus have (G4, PPC970, POWER6) and for the SPE
      (signal processing extension) state that some embedded PowerPC cpus from
      Freescale have.
      Signed-off-by: default avatarMark Nelson <markn@au1.ibm.com>
      Cc: Paul Mackerras <paulus@samba.org>
      Cc: Thomas Gleixner <tglx@linutronix.de>
      Cc: Ingo Molnar <mingo@elte.hu>
      Cc: Andi Kleen <ak@suse.de>
      Cc: <linux-arch@vger.kernel.org>
      Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
      Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
      5b20cd80
  2. 16 Oct, 2007 1 commit
    • Nick Piggin's avatar
      remove ZERO_PAGE · 557ed1fa
      Nick Piggin authored
      The commit b5810039
      
       contains the note
      
        A last caveat: the ZERO_PAGE is now refcounted and managed with rmap
        (and thus mapcounted and count towards shared rss).  These writes to
        the struct page could cause excessive cacheline bouncing on big
        systems.  There are a number of ways this could be addressed if it is
        an issue.
      
      And indeed this cacheline bouncing has shown up on large SGI systems.
      There was a situation where an Altix system was essentially livelocked
      tearing down ZERO_PAGE pagetables when an HPC app aborted during startup.
      This situation can be avoided in userspace, but it does highlight the
      potential scalability problem with refcounting ZERO_PAGE, and corner
      cases where it can really hurt (we don't want the system to livelock!).
      
      There are several broad ways to fix this problem:
      1. add back some special casing to avoid refcounting ZERO_PAGE
      2. per-node or per-cpu ZERO_PAGES
      3. remove the ZERO_PAGE completely
      
      I will argue for 3. The others should also fix the problem, but they
      result in more complex code than does 3, with little or no real benefit
      that I can see.
      
      Why? Inserting a ZERO_PAGE for anonymous read faults appears to be a
      false optimisation: if an application is performance critical, it would
      not be doing many read faults of new memory, or at least it could be
      expected to write to that memory soon afterwards. If cache or memory use
      is critical, it should not be working with a significant number of
      ZERO_PAGEs anyway (a more compact representation of zeroes should be
      used).
      
      As a sanity check -- mesuring on my desktop system, there are never many
      mappings to the ZERO_PAGE (eg. 2 or 3), thus memory usage here should not
      increase much without it.
      
      When running a make -j4 kernel compile on my dual core system, there are
      about 1,000 mappings to the ZERO_PAGE created per second, but about 1,000
      ZERO_PAGE COW faults per second (less than 1 ZERO_PAGE mapping per second
      is torn down without being COWed). So removing ZERO_PAGE will save 1,000
      page faults per second when running kbuild, while keeping it only saves
      less than 1 page clearing operation per second. 1 page clear is cheaper
      than a thousand faults, presumably, so there isn't an obvious loss.
      
      Neither the logical argument nor these basic tests give a guarantee of no
      regressions. However, this is a reasonable opportunity to try to remove
      the ZERO_PAGE from the pagefault path. If it is found to cause regressions,
      we can reintroduce it and just avoid refcounting it.
      
      The /dev/zero ZERO_PAGE usage and TLB tricks also get nuked.  I don't see
      much use to them except on benchmarks.  All other users of ZERO_PAGE are
      converted just to use ZERO_PAGE(0) for simplicity. We can look at
      replacing them all and maybe ripping out ZERO_PAGE completely when we are
      more satisfied with this solution.
      Signed-off-by: default avatarNick Piggin <npiggin@suse.de>
      Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
      Signed-off-by: default avatarLinus "snif" Torvalds <torvalds@linux-foundation.org>
      557ed1fa
  3. 19 Jul, 2007 3 commits
  4. 08 May, 2007 1 commit
  5. 02 Apr, 2007 1 commit
  6. 23 Mar, 2007 1 commit
    • David Howells's avatar
      [PATCH] FDPIC: fix the /proc/pid/stat representation of executable boundaries · aa289b47
      David Howells authored
      
      Fix the /proc/pid/stat representation of executable boundaries.  It should
      show the bounds of the executable, but instead shows the bounds of the
      loader.
      
      Before the patch is applied, the bug can be seen by examining, say, inetd:
      
      	# ps | grep inetd
      	  610         root          0   S   /usr/sbin/inetd -i
      	# cat /proc/610/maps
      	c0bb0000-c0bba788 r-xs 00000000 00:0b 14582157  /lib/ld-uClibc-0.9.28.so
      	c3180000-c31dede4 r-xs 00000000 00:0b 14582179  /lib/libuClibc-0.9.28.so
      	c328c000-c328ea00 rw-p 00008000 00:0b 14582157  /lib/ld-uClibc-0.9.28.so
      	c3290000-c329b6c0 rw-p 00000000 00:00 0
      	c32a0000-c32c0000 rwxp 00000000 00:00 0
      	c32d4000-c32d8000 rw-p 00000000 00:00 0
      	c3394000-c3398000 rw-p 00000000 00:00 0
      	c3458000-c345f464 r-xs 00000000 00:0b 16384612  /usr/sbin/inetd
      	c3470000-c34748f8 rw-p 00004000 00:0b 16384612  /usr/sbin/inetd
      	c34cc000-c34d0000 rw-p 00000000 00:00 0
      	c34d4000-c34d8000 rw-p 00000000 00:00 0
      	c34d8000-c34dc000 rw-p 00000000 00:00 0
      	# cat /proc/610/stat
      	610 (inetd) S 1 610 610 0 -1 256 0 0 0 0 0 8 0 0 19 0 1 0 94392000718
      	950272 0 4294967295 3233480704 3233523592 3274440352 3274439976
       	3273467584 0 0 4096 90115 3221712796 0 0 17 0 0 0 0
      
      The code boundaries are 3233480704 to 3233523592, which are:
      
      	(gdb) p/x 3233480704
      	$1 = 0xc0bb0000
      	(gdb) p/x 3233523592
      	$2 = 0xc0bba788
      
      Which corresponds to this line in the maps file:
      
      	c0bb0000-c0bba788 r-xs 00000000 00:0b 14582157  /lib/ld-uClibc-0.9.28.so
      
      Which is wrong.  After the patch is applied, the maps file is pretty much
      identical (there's some minor shuffling of the location of some of the
      anonymous VMAs), but the stat file is now:
      
      	# cat /proc/610/stat
      	610 (inetd) S 1 610 610 0 -1 256 0 0 0 0 0 7 0 0 18 0 1 0 94392000722
      	950272 0 4294967295 3276111872 3276141668 3274440352 3274439976
      	3273467584 0 0 4096 90115 3221712796 0 0 17 0 0 0 0
      
      The code boundaries are then 3276111872 to 3276141668, which are:
      
      	(gdb) p/x 3276111872
      	$1 = 0xc3458000
      	(gdb) p/x 3276141668
      	$2 = 0xc345f464
      
      And these correspond to this line in the maps file instead:
      
      	c3458000-c345f464 r-xs 00000000 00:0b 16384612  /usr/sbin/inetd
      
      Which is now correct.
      Signed-off-by: default avatarDavid Howells <dhowells@redhat.com>
      Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
      Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
      aa289b47
  7. 11 Feb, 2007 1 commit
  8. 26 Jan, 2007 1 commit
  9. 12 Dec, 2006 1 commit
  10. 08 Dec, 2006 2 commits
  11. 07 Dec, 2006 1 commit
  12. 29 Sep, 2006 1 commit
  13. 10 Jul, 2006 3 commits
  14. 23 Jun, 2006 1 commit
  15. 24 Mar, 2006 1 commit
  16. 10 Jan, 2006 1 commit
  17. 07 Nov, 2005 1 commit
  18. 30 Oct, 2005 1 commit
  19. 16 Apr, 2005 1 commit
    • Linus Torvalds's avatar
      Linux-2.6.12-rc2 · 1da177e4
      Linus Torvalds authored
      Initial git repository build. I'm not bothering with the full history,
      even though we have it. We can create a separate "historical" git
      archive of that later if we want to, and in the meantime it's about
      3.2GB when imported into git - space that would just make the early
      git days unnecessarily complicated, when we don't have a lot of good
      infrastructure for it.
      
      Let it rip!
      1da177e4