Two fixes for the new vfio-ccw support.
-----BEGIN PGP SIGNATURE----- Version: GnuPG v1 iQIcBAABAgAGBQJY71RhAAoJEN7Pa5PG8C+vq2YP/2Pbjld6n4/SH9T1OCwcP6ek eE76tqRIOS8fGwdUz7XF0qHACB8MyDXAAjkiMX0aAAFAneKeOZyVntUllhEOxipK EtRi/MP8IdEPpfddx3R+xHfigHtLzCqzjTzON9/ZpQLgJ94UCxGmCI08IKwaJGGb wHSw6iHf2yYPwQlPxTAIoOvIK6TETLtf6oLADQYY9QxCFt7DgoKr4qDFOxicDvqD wQm1TGQRD49dKo2N03DMbGz/13JNBu45lE9GwbyeBCut0Ny/g/rd50s+/L0Y5ufg KTnYKjb95wjpxub7kjYOgLKwobRJ5rUOBtgYiiNaIm4EUUhec2Q90q3bE4FAlwQq tEOJ88WoIJSZAbdlUPvNln4Ol2nMvSTYaxIW+4cu4gb9Gelcg1iqo+1Z2Hskc0jU 7GV11EE9WTblpMYAvLbf6S5rA5CfQaH/ElR62KEGZ4QuAX3SvDlBTYYU4jkQjw/p y8O+5u97A/wJkaOLw7VXHsi8IF4KQb1R0zNp9CFeVzFosiNzLjvp5H8aj9Alu9kb +GDxAiErSq5mL9Dd1YutuQ4N8R9WKZpMUr38U0vtlVgl6Emr2OAHatm3cYoeX8OJ cyPTAinrDI1sIzqVgqs5N+c9rDMPklPQRdebVl3CA1/mqhD8E3+b4oVOKT0+tWXG Dp1zlG/3FeQBLinCILdj =LySI -----END PGP SIGNATURE----- Merge tag 'vfio-ccw-20170413' of git://git.kernel.org/pub/scm/linux/kernel/git/kvms390/vfio-ccw into features Pull vfio-ccw fixes from Cornelia Huck: Two fixes for the new vfio-ccw support.
This commit is contained in:
commit
5037c22c53
2 changed files with 7 additions and 33 deletions
|
@ -161,12 +161,8 @@ err_out:
|
||||||
static void fsm_irq(struct vfio_ccw_private *private,
|
static void fsm_irq(struct vfio_ccw_private *private,
|
||||||
enum vfio_ccw_event event)
|
enum vfio_ccw_event event)
|
||||||
{
|
{
|
||||||
struct irb *irb;
|
struct irb *irb = this_cpu_ptr(&cio_irb);
|
||||||
|
|
||||||
if (!private)
|
|
||||||
return;
|
|
||||||
|
|
||||||
irb = this_cpu_ptr(&cio_irb);
|
|
||||||
memcpy(&private->irb, irb, sizeof(*irb));
|
memcpy(&private->irb, irb, sizeof(*irb));
|
||||||
|
|
||||||
queue_work(vfio_ccw_work_q, &private->io_work);
|
queue_work(vfio_ccw_work_q, &private->io_work);
|
||||||
|
|
|
@ -19,9 +19,6 @@ static int vfio_ccw_mdev_reset(struct mdev_device *mdev)
|
||||||
int ret;
|
int ret;
|
||||||
|
|
||||||
private = dev_get_drvdata(mdev_parent_dev(mdev));
|
private = dev_get_drvdata(mdev_parent_dev(mdev));
|
||||||
if (!private)
|
|
||||||
return -ENODEV;
|
|
||||||
|
|
||||||
sch = private->sch;
|
sch = private->sch;
|
||||||
/*
|
/*
|
||||||
* TODO:
|
* TODO:
|
||||||
|
@ -49,9 +46,6 @@ static int vfio_ccw_mdev_notifier(struct notifier_block *nb,
|
||||||
struct vfio_ccw_private *private =
|
struct vfio_ccw_private *private =
|
||||||
container_of(nb, struct vfio_ccw_private, nb);
|
container_of(nb, struct vfio_ccw_private, nb);
|
||||||
|
|
||||||
if (!private)
|
|
||||||
return NOTIFY_STOP;
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Vendor drivers MUST unpin pages in response to an
|
* Vendor drivers MUST unpin pages in response to an
|
||||||
* invalidation.
|
* invalidation.
|
||||||
|
@ -132,22 +126,14 @@ static int vfio_ccw_mdev_remove(struct mdev_device *mdev)
|
||||||
{
|
{
|
||||||
struct vfio_ccw_private *private =
|
struct vfio_ccw_private *private =
|
||||||
dev_get_drvdata(mdev_parent_dev(mdev));
|
dev_get_drvdata(mdev_parent_dev(mdev));
|
||||||
int ret;
|
|
||||||
|
|
||||||
if (!private)
|
if ((private->state != VFIO_CCW_STATE_NOT_OPER) &&
|
||||||
goto out;
|
(private->state != VFIO_CCW_STATE_STANDBY)) {
|
||||||
|
if (!vfio_ccw_mdev_reset(mdev))
|
||||||
|
private->state = VFIO_CCW_STATE_STANDBY;
|
||||||
|
/* The state will be NOT_OPER on error. */
|
||||||
|
}
|
||||||
|
|
||||||
if ((private->state == VFIO_CCW_STATE_NOT_OPER) ||
|
|
||||||
(private->state == VFIO_CCW_STATE_STANDBY))
|
|
||||||
goto out;
|
|
||||||
|
|
||||||
ret = vfio_ccw_mdev_reset(mdev);
|
|
||||||
if (ret)
|
|
||||||
return ret;
|
|
||||||
|
|
||||||
private->state = VFIO_CCW_STATE_STANDBY;
|
|
||||||
|
|
||||||
out:
|
|
||||||
private->mdev = NULL;
|
private->mdev = NULL;
|
||||||
atomic_inc(&private->avail);
|
atomic_inc(&private->avail);
|
||||||
|
|
||||||
|
@ -187,9 +173,6 @@ static ssize_t vfio_ccw_mdev_read(struct mdev_device *mdev,
|
||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
|
|
||||||
private = dev_get_drvdata(mdev_parent_dev(mdev));
|
private = dev_get_drvdata(mdev_parent_dev(mdev));
|
||||||
if (!private)
|
|
||||||
return -ENODEV;
|
|
||||||
|
|
||||||
region = &private->io_region;
|
region = &private->io_region;
|
||||||
if (copy_to_user(buf, (void *)region + *ppos, count))
|
if (copy_to_user(buf, (void *)region + *ppos, count))
|
||||||
return -EFAULT;
|
return -EFAULT;
|
||||||
|
@ -209,8 +192,6 @@ static ssize_t vfio_ccw_mdev_write(struct mdev_device *mdev,
|
||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
|
|
||||||
private = dev_get_drvdata(mdev_parent_dev(mdev));
|
private = dev_get_drvdata(mdev_parent_dev(mdev));
|
||||||
if (!private)
|
|
||||||
return -ENODEV;
|
|
||||||
if (private->state != VFIO_CCW_STATE_IDLE)
|
if (private->state != VFIO_CCW_STATE_IDLE)
|
||||||
return -EACCES;
|
return -EACCES;
|
||||||
|
|
||||||
|
@ -274,9 +255,6 @@ static int vfio_ccw_mdev_set_irqs(struct mdev_device *mdev,
|
||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
|
|
||||||
private = dev_get_drvdata(mdev_parent_dev(mdev));
|
private = dev_get_drvdata(mdev_parent_dev(mdev));
|
||||||
if (!private)
|
|
||||||
return -ENODEV;
|
|
||||||
|
|
||||||
ctx = &private->io_trigger;
|
ctx = &private->io_trigger;
|
||||||
|
|
||||||
switch (flags & VFIO_IRQ_SET_DATA_TYPE_MASK) {
|
switch (flags & VFIO_IRQ_SET_DATA_TYPE_MASK) {
|
||||||
|
|
Loading…
Reference in a new issue