Ignore:
Timestamp:
Mar 18, 2021, 8:57:36 PM (4 years ago)
Author:
David Azarewicz
Message:

Merge changes from Paul's uniaud32next branch.

Location:
GPL/trunk
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • GPL/trunk

  • GPL/trunk/lib32/waitqueue.c

    r32 r679  
    3838//******************************************************************************
    3939//******************************************************************************
    40 void add_wait_queue(wait_queue_head_t *q, wait_queue_t * wait)
     40void add_wait_queue(struct wait_queue_head *q, struct wait_queue_entry * wait)
    4141{
    4242//    dprintf3(("WARNING: add_wait_queue STUB"));
     
    4444//******************************************************************************
    4545//******************************************************************************
    46 void add_wait_queue_exclusive(wait_queue_head_t *q)
     46void add_wait_queue_exclusive(struct wait_queue_head *wq_head, struct wait_queue_entry *wq_entry)
    4747{
    4848//    dprintf3(("WARNING: add_wait_queue_exclusive STUB"));
     
    5050//******************************************************************************
    5151//******************************************************************************
    52 void remove_wait_queue(wait_queue_head_t *q, wait_queue_t * wait)
     52void remove_wait_queue(struct wait_queue_head *q, struct wait_queue_entry * wait)
    5353{
    5454//    dprintf(("WARNING: remove_wait_queue STUB"));
     
    7575//******************************************************************************
    7676//******************************************************************************
    77 void init_waitqueue_entry(wait_queue_t *q, struct task_struct *p)
     77void init_waitqueue_entry(struct wait_queue_entry *wq_entry, struct task_struct *p)
    7878{
    7979//    dprintf(("WARNING: init_waitqueue_entry STUB"));
     
    8888//******************************************************************************
    8989//******************************************************************************
     90/**
     91 * complete: - signals a single thread waiting on this completion
     92 * @x:  holds the state of this particular completion
     93 *
     94 * This will wake up a single thread waiting on this completion. Threads will be
     95 * awakened in the same order in which they were queued.
     96 *
     97 * See also complete_all(), wait_for_completion() and related routines.
     98 *
     99 * It may be assumed that this function implies a write memory barrier before
     100 * changing the task state if and only if any tasks are woken up.
     101 */
     102void complete(struct completion *x)
     103{
     104        unsigned long flags;
     105
     106        spin_lock_irqsave(&x->wait.lock, flags);
     107        x->done++;
     108        __wake_up_locked(&x->wait, TASK_NORMAL, 1);
     109        spin_unlock_irqrestore(&x->wait.lock, flags);
     110}
     111/**
     112 * complete_all: - signals all threads waiting on this completion
     113 * @x:  holds the state of this particular completion
     114 *
     115 * This will wake up all threads waiting on this particular completion event.
     116 *
     117 * If this function wakes up a task, it executes a full memory barrier before
     118 * accessing the task state.
     119 *
     120 * Since complete_all() sets the completion of @x permanently to done
     121 * to allow multiple waiters to finish, a call to reinit_completion()
     122 * must be used on @x if @x is to be used again. The code must make
     123 * sure that all waiters have woken and finished before reinitializing
     124 * @x. Also note that the function completion_done() can not be used
     125 * to know if there are still waiters after complete_all() has been called.
     126 */
     127void complete_all(struct completion *x)
     128{
     129        unsigned long flags;
     130
     131        spin_lock_irqsave(&x->wait.lock, flags);
     132        __wake_up_locked(&x->wait, TASK_NORMAL, 1);
     133        spin_unlock_irqrestore(&x->wait.lock, flags);
     134}
     135//******************************************************************************
     136//******************************************************************************
     137void __wake_up_locked(wait_queue_head_t *q, unsigned int mode, int nr)
     138{
     139    dprintf3(("WARNING: __wake_up_locked STUB"));
     140}
     141//******************************************************************************
     142//******************************************************************************
     143/**
     144 * wait_for_completion: - waits for completion of a task
     145 * @x:  holds the state of this particular completion
     146 *
     147 * This waits to be signaled for completion of a specific task. It is NOT
     148 * interruptible and there is no timeout.
     149 *
     150 * See also similar routines (i.e. wait_for_completion_timeout()) with timeout
     151 * and interrupt capability. Also see complete().
     152 */
     153void wait_for_completion(struct completion *x)
     154{
     155    dprintf3(("WARNING: wait_for_completion STUB"));
     156}
     157
     158
     159/**
     160 * wait_for_completion_timeout: - waits for completion of a task (w/timeout)
     161 * @x:  holds the state of this particular completion
     162 * @timeout:  timeout value in jiffies
     163 *
     164 * This waits for either a completion of a specific task to be signaled or for a
     165 * specified timeout to expire. The timeout is in jiffies. It is not
     166 * interruptible.
     167 *
     168 * Return: 0 if timed out, and positive (at least 1, or number of jiffies left
     169 * till timeout) if completed.
     170 */
     171unsigned long wait_for_completion_timeout(struct completion *x, unsigned long timeout)
     172{
     173    dprintf3(("WARNING: wait_for_completion_timeout STUB"));
     174    return 1;
     175}
Note: See TracChangeset for help on using the changeset viewer.