lkml.org 
[lkml]   [2018]   [Oct]   [31]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH v1 6/7] vfio: ap: register guest ISC with GISA and GIB
    Date
    Register to the GIB Alert list and retrieve the GAL_ISC
    to pass to the GISA registration.

    Unregister on error and when clearing the interrupt.

    Signed-off-by: Pierre Morel <pmorel@linux.ibm.com>
    Signed-off-by: Michael Mueller <mimu@linux.ibm.com>
    ---
    drivers/s390/crypto/vfio_ap_ops.c | 16 +++++++++++++---
    1 file changed, 13 insertions(+), 3 deletions(-)

    diff --git a/drivers/s390/crypto/vfio_ap_ops.c b/drivers/s390/crypto/vfio_ap_ops.c
    index f68102163bf4..232168797fb8 100644
    --- a/drivers/s390/crypto/vfio_ap_ops.c
    +++ b/drivers/s390/crypto/vfio_ap_ops.c
    @@ -903,16 +903,20 @@ static int ap_ioctl_setirq(struct ap_matrix_mdev *matrix_mdev,
    struct ap_status ap_status = reg2status(0);
    unsigned long p;
    int ret = -1;
    - int apqn;
    + int apqn, gal_isc;
    uint32_t gd;

    + gal_isc = kvm_s390_gisc_register(matrix_mdev->kvm, matrix_mdev->gisc);
    + if (gal_isc < 0)
    + return -EIO;
    +
    apqn = (int)(parm->cmd & 0xffff);

    gd = matrix_mdev->kvm->vcpus[0]->arch.sie_block->gd;
    if (gd & 0x01)
    aqic_gisa.f = 1;
    aqic_gisa.gisc = matrix_mdev->gisc;
    - aqic_gisa.isc = GAL_ISC;
    + aqic_gisa.isc = gal_isc;
    aqic_gisa.ir = 1;
    aqic_gisa.gisao = gisa->next_alert >> 4;

    @@ -923,7 +927,11 @@ static int ap_ioctl_setirq(struct ap_matrix_mdev *matrix_mdev,
    parm->status = ret;

    ap_status = reg2status(ret);
    - return (ap_status.rc) ? -EIO : 0;
    + if (ap_status.rc) {
    + kvm_s390_gisc_unregister(matrix_mdev->kvm, matrix_mdev->gisc);
    + return -EIO;
    + }
    + return 0;
    }

    static int ap_ioctl_clrirq(struct ap_matrix_mdev *matrix_mdev,
    @@ -946,6 +954,8 @@ static int ap_ioctl_clrirq(struct ap_matrix_mdev *matrix_mdev,
    parm->status = retval;

    ap_status = reg2status(retval);
    + /* unregister the IAM from the GIB anyway! */
    + kvm_s390_gisc_unregister(matrix_mdev->kvm, matrix_mdev->gisc);
    return (ap_status.rc) ? -EIO : 0;
    }

    --
    2.17.0
    \
     
     \ /
      Last update: 2018-10-31 19:13    [W:3.626 / U:0.084 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site