Hi,
I have posted some comments in v3 after you sent this version. Please
have a look.
On 01/04/2022 01:38, Stefano Stabellini wrote:
+static int init_domain(struct xs_handle *xsh, libxl_dominfo *info)
+{
+ struct xc_interface_core *xch;
+ libxl_uuid uuid;
+ uint64_t xenstore_evtchn, xenstore_pfn;
+ int rc;
+
+ printf("Init dom0less domain: %u\n", info->domid);
+ xch = xc_interface_open(0, 0, 0);
+
+ rc = xc_hvm_param_get(xch, info->domid, HVM_PARAM_STORE_EVTCHN,
+ &xenstore_evtchn);
+ if (rc != 0) {
+ printf("Failed to get HVM_PARAM_STORE_EVTCHN\n");
+ return 1;
+ }
+
+ /* Alloc xenstore page */
+ if (alloc_xs_page(xch, info, &xenstore_pfn) != 0) {
+ printf("Error on alloc magic pages\n");
+ return 1;
+ }
+
+ rc = xc_dom_gnttab_seed(xch, info->domid, true,
+ (xen_pfn_t)-1, xenstore_pfn, 0, 0);
+ if (rc)
+ err(1, "xc_dom_gnttab_seed");
+
+ libxl_uuid_generate(&uuid);
+ xc_domain_sethandle(xch, info->domid, libxl_uuid_bytearray(&uuid));
+
+ rc = gen_stub_json_config(info->domid, &uuid);
+ if (rc)
+ err(1, "gen_stub_json_config");
+
+ /* Now everything is ready: set HVM_PARAM_STORE_PFN */
+ rc = xc_hvm_param_set(xch, info->domid, HVM_PARAM_STORE_PFN,
+ xenstore_pfn);
On patch #1, you told me you didn't want to allocate the page in Xen
because it wouldn't be initialized by Xenstored. But this is what we are
doing here.
This would be a problem if Linux is still booting and hasn't yet call
xenbus_probe_initcall().
I understand we need to have the page setup before raising the event
channel. I don't think we can allow Xenstored to set the HVM_PARAM (it
may run in a domain with less privilege). So I think we may need to
create a separate command to kick the client (not great).
Juergen, any thoughts?
Cheers,
--
Julien Grall