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

[Xen-devel] [PING] [PATCH 2/2] xen: Drop DOMCTL_getmemlist and xc_get_pfn_list()



On 19/01/18 19:19, Andrew Cooper wrote:
> c/s 4ddf474e2 "tools/xen-mceinj: Pass in GPA when injecting through
> MSR_MCI_ADDR" removed the remaining user of hypercall.
>
> It has been listed as broken, deprecated and wont-fix since XSA-74, so take
> this opportunity to remove it completely.
>
> Signed-off-by: Andrew Cooper <andrew.cooper3@xxxxxxxxxx>
> ---
> CC: Jan Beulich <JBeulich@xxxxxxxx>
> CC: Ian Jackson <Ian.Jackson@xxxxxxxxxxxxx>
> CC: Wei Liu <wei.liu2@xxxxxxxxxx>
> CC: Christian Lindig <christian.lindig@xxxxxxxxxx>
> ---
>  tools/libxc/include/xenctrl.h       |  7 -----
>  tools/libxc/xc_private.c            | 27 ------------------
>  tools/ocaml/libs/xc/xenctrl.ml      |  3 --
>  tools/ocaml/libs/xc/xenctrl.mli     |  3 --
>  tools/ocaml/libs/xc/xenctrl_stubs.c | 32 ---------------------
>  xen/arch/x86/domctl.c               | 56 
> -------------------------------------
>  xen/include/public/domctl.h         |  2 +-
>  7 files changed, 1 insertion(+), 129 deletions(-)
>
> diff --git a/tools/libxc/include/xenctrl.h b/tools/libxc/include/xenctrl.h
> index ecb0312..30171a2 100644
> --- a/tools/libxc/include/xenctrl.h
> +++ b/tools/libxc/include/xenctrl.h
> @@ -1520,13 +1520,6 @@ unsigned long 
> xc_translate_foreign_address(xc_interface *xch, uint32_t dom,
>                                             int vcpu, unsigned long long 
> virt);
>  
>  
> -/**
> - * DEPRECATED.  Avoid using this, as it does not correctly account for PFNs
> - * without a backing MFN.
> - */
> -int xc_get_pfn_list(xc_interface *xch, uint32_t domid, uint64_t *pfn_buf,
> -                    unsigned long max_pfns);
> -
>  int xc_copy_to_domain_page(xc_interface *xch, uint32_t domid,
>                             unsigned long dst_pfn, const char *src_page);
>  
> diff --git a/tools/libxc/xc_private.c b/tools/libxc/xc_private.c
> index 36ead5f..fcda981 100644
> --- a/tools/libxc/xc_private.c
> +++ b/tools/libxc/xc_private.c
> @@ -387,33 +387,6 @@ int xc_machphys_mfn_list(xc_interface *xch,
>      return rc;
>  }
>  
> -int xc_get_pfn_list(xc_interface *xch,
> -                    uint32_t domid,
> -                    uint64_t *pfn_buf,
> -                    unsigned long max_pfns)
> -{
> -    DECLARE_DOMCTL;
> -    DECLARE_HYPERCALL_BOUNCE(pfn_buf, max_pfns * sizeof(*pfn_buf), 
> XC_HYPERCALL_BUFFER_BOUNCE_OUT);
> -    int ret;
> -
> -    if ( xc_hypercall_bounce_pre(xch, pfn_buf) )
> -    {
> -        PERROR("xc_get_pfn_list: pfn_buf bounce failed");
> -        return -1;
> -    }
> -
> -    domctl.cmd = XEN_DOMCTL_getmemlist;
> -    domctl.domain = domid;
> -    domctl.u.getmemlist.max_pfns = max_pfns;
> -    set_xen_guest_handle(domctl.u.getmemlist.buffer, pfn_buf);
> -
> -    ret = do_domctl(xch, &domctl);
> -
> -    xc_hypercall_bounce_post(xch, pfn_buf);
> -
> -    return (ret < 0) ? -1 : domctl.u.getmemlist.num_pfns;
> -}
> -
>  long xc_get_tot_pages(xc_interface *xch, uint32_t domid)
>  {
>      xc_dominfo_t info;
> diff --git a/tools/ocaml/libs/xc/xenctrl.ml b/tools/ocaml/libs/xc/xenctrl.ml
> index a3ba488..1a01faa 100644
> --- a/tools/ocaml/libs/xc/xenctrl.ml
> +++ b/tools/ocaml/libs/xc/xenctrl.ml
> @@ -244,9 +244,6 @@ external map_foreign_range: handle -> domid -> int
>                           -> nativeint -> Xenmmap.mmap_interface
>         = "stub_map_foreign_range"
>  
> -external domain_get_pfn_list: handle -> domid -> nativeint -> nativeint array
> -       = "stub_xc_domain_get_pfn_list"
> -
>  external domain_assign_device: handle -> domid -> (int * int * int * int) -> 
> unit
>         = "stub_xc_domain_assign_device"
>  external domain_deassign_device: handle -> domid -> (int * int * int * int) 
> -> unit
> diff --git a/tools/ocaml/libs/xc/xenctrl.mli b/tools/ocaml/libs/xc/xenctrl.mli
> index ed02124..7d2e6f0 100644
> --- a/tools/ocaml/libs/xc/xenctrl.mli
> +++ b/tools/ocaml/libs/xc/xenctrl.mli
> @@ -154,9 +154,6 @@ external domain_memory_increase_reservation :
>  external map_foreign_range :
>    handle -> domid -> int -> nativeint -> Xenmmap.mmap_interface
>    = "stub_map_foreign_range"
> -external domain_get_pfn_list :
> -  handle -> domid -> nativeint -> nativeint array
> -  = "stub_xc_domain_get_pfn_list"
>  
>  external domain_assign_device: handle -> domid -> (int * int * int * int) -> 
> unit
>         = "stub_xc_domain_assign_device"
> diff --git a/tools/ocaml/libs/xc/xenctrl_stubs.c 
> b/tools/ocaml/libs/xc/xenctrl_stubs.c
> index d1801e1..f97070c 100644
> --- a/tools/ocaml/libs/xc/xenctrl_stubs.c
> +++ b/tools/ocaml/libs/xc/xenctrl_stubs.c
> @@ -1009,38 +1009,6 @@ CAMLprim value stub_shadow_allocation_set(value xch, 
> value domid,
>       CAMLreturn(Val_unit);
>  }
>  
> -CAMLprim value stub_xc_domain_get_pfn_list(value xch, value domid,
> -                                           value nr_pfns)
> -{
> -     CAMLparam3(xch, domid, nr_pfns);
> -     CAMLlocal2(array, v);
> -     unsigned long c_nr_pfns;
> -     long ret, i;
> -     uint64_t *c_array;
> -
> -     c_nr_pfns = Nativeint_val(nr_pfns);
> -
> -     c_array = malloc(sizeof(uint64_t) * c_nr_pfns);
> -     if (!c_array)
> -             caml_raise_out_of_memory();
> -
> -     ret = xc_get_pfn_list(_H(xch), _D(domid),
> -                           c_array, c_nr_pfns);
> -     if (ret < 0) {
> -             free(c_array);
> -             failwith_xc(_H(xch));
> -     }
> -
> -     array = caml_alloc(ret, 0);
> -     for (i = 0; i < ret; i++) {
> -             v = caml_copy_nativeint(c_array[i]);
> -             Store_field(array, i, v);
> -     }
> -     free(c_array);
> -
> -     CAMLreturn(array);
> -}
> -
>  CAMLprim value stub_xc_domain_ioport_permission(value xch, value domid,
>                                              value start_port, value nr_ports,
>                                              value allow)
> diff --git a/xen/arch/x86/domctl.c b/xen/arch/x86/domctl.c
> index 2585d4e..129c24e 100644
> --- a/xen/arch/x86/domctl.c
> +++ b/xen/arch/x86/domctl.c
> @@ -395,62 +395,6 @@ long arch_do_domctl(
>          break;
>      }
>  
> -    case XEN_DOMCTL_getmemlist:
> -    {
> -        unsigned long max_pfns = domctl->u.getmemlist.max_pfns;
> -        uint64_t mfn;
> -        struct page_info *page;
> -
> -        if ( unlikely(d->is_dying) )
> -        {
> -            ret = -EINVAL;
> -            break;
> -        }
> -
> -        /*
> -         * XSA-74: This sub-hypercall is broken in several ways:
> -         * - lock order inversion (p2m locks inside page_alloc_lock)
> -         * - no preemption on huge max_pfns input
> -         * - not (re-)checking d->is_dying with page_alloc_lock held
> -         * - not honoring start_pfn input (which libxc also doesn't set)
> -         * Additionally it is rather useless, as the result is stale by the
> -         * time the caller gets to look at it.
> -         * As it only has a single, non-production consumer (xen-mceinj),
> -         * rather than trying to fix it we restrict it for the time being.
> -         */
> -        if ( /* No nested locks inside copy_to_guest_offset(). */
> -             paging_mode_external(currd) ||
> -             /* Arbitrary limit capping processing time. */
> -             max_pfns > GB(4) / PAGE_SIZE )
> -        {
> -            ret = -EOPNOTSUPP;
> -            break;
> -        }
> -
> -        spin_lock(&d->page_alloc_lock);
> -
> -        ret = i = 0;
> -        page_list_for_each(page, &d->page_list)
> -        {
> -            if ( i >= max_pfns )
> -                break;
> -            mfn = page_to_mfn(page);
> -            if ( copy_to_guest_offset(domctl->u.getmemlist.buffer,
> -                                      i, &mfn, 1) )
> -            {
> -                ret = -EFAULT;
> -                break;
> -            }
> -                     ++i;
> -             }
> -
> -        spin_unlock(&d->page_alloc_lock);
> -
> -        domctl->u.getmemlist.num_pfns = i;
> -        copyback = true;
> -        break;
> -    }
> -
>      case XEN_DOMCTL_getpageframeinfo3:
>      {
>          unsigned int num = domctl->u.getpageframeinfo3.num;
> diff --git a/xen/include/public/domctl.h b/xen/include/public/domctl.h
> index a8921dd..7f99d1b 100644
> --- a/xen/include/public/domctl.h
> +++ b/xen/include/public/domctl.h
> @@ -1117,7 +1117,7 @@ struct xen_domctl {
>  #define XEN_DOMCTL_pausedomain                    3
>  #define XEN_DOMCTL_unpausedomain                  4
>  #define XEN_DOMCTL_getdomaininfo                  5
> -#define XEN_DOMCTL_getmemlist                     6
> +/* #define XEN_DOMCTL_getmemlist                  6 Obsolete */
>  /* #define XEN_DOMCTL_getpageframeinfo            7 Obsolete - use 
> getpageframeinfo3 */
>  /* #define XEN_DOMCTL_getpageframeinfo2           8 Obsolete - use 
> getpageframeinfo3 */
>  #define XEN_DOMCTL_setvcpuaffinity                9


_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxxxxxxxxx
https://lists.xenproject.org/mailman/listinfo/xen-devel

 


Rackspace

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