From: Cornelia Huck <cohuck@redhat.com>
To: Halil Pasic <pasic@linux.ibm.com>
Cc: kvm@vger.kernel.org, linux-s390@vger.kernel.org,
Martin Schwidefsky <schwidefsky@de.ibm.com>,
Sebastian Ott <sebott@linux.ibm.com>,
virtualization@lists.linux-foundation.org,
Christian Borntraeger <borntraeger@de.ibm.com>,
Viktor Mihajlovski <mihajlov@linux.ibm.com>,
Vasily Gorbik <gor@linux.ibm.com>,
Janosch Frank <frankja@linux.ibm.com>,
Claudio Imbrenda <imbrenda@linux.ibm.com>,
Farhan Ali <alifm@linux.ibm.com>,
Eric Farman <farman@linux.ibm.com>
Subject: Re: [RFC PATCH 05/12] s390/cio: add protected virtualization support to cio
Date: Tue, 9 Apr 2019 19:55:48 +0200 [thread overview]
Message-ID: <20190409195548.6dea6e40.cohuck@redhat.com> (raw)
In-Reply-To: <20190404231622.52531-6-pasic@linux.ibm.com>
On Fri, 5 Apr 2019 01:16:15 +0200
Halil Pasic <pasic@linux.ibm.com> wrote:
> Virtio-ccw relies on cio mechanisms for bootstrapping the ccw device.
Well, a ccw device is, by definition, using cio mechanisms ;)
Better say: "As virtio-ccw devices are channel devices, we need to use
the dma area for any communication with the hypervisor."
Or something like that.
> Thus we need to make sure any memory that is used for communication with
> the hypervisor is shared.
In this context, does 'hypervisor' always mean 'QEMU/KVM'? If Other
Hypervisors implement protected virtualization, we probably need to
make sure that all common I/O layer control blocks are in the dma area
(including e.g. QDIO), not just what virtio-ccw devices use.
>
> Signed-off-by: Halil Pasic <pasic@linux.ibm.com>
> ---
> drivers/s390/cio/ccwreq.c | 8 +++----
> drivers/s390/cio/device.c | 46 +++++++++++++++++++++++++++++++---------
> drivers/s390/cio/device_fsm.c | 40 +++++++++++++++++-----------------
> drivers/s390/cio/device_id.c | 18 ++++++++--------
> drivers/s390/cio/device_ops.c | 4 ++--
> drivers/s390/cio/device_pgid.c | 20 ++++++++---------
> drivers/s390/cio/device_status.c | 24 ++++++++++-----------
> drivers/s390/cio/io_sch.h | 19 ++++++++++++-----
> 8 files changed, 107 insertions(+), 72 deletions(-)
>
(...)
(just looking at which fields are moved for now)
> diff --git a/drivers/s390/cio/io_sch.h b/drivers/s390/cio/io_sch.h
> index 90e4e3a7841b..fc3220fede0f 100644
> --- a/drivers/s390/cio/io_sch.h
> +++ b/drivers/s390/cio/io_sch.h
> @@ -9,15 +9,20 @@
> #include "css.h"
> #include "orb.h"
>
> +
> +struct io_subchannel_dma_area {
> + struct ccw1 sense_ccw; /* static ccw for sense command */
The ccw makes sense.
> +};
> +
> struct io_subchannel_private {
> union orb orb; /* operation request block */
> - struct ccw1 sense_ccw; /* static ccw for sense command */
> struct ccw_device *cdev;/* pointer to the child ccw device */
> struct {
> unsigned int suspend:1; /* allow suspend */
> unsigned int prefetch:1;/* deny prefetch */
> unsigned int inter:1; /* suppress intermediate interrupts */
> } __packed options;
> + struct io_subchannel_dma_area *dma_area;
> } __aligned(8);
>
> #define to_io_private(n) ((struct io_subchannel_private *) \
> @@ -115,6 +120,13 @@ enum cdev_todo {
> #define FAKE_CMD_IRB 1
> #define FAKE_TM_IRB 2
>
> +struct ccw_device_dma_area {
> + struct senseid senseid; /* SenseID info */
> + struct ccw1 iccws[2]; /* ccws for SNID/SID/SPGID commands */
> + struct irb irb; /* device status */
> + struct pgid pgid[8]; /* path group IDs per chpid*/
Again, ccws, and blocks that will be written by the hypervisor, which
makes sense as well.
> +};
> +
> struct ccw_device_private {
> struct ccw_device *cdev;
> struct subchannel *sch;
> @@ -156,11 +168,7 @@ struct ccw_device_private {
> } __attribute__((packed)) flags;
> unsigned long intparm; /* user interruption parameter */
> struct qdio_irq *qdio_data;
> - struct irb irb; /* device status */
> int async_kill_io_rc;
> - struct senseid senseid; /* SenseID info */
> - struct pgid pgid[8]; /* path group IDs per chpid*/
> - struct ccw1 iccws[2]; /* ccws for SNID/SID/SPGID commands */
> struct work_struct todo_work;
> enum cdev_todo todo;
> wait_queue_head_t wait_q;
> @@ -169,6 +177,7 @@ struct ccw_device_private {
> struct list_head cmb_list; /* list of measured devices */
> u64 cmb_start_time; /* clock value of cmb reset */
> void *cmb_wait; /* deferred cmb enable/disable */
> + struct ccw_device_dma_area *dma_area;
> enum interruption_class int_class;
> };
>
So, this leaves some things I'm not sure about, especially as I do not
know the architecture of this new feature.
- This applies only to asynchronously handled things, it seems? So
things like control blocks modified by stsch/msch/etc does not need
special treatment?
- What about channel measurements? Or are they not supported?
- What about CHSCs? Or would only asynchronous commands (which we
currently don't implement in QEMU) need special treatment?
WARNING: multiple messages have this Message-ID (diff)
From: Cornelia Huck <cohuck@redhat.com>
To: Halil Pasic <pasic@linux.ibm.com>
Cc: Vasily Gorbik <gor@linux.ibm.com>,
linux-s390@vger.kernel.org, Eric Farman <farman@linux.ibm.com>,
Claudio Imbrenda <imbrenda@linux.ibm.com>,
kvm@vger.kernel.org, Sebastian Ott <sebott@linux.ibm.com>,
Farhan Ali <alifm@linux.ibm.com>,
virtualization@lists.linux-foundation.org,
Martin Schwidefsky <schwidefsky@de.ibm.com>,
Viktor Mihajlovski <mihajlov@linux.ibm.com>,
Janosch Frank <frankja@linux.ibm.com>
Subject: Re: [RFC PATCH 05/12] s390/cio: add protected virtualization support to cio
Date: Tue, 9 Apr 2019 19:55:48 +0200 [thread overview]
Message-ID: <20190409195548.6dea6e40.cohuck@redhat.com> (raw)
In-Reply-To: <20190404231622.52531-6-pasic@linux.ibm.com>
On Fri, 5 Apr 2019 01:16:15 +0200
Halil Pasic <pasic@linux.ibm.com> wrote:
> Virtio-ccw relies on cio mechanisms for bootstrapping the ccw device.
Well, a ccw device is, by definition, using cio mechanisms ;)
Better say: "As virtio-ccw devices are channel devices, we need to use
the dma area for any communication with the hypervisor."
Or something like that.
> Thus we need to make sure any memory that is used for communication with
> the hypervisor is shared.
In this context, does 'hypervisor' always mean 'QEMU/KVM'? If Other
Hypervisors implement protected virtualization, we probably need to
make sure that all common I/O layer control blocks are in the dma area
(including e.g. QDIO), not just what virtio-ccw devices use.
>
> Signed-off-by: Halil Pasic <pasic@linux.ibm.com>
> ---
> drivers/s390/cio/ccwreq.c | 8 +++----
> drivers/s390/cio/device.c | 46 +++++++++++++++++++++++++++++++---------
> drivers/s390/cio/device_fsm.c | 40 +++++++++++++++++-----------------
> drivers/s390/cio/device_id.c | 18 ++++++++--------
> drivers/s390/cio/device_ops.c | 4 ++--
> drivers/s390/cio/device_pgid.c | 20 ++++++++---------
> drivers/s390/cio/device_status.c | 24 ++++++++++-----------
> drivers/s390/cio/io_sch.h | 19 ++++++++++++-----
> 8 files changed, 107 insertions(+), 72 deletions(-)
>
(...)
(just looking at which fields are moved for now)
> diff --git a/drivers/s390/cio/io_sch.h b/drivers/s390/cio/io_sch.h
> index 90e4e3a7841b..fc3220fede0f 100644
> --- a/drivers/s390/cio/io_sch.h
> +++ b/drivers/s390/cio/io_sch.h
> @@ -9,15 +9,20 @@
> #include "css.h"
> #include "orb.h"
>
> +
> +struct io_subchannel_dma_area {
> + struct ccw1 sense_ccw; /* static ccw for sense command */
The ccw makes sense.
> +};
> +
> struct io_subchannel_private {
> union orb orb; /* operation request block */
> - struct ccw1 sense_ccw; /* static ccw for sense command */
> struct ccw_device *cdev;/* pointer to the child ccw device */
> struct {
> unsigned int suspend:1; /* allow suspend */
> unsigned int prefetch:1;/* deny prefetch */
> unsigned int inter:1; /* suppress intermediate interrupts */
> } __packed options;
> + struct io_subchannel_dma_area *dma_area;
> } __aligned(8);
>
> #define to_io_private(n) ((struct io_subchannel_private *) \
> @@ -115,6 +120,13 @@ enum cdev_todo {
> #define FAKE_CMD_IRB 1
> #define FAKE_TM_IRB 2
>
> +struct ccw_device_dma_area {
> + struct senseid senseid; /* SenseID info */
> + struct ccw1 iccws[2]; /* ccws for SNID/SID/SPGID commands */
> + struct irb irb; /* device status */
> + struct pgid pgid[8]; /* path group IDs per chpid*/
Again, ccws, and blocks that will be written by the hypervisor, which
makes sense as well.
> +};
> +
> struct ccw_device_private {
> struct ccw_device *cdev;
> struct subchannel *sch;
> @@ -156,11 +168,7 @@ struct ccw_device_private {
> } __attribute__((packed)) flags;
> unsigned long intparm; /* user interruption parameter */
> struct qdio_irq *qdio_data;
> - struct irb irb; /* device status */
> int async_kill_io_rc;
> - struct senseid senseid; /* SenseID info */
> - struct pgid pgid[8]; /* path group IDs per chpid*/
> - struct ccw1 iccws[2]; /* ccws for SNID/SID/SPGID commands */
> struct work_struct todo_work;
> enum cdev_todo todo;
> wait_queue_head_t wait_q;
> @@ -169,6 +177,7 @@ struct ccw_device_private {
> struct list_head cmb_list; /* list of measured devices */
> u64 cmb_start_time; /* clock value of cmb reset */
> void *cmb_wait; /* deferred cmb enable/disable */
> + struct ccw_device_dma_area *dma_area;
> enum interruption_class int_class;
> };
>
So, this leaves some things I'm not sure about, especially as I do not
know the architecture of this new feature.
- This applies only to asynchronously handled things, it seems? So
things like control blocks modified by stsch/msch/etc does not need
special treatment?
- What about channel measurements? Or are they not supported?
- What about CHSCs? Or would only asynchronous commands (which we
currently don't implement in QEMU) need special treatment?
next prev parent reply other threads:[~2019-04-09 17:55 UTC|newest]
Thread overview: 87+ messages / expand[flat|nested] mbox.gz Atom feed top
2019-04-04 23:16 [RFC PATCH 00/12] s390: virtio: support protected virtualization Halil Pasic
2019-04-04 23:16 ` [RFC PATCH 01/12] virtio/s390: use vring_create_virtqueue Halil Pasic
2019-04-08 11:01 ` Cornelia Huck
2019-04-08 11:01 ` Cornelia Huck
2019-04-08 12:37 ` Michael S. Tsirkin
2019-04-08 12:37 ` Michael S. Tsirkin
2019-04-08 13:20 ` Halil Pasic
2019-04-04 23:16 ` [RFC PATCH 02/12] virtio/s390: DMA support for virtio-ccw Halil Pasic
2019-04-09 9:57 ` Cornelia Huck
2019-04-09 9:57 ` Cornelia Huck
2019-04-09 11:29 ` Halil Pasic
2019-04-09 13:01 ` Cornelia Huck
2019-04-09 13:01 ` Cornelia Huck
2019-04-09 13:23 ` Halil Pasic
2019-04-09 15:47 ` Cornelia Huck
2019-04-09 15:47 ` Cornelia Huck
2019-04-04 23:16 ` [RFC PATCH 03/12] s390/mm: force swiotlb for protected virtualization Halil Pasic
2019-04-09 10:16 ` Cornelia Huck
2019-04-09 10:16 ` Cornelia Huck
2019-04-09 10:54 ` Halil Pasic
2019-04-09 17:18 ` Cornelia Huck
2019-04-09 17:18 ` Cornelia Huck
2019-04-09 12:22 ` Christoph Hellwig
2019-04-09 12:22 ` Christoph Hellwig
2019-04-09 12:39 ` Halil Pasic
2019-04-04 23:16 ` [RFC PATCH 04/12] s390/cio: introduce cio DMA pool Halil Pasic
2019-04-09 10:44 ` Cornelia Huck
2019-04-09 10:44 ` Cornelia Huck
2019-04-09 12:11 ` Halil Pasic
2019-04-09 17:14 ` Cornelia Huck
2019-04-09 17:14 ` Cornelia Huck
2019-04-10 15:31 ` Halil Pasic
2019-04-10 16:07 ` Cornelia Huck
2019-04-10 16:07 ` Cornelia Huck
2019-04-10 16:52 ` Halil Pasic
2019-04-11 18:25 ` Sebastian Ott
2019-04-11 18:25 ` Sebastian Ott
2019-04-12 11:20 ` Halil Pasic
2019-04-12 12:12 ` Sebastian Ott
2019-04-12 12:12 ` Sebastian Ott
2019-04-12 15:30 ` Halil Pasic
2019-04-16 12:50 ` Sebastian Ott
2019-04-16 12:50 ` Sebastian Ott
2019-04-16 13:31 ` Halil Pasic
2019-04-04 23:16 ` [RFC PATCH 05/12] s390/cio: add protected virtualization support to cio Halil Pasic
2019-04-09 17:55 ` Cornelia Huck [this message]
2019-04-09 17:55 ` Cornelia Huck
2019-04-10 0:10 ` Halil Pasic
2019-04-10 8:25 ` Cornelia Huck
2019-04-10 8:25 ` Cornelia Huck
2019-04-10 13:02 ` Halil Pasic
2019-04-10 16:16 ` Cornelia Huck
2019-04-10 16:16 ` Cornelia Huck
2019-04-11 14:15 ` Sebastian Ott
2019-04-11 14:15 ` Sebastian Ott
2019-04-12 11:29 ` Halil Pasic
2019-04-04 23:16 ` [RFC PATCH 06/12] s390/airq: use DMA memory for adapter interrupts Halil Pasic
2019-04-04 23:16 ` [RFC PATCH 07/12] virtio/s390: use DMA memory for ccw I/O Halil Pasic
2019-04-10 8:42 ` Cornelia Huck
2019-04-10 8:42 ` Cornelia Huck
2019-04-10 14:42 ` Halil Pasic
2019-04-10 16:21 ` Cornelia Huck
2019-04-10 16:21 ` Cornelia Huck
2019-04-04 23:16 ` [RFC PATCH 08/12] virtio/s390: add indirection to indicators access Halil Pasic
2019-04-04 23:16 ` [RFC PATCH 09/12] virtio/s390: use DMA memory for notifiers Halil Pasic
2019-04-04 23:16 ` [RFC PATCH 10/12] virtio/s390: consolidate DMA allocations Halil Pasic
2019-04-10 8:46 ` Cornelia Huck
2019-04-10 8:46 ` Cornelia Huck
2019-04-10 15:12 ` Halil Pasic
2019-04-10 16:36 ` Cornelia Huck
2019-04-10 16:36 ` Cornelia Huck
2019-04-10 17:48 ` Halil Pasic
2019-04-11 9:24 ` Cornelia Huck
2019-04-11 9:24 ` Cornelia Huck
2019-04-11 10:10 ` Halil Pasic
2019-04-04 23:16 ` [RFC PATCH 11/12] virtio/s390: use the cio DMA pool Halil Pasic
2019-04-04 23:16 ` [RFC PATCH 12/12] virtio/s390: make airq summary indicators DMA Halil Pasic
2019-04-10 9:20 ` [RFC PATCH 00/12] s390: virtio: support protected virtualization Cornelia Huck
2019-04-10 9:20 ` Cornelia Huck
2019-04-10 15:57 ` Halil Pasic
2019-04-10 16:24 ` Cornelia Huck
2019-04-10 16:24 ` Cornelia Huck
2019-04-12 13:47 ` David Hildenbrand
2019-04-12 13:47 ` David Hildenbrand
2019-04-16 11:10 ` Halil Pasic
2019-04-16 11:50 ` David Hildenbrand
2019-04-16 11:50 ` David Hildenbrand
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=20190409195548.6dea6e40.cohuck@redhat.com \
--to=cohuck@redhat.com \
--cc=alifm@linux.ibm.com \
--cc=borntraeger@de.ibm.com \
--cc=farman@linux.ibm.com \
--cc=frankja@linux.ibm.com \
--cc=gor@linux.ibm.com \
--cc=imbrenda@linux.ibm.com \
--cc=kvm@vger.kernel.org \
--cc=linux-s390@vger.kernel.org \
--cc=mihajlov@linux.ibm.com \
--cc=pasic@linux.ibm.com \
--cc=schwidefsky@de.ibm.com \
--cc=sebott@linux.ibm.com \
--cc=virtualization@lists.linux-foundation.org \
/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.