Received: by 2002:a25:5b86:0:0:0:0:0 with SMTP id p128csp1512918ybb; Fri, 29 Mar 2019 06:07:08 -0700 (PDT) X-Google-Smtp-Source: APXvYqyNrWHJkBMotAJDb+mycEHjmN7qhqLLR/GfK9dfa0lH4ColKzoE9cbXJLGUm2nka/c5BUWN X-Received: by 2002:a17:902:3183:: with SMTP id x3mr48453246plb.170.1553864828602; Fri, 29 Mar 2019 06:07:08 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1553864828; cv=none; d=google.com; s=arc-20160816; b=a5+JNPIFTyodauBKdFGbmLQMIOf11GDJLgxKOimxIXdhXeOUWyXyr944qS5klvTVep GsrCbmIp6XvYO4KrQZf+6QPBd4iBOwfmmvxT5JQmN4D/WxTjRVIDFOYdZe4oEeDsB6lz mQCBlYVbqO6dM/oNtvDUwVcNNgmnuSJbwz2abtVZSaNKOT6/WKLWNSrI3gI0nuDVbjiF cGbc1CJ4nuhvGdAZBTXorAScfcbkkMvd/mc9PtBeyYWbmUkXFi5aVy1MXhLkFaHpOwr6 uINfnNY5gGx0MTSgo3DNGhUDjBa6vvCPZyVmOOECwG1kQ+hETTtG2o3S/a2iG6tb7szV 0ieA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:message-id:content-transfer-encoding :content-language:in-reply-to:mime-version:user-agent:date:from :references:cc:to:subject; bh=AsaAJ1VaC71cfjnkZQXpxYzKq8pRJ667ZI9FbhFQXrA=; b=kYpcmH6RQxCw8LEhMrgHk/Ayqc8/4GGu9jWmg/WL/1RK/AGEPh6EHxugHvxDYEFevz 1TQMtX9Y7oQ1VMCUPpYQDeU+zbHW/Z5J/QqyhKEs7bgKToXg2ukBiBanLbhc1hlxj6xW l9zygm5WhssXjb5CGmdl0sEtT31B38U9gvr7DOP5ObhcX+yPLGakNCzJD4KqtRgeLOlM Y2dXo7xx0UoAjFyjNjI0kSZV+atPjOQLNpRfpl6nhkZw/3/c4AhRYGJOO0sLd58vmcFz rjNqHXWNRM8PmKtZUWvPQsaI73VmcTaiepBBiYo99EfO4Y/kj21I7RI8XMDvHotblLYu XAnA== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=ibm.com Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id q61si1969692plb.252.2019.03.29.06.06.52; Fri, 29 Mar 2019 06:07:08 -0700 (PDT) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=ibm.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1729616AbfC2NGO (ORCPT + 99 others); Fri, 29 Mar 2019 09:06:14 -0400 Received: from mx0a-001b2d01.pphosted.com ([148.163.156.1]:45724 "EHLO mx0a-001b2d01.pphosted.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1729585AbfC2NGN (ORCPT ); Fri, 29 Mar 2019 09:06:13 -0400 Received: from pps.filterd (m0098399.ppops.net [127.0.0.1]) by mx0a-001b2d01.pphosted.com (8.16.0.27/8.16.0.27) with SMTP id x2TD4N68116411 for ; Fri, 29 Mar 2019 09:06:12 -0400 Received: from e35.co.us.ibm.com (e35.co.us.ibm.com [32.97.110.153]) by mx0a-001b2d01.pphosted.com with ESMTP id 2rhjdkx4re-1 (version=TLSv1.2 cipher=AES256-GCM-SHA384 bits=256 verify=NOT) for ; Fri, 29 Mar 2019 09:06:11 -0400 Received: from localhost by e35.co.us.ibm.com with IBM ESMTP SMTP Gateway: Authorized Use Only! Violators will be prosecuted for from ; Fri, 29 Mar 2019 13:06:11 -0000 Received: from b03cxnp08026.gho.boulder.ibm.com (9.17.130.18) by e35.co.us.ibm.com (192.168.1.135) with IBM ESMTP SMTP Gateway: Authorized Use Only! Violators will be prosecuted; (version=TLSv1/SSLv3 cipher=AES256-GCM-SHA384 bits=256/256) Fri, 29 Mar 2019 13:06:07 -0000 Received: from b03ledav004.gho.boulder.ibm.com (b03ledav004.gho.boulder.ibm.com [9.17.130.235]) by b03cxnp08026.gho.boulder.ibm.com (8.14.9/8.14.9/NCO v10.0) with ESMTP id x2TD62pW57081888 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Fri, 29 Mar 2019 13:06:02 GMT Received: from b03ledav004.gho.boulder.ibm.com (unknown [127.0.0.1]) by IMSVA (Postfix) with ESMTP id 5147378077; Fri, 29 Mar 2019 13:06:02 +0000 (GMT) Received: from b03ledav004.gho.boulder.ibm.com (unknown [127.0.0.1]) by IMSVA (Postfix) with ESMTP id CF0EC78064; Fri, 29 Mar 2019 13:06:00 +0000 (GMT) Received: from [9.80.196.185] (unknown [9.80.196.185]) by b03ledav004.gho.boulder.ibm.com (Postfix) with ESMTP; Fri, 29 Mar 2019 13:06:00 +0000 (GMT) Subject: Re: [PATCH v6 3/7] s390: ap: setup relation betwen KVM and mediated device To: pmorel@linux.ibm.com, borntraeger@de.ibm.com Cc: alex.williamson@redhat.com, cohuck@redhat.com, linux-kernel@vger.kernel.org, linux-s390@vger.kernel.org, kvm@vger.kernel.org, frankja@linux.ibm.com, pasic@linux.ibm.com, david@redhat.com, schwidefsky@de.ibm.com, heiko.carstens@de.ibm.com, freude@linux.ibm.com, mimu@linux.ibm.com References: <1553265828-27823-1-git-send-email-pmorel@linux.ibm.com> <1553265828-27823-4-git-send-email-pmorel@linux.ibm.com> <1ea236d1-ca0b-03c0-3699-0c0deb435785@linux.ibm.com> <3cd496d0-3eec-78e8-9ea5-4d62fe0cff1c@linux.ibm.com> From: Tony Krowiak Date: Fri, 29 Mar 2019 09:06:00 -0400 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:60.0) Gecko/20100101 Thunderbird/60.2.1 MIME-Version: 1.0 In-Reply-To: Content-Type: text/plain; charset=utf-8; format=flowed Content-Language: en-US Content-Transfer-Encoding: 8bit X-TM-AS-GCONF: 00 x-cbid: 19032913-0012-0000-0000-0000171ED95B X-IBM-SpamModules-Scores: X-IBM-SpamModules-Versions: BY=3.00010834; HX=3.00000242; KW=3.00000007; PH=3.00000004; SC=3.00000283; SDB=6.01181363; UDB=6.00618315; IPR=6.00962084; MB=3.00026207; MTD=3.00000008; XFM=3.00000015; UTC=2019-03-29 13:06:09 X-IBM-AV-DETECTION: SAVI=unused REMOTE=unused XFE=unused x-cbparentid: 19032913-0013-0000-0000-000056ADD597 Message-Id: X-Proofpoint-Virus-Version: vendor=fsecure engine=2.50.10434:,, definitions=2019-03-29_07:,, signatures=0 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 priorityscore=1501 malwarescore=0 suspectscore=0 phishscore=0 bulkscore=0 spamscore=0 clxscore=1015 lowpriorityscore=0 mlxscore=0 impostorscore=0 mlxlogscore=999 adultscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.0.1-1810050000 definitions=main-1903290095 Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On 3/29/19 4:58 AM, Pierre Morel wrote: > On 28/03/2019 18:25, Tony Krowiak wrote: >> On 3/28/19 12:27 PM, Pierre Morel wrote: >>> On 28/03/2019 17:12, Tony Krowiak wrote: >>>> On 3/22/19 10:43 AM, Pierre Morel wrote: >>>>> When the mediated device is open we setup the relation with KVM >>>>> unset it >>>>> when the mediated device is released. >>>> >>>> s/open we setup/open, we set up/ >>>> s/with KVM unset/with KVM and unset/ >>>> >>>>> >>>>> We lock the matrix mediated device to avoid any change until the >>>>> open is done. >>>>> We make sure that KVM is present when opening the mediated device >>>>> otherwise we return an error. >>>> >>>> s/mediated device/mediated device,/ >>>> >>>>> >>>>> Increase kvm's refcount to ensure the KVM structures are still >>>>> available >>>>> during the use of the mediated device by the guest. >>>>> >>>>> Signed-off-by: Pierre Morel >>>>> --- >>>>>   drivers/s390/crypto/vfio_ap_ops.c | 143 >>>>> +++++++++++++++++++++----------------- >>>>>   1 file changed, 79 insertions(+), 64 deletions(-) >>>>> >>>>> diff --git a/drivers/s390/crypto/vfio_ap_ops.c >>>>> b/drivers/s390/crypto/vfio_ap_ops.c >>>>> index 77f7bac..bdb36e0 100644 >>>>> --- a/drivers/s390/crypto/vfio_ap_ops.c >>>>> +++ b/drivers/s390/crypto/vfio_ap_ops.c >>>>> @@ -787,74 +787,24 @@ static const struct attribute_group >>>>> *vfio_ap_mdev_attr_groups[] = { >>>>>       NULL >>>>>   }; >>>>> -/** >>>>> - * vfio_ap_mdev_set_kvm >>>>> - * >>>>> - * @matrix_mdev: a mediated matrix device >>>>> - * @kvm: reference to KVM instance >>>>> - * >>>>> - * Verifies no other mediated matrix device has @kvm and sets a >>>>> reference to >>>>> - * it in @matrix_mdev->kvm. >>>>> - * >>>>> - * Return 0 if no other mediated matrix device has a reference to >>>>> @kvm; >>>>> - * otherwise, returns an -EPERM. >>>>> - */ >>>>> -static int vfio_ap_mdev_set_kvm(struct ap_matrix_mdev *matrix_mdev, >>>>> -                struct kvm *kvm) >>>>> -{ >>>>> -    struct ap_matrix_mdev *m; >>>>> - >>>>> -    mutex_lock(&matrix_dev->lock); >>>>> - >>>>> -    list_for_each_entry(m, &matrix_dev->mdev_list, node) { >>>>> -        if ((m != matrix_mdev) && (m->kvm == kvm)) { >>>>> -            mutex_unlock(&matrix_dev->lock); >>>>> -            return -EPERM; >>>>> -        } >>>>> -    } >>>>> - >>>>> -    matrix_mdev->kvm = kvm; >>>>> -    mutex_unlock(&matrix_dev->lock); >>>>> - >>>>> -    return 0; >>>>> -} >>>>> - >>>>>   static int vfio_ap_mdev_group_notifier(struct notifier_block *nb, >>>>>                          unsigned long action, void *data) >>>>>   { >>>>> -    int ret; >>>>>       struct ap_matrix_mdev *matrix_mdev; >>>>>       if (action != VFIO_GROUP_NOTIFY_SET_KVM) >>>>>           return NOTIFY_OK; >>>>>       matrix_mdev = container_of(nb, struct ap_matrix_mdev, >>>>> group_notifier); >>>>> - >>>>> -    if (!data) { >>>>> -        matrix_mdev->kvm = NULL; >>>>> -        return NOTIFY_OK; >>>>> -    } >>>>> - >>>>> -    ret = vfio_ap_mdev_set_kvm(matrix_mdev, data); >>>>> -    if (ret) >>>>> -        return NOTIFY_DONE; >>>>> - >>>>> -    /* If there is no CRYCB pointer, then we can't copy the masks */ >>>>> -    if (!matrix_mdev->kvm->arch.crypto.crycbd) >>>>> -        return NOTIFY_DONE; >>>>> - >>>>> -    kvm_arch_crypto_set_masks(matrix_mdev->kvm, >>>>> matrix_mdev->matrix.apm, >>>>> -                  matrix_mdev->matrix.aqm, >>>>> -                  matrix_mdev->matrix.adm); >>>>> +    matrix_mdev->kvm = data; >>>>>       return NOTIFY_OK; >>>>>   } >>>>> -static int vfio_ap_mdev_reset_queues(struct mdev_device *mdev) >>>>> +static int vfio_ap_mdev_reset_queues(struct ap_matrix_mdev >>>>> *matrix_mdev) >>>>>   { >>>>>       int ret; >>>>>       int rc = 0; >>>>> -    struct ap_matrix_mdev *matrix_mdev = mdev_get_drvdata(mdev); >>>>>       struct vfio_ap_queue *q; >>>>>       list_for_each_entry(q, &matrix_mdev->qlist, list) { >>>>> @@ -871,41 +821,106 @@ static int vfio_ap_mdev_reset_queues(struct >>>>> mdev_device *mdev) >>>>>       return rc; >>>>>   } >>>>> +/** >>>>> + * vfio_ap_mdev_set_kvm >>>>> + * >>>>> + * @matrix_mdev: a mediated matrix device >>>>> + * >>>>> + * - Verifies that the hook is free and install the PQAP hook >>>>> + * - Copy the matrix masks inside the CRYCB >>>>> + * - Increment the KVM rerference count >>>>> + * >>>>> + * Return 0 if no other mediated matrix device has a reference to >>>>> @kvm; >>>>> + * otherwise, returns an -EPERM. >>>>> + */ >>>>> +static int vfio_ap_mdev_set_kvm(struct ap_matrix_mdev *matrix_mdev) >>>>> +{ >>>>> +    if (matrix_mdev->kvm->arch.crypto.pqap_hook) >>>>> +        return -EPERM; >>>> >>>> How would this happen; in other words, why are we checking this? >>> >>> I check this to verify that no other AP mediated device is already in >>> use by this VM. >> >> Maybe you should insert a comment to that effect. > > Please notice that there is already a comment on this in the description > of the function. True, but that comment merely states that the function verifies the hook is free, not the reason why that particular check is done. When I reviewed the code and saw this check, I wondered why it was necessary. The comment you have would not have helped in this regard, so maybe you need to update your comment. > > Regards, > Pierre > > >