summaryrefslogtreecommitdiffstats
path: root/drivers/edac/edac_device.c
diff options
context:
space:
mode:
authorDave Jiang <djiang@mvista.com>2007-07-19 01:49:52 -0700
committerLinus Torvalds <torvalds@woody.linux-foundation.org>2007-07-19 10:04:54 -0700
commit81d87cb13e367bb804bf44889ae0de7369705d6c (patch)
tree1c135cb57d92ae3baf2b3308f01fb548ab39f644 /drivers/edac/edac_device.c
parent535c6a53035d8911f6b90455550c5fde0da7b866 (diff)
downloadlinux-stable-81d87cb13e367bb804bf44889ae0de7369705d6c.tar.gz
linux-stable-81d87cb13e367bb804bf44889ae0de7369705d6c.tar.bz2
linux-stable-81d87cb13e367bb804bf44889ae0de7369705d6c.zip
drivers/edac: mod MC to use workq instead of kthread
Move the memory controller object to work queue based implementation from the kernel thread based. Signed-off-by: Dave Jiang <djiang@mvista.com> Signed-off-by: Douglas Thompson <dougthompson@xmission.com> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
Diffstat (limited to 'drivers/edac/edac_device.c')
-rw-r--r--drivers/edac/edac_device.c36
1 files changed, 20 insertions, 16 deletions
diff --git a/drivers/edac/edac_device.c b/drivers/edac/edac_device.c
index 52db1b14fff5..3f4c8a28154a 100644
--- a/drivers/edac/edac_device.c
+++ b/drivers/edac/edac_device.c
@@ -332,17 +332,17 @@ EXPORT_SYMBOL(edac_device_find);
/*
- * edac_workq_function
+ * edac_device_workq_function
* performs the operation scheduled by a workq request
*/
#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,20))
-static void edac_workq_function(struct work_struct *work_req)
+static void edac_device_workq_function(struct work_struct *work_req)
{
struct delayed_work *d_work = (struct delayed_work*) work_req;
struct edac_device_ctl_info *edac_dev =
to_edac_device_ctl_work(d_work);
#else
-static void edac_workq_function(void *ptr)
+static void edac_device_workq_function(void *ptr)
{
struct edac_device_ctl_info *edac_dev =
(struct edac_device_ctl_info *) ptr;
@@ -364,30 +364,31 @@ static void edac_workq_function(void *ptr)
}
/*
- * edac_workq_setup
+ * edac_device_workq_setup
* initialize a workq item for this edac_device instance
* passing in the new delay period in msec
*/
-void edac_workq_setup(struct edac_device_ctl_info *edac_dev, unsigned msec)
+void edac_device_workq_setup(struct edac_device_ctl_info *edac_dev,
+ unsigned msec)
{
debugf0("%s()\n", __func__);
edac_dev->poll_msec = msec;
- edac_device_calc_delay(edac_dev); /* Calc delay jiffies */
+ edac_calc_delay(edac_dev); /* Calc delay jiffies */
#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,20))
- INIT_DELAYED_WORK(&edac_dev->work,edac_workq_function);
+ INIT_DELAYED_WORK(&edac_dev->work, edac_device_workq_function);
#else
- INIT_WORK(&edac_dev->work,edac_workq_function,edac_dev);
+ INIT_WORK(&edac_dev->work, edac_device_workq_function, edac_dev);
#endif
- queue_delayed_work(edac_workqueue,&edac_dev->work, edac_dev->delay);
+ queue_delayed_work(edac_workqueue, &edac_dev->work, edac_dev->delay);
}
/*
- * edac_workq_teardown
+ * edac_device_workq_teardown
* stop the workq processing on this edac_dev
*/
-void edac_workq_teardown(struct edac_device_ctl_info *edac_dev)
+void edac_device_workq_teardown(struct edac_device_ctl_info *edac_dev)
{
int status;
@@ -409,10 +410,10 @@ void edac_device_reset_delay_period(
lock_device_list();
/* cancel the current workq request */
- edac_workq_teardown(edac_dev);
+ edac_device_workq_teardown(edac_dev);
/* restart the workq request, with new delay value */
- edac_workq_setup(edac_dev, value);
+ edac_device_workq_setup(edac_dev, value);
unlock_device_list();
}
@@ -479,8 +480,11 @@ int edac_device_add_device(struct edac_device_ctl_info *edac_dev, int edac_idx)
/* This instance is NOW RUNNING */
edac_dev->op_state = OP_RUNNING_POLL;
- /* enable workq processing on this instance, default = 1000 msec */
- edac_workq_setup(edac_dev, 1000);
+ /*
+ * enable workq processing on this instance,
+ * default = 1000 msec
+ */
+ edac_device_workq_setup(edac_dev, 1000);
} else {
edac_dev->op_state = OP_RUNNING_INTERRUPT;
}
@@ -538,7 +542,7 @@ struct edac_device_ctl_info * edac_device_del_device(struct device *dev)
edac_dev->op_state = OP_OFFLINE;
/* clear workq processing on this instance */
- edac_workq_teardown(edac_dev);
+ edac_device_workq_teardown(edac_dev);
/* Tear down the sysfs entries for this instance */
edac_device_remove_sysfs(edac_dev);