Frage

Ich habe Änderungen in sched.c in Linux-Kernel 2.4 (Hausaufgaben), und jetzt geht das System in den Kernel Panik. Das Merkwürdige ist: es scheint eine Menge zu passieren Kontrollen und Initialisierungen und gerät in Panik erst ganz am Ende, zeigen hte folgende Stack-Trace Boote:

update_process_times
do_timer
timer_interrupt
handle_IRQ_event
do_IRQ
call_do_IRQ
do)wp_page
handle_mm_fault
do_page_fault
do_sigaction
sys_rt_sigaction
do_page_fault
error_code

Und der Fehler ist: "In Interrupt-Handler - nicht synching"

Ich weiß, dass es schwer ist, ohne Code zu sagen, aber jeder kann machen eine Vermutung mich in die richtige Richtung weisen?

War es hilfreich?

Lösung

Ich kann Ihnen mein persönliches Mantra geben, wenn man Fehler im Kernel: „Es ist immer deine Schuld“

Ich sehe Probleme oft durch Überschreiben Speicher nach draußen, wo ich arbeite - wenn ich Hardware für DMA eine falsche Adresse speiste zum Beispiel. Sie können irgendwie eine Sperre werden vermasseln; dass in diesem Fall möglich erscheint, wenn Sie ein Timeout sehen: a. vergessen gesperrt Sperre wird ein Timeout verursacht aufgrund eines hängen auftreten

Für mich eine Panik in update_process_times könnte ein Problem mit der Aufgabe struct Zeiger vorschlagen ... aber ich wirklich keine Ahnung haben.

Beachten Sie, dass die Dinge im Kernel gehen oft schief lange bevor ein Fehler auftritt, so dass ein falsches Bit irgendwo im Code Schuld sein kann, auch wenn es scheint nicht, wie es sollte eine Wirkung haben. Wenn Sie können, empfehle ich Ihren Code schrittweise Hinzufügen oder Entfernen und Überprüfung für das Problem zu sehen, ob Sie es isolieren kann.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top