Date: Thu, 30 Aug 2001 19:34:28 -0400 (EDT) From: mi@aldan.algebra.com To: n_hibma@FreeBSD.ORG, brian@Awfulhak.org Cc: current@FreeBSD.ORG Subject: Re: another panic (mix ppp and usb to taste) Message-ID: <200108302334.f7UNYTk31986@misha.privatelabs.com> In-Reply-To: <20010830223344.I618-100000@heather.plazza.uk>
next in thread | previous in thread | raw e-mail | index | archive | help
On 30 Aug, Nick Hibma wrote:
> /usr/sbin/ppp -quiet -direct -nat <> /dev/ugen0.1
>
I was confused by the following from ppp's man-page:
-direct
This is used for receiving incoming connections. ppp ignores
the ``set device'' line and uses descriptor 0 as the link.
which seems to imply, I don't need to care the descriptor 1 :-)
> USB is NOT a serial protocol. It has nothing in common with a serial
> port.
The reason I tried this, was finding a Linux how-to guide for making the
ppp over USB work between a PDA (Palm or Handsrping) and the Linux
machine. It mentioned having to install the "Handspring module" or
something to work with /dev/ttyUSB (sp?). I figured, I'll try it with a
ugen-device...
Could we have such a device-module too, BTW? Similar to the serial
modems we already have? Or will you just I suggest I write it myself
:-)?
> P.S.: The reason why it crashes is that it looks for an endpoint
> descriptor for endpoint 0 which doesn't exist. I'll fix that.
Yeah, but it seems, that just a few lines above the crash, it checks for
the sce being non-NULL... Or is it an optimization artifact?
Thanks,
-mi
> On Fri, 24 Aug 2001, Mikhail Teterin wrote:
>
>> As I was trying to let the Palm Pilot connect to my desktop
>> through usb using PPP, I tried to run
>>
>> /usr/sbin/ppp -quiet -direct -nat < /dev/ugen0
>>
>> While, perhaps, not the right way to do what I want (what is? aren't
>> serial devices the simplest?), it should not panic (nothing should
>> really). But it does, and quite repeatedly (some more comments after
>> the trace):
>>
>> IdlePTD 4984832
>> initial pcb at 3db040
>> panicstr: bwrite: buffer is not busy???
>> panic messages:
>> ---
>> Fatal trap 12: page fault while in kernel mode
>> cpuid = 0; lapic.id = 01000000
>> fault virtual address = 0x3
>> fault code = supervisor read, page not present
>> instruction pointer = 0x8:0xc01d5a0b
>> stack pointer = 0x10:0xce7f1c4c
>> frame pointer = 0x10:0xce7f1c58
>> 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 = 442 (ppp)
>> trap number = 12
>> panic: page fault
>> cpuid = 0; lapic.id = 01000000
>> boot() called on cpu#0
>>
>> syncing disks... panic: bwrite: buffer is not busy???
>> cpuid = 0; lapic.id = 01000000
>> boot() called on cpu#0
>> Uptime: 10m14s
>>
>> dumping to dev da0b, offset 131200
>> dump ....... 2 1 0
>> ---
>> [...]
>> #12 0xc030b0bc in trap (frame={tf_fs = -1071644648, tf_es = -830734320,
>> tf_ds = 16777232, tf_edi = 64, tf_esi = 0, tf_ebp = -830530472,
>> tf_isp = -830530504, tf_ebx = -1049243648, tf_edx = -1049243428,
>> tf_ecx = 34, tf_eax = 0, tf_trapno = 12, tf_err = 0,
>> tf_eip = -1071818229, tf_cs = 8, tf_eflags = 66178,
>> tf_esp = -830530412, tf_ss = -1049288448})
>> at ../../../i386/i386/trap.c:405
>> #13 0xc01d5a0b in ugenpoll (dev=0xc1752100, events=64, p=0xce7abb80)
>> at ../../../dev/usb/ugen.c:1369
>> #14 0xc01ed604 in spec_poll (ap=0xce7f1c94)
>> at ../../../fs/specfs/spec_vnops.c:333
>> #15 0xc01ed27d in spec_vnoperate (ap=0xce7f1c94)
>> at ../../../fs/specfs/spec_vnops.c:119
>> #16 0xc0252333 in vn_poll (fp=0xc17328c0, events=64, cred=0xc1734700,
>> p=0xce7abb80) at vnode_if.h:381
>> #17 0xc0228b8b in selscan (p=0xce7abb80, ibits=0xce7f1d48,
>> obits=0xce7f1d3c, nfd=1) at ../../../sys/file.h:192
>> #18 0xc02286b5 in select (p=0xce7abb80, uap=0xce7f1f80)
>> at ../../../kern/sys_generic.c:772
>> #19 0xc030bf2d in syscall (frame={tf_fs = 47, tf_es = 47, tf_ds = 47,
>> tf_edi = 134842880, tf_esi = 134842880, tf_ebp = 0,
>> tf_isp = -830529580, tf_ebx = 3, tf_edx = 134996480,
>> tf_ecx = 134996352, tf_eax = 93, tf_trapno = 12, tf_err = 2,
>> tf_eip = 673178596, tf_cs = 31, tf_eflags = 643,
>> tf_esp = -1077937708, tf_ss = 47}) at ../../../i386/i386/trap.c:1129
>> (kgdb) up 13
>> #13 0xc01d5a0b in ugenpoll (dev=0xc1752100, events=64, p=0xce7abb80)
>> at ../../../dev/usb/ugen.c:1369
>> 1369 switch (sce->edesc->bmAttributes & UE_XFERTYPE) {
>> (kgdb) p sce
>> $1 = (struct ugen_endpoint *) 0x0
>> (kgdb) l
>> 1364 printf("ugenpoll: no pipe\n");
>> 1365 return (EIO);
>> 1366 }
>> 1367 #endif
>> 1368 s = splusb();
>> 1369 switch (sce->edesc->bmAttributes & UE_XFERTYPE) {
>> 1370 case UE_INTERRUPT:
>> 1371 if (events & (POLLIN | POLLRDNORM)) {
>> 1372 if (sce->q.c_cc > 0)
>> 1373 revents |= events & (POLLIN | POLLRDNORM);
>> (kgdb) p events
>> $3 = 64
>> (kgdb) p s
>> No symbol "s" in current context.
>> (kgdb) p revents
>> $5 = 0
>>
>> What I don't understand, is -- there is a check, just a few lines
>> above:
>> if (sce == NULL)
>> return (EINVAL);
>>
>> How come it is not being caught there?
To Unsubscribe: send mail to majordomo@FreeBSD.org
with "unsubscribe freebsd-current" in the body of the message
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200108302334.f7UNYTk31986>
