• Laurent Pinchart's avatar
    drm: omapdrm: Support unlinking page flip events prematurely · 1cfe19aa
    Laurent Pinchart authored
    DRM page flip vblank events requested by page flips or atomic commits
    are created by the DRM core and then passed to driver through CRTC
    states (for atomic commit) or directly to the page flip handler (for
    legacy page flips). The events are then kept aside until the page flip
    completes, at which point drivers queue them for delivery with a call to
    drm_send_vblank_event().
    
    When a DRM file handle is closed events pending for delivery are cleaned
    up automatically by the DRM core. Events that have been passed to the
    driver but haven't completed yet, however, are not handled by the DRM
    core. Drivers are responsible for destroying them and must not attempt
    to queue them for delivery. This is usually handled by drivers'
    preclose() handlers that cancel and destroy page flip events that
    reference the file handle being closed.
    
    With asynchronous atomic updates the story becomes more complex. Several
    asynchronous atomic updates can be pending, each of them carrying
    per-CRTC events. As the atomic_commit() operation doesn't receive a file
    handle context, drivers can't know which file handle a pending update
    refers to, making it difficult to cancel or wait for completion of
    updates related to the file handle being closed.
    
    It should be noted that cancelling page flips or waiting for atomic
    updates completion isn't required by the DRM core when closing a file
    handle. The only requirement is that no event gets queued for delivery
    after the preclose() operation returns. This can easily be achieved by
    storing events for atomic commits in a list, unlinking events from the
    file handle being closed by setting the file_priv field to NULL, and
    skipping delivery of unlinked events.
    
    This logic replaces the page flip cancellation completely.
    Signed-off-by: default avatarLaurent Pinchart <laurent.pinchart@ideasonboard.com>
    Signed-off-by: default avatarTomi Valkeinen <tomi.valkeinen@ti.com>
    1cfe19aa
omap_drv.c 22.4 KB