msgbug可以正常设置
This commit is contained in:
@@ -172,6 +172,17 @@ int unmap_mm(page_entry_t *pdir, addr_t virt_addr, mword_t page_order, mword_t p
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
SECTION(TEXT_BOOT_SECTION)
|
||||
umword_t mm_get_paddr(page_entry_t *pdir, addr_t virt_addr, mword_t page_order)
|
||||
{
|
||||
pte_t *pte = pages_walk(pdir, virt_addr + (0 << page_order), page_order, NULL);
|
||||
|
||||
if (pte != NULL)
|
||||
{
|
||||
return MASK_LSB(pte->pte, page_order) << (MWORD_BITS - 47) >> (MWORD_BITS - 47);
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
static SECTION(TEXT_BOOT_SECTION) void boot_init_pageing(page_entry_t *kpdir, bool_t init_pages)
|
||||
{
|
||||
@@ -184,7 +195,8 @@ static SECTION(TEXT_BOOT_SECTION) void boot_init_pageing(page_entry_t *kpdir, bo
|
||||
int i_ffs = ffs(CONFIG_KNL_DATA_SIZE) + (is_power_of_2(CONFIG_KNL_DATA_SIZE) ? 0 : 1);
|
||||
int i_cn = 0;
|
||||
|
||||
if (i_ffs<30) {
|
||||
if (i_ffs < 30)
|
||||
{
|
||||
i_ffs = 30;
|
||||
}
|
||||
|
||||
|
||||
@@ -48,6 +48,7 @@ void mmu_page_alloc_set(page_alloc_fn fn);
|
||||
int map_mm(page_entry_t *pdir, addr_t virt_addr, addr_t phys_addr,
|
||||
mword_t page_order, mword_t pfn_cn, mword_t attr);
|
||||
int unmap_mm(page_entry_t *pdir, addr_t virt_addr, mword_t page_order, mword_t pfn_cn);
|
||||
umword_t mm_get_paddr(page_entry_t *pdir, addr_t virt_addr, mword_t page_order);
|
||||
void per_cpu_boot_mapping(bool_t init_pages);
|
||||
page_entry_t *boot_get_pdir(void);
|
||||
void knl_pdir_init(page_entry_t *pdir, pte_t *dir, int page_deep);
|
||||
|
||||
@@ -421,8 +421,8 @@ static void thread_timeout_del_recv(thread_t *th)
|
||||
*/
|
||||
static int ipc_data_copy(thread_t *dst_th, thread_t *src_th, msg_tag_t tag)
|
||||
{
|
||||
void *src = src_th->msg.msg;
|
||||
void *dst = dst_th->msg.msg;
|
||||
void *src = thread_get_kmsg_buf(src_th);
|
||||
void *dst = thread_get_kmsg_buf(dst_th);
|
||||
ipc_msg_t *src_ipc;
|
||||
ipc_msg_t *dst_ipc;
|
||||
task_t *src_tk = thread_get_bind_task(src_th);
|
||||
@@ -644,7 +644,6 @@ again_check:
|
||||
goto end;
|
||||
}
|
||||
|
||||
thread_ready(recv_kobj, TRUE); //!< 直接唤醒接受者
|
||||
if (is_call)
|
||||
{
|
||||
if (recv_kobj->ipc_kobj)
|
||||
@@ -668,6 +667,7 @@ again_check:
|
||||
goto end;
|
||||
}
|
||||
}
|
||||
thread_ready(recv_kobj, TRUE); //!< 直接唤醒接受者
|
||||
preemption();
|
||||
}
|
||||
ret = 0;
|
||||
@@ -780,7 +780,8 @@ static void thread_syscall(kobject_t *kobj, syscall_prot_t sys_p, msg_tag_t in_t
|
||||
{
|
||||
if (is_rw_access(thread_get_bind_task(tag_th), (void *)(f->regs[1]), THREAD_MSG_BUG_LEN, FALSE))
|
||||
{
|
||||
thread_set_msg_buf(tag_th, NULL /*TODO:*/, (void *)(f->regs[1]));
|
||||
thread_set_msg_buf(tag_th, (void *)mm_get_paddr(mm_space_get_pdir(&task->mm_space), f->regs[1], PAGE_SHIFT),
|
||||
(void *)(f->regs[1]));
|
||||
tag = msg_tag_init4(0, 0, 0, 0);
|
||||
}
|
||||
else
|
||||
|
||||
@@ -280,7 +280,7 @@ int app_load(const char *name, uenv_t *cur_env, pid_t *pid, char *argv[], int ar
|
||||
|
||||
app_stack_push_umword(hd_task, &usp_top, 0);
|
||||
|
||||
app_stack_push_umword(hd_task, &usp_top, (umword_t)app_env);
|
||||
app_stack_push_umword(hd_task, &usp_top, (umword_t)app_env - (addr_t)sp_addr + 0x8000000);
|
||||
app_stack_push_umword(hd_task, &usp_top, 0xfe);
|
||||
|
||||
app_stack_push_umword(hd_task, &usp_top, MK_PAGE_SIZE);
|
||||
|
||||
Reference in New Issue
Block a user