1. 12 2月, 2007 1 次提交
    • K
      [PATCH] Common compat_sys_sysinfo · d4d23add
      Kyle McMartin 提交于
      I noticed that almost all architectures implemented exactly the same
      sys32_sysinfo...  except parisc, where a bug was to be found in handling of
      the uptime.  So let's remove a whole whack of code for fun and profit.
      Cribbed compat_sys_sysinfo from x86_64's implementation, since I figured it
      would be the best tested.
      
      This patch incorporates Arnd's suggestion of not using set_fs/get_fs, but
      instead extracting out the common code from sys_sysinfo.
      
      Cc: Christoph Hellwig <hch@infradead.org>
      Cc: <linux-arch@vger.kernel.org>
      Signed-off-by: NAndrew Morton <akpm@linux-foundation.org>
      Signed-off-by: NLinus Torvalds <torvalds@linux-foundation.org>
      d4d23add
  2. 04 11月, 2006 1 次提交
  3. 29 10月, 2006 1 次提交
  4. 02 10月, 2006 1 次提交
  5. 01 10月, 2006 1 次提交
  6. 30 9月, 2006 1 次提交
  7. 26 6月, 2006 1 次提交
    • A
      [PATCH] N32 sigset and __COMPAT_ENDIAN_SWAP__ · 838cd153
      akpm@osdl.org 提交于
      I'm testing glibc on MIPS64, little-endian, N32, O32 and N64 multilibs.
      
      Among the NPTL test failures seen are some arising from sigsuspend problems
      for N32: it blocks the wrong signals, so SIGCANCEL (SIGRTMIN) is blocked
      despite glibc's carefully excluding it from sets of signals to block.
      Specifically, testing suggests it blocks signal N^32 instead of signal N,
      so (in the example tested) blocking SIGUSR1 (17) blocks signal 49 instead.
      
      glibc's sigset_t uses an array of unsigned long, as does the kernel.
      In both cases, signal N+1 is represented as
      (1UL << (N % (8 * sizeof (unsigned long)))) in word number
      (N / (8 * sizeof (unsigned long))).
      
      Thus the N32 glibc uses an array of 32-bit words and the N64 kernel uses an
      array of 64-bit words.  For little-endian, the layout is the same, with
      signals 1-32 in the first 4 bytes, signals 33-64 in the second, etc.; for
      big-endian, userspace has that layout while in the kernel each 8 bytes have
      the two halves swapped from the userspace layout.
      
      The N32 sigsuspend syscall uses sigset_from_compat to convert the userspace
      sigset to kernel format.  If __COMPAT_ENDIAN_SWAP__ is *not* set, this uses
      logic of the form
      
        set->sig[0] = compat->sig[0] | (((long)compat->sig[1]) << 32 )
      
      to convert the userspace sigset to a kernel one.  This looks correct to me
      for both big and little endian, given that in userspace compat->sig[1] will
      represent signals 33-64, and so will the high 32 bits of set->sig[0] in the
      kernel.  If however __COMPAT_ENDIAN_SWAP__ *is* set, as it is for
      __MIPSEL__, it uses
      
        set->sig[0] = compat->sig[1] | (((long)compat->sig[0]) << 32 );
      
      which seems incorrect for both big and little endian, and would
      explain the observed symptoms.
      
      This code is the only use of __COMPAT_ENDIAN_SWAP__, so if incorrect
      then that macro serves no purpose, in which case something like the
      following patch would seem appropriate to remove it.
      Signed-off-by: NJoseph Myers <joseph@codesourcery.com>
      Signed-off-by: NRalf Baechle <ralf@linux-mips.org>
      Cc: Arnd Bergmann <arnd@arndb.de>
      Signed-off-by: NAndrew Morton <akpm@osdl.org>
      Signed-off-by: NLinus Torvalds <torvalds@osdl.org>
      838cd153
  8. 23 6月, 2006 2 次提交
  9. 28 3月, 2006 1 次提交
  10. 27 3月, 2006 1 次提交
  11. 08 2月, 2006 1 次提交
  12. 19 1月, 2006 1 次提交
  13. 11 1月, 2006 1 次提交
  14. 11 9月, 2005 1 次提交
  15. 17 4月, 2005 2 次提交