From 3dfbc88464934fb6924a388bc03961d44f387926 Mon Sep 17 00:00:00 2001 From: Thomas Gleixner Date: Wed, 17 Oct 2007 18:04:32 +0200 Subject: x86: C1E late detection fix. Really switch off lapic timer Doh, I completely missed that devices marked DUMMY are not running the set_mode function. So we force broadcasting, but we keep the local APIC timer running. Let the clock event layer mark the device _after_ switching it off. Signed-off-by: Thomas Gleixner Signed-off-by: Ingo Molnar --- arch/x86/kernel/apic_64.c | 3 --- kernel/time/tick-broadcast.c | 18 ++++-------------- 2 files changed, 4 insertions(+), 17 deletions(-) diff --git a/arch/x86/kernel/apic_64.c b/arch/x86/kernel/apic_64.c index 09b82093bc7..2250c654eac 100644 --- a/arch/x86/kernel/apic_64.c +++ b/arch/x86/kernel/apic_64.c @@ -974,15 +974,12 @@ void __init setup_boot_APIC_clock (void) */ void __cpuinit check_boot_apic_timer_broadcast(void) { - struct clock_event_device *levt = &per_cpu(lapic_events, boot_cpu_id); - if (!disable_apic_timer || (lapic_clockevent.features & CLOCK_EVT_FEAT_DUMMY)) return; printk(KERN_INFO "AMD C1E detected late. Force timer broadcast.\n"); lapic_clockevent.features |= CLOCK_EVT_FEAT_DUMMY; - levt->features |= CLOCK_EVT_FEAT_DUMMY; local_irq_enable(); clockevents_notify(CLOCK_EVT_NOTIFY_BROADCAST_FORCE, &boot_cpu_id); diff --git a/kernel/time/tick-broadcast.c b/kernel/time/tick-broadcast.c index fab9dd8bbd6..8cfb8b2ce77 100644 --- a/kernel/time/tick-broadcast.c +++ b/kernel/time/tick-broadcast.c @@ -222,20 +222,8 @@ static void tick_do_broadcast_on_off(void *why) if (!dev || !(dev->features & CLOCK_EVT_FEAT_C3STOP)) goto out; - /* - * Defect device ? - */ - if (!tick_device_is_functional(dev)) { - /* - * AMD C1E wreckage fixup: - * - * Device was registered functional in the first - * place. Now the secondary CPU detected the C1E - * misfeature and notifies us to fix it up - */ - if (*reason != CLOCK_EVT_NOTIFY_BROADCAST_FORCE) - goto out; - } + if (!tick_device_is_functional(dev)) + goto out; switch (*reason) { case CLOCK_EVT_NOTIFY_BROADCAST_ON: @@ -246,6 +234,8 @@ static void tick_do_broadcast_on_off(void *why) clockevents_set_mode(dev, CLOCK_EVT_MODE_SHUTDOWN); } + if (*reason == CLOCK_EVT_NOTIFY_BROADCAST_FORCE) + dev->features |= CLOCK_EVT_FEAT_DUMMY; break; case CLOCK_EVT_NOTIFY_BROADCAST_OFF: if (cpu_isset(cpu, tick_broadcast_mask)) { -- cgit v1.2.3 From 0f8e45a288991ff24951b83fe83cf3eb011bbaed Mon Sep 17 00:00:00 2001 From: Stephane Eranian Date: Wed, 17 Oct 2007 18:04:32 +0200 Subject: i386: make Oprofile call shutdown() only once per session Oprofile: call model->shutdown() only once to avoid calling release_ev*() multiple times [ tglx: arch/x86 adaptation ] Signed-off-by: Stephane Eranian Signed-off-by: Andi Kleen Signed-off-by: Ingo Molnar Signed-off-by: Thomas Gleixner --- arch/x86/oprofile/nmi_int.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/arch/x86/oprofile/nmi_int.c b/arch/x86/oprofile/nmi_int.c index 11b7a51566a..2d0eeac7251 100644 --- a/arch/x86/oprofile/nmi_int.c +++ b/arch/x86/oprofile/nmi_int.c @@ -269,7 +269,6 @@ static void nmi_cpu_shutdown(void * dummy) apic_write(APIC_LVTPC, saved_lvtpc[cpu]); apic_write(APIC_LVTERR, v); nmi_restore_registers(msrs); - model->shutdown(msrs); } @@ -278,6 +277,7 @@ static void nmi_shutdown(void) nmi_enabled = 0; on_each_cpu(nmi_cpu_shutdown, NULL, 0, 1); unregister_die_notifier(&profile_exceptions_nb); + model->shutdown(cpu_msrs); free_msrs(); } -- cgit v1.2.3 From afc54659b1023a5232a55b7b8919294c693ff8ab Mon Sep 17 00:00:00 2001 From: Andrew Morton Date: Wed, 17 Oct 2007 18:04:32 +0200 Subject: x86: clean up apicid_to_node declaration Use the correct #define in the declaration of apicid_to_node[], to match the definition. [ tglx: arch/x86 adaptation ] Cc: Andi Kleen Cc: David Rientjes Signed-off-by: Andrew Morton Signed-off-by: Andi Kleen Signed-off-by: Ingo Molnar Signed-off-by: Thomas Gleixner --- include/asm-x86/numa_64.h | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/include/asm-x86/numa_64.h b/include/asm-x86/numa_64.h index 933ff11ece1..0cc5c97a7fc 100644 --- a/include/asm-x86/numa_64.h +++ b/include/asm-x86/numa_64.h @@ -2,6 +2,7 @@ #define _ASM_X8664_NUMA_H 1 #include +#include struct bootnode { u64 start,end; @@ -19,7 +20,7 @@ extern void numa_set_node(int cpu, int node); extern void srat_reserve_add_area(int nodeid); extern int hotadd_percent; -extern unsigned char apicid_to_node[256]; +extern unsigned char apicid_to_node[MAX_LOCAL_APIC]; #ifdef CONFIG_NUMA extern void __init init_cpu_to_node(void); -- cgit v1.2.3 From 8957ecab029669f43512e53521e8b59ec6b07bdd Mon Sep 17 00:00:00 2001 From: Adrian Bunk Date: Wed, 17 Oct 2007 18:04:32 +0200 Subject: i386: setup_trampoline() must be __cpuinit WARNING: arch/i386/kernel/built-in.o(.text+0xf201): Section mismatch: reference to .init.data:trampoline_end (between 'setup_trampoline' and 'cpu_coregroup_map') WARNING: arch/i386/kernel/built-in.o(.text+0xf207): Section mismatch: reference to .init.data:trampoline_data (between 'setup_trampoline' and 'cpu_coregroup_map') WARNING: arch/i386/kernel/built-in.o(.text+0xf21a): Section mismatch: reference to .init.data:trampoline_data (between 'setup_trampoline' and 'cpu_coregroup_map') Harmless but annoying warnings present when building an i386 SMP kernel with CONFIG_HOTPLUG_CPU=n and gcc < 4.0 . [ tglx: arch/x86 adaptation ] Signed-off-by: Adrian Bunk Signed-off-by: Andrew Morton Signed-off-by: Andi Kleen Signed-off-by: Ingo Molnar Signed-off-by: Thomas Gleixner --- arch/x86/kernel/smpboot_32.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/arch/x86/kernel/smpboot_32.c b/arch/x86/kernel/smpboot_32.c index 31fc08bd15e..edc9db69a11 100644 --- a/arch/x86/kernel/smpboot_32.c +++ b/arch/x86/kernel/smpboot_32.c @@ -118,7 +118,7 @@ DEFINE_PER_CPU(int, cpu_state) = { 0 }; * has made sure it's suitably aligned. */ -static unsigned long __devinit setup_trampoline(void) +static unsigned long __cpuinit setup_trampoline(void) { memcpy(trampoline_base, trampoline_data, trampoline_end - trampoline_data); return virt_to_phys(trampoline_base); -- cgit v1.2.3 From af7e6a7464249251efb2c4f67124e4d022985994 Mon Sep 17 00:00:00 2001 From: Roland McGrath Date: Wed, 17 Oct 2007 18:04:32 +0200 Subject: x86_64: install unstripped copies of compat vdso on disk This keeps an unstripped copy of the vDSO images built before they are stripped and embedded in the kernel. The unstripped copies get installed in $(MODLIB)/vdso/ by "make install" (or you can explicitly use the subtarget "make vdso_install"). These files can be useful when they contain source-level debugging information. [ tglx: arch/x86 adaptation ] Signed-off-by: Roland McGrath Signed-off-by: Andi Kleen Signed-off-by: Ingo Molnar Signed-off-by: Thomas Gleixner --- arch/x86/ia32/Makefile | 25 +++++++++++++++++++++---- arch/x86_64/Makefile | 7 ++++++- 2 files changed, 27 insertions(+), 5 deletions(-) diff --git a/arch/x86/ia32/Makefile b/arch/x86/ia32/Makefile index cdae36435e2..e2edda255a8 100644 --- a/arch/x86/ia32/Makefile +++ b/arch/x86/ia32/Makefile @@ -18,18 +18,35 @@ $(obj)/syscall32_syscall.o: \ $(foreach F,sysenter syscall,$(obj)/vsyscall-$F.so) # Teach kbuild about targets -targets := $(foreach F,sysenter syscall,vsyscall-$F.o vsyscall-$F.so) +targets := $(foreach F,$(addprefix vsyscall-,sysenter syscall),\ + $F.o $F.so $F.so.dbg) # The DSO images are built using a special linker script quiet_cmd_syscall = SYSCALL $@ - cmd_syscall = $(CC) -m32 -nostdlib -shared -s \ + cmd_syscall = $(CC) -m32 -nostdlib -shared \ $(call ld-option, -Wl$(comma)--hash-style=sysv) \ -Wl,-soname=linux-gate.so.1 -o $@ \ -Wl,-T,$(filter-out FORCE,$^) -$(obj)/vsyscall-sysenter.so $(obj)/vsyscall-syscall.so: \ -$(obj)/vsyscall-%.so: $(src)/vsyscall.lds $(obj)/vsyscall-%.o FORCE +$(obj)/%.so: OBJCOPYFLAGS := -S +$(obj)/%.so: $(obj)/%.so.dbg FORCE + $(call if_changed,objcopy) + +$(obj)/vsyscall-sysenter.so.dbg $(obj)/vsyscall-syscall.so.dbg: \ +$(obj)/vsyscall-%.so.dbg: $(src)/vsyscall.lds $(obj)/vsyscall-%.o FORCE $(call if_changed,syscall) AFLAGS_vsyscall-sysenter.o = -m32 -Wa,-32 AFLAGS_vsyscall-syscall.o = -m32 -Wa,-32 + +vdsos := vdso32-sysenter.so vdso32-syscall.so + +quiet_cmd_vdso_install = INSTALL $@ + cmd_vdso_install = cp $(@:vdso32-%.so=$(obj)/vsyscall-%.so.dbg) \ + $(MODLIB)/vdso/$@ + +$(vdsos): + @mkdir -p $(MODLIB)/vdso + $(call cmd,vdso_install) + +vdso_install: $(vdsos) diff --git a/arch/x86_64/Makefile b/arch/x86_64/Makefile index 9daa32d1d2a..d460bef2ab8 100644 --- a/arch/x86_64/Makefile +++ b/arch/x86_64/Makefile @@ -110,9 +110,14 @@ bzdisk: vmlinux fdimage fdimage144 fdimage288 isoimage: vmlinux $(Q)$(MAKE) $(build)=$(boot) BOOTIMAGE=$(BOOTIMAGE) $@ -install: +install: vdso_install $(Q)$(MAKE) $(build)=$(boot) BOOTIMAGE=$(BOOTIMAGE) $@ +vdso_install: +ifeq ($(CONFIG_IA32_EMULATION),y) + $(Q)$(MAKE) $(build)=arch/x86/ia32 $@ +endif + archclean: $(Q)rm -rf $(objtree)/arch/x86_64/boot $(Q)$(MAKE) $(clean)=$(boot) -- cgit v1.2.3 From f79eb83b3af419c4e079c8312b3c70fb6391117a Mon Sep 17 00:00:00 2001 From: Roland McGrath Date: Wed, 17 Oct 2007 18:04:32 +0200 Subject: x86: Install unstripped copy of 64bit vdso to disk This keeps an unstripped copy of the 64bit vDSO images built before they are stripped and embedded in the kernel. The unstripped copies get installed in $(MODLIB)/vdso/ by "make install" (or you can explicitly use the subtarget "make vdso_install"). These files can be useful when they contain source-level debugging information. [ tglx: arch/x86 adaptation ] Signed-off-by: Roland McGrath Signed-off-by: Andi Kleen Signed-off-by: Ingo Molnar Signed-off-by: Thomas Gleixner --- arch/x86/vdso/Makefile | 17 ++++++++++++++++- arch/x86_64/Makefile | 1 + 2 files changed, 17 insertions(+), 1 deletion(-) diff --git a/arch/x86/vdso/Makefile b/arch/x86/vdso/Makefile index dcd6bb9e0bb..7a2ba458393 100644 --- a/arch/x86/vdso/Makefile +++ b/arch/x86/vdso/Makefile @@ -13,7 +13,7 @@ vobjs := $(foreach F,$(vobjs-y),$(obj)/$F) $(obj)/vdso.o: $(obj)/vdso.so -targets += vdso.so vdso.lds $(vobjs-y) vdso-syms.o +targets += vdso.so vdso.so.dbg vdso.lds $(vobjs-y) vdso-syms.o # The DSO images are built using a special linker script. quiet_cmd_syscall = SYSCALL $@ @@ -26,12 +26,19 @@ vdso-flags = -fPIC -shared -Wl,-soname=linux-vdso.so.1 \ $(call ld-option, -Wl$(comma)--hash-style=sysv) \ -Wl,-z,max-page-size=4096 -Wl,-z,common-page-size=4096 SYSCFLAGS_vdso.so = $(vdso-flags) +SYSCFLAGS_vdso.so.dbg = $(vdso-flags) $(obj)/vdso.o: $(src)/vdso.S $(obj)/vdso.so $(obj)/vdso.so: $(src)/vdso.lds $(vobjs) FORCE + +$(obj)/vdso.so.dbg: $(src)/vdso.lds $(vobjs) FORCE $(call if_changed,syscall) +$(obj)/%.so: OBJCOPYFLAGS := -S +$(obj)/%.so: $(obj)/%.so.dbg FORCE + $(call if_changed,objcopy) + CFL := $(PROFILING) -mcmodel=small -fPIC -g0 -O2 -fasynchronous-unwind-tables -m64 $(obj)/vclock_gettime.o: KBUILD_CFLAGS = $(CFL) @@ -47,3 +54,11 @@ $(obj)/built-in.o: ld_flags += -R $(obj)/vdso-syms.o SYSCFLAGS_vdso-syms.o = -r -d $(obj)/vdso-syms.o: $(src)/vdso.lds $(vobjs) FORCE $(call if_changed,syscall) + +quiet_cmd_vdso_install = INSTALL $@ + cmd_vdso_install = cp $(obj)/$@.dbg $(MODLIB)/vdso/$@ +vdso.so: + @mkdir -p $(MODLIB)/vdso + $(call cmd,vdso_install) + +vdso_install: vdso.so diff --git a/arch/x86_64/Makefile b/arch/x86_64/Makefile index d460bef2ab8..03e1ede27b8 100644 --- a/arch/x86_64/Makefile +++ b/arch/x86_64/Makefile @@ -117,6 +117,7 @@ vdso_install: ifeq ($(CONFIG_IA32_EMULATION),y) $(Q)$(MAKE) $(build)=arch/x86/ia32 $@ endif + $(Q)$(MAKE) $(build)=arch/x86/vdso $@ archclean: $(Q)rm -rf $(objtree)/arch/x86_64/boot -- cgit v1.2.3 From 6442eea937ef797d4b66733f49c82e2fdc2aca6f Mon Sep 17 00:00:00 2001 From: Laurent Vivier Date: Wed, 17 Oct 2007 18:04:33 +0200 Subject: i386: export i386 smp_call_function_mask() to modules This patch export i386 smp_call_function_mask() with EXPORT_SYMBOL(). This function is needed by KVM to call a function on a set of CPUs. [ tglx: arch/x86 adaptation ] Signed-off-by: Laurent Vivier Signed-off-by: Andi Kleen Signed-off-by: Ingo Molnar Signed-off-by: Thomas Gleixner --- arch/x86/kernel/smp_32.c | 7 +++++++ include/asm-x86/smp_32.h | 9 +++------ 2 files changed, 10 insertions(+), 6 deletions(-) diff --git a/arch/x86/kernel/smp_32.c b/arch/x86/kernel/smp_32.c index 2d35d850202..eebc6e82576 100644 --- a/arch/x86/kernel/smp_32.c +++ b/arch/x86/kernel/smp_32.c @@ -705,3 +705,10 @@ struct smp_ops smp_ops = { .smp_send_reschedule = native_smp_send_reschedule, .smp_call_function_mask = native_smp_call_function_mask, }; + +int smp_call_function_mask(cpumask_t mask, void (*func) (void *info), + void *info, int wait) +{ + return smp_ops.smp_call_function_mask(mask, func, info, wait); +} +EXPORT_SYMBOL(smp_call_function_mask); diff --git a/include/asm-x86/smp_32.h b/include/asm-x86/smp_32.h index 955dd7c8538..ee46038d126 100644 --- a/include/asm-x86/smp_32.h +++ b/include/asm-x86/smp_32.h @@ -92,12 +92,9 @@ static inline void smp_send_reschedule(int cpu) { smp_ops.smp_send_reschedule(cpu); } -static inline int smp_call_function_mask(cpumask_t mask, - void (*func) (void *info), void *info, - int wait) -{ - return smp_ops.smp_call_function_mask(mask, func, info, wait); -} +extern int smp_call_function_mask(cpumask_t mask, + void (*func) (void *info), void *info, + int wait); void native_smp_prepare_boot_cpu(void); void native_smp_prepare_cpus(unsigned int max_cpus); -- cgit v1.2.3 From 801916c1b369b637ce799e6c71a94963ff63df79 Mon Sep 17 00:00:00 2001 From: Andrew Hastings Date: Wed, 17 Oct 2007 18:04:33 +0200 Subject: x86: fix off-by-one in find_next_zero_string Fix an off-by-one error in find_next_zero_string which prevents allocating the last bit. [ tglx: arch/x86 adaptation ] Signed-off-by: Andrew Hastings on behalf of Cray Inc. Signed-off-by: Andi Kleen Signed-off-by: Ingo Molnar Signed-off-by: Thomas Gleixner --- arch/x86/lib/bitstr_64.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/arch/x86/lib/bitstr_64.c b/arch/x86/lib/bitstr_64.c index 24676609a6a..7445caf1b5d 100644 --- a/arch/x86/lib/bitstr_64.c +++ b/arch/x86/lib/bitstr_64.c @@ -14,7 +14,7 @@ find_next_zero_string(unsigned long *bitmap, long start, long nbits, int len) /* could test bitsliced, but it's hardly worth it */ end = n+len; - if (end >= nbits) + if (end > nbits) return -1; for (i = n+1; i < end; i++) { if (test_bit(i, bitmap)) { -- cgit v1.2.3 From 58d5fa7a6a6fc4754d295d0999b284edd67c8620 Mon Sep 17 00:00:00 2001 From: "Siddha, Suresh B" Date: Wed, 17 Oct 2007 18:04:33 +0200 Subject: i386: fix 4 bit apicid assumption of mach-default Fix get_apic_id() in mach-default, so that it uses 8 bits incase of xAPIC case and 4 bits for legacy APIC case. This fixes the i386 kernel assumption that apic id is less than 16 for xAPIC platforms with 8 cpus or less and makes the kernel boot on such platforms. [ tglx: arch/x86 adaptation ] Signed-off-by: Suresh Siddha Signed-off-by: Andi Kleen Cc: Andi Kleen Cc: Andrew Morton Signed-off-by: Andrew Morton Signed-off-by: Ingo Molnar Signed-off-by: Thomas Gleixner --- include/asm-x86/mach-default/mach_apicdef.h | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/include/asm-x86/mach-default/mach_apicdef.h b/include/asm-x86/mach-default/mach_apicdef.h index 7bcb350c3ee..ae984131909 100644 --- a/include/asm-x86/mach-default/mach_apicdef.h +++ b/include/asm-x86/mach-default/mach_apicdef.h @@ -1,11 +1,17 @@ #ifndef __ASM_MACH_APICDEF_H #define __ASM_MACH_APICDEF_H +#include + #define APIC_ID_MASK (0xF<<24) static inline unsigned get_apic_id(unsigned long x) { - return (((x)>>24)&0xF); + unsigned int ver = GET_APIC_VERSION(apic_read(APIC_LVR)); + if (APIC_XAPIC(ver)) + return (((x)>>24)&0xFF); + else + return (((x)>>24)&0xF); } #define GET_APIC_ID(x) get_apic_id(x) -- cgit v1.2.3 From 25d1b5167780c7f245d9655d302f6a3d8bf61d19 Mon Sep 17 00:00:00 2001 From: Satyam Sharma Date: Wed, 17 Oct 2007 18:04:33 +0200 Subject: i386: Fix section mismatch Fix bugzilla #8679 WARNING: arch/i386/kernel/built-in.o(.data+0x2148): Section mismatch: reference to .init.text: (between 'thermal_throttle_cpu_notifier' and 'mtrr_mutex') comes because struct notifier_block thermal_throttle_cpu_notifier in arch/i386/kernel/cpu/mcheck/therm_throt.c goes in .data section but the notifier callback function itself has been marked __cpuinit which becomes __init == .init.text when HOTPLUG_CPU=n. The warning is bogus because the callback will never be called out if HOTPLUG_CPU=n in the first place (as one can see from kernel/cpu.c, the cpu_chain itself is __cpuinitdata :-) So, let's mark thermal_throttle_cpu_notifier as __cpuinitdata to fix the section mismatch warning. [ tglx: arch/x86 adaptation ] Signed-off-by: Satyam Sharma Signed-off-by: Andrew Morton Signed-off-by: Andi Kleen Signed-off-by: Ingo Molnar Signed-off-by: Thomas Gleixner --- arch/x86/kernel/cpu/mcheck/therm_throt.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/arch/x86/kernel/cpu/mcheck/therm_throt.c b/arch/x86/kernel/cpu/mcheck/therm_throt.c index 1203dc5ab87..494d320d909 100644 --- a/arch/x86/kernel/cpu/mcheck/therm_throt.c +++ b/arch/x86/kernel/cpu/mcheck/therm_throt.c @@ -152,7 +152,7 @@ static __cpuinit int thermal_throttle_cpu_callback(struct notifier_block *nfb, return NOTIFY_OK; } -static struct notifier_block thermal_throttle_cpu_notifier = +static struct notifier_block thermal_throttle_cpu_notifier __cpuinitdata = { .notifier_call = thermal_throttle_cpu_callback, }; -- cgit v1.2.3 From d72b1b4f41b5159d2d0e54e54c794d500197572e Mon Sep 17 00:00:00 2001 From: Sam Ravnborg Date: Wed, 17 Oct 2007 18:04:33 +0200 Subject: i386: fix section mismatch warning in intel.c Fix following section mismatch warning: WARNING: vmlinux.o(.text+0xc88c): Section mismatch: reference to .init.text:trap_init_f00f_bug (between 'init_intel' and 'cpuid4_cache_lookup') init_intel are __cpuint where trap_init_f00f_bug is __init. Fixed by declaring trap_init_f00f_bug __cpuinit. Moved the defintion of trap_init_f00f_bug to the sole user in init.c so the ugly prototype in intel.c could get killed. Frank van Maarseveen supplied the .config used to reproduce the warning. [ tglx: arch/x86 adaptation ] Cc: Frank van Maarseveen Signed-off-by: Sam Ravnborg Signed-off-by: Andi Kleen Signed-off-by: Ingo Molnar Signed-off-by: Thomas Gleixner --- arch/x86/kernel/cpu/intel.c | 17 +++++++++++++++-- arch/x86/kernel/traps_32.c | 14 -------------- 2 files changed, 15 insertions(+), 16 deletions(-) diff --git a/arch/x86/kernel/cpu/intel.c b/arch/x86/kernel/cpu/intel.c index dc4e08147b1..cc8c501b9f3 100644 --- a/arch/x86/kernel/cpu/intel.c +++ b/arch/x86/kernel/cpu/intel.c @@ -8,6 +8,7 @@ #include #include +#include #include #include @@ -19,8 +20,6 @@ #include #endif -extern int trap_init_f00f_bug(void); - #ifdef CONFIG_X86_INTEL_USERCOPY /* * Alignment at which movsl is preferred for bulk memory copies. @@ -95,6 +94,20 @@ static int __cpuinit num_cpu_cores(struct cpuinfo_x86 *c) return 1; } +#ifdef CONFIG_X86_F00F_BUG +static void __cpuinit trap_init_f00f_bug(void) +{ + __set_fixmap(FIX_F00F_IDT, __pa(&idt_table), PAGE_KERNEL_RO); + + /* + * Update the IDT descriptor and reload the IDT so that + * it uses the read-only mapped virtual address. + */ + idt_descr.address = fix_to_virt(FIX_F00F_IDT); + load_idt(&idt_descr); +} +#endif + static void __cpuinit init_intel(struct cpuinfo_x86 *c) { unsigned int l2 = 0; diff --git a/arch/x86/kernel/traps_32.c b/arch/x86/kernel/traps_32.c index 05c27ecaf2a..0fce34226b7 100644 --- a/arch/x86/kernel/traps_32.c +++ b/arch/x86/kernel/traps_32.c @@ -1112,20 +1112,6 @@ asmlinkage void math_emulate(long arg) #endif /* CONFIG_MATH_EMULATION */ -#ifdef CONFIG_X86_F00F_BUG -void __init trap_init_f00f_bug(void) -{ - __set_fixmap(FIX_F00F_IDT, __pa(&idt_table), PAGE_KERNEL_RO); - - /* - * Update the IDT descriptor and reload the IDT so that - * it uses the read-only mapped virtual address. - */ - idt_descr.address = fix_to_virt(FIX_F00F_IDT); - load_idt(&idt_descr); -} -#endif - /* * This needs to use 'idt_table' rather than 'idt', and * thus use the _nonmapped_ version of the IDT, as the -- cgit v1.2.3 From aa506dc7b12d03fbf8fd11aab752aed1aadd9c07 Mon Sep 17 00:00:00 2001 From: Jan Beulich Date: Wed, 17 Oct 2007 18:04:33 +0200 Subject: i386: avoid temporarily inconsistent pte-s One more of these issues (which were considered fixed a few releases back): other than on x86-64, i386 allows set_fixmap() to replace already present mappings. Consequently, on PAE, care must be taken to not update the high half of a pte while the low half is still holding the old value. [ tglx: arch/x86 adaptation ] Signed-off-by: Jan Beulich Signed-off-by: Andi Kleen Signed-off-by: Ingo Molnar Signed-off-by: Thomas Gleixner arch/x86/mm/pgtable_32.c | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) --- arch/x86/mm/pgtable_32.c | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/arch/x86/mm/pgtable_32.c b/arch/x86/mm/pgtable_32.c index ef1f6cd3ea6..bbaa2b15393 100644 --- a/arch/x86/mm/pgtable_32.c +++ b/arch/x86/mm/pgtable_32.c @@ -97,8 +97,7 @@ static void set_pte_pfn(unsigned long vaddr, unsigned long pfn, pgprot_t flags) } pte = pte_offset_kernel(pmd, vaddr); if (pgprot_val(flags)) - /* stored as-is, to permit clearing entries */ - set_pte(pte, pfn_pte(pfn, flags)); + set_pte_present(&init_mm, vaddr, pte, pfn_pte(pfn, flags)); else pte_clear(&init_mm, vaddr, pte); -- cgit v1.2.3 From 1c5b5cfd290b6cb7c67020ef420e275f746a7236 Mon Sep 17 00:00:00 2001 From: Andrey Mirkin Date: Wed, 17 Oct 2007 18:04:33 +0200 Subject: x86: return correct error code from child_rip in x86_64 entry.S Right now register edi is just cleared before calling do_exit. That is wrong because correct return value will be ignored. Value from rax should be copied to rdi instead of clearing edi. AK: changed to 32bit move because it's strictly an int [ tglx: arch/x86 adaptation ] Signed-off-by: Andrey Mirkin Signed-off-by: Andi Kleen Signed-off-by: Ingo Molnar Signed-off-by: Thomas Gleixner --- arch/x86/kernel/entry_64.S | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/arch/x86/kernel/entry_64.S b/arch/x86/kernel/entry_64.S index f1cacd4897f..3a058bb1640 100644 --- a/arch/x86/kernel/entry_64.S +++ b/arch/x86/kernel/entry_64.S @@ -988,7 +988,7 @@ child_rip: movq %rsi, %rdi call *%rax # exit - xorl %edi, %edi + mov %eax, %edi call do_exit CFI_ENDPROC ENDPROC(child_rip) -- cgit v1.2.3 From f891dd18c107d582c3ab98da5209c930e16baf78 Mon Sep 17 00:00:00 2001 From: Andi Kleen Date: Wed, 17 Oct 2007 18:04:33 +0200 Subject: x86: initialize 64bit registers for a.out executables Previously the data from before the exec was kept in there. Zero them instead. [ tglx: arch/x86 adaptation ] Signed-off-by: Andi Kleen Signed-off-by: Ingo Molnar Signed-off-by: Thomas Gleixner --- arch/x86/ia32/ia32_aout.c | 2 ++ 1 file changed, 2 insertions(+) diff --git a/arch/x86/ia32/ia32_aout.c b/arch/x86/ia32/ia32_aout.c index 7cf1c29bf90..f82e1a94fcb 100644 --- a/arch/x86/ia32/ia32_aout.c +++ b/arch/x86/ia32/ia32_aout.c @@ -420,6 +420,8 @@ beyond_if: (regs)->eflags = 0x200; (regs)->cs = __USER32_CS; (regs)->ss = __USER32_DS; + regs->r8 = regs->r9 = regs->r10 = regs->r11 = + regs->r12 = regs->r13 = regs->r14 = regs->r15 = 0; set_fs(USER_DS); if (unlikely(current->ptrace & PT_PTRACED)) { if (current->ptrace & PT_TRACE_EXEC) -- cgit v1.2.3 From c1217a75ea102d4e69321f210fab60bc47b9a48e Mon Sep 17 00:00:00 2001 From: Kirill Korotaev Date: Wed, 17 Oct 2007 18:04:33 +0200 Subject: x86: mark read_crX() asm code as volatile Some gcc versions (I checked at least 4.1.1 from RHEL5 & 4.1.2 from gentoo) can generate incorrect code with read_crX()/write_crX() functions mix up, due to cached results of read_crX(). The small app for x8664 below compiled with -O2 demonstrates this (i686 does the same thing): --- include/asm-x86/system_32.h | 2 +- include/asm-x86/system_64.h | 8 ++++---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/include/asm-x86/system_32.h b/include/asm-x86/system_32.h index d84e593b7df..1d6fb3afa53 100644 --- a/include/asm-x86/system_32.h +++ b/include/asm-x86/system_32.h @@ -142,7 +142,7 @@ static inline unsigned long native_read_cr4_safe(void) { unsigned long val; /* This could fault if %cr4 does not exist */ - asm("1: movl %%cr4, %0 \n" + asm volatile("1: movl %%cr4, %0 \n" "2: \n" ".section __ex_table,\"a\" \n" ".long 1b,2b \n" diff --git a/include/asm-x86/system_64.h b/include/asm-x86/system_64.h index 5022aecc333..fb4bcf99e66 100644 --- a/include/asm-x86/system_64.h +++ b/include/asm-x86/system_64.h @@ -85,7 +85,7 @@ static inline void write_cr0(unsigned long val) static inline unsigned long read_cr2(void) { unsigned long cr2; - asm("movq %%cr2,%0" : "=r" (cr2)); + asm volatile("movq %%cr2,%0" : "=r" (cr2)); return cr2; } @@ -97,7 +97,7 @@ static inline void write_cr2(unsigned long val) static inline unsigned long read_cr3(void) { unsigned long cr3; - asm("movq %%cr3,%0" : "=r" (cr3)); + asm volatile("movq %%cr3,%0" : "=r" (cr3)); return cr3; } @@ -109,7 +109,7 @@ static inline void write_cr3(unsigned long val) static inline unsigned long read_cr4(void) { unsigned long cr4; - asm("movq %%cr4,%0" : "=r" (cr4)); + asm volatile("movq %%cr4,%0" : "=r" (cr4)); return cr4; } @@ -121,7 +121,7 @@ static inline void write_cr4(unsigned long val) static inline unsigned long read_cr8(void) { unsigned long cr8; - asm("movq %%cr8,%0" : "=r" (cr8)); + asm volatile("movq %%cr8,%0" : "=r" (cr8)); return cr8; } -- cgit v1.2.3 From f68fd5f480248ca49e20e30a8e2387bc54694580 Mon Sep 17 00:00:00 2001 From: Fengguang Wu Date: Wed, 17 Oct 2007 18:04:34 +0200 Subject: x86: call free_init_pages() with irqs enabled in alternative_instructions() In alternative_instructions(), call free_init_pages() with irqs enabled. It fixes the warning message in smp_call_function*(), which should not be called with irqs disabled. [ 0.310000] CPU: L1 I Cache: 64K (64 bytes/line), D cache 64K (64 bytes/line) [ 0.310000] CPU: L2 Cache: 512K (64 bytes/line) [ 0.310000] CPU 0/0 -> Node 0 [ 0.310000] SMP alternatives: switching to UP code [ 0.310000] Freeing SMP alternatives: 25k freed [ 0.310000] WARNING: at arch/x86_64/kernel/smp.c:397 smp_call_function_mask() [ 0.310000] [ 0.310000] Call Trace: [ 0.310000] [] dump_trace+0x3ee/0x4a0 [ 0.310000] [] show_trace+0x43/0x70 [ 0.310000] [] dump_stack+0x15/0x20 [ 0.310000] [] smp_call_function_mask+0x94/0xa0 [ 0.310000] [] smp_call_function+0x32/0x40 [ 0.310000] [] on_each_cpu+0x1f/0x50 [ 0.310000] [] global_flush_tlb+0x8c/0x110 [ 0.310000] [] free_init_pages+0xe5/0xf0 [ 0.310000] [] alternative_instructions+0x7e/0x150 [ 0.310000] [] check_bugs+0x1a/0x20 [ 0.310000] [] start_kernel+0x2da/0x380 [ 0.310000] [] _sinittext+0x132/0x140 [ 0.310000] [ 0.320000] ACPI: Core revision 20070126 [ 0.560000] Using local APIC timer interrupts. [ 0.590000] Detected 62.496 MHz APIC timer. [ 0.590000] Brought up 1 CPUs [ tglx: arch/x86 adaptation ] Cc: Laurent Vivier Cc: Andi Kleen Signed-off-by: Fengguang Wu Signed-off-by: Andi Kleen Signed-off-by: Ingo Molnar Signed-off-by: Thomas Gleixner --- arch/x86/kernel/alternative.c | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/arch/x86/kernel/alternative.c b/arch/x86/kernel/alternative.c index 11b03d3c6fd..dff1c9e1c2e 100644 --- a/arch/x86/kernel/alternative.c +++ b/arch/x86/kernel/alternative.c @@ -415,9 +415,6 @@ void __init alternative_instructions(void) alternatives_smp_unlock(__smp_locks, __smp_locks_end, _text, _etext); } - free_init_pages("SMP alternatives", - (unsigned long)__smp_locks, - (unsigned long)__smp_locks_end); } else { alternatives_smp_module_add(NULL, "core kernel", __smp_locks, __smp_locks_end, @@ -428,6 +425,11 @@ void __init alternative_instructions(void) apply_paravirt(__parainstructions, __parainstructions_end); local_irq_restore(flags); + if (smp_alt_once) + free_init_pages("SMP alternatives", + (unsigned long)__smp_locks, + (unsigned long)__smp_locks_end); + restart_nmi(); #ifdef CONFIG_X86_MCE restart_mce(); -- cgit v1.2.3 From 2f62c94176af875f22ecd01887a550d5d48092fc Mon Sep 17 00:00:00 2001 From: Andi Kleen Date: Wed, 17 Oct 2007 18:04:34 +0200 Subject: x86_64: Fix compat emulation of PTRACE_GET/SET_THREAD_AREA Since the 64bit kernel has different indexes for this TLS segments the address needs to be adjusted in the ptrace 32bit emulation. [ tglx: arch/x86 adaptation ] Reported-by: Amnon Shiloh Signed-off-by: Andi Kleen Signed-off-by: Ingo Molnar Signed-off-by: Thomas Gleixner --- arch/x86/ia32/ptrace32.c | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/arch/x86/ia32/ptrace32.c b/arch/x86/ia32/ptrace32.c index 4a233ad6269..f52770ef0ee 100644 --- a/arch/x86/ia32/ptrace32.c +++ b/arch/x86/ia32/ptrace32.c @@ -228,6 +228,8 @@ static long ptrace32_siginfo(unsigned request, u32 pid, u32 addr, u32 data) return ret; } +#define COMPAT_GDT_ENTRY_TLS_MIN 6 + asmlinkage long sys32_ptrace(long request, u32 pid, u32 addr, u32 data) { struct task_struct *child; @@ -246,8 +248,6 @@ asmlinkage long sys32_ptrace(long request, u32 pid, u32 addr, u32 data) case PTRACE_SYSCALL: case PTRACE_OLDSETOPTIONS: case PTRACE_SETOPTIONS: - case PTRACE_SET_THREAD_AREA: - case PTRACE_GET_THREAD_AREA: return sys_ptrace(request, pid, addr, data); default: @@ -271,6 +271,12 @@ asmlinkage long sys32_ptrace(long request, u32 pid, u32 addr, u32 data) case PTRACE_SETSIGINFO: case PTRACE_GETSIGINFO: return ptrace32_siginfo(request, pid, addr, data); + + case PTRACE_SET_THREAD_AREA: + case PTRACE_GET_THREAD_AREA: + return sys_ptrace(request, pid, + addr + GDT_ENTRY_TLS_MIN - COMPAT_GDT_ENTRY_TLS_MIN, + data); } child = ptrace_get_task_struct(pid); -- cgit v1.2.3 From 3fb450a327fc098efe6c9f000d470abac354cfcc Mon Sep 17 00:00:00 2001 From: Ingo Molnar Date: Wed, 17 Oct 2007 18:04:34 +0200 Subject: x86: enable NMI watchdog on nosmp if nosmp has been passed as a boot option, but nmi_watchdog=2 has also been enabled then keep minimal local APIC functionality around to make the watchdog work. this allowed me to debug a hard hang that would only occur with a nosmp bootup. Signed-off-by: Ingo Molnar Signed-off-by: Thomas Gleixner --- arch/x86/kernel/smpboot_32.c | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/arch/x86/kernel/smpboot_32.c b/arch/x86/kernel/smpboot_32.c index edc9db69a11..83e4f40f8dc 100644 --- a/arch/x86/kernel/smpboot_32.c +++ b/arch/x86/kernel/smpboot_32.c @@ -1021,6 +1021,12 @@ static void __init smp_boot_cpus(unsigned int max_cpus) if (!max_cpus) { smp_found_config = 0; printk(KERN_INFO "SMP mode deactivated, forcing use of dummy APIC emulation.\n"); + + if (nmi_watchdog == NMI_LOCAL_APIC) { + printk(KERN_INFO "activating minimal APIC for NMI watchdog use.\n"); + connect_bsp_APIC(); + setup_local_APIC(); + } smpboot_clear_io_apic_irqs(); phys_cpu_present_map = physid_mask_of_physid(0); cpu_set(0, per_cpu(cpu_sibling_map, 0)); -- cgit v1.2.3 From f97586b610dc87a6494236118321e56ffc13319c Mon Sep 17 00:00:00 2001 From: Ingo Molnar Date: Wed, 17 Oct 2007 18:04:34 +0200 Subject: x86: do not crash on non-Geode PCs in TSC probe with this fix Geode kernels can be booted (and QA-ed) on generic PCs. otherwise it crashes and burns during early bootup: Detected 2160.212 MHz processor. general protection fault: 0000 [#1] PREEMPT SMP Modules linked in: CPU: 0 EIP: 0060:[] Not tainted VLI EFLAGS: 00010002 (2.6.23-rc9 #90) EIP is at tsc_init+0xa6/0x150 eax: 00000001 ebx: c1dce000 ecx: 00001900 edx: 00000001 esi: 00051000 edi: 00051000 ebp: c08fdfc4 esp: c08fdfa4 ds: 007b es: 007b fs: 00d8 gs: 0000 ss: 0068 Process swapper (pid: 0, ti=c08fc000 task=c082a180 task.ti=c08fc000) Stack: c076b870 00000870 000000d4 0000001d c0831e80 c1dce000 00051000 00051000 c08fdfcc c09053f8 c08fdff8 c09045ff 000001e2 c09040a0 00051000 00000020 0004e500 c0932140 00020800 00099800 c08ed000 01409007 00000000 Call Trace: [] show_trace_log_lvl+0x1a/0x30 [] show_stack_log_lvl+0xb6/0x100 [] show_registers+0x212/0x3a0 [] die+0x104/0x220 [] do_general_protection+0x1ef/0x2b0 [] error_code+0x72/0x78 [] time_init+0x8/0x20 [] start_kernel+0x1af/0x320 [<00000000>] 0x0 ======================= Code: 31 d2 b8 00 00 09 3d f7 35 2c 70 9b c0 a3 04 95 8f c0 e8 ce 4e 99 ff b8 e0 45 93 c0 e8 94 b1 c5 ff e8 7f 3d 80 ff b9 00 19 00 00 <0f> 32 f6 c4 01 74 07 83 25 24 ce 82 c0 fd 8b 0d 20 ce 82 c0 b8 EIP: [] tsc_init+0xa6/0x150 SS:ESP 0068:c08fdfa4 Kernel panic - not syncing: Attempted to kill the idle task! Signed-off-by: Ingo Molnar Signed-off-by: Thomas Gleixner --- arch/x86/kernel/tsc_32.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/arch/x86/kernel/tsc_32.c b/arch/x86/kernel/tsc_32.c index b85ad754f70..e87a3939ed4 100644 --- a/arch/x86/kernel/tsc_32.c +++ b/arch/x86/kernel/tsc_32.c @@ -349,10 +349,10 @@ __cpuinit int unsynchronized_tsc(void) static void __init check_geode_tsc_reliable(void) { - unsigned long val; + unsigned long res_low, res_high; - rdmsrl(MSR_GEODE_BUSCONT_CONF0, val); - if ((val & RTSC_SUSP)) + rdmsr_safe(MSR_GEODE_BUSCONT_CONF0, &res_low, &res_high); + if (res_low & RTSC_SUSP) clocksource_tsc.flags &= ~CLOCK_SOURCE_MUST_VERIFY; } #else -- cgit v1.2.3 From 1e3e19723ecd58149388f3eecbd3285825f64f3b Mon Sep 17 00:00:00 2001 From: Ingo Molnar Date: Wed, 17 Oct 2007 18:04:34 +0200 Subject: x86: prepare page allocator for high allocations on PAGEALLOC=y To preserve the DMA pool in CONFIG_DEBUG_PAGEALLOC=y kernels, we'll allocate pagetables from above the 16MB DMA limit, so we'll have to set up boot pagetables to cover 16MB more RAM (worst-case). Signed-off-by: Ingo Molnar Signed-off-by: Thomas Gleixner --- arch/x86/kernel/head_32.S | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/arch/x86/kernel/head_32.S b/arch/x86/kernel/head_32.S index 9150ca9b5f8..0fa8a972a67 100644 --- a/arch/x86/kernel/head_32.S +++ b/arch/x86/kernel/head_32.S @@ -51,6 +51,15 @@ */ LOW_PAGES = 1<<(32-PAGE_SHIFT_asm) +/* + * To preserve the DMA pool in PAGEALLOC kernels, we'll allocate + * pagetables from above the 16MB DMA limit, so we'll have to set + * up pagetables 16MB more (worst-case): + */ +#ifdef CONFIG_DEBUG_PAGEALLOC +LOW_PAGES = LOW_PAGES + 0x1000000 +#endif + #if PTRS_PER_PMD > 1 PAGE_TABLE_SIZE = (LOW_PAGES / PTRS_PER_PMD) + PTRS_PER_PGD #else -- cgit v1.2.3 From 509a80c49c512ac88bd67b981145f925a306111b Mon Sep 17 00:00:00 2001 From: Ingo Molnar Date: Wed, 17 Oct 2007 18:04:34 +0200 Subject: x86: fix CONFIG_PAGEALLOC related boot hangs/OOMs if CONFIG_PAGEALLOC is enabled then X86_FEATURE_PSE is disabled and all the kernel physical RAM pagetables are set up as 4K pages. This is needed so that CONFIG_PAGEALLOC can do finegrained mapping and unmapping of pages. as a side-effect though, the total size of memory allocated as kernel pagetables increases significantly. All these pagetables are allocated via alloc_bootmem_low_pages(), straight out of the lowmem DMA pool. If the system has enough RAM and a large kernel image then almost all of the 16 MB lowmem DMA pool is allocated to the image and to pagetables - leaving no space for __GFP_DMA allocations. this results in drivers failing and the bootup hanging: swapper invoked oom-killer: gfp_mask=0x80d1, order=0, oomkilladj=0 [<4015059f>] out_of_memory+0x17f/0x1c0 [<40151f3c>] __alloc_pages+0x37c/0x3a0 [<40168cd7>] slob_new_page+0x37/0x50 [<40168dff>] slob_alloc+0x10f/0x190 [<40169010>] __kmalloc_node+0x80/0x90 [<405a17e3>] scsi_host_alloc+0x33/0x2c0 [<405a1a82>] scsi_register+0x12/0x60 [<40d5889e>] aha1542_detect+0x9e/0x940 [<405c5ba5>] ultrastor_detect+0x265/0x5f0 [<401352f5>] getnstimeofday+0x35/0xf0 [<40d58751>] init_this_scsi_driver+0x41/0xf0 [<40d0b856>] kernel_init+0x136/0x310 [<40d58710>] init_this_scsi_driver+0x0/0xf0 [<40d0b720>] kernel_init+0x0/0x310 [<40105547>] kernel_thread_helper+0x7/0x10 ======================= the fix is to first allocate from above the DMA pool, and if that fails (for example due to it being a machine with less than 16 MB of RAM), allocate from the DMA pool as a fallback. With this fix applied i was able to boot a PAGEALLOC=y kernel that would hang before. Signed-off-by: Ingo Molnar Signed-off-by: Thomas Gleixner --- arch/x86/mm/init_32.c | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/arch/x86/mm/init_32.c b/arch/x86/mm/init_32.c index dda4e83649a..e4e37d4f4c5 100644 --- a/arch/x86/mm/init_32.c +++ b/arch/x86/mm/init_32.c @@ -85,13 +85,20 @@ static pmd_t * __init one_md_table_init(pgd_t *pgd) static pte_t * __init one_page_table_init(pmd_t *pmd) { if (!(pmd_val(*pmd) & _PAGE_PRESENT)) { - pte_t *page_table = (pte_t *) alloc_bootmem_low_pages(PAGE_SIZE); + pte_t *page_table = NULL; + +#ifdef CONFIG_DEBUG_PAGEALLOC + page_table = (pte_t *) alloc_bootmem_pages(PAGE_SIZE); +#endif + if (!page_table) + page_table = + (pte_t *)alloc_bootmem_low_pages(PAGE_SIZE); paravirt_alloc_pt(&init_mm, __pa(page_table) >> PAGE_SHIFT); set_pmd(pmd, __pmd(__pa(page_table) | _PAGE_TABLE)); BUG_ON(page_table != pte_offset_kernel(pmd, 0)); } - + return pte_offset_kernel(pmd, 0); } -- cgit v1.2.3 From 27eb0b288fb3b46350f3e6c2fad0b36937a4cc85 Mon Sep 17 00:00:00 2001 From: Prarit Bhargava Date: Wed, 17 Oct 2007 18:04:34 +0200 Subject: x86: stop nmi softlockup warnings in show_mem() When dumping memory via sysrq-m it is possible to take a bogus NMI watchdog or softlockup watchdog because the dump can take a long time on big memory systems. Occasionally tickle the watchdog when doing the dump. Signed-off-by: Prarit Bhargava Cc: Andi Kleen Signed-off-by: Andrew Morton --- arch/x86/mm/pgtable_32.c | 3 +++ 1 file changed, 3 insertions(+) diff --git a/arch/x86/mm/pgtable_32.c b/arch/x86/mm/pgtable_32.c index bbaa2b15393..be61a1d845a 100644 --- a/arch/x86/mm/pgtable_32.c +++ b/arch/x86/mm/pgtable_32.c @@ -6,6 +6,7 @@ #include #include #include +#include #include #include #include @@ -39,6 +40,8 @@ void show_mem(void) for_each_online_pgdat(pgdat) { pgdat_resize_lock(pgdat, &flags); for (i = 0; i < pgdat->node_spanned_pages; ++i) { + if (unlikely(i % MAX_ORDER_NR_PAGES == 0)) + touch_nmi_watchdog(); page = pgdat_page_nr(pgdat, i); total++; if (PageHighMem(page)) -- cgit v1.2.3 From 87cde760abfa019b5e368186f893cf673d227632 Mon Sep 17 00:00:00 2001 From: James Bottomley Date: Wed, 17 Oct 2007 18:04:35 +0200 Subject: x86: voyager don't try to support uniprocessor builds A while ago Randy Dunlap and Adrian Bunk suggested we simply prevent UP voyager building. I resisted this on the grounds that the nagging was the only thing that was going to cause me to look at this. However, now I think we should probably take this course. Cc: Andi Kleen Signed-off-by: Andrew Morton Signed-off-by: Ingo Molnar Signed-off-by: Thomas Gleixner --- arch/i386/Kconfig | 1 + 1 file changed, 1 insertion(+) diff --git a/arch/i386/Kconfig b/arch/i386/Kconfig index 7a95c58947e..b84d5050e92 100644 --- a/arch/i386/Kconfig +++ b/arch/i386/Kconfig @@ -146,6 +146,7 @@ config X86_ELAN config X86_VOYAGER bool "Voyager (NCR)" + select SMP if !BROKEN help Voyager is an MCA-based 32-way capable SMP architecture proprietary to NCR Corp. Machine classes 345x/35xx/4100/51xx are Voyager-based. -- cgit v1.2.3 From 84e0fdb1754d066dd0a8b257de7299f392d1e727 Mon Sep 17 00:00:00 2001 From: "Huang, Ying" Date: Wed, 17 Oct 2007 18:04:35 +0200 Subject: x86: NX bit handling in change_page_attr() This patch fixes a bug of change_page_attr/change_page_attr_addr on Intel x86_64 CPUs. After changing page attribute to be executable with these functions, the page remains un-executable on Intel x86_64 CPU. Because on Intel x86_64 CPU, only if the "NX" bits of all four level page tables are cleared, the corresponding page is executable (refer to section 4.13.2 of Intel 64 and IA-32 Architectures Software Developer's Manual). So, the bug is fixed through clearing the "NX" bit of PMD when splitting the huge PMD. Signed-off-by: Huang Ying Cc: Andi Kleen Signed-off-by: Andrew Morton Signed-off-by: Ingo Molnar Signed-off-by: Thomas Gleixner --- arch/x86/mm/pageattr_64.c | 1 + 1 file changed, 1 insertion(+) diff --git a/arch/x86/mm/pageattr_64.c b/arch/x86/mm/pageattr_64.c index 10b9809ce82..93d795d7c2a 100644 --- a/arch/x86/mm/pageattr_64.c +++ b/arch/x86/mm/pageattr_64.c @@ -148,6 +148,7 @@ __change_page_attr(unsigned long address, unsigned long pfn, pgprot_t prot, split = split_large_page(address, prot, ref_prot2); if (!split) return -ENOMEM; + pgprot_val(ref_prot2) &= ~_PAGE_NX; set_pte(kpte, mk_pte(split, ref_prot2)); kpte_page = split; } -- cgit v1.2.3 From d588ba8c09aa2516a06512d8ba065a05f9620ee0 Mon Sep 17 00:00:00 2001 From: Muli Ben-Yehuda Date: Wed, 17 Oct 2007 18:04:35 +0200 Subject: x86: Calgary: fix disable busnum for CalIOC2 The old check we used based on dev->bus->number is wrong for devices on CalIOC2. Instead look whether we have an IOMMU table for that bus - if not, translation is disabled. Thanks to Murillo Fernandes Bernardes for spotting, suggesting a fix and testing. Signed-off-by: Muli Ben-Yehuda Acked-by: Murillo Fernandes Bernardes Signed-off-by: Andrew Morton Signed-off-by: Ingo Molnar Signed-off-by: Thomas Gleixner --- arch/x86/kernel/pci-calgary_64.c | 16 +++++++++++----- 1 file changed, 11 insertions(+), 5 deletions(-) diff --git a/arch/x86/kernel/pci-calgary_64.c b/arch/x86/kernel/pci-calgary_64.c index a50b787b3bf..ef05cc32a3a 100644 --- a/arch/x86/kernel/pci-calgary_64.c +++ b/arch/x86/kernel/pci-calgary_64.c @@ -222,6 +222,12 @@ static inline unsigned int num_dma_pages(unsigned long dma, unsigned int dmalen) return npages; } +static inline int translation_enabled(struct iommu_table *tbl) +{ + /* only PHBs with translation enabled have an IOMMU table */ + return (tbl != NULL); +} + static inline int translate_phb(struct pci_dev* dev) { int disabled = bus_info[dev->bus->number].translation_disabled; @@ -388,7 +394,7 @@ static void calgary_unmap_sg(struct device *dev, struct scatterlist *s; int i; - if (!translate_phb(to_pci_dev(dev))) + if (!translate_enabled(tbl)) return; for_each_sg(sglist, s, nelems, i) { @@ -428,7 +434,7 @@ static int calgary_map_sg(struct device *dev, struct scatterlist *sg, unsigned long entry; int i; - if (!translate_phb(to_pci_dev(dev))) + if (!translation_enabled(tbl)) return calgary_nontranslate_map_sg(dev, sg, nelems, direction); for_each_sg(sg, s, nelems, i) { @@ -474,7 +480,7 @@ static dma_addr_t calgary_map_single(struct device *dev, void *vaddr, uaddr = (unsigned long)vaddr; npages = num_dma_pages(uaddr, size); - if (translate_phb(to_pci_dev(dev))) + if (translation_enabled(tbl)) dma_handle = iommu_alloc(tbl, vaddr, npages, direction); else dma_handle = virt_to_bus(vaddr); @@ -488,7 +494,7 @@ static void calgary_unmap_single(struct device *dev, dma_addr_t dma_handle, struct iommu_table *tbl = find_iommu_table(dev); unsigned int npages; - if (!translate_phb(to_pci_dev(dev))) + if (!translation_enabled(tbl)) return; npages = num_dma_pages(dma_handle, size); @@ -513,7 +519,7 @@ static void* calgary_alloc_coherent(struct device *dev, size_t size, goto error; memset(ret, 0, size); - if (translate_phb(to_pci_dev(dev))) { + if (translation_enabled(tbl)) { /* set up tces to cover the allocated range */ mapping = iommu_alloc(tbl, ret, npages, DMA_BIDIRECTIONAL); if (mapping == bad_dma_address) -- cgit v1.2.3 From 8f8ae1a7d4e7e2628cd875d0811ca5cbff012bc2 Mon Sep 17 00:00:00 2001 From: Michal Schmidt Date: Wed, 17 Oct 2007 18:04:35 +0200 Subject: x86: pci use pci=bfsort for HP DL385 G2 and DL585 G2 HP ProLiant systems DL385 G2 and DL585 G2 need pci=bfsort to enumerate PCI devices in the expected order. Matt sayeth: biosdevname is a userspace app I wrote to help solve this so we don't need to patch the kernel for future systems. It's not integrated into any distributions properly yet, but is included in openSUSE 10.3 and Fedora 8 for people who want to download and install it there. It acts as a udev helper. For the time being, patching the kernel is necessary. I really hope biosdevname eliminates that need in future distributions. http://linux.dell.com/biosdevname/ Signed-off-by: Michal Schmidt Cc: Cc: Matt Domsch Cc: Andy Gospodarek Cc: Greg KH Cc: Andi Kleen Signed-off-by: Andrew Morton Signed-off-by: Ingo Molnar Signed-off-by: Thomas Gleixner --- arch/x86/pci/common.c | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/arch/x86/pci/common.c b/arch/x86/pci/common.c index 2d71bbc411d..f4386990b15 100644 --- a/arch/x86/pci/common.c +++ b/arch/x86/pci/common.c @@ -289,6 +289,22 @@ static struct dmi_system_id __devinitdata pciprobe_dmi_table[] = { DMI_MATCH(DMI_PRODUCT_NAME, "ProLiant BL685c G1"), }, }, + { + .callback = set_bf_sort, + .ident = "HP ProLiant DL385 G2", + .matches = { + DMI_MATCH(DMI_SYS_VENDOR, "HP"), + DMI_MATCH(DMI_PRODUCT_NAME, "ProLiant DL385 G2"), + }, + }, + { + .callback = set_bf_sort, + .ident = "HP ProLiant DL585 G2", + .matches = { + DMI_MATCH(DMI_SYS_VENDOR, "HP"), + DMI_MATCH(DMI_PRODUCT_NAME, "ProLiant DL585 G2"), + }, + }, #ifdef __i386__ { .callback = assign_all_busses, -- cgit v1.2.3 From f6855f7fb2e22c5675d292dd445ee3c1fc09ac18 Mon Sep 17 00:00:00 2001 From: Yinghai Lu Date: Wed, 17 Oct 2007 18:04:35 +0200 Subject: x86: use dev_to_node() to get node for device in dma_alloc_pages() use dev_to_node() to get node for device in dma_alloc_pages(). Signed-off-by: Yinghai Lu Acked-by: Christoph Lameter Cc: Christoph Lameter Cc: Andy Whitcroft Cc: Jeff Garzik Cc: Andi Kleen Signed-off-by: Andrew Morton Signed-off-by: Ingo Molnar Signed-off-by: Thomas Gleixner --- arch/x86/kernel/pci-dma_64.c | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/arch/x86/kernel/pci-dma_64.c b/arch/x86/kernel/pci-dma_64.c index 9576a2eb375..b2b42bdb0a1 100644 --- a/arch/x86/kernel/pci-dma_64.c +++ b/arch/x86/kernel/pci-dma_64.c @@ -51,11 +51,9 @@ dma_alloc_pages(struct device *dev, gfp_t gfp, unsigned order) { struct page *page; int node; -#ifdef CONFIG_PCI - if (dev->bus == &pci_bus_type) - node = pcibus_to_node(to_pci_dev(dev)->bus); - else -#endif + + node = dev_to_node(dev); + if (node == -1) node = numa_node_id(); if (node < first_node(node_online_map)) -- cgit v1.2.3 From 7b38493501b76e56f481925ed74ee5ca0f4c6183 Mon Sep 17 00:00:00 2001 From: Satyam Sharma Date: Wed, 17 Oct 2007 18:04:35 +0200 Subject: x86: intel_cacheinfo misc section annotation fixes cache_shared_cpu_map_setup() and cache_remove_shared_cpu_map() are functions called from another function that is __cpuinit. But the !CONFIG_SMP empty-body stubs of these functions are unconditionally marked __init, which is actively wrong, and will lead to oops. But we never saw this oops, because they always managed to get inlined in their callsites, by virtue of being empty-body stubs! They should still be __cpuinit, of course. assocs[], levels[] and types[] are only referenced from function that is __cpuinit. So these are candidates for being marked __cpuinitdata. [akpm@linux-foundation.org: build fix] Signed-off-by: Satyam Sharma Cc: Andi Kleen Cc: Venkatesh Pallipadi Signed-off-by: Andrew Morton Signed-off-by: Ingo Molnar Signed-off-by: Thomas Gleixner --- arch/x86/kernel/cpu/intel_cacheinfo.c | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/arch/x86/kernel/cpu/intel_cacheinfo.c b/arch/x86/kernel/cpu/intel_cacheinfo.c index db6c25aa577..6f9dd38029b 100644 --- a/arch/x86/kernel/cpu/intel_cacheinfo.c +++ b/arch/x86/kernel/cpu/intel_cacheinfo.c @@ -170,15 +170,15 @@ union l3_cache { unsigned val; }; -static const unsigned short assocs[] = { +static unsigned short assocs[] __cpuinitdata = { [1] = 1, [2] = 2, [4] = 4, [6] = 8, [8] = 16, [0xa] = 32, [0xb] = 48, [0xc] = 64, [0xf] = 0xffff // ?? }; -static const unsigned char levels[] = { 1, 1, 2, 3 }; -static const unsigned char types[] = { 1, 2, 3, 3 }; +static unsigned char levels[] __cpuinitdata = { 1, 1, 2, 3 }; +static unsigned char types[] __cpuinitdata = { 1, 2, 3, 3 }; static void __cpuinit amd_cpuid4(int leaf, union _cpuid4_leaf_eax *eax, union _cpuid4_leaf_ebx *ebx, @@ -493,8 +493,8 @@ static void __cpuinit cache_remove_shared_cpu_map(unsigned int cpu, int index) } } #else -static void __init cache_shared_cpu_map_setup(unsigned int cpu, int index) {} -static void __init cache_remove_shared_cpu_map(unsigned int cpu, int index) {} +static void __cpuinit cache_shared_cpu_map_setup(unsigned int cpu, int index) {} +static void __cpuinit cache_remove_shared_cpu_map(unsigned int cpu, int index) {} #endif static void free_cache_attributes(unsigned int cpu) -- cgit v1.2.3 From 231b64bfee050b3b3fd91c629b653fecdfe7b7bf Mon Sep 17 00:00:00 2001 From: Andi Kleen Date: Wed, 17 Oct 2007 18:04:35 +0200 Subject: x86: remove rogue default m in drivers/video/Kconfig Remove rogue default m in drivers/video/Kconfig default m is near always wrong, like here. For some reason ACPI likes to reintroduce these and I like to immediately squash them again before they pollute too many .configs. Cc: len.brown@intel.com Cc: luming.yu@gmail.com Acked-by: Len Brown Signed-off-by: Andi Kleen Signed-off-by: Ingo Molnar Signed-off-by: Thomas Gleixner --- drivers/video/Kconfig | 1 - 1 file changed, 1 deletion(-) diff --git a/drivers/video/Kconfig b/drivers/video/Kconfig index efe474e2cc3..b3bf4ecc983 100644 --- a/drivers/video/Kconfig +++ b/drivers/video/Kconfig @@ -15,7 +15,6 @@ config VGASTATE config VIDEO_OUTPUT_CONTROL tristate "Lowlevel video output switch controls" - default m help This framework adds support for low-level control of the video output switch. -- cgit v1.2.3 From 17d1486a69657a3de1482d1bd4882c3ce1d9cf1e Mon Sep 17 00:00:00 2001 From: Jesper Juhl Date: Wed, 17 Oct 2007 18:04:35 +0200 Subject: i386: Clean up duplicate includes in arch/i386/kernel/ This patch cleans up duplicate includes in arch/i386/kernel/ [ tglx: arch/x86 adaptation ] Signed-off-by: Jesper Juhl Signed-off-by: Andi Kleen Signed-off-by: Ingo Molnar Signed-off-by: Thomas Gleixner --- arch/x86/kernel/pci-dma_32.c | 1 - 1 file changed, 1 deletion(-) diff --git a/arch/x86/kernel/pci-dma_32.c b/arch/x86/kernel/pci-dma_32.c index 0aae2f3847a..51330321a5d 100644 --- a/arch/x86/kernel/pci-dma_32.c +++ b/arch/x86/kernel/pci-dma_32.c @@ -12,7 +12,6 @@ #include #include #include -#include #include struct dma_coherent_mem { -- cgit v1.2.3 From 83e83d546cb1b6e3c566c97de97bd2397e22ab6c Mon Sep 17 00:00:00 2001 From: Yoann Padioleau Date: Wed, 17 Oct 2007 18:04:35 +0200 Subject: x86: 0 -> NULL, for arch/x86_64 When comparing a pointer, it's clearer to compare it to NULL than to 0. [ tglx: arch/x86 adaptation ] Signed-off-by: Yoann Padioleau Signed-off-by: Andi Kleen Cc: ak@suse.de Cc: discuss@x86-64.org Cc: akpm@linux-foundation.org Signed-off-by: Ingo Molnar Signed-off-by: Thomas Gleixner --- arch/x86/mm/numa_64.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/arch/x86/mm/numa_64.c b/arch/x86/mm/numa_64.c index 6da23552226..97e8ac75568 100644 --- a/arch/x86/mm/numa_64.c +++ b/arch/x86/mm/numa_64.c @@ -166,7 +166,7 @@ early_node_mem(int nodeid, unsigned long start, unsigned long end, return __va(mem); ptr = __alloc_bootmem_nopanic(size, SMP_CACHE_BYTES, __pa(MAX_DMA_ADDRESS)); - if (ptr == 0) { + if (ptr == NULL) { printk(KERN_ERR "Cannot find %lu bytes in node %d\n", size, nodeid); return NULL; -- cgit v1.2.3 From 96d5535870e6a272dcadc300eb9af6ff6c33f6a9 Mon Sep 17 00:00:00 2001 From: Adrian Bunk Date: Wed, 17 Oct 2007 18:04:36 +0200 Subject: i386: make struct apic_probe static This patch makes the needlessly global struct apic_probe static. [ tglx: arch/x86 adaptation ] Signed-off-by: Adrian Bunk Signed-off-by: Andrew Morton Signed-off-by: Andi Kleen Signed-off-by: Ingo Molnar Signed-off-by: Thomas Gleixner --- arch/x86/mach-generic/probe.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/arch/x86/mach-generic/probe.c b/arch/x86/mach-generic/probe.c index 74f3da63442..4121d155180 100644 --- a/arch/x86/mach-generic/probe.c +++ b/arch/x86/mach-generic/probe.c @@ -22,7 +22,7 @@ extern struct genapic apic_default; struct genapic *genapic = &apic_default; -struct genapic *apic_probe[] __initdata = { +static struct genapic *apic_probe[] __initdata = { &apic_summit, &apic_bigsmp, &apic_es7000, -- cgit v1.2.3 From 6704ab1cd42269e536a6735db740e57e2c04c3b4 Mon Sep 17 00:00:00 2001 From: Mike Frysinger Date: Wed, 17 Oct 2007 18:04:36 +0200 Subject: x86: hide cond_syscall behind __KERNEL__ This brings x86_64 into line with all other architectures by only defining cond_syscall() when __KERNEL__ is defined. [ tglx: arch/x86 adaptation ] Signed-off-by: Mike Frysinger Signed-off-by: Andrew Morton Signed-off-by: Andi Kleen Signed-off-by: Ingo Molnar Signed-off-by: Thomas Gleixner --- include/asm-x86/unistd_64.h | 2 ++ 1 file changed, 2 insertions(+) diff --git a/include/asm-x86/unistd_64.h b/include/asm-x86/unistd_64.h index fc4e73f5f1f..4f769598aba 100644 --- a/include/asm-x86/unistd_64.h +++ b/include/asm-x86/unistd_64.h @@ -676,6 +676,7 @@ asmlinkage long sys_rt_sigaction(int sig, #endif /* __KERNEL__ */ #endif /* __NO_STUBS */ +#ifdef __KERNEL__ /* * "Conditional" syscalls * @@ -683,5 +684,6 @@ asmlinkage long sys_rt_sigaction(int sig, * but it doesn't work on all toolchains, so we just do it by hand */ #define cond_syscall(x) asm(".weak\t" #x "\n\t.set\t" #x ",sys_ni_syscall") +#endif /* __KERNEL__ */ #endif /* _ASM_X86_64_UNISTD_H_ */ -- cgit v1.2.3 From 59659f14b6e49b13eb4af870801af1511e33fafb Mon Sep 17 00:00:00 2001 From: Adrian Bunk Date: Wed, 17 Oct 2007 18:04:36 +0200 Subject: i386: make some variables static This patch makes some needlessly global variables static. [ tglx: arch/x86 adaptation ] Signed-off-by: Adrian Bunk Signed-off-by: Andi Kleen Signed-off-by: Andrew Morton Signed-off-by: Ingo Molnar Signed-off-by: Thomas Gleixner --- arch/x86/mm/discontig_32.c | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/arch/x86/mm/discontig_32.c b/arch/x86/mm/discontig_32.c index b1e45457d4e..13893772cc4 100644 --- a/arch/x86/mm/discontig_32.c +++ b/arch/x86/mm/discontig_32.c @@ -103,14 +103,14 @@ extern unsigned long highend_pfn, highstart_pfn; #define LARGE_PAGE_BYTES (PTRS_PER_PTE * PAGE_SIZE) -unsigned long node_remap_start_pfn[MAX_NUMNODES]; +static unsigned long node_remap_start_pfn[MAX_NUMNODES]; unsigned long node_remap_size[MAX_NUMNODES]; -unsigned long node_remap_offset[MAX_NUMNODES]; -void *node_remap_start_vaddr[MAX_NUMNODES]; +static unsigned long node_remap_offset[MAX_NUMNODES]; +static void *node_remap_start_vaddr[MAX_NUMNODES]; void set_pmd_pfn(unsigned long vaddr, unsigned long pfn, pgprot_t flags); -void *node_remap_end_vaddr[MAX_NUMNODES]; -void *node_remap_alloc_vaddr[MAX_NUMNODES]; +static void *node_remap_end_vaddr[MAX_NUMNODES]; +static void *node_remap_alloc_vaddr[MAX_NUMNODES]; static unsigned long kva_start_pfn; static unsigned long kva_pages; /* -- cgit v1.2.3 From fb893e99080f1a01397fcf8afc480163826b23d4 Mon Sep 17 00:00:00 2001 From: Jesper Juhl Date: Wed, 17 Oct 2007 18:04:36 +0200 Subject: i386: Clean up duplicate includes in arch/i386/xen/ This patch cleans up duplicate includes in arch/i386/xen/ [ tglx: arch/x86 adaptation ] Signed-off-by: Jesper Juhl Signed-off-by: Andi Kleen Cc: Jeremy Fitzhardinge Signed-off-by: Andrew Morton Signed-off-by: Ingo Molnar Signed-off-by: Thomas Gleixner --- arch/x86/xen/enlighten.c | 1 - arch/x86/xen/mmu.c | 1 - 2 files changed, 2 deletions(-) diff --git a/arch/x86/xen/enlighten.c b/arch/x86/xen/enlighten.c index 493a083f688..265f7dd3234 100644 --- a/arch/x86/xen/enlighten.c +++ b/arch/x86/xen/enlighten.c @@ -25,7 +25,6 @@ #include #include #include -#include #include #include diff --git a/arch/x86/xen/mmu.c b/arch/x86/xen/mmu.c index 874db0cd1d2..0bb7f001910 100644 --- a/arch/x86/xen/mmu.c +++ b/arch/x86/xen/mmu.c @@ -41,7 +41,6 @@ #include #include #include -#include #include #include -- cgit v1.2.3 From 75e3808b67f88cdd8c531dda3e00deb3623a3dac Mon Sep 17 00:00:00 2001 From: Oliver Pinter Date: Wed, 17 Oct 2007 18:04:36 +0200 Subject: x86: add cpu codenames for Kconfig.cpu add cpu core name for arch/i386/Kconfig.cpu:Pentium 4 sections help add Pentium D for arch/i386/Kconfig.cpu add Pentium D for arch/x86_64/Kconfig AK: Clarified some of the descriptions [ tglx: arch/x86 adaptation ] Signed-off-by: Oliver Pinter Signed-off-by: Andi Kleen Acked-by: Sam Ravnborg Cc: Andi Kleen Signed-off-by: Andrew Morton Signed-off-by: Ingo Molnar Signed-off-by: Thomas Gleixner --- arch/i386/Kconfig.cpu | 36 +++++++++++++++++++++++++++++++----- arch/x86_64/Kconfig | 11 ++++------- 2 files changed, 35 insertions(+), 12 deletions(-) diff --git a/arch/i386/Kconfig.cpu b/arch/i386/Kconfig.cpu index 11a24d54f27..0e2adadf590 100644 --- a/arch/i386/Kconfig.cpu +++ b/arch/i386/Kconfig.cpu @@ -109,16 +109,42 @@ config MCORE2 help Select this for Intel Core 2 and newer Core 2 Xeons (Xeon 51xx and 53xx) CPUs. You can distinguish newer from older Xeons by the CPU family - in /proc/cpuinfo. Newer ones have 6. + in /proc/cpuinfo. Newer ones have 6 and older ones 15 (not a typo) config MPENTIUM4 bool "Pentium-4/Celeron(P4-based)/Pentium-4 M/older Xeon" help Select this for Intel Pentium 4 chips. This includes the - Pentium 4, P4-based Celeron and Xeon, and Pentium-4 M - (not Pentium M) chips. This option enables compile flags - optimized for the chip, uses the correct cache shift, and - applies any applicable Pentium III optimizations. + Pentium 4, Pentium D, P4-based Celeron and Xeon, and + Pentium-4 M (not Pentium M) chips. This option enables compile + flags optimized for the chip, uses the correct cache line size, and + applies any applicable optimizations. + + CPUIDs: F[0-6][1-A] (in /proc/cpuinfo show = cpu family : 15 ) + + Select this for: + Pentiums (Pentium 4, Pentium D, Celeron, Celeron D) corename: + -Willamette + -Northwood + -Mobile Pentium 4 + -Mobile Pentium 4 M + -Extreme Edition (Gallatin) + -Prescott + -Prescott 2M + -Cedar Mill + -Presler + -Smithfiled + Xeons (Intel Xeon, Xeon MP, Xeon LV, Xeon MV) corename: + -Foster + -Prestonia + -Gallatin + -Nocona + -Irwindale + -Cranford + -Potomac + -Paxville + -Dempsey + config MK6 bool "K6/K6-II/K6-III" diff --git a/arch/x86_64/Kconfig b/arch/x86_64/Kconfig index d681be88ae5..85f958c2f55 100644 --- a/arch/x86_64/Kconfig +++ b/arch/x86_64/Kconfig @@ -175,14 +175,12 @@ config MK8 config MPSC bool "Intel P4 / older Netburst based Xeon" help - Optimize for Intel Pentium 4 and older Nocona/Dempsey Xeon CPUs - with Intel Extended Memory 64 Technology(EM64T). For details see - . + Optimize for Intel Pentium 4, Pentium D and older Nocona/Dempsey + Xeon CPUs with Intel 64bit which is compatible with x86-64. Note that the latest Xeons (Xeon 51xx and 53xx) are not based on the Netburst core and shouldn't use this option. You can distinguish them using the cpu family field - in /proc/cpuinfo. Family 15 is an older Xeon, Family 6 a newer one - (this rule only applies to systems that support EM64T) + in /proc/cpuinfo. Family 15 is an older Xeon, Family 6 a newer one. config MCORE2 bool "Intel Core2 / newer Xeon" @@ -190,8 +188,7 @@ config MCORE2 Optimize for Intel Core2 and newer Xeons (51xx) You can distinguish the newer Xeons from the older ones using the cpu family field in /proc/cpuinfo. 15 is an older Xeon - (use CONFIG_MPSC then), 6 is a newer one. This rule only - applies to CPUs that support EM64T. + (use CONFIG_MPSC then), 6 is a newer one. config GENERIC_CPU bool "Generic-x86-64" -- cgit v1.2.3 From 761c4bf821b67334e2391ef968396069b91801b7 Mon Sep 17 00:00:00 2001 From: Satyam Sharma Date: Wed, 17 Oct 2007 18:04:36 +0200 Subject: i386: Misc cpuinit annotations msr_class_cpu_callback() can be marked __cpuinit, being the notifier callback for a __cpuinitdata notifier_block. So can be marked msr_device_create() too, called only from the newly-__cpuinit msr_class_cpu_callback() or from __init-marked msr_init(). [ tglx: arch/x86 adaptation ] Signed-off-by: Satyam Sharma Signed-off-by: Andi Kleen Signed-off-by: Ingo Molnar Signed-off-by: Thomas Gleixner --- arch/x86/kernel/msr.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/arch/x86/kernel/msr.c b/arch/x86/kernel/msr.c index c044de310b6..df85c9c1360 100644 --- a/arch/x86/kernel/msr.c +++ b/arch/x86/kernel/msr.c @@ -133,7 +133,7 @@ static const struct file_operations msr_fops = { .open = msr_open, }; -static int msr_device_create(int i) +static int __cpuinit msr_device_create(int i) { int err = 0; struct device *dev; @@ -144,7 +144,7 @@ static int msr_device_create(int i) return err; } -static int msr_class_cpu_callback(struct notifier_block *nfb, +static int __cpuinit msr_class_cpu_callback(struct notifier_block *nfb, unsigned long action, void *hcpu) { unsigned int cpu = (unsigned long)hcpu; -- cgit v1.2.3 From 1e32b073f372f0fe903c4474fbd47c2ac61428c8 Mon Sep 17 00:00:00 2001 From: Satyam Sharma Date: Wed, 17 Oct 2007 18:04:36 +0200 Subject: i386: misc cpuinit annotations cpuid_class_cpu_callback() is callback function of a CPU hotplug notifier_block (that is already marked as __cpuinitdata). Therefore it can safely be marked as __cpuinit. cpuid_device_create() is only referenced from other functions that are __cpuinit or __init. So it can also be safely marked __cpuinit. [ tglx: arch/x86 adaptation ] Signed-off-by: Satyam Sharma Signed-off-by: Andi Kleen Signed-off-by: Ingo Molnar Signed-off-by: Thomas Gleixner --- arch/x86/kernel/cpuid.c | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/arch/x86/kernel/cpuid.c b/arch/x86/kernel/cpuid.c index f4548c93ccf..dffb102fb8c 100644 --- a/arch/x86/kernel/cpuid.c +++ b/arch/x86/kernel/cpuid.c @@ -150,7 +150,7 @@ static const struct file_operations cpuid_fops = { .open = cpuid_open, }; -static int cpuid_device_create(int i) +static int __cpuinit cpuid_device_create(int i) { int err = 0; struct device *dev; @@ -161,7 +161,9 @@ static int cpuid_device_create(int i) return err; } -static int cpuid_class_cpu_callback(struct notifier_block *nfb, unsigned long action, void *hcpu) +static int __cpuinit cpuid_class_cpu_callback(struct notifier_block *nfb, + unsigned long action, + void *hcpu) { unsigned int cpu = (unsigned long)hcpu; -- cgit v1.2.3 From e295f75410eb19d2a9733508f7f5c093767592cd Mon Sep 17 00:00:00 2001 From: Andi Kleen Date: Wed, 17 Oct 2007 18:04:36 +0200 Subject: x86_64: Remove serialize_cpu() inline - It was redundant with sync_core() - It was unused - It was broken: no input arguments to cpuid; could fault randomly depending on eax contents. Now it's gone. [ tglx: arch/x86 adaptation ] Signed-off-by: Andi Kleen Signed-off-by: Ingo Molnar Signed-off-by: Thomas Gleixner --- include/asm-x86/processor_64.h | 5 ----- 1 file changed, 5 deletions(-) diff --git a/include/asm-x86/processor_64.h b/include/asm-x86/processor_64.h index 31f579b828f..2f12eb6e46b 100644 --- a/include/asm-x86/processor_64.h +++ b/include/asm-x86/processor_64.h @@ -389,11 +389,6 @@ static inline void prefetchw(void *x) #define cpu_relax() rep_nop() -static inline void serialize_cpu(void) -{ - __asm__ __volatile__ ("cpuid" : : : "ax", "bx", "cx", "dx"); -} - static inline void __monitor(const void *eax, unsigned long ecx, unsigned long edx) { -- cgit v1.2.3 From 6d43be8ea8c92a41557dacde94ae73565cbc01f0 Mon Sep 17 00:00:00 2001 From: Thomas Gleixner Date: Wed, 17 Oct 2007 18:04:36 +0200 Subject: x86: remove reminder of i386 irqstat per cpu conversion The i386 irqstat per cpu conversion left an bogus export of the old irqstat array in the header file. Remove it. [ tglx: arch/x86 adaptation ] Signed-off-by: Thomas Gleixner Signed-off-by: Ingo Molnar --- include/asm-x86/hardirq_32.h | 1 - 1 file changed, 1 deletion(-) diff --git a/include/asm-x86/hardirq_32.h b/include/asm-x86/hardirq_32.h index 34649585bb5..918863530b9 100644 --- a/include/asm-x86/hardirq_32.h +++ b/include/asm-x86/hardirq_32.h @@ -13,7 +13,6 @@ typedef struct { } ____cacheline_aligned irq_cpustat_t; DECLARE_PER_CPU(irq_cpustat_t, irq_stat); -extern irq_cpustat_t irq_stat[]; #define __ARCH_IRQ_STAT #define __IRQ_STAT(cpu, member) (per_cpu(irq_stat, cpu).member) -- cgit v1.2.3 From 6a61f6a55708f5e50c4d78934199e7e9257e6aa2 Mon Sep 17 00:00:00 2001 From: Thomas Gleixner Date: Wed, 17 Oct 2007 18:04:36 +0200 Subject: x86: clean up struct irqaction initializers clean up struct irqaction initializers to C99. Signed-off-by: Thomas Gleixner Cc: Andi Kleen Signed-off-by: Andrew Morton Signed-off-by: Ingo Molnar --- arch/x86/kernel/i8259_32.c | 6 +++++- arch/x86/mach-default/setup.c | 6 +++++- arch/x86/mach-voyager/setup.c | 6 +++++- 3 files changed, 15 insertions(+), 3 deletions(-) diff --git a/arch/x86/kernel/i8259_32.c b/arch/x86/kernel/i8259_32.c index 679bb33acbf..d34a10cc13a 100644 --- a/arch/x86/kernel/i8259_32.c +++ b/arch/x86/kernel/i8259_32.c @@ -349,7 +349,11 @@ static irqreturn_t math_error_irq(int cpl, void *dev_id) * New motherboards sometimes make IRQ 13 be a PCI interrupt, * so allow interrupt sharing. */ -static struct irqaction fpu_irq = { math_error_irq, 0, CPU_MASK_NONE, "fpu", NULL, NULL }; +static struct irqaction fpu_irq = { + .handler = math_error_irq, + .mask = CPU_MASK_NONE, + .name = "fpu", +}; void __init init_ISA_irqs (void) { diff --git a/arch/x86/mach-default/setup.c b/arch/x86/mach-default/setup.c index 1bd82983986..3f08010f351 100644 --- a/arch/x86/mach-default/setup.c +++ b/arch/x86/mach-default/setup.c @@ -35,7 +35,11 @@ void __init pre_intr_init_hook(void) /* * IRQ2 is cascade interrupt to second interrupt controller */ -static struct irqaction irq2 = { no_action, 0, CPU_MASK_NONE, "cascade", NULL, NULL}; +static struct irqaction irq2 = { + .handler = no_action, + .mask = CPU_MASK_NONE, + .name = "cascade", +}; /** * intr_init_hook - post gate setup interrupt initialisation diff --git a/arch/x86/mach-voyager/setup.c b/arch/x86/mach-voyager/setup.c index a0ab4002abc..3bef977cb29 100644 --- a/arch/x86/mach-voyager/setup.c +++ b/arch/x86/mach-voyager/setup.c @@ -18,7 +18,11 @@ void __init pre_intr_init_hook(void) /* * IRQ2 is cascade interrupt to second interrupt controller */ -static struct irqaction irq2 = { no_action, 0, CPU_MASK_NONE, "cascade", NULL, NULL}; +static struct irqaction irq2 = { + .handler = no_action, + .mask = CPU_MASK_NONE, + .name = "cascade", +}; void __init intr_init_hook(void) { -- cgit v1.2.3 From df5ddf620e101f6c7f968c71b327ded16a90ca03 Mon Sep 17 00:00:00 2001 From: Thomas Gleixner Date: Wed, 17 Oct 2007 18:04:36 +0200 Subject: x86: more struct irqaction initializer cleanups more struct irqaction initializer cleanups. Signed-off-by: Thomas Gleixner Cc: Andi Kleen Signed-off-by: Andrew Morton Signed-off-by: Ingo Molnar --- arch/x86/kernel/i8259_64.c | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/arch/x86/kernel/i8259_64.c b/arch/x86/kernel/i8259_64.c index eb72976cc13..3f27ea0b981 100644 --- a/arch/x86/kernel/i8259_64.c +++ b/arch/x86/kernel/i8259_64.c @@ -395,7 +395,11 @@ device_initcall(i8259A_init_sysfs); * IRQ2 is cascade interrupt to second interrupt controller */ -static struct irqaction irq2 = { no_action, 0, CPU_MASK_NONE, "cascade", NULL, NULL}; +static struct irqaction irq2 = { + .handler = no_action, + .mask = CPU_MASK_NONE, + .name = "cascade", +}; DEFINE_PER_CPU(vector_irq_t, vector_irq) = { [0 ... IRQ0_VECTOR - 1] = -1, [IRQ0_VECTOR] = 0, -- cgit v1.2.3 From 121d7bf5a246d282ba91234d03a4edf9ccc9c940 Mon Sep 17 00:00:00 2001 From: Jan Beulich Date: Wed, 17 Oct 2007 18:04:37 +0200 Subject: x86: misc. constifications Miscellaneous x86 stuff that can live in .rodata. [ tglx: arch/x86 adaptation ] Signed-off-by: Jan Beulich Signed-off-by: Andi Kleen Signed-off-by: Ingo Molnar Signed-off-by: Thomas Gleixner --- arch/x86/kernel/alternative.c | 30 +++++++++++++++--------------- arch/x86/kernel/setup_64.c | 4 ++-- arch/x86/kernel/smpboot_32.c | 4 ++-- arch/x86/kernel/smpboot_64.c | 4 ++-- arch/x86/kernel/trampoline_32.S | 4 ++-- arch/x86/kernel/trampoline_64.S | 7 ++++++- arch/x86/mach-voyager/voyager_smp.c | 4 ++-- 7 files changed, 31 insertions(+), 26 deletions(-) diff --git a/arch/x86/kernel/alternative.c b/arch/x86/kernel/alternative.c index dff1c9e1c2e..8cb5dbbd9c2 100644 --- a/arch/x86/kernel/alternative.c +++ b/arch/x86/kernel/alternative.c @@ -63,11 +63,11 @@ __setup("noreplace-paravirt", setup_noreplace_paravirt); /* Use inline assembly to define this because the nops are defined as inline assembly strings in the include files and we cannot get them easily into strings. */ -asm("\t.data\nintelnops: " +asm("\t.section .rodata, \"a\"\nintelnops: " GENERIC_NOP1 GENERIC_NOP2 GENERIC_NOP3 GENERIC_NOP4 GENERIC_NOP5 GENERIC_NOP6 GENERIC_NOP7 GENERIC_NOP8); -extern unsigned char intelnops[]; -static unsigned char *intel_nops[ASM_NOP_MAX+1] = { +extern const unsigned char intelnops[]; +static const unsigned char *const intel_nops[ASM_NOP_MAX+1] = { NULL, intelnops, intelnops + 1, @@ -81,11 +81,11 @@ static unsigned char *intel_nops[ASM_NOP_MAX+1] = { #endif #ifdef K8_NOP1 -asm("\t.data\nk8nops: " +asm("\t.section .rodata, \"a\"\nk8nops: " K8_NOP1 K8_NOP2 K8_NOP3 K8_NOP4 K8_NOP5 K8_NOP6 K8_NOP7 K8_NOP8); -extern unsigned char k8nops[]; -static unsigned char *k8_nops[ASM_NOP_MAX+1] = { +extern const unsigned char k8nops[]; +static const unsigned char *const k8_nops[ASM_NOP_MAX+1] = { NULL, k8nops, k8nops + 1, @@ -99,11 +99,11 @@ static unsigned char *k8_nops[ASM_NOP_MAX+1] = { #endif #ifdef K7_NOP1 -asm("\t.data\nk7nops: " +asm("\t.section .rodata, \"a\"\nk7nops: " K7_NOP1 K7_NOP2 K7_NOP3 K7_NOP4 K7_NOP5 K7_NOP6 K7_NOP7 K7_NOP8); -extern unsigned char k7nops[]; -static unsigned char *k7_nops[ASM_NOP_MAX+1] = { +extern const unsigned char k7nops[]; +static const unsigned char *const k7_nops[ASM_NOP_MAX+1] = { NULL, k7nops, k7nops + 1, @@ -119,25 +119,25 @@ static unsigned char *k7_nops[ASM_NOP_MAX+1] = { #ifdef CONFIG_X86_64 extern char __vsyscall_0; -static inline unsigned char** find_nop_table(void) +static inline const unsigned char*const * find_nop_table(void) { return k8_nops; } #else /* CONFIG_X86_64 */ -static struct nop { +static const struct nop { int cpuid; - unsigned char **noptable; + const unsigned char *const *noptable; } noptypes[] = { { X86_FEATURE_K8, k8_nops }, { X86_FEATURE_K7, k7_nops }, { -1, NULL } }; -static unsigned char** find_nop_table(void) +static const unsigned char*const * find_nop_table(void) { - unsigned char **noptable = intel_nops; + const unsigned char *const *noptable = intel_nops; int i; for (i = 0; noptypes[i].cpuid >= 0; i++) { @@ -154,7 +154,7 @@ static unsigned char** find_nop_table(void) /* Use this to add nops to a buffer, then text_poke the whole buffer. */ static void add_nops(void *insns, unsigned int len) { - unsigned char **noptable = find_nop_table(); + const unsigned char *const *noptable = find_nop_table(); while (len > 0) { unsigned int noplen = len; diff --git a/arch/x86/kernel/setup_64.c b/arch/x86/kernel/setup_64.c index 8159bf0be17..5b5e0781d5b 100644 --- a/arch/x86/kernel/setup_64.c +++ b/arch/x86/kernel/setup_64.c @@ -968,7 +968,7 @@ static int show_cpuinfo(struct seq_file *m, void *v) * applications want to get the raw CPUID data, they should access * /dev/cpu//cpuid instead. */ - static char *x86_cap_flags[] = { + static const char *const x86_cap_flags[] = { /* Intel-defined */ "fpu", "vme", "de", "pse", "tsc", "msr", "pae", "mce", "cx8", "apic", NULL, "sep", "mtrr", "pge", "mca", "cmov", @@ -1022,7 +1022,7 @@ static int show_cpuinfo(struct seq_file *m, void *v) NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, }; - static char *x86_power_flags[] = { + static const char *const x86_power_flags[] = { "ts", /* temperature sensor */ "fid", /* frequency id control */ "vid", /* voltage id control */ diff --git a/arch/x86/kernel/smpboot_32.c b/arch/x86/kernel/smpboot_32.c index 83e4f40f8dc..be3faac0471 100644 --- a/arch/x86/kernel/smpboot_32.c +++ b/arch/x86/kernel/smpboot_32.c @@ -102,8 +102,8 @@ u8 apicid_2_node[MAX_APICID]; * Trampoline 80x86 program as an array. */ -extern unsigned char trampoline_data []; -extern unsigned char trampoline_end []; +extern const unsigned char trampoline_data []; +extern const unsigned char trampoline_end []; static unsigned char *trampoline_base; static int trampoline_exec; diff --git a/arch/x86/kernel/smpboot_64.c b/arch/x86/kernel/smpboot_64.c index 0faa0a0af27..e5f08de9db8 100644 --- a/arch/x86/kernel/smpboot_64.c +++ b/arch/x86/kernel/smpboot_64.c @@ -102,8 +102,8 @@ EXPORT_PER_CPU_SYMBOL(cpu_core_map); * Trampoline 80x86 program as an array. */ -extern unsigned char trampoline_data[]; -extern unsigned char trampoline_end[]; +extern const unsigned char trampoline_data[]; +extern const unsigned char trampoline_end[]; /* State of each CPU */ DEFINE_PER_CPU(int, cpu_state) = { 0 }; diff --git a/arch/x86/kernel/trampoline_32.S b/arch/x86/kernel/trampoline_32.S index f62815f8d06..9bcc1c6aca3 100644 --- a/arch/x86/kernel/trampoline_32.S +++ b/arch/x86/kernel/trampoline_32.S @@ -36,11 +36,11 @@ #include #include -.data - /* We can free up trampoline after bootup if cpu hotplug is not supported. */ #ifndef CONFIG_HOTPLUG_CPU .section ".init.data","aw",@progbits +#else +.section .rodata,"a",@progbits #endif .code16 diff --git a/arch/x86/kernel/trampoline_64.S b/arch/x86/kernel/trampoline_64.S index 607983b0d27..e30b67c6a9f 100644 --- a/arch/x86/kernel/trampoline_64.S +++ b/arch/x86/kernel/trampoline_64.S @@ -33,7 +33,12 @@ #include #include -.data +/* We can free up trampoline after bootup if cpu hotplug is not supported. */ +#ifndef CONFIG_HOTPLUG_CPU +.section .init.data, "aw", @progbits +#else +.section .rodata, "a", @progbits +#endif .code16 diff --git a/arch/x86/mach-voyager/voyager_smp.c b/arch/x86/mach-voyager/voyager_smp.c index b87f8548e75..1f86b529dbb 100644 --- a/arch/x86/mach-voyager/voyager_smp.c +++ b/arch/x86/mach-voyager/voyager_smp.c @@ -442,8 +442,8 @@ static __u32 __init setup_trampoline(void) { /* these two are global symbols in trampoline.S */ - extern __u8 trampoline_end[]; - extern __u8 trampoline_data[]; + extern const __u8 trampoline_end[]; + extern const __u8 trampoline_data[]; memcpy((__u8 *)trampoline_base, trampoline_data, trampoline_end - trampoline_data); -- cgit v1.2.3 From ff7f36497e77a8d60f09065fc8b606a543214c3f Mon Sep 17 00:00:00 2001 From: Andi Kleen Date: Wed, 17 Oct 2007 18:04:37 +0200 Subject: x86: Some cleanups for pci gart code - Mark function static - Clarify license [ tglx: arch/x86 adaptation ] Signed-off-by: Andi Kleen Signed-off-by: Ingo Molnar Signed-off-by: Thomas Gleixner --- arch/x86/kernel/pci-gart_64.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/arch/x86/kernel/pci-gart_64.c b/arch/x86/kernel/pci-gart_64.c index cfcc84e6c35..5cdfab65e93 100644 --- a/arch/x86/kernel/pci-gart_64.c +++ b/arch/x86/kernel/pci-gart_64.c @@ -8,6 +8,7 @@ * See Documentation/DMA-mapping.txt for the interface specification. * * Copyright 2002 Andi Kleen, SuSE Labs. + * Subject to the GNU General Public License v2 only. */ #include @@ -375,7 +376,8 @@ static inline int dma_map_cont(struct scatterlist *start, int nelems, * DMA map all entries in a scatterlist. * Merge chunks that have page aligned sizes into a continuous mapping. */ -int gart_map_sg(struct device *dev, struct scatterlist *sg, int nents, int dir) +static int gart_map_sg(struct device *dev, struct scatterlist *sg, int nents, + int dir) { int i; int out; -- cgit v1.2.3 From 9689ba8ad0dc27c0a2ce40eb4c0f8fb66551119c Mon Sep 17 00:00:00 2001 From: Jan Beulich Date: Wed, 17 Oct 2007 18:04:37 +0200 Subject: x86: constify stacktrace_ops .. as they're never written to. [ tglx: arch/x86 adaptation ] Signed-off-by: Jan Beulich Signed-off-by: Andi Kleen Signed-off-by: Ingo Molnar Signed-off-by: Thomas Gleixner --- arch/x86/kernel/stacktrace.c | 2 +- arch/x86/kernel/traps_32.c | 6 +++--- arch/x86/kernel/traps_64.c | 4 ++-- include/asm-x86/stacktrace.h | 2 +- 4 files changed, 7 insertions(+), 7 deletions(-) diff --git a/arch/x86/kernel/stacktrace.c b/arch/x86/kernel/stacktrace.c index 413e527cdeb..6fa6cf036c7 100644 --- a/arch/x86/kernel/stacktrace.c +++ b/arch/x86/kernel/stacktrace.c @@ -33,7 +33,7 @@ static void save_stack_address(void *data, unsigned long addr) trace->entries[trace->nr_entries++] = addr; } -static struct stacktrace_ops save_stack_ops = { +static const struct stacktrace_ops save_stack_ops = { .warning = save_stack_warning, .warning_symbol = save_stack_warning_symbol, .stack = save_stack_stack, diff --git a/arch/x86/kernel/traps_32.c b/arch/x86/kernel/traps_32.c index 0fce34226b7..83a9bbbbe38 100644 --- a/arch/x86/kernel/traps_32.c +++ b/arch/x86/kernel/traps_32.c @@ -112,7 +112,7 @@ struct stack_frame { static inline unsigned long print_context_stack(struct thread_info *tinfo, unsigned long *stack, unsigned long ebp, - struct stacktrace_ops *ops, void *data) + const struct stacktrace_ops *ops, void *data) { #ifdef CONFIG_FRAME_POINTER struct stack_frame *frame = (struct stack_frame *)ebp; @@ -149,7 +149,7 @@ static inline unsigned long print_context_stack(struct thread_info *tinfo, void dump_trace(struct task_struct *task, struct pt_regs *regs, unsigned long *stack, - struct stacktrace_ops *ops, void *data) + const struct stacktrace_ops *ops, void *data) { unsigned long ebp = 0; @@ -221,7 +221,7 @@ static void print_trace_address(void *data, unsigned long addr) touch_nmi_watchdog(); } -static struct stacktrace_ops print_trace_ops = { +static const struct stacktrace_ops print_trace_ops = { .warning = print_trace_warning, .warning_symbol = print_trace_warning_symbol, .stack = print_trace_stack, diff --git a/arch/x86/kernel/traps_64.c b/arch/x86/kernel/traps_64.c index bc7116acf8f..b4a9b3db199 100644 --- a/arch/x86/kernel/traps_64.c +++ b/arch/x86/kernel/traps_64.c @@ -215,7 +215,7 @@ static inline int valid_stack_ptr(struct thread_info *tinfo, void *p) void dump_trace(struct task_struct *tsk, struct pt_regs *regs, unsigned long *stack, - struct stacktrace_ops *ops, void *data) + const struct stacktrace_ops *ops, void *data) { const unsigned cpu = get_cpu(); unsigned long *irqstack_end = (unsigned long*)cpu_pda(cpu)->irqstackptr; @@ -336,7 +336,7 @@ static void print_trace_address(void *data, unsigned long addr) printk_address(addr); } -static struct stacktrace_ops print_trace_ops = { +static const struct stacktrace_ops print_trace_ops = { .warning = print_trace_warning, .warning_symbol = print_trace_warning_symbol, .stack = print_trace_stack, diff --git a/include/asm-x86/stacktrace.h b/include/asm-x86/stacktrace.h index 6f0b5459430..70dd5bae323 100644 --- a/include/asm-x86/stacktrace.h +++ b/include/asm-x86/stacktrace.h @@ -15,6 +15,6 @@ struct stacktrace_ops { }; void dump_trace(struct task_struct *tsk, struct pt_regs *regs, unsigned long *stack, - struct stacktrace_ops *ops, void *data); + const struct stacktrace_ops *ops, void *data); #endif -- cgit v1.2.3 From 6619a8fb594486363783cc4a8372e4d4ee4b913e Mon Sep 17 00:00:00 2001 From: "H. Peter Anvin" Date: Wed, 17 Oct 2007 18:04:37 +0200 Subject: x86: Create clflush() inline, remove hardcoded wbinvd Create an inline function for clflush(), with the proper arguments, and use it instead of hard-coding the instruction. This also removes one instance of hard-coded wbinvd, based on a patch by Bauder de Oliveira Costa. [ tglx: arch/x86 adaptation ] Cc: Andi Kleen Cc: Glauber de Oliveira Costa Signed-off-by: H. Peter Anvin Signed-off-by: Andi Kleen Signed-off-by: Ingo Molnar Signed-off-by: Thomas Gleixner --- arch/x86/kernel/tce_64.c | 4 ++-- arch/x86/mm/pageattr_32.c | 4 ++-- arch/x86/mm/pageattr_64.c | 2 +- drivers/char/agp/efficeon-agp.c | 11 ++++++----- include/asm-x86/system_32.h | 4 ++++ include/asm-x86/system_64.h | 5 +++++ 6 files changed, 20 insertions(+), 10 deletions(-) diff --git a/arch/x86/kernel/tce_64.c b/arch/x86/kernel/tce_64.c index e3f2569b2c4..9e540fee700 100644 --- a/arch/x86/kernel/tce_64.c +++ b/arch/x86/kernel/tce_64.c @@ -40,9 +40,9 @@ static inline void flush_tce(void* tceaddr) { /* a single tce can't cross a cache line */ if (cpu_has_clflush) - asm volatile("clflush (%0)" :: "r" (tceaddr)); + clflush(tceaddr); else - asm volatile("wbinvd":::"memory"); + wbinvd(); } void tce_build(struct iommu_table *tbl, unsigned long index, diff --git a/arch/x86/mm/pageattr_32.c b/arch/x86/mm/pageattr_32.c index 4241a74d16c..260073c0760 100644 --- a/arch/x86/mm/pageattr_32.c +++ b/arch/x86/mm/pageattr_32.c @@ -70,10 +70,10 @@ static struct page *split_large_page(unsigned long address, pgprot_t prot, static void cache_flush_page(struct page *p) { - unsigned long adr = (unsigned long)page_address(p); + void *adr = page_address(p); int i; for (i = 0; i < PAGE_SIZE; i += boot_cpu_data.x86_clflush_size) - asm volatile("clflush (%0)" :: "r" (adr + i)); + clflush(adr+i); } static void flush_kernel_map(void *arg) diff --git a/arch/x86/mm/pageattr_64.c b/arch/x86/mm/pageattr_64.c index 93d795d7c2a..8a4f65bf956 100644 --- a/arch/x86/mm/pageattr_64.c +++ b/arch/x86/mm/pageattr_64.c @@ -65,7 +65,7 @@ static void cache_flush_page(void *adr) { int i; for (i = 0; i < PAGE_SIZE; i += boot_cpu_data.x86_clflush_size) - asm volatile("clflush (%0)" :: "r" (adr + i)); + clflush(adr+i); } static void flush_kernel_map(void *arg) diff --git a/drivers/char/agp/efficeon-agp.c b/drivers/char/agp/efficeon-agp.c index d78cd09186a..cac0009cebc 100644 --- a/drivers/char/agp/efficeon-agp.c +++ b/drivers/char/agp/efficeon-agp.c @@ -221,7 +221,7 @@ static int efficeon_create_gatt_table(struct agp_bridge_data *bridge) SetPageReserved(virt_to_page((char *)page)); for (offset = 0; offset < PAGE_SIZE; offset += clflush_chunk) - asm volatile("clflush %0" : : "m" (*(char *)(page+offset))); + clflush((char *)page+offset); efficeon_private.l1_table[index] = page; @@ -268,15 +268,16 @@ static int efficeon_insert_memory(struct agp_memory * mem, off_t pg_start, int t *page = insert; /* clflush is slow, so don't clflush until we have to */ - if ( last_page && - ((unsigned long)page^(unsigned long)last_page) & clflush_mask ) - asm volatile("clflush %0" : : "m" (*last_page)); + if (last_page && + (((unsigned long)page^(unsigned long)last_page) & + clflush_mask)) + clflush(last_page); last_page = page; } if ( last_page ) - asm volatile("clflush %0" : : "m" (*last_page)); + clflush(last_page); agp_bridge->driver->tlb_flush(mem); return 0; diff --git a/include/asm-x86/system_32.h b/include/asm-x86/system_32.h index 1d6fb3afa53..db6283eb5e4 100644 --- a/include/asm-x86/system_32.h +++ b/include/asm-x86/system_32.h @@ -161,6 +161,10 @@ static inline void native_wbinvd(void) asm volatile("wbinvd": : :"memory"); } +static inline void clflush(volatile void *__p) +{ + asm volatile("clflush %0" : "+m" (*(char __force *)__p)); +} #ifdef CONFIG_PARAVIRT #include diff --git a/include/asm-x86/system_64.h b/include/asm-x86/system_64.h index fb4bcf99e66..ec4c29bcfcb 100644 --- a/include/asm-x86/system_64.h +++ b/include/asm-x86/system_64.h @@ -137,6 +137,11 @@ static inline void write_cr8(unsigned long val) #endif /* __KERNEL__ */ +static inline void clflush(volatile void *__p) +{ + asm volatile("clflush %0" : "+m" (*(char __force *)__p)); +} + #define nop() __asm__ __volatile__ ("nop") #ifdef CONFIG_SMP -- cgit v1.2.3 From c8f2518e390638abc8255616a40b4a28caa66a95 Mon Sep 17 00:00:00 2001 From: "akpm@linux-foundation.org" Date: Wed, 17 Oct 2007 18:04:37 +0200 Subject: i386: Remove local CPU logic in MTRR call to smp_call_function_single smp_call_function_single handles the call to local CPU case correctly now, no need to handle this in the caller. [ tglx: arch/x86 adaptation ] Signed-off-by: Andrew Morton Signed-off-by: Andi Kleen Signed-off-by: Ingo Molnar Signed-off-by: Thomas Gleixner --- arch/x86/kernel/cpu/mtrr/main.c | 8 +------- 1 file changed, 1 insertion(+), 7 deletions(-) diff --git a/arch/x86/kernel/cpu/mtrr/main.c b/arch/x86/kernel/cpu/mtrr/main.c index c48b6fea5ab..5e4be30ff90 100644 --- a/arch/x86/kernel/cpu/mtrr/main.c +++ b/arch/x86/kernel/cpu/mtrr/main.c @@ -738,13 +738,7 @@ void mtrr_ap_init(void) */ void mtrr_save_state(void) { - int cpu = get_cpu(); - - if (cpu == 0) - mtrr_save_fixed_ranges(NULL); - else - smp_call_function_single(0, mtrr_save_fixed_ranges, NULL, 1, 1); - put_cpu(); + smp_call_function_single(0, mtrr_save_fixed_ranges, NULL, 1, 1); } static int __init mtrr_init_finialize(void) -- cgit v1.2.3 From fb7ae26df0b1218b39049b659064d57b58616c94 Mon Sep 17 00:00:00 2001 From: Adrian Bunk Date: Wed, 17 Oct 2007 18:04:37 +0200 Subject: i386: es7000 minor cleanups This patch contains the following cleanups: - make some needlessly global functions static - #if 0 the unused es7000_stop_cpu() AK: actually removed es7000_stop_cpu AK: fixed a non ISO prototype too [ tglx: arch/x86 adaptation ] Signed-off-by: Adrian Bunk Signed-off-by: Andrew Morton Signed-off-by: Andi Kleen Signed-off-by: Ingo Molnar Signed-off-by: Thomas Gleixner --- arch/x86/mach-es7000/es7000plat.c | 32 ++++++-------------------------- 1 file changed, 6 insertions(+), 26 deletions(-) diff --git a/arch/x86/mach-es7000/es7000plat.c b/arch/x86/mach-es7000/es7000plat.c index ab99072d3f9..f5d6f7d8b86 100644 --- a/arch/x86/mach-es7000/es7000plat.c +++ b/arch/x86/mach-es7000/es7000plat.c @@ -46,11 +46,11 @@ * ES7000 Globals */ -volatile unsigned long *psai = NULL; -struct mip_reg *mip_reg; -struct mip_reg *host_reg; -int mip_port; -unsigned long mip_addr, host_addr; +static volatile unsigned long *psai = NULL; +static struct mip_reg *mip_reg; +static struct mip_reg *host_reg; +static int mip_port; +static unsigned long mip_addr, host_addr; /* * GSI override for ES7000 platforms. @@ -288,28 +288,8 @@ es7000_start_cpu(int cpu, unsigned long eip) } -int -es7000_stop_cpu(int cpu) -{ - int startup; - - if (psai == NULL) - return -1; - - startup= (0x1000000 | cpu); - - while ((*psai & 0xff00ffff) != startup) - ; - - startup = (*psai & 0xff0000) >> 16; - *psai &= 0xffffff; - - return 0; - -} - void __init -es7000_sw_apic() +es7000_sw_apic(void) { if (es7000_plat) { int mip_status; -- cgit v1.2.3 From a850cef77f148c2e305022a1ed86ca6cff5ee300 Mon Sep 17 00:00:00 2001 From: Adrian Bunk Date: Wed, 17 Oct 2007 18:04:38 +0200 Subject: i386: no need to make enable_cpu_hotplug a variable As long as there's no write access to this variable there's no reason to let gcc check it at runtime. [ tglx: arch/x86 adaptation ] Signed-off-by: Adrian Bunk Signed-off-by: Andi Kleen Signed-off-by: Andrew Morton Signed-off-by: Ingo Molnar Signed-off-by: Thomas Gleixner --- arch/x86/kernel/topology.c | 6 +++--- include/asm-x86/cpu.h | 3 --- 2 files changed, 3 insertions(+), 6 deletions(-) diff --git a/arch/x86/kernel/topology.c b/arch/x86/kernel/topology.c index c25f23eb397..8caa0b77746 100644 --- a/arch/x86/kernel/topology.c +++ b/arch/x86/kernel/topology.c @@ -44,15 +44,15 @@ int arch_register_cpu(int num) * Also certain PCI quirks require not to enable hotplug control * for all CPU's. */ - if (num && enable_cpu_hotplug) +#ifdef CONFIG_HOTPLUG_CPU + if (num) cpu_devices[num].cpu.hotpluggable = 1; +#endif return register_cpu(&cpu_devices[num].cpu, num); } #ifdef CONFIG_HOTPLUG_CPU -int enable_cpu_hotplug = 1; - void arch_unregister_cpu(int num) { return unregister_cpu(&cpu_devices[num].cpu); } diff --git a/include/asm-x86/cpu.h b/include/asm-x86/cpu.h index 9d914e1e4aa..b1bc7b1b64b 100644 --- a/include/asm-x86/cpu.h +++ b/include/asm-x86/cpu.h @@ -13,9 +13,6 @@ struct i386_cpu { extern int arch_register_cpu(int num); #ifdef CONFIG_HOTPLUG_CPU extern void arch_unregister_cpu(int); -extern int enable_cpu_hotplug; -#else -#define enable_cpu_hotplug 0 #endif DECLARE_PER_CPU(int, cpu_state); -- cgit v1.2.3 From cddf7ff766ee53e24ff37f55a897efc90cb3526e Mon Sep 17 00:00:00 2001 From: Mariusz Kozlowski Date: Wed, 17 Oct 2007 18:04:38 +0200 Subject: x86: kmalloc + memset conversion to kzalloc arch/x86_64/kernel/io_apic.c | 56080 -> 56038 (-42 bytes) also eliminate unnecessary local variable assignment. [ tglx: arch/x86 adaptation ] Signed-off-by: Mariusz Kozlowski Signed-off-by: Andrew Morton Signed-off-by: Andi Kleen Signed-off-by: Ingo Molnar Signed-off-by: Thomas Gleixner --- arch/x86/kernel/io_apic_64.c | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/arch/x86/kernel/io_apic_64.c b/arch/x86/kernel/io_apic_64.c index 966fa106249..66a27d268d9 100644 --- a/arch/x86/kernel/io_apic_64.c +++ b/arch/x86/kernel/io_apic_64.c @@ -1845,7 +1845,7 @@ static struct sysdev_class ioapic_sysdev_class = { static int __init ioapic_init_sysfs(void) { struct sys_device * dev; - int i, size, error = 0; + int i, size, error; error = sysdev_class_register(&ioapic_sysdev_class); if (error) @@ -1854,12 +1854,11 @@ static int __init ioapic_init_sysfs(void) for (i = 0; i < nr_ioapics; i++ ) { size = sizeof(struct sys_device) + nr_ioapic_registers[i] * sizeof(struct IO_APIC_route_entry); - mp_ioapic_data[i] = kmalloc(size, GFP_KERNEL); + mp_ioapic_data[i] = kzalloc(size, GFP_KERNEL); if (!mp_ioapic_data[i]) { printk(KERN_ERR "Can't suspend/resume IOAPIC %d\n", i); continue; } - memset(mp_ioapic_data[i], 0, size); dev = &mp_ioapic_data[i]->dev; dev->id = i; dev->cls = &ioapic_sysdev_class; -- cgit v1.2.3 From 4a40cb1ec68d021125e37a69a0be79dc16dd41b1 Mon Sep 17 00:00:00 2001 From: Avi Kivity Date: Wed, 17 Oct 2007 18:04:38 +0200 Subject: i386: simplify smp_call_function_single() call sequence in cpuid smp_call_function_single() now knows how to call the function on the current cpu. [ tglx: arch/x86 adaptation ] Cc: H. Peter Anvin Signed-off-by: Avi Kivity Signed-off-by: Andi Kleen Cc: Andi Kleen Signed-off-by: Andrew Morton Signed-off-by: Ingo Molnar Signed-off-by: Thomas Gleixner --- arch/x86/kernel/cpuid.c | 22 +++------------------- 1 file changed, 3 insertions(+), 19 deletions(-) diff --git a/arch/x86/kernel/cpuid.c b/arch/x86/kernel/cpuid.c index dffb102fb8c..70dcf912d9f 100644 --- a/arch/x86/kernel/cpuid.c +++ b/arch/x86/kernel/cpuid.c @@ -43,8 +43,6 @@ static struct class *cpuid_class; -#ifdef CONFIG_SMP - struct cpuid_command { u32 reg; u32 *data; @@ -62,25 +60,11 @@ static inline void do_cpuid(int cpu, u32 reg, u32 * data) { struct cpuid_command cmd; - preempt_disable(); - if (cpu == smp_processor_id()) { - cpuid(reg, &data[0], &data[1], &data[2], &data[3]); - } else { - cmd.reg = reg; - cmd.data = data; + cmd.reg = reg; + cmd.data = data; - smp_call_function_single(cpu, cpuid_smp_cpuid, &cmd, 1, 1); - } - preempt_enable(); + smp_call_function_single(cpu, cpuid_smp_cpuid, &cmd, 1, 1); } -#else /* ! CONFIG_SMP */ - -static inline void do_cpuid(int cpu, u32 reg, u32 * data) -{ - cpuid(reg, &data[0], &data[1], &data[2], &data[3]); -} - -#endif /* ! CONFIG_SMP */ static loff_t cpuid_seek(struct file *file, loff_t offset, int orig) { -- cgit v1.2.3 From 5f1f935ca4e385444c07164cf43dfdfe5eeee006 Mon Sep 17 00:00:00 2001 From: Avi Kivity Date: Wed, 17 Oct 2007 18:04:38 +0200 Subject: i386: simplify smp_call_function_single() call sequence in msr-on-cpu smp_call_function_single() now knows how to call the function on the current cpu. [ tglx: arch/x86 adaptation ] Cc: H. Peter Anvin Signed-off-by: Avi Kivity Signed-off-by: Andi Kleen Signed-off-by: Andrew Morton Signed-off-by: Ingo Molnar Signed-off-by: Thomas Gleixner --- arch/x86/lib/msr-on-cpu.c | 62 +++++++++++++++++------------------------------ 1 file changed, 22 insertions(+), 40 deletions(-) diff --git a/arch/x86/lib/msr-on-cpu.c b/arch/x86/lib/msr-on-cpu.c index 7767962f25d..57d043fa893 100644 --- a/arch/x86/lib/msr-on-cpu.c +++ b/arch/x86/lib/msr-on-cpu.c @@ -26,27 +26,18 @@ static void __rdmsr_safe_on_cpu(void *info) static int _rdmsr_on_cpu(unsigned int cpu, u32 msr_no, u32 *l, u32 *h, int safe) { int err = 0; - preempt_disable(); - if (smp_processor_id() == cpu) - if (safe) - err = rdmsr_safe(msr_no, l, h); - else - rdmsr(msr_no, *l, *h); - else { - struct msr_info rv; - - rv.msr_no = msr_no; - if (safe) { - smp_call_function_single(cpu, __rdmsr_safe_on_cpu, - &rv, 0, 1); - err = rv.err; - } else { - smp_call_function_single(cpu, __rdmsr_on_cpu, &rv, 0, 1); - } - *l = rv.l; - *h = rv.h; + struct msr_info rv; + + rv.msr_no = msr_no; + if (safe) { + smp_call_function_single(cpu, __rdmsr_safe_on_cpu, &rv, 0, 1); + err = rv.err; + } else { + smp_call_function_single(cpu, __rdmsr_on_cpu, &rv, 0, 1); } - preempt_enable(); + *l = rv.l; + *h = rv.h; + return err; } @@ -67,27 +58,18 @@ static void __wrmsr_safe_on_cpu(void *info) static int _wrmsr_on_cpu(unsigned int cpu, u32 msr_no, u32 l, u32 h, int safe) { int err = 0; - preempt_disable(); - if (smp_processor_id() == cpu) - if (safe) - err = wrmsr_safe(msr_no, l, h); - else - wrmsr(msr_no, l, h); - else { - struct msr_info rv; - - rv.msr_no = msr_no; - rv.l = l; - rv.h = h; - if (safe) { - smp_call_function_single(cpu, __wrmsr_safe_on_cpu, - &rv, 0, 1); - err = rv.err; - } else { - smp_call_function_single(cpu, __wrmsr_on_cpu, &rv, 0, 1); - } + struct msr_info rv; + + rv.msr_no = msr_no; + rv.l = l; + rv.h = h; + if (safe) { + smp_call_function_single(cpu, __wrmsr_safe_on_cpu, &rv, 0, 1); + err = rv.err; + } else { + smp_call_function_single(cpu, __wrmsr_on_cpu, &rv, 0, 1); } - preempt_enable(); + return err; } -- cgit v1.2.3 From 883001f98290ca40b32e2c1872f22600f8dfc968 Mon Sep 17 00:00:00 2001 From: Chris Snook Date: Wed, 17 Oct 2007 18:04:38 +0200 Subject: x86: make atomic64_t work like atomic_t The volatile keyword has already been removed from the declaration of atomic_t on x86_64. For consistency, remove it from atomic64_t as well. [ tglx: arch/x86 adaptation ] Signed-off-by: Chris Snook Signed-off-by: Andi Kleen CC: Andi Kleen Signed-off-by: Ingo Molnar Signed-off-by: Thomas Gleixner --- include/asm-x86/atomic_64.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/include/asm-x86/atomic_64.h b/include/asm-x86/atomic_64.h index f2e64634fa4..2d20a7a19f6 100644 --- a/include/asm-x86/atomic_64.h +++ b/include/asm-x86/atomic_64.h @@ -206,7 +206,7 @@ static __inline__ int atomic_sub_return(int i, atomic_t *v) /* An 64bit atomic type */ -typedef struct { volatile long counter; } atomic64_t; +typedef struct { long counter; } atomic64_t; #define ATOMIC64_INIT(i) { (i) } -- cgit v1.2.3 From 61d08a9ea3d5fd680213aa7a15fcda69ce11987d Mon Sep 17 00:00:00 2001 From: Andi Kleen Date: Wed, 17 Oct 2007 18:04:38 +0200 Subject: i386: Remove strrchr assembler implementation The constraints in the inline assembler implementation of i386 strrchr() were incorrect and break the build with recent gcc 4.3. Since there are only very few callers of strrchr() and none of them are performance relevant just remove the assembler implementation and use the C fallback instead. [ tglx: arch/x86 adaptation ] Cc: rguenther@suse.de Signed-off-by: Andi Kleen Signed-off-by: Ingo Molnar Signed-off-by: Thomas Gleixner --- arch/x86/lib/string_32.c | 20 -------------------- include/asm-x86/string_32.h | 3 --- 2 files changed, 23 deletions(-) diff --git a/arch/x86/lib/string_32.c b/arch/x86/lib/string_32.c index 2c773fefa3d..c2c0504a307 100644 --- a/arch/x86/lib/string_32.c +++ b/arch/x86/lib/string_32.c @@ -160,26 +160,6 @@ char *strchr(const char * s, int c) EXPORT_SYMBOL(strchr); #endif -#ifdef __HAVE_ARCH_STRRCHR -char *strrchr(const char * s, int c) -{ - int d0, d1; - char * res; - asm volatile( "movb %%al,%%ah\n" - "1:\tlodsb\n\t" - "cmpb %%ah,%%al\n\t" - "jne 2f\n\t" - "leal -1(%%esi),%0\n" - "2:\ttestb %%al,%%al\n\t" - "jne 1b" - :"=g" (res), "=&S" (d0), "=&a" (d1) - :"0" (0),"1" (s),"2" (c) - :"memory"); - return res; -} -EXPORT_SYMBOL(strrchr); -#endif - #ifdef __HAVE_ARCH_STRLEN size_t strlen(const char * s) { diff --git a/include/asm-x86/string_32.h b/include/asm-x86/string_32.h index a9b64453bdf..55bfa308f90 100644 --- a/include/asm-x86/string_32.h +++ b/include/asm-x86/string_32.h @@ -26,9 +26,6 @@ extern int strncmp(const char *cs, const char *ct, size_t count); #define __HAVE_ARCH_STRCHR extern char *strchr(const char *s, int c); -#define __HAVE_ARCH_STRRCHR -extern char *strrchr(const char *s, int c); - #define __HAVE_ARCH_STRLEN extern size_t strlen(const char *s); -- cgit v1.2.3 From 9efa98159c8b4fd7373d03af9fc06d43f47de0f5 Mon Sep 17 00:00:00 2001 From: Mike Travis Date: Wed, 17 Oct 2007 18:04:38 +0200 Subject: x86: remove x86_cpu_to_log_apicid Remove the x86_cpu_to_log_apicid array. It is set in arch/x86_64/kernel/genapic_flat.c:flat_init_apic_ldr() and arch/x86_64/kernel/smpboot.c:do_boot_cpu() but it is never referenced. [ tglx: arch/x86 adaptation ] Signed-off-by: Mike Travis Signed-off-by: Christoph Lameter Signed-off-by: Andrew Morton Signed-off-by: Andi Kleen Signed-off-by: Ingo Molnar Signed-off-by: Thomas Gleixner --- arch/x86/kernel/genapic_64.c | 2 -- arch/x86/kernel/genapic_flat_64.c | 1 - arch/x86/kernel/smpboot_64.c | 1 - include/asm-x86/smp_64.h | 1 - 4 files changed, 5 deletions(-) diff --git a/arch/x86/kernel/genapic_64.c b/arch/x86/kernel/genapic_64.c index 47496a40e84..4ae03e3e829 100644 --- a/arch/x86/kernel/genapic_64.c +++ b/arch/x86/kernel/genapic_64.c @@ -29,8 +29,6 @@ u8 x86_cpu_to_apicid[NR_CPUS] __read_mostly = { [0 ... NR_CPUS-1] = BAD_APICID }; EXPORT_SYMBOL(x86_cpu_to_apicid); -u8 x86_cpu_to_log_apicid[NR_CPUS] = { [0 ... NR_CPUS-1] = BAD_APICID }; - struct genapic __read_mostly *genapic = &apic_flat; /* diff --git a/arch/x86/kernel/genapic_flat_64.c b/arch/x86/kernel/genapic_flat_64.c index ecb01eefdd2..91c7526768e 100644 --- a/arch/x86/kernel/genapic_flat_64.c +++ b/arch/x86/kernel/genapic_flat_64.c @@ -52,7 +52,6 @@ static void flat_init_apic_ldr(void) num = smp_processor_id(); id = 1UL << num; - x86_cpu_to_log_apicid[num] = id; apic_write(APIC_DFR, APIC_DFR_FLAT); val = apic_read(APIC_LDR) & ~APIC_LDR_MASK; val |= SET_APIC_LOGICAL_ID(id); diff --git a/arch/x86/kernel/smpboot_64.c b/arch/x86/kernel/smpboot_64.c index e5f08de9db8..e351ac4ab5b 100644 --- a/arch/x86/kernel/smpboot_64.c +++ b/arch/x86/kernel/smpboot_64.c @@ -695,7 +695,6 @@ do_rest: cpu_clear(cpu, cpu_present_map); cpu_clear(cpu, cpu_possible_map); x86_cpu_to_apicid[cpu] = BAD_APICID; - x86_cpu_to_log_apicid[cpu] = BAD_APICID; return -EIO; } diff --git a/include/asm-x86/smp_64.h b/include/asm-x86/smp_64.h index f5bcee1c092..d30e9b684fd 100644 --- a/include/asm-x86/smp_64.h +++ b/include/asm-x86/smp_64.h @@ -85,7 +85,6 @@ static inline int hard_smp_processor_id(void) * the real APIC ID <-> CPU # mapping. */ extern u8 x86_cpu_to_apicid[NR_CPUS]; /* physical ID */ -extern u8 x86_cpu_to_log_apicid[NR_CPUS]; extern u8 bios_cpu_apicid[]; static inline int cpu_present_to_apicid(int mps_cpu) -- cgit v1.2.3 From 92b2dc79c3bb3f08afae6c0feaeea593b9c83a76 Mon Sep 17 00:00:00 2001 From: Glauber de Oliveira Costa Date: Wed, 17 Oct 2007 18:04:38 +0200 Subject: x86: remove STR() macros This patch removes the __STR() and STR() macros from x86_64 header files. They seem to be legacy, and has no more users. Even if there were users, they should use __stringify() instead. In fact, there were one third place in which this macro was defined (ia32_binfmt.c), and used just below. In this file, usage was properly converted to __stringify() [ tglx: arch/x86 adaptation ] Signed-off-by: Glauber de Oliveira Costa Signed-off-by: Andi Kleen Signed-off-by: Ingo Molnar Signed-off-by: Thomas Gleixner --- arch/x86/ia32/ia32_binfmt.c | 5 +---- include/asm-x86/hw_irq_64.h | 3 --- include/asm-x86/system_64.h | 3 --- 3 files changed, 1 insertion(+), 10 deletions(-) diff --git a/arch/x86/ia32/ia32_binfmt.c b/arch/x86/ia32/ia32_binfmt.c index d3c53e8b05c..118b9f9ff49 100644 --- a/arch/x86/ia32/ia32_binfmt.c +++ b/arch/x86/ia32/ia32_binfmt.c @@ -112,11 +112,8 @@ struct elf_prpsinfo char pr_psargs[ELF_PRARGSZ]; /* initial part of arg list */ }; -#define __STR(x) #x -#define STR(x) __STR(x) - #define _GET_SEG(x) \ - ({ __u32 seg; asm("movl %%" STR(x) ",%0" : "=r"(seg)); seg; }) + ({ __u32 seg; asm("movl %%" __stringify(x) ",%0" : "=r"(seg)); seg; }) /* Assumes current==process to be dumped */ #define ELF_CORE_COPY_REGS(pr_reg, regs) \ diff --git a/include/asm-x86/hw_irq_64.h b/include/asm-x86/hw_irq_64.h index 09dfc18a6dd..dc0a953da6a 100644 --- a/include/asm-x86/hw_irq_64.h +++ b/include/asm-x86/hw_irq_64.h @@ -148,9 +148,6 @@ extern atomic_t irq_mis_count; #define IO_APIC_IRQ(x) (((x) >= 16) || ((1<<(x)) & io_apic_irqs)) -#define __STR(x) #x -#define STR(x) __STR(x) - #include #define IRQ_NAME2(nr) nr##_interrupt(void) diff --git a/include/asm-x86/system_64.h b/include/asm-x86/system_64.h index ec4c29bcfcb..4cb23848d46 100644 --- a/include/asm-x86/system_64.h +++ b/include/asm-x86/system_64.h @@ -7,9 +7,6 @@ #ifdef __KERNEL__ -#define __STR(x) #x -#define STR(x) __STR(x) - #define __SAVE(reg,offset) "movq %%" #reg ",(14-" #offset ")*8(%%rsp)\n\t" #define __RESTORE(reg,offset) "movq (14-" #offset ")*8(%%rsp),%%" #reg "\n\t" -- cgit v1.2.3 From d2ccc3fdde1a860b970109ad78865b7e44d3fc0c Mon Sep 17 00:00:00 2001 From: Chuck Lever Date: Wed, 17 Oct 2007 18:04:38 +0200 Subject: x86: Eliminate result signage problem in asm-x86_64/bitops.h MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The return type of __scanbit() doesn't match the return type of find_{first,next}_bit(). Thus when you construct something like this: boolean ? __scanbit() : find_first_bit() you get an unsigned long result if "boolean" is true, and a signed long result if "boolean" is false. In file included from /home/cel/src/linux/include/linux/mmzone.h:15, from /home/cel/src/linux/include/linux/gfp.h:4, from /home/cel/src/linux/include/linux/slab.h:14, from /home/cel/src/linux/include/linux/percpu.h:5, from /home/cel/src/linux/include/linux/rcupdate.h:41, from /home/cel/src/linux/include/linux/dcache.h:10, from /home/cel/src/linux/include/linux/fs.h:275, from /home/cel/src/linux/fs/nfs/sysctl.c:9: /home/cel/src/linux/include/linux/nodemask.h: In function ‘__first_node’: /home/cel/src/linux/include/linux/nodemask.h:229: warning: signed and unsigned type in conditional expression /home/cel/src/linux/include/linux/nodemask.h: In function ‘__next_node’: /home/cel/src/linux/include/linux/nodemask.h:235: warning: signed and unsigned type in conditional expression /home/cel/src/linux/include/linux/nodemask.h: In function ‘__first_unset_node’: /home/cel/src/linux/include/linux/nodemask.h:253: warning: signed and unsigned type in conditional expression [ tglx: arch/x86 adaptation ] Signed-off-by: Chuck Lever Signed-off-by: Andi Kleen Signed-off-by: Ingo Molnar Signed-off-by: Thomas Gleixner --- include/asm-x86/bitops_64.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/include/asm-x86/bitops_64.h b/include/asm-x86/bitops_64.h index d4dbbe5f7bd..1d7d9b4bcac 100644 --- a/include/asm-x86/bitops_64.h +++ b/include/asm-x86/bitops_64.h @@ -260,7 +260,7 @@ extern long find_first_bit(const unsigned long * addr, unsigned long size); extern long find_next_bit(const unsigned long * addr, long size, long offset); /* return index of first bet set in val or max when no bit is set */ -static inline unsigned long __scanbit(unsigned long val, unsigned long max) +static inline long __scanbit(unsigned long val, unsigned long max) { asm("bsfq %1,%0 ; cmovz %2,%0" : "=&r" (val) : "r" (val), "r" (max)); return val; -- cgit v1.2.3 From 3f4ed1511dc8c71073bb7d220ee62eedd8e8aeec Mon Sep 17 00:00:00 2001 From: Steven Rostedt Date: Wed, 17 Oct 2007 18:04:38 +0200 Subject: x86: Add parenthesis to IRQ vector macros It is not good taste to have macros with additions that do not have parenthesises around them. This patch parethesizes the IRQ vector macros for x86_64 arch. Note, this caused me a bit of heart-ache debugging lguest64. [ tglx: arch/x86 adaptation ] Signed-off-by: Steven Rostedt Signed-off-by: Andi Kleen Signed-off-by: Ingo Molnar Signed-off-by: Thomas Gleixner --- include/asm-x86/hw_irq_64.h | 32 ++++++++++++++++---------------- 1 file changed, 16 insertions(+), 16 deletions(-) diff --git a/include/asm-x86/hw_irq_64.h b/include/asm-x86/hw_irq_64.h index dc0a953da6a..a470d59da67 100644 --- a/include/asm-x86/hw_irq_64.h +++ b/include/asm-x86/hw_irq_64.h @@ -40,22 +40,22 @@ /* * Vectors 0x30-0x3f are used for ISA interrupts. */ -#define IRQ0_VECTOR FIRST_EXTERNAL_VECTOR + 0x10 -#define IRQ1_VECTOR IRQ0_VECTOR + 1 -#define IRQ2_VECTOR IRQ0_VECTOR + 2 -#define IRQ3_VECTOR IRQ0_VECTOR + 3 -#define IRQ4_VECTOR IRQ0_VECTOR + 4 -#define IRQ5_VECTOR IRQ0_VECTOR + 5 -#define IRQ6_VECTOR IRQ0_VECTOR + 6 -#define IRQ7_VECTOR IRQ0_VECTOR + 7 -#define IRQ8_VECTOR IRQ0_VECTOR + 8 -#define IRQ9_VECTOR IRQ0_VECTOR + 9 -#define IRQ10_VECTOR IRQ0_VECTOR + 10 -#define IRQ11_VECTOR IRQ0_VECTOR + 11 -#define IRQ12_VECTOR IRQ0_VECTOR + 12 -#define IRQ13_VECTOR IRQ0_VECTOR + 13 -#define IRQ14_VECTOR IRQ0_VECTOR + 14 -#define IRQ15_VECTOR IRQ0_VECTOR + 15 +#define IRQ0_VECTOR (FIRST_EXTERNAL_VECTOR + 0x10) +#define IRQ1_VECTOR (IRQ0_VECTOR + 1) +#define IRQ2_VECTOR (IRQ0_VECTOR + 2) +#define IRQ3_VECTOR (IRQ0_VECTOR + 3) +#define IRQ4_VECTOR (IRQ0_VECTOR + 4) +#define IRQ5_VECTOR (IRQ0_VECTOR + 5) +#define IRQ6_VECTOR (IRQ0_VECTOR + 6) +#define IRQ7_VECTOR (IRQ0_VECTOR + 7) +#define IRQ8_VECTOR (IRQ0_VECTOR + 8) +#define IRQ9_VECTOR (IRQ0_VECTOR + 9) +#define IRQ10_VECTOR (IRQ0_VECTOR + 10) +#define IRQ11_VECTOR (IRQ0_VECTOR + 11) +#define IRQ12_VECTOR (IRQ0_VECTOR + 12) +#define IRQ13_VECTOR (IRQ0_VECTOR + 13) +#define IRQ14_VECTOR (IRQ0_VECTOR + 14) +#define IRQ15_VECTOR (IRQ0_VECTOR + 15) /* * Special IRQ vectors used by the SMP architecture, 0xf0-0xff -- cgit v1.2.3 From 7e02cb941ddc129158c276648c10a69dca7d36d3 Mon Sep 17 00:00:00 2001 From: Adrian Bunk Date: Wed, 17 Oct 2007 18:04:38 +0200 Subject: x86: rename .i assembler includes to .h .i is an ending used for preprocessed stuff. This patch therefore renames assembler include files to .h and guards the contents with an #ifdef __ASSEMBLY__. [ tglx: arch/x86 adaptation ] Signed-off-by: Adrian Bunk Signed-off-by: Andi Kleen Signed-off-by: Ingo Molnar Signed-off-by: Thomas Gleixner --- arch/x86/lib/rwlock_64.S | 2 +- arch/x86/lib/semaphore_32.S | 4 ++-- include/asm-um/alternative-asm.h | 6 ++++++ include/asm-um/alternative-asm.i | 6 ------ include/asm-um/frame.h | 6 ++++++ include/asm-um/frame.i | 6 ------ include/asm-x86/alternative-asm.h | 22 ++++++++++++++++++++++ include/asm-x86/alternative-asm.i | 5 ----- include/asm-x86/alternative-asm_32.i | 12 ------------ include/asm-x86/alternative-asm_64.i | 12 ------------ include/asm-x86/frame.h | 27 +++++++++++++++++++++++++++ include/asm-x86/frame.i | 23 ----------------------- 12 files changed, 64 insertions(+), 67 deletions(-) create mode 100644 include/asm-um/alternative-asm.h delete mode 100644 include/asm-um/alternative-asm.i create mode 100644 include/asm-um/frame.h delete mode 100644 include/asm-um/frame.i create mode 100644 include/asm-x86/alternative-asm.h delete mode 100644 include/asm-x86/alternative-asm.i delete mode 100644 include/asm-x86/alternative-asm_32.i delete mode 100644 include/asm-x86/alternative-asm_64.i create mode 100644 include/asm-x86/frame.h delete mode 100644 include/asm-x86/frame.i diff --git a/arch/x86/lib/rwlock_64.S b/arch/x86/lib/rwlock_64.S index 0cde1f80731..05ea55f7140 100644 --- a/arch/x86/lib/rwlock_64.S +++ b/arch/x86/lib/rwlock_64.S @@ -2,7 +2,7 @@ #include #include -#include +#include #include /* rdi: pointer to rwlock_t */ diff --git a/arch/x86/lib/semaphore_32.S b/arch/x86/lib/semaphore_32.S index c01eb39c0b4..444fba40098 100644 --- a/arch/x86/lib/semaphore_32.S +++ b/arch/x86/lib/semaphore_32.S @@ -15,8 +15,8 @@ #include #include -#include -#include +#include +#include #include /* diff --git a/include/asm-um/alternative-asm.h b/include/asm-um/alternative-asm.h new file mode 100644 index 00000000000..9aa9fa2402a --- /dev/null +++ b/include/asm-um/alternative-asm.h @@ -0,0 +1,6 @@ +#ifndef __UM_ALTERNATIVE_ASM_I +#define __UM_ALTERNATIVE_ASM_I + +#include "asm/arch/alternative-asm.h" + +#endif diff --git a/include/asm-um/alternative-asm.i b/include/asm-um/alternative-asm.i deleted file mode 100644 index cae9faca132..00000000000 --- a/include/asm-um/alternative-asm.i +++ /dev/null @@ -1,6 +0,0 @@ -#ifndef __UM_ALTERNATIVE_ASM_I -#define __UM_ALTERNATIVE_ASM_I - -#include "asm/arch/alternative-asm.i" - -#endif diff --git a/include/asm-um/frame.h b/include/asm-um/frame.h new file mode 100644 index 00000000000..8a8c1cb415b --- /dev/null +++ b/include/asm-um/frame.h @@ -0,0 +1,6 @@ +#ifndef __UM_FRAME_I +#define __UM_FRAME_I + +#include "asm/arch/frame.h" + +#endif diff --git a/include/asm-um/frame.i b/include/asm-um/frame.i deleted file mode 100644 index 09d5dca5d92..00000000000 --- a/include/asm-um/frame.i +++ /dev/null @@ -1,6 +0,0 @@ -#ifndef __UM_FRAME_I -#define __UM_FRAME_I - -#include "asm/arch/frame.i" - -#endif diff --git a/include/asm-x86/alternative-asm.h b/include/asm-x86/alternative-asm.h new file mode 100644 index 00000000000..e2077d343c3 --- /dev/null +++ b/include/asm-x86/alternative-asm.h @@ -0,0 +1,22 @@ +#ifdef __ASSEMBLY__ + +#ifdef CONFIG_X86_32 +# define X86_ALIGN .long +#else +# define X86_ALIGN .quad +#endif + +#ifdef CONFIG_SMP + .macro LOCK_PREFIX +1: lock + .section .smp_locks,"a" + .align 4 + X86_ALIGN 1b + .previous + .endm +#else + .macro LOCK_PREFIX + .endm +#endif + +#endif /* __ASSEMBLY__ */ diff --git a/include/asm-x86/alternative-asm.i b/include/asm-x86/alternative-asm.i deleted file mode 100644 index 4f360cd3c88..00000000000 --- a/include/asm-x86/alternative-asm.i +++ /dev/null @@ -1,5 +0,0 @@ -#ifdef CONFIG_X86_32 -# include "alternative-asm_32.i" -#else -# include "alternative-asm_64.i" -#endif diff --git a/include/asm-x86/alternative-asm_32.i b/include/asm-x86/alternative-asm_32.i deleted file mode 100644 index f0510209ccb..00000000000 --- a/include/asm-x86/alternative-asm_32.i +++ /dev/null @@ -1,12 +0,0 @@ -#ifdef CONFIG_SMP - .macro LOCK_PREFIX -1: lock - .section .smp_locks,"a" - .align 4 - .long 1b - .previous - .endm -#else - .macro LOCK_PREFIX - .endm -#endif diff --git a/include/asm-x86/alternative-asm_64.i b/include/asm-x86/alternative-asm_64.i deleted file mode 100644 index 0b3f1a2bb2c..00000000000 --- a/include/asm-x86/alternative-asm_64.i +++ /dev/null @@ -1,12 +0,0 @@ -#ifdef CONFIG_SMP - .macro LOCK_PREFIX -1: lock - .section .smp_locks,"a" - .align 8 - .quad 1b - .previous - .endm -#else - .macro LOCK_PREFIX - .endm -#endif diff --git a/include/asm-x86/frame.h b/include/asm-x86/frame.h new file mode 100644 index 00000000000..06850a7194e --- /dev/null +++ b/include/asm-x86/frame.h @@ -0,0 +1,27 @@ +#ifdef __ASSEMBLY__ + +#include + +/* The annotation hides the frame from the unwinder and makes it look + like a ordinary ebp save/restore. This avoids some special cases for + frame pointer later */ +#ifdef CONFIG_FRAME_POINTER + .macro FRAME + pushl %ebp + CFI_ADJUST_CFA_OFFSET 4 + CFI_REL_OFFSET ebp,0 + movl %esp,%ebp + .endm + .macro ENDFRAME + popl %ebp + CFI_ADJUST_CFA_OFFSET -4 + CFI_RESTORE ebp + .endm +#else + .macro FRAME + .endm + .macro ENDFRAME + .endm +#endif + +#endif /* __ASSEMBLY__ */ diff --git a/include/asm-x86/frame.i b/include/asm-x86/frame.i deleted file mode 100644 index 03620251ae1..00000000000 --- a/include/asm-x86/frame.i +++ /dev/null @@ -1,23 +0,0 @@ -#include - -/* The annotation hides the frame from the unwinder and makes it look - like a ordinary ebp save/restore. This avoids some special cases for - frame pointer later */ -#ifdef CONFIG_FRAME_POINTER - .macro FRAME - pushl %ebp - CFI_ADJUST_CFA_OFFSET 4 - CFI_REL_OFFSET ebp,0 - movl %esp,%ebp - .endm - .macro ENDFRAME - popl %ebp - CFI_ADJUST_CFA_OFFSET -4 - CFI_RESTORE ebp - .endm -#else - .macro FRAME - .endm - .macro ENDFRAME - .endm -#endif -- cgit v1.2.3 From ffecad95eed621a82e8131b929cfcc3bb2a10d46 Mon Sep 17 00:00:00 2001 From: Satyam Sharma Date: Wed, 17 Oct 2007 18:04:38 +0200 Subject: i386: fix argument signedness warnings These build warnings: In file included from include/asm/thread_info.h:16, from include/linux/thread_info.h:21, from include/linux/preempt.h:9, from include/linux/spinlock.h:49, from include/linux/vmalloc.h:4, from arch/i386/boot/compressed/misc.c:14: include/asm/processor.h: In function cpuid_count include/asm/processor.h:615: warning: pointer targets in passing argument 1 of native_cpuid differ in signedness include/asm/processor.h:615: warning: pointer targets in passing argument 2 of native_cpuid differ in signedness include/asm/processor.h:615: warning: pointer targets in passing argument 3 of native_cpuid differ in signedness include/asm/processor.h:615: warning: pointer targets in passing argument 4 of native_cpuid differ in signedness come because the arguments have been specified as pointers to (signed) int types, not unsigned. So let's specify those as unsigned. Do some codingstyle here and there while at it. [ tglx: arch/x86 adaptation ] Signed-off-by: Satyam Sharma Signed-off-by: Andi Kleen Signed-off-by: Ingo Molnar Signed-off-by: Thomas Gleixner --- include/asm-x86/processor_32.h | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/include/asm-x86/processor_32.h b/include/asm-x86/processor_32.h index 3845fe72383..38cc1061487 100644 --- a/include/asm-x86/processor_32.h +++ b/include/asm-x86/processor_32.h @@ -595,7 +595,9 @@ static inline void load_esp0(struct tss_struct *tss, struct thread_struct *threa * clear %ecx since some cpus (Cyrix MII) do not set or clear %ecx * resulting in stale register contents being returned. */ -static inline void cpuid(unsigned int op, unsigned int *eax, unsigned int *ebx, unsigned int *ecx, unsigned int *edx) +static inline void cpuid(unsigned int op, + unsigned int *eax, unsigned int *ebx, + unsigned int *ecx, unsigned int *edx) { *eax = op; *ecx = 0; @@ -603,8 +605,9 @@ static inline void cpuid(unsigned int op, unsigned int *eax, unsigned int *ebx, } /* Some CPUID calls want 'count' to be placed in ecx */ -static inline void cpuid_count(int op, int count, int *eax, int *ebx, int *ecx, - int *edx) +static inline void cpuid_count(unsigned int op, int count, + unsigned int *eax, unsigned int *ebx, + unsigned int *ecx, unsigned int *edx) { *eax = op; *ecx = count; -- cgit v1.2.3 From 909dd324fb57ad690c38c4e3d52337defa099ce8 Mon Sep 17 00:00:00 2001 From: Andi Kleen Date: Wed, 17 Oct 2007 18:04:38 +0200 Subject: x86: clean up mce= argument parsing slightly Move the = into the __setup line. Document the option in kernel-parameters.txt by adding a pointer to the x86-64 specific documentation. [ tglx: arch/x86 adaptation ] Pointed out by Robert Day Signed-off-by: Andi Kleen Signed-off-by: Ingo Molnar Signed-off-by: Thomas Gleixner --- Documentation/kernel-parameters.txt | 2 ++ arch/x86/kernel/mce_64.c | 4 +--- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/Documentation/kernel-parameters.txt b/Documentation/kernel-parameters.txt index 63bda363708..98cf90f2631 100644 --- a/Documentation/kernel-parameters.txt +++ b/Documentation/kernel-parameters.txt @@ -994,6 +994,8 @@ and is between 256 and 4096 characters. It is defined in the file mce [X86-32] Machine Check Exception + mce=option [X86-64] See Documentation/x86_64/boot-options.txt + md= [HW] RAID subsystems devices and level See Documentation/md.txt. diff --git a/arch/x86/kernel/mce_64.c b/arch/x86/kernel/mce_64.c index 97d2b757d6b..8ca8f864896 100644 --- a/arch/x86/kernel/mce_64.c +++ b/arch/x86/kernel/mce_64.c @@ -695,8 +695,6 @@ static int __init mcheck_disable(char *str) mce=nobootlog Don't log MCEs from before booting. */ static int __init mcheck_enable(char *str) { - if (*str == '=') - str++; if (!strcmp(str, "off")) mce_dont_init = 1; else if (!strcmp(str, "bootlog") || !strcmp(str,"nobootlog")) @@ -709,7 +707,7 @@ static int __init mcheck_enable(char *str) } __setup("nomce", mcheck_disable); -__setup("mce", mcheck_enable); +__setup("mce=", mcheck_enable); /* * Sysfs support -- cgit v1.2.3 From d1e084746b0e5806e6345ab31c5b370f8dee2b23 Mon Sep 17 00:00:00 2001 From: Jan Beulich Date: Wed, 17 Oct 2007 18:04:39 +0200 Subject: i386: constify wd_ops .. as they're, with a single exception, never written to. [ tglx: arch/x86 adaptation ] Signed-off-by: Jan Beulich Signed-off-by: Andi Kleen Signed-off-by: Ingo Molnar Signed-off-by: Thomas Gleixner --- arch/x86/kernel/cpu/perfctr-watchdog.c | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/arch/x86/kernel/cpu/perfctr-watchdog.c b/arch/x86/kernel/cpu/perfctr-watchdog.c index 93fecd4b03d..54cdbf1a40f 100644 --- a/arch/x86/kernel/cpu/perfctr-watchdog.c +++ b/arch/x86/kernel/cpu/perfctr-watchdog.c @@ -34,7 +34,7 @@ struct wd_ops { u64 checkbit; }; -static struct wd_ops *wd_ops; +static const struct wd_ops *wd_ops; /* this number is calculated from Intel's MSR_P4_CRU_ESCR5 register and it's * offset from MSR_P4_BSU_ESCR0. It will be the max for all platforms (for now) @@ -317,7 +317,7 @@ static void single_msr_rearm(struct nmi_watchdog_ctlblk *wd, unsigned nmi_hz) write_watchdog_counter(wd->perfctr_msr, NULL, nmi_hz); } -static struct wd_ops k7_wd_ops = { +static const struct wd_ops k7_wd_ops = { .reserve = single_msr_reserve, .unreserve = single_msr_unreserve, .setup = setup_k7_watchdog, @@ -380,7 +380,7 @@ static void p6_rearm(struct nmi_watchdog_ctlblk *wd, unsigned nmi_hz) write_watchdog_counter32(wd->perfctr_msr, NULL,nmi_hz); } -static struct wd_ops p6_wd_ops = { +static const struct wd_ops p6_wd_ops = { .reserve = single_msr_reserve, .unreserve = single_msr_unreserve, .setup = setup_p6_watchdog, @@ -532,7 +532,7 @@ static void p4_rearm(struct nmi_watchdog_ctlblk *wd, unsigned nmi_hz) write_watchdog_counter(wd->perfctr_msr, NULL, nmi_hz); } -static struct wd_ops p4_wd_ops = { +static const struct wd_ops p4_wd_ops = { .reserve = p4_reserve, .unreserve = p4_unreserve, .setup = setup_p4_watchdog, @@ -550,6 +550,8 @@ static struct wd_ops p4_wd_ops = { #define ARCH_PERFMON_NMI_EVENT_SEL ARCH_PERFMON_UNHALTED_CORE_CYCLES_SEL #define ARCH_PERFMON_NMI_EVENT_UMASK ARCH_PERFMON_UNHALTED_CORE_CYCLES_UMASK +static struct wd_ops intel_arch_wd_ops; + static int setup_intel_arch_watchdog(unsigned nmi_hz) { unsigned int ebx; @@ -591,11 +593,11 @@ static int setup_intel_arch_watchdog(unsigned nmi_hz) wd->perfctr_msr = perfctr_msr; wd->evntsel_msr = evntsel_msr; wd->cccr_msr = 0; //unused - wd_ops->checkbit = 1ULL << (eax.split.bit_width - 1); + intel_arch_wd_ops.checkbit = 1ULL << (eax.split.bit_width - 1); return 1; } -static struct wd_ops intel_arch_wd_ops = { +static struct wd_ops intel_arch_wd_ops __read_mostly = { .reserve = single_msr_reserve, .unreserve = single_msr_unreserve, .setup = setup_intel_arch_watchdog, -- cgit v1.2.3 From d9a629430368549b2e46d79076a6174a1e3a2645 Mon Sep 17 00:00:00 2001 From: Stefan Richter Date: Wed, 17 Oct 2007 18:04:39 +0200 Subject: x86: configure HPET_EMULATE_RTC automatically It needs to be automatic. The HPET legacy interrupt mode disconnects the RTC interrupt and connects the interrupt of the second HPET channel. [ tglx: arch/x86 adaptation and comment fixup] Signed-off-by: Stefan Richter Signed-off-by: Andi Kleen Signed-off-by: Ingo Molnar Signed-off-by: Thomas Gleixner --- arch/x86_64/Kconfig | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/arch/x86_64/Kconfig b/arch/x86_64/Kconfig index 85f958c2f55..43fafe9e9c0 100644 --- a/arch/x86_64/Kconfig +++ b/arch/x86_64/Kconfig @@ -473,8 +473,9 @@ config HPET_TIMER . config HPET_EMULATE_RTC - bool "Provide RTC interrupt" + bool depends on HPET_TIMER && RTC=y + default y # Mark as embedded because too many people got it wrong. # The code disables itself when not needed. -- cgit v1.2.3 From 6b556ffc4b8fc71445156bcdd02a16a364a36356 Mon Sep 17 00:00:00 2001 From: Thomas Gleixner Date: Wed, 17 Oct 2007 18:04:39 +0200 Subject: x86: cleanup 64bit unistd.h sys_iopl is long gone and there is no reason to declare sys_rt_sigaction here. Remove it all together and fix the whitespace mess as well. It's worth the trouble: 25897 -> 21337 bytes, the win is larger than the memory of my first computer :) Signed-off-by: Thomas Gleixner Signed-off-by: Ingo Molnar --- include/asm-x86/unistd_64.h | 617 +++++++++++++++++++++----------------------- 1 file changed, 301 insertions(+), 316 deletions(-) diff --git a/include/asm-x86/unistd_64.h b/include/asm-x86/unistd_64.h index 4f769598aba..5ff4d3e24c3 100644 --- a/include/asm-x86/unistd_64.h +++ b/include/asm-x86/unistd_64.h @@ -2,635 +2,638 @@ #define _ASM_X86_64_UNISTD_H_ #ifndef __SYSCALL -#define __SYSCALL(a,b) +#define __SYSCALL(a,b) #endif /* * This file contains the system call numbers. - * + * * Note: holes are not allowed. */ /* at least 8 syscall per cacheline */ -#define __NR_read 0 +#define __NR_read 0 __SYSCALL(__NR_read, sys_read) -#define __NR_write 1 +#define __NR_write 1 __SYSCALL(__NR_write, sys_write) -#define __NR_open 2 +#define __NR_open 2 __SYSCALL(__NR_open, sys_open) -#define __NR_close 3 +#define __NR_close 3 __SYSCALL(__NR_close, sys_close) -#define __NR_stat 4 +#define __NR_stat 4 __SYSCALL(__NR_stat, sys_newstat) -#define __NR_fstat 5 +#define __NR_fstat 5 __SYSCALL(__NR_fstat, sys_newfstat) -#define __NR_lstat 6 +#define __NR_lstat 6 __SYSCALL(__NR_lstat, sys_newlstat) -#define __NR_poll 7 +#define __NR_poll 7 __SYSCALL(__NR_poll, sys_poll) -#define __NR_lseek 8 +#define __NR_lseek 8 __SYSCALL(__NR_lseek, sys_lseek) -#define __NR_mmap 9 +#define __NR_mmap 9 __SYSCALL(__NR_mmap, sys_mmap) -#define __NR_mprotect 10 +#define __NR_mprotect 10 __SYSCALL(__NR_mprotect, sys_mprotect) -#define __NR_munmap 11 +#define __NR_munmap 11 __SYSCALL(__NR_munmap, sys_munmap) -#define __NR_brk 12 +#define __NR_brk 12 __SYSCALL(__NR_brk, sys_brk) -#define __NR_rt_sigaction 13 +#define __NR_rt_sigaction 13 __SYSCALL(__NR_rt_sigaction, sys_rt_sigaction) -#define __NR_rt_sigprocmask 14 +#define __NR_rt_sigprocmask 14 __SYSCALL(__NR_rt_sigprocmask, sys_rt_sigprocmask) -#define __NR_rt_sigreturn 15 +#define __NR_rt_sigreturn 15 __SYSCALL(__NR_rt_sigreturn, stub_rt_sigreturn) -#define __NR_ioctl 16 +#define __NR_ioctl 16 __SYSCALL(__NR_ioctl, sys_ioctl) -#define __NR_pread64 17 +#define __NR_pread64 17 __SYSCALL(__NR_pread64, sys_pread64) -#define __NR_pwrite64 18 +#define __NR_pwrite64 18 __SYSCALL(__NR_pwrite64, sys_pwrite64) -#define __NR_readv 19 +#define __NR_readv 19 __SYSCALL(__NR_readv, sys_readv) -#define __NR_writev 20 +#define __NR_writev 20 __SYSCALL(__NR_writev, sys_writev) -#define __NR_access 21 +#define __NR_access 21 __SYSCALL(__NR_access, sys_access) -#define __NR_pipe 22 +#define __NR_pipe 22 __SYSCALL(__NR_pipe, sys_pipe) -#define __NR_select 23 +#define __NR_select 23 __SYSCALL(__NR_select, sys_select) -#define __NR_sched_yield 24 +#define __NR_sched_yield 24 __SYSCALL(__NR_sched_yield, sys_sched_yield) -#define __NR_mremap 25 +#define __NR_mremap 25 __SYSCALL(__NR_mremap, sys_mremap) -#define __NR_msync 26 +#define __NR_msync 26 __SYSCALL(__NR_msync, sys_msync) -#define __NR_mincore 27 +#define __NR_mincore 27 __SYSCALL(__NR_mincore, sys_mincore) -#define __NR_madvise 28 +#define __NR_madvise 28 __SYSCALL(__NR_madvise, sys_madvise) -#define __NR_shmget 29 +#define __NR_shmget 29 __SYSCALL(__NR_shmget, sys_shmget) -#define __NR_shmat 30 +#define __NR_shmat 30 __SYSCALL(__NR_shmat, sys_shmat) -#define __NR_shmctl 31 +#define __NR_shmctl 31 __SYSCALL(__NR_shmctl, sys_shmctl) -#define __NR_dup 32 +#define __NR_dup 32 __SYSCALL(__NR_dup, sys_dup) -#define __NR_dup2 33 +#define __NR_dup2 33 __SYSCALL(__NR_dup2, sys_dup2) -#define __NR_pause 34 +#define __NR_pause 34 __SYSCALL(__NR_pause, sys_pause) -#define __NR_nanosleep 35 +#define __NR_nanosleep 35 __SYSCALL(__NR_nanosleep, sys_nanosleep) -#define __NR_getitimer 36 +#define __NR_getitimer 36 __SYSCALL(__NR_getitimer, sys_getitimer) -#define __NR_alarm 37 +#define __NR_alarm 37 __SYSCALL(__NR_alarm, sys_alarm) -#define __NR_setitimer 38 +#define __NR_setitimer 38 __SYSCALL(__NR_setitimer, sys_setitimer) -#define __NR_getpid 39 +#define __NR_getpid 39 __SYSCALL(__NR_getpid, sys_getpid) -#define __NR_sendfile 40 +#define __NR_sendfile 40 __SYSCALL(__NR_sendfile, sys_sendfile64) -#define __NR_socket 41 +#define __NR_socket 41 __SYSCALL(__NR_socket, sys_socket) -#define __NR_connect 42 +#define __NR_connect 42 __SYSCALL(__NR_connect, sys_connect) -#define __NR_accept 43 +#define __NR_accept 43 __SYSCALL(__NR_accept, sys_accept) -#define __NR_sendto 44 +#define __NR_sendto 44 __SYSCALL(__NR_sendto, sys_sendto) -#define __NR_recvfrom 45 +#define __NR_recvfrom 45 __SYSCALL(__NR_recvfrom, sys_recvfrom) -#define __NR_sendmsg 46 +#define __NR_sendmsg 46 __SYSCALL(__NR_sendmsg, sys_sendmsg) -#define __NR_recvmsg 47 +#define __NR_recvmsg 47 __SYSCALL(__NR_recvmsg, sys_recvmsg) -#define __NR_shutdown 48 +#define __NR_shutdown 48 __SYSCALL(__NR_shutdown, sys_shutdown) -#define __NR_bind 49 +#define __NR_bind 49 __SYSCALL(__NR_bind, sys_bind) -#define __NR_listen 50 +#define __NR_listen 50 __SYSCALL(__NR_listen, sys_listen) -#define __NR_getsockname 51 +#define __NR_getsockname 51 __SYSCALL(__NR_getsockname, sys_getsockname) -#define __NR_getpeername 52 +#define __NR_getpeername 52 __SYSCALL(__NR_getpeername, sys_getpeername) -#define __NR_socketpair 53 +#define __NR_socketpair 53 __SYSCALL(__NR_socketpair, sys_socketpair) -#define __NR_setsockopt 54 +#define __NR_setsockopt 54 __SYSCALL(__NR_setsockopt, sys_setsockopt) -#define __NR_getsockopt 55 +#define __NR_getsockopt 55 __SYSCALL(__NR_getsockopt, sys_getsockopt) -#define __NR_clone 56 +#define __NR_clone 56 __SYSCALL(__NR_clone, stub_clone) -#define __NR_fork 57 -__SYSCALL(__NR_fork, stub_fork) -#define __NR_vfork 58 +#define __NR_fork 57 +__SYSCALL(__NR_fork, stub_fork) +#define __NR_vfork 58 __SYSCALL(__NR_vfork, stub_vfork) -#define __NR_execve 59 +#define __NR_execve 59 __SYSCALL(__NR_execve, stub_execve) -#define __NR_exit 60 +#define __NR_exit 60 __SYSCALL(__NR_exit, sys_exit) -#define __NR_wait4 61 +#define __NR_wait4 61 __SYSCALL(__NR_wait4, sys_wait4) -#define __NR_kill 62 +#define __NR_kill 62 __SYSCALL(__NR_kill, sys_kill) -#define __NR_uname 63 +#define __NR_uname 63 __SYSCALL(__NR_uname, sys_uname) -#define __NR_semget 64 +#define __NR_semget 64 __SYSCALL(__NR_semget, sys_semget) -#define __NR_semop 65 +#define __NR_semop 65 __SYSCALL(__NR_semop, sys_semop) -#define __NR_semctl 66 +#define __NR_semctl 66 __SYSCALL(__NR_semctl, sys_semctl) -#define __NR_shmdt 67 +#define __NR_shmdt 67 __SYSCALL(__NR_shmdt, sys_shmdt) -#define __NR_msgget 68 +#define __NR_msgget 68 __SYSCALL(__NR_msgget, sys_msgget) -#define __NR_msgsnd 69 +#define __NR_msgsnd 69 __SYSCALL(__NR_msgsnd, sys_msgsnd) -#define __NR_msgrcv 70 +#define __NR_msgrcv 70 __SYSCALL(__NR_msgrcv, sys_msgrcv) -#define __NR_msgctl 71 +#define __NR_msgctl 71 __SYSCALL(__NR_msgctl, sys_msgctl) -#define __NR_fcntl 72 +#define __NR_fcntl 72 __SYSCALL(__NR_fcntl, sys_fcntl) -#define __NR_flock 73 +#define __NR_flock 73 __SYSCALL(__NR_flock, sys_flock) -#define __NR_fsync 74 +#define __NR_fsync 74 __SYSCALL(__NR_fsync, sys_fsync) -#define __NR_fdatasync 75 +#define __NR_fdatasync 75 __SYSCALL(__NR_fdatasync, sys_fdatasync) -#define __NR_truncate 76 +#define __NR_truncate 76 __SYSCALL(__NR_truncate, sys_truncate) -#define __NR_ftruncate 77 +#define __NR_ftruncate 77 __SYSCALL(__NR_ftruncate, sys_ftruncate) -#define __NR_getdents 78 +#define __NR_getdents 78 __SYSCALL(__NR_getdents, sys_getdents) -#define __NR_getcwd 79 +#define __NR_getcwd 79 __SYSCALL(__NR_getcwd, sys_getcwd) -#define __NR_chdir 80 +#define __NR_chdir 80 __SYSCALL(__NR_chdir, sys_chdir) -#define __NR_fchdir 81 +#define __NR_fchdir 81 __SYSCALL(__NR_fchdir, sys_fchdir) -#define __NR_rename 82 +#define __NR_rename 82 __SYSCALL(__NR_rename, sys_rename) -#define __NR_mkdir 83 +#define __NR_mkdir 83 __SYSCALL(__NR_mkdir, sys_mkdir) -#define __NR_rmdir 84 +#define __NR_rmdir 84 __SYSCALL(__NR_rmdir, sys_rmdir) -#define __NR_creat 85 +#define __NR_creat 85 __SYSCALL(__NR_creat, sys_creat) -#define __NR_link 86 +#define __NR_link 86 __SYSCALL(__NR_link, sys_link) -#define __NR_unlink 87 +#define __NR_unlink 87 __SYSCALL(__NR_unlink, sys_unlink) -#define __NR_symlink 88 +#define __NR_symlink 88 __SYSCALL(__NR_symlink, sys_symlink) -#define __NR_readlink 89 +#define __NR_readlink 89 __SYSCALL(__NR_readlink, sys_readlink) -#define __NR_chmod 90 +#define __NR_chmod 90 __SYSCALL(__NR_chmod, sys_chmod) -#define __NR_fchmod 91 +#define __NR_fchmod 91 __SYSCALL(__NR_fchmod, sys_fchmod) -#define __NR_chown 92 +#define __NR_chown 92 __SYSCALL(__NR_chown, sys_chown) -#define __NR_fchown 93 +#define __NR_fchown 93 __SYSCALL(__NR_fchown, sys_fchown) -#define __NR_lchown 94 +#define __NR_lchown 94 __SYSCALL(__NR_lchown, sys_lchown) -#define __NR_umask 95 +#define __NR_umask 95 __SYSCALL(__NR_umask, sys_umask) -#define __NR_gettimeofday 96 +#define __NR_gettimeofday 96 __SYSCALL(__NR_gettimeofday, sys_gettimeofday) -#define __NR_getrlimit 97 +#define __NR_getrlimit 97 __SYSCALL(__NR_getrlimit, sys_getrlimit) -#define __NR_getrusage 98 +#define __NR_getrusage 98 __SYSCALL(__NR_getrusage, sys_getrusage) -#define __NR_sysinfo 99 +#define __NR_sysinfo 99 __SYSCALL(__NR_sysinfo, sys_sysinfo) -#define __NR_times 100 +#define __NR_times 100 __SYSCALL(__NR_times, sys_times) -#define __NR_ptrace 101 +#define __NR_ptrace 101 __SYSCALL(__NR_ptrace, sys_ptrace) -#define __NR_getuid 102 +#define __NR_getuid 102 __SYSCALL(__NR_getuid, sys_getuid) -#define __NR_syslog 103 +#define __NR_syslog 103 __SYSCALL(__NR_syslog, sys_syslog) /* at the very end the stuff that never runs during the benchmarks */ -#define __NR_getgid 104 +#define __NR_getgid 104 __SYSCALL(__NR_getgid, sys_getgid) -#define __NR_setuid 105 +#define __NR_setuid 105 __SYSCALL(__NR_setuid, sys_setuid) -#define __NR_setgid 106 +#define __NR_setgid 106 __SYSCALL(__NR_setgid, sys_setgid) -#define __NR_geteuid 107 +#define __NR_geteuid 107 __SYSCALL(__NR_geteuid, sys_geteuid) -#define __NR_getegid 108 +#define __NR_getegid 108 __SYSCALL(__NR_getegid, sys_getegid) -#define __NR_setpgid 109 +#define __NR_setpgid 109 __SYSCALL(__NR_setpgid, sys_setpgid) -#define __NR_getppid 110 +#define __NR_getppid 110 __SYSCALL(__NR_getppid, sys_getppid) -#define __NR_getpgrp 111 +#define __NR_getpgrp 111 __SYSCALL(__NR_getpgrp, sys_getpgrp) -#define __NR_setsid 112 +#define __NR_setsid 112 __SYSCALL(__NR_setsid, sys_setsid) -#define __NR_setreuid 113 +#define __NR_setreuid 113 __SYSCALL(__NR_setreuid, sys_setreuid) -#define __NR_setregid 114 +#define __NR_setregid 114 __SYSCALL(__NR_setregid, sys_setregid) -#define __NR_getgroups 115 +#define __NR_getgroups 115 __SYSCALL(__NR_getgroups, sys_getgroups) -#define __NR_setgroups 116 +#define __NR_setgroups 116 __SYSCALL(__NR_setgroups, sys_setgroups) -#define __NR_setresuid 117 +#define __NR_setresuid 117 __SYSCALL(__NR_setresuid, sys_setresuid) -#define __NR_getresuid 118 +#define __NR_getresuid 118 __SYSCALL(__NR_getresuid, sys_getresuid) -#define __NR_setresgid 119 +#define __NR_setresgid 119 __SYSCALL(__NR_setresgid, sys_setresgid) -#define __NR_getresgid 120 +#define __NR_getresgid 120 __SYSCALL(__NR_getresgid, sys_getresgid) -#define __NR_getpgid 121 +#define __NR_getpgid 121 __SYSCALL(__NR_getpgid, sys_getpgid) -#define __NR_setfsuid 122 +#define __NR_setfsuid 122 __SYSCALL(__NR_setfsuid, sys_setfsuid) -#define __NR_setfsgid 123 +#define __NR_setfsgid 123 __SYSCALL(__NR_setfsgid, sys_setfsgid) -#define __NR_getsid 124 +#define __NR_getsid 124 __SYSCALL(__NR_getsid, sys_getsid) -#define __NR_capget 125 +#define __NR_capget 125 __SYSCALL(__NR_capget, sys_capget) -#define __NR_capset 126 +#define __NR_capset 126 __SYSCALL(__NR_capset, sys_capset) -#define __NR_rt_sigpending 127 +#define __NR_rt_sigpending 127 __SYSCALL(__NR_rt_sigpending, sys_rt_sigpending) -#define __NR_rt_sigtimedwait 128 +#define __NR_rt_sigtimedwait 128 __SYSCALL(__NR_rt_sigtimedwait, sys_rt_sigtimedwait) -#define __NR_rt_sigqueueinfo 129 +#define __NR_rt_sigqueueinfo 129 __SYSCALL(__NR_rt_sigqueueinfo, sys_rt_sigqueueinfo) -#define __NR_rt_sigsuspend 130 +#define __NR_rt_sigsuspend 130 __SYSCALL(__NR_rt_sigsuspend, stub_rt_sigsuspend) -#define __NR_sigaltstack 131 +#define __NR_sigaltstack 131 __SYSCALL(__NR_sigaltstack, stub_sigaltstack) -#define __NR_utime 132 +#define __NR_utime 132 __SYSCALL(__NR_utime, sys_utime) -#define __NR_mknod 133 +#define __NR_mknod 133 __SYSCALL(__NR_mknod, sys_mknod) /* Only needed for a.out */ -#define __NR_uselib 134 +#define __NR_uselib 134 __SYSCALL(__NR_uselib, sys_ni_syscall) -#define __NR_personality 135 +#define __NR_personality 135 __SYSCALL(__NR_personality, sys_personality) -#define __NR_ustat 136 +#define __NR_ustat 136 __SYSCALL(__NR_ustat, sys_ustat) -#define __NR_statfs 137 +#define __NR_statfs 137 __SYSCALL(__NR_statfs, sys_statfs) -#define __NR_fstatfs 138 +#define __NR_fstatfs 138 __SYSCALL(__NR_fstatfs, sys_fstatfs) -#define __NR_sysfs 139 +#define __NR_sysfs 139 __SYSCALL(__NR_sysfs, sys_sysfs) -#define __NR_getpriority 140 +#define __NR_getpriority 140 __SYSCALL(__NR_getpriority, sys_getpriority) -#define __NR_setpriority 141 +#define __NR_setpriority 141 __SYSCALL(__NR_setpriority, sys_setpriority) -#define __NR_sched_setparam 142 +#define __NR_sched_setparam 142 __SYSCALL(__NR_sched_setparam, sys_sched_setparam) -#define __NR_sched_getparam 143 +#define __NR_sched_getparam 143 __SYSCALL(__NR_sched_getparam, sys_sched_getparam) -#define __NR_sched_setscheduler 144 +#define __NR_sched_setscheduler 144 __SYSCALL(__NR_sched_setscheduler, sys_sched_setscheduler) -#define __NR_sched_getscheduler 145 +#define __NR_sched_getscheduler 145 __SYSCALL(__NR_sched_getscheduler, sys_sched_getscheduler) -#define __NR_sched_get_priority_max 146 +#define __NR_sched_get_priority_max 146 __SYSCALL(__NR_sched_get_priority_max, sys_sched_get_priority_max) -#define __NR_sched_get_priority_min 147 +#define __NR_sched_get_priority_min 147 __SYSCALL(__NR_sched_get_priority_min, sys_sched_get_priority_min) -#define __NR_sched_rr_get_interval 148 +#define __NR_sched_rr_get_interval 148 __SYSCALL(__NR_sched_rr_get_interval, sys_sched_rr_get_interval) -#define __NR_mlock 149 +#define __NR_mlock 149 __SYSCALL(__NR_mlock, sys_mlock) -#define __NR_munlock 150 +#define __NR_munlock 150 __SYSCALL(__NR_munlock, sys_munlock) -#define __NR_mlockall 151 +#define __NR_mlockall 151 __SYSCALL(__NR_mlockall, sys_mlockall) -#define __NR_munlockall 152 +#define __NR_munlockall 152 __SYSCALL(__NR_munlockall, sys_munlockall) -#define __NR_vhangup 153 +#define __NR_vhangup 153 __SYSCALL(__NR_vhangup, sys_vhangup) -#define __NR_modify_ldt 154 +#define __NR_modify_ldt 154 __SYSCALL(__NR_modify_ldt, sys_modify_ldt) -#define __NR_pivot_root 155 +#define __NR_pivot_root 155 __SYSCALL(__NR_pivot_root, sys_pivot_root) -#define __NR__sysctl 156 +#define __NR__sysctl 156 __SYSCALL(__NR__sysctl, sys_sysctl) -#define __NR_prctl 157 +#define __NR_prctl 157 __SYSCALL(__NR_prctl, sys_prctl) -#define __NR_arch_prctl 158 -__SYSCALL(__NR_arch_prctl, sys_arch_prctl) +#define __NR_arch_prctl 158 +__SYSCALL(__NR_arch_prctl, sys_arch_prctl) -#define __NR_adjtimex 159 +#define __NR_adjtimex 159 __SYSCALL(__NR_adjtimex, sys_adjtimex) -#define __NR_setrlimit 160 +#define __NR_setrlimit 160 __SYSCALL(__NR_setrlimit, sys_setrlimit) -#define __NR_chroot 161 +#define __NR_chroot 161 __SYSCALL(__NR_chroot, sys_chroot) -#define __NR_sync 162 +#define __NR_sync 162 __SYSCALL(__NR_sync, sys_sync) -#define __NR_acct 163 +#define __NR_acct 163 __SYSCALL(__NR_acct, sys_acct) -#define __NR_settimeofday 164 +#define __NR_settimeofday 164 __SYSCALL(__NR_settimeofday, sys_settimeofday) -#define __NR_mount 165 +#define __NR_mount 165 __SYSCALL(__NR_mount, sys_mount) -#define __NR_umount2 166 +#define __NR_umount2 166 __SYSCALL(__NR_umount2, sys_umount) -#define __NR_swapon 167 +#define __NR_swapon 167 __SYSCALL(__NR_swapon, sys_swapon) -#define __NR_swapoff 168 +#define __NR_swapoff 168 __SYSCALL(__NR_swapoff, sys_swapoff) -#define __NR_reboot 169 +#define __NR_reboot 169 __SYSCALL(__NR_reboot, sys_reboot) -#define __NR_sethostname 170 +#define __NR_sethostname 170 __SYSCALL(__NR_sethostname, sys_sethostname) -#define __NR_setdomainname 171 +#define __NR_setdomainname 171 __SYSCALL(__NR_setdomainname, sys_setdomainname) -#define __NR_iopl 172 +#define __NR_iopl 172 __SYSCALL(__NR_iopl, stub_iopl) -#define __NR_ioperm 173 +#define __NR_ioperm 173 __SYSCALL(__NR_ioperm, sys_ioperm) -#define __NR_create_module 174 +#define __NR_create_module 174 __SYSCALL(__NR_create_module, sys_ni_syscall) -#define __NR_init_module 175 +#define __NR_init_module 175 __SYSCALL(__NR_init_module, sys_init_module) -#define __NR_delete_module 176 +#define __NR_delete_module 176 __SYSCALL(__NR_delete_module, sys_delete_module) -#define __NR_get_kernel_syms 177 +#define __NR_get_kernel_syms 177 __SYSCALL(__NR_get_kernel_syms, sys_ni_syscall) -#define __NR_query_module 178 +#define __NR_query_module 178 __SYSCALL(__NR_query_module, sys_ni_syscall) -#define __NR_quotactl 179 +#define __NR_quotactl 179 __SYSCALL(__NR_quotactl, sys_quotactl) -#define __NR_nfsservctl 180 +#define __NR_nfsservctl 180 __SYSCALL(__NR_nfsservctl, sys_nfsservctl) -#define __NR_getpmsg 181 /* reserved for LiS/STREAMS */ +/* reserved for LiS/STREAMS */ +#define __NR_getpmsg 181 __SYSCALL(__NR_getpmsg, sys_ni_syscall) -#define __NR_putpmsg 182 /* reserved for LiS/STREAMS */ +#define __NR_putpmsg 182 __SYSCALL(__NR_putpmsg, sys_ni_syscall) -#define __NR_afs_syscall 183 /* reserved for AFS */ +/* reserved for AFS */ +#define __NR_afs_syscall 183 __SYSCALL(__NR_afs_syscall, sys_ni_syscall) -#define __NR_tuxcall 184 /* reserved for tux */ +/* reserved for tux */ +#define __NR_tuxcall 184 __SYSCALL(__NR_tuxcall, sys_ni_syscall) -#define __NR_security 185 +#define __NR_security 185 __SYSCALL(__NR_security, sys_ni_syscall) -#define __NR_gettid 186 +#define __NR_gettid 186 __SYSCALL(__NR_gettid, sys_gettid) -#define __NR_readahead 187 +#define __NR_readahead 187 __SYSCALL(__NR_readahead, sys_readahead) -#define __NR_setxattr 188 +#define __NR_setxattr 188 __SYSCALL(__NR_setxattr, sys_setxattr) -#define __NR_lsetxattr 189 +#define __NR_lsetxattr 189 __SYSCALL(__NR_lsetxattr, sys_lsetxattr) -#define __NR_fsetxattr 190 +#define __NR_fsetxattr 190 __SYSCALL(__NR_fsetxattr, sys_fsetxattr) -#define __NR_getxattr 191 +#define __NR_getxattr 191 __SYSCALL(__NR_getxattr, sys_getxattr) -#define __NR_lgetxattr 192 +#define __NR_lgetxattr 192 __SYSCALL(__NR_lgetxattr, sys_lgetxattr) -#define __NR_fgetxattr 193 -__SYSCALL(__NR_fgetxattr, sys_fgetxattr) -#define __NR_listxattr 194 -__SYSCALL(__NR_listxattr, sys_listxattr) -#define __NR_llistxattr 195 -__SYSCALL(__NR_llistxattr, sys_llistxattr) -#define __NR_flistxattr 196 -__SYSCALL(__NR_flistxattr, sys_flistxattr) -#define __NR_removexattr 197 -__SYSCALL(__NR_removexattr, sys_removexattr) -#define __NR_lremovexattr 198 -__SYSCALL(__NR_lremovexattr, sys_lremovexattr) -#define __NR_fremovexattr 199 -__SYSCALL(__NR_fremovexattr, sys_fremovexattr) -#define __NR_tkill 200 -__SYSCALL(__NR_tkill, sys_tkill) -#define __NR_time 201 +#define __NR_fgetxattr 193 +__SYSCALL(__NR_fgetxattr, sys_fgetxattr) +#define __NR_listxattr 194 +__SYSCALL(__NR_listxattr, sys_listxattr) +#define __NR_llistxattr 195 +__SYSCALL(__NR_llistxattr, sys_llistxattr) +#define __NR_flistxattr 196 +__SYSCALL(__NR_flistxattr, sys_flistxattr) +#define __NR_removexattr 197 +__SYSCALL(__NR_removexattr, sys_removexattr) +#define __NR_lremovexattr 198 +__SYSCALL(__NR_lremovexattr, sys_lremovexattr) +#define __NR_fremovexattr 199 +__SYSCALL(__NR_fremovexattr, sys_fremovexattr) +#define __NR_tkill 200 +__SYSCALL(__NR_tkill, sys_tkill) +#define __NR_time 201 __SYSCALL(__NR_time, sys_time) -#define __NR_futex 202 +#define __NR_futex 202 __SYSCALL(__NR_futex, sys_futex) -#define __NR_sched_setaffinity 203 +#define __NR_sched_setaffinity 203 __SYSCALL(__NR_sched_setaffinity, sys_sched_setaffinity) -#define __NR_sched_getaffinity 204 +#define __NR_sched_getaffinity 204 __SYSCALL(__NR_sched_getaffinity, sys_sched_getaffinity) -#define __NR_set_thread_area 205 +#define __NR_set_thread_area 205 __SYSCALL(__NR_set_thread_area, sys_ni_syscall) /* use arch_prctl */ -#define __NR_io_setup 206 +#define __NR_io_setup 206 __SYSCALL(__NR_io_setup, sys_io_setup) -#define __NR_io_destroy 207 +#define __NR_io_destroy 207 __SYSCALL(__NR_io_destroy, sys_io_destroy) -#define __NR_io_getevents 208 +#define __NR_io_getevents 208 __SYSCALL(__NR_io_getevents, sys_io_getevents) -#define __NR_io_submit 209 +#define __NR_io_submit 209 __SYSCALL(__NR_io_submit, sys_io_submit) -#define __NR_io_cancel 210 +#define __NR_io_cancel 210 __SYSCALL(__NR_io_cancel, sys_io_cancel) -#define __NR_get_thread_area 211 +#define __NR_get_thread_area 211 __SYSCALL(__NR_get_thread_area, sys_ni_syscall) /* use arch_prctl */ -#define __NR_lookup_dcookie 212 +#define __NR_lookup_dcookie 212 __SYSCALL(__NR_lookup_dcookie, sys_lookup_dcookie) -#define __NR_epoll_create 213 +#define __NR_epoll_create 213 __SYSCALL(__NR_epoll_create, sys_epoll_create) -#define __NR_epoll_ctl_old 214 +#define __NR_epoll_ctl_old 214 __SYSCALL(__NR_epoll_ctl_old, sys_ni_syscall) -#define __NR_epoll_wait_old 215 +#define __NR_epoll_wait_old 215 __SYSCALL(__NR_epoll_wait_old, sys_ni_syscall) -#define __NR_remap_file_pages 216 +#define __NR_remap_file_pages 216 __SYSCALL(__NR_remap_file_pages, sys_remap_file_pages) -#define __NR_getdents64 217 +#define __NR_getdents64 217 __SYSCALL(__NR_getdents64, sys_getdents64) -#define __NR_set_tid_address 218 +#define __NR_set_tid_address 218 __SYSCALL(__NR_set_tid_address, sys_set_tid_address) -#define __NR_restart_syscall 219 +#define __NR_restart_syscall 219 __SYSCALL(__NR_restart_syscall, sys_restart_syscall) -#define __NR_semtimedop 220 +#define __NR_semtimedop 220 __SYSCALL(__NR_semtimedop, sys_semtimedop) -#define __NR_fadvise64 221 +#define __NR_fadvise64 221 __SYSCALL(__NR_fadvise64, sys_fadvise64) -#define __NR_timer_create 222 +#define __NR_timer_create 222 __SYSCALL(__NR_timer_create, sys_timer_create) -#define __NR_timer_settime 223 +#define __NR_timer_settime 223 __SYSCALL(__NR_timer_settime, sys_timer_settime) -#define __NR_timer_gettime 224 +#define __NR_timer_gettime 224 __SYSCALL(__NR_timer_gettime, sys_timer_gettime) -#define __NR_timer_getoverrun 225 +#define __NR_timer_getoverrun 225 __SYSCALL(__NR_timer_getoverrun, sys_timer_getoverrun) -#define __NR_timer_delete 226 +#define __NR_timer_delete 226 __SYSCALL(__NR_timer_delete, sys_timer_delete) -#define __NR_clock_settime 227 +#define __NR_clock_settime 227 __SYSCALL(__NR_clock_settime, sys_clock_settime) -#define __NR_clock_gettime 228 +#define __NR_clock_gettime 228 __SYSCALL(__NR_clock_gettime, sys_clock_gettime) -#define __NR_clock_getres 229 +#define __NR_clock_getres 229 __SYSCALL(__NR_clock_getres, sys_clock_getres) -#define __NR_clock_nanosleep 230 +#define __NR_clock_nanosleep 230 __SYSCALL(__NR_clock_nanosleep, sys_clock_nanosleep) -#define __NR_exit_group 231 +#define __NR_exit_group 231 __SYSCALL(__NR_exit_group, sys_exit_group) -#define __NR_epoll_wait 232 +#define __NR_epoll_wait 232 __SYSCALL(__NR_epoll_wait, sys_epoll_wait) -#define __NR_epoll_ctl 233 +#define __NR_epoll_ctl 233 __SYSCALL(__NR_epoll_ctl, sys_epoll_ctl) -#define __NR_tgkill 234 +#define __NR_tgkill 234 __SYSCALL(__NR_tgkill, sys_tgkill) -#define __NR_utimes 235 +#define __NR_utimes 235 __SYSCALL(__NR_utimes, sys_utimes) -#define __NR_vserver 236 +#define __NR_vserver 236 __SYSCALL(__NR_vserver, sys_ni_syscall) -#define __NR_mbind 237 +#define __NR_mbind 237 __SYSCALL(__NR_mbind, sys_mbind) -#define __NR_set_mempolicy 238 +#define __NR_set_mempolicy 238 __SYSCALL(__NR_set_mempolicy, sys_set_mempolicy) -#define __NR_get_mempolicy 239 +#define __NR_get_mempolicy 239 __SYSCALL(__NR_get_mempolicy, sys_get_mempolicy) -#define __NR_mq_open 240 +#define __NR_mq_open 240 __SYSCALL(__NR_mq_open, sys_mq_open) -#define __NR_mq_unlink 241 +#define __NR_mq_unlink 241 __SYSCALL(__NR_mq_unlink, sys_mq_unlink) -#define __NR_mq_timedsend 242 +#define __NR_mq_timedsend 242 __SYSCALL(__NR_mq_timedsend, sys_mq_timedsend) -#define __NR_mq_timedreceive 243 +#define __NR_mq_timedreceive 243 __SYSCALL(__NR_mq_timedreceive, sys_mq_timedreceive) -#define __NR_mq_notify 244 +#define __NR_mq_notify 244 __SYSCALL(__NR_mq_notify, sys_mq_notify) -#define __NR_mq_getsetattr 245 +#define __NR_mq_getsetattr 245 __SYSCALL(__NR_mq_getsetattr, sys_mq_getsetattr) -#define __NR_kexec_load 246 +#define __NR_kexec_load 246 __SYSCALL(__NR_kexec_load, sys_kexec_load) -#define __NR_waitid 247 +#define __NR_waitid 247 __SYSCALL(__NR_waitid, sys_waitid) -#define __NR_add_key 248 +#define __NR_add_key 248 __SYSCALL(__NR_add_key, sys_add_key) -#define __NR_request_key 249 +#define __NR_request_key 249 __SYSCALL(__NR_request_key, sys_request_key) -#define __NR_keyctl 250 +#define __NR_keyctl 250 __SYSCALL(__NR_keyctl, sys_keyctl) -#define __NR_ioprio_set 251 +#define __NR_ioprio_set 251 __SYSCALL(__NR_ioprio_set, sys_ioprio_set) -#define __NR_ioprio_get 252 +#define __NR_ioprio_get 252 __SYSCALL(__NR_ioprio_get, sys_ioprio_get) -#define __NR_inotify_init 253 +#define __NR_inotify_init 253 __SYSCALL(__NR_inotify_init, sys_inotify_init) -#define __NR_inotify_add_watch 254 +#define __NR_inotify_add_watch 254 __SYSCALL(__NR_inotify_add_watch, sys_inotify_add_watch) -#define __NR_inotify_rm_watch 255 +#define __NR_inotify_rm_watch 255 __SYSCALL(__NR_inotify_rm_watch, sys_inotify_rm_watch) -#define __NR_migrate_pages 256 +#define __NR_migrate_pages 256 __SYSCALL(__NR_migrate_pages, sys_migrate_pages) -#define __NR_openat 257 +#define __NR_openat 257 __SYSCALL(__NR_openat, sys_openat) -#define __NR_mkdirat 258 +#define __NR_mkdirat 258 __SYSCALL(__NR_mkdirat, sys_mkdirat) -#define __NR_mknodat 259 +#define __NR_mknodat 259 __SYSCALL(__NR_mknodat, sys_mknodat) -#define __NR_fchownat 260 +#define __NR_fchownat 260 __SYSCALL(__NR_fchownat, sys_fchownat) -#define __NR_futimesat 261 +#define __NR_futimesat 261 __SYSCALL(__NR_futimesat, sys_futimesat) -#define __NR_newfstatat 262 +#define __NR_newfstatat 262 __SYSCALL(__NR_newfstatat, sys_newfstatat) -#define __NR_unlinkat 263 +#define __NR_unlinkat 263 __SYSCALL(__NR_unlinkat, sys_unlinkat) -#define __NR_renameat 264 +#define __NR_renameat 264 __SYSCALL(__NR_renameat, sys_renameat) -#define __NR_linkat 265 +#define __NR_linkat 265 __SYSCALL(__NR_linkat, sys_linkat) -#define __NR_symlinkat 266 +#define __NR_symlinkat 266 __SYSCALL(__NR_symlinkat, sys_symlinkat) -#define __NR_readlinkat 267 +#define __NR_readlinkat 267 __SYSCALL(__NR_readlinkat, sys_readlinkat) -#define __NR_fchmodat 268 +#define __NR_fchmodat 268 __SYSCALL(__NR_fchmodat, sys_fchmodat) -#define __NR_faccessat 269 +#define __NR_faccessat 269 __SYSCALL(__NR_faccessat, sys_faccessat) -#define __NR_pselect6 270 +#define __NR_pselect6 270 __SYSCALL(__NR_pselect6, sys_pselect6) -#define __NR_ppoll 271 +#define __NR_ppoll 271 __SYSCALL(__NR_ppoll, sys_ppoll) -#define __NR_unshare 272 +#define __NR_unshare 272 __SYSCALL(__NR_unshare, sys_unshare) -#define __NR_set_robust_list 273 +#define __NR_set_robust_list 273 __SYSCALL(__NR_set_robust_list, sys_set_robust_list) -#define __NR_get_robust_list 274 +#define __NR_get_robust_list 274 __SYSCALL(__NR_get_robust_list, sys_get_robust_list) -#define __NR_splice 275 +#define __NR_splice 275 __SYSCALL(__NR_splice, sys_splice) -#define __NR_tee 276 +#define __NR_tee 276 __SYSCALL(__NR_tee, sys_tee) -#define __NR_sync_file_range 277 +#define __NR_sync_file_range 277 __SYSCALL(__NR_sync_file_range, sys_sync_file_range) -#define __NR_vmsplice 278 +#define __NR_vmsplice 278 __SYSCALL(__NR_vmsplice, sys_vmsplice) -#define __NR_move_pages 279 +#define __NR_move_pages 279 __SYSCALL(__NR_move_pages, sys_move_pages) -#define __NR_utimensat 280 +#define __NR_utimensat 280 __SYSCALL(__NR_utimensat, sys_utimensat) #define __IGNORE_getcpu /* implemented as a vsyscall */ -#define __NR_epoll_pwait 281 +#define __NR_epoll_pwait 281 __SYSCALL(__NR_epoll_pwait, sys_epoll_pwait) -#define __NR_signalfd 282 +#define __NR_signalfd 282 __SYSCALL(__NR_signalfd, sys_signalfd) -#define __NR_timerfd 283 +#define __NR_timerfd 283 __SYSCALL(__NR_timerfd, sys_timerfd) -#define __NR_eventfd 284 +#define __NR_eventfd 284 __SYSCALL(__NR_eventfd, sys_eventfd) -#define __NR_fallocate 285 +#define __NR_fallocate 285 __SYSCALL(__NR_fallocate, sys_fallocate) #ifndef __NO_STUBS @@ -656,24 +659,6 @@ __SYSCALL(__NR_fallocate, sys_fallocate) #define __ARCH_WANT_SYS_RT_SIGSUSPEND #define __ARCH_WANT_SYS_TIME #define __ARCH_WANT_COMPAT_SYS_TIME - -#ifdef __KERNEL__ -#ifndef __ASSEMBLY__ - -#include -#include -#include -#include - -asmlinkage long sys_iopl(unsigned int level, struct pt_regs *regs); -struct sigaction; -asmlinkage long sys_rt_sigaction(int sig, - const struct sigaction __user *act, - struct sigaction __user *oact, - size_t sigsetsize); - -#endif /* __ASSEMBLY__ */ -#endif /* __KERNEL__ */ #endif /* __NO_STUBS */ #ifdef __KERNEL__ -- cgit v1.2.3 From 98c9e27a56a2d9f9148992b0b9a9a36760ea4eb9 Mon Sep 17 00:00:00 2001 From: Mike Travis Date: Wed, 17 Oct 2007 18:04:39 +0200 Subject: x86: fix cpu_to_node references In x86_64 and i386 architectures most arrays that are sized using NR_CPUS lay in local memory on node 0. Not only will most (99%?) of the systems not use all the slots in these arrays, particularly when NR_CPUS is increased to accommodate future very high cpu count systems, but a number of cache lines are passed unnecessarily on the system bus when these arrays are referenced by cpus on other nodes. Typically, the values in these arrays are referenced by the cpu accessing it's own values, though when passing IPI interrupts, the cpu does access the data relevant to the targeted cpu/node. Of course, if the referencing cpu is not on node 0, then the reference will still require cross node exchanges of cache lines. A common use of this is for an interrupt service routine to pass the interrupt to other cpus local to that node. Ideally, all the elements in these arrays should be moved to the per_cpu data area. In some cases (such as x86_cpu_to_apicid) the array is referenced before the per_cpu data areas are setup. In this case, a static array is declared in the __initdata area and initialized by the booting cpu (BSP). The values are then moved to the per_cpu area after it is initialized and the original static array is freed with the rest of the __initdata. This patch: Fix four instances where cpu_to_node is referenced by array instead of via the cpu_to_node macro. This is preparation to moving it to the per_cpu data area. Signed-off-by: Mike Travis Cc: Andi Kleen Cc: Christoph Lameter Cc: "Siddha, Suresh B" Signed-off-by: Andrew Morton Signed-off-by: Ingo Molnar Signed-off-by: Thomas Gleixner --- arch/x86/kernel/vsyscall_64.c | 2 +- arch/x86/mm/numa_64.c | 4 ++-- arch/x86/mm/srat_64.c | 4 ++-- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/arch/x86/kernel/vsyscall_64.c b/arch/x86/kernel/vsyscall_64.c index 93847d84815..5684e5a1282 100644 --- a/arch/x86/kernel/vsyscall_64.c +++ b/arch/x86/kernel/vsyscall_64.c @@ -289,7 +289,7 @@ static void __cpuinit vsyscall_set_cpu(int cpu) unsigned long *d; unsigned long node = 0; #ifdef CONFIG_NUMA - node = cpu_to_node[cpu]; + node = cpu_to_node(cpu); #endif if (cpu_has(&cpu_data[cpu], X86_FEATURE_RDTSCP)) write_rdtscp_aux((node << 12) | cpu); diff --git a/arch/x86/mm/numa_64.c b/arch/x86/mm/numa_64.c index 97e8ac75568..5eec5e56d07 100644 --- a/arch/x86/mm/numa_64.c +++ b/arch/x86/mm/numa_64.c @@ -261,7 +261,7 @@ void __init numa_init_array(void) We round robin the existing nodes. */ rr = first_node(node_online_map); for (i = 0; i < NR_CPUS; i++) { - if (cpu_to_node[i] != NUMA_NO_NODE) + if (cpu_to_node(i) != NUMA_NO_NODE) continue; numa_set_node(i, rr); rr = next_node(rr, node_online_map); @@ -543,7 +543,7 @@ __cpuinit void numa_add_cpu(int cpu) void __cpuinit numa_set_node(int cpu, int node) { cpu_pda(cpu)->nodenumber = node; - cpu_to_node[cpu] = node; + cpu_to_node(cpu) = node; } unsigned long __init numa_free_all_bootmem(void) diff --git a/arch/x86/mm/srat_64.c b/arch/x86/mm/srat_64.c index acdf03e1914..56089ccc394 100644 --- a/arch/x86/mm/srat_64.c +++ b/arch/x86/mm/srat_64.c @@ -431,9 +431,9 @@ int __init acpi_scan_nodes(unsigned long start, unsigned long end) setup_node_bootmem(i, nodes[i].start, nodes[i].end); for (i = 0; i < NR_CPUS; i++) { - if (cpu_to_node[i] == NUMA_NO_NODE) + if (cpu_to_node(i) == NUMA_NO_NODE) continue; - if (!node_isset(cpu_to_node[i], node_possible_map)) + if (!node_isset(cpu_to_node(i), node_possible_map)) numa_set_node(i, NUMA_NO_NODE); } numa_init_array(); -- cgit v1.2.3 From 95c1e9aefa5d3a2dd61304797cad96e8fdcd95ce Mon Sep 17 00:00:00 2001 From: Adrian Bunk Date: Wed, 17 Oct 2007 18:04:39 +0200 Subject: x86: visws extern inline to static inline "extern inline" will have different semantics with gcc 4.3. Signed-off-by: Adrian Bunk Acked-by: Andrey Panin Signed-off-by: Andrew Morton Signed-off-by: Ingo Molnar Signed-off-by: Thomas Gleixner --- include/asm-x86/mach-visws/cobalt.h | 8 ++++---- include/asm-x86/mach-visws/lithium.h | 8 ++++---- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/include/asm-x86/mach-visws/cobalt.h b/include/asm-x86/mach-visws/cobalt.h index 33c36225a04..995258831b7 100644 --- a/include/asm-x86/mach-visws/cobalt.h +++ b/include/asm-x86/mach-visws/cobalt.h @@ -94,22 +94,22 @@ #define CO_IRQ_8259 CO_IRQ(CO_APIC_8259) #ifdef CONFIG_X86_VISWS_APIC -extern __inline void co_cpu_write(unsigned long reg, unsigned long v) +static inline void co_cpu_write(unsigned long reg, unsigned long v) { *((volatile unsigned long *)(CO_CPU_VADDR+reg))=v; } -extern __inline unsigned long co_cpu_read(unsigned long reg) +static inline unsigned long co_cpu_read(unsigned long reg) { return *((volatile unsigned long *)(CO_CPU_VADDR+reg)); } -extern __inline void co_apic_write(unsigned long reg, unsigned long v) +static inline void co_apic_write(unsigned long reg, unsigned long v) { *((volatile unsigned long *)(CO_APIC_VADDR+reg))=v; } -extern __inline unsigned long co_apic_read(unsigned long reg) +static inline unsigned long co_apic_read(unsigned long reg) { return *((volatile unsigned long *)(CO_APIC_VADDR+reg)); } diff --git a/include/asm-x86/mach-visws/lithium.h b/include/asm-x86/mach-visws/lithium.h index d443e68d006..dfcd4f07ab8 100644 --- a/include/asm-x86/mach-visws/lithium.h +++ b/include/asm-x86/mach-visws/lithium.h @@ -29,22 +29,22 @@ #define LI_INTD 0x0080 /* More special purpose macros... */ -extern __inline void li_pcia_write16(unsigned long reg, unsigned short v) +static inline void li_pcia_write16(unsigned long reg, unsigned short v) { *((volatile unsigned short *)(LI_PCIA_VADDR+reg))=v; } -extern __inline unsigned short li_pcia_read16(unsigned long reg) +static inline unsigned short li_pcia_read16(unsigned long reg) { return *((volatile unsigned short *)(LI_PCIA_VADDR+reg)); } -extern __inline void li_pcib_write16(unsigned long reg, unsigned short v) +static inline void li_pcib_write16(unsigned long reg, unsigned short v) { *((volatile unsigned short *)(LI_PCIB_VADDR+reg))=v; } -extern __inline unsigned short li_pcib_read16(unsigned long reg) +static inline unsigned short li_pcib_read16(unsigned long reg) { return *((volatile unsigned short *)(LI_PCIB_VADDR+reg)); } -- cgit v1.2.3 From 3c215b6680b347593705e010688e80400d772763 Mon Sep 17 00:00:00 2001 From: Andrew Morton Date: Wed, 17 Oct 2007 18:04:39 +0200 Subject: x86: asm-i386/io.h fix constness - Fix this: include/asm/io.h: In function `memcpy_fromio': include/asm/io.h:208: warning: passing argument 2 of `__memcpy' discards qualifiers from pointer target type - Clean up code a bit Reported-by: Uwe Bugla Cc: Andi Kleen Signed-off-by: Andrew Morton Signed-off-by: Ingo Molnar Signed-off-by: Thomas Gleixner --- include/asm-x86/io_32.h | 17 +++++++++++------ 1 file changed, 11 insertions(+), 6 deletions(-) diff --git a/include/asm-x86/io_32.h b/include/asm-x86/io_32.h index 4ea7b1ad3c1..fe881cd1e6f 100644 --- a/include/asm-x86/io_32.h +++ b/include/asm-x86/io_32.h @@ -199,17 +199,22 @@ static inline void writel(unsigned int b, volatile void __iomem *addr) #define mmiowb() -static inline void memset_io(volatile void __iomem *addr, unsigned char val, int count) +static inline void +memset_io(volatile void __iomem *addr, unsigned char val, int count) { - memset((void __force *) addr, val, count); + memset((void __force *)addr, val, count); } -static inline void memcpy_fromio(void *dst, const volatile void __iomem *src, int count) + +static inline void +memcpy_fromio(void *dst, const volatile void __iomem *src, int count) { - __memcpy(dst, (void __force *) src, count); + __memcpy(dst, (const void __force *)src, count); } -static inline void memcpy_toio(volatile void __iomem *dst, const void *src, int count) + +static inline void +memcpy_toio(volatile void __iomem *dst, const void *src, int count) { - __memcpy((void __force *) dst, src, count); + __memcpy((void __force *)dst, src, count); } /* -- cgit v1.2.3 From bc3c6058bc8f9845ae73f6dc727570778f103858 Mon Sep 17 00:00:00 2001 From: Muli Ben-Yehuda Date: Wed, 17 Oct 2007 18:04:39 +0200 Subject: x86: calgary get rid of translate_phb Now that we check for translation enabled/disabled based on the presence of the IOMMU translation table, we can get rid of translate_phb. Signed-off-by: Muli Ben-Yehuda Signed-off-by: Andrew Morton Signed-off-by: Ingo Molnar Signed-off-by: Thomas Gleixner --- arch/x86/kernel/pci-calgary_64.c | 33 ++++++++++++++++----------------- 1 file changed, 16 insertions(+), 17 deletions(-) diff --git a/arch/x86/kernel/pci-calgary_64.c b/arch/x86/kernel/pci-calgary_64.c index ef05cc32a3a..5098f58063a 100644 --- a/arch/x86/kernel/pci-calgary_64.c +++ b/arch/x86/kernel/pci-calgary_64.c @@ -228,12 +228,6 @@ static inline int translation_enabled(struct iommu_table *tbl) return (tbl != NULL); } -static inline int translate_phb(struct pci_dev* dev) -{ - int disabled = bus_info[dev->bus->number].translation_disabled; - return !disabled; -} - static void iommu_range_reserve(struct iommu_table *tbl, unsigned long start_addr, unsigned int npages) { @@ -394,7 +388,7 @@ static void calgary_unmap_sg(struct device *dev, struct scatterlist *s; int i; - if (!translate_enabled(tbl)) + if (!translation_enabled(tbl)) return; for_each_sg(sglist, s, nelems, i) { @@ -1200,7 +1194,7 @@ static int __init calgary_init(void) { int ret; struct pci_dev *dev = NULL; - void *tce_space; + struct calgary_bus_info *info; ret = calgary_locate_bbars(); if (ret) @@ -1212,12 +1206,14 @@ static int __init calgary_init(void) break; if (!is_cal_pci_dev(dev->device)) continue; - if (!translate_phb(dev)) { + + info = &bus_info[dev->bus->number]; + if (info->translation_disabled) { calgary_init_one_nontraslated(dev); continue; } - tce_space = bus_info[dev->bus->number].tce_space; - if (!tce_space && !translate_empty_slots) + + if (!info->tce_space && !translate_empty_slots) continue; ret = calgary_init_one(dev); @@ -1235,11 +1231,13 @@ error: break; if (!is_cal_pci_dev(dev->device)) continue; - if (!translate_phb(dev)) { + + info = &bus_info[dev->bus->number]; + if (info->translation_disabled) { pci_dev_put(dev); continue; } - if (!bus_info[dev->bus->number].tce_space && !translate_empty_slots) + if (!info->tce_space && !translate_empty_slots) continue; calgary_disable_translation(dev); @@ -1552,7 +1550,7 @@ static void __init calgary_fixup_one_tce_space(struct pci_dev *dev) static int __init calgary_fixup_tce_spaces(void) { struct pci_dev *dev = NULL; - void *tce_space; + struct calgary_bus_info *info; if (no_iommu || swiotlb || !calgary_detected) return -ENODEV; @@ -1565,11 +1563,12 @@ static int __init calgary_fixup_tce_spaces(void) break; if (!is_cal_pci_dev(dev->device)) continue; - if (!translate_phb(dev)) + + info = &bus_info[dev->bus->number]; + if (info->translation_disabled) continue; - tce_space = bus_info[dev->bus->number].tce_space; - if (!tce_space) + if (!info->tce_space) continue; calgary_fixup_one_tce_space(dev); -- cgit v1.2.3 From 06f99ac87ef3f1f706cd1eb794b16dfbfe60ee29 Mon Sep 17 00:00:00 2001 From: Roland McGrath Date: Wed, 17 Oct 2007 18:04:40 +0200 Subject: x86: vdso put vars in rodata This adds a const to the definitions vvar.c makes, so that the vdso_* variables go into .rodata instead of .data. This is essentially a cosmetic change, just giving the section headers in the vDSO file more pleasing flags. These variables are read-only from the perspective of the vDSO itself and user mode, even though the contents of the DSO image were adjusted at boot. Signed-off-by: Roland McGrath Cc: Andi Kleen Signed-off-by: Andrew Morton Signed-off-by: Ingo Molnar Signed-off-by: Thomas Gleixner --- arch/x86/vdso/vvar.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/arch/x86/vdso/vvar.c b/arch/x86/vdso/vvar.c index 6fc22219a47..1b7e703684f 100644 --- a/arch/x86/vdso/vvar.c +++ b/arch/x86/vdso/vvar.c @@ -8,5 +8,5 @@ #include #include -#define VEXTERN(x) typeof (__ ## x) *vdso_ ## x = (void *)VMAGIC; +#define VEXTERN(x) typeof (__ ## x) *const vdso_ ## x = (void *)VMAGIC; #include "vextern.h" -- cgit v1.2.3 From e2f430291fe23a4f78da078142e8fe9e94e9e043 Mon Sep 17 00:00:00 2001 From: Thomas Gleixner Date: Wed, 17 Oct 2007 18:04:40 +0200 Subject: x86: unify include/asm/mce_32/64.h Merge the files together. Signed-off-by: Thomas Gleixner Signed-off-by: Ingo Molnar --- include/asm-x86/mce.h | 128 ++++++++++++++++++++++++++++++++++++++++++++++- include/asm-x86/mce_32.h | 11 ---- include/asm-x86/mce_64.h | 115 ------------------------------------------ 3 files changed, 126 insertions(+), 128 deletions(-) delete mode 100644 include/asm-x86/mce_32.h delete mode 100644 include/asm-x86/mce_64.h diff --git a/include/asm-x86/mce.h b/include/asm-x86/mce.h index cc8ca389912..df304fd89c2 100644 --- a/include/asm-x86/mce.h +++ b/include/asm-x86/mce.h @@ -1,5 +1,129 @@ +#ifndef _ASM_X86_MCE_H +#define _ASM_X86_MCE_H + +#ifdef __x86_64__ + +#include +#include + +/* + * Machine Check support for x86 + */ + +#define MCG_CTL_P (1UL<<8) /* MCG_CAP register available */ + +#define MCG_STATUS_RIPV (1UL<<0) /* restart ip valid */ +#define MCG_STATUS_EIPV (1UL<<1) /* eip points to correct instruction */ +#define MCG_STATUS_MCIP (1UL<<2) /* machine check in progress */ + +#define MCI_STATUS_VAL (1UL<<63) /* valid error */ +#define MCI_STATUS_OVER (1UL<<62) /* previous errors lost */ +#define MCI_STATUS_UC (1UL<<61) /* uncorrected error */ +#define MCI_STATUS_EN (1UL<<60) /* error enabled */ +#define MCI_STATUS_MISCV (1UL<<59) /* misc error reg. valid */ +#define MCI_STATUS_ADDRV (1UL<<58) /* addr reg. valid */ +#define MCI_STATUS_PCC (1UL<<57) /* processor context corrupt */ + +/* Fields are zero when not available */ +struct mce { + __u64 status; + __u64 misc; + __u64 addr; + __u64 mcgstatus; + __u64 rip; + __u64 tsc; /* cpu time stamp counter */ + __u64 res1; /* for future extension */ + __u64 res2; /* dito. */ + __u8 cs; /* code segment */ + __u8 bank; /* machine check bank */ + __u8 cpu; /* cpu that raised the error */ + __u8 finished; /* entry is valid */ + __u32 pad; +}; + +/* + * This structure contains all data related to the MCE log. Also + * carries a signature to make it easier to find from external + * debugging tools. Each entry is only valid when its finished flag + * is set. + */ + +#define MCE_LOG_LEN 32 + +struct mce_log { + char signature[12]; /* "MACHINECHECK" */ + unsigned len; /* = MCE_LOG_LEN */ + unsigned next; + unsigned flags; + unsigned pad0; + struct mce entry[MCE_LOG_LEN]; +}; + +#define MCE_OVERFLOW 0 /* bit 0 in flags means overflow */ + +#define MCE_LOG_SIGNATURE "MACHINECHECK" + +#define MCE_GET_RECORD_LEN _IOR('M', 1, int) +#define MCE_GET_LOG_LEN _IOR('M', 2, int) +#define MCE_GETCLEAR_FLAGS _IOR('M', 3, int) + +/* Software defined banks */ +#define MCE_EXTENDED_BANK 128 +#define MCE_THERMAL_BANK MCE_EXTENDED_BANK + 0 + +#define K8_MCE_THRESHOLD_BASE (MCE_EXTENDED_BANK + 1) /* MCE_AMD */ +#define K8_MCE_THRESHOLD_BANK_0 (MCE_THRESHOLD_BASE + 0 * 9) +#define K8_MCE_THRESHOLD_BANK_1 (MCE_THRESHOLD_BASE + 1 * 9) +#define K8_MCE_THRESHOLD_BANK_2 (MCE_THRESHOLD_BASE + 2 * 9) +#define K8_MCE_THRESHOLD_BANK_3 (MCE_THRESHOLD_BASE + 3 * 9) +#define K8_MCE_THRESHOLD_BANK_4 (MCE_THRESHOLD_BASE + 4 * 9) +#define K8_MCE_THRESHOLD_BANK_5 (MCE_THRESHOLD_BASE + 5 * 9) +#define K8_MCE_THRESHOLD_DRAM_ECC (MCE_THRESHOLD_BANK_4 + 0) + +#endif /* __x86_64__ */ + +#ifdef __KERNEL__ + #ifdef CONFIG_X86_32 -# include "mce_32.h" +#ifdef CONFIG_X86_MCE +extern void mcheck_init(struct cpuinfo_x86 *c); #else -# include "mce_64.h" +#define mcheck_init(c) do {} while(0) +#endif + +extern int mce_disabled; + +#else /* CONFIG_X86_32 */ + +#include + +void mce_log(struct mce *m); +DECLARE_PER_CPU(struct sys_device, device_mce); + +#ifdef CONFIG_X86_MCE_INTEL +void mce_intel_feature_init(struct cpuinfo_x86 *c); +#else +static inline void mce_intel_feature_init(struct cpuinfo_x86 *c) { } +#endif + +#ifdef CONFIG_X86_MCE_AMD +void mce_amd_feature_init(struct cpuinfo_x86 *c); +#else +static inline void mce_amd_feature_init(struct cpuinfo_x86 *c) { } +#endif + +void mce_log_therm_throt_event(unsigned int cpu, __u64 status); + +extern atomic_t mce_entry; + +extern void do_machine_check(struct pt_regs *, long); +extern int mce_notify_user(void); + +#endif /* !CONFIG_X86_32 */ + +extern void stop_mce(void); +extern void restart_mce(void); + +#endif /* __KERNEL__ */ + #endif diff --git a/include/asm-x86/mce_32.h b/include/asm-x86/mce_32.h deleted file mode 100644 index d56d89742e8..00000000000 --- a/include/asm-x86/mce_32.h +++ /dev/null @@ -1,11 +0,0 @@ -#ifdef CONFIG_X86_MCE -extern void mcheck_init(struct cpuinfo_x86 *c); -#else -#define mcheck_init(c) do {} while(0) -#endif - -extern int mce_disabled; - -extern void stop_mce(void); -extern void restart_mce(void); - diff --git a/include/asm-x86/mce_64.h b/include/asm-x86/mce_64.h deleted file mode 100644 index 7bc030a1996..00000000000 --- a/include/asm-x86/mce_64.h +++ /dev/null @@ -1,115 +0,0 @@ -#ifndef _ASM_MCE_H -#define _ASM_MCE_H 1 - -#include -#include - -/* - * Machine Check support for x86 - */ - -#define MCG_CTL_P (1UL<<8) /* MCG_CAP register available */ - -#define MCG_STATUS_RIPV (1UL<<0) /* restart ip valid */ -#define MCG_STATUS_EIPV (1UL<<1) /* eip points to correct instruction */ -#define MCG_STATUS_MCIP (1UL<<2) /* machine check in progress */ - -#define MCI_STATUS_VAL (1UL<<63) /* valid error */ -#define MCI_STATUS_OVER (1UL<<62) /* previous errors lost */ -#define MCI_STATUS_UC (1UL<<61) /* uncorrected error */ -#define MCI_STATUS_EN (1UL<<60) /* error enabled */ -#define MCI_STATUS_MISCV (1UL<<59) /* misc error reg. valid */ -#define MCI_STATUS_ADDRV (1UL<<58) /* addr reg. valid */ -#define MCI_STATUS_PCC (1UL<<57) /* processor context corrupt */ - -/* Fields are zero when not available */ -struct mce { - __u64 status; - __u64 misc; - __u64 addr; - __u64 mcgstatus; - __u64 rip; - __u64 tsc; /* cpu time stamp counter */ - __u64 res1; /* for future extension */ - __u64 res2; /* dito. */ - __u8 cs; /* code segment */ - __u8 bank; /* machine check bank */ - __u8 cpu; /* cpu that raised the error */ - __u8 finished; /* entry is valid */ - __u32 pad; -}; - -/* - * This structure contains all data related to the MCE log. - * Also carries a signature to make it easier to find from external debugging tools. - * Each entry is only valid when its finished flag is set. - */ - -#define MCE_LOG_LEN 32 - -struct mce_log { - char signature[12]; /* "MACHINECHECK" */ - unsigned len; /* = MCE_LOG_LEN */ - unsigned next; - unsigned flags; - unsigned pad0; - struct mce entry[MCE_LOG_LEN]; -}; - -#define MCE_OVERFLOW 0 /* bit 0 in flags means overflow */ - -#define MCE_LOG_SIGNATURE "MACHINECHECK" - -#define MCE_GET_RECORD_LEN _IOR('M', 1, int) -#define MCE_GET_LOG_LEN _IOR('M', 2, int) -#define MCE_GETCLEAR_FLAGS _IOR('M', 3, int) - -/* Software defined banks */ -#define MCE_EXTENDED_BANK 128 -#define MCE_THERMAL_BANK MCE_EXTENDED_BANK + 0 - -#define K8_MCE_THRESHOLD_BASE (MCE_EXTENDED_BANK + 1) /* MCE_AMD */ -#define K8_MCE_THRESHOLD_BANK_0 (MCE_THRESHOLD_BASE + 0 * 9) -#define K8_MCE_THRESHOLD_BANK_1 (MCE_THRESHOLD_BASE + 1 * 9) -#define K8_MCE_THRESHOLD_BANK_2 (MCE_THRESHOLD_BASE + 2 * 9) -#define K8_MCE_THRESHOLD_BANK_3 (MCE_THRESHOLD_BASE + 3 * 9) -#define K8_MCE_THRESHOLD_BANK_4 (MCE_THRESHOLD_BASE + 4 * 9) -#define K8_MCE_THRESHOLD_BANK_5 (MCE_THRESHOLD_BASE + 5 * 9) -#define K8_MCE_THRESHOLD_DRAM_ECC (MCE_THRESHOLD_BANK_4 + 0) - -#ifdef __KERNEL__ -#include - -void mce_log(struct mce *m); -DECLARE_PER_CPU(struct sys_device, device_mce); - -#ifdef CONFIG_X86_MCE_INTEL -void mce_intel_feature_init(struct cpuinfo_x86 *c); -#else -static inline void mce_intel_feature_init(struct cpuinfo_x86 *c) -{ -} -#endif - -#ifdef CONFIG_X86_MCE_AMD -void mce_amd_feature_init(struct cpuinfo_x86 *c); -#else -static inline void mce_amd_feature_init(struct cpuinfo_x86 *c) -{ -} -#endif - -void mce_log_therm_throt_event(unsigned int cpu, __u64 status); - -extern atomic_t mce_entry; - -extern void do_machine_check(struct pt_regs *, long); - -extern int mce_notify_user(void); - -extern void stop_mce(void); -extern void restart_mce(void); - -#endif - -#endif -- cgit v1.2.3 From 686d8c63d530a5cfdbab2523825e37b904be56f9 Mon Sep 17 00:00:00 2001 From: Thomas Gleixner Date: Wed, 17 Oct 2007 18:04:40 +0200 Subject: x86: unify include/asm/ptrace-abi_32/64.h Aside of the register defines the content can be shared. Signed-off-by: Thomas Gleixner Signed-off-by: Ingo Molnar --- include/asm-x86/Kbuild | 2 - include/asm-x86/ptrace-abi.h | 90 ++++++++++++++++++++++++++++++++++++----- include/asm-x86/ptrace-abi_32.h | 39 ------------------ include/asm-x86/ptrace-abi_64.h | 51 ----------------------- 4 files changed, 79 insertions(+), 103 deletions(-) delete mode 100644 include/asm-x86/ptrace-abi_32.h delete mode 100644 include/asm-x86/ptrace-abi_64.h diff --git a/include/asm-x86/Kbuild b/include/asm-x86/Kbuild index 80744dbcfaf..30f22442872 100644 --- a/include/asm-x86/Kbuild +++ b/include/asm-x86/Kbuild @@ -9,8 +9,6 @@ header-y += ldt_64.h header-y += ldt.h header-y += msr-index.h header-y += prctl.h -header-y += ptrace-abi_32.h -header-y += ptrace-abi_64.h header-y += ptrace-abi.h header-y += sigcontext32.h header-y += ucontext_32.h diff --git a/include/asm-x86/ptrace-abi.h b/include/asm-x86/ptrace-abi.h index 6824c49def1..7524e123383 100644 --- a/include/asm-x86/ptrace-abi.h +++ b/include/asm-x86/ptrace-abi.h @@ -1,13 +1,81 @@ -#ifdef __KERNEL__ -# ifdef CONFIG_X86_32 -# include "ptrace-abi_32.h" -# else -# include "ptrace-abi_64.h" -# endif +#ifndef _ASM_X86_PTRACE_ABI_H +#define _ASM_X86_PTRACE_ABI_H + +#ifdef __i386__ + +#define EBX 0 +#define ECX 1 +#define EDX 2 +#define ESI 3 +#define EDI 4 +#define EBP 5 +#define EAX 6 +#define DS 7 +#define ES 8 +#define FS 9 +#define GS 10 +#define ORIG_EAX 11 +#define EIP 12 +#define CS 13 +#define EFL 14 +#define UESP 15 +#define SS 16 +#define FRAME_SIZE 17 + +#else /* __i386__ */ + +#if defined(__ASSEMBLY__) || defined(__FRAME_OFFSETS) +#define R15 0 +#define R14 8 +#define R13 16 +#define R12 24 +#define RBP 32 +#define RBX 40 +/* arguments: interrupts/non tracing syscalls only save upto here*/ +#define R11 48 +#define R10 56 +#define R9 64 +#define R8 72 +#define RAX 80 +#define RCX 88 +#define RDX 96 +#define RSI 104 +#define RDI 112 +#define ORIG_RAX 120 /* = ERROR */ +/* end of arguments */ +/* cpu exception frame or undefined in case of fast syscall. */ +#define RIP 128 +#define CS 136 +#define EFLAGS 144 +#define RSP 152 +#define SS 160 +#define ARGOFFSET R11 +#endif /* __ASSEMBLY__ */ + +/* top of stack page */ +#define FRAME_SIZE 168 + +#endif /* !__i386__ */ + +/* Arbitrarily choose the same ptrace numbers as used by the Sparc code. */ +#define PTRACE_GETREGS 12 +#define PTRACE_SETREGS 13 +#define PTRACE_GETFPREGS 14 +#define PTRACE_SETFPREGS 15 +#define PTRACE_GETFPXREGS 18 +#define PTRACE_SETFPXREGS 19 + +#define PTRACE_OLDSETOPTIONS 21 + +/* only useful for access 32bit programs / kernels */ +#define PTRACE_GET_THREAD_AREA 25 +#define PTRACE_SET_THREAD_AREA 26 + +#ifdef __x86_64__ +# define PTRACE_ARCH_PRCTL 30 #else -# ifdef __i386__ -# include "ptrace-abi_32.h" -# else -# include "ptrace-abi_64.h" -# endif +# define PTRACE_SYSEMU 31 +# define PTRACE_SYSEMU_SINGLESTEP 32 +#endif + #endif diff --git a/include/asm-x86/ptrace-abi_32.h b/include/asm-x86/ptrace-abi_32.h deleted file mode 100644 index a44901817a2..00000000000 --- a/include/asm-x86/ptrace-abi_32.h +++ /dev/null @@ -1,39 +0,0 @@ -#ifndef I386_PTRACE_ABI_H -#define I386_PTRACE_ABI_H - -#define EBX 0 -#define ECX 1 -#define EDX 2 -#define ESI 3 -#define EDI 4 -#define EBP 5 -#define EAX 6 -#define DS 7 -#define ES 8 -#define FS 9 -#define GS 10 -#define ORIG_EAX 11 -#define EIP 12 -#define CS 13 -#define EFL 14 -#define UESP 15 -#define SS 16 -#define FRAME_SIZE 17 - -/* Arbitrarily choose the same ptrace numbers as used by the Sparc code. */ -#define PTRACE_GETREGS 12 -#define PTRACE_SETREGS 13 -#define PTRACE_GETFPREGS 14 -#define PTRACE_SETFPREGS 15 -#define PTRACE_GETFPXREGS 18 -#define PTRACE_SETFPXREGS 19 - -#define PTRACE_OLDSETOPTIONS 21 - -#define PTRACE_GET_THREAD_AREA 25 -#define PTRACE_SET_THREAD_AREA 26 - -#define PTRACE_SYSEMU 31 -#define PTRACE_SYSEMU_SINGLESTEP 32 - -#endif diff --git a/include/asm-x86/ptrace-abi_64.h b/include/asm-x86/ptrace-abi_64.h deleted file mode 100644 index 19184b0806b..00000000000 --- a/include/asm-x86/ptrace-abi_64.h +++ /dev/null @@ -1,51 +0,0 @@ -#ifndef _X86_64_PTRACE_ABI_H -#define _X86_64_PTRACE_ABI_H - -#if defined(__ASSEMBLY__) || defined(__FRAME_OFFSETS) -#define R15 0 -#define R14 8 -#define R13 16 -#define R12 24 -#define RBP 32 -#define RBX 40 -/* arguments: interrupts/non tracing syscalls only save upto here*/ -#define R11 48 -#define R10 56 -#define R9 64 -#define R8 72 -#define RAX 80 -#define RCX 88 -#define RDX 96 -#define RSI 104 -#define RDI 112 -#define ORIG_RAX 120 /* = ERROR */ -/* end of arguments */ -/* cpu exception frame or undefined in case of fast syscall. */ -#define RIP 128 -#define CS 136 -#define EFLAGS 144 -#define RSP 152 -#define SS 160 -#define ARGOFFSET R11 -#endif /* __ASSEMBLY__ */ - -/* top of stack page */ -#define FRAME_SIZE 168 - -#define PTRACE_OLDSETOPTIONS 21 - -/* Arbitrarily choose the same ptrace numbers as used by the Sparc code. */ -#define PTRACE_GETREGS 12 -#define PTRACE_SETREGS 13 -#define PTRACE_GETFPREGS 14 -#define PTRACE_SETFPREGS 15 -#define PTRACE_GETFPXREGS 18 -#define PTRACE_SETFPXREGS 19 - -/* only useful for access 32bit programs */ -#define PTRACE_GET_THREAD_AREA 25 -#define PTRACE_SET_THREAD_AREA 26 - -#define PTRACE_ARCH_PRCTL 30 /* arch_prctl for child */ - -#endif -- cgit v1.2.3 From f6a2e7f2012eeced1dbf093bb98a1c38fee91f78 Mon Sep 17 00:00:00 2001 From: Thomas Gleixner Date: Wed, 17 Oct 2007 18:04:40 +0200 Subject: x86: unify include/asm/ldt_32/64.h The additional struct member of user_desc can be made conditional for 64 bit compiles. Signed-off-by: Thomas Gleixner Signed-off-by: Ingo Molnar --- include/asm-x86/Kbuild | 2 -- include/asm-x86/ldt.h | 51 ++++++++++++++++++++++++++++++++++++------------ include/asm-x86/ldt_32.h | 32 ------------------------------ include/asm-x86/ldt_64.h | 36 ---------------------------------- 4 files changed, 39 insertions(+), 82 deletions(-) delete mode 100644 include/asm-x86/ldt_32.h delete mode 100644 include/asm-x86/ldt_64.h diff --git a/include/asm-x86/Kbuild b/include/asm-x86/Kbuild index 30f22442872..a0c0b80c7f2 100644 --- a/include/asm-x86/Kbuild +++ b/include/asm-x86/Kbuild @@ -4,8 +4,6 @@ header-y += boot.h header-y += debugreg_32.h header-y += debugreg_64.h header-y += debugreg.h -header-y += ldt_32.h -header-y += ldt_64.h header-y += ldt.h header-y += msr-index.h header-y += prctl.h diff --git a/include/asm-x86/ldt.h b/include/asm-x86/ldt.h index 3d9cc20d2ba..20c597242b5 100644 --- a/include/asm-x86/ldt.h +++ b/include/asm-x86/ldt.h @@ -1,13 +1,40 @@ -#ifdef __KERNEL__ -# ifdef CONFIG_X86_32 -# include "ldt_32.h" -# else -# include "ldt_64.h" -# endif -#else -# ifdef __i386__ -# include "ldt_32.h" -# else -# include "ldt_64.h" -# endif +/* + * ldt.h + * + * Definitions of structures used with the modify_ldt system call. + */ +#ifndef _ASM_X86_LDT_H +#define _ASM_X86_LDT_H + +/* Maximum number of LDT entries supported. */ +#define LDT_ENTRIES 8192 +/* The size of each LDT entry. */ +#define LDT_ENTRY_SIZE 8 + +#ifndef __ASSEMBLY__ +/* + * Note on 64bit base and limit is ignored and you cannot set DS/ES/CS + * not to the default values if you still want to do syscalls. This + * call is more for 32bit mode therefore. + */ +struct user_desc { + unsigned int entry_number; + unsigned int base_addr; + unsigned int limit; + unsigned int seg_32bit:1; + unsigned int contents:2; + unsigned int read_exec_only:1; + unsigned int limit_in_pages:1; + unsigned int seg_not_present:1; + unsigned int useable:1; +#ifdef __x86_64__ + unsigned int lm:1; +#endif +}; + +#define MODIFY_LDT_CONTENTS_DATA 0 +#define MODIFY_LDT_CONTENTS_STACK 1 +#define MODIFY_LDT_CONTENTS_CODE 2 + +#endif /* !__ASSEMBLY__ */ #endif diff --git a/include/asm-x86/ldt_32.h b/include/asm-x86/ldt_32.h deleted file mode 100644 index e9d3de1dee6..00000000000 --- a/include/asm-x86/ldt_32.h +++ /dev/null @@ -1,32 +0,0 @@ -/* - * ldt.h - * - * Definitions of structures used with the modify_ldt system call. - */ -#ifndef _LINUX_LDT_H -#define _LINUX_LDT_H - -/* Maximum number of LDT entries supported. */ -#define LDT_ENTRIES 8192 -/* The size of each LDT entry. */ -#define LDT_ENTRY_SIZE 8 - -#ifndef __ASSEMBLY__ -struct user_desc { - unsigned int entry_number; - unsigned long base_addr; - unsigned int limit; - unsigned int seg_32bit:1; - unsigned int contents:2; - unsigned int read_exec_only:1; - unsigned int limit_in_pages:1; - unsigned int seg_not_present:1; - unsigned int useable:1; -}; - -#define MODIFY_LDT_CONTENTS_DATA 0 -#define MODIFY_LDT_CONTENTS_STACK 1 -#define MODIFY_LDT_CONTENTS_CODE 2 - -#endif /* !__ASSEMBLY__ */ -#endif diff --git a/include/asm-x86/ldt_64.h b/include/asm-x86/ldt_64.h deleted file mode 100644 index 9ef647b890d..00000000000 --- a/include/asm-x86/ldt_64.h +++ /dev/null @@ -1,36 +0,0 @@ -/* - * ldt.h - * - * Definitions of structures used with the modify_ldt system call. - */ -#ifndef _LINUX_LDT_H -#define _LINUX_LDT_H - -/* Maximum number of LDT entries supported. */ -#define LDT_ENTRIES 8192 -/* The size of each LDT entry. */ -#define LDT_ENTRY_SIZE 8 - -#ifndef __ASSEMBLY__ -/* Note on 64bit base and limit is ignored and you cannot set - DS/ES/CS not to the default values if you still want to do syscalls. This - call is more for 32bit mode therefore. */ -struct user_desc { - unsigned int entry_number; - unsigned int base_addr; - unsigned int limit; - unsigned int seg_32bit:1; - unsigned int contents:2; - unsigned int read_exec_only:1; - unsigned int limit_in_pages:1; - unsigned int seg_not_present:1; - unsigned int useable:1; - unsigned int lm:1; -}; - -#define MODIFY_LDT_CONTENTS_DATA 0 -#define MODIFY_LDT_CONTENTS_STACK 1 -#define MODIFY_LDT_CONTENTS_CODE 2 - -#endif /* !__ASSEMBLY__ */ -#endif -- cgit v1.2.3 From 0b4b5dde45a9416bf57c1e2e5ccf748e538368aa Mon Sep 17 00:00:00 2001 From: Thomas Gleixner Date: Wed, 17 Oct 2007 18:04:40 +0200 Subject: x86: fix dmi const-ify fallout The dmi const-ification missed acer_cpu_freq_pst. Fix it. Signed-off-by: Thomas Gleixner Signed-off-by: Ingo Molnar --- arch/x86/kernel/cpu/cpufreq/powernow-k7.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/arch/x86/kernel/cpu/cpufreq/powernow-k7.c b/arch/x86/kernel/cpu/cpufreq/powernow-k7.c index 7decd6a50ff..f3686a5f230 100644 --- a/arch/x86/kernel/cpu/cpufreq/powernow-k7.c +++ b/arch/x86/kernel/cpu/cpufreq/powernow-k7.c @@ -565,7 +565,7 @@ static unsigned int powernow_get(unsigned int cpu) } -static int __init acer_cpufreq_pst(struct dmi_system_id *d) +static int __init acer_cpufreq_pst(const struct dmi_system_id *d) { printk(KERN_WARNING "%s laptop with broken PST tables in BIOS detected.\n", d->ident); printk(KERN_WARNING "You need to downgrade to 3A21 (09/09/2002), or try a newer BIOS than 3A71 (01/20/2003)\n"); -- cgit v1.2.3 From c789c037e9d0d93d6081e796ab70b488b2ff69f2 Mon Sep 17 00:00:00 2001 From: Satyam Sharma Date: Wed, 17 Oct 2007 18:04:40 +0200 Subject: x86: call cache_add_dev() from cache_sysfs_init() explicitly Call cache_add_dev() from cache_sysfs_init() explicitly, instead of referencing the CPU notifier callback directly from generic startup code. Looks cleaner (to me at least) this way, and also makes it possible to use other tricks to replace __cpuinit{data} annotations, as recently discussed on this list. Signed-off-by: Satyam Sharma Cc: Andi Kleen Cc: Venkatesh Pallipadi Signed-off-by: Andrew Morton Signed-off-by: Ingo Molnar Signed-off-by: Thomas Gleixner --- arch/x86/kernel/cpu/intel_cacheinfo.c | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/arch/x86/kernel/cpu/intel_cacheinfo.c b/arch/x86/kernel/cpu/intel_cacheinfo.c index 6f9dd38029b..1826395ebee 100644 --- a/arch/x86/kernel/cpu/intel_cacheinfo.c +++ b/arch/x86/kernel/cpu/intel_cacheinfo.c @@ -794,8 +794,9 @@ static int __cpuinit cache_sysfs_init(void) register_hotcpu_notifier(&cacheinfo_cpu_notifier); for_each_online_cpu(i) { - cacheinfo_cpu_callback(&cacheinfo_cpu_notifier, CPU_ONLINE, - (void *)(long)i); + struct sys_device *sys_dev = get_cpu_sysdev((unsigned int)i); + + cache_add_dev(sys_dev); } return 0; -- cgit v1.2.3 From c1e3619edd2b3e17450d745e27e335490cafd78d Mon Sep 17 00:00:00 2001 From: Thomas Gleixner Date: Wed, 17 Oct 2007 18:04:40 +0200 Subject: x86: print info about late C1E detection on 32bit as well Some BIOSes set the C1E flag only on the second core. Print a warning so the Firmware Toolkit can check for it. mingo: fix C1E build bug on 32-bit Signed-off-by: Thomas Gleixner Signed-off-by: Ingo Molnar --- arch/x86/kernel/cpu/amd.c | 15 ++++++++++----- 1 file changed, 10 insertions(+), 5 deletions(-) diff --git a/arch/x86/kernel/cpu/amd.c b/arch/x86/kernel/cpu/amd.c index dcf6bbb1c7c..5f8af875f45 100644 --- a/arch/x86/kernel/cpu/amd.c +++ b/arch/x86/kernel/cpu/amd.c @@ -4,6 +4,7 @@ #include #include #include +#include #include "cpu.h" @@ -45,13 +46,17 @@ static __cpuinit int amd_apic_timer_broken(void) case CPUID_XFAM_10H: case CPUID_XFAM_11H: rdmsr(MSR_K8_ENABLE_C1E, lo, hi); - if (lo & ENABLE_C1E_MASK) + if (lo & ENABLE_C1E_MASK) { + if (smp_processor_id() != boot_cpu_physical_apicid) + printk(KERN_INFO "AMD C1E detected late. " + " Force timer broadcast.\n"); return 1; - break; - default: - /* err on the side of caution */ + } + break; + default: + /* err on the side of caution */ return 1; - } + } return 0; } #endif -- cgit v1.2.3 From 9aa8d7195acb18fc436847f6c66a97f8359ad54d Mon Sep 17 00:00:00 2001 From: Pavel Emelyanov Date: Wed, 17 Oct 2007 18:04:40 +0200 Subject: i386: clean up oops/bug reports Typically the oops first lines look like this: BUG: unable to handle kernel NULL pointer dereference at virtual address 00000000 printing eip: c049dfbd *pde = 00000000 Oops: 0002 [#1] PREEMPT SMP ... Such output is gained with some ugly if (!nl) printk("\n"); code and besides being a waste of lines, this is also annoying to read. The following output looks better (and it is how it looks on x86_64): BUG: unable to handle kernel NULL pointer dereference at virtual address 00000000 printing eip: c049dfbd *pde = 00000000 Oops: 0002 [#1] PREEMPT SMP ... [ tglx: arch/x86 adaptation ] Signed-off-by: Pavel Emelyanov Signed-off-by: Andrew Morton Signed-off-by: Andi Kleen Signed-off-by: Ingo Molnar Signed-off-by: Thomas Gleixner --- arch/x86/kernel/traps_32.c | 17 +++++------------ arch/x86/mm/fault_32.c | 13 +++++++------ 2 files changed, 12 insertions(+), 18 deletions(-) diff --git a/arch/x86/kernel/traps_32.c b/arch/x86/kernel/traps_32.c index 83a9bbbbe38..b132d3957df 100644 --- a/arch/x86/kernel/traps_32.c +++ b/arch/x86/kernel/traps_32.c @@ -398,31 +398,24 @@ void die(const char * str, struct pt_regs * regs, long err) local_save_flags(flags); if (++die.lock_owner_depth < 3) { - int nl = 0; unsigned long esp; unsigned short ss; report_bug(regs->eip, regs); - printk(KERN_EMERG "%s: %04lx [#%d]\n", str, err & 0xffff, ++die_counter); + printk(KERN_EMERG "%s: %04lx [#%d] ", str, err & 0xffff, + ++die_counter); #ifdef CONFIG_PREEMPT - printk(KERN_EMERG "PREEMPT "); - nl = 1; + printk("PREEMPT "); #endif #ifdef CONFIG_SMP - if (!nl) - printk(KERN_EMERG); printk("SMP "); - nl = 1; #endif #ifdef CONFIG_DEBUG_PAGEALLOC - if (!nl) - printk(KERN_EMERG); printk("DEBUG_PAGEALLOC"); - nl = 1; #endif - if (nl) - printk("\n"); + printk("\n"); + if (notify_die(DIE_OOPS, str, regs, err, current->thread.trap_no, SIGSEGV) != NOTIFY_STOP) { diff --git a/arch/x86/mm/fault_32.c b/arch/x86/mm/fault_32.c index c686ae20fd6..d84314ce22b 100644 --- a/arch/x86/mm/fault_32.c +++ b/arch/x86/mm/fault_32.c @@ -539,23 +539,22 @@ no_context: printk(KERN_ALERT "BUG: unable to handle kernel paging" " request"); printk(" at virtual address %08lx\n",address); - printk(KERN_ALERT " printing eip:\n"); - printk("%08lx\n", regs->eip); + printk(KERN_ALERT "printing eip: %08lx ", regs->eip); page = read_cr3(); page = ((__typeof__(page) *) __va(page))[address >> PGDIR_SHIFT]; #ifdef CONFIG_X86_PAE - printk(KERN_ALERT "*pdpt = %016Lx\n", page); + printk("*pdpt = %016Lx ", page); if ((page >> PAGE_SHIFT) < max_low_pfn && page & _PAGE_PRESENT) { page &= PAGE_MASK; page = ((__typeof__(page) *) __va(page))[(address >> PMD_SHIFT) & (PTRS_PER_PMD - 1)]; - printk(KERN_ALERT "*pde = %016Lx\n", page); + printk(KERN_ALERT "*pde = %016Lx ", page); page &= ~_PAGE_NX; } #else - printk(KERN_ALERT "*pde = %08lx\n", page); + printk("*pde = %08lx ", page); #endif /* @@ -569,8 +568,10 @@ no_context: page &= PAGE_MASK; page = ((__typeof__(page) *) __va(page))[(address >> PAGE_SHIFT) & (PTRS_PER_PTE - 1)]; - printk(KERN_ALERT "*pte = %0*Lx\n", sizeof(page)*2, (u64)page); + printk("*pte = %0*Lx ", sizeof(page)*2, (u64)page); } + + printk("\n"); } tsk->thread.cr2 = address; -- cgit v1.2.3 From 38e760a1335ffaca5a08624a9aed6fe2055c2c98 Mon Sep 17 00:00:00 2001 From: Joe Korty Date: Wed, 17 Oct 2007 18:04:40 +0200 Subject: x86: expand /proc/interrupts to include missing vectors, v2 Add missing IRQs and IRQ descriptions to /proc/interrupts. /proc/interrupts is most useful when it displays every IRQ vector in use by the system, not just those somebody thought would be interesting. This patch inserts the following vector displays to the i386 and x86_64 platforms, as appropriate: rescheduling interrupts TLB flush interrupts function call interrupts thermal event interrupts threshold interrupts spurious interrupts A threshold interrupt occurs when ECC memory correction is occuring at too high a frequency. Thresholds are used by the ECC hardware as occasional ECC failures are part of normal operation, but long sequences of ECC failures usually indicate a memory chip that is about to fail. Thermal event interrupts occur when a temperature threshold has been exceeded for some CPU chip. IIRC, a thermal interrupt is also generated when the temperature drops back to a normal level. A spurious interrupt is an interrupt that was raised then lowered by the device before it could be fully processed by the APIC. Hence the apic sees the interrupt but does not know what device it came from. For this case the APIC hardware will assume a vector of 0xff. Rescheduling, call, and TLB flush interrupts are sent from one CPU to another per the needs of the OS. Typically, their statistics would be used to discover if an interrupt flood of the given type has been occuring. AK: merged v2 and v4 which had some more tweaks AK: replace Local interrupts with Local timer interrupts AK: Fixed description of interrupt types. [ tglx: arch/x86 adaptation ] [ mingo: small cleanup ] Signed-off-by: Joe Korty Signed-off-by: Andi Kleen Cc: Tim Hockin Cc: Andi Kleen Cc: Ingo Molnar Cc: "H. Peter Anvin" Signed-off-by: Andrew Morton Signed-off-by: Ingo Molnar Signed-off-by: Thomas Gleixner --- Documentation/filesystems/proc.txt | 30 +++++++++++++++++++++++++++++- arch/x86/kernel/apic_32.c | 1 + arch/x86/kernel/apic_64.c | 1 + arch/x86/kernel/cpu/mcheck/p4.c | 1 + arch/x86/kernel/irq_32.c | 31 +++++++++++++++++++++++++++++-- arch/x86/kernel/irq_64.c | 30 ++++++++++++++++++++++++++++-- arch/x86/kernel/mce_amd_64.c | 1 + arch/x86/kernel/mce_intel_64.c | 1 + arch/x86/kernel/smp_32.c | 3 +++ arch/x86/kernel/smp_64.c | 3 +++ arch/x86/mach-voyager/voyager_smp.c | 1 + arch/x86/xen/smp.c | 1 + include/asm-x86/hardirq_32.h | 5 +++++ include/asm-x86/pda.h | 6 ++++++ 14 files changed, 110 insertions(+), 5 deletions(-) diff --git a/Documentation/filesystems/proc.txt b/Documentation/filesystems/proc.txt index 4a37e25e694..e5c1df52a87 100644 --- a/Documentation/filesystems/proc.txt +++ b/Documentation/filesystems/proc.txt @@ -347,7 +347,35 @@ connects the CPUs in a SMP system. This means that an error has been detected, the IO-APIC automatically retry the transmission, so it should not be a big problem, but you should read the SMP-FAQ. -In this context it could be interesting to note the new irq directory in 2.4. +In 2.6.2* /proc/interrupts was expanded again. This time the goal was for +/proc/interrupts to display every IRQ vector in use by the system, not +just those considered 'most important'. The new vectors are: + + THR -- interrupt raised when a machine check threshold counter + (typically counting ECC corrected errors of memory or cache) exceeds + a configurable threshold. Only available on some systems. + + TRM -- a thermal event interrupt occurs when a temperature threshold + has been exceeded for the CPU. This interrupt may also be generated + when the temperature drops back to normal. + + SPU -- a spurious interrupt is some interrupt that was raised then lowered + by some IO device before it could be fully processed by the APIC. Hence + the APIC sees the interrupt but does not know what device it came from. + For this case the APIC will generate the interrupt with a IRQ vector + of 0xff. This might also be generated by chipset bugs. + + RES, CAL, TLB -- rescheduling, call and TLB flush interrupts are + sent from one CPU to another per the needs of the OS. Typically, + their statistics are used by kernel developers and interested users to + determine the occurance of interrupt of the given type. + +The above IRQ vectors are displayed only when relevent. For example, +the threshold vector does not exist on x86_64 platforms. Others are +suppressed when the system is a uniprocessor. As of this writing, only +i386 and x86_64 platforms support the new IRQ vector displays. + +Of some interest is the introduction of the /proc/irq directory to 2.4. It could be used to set IRQ to CPU affinity, this means that you can "hook" an IRQ to only one CPU, or to exclude a CPU of handling IRQs. The contents of the irq subdir is one subdir for each IRQ, and one file; prof_cpu_mask diff --git a/arch/x86/kernel/apic_32.c b/arch/x86/kernel/apic_32.c index 3d67ae18d76..793341fffc8 100644 --- a/arch/x86/kernel/apic_32.c +++ b/arch/x86/kernel/apic_32.c @@ -1277,6 +1277,7 @@ void smp_spurious_interrupt(struct pt_regs *regs) /* see sw-dev-man vol 3, chapter 7.4.13.5 */ printk(KERN_INFO "spurious APIC interrupt on CPU#%d, " "should never happen.\n", smp_processor_id()); + __get_cpu_var(irq_stat).irq_spurious_count++; irq_exit(); } diff --git a/arch/x86/kernel/apic_64.c b/arch/x86/kernel/apic_64.c index 2250c654eac..f47bc493dba 100644 --- a/arch/x86/kernel/apic_64.c +++ b/arch/x86/kernel/apic_64.c @@ -1140,6 +1140,7 @@ asmlinkage void smp_spurious_interrupt(void) if (v & (1 << (SPURIOUS_APIC_VECTOR & 0x1f))) ack_APIC_irq(); + add_pda(irq_spurious_count, 1); irq_exit(); } diff --git a/arch/x86/kernel/cpu/mcheck/p4.c b/arch/x86/kernel/cpu/mcheck/p4.c index 1509edfb231..be4dabfee1f 100644 --- a/arch/x86/kernel/cpu/mcheck/p4.c +++ b/arch/x86/kernel/cpu/mcheck/p4.c @@ -61,6 +61,7 @@ fastcall void smp_thermal_interrupt(struct pt_regs *regs) { irq_enter(); vendor_thermal_interrupt(regs); + __get_cpu_var(irq_stat).irq_thermal_count++; irq_exit(); } diff --git a/arch/x86/kernel/irq_32.c b/arch/x86/kernel/irq_32.c index e173b763f14..10f359021aa 100644 --- a/arch/x86/kernel/irq_32.c +++ b/arch/x86/kernel/irq_32.c @@ -280,14 +280,41 @@ skip: seq_printf(p, "NMI: "); for_each_online_cpu(j) seq_printf(p, "%10u ", nmi_count(j)); - seq_putc(p, '\n'); + seq_printf(p, " Non-maskable interrupts\n"); #ifdef CONFIG_X86_LOCAL_APIC seq_printf(p, "LOC: "); for_each_online_cpu(j) seq_printf(p, "%10u ", per_cpu(irq_stat,j).apic_timer_irqs); - seq_putc(p, '\n'); + seq_printf(p, " Local timer interrupts\n"); #endif +#ifdef CONFIG_SMP + seq_printf(p, "RES: "); + for_each_online_cpu(j) + seq_printf(p, "%10u ", + per_cpu(irq_stat,j).irq_resched_count); + seq_printf(p, " Rescheduling interrupts\n"); + seq_printf(p, "CAL: "); + for_each_online_cpu(j) + seq_printf(p, "%10u ", + per_cpu(irq_stat,j).irq_call_count); + seq_printf(p, " function call interrupts\n"); + seq_printf(p, "TLB: "); + for_each_online_cpu(j) + seq_printf(p, "%10u ", + per_cpu(irq_stat,j).irq_tlb_count); + seq_printf(p, " TLB shootdowns\n"); +#endif + seq_printf(p, "TRM: "); + for_each_online_cpu(j) + seq_printf(p, "%10u ", + per_cpu(irq_stat,j).irq_thermal_count); + seq_printf(p, " Thermal event interrupts\n"); + seq_printf(p, "SPU: "); + for_each_online_cpu(j) + seq_printf(p, "%10u ", + per_cpu(irq_stat,j).irq_spurious_count); + seq_printf(p, " Spurious interrupts\n"); seq_printf(p, "ERR: %10u\n", atomic_read(&irq_err_count)); #if defined(CONFIG_X86_IO_APIC) seq_printf(p, "MIS: %10u\n", atomic_read(&irq_mis_count)); diff --git a/arch/x86/kernel/irq_64.c b/arch/x86/kernel/irq_64.c index 865669efc54..3881189df8e 100644 --- a/arch/x86/kernel/irq_64.c +++ b/arch/x86/kernel/irq_64.c @@ -86,11 +86,37 @@ skip: seq_printf(p, "NMI: "); for_each_online_cpu(j) seq_printf(p, "%10u ", cpu_pda(j)->__nmi_count); - seq_putc(p, '\n'); + seq_printf(p, " Non-maskable interrupts\n"); seq_printf(p, "LOC: "); for_each_online_cpu(j) seq_printf(p, "%10u ", cpu_pda(j)->apic_timer_irqs); - seq_putc(p, '\n'); + seq_printf(p, " Local timer interrupts\n"); +#ifdef CONFIG_SMP + seq_printf(p, "RES: "); + for_each_online_cpu(j) + seq_printf(p, "%10u ", cpu_pda(j)->irq_resched_count); + seq_printf(p, " Rescheduling interrupts\n"); + seq_printf(p, "CAL: "); + for_each_online_cpu(j) + seq_printf(p, "%10u ", cpu_pda(j)->irq_call_count); + seq_printf(p, " function call interrupts\n"); + seq_printf(p, "TLB: "); + for_each_online_cpu(j) + seq_printf(p, "%10u ", cpu_pda(j)->irq_tlb_count); + seq_printf(p, " TLB shootdowns\n"); +#endif + seq_printf(p, "TRM: "); + for_each_online_cpu(j) + seq_printf(p, "%10u ", cpu_pda(j)->irq_thermal_count); + seq_printf(p, " Thermal event interrupts\n"); + seq_printf(p, "THR: "); + for_each_online_cpu(j) + seq_printf(p, "%10u ", cpu_pda(j)->irq_threshold_count); + seq_printf(p, " Threshold APIC interrupts\n"); + seq_printf(p, "SPU: "); + for_each_online_cpu(j) + seq_printf(p, "%10u ", cpu_pda(j)->irq_spurious_count); + seq_printf(p, " Spurious interrupts\n"); seq_printf(p, "ERR: %10u\n", atomic_read(&irq_err_count)); } return 0; diff --git a/arch/x86/kernel/mce_amd_64.c b/arch/x86/kernel/mce_amd_64.c index 805b62b1e0d..0d2afd96aca 100644 --- a/arch/x86/kernel/mce_amd_64.c +++ b/arch/x86/kernel/mce_amd_64.c @@ -237,6 +237,7 @@ asmlinkage void mce_threshold_interrupt(void) } } out: + add_pda(irq_threshold_count, 1); irq_exit(); } diff --git a/arch/x86/kernel/mce_intel_64.c b/arch/x86/kernel/mce_intel_64.c index 6551505d8a2..c17eaf5dd6d 100644 --- a/arch/x86/kernel/mce_intel_64.c +++ b/arch/x86/kernel/mce_intel_64.c @@ -26,6 +26,7 @@ asmlinkage void smp_thermal_interrupt(void) if (therm_throt_process(msr_val & 1)) mce_log_therm_throt_event(smp_processor_id(), msr_val); + add_pda(irq_thermal_count, 1); irq_exit(); } diff --git a/arch/x86/kernel/smp_32.c b/arch/x86/kernel/smp_32.c index eebc6e82576..791d9f8036a 100644 --- a/arch/x86/kernel/smp_32.c +++ b/arch/x86/kernel/smp_32.c @@ -342,6 +342,7 @@ fastcall void smp_invalidate_interrupt(struct pt_regs *regs) smp_mb__after_clear_bit(); out: put_cpu_no_resched(); + __get_cpu_var(irq_stat).irq_tlb_count++; } void native_flush_tlb_others(const cpumask_t *cpumaskp, struct mm_struct *mm, @@ -640,6 +641,7 @@ static void native_smp_send_stop(void) fastcall void smp_reschedule_interrupt(struct pt_regs *regs) { ack_APIC_irq(); + __get_cpu_var(irq_stat).irq_resched_count++; } fastcall void smp_call_function_interrupt(struct pt_regs *regs) @@ -660,6 +662,7 @@ fastcall void smp_call_function_interrupt(struct pt_regs *regs) */ irq_enter(); (*func)(info); + __get_cpu_var(irq_stat).irq_call_count++; irq_exit(); if (wait) { diff --git a/arch/x86/kernel/smp_64.c b/arch/x86/kernel/smp_64.c index df4a82812ad..5c2964727d1 100644 --- a/arch/x86/kernel/smp_64.c +++ b/arch/x86/kernel/smp_64.c @@ -163,6 +163,7 @@ asmlinkage void smp_invalidate_interrupt(struct pt_regs *regs) out: ack_APIC_irq(); cpu_clear(cpu, f->flush_cpumask); + add_pda(irq_tlb_count, 1); } static void flush_tlb_others(cpumask_t cpumask, struct mm_struct *mm, @@ -493,6 +494,7 @@ void smp_send_stop(void) asmlinkage void smp_reschedule_interrupt(void) { ack_APIC_irq(); + add_pda(irq_resched_count, 1); } asmlinkage void smp_call_function_interrupt(void) @@ -514,6 +516,7 @@ asmlinkage void smp_call_function_interrupt(void) exit_idle(); irq_enter(); (*func)(info); + add_pda(irq_call_count, 1); irq_exit(); if (wait) { mb(); diff --git a/arch/x86/mach-voyager/voyager_smp.c b/arch/x86/mach-voyager/voyager_smp.c index 1f86b529dbb..e4928aa6bdf 100644 --- a/arch/x86/mach-voyager/voyager_smp.c +++ b/arch/x86/mach-voyager/voyager_smp.c @@ -1037,6 +1037,7 @@ smp_call_function_interrupt(void) */ irq_enter(); (*func)(info); + __get_cpu_var(irq_stat).irq_call_count++; irq_exit(); if (wait) { mb(); diff --git a/arch/x86/xen/smp.c b/arch/x86/xen/smp.c index 4fa33c27ccb..6c058585459 100644 --- a/arch/x86/xen/smp.c +++ b/arch/x86/xen/smp.c @@ -356,6 +356,7 @@ static irqreturn_t xen_call_function_interrupt(int irq, void *dev_id) */ irq_enter(); (*func)(info); + __get_cpu_var(irq_stat).irq_call_count++; irq_exit(); if (wait) { diff --git a/include/asm-x86/hardirq_32.h b/include/asm-x86/hardirq_32.h index 918863530b9..4f85f0f4b56 100644 --- a/include/asm-x86/hardirq_32.h +++ b/include/asm-x86/hardirq_32.h @@ -10,6 +10,11 @@ typedef struct { unsigned int __nmi_count; /* arch dependent */ unsigned int apic_timer_irqs; /* arch dependent */ unsigned int irq0_irqs; + unsigned int irq_resched_count; + unsigned int irq_call_count; + unsigned int irq_tlb_count; + unsigned int irq_thermal_count; + unsigned int irq_spurious_count; } ____cacheline_aligned irq_cpustat_t; DECLARE_PER_CPU(irq_cpustat_t, irq_stat); diff --git a/include/asm-x86/pda.h b/include/asm-x86/pda.h index fb49f80eb94..35962bbe5e7 100644 --- a/include/asm-x86/pda.h +++ b/include/asm-x86/pda.h @@ -30,6 +30,12 @@ struct x8664_pda { struct mm_struct *active_mm; unsigned apic_timer_irqs; unsigned irq0_irqs; + unsigned irq_resched_count; + unsigned irq_call_count; + unsigned irq_tlb_count; + unsigned irq_thermal_count; + unsigned irq_threshold_count; + unsigned irq_spurious_count; } ____cacheline_aligned_in_smp; extern struct x8664_pda *_cpu_pda[]; -- cgit v1.2.3 From 072f5d82b58cba760191393a6a99fd1123c76e67 Mon Sep 17 00:00:00 2001 From: Jan Beulich Date: Wed, 17 Oct 2007 18:04:40 +0200 Subject: x86: also show non-zero IRQ counts for vectors that currently don't have a handler It doesn't seem to make sense to hide these, even if their counts can't change at the point in time they're being displayed. [ tglx: arch/x86 adaptation ] Signed-off-by: Jan Beulich Signed-off-by: Andi Kleen Signed-off-by: Ingo Molnar Signed-off-by: Thomas Gleixner --- arch/x86/kernel/irq_32.c | 18 ++++++++++++++---- arch/x86/kernel/irq_64.c | 18 ++++++++++++++---- 2 files changed, 28 insertions(+), 8 deletions(-) diff --git a/arch/x86/kernel/irq_32.c b/arch/x86/kernel/irq_32.c index 10f359021aa..d3fde94f734 100644 --- a/arch/x86/kernel/irq_32.c +++ b/arch/x86/kernel/irq_32.c @@ -255,9 +255,17 @@ int show_interrupts(struct seq_file *p, void *v) } if (i < NR_IRQS) { + unsigned any_count = 0; + spin_lock_irqsave(&irq_desc[i].lock, flags); +#ifndef CONFIG_SMP + any_count = kstat_irqs(i); +#else + for_each_online_cpu(j) + any_count |= kstat_cpu(j).irqs[i]; +#endif action = irq_desc[i].action; - if (!action) + if (!action && !any_count) goto skip; seq_printf(p, "%3d: ",i); #ifndef CONFIG_SMP @@ -268,10 +276,12 @@ int show_interrupts(struct seq_file *p, void *v) #endif seq_printf(p, " %8s", irq_desc[i].chip->name); seq_printf(p, "-%-8s", irq_desc[i].name); - seq_printf(p, " %s", action->name); - for (action=action->next; action; action = action->next) - seq_printf(p, ", %s", action->name); + if (action) { + seq_printf(p, " %s", action->name); + while ((action = action->next) != NULL) + seq_printf(p, ", %s", action->name); + } seq_putc(p, '\n'); skip: diff --git a/arch/x86/kernel/irq_64.c b/arch/x86/kernel/irq_64.c index 3881189df8e..6b5c730d67b 100644 --- a/arch/x86/kernel/irq_64.c +++ b/arch/x86/kernel/irq_64.c @@ -62,9 +62,17 @@ int show_interrupts(struct seq_file *p, void *v) } if (i < NR_IRQS) { + unsigned any_count = 0; + spin_lock_irqsave(&irq_desc[i].lock, flags); +#ifndef CONFIG_SMP + any_count = kstat_irqs(i); +#else + for_each_online_cpu(j) + any_count |= kstat_cpu(j).irqs[i]; +#endif action = irq_desc[i].action; - if (!action) + if (!action && !any_count) goto skip; seq_printf(p, "%3d: ",i); #ifndef CONFIG_SMP @@ -76,9 +84,11 @@ int show_interrupts(struct seq_file *p, void *v) seq_printf(p, " %8s", irq_desc[i].chip->name); seq_printf(p, "-%-8s", irq_desc[i].name); - seq_printf(p, " %s", action->name); - for (action=action->next; action; action = action->next) - seq_printf(p, ", %s", action->name); + if (action) { + seq_printf(p, " %s", action->name); + while ((action = action->next) != NULL) + seq_printf(p, ", %s", action->name); + } seq_putc(p, '\n'); skip: spin_unlock_irqrestore(&irq_desc[i].lock, flags); -- cgit v1.2.3 From 382f64ab8f178fe6ca5e7beafa7f03132724bbfb Mon Sep 17 00:00:00 2001 From: Ingo Molnar Date: Wed, 17 Oct 2007 18:04:41 +0200 Subject: i386: print better early fault info improve early fault output. old format: Int 14: CR2 010001e3 err 00000002 EIP c011f2f9 CS 00000060 flags 00010046 Stack: c073695e c0791c10 00000000 ffffffff 00000000 01000000 00001000 c0791c10 new format: BUG: Int 14: CR2 010001e3 EDI c1000000 ESI c0693c10 EBP c0637f9c ESP c0637f08 EBX 00000000 EDX 0000000e ECX 00000000 EAX 010001e3 err 00000002 EIP c0123119 CS 00000060 flg 00010046 Stack: c064d589 c0693000 00000000 c0637f60 00c001e3 01000000 00038000 00000163 00000000 00000163 00000000 ffffffff 00038000 00000000 00000000 00001000 00001000 00000000 c0637f88 c06509be c0a2ae60 00001000 00001000 00000000 Signed-off-by: Ingo Molnar Signed-off-by: Thomas Gleixner --- arch/x86/kernel/head_32.S | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/arch/x86/kernel/head_32.S b/arch/x86/kernel/head_32.S index 0fa8a972a67..39677965e16 100644 --- a/arch/x86/kernel/head_32.S +++ b/arch/x86/kernel/head_32.S @@ -452,6 +452,7 @@ early_page_fault: early_fault: cld #ifdef CONFIG_PRINTK + pusha movl $(__KERNEL_DS),%eax movl %eax,%ds movl %eax,%es @@ -543,8 +544,15 @@ int_msg: .asciz "Unknown interrupt or fault at EIP %p %p %p\n" fault_msg: - .ascii "Int %d: CR2 %p err %p EIP %p CS %p flags %p\n" - .asciz "Stack: %p %p %p %p %p %p %p %p\n" + .ascii \ +/* fault info: */ "BUG: Int %d: CR2 %p\n" \ +/* pusha regs: */ " EDI %p ESI %p EBP %p ESP %p\n" \ + " EBX %p EDX %p ECX %p EAX %p\n" \ +/* fault frame: */ " err %p EIP %p CS %p flg %p\n" \ + \ + "Stack: %p %p %p %p %p %p %p %p\n" \ + " %p %p %p %p %p %p %p %p\n" \ + " %p %p %p %p %p %p %p %p\n" #include "../../x86/xen/xen-head.S" -- cgit v1.2.3 From 20d225b991c88d9f46f6169be3cfc113ea2bf82d Mon Sep 17 00:00:00 2001 From: Yinghai Lu Date: Wed, 17 Oct 2007 18:04:41 +0200 Subject: x86: make io_apic not connected pin print complete Normally we will have two segment not connected pin pin0, and pin after 15... So we need to print out "not connected\n" for previous segment, before printing out connected pins info... Signed-off-by: Yinghai Lu Cc: Andi Kleen Signed-off-by: Andrew Morton --- arch/x86/kernel/io_apic_32.c | 5 +++++ arch/x86/kernel/io_apic_64.c | 6 +++++- 2 files changed, 10 insertions(+), 1 deletion(-) diff --git a/arch/x86/kernel/io_apic_32.c b/arch/x86/kernel/io_apic_32.c index 4ee1e5ee9b5..5f10c718953 100644 --- a/arch/x86/kernel/io_apic_32.c +++ b/arch/x86/kernel/io_apic_32.c @@ -1296,6 +1296,11 @@ static void __init setup_IO_APIC_irqs(void) continue; } + if (!first_notcon) { + apic_printk(APIC_VERBOSE, " not connected.\n"); + first_notcon = 1; + } + entry.trigger = irq_trigger(idx); entry.polarity = irq_polarity(idx); diff --git a/arch/x86/kernel/io_apic_64.c b/arch/x86/kernel/io_apic_64.c index 66a27d268d9..1c2c7bf6a9d 100644 --- a/arch/x86/kernel/io_apic_64.c +++ b/arch/x86/kernel/io_apic_64.c @@ -875,6 +875,10 @@ static void __init setup_IO_APIC_irqs(void) apic_printk(APIC_VERBOSE, ", %d-%d", mp_ioapics[apic].mpc_apicid, pin); continue; } + if (!first_notcon) { + apic_printk(APIC_VERBOSE, " not connected.\n"); + first_notcon = 1; + } irq = pin_2_irq(idx, apic, pin); add_pin_to_irq(irq, apic, pin); @@ -885,7 +889,7 @@ static void __init setup_IO_APIC_irqs(void) } if (!first_notcon) - apic_printk(APIC_VERBOSE," not connected.\n"); + apic_printk(APIC_VERBOSE, " not connected.\n"); } /* -- cgit v1.2.3 From 99741faa34b342e6a0b327efb6c28c1a693b7307 Mon Sep 17 00:00:00 2001 From: Andi Kleen Date: Wed, 17 Oct 2007 18:04:41 +0200 Subject: x86: Use string instruction memcpy on AMD Fam11h [ tglx: arch/x86 adaptation ] Signed-off-by: Andi Kleen Signed-off-by: Ingo Molnar Signed-off-by: Thomas Gleixner --- arch/x86/kernel/setup_64.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/arch/x86/kernel/setup_64.c b/arch/x86/kernel/setup_64.c index 5b5e0781d5b..5a19f0cc5b6 100644 --- a/arch/x86/kernel/setup_64.c +++ b/arch/x86/kernel/setup_64.c @@ -604,7 +604,7 @@ static void __cpuinit init_amd(struct cpuinfo_x86 *c) level = cpuid_eax(1); if (c->x86 == 15 && ((level >= 0x0f48 && level < 0x0f50) || level >= 0x0f58)) set_bit(X86_FEATURE_REP_GOOD, &c->x86_capability); - if (c->x86 == 0x10) + if (c->x86 == 0x10 || c->x86 == 0x11) set_bit(X86_FEATURE_REP_GOOD, &c->x86_capability); /* Enable workaround for FXSAVE leak */ -- cgit v1.2.3 From c7537ab234bc629e0a3b0d725dd08e6f24768037 Mon Sep 17 00:00:00 2001 From: "Luiz Fernando N. Capitulino" Date: Wed, 17 Oct 2007 18:04:41 +0200 Subject: x86: convert mm_context_t semaphore to a mutex [ tglx: arch/x86 adaptation ] Signed-off-by: Luiz Fernando N. Capitulino Signed-off-by: Andi Kleen Signed-off-by: Ingo Molnar Signed-off-by: Thomas Gleixner --- arch/x86/kernel/ldt_64.c | 14 +++++++------- arch/x86/kernel/ptrace_64.c | 4 ++-- include/asm-x86/mmu_64.h | 4 ++-- 3 files changed, 11 insertions(+), 11 deletions(-) diff --git a/arch/x86/kernel/ldt_64.c b/arch/x86/kernel/ldt_64.c index 3796523d616..60e57abb8e9 100644 --- a/arch/x86/kernel/ldt_64.c +++ b/arch/x86/kernel/ldt_64.c @@ -96,13 +96,13 @@ int init_new_context(struct task_struct *tsk, struct mm_struct *mm) struct mm_struct * old_mm; int retval = 0; - init_MUTEX(&mm->context.sem); + mutex_init(&mm->context.lock); mm->context.size = 0; old_mm = current->mm; if (old_mm && old_mm->context.size > 0) { - down(&old_mm->context.sem); + mutex_lock(&old_mm->context.lock); retval = copy_ldt(&mm->context, &old_mm->context); - up(&old_mm->context.sem); + mutex_unlock(&old_mm->context.lock); } return retval; } @@ -133,7 +133,7 @@ static int read_ldt(void __user * ptr, unsigned long bytecount) if (bytecount > LDT_ENTRY_SIZE*LDT_ENTRIES) bytecount = LDT_ENTRY_SIZE*LDT_ENTRIES; - down(&mm->context.sem); + mutex_lock(&mm->context.lock); size = mm->context.size*LDT_ENTRY_SIZE; if (size > bytecount) size = bytecount; @@ -141,7 +141,7 @@ static int read_ldt(void __user * ptr, unsigned long bytecount) err = 0; if (copy_to_user(ptr, mm->context.ldt, size)) err = -EFAULT; - up(&mm->context.sem); + mutex_unlock(&mm->context.lock); if (err < 0) goto error_return; if (size != bytecount) { @@ -193,7 +193,7 @@ static int write_ldt(void __user * ptr, unsigned long bytecount, int oldmode) goto out; } - down(&mm->context.sem); + mutex_lock(&mm->context.lock); if (ldt_info.entry_number >= (unsigned)mm->context.size) { error = alloc_ldt(¤t->mm->context, ldt_info.entry_number+1, 1); if (error < 0) @@ -223,7 +223,7 @@ install: error = 0; out_unlock: - up(&mm->context.sem); + mutex_unlock(&mm->context.lock); out: return error; } diff --git a/arch/x86/kernel/ptrace_64.c b/arch/x86/kernel/ptrace_64.c index 86321ee6da9..607085f3f08 100644 --- a/arch/x86/kernel/ptrace_64.c +++ b/arch/x86/kernel/ptrace_64.c @@ -103,7 +103,7 @@ unsigned long convert_rip_to_linear(struct task_struct *child, struct pt_regs *r seg &= ~7UL; - down(&child->mm->context.sem); + mutex_lock(&child->mm->context.lock); if (unlikely((seg >> 3) >= child->mm->context.size)) addr = -1L; /* bogus selector, access would fault */ else { @@ -117,7 +117,7 @@ unsigned long convert_rip_to_linear(struct task_struct *child, struct pt_regs *r addr &= 0xffff; addr += base; } - up(&child->mm->context.sem); + mutex_unlock(&child->mm->context.lock); } return addr; diff --git a/include/asm-x86/mmu_64.h b/include/asm-x86/mmu_64.h index d2cd4a9d984..024357c2722 100644 --- a/include/asm-x86/mmu_64.h +++ b/include/asm-x86/mmu_64.h @@ -2,7 +2,7 @@ #define __x86_64_MMU_H #include -#include +#include /* * The x86_64 doesn't have a mmu context, but @@ -14,7 +14,7 @@ typedef struct { void *ldt; rwlock_t ldtlock; int size; - struct semaphore sem; + struct mutex lock; void *vdso; } mm_context_t; -- cgit v1.2.3 From b93b6ca3bf822a24e1535ee7c773740628bca1e6 Mon Sep 17 00:00:00 2001 From: Ingo Molnar Date: Wed, 17 Oct 2007 18:04:41 +0200 Subject: i386: remove unnecessary code Oleg Nesterov pointed out that the set_fs() calls in setup_frame() and setup_rt_frame() were superfluous. [ tglx: arch/x86 adaptation ] Signed-off-by: Ingo Molnar Signed-off-by: Andi Kleen Cc: Oleg Nesterov Cc: Chuck Ebbert <76306.1226@compuserve.com> Signed-off-by: Andrew Morton Signed-off-by: Thomas Gleixner --- arch/x86/kernel/signal_32.c | 2 -- 1 file changed, 2 deletions(-) diff --git a/arch/x86/kernel/signal_32.c b/arch/x86/kernel/signal_32.c index d01d51fcce2..0d79df3c563 100644 --- a/arch/x86/kernel/signal_32.c +++ b/arch/x86/kernel/signal_32.c @@ -385,7 +385,6 @@ static int setup_frame(int sig, struct k_sigaction *ka, regs->edx = (unsigned long) 0; regs->ecx = (unsigned long) 0; - set_fs(USER_DS); regs->xds = __USER_DS; regs->xes = __USER_DS; regs->xss = __USER_DS; @@ -479,7 +478,6 @@ static int setup_rt_frame(int sig, struct k_sigaction *ka, siginfo_t *info, regs->edx = (unsigned long) &frame->info; regs->ecx = (unsigned long) &frame->uc; - set_fs(USER_DS); regs->xds = __USER_DS; regs->xes = __USER_DS; regs->xss = __USER_DS; -- cgit v1.2.3 From c861eff88c92d98ee661cf0d2fa978611edeaceb Mon Sep 17 00:00:00 2001 From: Andi Kleen Date: Wed, 17 Oct 2007 18:04:41 +0200 Subject: x86: remove duplicated vsyscall nsec update Spotted by Chuck Ebbert [ tglx: arch/x86 adaptation ] Signed-off-by: Andi Kleen Signed-off-by: Ingo Molnar Signed-off-by: Thomas Gleixner --- arch/x86/kernel/vsyscall_64.c | 1 - 1 file changed, 1 deletion(-) diff --git a/arch/x86/kernel/vsyscall_64.c b/arch/x86/kernel/vsyscall_64.c index 5684e5a1282..8a67e282cb5 100644 --- a/arch/x86/kernel/vsyscall_64.c +++ b/arch/x86/kernel/vsyscall_64.c @@ -78,7 +78,6 @@ void update_vsyscall(struct timespec *wall_time, struct clocksource *clock) vsyscall_gtod_data.wall_time_sec = wall_time->tv_sec; vsyscall_gtod_data.wall_time_nsec = wall_time->tv_nsec; vsyscall_gtod_data.sys_tz = sys_tz; - vsyscall_gtod_data.wall_time_nsec = wall_time->tv_nsec; vsyscall_gtod_data.wall_to_monotonic = wall_to_monotonic; write_sequnlock_irqrestore(&vsyscall_gtod_data.lock, flags); } -- cgit v1.2.3 From 32c464f5d9701db45bc1673288594e664065388e Mon Sep 17 00:00:00 2001 From: Jan Beulich Date: Wed, 17 Oct 2007 18:04:41 +0200 Subject: x86: multi-byte single instruction NOPs Add support for and use the multi-byte NOPs recently documented to be available on all PentiumPro and later processors. This patch only applies cleanly on top of the "x86: misc. constifications" patch sent earlier. [ tglx: arch/x86 adaptation ] Signed-off-by: Jan Beulich Signed-off-by: Andi Kleen Signed-off-by: Ingo Molnar Signed-off-by: Thomas Gleixner arch/x86/kernel/alternative.c | 23 ++++++++++++++++++++++- include/asm-x86/processor_32.h | 22 ++++++++++++++++++++++ include/asm-x86/processor_64.h | 22 ++++++++++++++++++++++ 3 files changed, 66 insertions(+), 1 deletion(-) --- arch/x86/kernel/alternative.c | 23 ++++++++++++++++++++++- include/asm-x86/processor_32.h | 22 ++++++++++++++++++++++ include/asm-x86/processor_64.h | 22 ++++++++++++++++++++++ 3 files changed, 66 insertions(+), 1 deletion(-) diff --git a/arch/x86/kernel/alternative.c b/arch/x86/kernel/alternative.c index 8cb5dbbd9c2..a3ae8e6c8b3 100644 --- a/arch/x86/kernel/alternative.c +++ b/arch/x86/kernel/alternative.c @@ -116,12 +116,31 @@ static const unsigned char *const k7_nops[ASM_NOP_MAX+1] = { }; #endif +#ifdef P6_NOP1 +asm("\t.section .rodata, \"a\"\np6nops: " + P6_NOP1 P6_NOP2 P6_NOP3 P6_NOP4 P6_NOP5 P6_NOP6 + P6_NOP7 P6_NOP8); +extern const unsigned char p6nops[]; +static const unsigned char *const p6_nops[ASM_NOP_MAX+1] = { + NULL, + p6nops, + p6nops + 1, + p6nops + 1 + 2, + p6nops + 1 + 2 + 3, + p6nops + 1 + 2 + 3 + 4, + p6nops + 1 + 2 + 3 + 4 + 5, + p6nops + 1 + 2 + 3 + 4 + 5 + 6, + p6nops + 1 + 2 + 3 + 4 + 5 + 6 + 7, +}; +#endif + #ifdef CONFIG_X86_64 extern char __vsyscall_0; static inline const unsigned char*const * find_nop_table(void) { - return k8_nops; + return boot_cpu_data.x86_vendor != X86_VENDOR_INTEL || + boot_cpu_data.x86 < 6 ? k8_nops : p6_nops; } #else /* CONFIG_X86_64 */ @@ -132,6 +151,8 @@ static const struct nop { } noptypes[] = { { X86_FEATURE_K8, k8_nops }, { X86_FEATURE_K7, k7_nops }, + { X86_FEATURE_P4, p6_nops }, + { X86_FEATURE_P3, p6_nops }, { -1, NULL } }; diff --git a/include/asm-x86/processor_32.h b/include/asm-x86/processor_32.h index 38cc1061487..83800e7496e 100644 --- a/include/asm-x86/processor_32.h +++ b/include/asm-x86/processor_32.h @@ -677,6 +677,17 @@ static inline unsigned int cpuid_edx(unsigned int op) #define K7_NOP7 ".byte 0x8D,0x04,0x05,0,0,0,0\n" #define K7_NOP8 K7_NOP7 ASM_NOP1 +/* P6 nops */ +/* uses eax dependencies (Intel-recommended choice) */ +#define P6_NOP1 GENERIC_NOP1 +#define P6_NOP2 ".byte 0x66,0x90\n" +#define P6_NOP3 ".byte 0x0f,0x1f,0x00\n" +#define P6_NOP4 ".byte 0x0f,0x1f,0x40,0\n" +#define P6_NOP5 ".byte 0x0f,0x1f,0x44,0x00,0\n" +#define P6_NOP6 ".byte 0x66,0x0f,0x1f,0x44,0x00,0\n" +#define P6_NOP7 ".byte 0x0f,0x1f,0x80,0,0,0,0\n" +#define P6_NOP8 ".byte 0x0f,0x1f,0x84,0x00,0,0,0,0\n" + #ifdef CONFIG_MK8 #define ASM_NOP1 K8_NOP1 #define ASM_NOP2 K8_NOP2 @@ -695,6 +706,17 @@ static inline unsigned int cpuid_edx(unsigned int op) #define ASM_NOP6 K7_NOP6 #define ASM_NOP7 K7_NOP7 #define ASM_NOP8 K7_NOP8 +#elif defined(CONFIG_M686) || defined(CONFIG_MPENTIUMII) || \ + defined(CONFIG_MPENTIUMIII) || defined(CONFIG_MPENTIUMM) || \ + defined(CONFIG_MCORE2) || defined(CONFIG_PENTIUM4) +#define ASM_NOP1 P6_NOP1 +#define ASM_NOP2 P6_NOP2 +#define ASM_NOP3 P6_NOP3 +#define ASM_NOP4 P6_NOP4 +#define ASM_NOP5 P6_NOP5 +#define ASM_NOP6 P6_NOP6 +#define ASM_NOP7 P6_NOP7 +#define ASM_NOP8 P6_NOP8 #else #define ASM_NOP1 GENERIC_NOP1 #define ASM_NOP2 GENERIC_NOP2 diff --git a/include/asm-x86/processor_64.h b/include/asm-x86/processor_64.h index 2f12eb6e46b..f422becbddd 100644 --- a/include/asm-x86/processor_64.h +++ b/include/asm-x86/processor_64.h @@ -334,6 +334,16 @@ struct extended_sigtable { }; +#if defined(CONFIG_MPSC) || defined(CONFIG_MCORE2) +#define ASM_NOP1 P6_NOP1 +#define ASM_NOP2 P6_NOP2 +#define ASM_NOP3 P6_NOP3 +#define ASM_NOP4 P6_NOP4 +#define ASM_NOP5 P6_NOP5 +#define ASM_NOP6 P6_NOP6 +#define ASM_NOP7 P6_NOP7 +#define ASM_NOP8 P6_NOP8 +#else #define ASM_NOP1 K8_NOP1 #define ASM_NOP2 K8_NOP2 #define ASM_NOP3 K8_NOP3 @@ -342,6 +352,7 @@ struct extended_sigtable { #define ASM_NOP6 K8_NOP6 #define ASM_NOP7 K8_NOP7 #define ASM_NOP8 K8_NOP8 +#endif /* Opteron nops */ #define K8_NOP1 ".byte 0x90\n" @@ -353,6 +364,17 @@ struct extended_sigtable { #define K8_NOP7 K8_NOP4 K8_NOP3 #define K8_NOP8 K8_NOP4 K8_NOP4 +/* P6 nops */ +/* uses eax dependencies (Intel-recommended choice) */ +#define P6_NOP1 ".byte 0x90\n" +#define P6_NOP2 ".byte 0x66,0x90\n" +#define P6_NOP3 ".byte 0x0f,0x1f,0x00\n" +#define P6_NOP4 ".byte 0x0f,0x1f,0x40,0\n" +#define P6_NOP5 ".byte 0x0f,0x1f,0x44,0x00,0\n" +#define P6_NOP6 ".byte 0x66,0x0f,0x1f,0x44,0x00,0\n" +#define P6_NOP7 ".byte 0x0f,0x1f,0x80,0,0,0,0\n" +#define P6_NOP8 ".byte 0x0f,0x1f,0x84,0x00,0,0,0,0\n" + #define ASM_NOP_MAX 8 /* REP NOP (PAUSE) is a good thing to insert into busy-wait loops. */ -- cgit v1.2.3 From de8aacbe6a3f3dd7104da09a5535232cd385fdd6 Mon Sep 17 00:00:00 2001 From: "Luiz Fernando N. Capitulino" Date: Wed, 17 Oct 2007 18:04:41 +0200 Subject: x86: convert mm_context_t semaphore to a mutex convert mm_context_t semaphore to a mutex. Signed-off-by: Luiz Fernando N. Capitulino Cc: Andi Kleen Signed-off-by: Andrew Morton Signed-off-by: Ingo Molnar Signed-off-by: Thomas Gleixner --- arch/x86/kernel/i386_ksyms_32.c | 1 + arch/x86/kernel/ldt_32.c | 14 +++++++------- arch/x86/kernel/ptrace_32.c | 4 ++-- arch/x86/mm/fault_32.c | 4 ++-- include/asm-x86/mmu_32.h | 4 ++-- 5 files changed, 14 insertions(+), 13 deletions(-) diff --git a/arch/x86/kernel/i386_ksyms_32.c b/arch/x86/kernel/i386_ksyms_32.c index e3d4b73bfdb..edd39ccf139 100644 --- a/arch/x86/kernel/i386_ksyms_32.c +++ b/arch/x86/kernel/i386_ksyms_32.c @@ -1,4 +1,5 @@ #include +#include #include #include diff --git a/arch/x86/kernel/ldt_32.c b/arch/x86/kernel/ldt_32.c index a8b18421863..9ff90a27c45 100644 --- a/arch/x86/kernel/ldt_32.c +++ b/arch/x86/kernel/ldt_32.c @@ -92,13 +92,13 @@ int init_new_context(struct task_struct *tsk, struct mm_struct *mm) struct mm_struct * old_mm; int retval = 0; - init_MUTEX(&mm->context.sem); + mutex_init(&mm->context.lock); mm->context.size = 0; old_mm = current->mm; if (old_mm && old_mm->context.size > 0) { - down(&old_mm->context.sem); + mutex_lock(&old_mm->context.lock); retval = copy_ldt(&mm->context, &old_mm->context); - up(&old_mm->context.sem); + mutex_unlock(&old_mm->context.lock); } return retval; } @@ -130,7 +130,7 @@ static int read_ldt(void __user * ptr, unsigned long bytecount) if (bytecount > LDT_ENTRY_SIZE*LDT_ENTRIES) bytecount = LDT_ENTRY_SIZE*LDT_ENTRIES; - down(&mm->context.sem); + mutex_lock(&mm->context.lock); size = mm->context.size*LDT_ENTRY_SIZE; if (size > bytecount) size = bytecount; @@ -138,7 +138,7 @@ static int read_ldt(void __user * ptr, unsigned long bytecount) err = 0; if (copy_to_user(ptr, mm->context.ldt, size)) err = -EFAULT; - up(&mm->context.sem); + mutex_unlock(&mm->context.lock); if (err < 0) goto error_return; if (size != bytecount) { @@ -194,7 +194,7 @@ static int write_ldt(void __user * ptr, unsigned long bytecount, int oldmode) goto out; } - down(&mm->context.sem); + mutex_lock(&mm->context.lock); if (ldt_info.entry_number >= mm->context.size) { error = alloc_ldt(¤t->mm->context, ldt_info.entry_number+1, 1); if (error < 0) @@ -221,7 +221,7 @@ install: error = 0; out_unlock: - up(&mm->context.sem); + mutex_unlock(&mm->context.lock); out: return error; } diff --git a/arch/x86/kernel/ptrace_32.c b/arch/x86/kernel/ptrace_32.c index 8622b9cd3e3..99102ec5fad 100644 --- a/arch/x86/kernel/ptrace_32.c +++ b/arch/x86/kernel/ptrace_32.c @@ -165,7 +165,7 @@ static unsigned long convert_eip_to_linear(struct task_struct *child, struct pt_ seg &= ~7UL; - down(&child->mm->context.sem); + mutex_lock(&child->mm->context.lock); if (unlikely((seg >> 3) >= child->mm->context.size)) addr = -1L; /* bogus selector, access would fault */ else { @@ -179,7 +179,7 @@ static unsigned long convert_eip_to_linear(struct task_struct *child, struct pt_ addr &= 0xffff; addr += base; } - up(&child->mm->context.sem); + mutex_unlock(&child->mm->context.lock); } return addr; } diff --git a/arch/x86/mm/fault_32.c b/arch/x86/mm/fault_32.c index d84314ce22b..6555c3d1437 100644 --- a/arch/x86/mm/fault_32.c +++ b/arch/x86/mm/fault_32.c @@ -105,7 +105,7 @@ static inline unsigned long get_segment_eip(struct pt_regs *regs, LDT and other horrors are only used in user space. */ if (seg & (1<<2)) { /* Must lock the LDT while reading it. */ - down(¤t->mm->context.sem); + mutex_lock(¤t->mm->context.lock); desc = current->mm->context.ldt; desc = (void *)desc + (seg & ~7); } else { @@ -118,7 +118,7 @@ static inline unsigned long get_segment_eip(struct pt_regs *regs, base = get_desc_base((unsigned long *)desc); if (seg & (1<<2)) { - up(¤t->mm->context.sem); + mutex_unlock(¤t->mm->context.lock); } else put_cpu(); diff --git a/include/asm-x86/mmu_32.h b/include/asm-x86/mmu_32.h index 8358dd3df7a..5e249c51ef5 100644 --- a/include/asm-x86/mmu_32.h +++ b/include/asm-x86/mmu_32.h @@ -1,7 +1,7 @@ #ifndef __i386_MMU_H #define __i386_MMU_H -#include +#include /* * The i386 doesn't have a mmu context, but * we put the segment information here. @@ -10,7 +10,7 @@ */ typedef struct { int size; - struct semaphore sem; + struct mutex lock; void *ldt; void *vdso; } mm_context_t; -- cgit v1.2.3 From c65916fe3586521932fbd1b734f39744657f2f0d Mon Sep 17 00:00:00 2001 From: Roland McGrath Date: Wed, 17 Oct 2007 18:04:41 +0200 Subject: x86: vdso linker script cleanup I can't see the reason ". = VDSO_PRELINK + 0x900;" was ever there in the linker script for the x86_64 vDSO. I can't find anything that depends on this magic offset, or that should care at all about the particular location of of the .data section (all from vvar.c) in the vDSO image. If it is really desireable to place .data at 0x900, then it should be after all the other sections so they fill in the space up to 0x900. This removes the 0x900 magic and cleans up the output sections generally in the vDSO linker script. This saves a few hundred bytes in the size of the vDSO file, bringing it back well under 4kb total so that its vma only needs one page. Signed-off-by: Roland McGrath Cc: Andi Kleen Signed-off-by: Andrew Morton Signed-off-by: Ingo Molnar Signed-off-by: Thomas Gleixner --- arch/x86/vdso/vdso.lds.S | 16 +++++++++------- 1 file changed, 9 insertions(+), 7 deletions(-) diff --git a/arch/x86/vdso/vdso.lds.S b/arch/x86/vdso/vdso.lds.S index b9a60e665d0..667d3245d97 100644 --- a/arch/x86/vdso/vdso.lds.S +++ b/arch/x86/vdso/vdso.lds.S @@ -26,13 +26,16 @@ SECTIONS is insufficient, ld -shared will barf. Just increase it here. */ . = VDSO_PRELINK + VDSO_TEXT_OFFSET; - .text : { *(.text) } :text - .text.ptr : { *(.text.ptr) } :text - . = VDSO_PRELINK + 0x900; - .data : { *(.data) } :text - .bss : { *(.bss) } :text + .text : { *(.text*) } :text + .rodata : { *(.rodata*) } :text + .data : { + *(.data*) + *(.sdata*) + *(.bss*) + *(.dynbss*) + } :text - .altinstructions : { *(.altinstructions) } :text + .altinstructions : { *(.altinstructions) } :text .altinstr_replacement : { *(.altinstr_replacement) } :text .note : { *(.note.*) } :text :note @@ -42,7 +45,6 @@ SECTIONS .useless : { *(.got.plt) *(.got) *(.gnu.linkonce.d.*) - *(.dynbss) *(.gnu.linkonce.b.*) } :text } -- cgit v1.2.3 From 020bd9f1c766ca743556461a70a5b5d559b7e60c Mon Sep 17 00:00:00 2001 From: Brian Gerst Date: Mon, 15 Oct 2007 13:57:46 +0200 Subject: x86: trivial header merges Merge 32/64-bit headers that simply redirect to asm-generic [tglx: fixup Kbuild as well] Signed-off-by: Brian Gerst Signed-off-by: Thomas Gleixner --- include/asm-x86/Kbuild | 4 ---- include/asm-x86/cputime.h | 6 +----- include/asm-x86/cputime_32.h | 6 ------ include/asm-x86/cputime_64.h | 6 ------ include/asm-x86/errno.h | 14 +------------- include/asm-x86/errno_32.h | 6 ------ include/asm-x86/errno_64.h | 6 ------ include/asm-x86/resource.h | 14 +------------- include/asm-x86/resource_32.h | 6 ------ include/asm-x86/resource_64.h | 6 ------ include/asm-x86/rtc.h | 6 +----- include/asm-x86/rtc_32.h | 10 ---------- include/asm-x86/rtc_64.h | 10 ---------- include/asm-x86/sections.h | 6 +----- include/asm-x86/sections_32.h | 7 ------- include/asm-x86/sections_64.h | 7 ------- 16 files changed, 5 insertions(+), 115 deletions(-) delete mode 100644 include/asm-x86/cputime_32.h delete mode 100644 include/asm-x86/cputime_64.h delete mode 100644 include/asm-x86/errno_32.h delete mode 100644 include/asm-x86/errno_64.h delete mode 100644 include/asm-x86/resource_32.h delete mode 100644 include/asm-x86/resource_64.h delete mode 100644 include/asm-x86/rtc_32.h delete mode 100644 include/asm-x86/rtc_64.h delete mode 100644 include/asm-x86/sections_32.h delete mode 100644 include/asm-x86/sections_64.h diff --git a/include/asm-x86/Kbuild b/include/asm-x86/Kbuild index a0c0b80c7f2..0618ca386ab 100644 --- a/include/asm-x86/Kbuild +++ b/include/asm-x86/Kbuild @@ -22,8 +22,6 @@ unifdef-y += byteorder_32.h unifdef-y += byteorder_64.h unifdef-y += elf_32.h unifdef-y += elf_64.h -unifdef-y += errno_32.h -unifdef-y += errno_64.h unifdef-y += ioctls_32.h unifdef-y += ioctls_64.h unifdef-y += ipcbuf_32.h @@ -47,8 +45,6 @@ unifdef-y += posix_types_32.h unifdef-y += posix_types_64.h unifdef-y += ptrace_32.h unifdef-y += ptrace_64.h -unifdef-y += resource_32.h -unifdef-y += resource_64.h unifdef-y += sembuf_32.h unifdef-y += sembuf_64.h unifdef-y += setup_32.h diff --git a/include/asm-x86/cputime.h b/include/asm-x86/cputime.h index 87c37cf6b70..6d68ad7e0ea 100644 --- a/include/asm-x86/cputime.h +++ b/include/asm-x86/cputime.h @@ -1,5 +1 @@ -#ifdef CONFIG_X86_32 -# include "cputime_32.h" -#else -# include "cputime_64.h" -#endif +#include diff --git a/include/asm-x86/cputime_32.h b/include/asm-x86/cputime_32.h deleted file mode 100644 index 398ed7cd171..00000000000 --- a/include/asm-x86/cputime_32.h +++ /dev/null @@ -1,6 +0,0 @@ -#ifndef __I386_CPUTIME_H -#define __I386_CPUTIME_H - -#include - -#endif /* __I386_CPUTIME_H */ diff --git a/include/asm-x86/cputime_64.h b/include/asm-x86/cputime_64.h deleted file mode 100644 index a07012dc5a3..00000000000 --- a/include/asm-x86/cputime_64.h +++ /dev/null @@ -1,6 +0,0 @@ -#ifndef __X86_64_CPUTIME_H -#define __X86_64_CPUTIME_H - -#include - -#endif /* __X86_64_CPUTIME_H */ diff --git a/include/asm-x86/errno.h b/include/asm-x86/errno.h index 9d511be8e57..4c82b503d92 100644 --- a/include/asm-x86/errno.h +++ b/include/asm-x86/errno.h @@ -1,13 +1 @@ -#ifdef __KERNEL__ -# ifdef CONFIG_X86_32 -# include "errno_32.h" -# else -# include "errno_64.h" -# endif -#else -# ifdef __i386__ -# include "errno_32.h" -# else -# include "errno_64.h" -# endif -#endif +#include diff --git a/include/asm-x86/errno_32.h b/include/asm-x86/errno_32.h deleted file mode 100644 index 969b3437472..00000000000 --- a/include/asm-x86/errno_32.h +++ /dev/null @@ -1,6 +0,0 @@ -#ifndef _I386_ERRNO_H -#define _I386_ERRNO_H - -#include - -#endif diff --git a/include/asm-x86/errno_64.h b/include/asm-x86/errno_64.h deleted file mode 100644 index 311182129e3..00000000000 --- a/include/asm-x86/errno_64.h +++ /dev/null @@ -1,6 +0,0 @@ -#ifndef _X8664_ERRNO_H -#define _X8664_ERRNO_H - -#include - -#endif diff --git a/include/asm-x86/resource.h b/include/asm-x86/resource.h index 732410a8c02..04bc4db8921 100644 --- a/include/asm-x86/resource.h +++ b/include/asm-x86/resource.h @@ -1,13 +1 @@ -#ifdef __KERNEL__ -# ifdef CONFIG_X86_32 -# include "resource_32.h" -# else -# include "resource_64.h" -# endif -#else -# ifdef __i386__ -# include "resource_32.h" -# else -# include "resource_64.h" -# endif -#endif +#include diff --git a/include/asm-x86/resource_32.h b/include/asm-x86/resource_32.h deleted file mode 100644 index 6c1ea37c771..00000000000 --- a/include/asm-x86/resource_32.h +++ /dev/null @@ -1,6 +0,0 @@ -#ifndef _I386_RESOURCE_H -#define _I386_RESOURCE_H - -#include - -#endif diff --git a/include/asm-x86/resource_64.h b/include/asm-x86/resource_64.h deleted file mode 100644 index f40b4062323..00000000000 --- a/include/asm-x86/resource_64.h +++ /dev/null @@ -1,6 +0,0 @@ -#ifndef _X8664_RESOURCE_H -#define _X8664_RESOURCE_H - -#include - -#endif diff --git a/include/asm-x86/rtc.h b/include/asm-x86/rtc.h index 1f0c98eb2e3..f71c3b0ed36 100644 --- a/include/asm-x86/rtc.h +++ b/include/asm-x86/rtc.h @@ -1,5 +1 @@ -#ifdef CONFIG_X86_32 -# include "rtc_32.h" -#else -# include "rtc_64.h" -#endif +#include diff --git a/include/asm-x86/rtc_32.h b/include/asm-x86/rtc_32.h deleted file mode 100644 index ffd02109a0e..00000000000 --- a/include/asm-x86/rtc_32.h +++ /dev/null @@ -1,10 +0,0 @@ -#ifndef _I386_RTC_H -#define _I386_RTC_H - -/* - * x86 uses the default access methods for the RTC. - */ - -#include - -#endif diff --git a/include/asm-x86/rtc_64.h b/include/asm-x86/rtc_64.h deleted file mode 100644 index 18ed713ac7d..00000000000 --- a/include/asm-x86/rtc_64.h +++ /dev/null @@ -1,10 +0,0 @@ -#ifndef _X86_64_RTC_H -#define _X86_64_RTC_H - -/* - * x86 uses the default access methods for the RTC. - */ - -#include - -#endif diff --git a/include/asm-x86/sections.h b/include/asm-x86/sections.h index ae6c69d9be3..2b8c5160388 100644 --- a/include/asm-x86/sections.h +++ b/include/asm-x86/sections.h @@ -1,5 +1 @@ -#ifdef CONFIG_X86_32 -# include "sections_32.h" -#else -# include "sections_64.h" -#endif +#include diff --git a/include/asm-x86/sections_32.h b/include/asm-x86/sections_32.h deleted file mode 100644 index 2dcbb92918b..00000000000 --- a/include/asm-x86/sections_32.h +++ /dev/null @@ -1,7 +0,0 @@ -#ifndef _I386_SECTIONS_H -#define _I386_SECTIONS_H - -/* nothing to see, move along */ -#include - -#endif diff --git a/include/asm-x86/sections_64.h b/include/asm-x86/sections_64.h deleted file mode 100644 index c746d9f1e70..00000000000 --- a/include/asm-x86/sections_64.h +++ /dev/null @@ -1,7 +0,0 @@ -#ifndef _X8664_SECTIONS_H -#define _X8664_SECTIONS_H - -/* nothing to see, move along */ -#include - -#endif -- cgit v1.2.3 From 217d115cd5d7d2bef7db7839b93ce5dc2867c392 Mon Sep 17 00:00:00 2001 From: Roland Dreier Date: Mon, 15 Oct 2007 13:57:46 +0200 Subject: x86: merge some trivially mergeable headers Merge errno.h, resource.h, rtc.h, sections.h, serial.h and sockios.h, where i386 and x86_64 have no or only trivial comment/include guard differences. Build tested on both 32-bit and 64-bit, and booted on 64-bit. [tglx: fixup Kbuild as well] Signed-off-by: Roland Dreier Signed-off-by: Thomas Gleixner --- include/asm-x86/Kbuild | 2 -- include/asm-x86/serial.h | 30 +++++++++++++++++++++++++++--- include/asm-x86/serial_32.h | 29 ----------------------------- include/asm-x86/serial_64.h | 29 ----------------------------- include/asm-x86/sockios.h | 26 +++++++++++++------------- include/asm-x86/sockios_32.h | 13 ------------- include/asm-x86/sockios_64.h | 13 ------------- 7 files changed, 40 insertions(+), 102 deletions(-) delete mode 100644 include/asm-x86/serial_32.h delete mode 100644 include/asm-x86/serial_64.h delete mode 100644 include/asm-x86/sockios_32.h delete mode 100644 include/asm-x86/sockios_64.h diff --git a/include/asm-x86/Kbuild b/include/asm-x86/Kbuild index 0618ca386ab..158deea39a5 100644 --- a/include/asm-x86/Kbuild +++ b/include/asm-x86/Kbuild @@ -59,8 +59,6 @@ unifdef-y += siginfo_32.h unifdef-y += siginfo_64.h unifdef-y += signal_32.h unifdef-y += signal_64.h -unifdef-y += sockios_32.h -unifdef-y += sockios_64.h unifdef-y += stat_32.h unifdef-y += stat_64.h unifdef-y += statfs_32.h diff --git a/include/asm-x86/serial.h b/include/asm-x86/serial.h index cf1b05227b2..628c801535e 100644 --- a/include/asm-x86/serial.h +++ b/include/asm-x86/serial.h @@ -1,5 +1,29 @@ -#ifdef CONFIG_X86_32 -# include "serial_32.h" +#ifndef _ASM_X86_SERIAL_H +#define _ASM_X86_SERIAL_H + +/* + * This assumes you have a 1.8432 MHz clock for your UART. + * + * It'd be nice if someone built a serial card with a 24.576 MHz + * clock, since the 16550A is capable of handling a top speed of 1.5 + * megabits/second; but this requires the faster clock. + */ +#define BASE_BAUD ( 1843200 / 16 ) + +/* Standard COM flags (except for COM4, because of the 8514 problem) */ +#ifdef CONFIG_SERIAL_DETECT_IRQ +#define STD_COM_FLAGS (ASYNC_BOOT_AUTOCONF | ASYNC_SKIP_TEST | ASYNC_AUTO_IRQ) +#define STD_COM4_FLAGS (ASYNC_BOOT_AUTOCONF | ASYNC_AUTO_IRQ) #else -# include "serial_64.h" +#define STD_COM_FLAGS (ASYNC_BOOT_AUTOCONF | ASYNC_SKIP_TEST) +#define STD_COM4_FLAGS ASYNC_BOOT_AUTOCONF #endif + +#define SERIAL_PORT_DFNS \ + /* UART CLK PORT IRQ FLAGS */ \ + { 0, BASE_BAUD, 0x3F8, 4, STD_COM_FLAGS }, /* ttyS0 */ \ + { 0, BASE_BAUD, 0x2F8, 3, STD_COM_FLAGS }, /* ttyS1 */ \ + { 0, BASE_BAUD, 0x3E8, 4, STD_COM_FLAGS }, /* ttyS2 */ \ + { 0, BASE_BAUD, 0x2E8, 3, STD_COM4_FLAGS }, /* ttyS3 */ + +#endif /* _ASM_X86_SERIAL_H */ diff --git a/include/asm-x86/serial_32.h b/include/asm-x86/serial_32.h deleted file mode 100644 index bd67480ca10..00000000000 --- a/include/asm-x86/serial_32.h +++ /dev/null @@ -1,29 +0,0 @@ -/* - * include/asm-i386/serial.h - */ - - -/* - * This assumes you have a 1.8432 MHz clock for your UART. - * - * It'd be nice if someone built a serial card with a 24.576 MHz - * clock, since the 16550A is capable of handling a top speed of 1.5 - * megabits/second; but this requires the faster clock. - */ -#define BASE_BAUD ( 1843200 / 16 ) - -/* Standard COM flags (except for COM4, because of the 8514 problem) */ -#ifdef CONFIG_SERIAL_DETECT_IRQ -#define STD_COM_FLAGS (ASYNC_BOOT_AUTOCONF | ASYNC_SKIP_TEST | ASYNC_AUTO_IRQ) -#define STD_COM4_FLAGS (ASYNC_BOOT_AUTOCONF | ASYNC_AUTO_IRQ) -#else -#define STD_COM_FLAGS (ASYNC_BOOT_AUTOCONF | ASYNC_SKIP_TEST) -#define STD_COM4_FLAGS ASYNC_BOOT_AUTOCONF -#endif - -#define SERIAL_PORT_DFNS \ - /* UART CLK PORT IRQ FLAGS */ \ - { 0, BASE_BAUD, 0x3F8, 4, STD_COM_FLAGS }, /* ttyS0 */ \ - { 0, BASE_BAUD, 0x2F8, 3, STD_COM_FLAGS }, /* ttyS1 */ \ - { 0, BASE_BAUD, 0x3E8, 4, STD_COM_FLAGS }, /* ttyS2 */ \ - { 0, BASE_BAUD, 0x2E8, 3, STD_COM4_FLAGS }, /* ttyS3 */ diff --git a/include/asm-x86/serial_64.h b/include/asm-x86/serial_64.h deleted file mode 100644 index b0496e0d72a..00000000000 --- a/include/asm-x86/serial_64.h +++ /dev/null @@ -1,29 +0,0 @@ -/* - * include/asm-x86_64/serial.h - */ - - -/* - * This assumes you have a 1.8432 MHz clock for your UART. - * - * It'd be nice if someone built a serial card with a 24.576 MHz - * clock, since the 16550A is capable of handling a top speed of 1.5 - * megabits/second; but this requires the faster clock. - */ -#define BASE_BAUD ( 1843200 / 16 ) - -/* Standard COM flags (except for COM4, because of the 8514 problem) */ -#ifdef CONFIG_SERIAL_DETECT_IRQ -#define STD_COM_FLAGS (ASYNC_BOOT_AUTOCONF | ASYNC_SKIP_TEST | ASYNC_AUTO_IRQ) -#define STD_COM4_FLAGS (ASYNC_BOOT_AUTOCONF | ASYNC_AUTO_IRQ) -#else -#define STD_COM_FLAGS (ASYNC_BOOT_AUTOCONF | ASYNC_SKIP_TEST) -#define STD_COM4_FLAGS ASYNC_BOOT_AUTOCONF -#endif - -#define SERIAL_PORT_DFNS \ - /* UART CLK PORT IRQ FLAGS */ \ - { 0, BASE_BAUD, 0x3F8, 4, STD_COM_FLAGS }, /* ttyS0 */ \ - { 0, BASE_BAUD, 0x2F8, 3, STD_COM_FLAGS }, /* ttyS1 */ \ - { 0, BASE_BAUD, 0x3E8, 4, STD_COM_FLAGS }, /* ttyS2 */ \ - { 0, BASE_BAUD, 0x2E8, 3, STD_COM4_FLAGS }, /* ttyS3 */ diff --git a/include/asm-x86/sockios.h b/include/asm-x86/sockios.h index 5a134fc70b9..49cc72b5d3c 100644 --- a/include/asm-x86/sockios.h +++ b/include/asm-x86/sockios.h @@ -1,13 +1,13 @@ -#ifdef __KERNEL__ -# ifdef CONFIG_X86_32 -# include "sockios_32.h" -# else -# include "sockios_64.h" -# endif -#else -# ifdef __i386__ -# include "sockios_32.h" -# else -# include "sockios_64.h" -# endif -#endif +#ifndef _ASM_X86_SOCKIOS_H +#define _ASM_X86_SOCKIOS_H + +/* Socket-level I/O control calls. */ +#define FIOSETOWN 0x8901 +#define SIOCSPGRP 0x8902 +#define FIOGETOWN 0x8903 +#define SIOCGPGRP 0x8904 +#define SIOCATMARK 0x8905 +#define SIOCGSTAMP 0x8906 /* Get stamp (timeval) */ +#define SIOCGSTAMPNS 0x8907 /* Get stamp (timespec) */ + +#endif /* _ASM_X86_SOCKIOS_H */ diff --git a/include/asm-x86/sockios_32.h b/include/asm-x86/sockios_32.h deleted file mode 100644 index ff528c7d255..00000000000 --- a/include/asm-x86/sockios_32.h +++ /dev/null @@ -1,13 +0,0 @@ -#ifndef __ARCH_I386_SOCKIOS__ -#define __ARCH_I386_SOCKIOS__ - -/* Socket-level I/O control calls. */ -#define FIOSETOWN 0x8901 -#define SIOCSPGRP 0x8902 -#define FIOGETOWN 0x8903 -#define SIOCGPGRP 0x8904 -#define SIOCATMARK 0x8905 -#define SIOCGSTAMP 0x8906 /* Get stamp (timeval) */ -#define SIOCGSTAMPNS 0x8907 /* Get stamp (timespec) */ - -#endif diff --git a/include/asm-x86/sockios_64.h b/include/asm-x86/sockios_64.h deleted file mode 100644 index d726ba2513e..00000000000 --- a/include/asm-x86/sockios_64.h +++ /dev/null @@ -1,13 +0,0 @@ -#ifndef __ARCH_X8664_SOCKIOS__ -#define __ARCH_X8664_SOCKIOS__ - -/* Socket-level I/O control calls. */ -#define FIOSETOWN 0x8901 -#define SIOCSPGRP 0x8902 -#define FIOGETOWN 0x8903 -#define SIOCGPGRP 0x8904 -#define SIOCATMARK 0x8905 -#define SIOCGSTAMP 0x8906 /* Get stamp (timeval) */ -#define SIOCGSTAMPNS 0x8907 /* Get stamp (timespec) */ - -#endif -- cgit v1.2.3 From 003a46cfff308ee0d879dfa89b9a7c65b2a481bf Mon Sep 17 00:00:00 2001 From: Thomas Gleixner Date: Mon, 15 Oct 2007 13:57:47 +0200 Subject: x86: unify some more trivial include/asm-x86/ 32/64 variants Scripted unification. Signed-off-by: Thomas Gleixner --- include/asm-x86/Kbuild | 14 --- include/asm-x86/bugs.h | 11 +- include/asm-x86/bugs_32.h | 12 -- include/asm-x86/bugs_64.h | 6 - include/asm-x86/device.h | 13 +- include/asm-x86/device_32.h | 15 --- include/asm-x86/device_64.h | 15 --- include/asm-x86/intel_arch_perfmon.h | 36 +++++- include/asm-x86/intel_arch_perfmon_32.h | 31 ----- include/asm-x86/intel_arch_perfmon_64.h | 31 ----- include/asm-x86/ipcbuf.h | 42 +++++-- include/asm-x86/ipcbuf_32.h | 29 ----- include/asm-x86/ipcbuf_64.h | 29 ----- include/asm-x86/namei.h | 16 ++- include/asm-x86/namei_32.h | 17 --- include/asm-x86/namei_64.h | 11 -- include/asm-x86/param.h | 31 +++-- include/asm-x86/param_32.h | 22 ---- include/asm-x86/param_64.h | 22 ---- include/asm-x86/parport.h | 15 ++- include/asm-x86/parport_32.h | 18 --- include/asm-x86/parport_64.h | 18 --- include/asm-x86/rwlock.h | 14 ++- include/asm-x86/rwlock_32.h | 25 ---- include/asm-x86/rwlock_64.h | 26 ---- include/asm-x86/sembuf.h | 37 ++++-- include/asm-x86/sembuf_32.h | 25 ---- include/asm-x86/sembuf_64.h | 25 ---- include/asm-x86/shmparam.h | 19 +-- include/asm-x86/shmparam_32.h | 6 - include/asm-x86/shmparam_64.h | 6 - include/asm-x86/termbits.h | 211 ++++++++++++++++++++++++++++++-- include/asm-x86/termbits_32.h | 198 ------------------------------ include/asm-x86/termbits_64.h | 198 ------------------------------ include/asm-x86/termios.h | 108 ++++++++++++++-- include/asm-x86/termios_32.h | 90 -------------- include/asm-x86/termios_64.h | 90 -------------- include/asm-x86/ucontext.h | 25 ++-- include/asm-x86/ucontext_32.h | 12 -- include/asm-x86/ucontext_64.h | 12 -- include/asm-x86/unaligned.h | 42 ++++++- include/asm-x86/unaligned_32.h | 37 ------ include/asm-x86/unaligned_64.h | 37 ------ 43 files changed, 498 insertions(+), 1199 deletions(-) delete mode 100644 include/asm-x86/bugs_32.h delete mode 100644 include/asm-x86/bugs_64.h delete mode 100644 include/asm-x86/device_32.h delete mode 100644 include/asm-x86/device_64.h delete mode 100644 include/asm-x86/intel_arch_perfmon_32.h delete mode 100644 include/asm-x86/intel_arch_perfmon_64.h delete mode 100644 include/asm-x86/ipcbuf_32.h delete mode 100644 include/asm-x86/ipcbuf_64.h delete mode 100644 include/asm-x86/namei_32.h delete mode 100644 include/asm-x86/namei_64.h delete mode 100644 include/asm-x86/param_32.h delete mode 100644 include/asm-x86/param_64.h delete mode 100644 include/asm-x86/parport_32.h delete mode 100644 include/asm-x86/parport_64.h delete mode 100644 include/asm-x86/rwlock_32.h delete mode 100644 include/asm-x86/rwlock_64.h delete mode 100644 include/asm-x86/sembuf_32.h delete mode 100644 include/asm-x86/sembuf_64.h delete mode 100644 include/asm-x86/shmparam_32.h delete mode 100644 include/asm-x86/shmparam_64.h delete mode 100644 include/asm-x86/termbits_32.h delete mode 100644 include/asm-x86/termbits_64.h delete mode 100644 include/asm-x86/termios_32.h delete mode 100644 include/asm-x86/termios_64.h delete mode 100644 include/asm-x86/ucontext_32.h delete mode 100644 include/asm-x86/ucontext_64.h delete mode 100644 include/asm-x86/unaligned_32.h delete mode 100644 include/asm-x86/unaligned_64.h diff --git a/include/asm-x86/Kbuild b/include/asm-x86/Kbuild index 158deea39a5..bf98b67d382 100644 --- a/include/asm-x86/Kbuild +++ b/include/asm-x86/Kbuild @@ -9,8 +9,6 @@ header-y += msr-index.h header-y += prctl.h header-y += ptrace-abi.h header-y += sigcontext32.h -header-y += ucontext_32.h -header-y += ucontext_64.h header-y += ucontext.h header-y += vsyscall32.h @@ -24,8 +22,6 @@ unifdef-y += elf_32.h unifdef-y += elf_64.h unifdef-y += ioctls_32.h unifdef-y += ioctls_64.h -unifdef-y += ipcbuf_32.h -unifdef-y += ipcbuf_64.h unifdef-y += mce.h unifdef-y += mman_32.h unifdef-y += mman_64.h @@ -39,20 +35,14 @@ unifdef-y += mtrr_64.h unifdef-y += mtrr.h unifdef-y += page_32.h unifdef-y += page_64.h -unifdef-y += param_32.h -unifdef-y += param_64.h unifdef-y += posix_types_32.h unifdef-y += posix_types_64.h unifdef-y += ptrace_32.h unifdef-y += ptrace_64.h -unifdef-y += sembuf_32.h -unifdef-y += sembuf_64.h unifdef-y += setup_32.h unifdef-y += setup_64.h unifdef-y += shmbuf_32.h unifdef-y += shmbuf_64.h -unifdef-y += shmparam_32.h -unifdef-y += shmparam_64.h unifdef-y += sigcontext_32.h unifdef-y += sigcontext_64.h unifdef-y += siginfo_32.h @@ -63,10 +53,6 @@ unifdef-y += stat_32.h unifdef-y += stat_64.h unifdef-y += statfs_32.h unifdef-y += statfs_64.h -unifdef-y += termbits_32.h -unifdef-y += termbits_64.h -unifdef-y += termios_32.h -unifdef-y += termios_64.h unifdef-y += types_32.h unifdef-y += types_64.h unifdef-y += unistd_32.h diff --git a/include/asm-x86/bugs.h b/include/asm-x86/bugs.h index ddf42d36dd5..aac8317420a 100644 --- a/include/asm-x86/bugs.h +++ b/include/asm-x86/bugs.h @@ -1,5 +1,6 @@ -#ifdef CONFIG_X86_32 -# include "bugs_32.h" -#else -# include "bugs_64.h" -#endif +#ifndef _ASM_X86_BUGS_H +#define _ASM_X86_BUGS_H + +void check_bugs(void); + +#endif /* _ASM_X86_BUGS_H */ diff --git a/include/asm-x86/bugs_32.h b/include/asm-x86/bugs_32.h deleted file mode 100644 index d28979ff73b..00000000000 --- a/include/asm-x86/bugs_32.h +++ /dev/null @@ -1,12 +0,0 @@ -/* - * This is included by init/main.c to check for architecture-dependent bugs. - * - * Needs: - * void check_bugs(void); - */ -#ifndef _ASM_I386_BUG_H -#define _ASM_I386_BUG_H - -void check_bugs(void); - -#endif /* _ASM_I386_BUG_H */ diff --git a/include/asm-x86/bugs_64.h b/include/asm-x86/bugs_64.h deleted file mode 100644 index b33dc04d8f4..00000000000 --- a/include/asm-x86/bugs_64.h +++ /dev/null @@ -1,6 +0,0 @@ -#ifndef _ASM_X86_64_BUGS_H -#define _ASM_X86_64_BUGS_H - -void check_bugs(void); - -#endif /* _ASM_X86_64_BUGS_H */ diff --git a/include/asm-x86/device.h b/include/asm-x86/device.h index e2bcf7c7dce..d9ee5e52e91 100644 --- a/include/asm-x86/device.h +++ b/include/asm-x86/device.h @@ -1,5 +1,10 @@ -#ifdef CONFIG_X86_32 -# include "device_32.h" -#else -# include "device_64.h" +#ifndef _ASM_X86_DEVICE_H +#define _ASM_X86_DEVICE_H + +struct dev_archdata { +#ifdef CONFIG_ACPI + void *acpi_handle; #endif +}; + +#endif /* _ASM_X86_DEVICE_H */ diff --git a/include/asm-x86/device_32.h b/include/asm-x86/device_32.h deleted file mode 100644 index 849604c70e6..00000000000 --- a/include/asm-x86/device_32.h +++ /dev/null @@ -1,15 +0,0 @@ -/* - * Arch specific extensions to struct device - * - * This file is released under the GPLv2 - */ -#ifndef _ASM_I386_DEVICE_H -#define _ASM_I386_DEVICE_H - -struct dev_archdata { -#ifdef CONFIG_ACPI - void *acpi_handle; -#endif -}; - -#endif /* _ASM_I386_DEVICE_H */ diff --git a/include/asm-x86/device_64.h b/include/asm-x86/device_64.h deleted file mode 100644 index 3afa03f33a3..00000000000 --- a/include/asm-x86/device_64.h +++ /dev/null @@ -1,15 +0,0 @@ -/* - * Arch specific extensions to struct device - * - * This file is released under the GPLv2 - */ -#ifndef _ASM_X86_64_DEVICE_H -#define _ASM_X86_64_DEVICE_H - -struct dev_archdata { -#ifdef CONFIG_ACPI - void *acpi_handle; -#endif -}; - -#endif /* _ASM_X86_64_DEVICE_H */ diff --git a/include/asm-x86/intel_arch_perfmon.h b/include/asm-x86/intel_arch_perfmon.h index 4f6d4e6bf57..fa0fd068bc2 100644 --- a/include/asm-x86/intel_arch_perfmon.h +++ b/include/asm-x86/intel_arch_perfmon.h @@ -1,5 +1,31 @@ -#ifdef CONFIG_X86_32 -# include "intel_arch_perfmon_32.h" -#else -# include "intel_arch_perfmon_64.h" -#endif +#ifndef _ASM_X86_INTEL_ARCH_PERFMON_H +#define _ASM_X86_INTEL_ARCH_PERFMON_H + +#define MSR_ARCH_PERFMON_PERFCTR0 0xc1 +#define MSR_ARCH_PERFMON_PERFCTR1 0xc2 + +#define MSR_ARCH_PERFMON_EVENTSEL0 0x186 +#define MSR_ARCH_PERFMON_EVENTSEL1 0x187 + +#define ARCH_PERFMON_EVENTSEL0_ENABLE (1 << 22) +#define ARCH_PERFMON_EVENTSEL_INT (1 << 20) +#define ARCH_PERFMON_EVENTSEL_OS (1 << 17) +#define ARCH_PERFMON_EVENTSEL_USR (1 << 16) + +#define ARCH_PERFMON_UNHALTED_CORE_CYCLES_SEL (0x3c) +#define ARCH_PERFMON_UNHALTED_CORE_CYCLES_UMASK (0x00 << 8) +#define ARCH_PERFMON_UNHALTED_CORE_CYCLES_INDEX (0) +#define ARCH_PERFMON_UNHALTED_CORE_CYCLES_PRESENT \ + (1 << (ARCH_PERFMON_UNHALTED_CORE_CYCLES_INDEX)) + +union cpuid10_eax { + struct { + unsigned int version_id:8; + unsigned int num_counters:8; + unsigned int bit_width:8; + unsigned int mask_length:8; + } split; + unsigned int full; +}; + +#endif /* _ASM_X86_INTEL_ARCH_PERFMON_H */ diff --git a/include/asm-x86/intel_arch_perfmon_32.h b/include/asm-x86/intel_arch_perfmon_32.h deleted file mode 100644 index b52cd60a075..00000000000 --- a/include/asm-x86/intel_arch_perfmon_32.h +++ /dev/null @@ -1,31 +0,0 @@ -#ifndef X86_INTEL_ARCH_PERFMON_H -#define X86_INTEL_ARCH_PERFMON_H 1 - -#define MSR_ARCH_PERFMON_PERFCTR0 0xc1 -#define MSR_ARCH_PERFMON_PERFCTR1 0xc2 - -#define MSR_ARCH_PERFMON_EVENTSEL0 0x186 -#define MSR_ARCH_PERFMON_EVENTSEL1 0x187 - -#define ARCH_PERFMON_EVENTSEL0_ENABLE (1 << 22) -#define ARCH_PERFMON_EVENTSEL_INT (1 << 20) -#define ARCH_PERFMON_EVENTSEL_OS (1 << 17) -#define ARCH_PERFMON_EVENTSEL_USR (1 << 16) - -#define ARCH_PERFMON_UNHALTED_CORE_CYCLES_SEL (0x3c) -#define ARCH_PERFMON_UNHALTED_CORE_CYCLES_UMASK (0x00 << 8) -#define ARCH_PERFMON_UNHALTED_CORE_CYCLES_INDEX (0) -#define ARCH_PERFMON_UNHALTED_CORE_CYCLES_PRESENT \ - (1 << (ARCH_PERFMON_UNHALTED_CORE_CYCLES_INDEX)) - -union cpuid10_eax { - struct { - unsigned int version_id:8; - unsigned int num_counters:8; - unsigned int bit_width:8; - unsigned int mask_length:8; - } split; - unsigned int full; -}; - -#endif /* X86_INTEL_ARCH_PERFMON_H */ diff --git a/include/asm-x86/intel_arch_perfmon_64.h b/include/asm-x86/intel_arch_perfmon_64.h deleted file mode 100644 index 8633331420e..00000000000 --- a/include/asm-x86/intel_arch_perfmon_64.h +++ /dev/null @@ -1,31 +0,0 @@ -#ifndef X86_64_INTEL_ARCH_PERFMON_H -#define X86_64_INTEL_ARCH_PERFMON_H 1 - -#define MSR_ARCH_PERFMON_PERFCTR0 0xc1 -#define MSR_ARCH_PERFMON_PERFCTR1 0xc2 - -#define MSR_ARCH_PERFMON_EVENTSEL0 0x186 -#define MSR_ARCH_PERFMON_EVENTSEL1 0x187 - -#define ARCH_PERFMON_EVENTSEL0_ENABLE (1 << 22) -#define ARCH_PERFMON_EVENTSEL_INT (1 << 20) -#define ARCH_PERFMON_EVENTSEL_OS (1 << 17) -#define ARCH_PERFMON_EVENTSEL_USR (1 << 16) - -#define ARCH_PERFMON_UNHALTED_CORE_CYCLES_SEL (0x3c) -#define ARCH_PERFMON_UNHALTED_CORE_CYCLES_UMASK (0x00 << 8) -#define ARCH_PERFMON_UNHALTED_CORE_CYCLES_INDEX (0) -#define ARCH_PERFMON_UNHALTED_CORE_CYCLES_PRESENT \ - (1 << (ARCH_PERFMON_UNHALTED_CORE_CYCLES_INDEX)) - -union cpuid10_eax { - struct { - unsigned int version_id:8; - unsigned int num_counters:8; - unsigned int bit_width:8; - unsigned int mask_length:8; - } split; - unsigned int full; -}; - -#endif /* X86_64_INTEL_ARCH_PERFMON_H */ diff --git a/include/asm-x86/ipcbuf.h b/include/asm-x86/ipcbuf.h index eb2e448c6e2..2adf8b39a40 100644 --- a/include/asm-x86/ipcbuf.h +++ b/include/asm-x86/ipcbuf.h @@ -1,13 +1,29 @@ -#ifdef __KERNEL__ -# ifdef CONFIG_X86_32 -# include "ipcbuf_32.h" -# else -# include "ipcbuf_64.h" -# endif -#else -# ifdef __i386__ -# include "ipcbuf_32.h" -# else -# include "ipcbuf_64.h" -# endif -#endif +#ifndef _ASM_X86_IPCBUF_H +#define _ASM_X86_IPCBUF_H + +/* + * The ipc64_perm structure for x86 architecture. + * Note extra padding because this structure is passed back and forth + * between kernel and user space. + * + * Pad space is left for: + * - 32-bit mode_t and seq + * - 2 miscellaneous 32-bit values + */ + +struct ipc64_perm +{ + __kernel_key_t key; + __kernel_uid32_t uid; + __kernel_gid32_t gid; + __kernel_uid32_t cuid; + __kernel_gid32_t cgid; + __kernel_mode_t mode; + unsigned short __pad1; + unsigned short seq; + unsigned short __pad2; + unsigned long __unused1; + unsigned long __unused2; +}; + +#endif /* _ASM_X86_IPCBUF_H */ diff --git a/include/asm-x86/ipcbuf_32.h b/include/asm-x86/ipcbuf_32.h deleted file mode 100644 index 0dcad4f84c2..00000000000 --- a/include/asm-x86/ipcbuf_32.h +++ /dev/null @@ -1,29 +0,0 @@ -#ifndef __i386_IPCBUF_H__ -#define __i386_IPCBUF_H__ - -/* - * The ipc64_perm structure for i386 architecture. - * Note extra padding because this structure is passed back and forth - * between kernel and user space. - * - * Pad space is left for: - * - 32-bit mode_t and seq - * - 2 miscellaneous 32-bit values - */ - -struct ipc64_perm -{ - __kernel_key_t key; - __kernel_uid32_t uid; - __kernel_gid32_t gid; - __kernel_uid32_t cuid; - __kernel_gid32_t cgid; - __kernel_mode_t mode; - unsigned short __pad1; - unsigned short seq; - unsigned short __pad2; - unsigned long __unused1; - unsigned long __unused2; -}; - -#endif /* __i386_IPCBUF_H__ */ diff --git a/include/asm-x86/ipcbuf_64.h b/include/asm-x86/ipcbuf_64.h deleted file mode 100644 index 470cf85e3ba..00000000000 --- a/include/asm-x86/ipcbuf_64.h +++ /dev/null @@ -1,29 +0,0 @@ -#ifndef __x86_64_IPCBUF_H__ -#define __x86_64_IPCBUF_H__ - -/* - * The ipc64_perm structure for x86_64 architecture. - * Note extra padding because this structure is passed back and forth - * between kernel and user space. - * - * Pad space is left for: - * - 32-bit mode_t and seq - * - 2 miscellaneous 32-bit values - */ - -struct ipc64_perm -{ - __kernel_key_t key; - __kernel_uid32_t uid; - __kernel_gid32_t gid; - __kernel_uid32_t cuid; - __kernel_gid32_t cgid; - __kernel_mode_t mode; - unsigned short __pad1; - unsigned short seq; - unsigned short __pad2; - unsigned long __unused1; - unsigned long __unused2; -}; - -#endif /* __x86_64_IPCBUF_H__ */ diff --git a/include/asm-x86/namei.h b/include/asm-x86/namei.h index 732f8f0b3dc..415ef5d9550 100644 --- a/include/asm-x86/namei.h +++ b/include/asm-x86/namei.h @@ -1,5 +1,11 @@ -#ifdef CONFIG_X86_32 -# include "namei_32.h" -#else -# include "namei_64.h" -#endif +#ifndef _ASM_X86_NAMEI_H +#define _ASM_X86_NAMEI_H + +/* This dummy routine maybe changed to something useful + * for /usr/gnemul/ emulation stuff. + * Look at asm-sparc/namei.h for details. + */ + +#define __emul_prefix() NULL + +#endif /* _ASM_X86_NAMEI_H */ diff --git a/include/asm-x86/namei_32.h b/include/asm-x86/namei_32.h deleted file mode 100644 index 81486508861..00000000000 --- a/include/asm-x86/namei_32.h +++ /dev/null @@ -1,17 +0,0 @@ -/* $Id: namei.h,v 1.1 1996/12/13 14:48:21 jj Exp $ - * linux/include/asm-i386/namei.h - * - * Included from linux/fs/namei.c - */ - -#ifndef __I386_NAMEI_H -#define __I386_NAMEI_H - -/* This dummy routine maybe changed to something useful - * for /usr/gnemul/ emulation stuff. - * Look at asm-sparc/namei.h for details. - */ - -#define __emul_prefix() NULL - -#endif /* __I386_NAMEI_H */ diff --git a/include/asm-x86/namei_64.h b/include/asm-x86/namei_64.h deleted file mode 100644 index bef239f5318..00000000000 --- a/include/asm-x86/namei_64.h +++ /dev/null @@ -1,11 +0,0 @@ -#ifndef __X8664_NAMEI_H -#define __X8664_NAMEI_H - -/* This dummy routine maybe changed to something useful - * for /usr/gnemul/ emulation stuff. - * Look at asm-sparc/namei.h for details. - */ - -#define __emul_prefix() NULL - -#endif diff --git a/include/asm-x86/param.h b/include/asm-x86/param.h index 640851bab12..c996ec4da0c 100644 --- a/include/asm-x86/param.h +++ b/include/asm-x86/param.h @@ -1,13 +1,22 @@ +#ifndef _ASM_X86_PARAM_H +#define _ASM_X86_PARAM_H + #ifdef __KERNEL__ -# ifdef CONFIG_X86_32 -# include "param_32.h" -# else -# include "param_64.h" -# endif -#else -# ifdef __i386__ -# include "param_32.h" -# else -# include "param_64.h" -# endif +# define HZ CONFIG_HZ /* Internal kernel timer frequency */ +# define USER_HZ 100 /* .. some user interfaces are in "ticks" */ +# define CLOCKS_PER_SEC (USER_HZ) /* like times() */ #endif + +#ifndef HZ +#define HZ 100 +#endif + +#define EXEC_PAGESIZE 4096 + +#ifndef NOGROUP +#define NOGROUP (-1) +#endif + +#define MAXHOSTNAMELEN 64 /* max length of hostname */ + +#endif /* _ASM_X86_PARAM_H */ diff --git a/include/asm-x86/param_32.h b/include/asm-x86/param_32.h deleted file mode 100644 index 21b32466fcd..00000000000 --- a/include/asm-x86/param_32.h +++ /dev/null @@ -1,22 +0,0 @@ -#ifndef _ASMi386_PARAM_H -#define _ASMi386_PARAM_H - -#ifdef __KERNEL__ -# define HZ CONFIG_HZ /* Internal kernel timer frequency */ -# define USER_HZ 100 /* .. some user interfaces are in "ticks" */ -# define CLOCKS_PER_SEC (USER_HZ) /* like times() */ -#endif - -#ifndef HZ -#define HZ 100 -#endif - -#define EXEC_PAGESIZE 4096 - -#ifndef NOGROUP -#define NOGROUP (-1) -#endif - -#define MAXHOSTNAMELEN 64 /* max length of hostname */ - -#endif diff --git a/include/asm-x86/param_64.h b/include/asm-x86/param_64.h deleted file mode 100644 index a728786c3c7..00000000000 --- a/include/asm-x86/param_64.h +++ /dev/null @@ -1,22 +0,0 @@ -#ifndef _ASMx86_64_PARAM_H -#define _ASMx86_64_PARAM_H - -#ifdef __KERNEL__ -# define HZ CONFIG_HZ /* Internal kernel timer frequency */ -# define USER_HZ 100 /* .. some user interfaces are in "ticks */ -#define CLOCKS_PER_SEC (USER_HZ) /* like times() */ -#endif - -#ifndef HZ -#define HZ 100 -#endif - -#define EXEC_PAGESIZE 4096 - -#ifndef NOGROUP -#define NOGROUP (-1) -#endif - -#define MAXHOSTNAMELEN 64 /* max length of hostname */ - -#endif diff --git a/include/asm-x86/parport.h b/include/asm-x86/parport.h index 2a31157349c..019cbca24a3 100644 --- a/include/asm-x86/parport.h +++ b/include/asm-x86/parport.h @@ -1,5 +1,10 @@ -#ifdef CONFIG_X86_32 -# include "parport_32.h" -#else -# include "parport_64.h" -#endif +#ifndef _ASM_X86_PARPORT_H +#define _ASM_X86_PARPORT_H + +static int __devinit parport_pc_find_isa_ports (int autoirq, int autodma); +static int __devinit parport_pc_find_nonpci_ports (int autoirq, int autodma) +{ + return parport_pc_find_isa_ports (autoirq, autodma); +} + +#endif /* _ASM_X86_PARPORT_H */ diff --git a/include/asm-x86/parport_32.h b/include/asm-x86/parport_32.h deleted file mode 100644 index fa0e321e498..00000000000 --- a/include/asm-x86/parport_32.h +++ /dev/null @@ -1,18 +0,0 @@ -/* - * parport.h: ia32-specific parport initialisation - * - * Copyright (C) 1999, 2000 Tim Waugh - * - * This file should only be included by drivers/parport/parport_pc.c. - */ - -#ifndef _ASM_I386_PARPORT_H -#define _ASM_I386_PARPORT_H 1 - -static int __devinit parport_pc_find_isa_ports (int autoirq, int autodma); -static int __devinit parport_pc_find_nonpci_ports (int autoirq, int autodma) -{ - return parport_pc_find_isa_ports (autoirq, autodma); -} - -#endif /* !(_ASM_I386_PARPORT_H) */ diff --git a/include/asm-x86/parport_64.h b/include/asm-x86/parport_64.h deleted file mode 100644 index 7135ef977c9..00000000000 --- a/include/asm-x86/parport_64.h +++ /dev/null @@ -1,18 +0,0 @@ -/* - * parport.h: ia32-specific parport initialisation - * - * Copyright (C) 1999, 2000 Tim Waugh - * - * This file should only be included by drivers/parport/parport_pc.c. - */ - -#ifndef _ASM_X8664_PARPORT_H -#define _ASM_X8664_PARPORT_H 1 - -static int __devinit parport_pc_find_isa_ports (int autoirq, int autodma); -static int __devinit parport_pc_find_nonpci_ports (int autoirq, int autodma) -{ - return parport_pc_find_isa_ports (autoirq, autodma); -} - -#endif diff --git a/include/asm-x86/rwlock.h b/include/asm-x86/rwlock.h index a3be7d8364a..f2b64a429e6 100644 --- a/include/asm-x86/rwlock.h +++ b/include/asm-x86/rwlock.h @@ -1,5 +1,9 @@ -#ifdef CONFIG_X86_32 -# include "rwlock_32.h" -#else -# include "rwlock_64.h" -#endif +#ifndef _ASM_X86_RWLOCK_H +#define _ASM_X86_RWLOCK_H + +#define RW_LOCK_BIAS 0x01000000 +#define RW_LOCK_BIAS_STR "0x01000000" + +/* Actual code is in asm/spinlock.h or in arch/x86/lib/rwlock.S */ + +#endif /* _ASM_X86_RWLOCK_H */ diff --git a/include/asm-x86/rwlock_32.h b/include/asm-x86/rwlock_32.h deleted file mode 100644 index c3e5db32fa4..00000000000 --- a/include/asm-x86/rwlock_32.h +++ /dev/null @@ -1,25 +0,0 @@ -/* include/asm-i386/rwlock.h - * - * Helpers used by both rw spinlocks and rw semaphores. - * - * Based in part on code from semaphore.h and - * spinlock.h Copyright 1996 Linus Torvalds. - * - * Copyright 1999 Red Hat, Inc. - * - * Written by Benjamin LaHaise. - * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License - * as published by the Free Software Foundation; either version - * 2 of the License, or (at your option) any later version. - */ -#ifndef _ASM_I386_RWLOCK_H -#define _ASM_I386_RWLOCK_H - -#define RW_LOCK_BIAS 0x01000000 -#define RW_LOCK_BIAS_STR "0x01000000" - -/* Code is in asm-i386/spinlock.h */ - -#endif diff --git a/include/asm-x86/rwlock_64.h b/include/asm-x86/rwlock_64.h deleted file mode 100644 index 72aeebed920..00000000000 --- a/include/asm-x86/rwlock_64.h +++ /dev/null @@ -1,26 +0,0 @@ -/* include/asm-x86_64/rwlock.h - * - * Helpers used by both rw spinlocks and rw semaphores. - * - * Based in part on code from semaphore.h and - * spinlock.h Copyright 1996 Linus Torvalds. - * - * Copyright 1999 Red Hat, Inc. - * Copyright 2001,2002 SuSE labs - * - * Written by Benjamin LaHaise. - * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License - * as published by the Free Software Foundation; either version - * 2 of the License, or (at your option) any later version. - */ -#ifndef _ASM_X86_64_RWLOCK_H -#define _ASM_X86_64_RWLOCK_H - -#define RW_LOCK_BIAS 0x01000000 -#define RW_LOCK_BIAS_STR "0x01000000" - -/* Actual code is in asm/spinlock.h or in arch/x86_64/lib/rwlock.S */ - -#endif diff --git a/include/asm-x86/sembuf.h b/include/asm-x86/sembuf.h index e42c971e383..ee50c801f7b 100644 --- a/include/asm-x86/sembuf.h +++ b/include/asm-x86/sembuf.h @@ -1,13 +1,24 @@ -#ifdef __KERNEL__ -# ifdef CONFIG_X86_32 -# include "sembuf_32.h" -# else -# include "sembuf_64.h" -# endif -#else -# ifdef __i386__ -# include "sembuf_32.h" -# else -# include "sembuf_64.h" -# endif -#endif +#ifndef _ASM_X86_SEMBUF_H +#define _ASM_X86_SEMBUF_H + +/* + * The semid64_ds structure for x86 architecture. + * Note extra padding because this structure is passed back and forth + * between kernel and user space. + * + * Pad space is left for: + * - 64-bit time_t to solve y2038 problem + * - 2 miscellaneous 32-bit values + */ +struct semid64_ds { + struct ipc64_perm sem_perm; /* permissions .. see ipc.h */ + __kernel_time_t sem_otime; /* last semop time */ + unsigned long __unused1; + __kernel_time_t sem_ctime; /* last change time */ + unsigned long __unused2; + unsigned long sem_nsems; /* no. of semaphores in array */ + unsigned long __unused3; + unsigned long __unused4; +}; + +#endif /* _ASM_X86_SEMBUF_H */ diff --git a/include/asm-x86/sembuf_32.h b/include/asm-x86/sembuf_32.h deleted file mode 100644 index 323835166c1..00000000000 --- a/include/asm-x86/sembuf_32.h +++ /dev/null @@ -1,25 +0,0 @@ -#ifndef _I386_SEMBUF_H -#define _I386_SEMBUF_H - -/* - * The semid64_ds structure for i386 architecture. - * Note extra padding because this structure is passed back and forth - * between kernel and user space. - * - * Pad space is left for: - * - 64-bit time_t to solve y2038 problem - * - 2 miscellaneous 32-bit values - */ - -struct semid64_ds { - struct ipc64_perm sem_perm; /* permissions .. see ipc.h */ - __kernel_time_t sem_otime; /* last semop time */ - unsigned long __unused1; - __kernel_time_t sem_ctime; /* last change time */ - unsigned long __unused2; - unsigned long sem_nsems; /* no. of semaphores in array */ - unsigned long __unused3; - unsigned long __unused4; -}; - -#endif /* _I386_SEMBUF_H */ diff --git a/include/asm-x86/sembuf_64.h b/include/asm-x86/sembuf_64.h deleted file mode 100644 index 63b52925ae2..00000000000 --- a/include/asm-x86/sembuf_64.h +++ /dev/null @@ -1,25 +0,0 @@ -#ifndef _X86_64_SEMBUF_H -#define _X86_64_SEMBUF_H - -/* - * The semid64_ds structure for x86_64 architecture. - * Note extra padding because this structure is passed back and forth - * between kernel and user space. - * - * Pad space is left for: - * - 64-bit time_t to solve y2038 problem - * - 2 miscellaneous 32-bit values - */ - -struct semid64_ds { - struct ipc64_perm sem_perm; /* permissions .. see ipc.h */ - __kernel_time_t sem_otime; /* last semop time */ - unsigned long __unused1; - __kernel_time_t sem_ctime; /* last change time */ - unsigned long __unused2; - unsigned long sem_nsems; /* no. of semaphores in array */ - unsigned long __unused3; - unsigned long __unused4; -}; - -#endif /* _X86_64_SEMBUF_H */ diff --git a/include/asm-x86/shmparam.h b/include/asm-x86/shmparam.h index 165627cc534..0880cf0917b 100644 --- a/include/asm-x86/shmparam.h +++ b/include/asm-x86/shmparam.h @@ -1,13 +1,6 @@ -#ifdef __KERNEL__ -# ifdef CONFIG_X86_32 -# include "shmparam_32.h" -# else -# include "shmparam_64.h" -# endif -#else -# ifdef __i386__ -# include "shmparam_32.h" -# else -# include "shmparam_64.h" -# endif -#endif +#ifndef _ASM_X86_SHMPARAM_H +#define _ASM_X86_SHMPARAM_H + +#define SHMLBA PAGE_SIZE /* attach addr a multiple of this */ + +#endif /* _ASM_X86_SHMPARAM_H */ diff --git a/include/asm-x86/shmparam_32.h b/include/asm-x86/shmparam_32.h deleted file mode 100644 index 786243a5b31..00000000000 --- a/include/asm-x86/shmparam_32.h +++ /dev/null @@ -1,6 +0,0 @@ -#ifndef _ASMI386_SHMPARAM_H -#define _ASMI386_SHMPARAM_H - -#define SHMLBA PAGE_SIZE /* attach addr a multiple of this */ - -#endif /* _ASMI386_SHMPARAM_H */ diff --git a/include/asm-x86/shmparam_64.h b/include/asm-x86/shmparam_64.h deleted file mode 100644 index d7021620dcb..00000000000 --- a/include/asm-x86/shmparam_64.h +++ /dev/null @@ -1,6 +0,0 @@ -#ifndef _ASMX8664_SHMPARAM_H -#define _ASMX8664_SHMPARAM_H - -#define SHMLBA PAGE_SIZE /* attach addr a multiple of this */ - -#endif /* _ASMX8664_SHMPARAM_H */ diff --git a/include/asm-x86/termbits.h b/include/asm-x86/termbits.h index 69f3080e2a1..af1b70ea440 100644 --- a/include/asm-x86/termbits.h +++ b/include/asm-x86/termbits.h @@ -1,13 +1,198 @@ -#ifdef __KERNEL__ -# ifdef CONFIG_X86_32 -# include "termbits_32.h" -# else -# include "termbits_64.h" -# endif -#else -# ifdef __i386__ -# include "termbits_32.h" -# else -# include "termbits_64.h" -# endif -#endif +#ifndef _ASM_X86_TERMBITS_H +#define _ASM_X86_TERMBITS_H + +#include + +typedef unsigned char cc_t; +typedef unsigned int speed_t; +typedef unsigned int tcflag_t; + +#define NCCS 19 +struct termios { + tcflag_t c_iflag; /* input mode flags */ + tcflag_t c_oflag; /* output mode flags */ + tcflag_t c_cflag; /* control mode flags */ + tcflag_t c_lflag; /* local mode flags */ + cc_t c_line; /* line discipline */ + cc_t c_cc[NCCS]; /* control characters */ +}; + +struct termios2 { + tcflag_t c_iflag; /* input mode flags */ + tcflag_t c_oflag; /* output mode flags */ + tcflag_t c_cflag; /* control mode flags */ + tcflag_t c_lflag; /* local mode flags */ + cc_t c_line; /* line discipline */ + cc_t c_cc[NCCS]; /* control characters */ + speed_t c_ispeed; /* input speed */ + speed_t c_ospeed; /* output speed */ +}; + +struct ktermios { + tcflag_t c_iflag; /* input mode flags */ + tcflag_t c_oflag; /* output mode flags */ + tcflag_t c_cflag; /* control mode flags */ + tcflag_t c_lflag; /* local mode flags */ + cc_t c_line; /* line discipline */ + cc_t c_cc[NCCS]; /* control characters */ + speed_t c_ispeed; /* input speed */ + speed_t c_ospeed; /* output speed */ +}; + +/* c_cc characters */ +#define VINTR 0 +#define VQUIT 1 +#define VERASE 2 +#define VKILL 3 +#define VEOF 4 +#define VTIME 5 +#define VMIN 6 +#define VSWTC 7 +#define VSTART 8 +#define VSTOP 9 +#define VSUSP 10 +#define VEOL 11 +#define VREPRINT 12 +#define VDISCARD 13 +#define VWERASE 14 +#define VLNEXT 15 +#define VEOL2 16 + +/* c_iflag bits */ +#define IGNBRK 0000001 +#define BRKINT 0000002 +#define IGNPAR 0000004 +#define PARMRK 0000010 +#define INPCK 0000020 +#define ISTRIP 0000040 +#define INLCR 0000100 +#define IGNCR 0000200 +#define ICRNL 0000400 +#define IUCLC 0001000 +#define IXON 0002000 +#define IXANY 0004000 +#define IXOFF 0010000 +#define IMAXBEL 0020000 +#define IUTF8 0040000 + +/* c_oflag bits */ +#define OPOST 0000001 +#define OLCUC 0000002 +#define ONLCR 0000004 +#define OCRNL 0000010 +#define ONOCR 0000020 +#define ONLRET 0000040 +#define OFILL 0000100 +#define OFDEL 0000200 +#define NLDLY 0000400 +#define NL0 0000000 +#define NL1 0000400 +#define CRDLY 0003000 +#define CR0 0000000 +#define CR1 0001000 +#define CR2 0002000 +#define CR3 0003000 +#define TABDLY 0014000 +#define TAB0 0000000 +#define TAB1 0004000 +#define TAB2 0010000 +#define TAB3 0014000 +#define XTABS 0014000 +#define BSDLY 0020000 +#define BS0 0000000 +#define BS1 0020000 +#define VTDLY 0040000 +#define VT0 0000000 +#define VT1 0040000 +#define FFDLY 0100000 +#define FF0 0000000 +#define FF1 0100000 + +/* c_cflag bit meaning */ +#define CBAUD 0010017 +#define B0 0000000 /* hang up */ +#define B50 0000001 +#define B75 0000002 +#define B110 0000003 +#define B134 0000004 +#define B150 0000005 +#define B200 0000006 +#define B300 0000007 +#define B600 0000010 +#define B1200 0000011 +#define B1800 0000012 +#define B2400 0000013 +#define B4800 0000014 +#define B9600 0000015 +#define B19200 0000016 +#define B38400 0000017 +#define EXTA B19200 +#define EXTB B38400 +#define CSIZE 0000060 +#define CS5 0000000 +#define CS6 0000020 +#define CS7 0000040 +#define CS8 0000060 +#define CSTOPB 0000100 +#define CREAD 0000200 +#define PARENB 0000400 +#define PARODD 0001000 +#define HUPCL 0002000 +#define CLOCAL 0004000 +#define CBAUDEX 0010000 +#define BOTHER 0010000 /* non standard rate */ +#define B57600 0010001 +#define B115200 0010002 +#define B230400 0010003 +#define B460800 0010004 +#define B500000 0010005 +#define B576000 0010006 +#define B921600 0010007 +#define B1000000 0010010 +#define B1152000 0010011 +#define B1500000 0010012 +#define B2000000 0010013 +#define B2500000 0010014 +#define B3000000 0010015 +#define B3500000 0010016 +#define B4000000 0010017 +#define CIBAUD 002003600000 /* input baud rate */ +#define CMSPAR 010000000000 /* mark or space (stick) parity */ +#define CRTSCTS 020000000000 /* flow control */ + +#define IBSHIFT 16 /* Shift from CBAUD to CIBAUD */ + +/* c_lflag bits */ +#define ISIG 0000001 +#define ICANON 0000002 +#define XCASE 0000004 +#define ECHO 0000010 +#define ECHOE 0000020 +#define ECHOK 0000040 +#define ECHONL 0000100 +#define NOFLSH 0000200 +#define TOSTOP 0000400 +#define ECHOCTL 0001000 +#define ECHOPRT 0002000 +#define ECHOKE 0004000 +#define FLUSHO 0010000 +#define PENDIN 0040000 +#define IEXTEN 0100000 + +/* tcflow() and TCXONC use these */ +#define TCOOFF 0 +#define TCOON 1 +#define TCIOFF 2 +#define TCION 3 + +/* tcflush() and TCFLSH use these */ +#define TCIFLUSH 0 +#define TCOFLUSH 1 +#define TCIOFLUSH 2 + +/* tcsetattr uses these */ +#define TCSANOW 0 +#define TCSADRAIN 1 +#define TCSAFLUSH 2 + +#endif /* _ASM_X86_TERMBITS_H */ diff --git a/include/asm-x86/termbits_32.h b/include/asm-x86/termbits_32.h deleted file mode 100644 index a21700352e7..00000000000 --- a/include/asm-x86/termbits_32.h +++ /dev/null @@ -1,198 +0,0 @@ -#ifndef __ARCH_I386_TERMBITS_H__ -#define __ARCH_I386_TERMBITS_H__ - -#include - -typedef unsigned char cc_t; -typedef unsigned int speed_t; -typedef unsigned int tcflag_t; - -#define NCCS 19 -struct termios { - tcflag_t c_iflag; /* input mode flags */ - tcflag_t c_oflag; /* output mode flags */ - tcflag_t c_cflag; /* control mode flags */ - tcflag_t c_lflag; /* local mode flags */ - cc_t c_line; /* line discipline */ - cc_t c_cc[NCCS]; /* control characters */ -}; - -struct termios2 { - tcflag_t c_iflag; /* input mode flags */ - tcflag_t c_oflag; /* output mode flags */ - tcflag_t c_cflag; /* control mode flags */ - tcflag_t c_lflag; /* local mode flags */ - cc_t c_line; /* line discipline */ - cc_t c_cc[NCCS]; /* control characters */ - speed_t c_ispeed; /* input speed */ - speed_t c_ospeed; /* output speed */ -}; - -struct ktermios { - tcflag_t c_iflag; /* input mode flags */ - tcflag_t c_oflag; /* output mode flags */ - tcflag_t c_cflag; /* control mode flags */ - tcflag_t c_lflag; /* local mode flags */ - cc_t c_line; /* line discipline */ - cc_t c_cc[NCCS]; /* control characters */ - speed_t c_ispeed; /* input speed */ - speed_t c_ospeed; /* output speed */ -}; - -/* c_cc characters */ -#define VINTR 0 -#define VQUIT 1 -#define VERASE 2 -#define VKILL 3 -#define VEOF 4 -#define VTIME 5 -#define VMIN 6 -#define VSWTC 7 -#define VSTART 8 -#define VSTOP 9 -#define VSUSP 10 -#define VEOL 11 -#define VREPRINT 12 -#define VDISCARD 13 -#define VWERASE 14 -#define VLNEXT 15 -#define VEOL2 16 - -/* c_iflag bits */ -#define IGNBRK 0000001 -#define BRKINT 0000002 -#define IGNPAR 0000004 -#define PARMRK 0000010 -#define INPCK 0000020 -#define ISTRIP 0000040 -#define INLCR 0000100 -#define IGNCR 0000200 -#define ICRNL 0000400 -#define IUCLC 0001000 -#define IXON 0002000 -#define IXANY 0004000 -#define IXOFF 0010000 -#define IMAXBEL 0020000 -#define IUTF8 0040000 - -/* c_oflag bits */ -#define OPOST 0000001 -#define OLCUC 0000002 -#define ONLCR 0000004 -#define OCRNL 0000010 -#define ONOCR 0000020 -#define ONLRET 0000040 -#define OFILL 0000100 -#define OFDEL 0000200 -#define NLDLY 0000400 -#define NL0 0000000 -#define NL1 0000400 -#define CRDLY 0003000 -#define CR0 0000000 -#define CR1 0001000 -#define CR2 0002000 -#define CR3 0003000 -#define TABDLY 0014000 -#define TAB0 0000000 -#define TAB1 0004000 -#define TAB2 0010000 -#define TAB3 0014000 -#define XTABS 0014000 -#define BSDLY 0020000 -#define BS0 0000000 -#define BS1 0020000 -#define VTDLY 0040000 -#define VT0 0000000 -#define VT1 0040000 -#define FFDLY 0100000 -#define FF0 0000000 -#define FF1 0100000 - -/* c_cflag bit meaning */ -#define CBAUD 0010017 -#define B0 0000000 /* hang up */ -#define B50 0000001 -#define B75 0000002 -#define B110 0000003 -#define B134 0000004 -#define B150 0000005 -#define B200 0000006 -#define B300 0000007 -#define B600 0000010 -#define B1200 0000011 -#define B1800 0000012 -#define B2400 0000013 -#define B4800 0000014 -#define B9600 0000015 -#define B19200 0000016 -#define B38400 0000017 -#define EXTA B19200 -#define EXTB B38400 -#define CSIZE 0000060 -#define CS5 0000000 -#define CS6 0000020 -#define CS7 0000040 -#define CS8 0000060 -#define CSTOPB 0000100 -#define CREAD 0000200 -#define PARENB 0000400 -#define PARODD 0001000 -#define HUPCL 0002000 -#define CLOCAL 0004000 -#define CBAUDEX 0010000 -#define BOTHER 0010000 -#define B57600 0010001 -#define B115200 0010002 -#define B230400 0010003 -#define B460800 0010004 -#define B500000 0010005 -#define B576000 0010006 -#define B921600 0010007 -#define B1000000 0010010 -#define B1152000 0010011 -#define B1500000 0010012 -#define B2000000 0010013 -#define B2500000 0010014 -#define B3000000 0010015 -#define B3500000 0010016 -#define B4000000 0010017 -#define CIBAUD 002003600000 -#define CMSPAR 010000000000 /* mark or space (stick) parity */ -#define CRTSCTS 020000000000 /* flow control */ - -#define IBSHIFT 16 /* Shift from CBAUD to CIBAUD */ - -/* c_lflag bits */ -#define ISIG 0000001 -#define ICANON 0000002 -#define XCASE 0000004 -#define ECHO 0000010 -#define ECHOE 0000020 -#define ECHOK 0000040 -#define ECHONL 0000100 -#define NOFLSH 0000200 -#define TOSTOP 0000400 -#define ECHOCTL 0001000 -#define ECHOPRT 0002000 -#define ECHOKE 0004000 -#define FLUSHO 0010000 -#define PENDIN 0040000 -#define IEXTEN 0100000 - -/* tcflow() and TCXONC use these */ -#define TCOOFF 0 -#define TCOON 1 -#define TCIOFF 2 -#define TCION 3 - -/* tcflush() and TCFLSH use these */ -#define TCIFLUSH 0 -#define TCOFLUSH 1 -#define TCIOFLUSH 2 - -/* tcsetattr uses these */ -#define TCSANOW 0 -#define TCSADRAIN 1 -#define TCSAFLUSH 2 - -#endif diff --git a/include/asm-x86/termbits_64.h b/include/asm-x86/termbits_64.h deleted file mode 100644 index 7405756dd41..00000000000 --- a/include/asm-x86/termbits_64.h +++ /dev/null @@ -1,198 +0,0 @@ -#ifndef __ARCH_X8664_TERMBITS_H__ -#define __ARCH_X8664_TERMBITS_H__ - -#include - -typedef unsigned char cc_t; -typedef unsigned int speed_t; -typedef unsigned int tcflag_t; - -#define NCCS 19 -struct termios { - tcflag_t c_iflag; /* input mode flags */ - tcflag_t c_oflag; /* output mode flags */ - tcflag_t c_cflag; /* control mode flags */ - tcflag_t c_lflag; /* local mode flags */ - cc_t c_line; /* line discipline */ - cc_t c_cc[NCCS]; /* control characters */ -}; - -struct termios2 { - tcflag_t c_iflag; /* input mode flags */ - tcflag_t c_oflag; /* output mode flags */ - tcflag_t c_cflag; /* control mode flags */ - tcflag_t c_lflag; /* local mode flags */ - cc_t c_line; /* line discipline */ - cc_t c_cc[NCCS]; /* control characters */ - speed_t c_ispeed; /* input speed */ - speed_t c_ospeed; /* output speed */ -}; - -struct ktermios { - tcflag_t c_iflag; /* input mode flags */ - tcflag_t c_oflag; /* output mode flags */ - tcflag_t c_cflag; /* control mode flags */ - tcflag_t c_lflag; /* local mode flags */ - cc_t c_line; /* line discipline */ - cc_t c_cc[NCCS]; /* control characters */ - speed_t c_ispeed; /* input speed */ - speed_t c_ospeed; /* output speed */ -}; - -/* c_cc characters */ -#define VINTR 0 -#define VQUIT 1 -#define VERASE 2 -#define VKILL 3 -#define VEOF 4 -#define VTIME 5 -#define VMIN 6 -#define VSWTC 7 -#define VSTART 8 -#define VSTOP 9 -#define VSUSP 10 -#define VEOL 11 -#define VREPRINT 12 -#define VDISCARD 13 -#define VWERASE 14 -#define VLNEXT 15 -#define VEOL2 16 - -/* c_iflag bits */ -#define IGNBRK 0000001 -#define BRKINT 0000002 -#define IGNPAR 0000004 -#define PARMRK 0000010 -#define INPCK 0000020 -#define ISTRIP 0000040 -#define INLCR 0000100 -#define IGNCR 0000200 -#define ICRNL 0000400 -#define IUCLC 0001000 -#define IXON 0002000 -#define IXANY 0004000 -#define IXOFF 0010000 -#define IMAXBEL 0020000 -#define IUTF8 0040000 - -/* c_oflag bits */ -#define OPOST 0000001 -#define OLCUC 0000002 -#define ONLCR 0000004 -#define OCRNL 0000010 -#define ONOCR 0000020 -#define ONLRET 0000040 -#define OFILL 0000100 -#define OFDEL 0000200 -#define NLDLY 0000400 -#define NL0 0000000 -#define NL1 0000400 -#define CRDLY 0003000 -#define CR0 0000000 -#define CR1 0001000 -#define CR2 0002000 -#define CR3 0003000 -#define TABDLY 0014000 -#define TAB0 0000000 -#define TAB1 0004000 -#define TAB2 0010000 -#define TAB3 0014000 -#define XTABS 0014000 -#define BSDLY 0020000 -#define BS0 0000000 -#define BS1 0020000 -#define VTDLY 0040000 -#define VT0 0000000 -#define VT1 0040000 -#define FFDLY 0100000 -#define FF0 0000000 -#define FF1 0100000 - -/* c_cflag bit meaning */ -#define CBAUD 0010017 -#define B0 0000000 /* hang up */ -#define B50 0000001 -#define B75 0000002 -#define B110 0000003 -#define B134 0000004 -#define B150 0000005 -#define B200 0000006 -#define B300 0000007 -#define B600 0000010 -#define B1200 0000011 -#define B1800 0000012 -#define B2400 0000013 -#define B4800 0000014 -#define B9600 0000015 -#define B19200 0000016 -#define B38400 0000017 -#define EXTA B19200 -#define EXTB B38400 -#define CSIZE 0000060 -#define CS5 0000000 -#define CS6 0000020 -#define CS7 0000040 -#define CS8 0000060 -#define CSTOPB 0000100 -#define CREAD 0000200 -#define PARENB 0000400 -#define PARODD 0001000 -#define HUPCL 0002000 -#define CLOCAL 0004000 -#define CBAUDEX 0010000 -#define BOTHER 0010000 /* non standard rate */ -#define B57600 0010001 -#define B115200 0010002 -#define B230400 0010003 -#define B460800 0010004 -#define B500000 0010005 -#define B576000 0010006 -#define B921600 0010007 -#define B1000000 0010010 -#define B1152000 0010011 -#define B1500000 0010012 -#define B2000000 0010013 -#define B2500000 0010014 -#define B3000000 0010015 -#define B3500000 0010016 -#define B4000000 0010017 -#define CIBAUD 002003600000 /* input baud rate */ -#define CMSPAR 010000000000 /* mark or space (stick) parity */ -#define CRTSCTS 020000000000 /* flow control */ - -#define IBSHIFT 16 /* Shift from CBAUD to CIBAUD */ - -/* c_lflag bits */ -#define ISIG 0000001 -#define ICANON 0000002 -#define XCASE 0000004 -#define ECHO 0000010 -#define ECHOE 0000020 -#define ECHOK 0000040 -#define ECHONL 0000100 -#define NOFLSH 0000200 -#define TOSTOP 0000400 -#define ECHOCTL 0001000 -#define ECHOPRT 0002000 -#define ECHOKE 0004000 -#define FLUSHO 0010000 -#define PENDIN 0040000 -#define IEXTEN 0100000 - -/* tcflow() and TCXONC use these */ -#define TCOOFF 0 -#define TCOON 1 -#define TCIOFF 2 -#define TCION 3 - -/* tcflush() and TCFLSH use these */ -#define TCIFLUSH 0 -#define TCOFLUSH 1 -#define TCIOFLUSH 2 - -/* tcsetattr uses these */ -#define TCSANOW 0 -#define TCSADRAIN 1 -#define TCSAFLUSH 2 - -#endif diff --git a/include/asm-x86/termios.h b/include/asm-x86/termios.h index a4f4ae20a59..d501748700d 100644 --- a/include/asm-x86/termios.h +++ b/include/asm-x86/termios.h @@ -1,13 +1,97 @@ +#ifndef _ASM_X86_TERMIOS_H +#define _ASM_X86_TERMIOS_H + +#include +#include + +struct winsize { + unsigned short ws_row; + unsigned short ws_col; + unsigned short ws_xpixel; + unsigned short ws_ypixel; +}; + +#define NCC 8 +struct termio { + unsigned short c_iflag; /* input mode flags */ + unsigned short c_oflag; /* output mode flags */ + unsigned short c_cflag; /* control mode flags */ + unsigned short c_lflag; /* local mode flags */ + unsigned char c_line; /* line discipline */ + unsigned char c_cc[NCC]; /* control characters */ +}; + +/* modem lines */ +#define TIOCM_LE 0x001 +#define TIOCM_DTR 0x002 +#define TIOCM_RTS 0x004 +#define TIOCM_ST 0x008 +#define TIOCM_SR 0x010 +#define TIOCM_CTS 0x020 +#define TIOCM_CAR 0x040 +#define TIOCM_RNG 0x080 +#define TIOCM_DSR 0x100 +#define TIOCM_CD TIOCM_CAR +#define TIOCM_RI TIOCM_RNG +#define TIOCM_OUT1 0x2000 +#define TIOCM_OUT2 0x4000 +#define TIOCM_LOOP 0x8000 + +/* ioctl (fd, TIOCSERGETLSR, &result) where result may be as below */ + #ifdef __KERNEL__ -# ifdef CONFIG_X86_32 -# include "termios_32.h" -# else -# include "termios_64.h" -# endif -#else -# ifdef __i386__ -# include "termios_32.h" -# else -# include "termios_64.h" -# endif -#endif + +/* intr=^C quit=^\ erase=del kill=^U + eof=^D vtime=\0 vmin=\1 sxtc=\0 + start=^Q stop=^S susp=^Z eol=\0 + reprint=^R discard=^U werase=^W lnext=^V + eol2=\0 +*/ +#define INIT_C_CC "\003\034\177\025\004\0\1\0\021\023\032\0\022\017\027\026\0" + +/* + * Translate a "termio" structure into a "termios". Ugh. + */ +#define SET_LOW_TERMIOS_BITS(termios, termio, x) { \ + unsigned short __tmp; \ + get_user(__tmp,&(termio)->x); \ + *(unsigned short *) &(termios)->x = __tmp; \ +} + +#define user_termio_to_kernel_termios(termios, termio) \ +({ \ + SET_LOW_TERMIOS_BITS(termios, termio, c_iflag); \ + SET_LOW_TERMIOS_BITS(termios, termio, c_oflag); \ + SET_LOW_TERMIOS_BITS(termios, termio, c_cflag); \ + SET_LOW_TERMIOS_BITS(termios, termio, c_lflag); \ + copy_from_user((termios)->c_cc, (termio)->c_cc, NCC); \ +}) + +/* + * Translate a "termios" structure into a "termio". Ugh. + */ +#define kernel_termios_to_user_termio(termio, termios) \ +({ \ + put_user((termios)->c_iflag, &(termio)->c_iflag); \ + put_user((termios)->c_oflag, &(termio)->c_oflag); \ + put_user((termios)->c_cflag, &(termio)->c_cflag); \ + put_user((termios)->c_lflag, &(termio)->c_lflag); \ + put_user((termios)->c_line, &(termio)->c_line); \ + copy_to_user((termio)->c_cc, (termios)->c_cc, NCC); \ +}) + +#define user_termios_to_kernel_termios(k, u) \ + copy_from_user(k, u, sizeof(struct termios2)) + +#define kernel_termios_to_user_termios(u, k) \ + copy_to_user(u, k, sizeof(struct termios2)) + +#define user_termios_to_kernel_termios_1(k, u) \ + copy_from_user(k, u, sizeof(struct termios)) + +#define kernel_termios_to_user_termios_1(u, k) \ + copy_to_user(u, k, sizeof(struct termios)) + +#endif /* __KERNEL__ */ + +#endif /* _ASM_X86_TERMIOS_H */ diff --git a/include/asm-x86/termios_32.h b/include/asm-x86/termios_32.h deleted file mode 100644 index 6fdb2c841b7..00000000000 --- a/include/asm-x86/termios_32.h +++ /dev/null @@ -1,90 +0,0 @@ -#ifndef _I386_TERMIOS_H -#define _I386_TERMIOS_H - -#include -#include - -struct winsize { - unsigned short ws_row; - unsigned short ws_col; - unsigned short ws_xpixel; - unsigned short ws_ypixel; -}; - -#define NCC 8 -struct termio { - unsigned short c_iflag; /* input mode flags */ - unsigned short c_oflag; /* output mode flags */ - unsigned short c_cflag; /* control mode flags */ - unsigned short c_lflag; /* local mode flags */ - unsigned char c_line; /* line discipline */ - unsigned char c_cc[NCC]; /* control characters */ -}; - -/* modem lines */ -#define TIOCM_LE 0x001 -#define TIOCM_DTR 0x002 -#define TIOCM_RTS 0x004 -#define TIOCM_ST 0x008 -#define TIOCM_SR 0x010 -#define TIOCM_CTS 0x020 -#define TIOCM_CAR 0x040 -#define TIOCM_RNG 0x080 -#define TIOCM_DSR 0x100 -#define TIOCM_CD TIOCM_CAR -#define TIOCM_RI TIOCM_RNG -#define TIOCM_OUT1 0x2000 -#define TIOCM_OUT2 0x4000 -#define TIOCM_LOOP 0x8000 - -/* ioctl (fd, TIOCSERGETLSR, &result) where result may be as below */ - -#ifdef __KERNEL__ - -/* intr=^C quit=^\ erase=del kill=^U - eof=^D vtime=\0 vmin=\1 sxtc=\0 - start=^Q stop=^S susp=^Z eol=\0 - reprint=^R discard=^U werase=^W lnext=^V - eol2=\0 -*/ -#define INIT_C_CC "\003\034\177\025\004\0\1\0\021\023\032\0\022\017\027\026\0" - -/* - * Translate a "termio" structure into a "termios". Ugh. - */ -#define SET_LOW_TERMIOS_BITS(termios, termio, x) { \ - unsigned short __tmp; \ - get_user(__tmp,&(termio)->x); \ - *(unsigned short *) &(termios)->x = __tmp; \ -} - -#define user_termio_to_kernel_termios(termios, termio) \ -({ \ - SET_LOW_TERMIOS_BITS(termios, termio, c_iflag); \ - SET_LOW_TERMIOS_BITS(termios, termio, c_oflag); \ - SET_LOW_TERMIOS_BITS(termios, termio, c_cflag); \ - SET_LOW_TERMIOS_BITS(termios, termio, c_lflag); \ - copy_from_user((termios)->c_cc, (termio)->c_cc, NCC); \ -}) - -/* - * Translate a "termios" structure into a "termio". Ugh. - */ -#define kernel_termios_to_user_termio(termio, termios) \ -({ \ - put_user((termios)->c_iflag, &(termio)->c_iflag); \ - put_user((termios)->c_oflag, &(termio)->c_oflag); \ - put_user((termios)->c_cflag, &(termio)->c_cflag); \ - put_user((termios)->c_lflag, &(termio)->c_lflag); \ - put_user((termios)->c_line, &(termio)->c_line); \ - copy_to_user((termio)->c_cc, (termios)->c_cc, NCC); \ -}) - -#define user_termios_to_kernel_termios(k, u) copy_from_user(k, u, sizeof(struct termios2)) -#define kernel_termios_to_user_termios(u, k) copy_to_user(u, k, sizeof(struct termios2)) -#define user_termios_to_kernel_termios_1(k, u) copy_from_user(k, u, sizeof(struct termios)) -#define kernel_termios_to_user_termios_1(u, k) copy_to_user(u, k, sizeof(struct termios)) - -#endif /* __KERNEL__ */ - -#endif /* _I386_TERMIOS_H */ diff --git a/include/asm-x86/termios_64.h b/include/asm-x86/termios_64.h deleted file mode 100644 index 35ee59b7832..00000000000 --- a/include/asm-x86/termios_64.h +++ /dev/null @@ -1,90 +0,0 @@ -#ifndef _X8664_TERMIOS_H -#define _X8664_TERMIOS_H - -#include -#include - -struct winsize { - unsigned short ws_row; - unsigned short ws_col; - unsigned short ws_xpixel; - unsigned short ws_ypixel; -}; - -#define NCC 8 -struct termio { - unsigned short c_iflag; /* input mode flags */ - unsigned short c_oflag; /* output mode flags */ - unsigned short c_cflag; /* control mode flags */ - unsigned short c_lflag; /* local mode flags */ - unsigned char c_line; /* line discipline */ - unsigned char c_cc[NCC]; /* control characters */ -}; - -/* modem lines */ -#define TIOCM_LE 0x001 -#define TIOCM_DTR 0x002 -#define TIOCM_RTS 0x004 -#define TIOCM_ST 0x008 -#define TIOCM_SR 0x010 -#define TIOCM_CTS 0x020 -#define TIOCM_CAR 0x040 -#define TIOCM_RNG 0x080 -#define TIOCM_DSR 0x100 -#define TIOCM_CD TIOCM_CAR -#define TIOCM_RI TIOCM_RNG -#define TIOCM_OUT1 0x2000 -#define TIOCM_OUT2 0x4000 -#define TIOCM_LOOP 0x8000 - -/* ioctl (fd, TIOCSERGETLSR, &result) where result may be as below */ - -#ifdef __KERNEL__ - -/* intr=^C quit=^\ erase=del kill=^U - eof=^D vtime=\0 vmin=\1 sxtc=\0 - start=^Q stop=^S susp=^Z eol=\0 - reprint=^R discard=^U werase=^W lnext=^V - eol2=\0 -*/ -#define INIT_C_CC "\003\034\177\025\004\0\1\0\021\023\032\0\022\017\027\026\0" - -/* - * Translate a "termio" structure into a "termios". Ugh. - */ -#define SET_LOW_TERMIOS_BITS(termios, termio, x) { \ - unsigned short __tmp; \ - get_user(__tmp,&(termio)->x); \ - *(unsigned short *) &(termios)->x = __tmp; \ -} - -#define user_termio_to_kernel_termios(termios, termio) \ -({ \ - SET_LOW_TERMIOS_BITS(termios, termio, c_iflag); \ - SET_LOW_TERMIOS_BITS(termios, termio, c_oflag); \ - SET_LOW_TERMIOS_BITS(termios, termio, c_cflag); \ - SET_LOW_TERMIOS_BITS(termios, termio, c_lflag); \ - copy_from_user((termios)->c_cc, (termio)->c_cc, NCC); \ -}) - -/* - * Translate a "termios" structure into a "termio". Ugh. - */ -#define kernel_termios_to_user_termio(termio, termios) \ -({ \ - put_user((termios)->c_iflag, &(termio)->c_iflag); \ - put_user((termios)->c_oflag, &(termio)->c_oflag); \ - put_user((termios)->c_cflag, &(termio)->c_cflag); \ - put_user((termios)->c_lflag, &(termio)->c_lflag); \ - put_user((termios)->c_line, &(termio)->c_line); \ - copy_to_user((termio)->c_cc, (termios)->c_cc, NCC); \ -}) - -#define user_termios_to_kernel_termios(k, u) copy_from_user(k, u, sizeof(struct termios2)) -#define kernel_termios_to_user_termios(u, k) copy_to_user(u, k, sizeof(struct termios2)) -#define user_termios_to_kernel_termios_1(k, u) copy_from_user(k, u, sizeof(struct termios)) -#define kernel_termios_to_user_termios_1(u, k) copy_to_user(u, k, sizeof(struct termios)) - -#endif /* __KERNEL__ */ - -#endif /* _X8664_TERMIOS_H */ diff --git a/include/asm-x86/ucontext.h b/include/asm-x86/ucontext.h index 175c8cb5973..50a79f7fcde 100644 --- a/include/asm-x86/ucontext.h +++ b/include/asm-x86/ucontext.h @@ -1,13 +1,12 @@ -#ifdef __KERNEL__ -# ifdef CONFIG_X86_32 -# include "ucontext_32.h" -# else -# include "ucontext_64.h" -# endif -#else -# ifdef __i386__ -# include "ucontext_32.h" -# else -# include "ucontext_64.h" -# endif -#endif +#ifndef _ASM_X86_UCONTEXT_H +#define _ASM_X86_UCONTEXT_H + +struct ucontext { + unsigned long uc_flags; + struct ucontext *uc_link; + stack_t uc_stack; + struct sigcontext uc_mcontext; + sigset_t uc_sigmask; /* mask last for extensibility */ +}; + +#endif /* _ASM_X86_UCONTEXT_H */ diff --git a/include/asm-x86/ucontext_32.h b/include/asm-x86/ucontext_32.h deleted file mode 100644 index b0db36925f5..00000000000 --- a/include/asm-x86/ucontext_32.h +++ /dev/null @@ -1,12 +0,0 @@ -#ifndef _ASMi386_UCONTEXT_H -#define _ASMi386_UCONTEXT_H - -struct ucontext { - unsigned long uc_flags; - struct ucontext *uc_link; - stack_t uc_stack; - struct sigcontext uc_mcontext; - sigset_t uc_sigmask; /* mask last for extensibility */ -}; - -#endif /* !_ASMi386_UCONTEXT_H */ diff --git a/include/asm-x86/ucontext_64.h b/include/asm-x86/ucontext_64.h deleted file mode 100644 index 159a3da9e11..00000000000 --- a/include/asm-x86/ucontext_64.h +++ /dev/null @@ -1,12 +0,0 @@ -#ifndef _ASMX8664_UCONTEXT_H -#define _ASMX8664_UCONTEXT_H - -struct ucontext { - unsigned long uc_flags; - struct ucontext *uc_link; - stack_t uc_stack; - struct sigcontext uc_mcontext; - sigset_t uc_sigmask; /* mask last for extensibility */ -}; - -#endif diff --git a/include/asm-x86/unaligned.h b/include/asm-x86/unaligned.h index 68067150fbc..913598d4f76 100644 --- a/include/asm-x86/unaligned.h +++ b/include/asm-x86/unaligned.h @@ -1,5 +1,37 @@ -#ifdef CONFIG_X86_32 -# include "unaligned_32.h" -#else -# include "unaligned_64.h" -#endif +#ifndef _ASM_X86_UNALIGNED_H +#define _ASM_X86_UNALIGNED_H + +/* + * The x86 can do unaligned accesses itself. + * + * The strange macros are there to make sure these can't + * be misused in a way that makes them not work on other + * architectures where unaligned accesses aren't as simple. + */ + +/** + * get_unaligned - get value from possibly mis-aligned location + * @ptr: pointer to value + * + * This macro should be used for accessing values larger in size than + * single bytes at locations that are expected to be improperly aligned, + * e.g. retrieving a u16 value from a location not u16-aligned. + * + * Note that unaligned accesses can be very expensive on some architectures. + */ +#define get_unaligned(ptr) (*(ptr)) + +/** + * put_unaligned - put value to a possibly mis-aligned location + * @val: value to place + * @ptr: pointer to location + * + * This macro should be used for placing values larger in size than + * single bytes at locations that are expected to be improperly aligned, + * e.g. writing a u16 value to a location not u16-aligned. + * + * Note that unaligned accesses can be very expensive on some architectures. + */ +#define put_unaligned(val, ptr) ((void)( *(ptr) = (val) )) + +#endif /* _ASM_X86_UNALIGNED_H */ diff --git a/include/asm-x86/unaligned_32.h b/include/asm-x86/unaligned_32.h deleted file mode 100644 index 7acd7957621..00000000000 --- a/include/asm-x86/unaligned_32.h +++ /dev/null @@ -1,37 +0,0 @@ -#ifndef __I386_UNALIGNED_H -#define __I386_UNALIGNED_H - -/* - * The i386 can do unaligned accesses itself. - * - * The strange macros are there to make sure these can't - * be misused in a way that makes them not work on other - * architectures where unaligned accesses aren't as simple. - */ - -/** - * get_unaligned - get value from possibly mis-aligned location - * @ptr: pointer to value - * - * This macro should be used for accessing values larger in size than - * single bytes at locations that are expected to be improperly aligned, - * e.g. retrieving a u16 value from a location not u16-aligned. - * - * Note that unaligned accesses can be very expensive on some architectures. - */ -#define get_unaligned(ptr) (*(ptr)) - -/** - * put_unaligned - put value to a possibly mis-aligned location - * @val: value to place - * @ptr: pointer to location - * - * This macro should be used for placing values larger in size than - * single bytes at locations that are expected to be improperly aligned, - * e.g. writing a u16 value to a location not u16-aligned. - * - * Note that unaligned accesses can be very expensive on some architectures. - */ -#define put_unaligned(val, ptr) ((void)( *(ptr) = (val) )) - -#endif diff --git a/include/asm-x86/unaligned_64.h b/include/asm-x86/unaligned_64.h deleted file mode 100644 index d4bf78dc6f3..00000000000 --- a/include/asm-x86/unaligned_64.h +++ /dev/null @@ -1,37 +0,0 @@ -#ifndef __X8664_UNALIGNED_H -#define __X8664_UNALIGNED_H - -/* - * The x86-64 can do unaligned accesses itself. - * - * The strange macros are there to make sure these can't - * be misused in a way that makes them not work on other - * architectures where unaligned accesses aren't as simple. - */ - -/** - * get_unaligned - get value from possibly mis-aligned location - * @ptr: pointer to value - * - * This macro should be used for accessing values larger in size than - * single bytes at locations that are expected to be improperly aligned, - * e.g. retrieving a u16 value from a location not u16-aligned. - * - * Note that unaligned accesses can be very expensive on some architectures. - */ -#define get_unaligned(ptr) (*(ptr)) - -/** - * put_unaligned - put value to a possibly mis-aligned location - * @val: value to place - * @ptr: pointer to location - * - * This macro should be used for placing values larger in size than - * single bytes at locations that are expected to be improperly aligned, - * e.g. writing a u16 value to a location not u16-aligned. - * - * Note that unaligned accesses can be very expensive on some architectures. - */ -#define put_unaligned(val, ptr) ((void)( *(ptr) = (val) )) - -#endif -- cgit v1.2.3 From 17d36707dd9c5c3c4ef09a278ee7444cfc60481e Mon Sep 17 00:00:00 2001 From: Thomas Gleixner Date: Mon, 15 Oct 2007 23:28:19 +0200 Subject: x86: unify include/asm/agp_32/64.h Same file, except for whitespace, comment formatting and the usage of wbinvd() instead of asm volatile("wbinvd":::"memory"), which is the same. Signed-off-by: Thomas Gleixner --- include/asm-x86/agp.h | 43 +++++++++++++++++++++++++++++++++++++++---- include/asm-x86/agp_32.h | 36 ------------------------------------ include/asm-x86/agp_64.h | 34 ---------------------------------- 3 files changed, 39 insertions(+), 74 deletions(-) delete mode 100644 include/asm-x86/agp_32.h delete mode 100644 include/asm-x86/agp_64.h diff --git a/include/asm-x86/agp.h b/include/asm-x86/agp.h index 9348f1e4f6f..62df2a9e713 100644 --- a/include/asm-x86/agp.h +++ b/include/asm-x86/agp.h @@ -1,5 +1,40 @@ -#ifdef CONFIG_X86_32 -# include "agp_32.h" -#else -# include "agp_64.h" +#ifndef _ASM_X86_AGP_H +#define _ASM_X86_AGP_H + +#include +#include + +/* + * Functions to keep the agpgart mappings coherent with the MMU. The + * GART gives the CPU a physical alias of pages in memory. The alias + * region is mapped uncacheable. Make sure there are no conflicting + * mappings with different cachability attributes for the same + * page. This avoids data corruption on some CPUs. + */ + +/* + * Caller's responsibility to call global_flush_tlb() for performance + * reasons + */ +#define map_page_into_agp(page) change_page_attr(page, 1, PAGE_KERNEL_NOCACHE) +#define unmap_page_from_agp(page) change_page_attr(page, 1, PAGE_KERNEL) +#define flush_agp_mappings() global_flush_tlb() + +/* + * Could use CLFLUSH here if the cpu supports it. But then it would + * need to be called for each cacheline of the whole page so it may + * not be worth it. Would need a page for it. + */ +#define flush_agp_cache() wbinvd() + +/* Convert a physical address to an address suitable for the GART. */ +#define phys_to_gart(x) (x) +#define gart_to_phys(x) (x) + +/* GATT allocation. Returns/accepts GATT kernel virtual address. */ +#define alloc_gatt_pages(order) \ + ((char *)__get_free_pages(GFP_KERNEL, (order))) +#define free_gatt_pages(table, order) \ + free_pages((unsigned long)(table), (order)) + #endif diff --git a/include/asm-x86/agp_32.h b/include/asm-x86/agp_32.h deleted file mode 100644 index 6af173dbf12..00000000000 --- a/include/asm-x86/agp_32.h +++ /dev/null @@ -1,36 +0,0 @@ -#ifndef AGP_H -#define AGP_H 1 - -#include -#include - -/* - * Functions to keep the agpgart mappings coherent with the MMU. - * The GART gives the CPU a physical alias of pages in memory. The alias region is - * mapped uncacheable. Make sure there are no conflicting mappings - * with different cachability attributes for the same page. This avoids - * data corruption on some CPUs. - */ - -/* Caller's responsibility to call global_flush_tlb() for - * performance reasons */ -#define map_page_into_agp(page) change_page_attr(page, 1, PAGE_KERNEL_NOCACHE) -#define unmap_page_from_agp(page) change_page_attr(page, 1, PAGE_KERNEL) -#define flush_agp_mappings() global_flush_tlb() - -/* Could use CLFLUSH here if the cpu supports it. But then it would - need to be called for each cacheline of the whole page so it may not be - worth it. Would need a page for it. */ -#define flush_agp_cache() wbinvd() - -/* Convert a physical address to an address suitable for the GART. */ -#define phys_to_gart(x) (x) -#define gart_to_phys(x) (x) - -/* GATT allocation. Returns/accepts GATT kernel virtual address. */ -#define alloc_gatt_pages(order) \ - ((char *)__get_free_pages(GFP_KERNEL, (order))) -#define free_gatt_pages(table, order) \ - free_pages((unsigned long)(table), (order)) - -#endif diff --git a/include/asm-x86/agp_64.h b/include/asm-x86/agp_64.h deleted file mode 100644 index de338666f3f..00000000000 --- a/include/asm-x86/agp_64.h +++ /dev/null @@ -1,34 +0,0 @@ -#ifndef AGP_H -#define AGP_H 1 - -#include - -/* - * Functions to keep the agpgart mappings coherent. - * The GART gives the CPU a physical alias of memory. The alias is - * mapped uncacheable. Make sure there are no conflicting mappings - * with different cachability attributes for the same page. - */ - -/* Caller's responsibility to call global_flush_tlb() for - * performance reasons */ -#define map_page_into_agp(page) change_page_attr(page, 1, PAGE_KERNEL_NOCACHE) -#define unmap_page_from_agp(page) change_page_attr(page, 1, PAGE_KERNEL) -#define flush_agp_mappings() global_flush_tlb() - -/* Could use CLFLUSH here if the cpu supports it. But then it would - need to be called for each cacheline of the whole page so it may not be - worth it. Would need a page for it. */ -#define flush_agp_cache() asm volatile("wbinvd":::"memory") - -/* Convert a physical address to an address suitable for the GART. */ -#define phys_to_gart(x) (x) -#define gart_to_phys(x) (x) - -/* GATT allocation. Returns/accepts GATT kernel virtual address. */ -#define alloc_gatt_pages(order) \ - ((char *)__get_free_pages(GFP_KERNEL, (order))) -#define free_gatt_pages(table, order) \ - free_pages((unsigned long)(table), (order)) - -#endif -- cgit v1.2.3 From 0b4dc7c3524c59fae4c369ee5de274275b95d053 Mon Sep 17 00:00:00 2001 From: Thomas Gleixner Date: Mon, 15 Oct 2007 23:28:19 +0200 Subject: x86: unify include/asm/auxvec_32/64.h Same file, except for whitespace, comment formatting and the AT_SYSINFO define for 32bit Signed-off-by: Thomas Gleixner --- include/asm-x86/Kbuild | 2 -- include/asm-x86/auxvec.h | 23 +++++++++++------------ include/asm-x86/auxvec_32.h | 11 ----------- include/asm-x86/auxvec_64.h | 6 ------ 4 files changed, 11 insertions(+), 31 deletions(-) delete mode 100644 include/asm-x86/auxvec_32.h delete mode 100644 include/asm-x86/auxvec_64.h diff --git a/include/asm-x86/Kbuild b/include/asm-x86/Kbuild index bf98b67d382..d300cff2201 100644 --- a/include/asm-x86/Kbuild +++ b/include/asm-x86/Kbuild @@ -14,8 +14,6 @@ header-y += vsyscall32.h unifdef-y += a.out_32.h unifdef-y += a.out_64.h -unifdef-y += auxvec_32.h -unifdef-y += auxvec_64.h unifdef-y += byteorder_32.h unifdef-y += byteorder_64.h unifdef-y += elf_32.h diff --git a/include/asm-x86/auxvec.h b/include/asm-x86/auxvec.h index 7ff866f829c..87f5e6d5a02 100644 --- a/include/asm-x86/auxvec.h +++ b/include/asm-x86/auxvec.h @@ -1,13 +1,12 @@ -#ifdef __KERNEL__ -# ifdef CONFIG_X86_32 -# include "auxvec_32.h" -# else -# include "auxvec_64.h" -# endif -#else -# ifdef __i386__ -# include "auxvec_32.h" -# else -# include "auxvec_64.h" -# endif +#ifndef _ASM_X86_AUXVEC_H +#define _ASM_X86_AUXVEC_H +/* + * Architecture-neutral AT_ values in 0-17, leave some room + * for more of them, start the x86-specific ones at 32. + */ +#ifdef __i386__ +#define AT_SYSINFO 32 +#endif +#define AT_SYSINFO_EHDR 33 + #endif diff --git a/include/asm-x86/auxvec_32.h b/include/asm-x86/auxvec_32.h deleted file mode 100644 index 395e13016bf..00000000000 --- a/include/asm-x86/auxvec_32.h +++ /dev/null @@ -1,11 +0,0 @@ -#ifndef __ASMi386_AUXVEC_H -#define __ASMi386_AUXVEC_H - -/* - * Architecture-neutral AT_ values in 0-17, leave some room - * for more of them, start the x86-specific ones at 32. - */ -#define AT_SYSINFO 32 -#define AT_SYSINFO_EHDR 33 - -#endif diff --git a/include/asm-x86/auxvec_64.h b/include/asm-x86/auxvec_64.h deleted file mode 100644 index 1d5ab0d0395..00000000000 --- a/include/asm-x86/auxvec_64.h +++ /dev/null @@ -1,6 +0,0 @@ -#ifndef __ASM_X86_64_AUXVEC_H -#define __ASM_X86_64_AUXVEC_H - -#define AT_SYSINFO_EHDR 33 - -#endif -- cgit v1.2.3 From b2bba72c10cdd907f73c57c8bdeb3354f8c233c6 Mon Sep 17 00:00:00 2001 From: Thomas Gleixner Date: Mon, 15 Oct 2007 23:28:20 +0200 Subject: x86: unify include/asm/cacheflush_32/64.h Same file, except for whitespace, comment formatting and the extra DEBUG_PAGE_ALLOC function in _32. Signed-off-by: Thomas Gleixner --- include/asm-x86/cacheflush.h | 43 +++++++++++++++++++++++++++++++++++++---- include/asm-x86/cacheflush_32.h | 39 ------------------------------------- include/asm-x86/cacheflush_64.h | 35 --------------------------------- 3 files changed, 39 insertions(+), 78 deletions(-) delete mode 100644 include/asm-x86/cacheflush_32.h delete mode 100644 include/asm-x86/cacheflush_64.h diff --git a/include/asm-x86/cacheflush.h b/include/asm-x86/cacheflush.h index e2df3b55034..b3d43de44c5 100644 --- a/include/asm-x86/cacheflush.h +++ b/include/asm-x86/cacheflush.h @@ -1,5 +1,40 @@ -#ifdef CONFIG_X86_32 -# include "cacheflush_32.h" -#else -# include "cacheflush_64.h" +#ifndef _ASM_X86_CACHEFLUSH_H +#define _ASM_X86_CACHEFLUSH_H + +/* Keep includes the same across arches. */ +#include + +/* Caches aren't brain-dead on the intel. */ +#define flush_cache_all() do { } while (0) +#define flush_cache_mm(mm) do { } while (0) +#define flush_cache_dup_mm(mm) do { } while (0) +#define flush_cache_range(vma, start, end) do { } while (0) +#define flush_cache_page(vma, vmaddr, pfn) do { } while (0) +#define flush_dcache_page(page) do { } while (0) +#define flush_dcache_mmap_lock(mapping) do { } while (0) +#define flush_dcache_mmap_unlock(mapping) do { } while (0) +#define flush_icache_range(start, end) do { } while (0) +#define flush_icache_page(vma,pg) do { } while (0) +#define flush_icache_user_range(vma,pg,adr,len) do { } while (0) +#define flush_cache_vmap(start, end) do { } while (0) +#define flush_cache_vunmap(start, end) do { } while (0) + +#define copy_to_user_page(vma, page, vaddr, dst, src, len) \ + memcpy(dst, src, len) +#define copy_from_user_page(vma, page, vaddr, dst, src, len) \ + memcpy(dst, src, len) + +void global_flush_tlb(void); +int change_page_attr(struct page *page, int numpages, pgprot_t prot); +int change_page_attr_addr(unsigned long addr, int numpages, pgprot_t prot); + +#ifdef CONFIG_DEBUG_PAGEALLOC +/* internal debugging function */ +void kernel_map_pages(struct page *page, int numpages, int enable); +#endif + +#ifdef CONFIG_DEBUG_RODATA +void mark_rodata_ro(void); +#endif + #endif diff --git a/include/asm-x86/cacheflush_32.h b/include/asm-x86/cacheflush_32.h deleted file mode 100644 index 74e03c8f2e5..00000000000 --- a/include/asm-x86/cacheflush_32.h +++ /dev/null @@ -1,39 +0,0 @@ -#ifndef _I386_CACHEFLUSH_H -#define _I386_CACHEFLUSH_H - -/* Keep includes the same across arches. */ -#include - -/* Caches aren't brain-dead on the intel. */ -#define flush_cache_all() do { } while (0) -#define flush_cache_mm(mm) do { } while (0) -#define flush_cache_dup_mm(mm) do { } while (0) -#define flush_cache_range(vma, start, end) do { } while (0) -#define flush_cache_page(vma, vmaddr, pfn) do { } while (0) -#define flush_dcache_page(page) do { } while (0) -#define flush_dcache_mmap_lock(mapping) do { } while (0) -#define flush_dcache_mmap_unlock(mapping) do { } while (0) -#define flush_icache_range(start, end) do { } while (0) -#define flush_icache_page(vma,pg) do { } while (0) -#define flush_icache_user_range(vma,pg,adr,len) do { } while (0) -#define flush_cache_vmap(start, end) do { } while (0) -#define flush_cache_vunmap(start, end) do { } while (0) - -#define copy_to_user_page(vma, page, vaddr, dst, src, len) \ - memcpy(dst, src, len) -#define copy_from_user_page(vma, page, vaddr, dst, src, len) \ - memcpy(dst, src, len) - -void global_flush_tlb(void); -int change_page_attr(struct page *page, int numpages, pgprot_t prot); - -#ifdef CONFIG_DEBUG_PAGEALLOC -/* internal debugging function */ -void kernel_map_pages(struct page *page, int numpages, int enable); -#endif - -#ifdef CONFIG_DEBUG_RODATA -void mark_rodata_ro(void); -#endif - -#endif /* _I386_CACHEFLUSH_H */ diff --git a/include/asm-x86/cacheflush_64.h b/include/asm-x86/cacheflush_64.h deleted file mode 100644 index ab1cb5c7dc9..00000000000 --- a/include/asm-x86/cacheflush_64.h +++ /dev/null @@ -1,35 +0,0 @@ -#ifndef _X8664_CACHEFLUSH_H -#define _X8664_CACHEFLUSH_H - -/* Keep includes the same across arches. */ -#include - -/* Caches aren't brain-dead on the intel. */ -#define flush_cache_all() do { } while (0) -#define flush_cache_mm(mm) do { } while (0) -#define flush_cache_dup_mm(mm) do { } while (0) -#define flush_cache_range(vma, start, end) do { } while (0) -#define flush_cache_page(vma, vmaddr, pfn) do { } while (0) -#define flush_dcache_page(page) do { } while (0) -#define flush_dcache_mmap_lock(mapping) do { } while (0) -#define flush_dcache_mmap_unlock(mapping) do { } while (0) -#define flush_icache_range(start, end) do { } while (0) -#define flush_icache_page(vma,pg) do { } while (0) -#define flush_icache_user_range(vma,pg,adr,len) do { } while (0) -#define flush_cache_vmap(start, end) do { } while (0) -#define flush_cache_vunmap(start, end) do { } while (0) - -#define copy_to_user_page(vma, page, vaddr, dst, src, len) \ - memcpy(dst, src, len) -#define copy_from_user_page(vma, page, vaddr, dst, src, len) \ - memcpy(dst, src, len) - -void global_flush_tlb(void); -int change_page_attr(struct page *page, int numpages, pgprot_t prot); -int change_page_attr_addr(unsigned long addr, int numpages, pgprot_t prot); - -#ifdef CONFIG_DEBUG_RODATA -void mark_rodata_ro(void); -#endif - -#endif /* _X8664_CACHEFLUSH_H */ -- cgit v1.2.3 From 9bfa23df5632775bcb70b87975743046a71f7a3b Mon Sep 17 00:00:00 2001 From: Thomas Gleixner Date: Mon, 15 Oct 2007 23:28:20 +0200 Subject: x86: unify include/asm/cache_32/64.h Same file, except for whitespace, comment formatting and the extra defines in _64, which are conditional on VSMP anyway. Signed-off-by: Thomas Gleixner --- include/asm-x86/cache.h | 23 +++++++++++++++++++---- include/asm-x86/cache_32.h | 14 -------------- include/asm-x86/cache_64.h | 26 -------------------------- 3 files changed, 19 insertions(+), 44 deletions(-) delete mode 100644 include/asm-x86/cache_32.h delete mode 100644 include/asm-x86/cache_64.h diff --git a/include/asm-x86/cache.h b/include/asm-x86/cache.h index c36d190ac9d..1e0bac86f38 100644 --- a/include/asm-x86/cache.h +++ b/include/asm-x86/cache.h @@ -1,5 +1,20 @@ -#ifdef CONFIG_X86_32 -# include "cache_32.h" -#else -# include "cache_64.h" +#ifndef _ARCH_X86_CACHE_H +#define _ARCH_X86_CACHE_H + +/* L1 cache line size */ +#define L1_CACHE_SHIFT (CONFIG_X86_L1_CACHE_SHIFT) +#define L1_CACHE_BYTES (1 << L1_CACHE_SHIFT) + +#define __read_mostly __attribute__((__section__(".data.read_mostly"))) + +#ifdef CONFIG_X86_VSMP +/* vSMP Internode cacheline shift */ +#define INTERNODE_CACHE_SHIFT (12) +#ifdef CONFIG_SMP +#define __cacheline_aligned_in_smp \ + __attribute__((__aligned__(1 << (INTERNODE_CACHE_SHIFT)))) \ + __attribute__((__section__(".data.page_aligned"))) +#endif +#endif + #endif diff --git a/include/asm-x86/cache_32.h b/include/asm-x86/cache_32.h deleted file mode 100644 index 57c62f41415..00000000000 --- a/include/asm-x86/cache_32.h +++ /dev/null @@ -1,14 +0,0 @@ -/* - * include/asm-i386/cache.h - */ -#ifndef __ARCH_I386_CACHE_H -#define __ARCH_I386_CACHE_H - - -/* L1 cache line size */ -#define L1_CACHE_SHIFT (CONFIG_X86_L1_CACHE_SHIFT) -#define L1_CACHE_BYTES (1 << L1_CACHE_SHIFT) - -#define __read_mostly __attribute__((__section__(".data.read_mostly"))) - -#endif diff --git a/include/asm-x86/cache_64.h b/include/asm-x86/cache_64.h deleted file mode 100644 index 052df758ae6..00000000000 --- a/include/asm-x86/cache_64.h +++ /dev/null @@ -1,26 +0,0 @@ -/* - * include/asm-x86_64/cache.h - */ -#ifndef __ARCH_X8664_CACHE_H -#define __ARCH_X8664_CACHE_H - - -/* L1 cache line size */ -#define L1_CACHE_SHIFT (CONFIG_X86_L1_CACHE_SHIFT) -#define L1_CACHE_BYTES (1 << L1_CACHE_SHIFT) - -#ifdef CONFIG_X86_VSMP - -/* vSMP Internode cacheline shift */ -#define INTERNODE_CACHE_SHIFT (12) -#ifdef CONFIG_SMP -#define __cacheline_aligned_in_smp \ - __attribute__((__aligned__(1 << (INTERNODE_CACHE_SHIFT)))) \ - __attribute__((__section__(".data.page_aligned"))) -#endif - -#endif - -#define __read_mostly __attribute__((__section__(".data.read_mostly"))) - -#endif -- cgit v1.2.3 From f1ea05466a13c4fbae852f2ce87aada594f3134f Mon Sep 17 00:00:00 2001 From: Thomas Gleixner Date: Mon, 15 Oct 2007 23:28:20 +0200 Subject: x86: unify include/asm/delay_32/64.h Same file, except for whitespace, comment formatting and the extra function prototype usc_tsc_delay() in _32. Signed-off-by: Thomas Gleixner --- include/asm-x86/delay.h | 36 +++++++++++++++++++++++++++++++----- include/asm-x86/delay_32.h | 31 ------------------------------- include/asm-x86/delay_64.h | 30 ------------------------------ 3 files changed, 31 insertions(+), 66 deletions(-) delete mode 100644 include/asm-x86/delay_32.h delete mode 100644 include/asm-x86/delay_64.h diff --git a/include/asm-x86/delay.h b/include/asm-x86/delay.h index 10f2c71d622..d11d47fc1a0 100644 --- a/include/asm-x86/delay.h +++ b/include/asm-x86/delay.h @@ -1,5 +1,31 @@ -#ifdef CONFIG_X86_32 -# include "delay_32.h" -#else -# include "delay_64.h" -#endif +#ifndef _ASM_X86_DELAY_H +#define _ASM_X86_DELAY_H + +/* + * Copyright (C) 1993 Linus Torvalds + * + * Delay routines calling functions in arch/x86/lib/delay.c + */ + +/* Undefined functions to get compile-time errors */ +extern void __bad_udelay(void); +extern void __bad_ndelay(void); + +extern void __udelay(unsigned long usecs); +extern void __ndelay(unsigned long nsecs); +extern void __const_udelay(unsigned long usecs); +extern void __delay(unsigned long loops); + +/* 0x10c7 is 2**32 / 1000000 (rounded up) */ +#define udelay(n) (__builtin_constant_p(n) ? \ + ((n) > 20000 ? __bad_udelay() : __const_udelay((n) * 0x10c7ul)) : \ + __udelay(n)) + +/* 0x5 is 2**32 / 1000000000 (rounded up) */ +#define ndelay(n) (__builtin_constant_p(n) ? \ + ((n) > 20000 ? __bad_ndelay() : __const_udelay((n) * 5ul)) : \ + __ndelay(n)) + +void use_tsc_delay(void); + +#endif /* _ASM_X86_DELAY_H */ diff --git a/include/asm-x86/delay_32.h b/include/asm-x86/delay_32.h deleted file mode 100644 index 9ae5e3782ed..00000000000 --- a/include/asm-x86/delay_32.h +++ /dev/null @@ -1,31 +0,0 @@ -#ifndef _I386_DELAY_H -#define _I386_DELAY_H - -/* - * Copyright (C) 1993 Linus Torvalds - * - * Delay routines calling functions in arch/i386/lib/delay.c - */ - -/* Undefined functions to get compile-time errors */ -extern void __bad_udelay(void); -extern void __bad_ndelay(void); - -extern void __udelay(unsigned long usecs); -extern void __ndelay(unsigned long nsecs); -extern void __const_udelay(unsigned long usecs); -extern void __delay(unsigned long loops); - -/* 0x10c7 is 2**32 / 1000000 (rounded up) */ -#define udelay(n) (__builtin_constant_p(n) ? \ - ((n) > 20000 ? __bad_udelay() : __const_udelay((n) * 0x10c7ul)) : \ - __udelay(n)) - -/* 0x5 is 2**32 / 1000000000 (rounded up) */ -#define ndelay(n) (__builtin_constant_p(n) ? \ - ((n) > 20000 ? __bad_ndelay() : __const_udelay((n) * 5ul)) : \ - __ndelay(n)) - -void use_tsc_delay(void); - -#endif /* defined(_I386_DELAY_H) */ diff --git a/include/asm-x86/delay_64.h b/include/asm-x86/delay_64.h deleted file mode 100644 index c2669f1f552..00000000000 --- a/include/asm-x86/delay_64.h +++ /dev/null @@ -1,30 +0,0 @@ -#ifndef _X8664_DELAY_H -#define _X8664_DELAY_H - -/* - * Copyright (C) 1993 Linus Torvalds - * - * Delay routines calling functions in arch/x86_64/lib/delay.c - */ - -/* Undefined functions to get compile-time errors */ -extern void __bad_udelay(void); -extern void __bad_ndelay(void); - -extern void __udelay(unsigned long usecs); -extern void __ndelay(unsigned long nsecs); -extern void __const_udelay(unsigned long usecs); -extern void __delay(unsigned long loops); - -/* 0x10c7 is 2**32 / 1000000 (rounded up) */ -#define udelay(n) (__builtin_constant_p(n) ? \ - ((n) > 20000 ? __bad_udelay() : __const_udelay((n) * 0x10c7ul)) : \ - __udelay(n)) - -/* 0x5 is 2**32 / 1000000000 (rounded up) */ -#define ndelay(n) (__builtin_constant_p(n) ? \ - ((n) > 20000 ? __bad_ndelay() : __const_udelay((n) * 5ul)) : \ - __ndelay(n)) - - -#endif /* defined(_X8664_DELAY_H) */ -- cgit v1.2.3 From 327c21bc3d347d545d227103d7cc58039ab8a0be Mon Sep 17 00:00:00 2001 From: Thomas Gleixner Date: Mon, 15 Oct 2007 23:28:20 +0200 Subject: x86: unify include/asm/dmi_32/64.h Unification, so we have these things in one file. Signed-off-by: Thomas Gleixner --- include/asm-x86/dmi.h | 36 +++++++++++++++++++++++++++++++++--- include/asm-x86/dmi_32.h | 11 ----------- include/asm-x86/dmi_64.h | 24 ------------------------ 3 files changed, 33 insertions(+), 38 deletions(-) delete mode 100644 include/asm-x86/dmi_32.h delete mode 100644 include/asm-x86/dmi_64.h diff --git a/include/asm-x86/dmi.h b/include/asm-x86/dmi.h index c9e4e8ebc27..8e2b0e6aa8e 100644 --- a/include/asm-x86/dmi.h +++ b/include/asm-x86/dmi.h @@ -1,5 +1,35 @@ +#ifndef _ASM_X86_DMI_H +#define _ASM_X86_DMI_H + +#include + #ifdef CONFIG_X86_32 -# include "dmi_32.h" -#else -# include "dmi_64.h" + +/* Use early IO mappings for DMI because it's initialized early */ +#define dmi_ioremap bt_ioremap +#define dmi_iounmap bt_iounmap +#define dmi_alloc alloc_bootmem + +#else /* CONFIG_X86_32 */ + +#define DMI_MAX_DATA 2048 + +extern int dmi_alloc_index; +extern char dmi_alloc_data[DMI_MAX_DATA]; + +/* This is so early that there is no good way to allocate dynamic memory. + Allocate data in an BSS array. */ +static inline void *dmi_alloc(unsigned len) +{ + int idx = dmi_alloc_index; + if ((dmi_alloc_index += len) > DMI_MAX_DATA) + return NULL; + return dmi_alloc_data + idx; +} + +#define dmi_ioremap early_ioremap +#define dmi_iounmap early_iounmap + +#endif + #endif diff --git a/include/asm-x86/dmi_32.h b/include/asm-x86/dmi_32.h deleted file mode 100644 index 38d4eeb7fc7..00000000000 --- a/include/asm-x86/dmi_32.h +++ /dev/null @@ -1,11 +0,0 @@ -#ifndef _ASM_DMI_H -#define _ASM_DMI_H 1 - -#include - -/* Use early IO mappings for DMI because it's initialized early */ -#define dmi_ioremap bt_ioremap -#define dmi_iounmap bt_iounmap -#define dmi_alloc alloc_bootmem - -#endif diff --git a/include/asm-x86/dmi_64.h b/include/asm-x86/dmi_64.h deleted file mode 100644 index d02e32e3c3f..00000000000 --- a/include/asm-x86/dmi_64.h +++ /dev/null @@ -1,24 +0,0 @@ -#ifndef _ASM_DMI_H -#define _ASM_DMI_H 1 - -#include - -#define DMI_MAX_DATA 2048 - -extern int dmi_alloc_index; -extern char dmi_alloc_data[DMI_MAX_DATA]; - -/* This is so early that there is no good way to allocate dynamic memory. - Allocate data in an BSS array. */ -static inline void *dmi_alloc(unsigned len) -{ - int idx = dmi_alloc_index; - if ((dmi_alloc_index += len) > DMI_MAX_DATA) - return NULL; - return dmi_alloc_data + idx; -} - -#define dmi_ioremap early_ioremap -#define dmi_iounmap early_iounmap - -#endif -- cgit v1.2.3 From 1f7afb08a595292d946a5f1fd4929c81db7042d2 Mon Sep 17 00:00:00 2001 From: Thomas Gleixner Date: Mon, 15 Oct 2007 23:28:20 +0200 Subject: x86: unify include/asm/cache_32/64.h Same file, except for whitespace, comment formatting and: 32-bit: unsigned long *virt_addr = va; 64-bit: unsigned int *virt_addr = va; Both can be safely replaced by: u32 i, *virt_addr = va; Signed-off-by: Thomas Gleixner --- include/asm-x86/edac.h | 21 +++++++++++++++++---- include/asm-x86/edac_32.h | 18 ------------------ include/asm-x86/edac_64.h | 18 ------------------ 3 files changed, 17 insertions(+), 40 deletions(-) delete mode 100644 include/asm-x86/edac_32.h delete mode 100644 include/asm-x86/edac_64.h diff --git a/include/asm-x86/edac.h b/include/asm-x86/edac.h index f8b888e140b..cf3200a745a 100644 --- a/include/asm-x86/edac.h +++ b/include/asm-x86/edac.h @@ -1,5 +1,18 @@ -#ifdef CONFIG_X86_32 -# include "edac_32.h" -#else -# include "edac_64.h" +#ifndef _ASM_X86_EDAC_H +#define _ASM_X86_EDAC_H + +/* ECC atomic, DMA, SMP and interrupt safe scrub function */ + +static __inline__ void atomic_scrub(void *va, u32 size) +{ + u32 i, *virt_addr = va; + + /* + * Very carefully read and write to memory atomically so we + * are interrupt, DMA and SMP safe. + */ + for (i = 0; i < size / 4; i++, virt_addr++) + __asm__ __volatile__("lock; addl $0, %0"::"m"(*virt_addr)); +} + #endif diff --git a/include/asm-x86/edac_32.h b/include/asm-x86/edac_32.h deleted file mode 100644 index 3e7dd0ab68c..00000000000 --- a/include/asm-x86/edac_32.h +++ /dev/null @@ -1,18 +0,0 @@ -#ifndef ASM_EDAC_H -#define ASM_EDAC_H - -/* ECC atomic, DMA, SMP and interrupt safe scrub function */ - -static __inline__ void atomic_scrub(void *va, u32 size) -{ - unsigned long *virt_addr = va; - u32 i; - - for (i = 0; i < size / 4; i++, virt_addr++) - /* Very carefully read and write to memory atomically - * so we are interrupt, DMA and SMP safe. - */ - __asm__ __volatile__("lock; addl $0, %0"::"m"(*virt_addr)); -} - -#endif diff --git a/include/asm-x86/edac_64.h b/include/asm-x86/edac_64.h deleted file mode 100644 index cad1cd42b4e..00000000000 --- a/include/asm-x86/edac_64.h +++ /dev/null @@ -1,18 +0,0 @@ -#ifndef ASM_EDAC_H -#define ASM_EDAC_H - -/* ECC atomic, DMA, SMP and interrupt safe scrub function */ - -static __inline__ void atomic_scrub(void *va, u32 size) -{ - unsigned int *virt_addr = va; - u32 i; - - for (i = 0; i < size / 4; i++, virt_addr++) - /* Very carefully read and write to memory atomically - * so we are interrupt, DMA and SMP safe. - */ - __asm__ __volatile__("lock; addl $0, %0"::"m"(*virt_addr)); -} - -#endif -- cgit v1.2.3 From 106619c440a7cd5a100eaba38665231ab8c762b8 Mon Sep 17 00:00:00 2001 From: Thomas Gleixner Date: Mon, 15 Oct 2007 23:28:20 +0200 Subject: x86: unify include/asm/cache_32/64.h Same file, except for whitespace, comment formatting and the two variants of fb_is_primary_device() Signed-off-by: Thomas Gleixner --- include/asm-x86/fb.h | 20 ++++++++++++++++++-- include/asm-x86/fb_32.h | 17 ----------------- include/asm-x86/fb_64.h | 19 ------------------- 3 files changed, 18 insertions(+), 38 deletions(-) delete mode 100644 include/asm-x86/fb_32.h delete mode 100644 include/asm-x86/fb_64.h diff --git a/include/asm-x86/fb.h b/include/asm-x86/fb.h index 238c7ca4587..53018464aea 100644 --- a/include/asm-x86/fb.h +++ b/include/asm-x86/fb.h @@ -1,5 +1,21 @@ +#ifndef _ASM_X86_FB_H +#define _ASM_X86_FB_H + +#include +#include +#include + +static inline void fb_pgprotect(struct file *file, struct vm_area_struct *vma, + unsigned long off) +{ + if (boot_cpu_data.x86 > 3) + pgprot_val(vma->vm_page_prot) |= _PAGE_PCD; +} + #ifdef CONFIG_X86_32 -# include "fb_32.h" +extern int fb_is_primary_device(struct fb_info *info); #else -# include "fb_64.h" +static inline int fb_is_primary_device(struct fb_info *info) { return 0; } #endif + +#endif /* _ASM_X86_FB_H */ diff --git a/include/asm-x86/fb_32.h b/include/asm-x86/fb_32.h deleted file mode 100644 index d1c6297d4a6..00000000000 --- a/include/asm-x86/fb_32.h +++ /dev/null @@ -1,17 +0,0 @@ -#ifndef _ASM_FB_H_ -#define _ASM_FB_H_ - -#include -#include -#include - -extern int fb_is_primary_device(struct fb_info *info); - -static inline void fb_pgprotect(struct file *file, struct vm_area_struct *vma, - unsigned long off) -{ - if (boot_cpu_data.x86 > 3) - pgprot_val(vma->vm_page_prot) |= _PAGE_PCD; -} - -#endif /* _ASM_FB_H_ */ diff --git a/include/asm-x86/fb_64.h b/include/asm-x86/fb_64.h deleted file mode 100644 index 60548e651d1..00000000000 --- a/include/asm-x86/fb_64.h +++ /dev/null @@ -1,19 +0,0 @@ -#ifndef _ASM_FB_H_ -#define _ASM_FB_H_ -#include -#include -#include - -static inline void fb_pgprotect(struct file *file, struct vm_area_struct *vma, - unsigned long off) -{ - if (boot_cpu_data.x86 > 3) - pgprot_val(vma->vm_page_prot) |= _PAGE_PCD; -} - -static inline int fb_is_primary_device(struct fb_info *info) -{ - return 0; -} - -#endif /* _ASM_FB_H_ */ -- cgit v1.2.3 From 2dc27f01ec3990d79fc97386459191fc3da2b02f Mon Sep 17 00:00:00 2001 From: Thomas Gleixner Date: Mon, 15 Oct 2007 23:28:20 +0200 Subject: x86: apply missing DMA/OOM prevention to floppy_32.h commit 554d284ba90bc2306c31e5363789f05c320969c3 added _GPF_NORETRY to floppy_64.h to prevent OOM killer on floppy DMA allocations. Apply the same to the 32 bit variant. Found during the attempt to unify the _32/_64 variants. Seperate commit to document the resulting code change. Signed-off-by: Thomas Gleixner --- include/asm-x86/floppy_32.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/include/asm-x86/floppy_32.h b/include/asm-x86/floppy_32.h index 99583b39d21..cca9be7f6c8 100644 --- a/include/asm-x86/floppy_32.h +++ b/include/asm-x86/floppy_32.h @@ -154,7 +154,7 @@ static int fd_request_irq(void) static unsigned long dma_mem_alloc(unsigned long size) { - return __get_dma_pages(GFP_KERNEL,get_order(size)); + return __get_dma_pages(GFP_KERNEL | __GFP_NORETRY, get_order(size)); } -- cgit v1.2.3 From b515e4767ffd07d1b14f4dc4f328d75f765215ab Mon Sep 17 00:00:00 2001 From: Thomas Gleixner Date: Wed, 17 Oct 2007 20:24:56 +0200 Subject: x86: unify include/asm/floppy_32/64.h Same file, except for whitespace, comment formatting and: 32-bit: if((unsigned int) addr >= (unsigned int) high_memory) 64-bit: if((unsigned long) addr >= (unsigned long) high_memory) where the latter can be used safely for both. Signed-off-by: Thomas Gleixner Conflicts: include/asm-x86/floppy_32.h include/asm-x86/floppy_64.h --- include/asm-x86/floppy.h | 281 +++++++++++++++++++++++++++++++++++++++++++- include/asm-x86/floppy_32.h | 280 ------------------------------------------- include/asm-x86/floppy_64.h | 279 ------------------------------------------- 3 files changed, 277 insertions(+), 563 deletions(-) delete mode 100644 include/asm-x86/floppy_32.h delete mode 100644 include/asm-x86/floppy_64.h diff --git a/include/asm-x86/floppy.h b/include/asm-x86/floppy.h index aecbb6dca21..a48d7153c09 100644 --- a/include/asm-x86/floppy.h +++ b/include/asm-x86/floppy.h @@ -1,5 +1,278 @@ -#ifdef CONFIG_X86_32 -# include "floppy_32.h" -#else -# include "floppy_64.h" +/* + * Architecture specific parts of the Floppy driver + * + * This file is subject to the terms and conditions of the GNU General Public + * License. See the file "COPYING" in the main directory of this archive + * for more details. + * + * Copyright (C) 1995 + */ +#ifndef _ASM_X86_FLOPPY_H +#define _ASM_X86_FLOPPY_H + +#include + +/* + * The DMA channel used by the floppy controller cannot access data at + * addresses >= 16MB + * + * Went back to the 1MB limit, as some people had problems with the floppy + * driver otherwise. It doesn't matter much for performance anyway, as most + * floppy accesses go through the track buffer. + */ +#define _CROSS_64KB(a,s,vdma) \ +(!(vdma) && ((unsigned long)(a)/K_64 != ((unsigned long)(a) + (s) - 1) / K_64)) + +#define CROSS_64KB(a,s) _CROSS_64KB(a,s,use_virtual_dma & 1) + + +#define SW fd_routine[use_virtual_dma&1] +#define CSW fd_routine[can_use_virtual_dma & 1] + + +#define fd_inb(port) inb_p(port) +#define fd_outb(value,port) outb_p(value,port) + +#define fd_request_dma() CSW._request_dma(FLOPPY_DMA,"floppy") +#define fd_free_dma() CSW._free_dma(FLOPPY_DMA) +#define fd_enable_irq() enable_irq(FLOPPY_IRQ) +#define fd_disable_irq() disable_irq(FLOPPY_IRQ) +#define fd_free_irq() free_irq(FLOPPY_IRQ, NULL) +#define fd_get_dma_residue() SW._get_dma_residue(FLOPPY_DMA) +#define fd_dma_mem_alloc(size) SW._dma_mem_alloc(size) +#define fd_dma_setup(addr, size, mode, io) SW._dma_setup(addr, size, mode, io) + +#define FLOPPY_CAN_FALLBACK_ON_NODMA + +static int virtual_dma_count; +static int virtual_dma_residue; +static char *virtual_dma_addr; +static int virtual_dma_mode; +static int doing_pdma; + +static irqreturn_t floppy_hardint(int irq, void *dev_id) +{ + register unsigned char st; + +#undef TRACE_FLPY_INT + +#ifdef TRACE_FLPY_INT + static int calls=0; + static int bytes=0; + static int dma_wait=0; #endif + if (!doing_pdma) + return floppy_interrupt(irq, dev_id); + +#ifdef TRACE_FLPY_INT + if(!calls) + bytes = virtual_dma_count; +#endif + + { + register int lcount; + register char *lptr; + + st = 1; + for(lcount=virtual_dma_count, lptr=virtual_dma_addr; + lcount; lcount--, lptr++) { + st=inb(virtual_dma_port+4) & 0xa0 ; + if(st != 0xa0) + break; + if(virtual_dma_mode) + outb_p(*lptr, virtual_dma_port+5); + else + *lptr = inb_p(virtual_dma_port+5); + } + virtual_dma_count = lcount; + virtual_dma_addr = lptr; + st = inb(virtual_dma_port+4); + } + +#ifdef TRACE_FLPY_INT + calls++; +#endif + if(st == 0x20) + return IRQ_HANDLED; + if(!(st & 0x20)) { + virtual_dma_residue += virtual_dma_count; + virtual_dma_count=0; +#ifdef TRACE_FLPY_INT + printk("count=%x, residue=%x calls=%d bytes=%d dma_wait=%d\n", + virtual_dma_count, virtual_dma_residue, calls, bytes, + dma_wait); + calls = 0; + dma_wait=0; +#endif + doing_pdma = 0; + floppy_interrupt(irq, dev_id); + return IRQ_HANDLED; + } +#ifdef TRACE_FLPY_INT + if(!virtual_dma_count) + dma_wait++; +#endif + return IRQ_HANDLED; +} + +static void fd_disable_dma(void) +{ + if(! (can_use_virtual_dma & 1)) + disable_dma(FLOPPY_DMA); + doing_pdma = 0; + virtual_dma_residue += virtual_dma_count; + virtual_dma_count=0; +} + +static int vdma_request_dma(unsigned int dmanr, const char * device_id) +{ + return 0; +} + +static void vdma_nop(unsigned int dummy) +{ +} + + +static int vdma_get_dma_residue(unsigned int dummy) +{ + return virtual_dma_count + virtual_dma_residue; +} + + +static int fd_request_irq(void) +{ + if(can_use_virtual_dma) + return request_irq(FLOPPY_IRQ, floppy_hardint, + IRQF_DISABLED, "floppy", NULL); + else + return request_irq(FLOPPY_IRQ, floppy_interrupt, + IRQF_DISABLED, "floppy", NULL); +} + +static unsigned long dma_mem_alloc(unsigned long size) +{ + return __get_dma_pages(GFP_KERNEL|__GFP_NORETRY,get_order(size)); +} + + +static unsigned long vdma_mem_alloc(unsigned long size) +{ + return (unsigned long) vmalloc(size); + +} + +#define nodma_mem_alloc(size) vdma_mem_alloc(size) + +static void _fd_dma_mem_free(unsigned long addr, unsigned long size) +{ + if((unsigned long) addr >= (unsigned long) high_memory) + vfree((void *)addr); + else + free_pages(addr, get_order(size)); +} + +#define fd_dma_mem_free(addr, size) _fd_dma_mem_free(addr, size) + +static void _fd_chose_dma_mode(char *addr, unsigned long size) +{ + if(can_use_virtual_dma == 2) { + if((unsigned long) addr >= (unsigned long) high_memory || + isa_virt_to_bus(addr) >= 0x1000000 || + _CROSS_64KB(addr, size, 0)) + use_virtual_dma = 1; + else + use_virtual_dma = 0; + } else { + use_virtual_dma = can_use_virtual_dma & 1; + } +} + +#define fd_chose_dma_mode(addr, size) _fd_chose_dma_mode(addr, size) + + +static int vdma_dma_setup(char *addr, unsigned long size, int mode, int io) +{ + doing_pdma = 1; + virtual_dma_port = io; + virtual_dma_mode = (mode == DMA_MODE_WRITE); + virtual_dma_addr = addr; + virtual_dma_count = size; + virtual_dma_residue = 0; + return 0; +} + +static int hard_dma_setup(char *addr, unsigned long size, int mode, int io) +{ +#ifdef FLOPPY_SANITY_CHECK + if (CROSS_64KB(addr, size)) { + printk("DMA crossing 64-K boundary %p-%p\n", addr, addr+size); + return -1; + } +#endif + /* actual, physical DMA */ + doing_pdma = 0; + clear_dma_ff(FLOPPY_DMA); + set_dma_mode(FLOPPY_DMA,mode); + set_dma_addr(FLOPPY_DMA,isa_virt_to_bus(addr)); + set_dma_count(FLOPPY_DMA,size); + enable_dma(FLOPPY_DMA); + return 0; +} + +static struct fd_routine_l { + int (*_request_dma)(unsigned int dmanr, const char * device_id); + void (*_free_dma)(unsigned int dmanr); + int (*_get_dma_residue)(unsigned int dummy); + unsigned long (*_dma_mem_alloc) (unsigned long size); + int (*_dma_setup)(char *addr, unsigned long size, int mode, int io); +} fd_routine[] = { + { + request_dma, + free_dma, + get_dma_residue, + dma_mem_alloc, + hard_dma_setup + }, + { + vdma_request_dma, + vdma_nop, + vdma_get_dma_residue, + vdma_mem_alloc, + vdma_dma_setup + } +}; + + +static int FDC1 = 0x3f0; +static int FDC2 = -1; + +/* + * Floppy types are stored in the rtc's CMOS RAM and so rtc_lock + * is needed to prevent corrupted CMOS RAM in case "insmod floppy" + * coincides with another rtc CMOS user. Paul G. + */ +#define FLOPPY0_TYPE ({ \ + unsigned long flags; \ + unsigned char val; \ + spin_lock_irqsave(&rtc_lock, flags); \ + val = (CMOS_READ(0x10) >> 4) & 15; \ + spin_unlock_irqrestore(&rtc_lock, flags); \ + val; \ +}) + +#define FLOPPY1_TYPE ({ \ + unsigned long flags; \ + unsigned char val; \ + spin_lock_irqsave(&rtc_lock, flags); \ + val = CMOS_READ(0x10) & 15; \ + spin_unlock_irqrestore(&rtc_lock, flags); \ + val; \ +}) + +#define N_FDC 2 +#define N_DRIVE 8 + +#define EXTRA_FLOPPY_PARAMS + +#endif /* _ASM_X86_FLOPPY_H */ diff --git a/include/asm-x86/floppy_32.h b/include/asm-x86/floppy_32.h deleted file mode 100644 index cca9be7f6c8..00000000000 --- a/include/asm-x86/floppy_32.h +++ /dev/null @@ -1,280 +0,0 @@ -/* - * Architecture specific parts of the Floppy driver - * - * This file is subject to the terms and conditions of the GNU General Public - * License. See the file "COPYING" in the main directory of this archive - * for more details. - * - * Copyright (C) 1995 - */ -#ifndef __ASM_I386_FLOPPY_H -#define __ASM_I386_FLOPPY_H - -#include - - -/* - * The DMA channel used by the floppy controller cannot access data at - * addresses >= 16MB - * - * Went back to the 1MB limit, as some people had problems with the floppy - * driver otherwise. It doesn't matter much for performance anyway, as most - * floppy accesses go through the track buffer. - */ -#define _CROSS_64KB(a,s,vdma) \ -(!(vdma) && ((unsigned long)(a)/K_64 != ((unsigned long)(a) + (s) - 1) / K_64)) - -#define CROSS_64KB(a,s) _CROSS_64KB(a,s,use_virtual_dma & 1) - - -#define SW fd_routine[use_virtual_dma&1] -#define CSW fd_routine[can_use_virtual_dma & 1] - - -#define fd_inb(port) inb_p(port) -#define fd_outb(value,port) outb_p(value,port) - -#define fd_request_dma() CSW._request_dma(FLOPPY_DMA,"floppy") -#define fd_free_dma() CSW._free_dma(FLOPPY_DMA) -#define fd_enable_irq() enable_irq(FLOPPY_IRQ) -#define fd_disable_irq() disable_irq(FLOPPY_IRQ) -#define fd_free_irq() free_irq(FLOPPY_IRQ, NULL) -#define fd_get_dma_residue() SW._get_dma_residue(FLOPPY_DMA) -#define fd_dma_mem_alloc(size) SW._dma_mem_alloc(size) -#define fd_dma_setup(addr, size, mode, io) SW._dma_setup(addr, size, mode, io) - -#define FLOPPY_CAN_FALLBACK_ON_NODMA - -static int virtual_dma_count; -static int virtual_dma_residue; -static char *virtual_dma_addr; -static int virtual_dma_mode; -static int doing_pdma; - -static irqreturn_t floppy_hardint(int irq, void *dev_id) -{ - register unsigned char st; - -#undef TRACE_FLPY_INT - -#ifdef TRACE_FLPY_INT - static int calls=0; - static int bytes=0; - static int dma_wait=0; -#endif - if (!doing_pdma) - return floppy_interrupt(irq, dev_id); - -#ifdef TRACE_FLPY_INT - if(!calls) - bytes = virtual_dma_count; -#endif - - { - register int lcount; - register char *lptr; - - st = 1; - for(lcount=virtual_dma_count, lptr=virtual_dma_addr; - lcount; lcount--, lptr++) { - st=inb(virtual_dma_port+4) & 0xa0 ; - if(st != 0xa0) - break; - if(virtual_dma_mode) - outb_p(*lptr, virtual_dma_port+5); - else - *lptr = inb_p(virtual_dma_port+5); - } - virtual_dma_count = lcount; - virtual_dma_addr = lptr; - st = inb(virtual_dma_port+4); - } - -#ifdef TRACE_FLPY_INT - calls++; -#endif - if(st == 0x20) - return IRQ_HANDLED; - if(!(st & 0x20)) { - virtual_dma_residue += virtual_dma_count; - virtual_dma_count=0; -#ifdef TRACE_FLPY_INT - printk("count=%x, residue=%x calls=%d bytes=%d dma_wait=%d\n", - virtual_dma_count, virtual_dma_residue, calls, bytes, - dma_wait); - calls = 0; - dma_wait=0; -#endif - doing_pdma = 0; - floppy_interrupt(irq, dev_id); - return IRQ_HANDLED; - } -#ifdef TRACE_FLPY_INT - if(!virtual_dma_count) - dma_wait++; -#endif - return IRQ_HANDLED; -} - -static void fd_disable_dma(void) -{ - if(! (can_use_virtual_dma & 1)) - disable_dma(FLOPPY_DMA); - doing_pdma = 0; - virtual_dma_residue += virtual_dma_count; - virtual_dma_count=0; -} - -static int vdma_request_dma(unsigned int dmanr, const char * device_id) -{ - return 0; -} - -static void vdma_nop(unsigned int dummy) -{ -} - - -static int vdma_get_dma_residue(unsigned int dummy) -{ - return virtual_dma_count + virtual_dma_residue; -} - - -static int fd_request_irq(void) -{ - if(can_use_virtual_dma) - return request_irq(FLOPPY_IRQ, floppy_hardint, - IRQF_DISABLED, "floppy", NULL); - else - return request_irq(FLOPPY_IRQ, floppy_interrupt, - IRQF_DISABLED, "floppy", NULL); - -} - -static unsigned long dma_mem_alloc(unsigned long size) -{ - return __get_dma_pages(GFP_KERNEL | __GFP_NORETRY, get_order(size)); -} - - -static unsigned long vdma_mem_alloc(unsigned long size) -{ - return (unsigned long) vmalloc(size); - -} - -#define nodma_mem_alloc(size) vdma_mem_alloc(size) - -static void _fd_dma_mem_free(unsigned long addr, unsigned long size) -{ - if((unsigned int) addr >= (unsigned int) high_memory) - vfree((void *)addr); - else - free_pages(addr, get_order(size)); -} - -#define fd_dma_mem_free(addr, size) _fd_dma_mem_free(addr, size) - -static void _fd_chose_dma_mode(char *addr, unsigned long size) -{ - if(can_use_virtual_dma == 2) { - if((unsigned int) addr >= (unsigned int) high_memory || - isa_virt_to_bus(addr) >= 0x1000000 || - _CROSS_64KB(addr, size, 0)) - use_virtual_dma = 1; - else - use_virtual_dma = 0; - } else { - use_virtual_dma = can_use_virtual_dma & 1; - } -} - -#define fd_chose_dma_mode(addr, size) _fd_chose_dma_mode(addr, size) - - -static int vdma_dma_setup(char *addr, unsigned long size, int mode, int io) -{ - doing_pdma = 1; - virtual_dma_port = io; - virtual_dma_mode = (mode == DMA_MODE_WRITE); - virtual_dma_addr = addr; - virtual_dma_count = size; - virtual_dma_residue = 0; - return 0; -} - -static int hard_dma_setup(char *addr, unsigned long size, int mode, int io) -{ -#ifdef FLOPPY_SANITY_CHECK - if (CROSS_64KB(addr, size)) { - printk("DMA crossing 64-K boundary %p-%p\n", addr, addr+size); - return -1; - } -#endif - /* actual, physical DMA */ - doing_pdma = 0; - clear_dma_ff(FLOPPY_DMA); - set_dma_mode(FLOPPY_DMA,mode); - set_dma_addr(FLOPPY_DMA,isa_virt_to_bus(addr)); - set_dma_count(FLOPPY_DMA,size); - enable_dma(FLOPPY_DMA); - return 0; -} - -static struct fd_routine_l { - int (*_request_dma)(unsigned int dmanr, const char * device_id); - void (*_free_dma)(unsigned int dmanr); - int (*_get_dma_residue)(unsigned int dummy); - unsigned long (*_dma_mem_alloc) (unsigned long size); - int (*_dma_setup)(char *addr, unsigned long size, int mode, int io); -} fd_routine[] = { - { - request_dma, - free_dma, - get_dma_residue, - dma_mem_alloc, - hard_dma_setup - }, - { - vdma_request_dma, - vdma_nop, - vdma_get_dma_residue, - vdma_mem_alloc, - vdma_dma_setup - } -}; - - -static int FDC1 = 0x3f0; -static int FDC2 = -1; - -/* - * Floppy types are stored in the rtc's CMOS RAM and so rtc_lock - * is needed to prevent corrupted CMOS RAM in case "insmod floppy" - * coincides with another rtc CMOS user. Paul G. - */ -#define FLOPPY0_TYPE ({ \ - unsigned long flags; \ - unsigned char val; \ - spin_lock_irqsave(&rtc_lock, flags); \ - val = (CMOS_READ(0x10) >> 4) & 15; \ - spin_unlock_irqrestore(&rtc_lock, flags); \ - val; \ -}) - -#define FLOPPY1_TYPE ({ \ - unsigned long flags; \ - unsigned char val; \ - spin_lock_irqsave(&rtc_lock, flags); \ - val = CMOS_READ(0x10) & 15; \ - spin_unlock_irqrestore(&rtc_lock, flags); \ - val; \ -}) - -#define N_FDC 2 -#define N_DRIVE 8 - -#define EXTRA_FLOPPY_PARAMS - -#endif /* __ASM_I386_FLOPPY_H */ diff --git a/include/asm-x86/floppy_64.h b/include/asm-x86/floppy_64.h deleted file mode 100644 index d993380dcb4..00000000000 --- a/include/asm-x86/floppy_64.h +++ /dev/null @@ -1,279 +0,0 @@ -/* - * Architecture specific parts of the Floppy driver - * - * This file is subject to the terms and conditions of the GNU General Public - * License. See the file "COPYING" in the main directory of this archive - * for more details. - * - * Copyright (C) 1995 - */ -#ifndef __ASM_X86_64_FLOPPY_H -#define __ASM_X86_64_FLOPPY_H - -#include - - -/* - * The DMA channel used by the floppy controller cannot access data at - * addresses >= 16MB - * - * Went back to the 1MB limit, as some people had problems with the floppy - * driver otherwise. It doesn't matter much for performance anyway, as most - * floppy accesses go through the track buffer. - */ -#define _CROSS_64KB(a,s,vdma) \ -(!(vdma) && ((unsigned long)(a)/K_64 != ((unsigned long)(a) + (s) - 1) / K_64)) - -#define CROSS_64KB(a,s) _CROSS_64KB(a,s,use_virtual_dma & 1) - - -#define SW fd_routine[use_virtual_dma&1] -#define CSW fd_routine[can_use_virtual_dma & 1] - - -#define fd_inb(port) inb_p(port) -#define fd_outb(value,port) outb_p(value,port) - -#define fd_request_dma() CSW._request_dma(FLOPPY_DMA,"floppy") -#define fd_free_dma() CSW._free_dma(FLOPPY_DMA) -#define fd_enable_irq() enable_irq(FLOPPY_IRQ) -#define fd_disable_irq() disable_irq(FLOPPY_IRQ) -#define fd_free_irq() free_irq(FLOPPY_IRQ, NULL) -#define fd_get_dma_residue() SW._get_dma_residue(FLOPPY_DMA) -#define fd_dma_mem_alloc(size) SW._dma_mem_alloc(size) -#define fd_dma_setup(addr, size, mode, io) SW._dma_setup(addr, size, mode, io) - -#define FLOPPY_CAN_FALLBACK_ON_NODMA - -static int virtual_dma_count; -static int virtual_dma_residue; -static char *virtual_dma_addr; -static int virtual_dma_mode; -static int doing_pdma; - -static irqreturn_t floppy_hardint(int irq, void *dev_id) -{ - register unsigned char st; - -#undef TRACE_FLPY_INT - -#ifdef TRACE_FLPY_INT - static int calls=0; - static int bytes=0; - static int dma_wait=0; -#endif - if (!doing_pdma) - return floppy_interrupt(irq, dev_id); - -#ifdef TRACE_FLPY_INT - if(!calls) - bytes = virtual_dma_count; -#endif - - { - register int lcount; - register char *lptr; - - st = 1; - for(lcount=virtual_dma_count, lptr=virtual_dma_addr; - lcount; lcount--, lptr++) { - st=inb(virtual_dma_port+4) & 0xa0 ; - if(st != 0xa0) - break; - if(virtual_dma_mode) - outb_p(*lptr, virtual_dma_port+5); - else - *lptr = inb_p(virtual_dma_port+5); - } - virtual_dma_count = lcount; - virtual_dma_addr = lptr; - st = inb(virtual_dma_port+4); - } - -#ifdef TRACE_FLPY_INT - calls++; -#endif - if(st == 0x20) - return IRQ_HANDLED; - if(!(st & 0x20)) { - virtual_dma_residue += virtual_dma_count; - virtual_dma_count=0; -#ifdef TRACE_FLPY_INT - printk("count=%x, residue=%x calls=%d bytes=%d dma_wait=%d\n", - virtual_dma_count, virtual_dma_residue, calls, bytes, - dma_wait); - calls = 0; - dma_wait=0; -#endif - doing_pdma = 0; - floppy_interrupt(irq, dev_id); - return IRQ_HANDLED; - } -#ifdef TRACE_FLPY_INT - if(!virtual_dma_count) - dma_wait++; -#endif - return IRQ_HANDLED; -} - -static void fd_disable_dma(void) -{ - if(! (can_use_virtual_dma & 1)) - disable_dma(FLOPPY_DMA); - doing_pdma = 0; - virtual_dma_residue += virtual_dma_count; - virtual_dma_count=0; -} - -static int vdma_request_dma(unsigned int dmanr, const char * device_id) -{ - return 0; -} - -static void vdma_nop(unsigned int dummy) -{ -} - - -static int vdma_get_dma_residue(unsigned int dummy) -{ - return virtual_dma_count + virtual_dma_residue; -} - - -static int fd_request_irq(void) -{ - if(can_use_virtual_dma) - return request_irq(FLOPPY_IRQ, floppy_hardint, - IRQF_DISABLED, "floppy", NULL); - else - return request_irq(FLOPPY_IRQ, floppy_interrupt, - IRQF_DISABLED, "floppy", NULL); -} - -static unsigned long dma_mem_alloc(unsigned long size) -{ - return __get_dma_pages(GFP_KERNEL|__GFP_NORETRY,get_order(size)); -} - - -static unsigned long vdma_mem_alloc(unsigned long size) -{ - return (unsigned long) vmalloc(size); - -} - -#define nodma_mem_alloc(size) vdma_mem_alloc(size) - -static void _fd_dma_mem_free(unsigned long addr, unsigned long size) -{ - if((unsigned long) addr >= (unsigned long) high_memory) - vfree((void *)addr); - else - free_pages(addr, get_order(size)); -} - -#define fd_dma_mem_free(addr, size) _fd_dma_mem_free(addr, size) - -static void _fd_chose_dma_mode(char *addr, unsigned long size) -{ - if(can_use_virtual_dma == 2) { - if((unsigned long) addr >= (unsigned long) high_memory || - isa_virt_to_bus(addr) >= 0x1000000 || - _CROSS_64KB(addr, size, 0)) - use_virtual_dma = 1; - else - use_virtual_dma = 0; - } else { - use_virtual_dma = can_use_virtual_dma & 1; - } -} - -#define fd_chose_dma_mode(addr, size) _fd_chose_dma_mode(addr, size) - - -static int vdma_dma_setup(char *addr, unsigned long size, int mode, int io) -{ - doing_pdma = 1; - virtual_dma_port = io; - virtual_dma_mode = (mode == DMA_MODE_WRITE); - virtual_dma_addr = addr; - virtual_dma_count = size; - virtual_dma_residue = 0; - return 0; -} - -static int hard_dma_setup(char *addr, unsigned long size, int mode, int io) -{ -#ifdef FLOPPY_SANITY_CHECK - if (CROSS_64KB(addr, size)) { - printk("DMA crossing 64-K boundary %p-%p\n", addr, addr+size); - return -1; - } -#endif - /* actual, physical DMA */ - doing_pdma = 0; - clear_dma_ff(FLOPPY_DMA); - set_dma_mode(FLOPPY_DMA,mode); - set_dma_addr(FLOPPY_DMA,isa_virt_to_bus(addr)); - set_dma_count(FLOPPY_DMA,size); - enable_dma(FLOPPY_DMA); - return 0; -} - -static struct fd_routine_l { - int (*_request_dma)(unsigned int dmanr, const char * device_id); - void (*_free_dma)(unsigned int dmanr); - int (*_get_dma_residue)(unsigned int dummy); - unsigned long (*_dma_mem_alloc) (unsigned long size); - int (*_dma_setup)(char *addr, unsigned long size, int mode, int io); -} fd_routine[] = { - { - request_dma, - free_dma, - get_dma_residue, - dma_mem_alloc, - hard_dma_setup - }, - { - vdma_request_dma, - vdma_nop, - vdma_get_dma_residue, - vdma_mem_alloc, - vdma_dma_setup - } -}; - - -static int FDC1 = 0x3f0; -static int FDC2 = -1; - -/* - * Floppy types are stored in the rtc's CMOS RAM and so rtc_lock - * is needed to prevent corrupted CMOS RAM in case "insmod floppy" - * coincides with another rtc CMOS user. Paul G. - */ -#define FLOPPY0_TYPE ({ \ - unsigned long flags; \ - unsigned char val; \ - spin_lock_irqsave(&rtc_lock, flags); \ - val = (CMOS_READ(0x10) >> 4) & 15; \ - spin_unlock_irqrestore(&rtc_lock, flags); \ - val; \ -}) - -#define FLOPPY1_TYPE ({ \ - unsigned long flags; \ - unsigned char val; \ - spin_lock_irqsave(&rtc_lock, flags); \ - val = CMOS_READ(0x10) & 15; \ - spin_unlock_irqrestore(&rtc_lock, flags); \ - val; \ -}) - -#define N_FDC 2 -#define N_DRIVE 8 - -#define EXTRA_FLOPPY_PARAMS - -#endif /* __ASM_X86_64_FLOPPY_H */ -- cgit v1.2.3 From 612d26a72a3fad16a0a5e37f7b1652a0ea965fc0 Mon Sep 17 00:00:00 2001 From: Thomas Gleixner Date: Mon, 15 Oct 2007 23:28:20 +0200 Subject: x86: unify include/asm/ioctls_32/64.h Same file, except for whitespace and comment formatting. Signed-off-by: Thomas Gleixner --- include/asm-x86/Kbuild | 2 - include/asm-x86/ioctls.h | 98 +++++++++++++++++++++++++++++++++++++++------ include/asm-x86/ioctls_32.h | 87 ---------------------------------------- include/asm-x86/ioctls_64.h | 86 --------------------------------------- 4 files changed, 86 insertions(+), 187 deletions(-) delete mode 100644 include/asm-x86/ioctls_32.h delete mode 100644 include/asm-x86/ioctls_64.h diff --git a/include/asm-x86/Kbuild b/include/asm-x86/Kbuild index d300cff2201..a617f752ea6 100644 --- a/include/asm-x86/Kbuild +++ b/include/asm-x86/Kbuild @@ -18,8 +18,6 @@ unifdef-y += byteorder_32.h unifdef-y += byteorder_64.h unifdef-y += elf_32.h unifdef-y += elf_64.h -unifdef-y += ioctls_32.h -unifdef-y += ioctls_64.h unifdef-y += mce.h unifdef-y += mman_32.h unifdef-y += mman_64.h diff --git a/include/asm-x86/ioctls.h b/include/asm-x86/ioctls.h index 1e0fd48f18b..93c894dc515 100644 --- a/include/asm-x86/ioctls.h +++ b/include/asm-x86/ioctls.h @@ -1,13 +1,87 @@ -#ifdef __KERNEL__ -# ifdef CONFIG_X86_32 -# include "ioctls_32.h" -# else -# include "ioctls_64.h" -# endif -#else -# ifdef __i386__ -# include "ioctls_32.h" -# else -# include "ioctls_64.h" -# endif +#ifndef _ASM_X86_IOCTLS_H +#define _ASM_X86_IOCTLS_H + +#include + +/* 0x54 is just a magic number to make these relatively unique ('T') */ + +#define TCGETS 0x5401 +#define TCSETS 0x5402 /* Clashes with SNDCTL_TMR_START sound ioctl */ +#define TCSETSW 0x5403 +#define TCSETSF 0x5404 +#define TCGETA 0x5405 +#define TCSETA 0x5406 +#define TCSETAW 0x5407 +#define TCSETAF 0x5408 +#define TCSBRK 0x5409 +#define TCXONC 0x540A +#define TCFLSH 0x540B +#define TIOCEXCL 0x540C +#define TIOCNXCL 0x540D +#define TIOCSCTTY 0x540E +#define TIOCGPGRP 0x540F +#define TIOCSPGRP 0x5410 +#define TIOCOUTQ 0x5411 +#define TIOCSTI 0x5412 +#define TIOCGWINSZ 0x5413 +#define TIOCSWINSZ 0x5414 +#define TIOCMGET 0x5415 +#define TIOCMBIS 0x5416 +#define TIOCMBIC 0x5417 +#define TIOCMSET 0x5418 +#define TIOCGSOFTCAR 0x5419 +#define TIOCSSOFTCAR 0x541A +#define FIONREAD 0x541B +#define TIOCINQ FIONREAD +#define TIOCLINUX 0x541C +#define TIOCCONS 0x541D +#define TIOCGSERIAL 0x541E +#define TIOCSSERIAL 0x541F +#define TIOCPKT 0x5420 +#define FIONBIO 0x5421 +#define TIOCNOTTY 0x5422 +#define TIOCSETD 0x5423 +#define TIOCGETD 0x5424 +#define TCSBRKP 0x5425 /* Needed for POSIX tcsendbreak() */ +/* #define TIOCTTYGSTRUCT 0x5426 - Former debugging-only ioctl */ +#define TIOCSBRK 0x5427 /* BSD compatibility */ +#define TIOCCBRK 0x5428 /* BSD compatibility */ +#define TIOCGSID 0x5429 /* Return the session ID of FD */ +#define TCGETS2 _IOR('T',0x2A, struct termios2) +#define TCSETS2 _IOW('T',0x2B, struct termios2) +#define TCSETSW2 _IOW('T',0x2C, struct termios2) +#define TCSETSF2 _IOW('T',0x2D, struct termios2) +#define TIOCGPTN _IOR('T',0x30, unsigned int) /* Get Pty Number (of pty-mux device) */ +#define TIOCSPTLCK _IOW('T',0x31, int) /* Lock/unlock Pty */ + +#define FIONCLEX 0x5450 +#define FIOCLEX 0x5451 +#define FIOASYNC 0x5452 +#define TIOCSERCONFIG 0x5453 +#define TIOCSERGWILD 0x5454 +#define TIOCSERSWILD 0x5455 +#define TIOCGLCKTRMIOS 0x5456 +#define TIOCSLCKTRMIOS 0x5457 +#define TIOCSERGSTRUCT 0x5458 /* For debugging only */ +#define TIOCSERGETLSR 0x5459 /* Get line status register */ +#define TIOCSERGETMULTI 0x545A /* Get multiport config */ +#define TIOCSERSETMULTI 0x545B /* Set multiport config */ + +#define TIOCMIWAIT 0x545C /* wait for a change on serial input line(s) */ +#define TIOCGICOUNT 0x545D /* read serial port inline interrupt counts */ +#define TIOCGHAYESESP 0x545E /* Get Hayes ESP configuration */ +#define TIOCSHAYESESP 0x545F /* Set Hayes ESP configuration */ +#define FIOQSIZE 0x5460 + +/* Used for packet mode */ +#define TIOCPKT_DATA 0 +#define TIOCPKT_FLUSHREAD 1 +#define TIOCPKT_FLUSHWRITE 2 +#define TIOCPKT_STOP 4 +#define TIOCPKT_START 8 +#define TIOCPKT_NOSTOP 16 +#define TIOCPKT_DOSTOP 32 + +#define TIOCSER_TEMT 0x01 /* Transmitter physically empty */ + #endif diff --git a/include/asm-x86/ioctls_32.h b/include/asm-x86/ioctls_32.h deleted file mode 100644 index ef5878762dc..00000000000 --- a/include/asm-x86/ioctls_32.h +++ /dev/null @@ -1,87 +0,0 @@ -#ifndef __ARCH_I386_IOCTLS_H__ -#define __ARCH_I386_IOCTLS_H__ - -#include - -/* 0x54 is just a magic number to make these relatively unique ('T') */ - -#define TCGETS 0x5401 -#define TCSETS 0x5402 /* Clashes with SNDCTL_TMR_START sound ioctl */ -#define TCSETSW 0x5403 -#define TCSETSF 0x5404 -#define TCGETA 0x5405 -#define TCSETA 0x5406 -#define TCSETAW 0x5407 -#define TCSETAF 0x5408 -#define TCSBRK 0x5409 -#define TCXONC 0x540A -#define TCFLSH 0x540B -#define TIOCEXCL 0x540C -#define TIOCNXCL 0x540D -#define TIOCSCTTY 0x540E -#define TIOCGPGRP 0x540F -#define TIOCSPGRP 0x5410 -#define TIOCOUTQ 0x5411 -#define TIOCSTI 0x5412 -#define TIOCGWINSZ 0x5413 -#define TIOCSWINSZ 0x5414 -#define TIOCMGET 0x5415 -#define TIOCMBIS 0x5416 -#define TIOCMBIC 0x5417 -#define TIOCMSET 0x5418 -#define TIOCGSOFTCAR 0x5419 -#define TIOCSSOFTCAR 0x541A -#define FIONREAD 0x541B -#define TIOCINQ FIONREAD -#define TIOCLINUX 0x541C -#define TIOCCONS 0x541D -#define TIOCGSERIAL 0x541E -#define TIOCSSERIAL 0x541F -#define TIOCPKT 0x5420 -#define FIONBIO 0x5421 -#define TIOCNOTTY 0x5422 -#define TIOCSETD 0x5423 -#define TIOCGETD 0x5424 -#define TCSBRKP 0x5425 /* Needed for POSIX tcsendbreak() */ -/* #define TIOCTTYGSTRUCT 0x5426 - Former debugging-only ioctl */ -#define TIOCSBRK 0x5427 /* BSD compatibility */ -#define TIOCCBRK 0x5428 /* BSD compatibility */ -#define TIOCGSID 0x5429 /* Return the session ID of FD */ -#define TCGETS2 _IOR('T',0x2A, struct termios2) -#define TCSETS2 _IOW('T',0x2B, struct termios2) -#define TCSETSW2 _IOW('T',0x2C, struct termios2) -#define TCSETSF2 _IOW('T',0x2D, struct termios2) -#define TIOCGPTN _IOR('T',0x30, unsigned int) /* Get Pty Number (of pty-mux device) */ -#define TIOCSPTLCK _IOW('T',0x31, int) /* Lock/unlock Pty */ - -#define FIONCLEX 0x5450 -#define FIOCLEX 0x5451 -#define FIOASYNC 0x5452 -#define TIOCSERCONFIG 0x5453 -#define TIOCSERGWILD 0x5454 -#define TIOCSERSWILD 0x5455 -#define TIOCGLCKTRMIOS 0x5456 -#define TIOCSLCKTRMIOS 0x5457 -#define TIOCSERGSTRUCT 0x5458 /* For debugging only */ -#define TIOCSERGETLSR 0x5459 /* Get line status register */ -#define TIOCSERGETMULTI 0x545A /* Get multiport config */ -#define TIOCSERSETMULTI 0x545B /* Set multiport config */ - -#define TIOCMIWAIT 0x545C /* wait for a change on serial input line(s) */ -#define TIOCGICOUNT 0x545D /* read serial port inline interrupt counts */ -#define TIOCGHAYESESP 0x545E /* Get Hayes ESP configuration */ -#define TIOCSHAYESESP 0x545F /* Set Hayes ESP configuration */ -#define FIOQSIZE 0x5460 - -/* Used for packet mode */ -#define TIOCPKT_DATA 0 -#define TIOCPKT_FLUSHREAD 1 -#define TIOCPKT_FLUSHWRITE 2 -#define TIOCPKT_STOP 4 -#define TIOCPKT_START 8 -#define TIOCPKT_NOSTOP 16 -#define TIOCPKT_DOSTOP 32 - -#define TIOCSER_TEMT 0x01 /* Transmitter physically empty */ - -#endif diff --git a/include/asm-x86/ioctls_64.h b/include/asm-x86/ioctls_64.h deleted file mode 100644 index 3fc0b15a0d7..00000000000 --- a/include/asm-x86/ioctls_64.h +++ /dev/null @@ -1,86 +0,0 @@ -#ifndef __ARCH_X8664_IOCTLS_H__ -#define __ARCH_X8664_IOCTLS_H__ - -#include - -/* 0x54 is just a magic number to make these relatively unique ('T') */ - -#define TCGETS 0x5401 -#define TCSETS 0x5402 -#define TCSETSW 0x5403 -#define TCSETSF 0x5404 -#define TCGETA 0x5405 -#define TCSETA 0x5406 -#define TCSETAW 0x5407 -#define TCSETAF 0x5408 -#define TCSBRK 0x5409 -#define TCXONC 0x540A -#define TCFLSH 0x540B -#define TIOCEXCL 0x540C -#define TIOCNXCL 0x540D -#define TIOCSCTTY 0x540E -#define TIOCGPGRP 0x540F -#define TIOCSPGRP 0x5410 -#define TIOCOUTQ 0x5411 -#define TIOCSTI 0x5412 -#define TIOCGWINSZ 0x5413 -#define TIOCSWINSZ 0x5414 -#define TIOCMGET 0x5415 -#define TIOCMBIS 0x5416 -#define TIOCMBIC 0x5417 -#define TIOCMSET 0x5418 -#define TIOCGSOFTCAR 0x5419 -#define TIOCSSOFTCAR 0x541A -#define FIONREAD 0x541B -#define TIOCINQ FIONREAD -#define TIOCLINUX 0x541C -#define TIOCCONS 0x541D -#define TIOCGSERIAL 0x541E -#define TIOCSSERIAL 0x541F -#define TIOCPKT 0x5420 -#define FIONBIO 0x5421 -#define TIOCNOTTY 0x5422 -#define TIOCSETD 0x5423 -#define TIOCGETD 0x5424 -#define TCSBRKP 0x5425 /* Needed for POSIX tcsendbreak() */ -#define TIOCSBRK 0x5427 /* BSD compatibility */ -#define TIOCCBRK 0x5428 /* BSD compatibility */ -#define TIOCGSID 0x5429 /* Return the session ID of FD */ -#define TCGETS2 _IOR('T',0x2A, struct termios2) -#define TCSETS2 _IOW('T',0x2B, struct termios2) -#define TCSETSW2 _IOW('T',0x2C, struct termios2) -#define TCSETSF2 _IOW('T',0x2D, struct termios2) -#define TIOCGPTN _IOR('T',0x30, unsigned int) /* Get Pty Number (of pty-mux device) */ -#define TIOCSPTLCK _IOW('T',0x31, int) /* Lock/unlock Pty */ - -#define FIONCLEX 0x5450 /* these numbers need to be adjusted. */ -#define FIOCLEX 0x5451 -#define FIOASYNC 0x5452 -#define TIOCSERCONFIG 0x5453 -#define TIOCSERGWILD 0x5454 -#define TIOCSERSWILD 0x5455 -#define TIOCGLCKTRMIOS 0x5456 -#define TIOCSLCKTRMIOS 0x5457 -#define TIOCSERGSTRUCT 0x5458 /* For debugging only */ -#define TIOCSERGETLSR 0x5459 /* Get line status register */ -#define TIOCSERGETMULTI 0x545A /* Get multiport config */ -#define TIOCSERSETMULTI 0x545B /* Set multiport config */ - -#define TIOCMIWAIT 0x545C /* wait for a change on serial input line(s) */ -#define TIOCGICOUNT 0x545D /* read serial port inline interrupt counts */ -#define TIOCGHAYESESP 0x545E /* Get Hayes ESP configuration */ -#define TIOCSHAYESESP 0x545F /* Set Hayes ESP configuration */ -#define FIOQSIZE 0x5460 - -/* Used for packet mode */ -#define TIOCPKT_DATA 0 -#define TIOCPKT_FLUSHREAD 1 -#define TIOCPKT_FLUSHWRITE 2 -#define TIOCPKT_STOP 4 -#define TIOCPKT_START 8 -#define TIOCPKT_NOSTOP 16 -#define TIOCPKT_DOSTOP 32 - -#define TIOCSER_TEMT 0x01 /* Transmitter physically empty */ - -#endif -- cgit v1.2.3 From 35cc46119d256364f179d7b3554f06ba468af3f7 Mon Sep 17 00:00:00 2001 From: Thomas Gleixner Date: Mon, 15 Oct 2007 23:28:20 +0200 Subject: x86: unify include/asm/kdebug_32/64.h The 64 bit variant has additional function prototypes which do no harm for 32 bit. Signed-off-by: Thomas Gleixner --- include/asm-x86/kdebug.h | 36 ++++++++++++++++++++++++++++++++---- include/asm-x86/kdebug_32.h | 27 --------------------------- include/asm-x86/kdebug_64.h | 32 -------------------------------- 3 files changed, 32 insertions(+), 63 deletions(-) delete mode 100644 include/asm-x86/kdebug_32.h delete mode 100644 include/asm-x86/kdebug_64.h diff --git a/include/asm-x86/kdebug.h b/include/asm-x86/kdebug.h index 38479106c25..e2f9b62e535 100644 --- a/include/asm-x86/kdebug.h +++ b/include/asm-x86/kdebug.h @@ -1,5 +1,33 @@ -#ifdef CONFIG_X86_32 -# include "kdebug_32.h" -#else -# include "kdebug_64.h" +#ifndef _ASM_X86_KDEBUG_H +#define _ASM_X86_KDEBUG_H + +#include + +struct pt_regs; + +/* Grossly misnamed. */ +enum die_val { + DIE_OOPS = 1, + DIE_INT3, + DIE_DEBUG, + DIE_PANIC, + DIE_NMI, + DIE_DIE, + DIE_NMIWATCHDOG, + DIE_KERNELDEBUG, + DIE_TRAP, + DIE_GPF, + DIE_CALL, + DIE_NMI_IPI, + DIE_PAGE_FAULT, +}; + +extern void printk_address(unsigned long address); +extern void die(const char *,struct pt_regs *,long); +extern void __die(const char *,struct pt_regs *,long); +extern void show_registers(struct pt_regs *regs); +extern void dump_pagetable(unsigned long); +extern unsigned long oops_begin(void); +extern void oops_end(unsigned long); + #endif diff --git a/include/asm-x86/kdebug_32.h b/include/asm-x86/kdebug_32.h deleted file mode 100644 index 181d437eef4..00000000000 --- a/include/asm-x86/kdebug_32.h +++ /dev/null @@ -1,27 +0,0 @@ -#ifndef _I386_KDEBUG_H -#define _I386_KDEBUG_H 1 - -/* - * Aug-05 2004 Ported by Prasanna S Panchamukhi - * from x86_64 architecture. - */ - -struct pt_regs; - -/* Grossly misnamed. */ -enum die_val { - DIE_OOPS = 1, - DIE_INT3, - DIE_DEBUG, - DIE_PANIC, - DIE_NMI, - DIE_DIE, - DIE_NMIWATCHDOG, - DIE_KERNELDEBUG, - DIE_TRAP, - DIE_GPF, - DIE_CALL, - DIE_NMI_IPI, -}; - -#endif diff --git a/include/asm-x86/kdebug_64.h b/include/asm-x86/kdebug_64.h deleted file mode 100644 index df413e05375..00000000000 --- a/include/asm-x86/kdebug_64.h +++ /dev/null @@ -1,32 +0,0 @@ -#ifndef _X86_64_KDEBUG_H -#define _X86_64_KDEBUG_H 1 - -#include - -struct pt_regs; - -/* Grossly misnamed. */ -enum die_val { - DIE_OOPS = 1, - DIE_INT3, - DIE_DEBUG, - DIE_PANIC, - DIE_NMI, - DIE_DIE, - DIE_NMIWATCHDOG, - DIE_KERNELDEBUG, - DIE_TRAP, - DIE_GPF, - DIE_CALL, - DIE_NMI_IPI, -}; - -extern void printk_address(unsigned long address); -extern void die(const char *,struct pt_regs *,long); -extern void __die(const char *,struct pt_regs *,long); -extern void show_registers(struct pt_regs *regs); -extern void dump_pagetable(unsigned long); -extern unsigned long oops_begin(void); -extern void oops_end(unsigned long); - -#endif -- cgit v1.2.3 From c4ac82a8818c6decd0fa57cdb55d4225f43d923a Mon Sep 17 00:00:00 2001 From: Thomas Gleixner Date: Mon, 15 Oct 2007 23:28:20 +0200 Subject: x86: unify include/asm/agp_32/64.h The 32bit D(n) debug addon can be made exclusive for 32 bit compiles. Otherwise all the same. Signed-off-by: Thomas Gleixner --- include/asm-x86/kmap_types.h | 30 +++++++++++++++++++++++++++--- include/asm-x86/kmap_types_32.h | 30 ------------------------------ include/asm-x86/kmap_types_64.h | 19 ------------------- 3 files changed, 27 insertions(+), 52 deletions(-) delete mode 100644 include/asm-x86/kmap_types_32.h delete mode 100644 include/asm-x86/kmap_types_64.h diff --git a/include/asm-x86/kmap_types.h b/include/asm-x86/kmap_types.h index e4ec724b298..5f4174132a2 100644 --- a/include/asm-x86/kmap_types.h +++ b/include/asm-x86/kmap_types.h @@ -1,5 +1,29 @@ -#ifdef CONFIG_X86_32 -# include "kmap_types_32.h" +#ifndef _ASM_X86_KMAP_TYPES_H +#define _ASM_X86_KMAP_TYPES_H + +#if defined(CONFIG_X86_32) && defined(CONFIG_DEBUG_HIGHMEM) +# define D(n) __KM_FENCE_##n , #else -# include "kmap_types_64.h" +# define D(n) +#endif + +enum km_type { +D(0) KM_BOUNCE_READ, +D(1) KM_SKB_SUNRPC_DATA, +D(2) KM_SKB_DATA_SOFTIRQ, +D(3) KM_USER0, +D(4) KM_USER1, +D(5) KM_BIO_SRC_IRQ, +D(6) KM_BIO_DST_IRQ, +D(7) KM_PTE0, +D(8) KM_PTE1, +D(9) KM_IRQ0, +D(10) KM_IRQ1, +D(11) KM_SOFTIRQ0, +D(12) KM_SOFTIRQ1, +D(13) KM_TYPE_NR +}; + +#undef D + #endif diff --git a/include/asm-x86/kmap_types_32.h b/include/asm-x86/kmap_types_32.h deleted file mode 100644 index 806aae3c533..00000000000 --- a/include/asm-x86/kmap_types_32.h +++ /dev/null @@ -1,30 +0,0 @@ -#ifndef _ASM_KMAP_TYPES_H -#define _ASM_KMAP_TYPES_H - - -#ifdef CONFIG_DEBUG_HIGHMEM -# define D(n) __KM_FENCE_##n , -#else -# define D(n) -#endif - -enum km_type { -D(0) KM_BOUNCE_READ, -D(1) KM_SKB_SUNRPC_DATA, -D(2) KM_SKB_DATA_SOFTIRQ, -D(3) KM_USER0, -D(4) KM_USER1, -D(5) KM_BIO_SRC_IRQ, -D(6) KM_BIO_DST_IRQ, -D(7) KM_PTE0, -D(8) KM_PTE1, -D(9) KM_IRQ0, -D(10) KM_IRQ1, -D(11) KM_SOFTIRQ0, -D(12) KM_SOFTIRQ1, -D(13) KM_TYPE_NR -}; - -#undef D - -#endif diff --git a/include/asm-x86/kmap_types_64.h b/include/asm-x86/kmap_types_64.h deleted file mode 100644 index 7486338c6ce..00000000000 --- a/include/asm-x86/kmap_types_64.h +++ /dev/null @@ -1,19 +0,0 @@ -#ifndef _ASM_KMAP_TYPES_H -#define _ASM_KMAP_TYPES_H - -enum km_type { - KM_BOUNCE_READ, - KM_SKB_SUNRPC_DATA, - KM_SKB_DATA_SOFTIRQ, - KM_USER0, - KM_USER1, - KM_BIO_SRC_IRQ, - KM_BIO_DST_IRQ, - KM_IRQ0, - KM_IRQ1, - KM_SOFTIRQ0, - KM_SOFTIRQ1, - KM_TYPE_NR -}; - -#endif -- cgit v1.2.3 From 5c8eec501968cf9b608bba22748d7ca1a91dadf1 Mon Sep 17 00:00:00 2001 From: Thomas Gleixner Date: Mon, 15 Oct 2007 23:28:21 +0200 Subject: x86: unify include/asm/mman_32/64.h Same file, except for the extra 64bit MAP_32BIT define, which does not hurt for 32 bit compiles. Signed-off-by: Thomas Gleixner --- include/asm-x86/Kbuild | 2 -- include/asm-x86/mman.h | 32 +++++++++++++++++++------------- include/asm-x86/mman_32.h | 17 ----------------- include/asm-x86/mman_64.h | 19 ------------------- 4 files changed, 19 insertions(+), 51 deletions(-) delete mode 100644 include/asm-x86/mman_32.h delete mode 100644 include/asm-x86/mman_64.h diff --git a/include/asm-x86/Kbuild b/include/asm-x86/Kbuild index a617f752ea6..966a1176a7c 100644 --- a/include/asm-x86/Kbuild +++ b/include/asm-x86/Kbuild @@ -19,8 +19,6 @@ unifdef-y += byteorder_64.h unifdef-y += elf_32.h unifdef-y += elf_64.h unifdef-y += mce.h -unifdef-y += mman_32.h -unifdef-y += mman_64.h unifdef-y += msgbuf_32.h unifdef-y += msgbuf_64.h unifdef-y += msr_32.h diff --git a/include/asm-x86/mman.h b/include/asm-x86/mman.h index 322db07e82c..c1682b542da 100644 --- a/include/asm-x86/mman.h +++ b/include/asm-x86/mman.h @@ -1,13 +1,19 @@ -#ifdef __KERNEL__ -# ifdef CONFIG_X86_32 -# include "mman_32.h" -# else -# include "mman_64.h" -# endif -#else -# ifdef __i386__ -# include "mman_32.h" -# else -# include "mman_64.h" -# endif -#endif +#ifndef _ASM_X86_MMAN_H +#define _ASM_X86_MMAN_H + +#include + +#define MAP_32BIT 0x40 /* only give out 32bit addresses */ + +#define MAP_GROWSDOWN 0x0100 /* stack-like segment */ +#define MAP_DENYWRITE 0x0800 /* ETXTBSY */ +#define MAP_EXECUTABLE 0x1000 /* mark it as an executable */ +#define MAP_LOCKED 0x2000 /* pages are locked */ +#define MAP_NORESERVE 0x4000 /* don't check for reservations */ +#define MAP_POPULATE 0x8000 /* populate (prefault) pagetables */ +#define MAP_NONBLOCK 0x10000 /* do not block on IO */ + +#define MCL_CURRENT 1 /* lock all current mappings */ +#define MCL_FUTURE 2 /* lock all future mappings */ + +#endif /* _ASM_X86_MMAN_H */ diff --git a/include/asm-x86/mman_32.h b/include/asm-x86/mman_32.h deleted file mode 100644 index 8fd9d7ab7fa..00000000000 --- a/include/asm-x86/mman_32.h +++ /dev/null @@ -1,17 +0,0 @@ -#ifndef __I386_MMAN_H__ -#define __I386_MMAN_H__ - -#include - -#define MAP_GROWSDOWN 0x0100 /* stack-like segment */ -#define MAP_DENYWRITE 0x0800 /* ETXTBSY */ -#define MAP_EXECUTABLE 0x1000 /* mark it as an executable */ -#define MAP_LOCKED 0x2000 /* pages are locked */ -#define MAP_NORESERVE 0x4000 /* don't check for reservations */ -#define MAP_POPULATE 0x8000 /* populate (prefault) pagetables */ -#define MAP_NONBLOCK 0x10000 /* do not block on IO */ - -#define MCL_CURRENT 1 /* lock all current mappings */ -#define MCL_FUTURE 2 /* lock all future mappings */ - -#endif /* __I386_MMAN_H__ */ diff --git a/include/asm-x86/mman_64.h b/include/asm-x86/mman_64.h deleted file mode 100644 index dd5cb0534d3..00000000000 --- a/include/asm-x86/mman_64.h +++ /dev/null @@ -1,19 +0,0 @@ -#ifndef __X8664_MMAN_H__ -#define __X8664_MMAN_H__ - -#include - -#define MAP_32BIT 0x40 /* only give out 32bit addresses */ - -#define MAP_GROWSDOWN 0x0100 /* stack-like segment */ -#define MAP_DENYWRITE 0x0800 /* ETXTBSY */ -#define MAP_EXECUTABLE 0x1000 /* mark it as an executable */ -#define MAP_LOCKED 0x2000 /* pages are locked */ -#define MAP_NORESERVE 0x4000 /* don't check for reservations */ -#define MAP_POPULATE 0x8000 /* populate (prefault) pagetables */ -#define MAP_NONBLOCK 0x10000 /* do not block on IO */ - -#define MCL_CURRENT 1 /* lock all current mappings */ -#define MCL_FUTURE 2 /* lock all future mappings */ - -#endif -- cgit v1.2.3 From 68fdc55c48fd2e8f4938a1e815216c25baf8a17e Mon Sep 17 00:00:00 2001 From: Thomas Gleixner Date: Wed, 17 Oct 2007 17:19:30 +0200 Subject: x86: unify include/asm/bug_32/64.h Same file, except for whitespace, comment formatting and the .long/.quad delta which can be solved by a define. Signed-off-by: Thomas Gleixner --- include/asm-x86/bug.h | 41 +++++++++++++++++++++++++++++++++++++++-- include/asm-x86/bug_32.h | 37 ------------------------------------- include/asm-x86/bug_64.h | 34 ---------------------------------- 3 files changed, 39 insertions(+), 73 deletions(-) delete mode 100644 include/asm-x86/bug_32.h delete mode 100644 include/asm-x86/bug_64.h diff --git a/include/asm-x86/bug.h b/include/asm-x86/bug.h index c655d7f3a5e..fd8bdc639c4 100644 --- a/include/asm-x86/bug.h +++ b/include/asm-x86/bug.h @@ -1,5 +1,42 @@ +#ifndef _ASM_X86_BUG_H +#define _ASM_X86_BUG_H + +#ifdef CONFIG_BUG +#define HAVE_ARCH_BUG + +#ifdef CONFIG_DEBUG_BUGVERBOSE + #ifdef CONFIG_X86_32 -# include "bug_32.h" +# define __BUG_C0 "2:\t.long 1b, %c0\n" #else -# include "bug_64.h" +# define __BUG_C0 "2:\t.quad 1b, %c0\n" +#endif + +#define BUG() \ + do { \ + asm volatile("1:\tud2\n" \ + ".pushsection __bug_table,\"a\"\n" \ + __BUG_C0 \ + "\t.word %c1, 0\n" \ + "\t.org 2b+%c2\n" \ + ".popsection" \ + : : "i" (__FILE__), "i" (__LINE__), \ + "i" (sizeof(struct bug_entry))); \ + for(;;) ; \ + } while(0) + +#else +#define BUG() \ + do { \ + asm volatile("ud2"); \ + for(;;) ; \ + } while(0) +#endif + +void out_of_line_bug(void); +#else /* CONFIG_BUG */ +static inline void out_of_line_bug(void) { } +#endif /* !CONFIG_BUG */ + +#include #endif diff --git a/include/asm-x86/bug_32.h b/include/asm-x86/bug_32.h deleted file mode 100644 index b0fd78ca261..00000000000 --- a/include/asm-x86/bug_32.h +++ /dev/null @@ -1,37 +0,0 @@ -#ifndef _I386_BUG_H -#define _I386_BUG_H - - -/* - * Tell the user there is some problem. - * The offending file and line are encoded encoded in the __bug_table section. - */ - -#ifdef CONFIG_BUG -#define HAVE_ARCH_BUG - -#ifdef CONFIG_DEBUG_BUGVERBOSE -#define BUG() \ - do { \ - asm volatile("1:\tud2\n" \ - ".pushsection __bug_table,\"a\"\n" \ - "2:\t.long 1b, %c0\n" \ - "\t.word %c1, 0\n" \ - "\t.org 2b+%c2\n" \ - ".popsection" \ - : : "i" (__FILE__), "i" (__LINE__), \ - "i" (sizeof(struct bug_entry))); \ - for(;;) ; \ - } while(0) - -#else -#define BUG() \ - do { \ - asm volatile("ud2"); \ - for(;;) ; \ - } while(0) -#endif -#endif - -#include -#endif diff --git a/include/asm-x86/bug_64.h b/include/asm-x86/bug_64.h deleted file mode 100644 index 68260641491..00000000000 --- a/include/asm-x86/bug_64.h +++ /dev/null @@ -1,34 +0,0 @@ -#ifndef __ASM_X8664_BUG_H -#define __ASM_X8664_BUG_H 1 - -#ifdef CONFIG_BUG -#define HAVE_ARCH_BUG - -#ifdef CONFIG_DEBUG_BUGVERBOSE -#define BUG() \ - do { \ - asm volatile("1:\tud2\n" \ - ".pushsection __bug_table,\"a\"\n" \ - "2:\t.quad 1b, %c0\n" \ - "\t.word %c1, 0\n" \ - "\t.org 2b+%c2\n" \ - ".popsection" \ - : : "i" (__FILE__), "i" (__LINE__), \ - "i" (sizeof(struct bug_entry))); \ - for(;;) ; \ - } while(0) -#else -#define BUG() \ - do { \ - asm volatile("ud2"); \ - for(;;) ; \ - } while(0) -#endif - -void out_of_line_bug(void); -#else -static inline void out_of_line_bug(void) { } -#endif - -#include -#endif -- cgit v1.2.3 From f16ee288545be36cdcc404e9b7c505eb0fe2633c Mon Sep 17 00:00:00 2001 From: Thomas Gleixner Date: Mon, 15 Oct 2007 23:28:21 +0200 Subject: x86: unify include/asm/siginfo_32/64.h Same file, except for the 64bit PREAMBLE_SIZE define. Signed-off-by: Thomas Gleixner --- include/asm-x86/Kbuild | 2 -- include/asm-x86/siginfo.h | 21 +++++++++------------ include/asm-x86/siginfo_32.h | 6 ------ include/asm-x86/siginfo_64.h | 8 -------- 4 files changed, 9 insertions(+), 28 deletions(-) delete mode 100644 include/asm-x86/siginfo_32.h delete mode 100644 include/asm-x86/siginfo_64.h diff --git a/include/asm-x86/Kbuild b/include/asm-x86/Kbuild index 966a1176a7c..3decf180107 100644 --- a/include/asm-x86/Kbuild +++ b/include/asm-x86/Kbuild @@ -39,8 +39,6 @@ unifdef-y += shmbuf_32.h unifdef-y += shmbuf_64.h unifdef-y += sigcontext_32.h unifdef-y += sigcontext_64.h -unifdef-y += siginfo_32.h -unifdef-y += siginfo_64.h unifdef-y += signal_32.h unifdef-y += signal_64.h unifdef-y += stat_32.h diff --git a/include/asm-x86/siginfo.h b/include/asm-x86/siginfo.h index 0b8e4bb47d2..a477bea0c2a 100644 --- a/include/asm-x86/siginfo.h +++ b/include/asm-x86/siginfo.h @@ -1,13 +1,10 @@ -#ifdef __KERNEL__ -# ifdef CONFIG_X86_32 -# include "siginfo_32.h" -# else -# include "siginfo_64.h" -# endif -#else -# ifdef __i386__ -# include "siginfo_32.h" -# else -# include "siginfo_64.h" -# endif +#ifndef _ASM_X86_SIGINFO_H +#define _ASM_X86_SIGINFO_H + +#ifdef __x86_64__ +# define __ARCH_SI_PREAMBLE_SIZE (4 * sizeof(int)) +#endif + +#include + #endif diff --git a/include/asm-x86/siginfo_32.h b/include/asm-x86/siginfo_32.h deleted file mode 100644 index fe18f98fccf..00000000000 --- a/include/asm-x86/siginfo_32.h +++ /dev/null @@ -1,6 +0,0 @@ -#ifndef _I386_SIGINFO_H -#define _I386_SIGINFO_H - -#include - -#endif diff --git a/include/asm-x86/siginfo_64.h b/include/asm-x86/siginfo_64.h deleted file mode 100644 index d09a1e6e724..00000000000 --- a/include/asm-x86/siginfo_64.h +++ /dev/null @@ -1,8 +0,0 @@ -#ifndef _X8664_SIGINFO_H -#define _X8664_SIGINFO_H - -#define __ARCH_SI_PREAMBLE_SIZE (4 * sizeof(int)) - -#include - -#endif -- cgit v1.2.3 From 01749f6d6d0aa677081d13a2685bad028b778c22 Mon Sep 17 00:00:00 2001 From: Thomas Gleixner Date: Mon, 15 Oct 2007 23:28:21 +0200 Subject: x86: unify include/asm/tlb_32/64.h Same file, except for whitespace, comment formatting. Signed-off-by: Thomas Gleixner --- include/asm-x86/tlb.h | 14 ++++++++++---- include/asm-x86/tlb_32.h | 20 -------------------- include/asm-x86/tlb_64.h | 13 ------------- 3 files changed, 10 insertions(+), 37 deletions(-) delete mode 100644 include/asm-x86/tlb_32.h delete mode 100644 include/asm-x86/tlb_64.h diff --git a/include/asm-x86/tlb.h b/include/asm-x86/tlb.h index 7d55c3762b4..e4e9e2d07a9 100644 --- a/include/asm-x86/tlb.h +++ b/include/asm-x86/tlb.h @@ -1,5 +1,11 @@ -#ifdef CONFIG_X86_32 -# include "tlb_32.h" -#else -# include "tlb_64.h" +#ifndef _ASM_X86_TLB_H +#define _ASM_X86_TLB_H + +#define tlb_start_vma(tlb, vma) do { } while (0) +#define tlb_end_vma(tlb, vma) do { } while (0) +#define __tlb_remove_tlb_entry(tlb, ptep, address) do { } while (0) +#define tlb_flush(tlb) flush_tlb_mm((tlb)->mm) + +#include + #endif diff --git a/include/asm-x86/tlb_32.h b/include/asm-x86/tlb_32.h deleted file mode 100644 index c006c5c92be..00000000000 --- a/include/asm-x86/tlb_32.h +++ /dev/null @@ -1,20 +0,0 @@ -#ifndef _I386_TLB_H -#define _I386_TLB_H - -/* - * x86 doesn't need any special per-pte or - * per-vma handling.. - */ -#define tlb_start_vma(tlb, vma) do { } while (0) -#define tlb_end_vma(tlb, vma) do { } while (0) -#define __tlb_remove_tlb_entry(tlb, ptep, address) do { } while (0) - -/* - * .. because we flush the whole mm when it - * fills up. - */ -#define tlb_flush(tlb) flush_tlb_mm((tlb)->mm) - -#include - -#endif diff --git a/include/asm-x86/tlb_64.h b/include/asm-x86/tlb_64.h deleted file mode 100644 index cd4c3c590a0..00000000000 --- a/include/asm-x86/tlb_64.h +++ /dev/null @@ -1,13 +0,0 @@ -#ifndef TLB_H -#define TLB_H 1 - - -#define tlb_start_vma(tlb, vma) do { } while (0) -#define tlb_end_vma(tlb, vma) do { } while (0) -#define __tlb_remove_tlb_entry(tlb, ptep, address) do { } while (0) - -#define tlb_flush(tlb) flush_tlb_mm((tlb)->mm) - -#include - -#endif -- cgit v1.2.3 From 9d256ff51c174d8b157d99db038a1045f37a17c8 Mon Sep 17 00:00:00 2001 From: Thomas Gleixner Date: Wed, 17 Oct 2007 20:32:07 +0200 Subject: x86: unify include/asm/types_32/64.h Mostly the same. Make the few exceptions conditional. Signed-off-by: Thomas Gleixner Conflicts: include/asm-x86/types_32.h --- include/asm-x86/Kbuild | 2 -- include/asm-x86/types.h | 77 ++++++++++++++++++++++++++++++++++++++++------ include/asm-x86/types_32.h | 64 -------------------------------------- include/asm-x86/types_64.h | 55 --------------------------------- 4 files changed, 67 insertions(+), 131 deletions(-) delete mode 100644 include/asm-x86/types_32.h delete mode 100644 include/asm-x86/types_64.h diff --git a/include/asm-x86/Kbuild b/include/asm-x86/Kbuild index 3decf180107..24bbde8c1b7 100644 --- a/include/asm-x86/Kbuild +++ b/include/asm-x86/Kbuild @@ -45,8 +45,6 @@ unifdef-y += stat_32.h unifdef-y += stat_64.h unifdef-y += statfs_32.h unifdef-y += statfs_64.h -unifdef-y += types_32.h -unifdef-y += types_64.h unifdef-y += unistd_32.h unifdef-y += unistd_64.h unifdef-y += user_32.h diff --git a/include/asm-x86/types.h b/include/asm-x86/types.h index a777a9b8397..63733f31568 100644 --- a/include/asm-x86/types.h +++ b/include/asm-x86/types.h @@ -1,13 +1,70 @@ -#ifdef __KERNEL__ -# ifdef CONFIG_X86_32 -# include "types_32.h" -# else -# include "types_64.h" +#ifndef _ASM_X86_TYPES_H +#define _ASM_X86_TYPES_H + +#ifndef __ASSEMBLY__ + +typedef unsigned short umode_t; + +/* + * __xx is ok: it doesn't pollute the POSIX namespace. Use these in the + * header files exported to user space + */ + +typedef __signed__ char __s8; +typedef unsigned char __u8; + +typedef __signed__ short __s16; +typedef unsigned short __u16; + +typedef __signed__ int __s32; +typedef unsigned int __u32; + +#ifdef __i386__ +# ifdef __GNUC__ +__extension__ typedef __signed__ long long __s64; +__extension__ typedef unsigned long long __u64; # endif #else -# ifdef __i386__ -# include "types_32.h" -# else -# include "types_64.h" -# endif +typedef __signed__ long long __s64; +typedef unsigned long long __u64; +#endif + +#endif /* __ASSEMBLY__ */ + +/* + * These aren't exported outside the kernel to avoid name space clashes + */ +#ifdef __KERNEL__ + +#ifdef CONFIG_X86_32 +# define BITS_PER_LONG 32 +#else +# define BITS_PER_LONG 64 +#endif + +#ifndef __ASSEMBLY__ + +typedef signed char s8; +typedef unsigned char u8; + +typedef signed short s16; +typedef unsigned short u16; + +typedef signed int s32; +typedef unsigned int u32; + +typedef signed long long s64; +typedef unsigned long long u64; + +typedef u64 dma64_addr_t; +#if defined(CONFIG_X86_64) || defined(CONFIG_HIGHMEM64G) +/* DMA addresses come in 32-bit and 64-bit flavours. */ +typedef u64 dma_addr_t; +#else +typedef u32 dma_addr_t; +#endif + +#endif /* __ASSEMBLY__ */ +#endif /* __KERNEL__ */ + #endif diff --git a/include/asm-x86/types_32.h b/include/asm-x86/types_32.h deleted file mode 100644 index faca1922c4c..00000000000 --- a/include/asm-x86/types_32.h +++ /dev/null @@ -1,64 +0,0 @@ -#ifndef _I386_TYPES_H -#define _I386_TYPES_H - -#ifndef __ASSEMBLY__ - -typedef unsigned short umode_t; - -/* - * __xx is ok: it doesn't pollute the POSIX namespace. Use these in the - * header files exported to user space - */ - -typedef __signed__ char __s8; -typedef unsigned char __u8; - -typedef __signed__ short __s16; -typedef unsigned short __u16; - -typedef __signed__ int __s32; -typedef unsigned int __u32; - -#if defined(__GNUC__) -__extension__ typedef __signed__ long long __s64; -__extension__ typedef unsigned long long __u64; -#endif - -#endif /* __ASSEMBLY__ */ - -/* - * These aren't exported outside the kernel to avoid name space clashes - */ -#ifdef __KERNEL__ - -#define BITS_PER_LONG 32 - -#ifndef __ASSEMBLY__ - - -typedef signed char s8; -typedef unsigned char u8; - -typedef signed short s16; -typedef unsigned short u16; - -typedef signed int s32; -typedef unsigned int u32; - -typedef signed long long s64; -typedef unsigned long long u64; - -/* DMA addresses come in generic and 64-bit flavours. */ - -#ifdef CONFIG_HIGHMEM64G -typedef u64 dma_addr_t; -#else -typedef u32 dma_addr_t; -#endif -typedef u64 dma64_addr_t; - -#endif /* __ASSEMBLY__ */ - -#endif /* __KERNEL__ */ - -#endif diff --git a/include/asm-x86/types_64.h b/include/asm-x86/types_64.h deleted file mode 100644 index 2d4491aae28..00000000000 --- a/include/asm-x86/types_64.h +++ /dev/null @@ -1,55 +0,0 @@ -#ifndef _X86_64_TYPES_H -#define _X86_64_TYPES_H - -#ifndef __ASSEMBLY__ - -typedef unsigned short umode_t; - -/* - * __xx is ok: it doesn't pollute the POSIX namespace. Use these in the - * header files exported to user space - */ - -typedef __signed__ char __s8; -typedef unsigned char __u8; - -typedef __signed__ short __s16; -typedef unsigned short __u16; - -typedef __signed__ int __s32; -typedef unsigned int __u32; - -typedef __signed__ long long __s64; -typedef unsigned long long __u64; - -#endif /* __ASSEMBLY__ */ - -/* - * These aren't exported outside the kernel to avoid name space clashes - */ -#ifdef __KERNEL__ - -#define BITS_PER_LONG 64 - -#ifndef __ASSEMBLY__ - -typedef signed char s8; -typedef unsigned char u8; - -typedef signed short s16; -typedef unsigned short u16; - -typedef signed int s32; -typedef unsigned int u32; - -typedef signed long long s64; -typedef unsigned long long u64; - -typedef u64 dma64_addr_t; -typedef u64 dma_addr_t; - -#endif /* __ASSEMBLY__ */ - -#endif /* __KERNEL__ */ - -#endif -- cgit v1.2.3 From 3f0bde835364fd503ac836ebb7d6cac7352a1f30 Mon Sep 17 00:00:00 2001 From: Thomas Gleixner Date: Mon, 15 Oct 2007 23:28:21 +0200 Subject: x86: unify include/asm/unwind_32/64.h 32bit has an extra UNW_FP define, which does not hurt. Signed-off-by: Thomas Gleixner --- include/asm-x86/unwind.h | 18 +++++++++++++----- include/asm-x86/unwind_32.h | 13 ------------- include/asm-x86/unwind_64.h | 12 ------------ 3 files changed, 13 insertions(+), 30 deletions(-) delete mode 100644 include/asm-x86/unwind_32.h delete mode 100644 include/asm-x86/unwind_64.h diff --git a/include/asm-x86/unwind.h b/include/asm-x86/unwind.h index 7e4d7ad5520..8b064bd9c55 100644 --- a/include/asm-x86/unwind.h +++ b/include/asm-x86/unwind.h @@ -1,5 +1,13 @@ -#ifdef CONFIG_X86_32 -# include "unwind_32.h" -#else -# include "unwind_64.h" -#endif +#ifndef _ASM_X86_UNWIND_H +#define _ASM_X86_UNWIND_H + +#define UNW_PC(frame) ((void)(frame), 0UL) +#define UNW_SP(frame) ((void)(frame), 0UL) +#define UNW_FP(frame) ((void)(frame), 0UL) + +static inline int arch_unw_user_mode(const void *info) +{ + return 0; +} + +#endif /* _ASM_X86_UNWIND_H */ diff --git a/include/asm-x86/unwind_32.h b/include/asm-x86/unwind_32.h deleted file mode 100644 index 43c70c3de2f..00000000000 --- a/include/asm-x86/unwind_32.h +++ /dev/null @@ -1,13 +0,0 @@ -#ifndef _ASM_I386_UNWIND_H -#define _ASM_I386_UNWIND_H - -#define UNW_PC(frame) ((void)(frame), 0) -#define UNW_SP(frame) ((void)(frame), 0) -#define UNW_FP(frame) ((void)(frame), 0) - -static inline int arch_unw_user_mode(const void *info) -{ - return 0; -} - -#endif /* _ASM_I386_UNWIND_H */ diff --git a/include/asm-x86/unwind_64.h b/include/asm-x86/unwind_64.h deleted file mode 100644 index 02710f6a456..00000000000 --- a/include/asm-x86/unwind_64.h +++ /dev/null @@ -1,12 +0,0 @@ -#ifndef _ASM_X86_64_UNWIND_H -#define _ASM_X86_64_UNWIND_H - -#define UNW_PC(frame) ((void)(frame), 0UL) -#define UNW_SP(frame) ((void)(frame), 0UL) - -static inline int arch_unw_user_mode(const void *info) -{ - return 0; -} - -#endif /* _ASM_X86_64_UNWIND_H */ -- cgit v1.2.3 From 21ebddd3efd3aff961153f1bac4793218dfaea9c Mon Sep 17 00:00:00 2001 From: Thomas Gleixner Date: Wed, 17 Oct 2007 20:35:37 +0200 Subject: x86: unify include/asm/debugreg_32/64.h Almost identical except for the extra DR_LEN_8 and the different DR_CONTROL_RESERVED defines. Signed-off-by: Thomas Gleixner Conflicts: include/asm-x86/Kbuild --- include/asm-x86/Kbuild | 2 -- include/asm-x86/debugreg.h | 79 +++++++++++++++++++++++++++++++++++++------ include/asm-x86/debugreg_32.h | 64 ----------------------------------- include/asm-x86/debugreg_64.h | 65 ----------------------------------- 4 files changed, 68 insertions(+), 142 deletions(-) delete mode 100644 include/asm-x86/debugreg_32.h delete mode 100644 include/asm-x86/debugreg_64.h diff --git a/include/asm-x86/Kbuild b/include/asm-x86/Kbuild index 24bbde8c1b7..559830ece75 100644 --- a/include/asm-x86/Kbuild +++ b/include/asm-x86/Kbuild @@ -1,8 +1,6 @@ include include/asm-generic/Kbuild.asm header-y += boot.h -header-y += debugreg_32.h -header-y += debugreg_64.h header-y += debugreg.h header-y += ldt.h header-y += msr-index.h diff --git a/include/asm-x86/debugreg.h b/include/asm-x86/debugreg.h index b6ce7e4fa00..c6344d572b0 100644 --- a/include/asm-x86/debugreg.h +++ b/include/asm-x86/debugreg.h @@ -1,13 +1,70 @@ -#ifdef __KERNEL__ -# ifdef CONFIG_X86_32 -# include "debugreg_32.h" -# else -# include "debugreg_64.h" -# endif +#ifndef _ASM_X86_DEBUGREG_H +#define _ASM_X86_DEBUGREG_H + + +/* Indicate the register numbers for a number of the specific + debug registers. Registers 0-3 contain the addresses we wish to trap on */ +#define DR_FIRSTADDR 0 /* u_debugreg[DR_FIRSTADDR] */ +#define DR_LASTADDR 3 /* u_debugreg[DR_LASTADDR] */ + +#define DR_STATUS 6 /* u_debugreg[DR_STATUS] */ +#define DR_CONTROL 7 /* u_debugreg[DR_CONTROL] */ + +/* Define a few things for the status register. We can use this to determine + which debugging register was responsible for the trap. The other bits + are either reserved or not of interest to us. */ + +#define DR_TRAP0 (0x1) /* db0 */ +#define DR_TRAP1 (0x2) /* db1 */ +#define DR_TRAP2 (0x4) /* db2 */ +#define DR_TRAP3 (0x8) /* db3 */ + +#define DR_STEP (0x4000) /* single-step */ +#define DR_SWITCH (0x8000) /* task switch */ + +/* Now define a bunch of things for manipulating the control register. + The top two bytes of the control register consist of 4 fields of 4 + bits - each field corresponds to one of the four debug registers, + and indicates what types of access we trap on, and how large the data + field is that we are looking at */ + +#define DR_CONTROL_SHIFT 16 /* Skip this many bits in ctl register */ +#define DR_CONTROL_SIZE 4 /* 4 control bits per register */ + +#define DR_RW_EXECUTE (0x0) /* Settings for the access types to trap on */ +#define DR_RW_WRITE (0x1) +#define DR_RW_READ (0x3) + +#define DR_LEN_1 (0x0) /* Settings for data length to trap on */ +#define DR_LEN_2 (0x4) +#define DR_LEN_4 (0xC) +#define DR_LEN_8 (0x8) + +/* The low byte to the control register determine which registers are + enabled. There are 4 fields of two bits. One bit is "local", meaning + that the processor will reset the bit after a task switch and the other + is global meaning that we have to explicitly reset the bit. With linux, + you can use either one, since we explicitly zero the register when we enter + kernel mode. */ + +#define DR_LOCAL_ENABLE_SHIFT 0 /* Extra shift to the local enable bit */ +#define DR_GLOBAL_ENABLE_SHIFT 1 /* Extra shift to the global enable bit */ +#define DR_ENABLE_SIZE 2 /* 2 enable bits per register */ + +#define DR_LOCAL_ENABLE_MASK (0x55) /* Set local bits for all 4 regs */ +#define DR_GLOBAL_ENABLE_MASK (0xAA) /* Set global bits for all 4 regs */ + +/* The second byte to the control register has a few special things. + We can slow the instruction pipeline for instructions coming via the + gdt or the ldt if we want to. I am not sure why this is an advantage */ + +#ifdef __i386__ +#define DR_CONTROL_RESERVED (0xFC00) /* Reserved by Intel */ #else -# ifdef __i386__ -# include "debugreg_32.h" -# else -# include "debugreg_64.h" -# endif +#define DR_CONTROL_RESERVED (0xFFFFFFFF0000FC00UL) /* Reserved */ +#endif + +#define DR_LOCAL_SLOWDOWN (0x100) /* Local slow the pipeline */ +#define DR_GLOBAL_SLOWDOWN (0x200) /* Global slow the pipeline */ + #endif diff --git a/include/asm-x86/debugreg_32.h b/include/asm-x86/debugreg_32.h deleted file mode 100644 index f0b2b06ae0f..00000000000 --- a/include/asm-x86/debugreg_32.h +++ /dev/null @@ -1,64 +0,0 @@ -#ifndef _I386_DEBUGREG_H -#define _I386_DEBUGREG_H - - -/* Indicate the register numbers for a number of the specific - debug registers. Registers 0-3 contain the addresses we wish to trap on */ -#define DR_FIRSTADDR 0 /* u_debugreg[DR_FIRSTADDR] */ -#define DR_LASTADDR 3 /* u_debugreg[DR_LASTADDR] */ - -#define DR_STATUS 6 /* u_debugreg[DR_STATUS] */ -#define DR_CONTROL 7 /* u_debugreg[DR_CONTROL] */ - -/* Define a few things for the status register. We can use this to determine - which debugging register was responsible for the trap. The other bits - are either reserved or not of interest to us. */ - -#define DR_TRAP0 (0x1) /* db0 */ -#define DR_TRAP1 (0x2) /* db1 */ -#define DR_TRAP2 (0x4) /* db2 */ -#define DR_TRAP3 (0x8) /* db3 */ - -#define DR_STEP (0x4000) /* single-step */ -#define DR_SWITCH (0x8000) /* task switch */ - -/* Now define a bunch of things for manipulating the control register. - The top two bytes of the control register consist of 4 fields of 4 - bits - each field corresponds to one of the four debug registers, - and indicates what types of access we trap on, and how large the data - field is that we are looking at */ - -#define DR_CONTROL_SHIFT 16 /* Skip this many bits in ctl register */ -#define DR_CONTROL_SIZE 4 /* 4 control bits per register */ - -#define DR_RW_EXECUTE (0x0) /* Settings for the access types to trap on */ -#define DR_RW_WRITE (0x1) -#define DR_RW_READ (0x3) - -#define DR_LEN_1 (0x0) /* Settings for data length to trap on */ -#define DR_LEN_2 (0x4) -#define DR_LEN_4 (0xC) - -/* The low byte to the control register determine which registers are - enabled. There are 4 fields of two bits. One bit is "local", meaning - that the processor will reset the bit after a task switch and the other - is global meaning that we have to explicitly reset the bit. With linux, - you can use either one, since we explicitly zero the register when we enter - kernel mode. */ - -#define DR_LOCAL_ENABLE_SHIFT 0 /* Extra shift to the local enable bit */ -#define DR_GLOBAL_ENABLE_SHIFT 1 /* Extra shift to the global enable bit */ -#define DR_ENABLE_SIZE 2 /* 2 enable bits per register */ - -#define DR_LOCAL_ENABLE_MASK (0x55) /* Set local bits for all 4 regs */ -#define DR_GLOBAL_ENABLE_MASK (0xAA) /* Set global bits for all 4 regs */ - -/* The second byte to the control register has a few special things. - We can slow the instruction pipeline for instructions coming via the - gdt or the ldt if we want to. I am not sure why this is an advantage */ - -#define DR_CONTROL_RESERVED (0xFC00) /* Reserved by Intel */ -#define DR_LOCAL_SLOWDOWN (0x100) /* Local slow the pipeline */ -#define DR_GLOBAL_SLOWDOWN (0x200) /* Global slow the pipeline */ - -#endif diff --git a/include/asm-x86/debugreg_64.h b/include/asm-x86/debugreg_64.h deleted file mode 100644 index bd1aab1d8c4..00000000000 --- a/include/asm-x86/debugreg_64.h +++ /dev/null @@ -1,65 +0,0 @@ -#ifndef _X86_64_DEBUGREG_H -#define _X86_64_DEBUGREG_H - - -/* Indicate the register numbers for a number of the specific - debug registers. Registers 0-3 contain the addresses we wish to trap on */ -#define DR_FIRSTADDR 0 /* u_debugreg[DR_FIRSTADDR] */ -#define DR_LASTADDR 3 /* u_debugreg[DR_LASTADDR] */ - -#define DR_STATUS 6 /* u_debugreg[DR_STATUS] */ -#define DR_CONTROL 7 /* u_debugreg[DR_CONTROL] */ - -/* Define a few things for the status register. We can use this to determine - which debugging register was responsible for the trap. The other bits - are either reserved or not of interest to us. */ - -#define DR_TRAP0 (0x1) /* db0 */ -#define DR_TRAP1 (0x2) /* db1 */ -#define DR_TRAP2 (0x4) /* db2 */ -#define DR_TRAP3 (0x8) /* db3 */ - -#define DR_STEP (0x4000) /* single-step */ -#define DR_SWITCH (0x8000) /* task switch */ - -/* Now define a bunch of things for manipulating the control register. - The top two bytes of the control register consist of 4 fields of 4 - bits - each field corresponds to one of the four debug registers, - and indicates what types of access we trap on, and how large the data - field is that we are looking at */ - -#define DR_CONTROL_SHIFT 16 /* Skip this many bits in ctl register */ -#define DR_CONTROL_SIZE 4 /* 4 control bits per register */ - -#define DR_RW_EXECUTE (0x0) /* Settings for the access types to trap on */ -#define DR_RW_WRITE (0x1) -#define DR_RW_READ (0x3) - -#define DR_LEN_1 (0x0) /* Settings for data length to trap on */ -#define DR_LEN_2 (0x4) -#define DR_LEN_4 (0xC) -#define DR_LEN_8 (0x8) - -/* The low byte to the control register determine which registers are - enabled. There are 4 fields of two bits. One bit is "local", meaning - that the processor will reset the bit after a task switch and the other - is global meaning that we have to explicitly reset the bit. With linux, - you can use either one, since we explicitly zero the register when we enter - kernel mode. */ - -#define DR_LOCAL_ENABLE_SHIFT 0 /* Extra shift to the local enable bit */ -#define DR_GLOBAL_ENABLE_SHIFT 1 /* Extra shift to the global enable bit */ -#define DR_ENABLE_SIZE 2 /* 2 enable bits per register */ - -#define DR_LOCAL_ENABLE_MASK (0x55) /* Set local bits for all 4 regs */ -#define DR_GLOBAL_ENABLE_MASK (0xAA) /* Set global bits for all 4 regs */ - -/* The second byte to the control register has a few special things. - We can slow the instruction pipeline for instructions coming via the - gdt or the ldt if we want to. I am not sure why this is an advantage */ - -#define DR_CONTROL_RESERVED (0xFFFFFFFF0000FC00UL) /* Reserved */ -#define DR_LOCAL_SLOWDOWN (0x100) /* Local slow the pipeline */ -#define DR_GLOBAL_SLOWDOWN (0x200) /* Global slow the pipeline */ - -#endif -- cgit v1.2.3 From 9e447a7f1fd997bcb9266899e777c37469245365 Mon Sep 17 00:00:00 2001 From: "Denis V. Lunev" Date: Tue, 16 Oct 2007 11:22:21 +0400 Subject: .gitignore update for x86 arch This patch: - makes .gitignore files visible to git - makes arch/x86/kernel/vsyscall_32.lds and arch/i386/boot invisible Signed-off-by: Denis V. Lunev Signed-off-by: Thomas Gleixner --- .gitignore | 1 + arch/i386/.gitignore | 1 + arch/x86/kernel/.gitignore | 1 + 3 files changed, 3 insertions(+) create mode 100644 arch/i386/.gitignore diff --git a/.gitignore b/.gitignore index 27c3e839b54..22fb8fa9bc3 100644 --- a/.gitignore +++ b/.gitignore @@ -26,6 +26,7 @@ vmlinux* !vmlinux.lds.S System.map Module.symvers +!.gitignore # # Generated include files diff --git a/arch/i386/.gitignore b/arch/i386/.gitignore new file mode 100644 index 00000000000..36ef4c374d2 --- /dev/null +++ b/arch/i386/.gitignore @@ -0,0 +1 @@ +boot diff --git a/arch/x86/kernel/.gitignore b/arch/x86/kernel/.gitignore index 40836ad9079..4ea38a39aed 100644 --- a/arch/x86/kernel/.gitignore +++ b/arch/x86/kernel/.gitignore @@ -1 +1,2 @@ vsyscall.lds +vsyscall_32.lds -- cgit v1.2.3 From b381a14288e6e06084206601ee252f8c357e796f Mon Sep 17 00:00:00 2001 From: Sam Ravnborg Date: Wed, 17 Oct 2007 21:16:33 +0200 Subject: x86: fix kernel rebuild due to vsyscall fallout Fix rebuild of kernel when there is no changes. This happened for i386. Using make V=2 hinted that the output files were not assigned to targets - fixed by this patch. Reported by: Boaz Harrosh Signed-off-by: Sam Ravnborg Signed-off-by: Thomas Gleixner --- arch/x86/kernel/Makefile_32 | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/arch/x86/kernel/Makefile_32 b/arch/x86/kernel/Makefile_32 index 7ff02063b85..a3fa11f8f46 100644 --- a/arch/x86/kernel/Makefile_32 +++ b/arch/x86/kernel/Makefile_32 @@ -51,7 +51,7 @@ obj-$(CONFIG_SCx200) += scx200_32.o # We must build both images before we can assemble it. # Note: kbuild does not track this dependency due to usage of .incbin $(obj)/vsyscall_32.o: $(obj)/vsyscall-int80_32.so $(obj)/vsyscall-sysenter_32.so -targets += $(foreach F,int80 sysenter,vsyscall-$F.o vsyscall-$F.so) +targets += $(foreach F,int80 sysenter,vsyscall-$F_32.o vsyscall-$F_32.so) targets += vsyscall-note_32.o vsyscall_32.lds # The DSO images are built using a special linker script. -- cgit v1.2.3 From f8bea58b6a6e825662dbd8d408568883cfddef0e Mon Sep 17 00:00:00 2001 From: Yinghai Lu Date: Tue, 16 Oct 2007 00:28:06 -0700 Subject: kbuild: fix typo SRCARCH in find_sources otherwise get the two copy file list in SRCARCH for cscope: C symbol: start_kernel File Function Line 0 proto.h 11 extern void start_kernel(void ); 1 start_kernel.h 10 extern asmlinkage void __init start_kernel(void ); 2 head32.c i386_start_kernel 37 start_kernel(); 3 head32.c i386_start_kernel 37 start_kernel(); 4 head64.c x86_64_start_kernel 85 start_kernel(); 5 head64.c x86_64_start_kernel 85 start_kernel(); 6 head_32.S options 199 cmpb $0,%cl #the first CPU calls start_kernel 7 head_32.S options 199 cmpb $0,%cl #the first CPU calls start_kernel 8 enlighten.c xen_start_kernel 1145 start_kernel(); 9 enlighten.c xen_start_kernel 1145 start_kernel(); a lguest.c lguest_init 1095 start_kernel(); b main.c start_kernel 513 asmlinkage void __init start_kernel(void ) after the patch: C symbol: start_kernel File Function Line 0 proto.h 11 extern void start_kernel(void ); 1 start_kernel.h 10 extern asmlinkage void __init start_kernel(void ); 2 head32.c i386_start_kernel 37 start_kernel(); 3 head64.c x86_64_start_kernel 85 start_kernel(); 4 head_32.S options 199 cmpb $0,%cl #the first CPU calls start_kernel 5 enlighten.c xen_start_kernel 1145 start_kernel(); 6 lguest.c lguest_init 1095 start_kernel(); 7 main.c start_kernel 513 asmlinkage void __init start_kernel(void ) Signed-off-by: Yinghai Lu Signed-off-by: Thomas Gleixner --- Makefile | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/Makefile b/Makefile index ed65de7078c..529b9048d97 100644 --- a/Makefile +++ b/Makefile @@ -1325,8 +1325,8 @@ ALLSOURCE_ARCHS := $(ARCH) $(SRCARCH) endif define find-sources - ( for ARCH in $(ALLSOURCE_ARCHS) ; do \ - find $(__srctree)arch/$${SRCARCH} $(RCS_FIND_IGNORE) \ + ( for arch in $(ALLSOURCE_ARCHS) ; do \ + find $(__srctree)arch/$${arch} $(RCS_FIND_IGNORE) \ -name $1 -print; \ done ; \ find $(__srctree)security/selinux/include $(RCS_FIND_IGNORE) \ @@ -1334,8 +1334,8 @@ define find-sources find $(__srctree)include $(RCS_FIND_IGNORE) \ \( -name config -o -name 'asm-*' \) -prune \ -o -name $1 -print; \ - for ARCH in $(ALLINCLUDE_ARCHS) ; do \ - find $(__srctree)include/asm-$${SRCARCH} $(RCS_FIND_IGNORE) \ + for arch in $(ALLINCLUDE_ARCHS) ; do \ + find $(__srctree)include/asm-$${arch} $(RCS_FIND_IGNORE) \ -name $1 -print; \ done ; \ find $(__srctree)include/asm-generic $(RCS_FIND_IGNORE) \ -- cgit v1.2.3 From 88e4d250234fc9e64d6ce51df95efdcf8334fd95 Mon Sep 17 00:00:00 2001 From: Sam Ravnborg Date: Wed, 17 Oct 2007 22:06:30 +0200 Subject: x86: delete vsyscall files during make clean make clean failed to delete a few files in x86/kernel. This is because kbuild does not see the correct/full kernel/Makefile. As a workaround until the Makefiles are merged specify the files to be deleted in the common Makefile. Reported by Mike Galbraith Signed-off-by: Sam Ravnborg Cc: Mike Galbraith Signed-off-by: Thomas Gleixner --- arch/x86/kernel/Makefile | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/arch/x86/kernel/Makefile b/arch/x86/kernel/Makefile index 45855c97923..38573340b14 100644 --- a/arch/x86/kernel/Makefile +++ b/arch/x86/kernel/Makefile @@ -3,3 +3,7 @@ include ${srctree}/arch/x86/kernel/Makefile_32 else include ${srctree}/arch/x86/kernel/Makefile_64 endif + +# Workaround to delete .lds files with make clean +# The problem is that we do not enter Makefile_32 with make clean. +clean-files := vsyscall*.lds vsyscall*.so -- cgit v1.2.3