On Thu,  6 Jun 2019 13:51:26 +0200
Halil Pasic <[email protected]> wrote:

> Before virtio-ccw could get away with not using DMA API for the pieces of
> memory it does ccw I/O with. With protected virtualization this has to
> change, since the hypervisor needs to read and sometimes also write these
> pieces of memory.
> 
> The hypervisor is supposed to poke the classic notifiers, if these are
> used, out of band with regards to ccw I/O. So these need to be allocated
> as DMA memory (which is shared memory for protected virtualization
> guests).
> 
> Let us factor out everything from struct virtio_ccw_device that needs to
> be DMA memory in a satellite that is allocated as such.
> 
> Note: The control blocks of I/O instructions do not need to be shared.
> These are marshalled by the ultravisor.
> 
> Signed-off-by: Halil Pasic <[email protected]>
> Reviewed-by: Pierre Morel <[email protected]>
> ---
>  drivers/s390/virtio/virtio_ccw.c | 171 ++++++++++++++++---------------
>  1 file changed, 90 insertions(+), 81 deletions(-)

(...)

>  static u64 virtio_ccw_get_features(struct virtio_device *vdev)
>  {
>       struct virtio_ccw_device *vcdev = to_vc_device(vdev);
>       struct virtio_feature_desc *features;
> +     struct ccw1 *ccw;
>       int ret;
>       u64 rc;
> -     struct ccw1 *ccw;

I'd probably not have included unneeded code movement here, but no need
to respin for that.

>  
> -     ccw = kzalloc(sizeof(*ccw), GFP_DMA | GFP_KERNEL);
> +     ccw = ccw_device_dma_zalloc(vcdev->cdev, sizeof(*ccw));
>       if (!ccw)
>               return 0;
>  
> -     features = kzalloc(sizeof(*features), GFP_DMA | GFP_KERNEL);
> +     features = ccw_device_dma_zalloc(vcdev->cdev, sizeof(*features));
>       if (!features) {
>               rc = 0;
>               goto out_free;

(...)

Reviewed-by: Cornelia Huck <[email protected]>
_______________________________________________
Virtualization mailing list
[email protected]
https://lists.linuxfoundation.org/mailman/listinfo/virtualization

Reply via email to