media: tegra: Tegra videobuf2
[linux-2.6.git] / kernel / rtmutex-tester.c
index 494dac8..5c9ccd3 100644 (file)
@@ -6,14 +6,13 @@
  *  Copyright (C) 2006, Timesys Corp., Thomas Gleixner <tglx@timesys.com>
  *
  */
-#include <linux/config.h>
 #include <linux/kthread.h>
 #include <linux/module.h>
 #include <linux/sched.h>
-#include <linux/smp_lock.h>
 #include <linux/spinlock.h>
 #include <linux/sysdev.h>
 #include <linux/timer.h>
+#include <linux/freezer.h>
 
 #include "rtmutex.h"
 
@@ -27,7 +26,6 @@ struct test_thread_data {
        int                     opcode;
        int                     opdata;
        int                     mutexes[MAX_RT_TEST_MUTEXES];
-       int                     bkl;
        int                     event;
        struct sys_device       sysdev;
 };
@@ -46,9 +44,8 @@ enum test_opcodes {
        RTTEST_LOCKINTNOWAIT,   /* 6 Lock interruptible no wait in wakeup, data = lockindex */
        RTTEST_LOCKCONT,        /* 7 Continue locking after the wakeup delay */
        RTTEST_UNLOCK,          /* 8 Unlock, data = lockindex */
-       RTTEST_LOCKBKL,         /* 9 Lock BKL */
-       RTTEST_UNLOCKBKL,       /* 10 Unlock BKL */
-       RTTEST_SIGNAL,          /* 11 Signal other test thread, data = thread id */
+       /* 9, 10 - reserved for BKL commemoration */
+       RTTEST_SIGNAL = 11,     /* 11 Signal other test thread, data = thread id */
        RTTEST_RESETEVENT = 98, /* 98 Reset event counter */
        RTTEST_RESET = 99,      /* 99 Reset all pending operations */
 };
@@ -74,11 +71,6 @@ static int handle_op(struct test_thread_data *td, int lockwakeup)
                                td->mutexes[i] = 0;
                        }
                }
-
-               if (!lockwakeup && td->bkl == 4) {
-                       unlock_kernel();
-                       td->bkl = 0;
-               }
                return 0;
 
        case RTTEST_RESETEVENT:
@@ -129,21 +121,6 @@ static int handle_op(struct test_thread_data *td, int lockwakeup)
                td->mutexes[id] = 0;
                return 0;
 
-       case RTTEST_LOCKBKL:
-               if (td->bkl)
-                       return 0;
-               td->bkl = 1;
-               lock_kernel();
-               td->bkl = 4;
-               return 0;
-
-       case RTTEST_UNLOCKBKL:
-               if (td->bkl != 4)
-                       break;
-               unlock_kernel();
-               td->bkl = 0;
-               return 0;
-
        default:
                break;
        }
@@ -190,7 +167,6 @@ void schedule_rt_mutex_test(struct rt_mutex *mutex)
                td->event = atomic_add_return(1, &rttest_event);
                break;
 
-       case RTTEST_LOCKBKL:
        default:
                break;
        }
@@ -223,8 +199,6 @@ void schedule_rt_mutex_test(struct rt_mutex *mutex)
                td->event = atomic_add_return(1, &rttest_event);
                return;
 
-       case RTTEST_LOCKBKL:
-               return;
        default:
                return;
        }
@@ -260,6 +234,7 @@ static int test_func(void *data)
        int ret;
 
        current->flags |= PF_MUTEX_TESTER;
+       set_freezable();
        allow_signal(SIGHUP);
 
        for(;;) {
@@ -275,6 +250,7 @@ static int test_func(void *data)
 
                /* Wait for the next command to be executed */
                schedule();
+               try_to_freeze();
 
                if (signal_pending(current))
                        flush_signals(current);
@@ -295,8 +271,8 @@ static int test_func(void *data)
  *
  * opcode:data
  */
-static ssize_t sysfs_test_command(struct sys_device *dev, const char *buf,
-                                 size_t count)
+static ssize_t sysfs_test_command(struct sys_device *dev, struct sysdev_attribute *attr,
+                                 const char *buf, size_t count)
 {
        struct sched_param schedpar;
        struct test_thread_data *td;
@@ -358,7 +334,8 @@ static ssize_t sysfs_test_command(struct sys_device *dev, const char *buf,
  * @dev:       thread to query
  * @buf:       char buffer to be filled with thread status info
  */
-static ssize_t sysfs_test_status(struct sys_device *dev, char *buf)
+static ssize_t sysfs_test_status(struct sys_device *dev, struct sysdev_attribute *attr,
+                                char *buf)
 {
        struct test_thread_data *td;
        struct task_struct *tsk;
@@ -371,11 +348,11 @@ static ssize_t sysfs_test_status(struct sys_device *dev, char *buf)
        spin_lock(&rttest_lock);
 
        curr += sprintf(curr,
-               "O: %4d, E:%8d, S: 0x%08lx, P: %4d, N: %4d, B: %p, K: %d, M:",
+               "O: %4d, E:%8d, S: 0x%08lx, P: %4d, N: %4d, B: %p, M:",
                td->opcode, td->event, tsk->state,
                        (MAX_RT_PRIO - 1) - tsk->prio,
                        (MAX_RT_PRIO - 1) - tsk->normal_prio,
-               tsk->pi_blocked_on, td->bkl);
+               tsk->pi_blocked_on);
 
        for (i = MAX_RT_TEST_MUTEXES - 1; i >=0 ; i--)
                curr += sprintf(curr, "%d", td->mutexes[i]);
@@ -392,7 +369,7 @@ static SYSDEV_ATTR(status, 0600, sysfs_test_status, NULL);
 static SYSDEV_ATTR(command, 0600, NULL, sysfs_test_command);
 
 static struct sysdev_class rttest_sysclass = {
-       set_kset_name("rttest"),
+       .name = "rttest",
 };
 
 static int init_test_thread(int id)