• Ben Widawsky's avatar
    drm/i915: wait render timeout ioctl · 23ba4fd0
    Ben Widawsky authored
    
    
    This helps implement GL_ARB_sync but stops short of allowing full blown
    sync objects. Finally we can use the new timed seqno waiting function
    to allow userspace to wait on a buffer object with a timeout. This
    implements that interface.
    
    The IOCTL will take as input a buffer object handle, and a timeout in
    nanoseconds (flags is currently optional but will likely be used for
    permutations of flush operations). Users may specify 0 nanoseconds to
    instantly check.
    
    The wait ioctl with a timeout of 0 reimplements the busy ioctl. With any
    non-zero timeout parameter the wait ioctl will wait for the given number
    of nanoseconds on an object becoming unbusy. Since the wait itself does
    so holding struct_mutex the object may become re-busied before this
    completes. A similar but shorter race condition exists in the busy
    ioctl.
    
    v2: ETIME/ERESTARTSYS instead of changing to EBUSY, and EGAIN (Chris)
    Flush the object from the gpu write domain (Chris + Daniel)
    Fix leaked refcount in good case (Chris)
    Naturally align ioctl struct (Chris)
    
    v3: Drop lock after getting seqno to avoid ugly dance (Chris)
    
    v4: check for 0 timeout after olr check to allow polling (Chris)
    
    v5: Updated the comment. (Chris)
    
    v6: Return -ETIME instead of -EBUSY when timeout_ns is 0 (Daniel)
    Fix the commit message comment to be less ugly (Ben)
    Add a warning to check the return timespec (Ben)
    
    v7: Use DRM_AUTH for the ioctl. (Eugeni)
    Signed-off-by: default avatarBen Widawsky <ben@bwidawsk.net>
    Signed-off-by: default avatarDaniel Vetter <daniel.vetter@ffwll.ch>
    23ba4fd0