We will may want to check the result of an I/O without waiting for an interrupt. For example because we do not handle interrupt. Let's separate waiting for interrupt and the I/O complretion check. Signed-off-by: Pierre Morel <pmorel@xxxxxxxxxxxxx> --- lib/s390x/css.h | 1 + lib/s390x/css_lib.c | 13 ++++++++++--- 2 files changed, 11 insertions(+), 3 deletions(-) diff --git a/lib/s390x/css.h b/lib/s390x/css.h index 0058355..5d1e1f0 100644 --- a/lib/s390x/css.h +++ b/lib/s390x/css.h @@ -317,6 +317,7 @@ int css_residual_count(unsigned int schid); void enable_io_isc(uint8_t isc); int wait_and_check_io_completion(int schid); +int check_io_completion(int schid); /* * CHSC definitions diff --git a/lib/s390x/css_lib.c b/lib/s390x/css_lib.c index f5c4f37..1e5c409 100644 --- a/lib/s390x/css_lib.c +++ b/lib/s390x/css_lib.c @@ -487,18 +487,25 @@ struct ccw1 *ccw_alloc(int code, void *data, int count, unsigned char flags) } /* wait_and_check_io_completion: + * @schid: the subchannel ID + */ +int wait_and_check_io_completion(int schid) +{ + wait_for_interrupt(PSW_MASK_IO); + return check_io_completion(schid); +} + +/* check_io_completion: * @schid: the subchannel ID * * Makes the most common check to validate a successful I/O * completion. * Only report failures. */ -int wait_and_check_io_completion(int schid) +int check_io_completion(int schid) { int ret = 0; - wait_for_interrupt(PSW_MASK_IO); - report_prefix_push("check I/O completion"); if (lowcore_ptr->io_int_param != schid) { -- 2.17.1