增加reboot&mem info命令

This commit is contained in:
zhangzheng
2024-01-05 23:59:48 +08:00
parent a2723c39c8
commit f9e9d12c4b
11 changed files with 141 additions and 13 deletions

View File

@@ -374,16 +374,45 @@ void mem_trace(mem_t *_this)
{
struct mem_heap *mem;
size_t total = 0;
printk("================");
printk("================\n");
printk("start heap:0x%x.\n", _this->heap_start);
printk("l heap:0x%x.\n", _this->l_heap);
printk("end heap:0x%x.\n", _this->heap_end);
umword_t status = spinlock_lock(&_this->lock);
for (mem = _this->heap_start; mem != _this->heap_end; mem = mem->next)
{
printk("%d [0x%x-] %dB\n", mem->used, mem, mem->size);
total += mem->size + MEM_HEAP_STRUCT_SIZE;
}
spinlock_set(&_this->lock, status);
printk("mem total size:%d.\n", total);
printk("================");
printk("================\n");
}
void mem_info(mem_t *_this, size_t *total, size_t *free)
{
assert(total);
assert(free);
struct mem_heap *mem;
size_t total_ = 0;
size_t free_ = 0;
printk("================\n");
printk("start heap:0x%x.\n", _this->heap_start);
printk("l heap:0x%x.\n", _this->l_heap);
printk("end heap:0x%x.\n", _this->heap_end);
umword_t status = spinlock_lock(&_this->lock);
for (mem = _this->heap_start; mem != _this->heap_end; mem = mem->next)
{
printk("%d [0x%x-] %dB\n", mem->used, mem, mem->size);
total_ += mem->size + MEM_HEAP_STRUCT_SIZE;
if (mem->used == 0)
{
free_ += mem->size;
}
}
spinlock_set(&_this->lock, status);
printk("================\n");
*total = total_;
*free = free_;
}

View File

@@ -52,6 +52,10 @@ void mm_trace(void)
{
mem_trace(mm_get_global());
}
void mm_info(size_t *total, size_t *free)
{
mem_info(mm_get_global(), total, free);
}
void *mm_limit_alloc_align(ram_limit_t *limit, size_t size, size_t align)
{
if (ram_limit_alloc(limit, size) == FALSE)

View File

@@ -17,6 +17,7 @@
#include "types.h"
#include "util.h"
#include "arch.h"
#include "mm_wrap.h"
typedef struct sys
{
@@ -29,6 +30,7 @@ enum sys_op
{
SYS_INFO_GET,
REBOOT,
MEM_INFO,
};
static void sys_syscall(kobject_t *kobj, syscall_prot_t sys_p, msg_tag_t in_tag, entry_frame_t *f);
@@ -59,8 +61,20 @@ static void sys_syscall(kobject_t *kobj, syscall_prot_t sys_p, msg_tag_t in_tag,
break;
case REBOOT:
{
printk("Unsupport.\n");
tag = msg_tag_init4(0, 0, 0, -ENOSYS);
printk("sys reboot.\n");
sys_reset();
tag = msg_tag_init4(0, 0, 0, 0);
}
break;
case MEM_INFO:
{
size_t total;
size_t free;
mm_info(&total, &free);
f->r[1] = total;
f->r[2] = free;
tag = msg_tag_init4(0, 0, 0, 0);
}
break;
default: