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 sakari.ai...@maxwell.research.nokia.com
---
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 sakari.ai...@maxwell.research.nokia.com
---
 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