several bugfixes for vfio-ccw

-----BEGIN PGP SIGNATURE-----
 
 iQJGBAABCAAwFiEEw9DWbcNiT/aowBjO3s9rk8bwL68FAlvqxgASHGNvaHVja0By
 ZWRoYXQuY29tAAoJEN7Pa5PG8C+vvboP/2AvMs/6pOTQonrNyyLIS4aNMs6X8ST2
 hh8VWCS+xf4Xh1RVHk7gUhkf5iGy9ZZvV3HPXlks/vMrz1+PakvgaJ+HG49rKWH1
 HOr/omAd0L2ILjvPgEhSZKGKxczbpwGrDjHQspeiJjc+RxvwQgDDwA1PX+TBoj1F
 GdEzmtYjRKr5pyvhev8Z+vnNEr46F6yx6WUX7owbdT41VpZDWrF1Z3plR90MNs7T
 1HaBPJ+eiER4/KnUkysx7F+LH+6uHldQBvg87joXZYeZZ8a78BSTM/rXbXzhTzne
 /1SCgYXAzHrP76sqhRLd7nQa+cv8PQQpKggB8MwpWcvvAZ+WJqq0XlPzuJ2XkpXc
 Z6V7LVP7ownnDiN/vpv+i8w5kmRUWS3q2zdBhd+3rJKtF42vRs9gXtc6Sk22Q1kR
 yN1+pBzQECBb7bcV0P14eScojCYLsuWup+NvwYxMysEE4KfssjWT7rgRxxwepf19
 xr1FTa8OvjIahqNPpO/y/VcW67HSLNlwRlaUbGt0yYndMs/5ZeWOowMrLPqjxnUD
 mShW5C2IZKXNv0W2U2n8/NCKIShx6Qg9JOGIwE/uMWkzJPnZ6o+K+7AluMRBLWOe
 qiaAOEgbC16N7ncfl1nCdz5Z9b9cdbWTyGtZHatKvYEIzlELsOXEKBf+w0uxq7At
 hPA1IBXY/vYl
 =kYON
 -----END PGP SIGNATURE-----

Merge tag 'vfio-ccw-20181113' of git://git.kernel.org/pub/scm/linux/kernel/git/kvms390/vfio-ccw into fixes

Pull vfio-ccw from Cornelia Huck with the following changes:

 - Several bugfixes for vfio-ccw
This commit is contained in:
Martin Schwidefsky 2018-11-13 15:42:39 +01:00
commit 005af85c50
2 changed files with 9 additions and 7 deletions

View File

@ -387,8 +387,10 @@ static int ccwchain_calc_length(u64 iova, struct channel_program *cp)
* orb specified one of the unsupported formats, we defer
* checking for IDAWs in unsupported formats to here.
*/
if ((!cp->orb.cmd.c64 || cp->orb.cmd.i2k) && ccw_is_idal(ccw))
if ((!cp->orb.cmd.c64 || cp->orb.cmd.i2k) && ccw_is_idal(ccw)) {
kfree(p);
return -EOPNOTSUPP;
}
if ((!ccw_is_chain(ccw)) && (!ccw_is_tic(ccw)))
break;
@ -528,7 +530,7 @@ static int ccwchain_fetch_direct(struct ccwchain *chain,
ret = pfn_array_alloc_pin(pat->pat_pa, cp->mdev, ccw->cda, ccw->count);
if (ret < 0)
goto out_init;
goto out_unpin;
/* Translate this direct ccw to a idal ccw. */
idaws = kcalloc(ret, sizeof(*idaws), GFP_DMA | GFP_KERNEL);

View File

@ -22,7 +22,7 @@
#include "vfio_ccw_private.h"
struct workqueue_struct *vfio_ccw_work_q;
struct kmem_cache *vfio_ccw_io_region;
static struct kmem_cache *vfio_ccw_io_region;
/*
* Helpers
@ -134,14 +134,14 @@ static int vfio_ccw_sch_probe(struct subchannel *sch)
if (ret)
goto out_free;
ret = vfio_ccw_mdev_reg(sch);
if (ret)
goto out_disable;
INIT_WORK(&private->io_work, vfio_ccw_sch_io_todo);
atomic_set(&private->avail, 1);
private->state = VFIO_CCW_STATE_STANDBY;
ret = vfio_ccw_mdev_reg(sch);
if (ret)
goto out_disable;
return 0;
out_disable: