|
@@ -25,8 +25,6 @@
|
|
|
|
|
|
#define MYDRVNAME "periodic_work"
|
|
|
|
|
|
-
|
|
|
-
|
|
|
struct periodic_work {
|
|
|
rwlock_t lock;
|
|
|
struct delayed_work work;
|
|
@@ -39,8 +37,6 @@ struct periodic_work {
|
|
|
const char *devnam;
|
|
|
};
|
|
|
|
|
|
-
|
|
|
-
|
|
|
static void periodic_work_func(struct work_struct *work)
|
|
|
{
|
|
|
struct periodic_work *pw;
|
|
@@ -49,8 +45,6 @@ static void periodic_work_func(struct work_struct *work)
|
|
|
(*pw->workfunc)(pw->workfuncarg);
|
|
|
}
|
|
|
|
|
|
-
|
|
|
-
|
|
|
struct periodic_work *visor_periodic_work_create(ulong jiffy_interval,
|
|
|
struct workqueue_struct *workqueue,
|
|
|
void (*workfunc)(void *),
|
|
@@ -73,16 +67,12 @@ struct periodic_work *visor_periodic_work_create(ulong jiffy_interval,
|
|
|
}
|
|
|
EXPORT_SYMBOL_GPL(visor_periodic_work_create);
|
|
|
|
|
|
-
|
|
|
-
|
|
|
void visor_periodic_work_destroy(struct periodic_work *pw)
|
|
|
{
|
|
|
kfree(pw);
|
|
|
}
|
|
|
EXPORT_SYMBOL_GPL(visor_periodic_work_destroy);
|
|
|
|
|
|
-
|
|
|
-
|
|
|
/** Call this from your periodic work worker function to schedule the next
|
|
|
* call.
|
|
|
* If this function returns FALSE, there was a failure and the
|
|
@@ -112,8 +102,6 @@ unlock:
|
|
|
}
|
|
|
EXPORT_SYMBOL_GPL(visor_periodic_work_nextperiod);
|
|
|
|
|
|
-
|
|
|
-
|
|
|
/** This function returns TRUE iff new periodic work was actually started.
|
|
|
* If this function returns FALSE, then no work was started
|
|
|
* (either because it was already started, or because of a failure).
|
|
@@ -145,13 +133,9 @@ BOOL visor_periodic_work_start(struct periodic_work *pw)
|
|
|
unlock:
|
|
|
write_unlock(&pw->lock);
|
|
|
return rc;
|
|
|
-
|
|
|
}
|
|
|
EXPORT_SYMBOL_GPL(visor_periodic_work_start);
|
|
|
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
/** This function returns TRUE iff your call actually stopped the periodic
|
|
|
* work.
|
|
|
*
|