![]() ![]() Setting kernel command-line parametersģ.1.2. Kernel command-line parameters"Ĭollapse section "3.1. Listing of kernel parameters and values"Įxpand section "3.1. Listing of kernel parameters and values"Ĭollapse section "3. Listing of kernel parameters and valuesĮxpand section "3. What tunables can be controlled?"Ĭollapse section "2.3. How to work with kernel tunables"Įxpand section "2.3. How to work with kernel tunables"Ĭollapse section "2.2. Working with sysctl and kernel tunables"Įxpand section "2.2. Working with sysctl and kernel tunables"Ĭollapse section "2. Working with sysctl and kernel tunablesĮxpand section "2. Signing kernel module with the private keyĢ. System administrator manually adding public key to the MOK listġ.9.5. Factory firmware image including public keyġ.9.4.2. Enrolling public key on target system"ġ.9.4.1. Enrolling public key on target system"Ĭollapse section "1.9.4. Enrolling public key on target systemĮxpand section "1.9.4. Generating a public and private X.509 key pairġ.9.4. Kernel module authentication requirementsġ.9.3. Sources for public keys used to authenticate kernel modulesġ.9.2.2. Kernel module authentication"Ĭollapse section "1.9.2. Signing kernel modules for secure boot"Įxpand section "1.9.2. Signing kernel modules for secure boot"Ĭollapse section "1.9. ![]() Signing kernel modules for secure bootĮxpand section "1.9. Preventing kernel modules from being automatically loaded at system boot timeġ.9. Loading kernel modules automatically at system boot timeġ.8. Unloading kernel modules at system runtimeġ.7. Loading kernel modules at system runtimeġ.6. Displaying information about a moduleġ.5. Working with kernel modules"Ĭollapse section "1. If you have better insight, please contribute.Expand section "1. Finally, as the sole task executing on the current processor (which is the only processor still alive), with all local interrupts disabled (that is, the preemptible scheduler - a timer interrupt, after all - has no chance.), then the panic() function loops some time or it calls emergency_restart(), that is supposed to restart the processor. Maybe is just a safeguard, for the case when the stop_this_cpu() fails (and returns): in this case, do_exit() will end cleanly the current task, then the panic() function is called.Īs for the panic() code (defined here: ), the function first disables the local interrupts, then it disables all the other processors, except the current one by calling smp_send_stop(). I am not sure about this explanation, as the stop_this_cpu() seems to not return (it enters an infinite loop). Even if the scheduler is awoken, there are no more enabled processors on which it could schedule some task, nor interrupt: the system is halted. I interpret it like that: now, with all processors marked as disabled, the syscall reboot() calls do_exit(0) and ends itself. I am not sure why the syscall reboot() still calls do_exit(0), after calling kernel_halt(). The first thing that this function does is to disable interrupts on the current processor, that is the scheduler is no more able to take control. It is this function that stops the other CPUs (through machine_shutdown()), then calls stop_this_cpu() to disable the last remaining working processor. That function calls syscore_shutdown() to execute all the registered system core shutdown callbacks, displays the "System halted" message, then it dumps the kernel, AND, finally, it calls machine_halt(), that is a wrapper for native_machine_halt() (see: ). Then, for the LINUX_REBOOT_CMD_HALT flag (see: ), the syscall calls kernel_halt() (defined here: ). This, in turn, calls the syscall reboot() (see: ). After some research, I am ready to give myself a more complete answer, below:Īt least for the x86 architecture, the reboot(LINUX_REBOOT_CMD_HALT) is the way to go.
0 Comments
Leave a Reply. |
AuthorWrite something about yourself. No need to be fancy, just an overview. ArchivesCategories |