summaryrefslogtreecommitdiffstats
path: root/drivers
diff options
context:
space:
mode:
authorFarhan Ali <alifm@linux.ibm.com>2019-07-11 16:28:51 +0200
committerCornelia Huck <cohuck@redhat.com>2019-07-15 14:14:33 +0200
commitc9f597a4d6d7a01590571291f659a2f146111e34 (patch)
tree48f83da77ea7aaaeb20ddfc6120cb47607ddf124 /drivers
parents390/unwind: avoid int overflow in outside_of_stack (diff)
downloadlinux-c9f597a4d6d7a01590571291f659a2f146111e34.tar.xz
linux-c9f597a4d6d7a01590571291f659a2f146111e34.zip
vfio-ccw: Fix misleading comment when setting orb.cmd.c64
The comment is misleading because it tells us that we should set orb.cmd.c64 before calling ccwchain_calc_length, otherwise the function ccwchain_calc_length would return an error. This is not completely accurate. We want to allow an orb without cmd.c64, and this is fine as long as the channel program does not use IDALs. But we do want to reject any channel program that uses IDALs and does not set the flag, which is what we do in ccwchain_calc_length. After we have done the ccw processing, we need to set cmd.c64, as we use IDALs for all translated channel programs. Also for better code readability let's move the setting of cmd.c64 within the non error path. Fixes: fb9e7880af35 ("vfio: ccw: push down unsupported IDA check") Signed-off-by: Farhan Ali <alifm@linux.ibm.com> Reviewed-by: Cornelia Huck <cohuck@redhat.com> Message-Id: <f68636106aef0faeb6ce9712584d102d1b315ff8.1562854091.git.alifm@linux.ibm.com> Reviewed-by: Eric Farman <farman@linux.ibm.com> Signed-off-by: Cornelia Huck <cohuck@redhat.com>
Diffstat (limited to 'drivers')
-rw-r--r--drivers/s390/cio/vfio_ccw_cp.c13
1 files changed, 7 insertions, 6 deletions
diff --git a/drivers/s390/cio/vfio_ccw_cp.c b/drivers/s390/cio/vfio_ccw_cp.c
index 1d4c893ead23..46967c664c0f 100644
--- a/drivers/s390/cio/vfio_ccw_cp.c
+++ b/drivers/s390/cio/vfio_ccw_cp.c
@@ -645,14 +645,15 @@ int cp_init(struct channel_program *cp, struct device *mdev, union orb *orb)
if (ret)
cp_free(cp);
- /* It is safe to force: if not set but idals used
- * ccwchain_calc_length returns an error.
- */
- cp->orb.cmd.c64 = 1;
-
- if (!ret)
+ if (!ret) {
cp->initialized = true;
+ /* It is safe to force: if it was not set but idals used
+ * ccwchain_calc_length would have returned an error.
+ */
+ cp->orb.cmd.c64 = 1;
+ }
+
return ret;
}