Fork us on GitHub Follow us on Facebook Follow us on Twitter

Changeset 311929ec in mainline


Ignore:
Timestamp:
2012-05-08T10:18:53Z (9 years ago)
Author:
Jakub Jermar <jakub@…>
Branches:
master
Children:
8d2d308f
Parents:
905721b
Message:

Print stack traces when looping on a spinlock or an active mutex is detected.

Location:
kernel/generic/src/synch
Files:
2 edited

Legend:

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

    r905721b r311929ec  
    4040#include <debug.h>
    4141#include <arch.h>
     42#include <stacktrace.h>
    4243
    4344/** Initialize mutex.
     
    8788                ASSERT(!(flags & SYNCH_FLAGS_INTERRUPTIBLE));
    8889               
     90                unsigned int cnt = 0;
     91                bool deadlock_reported = false;
    8992                do {
     93                        if (cnt++ > DEADLOCK_THRESHOLD) {
     94                                printf("cpu%u: looping on active mutex %p\n",
     95                                    CPU->id, mtx);
     96                                stack_trace();
     97                                cnt = 0;
     98                                deadlock_reported = true;
     99                        }
    90100                        rc = semaphore_trydown(&mtx->sem);
    91101                } while (SYNCH_FAILED(rc) &&
    92102                    !(flags & SYNCH_FLAGS_NON_BLOCKING));
     103                if (deadlock_reported)
     104                        printf("cpu%u: not deadlocked\n", CPU->id);
    93105        }
    94106
  • kernel/generic/src/synch/spinlock.c

    r905721b r311929ec  
    4444#include <debug.h>
    4545#include <symtab.h>
     46#include <stacktrace.h>
    4647
    4748#ifdef CONFIG_SMP
     
    104105                            "caller=%p (%s)\n", CPU->id, lock, lock->name,
    105106                            (void *) CALLER, symtab_fmt_name_lookup(CALLER));
     107                        stack_trace();
    106108                       
    107109                        i = 0;
Note: See TracChangeset for help on using the changeset viewer.