From 6e82ad6d00ffb47d7428c919731c1a662ea82ada Mon Sep 17 00:00:00 2001 From: notsomeidiot123 Date: Tue, 3 Mar 2026 01:00:01 -0500 Subject: [PATCH] Actually use reassigned memory in kstdlib.c:vector_push() --- src/kernel/shared/kstdlib.c | 3 +++ src/kernel/system/modules.c | 9 --------- src/kmodules/disk_driver.c | 18 ++++++++++++++++-- 3 files changed, 19 insertions(+), 11 deletions(-) diff --git a/src/kernel/shared/kstdlib.c b/src/kernel/shared/kstdlib.c index bb692b1..b110462 100644 --- a/src/kernel/shared/kstdlib.c +++ b/src/kernel/shared/kstdlib.c @@ -85,6 +85,9 @@ void vector_push(vector_t *vector, void *new_element){ ((uint8_t *)(newptr))[i] = ((uint8_t *)vector->ptr)[i * vector->size]; } } + void *tmp = vector->ptr; + vector->ptr = newptr; + kfree(tmp); } for(uint32_t i = 0; i < vector->sizeof_elements; i++){ ((uint8_t *)(vector->ptr))[vector->size * vector->sizeof_elements + i] = ((uint8_t *)new_element)[i]; diff --git a/src/kernel/system/modules.c b/src/kernel/system/modules.c index 0fec1c4..616dc4e 100644 --- a/src/kernel/system/modules.c +++ b/src/kernel/system/modules.c @@ -28,7 +28,6 @@ uint32_t module_api(uint32_t func, ...){ vector_push(modules, structure); pm_free(tmp); return_value = 0; - // printf("Registered Key: %x", structure->key); break; case MODULE_API_ADDINT: uint32_t int_index = va_arg(vars, uint32_t); @@ -39,12 +38,10 @@ uint32_t module_api(uint32_t func, ...){ return_value = -1; break; } - // printf("installed %d", int_index); install_irq_handler(interrupt_handler, int_index); module_t *tmpmodule = vector_get(key & 0xff, modules); tmpmodule->interrupts |= 1 << int_index; return_value = 0; - // printf("Added key\n"); break; case MODULE_API_DELINT: int_index = va_arg(vars, uint32_t); @@ -61,7 +58,6 @@ uint32_t module_api(uint32_t func, ...){ return_value = 0; break; case MODULE_API_PRINT: - // vmlog(MODULE_NAME, "Testing modules calling kernel functions\n", MLOG_PRINT, vars); char *name = va_arg(vars, char *); char *string = va_arg(vars, char *); vmlog(name, string, MLOG_PRINT, vars); @@ -132,7 +128,6 @@ uint32_t module_api(uint32_t func, ...){ for(int i = 0; i < modules->size; i++){ module_t* module = ((module_t *)vector_get(i, modules)); if(module->key == key){ - // printf("Adding message handler!!\n\n"); module->message_handler = handler; return_value = 0; break; @@ -167,13 +162,9 @@ void dispatch_message(uint32_t message, ...){ for(int i = 0; i < modules->size; i++){ module_t *module = vector_get(i, modules); - // int32_t (*handler)(uint32_t, ...) = ((module_t *)(vector_get(i, modules)))->key; - // uint32_t key = ((module_t *)(vector_get(i, modules)))->key; uint32_t key = module->key; int32_t (*handler)(uint32_t, ...) = module->message_handler; if(!handler) continue; - // printf("Handler: %x, Key: %x\n", handler, key); - // for(;;); int32_t result = 0; vfile_t *srcfile; diff --git a/src/kmodules/disk_driver.c b/src/kmodules/disk_driver.c index 106153b..bf79e49 100644 --- a/src/kmodules/disk_driver.c +++ b/src/kmodules/disk_driver.c @@ -239,7 +239,9 @@ int ata_write(vfile_t *file, void *ptr, uint32_t offset, uint32_t count){ // api(MODULE_API_PRINT, MODULE_NAME, "PRDT (Read back from busmaster): %x\n", test); outb(bm_base, 0x00); - while(!ata_ready(io_base, ctrl_base, drive.flags.slave << 4)); + while(!ata_ready(io_base, ctrl_base, drive.flags.slave << 4)){ + asm("int $32\n"); + } uint64_t lba = offset >> 9; // uint64_t lba = 0; outb(io_base + ATA_DRIVE_HEAD, 0x40 | (drive.flags.slave << 4) | ((lba >> 24) & 0x0F)); @@ -287,6 +289,13 @@ int ata_write(vfile_t *file, void *ptr, uint32_t offset, uint32_t count){ uint8_t bm_status = inb(bm_base + 2); asm("int $32\n"); + + while(!ata_ready(io_base, ctrl_base, drive.flags.slave << 4)){ + asm("int $32\n"); + } + outb(io_base + ATA_DRIVE_HEAD, 0x40 | (drive.flags.slave << 4)); + outb(io_base + ATA_COMMAND, ATA_CMD_CACHE_FLUSH_EXT); + // } return 0; @@ -329,7 +338,9 @@ int ata_read(vfile_t *file, uint8_t *ptr, uint32_t offset, uint32_t count) { // api(MODULE_API_PRINT, MODULE_NAME, "PRDT (Read back from busmaster): %x\n", test); outb(bm_base, 0x08); - while(!ata_ready(io_base, ctrl_base, drive.flags.slave << 4)); + while(!ata_ready(io_base, ctrl_base, drive.flags.slave << 4)){ + asm("int $32\n"); + } uint64_t lba = offset >> 9; // uint64_t lba = 0; outb(io_base + ATA_DRIVE_HEAD, 0x40 | (drive.flags.slave << 4) | ((lba >> 24) & 0x0F)); @@ -410,6 +421,9 @@ cpu_registers_t *int_handler(cpu_registers_t * regs){ api(MODULE_API_UNBLOCK_PID, transferring_pid); transferring_pid = 0; primary_ata_locked = 0; + + + return regs; }