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.
