From: Cornelia Huck <cohuck@redhat.com>
To: Pierre Morel <pmorel@linux.ibm.com>
Cc: borntraeger@de.ibm.com, alex.williamson@redhat.com,
linux-kernel@vger.kernel.org, linux-s390@vger.kernel.org,
kvm@vger.kernel.org, frankja@linux.ibm.com,
akrowiak@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
Subject: Re: [PATCH v5 1/7] s390: ap: kvm: add PQAP interception for AQIC
Date: Fri, 15 Mar 2019 11:20:32 +0100 [thread overview]
Message-ID: <20190315112032.13b259c2.cohuck@redhat.com> (raw)
In-Reply-To: <1552493104-30510-2-git-send-email-pmorel@linux.ibm.com>
On Wed, 13 Mar 2019 17:04:58 +0100
Pierre Morel <pmorel@linux.ibm.com> wrote:
> +/*
> + * handle_pqap: Handling pqap interception
> + * @vcpu: the vcpu having issue the pqap instruction
> + *
> + * We now support PQAP/AQIC instructions and we need to correctly
> + * answer the guest even if no dedicated driver's hook is available.
> + *
> + * The intercepting code calls a dedicated callback for this instruction
> + * if a driver did register one in the CRYPTO satellite of the
> + * SIE block.
> + *
> + * For PQAP/AQIC instructions only, verify privilege and specifications.
> + *
> + * If no callback available, the queues are not available, return this to
> + * the caller.
> + * Else return the value returned by the callback.
> + */
> +static int handle_pqap(struct kvm_vcpu *vcpu)
> +{
> + uint8_t fc;
> + struct ap_queue_status status = {};
> + int ret;
> + /* Verify that the AP instruction are available */
> + if (!ap_instructions_available())
> + return -EOPNOTSUPP;
> + /* Verify that the guest is allowed to use AP instructions */
> + if (!(vcpu->arch.sie_block->eca & ECA_APIE))
> + return -EOPNOTSUPP;
> + /* Verify that the function code is AQIC */
> + fc = vcpu->run->s.regs.gprs[0] >> 24;
> + /* We do not want to change the behavior we had before this patch*/
> + if (fc != 0x03)
> + return -EOPNOTSUPP;
> +
> + /* PQAP instructions are allowed for guest kernel only */
> + if (vcpu->arch.sie_block->gpsw.mask & PSW_MASK_PSTATE)
> + return kvm_s390_inject_program_int(vcpu, PGM_PRIVILEGED_OP);
> + /* AQIC instruction is allowed only if facility 65 is available */
> + if (!test_kvm_facility(vcpu->kvm, 65))
> + return kvm_s390_inject_program_int(vcpu, PGM_SPECIFICATION);
> + /* Verify that the hook callback is registered and call it */
> + if (vcpu->kvm->arch.crypto.pqap_hook) {
> + if (!try_module_get(vcpu->kvm->arch.crypto.pqap_hook->owner))
> + return -EOPNOTSUPP;
> + ret = vcpu->kvm->arch.crypto.pqap_hook->hook(vcpu);
> + module_put(vcpu->kvm->arch.crypto.pqap_hook->owner);
> + return ret;
> + }
> + /*
> + * It is the duty of the vfio_driver to register a hook
> + * If it does not and we get an exception on AQIC we must
> + * guess that there is no vfio_ap_driver at all and no one
> + * to handle the guests's CRYCB and the CRYCB is empty.
> + */
> + status.response_code = 0x01;
I'm still confused here, sorry. From previous discussions I recall that
this indicates "no crypto device" (please correct me if I'm wrong.)
Before this patch, we had:
- guest issues PQAP/AQIC -> drop to userspace
With a correct implementation, we get:
- guest issues PQAP/AQIC -> callback does what needs to be done
With an incorrect implementation (no callback), we get:
- guest issues PQAP/AQIC -> guest gets response code 0x01
Why not drop to userspace in that case?
> + memcpy(&vcpu->run->s.regs.gprs[1], &status, sizeof(status));
> + return 0;
> +}
> +
next prev parent reply other threads:[~2019-03-15 10:20 UTC|newest]
Thread overview: 30+ messages / expand[flat|nested] mbox.gz Atom feed top
2019-03-13 16:04 [PATCH v5 0/7] vfio: ap: AP Queue Interrupt Control Pierre Morel
2019-03-13 16:04 ` [PATCH v5 1/7] s390: ap: kvm: add PQAP interception for AQIC Pierre Morel
2019-03-15 10:20 ` Cornelia Huck [this message]
2019-03-15 13:26 ` Pierre Morel
2019-03-15 13:41 ` Cornelia Huck
2019-03-15 13:44 ` Pierre Morel
2019-03-15 14:10 ` Pierre Morel
2019-03-15 17:43 ` Halil Pasic
2019-03-19 9:55 ` Pierre Morel
2019-03-15 17:28 ` Halil Pasic
2019-03-19 10:01 ` Pierre Morel
2019-03-19 14:54 ` Halil Pasic
2019-03-19 17:07 ` Pierre Morel
2019-03-21 14:05 ` Pierre Morel
2019-03-13 16:04 ` [PATCH v5 2/7] s390: ap: new vfio_ap_queue structure Pierre Morel
2019-03-15 10:33 ` Cornelia Huck
2019-03-15 10:33 ` Cornelia Huck
2019-03-15 13:29 ` Pierre Morel
2019-03-13 16:05 ` [PATCH v5 3/7] vfio: ap: register IOMMU VFIO notifier Pierre Morel
2019-03-13 16:05 ` [PATCH v5 4/7] s390: ap: setup relation betwen KVM and mediated device Pierre Morel
2019-03-15 18:15 ` Halil Pasic
2019-03-19 9:38 ` Pierre Morel
2019-03-19 11:54 ` Halil Pasic
2019-03-19 14:23 ` Pierre Morel
2019-03-19 14:47 ` Pierre Morel
2019-03-19 15:27 ` Halil Pasic
2019-03-19 16:48 ` Pierre Morel
2019-03-13 16:05 ` [PATCH v5 5/7] s390: ap: implement PAPQ AQIC interception in kernel Pierre Morel
2019-03-13 16:05 ` [PATCH v5 6/7] s390: ap: Cleanup on removing the AP device Pierre Morel
2019-03-13 16:05 ` [PATCH v5 7/7] s390: ap: kvm: Enable PQAP/AQIC facility for the guest Pierre Morel
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=20190315112032.13b259c2.cohuck@redhat.com \
--to=cohuck@redhat.com \
--cc=akrowiak@linux.ibm.com \
--cc=alex.williamson@redhat.com \
--cc=borntraeger@de.ibm.com \
--cc=david@redhat.com \
--cc=frankja@linux.ibm.com \
--cc=freude@linux.ibm.com \
--cc=heiko.carstens@de.ibm.com \
--cc=kvm@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-s390@vger.kernel.org \
--cc=mimu@linux.ibm.com \
--cc=pasic@linux.ibm.com \
--cc=pmorel@linux.ibm.com \
--cc=schwidefsky@de.ibm.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.