diff options
author | Sebastian Ott <sebott@linux.vnet.ibm.com> | 2010-02-26 16:37:26 -0500 |
---|---|---|
committer | Martin Schwidefsky <sky@mschwide.boeblingen.de.ibm.com> | 2010-02-26 16:37:29 -0500 |
commit | b4563e891a043fe521e62f6f621b928641474ff3 (patch) | |
tree | 3f3af60351bed04d68f69ccd24f14b85fc2c4f81 /arch | |
parent | 879acca58a904c25487c89ab11e23eb556fb13d3 (diff) |
[S390] cio: wait for channel report
To fetch a pending channel report word (crw) we use a kernel
thread which triggers stcrw and sleeps on a semaphore. The s390
machine check handler uses crw_handle_channel_report to handle
one crw if needed.
This patch replaces the semaphore with a waitqueue (to block the
kernel thread) and an atomic_t (to count the number of pending
requests).
By this we achieve the ability to force this thread to check for
a pending crw (independent on when it is triggered by the machine
check handler) and wait for this action to finish.
Signed-off-by: Sebastian Ott <sebott@linux.vnet.ibm.com>
Signed-off-by: Martin Schwidefsky <schwidefsky@de.ibm.com>
Diffstat (limited to 'arch')
-rw-r--r-- | arch/s390/include/asm/crw.h | 1 |
1 files changed, 1 insertions, 0 deletions
diff --git a/arch/s390/include/asm/crw.h b/arch/s390/include/asm/crw.h index 2185a6d619d3..749a97e61bea 100644 --- a/arch/s390/include/asm/crw.h +++ b/arch/s390/include/asm/crw.h | |||
@@ -32,6 +32,7 @@ typedef void (*crw_handler_t)(struct crw *, struct crw *, int); | |||
32 | extern int crw_register_handler(int rsc, crw_handler_t handler); | 32 | extern int crw_register_handler(int rsc, crw_handler_t handler); |
33 | extern void crw_unregister_handler(int rsc); | 33 | extern void crw_unregister_handler(int rsc); |
34 | extern void crw_handle_channel_report(void); | 34 | extern void crw_handle_channel_report(void); |
35 | void crw_wait_for_channel_report(void); | ||
35 | 36 | ||
36 | #define NR_RSCS 16 | 37 | #define NR_RSCS 16 |
37 | 38 | ||