Re: [kvm-unit-tests PATCH v5 1/3] s390x: pv: implement routine to share/unshare memory

Janosch Frank
2021-01-22T13:34:22Z

On 1/22/21 2:27 PM, Pierre Morel wrote:
> When communicating with the host we need to share part of
> the memory.
>
> Let's implement the ultravisor calls for this.

Reviewed-by: Janosch Frank <frankja@linux.ibm.com>

>
> Signed-off-by: Pierre Morel <pmorel@linux.ibm.com>
> Suggested-by: Janosch Frank <frankja@linux.ibm.com>
> Acked-by: Cornelia Huck <cohuck@redhat.com>
> Acked-by: Thomas Huth <thuth@redhat.com>
> ---
> lib/s390x/asm/uv.h | 39 +++++++++++++++++++++++++++++++++++++++
> 1 file changed, 39 insertions(+)
>
> diff --git a/lib/s390x/asm/uv.h b/lib/s390x/asm/uv.h
> index 39d2dc0..9c49184 100644
> --- a/lib/s390x/asm/uv.h
> +++ b/lib/s390x/asm/uv.h
> @@ -79,4 +79,43 @@ static inline int uv_call(unsigned long r1, unsigned long r2)
> return cc;
> }
>
> +static inline int share(unsigned long addr, u16 cmd)
> +{
> + struct uv_cb_share uvcb = {
> + .header.cmd = cmd,
> + .header.len = sizeof(uvcb),
> + .paddr = addr
> + };
> + int cc;
> +
> + cc = uv_call(0, (u64)&uvcb);
> + if (!cc && uvcb.header.rc == UVC_RC_EXECUTED)
> + return 0;
> +
> + report_info("uv_call: cmd %04x cc %d response code: %04x", cc, cmd,
> + uvcb.header.rc);
> + return -1;
> +}
> +
> +/*
> + * Guest 2 request to the Ultravisor to make a page shared with the
> + * hypervisor for IO.
> + *
> + * @addr: Real or absolute address of the page to be shared
> + */
> +static inline int uv_set_shared(unsigned long addr)
> +{
> + return share(addr, UVC_CMD_SET_SHARED_ACCESS);
> +}
> +
> +/*
> + * Guest 2 request to the Ultravisor to make a page unshared.
> + *
> + * @addr: Real or absolute address of the page to be unshared
> + */
> +static inline int uv_remove_shared(unsigned long addr)
> +{
> + return share(addr, UVC_CMD_REMOVE_SHARED_ACCESS);
> +}
> +
> #endif
>