增加reboot&mem info命令
This commit is contained in:
@@ -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_;
|
||||
}
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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:
|
||||
|
||||
Reference in New Issue
Block a user