epoll patch for review

Alexander Leidinger Alexander at Leidinger.net
Mon Mar 3 10:54:31 UTC 2008


Quoting Roman Divacky <rdivacky at freebsd.org> (from Sun, 17 Feb 2008  
17:29:38 +0100):

> hi
>
> www.vlakno.cz/~rdivacky/linux_epoll.patch
>
> patch that implements epoll() in linuxulator. its fairly trivial
> so I'd love to get this reviewed/commited by someone.

I don't comment about the correctness of the use of kevent or the  
behavior of epoll, I only have time to do a high-level review ATM.

Short review: fix the XXX, some more docs

Long review:

In general:
I would prefer to lift the quality to a higher level. What about  
adding comments before each functions describing the behavior it  
should have (not a description of what the code does, I'm talking  
about things you would like to read in an API documentation, e.g. like  
in the function mixer_get_recroute in the file  
http://www.freebsd.org/cgi/cvsweb.cgi/src/sys/dev/sound/pcm/mixer.c?rev=1.55;content-type=text%2Fx-cvsweb-markup).

epoll_create:
You write that linux ignores the size as well. I think it would be  
better to come up with some size checks. If it is technically not  
possible to create better size checks, then convert the XXX into a  
regular comment. Are there some missing parentheses around the return  
value (I can't check style(9) ATM)? No std debug messages for this?

epoll_to_kevent:
Please check the part which you are not sure about. If you have  
multiple possibilities, please write a comment regarding the  
possibilities, and why you have chosen the way it is coded. There's no  
code which detects new stuff and does a kprintf. It would be good if  
it prints out a warning that there's something which is not handled by  
it.

kevent_to_epoll:
You really asked to review a patch which says "XXX: error handling"?
I think the break statements need some style(9). Shouldn't a function  
which can produce errors have a return type which allows to tell the  
caller about errors? What about a default case with a kprintf telling  
the user that there's something new which is not handled? This would  
make problems reports much better in case there are some changes in  
the future ("insurance for the future").

kev_copyout:
It uses kevent_to_epoll, and as such it should return an error and not  
do the copyout, if there was an error.

kev_copyin:
You use memcpy, and not copyin. This is confusing, as the name suggest  
you are doing a copyin. Something needs to be changed there.

epoll_ctl:
Again, the XXX: I don't know if you can add+del, but having the MOD  
part return EINVAL every time is not ok.

epoll_wait:
Hardcoded constants for the time and no docs of why you use those  
numbers. The comment about the wrong type-cast is also not  
encouraging. When I read it the first questions I have are: Why the  
wrong typecast? What's the right typecast and why can't you use it?  
Again, a XXX comment. This needs to be resolved (I assume that a  
translation would be the way to go, with a kprintf for things we don't  
know how to translate, so that in case of changes in linux, we/users  
can see it).

> it's basically a thin translation layer above kqueue. I tested
> this using http://www.vlakno.cz/~rdivacky/epoll.c

i is not initialized. Compilers may opt to initialize them to 0.

You don't test all possibilities. Have you checked if more recent LTP  
tests contain epoll tests?

Bye,
Alexander.

-- 
The lunatic, the lover, and the poet,
Are of imagination all compact...
		-- William Shakespeare, "A Midsummer Night's Dream"

http://www.Leidinger.net    Alexander @ Leidinger.net: PGP ID = B0063FE7
http://www.FreeBSD.org       netchild @ FreeBSD.org  : PGP ID = 72077137


More information about the freebsd-emulation mailing list