[lwp]给thread添加lwp成员

This commit is contained in:
heyuanjie 2018-07-30 11:12:12 +08:00
parent e6fedb6e9b
commit c79fbd373f
4 changed files with 15 additions and 10 deletions

View File

@ -510,7 +510,7 @@ struct dfs_fdtable* dfs_fdtable_get(void)
#ifdef RT_USING_LWP #ifdef RT_USING_LWP
struct rt_lwp *lwp; struct rt_lwp *lwp;
lwp = (struct rt_lwp *)rt_thread_self()->user_data; lwp = (struct rt_lwp *)rt_thread_self()->lwp;
if (lwp) if (lwp)
fdt = &lwp->fdt; fdt = &lwp->fdt;
else else

View File

@ -46,14 +46,14 @@ extern void lwp_user_entry(void *args, const void *text, void *data);
void lwp_set_kernel_sp(uint32_t *sp) void lwp_set_kernel_sp(uint32_t *sp)
{ {
struct rt_lwp *user_data; struct rt_lwp *user_data;
user_data = (struct rt_lwp *)rt_current_thread->user_data; user_data = (struct rt_lwp *)rt_current_thread->lwp;
user_data->kernel_sp = sp; user_data->kernel_sp = sp;
} }
uint32_t *lwp_get_kernel_sp(void) uint32_t *lwp_get_kernel_sp(void)
{ {
struct rt_lwp *user_data; struct rt_lwp *user_data;
user_data = (struct rt_lwp *)rt_current_thread->user_data; user_data = (struct rt_lwp *)rt_current_thread->lwp;
return user_data->kernel_sp; return user_data->kernel_sp;
} }
@ -286,7 +286,7 @@ static void lwp_cleanup(struct rt_thread *tid)
dbg_log(DBG_INFO, "thread: %s, stack_addr: %08X\n", tid->name, tid->stack_addr); dbg_log(DBG_INFO, "thread: %s, stack_addr: %08X\n", tid->name, tid->stack_addr);
lwp = (struct rt_lwp *)tid->user_data; lwp = (struct rt_lwp *)tid->lwp;
if (lwp->lwp_type == LWP_TYPE_DYN_ADDR) if (lwp->lwp_type == LWP_TYPE_DYN_ADDR)
{ {
@ -327,16 +327,13 @@ static void lwp_cleanup(struct rt_thread *tid)
static void lwp_thread(void *parameter) static void lwp_thread(void *parameter)
{ {
volatile uint32_t tmp;
rt_thread_t tid; rt_thread_t tid;
struct rt_lwp *lwp; struct rt_lwp *lwp;
rt_kprintf("%08x %08x\n", &tmp, tmp);
lwp = (struct rt_lwp *)parameter; lwp = (struct rt_lwp *)parameter;
rt_lwp_mem_init(lwp); rt_lwp_mem_init(lwp);
tid = rt_thread_self(); tid = rt_thread_self();
tid->user_data = (rt_uint32_t)lwp; tid->lwp = lwp;
tid->cleanup = lwp_cleanup; tid->cleanup = lwp_cleanup;
lwp_user_entry(lwp->args, lwp->text_entry, lwp->data); lwp_user_entry(lwp->args, lwp->text_entry, lwp->data);
@ -344,7 +341,7 @@ static void lwp_thread(void *parameter)
struct rt_lwp *rt_lwp_self(void) struct rt_lwp *rt_lwp_self(void)
{ {
return (struct rt_lwp *)rt_thread_self()->user_data; return (struct rt_lwp *)rt_thread_self()->lwp;
} }
int exec(char *filename, int argc, char **argv) int exec(char *filename, int argc, char **argv)

View File

@ -557,6 +557,10 @@ struct rt_thread
void (*cleanup)(struct rt_thread *tid); /**< cleanup function when thread exit */ void (*cleanup)(struct rt_thread *tid); /**< cleanup function when thread exit */
rt_uint32_t user_data; /**< private user data beyond this thread */ rt_uint32_t user_data; /**< private user data beyond this thread */
#ifdef RT_USING_LWP
struct rt_lwp *lwp; /**< if NULL it's a kernel thread */
#endif
}; };
typedef struct rt_thread *rt_thread_t; typedef struct rt_thread *rt_thread_t;

View File

@ -199,6 +199,10 @@ static rt_err_t _rt_thread_init(struct rt_thread *thread,
thread->si_list = RT_NULL; thread->si_list = RT_NULL;
#endif #endif
#ifdef RT_USING_LWP
thread->lwp = RT_NULL;
#endif
RT_OBJECT_HOOK_CALL(rt_thread_inited_hook, (thread)); RT_OBJECT_HOOK_CALL(rt_thread_inited_hook, (thread));
return RT_EOK; return RT_EOK;