From mboxrd@z Thu Jan 1 00:00:00 1970 From: "Daniel P. Berrange" Subject: Re: PATCH: 10/10: Make xenconsoled ignore doms with qemu-dm Date: Wed, 22 Aug 2007 23:34:07 +0100 Message-ID: <20070822223407.GB18061@redhat.com> References: <20070822222653.GR18061@redhat.com> Reply-To: "Daniel P. Berrange" Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Return-path: Content-Disposition: inline In-Reply-To: <20070822222653.GR18061@redhat.com> List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Sender: xen-devel-bounces@lists.xensource.com Errors-To: xen-devel-bounces@lists.xensource.com To: xen-devel@lists.xensource.com List-Id: xen-devel@lists.xenproject.org This patch writes a field /local/vm/DOMID/console/type taking the value 'ioemu' or 'xenconsoled'. If xenconsoled sees a type that is not its own, then it skips handling of that guest. The qemu-dm process doesn't need to read this field since it will only attach to the console if given the -serial pty arg which XenD already ensures matches this xenstore field. The overall behaviour is that if a paravirt guest has a qemu-dm process running then that handles the console, otherwise the xenconsoled handles it. The former is more functional, with the exception of not currently supporting persistent logging to a file at the same time as exposing a PTY. console/daemon/io.c | 9 +++++++++ python/xen/xend/XendDomainInfo.py | 7 +++++++ 2 files changed, 16 insertions(+) Signed-off-by: Daniel P. Berrange Dan. diff -r 4559faae3790 tools/console/daemon/io.c --- a/tools/console/daemon/io.c Wed Aug 22 16:24:48 2007 -0400 +++ b/tools/console/daemon/io.c Wed Aug 22 18:48:05 2007 -0400 @@ -327,6 +327,7 @@ static int domain_create_ring(struct dom static int domain_create_ring(struct domain *dom) { int err, remote_port, ring_ref, rc; + char *type, path[PATH_MAX]; err = xs_gather(xs, dom->serialpath, "ring-ref", "%u", &ring_ref, @@ -343,6 +344,14 @@ static int domain_create_ring(struct dom } else dom->use_consolepath = 0; + sprintf(path, "%s/type", dom->use_consolepath ? dom->conspath: dom->serialpath); + type = xs_read(xs, XBT_NULL, path, NULL); + if (type && strcmp(type, "xenconsoled") != 0) { + free(type); + return 0; + } + free(type); + if ((ring_ref == dom->ring_ref) && (remote_port == dom->remote_port)) goto out; diff -r 4559faae3790 tools/python/xen/xend/XendDomainInfo.py --- a/tools/python/xen/xend/XendDomainInfo.py Wed Aug 22 16:24:48 2007 -0400 +++ b/tools/python/xen/xend/XendDomainInfo.py Wed Aug 22 18:36:15 2007 -0400 @@ -883,8 +883,15 @@ class XendDomainInfo: else: to_store[n] = str(v) + # Figure out if we need to tell xenconsoled to ignore this guest's + # console - device model will handle console if it is running + constype = "ioemu" + if 'device_model' not in self.info['platform']: + constype = "xenconsoled" + f('console/port', self.console_port) f('console/ring-ref', self.console_mfn) + f('console/type', constype) f('store/port', self.store_port) f('store/ring-ref', self.store_mfn) -- |=- Red Hat, Engineering, Emerging Technologies, Boston. +1 978 392 2496 -=| |=- Perl modules: http://search.cpan.org/~danberr/ -=| |=- Projects: http://freshmeat.net/~danielpb/ -=| |=- GnuPG: 7D3B9505 F3C9 553F A1DA 4AC2 5648 23C1 B3DF F742 7D3B 9505 -=|