diff options
author | Linus Torvalds <torvalds@g5.osdl.org> | 2006-01-10 21:31:24 -0800 |
---|---|---|
committer | Linus Torvalds <torvalds@g5.osdl.org> | 2006-01-10 21:31:24 -0800 |
commit | 05f6ece6f37f987e9de643f6f76e8fb5d5b9e014 (patch) | |
tree | 5244e85d0dfb2619b0af4bc80a2c99dd579f79a5 /arch/parisc/kernel | |
parent | 35d138ae22f826f95f0f8d0285947582ccf4508f (diff) | |
parent | 58b6c58caef7a34eab7ec887288fa495696653e7 (diff) |
Merge master.kernel.org:/pub/scm/linux/kernel/git/kyle/parisc-2.6
Diffstat (limited to 'arch/parisc/kernel')
-rw-r--r-- | arch/parisc/kernel/cache.c | 20 | ||||
-rw-r--r-- | arch/parisc/kernel/drivers.c | 13 | ||||
-rw-r--r-- | arch/parisc/kernel/firmware.c | 2 | ||||
-rw-r--r-- | arch/parisc/kernel/hardware.c | 1 | ||||
-rw-r--r-- | arch/parisc/kernel/inventory.c | 6 | ||||
-rw-r--r-- | arch/parisc/kernel/pci-dma.c | 6 | ||||
-rw-r--r-- | arch/parisc/kernel/pdc_chassis.c | 13 | ||||
-rw-r--r-- | arch/parisc/kernel/perf.c | 6 | ||||
-rw-r--r-- | arch/parisc/kernel/process.c | 2 | ||||
-rw-r--r-- | arch/parisc/kernel/processor.c | 8 | ||||
-rw-r--r-- | arch/parisc/kernel/setup.c | 10 | ||||
-rw-r--r-- | arch/parisc/kernel/smp.c | 16 | ||||
-rw-r--r-- | arch/parisc/kernel/time.c | 4 | ||||
-rw-r--r-- | arch/parisc/kernel/topology.c | 3 | ||||
-rw-r--r-- | arch/parisc/kernel/unaligned.c | 2 | ||||
-rw-r--r-- | arch/parisc/kernel/unwind.c | 2 | ||||
-rw-r--r-- | arch/parisc/kernel/vmlinux.lds.S | 15 |
17 files changed, 66 insertions, 63 deletions
diff --git a/arch/parisc/kernel/cache.c b/arch/parisc/kernel/cache.c index a065349aee3..d8a4ca021aa 100644 --- a/arch/parisc/kernel/cache.c +++ b/arch/parisc/kernel/cache.c @@ -29,9 +29,9 @@ #include <asm/processor.h> #include <asm/sections.h> -int split_tlb; -int dcache_stride; -int icache_stride; +int split_tlb __read_mostly; +int dcache_stride __read_mostly; +int icache_stride __read_mostly; EXPORT_SYMBOL(dcache_stride); @@ -45,29 +45,29 @@ DEFINE_SPINLOCK(pa_tlb_lock); EXPORT_SYMBOL(pa_tlb_lock); #endif -struct pdc_cache_info cache_info; +struct pdc_cache_info cache_info __read_mostly; #ifndef CONFIG_PA20 -static struct pdc_btlb_info btlb_info; +static struct pdc_btlb_info btlb_info __read_mostly; #endif #ifdef CONFIG_SMP void flush_data_cache(void) { - on_each_cpu((void (*)(void *))flush_data_cache_local, NULL, 1, 1); + on_each_cpu(flush_data_cache_local, NULL, 1, 1); } void flush_instruction_cache(void) { - on_each_cpu((void (*)(void *))flush_instruction_cache_local, NULL, 1, 1); + on_each_cpu(flush_instruction_cache_local, NULL, 1, 1); } #endif void flush_cache_all_local(void) { - flush_instruction_cache_local(); - flush_data_cache_local(); + flush_instruction_cache_local(NULL); + flush_data_cache_local(NULL); } EXPORT_SYMBOL(flush_cache_all_local); @@ -332,7 +332,7 @@ void clear_user_page_asm(void *page, unsigned long vaddr) } #define FLUSH_THRESHOLD 0x80000 /* 0.5MB */ -int parisc_cache_flush_threshold = FLUSH_THRESHOLD; +int parisc_cache_flush_threshold __read_mostly = FLUSH_THRESHOLD; void parisc_setup_cache_timing(void) { diff --git a/arch/parisc/kernel/drivers.c b/arch/parisc/kernel/drivers.c index d016d672ec2..1eaa0d37f67 100644 --- a/arch/parisc/kernel/drivers.c +++ b/arch/parisc/kernel/drivers.c @@ -39,7 +39,7 @@ #include <asm/parisc-device.h> /* See comments in include/asm-parisc/pci.h */ -struct hppa_dma_ops *hppa_dma_ops; +struct hppa_dma_ops *hppa_dma_ops __read_mostly; EXPORT_SYMBOL(hppa_dma_ops); static struct device root = { @@ -515,8 +515,13 @@ alloc_pa_dev(unsigned long hpa, struct hardware_path *mod_path) (iodc_data[5] << 8) | iodc_data[6]; dev->hpa.name = parisc_pathname(dev); dev->hpa.start = hpa; - if (hpa == 0xf4000000 || hpa == 0xf6000000 || - hpa == 0xf8000000 || hpa == 0xfa000000) { + /* This is awkward. The STI spec says that gfx devices may occupy + * 32MB or 64MB. Unfortunately, we don't know how to tell whether + * it's the former or the latter. Assumptions either way can hurt us. + */ + if (hpa == 0xf4000000 || hpa == 0xf8000000) { + dev->hpa.end = hpa + 0x03ffffff; + } else if (hpa == 0xf6000000 || hpa == 0xfa000000) { dev->hpa.end = hpa + 0x01ffffff; } else { dev->hpa.end = hpa + 0xfff; @@ -834,7 +839,7 @@ static void print_parisc_device(struct parisc_device *dev) if (dev->num_addrs) { int k; - printk(", additional addresses: "); + printk(", additional addresses: "); for (k = 0; k < dev->num_addrs; k++) printk("0x%lx ", dev->addr[k]); } diff --git a/arch/parisc/kernel/firmware.c b/arch/parisc/kernel/firmware.c index 553f8fe0322..2dc06b8e181 100644 --- a/arch/parisc/kernel/firmware.c +++ b/arch/parisc/kernel/firmware.c @@ -80,7 +80,7 @@ static unsigned long pdc_result2[32] __attribute__ ((aligned (8))); /* Firmware needs to be initially set to narrow to determine the * actual firmware width. */ -int parisc_narrow_firmware = 1; +int parisc_narrow_firmware __read_mostly = 1; #endif /* On most currently-supported platforms, IODC I/O calls are 32-bit calls diff --git a/arch/parisc/kernel/hardware.c b/arch/parisc/kernel/hardware.c index 2071b5bba15..3058bffd8a2 100644 --- a/arch/parisc/kernel/hardware.c +++ b/arch/parisc/kernel/hardware.c @@ -551,6 +551,7 @@ static struct hp_hardware hp_hardware_list[] __initdata = { {HPHW_BCPORT, 0x804, 0x0000C, 0x10, "REO I/O BC Merced Port"}, {HPHW_BCPORT, 0x782, 0x0000C, 0x00, "REO I/O BC Ropes Port"}, {HPHW_BCPORT, 0x784, 0x0000C, 0x00, "Pluto I/O BC Ropes Port"}, + {HPHW_BRIDGE, 0x05D, 0x0000A, 0x00, "SummitHawk Dino PCI Bridge"}, {HPHW_BRIDGE, 0x680, 0x0000A, 0x00, "Dino PCI Bridge"}, {HPHW_BRIDGE, 0x682, 0x0000A, 0x00, "Cujo PCI Bridge"}, {HPHW_BRIDGE, 0x782, 0x0000A, 0x00, "Elroy PCI Bridge"}, diff --git a/arch/parisc/kernel/inventory.c b/arch/parisc/kernel/inventory.c index 8f563871e83..4e847ba5318 100644 --- a/arch/parisc/kernel/inventory.c +++ b/arch/parisc/kernel/inventory.c @@ -38,7 +38,7 @@ */ #undef DEBUG_PAT -int pdc_type = PDC_TYPE_ILLEGAL; +int pdc_type __read_mostly = PDC_TYPE_ILLEGAL; void __init setup_pdc(void) { @@ -120,8 +120,8 @@ set_pmem_entry(physmem_range_t *pmem_ptr, unsigned long start, * pdc info is bad in this case). */ - if ( ((start & (PAGE_SIZE - 1)) != 0) - || ((pages4k & ((1UL << PDC_PAGE_ADJ_SHIFT) - 1)) != 0) ) { + if (unlikely( ((start & (PAGE_SIZE - 1)) != 0) + || ((pages4k & ((1UL << PDC_PAGE_ADJ_SHIFT) - 1)) != 0) )) { panic("Memory range doesn't align with page size!\n"); } diff --git a/arch/parisc/kernel/pci-dma.c b/arch/parisc/kernel/pci-dma.c index f94a02ef3d9..a6caf107308 100644 --- a/arch/parisc/kernel/pci-dma.c +++ b/arch/parisc/kernel/pci-dma.c @@ -33,10 +33,10 @@ #include <asm/uaccess.h> #include <asm/tlbflush.h> /* for purge_tlb_*() macros */ -static struct proc_dir_entry * proc_gsc_root = NULL; +static struct proc_dir_entry * proc_gsc_root __read_mostly = NULL; static int pcxl_proc_info(char *buffer, char **start, off_t offset, int length); -static unsigned long pcxl_used_bytes = 0; -static unsigned long pcxl_used_pages = 0; +static unsigned long pcxl_used_bytes __read_mostly = 0; +static unsigned long pcxl_used_pages __read_mostly = 0; extern unsigned long pcxl_dma_start; /* Start of pcxl dma mapping area */ static spinlock_t pcxl_res_lock; diff --git a/arch/parisc/kernel/pdc_chassis.c b/arch/parisc/kernel/pdc_chassis.c index 52004ae28d2..2a01fe1bdc9 100644 --- a/arch/parisc/kernel/pdc_chassis.c +++ b/arch/parisc/kernel/pdc_chassis.c @@ -30,6 +30,7 @@ #include <linux/kernel.h> #include <linux/reboot.h> #include <linux/notifier.h> +#include <linux/cache.h> #include <asm/pdc_chassis.h> #include <asm/processor.h> @@ -38,8 +39,8 @@ #ifdef CONFIG_PDC_CHASSIS -static int pdc_chassis_old = 0; -static unsigned int pdc_chassis_enabled = 1; +static int pdc_chassis_old __read_mostly = 0; +static unsigned int pdc_chassis_enabled __read_mostly = 1; /** @@ -132,7 +133,7 @@ void __init parisc_pdc_chassis_init(void) { #ifdef CONFIG_PDC_CHASSIS int handle = 0; - if (pdc_chassis_enabled) { + if (likely(pdc_chassis_enabled)) { DPRINTK(KERN_DEBUG "%s: parisc_pdc_chassis_init()\n", __FILE__); /* Let see if we have something to handle... */ @@ -142,7 +143,7 @@ void __init parisc_pdc_chassis_init(void) printk(KERN_INFO "Enabling PDC_PAT chassis codes support.\n"); handle = 1; } - else if (pdc_chassis_old) { + else if (unlikely(pdc_chassis_old)) { printk(KERN_INFO "Enabling old style chassis LED panel support.\n"); handle = 1; } @@ -178,7 +179,7 @@ int pdc_chassis_send_status(int message) /* Maybe we should do that in an other way ? */ int retval = 0; #ifdef CONFIG_PDC_CHASSIS - if (pdc_chassis_enabled) { + if (likely(pdc_chassis_enabled)) { DPRINTK(KERN_DEBUG "%s: pdc_chassis_send_status(%d)\n", __FILE__, message); @@ -214,7 +215,7 @@ int pdc_chassis_send_status(int message) } } else retval = -1; #else - if (pdc_chassis_old) { + if (unlikely(pdc_chassis_old)) { switch (message) { case PDC_CHASSIS_DIRECT_BSTART: case PDC_CHASSIS_DIRECT_BCOMPLETE: diff --git a/arch/parisc/kernel/perf.c b/arch/parisc/kernel/perf.c index f6fec62b6a2..79dcbcccecb 100644 --- a/arch/parisc/kernel/perf.c +++ b/arch/parisc/kernel/perf.c @@ -66,10 +66,10 @@ struct rdr_tbl_ent { uint8_t write_control; }; -static int perf_processor_interface = UNKNOWN_INTF; -static int perf_enabled = 0; +static int perf_processor_interface __read_mostly = UNKNOWN_INTF; +static int perf_enabled __read_mostly = 0; static spinlock_t perf_lock; -struct parisc_device *cpu_device = NULL; +struct parisc_device *cpu_device __read_mostly = NULL; /* RDRs to write for PCX-W */ static int perf_rdrs_W[] = diff --git a/arch/parisc/kernel/process.c b/arch/parisc/kernel/process.c index fee4f1f09ad..4eb70a40ec7 100644 --- a/arch/parisc/kernel/process.c +++ b/arch/parisc/kernel/process.c @@ -54,7 +54,7 @@ #include <asm/uaccess.h> #include <asm/unwind.h> -static int hlt_counter; +static int hlt_counter __read_mostly; /* * Power off function, if any diff --git a/arch/parisc/kernel/processor.c b/arch/parisc/kernel/processor.c index 4f5bbcf1f5a..6df9f62cecb 100644 --- a/arch/parisc/kernel/processor.c +++ b/arch/parisc/kernel/processor.c @@ -44,10 +44,10 @@ #include <asm/irq.h> /* for struct irq_region */ #include <asm/parisc-device.h> -struct system_cpuinfo_parisc boot_cpu_data; +struct system_cpuinfo_parisc boot_cpu_data __read_mostly; EXPORT_SYMBOL(boot_cpu_data); -struct cpuinfo_parisc cpu_data[NR_CPUS]; +struct cpuinfo_parisc cpu_data[NR_CPUS] __read_mostly; /* ** PARISC CPU driver - claim "device" and initialize CPU data structures. @@ -378,12 +378,12 @@ show_cpuinfo (struct seq_file *m, void *v) return 0; } -static struct parisc_device_id processor_tbl[] = { +static struct parisc_device_id processor_tbl[] __read_mostly = { { HPHW_NPROC, HVERSION_REV_ANY_ID, HVERSION_ANY_ID, SVERSION_ANY_ID }, { 0, } }; -static struct parisc_driver cpu_driver = { +static struct parisc_driver cpu_driver __read_mostly = { .name = "CPU", .id_table = processor_tbl, .probe = processor_probe diff --git a/arch/parisc/kernel/setup.c b/arch/parisc/kernel/setup.c index 73e9c34b094..4a36ec3f6ac 100644 --- a/arch/parisc/kernel/setup.c +++ b/arch/parisc/kernel/setup.c @@ -46,15 +46,15 @@ #include <asm/io.h> #include <asm/setup.h> -char command_line[COMMAND_LINE_SIZE]; +char command_line[COMMAND_LINE_SIZE] __read_mostly; /* Intended for ccio/sba/cpu statistics under /proc/bus/{runway|gsc} */ -struct proc_dir_entry * proc_runway_root = NULL; -struct proc_dir_entry * proc_gsc_root = NULL; -struct proc_dir_entry * proc_mckinley_root = NULL; +struct proc_dir_entry * proc_runway_root __read_mostly = NULL; +struct proc_dir_entry * proc_gsc_root __read_mostly = NULL; +struct proc_dir_entry * proc_mckinley_root __read_mostly = NULL; #if !defined(CONFIG_PA20) && (defined(CONFIG_IOMMU_CCIO) || defined(CONFIG_IOMMU_SBA)) -int parisc_bus_is_phys = 1; /* Assume no IOMMU is present */ +int parisc_bus_is_phys __read_mostly = 1; /* Assume no IOMMU is present */ EXPORT_SYMBOL(parisc_bus_is_phys); #endif diff --git a/arch/parisc/kernel/smp.c b/arch/parisc/kernel/smp.c index ce89da0f654..17f23c26f1c 100644 --- a/arch/parisc/kernel/smp.c +++ b/arch/parisc/kernel/smp.c @@ -39,7 +39,7 @@ #include <asm/atomic.h> #include <asm/current.h> #include <asm/delay.h> -#include <asm/pgalloc.h> /* for flush_tlb_all() proto/macro */ +#include <asm/tlbflush.h> #include <asm/io.h> #include <asm/irq.h> /* for CPU_IRQ_REGION and friends */ @@ -58,9 +58,9 @@ DEFINE_SPINLOCK(smp_lock); volatile struct task_struct *smp_init_current_idle_task; -static volatile int cpu_now_booting = 0; /* track which CPU is booting */ +static volatile int cpu_now_booting __read_mostly = 0; /* track which CPU is booting */ -static int parisc_max_cpus = 1; +static int parisc_max_cpus __read_mostly = 1; /* online cpus are ones that we've managed to bring up completely * possible cpus are all valid cpu @@ -71,8 +71,8 @@ static int parisc_max_cpus = 1; * empty in the beginning. */ -cpumask_t cpu_online_map = CPU_MASK_NONE; /* Bitmap of online CPUs */ -cpumask_t cpu_possible_map = CPU_MASK_ALL; /* Bitmap of Present CPUs */ +cpumask_t cpu_online_map __read_mostly = CPU_MASK_NONE; /* Bitmap of online CPUs */ +cpumask_t cpu_possible_map __read_mostly = CPU_MASK_ALL; /* Bitmap of Present CPUs */ EXPORT_SYMBOL(cpu_online_map); EXPORT_SYMBOL(cpu_possible_map); @@ -406,12 +406,10 @@ EXPORT_SYMBOL(smp_call_function); * as we want to ensure all TLB's flushed before proceeding. */ -extern void flush_tlb_all_local(void); - void smp_flush_tlb_all(void) { - on_each_cpu((void (*)(void *))flush_tlb_all_local, NULL, 1, 1); + on_each_cpu(flush_tlb_all_local, NULL, 1, 1); } @@ -487,7 +485,7 @@ void __init smp_callin(void) #endif flush_cache_all_local(); /* start with known state */ - flush_tlb_all_local(); + flush_tlb_all_local(NULL); local_irq_enable(); /* Interrupts have been off until now */ diff --git a/arch/parisc/kernel/time.c b/arch/parisc/kernel/time.c index cded2568078..594930bc4bc 100644 --- a/arch/parisc/kernel/time.c +++ b/arch/parisc/kernel/time.c @@ -36,8 +36,8 @@ /* xtime and wall_jiffies keep wall-clock time */ extern unsigned long wall_jiffies; -static long clocktick; /* timer cycles per tick */ -static long halftick; +static long clocktick __read_mostly; /* timer cycles per tick */ +static long halftick __read_mostly; #ifdef CONFIG_SMP extern void smp_do_timer(struct pt_regs *regs); diff --git a/arch/parisc/kernel/topology.c b/arch/parisc/kernel/topology.c index ac2a4068141..3ba040050e4 100644 --- a/arch/parisc/kernel/topology.c +++ b/arch/parisc/kernel/topology.c @@ -20,8 +20,9 @@ #include <linux/init.h> #include <linux/smp.h> #include <linux/cpu.h> +#include <linux/cache.h> -static struct cpu cpu_devices[NR_CPUS]; +static struct cpu cpu_devices[NR_CPUS] __read_mostly; static int __init topology_init(void) { diff --git a/arch/parisc/kernel/unaligned.c b/arch/parisc/kernel/unaligned.c index eaae8a021f9..de0a1b21cb4 100644 --- a/arch/parisc/kernel/unaligned.c +++ b/arch/parisc/kernel/unaligned.c @@ -122,7 +122,7 @@ #define ERR_NOTHANDLED -1 #define ERR_PAGEFAULT -2 -int unaligned_enabled = 1; +int unaligned_enabled __read_mostly = 1; void die_if_kernel (char *str, struct pt_regs *regs, long err); diff --git a/arch/parisc/kernel/unwind.c b/arch/parisc/kernel/unwind.c index db141108412..cc1c1afc318 100644 --- a/arch/parisc/kernel/unwind.c +++ b/arch/parisc/kernel/unwind.c @@ -35,7 +35,7 @@ static spinlock_t unwind_lock; * we can call unwind_init as early in the bootup process as * possible (before the slab allocator is initialized) */ -static struct unwind_table kernel_unwind_table; +static struct unwind_table kernel_unwind_table __read_mostly; static LIST_HEAD(unwind_tables); static inline const struct unwind_table_entry * diff --git a/arch/parisc/kernel/vmlinux.lds.S b/arch/parisc/kernel/vmlinux.lds.S index e5fac3e08c7..6d6436a6b62 100644 --- a/arch/parisc/kernel/vmlinux.lds.S +++ b/arch/parisc/kernel/vmlinux.lds.S @@ -68,7 +68,7 @@ SECTIONS RODATA /* writeable */ - . = ALIGN(4096); /* Make sure this is paged aligned so + . = ALIGN(4096); /* Make sure this is page aligned so that we can properly leave these as writable */ data_start = .; @@ -105,6 +105,10 @@ SECTIONS . = ALIGN(16); .data.lock_aligned : { *(.data.lock_aligned) } + /* rarely changed data like cpu maps */ + . = ALIGN(16); + .data.read_mostly : { *(.data.read_mostly) } + _edata = .; /* End of data section */ . = ALIGN(16384); /* init_task */ @@ -194,14 +198,7 @@ SECTIONS #endif } - /* Stabs debugging sections. */ - .stab 0 : { *(.stab) } - .stabstr 0 : { *(.stabstr) } - .stab.excl 0 : { *(.stab.excl) } - .stab.exclstr 0 : { *(.stab.exclstr) } - .stab.index 0 : { *(.stab.index) } - .stab.indexstr 0 : { *(.stab.indexstr) } - .comment 0 : { *(.comment) } + STABS_DEBUG .note 0 : { *(.note) } } |