msgbug可以正常设置

This commit is contained in:
zhangzheng
2024-04-08 17:10:16 +00:00
parent b513ccb8ae
commit 6eac1dad30
4 changed files with 20 additions and 6 deletions

View File

@@ -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;
}

View File

@@ -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);

View File

@@ -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

View File

@@ -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);