Module: xenomai-forge Branch: next Commit: 17d98c20dad5240023a8a4c82e3ec2430fd6b745 URL: http://git.xenomai.org/?p=xenomai-forge.git;a=commit;h=17d98c20dad5240023a8a4c82e3ec2430fd6b745
Author: Gilles Chanteperdrix <gilles.chanteperd...@xenomai.org> Date: Sat Feb 1 20:22:27 2014 +0100 drivers/testing: adapt timerbench after RTDM changes --- kernel/drivers/testing/timerbench.c | 89 +++++++++++++++-------------------- 1 file changed, 39 insertions(+), 50 deletions(-) diff --git a/kernel/drivers/testing/timerbench.c b/kernel/drivers/testing/timerbench.c index af75d56..4cf6c44 100644 --- a/kernel/drivers/testing/timerbench.c +++ b/kernel/drivers/testing/timerbench.c @@ -186,12 +186,11 @@ static void timer_proc(rtdm_timer_t *timer) } while (err); } -static int rt_tmbench_open(struct rtdm_dev_context *context, - rtdm_user_info_t *user_info, int oflags) +static int rt_tmbench_open(struct rtdm_fd *context, int oflags) { struct rt_tmbench_context *ctx; - ctx = (struct rt_tmbench_context *)context->dev_private; + ctx = rtdm_context_to_private(context); ctx->mode = RTTST_TMBENCH_INVALID; sema_init(&ctx->nrt_mutex, 1); @@ -199,12 +198,11 @@ static int rt_tmbench_open(struct rtdm_dev_context *context, return 0; } -static int rt_tmbench_close(struct rtdm_dev_context *context, - rtdm_user_info_t *user_info) +static void rt_tmbench_close(struct rtdm_fd *context) { struct rt_tmbench_context *ctx; - ctx = (struct rt_tmbench_context *)context->dev_private; + ctx = rtdm_context_to_private(context); down(&ctx->nrt_mutex); @@ -224,13 +222,10 @@ static int rt_tmbench_close(struct rtdm_dev_context *context, } up(&ctx->nrt_mutex); - - return 0; } -static int rt_tmbench_start(struct rtdm_dev_context *context, +static int rt_tmbench_start(struct rtdm_fd *context, struct rt_tmbench_context *ctx, - rtdm_user_info_t *user_info, struct rttst_tmbench_config __user *user_config) { int err = 0; @@ -240,9 +235,9 @@ static int rt_tmbench_start(struct rtdm_dev_context *context, struct rttst_tmbench_config *config = (struct rttst_tmbench_config *)user_config; - if (user_info) { + if (rtdm_context_user_p(context)) { if (rtdm_safe_copy_from_user - (user_info, &config_buf,user_config, + (context, &config_buf,user_config, sizeof(struct rttst_tmbench_config)) < 0) return -EFAULT; @@ -293,32 +288,28 @@ static int rt_tmbench_start(struct rtdm_dev_context *context, rtdm_event_init(&ctx->result_event, 0); if (config->mode == RTTST_TMBENCH_TASK) { - if (!test_bit(RTDM_CLOSING, &context->context_flags)) { - err = rtdm_task_init(&ctx->timer_task, "timerbench", - timer_task_proc, ctx, - config->priority, 0); - if (!err) - ctx->mode = RTTST_TMBENCH_TASK; - } + err = rtdm_task_init(&ctx->timer_task, "timerbench", + timer_task_proc, ctx, + config->priority, 0); + if (!err) + ctx->mode = RTTST_TMBENCH_TASK; } else { rtdm_timer_init(&ctx->timer, timer_proc, - context->device->device_name); + rtdm_context_device(context)->device_name); ctx->curr.test_loops = 0; - if (!test_bit(RTDM_CLOSING, &context->context_flags)) { - ctx->mode = RTTST_TMBENCH_HANDLER; + ctx->mode = RTTST_TMBENCH_HANDLER; - cobalt_atomic_enter(s); - ctx->start_time = rtdm_clock_read_monotonic(); + cobalt_atomic_enter(s); + ctx->start_time = rtdm_clock_read_monotonic(); - /* first event: one millisecond from now. */ - ctx->date = ctx->start_time + 1000000; + /* first event: one millisecond from now. */ + ctx->date = ctx->start_time + 1000000; - err = rtdm_timer_start(&ctx->timer, ctx->date, 0, - RTDM_TIMERMODE_ABSOLUTE); - cobalt_atomic_leave(s); - } + err = rtdm_timer_start(&ctx->timer, ctx->date, 0, + RTDM_TIMERMODE_ABSOLUTE); + cobalt_atomic_leave(s); } up(&ctx->nrt_mutex); @@ -327,9 +318,9 @@ static int rt_tmbench_start(struct rtdm_dev_context *context, } static int rt_tmbench_stop(struct rt_tmbench_context *ctx, - rtdm_user_info_t *user_info, struct rttst_overall_bench_res __user *user_res) { + struct rtdm_fd *context = rtdm_private_to_context(ctx); int err = 0; down(&ctx->nrt_mutex); @@ -353,8 +344,8 @@ static int rt_tmbench_stop(struct rt_tmbench_context *ctx, ((ctx->result.overall.test_loops) > 1 ? ctx->result.overall.test_loops : 2) - 1); - if (user_info) - err = rtdm_safe_copy_to_user(user_info, &user_res->result, + if (rtdm_context_user_p(context)) + err = rtdm_safe_copy_to_user(context, &user_res->result, &ctx->result.overall, sizeof(struct rttst_bench_res)); /* Do not break on error here - we may have to free a @@ -370,19 +361,19 @@ static int rt_tmbench_stop(struct rt_tmbench_context *ctx, if (ctx->histogram_size > 0) { int size = ctx->histogram_size * sizeof(long); - if (user_info) { + if (rtdm_context_user_p(context)) { struct rttst_overall_bench_res res_buf; - if (rtdm_safe_copy_from_user(user_info, + if (rtdm_safe_copy_from_user(context, &res_buf, user_res, sizeof(res_buf)) < 0 || - rtdm_safe_copy_to_user(user_info, + rtdm_safe_copy_to_user(context, (void __user *)res_buf.histogram_min, ctx->histogram_min, size) < 0 || - rtdm_safe_copy_to_user(user_info, + rtdm_safe_copy_to_user(context, (void __user *)res_buf.histogram_max, ctx->histogram_max, size) < 0 || - rtdm_safe_copy_to_user(user_info, + rtdm_safe_copy_to_user(context, (void __user *)res_buf.histogram_avg, ctx->histogram_avg, size) < 0) err = -EFAULT; @@ -403,22 +394,21 @@ static int rt_tmbench_stop(struct rt_tmbench_context *ctx, return err; } -static int rt_tmbench_ioctl_nrt(struct rtdm_dev_context *context, - rtdm_user_info_t *user_info, +static int rt_tmbench_ioctl_nrt(struct rtdm_fd *context, unsigned int request, void __user *arg) { struct rt_tmbench_context *ctx; int err = 0; - ctx = (struct rt_tmbench_context *)context->dev_private; + ctx = rtdm_context_to_private(context); switch (request) { case RTTST_RTIOC_TMBENCH_START: - err = rt_tmbench_start(context, ctx, user_info, arg); + err = rt_tmbench_start(context, ctx, arg); break; case RTTST_RTIOC_TMBENCH_STOP: - err = rt_tmbench_stop(ctx, user_info, arg); + err = rt_tmbench_stop(ctx, arg); break; case RTTST_RTIOC_INTERM_BENCH_RES: @@ -432,14 +422,13 @@ static int rt_tmbench_ioctl_nrt(struct rtdm_dev_context *context, return err; } -static int rt_tmbench_ioctl_rt(struct rtdm_dev_context *context, - rtdm_user_info_t *user_info, +static int rt_tmbench_ioctl_rt(struct rtdm_fd *context, unsigned int request, void __user *arg) { struct rt_tmbench_context *ctx; int err = 0; - ctx = (struct rt_tmbench_context *)context->dev_private; + ctx = rtdm_context_to_private(context); switch (request) { case RTTST_RTIOC_INTERM_BENCH_RES: @@ -447,10 +436,10 @@ static int rt_tmbench_ioctl_rt(struct rtdm_dev_context *context, if (err) return err; - if (user_info) { + if (rtdm_context_user_p(context)) { struct rttst_interm_bench_res __user *user_res = arg; - err = rtdm_safe_copy_to_user(user_info, user_res, + err = rtdm_safe_copy_to_user(context, user_res, &ctx->result, sizeof(*user_res)); } else { @@ -480,10 +469,10 @@ static struct rtdm_device device = { .context_size = sizeof(struct rt_tmbench_context), .device_name = "", - .open_nrt = rt_tmbench_open, + .open = rt_tmbench_open, .ops = { - .close_nrt = rt_tmbench_close, + .close = rt_tmbench_close, .ioctl_rt = rt_tmbench_ioctl_rt, .ioctl_nrt = rt_tmbench_ioctl_nrt, _______________________________________________ Xenomai-git mailing list Xenomai-git@xenomai.org http://www.xenomai.org/mailman/listinfo/xenomai-git