diff options
Diffstat (limited to 'drivers/s390/crypto/ap_queue.c')
| -rw-r--r-- | drivers/s390/crypto/ap_queue.c | 20 | 
1 files changed, 11 insertions, 9 deletions
diff --git a/drivers/s390/crypto/ap_queue.c b/drivers/s390/crypto/ap_queue.c index 669f96fddad6..d70c4d3d0907 100644 --- a/drivers/s390/crypto/ap_queue.c +++ b/drivers/s390/crypto/ap_queue.c @@ -19,7 +19,7 @@  static void __ap_flush_queue(struct ap_queue *aq);  /** - * ap_queue_enable_interruption(): Enable interruption on an AP queue. + * ap_queue_enable_irq(): Enable interrupt support on this AP queue.   * @qid: The AP queue number   * @ind: the notification indicator byte   * @@ -27,7 +27,7 @@ static void __ap_flush_queue(struct ap_queue *aq);   * value it waits a while and tests the AP queue if interrupts   * have been switched on using ap_test_queue().   */ -static int ap_queue_enable_interruption(struct ap_queue *aq, void *ind) +static int ap_queue_enable_irq(struct ap_queue *aq, void *ind)  {  	struct ap_queue_status status;  	struct ap_qirq_ctrl qirqctrl = { 0 }; @@ -218,7 +218,8 @@ static enum ap_sm_wait ap_sm_read(struct ap_queue *aq)  		return AP_SM_WAIT_NONE;  	case AP_RESPONSE_NO_PENDING_REPLY:  		if (aq->queue_count > 0) -			return AP_SM_WAIT_INTERRUPT; +			return aq->interrupt ? +				AP_SM_WAIT_INTERRUPT : AP_SM_WAIT_TIMEOUT;  		aq->sm_state = AP_SM_STATE_IDLE;  		return AP_SM_WAIT_NONE;  	default: @@ -272,7 +273,8 @@ static enum ap_sm_wait ap_sm_write(struct ap_queue *aq)  		fallthrough;  	case AP_RESPONSE_Q_FULL:  		aq->sm_state = AP_SM_STATE_QUEUE_FULL; -		return AP_SM_WAIT_INTERRUPT; +		return aq->interrupt ? +			AP_SM_WAIT_INTERRUPT : AP_SM_WAIT_TIMEOUT;  	case AP_RESPONSE_RESET_IN_PROGRESS:  		aq->sm_state = AP_SM_STATE_RESET_WAIT;  		return AP_SM_WAIT_TIMEOUT; @@ -322,7 +324,7 @@ static enum ap_sm_wait ap_sm_reset(struct ap_queue *aq)  	case AP_RESPONSE_NORMAL:  	case AP_RESPONSE_RESET_IN_PROGRESS:  		aq->sm_state = AP_SM_STATE_RESET_WAIT; -		aq->interrupt = AP_INTR_DISABLED; +		aq->interrupt = false;  		return AP_SM_WAIT_TIMEOUT;  	default:  		aq->dev_state = AP_DEV_STATE_ERROR; @@ -355,7 +357,7 @@ static enum ap_sm_wait ap_sm_reset_wait(struct ap_queue *aq)  	switch (status.response_code) {  	case AP_RESPONSE_NORMAL:  		lsi_ptr = ap_airq_ptr(); -		if (lsi_ptr && ap_queue_enable_interruption(aq, lsi_ptr) == 0) +		if (lsi_ptr && ap_queue_enable_irq(aq, lsi_ptr) == 0)  			aq->sm_state = AP_SM_STATE_SETIRQ_WAIT;  		else  			aq->sm_state = (aq->queue_count > 0) ? @@ -396,7 +398,7 @@ static enum ap_sm_wait ap_sm_setirq_wait(struct ap_queue *aq)  	if (status.irq_enabled == 1) {  		/* Irqs are now enabled */ -		aq->interrupt = AP_INTR_ENABLED; +		aq->interrupt = true;  		aq->sm_state = (aq->queue_count > 0) ?  			AP_SM_STATE_WORKING : AP_SM_STATE_IDLE;  	} @@ -586,7 +588,7 @@ static ssize_t interrupt_show(struct device *dev,  	spin_lock_bh(&aq->lock);  	if (aq->sm_state == AP_SM_STATE_SETIRQ_WAIT)  		rc = scnprintf(buf, PAGE_SIZE, "Enable Interrupt pending.\n"); -	else if (aq->interrupt == AP_INTR_ENABLED) +	else if (aq->interrupt)  		rc = scnprintf(buf, PAGE_SIZE, "Interrupts enabled.\n");  	else  		rc = scnprintf(buf, PAGE_SIZE, "Interrupts disabled.\n"); @@ -767,7 +769,7 @@ struct ap_queue *ap_queue_create(ap_qid_t qid, int device_type)  	aq->ap_dev.device.type = &ap_queue_type;  	aq->ap_dev.device_type = device_type;  	aq->qid = qid; -	aq->interrupt = AP_INTR_DISABLED; +	aq->interrupt = false;  	spin_lock_init(&aq->lock);  	INIT_LIST_HEAD(&aq->pendingq);  	INIT_LIST_HEAD(&aq->requestq);  |