From 07a0c3c72798b4794e2dd92268f410ea2d709d2c Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Martin=20Kr=C3=B6ning?= <mkroening@posteo.net>
Date: Wed, 15 Mar 2023 17:02:43 +0100
Subject: [PATCH] Adapt newlib to scheduler sharing rework

---
 src/scheduler/mod.rs  | 12 ++++++++----
 src/scheduler/task.rs | 24 ------------------------
 2 files changed, 8 insertions(+), 28 deletions(-)

diff --git a/src/scheduler/mod.rs b/src/scheduler/mod.rs
index bd6902675..a86d085a1 100644
--- a/src/scheduler/mod.rs
+++ b/src/scheduler/mod.rs
@@ -223,12 +223,14 @@ impl PerCoreScheduler {
 
 		// Clone the current task.
 		let tid = get_tid();
-		let clone_task = Rc::new(RefCell::new(Task::new_like(
+		let clone_task = NewTask {
 			tid,
+			func,
+			arg,
+			prio: current_task_borrowed.prio,
 			core_id,
-			&current_task_borrowed,
-		)));
-		clone_task.borrow_mut().create_stack_frame(func, arg);
+			stacks: TaskStacks::new(current_task_borrowed.stacks.get_user_stack_size()),
+		};
 
 		// Add it to the task lists.
 		let wakeup = {
@@ -250,11 +252,13 @@ impl PerCoreScheduler {
 				input_locked.new_tasks.push_back(clone_task);
 				true
 			} else {
+				let clone_task = Rc::new(RefCell::new(Task::from(clone_task)));
 				core_scheduler().ready_queue.push(clone_task);
 				false
 			}
 			#[cfg(not(feature = "smp"))]
 			if core_id == 0 {
+				let clone_task = Rc::new(RefCell::new(Task::from(clone_task)));
 				core_scheduler().ready_queue.push(clone_task);
 				false
 			} else {
diff --git a/src/scheduler/task.rs b/src/scheduler/task.rs
index 651efc784..b12685496 100644
--- a/src/scheduler/task.rs
+++ b/src/scheduler/task.rs
@@ -487,30 +487,6 @@ impl Task {
 			lwip_errno: 0,
 		}
 	}
-
-	#[cfg(feature = "newlib")]
-	pub fn new_like(tid: TaskId, core_id: CoreId, task: &Task) -> Task {
-		debug!(
-			"Creating task {} on core {} like task {}",
-			tid, core_id, task.id
-		);
-
-		Task {
-			id: tid,
-			status: TaskStatus::Ready,
-			prio: task.prio,
-			last_stack_pointer: VirtAddr(0u64),
-			user_stack_pointer: VirtAddr(0u64),
-			last_fpu_state: arch::processor::FPUState::new(),
-			core_id,
-			stacks: TaskStacks::new(task.stacks.get_user_stack_size()),
-			next: None,
-			prev: None,
-			tls: None,
-			#[cfg(feature = "newlib")]
-			lwip_errno: 0,
-		}
-	}
 }
 
 /*impl Drop for Task {
-- 
GitLab