diff options
author | Cornelia Huck <cornelia.huck@de.ibm.com> | 2008-02-19 09:29:24 -0500 |
---|---|---|
committer | Martin Schwidefsky <schwidefsky@de.ibm.com> | 2008-02-19 09:29:32 -0500 |
commit | 4c629727cefe45abb2f7459836bfc4b41c5e55ba (patch) | |
tree | 72be330a3d752e0e696a57a1a7a0a72e24928157 /drivers/s390 | |
parent | 486d0a0079eb782cdb73f18246e26076c615a020 (diff) |
[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) | |||
1535 | return 0; | 1535 | return 0; |
1536 | } | 1536 | } |
1537 | 1537 | ||
1538 | static void recovery_func(unsigned long data) | 1538 | static void recovery_work_func(struct work_struct *unused) |
1539 | { | 1539 | { |
1540 | int redo = 0; | 1540 | int redo = 0; |
1541 | 1541 | ||
@@ -1553,6 +1553,17 @@ static void recovery_func(unsigned long data) | |||
1553 | CIO_MSG_EVENT(2, "recovery: end\n"); | 1553 | CIO_MSG_EVENT(2, "recovery: end\n"); |
1554 | } | 1554 | } |
1555 | 1555 | ||
1556 | static DECLARE_WORK(recovery_work, recovery_work_func); | ||
1557 | |||
1558 | static void recovery_func(unsigned long data) | ||
1559 | { | ||
1560 | /* | ||
1561 | * We can't do our recovery in softirq context and it's not | ||
1562 | * performance critical, so we schedule it. | ||
1563 | */ | ||
1564 | schedule_work(&recovery_work); | ||
1565 | } | ||
1566 | |||
1556 | void ccw_device_schedule_recovery(void) | 1567 | void ccw_device_schedule_recovery(void) |
1557 | { | 1568 | { |
1558 | unsigned long flags; | 1569 | unsigned long flags; |