From fa9f4baeecd1e18fc2db9192660d0de5d8b54e8c Mon Sep 17 00:00:00 2001 From: Freya Murphy Date: Thu, 1 May 2025 19:52:41 -0400 Subject: FUCKING OFF BY ONE ERRORS --- kernel/lib/kalloc.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'kernel/lib') diff --git a/kernel/lib/kalloc.c b/kernel/lib/kalloc.c index 0141149..02e9457 100644 --- a/kernel/lib/kalloc.c +++ b/kernel/lib/kalloc.c @@ -34,7 +34,7 @@ static struct page_header *get_header(void *ptr) static void *alloc_new(size_t size) { - size_t pages = ((size + header_len) / PAGE_SIZE) + 1; + size_t pages = ((size + header_len + PAGE_SIZE - 1) / PAGE_SIZE) * PAGE_SIZE; void *addr = kalloc_pages(pages); void *mem = (char *)addr + header_len; @@ -180,7 +180,7 @@ void kfree(void *ptr) for (neighbor = header->prev; neighbor != NULL; neighbor = neighbor->prev) { if (neighbor->node_number != header->node_number) break; - if (neighbor->used && header->used) + if (neighbor->used || header->used) break; neighbor->free += header->free + header_len; neighbor->next = header->next; -- cgit v1.2.3-freya From f7a899db24b91005e57bf4d3b5494e59965c7f04 Mon Sep 17 00:00:00 2001 From: Freya Murphy Date: Thu, 1 May 2025 21:34:22 -0400 Subject: changes idk --- kernel/fs/tar.c | 1 + kernel/lib/kalloc.c | 4 +++- kernel/mboot/module.c | 2 +- kernel/memory/paging.c | 3 ++- kernel/memory/physalloc.c | 21 ++++++++++++++++----- kernel/memory/virtalloc.c | 6 +++--- 6 files changed, 26 insertions(+), 11 deletions(-) (limited to 'kernel/lib') diff --git a/kernel/fs/tar.c b/kernel/fs/tar.c index 86af81f..061dd0c 100644 --- a/kernel/fs/tar.c +++ b/kernel/fs/tar.c @@ -1,3 +1,4 @@ +#include "lib/kio.h" #include #include diff --git a/kernel/lib/kalloc.c b/kernel/lib/kalloc.c index 02e9457..8dca46b 100644 --- a/kernel/lib/kalloc.c +++ b/kernel/lib/kalloc.c @@ -1,3 +1,4 @@ +#include "lib/kio.h" #include #include @@ -34,7 +35,8 @@ static struct page_header *get_header(void *ptr) static void *alloc_new(size_t size) { - size_t pages = ((size + header_len + PAGE_SIZE - 1) / PAGE_SIZE) * PAGE_SIZE; + size_t pages = + ((size + header_len + PAGE_SIZE - 1) / PAGE_SIZE) * PAGE_SIZE; void *addr = kalloc_pages(pages); void *mem = (char *)addr + header_len; diff --git a/kernel/mboot/module.c b/kernel/mboot/module.c index cb05b45..bf15eca 100644 --- a/kernel/mboot/module.c +++ b/kernel/mboot/module.c @@ -33,7 +33,7 @@ void *mboot_get_initrd(size_t *len) return NULL; mod = (struct multiboot_tag_module *)tag; - phys = (void *) (uintptr_t) mod->mod_start; + phys = (void *)(uintptr_t)mod->mod_start; initrd_len = mod->mod_end - mod->mod_start; // map addr diff --git a/kernel/memory/paging.c b/kernel/memory/paging.c index 9dfa236..39f7638 100644 --- a/kernel/memory/paging.c +++ b/kernel/memory/paging.c @@ -1,3 +1,4 @@ +#include "lib/kio.h" #include #include @@ -353,7 +354,7 @@ static volatile struct pt *pt_alloc(volatile struct pd *pPD, void *vADDR, } pPT = alloc_phys_page(); - if (pPD == NULL) + if (pPT == NULL) return NULL; vPT = PT_MAP(pPT); diff --git a/kernel/memory/physalloc.c b/kernel/memory/physalloc.c index 8971bcf..4255339 100644 --- a/kernel/memory/physalloc.c +++ b/kernel/memory/physalloc.c @@ -1,3 +1,4 @@ +#include "lib/kio.h" #include #include #include @@ -62,7 +63,7 @@ static long page_idx(void *page) static inline bool bitmap_get(size_t i) { - return (bitmap[i / 64] >> i % 64) & 1; + return (bitmap[i / 64] >> (i % 64)) & 1; } static inline void bitmap_set(size_t i, bool v) @@ -71,9 +72,9 @@ static inline void bitmap_set(size_t i, bool v) free_memory -= PAGE_SIZE; else free_memory += PAGE_SIZE; - int idx = i / 64; - bitmap[idx] &= ~(1 << i % 64); - bitmap[idx] |= (v << i % 64); + size_t idx = i / 64; + bitmap[idx] &= ~(1 << (i % 64)); + bitmap[idx] |= (v << (i % 64)); } void *alloc_phys_page(void) @@ -105,9 +106,17 @@ void *alloc_phys_pages_exact(size_t pages) free_region_start = i; n_contiguous++; if (n_contiguous == pages) { + void *pADDR; + pADDR = page_at(free_region_start); + + if (pADDR == NULL) { + n_contiguous = 0; + continue; + } + for (size_t j = 0; j < pages; j++) bitmap_set(free_region_start + j, true); - return page_at(free_region_start); + return pADDR; } } else n_contiguous = 0; @@ -118,6 +127,7 @@ void *alloc_phys_pages_exact(size_t pages) struct phys_page_slice alloc_phys_page_withextra(size_t max_pages) { + panic("please dont use this its broken i think?!\n"); if (max_pages == 0) return PHYS_PAGE_SLICE_NULL; @@ -160,6 +170,7 @@ void free_phys_page(void *ptr) void free_phys_pages_slice(struct phys_page_slice slice) { + panic("please dont use this its broken i think?!\n"); free_phys_pages(slice.pagestart, slice.num_pages); } diff --git a/kernel/memory/virtalloc.c b/kernel/memory/virtalloc.c index 4ee75bb..da64f3b 100644 --- a/kernel/memory/virtalloc.c +++ b/kernel/memory/virtalloc.c @@ -100,9 +100,9 @@ void virtaddr_init(struct virt_ctx *ctx) ctx->used_node_count = 0; ctx->is_allocating = false; - virtaddr_take(ctx, (void *)kernel_start, - ((uint64_t)kernel_end - (uint64_t)kernel_start) / PAGE_SIZE + - 1); + virtaddr_take(ctx, (void *)0, + ((uint64_t)kernel_end + PAGE_SIZE - 1) / PAGE_SIZE * + PAGE_SIZE); } int virtaddr_clone(struct virt_ctx *old, struct virt_ctx *new) -- cgit v1.2.3-freya From d5a0abc2fe0ab570ab9e0de9607fec1e951cb933 Mon Sep 17 00:00:00 2001 From: Freya Murphy Date: Fri, 2 May 2025 12:37:40 -0400 Subject: temp badness --- config/grub.cfg | 2 +- kernel/lib/kalloc.c | 44 ++++++++++++++++++++++++++------------------ 2 files changed, 27 insertions(+), 19 deletions(-) (limited to 'kernel/lib') diff --git a/config/grub.cfg b/config/grub.cfg index b4e395d..82c5db7 100644 --- a/config/grub.cfg +++ b/config/grub.cfg @@ -5,5 +5,5 @@ insmod normal menuentry "kern" { multiboot2 /boot/kernel - module2 /boot/initrd.tar + # module2 /boot/initrd.tar } diff --git a/kernel/lib/kalloc.c b/kernel/lib/kalloc.c index 8dca46b..f4cd097 100644 --- a/kernel/lib/kalloc.c +++ b/kernel/lib/kalloc.c @@ -35,8 +35,7 @@ static struct page_header *get_header(void *ptr) static void *alloc_new(size_t size) { - size_t pages = - ((size + header_len + PAGE_SIZE - 1) / PAGE_SIZE) * PAGE_SIZE; + size_t pages = ((size + header_len + PAGE_SIZE - 1) / PAGE_SIZE); void *addr = kalloc_pages(pages); void *mem = (char *)addr + header_len; @@ -91,6 +90,8 @@ static void *alloc_block(size_t size, struct page_header *block) header->prev = block; header->next = block->next; block->next = header; + if (header->next) + header->next->prev = header; header->node_number = block->node_number; void *mem = (char *)header + header_len; @@ -163,7 +164,7 @@ void *krealloc(void *src, size_t dst_len) void kfree(void *ptr) { - struct page_header *header; + struct page_header *header, *neighbor; if (ptr == NULL) return; @@ -176,17 +177,17 @@ void kfree(void *ptr) header->free += header->used; header->used = 0; - struct page_header *neighbor; - // merge left for (neighbor = header->prev; neighbor != NULL; neighbor = neighbor->prev) { if (neighbor->node_number != header->node_number) break; - if (neighbor->used || header->used) - break; neighbor->free += header->free + header_len; neighbor->next = header->next; + if (neighbor->next) + neighbor->next->prev = neighbor; header = neighbor; + if (header->used) + break; } // merge right @@ -197,17 +198,24 @@ void kfree(void *ptr) break; header->free += neighbor->free + header_len; header->next = neighbor->next; - } - - if ((header->next == NULL || - header->next->node_number != header->node_number) && - (header->prev == NULL || - header->prev->node_number != header->node_number) && - header->used == 0) { if (header->next) - header->next->prev = header->prev; - if (header->prev) - header->prev->next = header->next; - kfree_pages(header); + header->next->prev = header; } + + // ignore if node on left + if (header->prev != NULL && + header->prev->node_number == header->node_number) + return; + + // ignore if node on right + if (header->next != NULL && + header->next->node_number == header->node_number) + return; + + // ignore if still used + if (header->used) + return; + + // FIXME: huh?! + // kfree_pages(header); } -- cgit v1.2.3-freya From 592c6992c7ea0c2e4cbea79fadb1c845f2fc050e Mon Sep 17 00:00:00 2001 From: Freya Murphy Date: Mon, 5 May 2025 09:54:48 -0400 Subject: pc spkr --- Makefile | 1 + kernel/cpu/idt.c | 9 +++--- kernel/drivers.c | 2 +- kernel/drivers/pit.c | 60 +++++++++++++++++++++++++++++-------- kernel/drivers/ps2.c | 15 ++++++++++ kernel/include/comus/drivers/pit.h | 14 +++++++-- kernel/include/comus/drivers/ps2.h | 13 ++++++++ kernel/include/comus/drivers/spkr.h | 29 ++++++++++++++++++ kernel/include/lib/klib.h | 5 ++++ kernel/lib/panic.c | 17 +++++++++-- 10 files changed, 144 insertions(+), 21 deletions(-) create mode 100644 kernel/include/comus/drivers/spkr.h (limited to 'kernel/lib') diff --git a/Makefile b/Makefile index 3739534..2b78eb6 100644 --- a/Makefile +++ b/Makefile @@ -12,6 +12,7 @@ GRUB ?= grub-mkrescue QEMUOPTS += -cdrom $(BIN)/$(ISO) \ -no-reboot \ -drive format=raw,file=user/bin/initrd.tar \ + -audiodev pa,id=speaker -machine pcspk-audiodev=speaker \ -serial mon:stdio \ -m 4G \ -name kern diff --git a/kernel/cpu/idt.c b/kernel/cpu/idt.c index 7cbbb65..50e15e0 100644 --- a/kernel/cpu/idt.c +++ b/kernel/cpu/idt.c @@ -1,3 +1,5 @@ +#include "comus/drivers/spkr.h" +#include "lib/klib.h" #include #include #include @@ -64,10 +66,11 @@ void idt_init(void) uint64_t isr = (uint64_t)isr_stub_table[vector]; // interrupts before 0x20 are for cpu exceptions + uint64_t gate_type = (isr < 0x20) ? GATE_64BIT_TRAP : GATE_64BIT_INT; entry->kernel_cs = 0x08; // offset of 1 into GDT entry->ist = 0; - entry->flags = PRESENT | RING0 | GATE_64BIT_INT; + entry->flags = PRESENT | RING0 | gate_type; entry->isr_low = isr & 0xffff; entry->isr_mid = (isr >> 16) & 0xffff; entry->isr_high = (isr >> 32) & 0xffffffff; @@ -148,9 +151,7 @@ __attribute__((noreturn)) void idt_exception_handler(uint64_t exception, log_backtrace_ex((void *)state->rip, (void *)state->rbp); - while (1) { - halt(); - } + fatal_loop(); } void isr_save(struct cpu_regs *regs) diff --git a/kernel/drivers.c b/kernel/drivers.c index 3d6ec10..572ab98 100644 --- a/kernel/drivers.c +++ b/kernel/drivers.c @@ -10,7 +10,7 @@ void drivers_init(void) { - pit_set_divider(1193); // 1ms + pit_set_freq(CHAN_TIMER, 1000); // 1ms uart_init(); ps2_init(); pci_init(); diff --git a/kernel/drivers/pit.c b/kernel/drivers/pit.c index 53a9263..0c7a207 100644 --- a/kernel/drivers/pit.c +++ b/kernel/drivers/pit.c @@ -1,29 +1,65 @@ +#include "lib/klib.h" #include #include +#include +#include -#define CHAN_0 0x40 -#define CHAN_1 0x41 -#define CHAN_2 0x42 #define CMD 0x43 +#define SPKR 0x61 + +#define BASE 1193180 volatile uint64_t ticks = 0; -uint16_t pit_read_divider(void) +uint32_t pit_read_freq(uint8_t chan) { - uint16_t count = 0; + uint16_t div = 0; cli(); outb(CMD, 0); // clear bits - count = inb(CHAN_0); // low byte - count |= inb(CHAN_0) << 8; // highbyte + div = inb(chan); // low byte + div |= inb(chan) << 8; // highbyte sti(); - return count; + return div * BASE; } -void pit_set_divider(uint16_t count) +void pit_set_freq(uint8_t chan, uint32_t hz) { - (void)count; + uint16_t div = BASE / hz; cli(); - outb(CHAN_0, count & 0xFF); // low byte - outb(CHAN_0, (count & 0xFF00) >> 8); // high byte + outb(CMD, 0xb6); + outb(chan, div & 0xFF); // low byte + outb(chan, (div & 0xFF00) >> 8); // high byte sti(); } + +void spkr_play_tone(uint32_t hz) +{ + uint8_t reg; + + if (hz == 0) { + spkr_quiet(); + return; + } + + // set spkr freq + pit_set_freq(CHAN_SPKR, hz); + + // enable spkr gate + reg = inb(SPKR); + if (reg != (reg | 0x3)) + outb(SPKR, reg | 0x3); +} + +void spkr_quiet(void) +{ + uint8_t reg; + reg = inb(SPKR) & 0xFC; + outb(SPKR, reg); +} + +void spkr_beep(void) +{ + spkr_play_tone(1000); + kspin_milliseconds(100); + spkr_quiet(); +} diff --git a/kernel/drivers/ps2.c b/kernel/drivers/ps2.c index e260f6b..f605c1d 100644 --- a/kernel/drivers/ps2.c +++ b/kernel/drivers/ps2.c @@ -266,3 +266,18 @@ int ps2_init(void) sti(); return 0; } + +int ps2_set_leds(uint8_t state) +{ + uint8_t result; + + if (!(has_mouse || has_kbd)) + return 1; + + ps2ctrl_out_cmd(0xED); + ps2ctrl_out_data(state); + if ((result = ps2ctrl_in()) != 0xFA) + return 1; + + return 0; +} diff --git a/kernel/include/comus/drivers/pit.h b/kernel/include/comus/drivers/pit.h index 77f0a14..22b8153 100644 --- a/kernel/include/comus/drivers/pit.h +++ b/kernel/include/comus/drivers/pit.h @@ -9,13 +9,23 @@ #ifndef PIT_H_ #define PIT_H_ +#define CHAN_TIMER 0x40 +#define CHAN_SPKR 0x42 + #include // how many time the pit has ticked // not accurate time, good for spinning though extern volatile uint64_t ticks; -uint16_t pit_read_divider(void); -void pit_set_divider(uint16_t count); +/** + * Read timer frequency + */ +uint32_t pit_read_freq(uint8_t chan); + +/** + * Set timer frequency + */ +void pit_set_freq(uint8_t chan, uint32_t hz); #endif diff --git a/kernel/include/comus/drivers/ps2.h b/kernel/include/comus/drivers/ps2.h index 7634e5f..c012ad4 100644 --- a/kernel/include/comus/drivers/ps2.h +++ b/kernel/include/comus/drivers/ps2.h @@ -9,6 +9,8 @@ #ifndef PS2_H_ #define PS2_H_ +#include + /** * Initalize the ps2 controller */ @@ -24,4 +26,15 @@ void ps2kb_recv(void); */ void ps2mouse_recv(void); +/** + * Set ps2 led state + * + * Bits + * ---- + * 0 - Scroll lock + * 1 - Num Lock + * 2 - Caps lock + */ +int ps2_set_leds(uint8_t state); + #endif /* ps2.h */ diff --git a/kernel/include/comus/drivers/spkr.h b/kernel/include/comus/drivers/spkr.h new file mode 100644 index 0000000..f9e427e --- /dev/null +++ b/kernel/include/comus/drivers/spkr.h @@ -0,0 +1,29 @@ +/** + * @file spkr.h + * + * @author Freya Murphy + * + * PC Speaker + */ + +#ifndef SPKR_H_ +#define SPKR_H_ + +#include + +/** + * Play a tone on the pc speaker continuously + */ +void spkr_play_tone(uint32_t hz); + +/** + * Shut up the pc speaker + */ +void spkr_quiet(void); + +/** + * Beep the pc speaker for a short period + */ +void spkr_beep(void); + +#endif /* spkr.h */ diff --git a/kernel/include/lib/klib.h b/kernel/include/lib/klib.h index b4d26ed..f549a09 100644 --- a/kernel/include/lib/klib.h +++ b/kernel/include/lib/klib.h @@ -263,6 +263,11 @@ enum log_level { __attribute__((noreturn, format(printf, 3, 4))) void __panic(unsigned int line, const char *file, const char *format, ...); +/** + * Loop kernel in fatal notifier (beep and blink caps lock key) + */ +__attribute__((noreturn)) void fatal_loop(void); + /** * Fill dst with a stack trace consisting of return addresses in order * from top to bottom diff --git a/kernel/lib/panic.c b/kernel/lib/panic.c index 3a6e029..35ea0b1 100644 --- a/kernel/lib/panic.c +++ b/kernel/lib/panic.c @@ -1,6 +1,8 @@ #include #include #include +#include +#include __attribute__((noreturn)) void __panic(unsigned int line, const char *file, const char *format, ...) @@ -16,6 +18,17 @@ __attribute__((noreturn)) void __panic(unsigned int line, const char *file, log_backtrace(); #endif - while (1) - halt(); + fatal_loop(); +} + +__attribute__((noreturn)) void fatal_loop(void) +{ + while(1) { + spkr_play_tone(1000); + ps2_set_leds(0x4); + kspin_milliseconds(200); + spkr_quiet(); + ps2_set_leds(0x0); + kspin_milliseconds(800); + } } -- cgit v1.2.3-freya From 9e0972a754ec218a5bf611aca644738d1c07e9b1 Mon Sep 17 00:00:00 2001 From: Freya Murphy Date: Tue, 6 May 2025 12:34:11 -0400 Subject: remove sym lookup --- kernel/lib/backtrace.c | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) (limited to 'kernel/lib') diff --git a/kernel/lib/backtrace.c b/kernel/lib/backtrace.c index 2507be4..2783b74 100644 --- a/kernel/lib/backtrace.c +++ b/kernel/lib/backtrace.c @@ -50,10 +50,9 @@ void log_backtrace_ex(void *ip, void *bp) if (!VALID(frame)) return; kputs("Stack trace:\n"); - kprintf(" %p\t%s\n", ip, mboot_get_elf_sym((uint64_t)ip)); + kprintf(" %p\n", ip); while (VALID(frame)) { - kprintf(" %p\t%s\n", frame->rip, - mboot_get_elf_sym((uint64_t)frame->rip)); + kprintf(" %p\n", frame->rip); frame = frame->rbp; } } -- cgit v1.2.3-freya From fa745d64c62e150b2391e8d60e0da261d02aac9f Mon Sep 17 00:00:00 2001 From: Freya Murphy Date: Tue, 6 May 2025 12:36:27 -0400 Subject: kernel alloc should not be doing all of this, make it simpler (and work) --- kernel/lib/kalloc.c | 156 +++++----------------------------------------------- 1 file changed, 14 insertions(+), 142 deletions(-) (limited to 'kernel/lib') diff --git a/kernel/lib/kalloc.c b/kernel/lib/kalloc.c index f4cd097..23b8b73 100644 --- a/kernel/lib/kalloc.c +++ b/kernel/lib/kalloc.c @@ -1,123 +1,38 @@ -#include "lib/kio.h" #include #include #define MAGIC 0xBEEFCAFE struct page_header { - struct page_header *next; - struct page_header *prev; - size_t - node_number; // all headers on the same page alloc have the same node number (so they can be merged) - size_t - free; // free space after the node (if its the last node in the alloc block) - size_t used; // how much space this allocation is using + size_t len; uint64_t magic; }; -static const size_t header_len = sizeof(struct page_header); -static struct page_header *start_header = NULL; -static struct page_header *end_header = NULL; - static struct page_header *get_header(void *ptr) { struct page_header *header = - (struct page_header *)((uintptr_t)ptr - header_len); + (struct page_header *)((uintptr_t)ptr - PAGE_SIZE); - // PERF: do we want to make sure this pointer is paged - // before reading it??? - if (header->magic != MAGIC) { + if (header->magic != MAGIC) return NULL; // invalid pointer - } return header; } -static void *alloc_new(size_t size) +void *kalloc(size_t size) { - size_t pages = ((size + header_len + PAGE_SIZE - 1) / PAGE_SIZE); - - void *addr = kalloc_pages(pages); - void *mem = (char *)addr + header_len; - - size_t total = pages * PAGE_SIZE; - size_t free = total - (size + header_len); + struct page_header *header; + size_t pages; - if (addr == NULL) { + pages = (size + PAGE_SIZE - 1) / PAGE_SIZE; + header = kalloc_pages(pages + 1); + if (header == NULL) return NULL; - } - - size_t node; - if (end_header != NULL) { - node = end_header->node_number + 1; - } else { - node = 0; - } - - struct page_header *header = addr; - memsetv(header, 0, sizeof(struct page_header)); - header->magic = MAGIC; - header->used = size; - header->free = free; - header->prev = end_header; - header->next = NULL; - header->node_number = node; - - if (start_header == NULL) { - start_header = header; - } - - if (end_header != NULL) { - end_header->next = header; - } else { - end_header = header; - } - - return mem; -} - -static void *alloc_block(size_t size, struct page_header *block) -{ - struct page_header *header = - (struct page_header *)((char *)block + block->used + header_len); - - size_t free = block->free - (size + header_len); - block->free = 0; header->magic = MAGIC; - header->used = size; - header->free = free; - header->prev = block; - header->next = block->next; - block->next = header; - if (header->next) - header->next->prev = header; - header->node_number = block->node_number; - - void *mem = (char *)header + header_len; - - return mem; -} - -void *kalloc(size_t size) -{ - struct page_header *header = start_header; - - for (; header != NULL; header = header->next) { - size_t free = header->free; - if (free < header_len) - continue; - if (size <= - (free - header_len)) { // we must be able to fit data + header - break; - } - } + header->len = size; - if (header != NULL) { - return alloc_block(size, header); - } else { - return alloc_new(size); - } + return (char *)header + PAGE_SIZE; } void *krealloc(void *src, size_t dst_len) @@ -143,7 +58,7 @@ void *krealloc(void *src, size_t dst_len) if (header == NULL) return NULL; - src_len = header->used; + src_len = header->len; if (src_len == 0) return NULL; @@ -164,7 +79,7 @@ void *krealloc(void *src, size_t dst_len) void kfree(void *ptr) { - struct page_header *header, *neighbor; + struct page_header *header; if (ptr == NULL) return; @@ -174,48 +89,5 @@ void kfree(void *ptr) if (header == NULL) return; - header->free += header->used; - header->used = 0; - - // merge left - for (neighbor = header->prev; neighbor != NULL; neighbor = neighbor->prev) { - if (neighbor->node_number != header->node_number) - break; - neighbor->free += header->free + header_len; - neighbor->next = header->next; - if (neighbor->next) - neighbor->next->prev = neighbor; - header = neighbor; - if (header->used) - break; - } - - // merge right - for (neighbor = header->next; neighbor != NULL; neighbor = neighbor->next) { - if (neighbor->node_number != header->node_number) - break; - if (neighbor->used) - break; - header->free += neighbor->free + header_len; - header->next = neighbor->next; - if (header->next) - header->next->prev = header; - } - - // ignore if node on left - if (header->prev != NULL && - header->prev->node_number == header->node_number) - return; - - // ignore if node on right - if (header->next != NULL && - header->next->node_number == header->node_number) - return; - - // ignore if still used - if (header->used) - return; - - // FIXME: huh?! - // kfree_pages(header); + kfree_pages(header); } -- cgit v1.2.3-freya From a1ed03f222f3e5f5a7a2232ace9785d204228f00 Mon Sep 17 00:00:00 2001 From: Freya Murphy Date: Tue, 6 May 2025 12:36:56 -0400 Subject: make ps2 not do led stuff, it brokie --- kernel/drivers/ps2.c | 2 +- kernel/lib/panic.c | 4 +--- 2 files changed, 2 insertions(+), 4 deletions(-) (limited to 'kernel/lib') diff --git a/kernel/drivers/ps2.c b/kernel/drivers/ps2.c index f605c1d..409ca09 100644 --- a/kernel/drivers/ps2.c +++ b/kernel/drivers/ps2.c @@ -272,7 +272,7 @@ int ps2_set_leds(uint8_t state) uint8_t result; if (!(has_mouse || has_kbd)) - return 1; + return 1; ps2ctrl_out_cmd(0xED); ps2ctrl_out_data(state); diff --git a/kernel/lib/panic.c b/kernel/lib/panic.c index 35ea0b1..99936c1 100644 --- a/kernel/lib/panic.c +++ b/kernel/lib/panic.c @@ -23,12 +23,10 @@ __attribute__((noreturn)) void __panic(unsigned int line, const char *file, __attribute__((noreturn)) void fatal_loop(void) { - while(1) { + while (1) { spkr_play_tone(1000); - ps2_set_leds(0x4); kspin_milliseconds(200); spkr_quiet(); - ps2_set_leds(0x0); kspin_milliseconds(800); } } -- cgit v1.2.3-freya