này liên quan đến: https://stackoverflow.com/a/13413099/1284631Linux reboot() gọi hệ thống: tại sao nó gọi do_exit (0) sau kernel_halt()?
Bây giờ, câu hỏi là:
Tại sao khi khởi động lại() hệ thống gọi, khi gọi với LINUX_REBOOT_CMD_HALT
tham số (xem ở đây: http://lxr.linux.no/linux+v3.6.6/kernel/sys.c#L480) đang kêu gọi do_exit(0)
sau khi đã gọi kernel_halt()
, khi gọi số kernel_halt()
, hãy gọi điện đến số stop_this_cpu()
(xem tại đây: http://lxr.linux.no/linux+v3.6.6/arch/x86/kernel/process.c#L519), như một phần của native_machine_halt()
(xem tại đây: http://lxr.linux.no/linux+v3.6.6/arch/x86/kernel/reboot.c#L680).
Hoặc, có vẻ như với tôi rằng stop_this_cpu()
không bao giờ trả lại (kết thúc bằng vòng lặp vô hạn).
Vì vậy, nó là do_exit(0)
được gọi là chỉ trong trường hợp đó kernel_halt()
không thực hiện công việc của mình và nó quay trở lại? Tại sao không thay thế trực tiếp panic()
?
panic làm cho gian hàng hạt nhân, thoát, có thể khởi động lại –
@eicto: vâng, tôi đồng ý với điều đó, tôi đã nói điều tương tự trong cụm từ kết thúc bài đăng của tôi. Câu hỏi thực sự là: tại sao cuộc gọi đến do_exit (0) * trước * hoảng loạn()? Nếu bạn muốn làm cho các hạt nhân gian hàng, thoát hoặc khởi động lại, tại sao không gọi hoảng loạn() trực tiếp? – user1284631