change names

This commit is contained in:
TXuian 2024-11-01 14:06:47 +08:00
parent 2f54409819
commit b586bd1247
8 changed files with 43 additions and 44 deletions

View File

@ -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);
} }

View File

@ -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;

View File

@ -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;
} }

View File

@ -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)) {

View File

@ -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)) {

View File

@ -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);
} }

View File

@ -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) || //

View File

@ -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]