[Intel-gfx] [PATCH] drm: Implement O_NONBLOCK support on /dev/dri/cardN
Jesse Barnes
jbarnes at virtuousgeek.org
Tue Oct 7 21:33:01 CEST 2014
On Tue, 7 Oct 2014 14:13:51 +0100
Chris Wilson <chris at chris-wilson.co.uk> wrote:
> The implmentation is simple in the extreme: we only want to wait for
> events if the device was opened in blocking mode, otherwise we grab
> what is available and report an error if there was none.
>
> Signed-off-by: Chris Wilson <chris at chris-wilson.co.uk>
> Cc: dri-devel at lists.freedesktop.org
> ---
> drivers/gpu/drm/drm_fops.c | 12 +++++++-----
> 1 file changed, 7 insertions(+), 5 deletions(-)
>
> diff --git a/drivers/gpu/drm/drm_fops.c b/drivers/gpu/drm/drm_fops.c
> index ed7bc68f7e87..91e1105f2800 100644
> --- a/drivers/gpu/drm/drm_fops.c
> +++ b/drivers/gpu/drm/drm_fops.c
> @@ -515,10 +515,12 @@ ssize_t drm_read(struct file *filp, char __user
> *buffer, size_t total;
> ssize_t ret;
>
> - ret = wait_event_interruptible(file_priv->event_wait,
> - !list_empty(&file_priv->event_list));
> - if (ret < 0)
> - return ret;
> + if ((filp->f_flags & O_NONBLOCK) == 0) {
> + ret = wait_event_interruptible(file_priv->event_wait,
> + !list_empty(&file_priv->event_list));
> + if (ret < 0)
> + return ret;
> + }
>
> total = 0;
> while (drm_dequeue_event(file_priv, total, count, &e)) {
> @@ -532,7 +534,7 @@ ssize_t drm_read(struct file *filp, char __user
> *buffer, e->destroy(e);
> }
>
> - return total;
> + return total ?: -EAGAIN;
> }
> EXPORT_SYMBOL(drm_read);
I'd prefer "total" to be spelled out after the ? (is this just a GNU
thing or does recent C implicitly use the first operand too?), but
that's no biggie. Looks fine.
Reviewed-by: Jesse Barnes <jbarnes at virtuousgeek.org>
More information about the Intel-gfx
mailing list