Module: xenomai-forge
Branch: next
Commit: aae8153b52bb9914055ffa49947c577987b9d254
URL:    
http://git.xenomai.org/?p=xenomai-forge.git;a=commit;h=aae8153b52bb9914055ffa49947c577987b9d254

Author: Gilles Chanteperdrix <gilles.chanteperd...@xenomai.org>
Date:   Sun Feb  2 00:58:07 2014 +0100

drivers/testing: adapt rtdmtest after RTDM changes

---

 include/rtdm/uapi/testing.h       |    3 +--
 kernel/drivers/testing/rtdmtest.c |   54 ++++++++++++-------------------------
 testsuite/unit/rtdm.c             |   11 --------
 3 files changed, 18 insertions(+), 50 deletions(-)

diff --git a/include/rtdm/uapi/testing.h b/include/rtdm/uapi/testing.h
index 87a97fd..76d9678 100644
--- a/include/rtdm/uapi/testing.h
+++ b/include/rtdm/uapi/testing.h
@@ -103,8 +103,7 @@ struct rttst_swtest_error {
 };
 
 #define RTTST_RTDM_NORMAL_CLOSE                0
-#define RTTST_RTDM_DEFER_CLOSE_HANDLER 1
-#define RTTST_RTDM_DEFER_CLOSE_CONTEXT 2
+#define RTTST_RTDM_DEFER_CLOSE_CONTEXT 1
 
 #define RTIOC_TYPE_TESTING             RTDM_CLASS_TESTING
 
diff --git a/kernel/drivers/testing/rtdmtest.c 
b/kernel/drivers/testing/rtdmtest.c
index 900a2dc..20a423f 100644
--- a/kernel/drivers/testing/rtdmtest.c
+++ b/kernel/drivers/testing/rtdmtest.c
@@ -48,11 +48,9 @@ static void close_timer_proc(rtdm_timer_t *timer)
        rtdm_context_unlock(rtdm_private_to_context(ctx));
 }
 
-static int rtdm_test_open(struct rtdm_dev_context *context,
-                         rtdm_user_info_t *user_info, int oflags)
+static int rtdm_test_open(struct rtdm_fd *context, int oflags)
 {
-       struct rtdm_test_context *ctx =
-               (struct rtdm_test_context *)context->dev_private;
+       struct rtdm_test_context *ctx = rtdm_context_to_private(context);
 
        rtdm_timer_init(&ctx->close_timer, close_timer_proc,
                        "rtdm close test");
@@ -62,60 +60,42 @@ static int rtdm_test_open(struct rtdm_dev_context *context,
        return 0;
 }
 
-static int rtdm_test_close(struct rtdm_dev_context *context,
-                          rtdm_user_info_t *user_info)
+static void rtdm_test_close(struct rtdm_fd *context)
 {
-       struct rtdm_test_context *ctx =
-               (struct rtdm_test_context *)context->dev_private;
+       struct rtdm_test_context *ctx = rtdm_context_to_private(context);
 
        ctx->close_counter++;
 
        switch (ctx->close_deferral) {
-       case RTTST_RTDM_DEFER_CLOSE_HANDLER:
-               if (ctx->close_counter <= 3)
-                       return -EAGAIN;
-               if (ctx->close_counter > 4) {
-                       printk(KERN_ERR
-                              "rtdmtest: %s: close_counter is %lu, "
-                              "should be 2!\n",
-                              __FUNCTION__, ctx->close_counter);
-                       return 0;
-               }
-               break;
-
        case RTTST_RTDM_DEFER_CLOSE_CONTEXT:
-               if (ctx->close_counter == 1) {
-                       rtdm_context_lock(context);
-                       rtdm_timer_start(&ctx->close_timer, 300000000ULL, 0,
-                                        RTDM_TIMERMODE_RELATIVE);
-                       return 0;
-               }
-               if (ctx->close_counter > 2) {
+               if (ctx->close_counter != 2) {
                        printk(KERN_ERR
                               "rtdmtest: %s: close_counter is %lu, "
                               "should be 2!\n",
                               __FUNCTION__, ctx->close_counter);
-                       return 0;
+                       return;
                }
                break;
        }
 
        rtdm_timer_destroy(&ctx->close_timer);
-
-       return 0;
 }
 
-static int rtdm_test_ioctl(struct rtdm_dev_context *context,
-                          rtdm_user_info_t *user_info,
-                          unsigned int request, void __user *arg)
+static int
+rtdm_test_ioctl(struct rtdm_fd *context, unsigned int request, void __user 
*arg)
 {
-       struct rtdm_test_context *ctx =
-               (struct rtdm_test_context *)context->dev_private;
+       struct rtdm_test_context *ctx = rtdm_context_to_private(context);
        int err = 0;
 
        switch (request) {
        case RTTST_RTIOC_RTDM_DEFER_CLOSE:
                ctx->close_deferral = (unsigned long)arg;
+               if (ctx->close_deferral == RTTST_RTDM_DEFER_CLOSE_CONTEXT) {
+                       ++ctx->close_counter;
+                       rtdm_context_lock(context);
+                       rtdm_timer_start(&ctx->close_timer, 300000000ULL, 0,
+                                       RTDM_TIMERMODE_RELATIVE);
+               }
                break;
 
        default:
@@ -132,10 +112,10 @@ static struct rtdm_device device[2] = { [0 ... 1] = {
        .context_size           = sizeof(struct rtdm_test_context),
        .device_name            = "",
 
-       .open_nrt               = rtdm_test_open,
+       .open                   = rtdm_test_open,
 
        .ops = {
-               .close_nrt      = rtdm_test_close,
+               .close          = rtdm_test_close,
 
                .ioctl_rt       = rtdm_test_ioctl,
                .ioctl_nrt      = rtdm_test_ioctl,
diff --git a/testsuite/unit/rtdm.c b/testsuite/unit/rtdm.c
index ba39ab8..890badd 100644
--- a/testsuite/unit/rtdm.c
+++ b/testsuite/unit/rtdm.c
@@ -75,17 +75,6 @@ int main(int argc, const char *argv[])
        dev2 = check("open", open(devname2, O_RDWR), dev + 1);
        check("close", close(dev2), 0);
 
-       printf("Defer close by driver handler\n");
-       check("ioctl", ioctl(dev, RTTST_RTIOC_RTDM_DEFER_CLOSE,
-                            RTTST_RTDM_DEFER_CLOSE_HANDLER), 0);
-       start = rt_timer_tsc();
-       check("close", close(dev), 0);
-       check("open", open(devname, O_RDWR), -EBUSY);
-       dev2 = check("open", open(devname2, O_RDWR), dev);
-       check("close", close(dev2), 0);
-       usleep(300000);
-       dev = check("open", open(devname, O_RDWR), dev);
-
        printf("Defer close by pending reference\n");
        check("ioctl", ioctl(dev, RTTST_RTIOC_RTDM_DEFER_CLOSE,
                             RTTST_RTDM_DEFER_CLOSE_CONTEXT), 0);


_______________________________________________
Xenomai-git mailing list
Xenomai-git@xenomai.org
http://www.xenomai.org/mailman/listinfo/xenomai-git

Reply via email to