All of lore.kernel.org
 help / color / mirror / Atom feed
From: Pierre Morel <pmorel@linux.vnet.ibm.com>
To: Tony Krowiak <akrowiak@linux.vnet.ibm.com>,
	linux-s390@vger.kernel.org, linux-kernel@vger.kernel.org,
	kvm@vger.kernel.org, buendgen@de.ibm.com
Cc: freude@de.ibm.com, schwidefsky@de.ibm.com,
	heiko.carstens@de.ibm.com, borntraeger@de.ibm.com,
	cohuck@redhat.com, kwankhede@nvidia.com,
	bjsdjshi@linux.vnet.ibm.com, pbonzini@redhat.com,
	alex.williamson@redhat.com, alifm@linux.vnet.ibm.com,
	mjrosato@linux.vnet.ibm.com, jjherne@linux.vnet.ibm.com,
	thuth@redhat.com, pasic@linux.vnet.ibm.com, berrange@redhat.com,
	fiuczy@linux.vnet.ibm.com
Subject: Re: [PATCH v4 05/15] KVM: s390: enable/disable AP interpretive execution
Date: Wed, 18 Apr 2018 10:31:08 +0200	[thread overview]
Message-ID: <faef5768-8eaa-a5c5-f2d5-10a0a67c2aa0@linux.vnet.ibm.com> (raw)
In-Reply-To: <0d18aeef-dfe7-89b6-f91e-022a71fb5ed9@linux.vnet.ibm.com>

On 17/04/2018 20:11, Tony Krowiak wrote:
> On 04/17/2018 12:55 PM, Pierre Morel wrote:
>> On 17/04/2018 18:22, Tony Krowiak wrote:
>>> On 04/17/2018 12:13 PM, Pierre Morel wrote:
>>>> On 17/04/2018 17:02, Tony Krowiak wrote:
>>>>> On 04/16/2018 06:51 AM, Pierre Morel wrote:
>>>>>> On 15/04/2018 23:22, Tony Krowiak wrote:
>>>>>>> The VFIO AP device model exploits interpretive execution of AP
>>>>>>> instructions (APIE) to provide guests passthrough access to AP
>>>>>>> devices. This patch introduces a new interface to enable and
>>>>>>> disable APIE.
>>>>>>>
>>>>>>> Signed-off-by: Tony Krowiak <akrowiak@linux.vnet.ibm.com>
>>>>>>> ---
>>>>>>>   arch/s390/include/asm/kvm-ap.h   |   16 ++++++++++++++++
>>>>>>>   arch/s390/include/asm/kvm_host.h |    1 +
>>>>>>>   arch/s390/kvm/kvm-ap.c           |   20 ++++++++++++++++++++
>>>>>>>   arch/s390/kvm/kvm-s390.c         |    9 +++++++++
>>>>>>>   4 files changed, 46 insertions(+), 0 deletions(-)
>>>>>>>
>>>>>>> diff --git a/arch/s390/include/asm/kvm-ap.h 
>>>>>>> b/arch/s390/include/asm/kvm-ap.h
>>>>>>> index 736e93e..a6c092e 100644
>>>>>>> --- a/arch/s390/include/asm/kvm-ap.h
>>>>>>> +++ b/arch/s390/include/asm/kvm-ap.h
>>>>>>> @@ -35,4 +35,20 @@
>>>>>>>    */
>>>>>>>   void kvm_ap_build_crycbd(struct kvm *kvm);
>>>>>>>
>>>>>>> +/**
>>>>>>> + * kvm_ap_interpret_instructions
>>>>>>> + *
>>>>>>> + * Indicate whether AP instructions shall be interpreted. If 
>>>>>>> they are not
>>>>>>> + * interpreted, all AP instructions will be intercepted and 
>>>>>>> routed back to
>>>>>>> + * userspace.
>>>>>>> + *
>>>>>>> + * @kvm: the virtual machine attributes
>>>>>>> + * @enable: indicates whether AP instructions are to be 
>>>>>>> interpreted (true) or
>>>>>>> + *        or not (false).
>>>>>>> + *
>>>>>>> + * Returns 0 if completed successfully; otherwise, returns 
>>>>>>> -EOPNOTSUPP
>>>>>>> + * indicating that AP instructions are not installed on the guest.
>>>>>>> + */
>>>>>>> +int kvm_ap_interpret_instructions(struct kvm *kvm, bool enable);
>>>>>>> +
>>>>>>>   #endif /* _ASM_KVM_AP */
>>>>>>> diff --git a/arch/s390/include/asm/kvm_host.h 
>>>>>>> b/arch/s390/include/asm/kvm_host.h
>>>>>>> index 3162783..5470685 100644
>>>>>>> --- a/arch/s390/include/asm/kvm_host.h
>>>>>>> +++ b/arch/s390/include/asm/kvm_host.h
>>>>>>> @@ -715,6 +715,7 @@ struct kvm_s390_crypto {
>>>>>>>       __u32 crycbd;
>>>>>>>       __u8 aes_kw;
>>>>>>>       __u8 dea_kw;
>>>>>>> +    __u8 apie;
>>>>>>>   };
>>>>>>>
>>>>>>>   #define APCB0_MASK_SIZE 1
>>>>>>> diff --git a/arch/s390/kvm/kvm-ap.c b/arch/s390/kvm/kvm-ap.c
>>>>>>> index 991bae4..55d11b5 100644
>>>>>>> --- a/arch/s390/kvm/kvm-ap.c
>>>>>>> +++ b/arch/s390/kvm/kvm-ap.c
>>>>>>> @@ -58,3 +58,23 @@ void kvm_ap_build_crycbd(struct kvm *kvm)
>>>>>>>       }
>>>>>>>   }
>>>>>>>   EXPORT_SYMBOL(kvm_ap_build_crycbd);
>>>>>>> +
>>>>>>> +int kvm_ap_interpret_instructions(struct kvm *kvm, bool enable)
>>>>>>> +{
>>>>>>> +    int ret = 0;
>>>>>>> +
>>>>>>> +    mutex_lock(&kvm->lock);
>>>>>>> +
>>>>>>> +    if (!test_kvm_cpu_feat(kvm, KVM_S390_VM_CPU_FEAT_AP)) {
>>>>>>
>>>>>> Do we really need to test CPU_FEAT_AP?
>>>>>
>>>>> Yes we do.
>>>>
>>>> really? why?
>>>
>>> The KVM_S390_VM_CPU_FEAT_AP will not be enabled by KVM if the AP
>>> instructions are not installed on the host. I assume - but have
>>> no way of verifying - that if the AP instructions are not installed
>>> on the host, that interpretation would fail. Do you know what would
>>> happen if AP instructions are interpreted when not installed on
>>> the host?
>>
>> If the host has no AP instructions (his ECA.28=0) but it set ECA.28 
>> for a guest,
>> there will be no AP instructions available in the guest.
>
> Then there's the answer to your question; this is why we to test 
> CPU_FEAT_AP.

We can postpone this discussion when we discuss on VSIE.
For this specific call I just wanted to point out that obviously this 
function should not
be called if the guest has no AP instructions.

>
>>
>>
>>>
>>>>
>>>>
>>>>>
>>>>>>
>>>>>>
>>>>>> I understand that KVM_S390_VM_CPU_FEAT_AP means AP instructions 
>>>>>> are interpreted.
>>>>>> shouldn't we add this information in the name?
>>>>>> like KVM_S390_VM_CPU_FEAT_APIE
>>>>>
>>>>> KVM_S390_VM_CPU_FEAT_AP does NOT mean AP instructions are 
>>>>> interpreted, it means
>>>>> AP instructions are installed.
>>>>
>>>> Right same error I made all along this review.
>>>> But AFAIK it means AP instructions are provided to the guest.
>>>> Then should this function be called if the guest has no AP 
>>>> instructions ?
>>>>
>>>>
>>>>>
>>>>>>
>>>>>>> +        ret = -EOPNOTSUPP;
>>>>>>> +        goto done;
>>>>>>> +    }
>>>>>>> +
>>>>>>> +    kvm->arch.crypto.apie = enable;
>>>>>>> +    kvm_s390_vcpu_crypto_reset_all(kvm);
>>>>>>> +
>>>>>>> +done:
>>>>>>> +    mutex_unlock(&kvm->lock);
>>>>>>> +    return ret;
>>>>>>> +}
>>>>>>> +EXPORT_SYMBOL(kvm_ap_interpret_instructions);
>>>>>>> diff --git a/arch/s390/kvm/kvm-s390.c b/arch/s390/kvm/kvm-s390.c
>>>>>>> index 55cd897..1dc8566 100644
>>>>>>> --- a/arch/s390/kvm/kvm-s390.c
>>>>>>> +++ b/arch/s390/kvm/kvm-s390.c
>>>>>>> @@ -1901,6 +1901,9 @@ static void kvm_s390_crypto_init(struct 
>>>>>>> kvm *kvm)
>>>>>>>       kvm->arch.crypto.crycb = &kvm->arch.sie_page2->crycb;
>>>>>>>       kvm_ap_build_crycbd(kvm);
>>>>>>>
>>>>>>> +    /* Default setting indicating SIE shall interpret AP 
>>>>>>> instructions */
>>>>>>> +    kvm->arch.crypto.apie = 1;
>>>>>>> +
>>>>>>>       if (!test_kvm_facility(kvm, 76))
>>>>>>>           return;
>>>>>>>
>>>>>>> @@ -2434,6 +2437,12 @@ static void 
>>>>>>> kvm_s390_vcpu_crypto_setup(struct kvm_vcpu *vcpu)
>>>>>>>   {
>>>>>>>       vcpu->arch.sie_block->crycbd = vcpu->kvm->arch.crypto.crycbd;
>>>>>>>
>>>>>>> +    vcpu->arch.sie_block->eca &= ~ECA_APIE;
>>>>>>> +    if (vcpu->kvm->arch.crypto.apie &&
>>>>>>> +        test_kvm_cpu_feat(vcpu->kvm, KVM_S390_VM_CPU_FEAT_AP))
>>>>>>
>>>>>> Do we call xxx_crypto_setup() if KVM does not support AP 
>>>>>> interpretation?
>>>>>
>>>>> Yes, kvm_s390_vcpu_crypto_setup(vcpu) is called by 
>>>>> kvm_arch_vcpu_setup(vcpu)
>>>>> as well as from kvm_s390_vcpu_crypto_reset_all(kvm). Calling it 
>>>>> has nothing
>>>>> to do with whether AP interpretation is supported or not as it 
>>>>> does much
>>>>> more than that, including setting up of wrapping keys and the CRYCBD.
>>>>
>>>> Sorry, still the same error I made about CPU_FEAT_AP meaning AP 
>>>> instructions in the guest
>>>> and not AP interpretation available.
>>>> Could apie be set if AP instruction are not supported?
>>>>
>>>>>
>>>>>>
>>>>>>> + vcpu->arch.sie_block->eca |= ECA_APIE;
>>>>>>> +
>>>>>>> +
>>>>>>>       if (!test_kvm_facility(vcpu->kvm, 76))
>>>>>>>           return;
>>>>>>>
>>>>>>
>>>>>
>>>>
>>>
>>
>

-- 
Pierre Morel
Linux/KVM/QEMU in Böblingen - Germany

  reply	other threads:[~2018-04-18  8:31 UTC|newest]

Thread overview: 86+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2018-04-15 21:22 [PATCH v4 00/15] s390: vfio-ap: guest dedicated crypto adapters Tony Krowiak
2018-04-15 21:22 ` [PATCH v4 01/15] s390: zcrypt: externalize AP instructions available function Tony Krowiak
2018-04-16  8:44   ` Pierre Morel
2018-04-16 12:11     ` Cornelia Huck
2018-04-17 13:31       ` Tony Krowiak
2018-04-17 16:56         ` Cornelia Huck
2018-04-17 18:14           ` Tony Krowiak
     [not found]           ` <db4245ec-0191-2c32-5c1c-12af50b944c6@linux.vnet.ibm.com>
2018-04-23  7:04             ` Cornelia Huck
2018-04-16 15:59   ` Pierre Morel
     [not found]     ` <OFF71B62BB.95581C62-ON00258272.00264957-C1258272.0026A1CA@notes.na.collabserv.com>
2018-04-17 12:44       ` Pierre Morel
2018-05-04  7:19   ` David Hildenbrand
2018-05-07 14:02     ` Tony Krowiak
2018-05-07 14:55       ` David Hildenbrand
2018-04-15 21:22 ` [PATCH v4 02/15] KVM: s390: reset crypto attributes for all vcpus Tony Krowiak
2018-04-17 11:34   ` Cornelia Huck
2018-04-17 13:47     ` Tony Krowiak
2018-04-17 14:09       ` Cornelia Huck
2018-04-17 14:29   ` Halil Pasic
2018-04-17 14:55     ` Tony Krowiak
2018-04-17 15:10       ` Cornelia Huck
2018-04-17 17:54         ` Tony Krowiak
2018-04-15 21:22 ` [PATCH v4 03/15] KVM: s390: refactor crypto initialization Tony Krowiak
2018-04-16  8:56   ` Pierre Morel
     [not found]     ` <OFE3FE11B1.8E1BDDEF-ON00258272.002AEDB1-C1258272.002B06EF@notes.na.collabserv.com>
2018-04-17 10:10       ` Cornelia Huck
2018-04-17 10:10         ` Cornelia Huck
2018-04-17 14:26         ` Tony Krowiak
2018-04-17 15:21           ` Cornelia Huck
2018-04-17 18:08             ` Tony Krowiak
2018-04-18  7:49               ` Cornelia Huck
2018-04-22 14:52                 ` Tony Krowiak
2018-04-23  7:03                   ` Cornelia Huck
2018-04-24 13:01                     ` Tony Krowiak
2018-04-24 13:13                       ` Cornelia Huck
2018-04-17 14:15     ` Tony Krowiak
2018-04-17 15:52       ` Pierre Morel
2018-04-22 21:11         ` Tony Krowiak
2018-04-17 14:30   ` Tony Krowiak
2018-04-15 21:22 ` [PATCH v4 04/15] KVM: s390: CPU model support for AP virtualization Tony Krowiak
2018-04-15 21:22 ` [PATCH v4 05/15] KVM: s390: enable/disable AP interpretive execution Tony Krowiak
2018-04-16 10:51   ` Pierre Morel
2018-04-16 11:13     ` Pierre Morel
2018-04-16 11:52       ` Halil Pasic
2018-04-17 15:12         ` Tony Krowiak
2018-04-17 15:09       ` Tony Krowiak
2018-04-17 15:02     ` Tony Krowiak
2018-04-17 16:13       ` Pierre Morel
2018-04-17 16:22         ` Tony Krowiak
2018-04-17 16:55           ` Pierre Morel
2018-04-17 18:11             ` Tony Krowiak
2018-04-18  8:31               ` Pierre Morel [this message]
2018-04-19 14:28                 ` Tony Krowiak
2018-04-17 16:34         ` Tony Krowiak
2018-04-16 11:12   ` Halil Pasic
2018-04-17 15:11     ` Tony Krowiak
2018-04-15 21:22 ` [PATCH v4 06/15] s390: vfio-ap: base implementation of VFIO AP device driver Tony Krowiak
2018-04-15 21:22 ` [PATCH v4 07/15] s390: vfio-ap: register matrix device with VFIO mdev framework Tony Krowiak
2018-04-15 21:22 ` [PATCH v4 08/15] KVM: s390: interfaces to (de)configure guest's AP matrix Tony Krowiak
2018-04-16  5:04   ` kbuild test robot
2018-04-16  5:04     ` kbuild test robot
2018-04-23 13:46   ` Pierre Morel
2018-04-25 16:21     ` Tony Krowiak
2018-05-02 14:57       ` Pierre Morel
2018-05-03 14:41         ` Tony Krowiak
2018-05-03 16:01           ` Pierre Morel
2018-05-07 14:14             ` Tony Krowiak
2018-04-15 21:22 ` [PATCH v4 09/15] s390: vfio-ap: sysfs interfaces to configure adapters Tony Krowiak
2018-04-15 21:22 ` [PATCH v4 10/15] s390: vfio-ap: sysfs interfaces to configure domains Tony Krowiak
2018-04-15 21:22 ` [PATCH v4 11/15] s390: vfio-ap: sysfs interfaces to configure control domains Tony Krowiak
2018-04-15 21:22 ` [PATCH v4 12/15] s390: vfio-ap: sysfs interface to view matrix mdev matrix Tony Krowiak
2018-04-15 21:22 ` [PATCH v4 13/15] KVM: s390: configure the guest's AP devices Tony Krowiak
2018-04-16 13:05   ` Pierre Morel
2018-04-16 14:51     ` Halil Pasic
2018-04-17 16:12       ` Tony Krowiak
2018-04-17 16:08     ` Tony Krowiak
2018-04-17 16:18       ` Pierre Morel
2018-04-17 16:36         ` Tony Krowiak
2018-04-18 11:56   ` Pierre Morel
2018-04-22 14:54     ` Tony Krowiak
2018-04-15 21:22 ` [PATCH v4 14/15] s390: vfio-ap: implement VFIO_DEVICE_GET_INFO ioctl Tony Krowiak
2018-04-15 21:22 ` [PATCH v4 15/15] s390: doc: detailed specifications for AP virtualization Tony Krowiak
2018-04-16 13:13   ` Pierre Morel
2018-04-16 13:53     ` Cornelia Huck
2018-04-17 16:16       ` Tony Krowiak
2018-04-17 16:14     ` Tony Krowiak
2018-04-17 16:25       ` Pierre Morel
2018-04-17 16:37         ` Tony Krowiak

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=faef5768-8eaa-a5c5-f2d5-10a0a67c2aa0@linux.vnet.ibm.com \
    --to=pmorel@linux.vnet.ibm.com \
    --cc=akrowiak@linux.vnet.ibm.com \
    --cc=alex.williamson@redhat.com \
    --cc=alifm@linux.vnet.ibm.com \
    --cc=berrange@redhat.com \
    --cc=bjsdjshi@linux.vnet.ibm.com \
    --cc=borntraeger@de.ibm.com \
    --cc=buendgen@de.ibm.com \
    --cc=cohuck@redhat.com \
    --cc=fiuczy@linux.vnet.ibm.com \
    --cc=freude@de.ibm.com \
    --cc=heiko.carstens@de.ibm.com \
    --cc=jjherne@linux.vnet.ibm.com \
    --cc=kvm@vger.kernel.org \
    --cc=kwankhede@nvidia.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-s390@vger.kernel.org \
    --cc=mjrosato@linux.vnet.ibm.com \
    --cc=pasic@linux.vnet.ibm.com \
    --cc=pbonzini@redhat.com \
    --cc=schwidefsky@de.ibm.com \
    --cc=thuth@redhat.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.