Print this page
8634 epoll fails to wake on certain edge-triggered conditions
8635 epoll should not emit POLLNVAL
8636 recursive epoll should emit EPOLLRDNORM
Reviewed by: Jerry Jelinek <jerry.jelinek@joyent.com>
Reviewed by: Robert Mustacchi <rm@joyent.com>
Reviewed by: Toomas Soome <tsoome@me.com>
Reviewed by: Igor Kozhukhov <igor@dilos.org>
*** 105,120 ****
if (specified_events_are_satisfied_now) {
*reventsp = satisfied_events & events;
} else {
*reventsp = 0;
- if (!anyyet)
- *phpp = &my_local_pollhead_structure;
}
return (0);
2. Allocate an instance of the pollhead structure. This
instance may be tied to the per-minor data structure defined
by the driver. The pollhead structure should be treated as a
"black box" by the driver. Initialize the pollhead structure
by filling it with zeroes. The size of this structure is
--- 105,135 ----
if (specified_events_are_satisfied_now) {
*reventsp = satisfied_events & events;
} else {
*reventsp = 0;
}
+ if ((*reventsp == 0 && !anyyet) || (events & POLLET))
+ *phpp = &my_local_pollhead_structure;
return (0);
+ Note: Prior to the integration of epoll(5), which included
+ edge-triggering via the POLLET flag, standard chpoll
+ mechanisms would only provide a pollhead in phpp if there
+ were no matching events. Edge-triggered polling requires
+ that pollwakeup() always be called for a resource, so if
+ POLLET is set in the events of interest, the chpoll method
+ must yield a pollhead and prepare to issue pollwakeup()
+ calls on it.
+ Drivers which are not wired up to make pollwakeup() calls on
+ a pollhead when their status changes should emit one from
+ their chpoll routine. This will exclude the resource from
+ caching by pollers, since it cannot alert them to new events
+ without pollwakeup() notification.
+
+
2. Allocate an instance of the pollhead structure. This
instance may be tied to the per-minor data structure defined
by the driver. The pollhead structure should be treated as a
"black box" by the driver. Initialize the pollhead structure
by filling it with zeroes. The size of this structure is
*** 162,174 ****
RETURN VALUES
chpoll() should return 0 for success, or the appropriate error number.
SEE ALSO
! poll(2), nochpoll(9F), pollwakeup(9F)
Writing Device Drivers
! May 7, 2008 CHPOLL(9E)
--- 177,189 ----
RETURN VALUES
chpoll() should return 0 for success, or the appropriate error number.
SEE ALSO
! poll(2), epoll(5), nochpoll(9F), pollwakeup(9F)
Writing Device Drivers
! January 18, 2017 CHPOLL(9E)