Hi -

The old style of O_NONBLOCKing was to set the #ip conversation to be
non-blocking.  This tracked the nonblock on the conversation (analogous
to a server's file).  Now we track it on the chan (analagous to an
OS's struct file*).  This allows us to use fcntl easily to toggle
nonblock on a per-chan/file basis.  It also allows us to easily add
support for nonblocking pipes.

Here are the highlights:
- Various bugfixes, including misaligned vcore stacks
- Removal of one of our oldest syscalls: SYS_cputs
- Renaming all KMALLOC_WAIT -> MEM_WAIT, and the incremental usage of
  MEM_ATOMIC instead of '0' for memory allocation flags.
- Rewrite of qio read/write functions using common backend helpers
- O_NONBLOCK support on chans for pipes and sockets

With these changes and the latest from dropbear-akaros/akaros, we can
do most everything we want.  There's still a bug with scp prepending an
extra byte to file transfers.

Barret



The following changes since commit 766c3a49b90c98a52bf0ac74814365d077b5f9f2:

  Bump the size of the ancillary state (XCC) (2016-03-31 16:52:25 -0400)

are available in the git repository at:

  [email protected]:brho/akaros.git net

for you to fetch changes up to b20137eb6979c3ceceba3ed857f3832f0aa1daab:

  qio: Remove the old qnonblock() (2016-03-31 16:53:42 -0400)

----------------------------------------------------------------
View this online at:
https://github.com/brho/akaros/compare/766c3a49b90c...b20137eb6979

----------------------------------------------------------------
Barret Rhoden (36):
      Remove the double-close() warning
      Fix minor leaks in mm.c
      Map PTEs for MAP_SHARED | MAP_LOCKED files on fork
      Use the POSIX isatty() (XCC)
      Use write() in parlib/debug.c
      Remove SYS_cputs (XCC)
      Remove SYS_cgetc (XCC)
      Send SIGCHLD to the parent when a process exits
      Properly align vcore stacks on x86
      Make akaros_vfprintf() take a stream (XCC)
      Intercept vfprintf() instead of printf() (XCC)
      Fix chan ref leak in fd_setfl()
      Add a chan_ctl devop; support fcntl on chans
      Remove the O_NONBLOCK fcntl() intercept (XCC)
      Rework memory allocation flags [1/2]
      Rename KMALLOC_* -> MEM_* [2/2]
      Make iallocb just an _allocb(x, 0) [1/2]
      Make all block allocations use the same func [2/2]
      qio: Clean up locking
      qio: remove qproduce()
      Stop setting a kick for TCP's RQ
      qio: Consolidate producer functions
      Stop calling qremove() outside qio.c
      Remove qnonblock from the profiler
      qio: Remove qconsume()
      Pass the buf to block_append_extra()
      Move SIZE_MAX into common.h
      Make freeb() and freeblist() return the old size
      qio: Consolidate readers into __qbread()
      qio: Provide helpers for O_NONBLOCK operations
      net: Add a helper chan2conv()
      net: Use chan flag O_NONBLOCK for nonblocking
      net: Fixup iplib based on the O_NONBLOCK rules
      net: Fixup socket shims use of O_NONBLOCK (XCC)
      Add O_NONBLOCK support to pipes
      qio: Remove the old qnonblock()

 kern/arch/x86/devarch.c                            |   14 +-
 kern/arch/x86/msi.c                                |    2 +-
 kern/arch/x86/perfmon.c                            |    6 +-
 kern/arch/x86/pmap64.c                             |    4 +-
 kern/arch/x86/process64.c                          |   27 +-
 kern/arch/x86/trap.c                               |    3 +-
 kern/arch/x86/vmm/intel/vmx.c                      |    7 +-
 kern/arch/x86/vmm/vmm.c                            |    3 +-
 kern/drivers/dev/acpi.c                            |    8 +-
 kern/drivers/dev/alarm.c                           |    2 +-
 kern/drivers/dev/cons.c                            |    2 +-
 kern/drivers/dev/ether.c                           |    6 +-
 kern/drivers/dev/eventfd.c                         |    2 +-
 kern/drivers/dev/kprof.c                           |    8 +-
 kern/drivers/dev/mnt.c                             |   13 +-
 kern/drivers/dev/pipe.c                            |   40 +-
 kern/drivers/dev/proc.c                            |   20 +-
 kern/drivers/dev/root.c                            |    4 +-
 kern/drivers/dev/srv.c                             |    6 +-
 kern/drivers/dev/vars.c                            |    4 +-
 kern/drivers/dev/version.c                         |    2 +-
 kern/drivers/net/bnx2x/bnx2x.h                     |    2 +-
 kern/drivers/net/bnx2x/bnx2x_cmn.c                 |   30 +-
 kern/drivers/net/bnx2x/bnx2x_cmn.h                 |    4 +-
 kern/drivers/net/bnx2x/bnx2x_dev.c                 |    5 +-
 kern/drivers/net/bnx2x/bnx2x_ethtool.c             |    2 +-
 kern/drivers/net/bnx2x/bnx2x_main.c                |   14 +-
 kern/drivers/net/bnx2x/bnx2x_sriov.c               |    8 +-
 kern/drivers/net/bnx2x/bnx2x_vfpf.c                |    2 +-
 kern/drivers/net/ether8139.c                       |    6 +-
 kern/drivers/net/ether8169.c                       |   14 +-
 kern/drivers/net/ether82563.c                      |   10 +-
 kern/drivers/net/etherigbe.c                       |    6 +-
 kern/drivers/net/mlx4/alloc.c                      |   12 +-
 kern/drivers/net/mlx4/cmd.c                        |   22 +-
 kern/drivers/net/mlx4/cq.c                         |    4 +-
 kern/drivers/net/mlx4/en_cq.c                      |    4 +-
 kern/drivers/net/mlx4/en_ethtool.c                 |   12 +-
 kern/drivers/net/mlx4/en_main.c                    |    2 +-
 kern/drivers/net/mlx4/en_netdev.c                  |   14 +-
 kern/drivers/net/mlx4/en_resources.c               |    2 +-
 kern/drivers/net/mlx4/en_rx.c                      |   18 +-
 kern/drivers/net/mlx4/en_tx.c                      |   12 +-
 kern/drivers/net/mlx4/eq.c                         |   12 +-
 kern/drivers/net/mlx4/icm.c                        |    6 +-
 kern/drivers/net/mlx4/intf.c                       |    2 +-
 kern/drivers/net/mlx4/main.c                       |   24 +-
 kern/drivers/net/mlx4/mcg.c                        |   10 +-
 kern/drivers/net/mlx4/mr.c                         |   10 +-
 kern/drivers/net/mlx4/pd.c                         |    4 +-
 kern/drivers/net/mlx4/profile.c                    |    2 +-
 kern/drivers/net/mlx4/qp.c                         |   10 +-
 kern/drivers/net/mlx4/reset.c                      |    2 +-
 kern/drivers/net/mlx4/resource_tracker.c           |   40 +-
 kern/drivers/net/mlx4/srq.c                        |    4 +-
 kern/drivers/net/udrvr/compat.h                    |    4 +-
 kern/include/common.h                              |    2 +
 kern/include/ip.h                                  |    2 -
 kern/include/kmalloc.h                             |    7 +-
 kern/include/linux/compat_todo.h                   |    4 +-
 kern/include/linux_compat.h                        |    4 +-
 kern/include/ns.h                                  |   41 +-
 kern/include/ros/bits/syscall.h                    |    4 +-
 kern/lib/circular_buffer.c                         |    2 +-
 kern/lib/slice.c                                   |    5 +-
 kern/lib/zlib_inflate/infutil.c                    |    4 +-
 kern/src/dmapool.c                                 |    2 +-
 kern/src/fdtap.c                                   |    2 +-
 kern/src/kreallocarray.c                           |    1 -
 kern/src/ktest/pb_ktests.c                         |    4 +-
 kern/src/mm.c                                      |   59 +-
 kern/src/net/arp.c                                 |    2 +-
 kern/src/net/devip.c                               |   95 +-
 kern/src/net/dial.c                                |   18 +-
 kern/src/net/ethermedium.c                         |   10 +-
 kern/src/net/icmp.c                                |    4 +-
 kern/src/net/icmp6.c                               |    2 +-
 kern/src/net/ipv6.c                                |    3 +-
 kern/src/net/tcp.c                                 |   12 +-
 kern/src/ns/allocb.c                               |   86 +-
 kern/src/ns/dev.c                                  |    6 +-
 kern/src/ns/devtab.c                               |    2 +-
 kern/src/ns/pgrp.c                                 |    2 +-
 kern/src/ns/qio.c                                  | 1131 ++++------
 kern/src/ns/sysfile.c                              |   24 +-
 kern/src/page_alloc.c                              |    4 +-
 kern/src/process.c                                 |   11 +-
 kern/src/profiler.c                                |    5 +-
 kern/src/slab.c                                    |    2 +-
 kern/src/smallidpool.c                             |    2 +-
 kern/src/syscall.c                                 |   41 +-
 kern/src/vfs.c                                     |    6 +-
 scripts/plan9                                      |    2 +-
 scripts/spatch/linux/memory.cocci                  |    6 +-
 scripts/spatch/malloc.cocci                        |   14 +
 tests/epoll_server.c                               |   24 +-
 tests/select_server.c                              |   18 +-
 .../glibc-2.19-akaros/sysdeps/akaros/Makefile      |    1 -
 .../glibc-2.19-akaros/sysdeps/akaros/Versions      |    2 +-
 .../glibc-2.19-akaros/sysdeps/akaros/accept.c      |   27 +-
 .../glibc-2.19-akaros/sysdeps/akaros/fcntl-ext.c   |  101 -
 .../glibc-2.19-akaros/sysdeps/akaros/fcntl.c       |    3 +
 .../glibc-2.19-akaros/sysdeps/akaros/isatty.c      |   27 +-
 .../sysdeps/akaros/parlib-compat.c                 |    4 +-
 .../sysdeps/akaros/plan9_sockets.c                 |    5 +-
 .../glibc-2.19-akaros/sysdeps/akaros/printf.c      |   46 -
 .../glibc-2.19-akaros/sysdeps/akaros/socket.c      |    6 +-
 .../glibc-2.19-akaros/sysdeps/akaros/vfprintf.c    | 2361 ++++++++++++++++++++
 user/iplib/announce.c                              |    2 +-
 user/iplib/dial.c                                  |    4 +-
 user/parlib/debug.c                                |   16 +-
 user/parlib/include/parlib/parlib.h                |    2 -
 user/parlib/include/parlib/stdio.h                 |    4 +-
 user/parlib/include/parlib/vcore.h                 |    3 +
 user/parlib/riscv/vcore.c                          |   25 +
 user/parlib/riscv/{vcore.S => vcore_asm.S}         |    0
 user/parlib/syscall.c                              |   10 -
 user/parlib/vcore.c                                |   31 -
 user/parlib/x86/vcore.c                            |   32 +-
 user/parlib/x86/vcore_asm.S                        |   14 +
 120 files changed, 3477 insertions(+), 1442 deletions(-)
 delete mode 100644 
tools/compilers/gcc-glibc/glibc-2.19-akaros/sysdeps/akaros/fcntl-ext.c
 delete mode 100644 
tools/compilers/gcc-glibc/glibc-2.19-akaros/sysdeps/akaros/printf.c
 create mode 100644 
tools/compilers/gcc-glibc/glibc-2.19-akaros/sysdeps/akaros/vfprintf.c
 create mode 100644 user/parlib/riscv/vcore.c
 rename user/parlib/riscv/{vcore.S => vcore_asm.S} (100%)
 create mode 100644 user/parlib/x86/vcore_asm.S

-- 
You received this message because you are subscribed to the Google Groups 
"Akaros" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To post to this group, send email to [email protected].
For more options, visit https://groups.google.com/d/optout.

Reply via email to