Editing Porting the kernel
Warning: You are not logged in. Your IP address will be publicly visible if you make any edits. If you log in or create an account, your edits will be attributed to your username, along with other benefits.
The edit can be undone.
Please check the comparison below to verify that this is what you want to do, and then save the changes below to finish undoing the edit.
Latest revision | Your text | ||
Line 1: | Line 1: | ||
− | + | OpenVZ kernel supports x86, x86_64, and IA64 architectures as of now. Below are the quick and dirty information about how to port the kernel to yet another architecture. | |
− | |||
− | OpenVZ kernel supports x86, x86_64, IA64 | ||
− | + | * UBC: need to account any platform specific VMAs created by hand in arch specific code. i.e. if there are calls of <code>insert_vma_struct()</code> this should be accounted with <code>ub_memory_charge()</code>. Didn't find such thing on sparc64. | |
− | * UBC: need to account any platform specific VMAs created by hand in arch specific code. i.e. if there are calls of <code> | ||
− | |||
* If there are user triggerable <code>printk()</code>'s (related to the user, not the system as a whole) better replace them with <code>ve_printk()</code>. Otherwise user can flood (DoS). minor actually. | * If there are user triggerable <code>printk()</code>'s (related to the user, not the system as a whole) better replace them with <code>ve_printk()</code>. Otherwise user can flood (DoS). minor actually. | ||
− | + | * Call to functions <code>find_task_by_pid()</code>, <code>for_each_process()</code> and <code>do_each_thread()</code>/<code>while_each_thread()</code> should be replaced with it's counterparts - <code>find_task_by_pid_XXX()</code>, <code>for_each_process_XXX()</code> and <code>do_each_thread_XXX()</code>/<code>while_each_thread_XXX()</code>, where <code>XXX</code> is either <code>all</code> or <code>ve</code>. Here <code>all</code> means that all system processes in the system will be scanned, while <code>ve</code> means that only the [[VE]] accessible from this task (current context - <code>get_exec_env()</code>) will be visible. So you need to decide whether the code in question is about system or user context. | |
− | * Call to functions <code>find_task_by_pid()</code>, <code>for_each_process()</code> and <code>do_each_thread()</code>/<code>while_each_thread()</code> should be replaced with it's counterparts - <code>find_task_by_pid_XXX()</code>, <code>for_each_process_XXX()</code> and <code>do_each_thread_XXX()</code>/<code>while_each_thread_XXX()</code>, where <code>XXX</code> is either <code>all</code> or <code>ve</code>. Here <code>all</code> means that all system processes in the system will be scanned, while <code>ve</code> means that only the [[ | ||
− | |||
* <code>task->pid</code> should be changed with <code>virt_pid(task)</code> in some places. The rule is simple: user should see only virtual pids, while kernel operate on global pids. e.g. in signals, virtual pid should be delivered to app. | * <code>task->pid</code> should be changed with <code>virt_pid(task)</code> in some places. The rule is simple: user should see only virtual pids, while kernel operate on global pids. e.g. in signals, virtual pid should be delivered to app. | ||
− | + | * In interrupt handlers one need to set global host ([[VE0]]) context. i.e. <code>set_exec_env()</code>, <code>set_exec_ub()</code>. i.e. interrupt handlers are running in VE0 context. | |
− | * In interrupt handlers one need to set global host ([[ | ||
− | + | * In <code>kernel_thread()</code> one needs to prohibit kernel threads in VE. Mostly security related... | |
− | * In <code>kernel_thread()</code> one needs to prohibit kernel threads in | ||
− | + | * <code>show_registers()</code> better to extend to show current VE. | |
− | * | ||
− | |||
* <code>utsname</code> should be virtualized. This mostly means that <code>system_utsnames</code> should be replaced with <code>ve_utsname</code>. See any arch code for this. | * <code>utsname</code> should be virtualized. This mostly means that <code>system_utsnames</code> should be replaced with <code>ve_utsname</code>. See any arch code for this. | ||
− | |||
* Some exports will be required. e.g. <code>show_mem()</code> and probably <code>cpu_khz</code>. Easy. | * Some exports will be required. e.g. <code>show_mem()</code> and probably <code>cpu_khz</code>. Easy. | ||
− | |||
* Everything else are bugfixes. | * Everything else are bugfixes. | ||
− | |||
All these are straightforward and really simple, so it should take a few hours to do. | All these are straightforward and really simple, so it should take a few hours to do. | ||
− | == External links == | + | == External links == |
* [http://forum.openvz.org/index.php?t=msg&goto=3338&&srch=sparc#msg_num_5 Original forum post] | * [http://forum.openvz.org/index.php?t=msg&goto=3338&&srch=sparc#msg_num_5 Original forum post] | ||
− | |||
− | [[Category: Kernel | + | [[Category: Kernel]] |
[[Category: Development]] | [[Category: Development]] |