forked from xuos/xiuos
change names
This commit is contained in:
parent
2f54409819
commit
b586bd1247
|
@ -59,7 +59,7 @@ void sys_tracer_init()
|
||||||
// set sys_tracer resource identity
|
// set sys_tracer resource identity
|
||||||
tracer_init_node(&sys_tracer.root_node, NULL, TRACER_OWNER, NULL);
|
tracer_init_node(&sys_tracer.root_node, NULL, TRACER_OWNER, NULL);
|
||||||
sys_tracer.root_node.name = root_name;
|
sys_tracer.root_node.name = root_name;
|
||||||
sys_tracer.sys_tracer_tag.meta = &sys_tracer.root_node;
|
sys_tracer.sys_tracer_tag.inner_node = &sys_tracer.root_node;
|
||||||
|
|
||||||
// init memory allocator
|
// init memory allocator
|
||||||
slab_init(&sys_tracer.node_allocator, sizeof(TracerNode), "TracerNodeAllocator");
|
slab_init(&sys_tracer.node_allocator, sizeof(TracerNode), "TracerNodeAllocator");
|
||||||
|
@ -68,7 +68,7 @@ void sys_tracer_init()
|
||||||
|
|
||||||
static char* parse_path(char* path, char* const name)
|
static char* parse_path(char* path, char* const name)
|
||||||
{
|
{
|
||||||
// skip extra '/'
|
// Skip extra '/'
|
||||||
while (*path == '/') {
|
while (*path == '/') {
|
||||||
path++;
|
path++;
|
||||||
}
|
}
|
||||||
|
@ -76,21 +76,19 @@ static char* parse_path(char* path, char* const name)
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
// start of current name
|
// Start of current name
|
||||||
char* cur_start = path;
|
char* cur_start = path;
|
||||||
while (*path != '/' && *path != '\0') {
|
while (*path != '/' && *path != '\0') {
|
||||||
path++;
|
path++;
|
||||||
}
|
}
|
||||||
|
|
||||||
// handle current name
|
// Handle current name
|
||||||
int len = path - cur_start;
|
size_t len = path - cur_start;
|
||||||
if (len >= TRACER_NODE_NAME_LEN) {
|
if (len >= TRACER_NODE_NAME_LEN) {
|
||||||
strncpy(name, cur_start, TRACER_NODE_NAME_LEN - 1);
|
len = TRACER_NODE_NAME_LEN - 1;
|
||||||
name[TRACER_NODE_NAME_LEN - 1] = '\0';
|
|
||||||
} else {
|
|
||||||
strncpy(name, cur_start, len);
|
|
||||||
name[len] = '\0';
|
|
||||||
}
|
}
|
||||||
|
memcpy(name, cur_start, len);
|
||||||
|
name[len] = '\0';
|
||||||
|
|
||||||
return path;
|
return path;
|
||||||
}
|
}
|
||||||
|
@ -122,40 +120,40 @@ bool AchieveResourceTag(TraceTag* target, TraceTag* owner, char* name)
|
||||||
{
|
{
|
||||||
static char name_buffer[TRACER_NODE_NAME_LEN];
|
static char name_buffer[TRACER_NODE_NAME_LEN];
|
||||||
|
|
||||||
TracerNode* inner_node = owner->meta;
|
TracerNode* inner_node = owner->inner_node;
|
||||||
assert(inner_node != NULL && inner_node->type == TRACER_OWNER);
|
assert(inner_node != NULL && inner_node->type == TRACER_OWNER);
|
||||||
while ((name = parse_path(name, name_buffer)) != NULL) {
|
while ((name = parse_path(name, name_buffer)) != NULL) {
|
||||||
if ((inner_node = tracer_find_node_onestep(inner_node, name_buffer)) == NULL) {
|
if ((inner_node = tracer_find_node_onestep(inner_node, name_buffer)) == NULL) {
|
||||||
DEBUG("Tracer: No such object, owner: %s, child: %s\n", //
|
DEBUG("Tracer: No such object, owner: %s, child: %s\n", //
|
||||||
owner->meta->name == NULL ? "NULL" : owner->meta->name, name == NULL ? "NULL" : name_buffer);
|
owner->inner_node->name == NULL ? "NULL" : owner->inner_node->name, name == NULL ? "NULL" : name_buffer);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
target->meta = inner_node;
|
target->inner_node = inner_node;
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
void* AchieveResource(TraceTag* tag)
|
void* AchieveResource(TraceTag* tag)
|
||||||
{
|
{
|
||||||
assert(tag != NULL);
|
assert(tag != NULL);
|
||||||
if (tag->meta == NULL || tag->meta->type == TRACER_OWNER) {
|
if (tag->inner_node == NULL || tag->inner_node->type == TRACER_OWNER) {
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
return tag->meta->p_resource;
|
return tag->inner_node->p_resource;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool CreateResourceTag(TraceTag* new_tag, TraceTag* owner, char* name, tracemeta_ac_type type, void* p_resource)
|
bool CreateResourceTag(TraceTag* new_tag, TraceTag* owner, char* name, tracemeta_ac_type type, void* p_resource)
|
||||||
{
|
{
|
||||||
assert(owner != NULL);
|
assert(owner != NULL);
|
||||||
if (owner->meta == NULL) {
|
if (owner->inner_node == NULL) {
|
||||||
ERROR("Tracer: Empty owner, node name: %s\n", name);
|
ERROR("Tracer: Empty owner, node name: %s\n", name);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
// assert(owner->meta->type == TRACER_OWNER);
|
// assert(owner->inner_node->type == TRACER_OWNER);
|
||||||
if (type == TRACER_SERVER_IDENTITY_AC_RESOURCE && //
|
if (type == TRACER_SERVER_IDENTITY_AC_RESOURCE && //
|
||||||
tracer_find_node_onestep(owner->meta, name) != NULL) {
|
tracer_find_node_onestep(owner->inner_node, name) != NULL) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -167,11 +165,11 @@ bool CreateResourceTag(TraceTag* new_tag, TraceTag* owner, char* name, tracemeta
|
||||||
tracer_init_node(new_node, name, type, p_resource);
|
tracer_init_node(new_node, name, type, p_resource);
|
||||||
|
|
||||||
// new node add to owner's children list
|
// new node add to owner's children list
|
||||||
doubleListAddOnHead(&new_node->list_node, &owner->meta->children_guard);
|
doubleListAddOnHead(&new_node->list_node, &owner->inner_node->children_guard);
|
||||||
new_node->parent = owner->meta;
|
new_node->parent = owner->inner_node;
|
||||||
|
|
||||||
if (new_tag != NULL) {
|
if (new_tag != NULL) {
|
||||||
new_tag->meta = new_node;
|
new_tag->inner_node = new_node;
|
||||||
}
|
}
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
@ -179,30 +177,30 @@ bool CreateResourceTag(TraceTag* new_tag, TraceTag* owner, char* name, tracemeta
|
||||||
bool DeleteResource(TraceTag* target, TraceTag* owner)
|
bool DeleteResource(TraceTag* target, TraceTag* owner)
|
||||||
{
|
{
|
||||||
assert(target != NULL && owner != NULL);
|
assert(target != NULL && owner != NULL);
|
||||||
assert(owner->meta != NULL && owner->meta->type == TRACER_OWNER);
|
assert(owner->inner_node != NULL && owner->inner_node->type == TRACER_OWNER);
|
||||||
if (target->meta == NULL) {
|
if (target->inner_node == NULL) {
|
||||||
ERROR("Tracer: Delete a empty resource, owner: %s\n", owner->meta->name);
|
ERROR("Tracer: Delete a empty resource, owner: %s\n", owner->inner_node->name);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
assert(target->meta->parent == owner->meta);
|
assert(target->inner_node->parent == owner->inner_node);
|
||||||
doubleListDel(&target->meta->list_node);
|
doubleListDel(&target->inner_node->list_node);
|
||||||
// delete name
|
// delete name
|
||||||
if (target->meta->name != NULL) {
|
if (target->inner_node->name != NULL) {
|
||||||
slab_free(&sys_tracer.node_name_allocator, target->meta->name);
|
slab_free(&sys_tracer.node_name_allocator, target->inner_node->name);
|
||||||
}
|
}
|
||||||
|
|
||||||
// delete all children
|
// delete all children
|
||||||
if (target->meta->type == TRACER_OWNER) {
|
if (target->inner_node->type == TRACER_OWNER) {
|
||||||
while (!IS_DOUBLE_LIST_EMPTY(&target->meta->children_guard)) {
|
while (!IS_DOUBLE_LIST_EMPTY(&target->inner_node->children_guard)) {
|
||||||
TraceTag tmp_node = {
|
TraceTag tmp_node = {
|
||||||
.meta = DOUBLE_LIST_ENTRY(target->meta->children_guard.next, TracerNode, list_node),
|
.inner_node = DOUBLE_LIST_ENTRY(target->inner_node->children_guard.next, TracerNode, list_node),
|
||||||
};
|
};
|
||||||
DeleteResource(&tmp_node, target);
|
DeleteResource(&tmp_node, target);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
slab_free(&sys_tracer.node_allocator, target->meta);
|
slab_free(&sys_tracer.node_allocator, target->inner_node);
|
||||||
target->meta = NULL;
|
target->inner_node = NULL;
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -237,6 +235,6 @@ void debug_list_tracetree_inner(TracerNode* cur_node, int nr_blanks)
|
||||||
|
|
||||||
void debug_list_tracetree()
|
void debug_list_tracetree()
|
||||||
{
|
{
|
||||||
TracerNode* ref_root = RequireRootTag()->meta;
|
TracerNode* ref_root = RequireRootTag()->inner_node;
|
||||||
debug_list_tracetree_inner(ref_root, 0);
|
debug_list_tracetree_inner(ref_root, 0);
|
||||||
}
|
}
|
|
@ -20,7 +20,8 @@ typedef struct TracerNode {
|
||||||
struct double_list_node children_guard;
|
struct double_list_node children_guard;
|
||||||
} TracerNode;
|
} TracerNode;
|
||||||
|
|
||||||
/// @brief tag for other module to reference trace meta
|
/// @brief tag for other module to reference trace inner_node
|
||||||
typedef struct TraceTag {
|
typedef struct TraceTag {
|
||||||
TracerNode* meta;
|
TracerNode* inner_node;
|
||||||
|
uint32_t authority;
|
||||||
} TraceTag;
|
} TraceTag;
|
|
@ -265,7 +265,7 @@ struct TopLevelPageDirectory kern_pgdir;
|
||||||
|
|
||||||
void load_kern_pgdir(struct TraceTag* mmu_driver_tag, struct TraceTag* intr_driver_tag)
|
void load_kern_pgdir(struct TraceTag* mmu_driver_tag, struct TraceTag* intr_driver_tag)
|
||||||
{
|
{
|
||||||
if (mmu_driver_tag->meta == NULL) {
|
if (mmu_driver_tag->inner_node == NULL) {
|
||||||
ERROR("Invalid mmu driver tag.\n");
|
ERROR("Invalid mmu driver tag.\n");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
|
@ -69,7 +69,7 @@ int sys_connect_session(char* path, int capacity, struct Session* user_session)
|
||||||
if (!AchieveResourceTag(&server_identifier_owner, RequireRootTag(), "softkernel/server-identifier")) {
|
if (!AchieveResourceTag(&server_identifier_owner, RequireRootTag(), "softkernel/server-identifier")) {
|
||||||
panic("Server identifier not initialized.\b");
|
panic("Server identifier not initialized.\b");
|
||||||
}
|
}
|
||||||
assert(server_identifier_owner.meta != NULL);
|
assert(server_identifier_owner.inner_node != NULL);
|
||||||
|
|
||||||
struct TraceTag server_tag;
|
struct TraceTag server_tag;
|
||||||
if (!AchieveResourceTag(&server_tag, &server_identifier_owner, path)) {
|
if (!AchieveResourceTag(&server_tag, &server_identifier_owner, path)) {
|
||||||
|
|
|
@ -46,7 +46,7 @@ int sys_register_as_server(char* name)
|
||||||
if (!AchieveResourceTag(&server_identifier_set_tag, RequireRootTag(), "softkernel/server-identifier")) {
|
if (!AchieveResourceTag(&server_identifier_set_tag, RequireRootTag(), "softkernel/server-identifier")) {
|
||||||
panic("Server identifier not initialized.\b");
|
panic("Server identifier not initialized.\b");
|
||||||
}
|
}
|
||||||
assert(server_identifier_set_tag.meta != NULL);
|
assert(server_identifier_set_tag.inner_node != NULL);
|
||||||
|
|
||||||
// create server tag under server tag owner
|
// create server tag under server tag owner
|
||||||
if (!CreateResourceTag(&server->server_identifier, &server_identifier_set_tag, name, TRACER_SERVER_IDENTITY_AC_RESOURCE, server)) {
|
if (!CreateResourceTag(&server->server_identifier, &server_identifier_set_tag, name, TRACER_SERVER_IDENTITY_AC_RESOURCE, server)) {
|
||||||
|
|
|
@ -58,7 +58,7 @@ int sys_spawn(char* img_start, char* name, char** argv)
|
||||||
ERROR("Unable to new task control block %x.\n");
|
ERROR("Unable to new task control block %x.\n");
|
||||||
// error task allocation may free memspace before hand
|
// error task allocation may free memspace before hand
|
||||||
// @todo use task ref map to handle this scene
|
// @todo use task ref map to handle this scene
|
||||||
if (NULL != pmemspace->tag.meta) {
|
if (NULL != pmemspace->tag.inner_node) {
|
||||||
free_memspace(pmemspace);
|
free_memspace(pmemspace);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -61,7 +61,7 @@ struct MemSpace* alloc_memspace(char* name)
|
||||||
slab_free(&xizi_task_manager.memspace_allocator, (void*)pmemspace);
|
slab_free(&xizi_task_manager.memspace_allocator, (void*)pmemspace);
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
assert(pmemspace->tag.meta != NULL);
|
assert(pmemspace->tag.inner_node != NULL);
|
||||||
|
|
||||||
if (!CreateResourceTag(&pmemspace->kernspace_mem_usage.tag, &pmemspace->tag, "MemUsage", TRACER_SYSOBJECT, (void*)&pmemspace->kernspace_mem_usage) || //
|
if (!CreateResourceTag(&pmemspace->kernspace_mem_usage.tag, &pmemspace->tag, "MemUsage", TRACER_SYSOBJECT, (void*)&pmemspace->kernspace_mem_usage) || //
|
||||||
!CreateResourceTag(&pmemspace->userspace_mem_usage.tag, &pmemspace->tag, "UserMemUsage", TRACER_SYSOBJECT, (void*)&pmemspace->userspace_mem_usage) || //
|
!CreateResourceTag(&pmemspace->userspace_mem_usage.tag, &pmemspace->tag, "UserMemUsage", TRACER_SYSOBJECT, (void*)&pmemspace->userspace_mem_usage) || //
|
||||||
|
|
|
@ -157,11 +157,11 @@ static void _free_thread(struct Thread* task)
|
||||||
|
|
||||||
/// @todo handle server transition
|
/// @todo handle server transition
|
||||||
/* delete server identifier */
|
/* delete server identifier */
|
||||||
if (task->server_identifier.meta != NULL) {
|
if (task->server_identifier.inner_node != NULL) {
|
||||||
// @todo figure out server-identifier ownership
|
// @todo figure out server-identifier ownership
|
||||||
struct TraceTag server_identifier_owner;
|
struct TraceTag server_identifier_owner;
|
||||||
AchieveResourceTag(&server_identifier_owner, RequireRootTag(), "softkernel/server-identifier");
|
AchieveResourceTag(&server_identifier_owner, RequireRootTag(), "softkernel/server-identifier");
|
||||||
assert(server_identifier_owner.meta != NULL);
|
assert(server_identifier_owner.inner_node != NULL);
|
||||||
assert(DeleteResource(&task->server_identifier, &server_identifier_owner));
|
assert(DeleteResource(&task->server_identifier, &server_identifier_owner));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -286,7 +286,7 @@ static struct Thread* _new_thread(struct MemSpace* pmemspace)
|
||||||
queue_init(&task->sessions_in_handle);
|
queue_init(&task->sessions_in_handle);
|
||||||
queue_init(&task->sessions_to_be_handle);
|
queue_init(&task->sessions_to_be_handle);
|
||||||
/// server identifier
|
/// server identifier
|
||||||
task->server_identifier.meta = NULL;
|
task->server_identifier.inner_node = NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
// [name]
|
// [name]
|
||||||
|
|
Loading…
Reference in New Issue