diff options
Diffstat (limited to 'arch/cris/kernel')
| -rw-r--r-- | arch/cris/kernel/asm-offsets.c | 6 | ||||
| -rw-r--r-- | arch/cris/kernel/crisksyms.c | 1 | ||||
| -rw-r--r-- | arch/cris/kernel/irq.c | 47 | ||||
| -rw-r--r-- | arch/cris/kernel/module.c | 45 | ||||
| -rw-r--r-- | arch/cris/kernel/process.c | 90 | ||||
| -rw-r--r-- | arch/cris/kernel/profile.c | 2 | ||||
| -rw-r--r-- | arch/cris/kernel/ptrace.c | 3 | ||||
| -rw-r--r-- | arch/cris/kernel/setup.c | 3 | ||||
| -rw-r--r-- | arch/cris/kernel/time.c | 87 | ||||
| -rw-r--r-- | arch/cris/kernel/traps.c | 10 | ||||
| -rw-r--r-- | arch/cris/kernel/vmlinux.lds.S | 8 | 
11 files changed, 26 insertions, 276 deletions
diff --git a/arch/cris/kernel/asm-offsets.c b/arch/cris/kernel/asm-offsets.c index dd7b8e98322..a5fd88d816a 100644 --- a/arch/cris/kernel/asm-offsets.c +++ b/arch/cris/kernel/asm-offsets.c @@ -1,3 +1,4 @@ +#include <linux/kbuild.h>  #include <linux/sched.h>  #include <asm/thread_info.h> @@ -7,11 +8,6 @@   * and format the required data.   */ -#define DEFINE(sym, val) \ -	asm volatile("\n->" #sym " %0 " #val : : "i" (val)) - -#define BLANK() asm volatile("\n->" : : ) -  #if !defined(CONFIG_ETRAX_ARCH_V10) && !defined(CONFIG_ETRAX_ARCH_V32)  #error One of ARCH v10 and ARCH v32 must be true!  #endif diff --git a/arch/cris/kernel/crisksyms.c b/arch/cris/kernel/crisksyms.c index 7ac000f6a88..5868cee20eb 100644 --- a/arch/cris/kernel/crisksyms.c +++ b/arch/cris/kernel/crisksyms.c @@ -30,7 +30,6 @@ extern void __negdi2(void);  extern void iounmap(volatile void * __iomem);  /* Platform dependent support */ -EXPORT_SYMBOL(kernel_thread);  EXPORT_SYMBOL(get_cmos_time);  EXPORT_SYMBOL(loops_per_usec); diff --git a/arch/cris/kernel/irq.c b/arch/cris/kernel/irq.c index 469f7f9d62e..dd0be5de55d 100644 --- a/arch/cris/kernel/irq.c +++ b/arch/cris/kernel/irq.c @@ -36,51 +36,10 @@  #include <linux/spinlock.h>  #include <asm/io.h> - -int show_interrupts(struct seq_file *p, void *v) -{ -	int i = *(loff_t *) v, j; -	struct irqaction * action; -	unsigned long flags; - -	if (i == 0) { -		seq_printf(p, "           "); -		for_each_online_cpu(j) -			seq_printf(p, "CPU%d       ",j); -		seq_putc(p, '\n'); -	} - -	if (i < NR_IRQS) { -		raw_spin_lock_irqsave(&irq_desc[i].lock, flags); -		action = irq_desc[i].action; -		if (!action) -			goto skip; -		seq_printf(p, "%3d: ",i); -#ifndef CONFIG_SMP -		seq_printf(p, "%10u ", kstat_irqs(i)); -#else -		for_each_online_cpu(j) -			seq_printf(p, "%10u ", kstat_irqs_cpu(i, j)); -#endif -		seq_printf(p, " %14s", irq_desc[i].chip->name); -		seq_printf(p, "  %s", action->name); - -		for (action=action->next; action; action = action->next) -			seq_printf(p, ", %s", action->name); - -		seq_putc(p, '\n'); -skip: -		raw_spin_unlock_irqrestore(&irq_desc[i].lock, flags); -	} -	return 0; -} - +#include <arch/system.h>  /* called by the assembler IRQ entry functions defined in irq.h   * to dispatch the interrupts to registered handlers - * interrupts are disabled upon entry - depending on if the - * interrupt was registered with IRQF_DISABLED or not, interrupts - * are re-enabled or not.   */  asmlinkage void do_IRQ(int irq, struct pt_regs * regs) @@ -93,8 +52,8 @@ asmlinkage void do_IRQ(int irq, struct pt_regs * regs)  		printk("do_IRQ: stack overflow: %lX\n", sp);  		show_stack(NULL, (unsigned long *)sp);  	} -	__do_IRQ(irq); -        irq_exit(); +	generic_handle_irq(irq); +	irq_exit();  	set_irq_regs(old_regs);  } diff --git a/arch/cris/kernel/module.c b/arch/cris/kernel/module.c index bcd502f74cd..51123f985eb 100644 --- a/arch/cris/kernel/module.c +++ b/arch/cris/kernel/module.c @@ -30,45 +30,17 @@  #endif  #ifdef CONFIG_ETRAX_KMALLOCED_MODULES -#define MALLOC_MODULE(size) kmalloc(size, GFP_KERNEL) -#define FREE_MODULE(region) kfree(region) -#else -#define MALLOC_MODULE(size) vmalloc_exec(size) -#define FREE_MODULE(region) vfree(region) -#endif -  void *module_alloc(unsigned long size)  { -	if (size == 0) -		return NULL; -	return MALLOC_MODULE(size); +	return kmalloc(size, GFP_KERNEL);  } -  /* Free memory returned from module_alloc */  void module_free(struct module *mod, void *module_region)  { -	FREE_MODULE(module_region); -} - -/* We don't need anything special. */ -int module_frob_arch_sections(Elf_Ehdr *hdr, -			      Elf_Shdr *sechdrs, -			      char *secstrings, -			      struct module *mod) -{ -	return 0; -} - -int apply_relocate(Elf32_Shdr *sechdrs, -		   const char *strtab, -		   unsigned int symindex, -		   unsigned int relsec, -		   struct module *me) -{ -	printk(KERN_ERR "module %s: REL relocation unsupported\n", me->name); -	return -ENOEXEC; +	kfree(module_region);  } +#endif  int apply_relocate_add(Elf32_Shdr *sechdrs,  		       const char *strtab, @@ -108,14 +80,3 @@ int apply_relocate_add(Elf32_Shdr *sechdrs,  	return 0;  } - -int module_finalize(const Elf_Ehdr *hdr, -		    const Elf_Shdr *sechdrs, -		    struct module *me) -{ - 	return 0; -} - -void module_arch_cleanup(struct module *mod) -{ -} diff --git a/arch/cris/kernel/process.c b/arch/cris/kernel/process.c index c99aeab7cef..b78498eb079 100644 --- a/arch/cris/kernel/process.c +++ b/arch/cris/kernel/process.c @@ -12,11 +12,10 @@   * This file handles the architecture-dependent parts of process handling..   */ -#include <asm/atomic.h> +#include <linux/atomic.h>  #include <asm/pgtable.h>  #include <asm/uaccess.h>  #include <asm/irq.h> -#include <asm/system.h>  #include <linux/module.h>  #include <linux/spinlock.h>  #include <linux/init_task.h> @@ -26,99 +25,18 @@  #include <linux/elfcore.h>  #include <linux/mqueue.h>  #include <linux/reboot.h> +#include <linux/rcupdate.h>  //#define DEBUG -/* - * Initial task structure. Make this a per-architecture thing, - * because different architectures tend to have different - * alignment requirements and potentially different initial - * setup. - */ - -static struct signal_struct init_signals = INIT_SIGNALS(init_signals); -static struct sighand_struct init_sighand = INIT_SIGHAND(init_sighand); -/* - * Initial thread structure. - * - * We need to make sure that this is 8192-byte aligned due to the - * way process stacks are handled. This is done by having a special - * "init_task" linker map entry.. - */ -union thread_union init_thread_union __init_task_data = -	{ INIT_THREAD_INFO(init_task) }; - -/* - * Initial task structure. - * - * All other task structs will be allocated on slabs in fork.c - */ -struct task_struct init_task = INIT_TASK(init_task); - -EXPORT_SYMBOL(init_task); - -/* - * The hlt_counter, disable_hlt and enable_hlt is just here as a hook if - * there would ever be a halt sequence (for power save when idle) with - * some largish delay when halting or resuming *and* a driver that can't - * afford that delay.  The hlt_counter would then be checked before - * executing the halt sequence, and the driver marks the unhaltable - * region by enable_hlt/disable_hlt. - */ - -int cris_hlt_counter=0; - -void disable_hlt(void) -{ -	cris_hlt_counter++; -} - -EXPORT_SYMBOL(disable_hlt); - -void enable_hlt(void) -{ -	cris_hlt_counter--; -} - -EXPORT_SYMBOL(enable_hlt); -  -/* - * The following aren't currently used. - */ -void (*pm_idle)(void); -  extern void default_idle(void);  void (*pm_power_off)(void);  EXPORT_SYMBOL(pm_power_off); -/* - * The idle thread. There's no useful work to be - * done, so just try to conserve power and have a - * low exit latency (ie sit in a loop waiting for - * somebody to say that they'd like to reschedule) - */ - -void cpu_idle (void) +void arch_cpu_idle(void)  { -	/* endless idle loop with no priority at all */ -	while (1) { -		while (!need_resched()) { -			void (*idle)(void); -			/* -			 * Mark this as an RCU critical section so that -			 * synchronize_kernel() in the unload path waits -			 * for our completion. -			 */ -			idle = pm_idle; -			if (!idle) -				idle = default_idle; -			idle(); -		} -		preempt_enable_no_resched(); -		schedule(); -		preempt_disable(); -	} +	default_idle();  }  void hard_reset_now (void); diff --git a/arch/cris/kernel/profile.c b/arch/cris/kernel/profile.c index b82e08615d1..cd9f15b92f8 100644 --- a/arch/cris/kernel/profile.c +++ b/arch/cris/kernel/profile.c @@ -76,7 +76,7 @@ static int __init init_cris_profile(void)  	entry = proc_create("system_profile", S_IWUSR | S_IRUGO, NULL,  			    &cris_proc_profile_operations);  	if (entry) { -		entry->size = SAMPLE_BUFFER_SIZE; +		proc_set_size(entry, SAMPLE_BUFFER_SIZE);  	}  	prof_running = 1; diff --git a/arch/cris/kernel/ptrace.c b/arch/cris/kernel/ptrace.c index 48b0f391263..58d44ee1a71 100644 --- a/arch/cris/kernel/ptrace.c +++ b/arch/cris/kernel/ptrace.c @@ -21,7 +21,6 @@  #include <asm/uaccess.h>  #include <asm/page.h>  #include <asm/pgtable.h> -#include <asm/system.h>  #include <asm/processor.h> @@ -41,7 +40,5 @@ void do_notify_resume(int canrestart, struct pt_regs *regs,  	if (thread_info_flags & _TIF_NOTIFY_RESUME) {  		clear_thread_flag(TIF_NOTIFY_RESUME);  		tracehook_notify_resume(regs); -		if (current->replacement_session_keyring) -			key_replace_session_keyring();  	}  } diff --git a/arch/cris/kernel/setup.c b/arch/cris/kernel/setup.c index b712f4934c4..905b70ea993 100644 --- a/arch/cris/kernel/setup.c +++ b/arch/cris/kernel/setup.c @@ -20,6 +20,7 @@  #include <linux/pfn.h>  #include <linux/cpu.h>  #include <asm/setup.h> +#include <arch/system.h>  /*   * Setup options @@ -164,6 +165,7 @@ void __init setup_arch(char **cmdline_p)  	strcpy(init_utsname()->machine, cris_machine_name);  } +#ifdef CONFIG_PROC_FS  static void *c_start(struct seq_file *m, loff_t *pos)  {  	return *pos < nr_cpu_ids ? (void *)(int)(*pos + 1) : NULL; @@ -187,6 +189,7 @@ const struct seq_operations cpuinfo_op = {  	.stop  = c_stop,  	.show  = show_cpuinfo,  }; +#endif /* CONFIG_PROC_FS */  static int __init topology_init(void)  { diff --git a/arch/cris/kernel/time.c b/arch/cris/kernel/time.c index b5096430ce1..fe6acdabbc8 100644 --- a/arch/cris/kernel/time.c +++ b/arch/cris/kernel/time.c @@ -21,7 +21,6 @@   *   */ -#include <asm/rtc.h>  #include <linux/errno.h>  #include <linux/module.h>  #include <linux/param.h> @@ -32,96 +31,24 @@  #include <linux/profile.h>  #include <linux/sched.h>	/* just for sched_clock() - funny that */ -int have_rtc;  /* used to remember if we have an RTC or not */; + +#define D(x)  #define TICK_SIZE tick  extern unsigned long loops_per_jiffy; /* init/main.c */  unsigned long loops_per_usec; - -#ifdef CONFIG_ARCH_USES_GETTIMEOFFSET -extern unsigned long do_slow_gettimeoffset(void); -static unsigned long (*do_gettimeoffset)(void) = do_slow_gettimeoffset; - -u32 arch_gettimeoffset(void) -{ -       return do_gettimeoffset() * 1000; -} -#endif - -/* - * BUG: This routine does not handle hour overflow properly; it just - *      sets the minutes. Usually you'll only notice that after reboot! - */ -  int set_rtc_mmss(unsigned long nowtime)  { -	int retval = 0; -	int real_seconds, real_minutes, cmos_minutes; - -	printk(KERN_DEBUG "set_rtc_mmss(%lu)\n", nowtime); - -	if(!have_rtc) -		return 0; - -	cmos_minutes = CMOS_READ(RTC_MINUTES); -	cmos_minutes = bcd2bin(cmos_minutes); - -	/* -	 * since we're only adjusting minutes and seconds, -	 * don't interfere with hour overflow. This avoids -	 * messing with unknown time zones but requires your -	 * RTC not to be off by more than 15 minutes -	 */ -	real_seconds = nowtime % 60; -	real_minutes = nowtime / 60; -	if (((abs(real_minutes - cmos_minutes) + 15)/30) & 1) -		real_minutes += 30;		/* correct for half hour time zone */ -	real_minutes %= 60; - -	if (abs(real_minutes - cmos_minutes) < 30) { -		real_seconds = bin2bcd(real_seconds); -		real_minutes = bin2bcd(real_minutes); -		CMOS_WRITE(real_seconds,RTC_SECONDS); -		CMOS_WRITE(real_minutes,RTC_MINUTES); -	} else { -		printk(KERN_WARNING -		       "set_rtc_mmss: can't update from %d to %d\n", -		       cmos_minutes, real_minutes); -		retval = -1; -	} - -	return retval; +	D(printk(KERN_DEBUG "set_rtc_mmss(%lu)\n", nowtime)); +	return 0;  }  /* grab the time from the RTC chip */ - -unsigned long -get_cmos_time(void) +unsigned long get_cmos_time(void)  { -	unsigned int year, mon, day, hour, min, sec; -	if(!have_rtc) -		return 0; - -	sec = CMOS_READ(RTC_SECONDS); -	min = CMOS_READ(RTC_MINUTES); -	hour = CMOS_READ(RTC_HOURS); -	day = CMOS_READ(RTC_DAY_OF_MONTH); -	mon = CMOS_READ(RTC_MONTH); -	year = CMOS_READ(RTC_YEAR); - -	sec = bcd2bin(sec); -	min = bcd2bin(min); -	hour = bcd2bin(hour); -	day = bcd2bin(day); -	mon = bcd2bin(mon); -	year = bcd2bin(year); - -	if ((year += 1900) < 1970) -		year += 100; - -	return mktime(year, mon, day, hour, min, sec); +	return 0;  } @@ -132,7 +59,7 @@ int update_persistent_clock(struct timespec now)  void read_persistent_clock(struct timespec *ts)  { -	ts->tv_sec = get_cmos_time(); +	ts->tv_sec = 0;  	ts->tv_nsec = 0;  } diff --git a/arch/cris/kernel/traps.c b/arch/cris/kernel/traps.c index 541efbf0937..0ffda73734f 100644 --- a/arch/cris/kernel/traps.c +++ b/arch/cris/kernel/traps.c @@ -17,6 +17,7 @@  #include <asm/pgtable.h>  #include <asm/uaccess.h> +#include <arch/system.h>  extern void arch_enable_nmi(void);  extern void stop_watchdog(void); @@ -146,13 +147,6 @@ show_stack(void)  #endif  void -dump_stack(void) -{ -	show_stack(NULL, NULL); -} -EXPORT_SYMBOL(dump_stack); - -void  set_nmi_handler(void (*handler)(struct pt_regs *))  {  	nmi_handler = handler; @@ -183,7 +177,7 @@ __initcall(oops_nmi_register);  /*   * This gets called from entry.S when the watchdog has bitten. Show something - * similiar to an Oops dump, and if the kernel is configured to be a nice + * similar to an Oops dump, and if the kernel is configured to be a nice   * doggy, then halt instead of reboot.   */  void diff --git a/arch/cris/kernel/vmlinux.lds.S b/arch/cris/kernel/vmlinux.lds.S index 442218980db..a68b983dcea 100644 --- a/arch/cris/kernel/vmlinux.lds.S +++ b/arch/cris/kernel/vmlinux.lds.S @@ -52,6 +52,7 @@ SECTIONS  	EXCEPTION_TABLE(4) +	_sdata = .;  	RODATA  	. = ALIGN (4); @@ -72,11 +73,6 @@ SECTIONS  	INIT_TEXT_SECTION(PAGE_SIZE)  	.init.data : { INIT_DATA }  	.init.setup : { INIT_SETUP(16) } -#ifdef CONFIG_ETRAX_ARCH_V32 -	__start___param = .; -	__param : { *(__param) } -	__stop___param = .; -#endif  	.initcall.init : {  		INIT_CALLS  	} @@ -107,7 +103,7 @@ SECTIONS  #endif  	__vmlinux_end = .;		/* Last address of the physical file. */  #ifdef CONFIG_ETRAX_ARCH_V32 -	PERCPU(PAGE_SIZE) +	PERCPU_SECTION(32)  	.init.ramfs : {  		INIT_RAM_FS  | 
