Re: Loading uart module fails

From: John Baldwin <jhb_at_freebsd.org>
Date: Thu, 23 Feb 2012 08:28:47 -0500
On Thursday, February 23, 2012 1:44:49 am Alexey Dokuchaev wrote:
> On Wed, Jan 19, 2011 at 08:14:19AM -0500, John Baldwin wrote:
> > On Wednesday, January 19, 2011 5:08:10 am Bruce Cran wrote:
> > > On Tue, 18 Jan 2011 11:25:38 -0500
> > > John Baldwin <jhb_at_freebsd.org> wrote:
> > > 
> > > > Oh, the uart[01] devices already exist.  I suspect if you removed the
> > > > hints from /boot/device.hints and then kldloaded uart you would be
> > > > ok.  I think this is an "old" bug that might also be in 8.x.
> > > 
> > > I'm running -CURRENT from a couple of weeks ago so it if it's an old
> > > bug it apparently hasn't been fixed yet.
> > 
> > Yes, I don't think it is fixed, and I think 8.x is likely broken in this 
> > regard as well.  Can you verify that removing the hints "fixes" the issue?
> 
> Same thing here, default uart settings in /boot/device.hints prevent the
> module from loading correctly.  Moreover, unloading it and then doing
> "devinfo -rv" panics my 8.3-PRERELEASE laptop:
> 
> Fatal trap 12: page fault while in kernel mode
> fault virtual address   = 0xc5511205
> fault code              = supervisor read, page not present
> instruction pointer     = 0x20:0xc05783ad
> stack pointer           = 0x28:0xe789c994
> frame pointer           = 0x28:0xe789c99c
> code segment            = base 0x0, limit 0xfffff, type 0x1b
>                         = DPL 0, pres 1, def32 1, gran 1
> processor eflags        = interrupt enabled, resume, IOPL = 0
> current process         = 2522 (devinfo)
> 
> (kgdb) bt
> ...
> #10 0xc05783ad in strlcpy (dst=0xe789c9d8 "",
>     src=0xc5511205 <Address 0xc5511205 out of bounds>, siz=32)
>     at /usr/src/sys/libkern/strlcpy.c:54
> #11 0xc050b1df in sysctl_devices (oidp=0xc06f4880, arg1=0xe789cc04, arg2=2,
>     req=0xe789cb8c) at /usr/src/sys/kern/subr_bus.c:4575
> #12 0xc04efb23 in sysctl_root (oidp=Variable "oidp" is not available.
> ) at /usr/src/sys/kern/kern_sysctl.c:1455
> #13 0xc04efdc2 in userland_sysctl (td=0xc5d6c5c0, name=0xe789cbf8,
> namelen=5,
>     old=0xbfbfea9c, oldlenp=0xbfbfea94, inkernel=0, new=0x0, newlen=0,
>     retval=0xe789cc58, flags=0) at /usr/src/sys/kern/kern_sysctl.c:1565
> #14 0xc04f014a in __sysctl (td=0xc5d6c5c0, uap=0xe789ccec)
> ...
> (kgdb) f 11
> #11 0xc050b1df in sysctl_devices (oidp=0xc06f4880, arg1=0xe789cc04, arg2=2,
>     req=0xe789cb8c) at /usr/src/sys/kern/subr_bus.c:4575
> 4575                    strlcpy(udev.dv_desc, dev->desc, 
sizeof(udev.dv_desc));
> (kgdb) l
> 4570            udev.dv_handle = (uintptr_t)dev;
> 4571            udev.dv_parent = (uintptr_t)dev->parent;
> 4572            if (dev->nameunit != NULL)
> 4573                    strlcpy(udev.dv_name, dev->nameunit, 
sizeof(udev.dv_name));
> 4574            if (dev->desc != NULL)
> 4575                    strlcpy(udev.dv_desc, dev->desc, 
sizeof(udev.dv_desc));
> 4576            if (dev->driver != NULL && dev->driver->name != NULL)
> 4577                    strlcpy(udev.dv_drivername, dev->driver->name,
> 4578                        sizeof(udev.dv_drivername));
> 4579            bus_child_pnpinfo_str(dev, udev.dv_pnpinfo, 
sizeof(udev.dv_pnpinfo));

Hmm, can you see what 'dev->nameunit' is?  Maybe just do 'p *dev' actually
and reply with that.

-- 
John Baldwin
Received on Thu Feb 23 2012 - 13:34:17 UTC

This archive was generated by hypermail 2.4.0 : Wed May 19 2021 - 11:40:24 UTC