Re: opaque types instead of union epoll_data

From: Carlos O'Donell
Date: Tue Mar 07 2017 - 12:33:21 EST


On 03/07/2017 07:31 AM, Sodagudi Prasad wrote:
> uapi structs epoll_data are more opaque than user space expects.
> kernel have defined as __u64 instead of the union epoll_data. Because
> of this libc have redefined struct epoll_event with union data
> member.

We do the same in glibc.

> https://android.googlesource.com/platform/bionic.git/+/master/libc/include/sys/epoll.h
> typedef union epoll_data {
> void* ptr;
> int fd;
> uint32_t u32;
> uint64_t u64;
> } epoll_data_t;
> struct epoll_event {
> uint32_t events;
> epoll_data_t data;
> }
>
> Kernel UAPI header defined as "include/uapi/linux/eventpoll.h"
> struct epoll_event {
> __u32 events;
> __u64 data; =====>opaque type instead of union epoll_data
> } EPOLL_PACKED;
>
>
> Because of this we are landing into some issues as we copy kernel
> headers. Will it be going to be addressed?

What issues are you having?

Exactly what problems are you running in to?

Using all of the UAPI headers directly is not a workable
solution, there is a lot of definition and cleanup work to do there.
Some of the headers are immediately useful, but others, as you note
require quite a bit of work to become useful.

The underlying issue of a mismatch between userspace expectations
and UAPI definitions will get addressed when someone, maybe you,
works diligently to enhance the kernel UAPI headers to be generally
useful to userspace.

I don't know anyone else who is working on this problem. Though I
have a vested interested in it as a glibc maintainer, since it would
be nice to avoid duplicate headers where possible between the kernel
and userspace.

--
Cheers,
Carlos.