Rev 2913 | Rev 2918 | Go to most recent revision | Show entire file | Regard whitespace | Details | Blame | Last modification | View Log | RSS feed
Rev 2913 | Rev 2917 | ||
---|---|---|---|
Line 39... | Line 39... | ||
39 | #include <console/klog.h> |
39 | #include <console/klog.h> |
40 | #include <udebug/udebug.h> |
40 | #include <udebug/udebug.h> |
41 | #include <errno.h> |
41 | #include <errno.h> |
42 | #include <arch.h> |
42 | #include <arch.h> |
43 | 43 | ||
- | 44 | static void udebug_wait_for_go(waitq_t *wq) |
|
- | 45 | { |
|
- | 46 | int rc; |
|
- | 47 | ipl_t ipl; |
|
- | 48 | ||
- | 49 | ipl = waitq_sleep_prepare(wq); |
|
- | 50 | ||
- | 51 | wq->missed_wakeups = 0; /* Enforce blocking. */ |
|
- | 52 | rc = waitq_sleep_timeout_unsafe(wq, SYNCH_NO_TIMEOUT, SYNCH_FLAGS_NONE); |
|
- | 53 | ||
- | 54 | waitq_sleep_finish(wq, rc, ipl); |
|
- | 55 | } |
|
- | 56 | ||
44 | void udebug_stoppable_begin(void) |
57 | void udebug_stoppable_begin(void) |
45 | { |
58 | { |
46 | int nsc; |
59 | int nsc; |
47 | call_t *db_call, *go_call; |
60 | call_t *db_call, *go_call; |
48 | ipl_t ipl; |
61 | ipl_t ipl; |
Line 156... | Line 169... | ||
156 | TASK->debug_begin_call = NULL; |
169 | TASK->debug_begin_call = NULL; |
157 | spinlock_unlock(&THREAD->debug_lock); |
170 | spinlock_unlock(&THREAD->debug_lock); |
158 | spinlock_unlock(&TASK->lock); |
171 | spinlock_unlock(&TASK->lock); |
159 | interrupts_restore(ipl); |
172 | interrupts_restore(ipl); |
160 | 173 | ||
161 | //klog_printf("udebug_stoppable_end: waitq_sleep"); |
- | |
162 | waitq_sleep(&THREAD->go_wq); |
174 | udebug_wait_for_go(&THREAD->go_wq); |
- | 175 | ||
163 | goto restart; |
176 | goto restart; |
164 | /* must try again - have to lose stoppability atomically */ |
177 | /* must try again - have to lose stoppability atomically */ |
165 | } else { |
178 | } else { |
166 | ++TASK->not_stoppable_count; |
179 | ++TASK->not_stoppable_count; |
167 | THREAD->debug_stoppable = false; |
180 | THREAD->debug_stoppable = false; |
Line 220... | Line 233... | ||
220 | spinlock_unlock(&THREAD->debug_lock); |
233 | spinlock_unlock(&THREAD->debug_lock); |
221 | 234 | ||
222 | spinlock_lock(&TASK->lock); |
235 | spinlock_lock(&TASK->lock); |
223 | ipc_answer(&TASK->answerbox, THREAD->debug_go_call); |
236 | ipc_answer(&TASK->answerbox, THREAD->debug_go_call); |
224 | spinlock_unlock(&TASK->lock); |
237 | spinlock_unlock(&TASK->lock); |
225 | - | ||
226 | interrupts_restore(ipl); |
238 | interrupts_restore(ipl); |
227 | 239 | ||
228 | waitq_sleep(&THREAD->go_wq); |
240 | udebug_wait_for_go(&THREAD->go_wq); |
229 | } |
241 | } |
230 | 242 | ||
231 | void udebug_thread_b_event(struct thread *t) |
243 | void udebug_thread_b_event(struct thread *t) |
232 | { |
244 | { |
233 | call_t *call; |
245 | call_t *call; |
Line 270... | Line 282... | ||
270 | ipc_answer(&TASK->answerbox, THREAD->debug_go_call); |
282 | ipc_answer(&TASK->answerbox, THREAD->debug_go_call); |
271 | spinlock_unlock(&TASK->lock); |
283 | spinlock_unlock(&TASK->lock); |
272 | 284 | ||
273 | interrupts_restore(ipl); |
285 | interrupts_restore(ipl); |
274 | klog_printf("- sleep"); |
286 | klog_printf("- sleep"); |
275 | - | ||
276 | waitq_sleep(&THREAD->go_wq); |
287 | udebug_wait_for_go(&THREAD->go_wq); |
277 | } |
288 | } |
278 | 289 | ||
279 | void udebug_thread_e_event(void) |
290 | void udebug_thread_e_event(void) |
280 | { |
291 | { |
281 | call_t *call; |
292 | call_t *call; |