diff options
| author | Steve French <sfrench@us.ibm.com> | 2005-12-31 13:27:22 -0500 |
|---|---|---|
| committer | Steve French <sfrench@us.ibm.com> | 2005-12-31 13:27:22 -0500 |
| commit | eea60caef610c7a6c58c0de9c80ae1e438e01301 (patch) | |
| tree | 25e19289bba003fe085e589430d0d981fd6b73a7 /arch/ia64/kernel | |
| parent | da8543ef125afc7bba4da526b61a1ae07dc25109 (diff) | |
| parent | 82c9df820112c6286a8e8fbe482e94b65b49062c (diff) | |
Merge with /pub/scm/linux/kernel/git/torvalds/linux-2.6.git
Signed-off-by: Steve French <sfrench@us.ibm.com>
Diffstat (limited to 'arch/ia64/kernel')
| -rw-r--r-- | arch/ia64/kernel/process.c | 2 | ||||
| -rw-r--r-- | arch/ia64/kernel/time.c | 29 | ||||
| -rw-r--r-- | arch/ia64/kernel/uncached.c | 6 | ||||
| -rw-r--r-- | arch/ia64/kernel/vmlinux.lds.S | 3 |
4 files changed, 37 insertions, 3 deletions
diff --git a/arch/ia64/kernel/process.c b/arch/ia64/kernel/process.c index a4da715a360c..e9904c74d2ba 100644 --- a/arch/ia64/kernel/process.c +++ b/arch/ia64/kernel/process.c | |||
| @@ -721,11 +721,13 @@ flush_thread (void) | |||
| 721 | /* drop floating-point and debug-register state if it exists: */ | 721 | /* drop floating-point and debug-register state if it exists: */ |
| 722 | current->thread.flags &= ~(IA64_THREAD_FPH_VALID | IA64_THREAD_DBG_VALID); | 722 | current->thread.flags &= ~(IA64_THREAD_FPH_VALID | IA64_THREAD_DBG_VALID); |
| 723 | ia64_drop_fpu(current); | 723 | ia64_drop_fpu(current); |
| 724 | #ifdef CONFIG_IA32_SUPPORT | ||
| 724 | if (IS_IA32_PROCESS(ia64_task_regs(current))) { | 725 | if (IS_IA32_PROCESS(ia64_task_regs(current))) { |
| 725 | ia32_drop_partial_page_list(current); | 726 | ia32_drop_partial_page_list(current); |
| 726 | current->thread.task_size = IA32_PAGE_OFFSET; | 727 | current->thread.task_size = IA32_PAGE_OFFSET; |
| 727 | set_fs(USER_DS); | 728 | set_fs(USER_DS); |
| 728 | } | 729 | } |
| 730 | #endif | ||
| 729 | } | 731 | } |
| 730 | 732 | ||
| 731 | /* | 733 | /* |
diff --git a/arch/ia64/kernel/time.c b/arch/ia64/kernel/time.c index 5b7e736f3b49..028a2b95936c 100644 --- a/arch/ia64/kernel/time.c +++ b/arch/ia64/kernel/time.c | |||
| @@ -249,3 +249,32 @@ time_init (void) | |||
| 249 | */ | 249 | */ |
| 250 | set_normalized_timespec(&wall_to_monotonic, -xtime.tv_sec, -xtime.tv_nsec); | 250 | set_normalized_timespec(&wall_to_monotonic, -xtime.tv_sec, -xtime.tv_nsec); |
| 251 | } | 251 | } |
| 252 | |||
| 253 | #define SMALLUSECS 100 | ||
| 254 | |||
| 255 | void | ||
| 256 | udelay (unsigned long usecs) | ||
| 257 | { | ||
| 258 | unsigned long start; | ||
| 259 | unsigned long cycles; | ||
| 260 | unsigned long smallusecs; | ||
| 261 | |||
| 262 | /* | ||
| 263 | * Execute the non-preemptible delay loop (because the ITC might | ||
| 264 | * not be synchronized between CPUS) in relatively short time | ||
| 265 | * chunks, allowing preemption between the chunks. | ||
| 266 | */ | ||
| 267 | while (usecs > 0) { | ||
| 268 | smallusecs = (usecs > SMALLUSECS) ? SMALLUSECS : usecs; | ||
| 269 | preempt_disable(); | ||
| 270 | cycles = smallusecs*local_cpu_data->cyc_per_usec; | ||
| 271 | start = ia64_get_itc(); | ||
| 272 | |||
| 273 | while (ia64_get_itc() - start < cycles) | ||
| 274 | cpu_relax(); | ||
| 275 | |||
| 276 | preempt_enable(); | ||
| 277 | usecs -= smallusecs; | ||
| 278 | } | ||
| 279 | } | ||
| 280 | EXPORT_SYMBOL(udelay); | ||
diff --git a/arch/ia64/kernel/uncached.c b/arch/ia64/kernel/uncached.c index c6d40446c2c4..b631cf86ed44 100644 --- a/arch/ia64/kernel/uncached.c +++ b/arch/ia64/kernel/uncached.c | |||
| @@ -53,7 +53,7 @@ static void uncached_ipi_visibility(void *data) | |||
| 53 | if ((status != PAL_VISIBILITY_OK) && | 53 | if ((status != PAL_VISIBILITY_OK) && |
| 54 | (status != PAL_VISIBILITY_OK_REMOTE_NEEDED)) | 54 | (status != PAL_VISIBILITY_OK_REMOTE_NEEDED)) |
| 55 | printk(KERN_DEBUG "pal_prefetch_visibility() returns %i on " | 55 | printk(KERN_DEBUG "pal_prefetch_visibility() returns %i on " |
| 56 | "CPU %i\n", status, get_cpu()); | 56 | "CPU %i\n", status, raw_smp_processor_id()); |
| 57 | } | 57 | } |
| 58 | 58 | ||
| 59 | 59 | ||
| @@ -63,7 +63,7 @@ static void uncached_ipi_mc_drain(void *data) | |||
| 63 | status = ia64_pal_mc_drain(); | 63 | status = ia64_pal_mc_drain(); |
| 64 | if (status) | 64 | if (status) |
| 65 | printk(KERN_WARNING "ia64_pal_mc_drain() failed with %i on " | 65 | printk(KERN_WARNING "ia64_pal_mc_drain() failed with %i on " |
| 66 | "CPU %i\n", status, get_cpu()); | 66 | "CPU %i\n", status, raw_smp_processor_id()); |
| 67 | } | 67 | } |
| 68 | 68 | ||
| 69 | 69 | ||
| @@ -105,7 +105,7 @@ uncached_get_new_chunk(struct gen_pool *poolp) | |||
| 105 | status = ia64_pal_prefetch_visibility(PAL_VISIBILITY_PHYSICAL); | 105 | status = ia64_pal_prefetch_visibility(PAL_VISIBILITY_PHYSICAL); |
| 106 | 106 | ||
| 107 | dprintk(KERN_INFO "pal_prefetch_visibility() returns %i on cpu %i\n", | 107 | dprintk(KERN_INFO "pal_prefetch_visibility() returns %i on cpu %i\n", |
| 108 | status, get_cpu()); | 108 | status, raw_smp_processor_id()); |
| 109 | 109 | ||
| 110 | if (!status) { | 110 | if (!status) { |
| 111 | status = smp_call_function(uncached_ipi_visibility, NULL, 0, 1); | 111 | status = smp_call_function(uncached_ipi_visibility, NULL, 0, 1); |
diff --git a/arch/ia64/kernel/vmlinux.lds.S b/arch/ia64/kernel/vmlinux.lds.S index 30d8564e9603..73af6267d2ef 100644 --- a/arch/ia64/kernel/vmlinux.lds.S +++ b/arch/ia64/kernel/vmlinux.lds.S | |||
| @@ -177,6 +177,9 @@ SECTIONS | |||
| 177 | } | 177 | } |
| 178 | . = ALIGN(PAGE_SIZE); /* make sure the gate page doesn't expose kernel data */ | 178 | . = ALIGN(PAGE_SIZE); /* make sure the gate page doesn't expose kernel data */ |
| 179 | 179 | ||
| 180 | .data.read_mostly : AT(ADDR(.data.read_mostly) - LOAD_OFFSET) | ||
| 181 | { *(.data.read_mostly) } | ||
| 182 | |||
| 180 | .data.cacheline_aligned : AT(ADDR(.data.cacheline_aligned) - LOAD_OFFSET) | 183 | .data.cacheline_aligned : AT(ADDR(.data.cacheline_aligned) - LOAD_OFFSET) |
| 181 | { *(.data.cacheline_aligned) } | 184 | { *(.data.cacheline_aligned) } |
| 182 | 185 | ||
