Commit 72414d3f authored by Maneesh Soni's avatar Maneesh Soni Committed by Linus Torvalds

[PATCH] kexec code cleanup

o Following patch provides purely cosmetic changes and corrects CodingStyle
  guide lines related certain issues like below in kexec related files

  o braces for one line "if" statements, "for" loops,
  o more than 80 column wide lines,
  o No space after "while", "for" and "switch" key words

o Changes:
  o take-2: Removed the extra tab before "case" key words.
  o take-3: Put operator at the end of line and space before "*/"
Signed-off-by: default avatarManeesh Soni <maneesh@in.ibm.com>
Signed-off-by: default avatarAndrew Morton <akpm@osdl.org>
Signed-off-by: default avatarLinus Torvalds <torvalds@osdl.org>
parent 4f339ecb
...@@ -31,10 +31,11 @@ note_buf_t crash_notes[NR_CPUS]; ...@@ -31,10 +31,11 @@ note_buf_t crash_notes[NR_CPUS];
/* This keeps a track of which one is crashing cpu. */ /* This keeps a track of which one is crashing cpu. */
static int crashing_cpu; static int crashing_cpu;
static u32 *append_elf_note(u32 *buf, static u32 *append_elf_note(u32 *buf, char *name, unsigned type, void *data,
char *name, unsigned type, void *data, size_t data_len) size_t data_len)
{ {
struct elf_note note; struct elf_note note;
note.n_namesz = strlen(name) + 1; note.n_namesz = strlen(name) + 1;
note.n_descsz = data_len; note.n_descsz = data_len;
note.n_type = type; note.n_type = type;
...@@ -44,26 +45,28 @@ static u32 *append_elf_note(u32 *buf, ...@@ -44,26 +45,28 @@ static u32 *append_elf_note(u32 *buf,
buf += (note.n_namesz + 3)/4; buf += (note.n_namesz + 3)/4;
memcpy(buf, data, note.n_descsz); memcpy(buf, data, note.n_descsz);
buf += (note.n_descsz + 3)/4; buf += (note.n_descsz + 3)/4;
return buf; return buf;
} }
static void final_note(u32 *buf) static void final_note(u32 *buf)
{ {
struct elf_note note; struct elf_note note;
note.n_namesz = 0; note.n_namesz = 0;
note.n_descsz = 0; note.n_descsz = 0;
note.n_type = 0; note.n_type = 0;
memcpy(buf, &note, sizeof(note)); memcpy(buf, &note, sizeof(note));
} }
static void crash_save_this_cpu(struct pt_regs *regs, int cpu) static void crash_save_this_cpu(struct pt_regs *regs, int cpu)
{ {
struct elf_prstatus prstatus; struct elf_prstatus prstatus;
u32 *buf; u32 *buf;
if ((cpu < 0) || (cpu >= NR_CPUS)) {
if ((cpu < 0) || (cpu >= NR_CPUS))
return; return;
}
/* Using ELF notes here is opportunistic. /* Using ELF notes here is opportunistic.
* I need a well defined structure format * I need a well defined structure format
* for the data I pass, and I need tags * for the data I pass, and I need tags
...@@ -75,9 +78,8 @@ static void crash_save_this_cpu(struct pt_regs *regs, int cpu) ...@@ -75,9 +78,8 @@ static void crash_save_this_cpu(struct pt_regs *regs, int cpu)
memset(&prstatus, 0, sizeof(prstatus)); memset(&prstatus, 0, sizeof(prstatus));
prstatus.pr_pid = current->pid; prstatus.pr_pid = current->pid;
elf_core_copy_regs(&prstatus.pr_reg, regs); elf_core_copy_regs(&prstatus.pr_reg, regs);
buf = append_elf_note(buf, "CORE", NT_PRSTATUS, buf = append_elf_note(buf, "CORE", NT_PRSTATUS, &prstatus,
&prstatus, sizeof(prstatus)); sizeof(prstatus));
final_note(buf); final_note(buf);
} }
...@@ -119,8 +121,8 @@ static void crash_save_self(struct pt_regs *saved_regs) ...@@ -119,8 +121,8 @@ static void crash_save_self(struct pt_regs *saved_regs)
{ {
struct pt_regs regs; struct pt_regs regs;
int cpu; int cpu;
cpu = smp_processor_id();
cpu = smp_processor_id();
if (saved_regs) if (saved_regs)
crash_setup_regs(&regs, saved_regs); crash_setup_regs(&regs, saved_regs);
else else
...@@ -153,6 +155,7 @@ static int crash_nmi_callback(struct pt_regs *regs, int cpu) ...@@ -153,6 +155,7 @@ static int crash_nmi_callback(struct pt_regs *regs, int cpu)
/* Assume hlt works */ /* Assume hlt works */
__asm__("hlt"); __asm__("hlt");
for(;;); for(;;);
return 1; return 1;
} }
...@@ -169,8 +172,8 @@ static void smp_send_nmi_allbutself(void) ...@@ -169,8 +172,8 @@ static void smp_send_nmi_allbutself(void)
static void nmi_shootdown_cpus(void) static void nmi_shootdown_cpus(void)
{ {
unsigned long msecs; unsigned long msecs;
atomic_set(&waiting_for_crash_ipi, num_online_cpus() - 1);
atomic_set(&waiting_for_crash_ipi, num_online_cpus() - 1);
/* Would it be better to replace the trap vector here? */ /* Would it be better to replace the trap vector here? */
set_nmi_callback(crash_nmi_callback); set_nmi_callback(crash_nmi_callback);
/* Ensure the new callback function is set before sending /* Ensure the new callback function is set before sending
......
...@@ -80,7 +80,8 @@ static void identity_map_page(unsigned long address) ...@@ -80,7 +80,8 @@ static void identity_map_page(unsigned long address)
/* Identity map the page table entry */ /* Identity map the page table entry */
pgtable_level1[level1_index] = address | L0_ATTR; pgtable_level1[level1_index] = address | L0_ATTR;
pgtable_level2[level2_index] = __pa(pgtable_level1) | L1_ATTR; pgtable_level2[level2_index] = __pa(pgtable_level1) | L1_ATTR;
set_64bit(&pgtable_level3[level3_index], __pa(pgtable_level2) | L2_ATTR); set_64bit(&pgtable_level3[level3_index],
__pa(pgtable_level2) | L2_ATTR);
/* Flush the tlb so the new mapping takes effect. /* Flush the tlb so the new mapping takes effect.
* Global tlb entries are not flushed but that is not an issue. * Global tlb entries are not flushed but that is not an issue.
...@@ -139,8 +140,10 @@ static void load_segments(void) ...@@ -139,8 +140,10 @@ static void load_segments(void)
} }
typedef asmlinkage NORET_TYPE void (*relocate_new_kernel_t)( typedef asmlinkage NORET_TYPE void (*relocate_new_kernel_t)(
unsigned long indirection_page, unsigned long reboot_code_buffer, unsigned long indirection_page,
unsigned long start_address, unsigned int has_pae) ATTRIB_NORET; unsigned long reboot_code_buffer,
unsigned long start_address,
unsigned int has_pae) ATTRIB_NORET;
const extern unsigned char relocate_new_kernel[]; const extern unsigned char relocate_new_kernel[];
extern void relocate_new_kernel_end(void); extern void relocate_new_kernel_end(void);
...@@ -180,20 +183,23 @@ NORET_TYPE void machine_kexec(struct kimage *image) ...@@ -180,20 +183,23 @@ NORET_TYPE void machine_kexec(struct kimage *image)
{ {
unsigned long page_list; unsigned long page_list;
unsigned long reboot_code_buffer; unsigned long reboot_code_buffer;
relocate_new_kernel_t rnk; relocate_new_kernel_t rnk;
/* Interrupts aren't acceptable while we reboot */ /* Interrupts aren't acceptable while we reboot */
local_irq_disable(); local_irq_disable();
/* Compute some offsets */ /* Compute some offsets */
reboot_code_buffer = page_to_pfn(image->control_code_page) << PAGE_SHIFT; reboot_code_buffer = page_to_pfn(image->control_code_page)
<< PAGE_SHIFT;
page_list = image->head; page_list = image->head;
/* Set up an identity mapping for the reboot_code_buffer */ /* Set up an identity mapping for the reboot_code_buffer */
identity_map_page(reboot_code_buffer); identity_map_page(reboot_code_buffer);
/* copy it out */ /* copy it out */
memcpy((void *)reboot_code_buffer, relocate_new_kernel, relocate_new_kernel_size); memcpy((void *)reboot_code_buffer, relocate_new_kernel,
relocate_new_kernel_size);
/* The segment registers are funny things, they are /* The segment registers are funny things, they are
* automatically loaded from a table, in memory wherever you * automatically loaded from a table, in memory wherever you
......
...@@ -21,7 +21,8 @@ ...@@ -21,7 +21,8 @@
#include <asm/machdep.h> #include <asm/machdep.h>
typedef NORET_TYPE void (*relocate_new_kernel_t)( typedef NORET_TYPE void (*relocate_new_kernel_t)(
unsigned long indirection_page, unsigned long reboot_code_buffer, unsigned long indirection_page,
unsigned long reboot_code_buffer,
unsigned long start_address) ATTRIB_NORET; unsigned long start_address) ATTRIB_NORET;
const extern unsigned char relocate_new_kernel[]; const extern unsigned char relocate_new_kernel[];
...@@ -29,16 +30,14 @@ const extern unsigned int relocate_new_kernel_size; ...@@ -29,16 +30,14 @@ const extern unsigned int relocate_new_kernel_size;
void machine_shutdown(void) void machine_shutdown(void)
{ {
if (ppc_md.machine_shutdown) { if (ppc_md.machine_shutdown)
ppc_md.machine_shutdown(); ppc_md.machine_shutdown();
}
} }
void machine_crash_shutdown(struct pt_regs *regs) void machine_crash_shutdown(struct pt_regs *regs)
{ {
if (ppc_md.machine_crash_shutdown) { if (ppc_md.machine_crash_shutdown)
ppc_md.machine_crash_shutdown(); ppc_md.machine_crash_shutdown();
}
} }
/* /*
...@@ -48,9 +47,8 @@ void machine_crash_shutdown(struct pt_regs *regs) ...@@ -48,9 +47,8 @@ void machine_crash_shutdown(struct pt_regs *regs)
*/ */
int machine_kexec_prepare(struct kimage *image) int machine_kexec_prepare(struct kimage *image)
{ {
if (ppc_md.machine_kexec_prepare) { if (ppc_md.machine_kexec_prepare)
return ppc_md.machine_kexec_prepare(image); return ppc_md.machine_kexec_prepare(image);
}
/* /*
* Fail if platform doesn't provide its own machine_kexec_prepare * Fail if platform doesn't provide its own machine_kexec_prepare
* implementation. * implementation.
...@@ -60,9 +58,8 @@ int machine_kexec_prepare(struct kimage *image) ...@@ -60,9 +58,8 @@ int machine_kexec_prepare(struct kimage *image)
void machine_kexec_cleanup(struct kimage *image) void machine_kexec_cleanup(struct kimage *image)
{ {
if (ppc_md.machine_kexec_cleanup) { if (ppc_md.machine_kexec_cleanup)
ppc_md.machine_kexec_cleanup(image); ppc_md.machine_kexec_cleanup(image);
}
} }
/* /*
...@@ -71,9 +68,9 @@ void machine_kexec_cleanup(struct kimage *image) ...@@ -71,9 +68,9 @@ void machine_kexec_cleanup(struct kimage *image)
*/ */
NORET_TYPE void machine_kexec(struct kimage *image) NORET_TYPE void machine_kexec(struct kimage *image)
{ {
if (ppc_md.machine_kexec) { if (ppc_md.machine_kexec)
ppc_md.machine_kexec(image); ppc_md.machine_kexec(image);
} else { else {
/* /*
* Fall back to normal restart if platform doesn't provide * Fall back to normal restart if platform doesn't provide
* its own kexec function, and user insist to kexec... * its own kexec function, and user insist to kexec...
...@@ -83,7 +80,6 @@ NORET_TYPE void machine_kexec(struct kimage *image) ...@@ -83,7 +80,6 @@ NORET_TYPE void machine_kexec(struct kimage *image)
for(;;); for(;;);
} }
/* /*
* This is a generic machine_kexec function suitable at least for * This is a generic machine_kexec function suitable at least for
* non-OpenFirmware embedded platforms. * non-OpenFirmware embedded platforms.
...@@ -108,8 +104,8 @@ void machine_kexec_simple(struct kimage *image) ...@@ -108,8 +104,8 @@ void machine_kexec_simple(struct kimage *image)
reboot_code_buffer_phys = virt_to_phys((void *)reboot_code_buffer); reboot_code_buffer_phys = virt_to_phys((void *)reboot_code_buffer);
/* copy our kernel relocation code to the control code page */ /* copy our kernel relocation code to the control code page */
memcpy((void *)reboot_code_buffer, memcpy((void *)reboot_code_buffer, relocate_new_kernel,
relocate_new_kernel, relocate_new_kernel_size); relocate_new_kernel_size);
flush_icache_range(reboot_code_buffer, flush_icache_range(reboot_code_buffer,
reboot_code_buffer + KEXEC_CONTROL_CODE_SIZE); reboot_code_buffer + KEXEC_CONTROL_CODE_SIZE);
......
...@@ -58,7 +58,7 @@ int machine_kexec_prepare(struct kimage *image) ...@@ -58,7 +58,7 @@ int machine_kexec_prepare(struct kimage *image)
* handle the virtual mode, we must make sure no destination * handle the virtual mode, we must make sure no destination
* overlaps kernel static data or bss. * overlaps kernel static data or bss.
*/ */
for(i = 0; i < image->nr_segments; i++) for (i = 0; i < image->nr_segments; i++)
if (image->segment[i].mem < __pa(_end)) if (image->segment[i].mem < __pa(_end))
return -ETXTBSY; return -ETXTBSY;
...@@ -76,7 +76,7 @@ int machine_kexec_prepare(struct kimage *image) ...@@ -76,7 +76,7 @@ int machine_kexec_prepare(struct kimage *image)
low = __pa(htab_address); low = __pa(htab_address);
high = low + (htab_hash_mask + 1) * HASH_GROUP_SIZE; high = low + (htab_hash_mask + 1) * HASH_GROUP_SIZE;
for(i = 0; i < image->nr_segments; i++) { for (i = 0; i < image->nr_segments; i++) {
begin = image->segment[i].mem; begin = image->segment[i].mem;
end = begin + image->segment[i].memsz; end = begin + image->segment[i].memsz;
...@@ -98,7 +98,7 @@ int machine_kexec_prepare(struct kimage *image) ...@@ -98,7 +98,7 @@ int machine_kexec_prepare(struct kimage *image)
low = *basep; low = *basep;
high = low + (*sizep); high = low + (*sizep);
for(i = 0; i < image->nr_segments; i++) { for (i = 0; i < image->nr_segments; i++) {
begin = image->segment[i].mem; begin = image->segment[i].mem;
end = begin + image->segment[i].memsz; end = begin + image->segment[i].memsz;
...@@ -274,7 +274,8 @@ union thread_union kexec_stack ...@@ -274,7 +274,8 @@ union thread_union kexec_stack
/* Our assembly helper, in kexec_stub.S */ /* Our assembly helper, in kexec_stub.S */
extern NORET_TYPE void kexec_sequence(void *newstack, unsigned long start, extern NORET_TYPE void kexec_sequence(void *newstack, unsigned long start,
void *image, void *control, void (*clear_all)(void)) ATTRIB_NORET; void *image, void *control,
void (*clear_all)(void)) ATTRIB_NORET;
/* too late to fail here */ /* too late to fail here */
void machine_kexec(struct kimage *image) void machine_kexec(struct kimage *image)
......
...@@ -67,7 +67,7 @@ machine_kexec(struct kimage *image) ...@@ -67,7 +67,7 @@ machine_kexec(struct kimage *image)
ctl_clear_bit(0,28); ctl_clear_bit(0,28);
on_each_cpu(kexec_halt_all_cpus, image, 0, 0); on_each_cpu(kexec_halt_all_cpus, image, 0, 0);
for(;;); for (;;);
} }
static void static void
...@@ -85,7 +85,7 @@ kexec_halt_all_cpus(void *kernel_image) ...@@ -85,7 +85,7 @@ kexec_halt_all_cpus(void *kernel_image)
for_each_online_cpu(cpu) { for_each_online_cpu(cpu) {
if (cpu == smp_processor_id()) if (cpu == smp_processor_id())
continue; continue;
while(!smp_cpu_not_running(cpu)) while (!smp_cpu_not_running(cpu))
cpu_relax(); cpu_relax();
} }
......
...@@ -32,29 +32,31 @@ ...@@ -32,29 +32,31 @@
#define L2_ATTR (_PAGE_PRESENT | _PAGE_RW | _PAGE_ACCESSED | _PAGE_DIRTY) #define L2_ATTR (_PAGE_PRESENT | _PAGE_RW | _PAGE_ACCESSED | _PAGE_DIRTY)
#define L3_ATTR (_PAGE_PRESENT | _PAGE_RW | _PAGE_ACCESSED | _PAGE_DIRTY) #define L3_ATTR (_PAGE_PRESENT | _PAGE_RW | _PAGE_ACCESSED | _PAGE_DIRTY)
static void init_level2_page( static void init_level2_page(u64 *level2p, unsigned long addr)
u64 *level2p, unsigned long addr)
{ {
unsigned long end_addr; unsigned long end_addr;
addr &= PAGE_MASK; addr &= PAGE_MASK;
end_addr = addr + LEVEL2_SIZE; end_addr = addr + LEVEL2_SIZE;
while(addr < end_addr) { while (addr < end_addr) {
*(level2p++) = addr | L1_ATTR; *(level2p++) = addr | L1_ATTR;
addr += LEVEL1_SIZE; addr += LEVEL1_SIZE;
} }
} }
static int init_level3_page(struct kimage *image, static int init_level3_page(struct kimage *image, u64 *level3p,
u64 *level3p, unsigned long addr, unsigned long last_addr) unsigned long addr, unsigned long last_addr)
{ {
unsigned long end_addr; unsigned long end_addr;
int result; int result;
result = 0; result = 0;
addr &= PAGE_MASK; addr &= PAGE_MASK;
end_addr = addr + LEVEL3_SIZE; end_addr = addr + LEVEL3_SIZE;
while((addr < last_addr) && (addr < end_addr)) { while ((addr < last_addr) && (addr < end_addr)) {
struct page *page; struct page *page;
u64 *level2p; u64 *level2p;
page = kimage_alloc_control_pages(image, 0); page = kimage_alloc_control_pages(image, 0);
if (!page) { if (!page) {
result = -ENOMEM; result = -ENOMEM;
...@@ -66,7 +68,7 @@ static int init_level3_page(struct kimage *image, ...@@ -66,7 +68,7 @@ static int init_level3_page(struct kimage *image,
addr += LEVEL2_SIZE; addr += LEVEL2_SIZE;
} }
/* clear the unused entries */ /* clear the unused entries */
while(addr < end_addr) { while (addr < end_addr) {
*(level3p++) = 0; *(level3p++) = 0;
addr += LEVEL2_SIZE; addr += LEVEL2_SIZE;
} }
...@@ -75,17 +77,19 @@ static int init_level3_page(struct kimage *image, ...@@ -75,17 +77,19 @@ static int init_level3_page(struct kimage *image,
} }
static int init_level4_page(struct kimage *image, static int init_level4_page(struct kimage *image, u64 *level4p,
u64 *level4p, unsigned long addr, unsigned long last_addr) unsigned long addr, unsigned long last_addr)
{ {
unsigned long end_addr; unsigned long end_addr;
int result; int result;
result = 0; result = 0;
addr &= PAGE_MASK; addr &= PAGE_MASK;
end_addr = addr + LEVEL4_SIZE; end_addr = addr + LEVEL4_SIZE;
while((addr < last_addr) && (addr < end_addr)) { while ((addr < last_addr) && (addr < end_addr)) {
struct page *page; struct page *page;
u64 *level3p; u64 *level3p;
page = kimage_alloc_control_pages(image, 0); page = kimage_alloc_control_pages(image, 0);
if (!page) { if (!page) {
result = -ENOMEM; result = -ENOMEM;
...@@ -100,11 +104,11 @@ static int init_level4_page(struct kimage *image, ...@@ -100,11 +104,11 @@ static int init_level4_page(struct kimage *image,
addr += LEVEL3_SIZE; addr += LEVEL3_SIZE;
} }
/* clear the unused entries */ /* clear the unused entries */
while(addr < end_addr) { while (addr < end_addr) {
*(level4p++) = 0; *(level4p++) = 0;
addr += LEVEL3_SIZE; addr += LEVEL3_SIZE;
} }
out: out:
return result; return result;
} }
...@@ -159,9 +163,10 @@ static void load_segments(void) ...@@ -159,9 +163,10 @@ static void load_segments(void)
#undef __STR #undef __STR
} }
typedef NORET_TYPE void (*relocate_new_kernel_t)( typedef NORET_TYPE void (*relocate_new_kernel_t)(unsigned long indirection_page,
unsigned long indirection_page, unsigned long control_code_buffer, unsigned long control_code_buffer,
unsigned long start_address, unsigned long pgtable) ATTRIB_NORET; unsigned long start_address,
unsigned long pgtable) ATTRIB_NORET;
const extern unsigned char relocate_new_kernel[]; const extern unsigned char relocate_new_kernel[];
const extern unsigned long relocate_new_kernel_size; const extern unsigned long relocate_new_kernel_size;
...@@ -177,12 +182,12 @@ int machine_kexec_prepare(struct kimage *image) ...@@ -177,12 +182,12 @@ int machine_kexec_prepare(struct kimage *image)
/* Setup the identity mapped 64bit page table */ /* Setup the identity mapped 64bit page table */
result = init_pgtable(image, start_pgtable); result = init_pgtable(image, start_pgtable);
if (result) { if (result)
return result; return result;
}
/* Place the code in the reboot code buffer */ /* Place the code in the reboot code buffer */
memcpy(__va(control_code_buffer), relocate_new_kernel, relocate_new_kernel_size); memcpy(__va(control_code_buffer), relocate_new_kernel,
relocate_new_kernel_size);
return 0; return 0;
} }
......
...@@ -287,7 +287,7 @@ static ssize_t read_oldmem(struct file *file, char __user *buf, ...@@ -287,7 +287,7 @@ static ssize_t read_oldmem(struct file *file, char __user *buf,
size_t read = 0, csize; size_t read = 0, csize;
int rc = 0; int rc = 0;
while(count) { while (count) {
pfn = *ppos / PAGE_SIZE; pfn = *ppos / PAGE_SIZE;
if (pfn > saved_max_pfn) if (pfn > saved_max_pfn)
return read; return read;
......
...@@ -91,14 +91,17 @@ extern NORET_TYPE void machine_kexec(struct kimage *image) ATTRIB_NORET; ...@@ -91,14 +91,17 @@ extern NORET_TYPE void machine_kexec(struct kimage *image) ATTRIB_NORET;
extern int machine_kexec_prepare(struct kimage *image); extern int machine_kexec_prepare(struct kimage *image);
extern void machine_kexec_cleanup(struct kimage *image); extern void machine_kexec_cleanup(struct kimage *image);
extern asmlinkage long sys_kexec_load(unsigned long entry, extern asmlinkage long sys_kexec_load(unsigned long entry,
unsigned long nr_segments, struct kexec_segment __user *segments, unsigned long nr_segments,
struct kexec_segment __user *segments,
unsigned long flags); unsigned long flags);
#ifdef CONFIG_COMPAT #ifdef CONFIG_COMPAT
extern asmlinkage long compat_sys_kexec_load(unsigned long entry, extern asmlinkage long compat_sys_kexec_load(unsigned long entry,
unsigned long nr_segments, struct compat_kexec_segment __user *segments, unsigned long nr_segments,
struct compat_kexec_segment __user *segments,
unsigned long flags); unsigned long flags);
#endif #endif
extern struct page *kimage_alloc_control_pages(struct kimage *image, unsigned int order); extern struct page *kimage_alloc_control_pages(struct kimage *image,
unsigned int order);
extern void crash_kexec(struct pt_regs *); extern void crash_kexec(struct pt_regs *);
int kexec_should_crash(struct task_struct *); int kexec_should_crash(struct task_struct *);
extern struct kimage *kexec_image; extern struct kimage *kexec_image;
......
...@@ -159,8 +159,8 @@ asmlinkage long sys_shutdown(int, int); ...@@ -159,8 +159,8 @@ asmlinkage long sys_shutdown(int, int);
asmlinkage long sys_reboot(int magic1, int magic2, unsigned int cmd, asmlinkage long sys_reboot(int magic1, int magic2, unsigned int cmd,
void __user *arg); void __user *arg);
asmlinkage long sys_restart_syscall(void); asmlinkage long sys_restart_syscall(void);
asmlinkage long sys_kexec_load(unsigned long entry, asmlinkage long sys_kexec_load(unsigned long entry, unsigned long nr_segments,
unsigned long nr_segments, struct kexec_segment __user *segments, struct kexec_segment __user *segments,
unsigned long flags); unsigned long flags);
asmlinkage long sys_exit(int error_code); asmlinkage long sys_exit(int error_code);
......
This diff is collapsed.
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment