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 <alex.williamson@xxxxxx>
---
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;
}
_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-devel
|