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

[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
Loading
Loading
Loading
Loading
+13 −10
Original line number Diff line number Diff line
@@ -31,10 +31,11 @@ note_buf_t crash_notes[NR_CPUS];
/* This keeps a track of which one is crashing cpu. */
static int crashing_cpu;

static u32 *append_elf_note(u32 *buf,
	char *name, unsigned type, void *data, size_t data_len)
static u32 *append_elf_note(u32 *buf, char *name, unsigned type, void *data,
							       size_t data_len)
{
	struct elf_note note;

	note.n_namesz = strlen(name) + 1;
	note.n_descsz = data_len;
	note.n_type   = type;
@@ -44,26 +45,28 @@ static u32 *append_elf_note(u32 *buf,
	buf += (note.n_namesz + 3)/4;
	memcpy(buf, data, note.n_descsz);
	buf += (note.n_descsz + 3)/4;

	return buf;
}

static void final_note(u32 *buf)
{
	struct elf_note note;

	note.n_namesz = 0;
	note.n_descsz = 0;
	note.n_type   = 0;
	memcpy(buf, &note, sizeof(note));
}


static void crash_save_this_cpu(struct pt_regs *regs, int cpu)
{
	struct elf_prstatus prstatus;
	u32 *buf;
	if ((cpu < 0) || (cpu >= NR_CPUS)) {

	if ((cpu < 0) || (cpu >= NR_CPUS))
		return;
	}

	/* Using ELF notes here is opportunistic.
	 * I need a well defined structure format
	 * 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)
	memset(&prstatus, 0, sizeof(prstatus));
	prstatus.pr_pid = current->pid;
	elf_core_copy_regs(&prstatus.pr_reg, regs);
	buf = append_elf_note(buf, "CORE", NT_PRSTATUS,
		&prstatus, sizeof(prstatus));

	buf = append_elf_note(buf, "CORE", NT_PRSTATUS, &prstatus,
				sizeof(prstatus));
	final_note(buf);
}

@@ -119,8 +121,8 @@ static void crash_save_self(struct pt_regs *saved_regs)
{
	struct pt_regs regs;
	int cpu;
	cpu = smp_processor_id();

	cpu = smp_processor_id();
	if (saved_regs)
		crash_setup_regs(&regs, saved_regs);
	else
@@ -153,6 +155,7 @@ static int crash_nmi_callback(struct pt_regs *regs, int cpu)
	/* Assume hlt works */
	__asm__("hlt");
	for(;;);

	return 1;
}

@@ -169,8 +172,8 @@ static void smp_send_nmi_allbutself(void)
static void nmi_shootdown_cpus(void)
{
	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? */
	set_nmi_callback(crash_nmi_callback);
	/* Ensure the new callback function is set before sending
+11 −5
Original line number Diff line number Diff line
@@ -80,7 +80,8 @@ static void identity_map_page(unsigned long address)
	/* Identity map the page table entry */
	pgtable_level1[level1_index] = address | L0_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.
	 * Global tlb entries are not flushed but that is not an issue.
@@ -139,8 +140,10 @@ static void load_segments(void)
}

typedef asmlinkage NORET_TYPE void (*relocate_new_kernel_t)(
	unsigned long indirection_page, unsigned long reboot_code_buffer,
	unsigned long start_address, unsigned int has_pae) ATTRIB_NORET;
					unsigned long indirection_page,
					unsigned long reboot_code_buffer,
					unsigned long start_address,
					unsigned int has_pae) ATTRIB_NORET;

const extern unsigned char relocate_new_kernel[];
extern void relocate_new_kernel_end(void);
@@ -180,20 +183,23 @@ NORET_TYPE void machine_kexec(struct kimage *image)
{
	unsigned long page_list;
	unsigned long reboot_code_buffer;

	relocate_new_kernel_t rnk;

	/* Interrupts aren't acceptable while we reboot */
	local_irq_disable();

	/* 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;

	/* Set up an identity mapping for the reboot_code_buffer */
	identity_map_page(reboot_code_buffer);

	/* 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
	 * automatically loaded from a table, in memory wherever you
+13 −17
Original line number Diff line number Diff line
@@ -21,7 +21,8 @@
#include <asm/machdep.h>

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;

const extern unsigned char relocate_new_kernel[];
@@ -29,17 +30,15 @@ const extern unsigned int relocate_new_kernel_size;

void machine_shutdown(void)
{
	if (ppc_md.machine_shutdown) {
	if (ppc_md.machine_shutdown)
		ppc_md.machine_shutdown();
}
}

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();
}
}

/*
 * Do what every setup is needed on image and the
@@ -48,9 +47,8 @@ void machine_crash_shutdown(struct pt_regs *regs)
 */
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);
	}
	/*
	 * Fail if platform doesn't provide its own machine_kexec_prepare
	 * implementation.
@@ -60,10 +58,9 @@ int machine_kexec_prepare(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);
}
}

/*
 * Do not allocate memory (or fail in any way) in machine_kexec().
@@ -71,9 +68,9 @@ void machine_kexec_cleanup(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);
	} else {
	else {
		/*
		 * Fall back to normal restart if platform doesn't provide
		 * its own kexec function, and user insist to kexec...
@@ -83,7 +80,6 @@ NORET_TYPE void machine_kexec(struct kimage *image)
	for(;;);
}


/*
 * This is a generic machine_kexec function suitable at least for
 * non-OpenFirmware embedded platforms.
@@ -108,8 +104,8 @@ void machine_kexec_simple(struct kimage *image)
	reboot_code_buffer_phys = virt_to_phys((void *)reboot_code_buffer);

	/* copy our kernel relocation code to the control code page */
	memcpy((void *)reboot_code_buffer,
		relocate_new_kernel, relocate_new_kernel_size);
	memcpy((void *)reboot_code_buffer, relocate_new_kernel,
						relocate_new_kernel_size);

	flush_icache_range(reboot_code_buffer,
				reboot_code_buffer + KEXEC_CONTROL_CODE_SIZE);
+5 −4
Original line number Diff line number Diff line
@@ -274,7 +274,8 @@ union thread_union kexec_stack

/* Our assembly helper, in kexec_stub.S */
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 */
void machine_kexec(struct kimage *image)
+27 −22
Original line number Diff line number Diff line
@@ -32,10 +32,10 @@
#define L2_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(
	u64 *level2p, unsigned long addr)
static void init_level2_page(u64 *level2p, unsigned long addr)
{
	unsigned long end_addr;

	addr &= PAGE_MASK;
	end_addr = addr + LEVEL2_SIZE;
	while (addr < end_addr) {
@@ -44,17 +44,19 @@ static void init_level2_page(
	}
}

static int init_level3_page(struct kimage *image,
	u64 *level3p, unsigned long addr, unsigned long last_addr)
static int init_level3_page(struct kimage *image, u64 *level3p,
				unsigned long addr, unsigned long last_addr)
{
	unsigned long end_addr;
	int result;

	result = 0;
	addr &= PAGE_MASK;
	end_addr = addr + LEVEL3_SIZE;
	while ((addr < last_addr) && (addr < end_addr)) {
		struct page *page;
		u64 *level2p;

		page = kimage_alloc_control_pages(image, 0);
		if (!page) {
			result = -ENOMEM;
@@ -75,17 +77,19 @@ static int init_level3_page(struct kimage *image,
}


static int init_level4_page(struct kimage *image,
	u64 *level4p, unsigned long addr, unsigned long last_addr)
static int init_level4_page(struct kimage *image, u64 *level4p,
				unsigned long addr, unsigned long last_addr)
{
	unsigned long end_addr;
	int result;

	result = 0;
	addr &= PAGE_MASK;
	end_addr = addr + LEVEL4_SIZE;
	while ((addr < last_addr) && (addr < end_addr)) {
		struct page *page;
		u64 *level3p;

		page = kimage_alloc_control_pages(image, 0);
		if (!page) {
			result = -ENOMEM;
@@ -159,9 +163,10 @@ static void load_segments(void)
#undef __STR
}

typedef NORET_TYPE void (*relocate_new_kernel_t)(
	unsigned long indirection_page, unsigned long control_code_buffer,
	unsigned long start_address, unsigned long pgtable) ATTRIB_NORET;
typedef NORET_TYPE void (*relocate_new_kernel_t)(unsigned long indirection_page,
					unsigned long control_code_buffer,
					unsigned long start_address,
					unsigned long pgtable) ATTRIB_NORET;

const extern unsigned char relocate_new_kernel[];
const extern unsigned long relocate_new_kernel_size;
@@ -177,12 +182,12 @@ int machine_kexec_prepare(struct kimage *image)

	/* Setup the identity mapped 64bit page table */
	result = init_pgtable(image, start_pgtable);
	if (result) {
	if (result)
		return result;
	}

	/* 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;
}
Loading