diff options
Diffstat (limited to 'arch/sparc')
-rw-r--r-- | arch/sparc/Kconfig | 7 | ||||
-rw-r--r-- | arch/sparc/Makefile | 2 | ||||
-rw-r--r-- | arch/sparc/kernel/ebus.c | 8 | ||||
-rw-r--r-- | arch/sparc/kernel/entry.S | 3 | ||||
-rw-r--r-- | arch/sparc/kernel/irq.c | 2 | ||||
-rw-r--r-- | arch/sparc/kernel/of_device.c | 2 | ||||
-rw-r--r-- | arch/sparc/kernel/pcic.c | 1 | ||||
-rw-r--r-- | arch/sparc/kernel/setup.c | 12 | ||||
-rw-r--r-- | arch/sparc/kernel/systbls.S | 5 | ||||
-rw-r--r-- | arch/sparc/kernel/time.c | 2 | ||||
-rw-r--r-- | arch/sparc/kernel/vmlinux.lds.S | 12 | ||||
-rw-r--r-- | arch/sparc/mm/srmmu.c | 2 | ||||
-rw-r--r-- | arch/sparc/oprofile/Kconfig | 17 | ||||
-rw-r--r-- | arch/sparc/oprofile/Makefile | 9 | ||||
-rw-r--r-- | arch/sparc/oprofile/init.c | 23 |
15 files changed, 75 insertions, 32 deletions
diff --git a/arch/sparc/Kconfig b/arch/sparc/Kconfig index 9431e967aa45..2f96610a83e9 100644 --- a/arch/sparc/Kconfig +++ b/arch/sparc/Kconfig | |||
@@ -289,6 +289,13 @@ endmenu | |||
289 | 289 | ||
290 | source "fs/Kconfig" | 290 | source "fs/Kconfig" |
291 | 291 | ||
292 | menu "Instrumentation Support" | ||
293 | depends on EXPERIMENTAL | ||
294 | |||
295 | source "arch/sparc/oprofile/Kconfig" | ||
296 | |||
297 | endmenu | ||
298 | |||
292 | source "arch/sparc/Kconfig.debug" | 299 | source "arch/sparc/Kconfig.debug" |
293 | 300 | ||
294 | source "security/Kconfig" | 301 | source "security/Kconfig" |
diff --git a/arch/sparc/Makefile b/arch/sparc/Makefile index 4cdbb2d59ed0..f33c3817f014 100644 --- a/arch/sparc/Makefile +++ b/arch/sparc/Makefile | |||
@@ -30,6 +30,8 @@ HEAD_Y := $(head-y) | |||
30 | core-y += arch/sparc/kernel/ arch/sparc/mm/ arch/sparc/math-emu/ | 30 | core-y += arch/sparc/kernel/ arch/sparc/mm/ arch/sparc/math-emu/ |
31 | libs-y += arch/sparc/prom/ arch/sparc/lib/ | 31 | libs-y += arch/sparc/prom/ arch/sparc/lib/ |
32 | 32 | ||
33 | drivers-$(CONFIG_OPROFILE) += arch/sparc/oprofile/ | ||
34 | |||
33 | # Export what is needed by arch/sparc/boot/Makefile | 35 | # Export what is needed by arch/sparc/boot/Makefile |
34 | # Renaming is done to avoid confusing pattern matching rules in 2.5.45 (multy-) | 36 | # Renaming is done to avoid confusing pattern matching rules in 2.5.45 (multy-) |
35 | INIT_Y := $(patsubst %/, %/built-in.o, $(init-y)) | 37 | INIT_Y := $(patsubst %/, %/built-in.o, $(init-y)) |
diff --git a/arch/sparc/kernel/ebus.c b/arch/sparc/kernel/ebus.c index 75ac24d229b1..ba58c3a061fd 100644 --- a/arch/sparc/kernel/ebus.c +++ b/arch/sparc/kernel/ebus.c | |||
@@ -237,12 +237,12 @@ void __init fill_ebus_device(struct device_node *dp, struct linux_ebus_device *d | |||
237 | dev->ofdev.node = dp; | 237 | dev->ofdev.node = dp; |
238 | dev->ofdev.dev.parent = &dev->bus->ofdev.dev; | 238 | dev->ofdev.dev.parent = &dev->bus->ofdev.dev; |
239 | dev->ofdev.dev.bus = &ebus_bus_type; | 239 | dev->ofdev.dev.bus = &ebus_bus_type; |
240 | strcpy(dev->ofdev.dev.bus_id, dp->path_component_name); | 240 | sprintf(dev->ofdev.dev.bus_id, "ebus[%08x]", dp->node); |
241 | 241 | ||
242 | /* Register with core */ | 242 | /* Register with core */ |
243 | if (of_device_register(&dev->ofdev) != 0) | 243 | if (of_device_register(&dev->ofdev) != 0) |
244 | printk(KERN_DEBUG "ebus: device registration error for %s!\n", | 244 | printk(KERN_DEBUG "ebus: device registration error for %s!\n", |
245 | dev->ofdev.dev.bus_id); | 245 | dp->path_component_name); |
246 | 246 | ||
247 | if ((dp = dp->child) != NULL) { | 247 | if ((dp = dp->child) != NULL) { |
248 | dev->children = (struct linux_ebus_child *) | 248 | dev->children = (struct linux_ebus_child *) |
@@ -332,12 +332,12 @@ void __init ebus_init(void) | |||
332 | ebus->ofdev.node = dp; | 332 | ebus->ofdev.node = dp; |
333 | ebus->ofdev.dev.parent = &pdev->dev; | 333 | ebus->ofdev.dev.parent = &pdev->dev; |
334 | ebus->ofdev.dev.bus = &ebus_bus_type; | 334 | ebus->ofdev.dev.bus = &ebus_bus_type; |
335 | strcpy(ebus->ofdev.dev.bus_id, dp->path_component_name); | 335 | sprintf(ebus->ofdev.dev.bus_id, "ebus%d", num_ebus); |
336 | 336 | ||
337 | /* Register with core */ | 337 | /* Register with core */ |
338 | if (of_device_register(&ebus->ofdev) != 0) | 338 | if (of_device_register(&ebus->ofdev) != 0) |
339 | printk(KERN_DEBUG "ebus: device registration error for %s!\n", | 339 | printk(KERN_DEBUG "ebus: device registration error for %s!\n", |
340 | ebus->ofdev.dev.bus_id); | 340 | dp->path_component_name); |
341 | 341 | ||
342 | 342 | ||
343 | nd = dp->child; | 343 | nd = dp->child; |
diff --git a/arch/sparc/kernel/entry.S b/arch/sparc/kernel/entry.S index a4edff4c3be3..831f540251f8 100644 --- a/arch/sparc/kernel/entry.S +++ b/arch/sparc/kernel/entry.S | |||
@@ -32,13 +32,12 @@ | |||
32 | #include <asm/mxcc.h> | 32 | #include <asm/mxcc.h> |
33 | #include <asm/thread_info.h> | 33 | #include <asm/thread_info.h> |
34 | #include <asm/param.h> | 34 | #include <asm/param.h> |
35 | #include <asm/unistd.h> | ||
35 | 36 | ||
36 | #include <asm/asmmacro.h> | 37 | #include <asm/asmmacro.h> |
37 | 38 | ||
38 | #define curptr g6 | 39 | #define curptr g6 |
39 | 40 | ||
40 | #define NR_SYSCALLS 300 /* Each OS is different... */ | ||
41 | |||
42 | /* These are just handy. */ | 41 | /* These are just handy. */ |
43 | #define _SV save %sp, -STACKFRAME_SZ, %sp | 42 | #define _SV save %sp, -STACKFRAME_SZ, %sp |
44 | #define _RS restore | 43 | #define _RS restore |
diff --git a/arch/sparc/kernel/irq.c b/arch/sparc/kernel/irq.c index b3b6680a2a30..c8cb211b9072 100644 --- a/arch/sparc/kernel/irq.c +++ b/arch/sparc/kernel/irq.c | |||
@@ -351,7 +351,7 @@ void handler_irq(int irq, struct pt_regs * regs) | |||
351 | } | 351 | } |
352 | 352 | ||
353 | #ifdef CONFIG_BLK_DEV_FD | 353 | #ifdef CONFIG_BLK_DEV_FD |
354 | extern void floppy_interrupt(int irq, void *dev_id) | 354 | extern void floppy_interrupt(int irq, void *dev_id); |
355 | 355 | ||
356 | void sparc_floppy_irq(int irq, void *dev_id, struct pt_regs *regs) | 356 | void sparc_floppy_irq(int irq, void *dev_id, struct pt_regs *regs) |
357 | { | 357 | { |
diff --git a/arch/sparc/kernel/of_device.c b/arch/sparc/kernel/of_device.c index 74bef2a2d37f..46200c43ffb1 100644 --- a/arch/sparc/kernel/of_device.c +++ b/arch/sparc/kernel/of_device.c | |||
@@ -651,7 +651,7 @@ build_resources: | |||
651 | if (!parent) | 651 | if (!parent) |
652 | strcpy(op->dev.bus_id, "root"); | 652 | strcpy(op->dev.bus_id, "root"); |
653 | else | 653 | else |
654 | strcpy(op->dev.bus_id, dp->path_component_name); | 654 | sprintf(op->dev.bus_id, "%08x", dp->node); |
655 | 655 | ||
656 | if (of_device_register(op)) { | 656 | if (of_device_register(op)) { |
657 | printk("%s: Could not register of device.\n", | 657 | printk("%s: Could not register of device.\n", |
diff --git a/arch/sparc/kernel/pcic.c b/arch/sparc/kernel/pcic.c index b4e50ae323bf..207f1b6eef53 100644 --- a/arch/sparc/kernel/pcic.c +++ b/arch/sparc/kernel/pcic.c | |||
@@ -34,6 +34,7 @@ | |||
34 | #include <asm/pcic.h> | 34 | #include <asm/pcic.h> |
35 | #include <asm/timer.h> | 35 | #include <asm/timer.h> |
36 | #include <asm/uaccess.h> | 36 | #include <asm/uaccess.h> |
37 | #include <asm/irq_regs.h> | ||
37 | 38 | ||
38 | 39 | ||
39 | unsigned int pcic_pin_to_irq(unsigned int pin, char *name); | 40 | unsigned int pcic_pin_to_irq(unsigned int pin, char *name); |
diff --git a/arch/sparc/kernel/setup.c b/arch/sparc/kernel/setup.c index 0251cab4708b..383526ad94fc 100644 --- a/arch/sparc/kernel/setup.c +++ b/arch/sparc/kernel/setup.c | |||
@@ -103,7 +103,6 @@ void prom_sync_me(void) | |||
103 | 103 | ||
104 | unsigned int boot_flags __initdata = 0; | 104 | unsigned int boot_flags __initdata = 0; |
105 | #define BOOTME_DEBUG 0x1 | 105 | #define BOOTME_DEBUG 0x1 |
106 | #define BOOTME_SINGLE 0x2 | ||
107 | 106 | ||
108 | /* Exported for mm/init.c:paging_init. */ | 107 | /* Exported for mm/init.c:paging_init. */ |
109 | unsigned long cmdline_memory_size __initdata = 0; | 108 | unsigned long cmdline_memory_size __initdata = 0; |
@@ -121,16 +120,6 @@ static struct console prom_debug_console = { | |||
121 | .index = -1, | 120 | .index = -1, |
122 | }; | 121 | }; |
123 | 122 | ||
124 | int obp_system_intr(void) | ||
125 | { | ||
126 | if (boot_flags & BOOTME_DEBUG) { | ||
127 | printk("OBP: system interrupted\n"); | ||
128 | prom_halt(); | ||
129 | return 1; | ||
130 | } | ||
131 | return 0; | ||
132 | } | ||
133 | |||
134 | /* | 123 | /* |
135 | * Process kernel command line switches that are specific to the | 124 | * Process kernel command line switches that are specific to the |
136 | * SPARC or that require special low-level processing. | 125 | * SPARC or that require special low-level processing. |
@@ -142,7 +131,6 @@ static void __init process_switch(char c) | |||
142 | boot_flags |= BOOTME_DEBUG; | 131 | boot_flags |= BOOTME_DEBUG; |
143 | break; | 132 | break; |
144 | case 's': | 133 | case 's': |
145 | boot_flags |= BOOTME_SINGLE; | ||
146 | break; | 134 | break; |
147 | case 'h': | 135 | case 'h': |
148 | prom_printf("boot_flags_init: Halt!\n"); | 136 | prom_printf("boot_flags_init: Halt!\n"); |
diff --git a/arch/sparc/kernel/systbls.S b/arch/sparc/kernel/systbls.S index 10df38eeae08..ea75ca569052 100644 --- a/arch/sparc/kernel/systbls.S +++ b/arch/sparc/kernel/systbls.S | |||
@@ -78,7 +78,7 @@ sys_call_table: | |||
78 | /*285*/ .long sys_mkdirat, sys_mknodat, sys_fchownat, sys_futimesat, sys_fstatat64 | 78 | /*285*/ .long sys_mkdirat, sys_mknodat, sys_fchownat, sys_futimesat, sys_fstatat64 |
79 | /*290*/ .long sys_unlinkat, sys_renameat, sys_linkat, sys_symlinkat, sys_readlinkat | 79 | /*290*/ .long sys_unlinkat, sys_renameat, sys_linkat, sys_symlinkat, sys_readlinkat |
80 | /*295*/ .long sys_fchmodat, sys_faccessat, sys_pselect6, sys_ppoll, sys_unshare | 80 | /*295*/ .long sys_fchmodat, sys_faccessat, sys_pselect6, sys_ppoll, sys_unshare |
81 | /*300*/ .long sys_set_robust_list, sys_get_robust_list | 81 | /*300*/ .long sys_set_robust_list, sys_get_robust_list, sys_migrate_pages |
82 | 82 | ||
83 | #ifdef CONFIG_SUNOS_EMUL | 83 | #ifdef CONFIG_SUNOS_EMUL |
84 | /* Now the SunOS syscall table. */ | 84 | /* Now the SunOS syscall table. */ |
@@ -190,6 +190,7 @@ sunos_sys_table: | |||
190 | /*290*/ .long sunos_nosys, sunos_nosys, sunos_nosys | 190 | /*290*/ .long sunos_nosys, sunos_nosys, sunos_nosys |
191 | .long sunos_nosys, sunos_nosys, sunos_nosys | 191 | .long sunos_nosys, sunos_nosys, sunos_nosys |
192 | .long sunos_nosys, sunos_nosys, sunos_nosys | 192 | .long sunos_nosys, sunos_nosys, sunos_nosys |
193 | .long sunos_nosys, sunos_nosys, sunos_nosys | 193 | .long sunos_nosys |
194 | /*300*/ .long sunos_nosys, sunos_nosys, sunos_nosys | ||
194 | 195 | ||
195 | #endif | 196 | #endif |
diff --git a/arch/sparc/kernel/time.c b/arch/sparc/kernel/time.c index 7dcd1a16c6e4..6c7aa51b590f 100644 --- a/arch/sparc/kernel/time.c +++ b/arch/sparc/kernel/time.c | |||
@@ -95,6 +95,8 @@ unsigned long profile_pc(struct pt_regs *regs) | |||
95 | return pc; | 95 | return pc; |
96 | } | 96 | } |
97 | 97 | ||
98 | EXPORT_SYMBOL(profile_pc); | ||
99 | |||
98 | __volatile__ unsigned int *master_l10_counter; | 100 | __volatile__ unsigned int *master_l10_counter; |
99 | __volatile__ unsigned int *master_l10_limit; | 101 | __volatile__ unsigned int *master_l10_limit; |
100 | 102 | ||
diff --git a/arch/sparc/kernel/vmlinux.lds.S b/arch/sparc/kernel/vmlinux.lds.S index 346c19a949fd..5cc5ff7f8824 100644 --- a/arch/sparc/kernel/vmlinux.lds.S +++ b/arch/sparc/kernel/vmlinux.lds.S | |||
@@ -36,11 +36,11 @@ SECTIONS | |||
36 | 36 | ||
37 | . = ALIGN(4096); | 37 | . = ALIGN(4096); |
38 | __init_begin = .; | 38 | __init_begin = .; |
39 | _sinittext = .; | ||
39 | .init.text : { | 40 | .init.text : { |
40 | _sinittext = .; | ||
41 | *(.init.text) | 41 | *(.init.text) |
42 | _einittext = .; | ||
43 | } | 42 | } |
43 | _einittext = .; | ||
44 | __init_text_end = .; | 44 | __init_text_end = .; |
45 | .init.data : { *(.init.data) } | 45 | .init.data : { *(.init.data) } |
46 | . = ALIGN(16); | 46 | . = ALIGN(16); |
@@ -49,13 +49,7 @@ SECTIONS | |||
49 | __setup_end = .; | 49 | __setup_end = .; |
50 | __initcall_start = .; | 50 | __initcall_start = .; |
51 | .initcall.init : { | 51 | .initcall.init : { |
52 | *(.initcall1.init) | 52 | INITCALLS |
53 | *(.initcall2.init) | ||
54 | *(.initcall3.init) | ||
55 | *(.initcall4.init) | ||
56 | *(.initcall5.init) | ||
57 | *(.initcall6.init) | ||
58 | *(.initcall7.init) | ||
59 | } | 53 | } |
60 | __initcall_end = .; | 54 | __initcall_end = .; |
61 | __con_initcall_start = .; | 55 | __con_initcall_start = .; |
diff --git a/arch/sparc/mm/srmmu.c b/arch/sparc/mm/srmmu.c index b27a506309ee..0df7121cef07 100644 --- a/arch/sparc/mm/srmmu.c +++ b/arch/sparc/mm/srmmu.c | |||
@@ -402,7 +402,7 @@ void srmmu_nocache_calcsize(void) | |||
402 | srmmu_nocache_end = SRMMU_NOCACHE_VADDR + srmmu_nocache_size; | 402 | srmmu_nocache_end = SRMMU_NOCACHE_VADDR + srmmu_nocache_size; |
403 | } | 403 | } |
404 | 404 | ||
405 | void srmmu_nocache_init(void) | 405 | void __init srmmu_nocache_init(void) |
406 | { | 406 | { |
407 | unsigned int bitmap_bits; | 407 | unsigned int bitmap_bits; |
408 | pgd_t *pgd; | 408 | pgd_t *pgd; |
diff --git a/arch/sparc/oprofile/Kconfig b/arch/sparc/oprofile/Kconfig new file mode 100644 index 000000000000..d8a84088471a --- /dev/null +++ b/arch/sparc/oprofile/Kconfig | |||
@@ -0,0 +1,17 @@ | |||
1 | config PROFILING | ||
2 | bool "Profiling support (EXPERIMENTAL)" | ||
3 | help | ||
4 | Say Y here to enable the extended profiling support mechanisms used | ||
5 | by profilers such as OProfile. | ||
6 | |||
7 | |||
8 | config OPROFILE | ||
9 | tristate "OProfile system profiling (EXPERIMENTAL)" | ||
10 | depends on PROFILING | ||
11 | help | ||
12 | OProfile is a profiling system capable of profiling the | ||
13 | whole system, include the kernel, kernel modules, libraries, | ||
14 | and applications. | ||
15 | |||
16 | If unsure, say N. | ||
17 | |||
diff --git a/arch/sparc/oprofile/Makefile b/arch/sparc/oprofile/Makefile new file mode 100644 index 000000000000..e9feca1ca28b --- /dev/null +++ b/arch/sparc/oprofile/Makefile | |||
@@ -0,0 +1,9 @@ | |||
1 | obj-$(CONFIG_OPROFILE) += oprofile.o | ||
2 | |||
3 | DRIVER_OBJS = $(addprefix ../../../drivers/oprofile/, \ | ||
4 | oprof.o cpu_buffer.o buffer_sync.o \ | ||
5 | event_buffer.o oprofile_files.o \ | ||
6 | oprofilefs.o oprofile_stats.o \ | ||
7 | timer_int.o ) | ||
8 | |||
9 | oprofile-y := $(DRIVER_OBJS) init.o | ||
diff --git a/arch/sparc/oprofile/init.c b/arch/sparc/oprofile/init.c new file mode 100644 index 000000000000..9ab815b95b5a --- /dev/null +++ b/arch/sparc/oprofile/init.c | |||
@@ -0,0 +1,23 @@ | |||
1 | /** | ||
2 | * @file init.c | ||
3 | * | ||
4 | * @remark Copyright 2002 OProfile authors | ||
5 | * @remark Read the file COPYING | ||
6 | * | ||
7 | * @author John Levon <levon@movementarian.org> | ||
8 | */ | ||
9 | |||
10 | #include <linux/kernel.h> | ||
11 | #include <linux/oprofile.h> | ||
12 | #include <linux/errno.h> | ||
13 | #include <linux/init.h> | ||
14 | |||
15 | int __init oprofile_arch_init(struct oprofile_operations * ops) | ||
16 | { | ||
17 | return -ENODEV; | ||
18 | } | ||
19 | |||
20 | |||
21 | void oprofile_arch_exit(void) | ||
22 | { | ||
23 | } | ||