[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [Qemu-devel] [PATCH v2 3/5] xenfb: Add option to use a grant ref for
From: |
Stefano Stabellini |
Subject: |
Re: [Qemu-devel] [PATCH v2 3/5] xenfb: Add option to use a grant ref for shared page |
Date: |
Fri, 26 Sep 2014 16:17:08 +0100 |
User-agent: |
Alpine 2.02 (DEB 1266 2009-07-14) |
On Wed, 17 Sep 2014, Owen smith wrote:
> Adds "page-gref" to the frontend location to specify the grant
> reference of the shared page. Adds the DEVOPS_FLAG_NEED_GNTDEV to
> both vfb and vkbd device flags. "page-ref" is checked first to
> avoid breaking existing frontends.
>
> "page-gref"
> Value: <uint32_t>
> Grant reference to use to map the shared ring. Only used if
> "page-ref" is not set.
>
> Signed-off-by: Owen smith <address@hidden>
As Ian pointed out, the docs need to be updated before I am going to
push this change upstream.
Aside from that
Acked-by: Stefano Stabellini <address@hidden>
> hw/display/xenfb.c | 44 ++++++++++++++++++++++++++++++++++----------
> 1 file changed, 34 insertions(+), 10 deletions(-)
>
> diff --git a/hw/display/xenfb.c b/hw/display/xenfb.c
> index 69471e9..829036f 100644
> --- a/hw/display/xenfb.c
> +++ b/hw/display/xenfb.c
> @@ -54,6 +54,7 @@
> struct common {
> struct XenDevice xendev; /* must be first */
> void *page;
> + int page_gref;
> QemuConsole *con;
> };
>
> @@ -96,22 +97,38 @@ static int common_bind(struct common *c)
> {
> uint64_t mfn;
>
> - if (xenstore_read_fe_uint64(&c->xendev, "page-ref", &mfn) == -1)
> - return -1;
> - assert(mfn == (xen_pfn_t)mfn);
> + if (xenstore_read_fe_uint64(&c->xendev, "page-ref", &mfn) == -1) {
> + if (xenstore_read_fe_int(&c->xendev, "page-gref", &c->page_gref) ==
> -1) {
> + return -1;
> + }
> + }
>
> if (xenstore_read_fe_int(&c->xendev, "event-channel",
> &c->xendev.remote_port) == -1)
> return -1;
>
> - c->page = xc_map_foreign_range(xen_xc, c->xendev.dom,
> - XC_PAGE_SIZE,
> - PROT_READ | PROT_WRITE, mfn);
> + if (c->page_gref) {
> + c->page = xc_gnttab_map_grant_ref(c->xendev.gnttabdev,
> + c->xendev.dom, c->page_gref,
> + PROT_READ | PROT_WRITE);
> + } else {
> + assert(mfn == (xen_pfn_t)mfn);
> + c->page = xc_map_foreign_range(xen_xc, c->xendev.dom,
> + XC_PAGE_SIZE,
> + PROT_READ | PROT_WRITE, mfn);
> + }
> if (c->page == NULL)
> return -1;
>
> xen_be_bind_evtchn(&c->xendev);
> - xen_be_printf(&c->xendev, 1, "ring mfn %"PRIx64", remote-port %d,
> local-port %d\n",
> - mfn, c->xendev.remote_port, c->xendev.local_port);
> + if (c->page_gref) {
> + xen_be_printf(&c->xendev, 1,
> + "ring gref %d, remote-port %d, local-port %d\n",
> + c->page_gref, c->xendev.remote_port,
> c->xendev.local_port);
> + } else {
> + xen_be_printf(&c->xendev, 1,
> + "ring mfn %"PRIx64", remote-port %d, local-port %d\n",
> + mfn, c->xendev.remote_port, c->xendev.local_port);
> + }
>
> return 0;
> }
> @@ -120,8 +137,13 @@ static void common_unbind(struct common *c)
> {
> xen_be_unbind_evtchn(&c->xendev);
> if (c->page) {
> - munmap(c->page, XC_PAGE_SIZE);
> - c->page = NULL;
> + if (c->page_gref) {
> + xc_gnttab_munmap(c->xendev.gnttabdev, c->page, 1);
> + } else {
> + munmap(c->page, XC_PAGE_SIZE);
> + }
> + c->page = NULL;
> + c->page_gref = 0;
> }
> }
>
> @@ -954,6 +976,7 @@ static void fb_event(struct XenDevice *xendev)
>
> struct XenDevOps xen_kbdmouse_ops = {
> .size = sizeof(struct XenInput),
> + .flags = DEVOPS_FLAG_NEED_GNTDEV,
> .init = input_init,
> .initialise = input_initialise,
> .connected = input_connected,
> @@ -963,6 +986,7 @@ struct XenDevOps xen_kbdmouse_ops = {
>
> struct XenDevOps xen_framebuffer_ops = {
> .size = sizeof(struct XenFB),
> + .flags = DEVOPS_FLAG_NEED_GNTDEV,
> .init = fb_init,
> .initialise = fb_initialise,
> .disconnect = fb_disconnect,
> --
> 2.1.0
>
- [Qemu-devel] [PATCH v2 0/5] xenfb: Add support for Windows PV frontend, Owen smith, 2014/09/17
- [Qemu-devel] [PATCH v2 2/5] xenfb: Activate mouse event handler, Owen smith, 2014/09/17
- [Qemu-devel] [PATCH v2 1/5] xenfb: Unregister keyboard event handler correctly, Owen smith, 2014/09/17
- [Qemu-devel] [PATCH v2 3/5] xenfb: Add option to use a grant ref for shared page, Owen smith, 2014/09/17
- [Qemu-devel] [PATCH v2 4/5] xenfb: Add "feature-no-abs-rescale", Owen smith, 2014/09/17
- [Qemu-devel] [PATCH v2 5/5] xenfb: Add "feature-no-console", Owen smith, 2014/09/17