diff options
Diffstat (limited to 'arch/arm/kernel')
| -rw-r--r-- | arch/arm/kernel/atags_proc.c | 28 | ||||
| -rw-r--r-- | arch/arm/kernel/early_printk.c | 17 | ||||
| -rw-r--r-- | arch/arm/kernel/etm.c | 2 | ||||
| -rw-r--r-- | arch/arm/kernel/hw_breakpoint.c | 2 | ||||
| -rw-r--r-- | arch/arm/kernel/perf_event.c | 5 | ||||
| -rw-r--r-- | arch/arm/kernel/process.c | 108 | ||||
| -rw-r--r-- | arch/arm/kernel/sched_clock.c | 4 | ||||
| -rw-r--r-- | arch/arm/kernel/setup.c | 3 | ||||
| -rw-r--r-- | arch/arm/kernel/smp.c | 2 | ||||
| -rw-r--r-- | arch/arm/kernel/swp_emulate.c | 43 | ||||
| -rw-r--r-- | arch/arm/kernel/tcm.c | 1 | ||||
| -rw-r--r-- | arch/arm/kernel/tcm.h | 17 | ||||
| -rw-r--r-- | arch/arm/kernel/topology.c | 2 | ||||
| -rw-r--r-- | arch/arm/kernel/traps.c | 7 | 
14 files changed, 70 insertions, 171 deletions
diff --git a/arch/arm/kernel/atags_proc.c b/arch/arm/kernel/atags_proc.c index 42a1a1415fa..c7ff8073416 100644 --- a/arch/arm/kernel/atags_proc.c +++ b/arch/arm/kernel/atags_proc.c @@ -9,24 +9,18 @@ struct buffer {  	char data[];  }; -static int -read_buffer(char* page, char** start, off_t off, int count, -	int* eof, void* data) +static ssize_t atags_read(struct file *file, char __user *buf, +			  size_t count, loff_t *ppos)  { -	struct buffer *buffer = (struct buffer *)data; - -	if (off >= buffer->size) { -		*eof = 1; -		return 0; -	} - -	count = min((int) (buffer->size - off), count); - -	memcpy(page, &buffer->data[off], count); - -	return count; +	struct buffer *b = PDE_DATA(file_inode(file)); +	return simple_read_from_buffer(buf, count, ppos, b->data, b->size);  } +static const struct file_operations atags_fops = { +	.read = atags_read, +	.llseek = default_llseek, +}; +  #define BOOT_PARAMS_SIZE 1536  static char __initdata atags_copy[BOOT_PARAMS_SIZE]; @@ -66,9 +60,7 @@ static int __init init_atags_procfs(void)  	b->size = size;  	memcpy(b->data, atags_copy, size); -	tags_entry = create_proc_read_entry("atags", 0400, -			NULL, read_buffer, b); - +	tags_entry = proc_create_data("atags", 0400, NULL, &atags_fops, b);  	if (!tags_entry)  		goto nomem; diff --git a/arch/arm/kernel/early_printk.c b/arch/arm/kernel/early_printk.c index 85aa2b29269..43076536965 100644 --- a/arch/arm/kernel/early_printk.c +++ b/arch/arm/kernel/early_printk.c @@ -29,28 +29,17 @@ static void early_console_write(struct console *con, const char *s, unsigned n)  	early_write(s, n);  } -static struct console early_console = { +static struct console early_console_dev = {  	.name =		"earlycon",  	.write =	early_console_write,  	.flags =	CON_PRINTBUFFER | CON_BOOT,  	.index =	-1,  }; -asmlinkage void early_printk(const char *fmt, ...) -{ -	char buf[512]; -	int n; -	va_list ap; - -	va_start(ap, fmt); -	n = vscnprintf(buf, sizeof(buf), fmt, ap); -	early_write(buf, n); -	va_end(ap); -} -  static int __init setup_early_printk(char *buf)  { -	register_console(&early_console); +	early_console = &early_console_dev; +	register_console(&early_console_dev);  	return 0;  } diff --git a/arch/arm/kernel/etm.c b/arch/arm/kernel/etm.c index 9b6de8c988f..8ff0ecdc637 100644 --- a/arch/arm/kernel/etm.c +++ b/arch/arm/kernel/etm.c @@ -254,7 +254,7 @@ static void sysrq_etm_dump(int key)  static struct sysrq_key_op sysrq_etm_op = {  	.handler = sysrq_etm_dump, -	.help_msg = "ETM buffer dump", +	.help_msg = "etm-buffer-dump(v)",  	.action_msg = "etm",  }; diff --git a/arch/arm/kernel/hw_breakpoint.c b/arch/arm/kernel/hw_breakpoint.c index 5dc1aa6f0f7..1fd749ee4a1 100644 --- a/arch/arm/kernel/hw_breakpoint.c +++ b/arch/arm/kernel/hw_breakpoint.c @@ -1043,7 +1043,7 @@ static int dbg_cpu_pm_notify(struct notifier_block *self, unsigned long action,  	return NOTIFY_OK;  } -static struct notifier_block __cpuinitdata dbg_cpu_pm_nb = { +static struct notifier_block dbg_cpu_pm_nb = {  	.notifier_call = dbg_cpu_pm_notify,  }; diff --git a/arch/arm/kernel/perf_event.c b/arch/arm/kernel/perf_event.c index 146157dfe27..8c3094d0f7b 100644 --- a/arch/arm/kernel/perf_event.c +++ b/arch/arm/kernel/perf_event.c @@ -253,7 +253,10 @@ validate_event(struct pmu_hw_events *hw_events,  	struct arm_pmu *armpmu = to_arm_pmu(event->pmu);  	struct pmu *leader_pmu = event->group_leader->pmu; -	if (event->pmu != leader_pmu || event->state <= PERF_EVENT_STATE_OFF) +	if (event->pmu != leader_pmu || event->state < PERF_EVENT_STATE_OFF) +		return 1; + +	if (event->state == PERF_EVENT_STATE_OFF && !event->attr.enable_on_exec)  		return 1;  	return armpmu->get_event_idx(hw_events, event) >= 0; diff --git a/arch/arm/kernel/process.c b/arch/arm/kernel/process.c index 047d3e40e47..ae58d3b37d9 100644 --- a/arch/arm/kernel/process.c +++ b/arch/arm/kernel/process.c @@ -57,38 +57,6 @@ static const char *isa_modes[] = {    "ARM" , "Thumb" , "Jazelle", "ThumbEE"  }; -static volatile int hlt_counter; - -void disable_hlt(void) -{ -	hlt_counter++; -} - -EXPORT_SYMBOL(disable_hlt); - -void enable_hlt(void) -{ -	hlt_counter--; -	BUG_ON(hlt_counter < 0); -} - -EXPORT_SYMBOL(enable_hlt); - -static int __init nohlt_setup(char *__unused) -{ -	hlt_counter = 1; -	return 1; -} - -static int __init hlt_setup(char *__unused) -{ -	hlt_counter = 0; -	return 1; -} - -__setup("nohlt", nohlt_setup); -__setup("hlt", hlt_setup); -  extern void call_with_stack(void (*fn)(void *), void *arg, void *sp);  typedef void (*phys_reset_t)(unsigned long); @@ -172,54 +140,38 @@ static void default_idle(void)  	local_irq_enable();  } -/* - * The idle thread. - * We always respect 'hlt_counter' to prevent low power idle. - */ -void cpu_idle(void) +void arch_cpu_idle_prepare(void)  {  	local_fiq_enable(); +} -	/* endless idle loop with no priority at all */ -	while (1) { -		tick_nohz_idle_enter(); -		rcu_idle_enter(); -		ledtrig_cpu(CPU_LED_IDLE_START); -		while (!need_resched()) { -#ifdef CONFIG_HOTPLUG_CPU -			if (cpu_is_offline(smp_processor_id())) -				cpu_die(); +void arch_cpu_idle_enter(void) +{ +	ledtrig_cpu(CPU_LED_IDLE_START); +#ifdef CONFIG_PL310_ERRATA_769419 +	wmb();  #endif +} -			/* -			 * We need to disable interrupts here -			 * to ensure we don't miss a wakeup call. -			 */ -			local_irq_disable(); -#ifdef CONFIG_PL310_ERRATA_769419 -			wmb(); +void arch_cpu_idle_exit(void) +{ +	ledtrig_cpu(CPU_LED_IDLE_END); +} + +#ifdef CONFIG_HOTPLUG_CPU +void arch_cpu_idle_dead(void) +{ +	cpu_die(); +}  #endif -			if (hlt_counter) { -				local_irq_enable(); -				cpu_relax(); -			} else if (!need_resched()) { -				stop_critical_timings(); -				if (cpuidle_idle_call()) -					default_idle(); -				start_critical_timings(); -				/* -				 * default_idle functions must always -				 * return with IRQs enabled. -				 */ -				WARN_ON(irqs_disabled()); -			} else -				local_irq_enable(); -		} -		ledtrig_cpu(CPU_LED_IDLE_END); -		rcu_idle_exit(); -		tick_nohz_idle_exit(); -		schedule_preempt_disabled(); -	} + +/* + * Called from the core idle loop. + */ +void arch_cpu_idle(void) +{ +	if (cpuidle_idle_call()) +		default_idle();  }  static char reboot_mode = 'h'; @@ -273,11 +225,8 @@ void __show_regs(struct pt_regs *regs)  	unsigned long flags;  	char buf[64]; -	printk("CPU: %d    %s  (%s %.*s)\n", -		raw_smp_processor_id(), print_tainted(), -		init_utsname()->release, -		(int)strcspn(init_utsname()->version, " "), -		init_utsname()->version); +	show_regs_print_info(KERN_DEFAULT); +  	print_symbol("PC is at %s\n", instruction_pointer(regs));  	print_symbol("LR is at %s\n", regs->ARM_lr);  	printk("pc : [<%08lx>]    lr : [<%08lx>]    psr: %08lx\n" @@ -332,7 +281,6 @@ void __show_regs(struct pt_regs *regs)  void show_regs(struct pt_regs * regs)  {  	printk("\n"); -	printk("Pid: %d, comm: %20s\n", task_pid_nr(current), current->comm);  	__show_regs(regs);  	dump_stack();  } diff --git a/arch/arm/kernel/sched_clock.c b/arch/arm/kernel/sched_clock.c index bd6f56b9ec2..59d2adb764a 100644 --- a/arch/arm/kernel/sched_clock.c +++ b/arch/arm/kernel/sched_clock.c @@ -45,12 +45,12 @@ static u32 notrace jiffy_sched_clock_read(void)  static u32 __read_mostly (*read_sched_clock)(void) = jiffy_sched_clock_read; -static inline u64 cyc_to_ns(u64 cyc, u32 mult, u32 shift) +static inline u64 notrace cyc_to_ns(u64 cyc, u32 mult, u32 shift)  {  	return (cyc * mult) >> shift;  } -static unsigned long long cyc_to_sched_clock(u32 cyc, u32 mask) +static unsigned long long notrace cyc_to_sched_clock(u32 cyc, u32 mask)  {  	u64 epoch_ns;  	u32 epoch_cyc; diff --git a/arch/arm/kernel/setup.c b/arch/arm/kernel/setup.c index d343a6c3a6d..234e339196c 100644 --- a/arch/arm/kernel/setup.c +++ b/arch/arm/kernel/setup.c @@ -56,7 +56,6 @@  #include <asm/virt.h>  #include "atags.h" -#include "tcm.h"  #if defined(CONFIG_FPE_NWFPE) || defined(CONFIG_FPE_FASTFPE) @@ -798,8 +797,6 @@ void __init setup_arch(char **cmdline_p)  	reserve_crashkernel(); -	tcm_init(); -  #ifdef CONFIG_MULTI_IRQ_HANDLER  	handle_arch_irq = mdesc->handle_irq;  #endif diff --git a/arch/arm/kernel/smp.c b/arch/arm/kernel/smp.c index 1f2ccccaf00..4619177bcfe 100644 --- a/arch/arm/kernel/smp.c +++ b/arch/arm/kernel/smp.c @@ -336,7 +336,7 @@ asmlinkage void __cpuinit secondary_start_kernel(void)  	/*  	 * OK, it's off to the idle thread for us  	 */ -	cpu_idle(); +	cpu_startup_entry(CPUHP_ONLINE);  }  void __init smp_cpus_done(unsigned int max_cpus) diff --git a/arch/arm/kernel/swp_emulate.c b/arch/arm/kernel/swp_emulate.c index ab1017bd166..087fc321e9e 100644 --- a/arch/arm/kernel/swp_emulate.c +++ b/arch/arm/kernel/swp_emulate.c @@ -21,6 +21,7 @@  #include <linux/init.h>  #include <linux/kernel.h>  #include <linux/proc_fs.h> +#include <linux/seq_file.h>  #include <linux/sched.h>  #include <linux/syscalls.h>  #include <linux/perf_event.h> @@ -79,27 +80,27 @@ static unsigned long abtcounter;  static pid_t         previous_pid;  #ifdef CONFIG_PROC_FS -static int proc_read_status(char *page, char **start, off_t off, int count, -			    int *eof, void *data) +static int proc_status_show(struct seq_file *m, void *v)  { -	char *p = page; -	int len; - -	p += sprintf(p, "Emulated SWP:\t\t%lu\n", swpcounter); -	p += sprintf(p, "Emulated SWPB:\t\t%lu\n", swpbcounter); -	p += sprintf(p, "Aborted SWP{B}:\t\t%lu\n", abtcounter); +	seq_printf(m, "Emulated SWP:\t\t%lu\n", swpcounter); +	seq_printf(m, "Emulated SWPB:\t\t%lu\n", swpbcounter); +	seq_printf(m, "Aborted SWP{B}:\t\t%lu\n", abtcounter);  	if (previous_pid != 0) -		p += sprintf(p, "Last process:\t\t%d\n", previous_pid); - -	len = (p - page) - off; -	if (len < 0) -		len = 0; - -	*eof = (len <= count) ? 1 : 0; -	*start = page + off; +		seq_printf(m, "Last process:\t\t%d\n", previous_pid); +	return 0; +} -	return len; +static int proc_status_open(struct inode *inode, struct file *file) +{ +	return single_open(file, proc_status_show, PDE_DATA(inode));  } + +static const struct file_operations proc_status_fops = { +	.open		= proc_status_open, +	.read		= seq_read, +	.llseek		= seq_lseek, +	.release	= seq_release, +};  #endif  /* @@ -266,14 +267,8 @@ static struct undef_hook swp_hook = {  static int __init swp_emulation_init(void)  {  #ifdef CONFIG_PROC_FS -	struct proc_dir_entry *res; - -	res = create_proc_entry("cpu/swp_emulation", S_IRUGO, NULL); - -	if (!res) +	if (!proc_create("cpu/swp_emulation", S_IRUGO, NULL, &proc_status_fops))  		return -ENOMEM; - -	res->read_proc = proc_read_status;  #endif /* CONFIG_PROC_FS */  	printk(KERN_NOTICE "Registering SWP/SWPB emulation handler\n"); diff --git a/arch/arm/kernel/tcm.c b/arch/arm/kernel/tcm.c index 30ae6bb4a31..f50f19e5c13 100644 --- a/arch/arm/kernel/tcm.c +++ b/arch/arm/kernel/tcm.c @@ -17,7 +17,6 @@  #include <asm/mach/map.h>  #include <asm/memory.h>  #include <asm/system_info.h> -#include "tcm.h"  static struct gen_pool *tcm_pool;  static bool dtcm_present; diff --git a/arch/arm/kernel/tcm.h b/arch/arm/kernel/tcm.h deleted file mode 100644 index 8015ad434a4..00000000000 --- a/arch/arm/kernel/tcm.h +++ /dev/null @@ -1,17 +0,0 @@ -/* - * Copyright (C) 2008-2009 ST-Ericsson AB - * License terms: GNU General Public License (GPL) version 2 - * TCM memory handling for ARM systems - * - * Author: Linus Walleij <linus.walleij@stericsson.com> - * Author: Rickard Andersson <rickard.andersson@stericsson.com> - */ - -#ifdef CONFIG_HAVE_TCM -void __init tcm_init(void); -#else -/* No TCM support, just blank inlines to be optimized out */ -inline void tcm_init(void) -{ -} -#endif diff --git a/arch/arm/kernel/topology.c b/arch/arm/kernel/topology.c index 79282ebcd93..f10316b4ecd 100644 --- a/arch/arm/kernel/topology.c +++ b/arch/arm/kernel/topology.c @@ -100,7 +100,7 @@ static void __init parse_dt_topology(void)  	int alloc_size, cpu = 0;  	alloc_size = nr_cpu_ids * sizeof(struct cpu_capacity); -	cpu_capacity = (struct cpu_capacity *)kzalloc(alloc_size, GFP_NOWAIT); +	cpu_capacity = kzalloc(alloc_size, GFP_NOWAIT);  	while ((cn = of_find_node_by_type(cn, "cpu"))) {  		const u32 *rate, *reg; diff --git a/arch/arm/kernel/traps.c b/arch/arm/kernel/traps.c index 1c089119b2d..18b32e8e449 100644 --- a/arch/arm/kernel/traps.c +++ b/arch/arm/kernel/traps.c @@ -204,13 +204,6 @@ static void dump_backtrace(struct pt_regs *regs, struct task_struct *tsk)  }  #endif -void dump_stack(void) -{ -	dump_backtrace(NULL, NULL); -} - -EXPORT_SYMBOL(dump_stack); -  void show_stack(struct task_struct *tsk, unsigned long *sp)  {  	dump_backtrace(NULL, tsk);  |