Rev 2131 | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed
Rev 2131 | Rev 2307 | ||
---|---|---|---|
Line 71... | Line 71... | ||
71 | * possible occurence of deadlock. |
71 | * possible occurence of deadlock. |
72 | * |
72 | * |
73 | * @param sl Pointer to spinlock_t structure. |
73 | * @param sl Pointer to spinlock_t structure. |
74 | */ |
74 | */ |
75 | #ifdef CONFIG_DEBUG_SPINLOCK |
75 | #ifdef CONFIG_DEBUG_SPINLOCK |
76 | #define DEADLOCK_THRESHOLD 100000000 |
- | |
77 | void spinlock_lock_debug(spinlock_t *sl) |
76 | void spinlock_lock_debug(spinlock_t *sl) |
78 | { |
77 | { |
79 | count_t i = 0; |
78 | count_t i = 0; |
80 | char *symbol; |
79 | char *symbol; |
81 | bool deadlock_reported = false; |
80 | bool deadlock_reported = false; |
82 | 81 | ||
83 | preemption_disable(); |
82 | preemption_disable(); |
84 | while (test_and_set(&sl->val)) { |
83 | while (test_and_set(&sl->val)) { |
85 | 84 | ||
86 | /* |
85 | /* |
87 | * We need to be careful about printflock and fb_lock. |
86 | * We need to be careful about printf_lock and fb_lock. |
88 | * Both of them are used to report deadlocks via |
87 | * Both of them are used to report deadlocks via |
89 | * printf() and fb_putchar(). |
88 | * printf() and fb_putchar(). |
90 | * |
89 | * |
91 | * We trust our code that there is no possible deadlock |
90 | * We trust our code that there is no possible deadlock |
92 | * caused by these two locks (except when an exception |
91 | * caused by these two locks (except when an exception |
93 | * is triggered for instance by printf() or fb_putchar()). |
92 | * is triggered for instance by printf() or fb_putchar()). |
94 | * However, we encountered false positives caused by very |
93 | * However, we encountered false positives caused by very |
95 | * slow VESA framebuffer interaction (especially when |
94 | * slow VESA framebuffer interaction (especially when |
96 | * run in a simulator) that caused problems with both |
95 | * run in a simulator) that caused problems with both |
97 | * printflock and fb_lock. |
96 | * printf_lock and fb_lock. |
98 | * |
97 | * |
99 | * Possible deadlocks on both printflock and fb_lock |
98 | * Possible deadlocks on both printf_lock and fb_lock |
100 | * are therefore not reported as they would cause an |
99 | * are therefore not reported as they would cause an |
101 | * infinite recursion. |
100 | * infinite recursion. |
102 | */ |
101 | */ |
103 | if (sl == &printflock) |
102 | if (sl == &printf_lock) |
104 | continue; |
103 | continue; |
105 | #ifdef CONFIG_FB |
104 | #ifdef CONFIG_FB |
106 | if (sl == &fb_lock) |
105 | if (sl == &fb_lock) |
107 | continue; |
106 | continue; |
108 | #endif |
107 | #endif |