virtualization.lists.linux-foundation.org archive mirror
 help / color / mirror / Atom feed
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?

  parent reply	other threads:[~2019-04-09 17:55 UTC|newest]

Thread overview: 27+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
     [not found] <20190404231622.52531-1-pasic@linux.ibm.com>
     [not found] ` <20190404231622.52531-2-pasic@linux.ibm.com>
2019-04-08 11:01   ` [RFC PATCH 01/12] virtio/s390: use vring_create_virtqueue Cornelia Huck
2019-04-08 12:37     ` Michael S. Tsirkin
     [not found] ` <20190404231622.52531-3-pasic@linux.ibm.com>
2019-04-09  9:57   ` [RFC PATCH 02/12] virtio/s390: DMA support for virtio-ccw Cornelia Huck
     [not found]     ` <20190409132927.5df3bc50@oc2783563651>
2019-04-09 13:01       ` Cornelia Huck
     [not found]         ` <20190409152313.0296e8f1@oc2783563651>
2019-04-09 15:47           ` Cornelia Huck
     [not found] ` <20190404231622.52531-4-pasic@linux.ibm.com>
2019-04-09 10:16   ` [RFC PATCH 03/12] s390/mm: force swiotlb for protected virtualization Cornelia Huck
     [not found]     ` <20190409125416.73713f23@oc2783563651>
2019-04-09 17:18       ` Cornelia Huck
2019-04-09 12:22   ` Christoph Hellwig
     [not found] ` <20190404231622.52531-8-pasic@linux.ibm.com>
2019-04-10  8:42   ` [RFC PATCH 07/12] virtio/s390: use DMA memory for ccw I/O Cornelia Huck
     [not found]     ` <20190410164245.53f8b26d@oc2783563651>
2019-04-10 16:21       ` Cornelia Huck
     [not found] ` <20190404231622.52531-11-pasic@linux.ibm.com>
2019-04-10  8:46   ` [RFC PATCH 10/12] virtio/s390: consolidate DMA allocations Cornelia Huck
     [not found]     ` <20190410171254.71206015@oc2783563651>
2019-04-10 16:36       ` Cornelia Huck
     [not found]         ` <20190410194849.511ecc46@oc2783563651>
2019-04-11  9:24           ` Cornelia Huck
2019-04-10  9:20 ` [RFC PATCH 00/12] s390: virtio: support protected virtualization Cornelia Huck
     [not found]   ` <20190410175750.0ed0a454@oc2783563651>
2019-04-10 16:24     ` Cornelia Huck
     [not found] ` <20190404231622.52531-6-pasic@linux.ibm.com>
2019-04-09 17:55   ` Cornelia Huck [this message]
     [not found]     ` <20190410021044.4da3e847@oc2783563651>
2019-04-10  8:25       ` [RFC PATCH 05/12] s390/cio: add protected virtualization support to cio Cornelia Huck
     [not found]         ` <20190410150225.61b86cd9@oc2783563651>
2019-04-10 16:16           ` Cornelia Huck
2019-04-11 14:15   ` Sebastian Ott
     [not found] ` <20190404231622.52531-5-pasic@linux.ibm.com>
2019-04-09 10:44   ` [RFC PATCH 04/12] s390/cio: introduce cio DMA pool Cornelia Huck
     [not found]     ` <20190409141114.7dcce94a@oc2783563651>
2019-04-09 17:14       ` Cornelia Huck
     [not found]         ` <20190410173148.067555dc@oc2783563651>
2019-04-10 16:07           ` Cornelia Huck
2019-04-11 18:25   ` Sebastian Ott
     [not found]     ` <20190412132010.3c74cb63@oc2783563651>
2019-04-12 12:12       ` Sebastian Ott
     [not found]         ` <20190412173017.04b768bb@oc2783563651>
2019-04-16 12:50           ` Sebastian Ott
2019-04-12 13:47 ` [RFC PATCH 00/12] s390: virtio: support protected virtualization David Hildenbrand
     [not found]   ` <20190416131005.6f3e05eb@oc2783563651>
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=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 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).