aboutsummaryrefslogtreecommitdiffstats
path: root/module/splat/splat-mutex.c
diff options
context:
space:
mode:
authorBrian Behlendorf <[email protected]>2009-02-02 15:12:30 -0800
committerBrian Behlendorf <[email protected]>2009-02-02 15:12:30 -0800
commit31a033ecd49c2f691d6a377db2882ed941f47481 (patch)
tree4fe82ef3038f051bb02cd5e1de8333908e1da455 /module/splat/splat-mutex.c
parentf220894e1fc86cbfaf073dc4cca519887c41e78e (diff)
2.6.27+ portability changes
- Added SPL_AC_3ARGS_ON_EACH_CPU configure check to determine if the older 4 argument version of on_each_cpu() should be used or the new 3 argument version. The retry argument was dropped in the new API which was never used anyway. - Updated work queue compatibility wrappers. The old way this worked was to pass a data point when initialized the workqueue. The new API assumed the work item is embedding in a structure and we us container_of() to find that data pointer. - Updated skc->skc_flags to be an unsigned long which is now type checked in the bit operations. This silences the warnings. - Updated autogen products and splat tests accordingly
Diffstat (limited to 'module/splat/splat-mutex.c')
-rw-r--r--module/splat/splat-mutex.c23
1 files changed, 8 insertions, 15 deletions
diff --git a/module/splat/splat-mutex.c b/module/splat/splat-mutex.c
index 640f8f407..c64f27aaf 100644
--- a/module/splat/splat-mutex.c
+++ b/module/splat/splat-mutex.c
@@ -59,28 +59,26 @@ typedef struct mutex_priv {
int mp_rc;
} mutex_priv_t;
-#ifdef HAVE_3ARGS_INIT_WORK
static void
splat_mutex_test1_work(void *priv)
{
- mutex_priv_t *mp = (mutex_priv_t *)priv;
+ mutex_priv_t *mp;
+ mp = spl_get_work_data(priv, mutex_priv_t, mp_work.work);
ASSERT(mp->mp_magic == SPLAT_MUTEX_TEST_MAGIC);
mp->mp_rc = 0;
if (!mutex_tryenter(&mp->mp_mtx))
mp->mp_rc = -EBUSY;
}
-#endif
static int
splat_mutex_test1(struct file *file, void *arg)
{
- int rc = 0;
-#ifdef HAVE_3ARGS_INIT_WORK
struct workqueue_struct *wq;
struct work_struct work;
mutex_priv_t *mp;
+ int rc = 0;
mp = (mutex_priv_t *)kmalloc(sizeof(*mp), GFP_KERNEL);
if (mp == NULL)
@@ -97,7 +95,7 @@ splat_mutex_test1(struct file *file, void *arg)
mp->mp_magic = SPLAT_MUTEX_TEST_MAGIC;
mp->mp_file = file;
- INIT_WORK(&work, splat_mutex_test1_work, mp);
+ spl_init_work(&work, splat_mutex_test1_work, mp);
/* Schedule a work item which will try and aquire the mutex via
* mutex_tryenter() while its held. This should fail and the work
@@ -143,17 +141,16 @@ out:
destroy_workqueue(wq);
out2:
kfree(mp);
-#endif
return rc;
}
-#ifdef HAVE_3ARGS_INIT_WORK
static void
splat_mutex_test2_work(void *priv)
{
- mutex_priv_t *mp = (mutex_priv_t *)priv;
+ mutex_priv_t *mp;
int rc;
+ mp = spl_get_work_data(priv, mutex_priv_t, mp_work.work);
ASSERT(mp->mp_magic == SPLAT_MUTEX_TEST_MAGIC);
/* Read the value before sleeping and write it after we wake up to
@@ -165,16 +162,13 @@ splat_mutex_test2_work(void *priv)
mp->mp_rc = rc + 1;
mutex_exit(&mp->mp_mtx);
}
-#endif
static int
splat_mutex_test2(struct file *file, void *arg)
{
- int rc = 0;
-#ifdef HAVE_3ARGS_INIT_WORK
struct workqueue_struct *wq;
mutex_priv_t *mp;
- int i;
+ int i, rc = 0;
mp = (mutex_priv_t *)kmalloc(sizeof(*mp), GFP_KERNEL);
if (mp == NULL)
@@ -200,7 +194,7 @@ splat_mutex_test2(struct file *file, void *arg)
* critical region at the same time the system will panic. If the
* mutex is implemented right this will never happy, that's a pass. */
for (i = 0; i < SPLAT_MUTEX_TEST_COUNT; i++) {
- INIT_WORK(&(mp->mp_work[i]), splat_mutex_test2_work, mp);
+ spl_init_work(&(mp->mp_work[i]), splat_mutex_test2_work, mp);
if (!queue_work(wq, &(mp->mp_work[i]))) {
splat_vprint(file, SPLAT_MUTEX_TEST2_NAME,
@@ -226,7 +220,6 @@ splat_mutex_test2(struct file *file, void *arg)
destroy_workqueue(wq);
out:
kfree(mp);
-#endif
return rc;
}