summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAnton Kling <anton@kling.gg>2024-06-17 22:07:38 +0200
committerAnton Kling <anton@kling.gg>2024-06-17 22:07:38 +0200
commitf209faffab90186cd88cd0a2fe2cc6236bb53e15 (patch)
tree68194363c25900f5d349c8ae34d42be9ae638df8
parent08d0b7eee74b9f345241faad460d145bb0454736 (diff)
Reorganize logging code
-rw-r--r--kernel/arch/i386/mmu.c2
-rw-r--r--kernel/cpu/idt.c8
-rw-r--r--kernel/drivers/ahci.c8
-rw-r--r--kernel/drivers/ata.c8
-rw-r--r--kernel/elf.c2
-rw-r--r--kernel/fs/ext2.c16
-rw-r--r--kernel/fs/vfs.c4
-rw-r--r--kernel/init/kernel.c18
-rw-r--r--kernel/kmalloc.c2
-rw-r--r--kernel/libc/include/stdio.h3
-rw-r--r--kernel/libc/stdio/print.c20
-rw-r--r--kernel/log.c20
-rw-r--r--kernel/log.h2
-rw-r--r--kernel/network/arp.c2
-rw-r--r--kernel/random.c4
-rw-r--r--kernel/sched/scheduler.c2
16 files changed, 63 insertions, 58 deletions
diff --git a/kernel/arch/i386/mmu.c b/kernel/arch/i386/mmu.c
index 28f6fd2..3043816 100644
--- a/kernel/arch/i386/mmu.c
+++ b/kernel/arch/i386/mmu.c
@@ -150,7 +150,7 @@ int get_free_frame(u32 *frame) {
}
}
}
- klog("MMU: Ran out of free frames. TODO: free up memory", LOG_WARN);
+ klog(LOG_WARN, "MMU: Ran out of free frames. TODO: free up memory");
*frame = 0;
return 0;
}
diff --git a/kernel/cpu/idt.c b/kernel/cpu/idt.c
index 7ad0be1..a7a93f6 100644
--- a/kernel/cpu/idt.c
+++ b/kernel/cpu/idt.c
@@ -50,7 +50,7 @@ __attribute__((no_caller_saved_registers)) void EOI(u8 irq) {
}
void general_protection_fault(reg_t *regs) {
- klog("General Protetion Fault", 0x1);
+ klog(LOG_ERROR, "General Protetion Fault");
kprintf(" Error Code: %x\n", regs->error_code);
kprintf("Instruction Pointer: %x\n", regs->eip);
if (current_task) {
@@ -64,12 +64,12 @@ void general_protection_fault(reg_t *regs) {
void double_fault(registers_t *regs) {
(void)regs;
- klog("DOUBLE FAULT", LOG_ERROR);
+ klog(LOG_ERROR, "DOUBLE FAULT");
halt();
}
void invalid_opcode(reg_t *regs) {
- klog("Invalid opcode", LOG_ERROR);
+ klog(LOG_ERROR, "Invalid opcode");
kprintf("Instruction Pointer: %x\n", regs->eip);
dump_backtrace(8);
halt();
@@ -90,7 +90,7 @@ void page_fault(reg_t *regs) {
return;
}
- klog("Page Fault", LOG_ERROR);
+ klog(LOG_ERROR, "Page Fault");
kprintf("CR2: %x\n", cr2);
if (current_task) {
kprintf("PID: %x\n", current_task->pid);
diff --git a/kernel/drivers/ahci.c b/kernel/drivers/ahci.c
index 34de443..22468ff 100644
--- a/kernel/drivers/ahci.c
+++ b/kernel/drivers/ahci.c
@@ -313,7 +313,7 @@ u8 ahci_perform_command(volatile struct HBA_PORT *port, u32 startl, u32 starth,
u8 err;
u32 command_slot = get_free_command_slot(port, &err);
if (err) {
- klog("AHCI No command slot found", LOG_WARN);
+ klog(LOG_WARN, "AHCI No command slot found");
return 0;
}
struct HBA_CMD_HEADER *cmdheader =
@@ -373,7 +373,7 @@ u8 ahci_perform_command(volatile struct HBA_PORT *port, u32 startl, u32 starth,
spin++;
}
if (spin == 10000) {
- klog("AHCI port is hung", LOG_ERROR);
+ klog(LOG_ERROR, "AHCI port is hung");
return 0;
}
@@ -387,14 +387,14 @@ u8 ahci_perform_command(volatile struct HBA_PORT *port, u32 startl, u32 starth,
break;
}
if (port->is & HBA_PxIS_TFES) {
- klog("AHCI command failed", LOG_ERROR);
+ klog(LOG_ERROR, "AHCI command failed");
return 0;
}
}
// Check again
if (port->is & HBA_PxIS_TFES) {
- klog("AHCI command failed", LOG_ERROR);
+ klog(LOG_ERROR, "AHCI command failed");
return 0;
}
diff --git a/kernel/drivers/ata.c b/kernel/drivers/ata.c
index 0537f6e..9116da9 100644
--- a/kernel/drivers/ata.c
+++ b/kernel/drivers/ata.c
@@ -56,7 +56,7 @@ int identify(int master_slave) {
// non-zero. If so, the drive is not ATA, and we
// should stop polling.
if (0 != inb(io_base + LBAmid) || 0 != inb(io_base + LBAhi)) {
- klog("Drive is not ATA.", LOG_ERROR);
+ klog(LOG_ERROR, "Drive is not ATA.");
return -1;
}
@@ -64,7 +64,7 @@ int identify(int master_slave) {
status = inb(io_base + STATUS_PORT);
if (1 == (status & STATUS_ERR)) {
- klog("Drive ERR set.", LOG_ERROR);
+ klog(LOG_ERROR, "Drive ERR set.");
return -2;
}
@@ -95,7 +95,7 @@ int poll_status(void) {
// ERR or
// DF sets
if ((status & STATUS_ERR) || (status & STATUS_DF)) {
- klog("Drive error set.", LOG_ERROR);
+ klog(LOG_ERROR, "Drive error set.");
return 0;
}
@@ -205,7 +205,7 @@ void ata_init(void) {
// 0xFF is an illegal status value, and
// indicates that the bus has no drives
if (0xFF == inb(io_base + STATUS_PORT)) {
- klog("Bus has no drives", LOG_ERROR);
+ klog(LOG_ERROR, "Bus has no drives");
}
// Issue IDENTIFY command
diff --git a/kernel/elf.c b/kernel/elf.c
index f8cc6a2..3c7f96e 100644
--- a/kernel/elf.c
+++ b/kernel/elf.c
@@ -17,7 +17,7 @@ void *load_elf_file(const char *f, u32 *ds) {
}
if (0 != memcmp(header.e_ident, "\x7F\x45\x4C\x46" /* "\x7FELF" */, 4)) {
- klog("Incorrect ELF signature", LOG_ERROR);
+ klog(LOG_ERROR, "Incorrect ELF signature");
return NULL;
}
diff --git a/kernel/fs/ext2.c b/kernel/fs/ext2.c
index 18ce8c7..4a0dbd0 100644
--- a/kernel/fs/ext2.c
+++ b/kernel/fs/ext2.c
@@ -496,7 +496,7 @@ int read_inode(int inode_num, u8 *data, u64 size, u64 offset, u64 *file_size) {
for (int i = block_start; size; i++) {
u32 block = get_block(inode, i);
if (0 == block) {
- klog("Filesystem EXT2: Unable to find block", LOG_WARN);
+ klog(LOG_WARN, "Filesystem EXT2: Unable to find block");
return -1;
}
@@ -708,7 +708,7 @@ int ext2_create_directory(const char *path, int mode) {
// Check if the directory already exists
u32 inode_num = ext2_find_inode(path);
if (0 != inode_num) {
- klog("ext2_create_directory: Directory already exists", LOG_WARN);
+ klog(LOG_WARN, "ext2_create_directory: Directory already exists");
return inode_num;
}
@@ -718,13 +718,13 @@ int ext2_create_directory(const char *path, int mode) {
char *filename;
strcpy(path_buffer, path);
if (!ext2_find_parent(path_buffer, &parent_inode, &filename)) {
- klog("ext2_create_file: Parent does not exist", LOG_WARN);
+ klog(LOG_WARN, "ext2_create_file: Parent does not exist");
return -1;
}
int new_file_inode = get_free_inode(1);
if (-1 == new_file_inode) {
- klog("ext2_create_file: Unable to find free inode", LOG_WARN);
+ klog(LOG_WARN, "ext2_create_file: Unable to find free inode");
return -1;
}
assert(0 != new_file_inode);
@@ -768,7 +768,7 @@ int ext2_create_file(const char *path, int mode) {
// Check if the file already exists
u32 inode_num = ext2_find_inode(path);
if (0 != inode_num) {
- klog("ext2_create_file: File already exists", LOG_WARN);
+ klog(LOG_WARN, "ext2_create_file: File already exists");
return inode_num;
}
@@ -778,13 +778,13 @@ int ext2_create_file(const char *path, int mode) {
char *filename;
strcpy(path_buffer, path);
if (!ext2_find_parent(path_buffer, &parent_inode, &filename)) {
- klog("ext2_create_file: Parent does not exist", LOG_WARN);
+ klog(LOG_WARN, "ext2_create_file: Parent does not exist");
return -1;
}
int new_file_inode = get_free_inode(1);
if (-1 == new_file_inode) {
- klog("ext2_create_file: Unable to find free inode", LOG_WARN);
+ klog(LOG_WARN, "ext2_create_file: Unable to find free inode");
return -1;
}
assert(0 != new_file_inode);
@@ -839,7 +839,7 @@ void parse_superblock(void) {
block_byte_size = 1024 << superblock->block_size;
if (0xEF53 != superblock->ext2_signature) {
- klog("Incorrect ext2 signature in superblock.", LOG_ERROR);
+ klog(LOG_ERROR, "Incorrect ext2 signature in superblock.");
for (;;)
; // TODO: Fail properly
}
diff --git a/kernel/fs/vfs.c b/kernel/fs/vfs.c
index 59149f5..666dfc9 100644
--- a/kernel/fs/vfs.c
+++ b/kernel/fs/vfs.c
@@ -274,10 +274,10 @@ int vfs_open(const char *file, int flags, int mode) {
if (0 == inode) {
if (flags & O_CREAT) {
if (vfs_create_file(resolved_path)) {
- klog("VFS: File created", LOG_NOTE);
+ klog(LOG_NOTE, "VFS: File created");
return vfs_open(file, flags, mode);
}
- klog("VFS: Could not create file", LOG_WARN);
+ klog(LOG_WARN, "VFS: Could not create file");
}
return -ENOENT;
}
diff --git a/kernel/init/kernel.c b/kernel/init/kernel.c
index 090e03f..105e947 100644
--- a/kernel/init/kernel.c
+++ b/kernel/init/kernel.c
@@ -56,34 +56,34 @@ void kernel_main(u32 kernel_end, unsigned long magic, unsigned long addr,
u64 memsize_kb = mem_mb * 1000 + mem_kb;
paging_init(memsize_kb, mb);
- klog("Paging Initalized", LOG_SUCCESS);
+ klog(LOG_SUCCESS, "Paging Initalized");
mb = mmu_map_frames((multiboot_info_t *)addr, sizeof(multiboot_info_t));
assert(mb);
gdt_init();
- klog("GDT Initalized", LOG_SUCCESS);
+ klog(LOG_SUCCESS, "GDT Initalized");
idt_init();
- klog("IDT Initalized", LOG_SUCCESS);
+ klog(LOG_SUCCESS, "IDT Initalized");
syscalls_init();
- klog("Syscalls Initalized", LOG_SUCCESS);
+ klog(LOG_SUCCESS, "Syscalls Initalized");
pit_install();
set_pit_count(1000);
- klog("PIT driver installed", LOG_SUCCESS);
+ klog(LOG_SUCCESS, "PIT driver installed");
ata_init();
- klog("ATA Initalized", LOG_SUCCESS);
+ klog(LOG_SUCCESS, "ATA Initalized");
tasking_init();
- klog("Tasking Initalized", LOG_SUCCESS);
+ klog(LOG_SUCCESS, "Tasking Initalized");
install_mouse();
- klog("PS2 Mouse driver installed", LOG_SUCCESS);
+ klog(LOG_SUCCESS, "PS2 Mouse driver installed");
install_keyboard();
- klog("PS2 Keyboard driver installed", LOG_SUCCESS);
+ klog(LOG_SUCCESS, "PS2 Keyboard driver installed");
global_socket_init();
diff --git a/kernel/kmalloc.c b/kernel/kmalloc.c
index a652962..f9513d7 100644
--- a/kernel/kmalloc.c
+++ b/kernel/kmalloc.c
@@ -184,7 +184,7 @@ void *int_kmalloc(size_t s) {
MallocHeader *free_entry = find_free_entry(s);
if (!free_entry) {
if (!add_heap_memory(s)) {
- klog("Ran out of memory.", LOG_ERROR);
+ klog(LOG_ERROR, "Ran out of memory.");
return NULL;
}
return kmalloc(s);
diff --git a/kernel/libc/include/stdio.h b/kernel/libc/include/stdio.h
index f2bbb32..9dd496e 100644
--- a/kernel/libc/include/stdio.h
+++ b/kernel/libc/include/stdio.h
@@ -1,9 +1,10 @@
#ifndef STDIO_H
#define STDIO_H
+#include <stdarg.h>
void putc(const char c);
-int puts(char *str);
void delete_characther(void);
int kprintf(const char *format, ...);
+int vkprintf(const char *format, va_list list);
#endif
diff --git a/kernel/libc/stdio/print.c b/kernel/libc/stdio/print.c
index 93393ee..e8b245f 100644
--- a/kernel/libc/stdio/print.c
+++ b/kernel/libc/stdio/print.c
@@ -1,7 +1,6 @@
-#include "../../drivers/serial.h"
-#include "../include/assert.h"
-#include "../include/stdio.h"
-#include <stdarg.h>
+#include <assert.h>
+#include <drivers/serial.h>
+#include <stdio.h>
#define TAB_SIZE 8
@@ -55,11 +54,8 @@ int kprint_int(int num) {
return c;
}
-int kprintf(const char *format, ...) {
+int vkprintf(const char *format, va_list list) {
int c = 0;
- va_list list;
- va_start(list, format);
-
const char *s = format;
for (; *s; s++) {
if ('%' != *s) {
@@ -101,6 +97,10 @@ int kprintf(const char *format, ...) {
return c;
}
-int puts(char *str) {
- return kprintf("%s\n", str);
+int kprintf(const char *format, ...) {
+ va_list list;
+ va_start(list, format);
+ int rc = vkprintf(format, list);
+ va_end(list);
+ return rc;
}
diff --git a/kernel/log.c b/kernel/log.c
index ff6f45b..47f6d6f 100644
--- a/kernel/log.c
+++ b/kernel/log.c
@@ -1,6 +1,7 @@
#include "log.h"
#include <cpu/arch_inst.h>
#include <sched/scheduler.h>
+#include <stdarg.h>
struct stackframe {
struct stackframe *ebp;
@@ -8,7 +9,7 @@ struct stackframe {
};
void dump_backtrace(u32 max_frames) {
- struct stackframe *stk = (void*)get_current_sbp();
+ struct stackframe *stk = (void *)get_current_sbp();
kprintf("Stack trace:\n");
for (u32 frame = 0; stk && frame < max_frames; ++frame) {
kprintf(" 0x%x\n", stk->eip);
@@ -19,22 +20,25 @@ void dump_backtrace(u32 max_frames) {
}
}
-void klog(char *str, int code) {
+void klog(int code, char *fmt, ...) {
+ va_list list;
+ va_start(list, fmt);
switch (code) {
+ case LOG_SUCCESS:
+ kprintf("[SUCCESS] ");
+ break;
case LOG_NOTE:
kprintf("[NOTE] ");
break;
case LOG_WARN:
kprintf("[WARN] ");
break;
+ default:
case LOG_ERROR:
kprintf("[ERROR] ");
break;
- default:
- case LOG_SUCCESS:
- kprintf("[SUCCESS] ");
- break;
}
-
- puts(str);
+ vkprintf(fmt, list);
+ va_end(list);
+ kprintf("\n");
}
diff --git a/kernel/log.h b/kernel/log.h
index 10164d0..fb1ce34 100644
--- a/kernel/log.h
+++ b/kernel/log.h
@@ -6,5 +6,5 @@
#define LOG_ERROR 1
#define LOG_SUCCESS 0
-void klog(char *str, int code);
+void klog(int code, char *fmt, ...);
void dump_backtrace(u32 max_frames);
diff --git a/kernel/network/arp.c b/kernel/network/arp.c
index d4cf0dd..33aaaec 100644
--- a/kernel/network/arp.c
+++ b/kernel/network/arp.c
@@ -112,7 +112,7 @@ int get_mac_from_ip(const ipv4_t ip, u8 mac[6]) {
memcpy(mac, arp_table[i].mac, sizeof(u8[6]));
return 1;
}
- klog("ARP cache miss", LOG_NOTE);
+ klog(LOG_NOTE, "ARP cache miss");
enable_interrupts();
send_arp_request(ip);
// TODO: Maybe wait a bit?
diff --git a/kernel/random.c b/kernel/random.c
index 2d77ccd..80337bc 100644
--- a/kernel/random.c
+++ b/kernel/random.c
@@ -119,14 +119,14 @@ void setup_random(void) {
BYTE seed[1024];
int rand_fd = vfs_open("/etc/seed", O_RDWR, 0);
if (0 > rand_fd) {
- klog("/etc/seed not found", LOG_WARN);
+ klog(LOG_WARN, "/etc/seed not found");
return;
}
size_t offset = 0;
for (int rc; (rc = vfs_pread(rand_fd, seed, 1024, offset)); offset += rc) {
if (0 > rc) {
- klog("/etc/seed read error", LOG_WARN);
+ klog(LOG_WARN, "/etc/seed read error");
break;
}
add_entropy(seed, rc);
diff --git a/kernel/sched/scheduler.c b/kernel/sched/scheduler.c
index 4657ebf..31d5257 100644
--- a/kernel/sched/scheduler.c
+++ b/kernel/sched/scheduler.c
@@ -594,7 +594,7 @@ void *mmap(void *addr, size_t length, int prot, int flags, int fd,
MemoryMap **ptr = get_free_map();
if (!ptr) {
- klog("mmap(): No free memory map.", LOG_WARN);
+ klog(LOG_WARN, "mmap(): No free memory map.");
return (void *)-1;
}
*ptr = kmalloc(sizeof(MemoryMap));