修复多核ipi不稳定问题&增加虚拟化的部分支持(框架和串口虚拟化)&大量bug修复

This commit is contained in:
zhangzheng
2024-07-30 09:37:49 +08:00
committed by zhangzheng
parent e2ca0c74d1
commit 104da10a82
1679 changed files with 31605 additions and 74776 deletions

View File

@@ -9,10 +9,10 @@
*
*/
#include "printk.h"
#include "stdarg.h"
#include "xprintf.h"
#include "spinlock.h"
#include "stdarg.h"
#include "uart/uart.h"
#include "xprintf.h"
static spinlock_t lock;
static char print_cache[CONFIG_PRINTK_CACHE_SIZE];
@@ -24,8 +24,7 @@ static char print_cache[CONFIG_PRINTK_CACHE_SIZE];
*/
static void print_raw(const char *str)
{
for (int i = 0; str[i]; i++)
{
for (int i = 0; str[i]; i++) {
uart_putc(uart_get_global(), str[i]);
}
}
@@ -59,4 +58,19 @@ void printk(const char *fmt, ...)
va_end(args);
print_raw(print_cache);
spinlock_set(&lock, state);
}
}
void dumpstack(void)
{
uint64_t result[5];
umword_t x29;
umword_t status = cpulock_lock();
x29 = read_nmreg(x29);
for (size_t i = 0; i < sizeof(result) / sizeof(umword_t); i++) {
result[i] = (*(umword_t *)(x29 + 8)) - 4;
x29 = *(umword_t *)(x29);
}
printk("[knl dump stack]: 0x%lx,0x%lx,0x%lx,0x%lx,0x%lx\n", result[0], result[1], result[2], result[3], result[4]);
cpulock_set(status);
}