[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] [PATCH 07/21] lib{xc, xl}: Seed grant tables with xenstore and console grants
> @@ -275,6 +276,169 @@ int xc_dom_boot_image(struct xc_dom_image *dom) > return rc; > } > > +static unsigned long xc_dom_gnttab_setup(xc_interface *xch, uint32_t domid) > +{ > + DECLARE_HYPERCALL; > + gnttab_setup_table_t setup_table; This memory needs to be a hypercall buffer. The easiest way to achieve this would be to use xc_gnttab_op() which will bounce it for you. > + DECLARE_HYPERCALL_BUFFER(unsigned long, gmfnp); > + int rc; > + unsigned long gmfn; > + > + gmfnp = xc_hypercall_buffer_alloc(xch, gmfnp, sizeof(*gmfnp)); > + if (gmfnp == NULL) > + return -1; > + > + setup_table.dom = domid; > + setup_table.nr_frames = 1; > + set_xen_guest_handle(setup_table.frame_list, gmfnp); > + setup_table.status = 0; > + > + hypercall.op = __HYPERVISOR_grant_table_op; > + hypercall.arg[0] = GNTTABOP_setup_table; > + hypercall.arg[1] = (unsigned long) &setup_table; > + hypercall.arg[2] = 1; > + > + rc = do_xen_hypercall(xch, &hypercall); > + gmfn = *gmfnp; > + xc_hypercall_buffer_free(xch, gmfnp); > + > + if ( rc != 0 || setup_table.status != GNTST_okay ) > + { > + xc_dom_panic(xch, XC_INTERNAL_ERROR, > + "%s: failed to setup domU grant table " > + "[errno=%d, status=%" PRId16 "]\n", > + __FUNCTION__, rc != 0 ? errno : 0, setup_table.status); > + return -1; > + } > + > + return gmfn; > +} [...] > +int xc_dom_gnttab_hvm_seed(xc_interface *xch, uint32_t domid, > + unsigned long console_gpfn, > + unsigned long xenstore_gpfn, > + uint32_t console_domid, > + uint32_t xenstore_domid) > +{ > +#define SCRATCH_PFN_GNTTAB 0xFFFFE Do we need to reserve this address? Even if not should we do so anyway? Certainly I think hiding it away in this file is a bit too secret... hvmloader reserves from hvm_info->reserved_mem_pgstart to the 4GB limit in the guest's e820. reserved_mem_pgstart starts at special_pfn(0) and is reduced by mem_alloc in hvmloader. #define NR_SPECIAL_PAGES 5 #define special_pfn(x) (0xff000u - NR_SPECIAL_PAGES + (x)) So we end up reserving from 0xFEFFB000 to the end. So we are at least hiding this address from the guest, so that's ok, but I think we need to document this somewhere -- I'm just not sure where we can put it -- Keir any ideas? There's a list of SPECIALPAGE_* in xc_hvm_build but that's not exactly the height of discoverable either. > + > + int rc; > + struct xen_add_to_physmap xatp = { > + .domid = domid, > + .space = XENMAPSPACE_grant_table, > + .idx = 0, /* TODO: what's this? */ "Index into source mapping space". Since you want the first page of the grant table 0 seems to be correct. Ian. _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxxxxxxxx http://lists.xensource.com/xen-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |