From: Tony Krowiak <akrowiak@linux.vnet.ibm.com>
To: linux-s390@vger.kernel.org, linux-kernel@vger.kernel.org,
kvm@vger.kernel.org
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, pmorel@linux.vnet.ibm.com,
alifm@linux.vnet.ibm.com, mjrosato@linux.vnet.ibm.com,
qemu-s390x@nongnu.org, jjherne@linux.vnet.ibm.com,
thuth@redhat.com, pasic@linux.vnet.ibm.com,
Tony Krowiak <akrowiak@linux.vnet.ibm.com>
Subject: [RFC 18/19] KVM: s390: New ioctl to configure KVM guest's AP matrix
Date: Fri, 13 Oct 2017 13:39:03 -0400 [thread overview]
Message-ID: <1507916344-3896-19-git-send-email-akrowiak@linux.vnet.ibm.com> (raw)
In-Reply-To: <1507916344-3896-1-git-send-email-akrowiak@linux.vnet.ibm.com>
Implements an ioctl to configure the adapters, usage domains
and control domains to which a KVM guest will be granted
access. The ioctl is invoked using the VFIO mediated matrix
device's file descriptor.
Guest access to AP adapters, usage domains and control domains
is controlled by three bit masks referenced from the
guest's SIE state description: The AP Mask (APM) controls
access to the AP adapters; the AP Queue Mask (AQM) controls
access to the AP usage domains; and the AP Domain Mask (ADM)
controls access to the AP control domains. Each bit
in the APM represents an adapter, from left to right,
starting with adapter 0. Each bit in the AQM represents
a usage domain, from left to right, starting with domain 0.
Each bit in the ADM represents a control domain, from left
to right, starting with domain 0.
The APM, AQM and ADM bit masks will be populated from the
bit masks stored in the corresponding mediated matrix device's
sysfs files. The bit masks will also be returned by the ioctl
call to the caller.
Signed-off-by: Tony Krowiak <akrowiak@linux.vnet.ibm.com>
---
drivers/s390/crypto/vfio_ap_matrix_ops.c | 68 +++++++++++++++++++++++++++++-
include/uapi/linux/vfio.h | 20 +++++++++
2 files changed, 86 insertions(+), 2 deletions(-)
diff --git a/drivers/s390/crypto/vfio_ap_matrix_ops.c b/drivers/s390/crypto/vfio_ap_matrix_ops.c
index 74ea8db..d81e3ab 100644
--- a/drivers/s390/crypto/vfio_ap_matrix_ops.c
+++ b/drivers/s390/crypto/vfio_ap_matrix_ops.c
@@ -160,8 +160,69 @@ static int ap_matrix_mdev_get_device_info(unsigned long arg)
return copy_to_user((void __user *)arg, &info, minsz);
}
-static ssize_t ap_matrix_mdev_ioctl(struct mdev_device *mdev,
- unsigned int cmd, unsigned long arg)
+static int ap_matrix_configure(struct mdev_device *mdev)
+{
+ int ret;
+ struct ap_matrix_mdev *matrix_mdev = mdev_get_drvdata(mdev);
+
+ ret = ap_config_matrix(matrix_mdev->kvm, &matrix_mdev->masks);
+ if (ret)
+ return ret;
+
+ return 0;
+}
+
+static int ap_matrix_copy_to_user(struct mdev_device *mdev,
+ struct vfio_ap_matrix_config *mcfg,
+ unsigned long arg)
+{
+ size_t i;
+ struct ap_matrix_mdev *matrix_mdev = mdev_get_drvdata(mdev);
+
+
+ for (i = 0; i < AP_MATRIX_MASK_INDICES; i++) {
+ if (i < VFIO_AP_MATRIX_MASK_INDICES) {
+ mcfg->apm[i] = matrix_mdev->masks.apm[i];
+ mcfg->aqm[i] = matrix_mdev->masks.aqm[i];
+ mcfg->adm[i] = matrix_mdev->masks.adm[i];
+ }
+ }
+
+ if (copy_to_user((void __user *)arg, &mcfg, sizeof(mcfg)))
+ return -EFAULT;
+
+ return 0;
+}
+
+static ssize_t ap_matrix_mdev_configure(struct mdev_device *mdev,
+ unsigned long arg)
+{
+ int ret;
+ unsigned long minsz;
+ struct vfio_ap_matrix_config mcfg;
+
+ minsz = offsetofend(struct vfio_ap_matrix_config, adm);
+
+ if (copy_from_user(&mcfg, (void __user *)arg, minsz))
+ return -EFAULT;
+
+ if (mcfg.argsz < minsz) {
+ pr_err("%s: Argument size %u less than min size %li",
+ VFIO_AP_MATRIX_MODULE_NAME, mcfg.argsz, minsz);
+ return -EINVAL;
+ }
+
+ ret = ap_matrix_configure(mdev);
+ if (ret)
+ return ret;
+
+ ret = ap_matrix_copy_to_user(mdev, &mcfg, arg);
+
+ return 0;
+}
+
+static long ap_matrix_mdev_ioctl(struct mdev_device *mdev,
+ unsigned int cmd, unsigned long arg)
{
int ret;
@@ -169,6 +230,9 @@ static ssize_t ap_matrix_mdev_ioctl(struct mdev_device *mdev,
case VFIO_DEVICE_GET_INFO:
ret = ap_matrix_mdev_get_device_info(arg);
break;
+ case VFIO_AP_MATRIX_CONFIGURE:
+ ret = ap_matrix_mdev_configure(mdev, arg);
+ break;
default:
pr_err("%s: ioctl command %d is not a supported command",
VFIO_AP_MATRIX_MODULE_NAME, cmd);
diff --git a/include/uapi/linux/vfio.h b/include/uapi/linux/vfio.h
index 08f1ab4..2d96c57 100644
--- a/include/uapi/linux/vfio.h
+++ b/include/uapi/linux/vfio.h
@@ -716,6 +716,26 @@ struct vfio_iommu_spapr_tce_remove {
};
#define VFIO_IOMMU_SPAPR_TCE_REMOVE _IO(VFIO_TYPE, VFIO_BASE + 20)
+/**
+ * VFIO_AP_MATRIX_CONFIGURE _IO(VFIO_TYPE, VFIO_BASE + 21
+ *
+ * Configure the AP matrix for a KVM guest.
+ */
+#define VFIO_AP_MATRIX_CONFIGURE _IO(VFIO_TYPE, VFIO_BASE + 21)
+
+#define VFIO_AP_MATRIX_MASK_INDICES 4
+#define VFIO_AP_MATTRIX_MASK_BYTES (VFIO_AP_MATRIX_MASK_INDICES * \
+ sizeof(__u64))
+#define VFIO_AP_MATRIX_MASK_BITS (VFIO_AP_MATTRIX_MASK_BYTES * 8)
+
+struct vfio_ap_matrix_config {
+ __u32 argsz;
+ __u32 flags;
+ /* out */
+ __u64 apm[VFIO_AP_MATRIX_MASK_INDICES];
+ __u64 aqm[VFIO_AP_MATRIX_MASK_INDICES];
+ __u64 adm[VFIO_AP_MATRIX_MASK_INDICES];
+};
/* ***************************************************************** */
#endif /* _UAPIVFIO_H */
--
1.7.1
next prev parent reply other threads:[~2017-10-13 17:41 UTC|newest]
Thread overview: 108+ messages / expand[flat|nested] mbox.gz Atom feed top
2017-10-13 17:38 [RFC 00/19] KVM: s390/crypto/vfio: guest dedicated crypto adapters Tony Krowiak
2017-10-13 17:38 ` [RFC 01/19] KVM: s390: SIE considerations for AP Queue virtualization Tony Krowiak
2017-11-02 11:54 ` Christian Borntraeger
2017-11-02 19:53 ` Tony Krowiak
2017-10-13 17:38 ` [RFC 02/19] KVM: s390: refactor crypto initialization Tony Krowiak
2017-11-02 12:41 ` Christian Borntraeger
2017-11-14 11:50 ` Cornelia Huck
2017-11-14 15:53 ` Tony Krowiak
2017-10-13 17:38 ` [RFC 03/19] s390/zcrypt: new AP matrix bus Tony Krowiak
2017-10-16 8:47 ` Martin Schwidefsky
2017-10-16 15:02 ` Tony Krowiak
2017-11-14 11:58 ` Cornelia Huck
2017-11-14 13:19 ` Tony Krowiak
2017-11-14 15:54 ` Tony Krowiak
2017-11-14 16:07 ` Tony Krowiak
2017-10-13 17:38 ` [RFC 04/19] s390/zcrypt: create an AP matrix device on the " Tony Krowiak
2017-10-18 16:20 ` Cornelia Huck
2017-10-18 17:54 ` Tony Krowiak
2017-10-13 17:38 ` [RFC 05/19] s390/zcrypt: base implementation of AP matrix device driver Tony Krowiak
2017-10-16 8:59 ` Martin Schwidefsky
2017-10-16 15:56 ` Tony Krowiak
2017-11-14 12:40 ` Cornelia Huck
2017-11-14 16:37 ` Tony Krowiak
2017-11-14 17:00 ` Cornelia Huck
2017-11-14 18:15 ` Tony Krowiak
2017-11-15 10:31 ` Cornelia Huck
2017-11-16 12:02 ` Pierre Morel
2017-11-16 12:35 ` Cornelia Huck
2017-11-16 14:25 ` Tony Krowiak
2017-11-16 16:47 ` Cornelia Huck
2017-11-17 21:13 ` Tony Krowiak
2017-11-20 17:15 ` Cornelia Huck
2017-11-16 14:25 ` Pierre Morel
2017-10-13 17:38 ` [RFC 06/19] s390/zcrypt: register matrix device with VFIO mediated device framework Tony Krowiak
2017-10-16 9:03 ` Martin Schwidefsky
2017-10-16 16:09 ` Tony Krowiak
2017-11-14 13:14 ` Cornelia Huck
2017-11-16 15:37 ` Tony Krowiak
2017-10-13 17:38 ` [RFC 07/19] KVM: s390: introduce AP matrix configuration interface Tony Krowiak
2017-10-16 9:10 ` Martin Schwidefsky
2017-10-16 16:26 ` Tony Krowiak
2017-11-14 13:16 ` Cornelia Huck
2017-11-16 15:41 ` Tony Krowiak
2017-10-13 17:38 ` [RFC 08/19] s390/zcrypt: support for assigning adapters to matrix mdev Tony Krowiak
2017-11-14 13:22 ` Cornelia Huck
2017-11-16 23:53 ` Tony Krowiak
2017-11-17 9:50 ` Cornelia Huck
2017-10-13 17:38 ` [RFC 09/19] s390/zcrypt: validate adapter assignment Tony Krowiak
2017-10-13 17:38 ` [RFC 10/19] s390/zcrypt: sysfs interfaces supporting AP domain assignment Tony Krowiak
2017-10-13 17:38 ` [RFC 11/19] s390/zcrypt: validate " Tony Krowiak
2017-10-13 17:38 ` [RFC 12/19] s390/zcrypt: sysfs support for control " Tony Krowiak
2017-10-13 17:38 ` [RFC 13/19] s390/zcrypt: validate " Tony Krowiak
2017-10-16 9:13 ` Martin Schwidefsky
2017-10-13 17:38 ` [RFC 14/19] KVM: s390: Connect the AP mediated matrix device to KVM Tony Krowiak
2017-10-13 17:39 ` [RFC 15/19] s390/zcrypt: introduce ioctl access to VFIO AP Matrix driver Tony Krowiak
2017-10-13 17:39 ` [RFC 16/19] KVM: s390: interface to configure KVM guest's AP matrix Tony Krowiak
2017-10-16 20:22 ` Tony Krowiak
2017-11-14 13:46 ` Cornelia Huck
2017-10-13 17:39 ` [RFC 17/19] KVM: s390: validate input to AP matrix config interface Tony Krowiak
2017-10-13 17:39 ` Tony Krowiak [this message]
2017-11-02 18:55 ` [RFC 18/19] KVM: s390: New ioctl to configure KVM guest's AP matrix Tony Krowiak
2017-10-13 17:39 ` [RFC 19/19] s390/facilities: enable AP facilities needed by guest Tony Krowiak
2017-10-16 9:25 ` Martin Schwidefsky
2017-11-02 12:08 ` Christian Borntraeger
2017-11-02 12:23 ` Halil Pasic
[not found] ` <af1bb867-f9a0-458b-b7b2-c0bb9456eb7f@linux.vnet.ibm.com>
2017-11-02 15:53 ` Christian Borntraeger
2017-11-02 18:49 ` Tony Krowiak
2017-11-03 8:47 ` Christian Borntraeger
2017-12-02 1:30 ` Tony Krowiak
2017-12-05 7:52 ` Harald Freudenberger
2017-12-05 14:04 ` Cornelia Huck
2017-12-05 14:23 ` Pierre Morel
2017-12-05 14:30 ` Cornelia Huck
2017-12-05 14:47 ` Pierre Morel
2017-12-05 15:14 ` Tony Krowiak
2017-12-05 15:01 ` Tony Krowiak
2017-12-06 9:15 ` Pierre Morel
2017-12-06 10:15 ` Cornelia Huck
2017-12-05 14:14 ` Tony Krowiak
[not found] ` <OF182217F7.6A47A64E-ON002581CD.002BCF58-C12581CD.002D4127@notes.na.collabserv.com>
2017-11-03 8:49 ` Christian Borntraeger
2017-10-16 9:27 ` [RFC 00/19] KVM: s390/crypto/vfio: guest dedicated crypto adapters Martin Schwidefsky
2017-10-16 10:06 ` Christian Borntraeger
2017-10-16 16:30 ` Tony Krowiak
2017-10-16 10:05 ` Cornelia Huck
2017-10-16 16:27 ` Tony Krowiak
2017-10-18 16:43 ` Christian Borntraeger
2017-10-29 11:11 ` Cornelia Huck
2017-10-30 8:57 ` Christian Borntraeger
2017-10-30 19:04 ` Tony Krowiak
2017-10-31 19:39 ` Tony Krowiak
2017-11-14 13:57 ` Cornelia Huck
2017-11-16 15:23 ` Tony Krowiak
2017-11-16 16:06 ` Pierre Morel
2017-11-16 17:03 ` Cornelia Huck
2017-11-16 20:25 ` Pierre Morel
2017-11-16 23:35 ` Tony Krowiak
2017-11-17 7:07 ` Pierre Morel
2017-11-17 10:07 ` Cornelia Huck
2017-11-17 20:28 ` Tony Krowiak
2017-11-20 17:13 ` Cornelia Huck
2017-11-21 16:08 ` Tony Krowiak
2017-11-22 13:47 ` Cornelia Huck
2017-11-28 0:39 ` Tony Krowiak
2017-12-05 14:06 ` Cornelia Huck
2017-12-05 15:09 ` Tony Krowiak
2017-11-16 16:49 ` Cornelia Huck
2017-11-16 23:41 ` Tony Krowiak
2017-11-17 9:49 ` Cornelia Huck
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=1507916344-3896-19-git-send-email-akrowiak@linux.vnet.ibm.com \
--to=akrowiak@linux.vnet.ibm.com \
--cc=alex.williamson@redhat.com \
--cc=alifm@linux.vnet.ibm.com \
--cc=bjsdjshi@linux.vnet.ibm.com \
--cc=borntraeger@de.ibm.com \
--cc=cohuck@redhat.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=pmorel@linux.vnet.ibm.com \
--cc=qemu-s390x@nongnu.org \
--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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).