modesetting: Use NotifyFd for drm event monitoring

Replace the block/wakeup handlers with a NotifyFd callback.

Reviewed-by: Adam Jackson <ajax@redhat.com>
Signed-off-by: Keith Packard <keithp@keithp.com>
This commit is contained in:
Keith Packard 2015-11-11 22:02:11 -08:00 committed by Adam Jackson
parent 58354fcf47
commit 8543d4d8bc

View File

@ -244,17 +244,15 @@ ms_crtc_msc_to_kernel_msc(xf86CrtcPtr crtc, uint64_t expect)
* Check for pending DRM events and process them. * Check for pending DRM events and process them.
*/ */
static void static void
ms_drm_wakeup_handler(void *data, int err, void *mask) ms_drm_socket_handler(int fd, int ready, void *data)
{ {
ScreenPtr screen = data; ScreenPtr screen = data;
ScrnInfoPtr scrn = xf86ScreenToScrn(screen); ScrnInfoPtr scrn = xf86ScreenToScrn(screen);
modesettingPtr ms = modesettingPTR(scrn); modesettingPtr ms = modesettingPTR(scrn);
fd_set *read_mask = mask;
if (data == NULL || err < 0) if (data == NULL)
return; return;
if (FD_ISSET(ms->fd, read_mask))
drmHandleEvent(ms->fd, &ms->event_context); drmHandleEvent(ms->fd, &ms->event_context);
} }
@ -393,9 +391,7 @@ ms_vblank_screen_init(ScreenPtr screen)
* registration within ScreenInit and not PreInit. * registration within ScreenInit and not PreInit.
*/ */
if (ms_ent->fd_wakeup_registered != serverGeneration) { if (ms_ent->fd_wakeup_registered != serverGeneration) {
AddGeneralSocket(ms->fd); SetNotifyFd(ms->fd, ms_drm_socket_handler, X_NOTIFY_READ, screen);
RegisterBlockAndWakeupHandlers((BlockHandlerProcPtr)NoopDDA,
ms_drm_wakeup_handler, screen);
ms_ent->fd_wakeup_registered = serverGeneration; ms_ent->fd_wakeup_registered = serverGeneration;
ms_ent->fd_wakeup_ref = 1; ms_ent->fd_wakeup_ref = 1;
} else } else
@ -415,8 +411,6 @@ ms_vblank_close_screen(ScreenPtr screen)
if (ms_ent->fd_wakeup_registered == serverGeneration && if (ms_ent->fd_wakeup_registered == serverGeneration &&
!--ms_ent->fd_wakeup_ref) { !--ms_ent->fd_wakeup_ref) {
RemoveBlockAndWakeupHandlers((BlockHandlerProcPtr)NoopDDA, RemoveNotifyFd(ms->fd);
ms_drm_wakeup_handler, screen);
RemoveGeneralSocket(ms->fd);
} }
} }