Skip to content
Snippets Groups Projects
Select Git revision
  • android-msm-flo-3.4-kitkat-mr1
  • master default protected
  • android-msm-bullhead-3.10-nougat_kgdb_less_changes
  • android-msm-bullhead-3.10-nougat_kgdb
  • android-msm-bullhead-3.10-nougat_klist
  • android-4.4
  • android-msm-vega-4.4-oreo-daydream
  • android-msm-wahoo-4.4-p-preview-5
  • android-msm-wahoo-4.4-pie
  • android-msm-marlin-3.18-p-preview-5
  • android-msm-marlin-3.18-pie
  • android-msm-wahoo-2018.07-oreo-m2
  • android-msm-wahoo-2018.07-oreo-m4
  • android-msm-wahoo-4.4-p-preview-4
  • android-msm-bullhead-3.10-oreo-m6
  • android-msm-angler-3.10-oreo-m6
  • android-msm-marlin-3.18-p-preview-4
  • android-msm-stargazer-3.18-oreo-wear-dr
  • android-msm-catshark-3.18-oreo-wear-dr
  • android-msm-wahoo-4.4-oreo-m2
  • android-msm-wahoo-4.4-oreo-m4
  • android-daydreamos-8.0.0_r0.5
  • android-8.1.0_r0.92
  • android-8.1.0_r0.91
  • android-daydreamos-8.0.0_r0.4
  • android-p-preview-5_r0.2
  • android-p-preview-5_r0.1
  • android-9.0.0_r0.5
  • android-9.0.0_r0.4
  • android-9.0.0_r0.2
  • android-9.0.0_r0.1
  • android-8.1.0_r0.81
  • android-8.1.0_r0.80
  • android-8.1.0_r0.78
  • android-8.1.0_r0.76
  • android-8.1.0_r0.75
  • android-8.1.0_r0.72
  • android-8.1.0_r0.70
  • android-p-preview-4_r0.2
  • android-p-preview-4_r0.1
  • android-wear-8.0.0_r0.30
41 results

rtmutex-tester.c

Blame
  • rtmutex-tester.c 8.66 KiB
    /*
     * RT-Mutex-tester: scriptable tester for rt mutexes
     *
     * started by Thomas Gleixner:
     *
     *  Copyright (C) 2006, Timesys Corp., Thomas Gleixner <tglx@timesys.com>
     *
     */
    #include <linux/device.h>
    #include <linux/kthread.h>
    #include <linux/export.h>
    #include <linux/sched.h>
    #include <linux/spinlock.h>
    #include <linux/timer.h>
    #include <linux/freezer.h>
    
    #include "rtmutex.h"
    
    #define MAX_RT_TEST_THREADS	8
    #define MAX_RT_TEST_MUTEXES	8
    
    static spinlock_t rttest_lock;
    static atomic_t rttest_event;
    
    struct test_thread_data {
    	int			opcode;
    	int			opdata;
    	int			mutexes[MAX_RT_TEST_MUTEXES];
    	int			event;
    	struct device		dev;
    };
    
    static struct test_thread_data thread_data[MAX_RT_TEST_THREADS];
    static struct task_struct *threads[MAX_RT_TEST_THREADS];
    static struct rt_mutex mutexes[MAX_RT_TEST_MUTEXES];
    
    enum test_opcodes {
    	RTTEST_NOP = 0,
    	RTTEST_SCHEDOT,		/* 1 Sched other, data = nice */
    	RTTEST_SCHEDRT,		/* 2 Sched fifo, data = prio */
    	RTTEST_LOCK,		/* 3 Lock uninterruptible, data = lockindex */
    	RTTEST_LOCKNOWAIT,	/* 4 Lock uninterruptible no wait in wakeup, data = lockindex */
    	RTTEST_LOCKINT,		/* 5 Lock interruptible, data = lockindex */
    	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 */
    	/* 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 */
    };
    
    static int handle_op(struct test_thread_data *td, int lockwakeup)
    {
    	int i, id, ret = -EINVAL;
    
    	switch(td->opcode) {
    
    	case RTTEST_NOP:
    		return 0;
    
    	case RTTEST_LOCKCONT:
    		td->mutexes[td->opdata] = 1;
    		td->event = atomic_add_return(1, &rttest_event);
    		return 0;
    
    	case RTTEST_RESET:
    		for (i = 0; i < MAX_RT_TEST_MUTEXES; i++) {
    			if (td->mutexes[i] == 4) {
    				rt_mutex_unlock(&mutexes[i]);