修复多核ipi不稳定问题&增加虚拟化的部分支持(框架和串口虚拟化)&大量bug修复
This commit is contained in:
@@ -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);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user