Re: [RFC v2 6/7] V4L: Events: Sequence numbers

2010-01-18 Thread Hans Verkuil

Hi Sakari,

Some more review comments:

On Tue, 22 Dec 2009, Sakari Ailus wrote:


Add sequence numbers to events.

Signed-off-by: Sakari Ailus 
---
drivers/media/video/v4l2-event.c |8 
include/media/v4l2-event.h   |1 +
2 files changed, 9 insertions(+), 0 deletions(-)

diff --git a/drivers/media/video/v4l2-event.c b/drivers/media/video/v4l2-event.c
index 72fdf7f..cc2bf57 100644
--- a/drivers/media/video/v4l2-event.c
+++ b/drivers/media/video/v4l2-event.c
@@ -58,6 +58,7 @@ void v4l2_event_init_fh(struct v4l2_fh *fh)
INIT_LIST_HEAD(&events->subscribed);

atomic_set(&events->navailable, 0);
+   events->sequence = 0;


Why not make this atomic_t as well?


}
EXPORT_SYMBOL_GPL(v4l2_event_init_fh);

@@ -158,10 +159,16 @@ void v4l2_event_queue(struct video_device *vdev, struct 
v4l2_event *ev)

list_for_each_entry(fh, &vdev->fh, list) {
struct _v4l2_event *_ev;
+   u32 sequence;

if (!v4l2_event_subscribed(fh, ev->type))
continue;

+   spin_lock(&fh->events.lock);
+   sequence = fh->events.sequence;
+   fh->events.sequence++;
+   spin_unlock(&fh->events.lock);


Then you can use atomic_inc_return() here.


+
if (atomic_read(&fh->events.navailable) >= V4L2_MAX_EVENTS)
continue;

@@ -172,6 +179,7 @@ void v4l2_event_queue(struct video_device *vdev, struct 
v4l2_event *ev)
_ev->event = *ev;

spin_lock(&fh->events.lock);
+   _ev->event.sequence = sequence;
list_add_tail(&_ev->list, &fh->events.available);
spin_unlock(&fh->events.lock);

diff --git a/include/media/v4l2-event.h b/include/media/v4l2-event.h
index 69305c6..5a778d4 100644
--- a/include/media/v4l2-event.h
+++ b/include/media/v4l2-event.h
@@ -44,6 +44,7 @@ struct v4l2_events {
spinlock_t  lock; /* Protect everything here. */
struct list_headavailable;
atomic_tnavailable;
+   u32 sequence;
wait_queue_head_t   wait;
struct list_headsubscribed; /* Subscribed events. */
};
--
1.5.6.5



Regards,

Hans
--
To unsubscribe from this list: send the line "unsubscribe linux-media" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


[RFC v2 6/7] V4L: Events: Sequence numbers

2009-12-22 Thread Sakari Ailus
Add sequence numbers to events.

Signed-off-by: Sakari Ailus 
---
 drivers/media/video/v4l2-event.c |8 
 include/media/v4l2-event.h   |1 +
 2 files changed, 9 insertions(+), 0 deletions(-)

diff --git a/drivers/media/video/v4l2-event.c b/drivers/media/video/v4l2-event.c
index 72fdf7f..cc2bf57 100644
--- a/drivers/media/video/v4l2-event.c
+++ b/drivers/media/video/v4l2-event.c
@@ -58,6 +58,7 @@ void v4l2_event_init_fh(struct v4l2_fh *fh)
INIT_LIST_HEAD(&events->subscribed);
 
atomic_set(&events->navailable, 0);
+   events->sequence = 0;
 }
 EXPORT_SYMBOL_GPL(v4l2_event_init_fh);
 
@@ -158,10 +159,16 @@ void v4l2_event_queue(struct video_device *vdev, struct 
v4l2_event *ev)
 
list_for_each_entry(fh, &vdev->fh, list) {
struct _v4l2_event *_ev;
+   u32 sequence;
 
if (!v4l2_event_subscribed(fh, ev->type))
continue;
 
+   spin_lock(&fh->events.lock);
+   sequence = fh->events.sequence;
+   fh->events.sequence++;
+   spin_unlock(&fh->events.lock);
+
if (atomic_read(&fh->events.navailable) >= V4L2_MAX_EVENTS)
continue;
 
@@ -172,6 +179,7 @@ void v4l2_event_queue(struct video_device *vdev, struct 
v4l2_event *ev)
_ev->event = *ev;
 
spin_lock(&fh->events.lock);
+   _ev->event.sequence = sequence;
list_add_tail(&_ev->list, &fh->events.available);
spin_unlock(&fh->events.lock);
 
diff --git a/include/media/v4l2-event.h b/include/media/v4l2-event.h
index 69305c6..5a778d4 100644
--- a/include/media/v4l2-event.h
+++ b/include/media/v4l2-event.h
@@ -44,6 +44,7 @@ struct v4l2_events {
spinlock_t  lock; /* Protect everything here. */
struct list_headavailable;
atomic_tnavailable;
+   u32 sequence;
wait_queue_head_t   wait;
struct list_headsubscribed; /* Subscribed events. */
 };
-- 
1.5.6.5

--
To unsubscribe from this list: send the line "unsubscribe linux-media" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html