summaryrefslogtreecommitdiff
path: root/kernel/sched/scheduler.c
diff options
context:
space:
mode:
authorAnton Kling <anton@kling.gg>2024-02-21 00:14:29 +0100
committerAnton Kling <anton@kling.gg>2024-02-21 00:14:29 +0100
commit8ff63b062d724826d8017504063df9b92f8e6703 (patch)
tree03bf0b5a278a4908da8912f956e5651bea9412f1 /kernel/sched/scheduler.c
parenta85eacdd2406fede4d6ff5cb130b1758978cabb3 (diff)
New clang-format options
Diffstat (limited to 'kernel/sched/scheduler.c')
-rw-r--r--kernel/sched/scheduler.c111
1 files changed, 57 insertions, 54 deletions
diff --git a/kernel/sched/scheduler.c b/kernel/sched/scheduler.c
index 5a95c4c..1aae1ce 100644
--- a/kernel/sched/scheduler.c
+++ b/kernel/sched/scheduler.c
@@ -81,10 +81,12 @@ bool get_task_from_pid(u32 pid, process_t **out) {
}
void set_signal_handler(int sig, void (*handler)(int)) {
- if (sig >= 20 || sig < 0)
+ if (sig >= 20 || sig < 0) {
return;
- if (9 == sig)
+ }
+ if (9 == sig) {
return;
+ }
current_task->signal_handlers[sig] = handler;
}
@@ -93,28 +95,18 @@ void insert_eip_on_stack(u32 cr3, u32 address, u32 value);
process_t *create_process(process_t *p, u32 esp, u32 eip) {
process_t *r;
r = kcalloc(1, sizeof(process_t));
- r->dead = 0;
r->pid = next_pid++;
- r->esp = r->ebp = 0;
- r->eip = 0;
- r->sleep_until = 0;
- r->is_interrupted = 0;
- r->is_halted = 0;
if (!p) {
assert(1 == next_pid);
strncpy(r->program_name, "[kernel]", sizeof(current_task->program_name));
- } else
+ } else {
strncpy(r->program_name, "[Not yet named]",
sizeof(current_task->program_name));
+ }
r->cr3 = (p) ? clone_directory(get_active_pagedirectory())
: get_active_pagedirectory();
- r->next = 0;
- r->incoming_signal = 0;
r->parent = p;
- r->child = NULL;
- r->halt_list = NULL;
- r->interrupt_handler = NULL;
r->tcb = kcalloc(1, sizeof(struct TCB));
r->tcb->CR3 = r->cr3->physical_address;
@@ -139,17 +131,12 @@ process_t *create_process(process_t *p, u32 esp, u32 eip) {
r->tcb->ESP = esp;
}
- mmu_allocate_region((void *)(0x80000000 - 0x8000), 0x8000, MMU_FLAG_RW,
- r->cr3);
- r->signal_handler_stack = 0x80000000;
-
if (p) {
strcpy(r->current_working_directory, p->current_working_directory);
} else {
strcpy(r->current_working_directory, "/");
}
r->data_segment_end = (p) ? p->data_segment_end : NULL;
- memset((void *)r->halts, 0, 2 * sizeof(u32));
for (int i = 0; i < 100; i++) {
if (p) {
r->file_descriptors[i] = p->file_descriptors[i];
@@ -164,14 +151,18 @@ process_t *create_process(process_t *p, u32 esp, u32 eip) {
}
int get_free_fd(process_t *p, int allocate) {
- if (!p)
+ if (!p) {
p = (process_t *)current_task;
+ }
int i;
- for (i = 0; i < 100; i++)
- if (!p->file_descriptors[i])
+ for (i = 0; i < 100; i++) {
+ if (!p->file_descriptors[i]) {
break;
- if (p->file_descriptors[i])
+ }
+ }
+ if (p->file_descriptors[i]) {
return -1;
+ }
if (allocate) {
vfs_fd_t *fd = p->file_descriptors[i] = kmalloc(sizeof(vfs_fd_t));
fd->inode = kmalloc(sizeof(vfs_inode_t));
@@ -187,8 +178,9 @@ void tasking_init(void) {
int i = 0;
void free_process(void) {
- kprintf("pid: %x\n", get_current_task()->pid);
- kprintf("Exiting process: %s\n", get_current_task()->program_name);
+ process_t *p = get_current_task();
+ kprintf("pid: %x\n", p->pid);
+ kprintf("Exiting process: %s\n", p->program_name);
// free_process() will purge all contents such as allocated frames
// out of the current process. This will be called by exit() and
// exec*().
@@ -197,14 +189,19 @@ void free_process(void) {
// underlying frames as "unused".
for (int i = 0; i < 100; i++) {
vfs_close(i);
- if (!current_task->maps[i])
+ if (!current_task->maps[i]) {
continue;
+ }
MemoryMap *m = current_task->maps[i];
mmu_remove_virtual_physical_address_mapping(m->u_address, m->length);
}
// NOTE: Kernel stuff begins at 0x90000000
mmu_free_address_range((void *)0x1000, 0x90000000);
+
+ list_free(&p->read_list);
+ list_free(&p->write_list);
+ list_free(&p->disconnect_list);
}
void exit(int status) {
@@ -215,8 +212,9 @@ void exit(int status) {
}
process_t *new_task = current_task;
for (; new_task == current_task;) {
- if (!new_task->next)
+ if (!new_task->next) {
new_task = ready_queue;
+ }
new_task = new_task->next;
}
@@ -314,8 +312,9 @@ int fork(void) {
}
process_t *tmp_task = (process_t *)ready_queue;
- for (; tmp_task->next;)
+ for (; tmp_task->next;) {
tmp_task = tmp_task->next;
+ }
tmp_task->next = new_task;
@@ -326,9 +325,11 @@ int fork(void) {
}
int is_halted(process_t *process) {
- for (int i = 0; i < 2; i++)
- if (process->halts[i])
+ for (int i = 0; i < 2; i++) {
+ if (process->halts[i]) {
return 1;
+ }
+ }
if (isset_fdhalt(process)) {
return 1;
@@ -339,24 +340,17 @@ int is_halted(process_t *process) {
extern PageDirectory *active_directory;
process_t *next_task(process_t *c) {
- process_t *s = c;
- int loop = 0;
for (;;) {
- if (s == c) {
- if (1 == loop) {
- return s;
- }
- // loop = 1;
- }
c = c->next;
- if (!c)
+ if (!c) {
c = ready_queue;
- if (c->incoming_signal)
- break;
- if (c->sleep_until > pit_num_ms())
+ }
+ if (c->sleep_until > pit_num_ms()) {
continue;
- if (is_halted(c) || c->dead)
+ }
+ if (is_halted(c) || c->dead) {
continue;
+ }
break;
}
return c;
@@ -365,18 +359,21 @@ process_t *next_task(process_t *c) {
int kill(pid_t pid, int sig) {
process_t *p = current_task;
p = p->next;
- if (!p)
+ if (!p) {
p = ready_queue;
+ }
for (; p->pid != pid;) {
- if (p == current_task)
+ if (p == current_task) {
break;
+ }
p = p->next;
- if (!p)
+ if (!p) {
p = ready_queue;
+ }
}
- if (p->pid != pid)
+ if (p->pid != pid) {
return -ESRCH;
- p->incoming_signal = sig;
+ }
return 0;
}
@@ -393,9 +390,11 @@ void switch_task() {
}
MemoryMap **get_free_map(void) {
- for (int i = 0; i < 100; i++)
- if (!(current_task->maps[i]))
+ for (int i = 0; i < 100; i++) {
+ if (!(current_task->maps[i])) {
return &(current_task->maps[i]);
+ }
+ }
assert(0);
return NULL;
}
@@ -413,8 +412,9 @@ void *allocate_virtual_user_memory(size_t length, int prot, int flags) {
(void)prot;
(void)flags;
void *rc = get_free_virtual_memory(length);
- if ((void *)-1 == rc)
+ if ((void *)-1 == rc) {
return (void *)-1;
+ }
mmu_allocate_region(rc, length, MMU_FLAG_RW, NULL);
return rc;
@@ -422,8 +422,9 @@ void *allocate_virtual_user_memory(size_t length, int prot, int flags) {
void *user_kernel_mapping(void *kernel_addr, size_t length) {
void *rc = get_free_virtual_memory(length);
- if ((void *)-1 == rc)
+ if ((void *)-1 == rc) {
return (void *)-1;
+ }
mmu_map_directories(rc, NULL, kernel_addr, NULL, length);
return rc;
@@ -431,8 +432,9 @@ void *user_kernel_mapping(void *kernel_addr, size_t length) {
void *create_physical_mapping(void **physical_addresses, size_t length) {
void *rc = get_free_virtual_memory(length);
- if ((void *)-1 == rc)
+ if ((void *)-1 == rc) {
return (void *)-1;
+ }
int n = (uintptr_t)align_page((void *)length) / 0x1000;
for (int i = 0; i < n; i++) {
mmu_map_physical(rc + (i * 0x1000), NULL, physical_addresses[i], 0x1000);
@@ -481,8 +483,9 @@ void *mmap(void *addr, size_t length, int prot, int flags, int fd,
// code.
}
- if (length > vmobject->size)
+ if (length > vmobject->size) {
length = vmobject->size;
+ }
void *rc = create_physical_mapping(vmobject->object, length);
free_map->u_address = rc;
free_map->k_address = NULL;