diff options
Diffstat (limited to 'drivers/s390/cio')
| -rw-r--r-- | drivers/s390/cio/chsc.c | 31 | 
1 files changed, 12 insertions, 19 deletions
diff --git a/drivers/s390/cio/chsc.c b/drivers/s390/cio/chsc.c index 68e80e2734a..10729bbcece 100644 --- a/drivers/s390/cio/chsc.c +++ b/drivers/s390/cio/chsc.c @@ -283,7 +283,7 @@ struct chsc_sei_nt2_area {  	u8  ccdf[PAGE_SIZE - 24 - 56];	/* content-code dependent field */  } __packed; -#define CHSC_SEI_NT0	0ULL +#define CHSC_SEI_NT0	(1ULL << 63)  #define CHSC_SEI_NT2	(1ULL << 61)  struct chsc_sei { @@ -291,7 +291,8 @@ struct chsc_sei {  	u32 reserved1;  	u64 ntsm;			/* notification type mask */  	struct chsc_header response; -	u32 reserved2; +	u32 :24; +	u8 nt;  	union {  		struct chsc_sei_nt0_area nt0_area;  		struct chsc_sei_nt2_area nt2_area; @@ -496,17 +497,17 @@ static int __chsc_process_crw(struct chsc_sei *sei, u64 ntsm)  				css_schedule_eval_all();  			} -			switch (sei->ntsm) { -			case CHSC_SEI_NT0: +			switch (sei->nt) { +			case 0:  				chsc_process_sei_nt0(&sei->u.nt0_area); -				return 1; -			case CHSC_SEI_NT2: +				break; +			case 2:  				chsc_process_sei_nt2(&sei->u.nt2_area); -				return 1; +				break;  			default: -				CIO_CRW_EVENT(2, "chsc: unhandled nt (nt=%08Lx)\n", -					      sei->ntsm); -				return 0; +				CIO_CRW_EVENT(2, "chsc: unhandled nt=%d\n", +					      sei->nt); +				break;  			}  		} else {  			CIO_CRW_EVENT(2, "chsc: sei failed (rc=%04x)\n", @@ -537,15 +538,7 @@ static void chsc_process_crw(struct crw *crw0, struct crw *crw1, int overflow)  	sei = sei_page;  	CIO_TRACE_EVENT(2, "prcss"); - -	/* -	 * The ntsm does not allow to select NT0 and NT2 together. We need to -	 * first check for NT2, than additionally for NT0... -	 */ -#ifdef CONFIG_PCI -	if (!__chsc_process_crw(sei, CHSC_SEI_NT2)) -#endif -		__chsc_process_crw(sei, CHSC_SEI_NT0); +	__chsc_process_crw(sei, CHSC_SEI_NT0 | CHSC_SEI_NT2);  }  void chsc_chp_online(struct chp_id chpid)  |