1. 13 5月, 2008 2 次提交
    • J
      uml: style fixes in the random driver · 3d88958e
      Jeff Dike 提交于
      Give random.c a style workover while I'm changing it.
      Signed-off-by: NJeff Dike <jdike@linux.intel.com>
      Signed-off-by: NAndrew Morton <akpm@linux-foundation.org>
      Signed-off-by: NLinus Torvalds <torvalds@linux-foundation.org>
      3d88958e
    • J
      uml: random driver fixes · 5d33e4d7
      Jeff Dike 提交于
      The random driver would essentially hang if the host's /dev/random returned
      -EAGAIN.  There was a test of need_resched followed by a schedule inside the
      loop, but that didn't help and it's the wrong way to work anyway.
      
      The right way is to ask for an interrupt when there is input available from
      the host and handle it then rather than polling.
      
      Now, when the host's /dev/random returns -EAGAIN, the driver asks for a wakeup
      when there's randomness available again and sleeps.  The interrupt routine
      just wakes up whatever processes are sleeping on host_read_wait.
      
      There is an atomic_t, host_sleep_count, which counts the number of processes
      waiting for randomness.  When this reaches zero, the interrupt is disabled.
      
      An added complication is that async I/O notification was only recently added
      to /dev/random (by me), so essentially all hosts will lack it.  So, we use the
      sigio workaround here, which is to have a separate thread poll on the
      descriptor and send an interrupt when there is input on it.  This mechanism is
      activated when a process gets -EAGAIN (activating this multiple times is
      harmless, if a bit wasteful) and deactivated by the last process still
      waiting.
      
      The module name was changed from "random" to "hw_random" in order for udev to
      recognize it.
      
      The sigio workaround needed some changes.  sigio_broken was added for cases
      when we know that async notification doesn't work.  This is now called from
      maybe_sigio_broken, which deals with pts devices.
      Signed-off-by: NJeff Dike <jdike@linux.intel.com>
      Signed-off-by: NAndrew Morton <akpm@linux-foundation.org>
      Signed-off-by: NLinus Torvalds <torvalds@linux-foundation.org>
      5d33e4d7
  2. 06 2月, 2008 1 次提交
    • J
      uml: header untangling · 8192ab42
      Jeff Dike 提交于
      Untangle UML headers somewhat and add some includes where they were
      needed explicitly, but gotten accidentally via some other header.
      
      arch/um/include/um_uaccess.h loses asm/fixmap.h because it uses no
      fixmap stuff and gains elf.h, because it needs FIXADDR_USER_*, and
      archsetjmp.h, because it needs jmp_buf.
      
      pmd_alloc_one is uninlined because it needs mm_struct, and that's
      inconvenient to provide in asm-um/pgtable-3level.h.
      
      elf_core_copy_fpregs is also uninlined from elf-i386.h and
      elf-x86_64.h, which duplicated the code anyway, to
      arch/um/kernel/process.c, so that the reference to current_thread
      doesn't pull sched.h or anything related into asm/elf.h.
      
      arch/um/sys-i386/ldt.c, arch/um/kernel/tlb.c and
      arch/um/kernel/skas/uaccess.c got sched.h because they dereference
      task_structs.  Its includes of linux and asm headers got turned from
      "" to <>.
      
      arch/um/sys-i386/bug.c gets asm/errno.h because it needs errno
      constants.
      
      asm/elf-i386 gets asm/user.h because it needs user_regs_struct.
      
      asm/fixmap.h gets page.h because it needs PAGE_SIZE and PAGE_MASK and
      system.h for BUG_ON.
      
      asm/pgtable doesn't need sched.h.
      
      asm/processor-generic.h defined mm_segment_t, but didn't use it.  So,
      that definition is moved to uaccess.h, which defines a bunch of
      mm_segment_t-related stuff.  thread_info.h uses mm_segment_t, and
      includes uaccess.h, which causes a recursion.  So, the definition is
      placed above the include of thread_info. in uaccess.h.  thread_info.h
      also gets page.h because it needs PAGE_SIZE.
      
      ObCheckpatchViolationJustification - I'm not adding a typedef; I'm
      moving mm_segment_t from one place to another.
      Signed-off-by: NJeff Dike <jdike@linux.intel.com>
      Signed-off-by: NAndrew Morton <akpm@linux-foundation.org>
      Signed-off-by: NLinus Torvalds <torvalds@linux-foundation.org>
      8192ab42
  3. 08 5月, 2007 2 次提交
    • J
      uml: rename os_{read_write}_file_k back to os_{read_write}_file · a6ea4cce
      Jeff Dike 提交于
      Rename os_{read_write}_file_k back to os_{read_write}_file, delete
      the originals and their bogus infrastructure, and fix all the callers.
      Signed-off-by: NJeff Dike <jdike@linux.intel.com>
      Cc: Paolo 'Blaisorblade' Giarrusso <blaisorblade@yahoo.it>
      Signed-off-by: NAndrew Morton <akpm@linux-foundation.org>
      Signed-off-by: NLinus Torvalds <torvalds@linux-foundation.org>
      a6ea4cce
    • J
      uml: start fixing os_read_file and os_write_file · 3d564047
      Jeff Dike 提交于
      This patch starts the removal of a very old, very broken piece of code.  This
      stems from the problem of passing a userspace buffer into read() or write() on
      the host.  If that buffer had not yet been faulted in, read and write will
      return -EFAULT.
      
      To avoid this problem, the solution was to fault the buffer in before the
      system call by touching the pages that hold the buffer by doing a copy-user of
      a byte to each page.  This is obviously bogus, but it does usually work, in tt
      mode, since the kernel and process are in the same address space and userspace
      addresses can be accessed directly in the kernel.
      
      In skas mode, where the kernel and process are in separate address spaces, it
      is completely bogus because the userspace address, which is invalid in the
      kernel, is passed into the system call instead of the corresponding physical
      address, which would be valid.  Here, it appears that this code, on every host
      read() or write(), tries to fault in a random process page.  This doesn't seem
      to cause any correctness problems, but there is a performance impact.  This
      patch, and the ones following, result in a 10-15% performance gain on a kernel
      build.
      
      This code can't be immediately tossed out because when it is, you can't log
      in.  Apparently, there is some code in the console driver which depends on
      this somehow.
      
      However, we can start removing it by switching the code which does I/O using
      kernel addresses to using plain read() and write().  This patch introduces
      os_read_file_k and os_write_file_k for use with kernel buffers and converts
      all call locations which use obvious kernel buffers to use them.  These
      include I/O using buffers which are local variables which are on the stack or
      kmalloc-ed.  Later patches will handle the less obvious cases, followed by a
      mass conversion back to the original interface.
      Signed-off-by: NJeff Dike <jdike@linux.intel.com>
      Cc: Paolo 'Blaisorblade' Giarrusso <blaisorblade@yahoo.it>
      Signed-off-by: NAndrew Morton <akpm@linux-foundation.org>
      Signed-off-by: NLinus Torvalds <torvalds@linux-foundation.org>
      3d564047
  4. 12 2月, 2007 1 次提交
  5. 30 9月, 2006 1 次提交
  6. 27 9月, 2006 1 次提交
  7. 07 11月, 2005 1 次提交
  8. 29 5月, 2005 1 次提交
  9. 17 4月, 2005 1 次提交
    • L
      Linux-2.6.12-rc2 · 1da177e4
      Linus Torvalds 提交于
      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