scheduler: continue rework

This commit is contained in:
Matheus
2025-08-20 22:00:25 -03:00
parent 5098c09f26
commit 136c86354c
26 changed files with 348 additions and 154 deletions
+40
View File
@@ -0,0 +1,40 @@
#include <bitmap.h>
#include <errno.h>
#include <kernel/alloc.h>
#include <util.h>
#include <logging.h>
int bitmap_init(bitmap_t *bitmap, size_t size) {
bitmap->data = alloc(size);
bitmap->size = size;
return bitmap->data ? 0 : ENOMEM;
}
void bitmap_set(bitmap_t *bitmap, long idx, int v) {
__assert(bitmap->size > idx);
long bit = 1llu << (idx % sizeof(*bitmap->data));
if (v)
bitmap->data[idx / sizeof(*bitmap->data)] |= bit;
else
bitmap->data[idx / sizeof(*bitmap->data)] &= ~bit;
}
// TODO fix start offset search
long bitmap_find_first_set(bitmap_t *bitmap, long start_offset) {
size_t loop_size = ROUND_UP(bitmap->size, sizeof(*bitmap->data)) / sizeof(*bitmap->data);
long offset = -1;
for (size_t i = start_offset; i < loop_size; ++i) {
if (bitmap->data[i] == 0)
continue;
offset = i * sizeof(*bitmap->data) + __builtin_ctz(bitmap->data[i]);
break;
}
return offset;
}