diff options
author | Cornelia Huck <cornelia.huck@de.ibm.com> | 2008-02-19 15:29:24 +0100 |
---|---|---|
committer | Martin Schwidefsky <schwidefsky@de.ibm.com> | 2008-02-19 15:29:32 +0100 |
commit | 4c629727cefe45abb2f7459836bfc4b41c5e55ba (patch) | |
tree | 72be330a3d752e0e696a57a1a7a0a72e24928157 /drivers/s390 | |
parent | [S390] cio: Remember to initialize recovery_lock. (diff) | |
download | linux-4c629727cefe45abb2f7459836bfc4b41c5e55ba.tar.xz linux-4c629727cefe45abb2f7459836bfc4b41c5e55ba.zip |
[S390] cio: Do timed recovery on workqueue.
We can't do our recovery in softirq context, so we schedule it from
our timer function.
Signed-off-by: Cornelia Huck <cornelia.huck@de.ibm.com>
Signed-off-by: Martin Schwidefsky <schwidefsky@de.ibm.com>
Diffstat (limited to 'drivers/s390')
-rw-r--r-- | drivers/s390/cio/device.c | 13 |
1 files changed, 12 insertions, 1 deletions
diff --git a/drivers/s390/cio/device.c b/drivers/s390/cio/device.c index 676b47e07ed0..fec004f62bcf 100644 --- a/drivers/s390/cio/device.c +++ b/drivers/s390/cio/device.c @@ -1535,7 +1535,7 @@ static int recovery_check(struct device *dev, void *data) return 0; } -static void recovery_func(unsigned long data) +static void recovery_work_func(struct work_struct *unused) { int redo = 0; @@ -1553,6 +1553,17 @@ static void recovery_func(unsigned long data) CIO_MSG_EVENT(2, "recovery: end\n"); } +static DECLARE_WORK(recovery_work, recovery_work_func); + +static void recovery_func(unsigned long data) +{ + /* + * We can't do our recovery in softirq context and it's not + * performance critical, so we schedule it. + */ + schedule_work(&recovery_work); +} + void ccw_device_schedule_recovery(void) { unsigned long flags; |