Skip site navigation (1)Skip section navigation (2)
Date:      Tue, 19 Dec 2000 14:50:43 -0800
From:      "Renaud Waldura" <renaud@waldura.com>
To:        <emulation@freebsd.org>
Subject:   Re: q3ded 1.17: linux_socketcall returns errno -11
Message-ID:  <001f01c06a0e$1edf2200$0402010a@biohz.net>
References:  <01a901c067b1$8ced2d00$0402010a@biohz.net> <3A3C0199.8DED329B@cup.hp.com> <000901c067c8$d406a7e0$0402010a@biohz.net> <5l3dfmm44y.fsf@assaris.sics.se>

next in thread | previous in thread | raw e-mail | index | archive | help
Assar: thanks for the patch, it applied cleanly against 4.2-RELEASE.

As for my problem, it isn't quite solved yet... I recompiled the linux
module with DEBUG on, and here is what I get:

01 Linux-emul(90534): newselect(1, 0xbfbfb9f0, 0, 0, 0xbfbfb9e8)
02 Linux-emul(90534): incoming timeout (0/0)
03 Linux-emul(90534): real select returns 0
04 Linux-emul(90534): outgoing timeout (0/0)
05 Linux-emul(90534): newselect_out -> 0

06 Linux-emul(90534): linux_socketcall(what=12, args=0xbfbfba00)
07 Linux-emul(90534): linux_recvfrom(fd=4, buf=0x8220c40, len=16384,
flags=0, from=0xbfbfba40, fromlen=0xbfbfba3c)
08 Linux-emul(90534): linux_recvfrom() returns 35

This is how I interpret the trace:

01: newselect(number of FDs               == 1
              FD set ready for reading    == some address
              FD set ready for writing    == NULL
              FD set ready for OOB        == NULL
              timeout                     == some address
             )

Q3ded listens an an open socket, with a timeout.

02-05: the timeout is 0: it's a poll, and select() returns with no error.

06-08: calls linux_recvfrom(), which returns EAGAIN.

Now, the funny thing is, the exact same thing happens on Linux. Here is the
strace output:

01 gettimeofday({977090705, 46700}, {420, 0}) = 0
02 select(1, [0], NULL, NULL, {0, 0})      = 0 (Timeout)
03 recvfrom(4, 0x8220c40, 16384, 0, 0xbfffba10, 0xbfffba0c) = -1 EAGAIN
(Resource temporarily unavailable)

Pretty much equivalent to the FreeBSD trace... Unfortunately q3ded on Linux
works like a charm, and it doesn't on FreeBSD. So, I'm still looking. Any
ideas?

--Renaud




----- Original Message -----
From: <assar@freebsd.org>
To: "Renaud Waldura" <renaud@waldura.com>; <marcel@freebsd.org>
Cc: <emulation@freebsd.org>
Sent: Monday, December 18, 2000 2:10 AM
Subject: Re: q3ded 1.17: linux_socketcall returns errno -11


> "Renaud Waldura" <renaud@waldura.com> writes:
>
> >  51543 q3ded    CALL  gettimeofday(0xbfbfba48,0xbfbfba50)
> >  51543 q3ded    RET   gettimeofday 0
> >  51543 q3ded    CALL  linux_newselect(0x1,0xbfbfb9d8,0,0,0xbfbfb9d0)
> >  51543 q3ded    RET   linux_newselect 0
> >  51543 q3ded    CALL  linux_socketcall(0xc,0xbfbfb9e8)
> >  51543 q3ded    RET   linux_socketcall -1 errno 11 Resource deadlock
avoided
>
> Note first that the translation of errno 11 is wrong, on Linux errno
> 11 is EAGAIN.
>
> (marcel: should we add a table of Linux error codes to linux_kdump? )
>
> So I assume that what's happening here is that select says that the fd
> is ready to be read from but then recvmsg returns EWOULDBLOCK (aka
> EAGAIN).
>
> The only way I can see that currently happening is if MSG_WAITALL for
> some reason is set, now wait a moment, MSG_* do not have the same
> values on Linux.
>
> Could you try the following patch and tell us how it goes?  I'm afraid
> it's against -current.  If it doesn't apply with small amounts of
> force to -stable, bug me and I can redo it.  Marcel: does this look ok?
>
> /assar
>



To Unsubscribe: send mail to majordomo@FreeBSD.org
with "unsubscribe freebsd-emulation" in the body of the message




Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?001f01c06a0e$1edf2200$0402010a>