From mboxrd@z Thu Jan 1 00:00:00 1970 From: Alex Williamson Subject: Re: [PATCH] xencons missing string allocation Date: Fri, 09 Dec 2005 17:00:24 -0700 Message-ID: <1134172824.6952.6.camel@tdi> References: <1134153451.6136.14.camel@tdi> <20051209185448.GD9830@granada.merseine.nu> <1134160653.6463.6.camel@tdi> Mime-Version: 1.0 Content-Type: text/plain Content-Transfer-Encoding: 7bit Return-path: In-Reply-To: <1134160653.6463.6.camel@tdi> List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Sender: xen-devel-bounces@lists.xensource.com Errors-To: xen-devel-bounces@lists.xensource.com To: Muli Ben-Yehuda Cc: xen-devel List-Id: xen-devel@lists.xenproject.org On Fri, 2005-12-09 at 13:37 -0700, Alex Williamson wrote: > On Fri, 2005-12-09 at 20:54 +0200, Muli Ben-Yehuda wrote: > > On Fri, Dec 09, 2005 at 11:37:31AM -0700, Alex Williamson wrote: > > > > > > > > I was trying to boot dom0 w/ "xencons=ttyS1 console=ttyS1". It gives > > > some weird error messages: > > > > > > Warning: dev (ttyS2) tty->count(2) != #fd's(1) in release_dev > > > Warning: dev (ttyS2) tty->count(3) != #fd's(1) in tty_open > > > > > > And blows up with a page fault. The page fault is because we don't > > > actually allocate a buffer for the tty driver name. > > > > Errr... the patch looks curious. Why does it work when ->name points > > to the heap but not when it points to the data segment? they should be > > equivalent and many tty drivers appear to set ->name to the data > > segment. Is something trying to modify xencons_driver->name later? > > You're right, I guess a lot of tty/char drivers seem to have the name > on the heap. However, it would suggest there's a path where the name is > referenced outside of the context of that function since it prevents a > page fault. I'll keep looking to make sure I'm not just getting lucky. Ok, disregard that previous attempt, it was definitely chasing a false positive. I'm not sure this one is correct either, but I'll toss it out in case anyone else is interested in chasing this problem too. I believe the problem is that kcons_device() is incorrectly calculating the index when xc_num != 0 on serial devices. If I subtract xc_num from the console index, which should always give me 0, things work perfectly for all ttyS console values (that I've tested). I don't know if something similar needs to be done for tty devices. Patch attached, comments/suggestions welcome. Thanks, Alex Signed-off-by: Alex Williamson --- diff -r 53cff3f88e45 linux-2.6-xen-sparse/drivers/xen/console/console.c --- a/linux-2.6-xen-sparse/drivers/xen/console/console.c Fri Dec 9 11:05:06 2005 +++ b/linux-2.6-xen-sparse/drivers/xen/console/console.c Fri Dec 9 16:34:33 2005 @@ -168,7 +168,7 @@ static struct tty_driver *kcons_device(struct console *c, int *index) { - *index = c->index; + *index = c->index - (xc_mode == XC_SERIAL ? xc_num : 0); return xencons_driver; }