Jest to związane z: https://stackoverflow.com/a/13413099/1284631Wywołanie systemowe systemu Linux reboot(): dlaczego wywołuje metodę do_exit (0) po kernel_halt()?
Teraz pytanie brzmi:
Dlaczego restart() wywołanie systemowe, gdy wywołana z LINUX_REBOOT_CMD_HALT
parametru (patrz tutaj: http://lxr.linux.no/linux+v3.6.6/kernel/sys.c#L480) dzwoni do_exit(0)
po już nazywane kernel_halt()
, jako wywołanie kernel_halt()
sprowadza się do wywoływania stop_this_cpu()
(patrz tutaj: http://lxr.linux.no/linux+v3.6.6/arch/x86/kernel/process.c#L519), jako część native_machine_halt()
(patrz tutaj: http://lxr.linux.no/linux+v3.6.6/arch/x86/kernel/reboot.c#L680).
Albo, wydaje mi się, że stop_this_cpu()
nigdy nie wraca (kończy się nieskończoną pętlą).
Tak, to jest do_exit(0)
nazywane na wszelki wypadek, gdy kernel_halt()
nie wykonuje swojej pracy i powraca? Zamiast tego, zamiast tego, zamiast tego, może to być bezpośrednio?
panika zrobić stragan z jądra, wyjść, prawdopodobnie zresetować –
@eicto: tak, zgadzam się z tym, powiedziałem to samo w końcówce mojego postu. Prawdziwe pytanie brzmi: dlaczego wywołanie make_exit (0) * przed * paniką()? Jeśli chcesz zrobić blokadę jądra, wyjść lub zrestartować, dlaczego nie wywołasz bezpośrednio paniki()? – user1284631