From 7660d524f4b9f0a67122d9b817379044b8c55bdf Mon Sep 17 00:00:00 2001 From: KAAAsS Date: Tue, 18 May 2021 17:35:53 +0800 Subject: [PATCH] finish exec4.12-13 --- lab4/.gdbinit | 2 +- lab4/kernel/process/thread.c | 13 ++++++++++++- lab4/kernel/sched/policy_rr.c | 4 ++++ 3 files changed, 17 insertions(+), 2 deletions(-) diff --git a/lab4/.gdbinit b/lab4/.gdbinit index 6608d0e..8371cbe 100644 --- a/lab4/.gdbinit +++ b/lab4/.gdbinit @@ -13,4 +13,4 @@ define add-symbol-file-auto end add-symbol-file-auto ./build/kernel.img -add-symbol-file-auto ./user/build/ramdisk/yield_spin.bin +add-symbol-file-auto ./user/build/ramdisk/yield_multi_aff.bin diff --git a/lab4/kernel/process/thread.c b/lab4/kernel/process/thread.c index d66adff..95ee160 100644 --- a/lab4/kernel/process/thread.c +++ b/lab4/kernel/process/thread.c @@ -409,7 +409,15 @@ int sys_set_affinity(u64 thread_cap, s32 aff) * Lab4 * Finish the sys_set_affinity */ - return -1; + if (aff < -1 || aff >= PLAT_CPU_NUM) { + return -1; + } + + if (thread != NULL && thread->thread_ctx != NULL) { + thread->thread_ctx->affinity = aff; + } + + return 0; } int sys_get_affinity(u64 thread_cap) @@ -430,5 +438,8 @@ int sys_get_affinity(u64 thread_cap) * Lab4 * Finish the sys_get_affinity */ + if (thread != NULL && thread->thread_ctx != NULL) { + return thread->thread_ctx->affinity; + } return -1; } diff --git a/lab4/kernel/sched/policy_rr.c b/lab4/kernel/sched/policy_rr.c index a0658be..4e57fb9 100644 --- a/lab4/kernel/sched/policy_rr.c +++ b/lab4/kernel/sched/policy_rr.c @@ -72,11 +72,15 @@ int rr_sched_enqueue(struct thread *thread) if (dest_core == NO_AFF) { dest_core = smp_get_cpu_id(); } + if (dest_core < 0 || dest_core >= PLAT_CPU_NUM) { + return -1; + } // 入队尾 list_append(&thread->ready_queue_node, &rr_ready_queue[dest_core]); thread->thread_ctx->state = TS_READY; thread->thread_ctx->cpuid = dest_core; + thread->thread_ctx->sc->budget = 0; return 0; }