Skip to content
Snippets Groups Projects
  1. Aug 13, 2013
    • Glauber Costa's avatar
      factor out device_create · 1381d181
      Glauber Costa authored
      For xen, I would like to use an already existing device instead of creating one.
      I still need to register it, though. I am here factoring out device_create in
      a allocation and a registering part so I can use the later by itself.
      1381d181
  2. Aug 12, 2013
    • Avi Kivity's avatar
      vfs: relax dependency of close() performance on rcu grace periods · 43df74e7
      Avi Kivity authored
      Currently, we perform the final fdrop() in an rcu callback, which means it
      can have considerable latency.  This in turn places restrictions on
      further optimizations we can do to rcu, as we need prompt close() execution.
      
      Relax this by performing the fdrop() immediately, and only deferring the
      final free().  To do this, we harden fget() so it now expects files with
      positive refcounts, and make sure that after the final fdrop() refcounts
      are either zero or negative.
      
      This also makes close() take effect immediately, which fixes tst-pipe.so.
      43df74e7
  3. Aug 11, 2013
  4. Aug 07, 2013
    • Christoph Hellwig's avatar
      vfs: don't require a writable fd for fsync · f39792ff
      Christoph Hellwig authored
      Posix doesn't require a writeable file descriptor for fsync, and all common
      operating systems allow fsync on a non-writable fd, as this is required
      to synchronize directory operations.
      
      Also fix up the indentation in sys_fsync a bit.
      f39792ff
  5. Aug 06, 2013
  6. Aug 05, 2013
  7. Jul 30, 2013
  8. Jul 15, 2013
  9. Jul 08, 2013
    • Nadav Har'El's avatar
      Don't include <osv/poll.h> in <osv/file.h> · 492efb77
      Nadav Har'El authored
      We can't include osv/poll.h from osv/file.h. It's not needed there,
      and causes a mess now that I added a use of BSD's "struct mtx" to
      poll.h (because it turns out we have code using <osv/file.h> and using
      the name "mtx" for something else).
      
      After removing the unneeded include of <osv/poll.h> from osv/file.h,
      we need to add include <sys/poll.h> to a few additional source files
      (note include of sys/poll.h, not osv/poll.h).
      492efb77
  10. Jul 02, 2013
  11. Jun 26, 2013
  12. Jun 19, 2013
    • Nadav Har'El's avatar
      Don't crash on lseek() of non-regular file · 0c8ef37c
      Nadav Har'El authored
      lseek() crashes when used on pipes, sockets, and now also fd 0, 1 or 2
      (the console), because they don't have an underlying vnode. No reason
      to assert() in this case, should just return ESPIPE (like Linux does
      for pipes, sockets and ttys).
      
      Similarly, fsync, readdir and friends, fchdir and fstatfs shouldn't
      crash if given a fd without a vnode, and rather should return the
      expected error.
      0c8ef37c
    • Nadav Har'El's avatar
      Fix concurrent console read and write bug · 907e6336
      Nadav Har'El authored
      We had a bug where a read() on the console (fd 0) would block writes to
      the console (fd 1 or 2). This was most noticable when background threads
      in the CLI tried to write output, and were blocked until the next keypress
      because the blocking read() would lock the writes out.
      
      The bug happens because we opened the console using open("/dev/console")
      and dup()'ed the resulting fd, but this results, in the current code, in
      every read and write to these file descriptors to pass through vfs_read()/
      vfs_write(), which lock a single vnode lock for all three file descriptors -
      leading to write on fd 1 blocking while read is ongoing on fd 0.
      
      This patch doesn't fix this vnode lock issue, which remains - and should
      be fixed when the devfs or vfs layers are rewritten. Instead, this patch
      adds a *second API* for opening a console which doesn't go through the
      vnode or devfs layers:
      
      A new console::open() function returns a file descriptor which implements
      the correct file operations, and is not associated with any vnode.
      
      The new implementation works well with write() while read() is ongoing.
      
      Note that poll() support was missing from the old implementation (it
      seems it can't be done with the vnode abstraction?) and is still missing
      in the new implementation, although now shouldn't be hard to add
      (need to implement the poll fileops, and to use poll_wake() in the
      line-discipline function console_poll).
      907e6336
    • Nadav Har'El's avatar
      Add unsupported_poll · 29652e61
      Nadav Har'El authored
      Sorry, missing unsupported_poll broke compilation after the previous patch
      29652e61
  13. Jun 18, 2013
  14. Jun 12, 2013
    • Glauber Costa's avatar
      run console earlier · 4b5afd0f
      Glauber Costa authored
      
      We could benefit from the console being ready a bit earlier. The only
      dependency that I see to it are the interrupts that need to be working.  So as
      soon as we initialize the ioapic, we should be able to initialize the console.
      
      This is not the end of story: we still need an even earlier console to debug the
      driver initialization functions, and I was inclined to just leave console_init
      where it is, for now.
      
      But additionally, I felt that loader is really a more appropriate place for
      that than vfs_init... So I propose we switch. In the mean time, it might help
      debug things that happen between ioapic init and the old vfs_init (mem
      initialization, smp bring up, etc)
      
      Signed-off-by: default avatarGlauber Costa <glommer@cloudius-systems.com>
      4b5afd0f
  15. Jun 05, 2013
    • Avi Kivity's avatar
      trace: add unique ID for tracepoints · 0102df29
      Avi Kivity authored
      In order to optimize the fast path of tracepoints, we need to patch
      the call sites to skip calling the slow path code completely.  In turn,
      that requires that each call site be unique -- a separate function.
      
      In the current implementations, tracepoints with the same signature map
      to the same type.  It would have been great to use the name as a discriminant
      (tracepoint<"sched_queue", thread*> trace_sched_queue(...);), but C++ does
      not support string literals as template arguments.
      
      We could do
      
        const char* trace_sched_queue_name = "sched_queue";
        tracepoint<trace_sched_queue_name, thread*> trace_sched_queue(...);
      
      but that doubles the code for declaring a tracepoint.  Add a unique ID instead
      (and code to verify it is unique).
      0102df29
  16. May 31, 2013
  17. May 30, 2013
    • Nadav Har'El's avatar
      Add missing line to fs/build.mak · 75511f05
      Nadav Har'El authored
      Previous commit broke the build, because I forgot to commit a file.
      75511f05
    • Nadav Har'El's avatar
      Move unsupported fileops to fs/unsupported.c · 5062ff4f
      Nadav Har'El authored
      Previously, we re-implemented "unsupported" file operations (e.g., chmod
      for a pipe on which fchmod makes no sense) several times - there was
      an implementation only for chmod in kern_descrip.c, used in sys_socket.c,
      and af_local.cc had its own. As we add more file descriptor type (e.g.,
      create_epoll()) we'll have even more copies of these silly functions, so
      let's do it once in fs/unsupported.c - with the fs/unsupported.h header
      file.
      
      This also gives us a central place to document (and argue) whether an
      unimplemented ioctl() should return ENOTTY or EBADF (I think the former).
      5062ff4f
  18. May 24, 2013
  19. May 23, 2013
    • Nadav Har'El's avatar
      Added missing extern "C" on pread64 · a3fc06f0
      Nadav Har'El authored
      Avi recently added extern "C" to pwrite64 (after the header change apparently
      removed this declaration from the header file). Also do this to pread64 -
      otherwise the "derby" benchmark (from SPECjvm2008) cannot run.
      a3fc06f0
Loading