diff options
Diffstat (limited to 'drivers/s390/cio/chsc.c')
| -rw-r--r-- | drivers/s390/cio/chsc.c | 11 | 
1 files changed, 6 insertions, 5 deletions
diff --git a/drivers/s390/cio/chsc.c b/drivers/s390/cio/chsc.c index e16c553f655..8ea7d9b2c67 100644 --- a/drivers/s390/cio/chsc.c +++ b/drivers/s390/cio/chsc.c @@ -376,7 +376,7 @@ static void chsc_process_sei_chp_avail(struct chsc_sei_nt0_area *sei_area)  			continue;  		}  		mutex_lock(&chp->lock); -		chsc_determine_base_channel_path_desc(chpid, &chp->desc); +		chp_update_desc(chp);  		mutex_unlock(&chp->lock);  	}  } @@ -631,8 +631,8 @@ int chsc_chp_vary(struct chp_id chpid, int on)  	 * Redo PathVerification on the devices the chpid connects to  	 */  	if (on) { -		/* Try to update the channel path descritor. */ -		chsc_determine_base_channel_path_desc(chpid, &chp->desc); +		/* Try to update the channel path description. */ +		chp_update_desc(chp);  		for_each_subchannel_staged(s390_subchannel_vary_chpid_on,  					   __s390_vary_chpid_on, &chpid);  	} else @@ -825,9 +825,10 @@ int chsc_determine_fmt1_channel_path_desc(struct chp_id chpid,  {  	struct chsc_response_struct *chsc_resp;  	struct chsc_scpd *scpd_area; +	unsigned long flags;  	int ret; -	spin_lock_irq(&chsc_page_lock); +	spin_lock_irqsave(&chsc_page_lock, flags);  	scpd_area = chsc_page;  	ret = chsc_determine_channel_path_desc(chpid, 0, 0, 1, 0, scpd_area);  	if (ret) @@ -835,7 +836,7 @@ int chsc_determine_fmt1_channel_path_desc(struct chp_id chpid,  	chsc_resp = (void *)&scpd_area->response;  	memcpy(desc, &chsc_resp->data, sizeof(*desc));  out: -	spin_unlock_irq(&chsc_page_lock); +	spin_unlock_irqrestore(&chsc_page_lock, flags);  	return ret;  }  |