Git Product home page Git Product logo

liblor / advanced_operating_systems_2020 Goto Github PK

View Code? Open in Web Editor NEW
16.0 3.0 3.0 14.84 MB

Advanced Operating System Course at ETHZ

License: MIT License

Nix 0.01% Haskell 1.25% Shell 0.14% C 79.05% C++ 10.74% CMake 0.05% Objective-C 0.08% Assembly 1.13% Makefile 0.23% Roff 6.80% Lex 0.01% Yacc 0.01% Python 0.47% GDB 0.01% TeX 0.03% Batchfile 0.01%
os aos ethz operating-system operating-systems barrelfish

advanced_operating_systems_2020's People

Contributors

abertschi avatar dasch8 avatar eikendev avatar leopoldsedev avatar liblor avatar lluki avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar

advanced_operating_systems_2020's Issues

Destination slot is occupied for cap transfer

https://github.com/Liblor/advanced_operating_systems_2020/tree/bug/destination-slot-occupied

System counter frequency is 8000000Hz.
Timeslice interrupt every 640000 ticks (80ms).
kernel 0: ARMv8-A: Setting coreboot spawn handler
kernel 0: ARMv8-A: Calling arm_kernel_startup
kernel 0: ARMv8-A: Doing BSP related bootup
start_free_ram = 0x80201000
kernel 0: ARMv8-A: spawning 'armv8/sbin/init' on BSP core
kernel 0: ARMv8-A: spawn_init_common armv8/sbin/init
spawn module: armv8/sbin/init
kernel 0: init page tables: l0=0xffff000080520000, l1=0xffff000080521000, l2=0xffff000080522000, l3=0xffff000080532000
load_init_image 0xffff0000fbfdd000 0008451f
kernel 0: ARMv8-A: init loaded with entry=0x400974 and GOT=0x45ad18
kernel 0: ARMv8-A: Calling dispatch from arm_kernel_startup, entry point 0x400974
init.0.0: initializing static heap
init.0.0: init: on core 0, invoked as:init.0.0: Added 1958 MB of physical memory.
init.0.0: processserver_init()
init.0.0: name is: /armv8/sbin/dummy
kernel 0: ARMv8-A: Timer interrupt received!
dummy.0.0: initializing static heap
init.0.0: name is: /armv8/sbin/dummy
dummy.0.0: initializing static heap
dummy.0.0: A transient error occured 10 times, retries exceeded
dummy.0.0: lmp_chan_send0() failed: Destination slot is occupied for cap transfer
dummy.0.0: Error while setting up channel for init
dummy.0.0: aos_rpc_lmp_setup_channel() failed
init.0.0: name is: /armv8/sbin/dummy

PID counter in processserver can overflow

We currently set num_proc in the server's state to 0 initially, and increment for each process that is registered.

We should handle overflows, so the same PID cannot be assigned to two different processes. Instead of incrementing once only, we could increment until the first "free" PID is reached, i.e., num_proc is not currently used for any other dispatcher that is still alive.

rpc server refactoring introduced marshall bugs

Changes introduced by #71 break processserver code on master branch.
aos_rpc_process_spawn tests implemented in hello.c don't receive the proper name anymore. There is an issue with the unmarshalling on the server.

init.0.0: processserver service_recv_cb()
init.0.0: name is: /armv8/sbin/ᆳ�
init.0.0: multiboot_find_module() failed

init.0.0: initializing static heap
init.0.0: init: on core 0, invoked as: init 2097152
init.0.0: Added 1960 MB of physical memory.
init.0.0: processserver_init()
init.0.0: name is: /armv8/sbin/hello
init.0.0: Message handler loop
hello.0.0: initializing static heap
hello.0.0: Setting up a new channel to init.
init.0.0: open_recv_cb()
hello.0.0: Setting up a new channel to memory.
init.0.0: open_recv_cb()
kernel 0: ARMv8-A: Timer interrupt received!
hello.0.0: Setting up a new channel to serial.
init.0.0: open_recv_cb()
Hello, world! from userspace
argv[0]='hello'
argv[1]='123456'
argv[2]='654321'
argv[3]='hello world'
init.0.0: Received number 2
init.0.0: Received string hello world hello world whhhhhhhhh
hello.0.0: calling aos_rpc_process_spawn
hello.0.0: Setting up a new channel to process.
init.0.0: open_recv_cb()
init.0.0: processserver service_recv_cb()
init.0.0: name is: /armv8/sbin/ᆳ�
init.0.0: multiboot_find_module() failed
ERROR: init.0 in spawn_cb() /source//usr/init/main.c:117
ERROR: 
Failure: (          spawn) Didn't find module to be spawned [SPAWN_ERR_FIND_MODULE]
ERROR: init.0 in spawn_cb() /source//usr/init/main.c:118
ERROR: spawn_load_by_name()
Failure: (          spawn) Didn't find module to be spawned [SPAWN_ERR_FIND_MODULE]
ERROR: init.0 in handle_spawn_process() /source//usr/init/processserver.c:141
ERROR: 
Failure: (          spawn) Didn't find module to be spawned [SPAWN_ERR_FIND_MODULE]
hello.0.0: client_spawn_cb(...)
ERROR: hello.0 in client_spawn_cb() /source//lib/aos/aos_rpc_lmp.c:356
ERROR: status not ok
Failure: (         libaos) Invalid LMP response [LIB_ERR_LMP_INVALID_RESPONSE]
ERROR: hello.0 in aos_rpc_lmp_process_spawn() /source//lib/aos/aos_rpc_lmp.c:403
ERROR: 
Failure: (         libaos) Invalid LMP response [LIB_ERR_LMP_INVALID_RESPONSE]
ERROR: hello.0 in test_rpc() /source//usr/hello/hello.c:80
ERROR: 
Failure: (         libaos) Invalid LMP response [LIB_ERR_LMP_INVALID_RESPONSE]
ERROR: hello.0 in test_rpc() /source//usr/hello/hello.c:81
ERROR: aos_rpc_process_spawn()
Failure: (         libaos) Invalid LMP response [LIB_ERR_LMP_INVALID_RESPONSE]
hello.0.0: libc exit NYI!

Implement monitorserver

  • Create local monitorserver (LMP) in init dispatcher #125
  • Make dispatchers talk to local monitor #125
  • Make monitorserver forward all LMP packets to the correct server over URPC
    • depends on API provided by #122
  • Make monitor aware of local tasks that might have to be executed (spawn, forge)

Implement page fault handling

The mandatory tasks are the following.

  • According to the book, our paging system should be able to translate from virtual to physical addresses and the inverse. We should provide an efficient lookup in both directions.
  • Implement morecore to allow for unlimited dynamic allocations. #83
  • Remove the static heap. #83
    • Define the symbol SELF_PAGING_WORKS in lib/aos/threads.c.
    • Undefine USE_STATIC_HEAP in morecore.c.

We should be testing the malloc() and free() implementations thoroughly. Also, we need to pay attention to concurrency, which means we need to figure out how the threading system works.

Out ouf bounds write

struct rpc_message msg;
msg.cap = NULL_CAP;
msg.msg.method = Method_Serial_Getchar;
msg.msg.payload_length = sizeof(c);
msg.msg.status = Status_Ok;
msg.msg.payload[0] = c;

The memory at the following address is never "allocated" (it is on the stack, but it is not guaranteed, that it is unused)

    msg.msg.payload[0] = c;

how to obtain more heap memory, malloc vs slab

In the paging code as well as other places, we need to allocate memory.
In the script it's says we can use malloc/free, but need to be aware that we have a static heap size of 16Mb. Once it is full we may use slabs.

I can think of two options how to tackle this:

  • each piece code which needs memory creates a slab_allocator and requests memory via it (analogue to prev. milestones)
  • we use malloc/free everywhere and make sure we extend the static heap with a slab alllocator once it's full (call paging code from morecore.c where static heap is allocated, see TODOs).

A dynamic heap is part of milestone 4. However,
allocating memory with slabs wherever we need memory is cumbersome and needs boilerplate to bootstrap/ maintain free slabs.
Also the blocksize of requestable slabs is fixed.

For the hashmap implementation I initially wanted to provide function pointers for malloc/free such that the caller can set how
memory is requested (ie. via a slab_alloc function or malloc), but considering upcoming milestone, I think It makes sense to use malloc/free everywhere and tackle refilling with slabs at a central point in morecore.c

static heap:

// this define makes morecore use an implementation that just has a static
// 16MB heap.
// TODO (M4): use a dynamic heap instead,
#define USE_STATIC_HEAP
#ifdef USE_STATIC_HEAP
// dummy mini heap (16M)
#define HEAP_SIZE (1<<24)
static char mymem[HEAP_SIZE] = { 0 };
static char *endp = mymem + HEAP_SIZE;

dynamic heap:

// dynamic heap using lib/aos/paging features
/**
* \brief Allocate some memory for malloc to use
*
* This function will keep trying with smaller and smaller frames till
* it finds a set of frames that satisfy the requirement. retbytes can
* be smaller than bytes if we were able to allocate a smaller memory
* region than requested for.
*/
static void *morecore_alloc(size_t bytes, size_t *retbytes)
{
USER_PANIC("NYI \n");
return NULL;
}

remove process server tracing

spawning 1 'networking'
init.0.0: name is: /armv8/sbin/networking
init.0.0: multiboot_find_module() failed
init.0.0: spawn_cb in local task failed: Didn't find module to be spawnedSUCCESS: processserver.0 in processserver_send_spawn_local() /source//usr/processserver/processserver.c:89
SUCCESS: response status of local task request indicates an error
ERROR: processserver.0 in spawn_cb() /source//usr/processserver/processserver.c:207
ERROR: spawn_load_by_name()
ERROR: processserver.0 in handle_spawn_process() /source//usr/processserver/processserver.c:245
ERROR: spawn_cb()
Failure: (         libaos) functionality not implemented yet [LIB_ERR_NOT_IMPLEMENTED]
aosh >>> Failure: (         libaos) functionality not implemented yet [LIB_ERR_NOT_IMPLEMENTED]

improve error handling for errors in lmp server callback

if (ram_cap_cb != NULL) {
size_t retbytes;
err = ram_cap_cb(bytes, alignment, &retcap, &retbytes);
if (err_is_fail(err)) {
err = reply_error(reply_chan);
}
err = reply_cap(reply_chan, &retcap, retbytes);
} else {
err = reply_error(reply_chan);
}
break;

Nothing is done with these returned errors. @leopoldsedev you wrote this.
We should print these errors or even better provide a function to notify the server implementation that there was an error in the callback. As the callback cannot return something.

oncore -c 1 dummy leads to monitor issue

usage: oncore [-c coreId] [-t times] name
aosh >>> oncore -c 1 -t 1 dummyprocessserver.0.1: Looking up monitor service of core 1.
init.0.1: Service 'servermonitor1' not registered.
processserver.0.1: aos_rpc_ns_lookup() failed: Invalid LMP response
processserver.0.1: nameservice_lookup() failed: Invalid LMP response
processserver.0.1: Failed to get monitor service for core 1.
ERROR: processserver.0 in spawn_cb() /source//usr/processserver/processserver.c:196
ERROR: spawn_load_by_name()
ERROR: processserver.0 in handle_spawn_process() /source//usr/processserver/processserver.c:234
ERROR: spawn_cb()

Failure: (         libaos) functionality not implemented yet [LIB_ERR_NOT_IMPLEMENTED]
optind:5
Failure: (         libaos) functionality not implemented yet [LIB_ERR_NOT_IMPLEMENTED]
spawning 'dummy' on core '1' 1 time(s)
spawning 1 'dummy'

rpc_test fails with self paging

We merged master with faults-handling-master:
https://github.com/Liblor/advanced_operating_systems_2020/tree/paging/faults-handling-master-merge

This result occurs with const uint64_t process_number = 5;.

rpc-test.0.0: Testing serial RPC...
init.0.0: Assertion failed: (dp->lmp_poll_list == ep), function lmp_endpoints_poll_disabled, file /source//lib/aos/lmp_endpoints.c, line 209.
Aborted
init.0.0: libc exit NYI!
Dispatcher assertion failed in init: disp->disabled == 0, function disp_disable, file /source//lib/aos/dispatch.c, line 225.
dummy.0.0: initializing static heap
ERROR: dummy.0 in aos_rpc_lmp_setup_channel() /source//lib/aos/aos_rpc_lmp.c:438
ERROR: transient
ERROR: dummy.0 in aos_rpc_lmp_setup_channel() /source//lib/aos/aos_rpc_lmp.c:438
ERROR: transient
ERROR: dummy.0 in aos_rpc_lmp_setup_channel() /source//lib/aos/aos_rpc_lmp.c:438
ERROR: transient
ERROR: dummy.0 in aos_rpc_lmp_setup_channel() /source//lib/aos/aos_rpc_lmp.c:438
ERROR: transient
ERROR: dummy.0 in aos_rpc_lmp_setup_channel() /source//lib/aos/aos_rpc_lmp.c:438
ERROR: transient
ERROR: dummy.0 in aos_rpc_lmp_setup_channel() /source//lib/aos/aos_rpc_lmp.c:438

Add process to measure RPC performance

We could measure RPC performance by measuring the time it takes to call the send_number or send_string RPC a fixed number of times or something similar.

Pending Tasks to Finish Project

Overview about Pending Tasks

Report

  • Memory Management
  • Process, Threads, Dispatch
  • LMP Message Passing
  • Page Fault Handling
  • Multicore
  • URPC Message Passing
  • Shell
  • Filesystem
  • Networking
  • Nameserver
  • Development Methodology
  • User Guide

Performance Evaluations

  • LMP Message Passing
  • Multicore simple URPC framework
  • URPC Message Passing
  • Filesystem
  • Networking

Individual Milestones

High Priority Bugs

  • Add Support to free memory again #132
  • Threading Bugs

spawning 100 processes causes hashtable assert fail, presumably in paging code

commit with test: 3a67c04

to very on master once rpc/client_framework branch merged


hello.0.0: spawned child: pid 80
Dummy spawned
dummy.0.0: libc exit NYI!
init.0.0: name is: /armv8/sbin/dummy
dummy.0.0: initializing static heap
init.0.0: new pid is 81
hello.0.0: spawned child: pid 81
Dummy spawned
dummy.0.0: libc exit NYI!
init.0.0: name is: /armv8/sbin/dummy
dummy.0.0: initializing static heap
init.0.0: new pid is 82
hello.0.0: spawned child: pid 82
Dummy spawned
dummy.0.0: libc exit NYI!
init.0.0: name is: /armv8/sbin/dummy
dummy.0.0: initializing static heap
Error: key 224 already present in hash table 224
init.0.0: Assertion failed: (0), function collections_hash_insert, file /source//lib/collections/hash_table.c, line 134.
Aborted
init.0.0: libc exit NYI!

Make rpc/lmp thread safe

When using locks be careful:

  • client requests RAM cap which triggers pagefault which requests RAM cap to map a new frame.

Use buddy system to allocate blocks in libmm

We currently use a worst-fit model. If we encounter problems regarding the performance of allocation, we might want to consider switching to a buddy system.

More information on how this works algorithmically can be found in "Operating Systems - Internals and Design Principles" by William Stallings, page 317ff in the seventh edition.

fix transient error in aos_rpc_lmp_process_get_all_pids when too many processes spawned

hello.0.0: client_spawn_cb(...)
hello.0.0: spawned child: pid 9
dummy.0.0: initializing static heap
dummy.0.0: Setting up a new channel to init.
dummy.0.0: initializing static heap
dummy.0.0: Setting up a new channel to init.
dummy.0.0: initializing static heap
dummy.0.0: Setting up a new channel to init.
dummy.0.0: initializing static heap
dummy.0.0: Setting up a new channel to init.
dummy.0.0: initializing static heap
dummy.0.0: Setting up a new channel to init.
dummy.0.0: initializing static heap
dummy.0.0: Setting up a new channel to init.
ERROR: dummy.0 in aos_rpc_lmp_send_message() /source//lib/aos/aos_rpc_lmp.c:65
ERROR: lmp_chan_send4 failed (transient)
ERROR: dummy.0 in aos_rpc_lmp_send_message() /source//lib/aos/aos_rpc_lmp.c:65
ERROR: lmp_chan_send4 failed (transient)
ERROR: dummy.0 in aos_rpc_lmp_send_message() /source//lib/aos/aos_rpc_lmp.c:65
ERROR: lmp_chan_send4 failed (transient)
ERROR: dummy.0 in aos_rpc_lmp_send_message() /source//lib/aos/aos_rpc_lmp.c:65
ERROR: lmp_chan_send4 failed (transient)
ERROR: dummy.0 in aos_rpc_lmp_send_message() /source//lib/aos/aos_rpc_lmp.c:65
ERROR: lmp_chan_send4 failed (transient)
ERROR: dummy.0 in aos_rpc_lmp_send_message() /source//lib/aos/aos_rpc_lmp.c:65
ERROR: lmp_chan_send4 failed (transient)
ERROR: dummy.0 in aos_rpc_lmp_send_message() /source//lib/aos/aos_rpc_lmp.c:65
ERROR: lmp_chan_send4 failed (transient)
ERROR: dummy.0 in aos_rpc_lmp_send_message() /source//lib/aos/aos_rpc_lmp.c:65
ERROR: lmp_chan_send4 failed (transient)





SYS_ERR_CAP_NOT_FOUND when setting up channel

This sometimes happens on 396e7ee.

dummy.0.0: Setting up a new channel to serial.
dummy.0.0: initializing static heap
dummy.0.0: Setting up a new channel to init.
init.0.0: new pid is 81
rpc-test.0.0: client_spawn_cb(...)
Dinit.0.0: open_recv_cb()
init.0.0: open_recv_cb()
dummy.0.0: Setting up a new channel to serial.
miinit.0.0: open_recv_cb()
dummy.0.0: Setting up a new channel to memory.
aupinit.0.0: processserver service_recv_cb()
init.0.0: name is: /armv8/sbin/dummy
ERROR: dummy.0 in aos_rpc_lmp_setup_channel() /source//lib/aos/aos_rpc_lmp.c:786
ERROR: transient
dummy.0.0: Setting up a new channel to serial.
dummy.0.0: initializing static heap
dummy.0.0: Setting up a new channel to init.
ERROR: init.0 in paging_map_fixed_single_pt3() /source//lib/aos/paging.c:525
ERROR:
Failure: (         kernel) Capability not found (empty slot encountered) [SYS_ERR_CAP_NOT_FOUND]
init.0.0: vnode_map failed: Capability not found (empty slot encountered)
ERROR: init.0 in paging_map_fixed_attr() /source//lib/aos/paging.c:609
ERROR:
Failure: (         kernel) Capability not found (empty slot encountered) [SYS_ERR_CAP_NOT_FOUND]
ERROR: init.0 in paging_map_fixed_attr() /source//lib/aos/paging.c:610
ERROR: paging_map_fixed_single_pt3 failed

Failure: (         kernel) Capability not found (empty slot encountered) [SYS_ERR_CAP_NOT_FOUND]
ERROR: init.0 in slab_refill_pages() /source//lib/aos/slab.c:193
ERROR:
Failure: (         kernel) Capability not found (empty slot encountered) [SYS_ERR_CAP_NOT_FOUND]
ERROR: init.0 in slab_ensure_threshold() /source//lib/aos/slab.c:230
ERROR:
Failure: (         libaos) Failure in vspace_map() wrapper function [LIB_ERR_VSPACE_MAP]
Failure: (         kernel) Capability not found (empty slot encountered) [SYS_ERR_CAP_NOT_FOUND]
ERROR: init.0 in mm_alloc_aligned() /source//lib/mm/mm.c:240
ERROR:
Failure: (         libaos) Refilling slab allocator failed [LIB_ERR_SLAB_REFILL]
Failure: (         libaos) Failure in vspace_map() wrapper function [LIB_ERR_VSPACE_MAP]
Failure: (         kernel) Capability not found (empty slot encountered) [SYS_ERR_CAP_NOT_FOUND]
ERROR: init.0 in vnode_create() /source//lib/aos/capabilities.c:680
ERROR:
Failure: (         libaos) Refilling slab allocator failed [LIB_ERR_SLAB_REFILL]
Failure: (         libaos) Failure in vspace_map() wrapper function [LIB_ERR_VSPACE_MAP]
Failure: (         kernel) Capability not found (empty slot encountered) [SYS_ERR_CAP_NOT_FOUND]
ERROR: init.0 in pt_alloc() /source//lib/aos/paging.c:44
ERROR:
Failure: (         libaos) Failure in ram_alloc() [LIB_ERR_RAM_ALLOC]
Failure: (         libaos) Refilling slab allocator failed [LIB_ERR_SLAB_REFILL]
Failure: (         libaos) Failure in vspace_map() wrapper function [LIB_ERR_VSPACE_MAP]
Failure: (         kernel) Capability not found (empty slot encountered) [SYS_ERR_CAP_NOT_FOUND]
init.0.0: vnode_create failed: Failure in ram_alloc()
ERROR: init.0 in paging_create_vnode() /source//lib/aos/paging.c:342
ERROR:
Failure: (         libaos) Failure in ram_alloc() [LIB_ERR_RAM_ALLOC]
Failure: (         libaos) Refilling slab allocator failed [LIB_ERR_SLAB_REFILL]
Failure: (         libaos) Failure in vspace_map() wrapper function [LIB_ERR_VSPACE_MAP]
Failure: (         kernel) Capability not found (empty slot encountered) [SYS_ERR_CAP_NOT_FOUND]
init.0.0: pt_alloc failed: Failure in ram_alloc()
ERROR: init.0 in paging_create_pd() /source//lib/aos/paging.c:486
ERROR:
Failure: (         libaos) Failure in ram_alloc() [LIB_ERR_RAM_ALLOC]
Failure: (         libaos) Refilling slab allocator failed [LIB_ERR_SLAB_REFILL]
Failure: (         libaos) Failure in vspace_map() wrapper function [LIB_ERR_VSPACE_MAP]
Failure: (         kernel) Capability not found (empty slot encountered) [SYS_ERR_CAP_NOT_FOUND]
init.0.0: paging_create_vnode ObjType_VNode_AARCH64_l3 failed: Failure in ram_alloc()
ERROR: init.0 in paging_map_fixed_single_pt3() /source//lib/aos/paging.c:508
ERROR:
Failure: (         libaos) Failure in ram_alloc() [LIB_ERR_RAM_ALLOC]
Failure: (         libaos) Refilling slab allocator failed [LIB_ERR_SLAB_REFILL]
Failure: (         libaos) Failure in vspace_map() wrapper function [LIB_ERR_VSPACE_MAP]
Failure: (         kernel) Capability not found (empty slot encountered) [SYS_ERR_CAP_NOT_FOUND]
init.0.0: paging_create_pd failed: Failure in ram_alloc()
ERROR: init.0 in paging_map_fixed_attr() /source//lib/aos/paging.c:609
ERROR:
Failure: (         libaos) Failure in ram_alloc() [LIB_ERR_RAM_ALLOC]
Failure: (         libaos) Refilling slab allocator failed [LIB_ERR_SLAB_REFILL]
Failure: (         libaos) Failure in vspace_map() wrapper function [LIB_ERR_VSPACE_MAP]
Failure: (         kernel) Capability not found (empty slot encountered) [SYS_ERR_CAP_NOT_FOUND]
ERROR: init.0 in paging_map_fixed_attr() /source//lib/aos/paging.c:610
ERROR: paging_map_fixed_single_pt3 failed

Failure: (         libaos) Failure in ram_alloc() [LIB_ERR_RAM_ALLOC]
Failure: (         libaos) Refilling slab allocator failed [LIB_ERR_SLAB_REFILL]
Failure: (         libaos) Failure in vspace_map() wrapper function [LIB_ERR_VSPACE_MAP]
Failure: (         kernel) Capability not found (empty slot encountered) [SYS_ERR_CAP_NOT_FOUND]
ERROR: init.0 in elf_allocator_cb() /source//lib/spawn/spawn.c:90
ERROR:
Failure: (         libaos) Failure in ram_alloc() [LIB_ERR_RAM_ALLOC]
Failure: (         libaos) Refilling slab allocator failed [LIB_ERR_SLAB_REFILL]
Failure: (         libaos) Failure in vspace_map() wrapper function [LIB_ERR_VSPACE_MAP]
Failure: (         kernel) Capability not found (empty slot encountered) [SYS_ERR_CAP_NOT_FOUND]
init.0.0: paging_map_frame_attr() failed: Failure in ram_alloc()
ERROR: init.0 in parse_elf() /source//lib/spawn/spawn.c:263
ERROR:
Failure: (         libelf) Nested failure in allocator function [ELF_ERR_ALLOCATE]
Failure: (         libaos) Failure in vspace_map() wrapper function [LIB_ERR_VSPACE_MAP]
Failure: (         libaos) Failure in ram_alloc() [LIB_ERR_RAM_ALLOC]
Failure: (         libaos) Refilling slab allocator failed [LIB_ERR_SLAB_REFILL]
Failure: (         libaos) Failure in vspace_map() wrapper function [LIB_ERR_VSPACE_MAP]
Failure: (         kernel) Capability not found (empty slot encountered) [SYS_ERR_CAP_NOT_FOUND]
init.0.0: elf_load() failed: Nested failure in allocator function
ERROR: init.0 in spawn_load_argv() /source//lib/spawn/spawn.c:576
ERROR:
Failure: (          spawn) Failure in spawn_elf_map [SPAWN_ERR_ELF_MAP]
Failure: (         libelf) Nested failure in allocator function [ELF_ERR_ALLOCATE]
dummy.0.0: initializing static heap
dummy.0.0: Setting up a new channel to init.
Failure: (         libaos) Failure in vspace_map() wrapper function [LIB_ERR_VSPACE_MAP]
Failure: (         libaos) Failure in ram_alloc() [LIB_ERR_RAM_ALLOC]
Failure: (         libaos) Refilling slab allocator failed [LIB_ERR_SLAB_REFILL]
Failure: (         libaos) Failure in vspace_map() wrapper function [LIB_ERR_VSPACE_MAP]
init.0.0: parse_elf() failed: Failure in spawn_elf_map
ERROR: init.0 in spawn_load_by_name() /source//lib/spawn/spawn.c:649
ERROR:
Failure: (          spawn) Failure in spawn_elf_map [SPAWN_ERR_ELF_MAP]
Failure: (          spawn) Failure in spawn_elf_map [SPAWN_ERR_ELF_MAP]
Failure: (         libelf) Nested failure in allocator function [ELF_ERR_ALLOCATE]
Failure: (         libaos) Failure in vspace_map() wrapper function [LIB_ERR_VSPACE_MAP]
Failure: (         libaos) Failure in ram_alloc() [LIB_ERR_RAM_ALLOC]
Failure: (         libaos) Refilling slab allocator failed [LIB_ERR_SLAB_REFILL]
init.0.0: spawn_load_argv() failed: Failure in spawn_elf_map
ERROR: init.0 in spawn_cb() /source//usr/init/main.c:117
ERROR:
Failure: (          spawn) Failure while loading [SPAWN_ERR_LOAD]
Failure: (          spawn) Failure in spawn_elf_map [SPAWN_ERR_ELF_MAP]
Failure: (          spawn) Failure in spawn_elf_map [SPAWN_ERR_ELF_MAP]
Failure: (         libelf) Nested failure in allocator function [ELF_ERR_ALLOCATE]
Failure: (         libaos) Failure in vspace_map() wrapper function [LIB_ERR_VSPACE_MAP]
Failure: (         libaos) Failure in ram_alloc() [LIB_ERR_RAM_ALLOC]
ERROR: init.0 in spawn_cb() /source//usr/init/main.c:118
ERROR: spawn_load_by_name()
Failure: (          spawn) Failure while loading [SPAWN_ERR_LOAD]
Failure: (          spawn) Failure in spawn_elf_map [SPAWN_ERR_ELF_MAP]
Failure: (          spawn) Failure in spawn_elf_map [SPAWN_ERR_ELF_MAP]
Failure: (         libelf) Nested failure in allocator function [ELF_ERR_ALLOCATE]
ERROR: dummy.0 in aos_rpc_lmp_setup_channel() /source//lib/aos/aos_rpc_lmp.c:786
ERROR: transient
dummy.0.0: Setting up a new channel to serial.
Failure: (         libaos) Failure in vspace_map() wrapper function [LIB_ERR_VSPACE_MAP]
Failure: (         libaos) Failure in ram_alloc() [LIB_ERR_RAM_ALLOC]
ERROR: init.0 in handle_spawn_process() /source//usr/init/processserver.c:141
ERROR:
Failure: (          spawn) Failure while loading [SPAWN_ERR_LOAD]
Failure: (          spawn) Failure in spawn_elf_map [SPAWN_ERR_ELF_MAP]
Failure: (          spawn) Failure in spawn_elf_map [SPAWN_ERR_ELF_MAP]
Failure: (         libelf) Nested failure in allocator function [ELF_ERR_ALLOCATE]
Failure: (         libaos) Failure in vspace_map() wrapper function [LIB_ERR_VSPACE_MAP]
Failure: (         libaos) Failure in ram_alloc() [LIB_ERR_RAM_ALLOC]
rpc-test.0.0: client_spawn_cb(...)
ERROR: rpc-test.0 in client_spawn_cb() /source//lib/aos/aos_rpc_lmp.c:356
ERROR: Dinit.0.0: open_recv_cb()
init.0.0: open_recv_cb()
dummy.0.0: Setting up a new channel to serial.

The endpoint buffer is full

Master@ d175284 is broken for me

hello.0.0: aos_rpc_lmp_process_get_name: dummy
init.0.0: processserver service_recv_cb()
hello.0.0: client_process_get_name_cb()
hello.0.0: aos_rpc_lmp_process_get_name: dummy
init.0.0: processserver service_recv_cb()
hello.0.0: client_process_get_name_cb()
hello.0.0: aos_rpc_lmp_process_get_name: dummy
minit.0.0: processserver service_recv_cb()
hello.0.0: client_process_get_name_cb()
hello.0.0: aos_rpc_lmp_process_get_name: dummy
init.0.0: processserver service_recv_cb()
dummy.0.0: initializing static heap
dummy.0.0: Setting up a new channel to init.
dummy.0.0: initializing static heap
dummy.0.0: Setting up a new channel to init.
ERROR: dummy.0 in aos_rpc_lmp_send_message() /source//lib/aos/aos_rpc_lmp.c:65
ERROR: lmp_chan_send4 failed (transient), The endpoint buffer is full
ERROR: dummy.0 in aos_rpc_lmp_send_message() /source//lib/aos/aos_rpc_lmp.c:65
ERROR: lmp_chan_send4 failed (transient), The endpoint buffer is full
ERROR: dummy.0 in aos_rpc_lmp_send_message() /source//lib/aos/aos_rpc_lmp.c:65

Add tests for the spawning module

We do not have yet any tests for the spawning module.

To test properly, we must figure out how to detect a success when spawning a new dispatcher. One way could be using the RPC that will be implemented in future milestones.

Fix error codes in range tracker

The code was originally moved from the libmm implementation, and the error codes have not been adjusted.

We should probably introduce new error codes for the range tracker.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.