Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 10cc3b1e authored by Hans Verkuil's avatar Hans Verkuil Committed by Mauro Carvalho Chehab
Browse files

[media] videobuf2-core: fill_user_buffer and copy_timestamp should return void



This ops can never fail, so make these void functions.

Signed-off-by: default avatarHans Verkuil <hans.verkuil@cisco.com>
Signed-off-by: default avatarMauro Carvalho Chehab <mchehab@osg.samsung.com>
parent df868ea1
Loading
Loading
Loading
Loading
+12 −15
Original line number Diff line number Diff line
@@ -178,6 +178,12 @@ module_param(debug, int, 0644);
	ret;								\
})

#define call_void_bufop(q, op, args...)					\
({									\
	if (q && q->buf_ops && q->buf_ops->op)				\
		q->buf_ops->op(args);					\
})

static void __vb2_queue_cancel(struct vb2_queue *q);
static void __enqueue_in_driver(struct vb2_buffer *vb);

@@ -586,13 +592,10 @@ static bool __buffers_in_use(struct vb2_queue *q)
 * Should be called from vidioc_querybuf ioctl handler in driver.
 * The passed buffer should have been verified.
 * This function fills the relevant information for the userspace.
 *
 * The return values from this function are intended to be directly returned
 * from vidioc_querybuf handler in driver.
 */
int vb2_core_querybuf(struct vb2_queue *q, unsigned int index, void *pb)
void vb2_core_querybuf(struct vb2_queue *q, unsigned int index, void *pb)
{
	return call_bufop(q, fill_user_buffer, q->bufs[index], pb);
	call_void_bufop(q, fill_user_buffer, q->bufs[index], pb);
}
EXPORT_SYMBOL_GPL(vb2_core_querybuf);

@@ -1420,9 +1423,7 @@ int vb2_core_prepare_buf(struct vb2_queue *q, unsigned int index, void *pb)
		return ret;

	/* Fill buffer information for the userspace */
	ret = call_bufop(q, fill_user_buffer, vb, pb);
	if (ret)
		return ret;
	call_void_bufop(q, fill_user_buffer, vb, pb);

	dprintk(1, "prepare of buffer %d succeeded\n", vb->index);

@@ -1543,7 +1544,7 @@ int vb2_core_qbuf(struct vb2_queue *q, unsigned int index, void *pb)
	q->waiting_for_buffers = false;
	vb->state = VB2_BUF_STATE_QUEUED;

	call_bufop(q, copy_timestamp, vb, pb);
	call_void_bufop(q, copy_timestamp, vb, pb);

	trace_vb2_qbuf(q, vb);

@@ -1555,9 +1556,7 @@ int vb2_core_qbuf(struct vb2_queue *q, unsigned int index, void *pb)
		__enqueue_in_driver(vb);

	/* Fill buffer information for the userspace */
	ret = call_bufop(q, fill_user_buffer, vb, pb);
	if (ret)
		return ret;
	call_void_bufop(q, fill_user_buffer, vb, pb);

	/*
	 * If streamon has been called, and we haven't yet called
@@ -1780,9 +1779,7 @@ int vb2_core_dqbuf(struct vb2_queue *q, void *pb, bool nonblocking)
	call_void_vb_qop(vb, buf_finish, vb);

	/* Fill buffer information for the userspace */
	ret = call_bufop(q, fill_user_buffer, vb, pb);
	if (ret)
		return ret;
	call_void_bufop(q, fill_user_buffer, vb, pb);

	/* Remove from videobuf queue */
	list_del(&vb->queued_entry);
+5 −7
Original line number Diff line number Diff line
@@ -114,7 +114,7 @@ static int __verify_length(struct vb2_buffer *vb, const struct v4l2_buffer *b)
	return 0;
}

static int __copy_timestamp(struct vb2_buffer *vb, const void *pb)
static void __copy_timestamp(struct vb2_buffer *vb, const void *pb)
{
	const struct v4l2_buffer *b = pb;
	struct vb2_v4l2_buffer *vbuf = to_vb2_v4l2_buffer(vb);
@@ -131,7 +131,6 @@ static int __copy_timestamp(struct vb2_buffer *vb, const void *pb)
		if (b->flags & V4L2_BUF_FLAG_TIMECODE)
			vbuf->timecode = b->timecode;
	}
	return 0;
};

static void vb2_warn_zero_bytesused(struct vb2_buffer *vb)
@@ -182,7 +181,7 @@ static int vb2_queue_or_prepare_buf(struct vb2_queue *q, struct v4l2_buffer *b,
 * __fill_v4l2_buffer() - fill in a struct v4l2_buffer with information to be
 * returned to userspace
 */
static int __fill_v4l2_buffer(struct vb2_buffer *vb, void *pb)
static void __fill_v4l2_buffer(struct vb2_buffer *vb, void *pb)
{
	struct v4l2_buffer *b = pb;
	struct vb2_v4l2_buffer *vbuf = to_vb2_v4l2_buffer(vb);
@@ -281,8 +280,6 @@ static int __fill_v4l2_buffer(struct vb2_buffer *vb, void *pb)
		b->flags & V4L2_BUF_FLAG_DONE &&
		b->flags & V4L2_BUF_FLAG_LAST)
		q->last_buffer_dequeued = true;

	return 0;
}

/**
@@ -474,8 +471,9 @@ int vb2_querybuf(struct vb2_queue *q, struct v4l2_buffer *b)
	}
	vb = q->bufs[b->index];
	ret = __verify_planes_array(vb, b);

	return ret ? ret : vb2_core_querybuf(q, b->index, b);
	if (!ret)
		vb2_core_querybuf(q, b->index, b);
	return ret;
}
EXPORT_SYMBOL(vb2_querybuf);

+14 −3
Original line number Diff line number Diff line
@@ -369,11 +369,22 @@ struct vb2_ops {
	void (*buf_queue)(struct vb2_buffer *vb);
};

/**
 * struct vb2_ops - driver-specific callbacks
 *
 * @fill_user_buffer:	given a vb2_buffer fill in the userspace structure.
 *			For V4L2 this is a struct v4l2_buffer.
 * @fill_vb2_buffer:	given a userspace structure, fill in the vb2_buffer.
 *			If the userspace structure is invalid, then this op
 *			will return an error.
 * @copy_timestamp:	copy the timestamp from a userspace structure to
 *			the vb2_buffer struct.
 */
struct vb2_buf_ops {
	int (*fill_user_buffer)(struct vb2_buffer *vb, void *pb);
	void (*fill_user_buffer)(struct vb2_buffer *vb, void *pb);
	int (*fill_vb2_buffer)(struct vb2_buffer *vb, const void *pb,
				struct vb2_plane *planes);
	int (*copy_timestamp)(struct vb2_buffer *vb, const void *pb);
	void (*copy_timestamp)(struct vb2_buffer *vb, const void *pb);
};

/**
@@ -512,7 +523,7 @@ void vb2_buffer_done(struct vb2_buffer *vb, enum vb2_buffer_state state);
void vb2_discard_done(struct vb2_queue *q);
int vb2_wait_for_all_buffers(struct vb2_queue *q);

int vb2_core_querybuf(struct vb2_queue *q, unsigned int index, void *pb);
void vb2_core_querybuf(struct vb2_queue *q, unsigned int index, void *pb);
int vb2_core_reqbufs(struct vb2_queue *q, enum vb2_memory memory,
		unsigned int *count);
int vb2_core_create_bufs(struct vb2_queue *q, enum vb2_memory memory,