aboutsummaryrefslogtreecommitdiffstats
path: root/drivers
diff options
context:
space:
mode:
authorPantelis Koukousoulas <pakt223@freemail.gr>2006-12-27 21:08:55 -0500
committerMauro Carvalho Chehab <mchehab@infradead.org>2007-02-21 10:34:23 -0500
commit99cfdf5cc6dbe0bd748d810953874d4e08051a9f (patch)
treecec9345ab6f19e26711d20e0642956bed8fccd20 /drivers
parent2fdf3d9c94f7f752dacbebb75bbecda3c1b082a0 (diff)
V4L/DVB (5038): Pvrusb2: Implement stream claim checking function
Add (and expose) a new function, pvr2_channel_check_stream_no_lock(), in pvrusb2-context.c. This is hopefully the last V4L2 interface related patch to change anything outside pvrusb2-v4l2.c. We need this to implement the open() for the radio device. The reason is that within the *enter_context() section of open() we need to ensure nobody is streaming and if we cannot, we should cleanup after ourselves and return -EBUSY. We cannot just use claim_stream() because: 1) That would cause a deadlock trying to re-acquire the context lock 2) We only need to ensure that nobody is streaming. We don't need to actually acquire the stream. Again, this is a kinda ugly patch. Feel free to improve. Signed-off-by: Pantelis Koukousoulas <pakt223@freemail.gr> Signed-off-by: Mike Isely <isely@pobox.com> Signed-off-by: Mauro Carvalho Chehab <mchehab@infradead.org>
Diffstat (limited to 'drivers')
-rw-r--r--drivers/media/video/pvrusb2/pvrusb2-context.c11
-rw-r--r--drivers/media/video/pvrusb2/pvrusb2-context.h2
2 files changed, 13 insertions, 0 deletions
diff --git a/drivers/media/video/pvrusb2/pvrusb2-context.c b/drivers/media/video/pvrusb2/pvrusb2-context.c
index cf129746205d..69786cdaa859 100644
--- a/drivers/media/video/pvrusb2/pvrusb2-context.c
+++ b/drivers/media/video/pvrusb2/pvrusb2-context.c
@@ -188,6 +188,17 @@ void pvr2_channel_done(struct pvr2_channel *cp)
188} 188}
189 189
190 190
191int pvr2_channel_check_stream_no_lock(struct pvr2_channel *cp,
192 struct pvr2_context_stream *sp)
193{
194 if (sp == cp->stream) return 0;
195 if (sp->user) {
196 return -EBUSY;
197 }
198 return 0;
199}
200
201
191int pvr2_channel_claim_stream(struct pvr2_channel *cp, 202int pvr2_channel_claim_stream(struct pvr2_channel *cp,
192 struct pvr2_context_stream *sp) 203 struct pvr2_context_stream *sp)
193{ 204{
diff --git a/drivers/media/video/pvrusb2/pvrusb2-context.h b/drivers/media/video/pvrusb2/pvrusb2-context.h
index 6327fa1f7e4f..4d0f4ad64122 100644
--- a/drivers/media/video/pvrusb2/pvrusb2-context.h
+++ b/drivers/media/video/pvrusb2/pvrusb2-context.h
@@ -76,6 +76,8 @@ void pvr2_channel_init(struct pvr2_channel *,struct pvr2_context *);
76void pvr2_channel_done(struct pvr2_channel *); 76void pvr2_channel_done(struct pvr2_channel *);
77int pvr2_channel_claim_stream(struct pvr2_channel *, 77int pvr2_channel_claim_stream(struct pvr2_channel *,
78 struct pvr2_context_stream *); 78 struct pvr2_context_stream *);
79int pvr2_channel_check_stream_no_lock(struct pvr2_channel *,
80 struct pvr2_context_stream *);
79struct pvr2_ioread *pvr2_channel_create_mpeg_stream( 81struct pvr2_ioread *pvr2_channel_create_mpeg_stream(
80 struct pvr2_context_stream *); 82 struct pvr2_context_stream *);
81 83