Ignore:
File:
1 edited

Legend:

Unmodified
Added
Removed
  • kernel/generic/src/synch/workqueue.c

    r63e27ef r04552324  
    3737 */
    3838
    39 #include <assert.h>
    4039#include <synch/workqueue.h>
    4140#include <synch/spinlock.h>
     
    190189        if (workq) {
    191190                if (workq_init(workq, name)) {
    192                         assert(!workq_corrupted(workq));
     191                        ASSERT(!workq_corrupted(workq));
    193192                        return workq;
    194193                }
     
    203202void workq_destroy(struct work_queue *workq)
    204203{
    205         assert(!workq_corrupted(workq));
     204        ASSERT(!workq_corrupted(workq));
    206205       
    207206        irq_spinlock_lock(&workq->lock, true);
     
    215214                workq_stop(workq);
    216215        } else {
    217                 assert(0 == running_workers);
     216                ASSERT(0 == running_workers);
    218217        }
    219218       
     
    265264static bool add_worker(struct work_queue *workq)
    266265{
    267         assert(!workq_corrupted(workq));
     266        ASSERT(!workq_corrupted(workq));
    268267
    269268        thread_t *thread = thread_create(worker_thread, workq, TASK,
     
    274273               
    275274                /* cur_worker_cnt proactively increased in signal_worker_logic() .*/
    276                 assert(0 < workq->cur_worker_cnt);
     275                ASSERT(0 < workq->cur_worker_cnt);
    277276                --workq->cur_worker_cnt;
    278277               
     
    313312               
    314313                /* cur_worker_cnt proactively increased in signal_worker() .*/
    315                 assert(0 < workq->cur_worker_cnt);
     314                ASSERT(0 < workq->cur_worker_cnt);
    316315                --workq->cur_worker_cnt;
    317316        }
     
    335334void workq_stop(struct work_queue *workq)
    336335{
    337         assert(!workq_corrupted(workq));
     336        ASSERT(!workq_corrupted(workq));
    338337       
    339338        interrupt_workers(workq);
     
    347346
    348347        /* workq_stop() may only be called once. */
    349         assert(!workq->stopping);
     348        ASSERT(!workq->stopping);
    350349        workq->stopping = true;
    351350       
     
    359358static void wait_for_workers(struct work_queue *workq)
    360359{
    361         assert(!PREEMPTION_DISABLED);
     360        ASSERT(!PREEMPTION_DISABLED);
    362361       
    363362        irq_spinlock_lock(&workq->lock, true);
     
    376375        }
    377376       
    378         assert(list_empty(&workq->workers));
     377        ASSERT(list_empty(&workq->workers));
    379378       
    380379        /* Wait for deferred add_worker_op(), signal_worker_op() to finish. */
     
    474473        work_func_t func, bool can_block)
    475474{
    476         assert(!workq_corrupted(workq));
     475        ASSERT(!workq_corrupted(workq));
    477476       
    478477        bool success = true;
     
    522521static size_t active_workers_now(struct work_queue *workq)
    523522{
    524         assert(irq_spinlock_locked(&workq->lock));
     523        ASSERT(irq_spinlock_locked(&workq->lock));
    525524       
    526525        /* Workers blocked are sleeping in the work function (ie not idle). */
    527         assert(workq->blocked_worker_cnt <= workq->cur_worker_cnt);
     526        ASSERT(workq->blocked_worker_cnt <= workq->cur_worker_cnt);
    528527        /* Idle workers are waiting for more work to arrive in condvar_wait. */
    529         assert(workq->idle_worker_cnt <= workq->cur_worker_cnt);
     528        ASSERT(workq->idle_worker_cnt <= workq->cur_worker_cnt);
    530529       
    531530        /* Idle + blocked workers == sleeping worker threads. */
    532531        size_t sleeping_workers = workq->blocked_worker_cnt + workq->idle_worker_cnt;
    533532       
    534         assert(sleeping_workers <= workq->cur_worker_cnt);
     533        ASSERT(sleeping_workers <= workq->cur_worker_cnt);
    535534        /* Workers pending activation are idle workers not yet given a time slice. */
    536         assert(workq->activate_pending <= workq->idle_worker_cnt);
     535        ASSERT(workq->activate_pending <= workq->idle_worker_cnt);
    537536       
    538537        /*
     
    551550static size_t active_workers(struct work_queue *workq)
    552551{
    553         assert(irq_spinlock_locked(&workq->lock));
     552        ASSERT(irq_spinlock_locked(&workq->lock));
    554553       
    555554        /*
     
    574573static void signal_worker_op(struct work_queue *workq)
    575574{
    576         assert(!workq_corrupted(workq));
     575        ASSERT(!workq_corrupted(workq));
    577576
    578577        condvar_signal(&workq->activate_worker);
    579578       
    580579        irq_spinlock_lock(&workq->lock, true);
    581         assert(0 < workq->pending_op_cnt);
     580        ASSERT(0 < workq->pending_op_cnt);
    582581        --workq->pending_op_cnt;
    583582        irq_spinlock_unlock(&workq->lock, true);
     
    594593static signal_op_t signal_worker_logic(struct work_queue *workq, bool can_block)
    595594{
    596         assert(!workq_corrupted(workq));
    597         assert(irq_spinlock_locked(&workq->lock));
     595        ASSERT(!workq_corrupted(workq));
     596        ASSERT(irq_spinlock_locked(&workq->lock));
    598597       
    599598        /* Only signal workers if really necessary. */
     
    646645                         */
    647646                        if (need_worker && !can_block && 0 == active) {
    648                                 assert(0 == workq->idle_worker_cnt);
     647                                ASSERT(0 == workq->idle_worker_cnt);
    649648                               
    650649                                irq_spinlock_lock(&nonblock_adder.lock, true);
     
    682681        }
    683682       
    684         assert(arg != NULL);
     683        ASSERT(arg != NULL);
    685684       
    686685        struct work_queue *workq = arg;
     
    698697static bool dequeue_work(struct work_queue *workq, work_t **pwork_item)
    699698{
    700         assert(!workq_corrupted(workq));
     699        ASSERT(!workq_corrupted(workq));
    701700       
    702701        irq_spinlock_lock(&workq->lock, true);
     
    705704        if (!workq->stopping && worker_unnecessary(workq)) {
    706705                /* There are too many workers for this load. Exit. */
    707                 assert(0 < workq->cur_worker_cnt);
     706                ASSERT(0 < workq->cur_worker_cnt);
    708707                --workq->cur_worker_cnt;
    709708                list_remove(&THREAD->workq_link);
     
    730729               
    731730#ifdef CONFIG_DEBUG
    732                 assert(!work_item_corrupted(*pwork_item));
     731                ASSERT(!work_item_corrupted(*pwork_item));
    733732                (*pwork_item)->cookie = 0;
    734733#endif
     
    739738        } else {
    740739                /* Requested to stop and no more work queued. */
    741                 assert(workq->stopping);
     740                ASSERT(workq->stopping);
    742741                --workq->cur_worker_cnt;
    743742                stop = true;
     
    752751static bool worker_unnecessary(struct work_queue *workq)
    753752{
    754         assert(irq_spinlock_locked(&workq->lock));
     753        ASSERT(irq_spinlock_locked(&workq->lock));
    755754       
    756755        /* No work is pending. We don't need too many idle threads. */
     
    776775       
    777776        /* Ignore lock ordering just here. */
    778         assert(irq_spinlock_locked(&workq->lock));
     777        ASSERT(irq_spinlock_locked(&workq->lock));
    779778       
    780779        _condvar_wait_timeout_irq_spinlock(&workq->activate_worker,
    781780                &workq->lock, SYNCH_NO_TIMEOUT, SYNCH_FLAGS_NONE);
    782781
    783         assert(!workq_corrupted(workq));
    784         assert(irq_spinlock_locked(&workq->lock));
     782        ASSERT(!workq_corrupted(workq));
     783        ASSERT(irq_spinlock_locked(&workq->lock));
    785784       
    786785        THREAD->workq_idling = false;
     
    792791void workq_before_thread_is_ready(thread_t *thread)
    793792{
    794         assert(thread);
    795         assert(irq_spinlock_locked(&thread->lock));
     793        ASSERT(thread);
     794        ASSERT(irq_spinlock_locked(&thread->lock));
    796795
    797796        /* Worker's work func() is about to wake up from sleeping. */
    798797        if (thread->workq && thread->workq_blocked) {
    799798                /* Must be blocked in user work func() and not be waiting for work. */
    800                 assert(!thread->workq_idling);
    801                 assert(thread->state == Sleeping);
    802                 assert(THREAD != thread);
    803                 assert(!workq_corrupted(thread->workq));
     799                ASSERT(!thread->workq_idling);
     800                ASSERT(thread->state == Sleeping);
     801                ASSERT(THREAD != thread);
     802                ASSERT(!workq_corrupted(thread->workq));
    804803               
    805804                /* Protected by thread->lock */
     
    815814void workq_after_thread_ran(void)
    816815{
    817         assert(THREAD);
    818         assert(irq_spinlock_locked(&THREAD->lock));
     816        ASSERT(THREAD);
     817        ASSERT(irq_spinlock_locked(&THREAD->lock));
    819818
    820819        /* Worker's work func() is about to sleep/block. */
    821820        if (THREAD->workq && THREAD->state == Sleeping && !THREAD->workq_idling) {
    822                 assert(!THREAD->workq_blocked);
    823                 assert(!workq_corrupted(THREAD->workq));
     821                ASSERT(!THREAD->workq_blocked);
     822                ASSERT(!workq_corrupted(THREAD->workq));
    824823               
    825824                THREAD->workq_blocked = true;
     
    835834               
    836835                if (op) {
    837                         assert(add_worker_noblock_op == op || signal_worker_op == op);
     836                        ASSERT(add_worker_noblock_op == op || signal_worker_op == op);
    838837                        op(THREAD->workq);
    839838                }
     
    904903                        struct work_queue, nb_link);
    905904
    906                 assert(!workq_corrupted(*pworkq));
     905                ASSERT(!workq_corrupted(*pworkq));
    907906               
    908907                list_remove(&(*pworkq)->nb_link);
Note: See TracChangeset for help on using the changeset viewer.