2012-11-19 10 views
5

questo è legato a: https://stackoverflow.com/a/13413099/1284631Chiamata di sistema di riavvio di Linux(): perché chiama do_exit (0) dopo kernel_halt()?

Ora, la domanda è:

Perché la chiamata di sistema riavvio(), quando viene chiamato con LINUX_REBOOT_CMD_HALT parametro (vedi qui: http://lxr.linux.no/linux+v3.6.6/kernel/sys.c#L480) sta chiamando do_exit(0) dopo aver già chiamato kernel_halt(), come chiamando kernel_halt() si riduce a chiamare stop_this_cpu() (vedere qui: http://lxr.linux.no/linux+v3.6.6/arch/x86/kernel/process.c#L519), come parte di native_machine_halt() (vedere qui: http://lxr.linux.no/linux+v3.6.6/arch/x86/kernel/reboot.c#L680).

Oppure, mi sembra che stop_this_cpu() non ritorni mai (termina con un ciclo infinito).

Quindi, è do_exit(0) chiamato nel caso in cui kernel_halt() non fa il suo lavoro e restituisce? Perché non direttamente lo panic(), allora?

+0

panic rendere kernel stallo, uscita, probabilmente riavvio –

+0

@eicto: sì, sono d'accordo, ho detto la stessa cosa nella frase finale del mio post. La vera domanda è: perché la chiamata a do_exit (0) * prima * del panico()? Se vuoi far stalli, uscire o riavviare il kernel, perché non chiamare direttamente panic()? – user1284631

risposta

2

Alcune idee:

  • Può essere che kernel_halt() rifiuta di fermare in realtà per un motivo legittimo, anche se non posso pensare di qualsiasi.
  • kernel_halt() può essere progettato per essere chiamato anche da un hypervisor o qualcosa ad un livello superiore o equivalente rispetto al kernel (codice SMI abitudine forse?)
  • Forse la funzione kernel_halt() restituisce presto, "pianificazione", la battuta d'arresto, e la l'arresto vero e proprio avviene qualche tempo dopo su hardware. Ricordo di aver letto sull'esecuzione di uno spegnimento di ATX in DOS in assemblea - avresti impartito l'istruzione outb per intendere lo spegnimento, ma dovresti avere un po 'di nops, un ciclo infinito, o un hlt subito dopo, come la potenza effettiva spento potrebbe accadere alcuni cicli più tardi.
  • Il processo chiamante potrebbe voler gestire il mancato riavvio in un modo diverso dal panico del kernel.
+0

Grazie. Apprezzo. – user1284631

Problemi correlati