kvm.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PULL 0/7] vfio-ccw: fixes
@ 2019-06-03 10:50 Cornelia Huck
  2019-06-03 10:50 ` [PULL 1/7] s390/cio: Update SCSW if it points to the end of the chain Cornelia Huck
                   ` (7 more replies)
  0 siblings, 8 replies; 13+ messages in thread
From: Cornelia Huck @ 2019-06-03 10:50 UTC (permalink / raw)
  To: Heiko Carstens, Vasily Gorbik, Christian Borntraeger
  Cc: Farhan Ali, Eric Farman, Halil Pasic, linux-s390, kvm, Cornelia Huck

The following changes since commit 674459be116955e025d6a5e6142e2d500103de8e:

  MAINTAINERS: add Vasily Gorbik and Christian Borntraeger for s390 (2019-05-31 10:14:15 +0200)

are available in the Git repository at:

  https://git.kernel.org/pub/scm/linux/kernel/git/kvms390/vfio-ccw.git tags/vfio-ccw-20190603

for you to fetch changes up to 9b6e57e5a51696171de990b3c41bd53d4b8ab8ac:

  s390/cio: Remove vfio-ccw checks of command codes (2019-06-03 12:02:55 +0200)

----------------------------------------------------------------
various vfio-ccw fixes (ccw translation, state machine)

----------------------------------------------------------------

Eric Farman (7):
  s390/cio: Update SCSW if it points to the end of the chain
  s390/cio: Set vfio-ccw FSM state before ioeventfd
  s390/cio: Split pfn_array_alloc_pin into pieces
  s390/cio: Initialize the host addresses in pfn_array
  s390/cio: Don't pin vfio pages for empty transfers
  s390/cio: Allow zero-length CCWs in vfio-ccw
  s390/cio: Remove vfio-ccw checks of command codes

 drivers/s390/cio/vfio_ccw_cp.c  | 159 +++++++++++++++++++++++---------
 drivers/s390/cio/vfio_ccw_drv.c |   6 +-
 2 files changed, 119 insertions(+), 46 deletions(-)

-- 
2.20.1


^ permalink raw reply	[flat|nested] 13+ messages in thread

* [PULL 1/7] s390/cio: Update SCSW if it points to the end of the chain
  2019-06-03 10:50 [PULL 0/7] vfio-ccw: fixes Cornelia Huck
@ 2019-06-03 10:50 ` Cornelia Huck
  2019-06-03 10:50 ` [PULL 2/7] s390/cio: Set vfio-ccw FSM state before ioeventfd Cornelia Huck
                   ` (6 subsequent siblings)
  7 siblings, 0 replies; 13+ messages in thread
From: Cornelia Huck @ 2019-06-03 10:50 UTC (permalink / raw)
  To: Heiko Carstens, Vasily Gorbik, Christian Borntraeger
  Cc: Farhan Ali, Eric Farman, Halil Pasic, linux-s390, kvm, Cornelia Huck

From: Eric Farman <farman@linux.ibm.com>

Per the POPs [1], when processing an interrupt the SCSW.CPA field of an
IRB generally points to 8 bytes after the last CCW that was executed
(there are exceptions, but this is the most common behavior).

In the case of an error, this points us to the first un-executed CCW
in the chain.  But in the case of normal I/O, the address points beyond
the end of the chain.  While the guest generally only cares about this
when possibly restarting a channel program after error recovery, we
should convert the address even in the good scenario so that we provide
a consistent, valid, response upon I/O completion.

[1] Figure 16-6 in SA22-7832-11.  The footnotes in that table also state
that this is true even if the resulting address is invalid or protected,
but moving to the end of the guest chain should not be a surprise.

Signed-off-by: Eric Farman <farman@linux.ibm.com>
Message-Id: <20190514234248.36203-2-farman@linux.ibm.com>
Reviewed-by: Farhan Ali <alifm@linux.ibm.com>
Signed-off-by: Cornelia Huck <cohuck@redhat.com>
---
 drivers/s390/cio/vfio_ccw_cp.c | 6 +++++-
 1 file changed, 5 insertions(+), 1 deletion(-)

diff --git a/drivers/s390/cio/vfio_ccw_cp.c b/drivers/s390/cio/vfio_ccw_cp.c
index 0e79799e9a71..6e48b66ae31a 100644
--- a/drivers/s390/cio/vfio_ccw_cp.c
+++ b/drivers/s390/cio/vfio_ccw_cp.c
@@ -886,7 +886,11 @@ void cp_update_scsw(struct channel_program *cp, union scsw *scsw)
 	 */
 	list_for_each_entry(chain, &cp->ccwchain_list, next) {
 		ccw_head = (u32)(u64)chain->ch_ccw;
-		if (is_cpa_within_range(cpa, ccw_head, chain->ch_len)) {
+		/*
+		 * On successful execution, cpa points just beyond the end
+		 * of the chain.
+		 */
+		if (is_cpa_within_range(cpa, ccw_head, chain->ch_len + 1)) {
 			/*
 			 * (cpa - ccw_head) is the offset value of the host
 			 * physical ccw to its chain head.
-- 
2.20.1


^ permalink raw reply related	[flat|nested] 13+ messages in thread

* [PULL 2/7] s390/cio: Set vfio-ccw FSM state before ioeventfd
  2019-06-03 10:50 [PULL 0/7] vfio-ccw: fixes Cornelia Huck
  2019-06-03 10:50 ` [PULL 1/7] s390/cio: Update SCSW if it points to the end of the chain Cornelia Huck
@ 2019-06-03 10:50 ` Cornelia Huck
  2019-06-03 10:50 ` [PULL 3/7] s390/cio: Split pfn_array_alloc_pin into pieces Cornelia Huck
                   ` (5 subsequent siblings)
  7 siblings, 0 replies; 13+ messages in thread
From: Cornelia Huck @ 2019-06-03 10:50 UTC (permalink / raw)
  To: Heiko Carstens, Vasily Gorbik, Christian Borntraeger
  Cc: Farhan Ali, Eric Farman, Halil Pasic, linux-s390, kvm,
	Pierre Morel, Cornelia Huck

From: Eric Farman <farman@linux.ibm.com>

Otherwise, the guest can believe it's okay to start another I/O
and bump into the non-idle state.  This results in a cc=2 (with
the asynchronous CSCH/HSCH code) returned to the guest, which is
unfortunate since everything is otherwise working normally.

Signed-off-by: Eric Farman <farman@linux.ibm.com>
Reviewed-by: Pierre Morel <pmorel@linux.ibm.com>
Message-Id: <20190514234248.36203-3-farman@linux.ibm.com>
Reviewed-by: Farhan Ali <alifm@linux.ibm.com>
Signed-off-by: Cornelia Huck <cohuck@redhat.com>
---
 drivers/s390/cio/vfio_ccw_drv.c | 6 +++---
 1 file changed, 3 insertions(+), 3 deletions(-)

diff --git a/drivers/s390/cio/vfio_ccw_drv.c b/drivers/s390/cio/vfio_ccw_drv.c
index ee8767f5845a..66a66ac1f3d1 100644
--- a/drivers/s390/cio/vfio_ccw_drv.c
+++ b/drivers/s390/cio/vfio_ccw_drv.c
@@ -95,11 +95,11 @@ static void vfio_ccw_sch_io_todo(struct work_struct *work)
 	memcpy(private->io_region->irb_area, irb, sizeof(*irb));
 	mutex_unlock(&private->io_mutex);
 
-	if (private->io_trigger)
-		eventfd_signal(private->io_trigger, 1);
-
 	if (private->mdev && is_final)
 		private->state = VFIO_CCW_STATE_IDLE;
+
+	if (private->io_trigger)
+		eventfd_signal(private->io_trigger, 1);
 }
 
 /*
-- 
2.20.1


^ permalink raw reply related	[flat|nested] 13+ messages in thread

* [PULL 3/7] s390/cio: Split pfn_array_alloc_pin into pieces
  2019-06-03 10:50 [PULL 0/7] vfio-ccw: fixes Cornelia Huck
  2019-06-03 10:50 ` [PULL 1/7] s390/cio: Update SCSW if it points to the end of the chain Cornelia Huck
  2019-06-03 10:50 ` [PULL 2/7] s390/cio: Set vfio-ccw FSM state before ioeventfd Cornelia Huck
@ 2019-06-03 10:50 ` Cornelia Huck
  2019-06-03 10:50 ` [PULL 4/7] s390/cio: Initialize the host addresses in pfn_array Cornelia Huck
                   ` (4 subsequent siblings)
  7 siblings, 0 replies; 13+ messages in thread
From: Cornelia Huck @ 2019-06-03 10:50 UTC (permalink / raw)
  To: Heiko Carstens, Vasily Gorbik, Christian Borntraeger
  Cc: Farhan Ali, Eric Farman, Halil Pasic, linux-s390, kvm, Cornelia Huck

From: Eric Farman <farman@linux.ibm.com>

The pfn_array_alloc_pin routine is doing too much.  Today, it does the
alloc of the pfn_array struct and its member arrays, builds the iova
address lists out of a contiguous piece of guest memory, and asks vfio
to pin the resulting pages.

Let's effectively revert a significant portion of commit 5c1cfb1c3948
("vfio: ccw: refactor and improve pfn_array_alloc_pin()") such that we
break pfn_array_alloc_pin() into its component pieces, and have one
routine that allocates/populates the pfn_array structs, and another
that actually pins the memory.  In the future, we will be able to
handle scenarios where pinning memory isn't actually appropriate.

Signed-off-by: Eric Farman <farman@linux.ibm.com>
Message-Id: <20190514234248.36203-4-farman@linux.ibm.com>
Reviewed-by: Farhan Ali <alifm@linux.ibm.com>
Signed-off-by: Cornelia Huck <cohuck@redhat.com>
---
 drivers/s390/cio/vfio_ccw_cp.c | 64 ++++++++++++++++++++++++----------
 1 file changed, 46 insertions(+), 18 deletions(-)

diff --git a/drivers/s390/cio/vfio_ccw_cp.c b/drivers/s390/cio/vfio_ccw_cp.c
index 6e48b66ae31a..e33265fb80b0 100644
--- a/drivers/s390/cio/vfio_ccw_cp.c
+++ b/drivers/s390/cio/vfio_ccw_cp.c
@@ -50,28 +50,25 @@ struct ccwchain {
 };
 
 /*
- * pfn_array_alloc_pin() - alloc memory for PFNs, then pin user pages in memory
+ * pfn_array_alloc() - alloc memory for PFNs
  * @pa: pfn_array on which to perform the operation
- * @mdev: the mediated device to perform pin/unpin operations
  * @iova: target guest physical address
  * @len: number of bytes that should be pinned from @iova
  *
- * Attempt to allocate memory for PFNs, and pin user pages in memory.
+ * Attempt to allocate memory for PFNs.
  *
  * Usage of pfn_array:
  * We expect (pa_nr == 0) and (pa_iova_pfn == NULL), any field in
  * this structure will be filled in by this function.
  *
  * Returns:
- *   Number of pages pinned on success.
- *   If @pa->pa_nr is not 0, or @pa->pa_iova_pfn is not NULL initially,
- *   returns -EINVAL.
- *   If no pages were pinned, returns -errno.
+ *         0 if PFNs are allocated
+ *   -EINVAL if pa->pa_nr is not initially zero, or pa->pa_iova_pfn is not NULL
+ *   -ENOMEM if alloc failed
  */
-static int pfn_array_alloc_pin(struct pfn_array *pa, struct device *mdev,
-			       u64 iova, unsigned int len)
+static int pfn_array_alloc(struct pfn_array *pa, u64 iova, unsigned int len)
 {
-	int i, ret = 0;
+	int i;
 
 	if (!len)
 		return 0;
@@ -97,6 +94,22 @@ static int pfn_array_alloc_pin(struct pfn_array *pa, struct device *mdev,
 	for (i = 1; i < pa->pa_nr; i++)
 		pa->pa_iova_pfn[i] = pa->pa_iova_pfn[i - 1] + 1;
 
+	return 0;
+}
+
+/*
+ * pfn_array_pin() - Pin user pages in memory
+ * @pa: pfn_array on which to perform the operation
+ * @mdev: the mediated device to perform pin operations
+ *
+ * Returns number of pages pinned upon success.
+ * If the pin request partially succeeds, or fails completely,
+ * all pages are left unpinned and a negative error value is returned.
+ */
+static int pfn_array_pin(struct pfn_array *pa, struct device *mdev)
+{
+	int ret = 0;
+
 	ret = vfio_pin_pages(mdev, pa->pa_iova_pfn, pa->pa_nr,
 			     IOMMU_READ | IOMMU_WRITE, pa->pa_pfn);
 
@@ -112,8 +125,6 @@ static int pfn_array_alloc_pin(struct pfn_array *pa, struct device *mdev,
 
 err_out:
 	pa->pa_nr = 0;
-	kfree(pa->pa_iova_pfn);
-	pa->pa_iova_pfn = NULL;
 
 	return ret;
 }
@@ -121,7 +132,9 @@ static int pfn_array_alloc_pin(struct pfn_array *pa, struct device *mdev,
 /* Unpin the pages before releasing the memory. */
 static void pfn_array_unpin_free(struct pfn_array *pa, struct device *mdev)
 {
-	vfio_unpin_pages(mdev, pa->pa_iova_pfn, pa->pa_nr);
+	/* Only unpin if any pages were pinned to begin with */
+	if (pa->pa_nr)
+		vfio_unpin_pages(mdev, pa->pa_iova_pfn, pa->pa_nr);
 	pa->pa_nr = 0;
 	kfree(pa->pa_iova_pfn);
 }
@@ -209,10 +222,16 @@ static long copy_from_iova(struct device *mdev,
 	int i, ret;
 	unsigned long l, m;
 
-	ret = pfn_array_alloc_pin(&pa, mdev, iova, n);
-	if (ret <= 0)
+	ret = pfn_array_alloc(&pa, iova, n);
+	if (ret < 0)
 		return ret;
 
+	ret = pfn_array_pin(&pa, mdev);
+	if (ret < 0) {
+		pfn_array_unpin_free(&pa, mdev);
+		return ret;
+	}
+
 	l = n;
 	for (i = 0; i < pa.pa_nr; i++) {
 		from = pa.pa_pfn[i] << PAGE_SHIFT;
@@ -560,7 +579,11 @@ static int ccwchain_fetch_direct(struct ccwchain *chain,
 	if (ret)
 		goto out_init;
 
-	ret = pfn_array_alloc_pin(pat->pat_pa, cp->mdev, ccw->cda, ccw->count);
+	ret = pfn_array_alloc(pat->pat_pa, ccw->cda, ccw->count);
+	if (ret < 0)
+		goto out_unpin;
+
+	ret = pfn_array_pin(pat->pat_pa, cp->mdev);
 	if (ret < 0)
 		goto out_unpin;
 
@@ -590,6 +613,7 @@ static int ccwchain_fetch_idal(struct ccwchain *chain,
 {
 	struct ccw1 *ccw;
 	struct pfn_array_table *pat;
+	struct pfn_array *pa;
 	unsigned long *idaws;
 	u64 idaw_iova;
 	unsigned int idaw_nr, idaw_len;
@@ -628,9 +652,13 @@ static int ccwchain_fetch_idal(struct ccwchain *chain,
 
 	for (i = 0; i < idaw_nr; i++) {
 		idaw_iova = *(idaws + i);
+		pa = pat->pat_pa + i;
+
+		ret = pfn_array_alloc(pa, idaw_iova, 1);
+		if (ret < 0)
+			goto out_free_idaws;
 
-		ret = pfn_array_alloc_pin(pat->pat_pa + i, cp->mdev,
-					  idaw_iova, 1);
+		ret = pfn_array_pin(pa, cp->mdev);
 		if (ret < 0)
 			goto out_free_idaws;
 	}
-- 
2.20.1


^ permalink raw reply related	[flat|nested] 13+ messages in thread

* [PULL 4/7] s390/cio: Initialize the host addresses in pfn_array
  2019-06-03 10:50 [PULL 0/7] vfio-ccw: fixes Cornelia Huck
                   ` (2 preceding siblings ...)
  2019-06-03 10:50 ` [PULL 3/7] s390/cio: Split pfn_array_alloc_pin into pieces Cornelia Huck
@ 2019-06-03 10:50 ` Cornelia Huck
  2019-06-03 10:50 ` [PULL 5/7] s390/cio: Don't pin vfio pages for empty transfers Cornelia Huck
                   ` (3 subsequent siblings)
  7 siblings, 0 replies; 13+ messages in thread
From: Cornelia Huck @ 2019-06-03 10:50 UTC (permalink / raw)
  To: Heiko Carstens, Vasily Gorbik, Christian Borntraeger
  Cc: Farhan Ali, Eric Farman, Halil Pasic, linux-s390, kvm, Cornelia Huck

From: Eric Farman <farman@linux.ibm.com>

Let's initialize the host address to something that is invalid,
rather than letting it default to zero.  This just makes it easier
to notice when a pin operation has failed or been skipped.

Signed-off-by: Eric Farman <farman@linux.ibm.com>
Message-Id: <20190514234248.36203-5-farman@linux.ibm.com>
Reviewed-by: Farhan Ali <alifm@linux.ibm.com>
Signed-off-by: Cornelia Huck <cohuck@redhat.com>
---
 drivers/s390/cio/vfio_ccw_cp.c | 5 ++++-
 1 file changed, 4 insertions(+), 1 deletion(-)

diff --git a/drivers/s390/cio/vfio_ccw_cp.c b/drivers/s390/cio/vfio_ccw_cp.c
index e33265fb80b0..086faf2dacd3 100644
--- a/drivers/s390/cio/vfio_ccw_cp.c
+++ b/drivers/s390/cio/vfio_ccw_cp.c
@@ -91,8 +91,11 @@ static int pfn_array_alloc(struct pfn_array *pa, u64 iova, unsigned int len)
 	pa->pa_pfn = pa->pa_iova_pfn + pa->pa_nr;
 
 	pa->pa_iova_pfn[0] = pa->pa_iova >> PAGE_SHIFT;
-	for (i = 1; i < pa->pa_nr; i++)
+	pa->pa_pfn[0] = -1ULL;
+	for (i = 1; i < pa->pa_nr; i++) {
 		pa->pa_iova_pfn[i] = pa->pa_iova_pfn[i - 1] + 1;
+		pa->pa_pfn[i] = -1ULL;
+	}
 
 	return 0;
 }
-- 
2.20.1


^ permalink raw reply related	[flat|nested] 13+ messages in thread

* [PULL 5/7] s390/cio: Don't pin vfio pages for empty transfers
  2019-06-03 10:50 [PULL 0/7] vfio-ccw: fixes Cornelia Huck
                   ` (3 preceding siblings ...)
  2019-06-03 10:50 ` [PULL 4/7] s390/cio: Initialize the host addresses in pfn_array Cornelia Huck
@ 2019-06-03 10:50 ` Cornelia Huck
  2019-06-03 10:50 ` [PULL 6/7] s390/cio: Allow zero-length CCWs in vfio-ccw Cornelia Huck
                   ` (2 subsequent siblings)
  7 siblings, 0 replies; 13+ messages in thread
From: Cornelia Huck @ 2019-06-03 10:50 UTC (permalink / raw)
  To: Heiko Carstens, Vasily Gorbik, Christian Borntraeger
  Cc: Farhan Ali, Eric Farman, Halil Pasic, linux-s390, kvm, Cornelia Huck

From: Eric Farman <farman@linux.ibm.com>

The skip flag of a CCW offers the possibility of data not being
transferred, but is only meaningful for certain commands.
Specifically, it is only applicable for a read, read backward, sense,
or sense ID CCW and will be ignored for any other command code
(SA22-7832-11 page 15-64, and figure 15-30 on page 15-75).

(A sense ID is xE4, while a sense is x04 with possible modifiers in the
upper four bits.  So we will cover the whole "family" of sense CCWs.)

For those scenarios, since there is no requirement for the target
address to be valid, we should skip the call to vfio_pin_pages() and
rely on the IDAL address we have allocated/built for the channel
program.  The fact that the individual IDAWs within the IDAL are
invalid is fine, since they aren't actually checked in these cases.

Set pa_nr to zero when skipping the pfn_array_pin() call, since it is
defined as the number of pages pinned and is used to determine
whether to call vfio_unpin_pages() upon cleanup.

The pfn_array_pin() routine returns the number of pages that were
pinned, but now might be skipped for some CCWs.  Thus we need to
calculate the expected number of pages ourselves such that we are
guaranteed to allocate a reasonable number of IDAWs, which will
provide a valid address in CCW.CDA regardless of whether the IDAWs
are filled in with pinned/translated addresses or not.

Signed-off-by: Eric Farman <farman@linux.ibm.com>
Message-Id: <20190516161403.79053-2-farman@linux.ibm.com>
Acked-by: Farhan Ali <alifm@linux.ibm.com>
Signed-off-by: Cornelia Huck <cohuck@redhat.com>
---
 drivers/s390/cio/vfio_ccw_cp.c | 55 ++++++++++++++++++++++++++++++----
 1 file changed, 50 insertions(+), 5 deletions(-)

diff --git a/drivers/s390/cio/vfio_ccw_cp.c b/drivers/s390/cio/vfio_ccw_cp.c
index 086faf2dacd3..0467838aed23 100644
--- a/drivers/s390/cio/vfio_ccw_cp.c
+++ b/drivers/s390/cio/vfio_ccw_cp.c
@@ -294,6 +294,10 @@ static long copy_ccw_from_iova(struct channel_program *cp,
 /*
  * Helpers to operate ccwchain.
  */
+#define ccw_is_read(_ccw) (((_ccw)->cmd_code & 0x03) == 0x02)
+#define ccw_is_read_backward(_ccw) (((_ccw)->cmd_code & 0x0F) == 0x0C)
+#define ccw_is_sense(_ccw) (((_ccw)->cmd_code & 0x0F) == CCW_CMD_BASIC_SENSE)
+
 #define ccw_is_test(_ccw) (((_ccw)->cmd_code & 0x0F) == 0)
 
 #define ccw_is_noop(_ccw) ((_ccw)->cmd_code == CCW_CMD_NOOP)
@@ -301,10 +305,39 @@ static long copy_ccw_from_iova(struct channel_program *cp,
 #define ccw_is_tic(_ccw) ((_ccw)->cmd_code == CCW_CMD_TIC)
 
 #define ccw_is_idal(_ccw) ((_ccw)->flags & CCW_FLAG_IDA)
-
+#define ccw_is_skip(_ccw) ((_ccw)->flags & CCW_FLAG_SKIP)
 
 #define ccw_is_chain(_ccw) ((_ccw)->flags & (CCW_FLAG_CC | CCW_FLAG_DC))
 
+/*
+ * ccw_does_data_transfer()
+ *
+ * Determine whether a CCW will move any data, such that the guest pages
+ * would need to be pinned before performing the I/O.
+ *
+ * Returns 1 if yes, 0 if no.
+ */
+static inline int ccw_does_data_transfer(struct ccw1 *ccw)
+{
+	/* If the skip flag is off, then data will be transferred */
+	if (!ccw_is_skip(ccw))
+		return 1;
+
+	/*
+	 * If the skip flag is on, it is only meaningful if the command
+	 * code is a read, read backward, sense, or sense ID.  In those
+	 * cases, no data will be transferred.
+	 */
+	if (ccw_is_read(ccw) || ccw_is_read_backward(ccw))
+		return 0;
+
+	if (ccw_is_sense(ccw))
+		return 0;
+
+	/* The skip flag is on, but it is ignored for this command code. */
+	return 1;
+}
+
 /*
  * is_cpa_within_range()
  *
@@ -559,6 +592,7 @@ static int ccwchain_fetch_direct(struct ccwchain *chain,
 	struct pfn_array_table *pat;
 	unsigned long *idaws;
 	int ret;
+	int idaw_nr = 1;
 
 	ccw = chain->ch_ccw + idx;
 
@@ -570,6 +604,8 @@ static int ccwchain_fetch_direct(struct ccwchain *chain,
 		 */
 		ccw->flags |= CCW_FLAG_IDA;
 		return 0;
+	} else {
+		idaw_nr = idal_nr_words((void *)(u64)ccw->cda, ccw->count);
 	}
 
 	/*
@@ -586,12 +622,16 @@ static int ccwchain_fetch_direct(struct ccwchain *chain,
 	if (ret < 0)
 		goto out_unpin;
 
-	ret = pfn_array_pin(pat->pat_pa, cp->mdev);
-	if (ret < 0)
-		goto out_unpin;
+	if (ccw_does_data_transfer(ccw)) {
+		ret = pfn_array_pin(pat->pat_pa, cp->mdev);
+		if (ret < 0)
+			goto out_unpin;
+	} else {
+		pat->pat_pa->pa_nr = 0;
+	}
 
 	/* Translate this direct ccw to a idal ccw. */
-	idaws = kcalloc(ret, sizeof(*idaws), GFP_DMA | GFP_KERNEL);
+	idaws = kcalloc(idaw_nr, sizeof(*idaws), GFP_DMA | GFP_KERNEL);
 	if (!idaws) {
 		ret = -ENOMEM;
 		goto out_unpin;
@@ -661,6 +701,11 @@ static int ccwchain_fetch_idal(struct ccwchain *chain,
 		if (ret < 0)
 			goto out_free_idaws;
 
+		if (!ccw_does_data_transfer(ccw)) {
+			pa->pa_nr = 0;
+			continue;
+		}
+
 		ret = pfn_array_pin(pa, cp->mdev);
 		if (ret < 0)
 			goto out_free_idaws;
-- 
2.20.1


^ permalink raw reply related	[flat|nested] 13+ messages in thread

* [PULL 6/7] s390/cio: Allow zero-length CCWs in vfio-ccw
  2019-06-03 10:50 [PULL 0/7] vfio-ccw: fixes Cornelia Huck
                   ` (4 preceding siblings ...)
  2019-06-03 10:50 ` [PULL 5/7] s390/cio: Don't pin vfio pages for empty transfers Cornelia Huck
@ 2019-06-03 10:50 ` Cornelia Huck
  2019-06-03 10:50 ` [PULL 7/7] s390/cio: Remove vfio-ccw checks of command codes Cornelia Huck
  2019-06-03 11:11 ` [PULL 0/7] vfio-ccw: fixes Heiko Carstens
  7 siblings, 0 replies; 13+ messages in thread
From: Cornelia Huck @ 2019-06-03 10:50 UTC (permalink / raw)
  To: Heiko Carstens, Vasily Gorbik, Christian Borntraeger
  Cc: Farhan Ali, Eric Farman, Halil Pasic, linux-s390, kvm, Cornelia Huck

From: Eric Farman <farman@linux.ibm.com>

It is possible that a guest might issue a CCW with a length of zero,
and will expect a particular response.  Consider this chain:

   Address   Format-1 CCW
   --------  -----------------
 0 33110EC0  346022CC 33177468
 1 33110EC8  CF200000 3318300C

CCW[0] moves a little more than two pages, but also has the
Suppress Length Indication (SLI) bit set to handle the expectation
that considerably less data will be moved.  CCW[1] also has the SLI
bit set, and has a length of zero.  Once vfio-ccw does its magic,
the kernel issues a start subchannel on behalf of the guest with this:

   Address   Format-1 CCW
   --------  -----------------
 0 021EDED0  346422CC 021F0000
 1 021EDED8  CF240000 3318300C

Both CCWs were converted to an IDAL and have the corresponding flags
set (which is by design), but only the address of the first data
address is converted to something the host is aware of.  The second
CCW still has the address used by the guest, which happens to be (A)
(probably) an invalid address for the host, and (B) an invalid IDAW
address (doubleword boundary, etc.).

While the I/O fails, it doesn't fail correctly.  In this example, we
would receive a program check for an invalid IDAW address, instead of
a unit check for an invalid command.

To fix this, revert commit 4cebc5d6a6ff ("vfio: ccw: validate the
count field of a ccw before pinning") and allow the individual fetch
routines to process them like anything else.  We'll make a slight
adjustment to our allocation of the pfn_array (for direct CCWs) or
IDAL (for IDAL CCWs) memory, so that we have room for at least one
address even though no guest memory will be pinned and thus the
IDAW will not be populated with a host address.

Signed-off-by: Eric Farman <farman@linux.ibm.com>
Message-Id: <20190516161403.79053-3-farman@linux.ibm.com>
Acked-by: Farhan Ali <alifm@linux.ibm.com>
Signed-off-by: Cornelia Huck <cohuck@redhat.com>
---
 drivers/s390/cio/vfio_ccw_cp.c | 30 ++++++++++++------------------
 1 file changed, 12 insertions(+), 18 deletions(-)

diff --git a/drivers/s390/cio/vfio_ccw_cp.c b/drivers/s390/cio/vfio_ccw_cp.c
index 0467838aed23..c77c9b4cd2a8 100644
--- a/drivers/s390/cio/vfio_ccw_cp.c
+++ b/drivers/s390/cio/vfio_ccw_cp.c
@@ -70,9 +70,6 @@ static int pfn_array_alloc(struct pfn_array *pa, u64 iova, unsigned int len)
 {
 	int i;
 
-	if (!len)
-		return 0;
-
 	if (pa->pa_nr || pa->pa_iova_pfn)
 		return -EINVAL;
 
@@ -319,6 +316,10 @@ static long copy_ccw_from_iova(struct channel_program *cp,
  */
 static inline int ccw_does_data_transfer(struct ccw1 *ccw)
 {
+	/* If the count field is zero, then no data will be transferred */
+	if (ccw->count == 0)
+		return 0;
+
 	/* If the skip flag is off, then data will be transferred */
 	if (!ccw_is_skip(ccw))
 		return 1;
@@ -405,8 +406,6 @@ static void ccwchain_cda_free(struct ccwchain *chain, int idx)
 
 	if (ccw_is_test(ccw) || ccw_is_noop(ccw) || ccw_is_tic(ccw))
 		return;
-	if (!ccw->count)
-		return;
 
 	kfree((void *)(u64)ccw->cda);
 }
@@ -592,19 +591,13 @@ static int ccwchain_fetch_direct(struct ccwchain *chain,
 	struct pfn_array_table *pat;
 	unsigned long *idaws;
 	int ret;
+	int bytes = 1;
 	int idaw_nr = 1;
 
 	ccw = chain->ch_ccw + idx;
 
-	if (!ccw->count) {
-		/*
-		 * We just want the translation result of any direct ccw
-		 * to be an IDA ccw, so let's add the IDA flag for it.
-		 * Although the flag will be ignored by firmware.
-		 */
-		ccw->flags |= CCW_FLAG_IDA;
-		return 0;
-	} else {
+	if (ccw->count) {
+		bytes = ccw->count;
 		idaw_nr = idal_nr_words((void *)(u64)ccw->cda, ccw->count);
 	}
 
@@ -618,7 +611,7 @@ static int ccwchain_fetch_direct(struct ccwchain *chain,
 	if (ret)
 		goto out_init;
 
-	ret = pfn_array_alloc(pat->pat_pa, ccw->cda, ccw->count);
+	ret = pfn_array_alloc(pat->pat_pa, ccw->cda, bytes);
 	if (ret < 0)
 		goto out_unpin;
 
@@ -661,17 +654,18 @@ static int ccwchain_fetch_idal(struct ccwchain *chain,
 	u64 idaw_iova;
 	unsigned int idaw_nr, idaw_len;
 	int i, ret;
+	int bytes = 1;
 
 	ccw = chain->ch_ccw + idx;
 
-	if (!ccw->count)
-		return 0;
+	if (ccw->count)
+		bytes = ccw->count;
 
 	/* Calculate size of idaws. */
 	ret = copy_from_iova(cp->mdev, &idaw_iova, ccw->cda, sizeof(idaw_iova));
 	if (ret)
 		return ret;
-	idaw_nr = idal_nr_words((void *)(idaw_iova), ccw->count);
+	idaw_nr = idal_nr_words((void *)(idaw_iova), bytes);
 	idaw_len = idaw_nr * sizeof(*idaws);
 
 	/* Pin data page(s) in memory. */
-- 
2.20.1


^ permalink raw reply related	[flat|nested] 13+ messages in thread

* [PULL 7/7] s390/cio: Remove vfio-ccw checks of command codes
  2019-06-03 10:50 [PULL 0/7] vfio-ccw: fixes Cornelia Huck
                   ` (5 preceding siblings ...)
  2019-06-03 10:50 ` [PULL 6/7] s390/cio: Allow zero-length CCWs in vfio-ccw Cornelia Huck
@ 2019-06-03 10:50 ` Cornelia Huck
  2019-06-03 11:11 ` [PULL 0/7] vfio-ccw: fixes Heiko Carstens
  7 siblings, 0 replies; 13+ messages in thread
From: Cornelia Huck @ 2019-06-03 10:50 UTC (permalink / raw)
  To: Heiko Carstens, Vasily Gorbik, Christian Borntraeger
  Cc: Farhan Ali, Eric Farman, Halil Pasic, linux-s390, kvm, Cornelia Huck

From: Eric Farman <farman@linux.ibm.com>

If the CCW being processed is a No-Operation, then by definition no
data is being transferred.  Let's fold those checks into the normal
CCW processors, rather than skipping out early.

Likewise, if the CCW being processed is a "test" (a category defined
here as an opcode that contains zero in the lowest four bits) then no
special processing is necessary as far as vfio-ccw is concerned.
These command codes have not been valid since the S/370 days, meaning
they are invalid in the same way as one that ends in an eight [1] or
an otherwise valid command code that is undefined for the device type
in question.  Considering that, let's just process "test" CCWs like
any other CCW, and send everything to the hardware.

[1] POPS states that a x08 is a TIC CCW, and that having any high-order
bits enabled is invalid for format-1 CCWs.  For format-0 CCWs, the
high-order bits are ignored.

Signed-off-by: Eric Farman <farman@linux.ibm.com>
Message-Id: <20190516161403.79053-4-farman@linux.ibm.com>
Acked-by: Farhan Ali <alifm@linux.ibm.com>
Signed-off-by: Cornelia Huck <cohuck@redhat.com>
---
 drivers/s390/cio/vfio_ccw_cp.c | 11 +++++------
 1 file changed, 5 insertions(+), 6 deletions(-)

diff --git a/drivers/s390/cio/vfio_ccw_cp.c b/drivers/s390/cio/vfio_ccw_cp.c
index c77c9b4cd2a8..f73cfcfdd032 100644
--- a/drivers/s390/cio/vfio_ccw_cp.c
+++ b/drivers/s390/cio/vfio_ccw_cp.c
@@ -295,8 +295,6 @@ static long copy_ccw_from_iova(struct channel_program *cp,
 #define ccw_is_read_backward(_ccw) (((_ccw)->cmd_code & 0x0F) == 0x0C)
 #define ccw_is_sense(_ccw) (((_ccw)->cmd_code & 0x0F) == CCW_CMD_BASIC_SENSE)
 
-#define ccw_is_test(_ccw) (((_ccw)->cmd_code & 0x0F) == 0)
-
 #define ccw_is_noop(_ccw) ((_ccw)->cmd_code == CCW_CMD_NOOP)
 
 #define ccw_is_tic(_ccw) ((_ccw)->cmd_code == CCW_CMD_TIC)
@@ -320,6 +318,10 @@ static inline int ccw_does_data_transfer(struct ccw1 *ccw)
 	if (ccw->count == 0)
 		return 0;
 
+	/* If the command is a NOP, then no data will be transferred */
+	if (ccw_is_noop(ccw))
+		return 0;
+
 	/* If the skip flag is off, then data will be transferred */
 	if (!ccw_is_skip(ccw))
 		return 1;
@@ -404,7 +406,7 @@ static void ccwchain_cda_free(struct ccwchain *chain, int idx)
 {
 	struct ccw1 *ccw = chain->ch_ccw + idx;
 
-	if (ccw_is_test(ccw) || ccw_is_noop(ccw) || ccw_is_tic(ccw))
+	if (ccw_is_tic(ccw))
 		return;
 
 	kfree((void *)(u64)ccw->cda);
@@ -730,9 +732,6 @@ static int ccwchain_fetch_one(struct ccwchain *chain,
 {
 	struct ccw1 *ccw = chain->ch_ccw + idx;
 
-	if (ccw_is_test(ccw) || ccw_is_noop(ccw))
-		return 0;
-
 	if (ccw_is_tic(ccw))
 		return ccwchain_fetch_tic(chain, idx, cp);
 
-- 
2.20.1


^ permalink raw reply related	[flat|nested] 13+ messages in thread

* Re: [PULL 0/7] vfio-ccw: fixes
  2019-06-03 10:50 [PULL 0/7] vfio-ccw: fixes Cornelia Huck
                   ` (6 preceding siblings ...)
  2019-06-03 10:50 ` [PULL 7/7] s390/cio: Remove vfio-ccw checks of command codes Cornelia Huck
@ 2019-06-03 11:11 ` Heiko Carstens
  2019-06-03 11:16   ` Cornelia Huck
  7 siblings, 1 reply; 13+ messages in thread
From: Heiko Carstens @ 2019-06-03 11:11 UTC (permalink / raw)
  To: Cornelia Huck
  Cc: Vasily Gorbik, Christian Borntraeger, Farhan Ali, Eric Farman,
	Halil Pasic, linux-s390, kvm

On Mon, Jun 03, 2019 at 12:50:31PM +0200, Cornelia Huck wrote:
> The following changes since commit 674459be116955e025d6a5e6142e2d500103de8e:
> 
>   MAINTAINERS: add Vasily Gorbik and Christian Borntraeger for s390 (2019-05-31 10:14:15 +0200)
> 
> are available in the Git repository at:
> 
>   https://git.kernel.org/pub/scm/linux/kernel/git/kvms390/vfio-ccw.git tags/vfio-ccw-20190603
> 
> for you to fetch changes up to 9b6e57e5a51696171de990b3c41bd53d4b8ab8ac:
> 
>   s390/cio: Remove vfio-ccw checks of command codes (2019-06-03 12:02:55 +0200)
> 
> ----------------------------------------------------------------
> various vfio-ccw fixes (ccw translation, state machine)
> 
> ----------------------------------------------------------------
> 
> Eric Farman (7):
>   s390/cio: Update SCSW if it points to the end of the chain
>   s390/cio: Set vfio-ccw FSM state before ioeventfd
>   s390/cio: Split pfn_array_alloc_pin into pieces
>   s390/cio: Initialize the host addresses in pfn_array
>   s390/cio: Don't pin vfio pages for empty transfers
>   s390/cio: Allow zero-length CCWs in vfio-ccw
>   s390/cio: Remove vfio-ccw checks of command codes

Given that none of the commits contains a stable tag, I assume it's ok
to schedule these for the next merge window (aka 'feature branch')?


^ permalink raw reply	[flat|nested] 13+ messages in thread

* Re: [PULL 0/7] vfio-ccw: fixes
  2019-06-03 11:11 ` [PULL 0/7] vfio-ccw: fixes Heiko Carstens
@ 2019-06-03 11:16   ` Cornelia Huck
  2019-06-03 13:00     ` Farhan Ali
                       ` (2 more replies)
  0 siblings, 3 replies; 13+ messages in thread
From: Cornelia Huck @ 2019-06-03 11:16 UTC (permalink / raw)
  To: Heiko Carstens
  Cc: Vasily Gorbik, Christian Borntraeger, Farhan Ali, Eric Farman,
	Halil Pasic, linux-s390, kvm

On Mon, 3 Jun 2019 13:11:24 +0200
Heiko Carstens <heiko.carstens@de.ibm.com> wrote:

> On Mon, Jun 03, 2019 at 12:50:31PM +0200, Cornelia Huck wrote:
> > The following changes since commit 674459be116955e025d6a5e6142e2d500103de8e:
> > 
> >   MAINTAINERS: add Vasily Gorbik and Christian Borntraeger for s390 (2019-05-31 10:14:15 +0200)
> > 
> > are available in the Git repository at:
> > 
> >   https://git.kernel.org/pub/scm/linux/kernel/git/kvms390/vfio-ccw.git tags/vfio-ccw-20190603
> > 
> > for you to fetch changes up to 9b6e57e5a51696171de990b3c41bd53d4b8ab8ac:
> > 
> >   s390/cio: Remove vfio-ccw checks of command codes (2019-06-03 12:02:55 +0200)
> > 
> > ----------------------------------------------------------------
> > various vfio-ccw fixes (ccw translation, state machine)
> > 
> > ----------------------------------------------------------------
> > 
> > Eric Farman (7):
> >   s390/cio: Update SCSW if it points to the end of the chain
> >   s390/cio: Set vfio-ccw FSM state before ioeventfd
> >   s390/cio: Split pfn_array_alloc_pin into pieces
> >   s390/cio: Initialize the host addresses in pfn_array
> >   s390/cio: Don't pin vfio pages for empty transfers
> >   s390/cio: Allow zero-length CCWs in vfio-ccw
> >   s390/cio: Remove vfio-ccw checks of command codes  
> 
> Given that none of the commits contains a stable tag, I assume it's ok
> to schedule these for the next merge window (aka 'feature branch')?

All are bug fixes, but for what I think are edge cases. Would be nice
if they could still make it into 5.2, but I have no real problem with
deferring them to the next release, either.

Eric, Farhan: Do you agree?

^ permalink raw reply	[flat|nested] 13+ messages in thread

* Re: [PULL 0/7] vfio-ccw: fixes
  2019-06-03 11:16   ` Cornelia Huck
@ 2019-06-03 13:00     ` Farhan Ali
  2019-06-03 13:23     ` Eric Farman
  2019-06-04 15:24     ` Heiko Carstens
  2 siblings, 0 replies; 13+ messages in thread
From: Farhan Ali @ 2019-06-03 13:00 UTC (permalink / raw)
  To: Cornelia Huck, Heiko Carstens
  Cc: Vasily Gorbik, Christian Borntraeger, Eric Farman, Halil Pasic,
	linux-s390, kvm



On 06/03/2019 07:16 AM, Cornelia Huck wrote:
> On Mon, 3 Jun 2019 13:11:24 +0200
> Heiko Carstens <heiko.carstens@de.ibm.com> wrote:
> 
>> On Mon, Jun 03, 2019 at 12:50:31PM +0200, Cornelia Huck wrote:
>>> The following changes since commit 674459be116955e025d6a5e6142e2d500103de8e:
>>>
>>>    MAINTAINERS: add Vasily Gorbik and Christian Borntraeger for s390 (2019-05-31 10:14:15 +0200)
>>>
>>> are available in the Git repository at:
>>>
>>>    https://git.kernel.org/pub/scm/linux/kernel/git/kvms390/vfio-ccw.git tags/vfio-ccw-20190603
>>>
>>> for you to fetch changes up to 9b6e57e5a51696171de990b3c41bd53d4b8ab8ac:
>>>
>>>    s390/cio: Remove vfio-ccw checks of command codes (2019-06-03 12:02:55 +0200)
>>>
>>> ----------------------------------------------------------------
>>> various vfio-ccw fixes (ccw translation, state machine)
>>>
>>> ----------------------------------------------------------------
>>>
>>> Eric Farman (7):
>>>    s390/cio: Update SCSW if it points to the end of the chain
>>>    s390/cio: Set vfio-ccw FSM state before ioeventfd
>>>    s390/cio: Split pfn_array_alloc_pin into pieces
>>>    s390/cio: Initialize the host addresses in pfn_array
>>>    s390/cio: Don't pin vfio pages for empty transfers
>>>    s390/cio: Allow zero-length CCWs in vfio-ccw
>>>    s390/cio: Remove vfio-ccw checks of command codes
>>
>> Given that none of the commits contains a stable tag, I assume it's ok
>> to schedule these for the next merge window (aka 'feature branch')?
> 
> All are bug fixes, but for what I think are edge cases. Would be nice
> if they could still make it into 5.2, but I have no real problem with
> deferring them to the next release, either.
> 
> Eric, Farhan: Do you agree?
> 
> 
IMHO the first 2 patches should be merged as early as possible. The 2nd 
patch specially for setting the vfio-ccw device state before notifying 
the guest, so the guest doesn't see unexpected errors. This fixes a 
problem that both Eric and I have noticed with long running fio workloads.

The rest of the patches could go as a features for the next merge window.

Thanks
Farhan


^ permalink raw reply	[flat|nested] 13+ messages in thread

* Re: [PULL 0/7] vfio-ccw: fixes
  2019-06-03 11:16   ` Cornelia Huck
  2019-06-03 13:00     ` Farhan Ali
@ 2019-06-03 13:23     ` Eric Farman
  2019-06-04 15:24     ` Heiko Carstens
  2 siblings, 0 replies; 13+ messages in thread
From: Eric Farman @ 2019-06-03 13:23 UTC (permalink / raw)
  To: Cornelia Huck, Heiko Carstens
  Cc: Vasily Gorbik, Christian Borntraeger, Farhan Ali, Halil Pasic,
	linux-s390, kvm



On 6/3/19 7:16 AM, Cornelia Huck wrote:
> On Mon, 3 Jun 2019 13:11:24 +0200
> Heiko Carstens <heiko.carstens@de.ibm.com> wrote:
> 
>> On Mon, Jun 03, 2019 at 12:50:31PM +0200, Cornelia Huck wrote:
>>> The following changes since commit 674459be116955e025d6a5e6142e2d500103de8e:
>>>
>>>   MAINTAINERS: add Vasily Gorbik and Christian Borntraeger for s390 (2019-05-31 10:14:15 +0200)
>>>
>>> are available in the Git repository at:
>>>
>>>   https://git.kernel.org/pub/scm/linux/kernel/git/kvms390/vfio-ccw.git tags/vfio-ccw-20190603
>>>
>>> for you to fetch changes up to 9b6e57e5a51696171de990b3c41bd53d4b8ab8ac:
>>>
>>>   s390/cio: Remove vfio-ccw checks of command codes (2019-06-03 12:02:55 +0200)
>>>
>>> ----------------------------------------------------------------
>>> various vfio-ccw fixes (ccw translation, state machine)
>>>
>>> ----------------------------------------------------------------
>>>
>>> Eric Farman (7):
>>>   s390/cio: Update SCSW if it points to the end of the chain
>>>   s390/cio: Set vfio-ccw FSM state before ioeventfd
>>>   s390/cio: Split pfn_array_alloc_pin into pieces
>>>   s390/cio: Initialize the host addresses in pfn_array
>>>   s390/cio: Don't pin vfio pages for empty transfers
>>>   s390/cio: Allow zero-length CCWs in vfio-ccw
>>>   s390/cio: Remove vfio-ccw checks of command codes  
>>
>> Given that none of the commits contains a stable tag, I assume it's ok
>> to schedule these for the next merge window (aka 'feature branch')?
> 
> All are bug fixes, but for what I think are edge cases. Would be nice
> if they could still make it into 5.2, but I have no real problem with
> deferring them to the next release, either.
> 
> Eric, Farhan: Do you agree?
> 

Agreed, it would be nice for 5.2, but the next merge window is fine with
me too.


^ permalink raw reply	[flat|nested] 13+ messages in thread

* Re: [PULL 0/7] vfio-ccw: fixes
  2019-06-03 11:16   ` Cornelia Huck
  2019-06-03 13:00     ` Farhan Ali
  2019-06-03 13:23     ` Eric Farman
@ 2019-06-04 15:24     ` Heiko Carstens
  2 siblings, 0 replies; 13+ messages in thread
From: Heiko Carstens @ 2019-06-04 15:24 UTC (permalink / raw)
  To: Cornelia Huck
  Cc: Vasily Gorbik, Christian Borntraeger, Farhan Ali, Eric Farman,
	Halil Pasic, linux-s390, kvm

On Mon, Jun 03, 2019 at 01:16:41PM +0200, Cornelia Huck wrote:
> On Mon, 3 Jun 2019 13:11:24 +0200
> Heiko Carstens <heiko.carstens@de.ibm.com> wrote:
> 
> > On Mon, Jun 03, 2019 at 12:50:31PM +0200, Cornelia Huck wrote:
> > > The following changes since commit 674459be116955e025d6a5e6142e2d500103de8e:
> > > 
> > >   MAINTAINERS: add Vasily Gorbik and Christian Borntraeger for s390 (2019-05-31 10:14:15 +0200)
> > > 
> > > are available in the Git repository at:
> > > 
> > >   https://git.kernel.org/pub/scm/linux/kernel/git/kvms390/vfio-ccw.git tags/vfio-ccw-20190603
> > > 
> > > for you to fetch changes up to 9b6e57e5a51696171de990b3c41bd53d4b8ab8ac:
> > > 
> > >   s390/cio: Remove vfio-ccw checks of command codes (2019-06-03 12:02:55 +0200)
> > > 
> > > ----------------------------------------------------------------
> > > various vfio-ccw fixes (ccw translation, state machine)
> > > 
> > > ----------------------------------------------------------------
> > > 
> > > Eric Farman (7):
> > >   s390/cio: Update SCSW if it points to the end of the chain
> > >   s390/cio: Set vfio-ccw FSM state before ioeventfd
> > >   s390/cio: Split pfn_array_alloc_pin into pieces
> > >   s390/cio: Initialize the host addresses in pfn_array
> > >   s390/cio: Don't pin vfio pages for empty transfers
> > >   s390/cio: Allow zero-length CCWs in vfio-ccw
> > >   s390/cio: Remove vfio-ccw checks of command codes  
> > 
> > Given that none of the commits contains a stable tag, I assume it's ok
> > to schedule these for the next merge window (aka 'feature branch')?
> 
> All are bug fixes, but for what I think are edge cases. Would be nice
> if they could still make it into 5.2, but I have no real problem with
> deferring them to the next release, either.
> 
> Eric, Farhan: Do you agree?

As discussed on IRC: pulled and pushed to features branch. Urgent
fixes really should either have a stable and/or fixes tag, if
possible.

Thank you!


^ permalink raw reply	[flat|nested] 13+ messages in thread

end of thread, other threads:[~2019-06-04 15:24 UTC | newest]

Thread overview: 13+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2019-06-03 10:50 [PULL 0/7] vfio-ccw: fixes Cornelia Huck
2019-06-03 10:50 ` [PULL 1/7] s390/cio: Update SCSW if it points to the end of the chain Cornelia Huck
2019-06-03 10:50 ` [PULL 2/7] s390/cio: Set vfio-ccw FSM state before ioeventfd Cornelia Huck
2019-06-03 10:50 ` [PULL 3/7] s390/cio: Split pfn_array_alloc_pin into pieces Cornelia Huck
2019-06-03 10:50 ` [PULL 4/7] s390/cio: Initialize the host addresses in pfn_array Cornelia Huck
2019-06-03 10:50 ` [PULL 5/7] s390/cio: Don't pin vfio pages for empty transfers Cornelia Huck
2019-06-03 10:50 ` [PULL 6/7] s390/cio: Allow zero-length CCWs in vfio-ccw Cornelia Huck
2019-06-03 10:50 ` [PULL 7/7] s390/cio: Remove vfio-ccw checks of command codes Cornelia Huck
2019-06-03 11:11 ` [PULL 0/7] vfio-ccw: fixes Heiko Carstens
2019-06-03 11:16   ` Cornelia Huck
2019-06-03 13:00     ` Farhan Ali
2019-06-03 13:23     ` Eric Farman
2019-06-04 15:24     ` Heiko Carstens

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).