Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 211335
b: refs/heads/master
c: 3cdadc5
h: refs/heads/master
i:
  211333: 3cf9a6c
  211331: de0a2c2
  211327: 4564a1d
v: v3
  • Loading branch information
Richard Zidlicky authored and Mauro Carvalho Chehab committed Sep 28, 2010
1 parent e86f876 commit 78ec173
Show file tree
Hide file tree
Showing 2 changed files with 13 additions and 20 deletions.
2 changes: 1 addition & 1 deletion [refs]
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
---
refs/heads/master: 970d14c6cca8c71307a4d23fe373c5895175b2d7
refs/heads/master: 3cdadc50bbe8f04c1231c8af614cafd7ddd622bf
31 changes: 12 additions & 19 deletions trunk/drivers/media/dvb/siano/smscoreapi.c
Original file line number Diff line number Diff line change
Expand Up @@ -1098,33 +1098,26 @@ EXPORT_SYMBOL_GPL(smscore_onresponse);
*
* @return pointer to descriptor on success, NULL on error.
*/
struct smscore_buffer_t *smscore_getbuffer(struct smscore_device_t *coredev)

struct smscore_buffer_t *get_entry(struct smscore_device_t *coredev)
{
struct smscore_buffer_t *cb = NULL;
unsigned long flags;

DEFINE_WAIT(wait);

spin_lock_irqsave(&coredev->bufferslock, flags);

/* This function must return a valid buffer, since the buffer list is
* finite, we check that there is an available buffer, if not, we wait
* until such buffer become available.
*/

prepare_to_wait(&coredev->buffer_mng_waitq, &wait, TASK_INTERRUPTIBLE);
if (list_empty(&coredev->buffers)) {
spin_unlock_irqrestore(&coredev->bufferslock, flags);
schedule();
spin_lock_irqsave(&coredev->bufferslock, flags);
if (!list_empty(&coredev->buffers)) {
cb = (struct smscore_buffer_t *) coredev->buffers.next;
list_del(&cb->entry);
}
spin_unlock_irqrestore(&coredev->bufferslock, flags);
return cb;
}

finish_wait(&coredev->buffer_mng_waitq, &wait);

cb = (struct smscore_buffer_t *) coredev->buffers.next;
list_del(&cb->entry);
struct smscore_buffer_t *smscore_getbuffer(struct smscore_device_t *coredev)
{
struct smscore_buffer_t *cb = NULL;

spin_unlock_irqrestore(&coredev->bufferslock, flags);
wait_event(coredev->buffer_mng_waitq, (cb = get_entry(coredev)));

return cb;
}
Expand Down

0 comments on commit 78ec173

Please sign in to comment.