|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] [PATCH v2 6/6] Add a general description of the channel mechanism to docs/misc/
On 18 Jun 2014, at 15:43, Ian Campbell <Ian.Campbell@xxxxxxxxxx> wrote:
> On Wed, 2014-06-18 at 15:37 +0100, Dave Scott wrote:
>>> Is this stuff all forward compatible with the existing xenconsoled etc?
>>> What stops it trying to manage these guys?
>>
>> To handle this through xenconsoled would involve:
>
> What I meant was why does xenconsoled not try and manage these today and
> get in the way? To which the answer is:
>
>> 1. extending xenconsoled to watch for console device backends (like
>> any other device backend). Currently xenconsoled is limited to the
>> initial console only.
>
> This (which I wasn't aware of, I thought it handled multiple).
>
> ISTR there is a key in their which allows qemu or xenconsoled to provide
> this initial console too.
That’s right — there’s a xenstore key type = (ioemu | xenconsoled). (Note to
self: I’d better rename my ‘type’ key)
>
>> I took the qemu approach for the initial implementation because this
>> is how libxl arranges for the second/third/fourth/… consoles to be
>> served (possibly because xenconsoled has never been extended).
>> Personally I’d like to switch over to xenconsoled eventually rather
>> than rely on qemu for ever more stuff.
>
> I'll defer to Stefano on this. I thought the normal qemu (upstream)
> approach was:
>
> * emulated stuff via command-line/qmp but never xenstore (in
> contrast with qemu-trad which played all sorts of tricks to
> insert IDE disks from xenstore).
> * PV stuff via watching xenstore backend paths.
>
> Do I understand you correctly that there is a qemu patch involved in all
> this, or does it just happen to work if you feed it the correct cmdline
> runes?
No qemu patch needed — once I figured out the right command line magic it
stopped crashing and started working :-)
My (primitive) understanding is that, if you run a qemu for a PV guest (see
libxl_dm.c:libxl__need_xenpv_qemu) then it’ll act as the backend for qdisk
backends and these extra consoles where libxl has written ‘type=ioemu’. If
xenconsoled were extended to support these then libxl would write
‘type=xenconsoled’ and qemu would ignore them.
In the qemu code the xen console backends (tools/qemu-xen-dir/hw/xen_console.c)
are qemu “chardev” devices which gives you access to the exciting world of
qemu-char.c:
static const struct {
const char *name;
CharDriverState *(*open)(QemuOpts *opts);
} backend_table[] = {
{ .name = "null", .open = qemu_chr_open_null },
{ .name = "socket", .open = qemu_chr_open_socket },
{ .name = "udp", .open = qemu_chr_open_udp },
{ .name = "msmouse", .open = qemu_chr_open_msmouse },
{ .name = "vc", .open = text_console_init },
#ifdef _WIN32
{ .name = "file", .open = qemu_chr_open_win_file_out },
{ .name = "pipe", .open = qemu_chr_open_win_pipe },
{ .name = "console", .open = qemu_chr_open_win_con },
{ .name = "serial", .open = qemu_chr_open_win },
{ .name = "stdio", .open = qemu_chr_open_win_stdio },
#else
{ .name = "file", .open = qemu_chr_open_file_out },
{ .name = "pipe", .open = qemu_chr_open_pipe },
{ .name = "pty", .open = qemu_chr_open_pty },
{ .name = "stdio", .open = qemu_chr_open_stdio },
#endif
#ifdef CONFIG_BRLAPI
{ .name = "braille", .open = chr_baum_init },
#endif
#if defined(__linux__) || defined(__sun__) || defined(__FreeBSD__) \
|| defined(__NetBSD__) || defined(__OpenBSD__) || defined(__DragonFly__) \
|| defined(__FreeBSD_kernel__)
{ .name = "tty", .open = qemu_chr_open_tty },
#endif
#if defined(__linux__) || defined(__FreeBSD__) || defined(__DragonFly__) \
|| defined(__FreeBSD_kernel__)
{ .name = "parport", .open = qemu_chr_open_pp },
#endif
#ifdef CONFIG_SPICE
{ .name = "spicevmc", .open = qemu_chr_open_spice },
#endif
};
Cheers,
Dave
_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxx
http://lists.xen.org/xen-devel
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |