All of lore.kernel.org
 help / color / mirror / Atom feed
From: Janosch Frank <frankja@linux.ibm.com>
To: pbonzini@redhat.com
Cc: kvm@vger.kernel.org, frankja@linux.ibm.com, david@redhat.com,
	borntraeger@linux.ibm.com, cohuck@redhat.com,
	linux-s390@vger.kernel.org, imbrenda@linux.ibm.com,
	hca@linux.ibm.com, mihajlov@linux.ibm.com, seiden@linux.ibm.com,
	akrowiak@linux.ibm.com
Subject: [GIT PULL 12/22] s390/vfio-ap: store entire AP queue status word with the queue object
Date: Thu, 24 Aug 2023 14:43:21 +0200	[thread overview]
Message-ID: <20230824124522.75408-13-frankja@linux.ibm.com> (raw)
In-Reply-To: <20230824124522.75408-1-frankja@linux.ibm.com>

From: Tony Krowiak <akrowiak@linux.ibm.com>

Store the entire AP queue status word returned from the ZAPQ command with
the struct vfio_ap_queue object instead of just the response code field.
The other information contained in the status word is need by the
apq_reset_check function to display a proper message to indicate that the
vfio_ap driver is waiting for the ZAPQ to complete because the queue is
not empty or IRQs are still enabled.

Signed-off-by: Tony Krowiak <akrowiak@linux.ibm.com>
Tested-by: Viktor Mihajlovski <mihajlov@linux.ibm.com>
Link: https://lore.kernel.org/r/20230815184333.6554-7-akrowiak@linux.ibm.com
Signed-off-by: Heiko Carstens <hca@linux.ibm.com>
---
 drivers/s390/crypto/vfio_ap_ops.c     | 27 +++++++++++++++------------
 drivers/s390/crypto/vfio_ap_private.h |  4 ++--
 2 files changed, 17 insertions(+), 14 deletions(-)

diff --git a/drivers/s390/crypto/vfio_ap_ops.c b/drivers/s390/crypto/vfio_ap_ops.c
index 2517868aad56..43224f7a40ea 100644
--- a/drivers/s390/crypto/vfio_ap_ops.c
+++ b/drivers/s390/crypto/vfio_ap_ops.c
@@ -674,7 +674,7 @@ static bool vfio_ap_mdev_filter_matrix(unsigned long *apm, unsigned long *aqm,
 			 */
 			apqn = AP_MKQID(apid, apqi);
 			q = vfio_ap_mdev_get_queue(matrix_mdev, apqn);
-			if (!q || q->reset_rc) {
+			if (!q || q->reset_status.response_code) {
 				clear_bit_inv(apid,
 					      matrix_mdev->shadow_apcb.apm);
 				break;
@@ -1628,6 +1628,7 @@ static int apq_reset_check(struct vfio_ap_queue *q)
 	int ret = -EBUSY, elapsed = 0;
 	struct ap_queue_status status;
 
+	memcpy(&status, &q->reset_status, sizeof(status));
 	while (true) {
 		msleep(AP_RESET_INTERVAL);
 		elapsed += AP_RESET_INTERVAL;
@@ -1643,20 +1644,20 @@ static int apq_reset_check(struct vfio_ap_queue *q)
 					      status.queue_empty,
 					      status.irq_enabled);
 		} else {
-			if (q->reset_rc == AP_RESPONSE_RESET_IN_PROGRESS ||
-			    q->reset_rc == AP_RESPONSE_BUSY) {
+			if (q->reset_status.response_code == AP_RESPONSE_RESET_IN_PROGRESS ||
+			    q->reset_status.response_code == AP_RESPONSE_BUSY) {
 				status = ap_zapq(q->apqn, 0);
-				q->reset_rc = status.response_code;
+				memcpy(&q->reset_status, &status, sizeof(status));
 				continue;
 			}
 			/*
-			 * When an AP adapter is deconfigured, the associated
-			 * queues are reset, so let's set the status response
-			 * code to 0 so the queue may be passed through (i.e.,
-			 * not filtered).
+			 * When an AP adapter is deconfigured, the
+			 * associated queues are reset, so let's set the
+			 * status response code to 0 so the queue may be
+			 * passed through (i.e., not filtered)
 			 */
-			if (q->reset_rc == AP_RESPONSE_DECONFIGURED)
-				q->reset_rc = 0;
+			if (status.response_code == AP_RESPONSE_DECONFIGURED)
+				q->reset_status.response_code = 0;
 			if (q->saved_isc != VFIO_AP_ISC_INVALID)
 				vfio_ap_free_aqic_resources(q);
 			break;
@@ -1673,7 +1674,7 @@ static int vfio_ap_mdev_reset_queue(struct vfio_ap_queue *q)
 	if (!q)
 		return 0;
 	status = ap_zapq(q->apqn, 0);
-	q->reset_rc = status.response_code;
+	memcpy(&q->reset_status, &status, sizeof(status));
 	switch (status.response_code) {
 	case AP_RESPONSE_NORMAL:
 	case AP_RESPONSE_RESET_IN_PROGRESS:
@@ -1688,7 +1689,8 @@ static int vfio_ap_mdev_reset_queue(struct vfio_ap_queue *q)
 		 * so the queue may be passed through (i.e., not filtered) and
 		 * return a value indicating the reset completed successfully.
 		 */
-		q->reset_rc = 0;
+		q->reset_status.response_code = 0;
+		ret = 0;
 		vfio_ap_free_aqic_resources(q);
 		break;
 	default:
@@ -2042,6 +2044,7 @@ int vfio_ap_mdev_probe_queue(struct ap_device *apdev)
 
 	q->apqn = to_ap_queue(&apdev->device)->qid;
 	q->saved_isc = VFIO_AP_ISC_INVALID;
+	memset(&q->reset_status, 0, sizeof(q->reset_status));
 	matrix_mdev = get_update_locks_by_apqn(q->apqn);
 
 	if (matrix_mdev) {
diff --git a/drivers/s390/crypto/vfio_ap_private.h b/drivers/s390/crypto/vfio_ap_private.h
index 4642bbdbd1b2..d6eb3527e056 100644
--- a/drivers/s390/crypto/vfio_ap_private.h
+++ b/drivers/s390/crypto/vfio_ap_private.h
@@ -133,7 +133,7 @@ struct ap_matrix_mdev {
  * @apqn: the APQN of the AP queue device
  * @saved_isc: the guest ISC registered with the GIB interface
  * @mdev_qnode: allows the vfio_ap_queue struct to be added to a hashtable
- * @reset_rc: the status response code from the last reset of the queue
+ * @reset_status: the status from the last reset of the queue
  */
 struct vfio_ap_queue {
 	struct ap_matrix_mdev *matrix_mdev;
@@ -142,7 +142,7 @@ struct vfio_ap_queue {
 #define VFIO_AP_ISC_INVALID 0xff
 	unsigned char saved_isc;
 	struct hlist_node mdev_qnode;
-	unsigned int reset_rc;
+	struct ap_queue_status reset_status;
 };
 
 int vfio_ap_mdev_register(void);
-- 
2.41.0


  parent reply	other threads:[~2023-08-24 12:47 UTC|newest]

Thread overview: 26+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2023-08-24 12:43 [GIT PULL 00/22] KVM: s390: Changes for 6.6 Janosch Frank
2023-08-24 12:43 ` [GIT PULL 01/22] KVM: s390: interrupt: Fix single-stepping into interrupt handlers Janosch Frank
2023-08-24 12:43 ` [GIT PULL 02/22] KVM: s390: interrupt: Fix single-stepping into program " Janosch Frank
2023-08-24 12:43 ` [GIT PULL 03/22] KVM: s390: interrupt: Fix single-stepping kernel-emulated instructions Janosch Frank
2023-08-24 12:43 ` [GIT PULL 04/22] KVM: s390: interrupt: Fix single-stepping userspace-emulated instructions Janosch Frank
2023-08-24 12:43 ` [GIT PULL 05/22] KVM: s390: interrupt: Fix single-stepping keyless mode exits Janosch Frank
2023-08-24 12:43 ` [GIT PULL 06/22] KVM: s390: selftests: Add selftest for single-stepping Janosch Frank
2023-08-24 12:43 ` [GIT PULL 07/22] s390/vfio-ap: no need to check the 'E' and 'I' bits in APQSW after TAPQ Janosch Frank
2023-08-24 12:43 ` [GIT PULL 08/22] s390/vfio-ap: clean up irq resources if possible Janosch Frank
2023-08-24 12:43 ` [GIT PULL 09/22] s390/vfio-ap: wait for response code 05 to clear on queue reset Janosch Frank
2023-08-24 12:43 ` [GIT PULL 10/22] s390/vfio-ap: allow deconfigured queue to be passed through to a guest Janosch Frank
2023-08-24 12:43 ` [GIT PULL 11/22] s390/vfio-ap: remove upper limit on wait for queue reset to complete Janosch Frank
2023-08-24 12:43 ` Janosch Frank [this message]
2023-08-24 12:43 ` [GIT PULL 13/22] s390/vfio-ap: use work struct to verify queue reset Janosch Frank
2023-08-24 12:43 ` [GIT PULL 14/22] s390/vfio-ap: handle queue state change in progress on reset Janosch Frank
2023-08-24 12:43 ` [GIT PULL 15/22] s390/vfio-ap: check for TAPQ response codes 0x35 and 0x36 Janosch Frank
2023-08-24 12:43 ` [GIT PULL 16/22] s390/uv: export uv_pin_shared for direct usage Janosch Frank
2023-08-24 12:43 ` [GIT PULL 17/22] KVM: s390: export kvm_s390_pv*_is_protected functions Janosch Frank
2023-08-24 12:43 ` [GIT PULL 18/22] s390/vfio-ap: make sure nib is shared Janosch Frank
2023-08-24 12:43 ` [GIT PULL 19/22] KVM: s390: pv: relax WARN_ONCE condition for destroy fast Janosch Frank
2023-08-24 12:43 ` [GIT PULL 20/22] s390/uv: UV feature check utility Janosch Frank
2023-08-24 12:43 ` [GIT PULL 21/22] KVM: s390: Add UV feature negotiation Janosch Frank
2023-08-24 12:43 ` [GIT PULL 22/22] KVM: s390: pv: Allow AP-instructions for pv-guests Janosch Frank
2023-08-25 13:56 ` [GIT PULL 00/22] KVM: s390: Changes for 6.6 Janosch Frank
2023-08-25 15:58   ` Sean Christopherson
2023-08-28 12:34     ` Janosch Frank

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20230824124522.75408-13-frankja@linux.ibm.com \
    --to=frankja@linux.ibm.com \
    --cc=akrowiak@linux.ibm.com \
    --cc=borntraeger@linux.ibm.com \
    --cc=cohuck@redhat.com \
    --cc=david@redhat.com \
    --cc=hca@linux.ibm.com \
    --cc=imbrenda@linux.ibm.com \
    --cc=kvm@vger.kernel.org \
    --cc=linux-s390@vger.kernel.org \
    --cc=mihajlov@linux.ibm.com \
    --cc=pbonzini@redhat.com \
    --cc=seiden@linux.ibm.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.