[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [PATCH] Re: [Xen-devel] Re: [PATCH 2/2] PV framebuffer



Atsushi SAKAI <sakaia@xxxxxxxxxxxxxx> writes:

> Hi, Markus
>
>  This is a patch for work PV frame buffer on IA64.
> We also prepare the patch for FC6 and RHEL5B2 and its confirmed working 
> on IA64 and x86.
>
> In this patch code, 
> #ifdef __ia64__ exists, but it does not need.
> The purpose is avoid the unnecessary error handling for x86.

Do you mean your __ia64__ code works fine everywhere?

> Signed-off-by: Isaku Yamahata <yamahata@xxxxxxxxxxxxx>
> Signed-off-by: Masami Watanabe <masami.watanabe@xxxxxxxxxxxxxx>
> Signed-off-by: Atsushi SAKAI <sakaia@xxxxxxxxxxxxxx>
>
>
>>From seeing your patches policy,
> We do memory address translation in Dom0 application side.

Looks like this is support for shadow translate mode guests.  My
current code has that, but I didn't catch all places.  Cool.

> Thanks
> Atsushi SAKAI
[...]
> diff -r 92fddc5af648 tools/xenfb/xenfb.c
> --- a/tools/xenfb/xenfb.c     Wed Nov 22 20:34:45 2006 +0900
> +++ b/tools/xenfb/xenfb.c     Wed Nov 22 20:36:35 2006 +0900
> @@ -344,6 +344,9 @@ bool xenfb_attach_dom(struct xenfb *xenf
>          int serrno;
>          int fbdev_evtchn, kbd_evtchn;
>       unsigned long fbdev_mfn, kbd_mfn;
> +#ifdef __ia64__
> +     xen_pfn_t *page_array;
> +#endif
>  
>       if (xenfb->domid != -1) {
>               xenfb_detach_dom(xenfb);
> @@ -432,16 +435,24 @@ bool xenfb_attach_dom(struct xenfb *xenf
>       if (xenfb->kbd_port == -1) 
>               goto error;
>  
> +#ifdef __ia64__
>       ret = xc_domain_translate_gpfn_list(xenfb->xc, domid, 1,
>                                           &fbdev_mfn, &fbdev_mfn);
>       if (ret < 0 && errno != EINVAL)
>               goto error;
> +#endif
>       xenfb->fb_info = xc_map_foreign_range(xenfb->xc, domid, XC_PAGE_SIZE,
>                                             PROT_READ | PROT_WRITE,
>                                             fbdev_mfn);
>       if (xenfb->fb_info == NULL)
>               goto error;
>  
> +#ifdef __ia64__
> +     ret = xc_domain_translate_gpfn_list(xenfb->xc, domid, 1,
> +                                         &kbd_mfn, &kbd_mfn);
> +     if (ret < 0 && errno != EINVAL)
> +             goto error;
> +#endif
>       xenfb->kbd_info = xc_map_foreign_range(xenfb->xc, domid, XC_PAGE_SIZE,
>                                              PROT_READ | PROT_WRITE,
>                                              kbd_mfn);
> @@ -466,10 +477,36 @@ bool xenfb_attach_dom(struct xenfb *xenf
>        * happens, we happily continue here, and later crash on
>        * access.
>        */
> -     fbmfns = xc_map_foreign_batch(xenfb->xc, domid, PROT_READ, 
> xenfb->fb_info->pd, n_fbdirs);
> +     
> +#ifdef __ia64__
> +     page_array = (xen_pfn_t *)malloc(n_fbdirs * sizeof(xen_pfn_t));
> +     ret = xc_domain_translate_gpfn_list(xenfb->xc, domid,
> +             n_fbdirs, xenfb->fb_info->pd, page_array);
> +     if (ret == 0) {
> +             memcpy(xenfb->fb_info->pd, page_array,
> +                     n_fbdirs * sizeof(xen_pfn_t));
> +     } else {
> +             if (ret < 0 && errno != EINVAL)
> +                     goto error;
> +     }

Stupid question: why can't you translate in place here instead of
bouncing through page_array?

> +     free(page_array);
> +#endif
> +     fbmfns = xc_map_foreign_batch(xenfb->xc, domid, PROT_READ | PROT_WRITE, 
> xenfb->fb_info->pd, n_fbdirs);
>       if (fbmfns == NULL)
>               goto error;
>  
> +#ifdef __ia64__
> +     page_array = (xen_pfn_t *)malloc(n_fbmfns * sizeof(xen_pfn_t));
> +     ret = xc_domain_translate_gpfn_list(xenfb->xc, domid,
> +             n_fbmfns, fbmfns, page_array);
> +     if (ret == 0) {
> +             memcpy(fbmfns, page_array, n_fbmfns * sizeof(xen_pfn_t));
> +     } else {
> +             if (ret < 0 && errno != EINVAL)
> +                     goto error;
> +     }
> +     free(page_array);
> +#endif
>       xenfb->fb = xc_map_foreign_batch(xenfb->xc, domid, PROT_READ | 
> PROT_WRITE, fbmfns, n_fbmfns);
>       if (xenfb->fb == NULL)
>               goto error;

_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-devel


 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.