- 論壇徽章:
- 0
|
本帖最后由 cuic139 于 2012-02-07 15:21 編輯
回復(fù) 3# linuxfellow 你用的是什么版本的內(nèi)核,我用的是2.6.39,sgi上只有一個給3.0的patch。。。湊合patch上了結(jié)果在多核環(huán)境下一進入斷點或者是單步執(zhí)行就會出現(xiàn)重入reenter的情況,分析了好幾天源碼,覺得是在kdb的處理函數(shù)里,斷點和單步的情況下沒有進給其他cpu發(fā)送ipi中斷的處理流程,但是代碼里寫的好像就是不該進入。。。也不知道問誰,CU的大神們,求救 - if (smp_processor_id() == lkdb_initial_cpu &&
- !KDB_STATE(DOING_SS) &&
- !KDB_STATE(RECURSE)) {
- /*
- * (Re)install the global breakpoints and cleanup the cached
- * symbol table. This is only done once from the initial
- * processor on go.
- */
- KDB_DEBUG_STATE("kdb 12", reason);
- if (!kdb_quiet(reason) || smp_processor_id() == 0) {
- lkdb_bp_install_global(regs);
- lkdbnearsym_cleanup();
- ldebug_kusage();
- }
- if (!KDB_STATE(GO1)) {
- /*
- * Release all other cpus which will see KDB_STATE(LEAVING) is set.
- */
- int i;
- for (i = 0; i < NR_CPUS; ++i) {
- if (KDB_STATE_CPU(KDB, i))
- KDB_STATE_SET_CPU(LEAVING, i);
- KDB_STATE_CLEAR_CPU(WAIT_IPI, i);
- KDB_STATE_CLEAR_CPU(HOLD_CPU, i);
- }
- /* Wait until all the other processors leave kdb */
- while (kdb_previous_event() != 1)
- ;
- if (!kdb_quiet(reason))
- notify_die(DIE_KDEBUG_LEAVE, "KDEBUG LEAVE", regs, error, 0, 0);
- lkdb_initial_cpu = -1; /* release kdb control */
- KDB_DEBUG_STATE("kdb 13", reason);
- }
- }
復(fù)制代碼 |
|