Draft: lab 4 demo fix

This commit is contained in:
2025-04-15 23:56:40 +08:00
parent 8ea82f927b
commit 02b2a87fed
4 changed files with 67 additions and 5 deletions

View File

@@ -65,6 +65,9 @@ void add_interrupt_task(uint64_t priority,
uint64_t param)
{
// DEBUG_EXCEP("add interrupt");
uint64_t last_priority = 0xfff;
if (global_interrupt_pool)
last_priority = global_interrupt_pool->priority;
interrupt_t *newint = kmalloc(sizeof(interrupt_t));
*newint = (interrupt_t){
._l = (interrupt_t *)0x0,
@@ -82,7 +85,7 @@ void add_interrupt_task(uint64_t priority,
while (global_interrupt_pool) {
// LOG("check interrupt"); DEBUG_EXCEP(global_interrupt_pool->priority);
if (global_interrupt_pool->is_start)
if (global_interrupt_pool->is_start && global_interrupt_pool->priority < last_priority)
return;
global_interrupt_pool->is_start = true;
global_interrupt_pool->func(global_interrupt_pool->param);
@@ -101,6 +104,8 @@ void irq_handler(void)
// uint64_t core0_irq_source = *CORE0_IRQ_SOURCE;
// DEBUG_EXCEP(core0_irq_source);
// TODO: turnoff global interrupt
if (_irq_source_timer())
timer_irq_handler();

View File

@@ -80,6 +80,7 @@ void *mman_alloc(size_t unit)
if (!pool->page_begin->left)
pool->page_begin = *(void **)pool->page_begin->page_next;
LOG("mman_alloc"); LOG((uint64_t)unit); DEBUG_MEM(ret);
return ret;
}
@@ -103,6 +104,9 @@ void mman_free(void *ptr)
++pool->left;
++PAGE_HEADER(ptr)->left;
LOG("mman_free"); LOG((uint64_t)unit); DEBUG_MEM(ptr);
size_t cap = (PAGE_SIZE - sizeof(kmalloc_allocator_t)) / unit;
if (PAGE_HEADER(ptr)->left == cap && pool->left >= 2 * cap) {
if (PAGE_HEADER(ptr)->page_prev)