From: "Roger Pau Monné" <roger.pau@citrix.com>
To: Wei Liu <wei.liu2@citrix.com>
Cc: xen-devel@lists.xenproject.org,
Ian Jackson <ian.jackson@eu.citrix.com>,
Ian Campbell <ian.campbell@citrix.com>,
Stefano Stabellini <stefano.stabellini@eu.citrix.com>
Subject: Re: [PATCH v3 32/32] libxl: allow the creation of HVM domains without a device model.
Date: Wed, 29 Jul 2015 16:43:17 +0200 [thread overview]
Message-ID: <55B8E685.7060109@citrix.com> (raw)
In-Reply-To: <20150728112253.GN5111@zion.uk.xensource.com>
El 28/07/15 a les 13.22, Wei Liu ha escrit:
> On Fri, Jul 03, 2015 at 01:35:10PM +0200, Roger Pau Monne wrote:
>> Replace the firmware loaded into HVM guests with an OS kernel. Since the HVM
>> builder now uses the PV xc_dom_* set of functions this kernel will be parsed
>> and loaded inside the guest like on PV, but the container is a pure HVM
>> guest.
>>
>> Also, if device_model_version is set to none unconditinally set the nic type
>> to LIBXL_NIC_TYPE_VIF.
>>
>> Signed-off-by: Roger Pau Monné <roger.pau@citrix.com>
>> Cc: Ian Jackson <ian.jackson@eu.citrix.com>
>> Cc: Stefano Stabellini <stefano.stabellini@eu.citrix.com>
>> Cc: Ian Campbell <ian.campbell@citrix.com>
>> Cc: Wei Liu <wei.liu2@citrix.com>
>> ---
>> docs/man/xl.cfg.pod.5 | 5 ++++
>> tools/libxl/libxl.c | 7 +++---
>> tools/libxl/libxl_create.c | 18 ++++++++++++++
>> tools/libxl/libxl_dom.c | 60 ++++++++++++++++++++++++++++++---------------
>> tools/libxl/libxl_types.idl | 1 +
>> tools/libxl/libxl_x86.c | 4 ++-
>> tools/libxl/xl_cmdimpl.c | 2 ++
>> 7 files changed, 72 insertions(+), 25 deletions(-)
>>
>> diff --git a/docs/man/xl.cfg.pod.5 b/docs/man/xl.cfg.pod.5
>> index a3e0e2e..1270605 100644
>> --- a/docs/man/xl.cfg.pod.5
>> +++ b/docs/man/xl.cfg.pod.5
>> @@ -1631,6 +1631,11 @@ This device-model is the default for Linux dom0.
>> Use the device-model based upon the historical Xen fork of Qemu.
>> This device-model is still the default for NetBSD dom0.
>>
>> +=item B<none>
>> +
>> +Don't use any device model. This requires a kernel capable of booting
>> +in this mode.
>> +
>> =back
>>
>> It is recommended to accept the default value for new guests. If
>> diff --git a/tools/libxl/libxl.c b/tools/libxl/libxl.c
>> index e9a2d26..a6690cf 100644
>> --- a/tools/libxl/libxl.c
>> +++ b/tools/libxl/libxl.c
>> @@ -1590,11 +1590,10 @@ void libxl__destroy_domid(libxl__egc *egc, libxl__destroy_domid_state *dis)
>>
>> switch (libxl__domain_type(gc, domid)) {
>> case LIBXL_DOMAIN_TYPE_HVM:
>> - if (!libxl_get_stubdom_id(CTX, domid))
>> - dm_present = 1;
>> - else
>> + if (libxl_get_stubdom_id(CTX, domid)) {
>> dm_present = 0;
>> - break;
>> + break;
>> + }
>
> There is a path that dm_present contains garbage.
Please take into account that I've removed the last break in
LIBXL_DOMAIN_TYPE_HVM, so now the LIBXL_DOMAIN_TYPE_HVM case expands
into the LIBXL_DOMAIN_TYPE_PV case.
>> case LIBXL_DOMAIN_TYPE_PV:
>> pid = libxl__xs_read(gc, XBT_NULL, libxl__sprintf(gc, "/local/domain/%d/image/device-model-pid", domid));
>> dm_present = (pid != NULL);
dm_present is set here for both PV and HVM guests without a stubdom.
>> diff --git a/tools/libxl/libxl_create.c b/tools/libxl/libxl_create.c
>> index f366a09..1444e40 100644
>> --- a/tools/libxl/libxl_create.c
>> +++ b/tools/libxl/libxl_create.c
>> @@ -164,6 +164,8 @@ int libxl__domain_build_info_setdefault(libxl__gc *gc,
>> b_info->u.hvm.bios = LIBXL_BIOS_TYPE_ROMBIOS; break;
>> case LIBXL_DEVICE_MODEL_VERSION_QEMU_XEN:
>> b_info->u.hvm.bios = LIBXL_BIOS_TYPE_SEABIOS; break;
>> + case LIBXL_DEVICE_MODEL_VERSION_NONE:
>> + break;
>> default:return ERROR_INVAL;
>> }
>>
>> @@ -177,6 +179,8 @@ int libxl__domain_build_info_setdefault(libxl__gc *gc,
>> if (b_info->u.hvm.bios == LIBXL_BIOS_TYPE_ROMBIOS)
>> return ERROR_INVAL;
>> break;
>> + case LIBXL_DEVICE_MODEL_VERSION_NONE:
>> + break;
>> default:abort();
>> }
>>
>> @@ -278,6 +282,9 @@ int libxl__domain_build_info_setdefault(libxl__gc *gc,
>> break;
>> }
>> break;
>> + case LIBXL_DEVICE_MODEL_VERSION_NONE:
>> + b_info->video_memkb = 0;
>> + break;
>> case LIBXL_DEVICE_MODEL_VERSION_QEMU_XEN:
>> default:
>> switch (b_info->u.hvm.vga.kind) {
>> @@ -945,6 +952,11 @@ static void initiate_domain_create(libxl__egc *egc,
>> ret = libxl__device_nic_setdefault(gc, &d_config->nics[i], domid);
>> if (ret) goto error_out;
>>
>> + /* HVM guests without a device model only have PV nics. */
>> + if (d_config->b_info.device_model_version ==
>> + LIBXL_DEVICE_MODEL_VERSION_NONE)
>> + d_config->nics[i].nictype = LIBXL_NIC_TYPE_VIF;
>> +
>
> Better to check if users have asked for emulated NIC and bail.
IMHO, I think it would be better to move this to
libxl__device_nic_setdefault and I will do so in the next version.
>> if (d_config->nics[i].devid > last_devid)
>> last_devid = d_config->nics[i].devid;
>> }
>> @@ -1293,6 +1305,12 @@ static void domcreate_launch_dm(libxl__egc *egc, libxl__multidev *multidev,
>> libxl__device_console_add(gc, domid, &console, state, &device);
>> libxl__device_console_dispose(&console);
>>
>> + if (d_config->b_info.device_model_version ==
>> + LIBXL_DEVICE_MODEL_VERSION_NONE) {
>> + domcreate_devmodel_started(egc, &dcs->dmss.dm, 0);
>> + return;
>> + }
>> +
>> libxl_device_vkb_init(&vkb);
>> libxl__device_vkb_add(gc, domid, &vkb);
>> libxl_device_vkb_dispose(&vkb);
>> diff --git a/tools/libxl/libxl_dom.c b/tools/libxl/libxl_dom.c
>> index 6ce4115..59854a1 100644
>> --- a/tools/libxl/libxl_dom.c
>> +++ b/tools/libxl/libxl_dom.c
>> @@ -789,21 +789,23 @@ static int hvm_build_set_params(xc_interface *handle, uint32_t domid,
>> uint64_t str_mfn, cons_mfn;
>> int i;
>>
>> - va_map = xc_map_foreign_range(handle, domid,
>> - XC_PAGE_SIZE, PROT_READ | PROT_WRITE,
>> - HVM_INFO_PFN);
>> - if (va_map == NULL)
>> - return -1;
>> -
>> - va_hvm = (struct hvm_info_table *)(va_map + HVM_INFO_OFFSET);
>> - va_hvm->apic_mode = libxl_defbool_val(info->u.hvm.apic);
>> - va_hvm->nr_vcpus = info->max_vcpus;
>> - memset(va_hvm->vcpu_online, 0, sizeof(va_hvm->vcpu_online));
>> - memcpy(va_hvm->vcpu_online, info->avail_vcpus.map, info->avail_vcpus.size);
>> - for (i = 0, sum = 0; i < va_hvm->length; i++)
>> - sum += ((uint8_t *) va_hvm)[i];
>> - va_hvm->checksum -= sum;
>> - munmap(va_map, XC_PAGE_SIZE);
>> + if ( info->device_model_version != LIBXL_DEVICE_MODEL_VERSION_NONE) {
>
> Stray space.
>
>> + va_map = xc_map_foreign_range(handle, domid,
>> + XC_PAGE_SIZE, PROT_READ | PROT_WRITE,
>> + HVM_INFO_PFN);
>> + if (va_map == NULL)
>> + return -1;
>> +
>> + va_hvm = (struct hvm_info_table *)(va_map + HVM_INFO_OFFSET);
>> + va_hvm->apic_mode = libxl_defbool_val(info->u.hvm.apic);
>> + va_hvm->nr_vcpus = info->max_vcpus;
>> + memset(va_hvm->vcpu_online, 0, sizeof(va_hvm->vcpu_online));
>> + memcpy(va_hvm->vcpu_online, info->avail_vcpus.map, info->avail_vcpus.size);
>> + for (i = 0, sum = 0; i < va_hvm->length; i++)
>> + sum += ((uint8_t *) va_hvm)[i];
>> + va_hvm->checksum -= sum;
>> + munmap(va_map, XC_PAGE_SIZE);
>> + }
>>
>> xc_hvm_param_get(handle, domid, HVM_PARAM_STORE_PFN, &str_mfn);
>> xc_hvm_param_get(handle, domid, HVM_PARAM_CONSOLE_PFN, &cons_mfn);
>> @@ -884,6 +886,12 @@ static int libxl__domain_firmware(libxl__gc *gc,
>> case LIBXL_DEVICE_MODEL_VERSION_QEMU_XEN:
>> firmware = "hvmloader";
>> break;
>> + case LIBXL_DEVICE_MODEL_VERSION_NONE:
>> + if (info->kernel == NULL) {
>> + LOG(ERROR, "no device model requested without a kernel");
>> + return ERROR_FAIL;
>
> goto out
>
> Maybe fix the other return as well...
While there I've done a fixup of all the error paths in the function,
because AFAICT some of them were doing goto out without rc set.
Thanks, Roger.
next prev parent reply other threads:[~2015-07-29 14:43 UTC|newest]
Thread overview: 121+ messages / expand[flat|nested] mbox.gz Atom feed top
2015-07-03 11:34 [PATCH v3 00/32] Introduce HVM without dm and new boot ABI Roger Pau Monne
2015-07-03 11:34 ` [PATCH v3 01/32] libxc: split x86 HVM setup_guest into smaller logical functions Roger Pau Monne
2015-07-06 10:45 ` Andrew Cooper
2015-07-28 11:22 ` Wei Liu
2015-07-03 11:34 ` [PATCH v3 02/32] libxc: unify xc_dom_p2m_{host/guest} Roger Pau Monne
2015-07-06 10:49 ` Andrew Cooper
2015-07-28 11:22 ` Wei Liu
2015-07-03 11:34 ` [PATCH v3 03/32] libxc: introduce the notion of a container type Roger Pau Monne
2015-07-06 12:01 ` Andrew Cooper
2015-07-28 11:22 ` Wei Liu
2015-07-03 11:34 ` [PATCH v3 04/32] libxc: introduce a domain loader for HVM guest firmware Roger Pau Monne
2015-07-06 12:11 ` Andrew Cooper
2015-07-28 11:22 ` Wei Liu
2015-07-03 11:34 ` [PATCH v3 05/32] libxc: make arch_setup_meminit a xc_dom_arch hook Roger Pau Monne
2015-07-06 12:23 ` Andrew Cooper
2015-07-27 10:40 ` Roger Pau Monné
2015-07-28 11:22 ` Wei Liu
2015-07-03 11:34 ` [PATCH v3 06/32] libxc: make arch_setup_boot{init/late} xc_dom_arch hooks Roger Pau Monne
2015-07-06 12:27 ` Andrew Cooper
2015-07-28 11:22 ` Wei Liu
2015-07-03 11:34 ` [PATCH v3 07/32] xen/x86: fix arch_set_info_guest for HVM guests Roger Pau Monne
2015-07-06 12:58 ` Andrew Cooper
2015-07-23 10:14 ` Roger Pau Monné
2015-07-10 18:39 ` Konrad Rzeszutek Wilk
2015-07-10 18:47 ` Konrad Rzeszutek Wilk
2015-07-23 10:17 ` Roger Pau Monné
2015-07-13 14:01 ` Jan Beulich
2015-07-23 10:25 ` Roger Pau Monné
2015-07-23 11:29 ` Jan Beulich
2015-07-23 11:41 ` Ian Campbell
2015-07-23 15:10 ` Roger Pau Monné
2015-07-23 15:32 ` Jan Beulich
2015-07-23 15:48 ` Roger Pau Monné
2015-07-23 15:58 ` Jan Beulich
2015-07-23 16:00 ` Ian Campbell
2015-07-23 16:15 ` Andrew Cooper
2015-07-23 16:19 ` Jan Beulich
2015-07-23 16:49 ` Andrew Cooper
2015-07-23 17:06 ` Roger Pau Monné
2015-07-23 16:56 ` Roger Pau Monné
2015-07-23 17:12 ` Andrew Cooper
2015-07-24 8:22 ` Jan Beulich
2015-07-24 9:59 ` Roger Pau Monné
2015-07-24 10:46 ` Jan Beulich
2015-07-24 12:11 ` Roger Pau Monné
2015-07-24 12:44 ` Jan Beulich
2015-07-24 15:26 ` Roger Pau Monné
2015-07-24 15:49 ` Jan Beulich
2015-07-24 16:54 ` Roger Pau Monné
2015-07-24 17:36 ` Konrad Rzeszutek Wilk
2015-07-27 11:55 ` Roger Pau Monné
2015-08-03 16:55 ` Andrew Cooper
2015-08-03 17:31 ` Roger Pau Monné
2015-08-04 18:08 ` Andrew Cooper
2015-08-05 9:53 ` Roger Pau Monné
2015-08-05 15:39 ` Andrew Cooper
2015-08-05 16:40 ` Roger Pau Monné
2015-08-05 16:46 ` Andrew Cooper
2015-08-05 17:11 ` Roger Pau Monné
2015-08-05 19:00 ` Andrew Cooper
2015-08-07 12:15 ` Tim Deegan
2015-08-11 7:26 ` Jan Beulich
2015-07-24 11:11 ` Andrew Cooper
2015-07-24 11:28 ` Ian Campbell
2015-07-24 11:49 ` Jan Beulich
2015-07-24 11:46 ` Jan Beulich
2015-07-24 11:49 ` Roger Pau Monné
2015-07-24 12:41 ` Jan Beulich
2015-07-24 15:28 ` Roger Pau Monné
2015-07-03 11:34 ` [PATCH v3 08/32] libxc: introduce a xc_dom_arch for hvm-3.0-x86_32 guests Roger Pau Monne
2015-07-06 13:40 ` Andrew Cooper
2015-07-03 11:34 ` [PATCH v3 09/32] libxl: switch HVM domain building to use xc_dom_* helpers Roger Pau Monne
2015-07-28 11:22 ` Wei Liu
2015-07-28 14:26 ` Roger Pau Monné
2015-07-28 14:29 ` Wei Liu
2015-07-03 11:34 ` [PATCH v3 10/32] libxc: remove dead HVM building code Roger Pau Monne
2015-07-06 13:46 ` Andrew Cooper
2015-07-23 10:27 ` Roger Pau Monné
2015-07-03 11:34 ` [PATCH v3 11/32] xen/x86: add bitmap of enabled emulated devices Roger Pau Monne
2015-07-06 14:10 ` Andrew Cooper
2015-07-07 7:26 ` Jan Beulich
2015-07-23 10:29 ` Roger Pau Monné
2015-07-03 11:34 ` [PATCH v3 12/32] xen/x86: allow disabling the emulated local apic Roger Pau Monne
2015-07-03 11:34 ` [PATCH v3 13/32] xen/x86: allow disabling the emulated HPET Roger Pau Monne
2015-07-03 11:34 ` [PATCH v3 14/32] xen/x86: allow disabling the pmtimer Roger Pau Monne
2015-07-03 11:34 ` [PATCH v3 15/32] xen/x86: allow disabling the emulated RTC Roger Pau Monne
2015-07-03 11:34 ` [PATCH v3 16/32] xen/x86: allow disabling the emulated IO APIC Roger Pau Monne
2015-07-03 11:34 ` [PATCH v3 17/32] xen/x86: allow disabling the emulated PIC Roger Pau Monne
2015-07-03 11:34 ` [PATCH v3 18/32] xen/x86: allow disabling the emulated pmu Roger Pau Monne
2015-07-03 11:34 ` [PATCH v3 19/32] xen/x86: allow disabling the emulated VGA Roger Pau Monne
2015-07-03 11:34 ` [PATCH v3 20/32] xen/x86: allow disabling the emulated IOMMU Roger Pau Monne
2015-07-03 11:34 ` [PATCH v3 21/32] xen/x86: allow disabling all emulated devices inside of Xen Roger Pau Monne
2015-07-03 11:35 ` [PATCH v3 22/32] elfnotes: intorduce a new PHYS_ENTRY elfnote Roger Pau Monne
2015-07-03 11:35 ` [PATCH v3 23/32] libxc: allow creating domains without emulated devices Roger Pau Monne
2015-07-28 11:22 ` Wei Liu
2015-07-03 11:35 ` [PATCH v3 24/32] xen: allow HVM guests to use XENMEM_memory_map Roger Pau Monne
2015-07-03 11:35 ` [PATCH v3 25/32] xen/x86: allow HVM guests to use hypercalls to bring up vCPUs Roger Pau Monne
2015-07-03 11:35 ` [PATCH v3 26/32] xenconsole: try to attach to PV console if HVM fails Roger Pau Monne
2015-07-14 13:46 ` Stefano Stabellini
2015-07-23 10:30 ` Roger Pau Monné
2015-07-03 11:35 ` [PATCH v3 27/32] libxc: change the position of the special pages Roger Pau Monne
2015-07-03 15:36 ` Roger Pau Monné
2015-07-10 19:06 ` Konrad Rzeszutek Wilk
2015-07-23 10:42 ` Roger Pau Monné
2015-07-03 11:35 ` [PATCH v3 28/32] libxc/xen: introduce HVM_PARAM_CMDLINE_PFN Roger Pau Monne
2015-07-03 11:35 ` [PATCH v3 29/32] libxc/xen: introduce HVM_PARAM_FIRST_FREE_PFN Roger Pau Monne
2015-07-10 19:05 ` Konrad Rzeszutek Wilk
2015-07-23 10:46 ` Roger Pau Monné
2015-07-03 11:35 ` [PATCH v3 30/32] libxc/xen: introduce HVM_PARAM_MODLIST_PFN Roger Pau Monne
2015-07-03 11:35 ` [PATCH v3 31/32] libxc: switch xc_dom_elfloader to be used with HVMlite domains Roger Pau Monne
2015-07-10 19:07 ` Konrad Rzeszutek Wilk
2015-07-23 10:48 ` Roger Pau Monné
2015-07-03 11:35 ` [PATCH v3 32/32] libxl: allow the creation of HVM domains without a device model Roger Pau Monne
2015-07-28 11:22 ` Wei Liu
2015-07-29 14:43 ` Roger Pau Monné [this message]
2015-07-29 14:50 ` Wei Liu
2015-07-29 14:58 ` Andrew Cooper
2015-07-03 16:19 ` [PATCH v3 00/32] Introduce HVM without dm and new boot ABI David Vrabel
2015-07-03 16:36 ` Roger Pau Monné
2015-07-10 17:44 ` Konrad Rzeszutek Wilk
2015-07-10 18:01 ` Konrad Rzeszutek Wilk
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=55B8E685.7060109@citrix.com \
--to=roger.pau@citrix.com \
--cc=ian.campbell@citrix.com \
--cc=ian.jackson@eu.citrix.com \
--cc=stefano.stabellini@eu.citrix.com \
--cc=wei.liu2@citrix.com \
--cc=xen-devel@lists.xenproject.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.