OSDN Git Service
Ingo Molnar [Fri, 21 Mar 2008 14:42:28 +0000 (15:42 +0100)]
x86: PAT fix
build fix for !CONFIG_MTRR.
Signed-off-by: Ingo Molnar <mingo@elte.hu>
Venki Pallipadi [Mon, 24 Mar 2008 21:22:35 +0000 (14:22 -0700)]
x86: PAT infrastructure patch, documentation updates
Fix double help section in PAT Kconfig. Thanks to Randy Dunlap for catching
this bug.
Signed-off-by: Venkatesh Pallipadi <venkatesh.pallipadi@intel.com>
Signed-off-by: Ingo Molnar <mingo@elte.hu>
venkatesh.pallipadi@intel.com [Wed, 19 Mar 2008 00:00:25 +0000 (17:00 -0700)]
x86: add PAT related debug prints
Adds debug prints at critical code. Adds enough info in dmesg to allow us to
do effective first round of analysis of any issues that may result due to PAT
patch series.
Signed-off-by: Venkatesh Pallipadi <venkatesh.pallipadi@intel.com>
Signed-off-by: Suresh Siddha <suresh.b.siddha@intel.com>
Signed-off-by: Ingo Molnar <mingo@elte.hu>
venkatesh.pallipadi@intel.com [Wed, 19 Mar 2008 00:00:24 +0000 (17:00 -0700)]
x86: PAT add ioremap_wc() interface
Introduce ioremap_wc for wc remap.
(generic wrapper is in a later patch)
Signed-off-by: Venkatesh Pallipadi <venkatesh.pallipadi@intel.com>
Signed-off-by: Suresh Siddha <suresh.b.siddha@intel.com>
Signed-off-by: Ingo Molnar <mingo@elte.hu>
venkatesh.pallipadi@intel.com [Wed, 19 Mar 2008 00:00:23 +0000 (17:00 -0700)]
x86: PAT add set_memory_wc() interface
Add a set_memory_wc interface(), similar to set_memory_uc interface.
Callers has to call set_memory_uc, set_memory_wb and
set_memory_wc, set_memory_wb as pairs.
Signed-off-by: Venkatesh Pallipadi <venkatesh.pallipadi@intel.com>
Signed-off-by: Suresh Siddha <suresh.b.siddha@intel.com>
Signed-off-by: Ingo Molnar <mingo@elte.hu>
venkatesh.pallipadi@intel.com [Wed, 19 Mar 2008 00:00:19 +0000 (17:00 -0700)]
x86: PAT use reserve free memtype in pci_mmap_page_range
Add reserve_memtype and free_memtype wrapper for pci_mmap_page_range. Free
is called on unmap, but identity map continues to be mapped as per
pci_mmap_page_range request, until next request for the same region calls
ioremap_change_attr(), which will go through without conflict. This way of
mapping is identical to one used in ioremap/iounmap.
Signed-off-by: Venkatesh Pallipadi <venkatesh.pallipadi@intel.com>
Signed-off-by: Suresh Siddha <suresh.b.siddha@intel.com>
Signed-off-by: Ingo Molnar <mingo@elte.hu>
venkatesh.pallipadi@intel.com [Wed, 19 Mar 2008 00:00:18 +0000 (17:00 -0700)]
x86: PAT use reserve free memtype in set_memory_uc
Use reserve_memtype and free_memtype interfaces in set_memory_uc/set_memory_wb
interfaces to avoid aliasing.
Usage model of set_memory_uc and set_memory_wb is for RAM memory and users
will first call set_memory_uc and call set_memory_wb after use to reset the
attribute.
Signed-off-by: Venkatesh Pallipadi <venkatesh.pallipadi@intel.com>
Signed-off-by: Suresh Siddha <suresh.b.siddha@intel.com>
Signed-off-by: Ingo Molnar <mingo@elte.hu>
venkatesh.pallipadi@intel.com [Wed, 19 Mar 2008 00:00:17 +0000 (17:00 -0700)]
x86: PAT use reserve free memtype in ioremap and iounmap
Use reserve_memtype and free_memtype interfaces in ioremap/iounmap to avoid
aliasing.
If there is an existing alias for the region, inherit the memory type from
the alias. If there are conflicting aliases for the entire region, then fail
ioremap.
Signed-off-by: Venkatesh Pallipadi <venkatesh.pallipadi@intel.com>
Signed-off-by: Suresh Siddha <suresh.b.siddha@intel.com>
Signed-off-by: Ingo Molnar <mingo@elte.hu>
venkatesh.pallipadi@intel.com [Wed, 19 Mar 2008 00:00:16 +0000 (17:00 -0700)]
x86: PAT make ioremap_change_attr non-static
Make ioremap_change_attr() non-static and use prot_val in place of ioremap_mode.
This interface is used in subsequent PAT patches.
Signed-off-by: Venkatesh Pallipadi <venkatesh.pallipadi@intel.com>
Signed-off-by: Suresh Siddha <suresh.b.siddha@intel.com>
Signed-off-by: Ingo Molnar <mingo@elte.hu>
Ingo Molnar [Wed, 26 Mar 2008 05:19:45 +0000 (06:19 +0100)]
x86: revert ucminus change
Signed-off-by: Ingo Molnar <mingo@elte.hu>
venkatesh.pallipadi@intel.com [Wed, 19 Mar 2008 00:00:14 +0000 (17:00 -0700)]
x86: PAT infrastructure patch
Sets up pat_init() infrastructure.
PAT MSR has following setting.
PAT
|PCD
||PWT
|||
000 WB _PAGE_CACHE_WB
001 WC _PAGE_CACHE_WC
010 UC- _PAGE_CACHE_UC_MINUS
011 UC _PAGE_CACHE_UC
We are effectively changing WT from boot time setting to WC.
UC_MINUS is used to provide backward compatibility to existing /dev/mem
users(X).
reserve_memtype and free_memtype are new interfaces for maintaining alias-free
mapping. It is currently implemented in a simple way with a linked list and
not optimized. reserve and free tracks the effective memory type, as a result
of PAT and MTRR setting rather than what is actually requested in PAT.
pat_init piggy backs on mtrr_init as the rules for setting both pat and mtrr
are same.
Signed-off-by: Venkatesh Pallipadi <venkatesh.pallipadi@intel.com>
Signed-off-by: Suresh Siddha <suresh.b.siddha@intel.com>
Signed-off-by: Ingo Molnar <mingo@elte.hu>
venkatesh.pallipadi@intel.com [Wed, 19 Mar 2008 00:00:13 +0000 (17:00 -0700)]
x86: PAT documentation
Documentation about PAT related interfaces, intended usage and memory attribute
relationship.
Signed-off-by: Venkatesh Pallipadi <venkatesh.pallipadi@intel.com>
Signed-off-by: Suresh Siddha <suresh.b.siddha@intel.com>
Signed-off-by: Ingo Molnar <mingo@elte.hu>
Pavel Machek [Thu, 13 Mar 2008 10:03:58 +0000 (11:03 +0100)]
x86: clean up aperture_64.c
Initializing to zero is generally bad idea, I hope it is right for
__init data, too.
Signed-off-by: Pavel Machek <pavel@suse.cz>
Signed-off-by: Ingo Molnar <mingo@elte.hu>
Yinghai Lu [Fri, 21 Mar 2008 06:57:21 +0000 (23:57 -0700)]
x86: allocate e820 resource struct all together
don't need to allocate that one by one
Signed-off-by: Yinghai Lu <yhlu.kernel@gmail.com>
Signed-off-by: Ingo Molnar <mingo@elte.hu>
Yinghai Lu [Fri, 21 Mar 2008 06:58:33 +0000 (23:58 -0700)]
x86: early memtest to find bad ram
do simple memtest after init_memory_mapping
use find_e820_area_size to find all ram range that is not reserved.
and do some simple bits test to find some bad ram.
if find some bad ram, use reserve_early to exclude that range.
Signed-off-by: Yinghai Lu <yhlu.kernel@gmail.com>
Signed-off-by: Ingo Molnar <mingo@elte.hu>
Cyrill Gorcunov [Thu, 13 Mar 2008 16:44:56 +0000 (19:44 +0300)]
x86: processor.h - use PAGE_SIZE instead of numeric value
This patch replaces numeric constant with an appropriate macro
Also 0x800000000000UL is changed to bit shifting which is complement
to the code comment (thanks hpa for notice)
Signed-off-by: Cyrill Gorcunov <gorcunov@gmail.com>
Signed-off-by: Ingo Molnar <mingo@elte.hu>
Robert P. J. Day [Fri, 14 Mar 2008 01:47:32 +0000 (21:47 -0400)]
x86: Explicitly include required header files.
After an experimental cleanup of <linux/percpu.h>, these files were
exposed as invoking kmalloc() without including <linux/slab.h>.
Signed-off-by: Robert P. J. Day <rpjday@crashcourse.ca>
Signed-off-by: Ingo Molnar <mingo@elte.hu>
Jan Beulich [Fri, 14 Mar 2008 07:56:32 +0000 (07:56 +0000)]
x86: simplify sync_test_bit()
There really is no need for a redundant implementation here, just keep
the alternative name for allowing consumers to use consistent naming.
Signed-off-by: Jan Beulich <jbeulich@novell.com>
Signed-off-by: Ingo Molnar <mingo@elte.hu>
Yakov Lerner [Sun, 16 Mar 2008 08:21:21 +0000 (03:21 -0500)]
x86, kprobes: correct post-eip value in post_hander()
I was trying to get the address of instruction to be executed
next after the kprobed instruction. But regs->eip in post_handler()
contains value which is useless to the user. It's pre-corrected value.
This value is difficult to use without access to resume_execution(), which
is not exported anyway.
I moved the invocation of post_handler() to *after* resume_execution().
Now regs->eip contains meaningful value in post_handler().
I do not think this change breaks any backward-compatibility.
To make meaning of the old value, post_handler() would need access to
resume_execution() which is not exported. I have difficulty to believe
that previous, uncorrected, regs->eip can be meaningfully used in
post_handler().
Signed-off-by: Yakov Lerner <iler.ml@gmail.com>
Acked-by: Ananth N Mavinakayanahalli <ananth@in.ibm.com>
Acked-by: Masami Hiramatsu <mhiramat@redhat.com>
Signed-off-by: Ingo Molnar <mingo@elte.hu>
Roland McGrath [Mon, 17 Mar 2008 09:21:08 +0000 (02:21 -0700)]
x86: handle_vm86_trap cleanup
Use force_sig in handle_vm86_trap like other machine traps do.
Signed-off-by: Roland McGrath <roland@redhat.com>
Signed-off-by: Ingo Molnar <mingo@elte.hu>
Roland McGrath [Mon, 17 Mar 2008 05:00:05 +0000 (22:00 -0700)]
x86: sys32_execve PT_DTRACE
The PT_DTRACE flag is meaningless and obsolete.
Don't touch it.
Signed-off-by: Roland McGrath <roland@redhat.com>
Signed-off-by: Ingo Molnar <mingo@elte.hu>
Roland McGrath [Wed, 19 Mar 2008 01:23:50 +0000 (18:23 -0700)]
x86: ia32 ptrace vs -ENOSYS sysenter/syscall
The previous "x86_64 ia32 ptrace vs -ENOSYS" fix only covered
the int $0x80 system call entries. This does the same fix
for the sysenter and syscall instruction paths.
Signed-off-by: Roland McGrath <roland@redhat.com>
Signed-off-by: Ingo Molnar <mingo@elte.hu>
Roland McGrath [Mon, 17 Mar 2008 04:59:11 +0000 (21:59 -0700)]
x86: ptrace vs -ENOSYS
When we're stopped at syscall entry tracing, ptrace can change the %rax
value from -ENOSYS to something else. If no system call is actually made
because the syscall number (now in orig_rax) is bad, then we now always
reset %rax to -ENOSYS again.
This changes it to leave the return value alone after entry tracing.
That way, the %rax value set by ptrace is there to be seen in user mode
(or in syscall exit tracing). This is consistent with what the 32-bit
kernel does.
Signed-off-by: Roland McGrath <roland@redhat.com>
Signed-off-by: Ingo Molnar <mingo@elte.hu>
Roland McGrath [Mon, 17 Mar 2008 04:57:41 +0000 (21:57 -0700)]
x86: ia32 ptrace vs -ENOSYS
When we're stopped at syscall entry tracing, ptrace can change the %eax
value from -ENOSYS to something else. If no system call is actually made
because the syscall number (now in orig_eax) is bad, then the %eax value
set by ptrace should be returned to the user. But, instead it gets reset
to -ENOSYS again. This is a regression from the native 32-bit kernel.
This change fixes it by leaving the return value alone after entry tracing.
Signed-off-by: Roland McGrath <roland@redhat.com>
Signed-off-by: Ingo Molnar <mingo@elte.hu>
Adrian Bunk [Mon, 17 Mar 2008 20:29:32 +0000 (22:29 +0200)]
x86: remove the write-only timer_uses_ioapic_pin_0
This patch removes the write-only timer_uses_ioapic_pin_0
(gsi can't be <= 15 in the line of it's fake usage in mpparse_32.c).
Spotted by the GNU C compiler.
Signed-off-by: Adrian Bunk <bunk@kernel.org>
Signed-off-by: Ingo Molnar <mingo@elte.hu>
Ingo Molnar [Fri, 21 Mar 2008 08:55:06 +0000 (09:55 +0100)]
x86: vsmp fix x86 vsmp fix is vsmp box cleanup
code got a bit smaller:
arch/x86/kernel/vsmp_64.o:
text data bss dec hex filename
205 4 0 209 d1 vsmp_64.o.before
181 4 0 185 b9 vsmp_64.o.after
Signed-off-by: Ingo Molnar <mingo@elte.hu>
Ravikiran G Thirumalai [Thu, 20 Mar 2008 07:45:08 +0000 (00:45 -0700)]
x86: apic_is_clustered_box to indicate unsynched TSC's on multiboard vSMP systems
Indicate TSCs are unreliable as time sources if the platform is
a multi chassi ScaleMP vSMPowered machine.
Signed-off-by: Ravikiran Thirumalai <kiran@scalex86.org>
Signed-off-by: Ingo Molnar <mingo@elte.hu>
Ravikiran G Thirumalai [Thu, 20 Mar 2008 07:43:16 +0000 (00:43 -0700)]
x86: vSMP: use pvops only if platform has the capability to support it
Re-arrange set_vsmp_pv_ops so that pv_ops are set only if
the platform has capability to support paravirtualized irq ops
Signed-off-by: Ravikiran Thirumalai <kiran@scalex86.org>
Signed-off-by: Ingo Molnar <mingo@elte.hu>
Ravikiran G Thirumalai [Thu, 20 Mar 2008 07:41:16 +0000 (00:41 -0700)]
x86: fix build breakage when PCI is define and PARAVIRT is not
- Fix the the build breakage when PARAVIRT is defined
but PCI is not
This fixes problem reported at:
http://marc.info/?l=linux-kernel&m=
120525966600698&w=2
- Make is_vsmp_box() available even when PARAVIRT is not defined.
This is needed to determine if tsc's are reliable as a time source
even when PARAVIRT is not defined.
- split vsmp_init to use is_vsmp_box() and set_vsmp_pv_ops()
set_vsmp_pv_ops will do nothing if PCI is not enabled in the config.
Signed-off-by: Ravikiran Thirumalai <kiran@scalex86.org>
Signed-off-by: Ingo Molnar <mingo@elte.hu>
Ravikiran G Thirumalai [Thu, 20 Mar 2008 07:39:02 +0000 (00:39 -0700)]
x86: vSMP: Fix is_vsmp_box()
is_vsmp_box() currently does not work on vSMPowered systems, as pci cfg
space is not read correctly -- This patch fixes it.
Signed-off-by: Ravikiran Thirumalai <kiran@scalex86.org>
Signed-off-by: Ingo Molnar <mingo@elte.hu>
Alexey Starikovskiy [Mon, 17 Mar 2008 19:08:55 +0000 (22:08 +0300)]
x86: make struct mpc_config_translation NUMAQ-only
Signed-off-by: Alexey Starikovskiy <astarikovskiy@suse.de>
Signed-off-by: Ingo Molnar <mingo@elte.hu>
Alexey Starikovskiy [Mon, 17 Mar 2008 19:08:48 +0000 (22:08 +0300)]
x86: remove mpc_oem_bus_info()
Signed-off-by: Alexey Starikovskiy <astarikovskiy@suse.de>
Signed-off-by: Ingo Molnar <mingo@elte.hu>
Alexey Starikovskiy [Mon, 17 Mar 2008 19:08:42 +0000 (22:08 +0300)]
x86: remove mpc_oem_pci_bus()
Signed-off-by: Alexey Starikovskiy <astarikovskiy@suse.de>
Signed-off-by: Ingo Molnar <mingo@elte.hu>
Alexey Starikovskiy [Mon, 17 Mar 2008 19:08:36 +0000 (22:08 +0300)]
x86: remove mpc_apic_id()
Signed-off-by: Alexey Starikovskiy <astarikovskiy@suse.de>
Signed-off-by: Ingo Molnar <mingo@elte.hu>
Alexey Starikovskiy [Mon, 17 Mar 2008 19:08:30 +0000 (22:08 +0300)]
x86: rename gsi_start to gsi_base to match mpparse_32.c
Signed-off-by: Alexey Starikovskiy <astarikovskiy@suse.de>
Signed-off-by: Ingo Molnar <mingo@elte.hu>
Alexey Starikovskiy [Mon, 17 Mar 2008 19:08:24 +0000 (22:08 +0300)]
x86: limit scan to 1k of EBDA.
Signed-off-by: Alexey Starikovskiy <astarikovskiy@suse.de>
Signed-off-by: Ingo Molnar <mingo@elte.hu>
Alexey Starikovskiy [Mon, 17 Mar 2008 19:08:17 +0000 (22:08 +0300)]
x86: use get_bios_ebda in mpparse_64.c
Signed-off-by: Alexey Starikovskiy <astarikovskiy@suse.de>
Signed-off-by: Ingo Molnar <mingo@elte.hu>
Alexey Starikovskiy [Mon, 17 Mar 2008 19:08:11 +0000 (22:08 +0300)]
x86: add uniq_ioapic_id to mpparse_32.c
Signed-off-by: Alexey Starikovskiy <astarikovskiy@suse.de>
Signed-off-by: Ingo Molnar <mingo@elte.hu>
Alexey Starikovskiy [Mon, 17 Mar 2008 19:08:05 +0000 (22:08 +0300)]
x86: add bad_ioapic to mpparse_32.c
Signed-off-by: Alexey Starikovskiy <astarikovskiy@suse.de>
Signed-off-by: Ingo Molnar <mingo@elte.hu>
Alexey Starikovskiy [Mon, 17 Mar 2008 19:07:59 +0000 (22:07 +0300)]
x86: lindent mpparse_64.c
Signed-off-by: Alexey Starikovskiy <astarikovskiy@suse.de>
Signed-off-by: Ingo Molnar <mingo@elte.hu>
Glauber de Oliveira Costa [Wed, 19 Mar 2008 17:26:14 +0000 (14:26 -0300)]
x86: remove smpboot_32.c and smpboot_64.c
Remove the last leftovers from the files. Move the ones
that are still used to the files they belong, the others
that grep can't reach, simply throw away.
Merge comments ontop of file and that's it: smpboot integrated
Signed-off-by: Glauber Costa <gcosta@redhat.com>
Signed-off-by: Ingo Molnar <mingo@elte.hu>
Glauber de Oliveira Costa [Wed, 19 Mar 2008 17:26:13 +0000 (14:26 -0300)]
x86: move apicid mappings to smpboot.c
They are i386 specific (the x86_64 definitions live
elsewhere, and should remain there), so are enclosed around
an ifdef
Signed-off-by: Glauber Costa <gcosta@redhat.com>
Signed-off-by: Ingo Molnar <mingo@elte.hu>
Glauber de Oliveira Costa [Wed, 19 Mar 2008 17:26:12 +0000 (14:26 -0300)]
x86: merge cpu_exit_clear
this is the last remaining function in smpboot_32.c
Since it is i386 specific, move it around an ifdef to
smpboot.c
Signed-off-by: Glauber Costa <gcosta@redhat.com>
Signed-off-by: Ingo Molnar <mingo@elte.hu>
Glauber de Oliveira Costa [Wed, 19 Mar 2008 17:26:11 +0000 (14:26 -0300)]
x86: merge native_smp_prepare_cpus
With the previous changes, code for native_smp_prepare_cpus()
in i386 and x86_64 now look very similar. merge them into
smpboot.c. Minor differences are inside ifdef
Signed-off-by: Glauber Costa <gcosta@redhat.com>
Signed-off-by: Ingo Molnar <mingo@elte.hu>
Glauber de Oliveira Costa [Wed, 19 Mar 2008 17:26:10 +0000 (14:26 -0300)]
x86: introduce smpboot_clear_io_apic
x86_64 has two nr_ioapics = 0 statements. In 32-bit, it can be done
too. We do it through the smpboot_clear_io_apic() inline function,
to cope with subarchitectures (visws) that does not compile mpparse in
Signed-off-by: Glauber Costa <gcosta@redhat.com>
Signed-off-by: Ingo Molnar <mingo@elte.hu>
Glauber de Oliveira Costa [Wed, 19 Mar 2008 17:26:09 +0000 (14:26 -0300)]
x86: change x86_64 sanity checks to match i386.
They are mostly inocuous. APIC_INTEGRATED will expand to 1,
check_phys_apicid_present is checking for the same thing it was before,
etc. But the code is identical to i386 now, and will allow us to
integrate it.
Signed-off-by: Glauber Costa <gcosta@redhat.com>
Signed-off-by: Ingo Molnar <mingo@elte.hu>
Glauber de Oliveira Costa [Wed, 19 Mar 2008 17:26:08 +0000 (14:26 -0300)]
x86: add extra sanity check
This test exists in x86_64 and also applies to i386. So we add it
Signed-off-by: Glauber Costa <gcosta@redhat.com>
Signed-off-by: Ingo Molnar <mingo@elte.hu>
Glauber de Oliveira Costa [Wed, 19 Mar 2008 17:26:07 +0000 (14:26 -0300)]
x86: change x86_64 native_smp_prepare_cpus to match i386
An APIC test is moved, and code is replaced by the mach-default
already defined function (smpboot_setup_io_apic).
setup_portio_remap() is added, but it is a nop in mach-default.
Signed-off-by: Glauber Costa <gcosta@redhat.com>
Signed-off-by: Ingo Molnar <mingo@elte.hu>
Glauber de Oliveira Costa [Wed, 19 Mar 2008 17:26:06 +0000 (14:26 -0300)]
x86: assign nr_ioapics = 0 in smpboot_hooks.h
change smpboot_setup_io_apic() by to match x86_64 behaviour
Signed-off-by: Glauber Costa <gcosta@redhat.com>
Signed-off-by: Ingo Molnar <mingo@elte.hu>
Glauber de Oliveira Costa [Wed, 19 Mar 2008 17:26:05 +0000 (14:26 -0300)]
x86: additions to i386 native_smp_prepare_cpus.
Add function calls to native_smp_prepare_cpus in i386
to match x86_64
Signed-off-by: Glauber Costa <gcosta@redhat.com>
Signed-off-by: Ingo Molnar <mingo@elte.hu>
Glauber de Oliveira Costa [Wed, 19 Mar 2008 17:26:04 +0000 (14:26 -0300)]
x86: get rid of smp_boot_cpus
This patch get rid of smp_boot_cpus(), since it does not
boot any cpu anymore. Its code is split in a way to make
it closer to x86_64
Signed-off-by: Glauber Costa <gcosta@redhat.com>
Signed-off-by: Ingo Molnar <mingo@elte.hu>
Glauber de Oliveira Costa [Wed, 19 Mar 2008 17:26:03 +0000 (14:26 -0300)]
x86: use physical id when disabling smp
if smp configuration is not found at all, hook into 0.
This is done to match x86_64
Signed-off-by: Glauber Costa <gcosta@redhat.com>
Signed-off-by: Ingo Molnar <mingo@elte.hu>
Glauber de Oliveira Costa [Wed, 19 Mar 2008 17:26:02 +0000 (14:26 -0300)]
x86: merge native_smp_cpus_done
They look similar enough, and are merged. Only difference
(zap_low_mapping for i386) is inside ifdef
Signed-off-by: Glauber Costa <gcosta@redhat.com>
Signed-off-by: Ingo Molnar <mingo@elte.hu>
Glauber de Oliveira Costa [Wed, 19 Mar 2008 17:26:01 +0000 (14:26 -0300)]
x86: merge smp_prepare_boot_cpu
it is practically the same between arches now, so it is
moved to smpboot.c. Minor differences (gdt initialization)
live inside an ifdef
Signed-off-by: Glauber Costa <gcosta@redhat.com>
Signed-off-by: Ingo Molnar <mingo@elte.hu>
Glauber de Oliveira Costa [Wed, 19 Mar 2008 17:26:00 +0000 (14:26 -0300)]
x86: integrate start_secondary
It now looks the same between architectures, so we
merge it in smpboot.c. Minor differences goes inside
an ifdef
Signed-off-by: Glauber Costa <gcosta@redhat.com>
Signed-off-by: Ingo Molnar <mingo@elte.hu>
Glauber de Oliveira Costa [Wed, 19 Mar 2008 17:25:59 +0000 (14:25 -0300)]
x86: integrate do_boot_cpu
This is a very large patch, because it depends on a lot
of auxiliary static functions. But they all have been modified
to the point that they're sufficiently close now. So they're just
merged in smpboot.c
Signed-off-by: Glauber Costa <gcosta@redhat.com>
Signed-off-by: Ingo Molnar <mingo@elte.hu>
Glauber de Oliveira Costa [Wed, 19 Mar 2008 17:25:58 +0000 (14:25 -0300)]
x86: change boot_cpu_id to boot_cpu_physical_apicid
This is to match i386. The former name was cuter,
but the current is more meaningful and more general,
since cpu_id can be a logical id.
Signed-off-by: Glauber Costa <gcosta@redhat.com>
Signed-off-by: Ingo Molnar <mingo@elte.hu>
Glauber de Oliveira Costa [Wed, 19 Mar 2008 17:25:57 +0000 (14:25 -0300)]
x86: move stack_start to smp.h
voyager would conflict with it, but the types are ultimately
compatible. So remove the extern definition from voyager_smp.c
in favour of the common one
Signed-off-by: Glauber Costa <gcosta@redhat.com>
Signed-off-by: Ingo Molnar <mingo@elte.hu>
Glauber de Oliveira Costa [Wed, 19 Mar 2008 17:25:56 +0000 (14:25 -0300)]
x86: move {un}map_cpu_to_logical_apicid to smpboot.c
Move map_cpu_to_logical_apicid() and unmap_cpu_to_logical_apicid()
to smpboot.c. They take together all the bunch of static functions
they rely upon
Signed-off-by: Glauber Costa <gcosta@redhat.com>
Signed-off-by: Ingo Molnar <mingo@elte.hu>
Glauber de Oliveira Costa [Wed, 19 Mar 2008 17:25:55 +0000 (14:25 -0300)]
x86: add callin tests to cpu_up
Now that we boot cpus here, callin_map has this meaning (same
as x86_64)
Signed-off-by: Glauber Costa <gcosta@redhat.com>
Signed-off-by: Ingo Molnar <mingo@elte.hu>
Glauber de Oliveira Costa [Wed, 19 Mar 2008 17:25:54 +0000 (14:25 -0300)]
x86: change wakeup_secondary name
wakeup_secondary_via_INIT => wakeup_secondary_cpu.
This is to match i386, where init is not always used.
Signed-off-by: Glauber Costa <gcosta@redhat.com>
Signed-off-by: Ingo Molnar <mingo@elte.hu>
Glauber de Oliveira Costa [Wed, 19 Mar 2008 17:25:53 +0000 (14:25 -0300)]
x86: include mach_apic.h in smpboot_64.c and smpboot.c
After the inclusion, a lot of files needs fixing for conflicts,
some of them in the headers themselves, to accomodate for both
i386 and x86_64 versions.
[ mingo@elte.hu: build fix ]
Signed-off-by: Glauber Costa <gcosta@redhat.com>
Signed-off-by: Ingo Molnar <mingo@elte.hu>
Glauber de Oliveira Costa [Wed, 19 Mar 2008 17:25:52 +0000 (14:25 -0300)]
x86: call do_boot_cpu directly from native_cpu_up
We don't need __smp_prepare_cpu anymore.
Signed-off-by: Glauber Costa <gcosta@redhat.com>
Signed-off-by: Ingo Molnar <mingo@elte.hu>
Glauber de Oliveira Costa [Wed, 19 Mar 2008 17:25:51 +0000 (14:25 -0300)]
x86: minor adjustments for do_boot_cpu
This patch provides minor adjustments for do_boot_cpus
in both architectures to allow for integration
Signed-off-by: Glauber Costa <gcosta@redhat.com>
Signed-off-by: Ingo Molnar <mingo@elte.hu>
Glauber de Oliveira Costa [Wed, 19 Mar 2008 17:25:50 +0000 (14:25 -0300)]
x86: calibrate delay with irqs enabled
We do it to make it close to x86_64. The later needs it,
otherwise the nmi watchdog can get into the scene and kill us
with a hammer.
Enabling irqs here used to trigger a bug in i386. This is because
time irq handling relies upon structures that are only initialized
after smp initcalls (More precisely, it will find
per_cpu(hrtimer_bases, cpu)->cb_pending list not initialized and crash)
Signed-off-by: Glauber Costa <gcosta@redhat.com>
Signed-off-by: Ingo Molnar <mingo@elte.hu>
Glauber de Oliveira Costa [Wed, 19 Mar 2008 17:25:49 +0000 (14:25 -0300)]
x86: provide an end_local_APIC_setup function
It splits setup_local_APIC in two, providing a function corresponding
to the ending part of it. As a side effect, smp_callin looks the same
between i386 and x86_64.
Signed-off-by: Glauber Costa <gcosta@redhat.com>
Signed-off-by: Ingo Molnar <mingo@elte.hu>
Glauber de Oliveira Costa [Wed, 19 Mar 2008 17:25:48 +0000 (14:25 -0300)]
x86: wrap esr setting up in i386 in lapic_setup_esr
it is a little bit more complicated than x86_64 due to erratas and
other stuff, but its existance will ease integration
Signed-off-by: Glauber Costa <gcosta@redhat.com>
Signed-off-by: Ingo Molnar <mingo@elte.hu>
Glauber de Oliveira Costa [Wed, 19 Mar 2008 17:25:47 +0000 (14:25 -0300)]
x86: modify smp_callin in x86_64 to look like i386
We introduce empty macros just to make them look like the same
Signed-off-by: Glauber Costa <gcosta@redhat.com>
Signed-off-by: Ingo Molnar <mingo@elte.hu>
Glauber de Oliveira Costa [Wed, 19 Mar 2008 17:25:46 +0000 (14:25 -0300)]
x86: don't span a new worker in __smp_prepare_cpu
We can do it now that do_boot_cpu has its own worker.
Signed-off-by: Glauber Costa <gcosta@redhat.com>
Signed-off-by: Ingo Molnar <mingo@elte.hu>
Glauber de Oliveira Costa [Wed, 19 Mar 2008 17:25:45 +0000 (14:25 -0300)]
x86: use create_idle struct in do_boot_cpu
Use a new worker, with help of the create_idle struct
to fork the idle thread. We now have two workers, the first
of them triggered by __smp_prepare_cpu. But the later is
going away soon.
Signed-off-by: Glauber Costa <gcosta@redhat.com>
Signed-off-by: Ingo Molnar <mingo@elte.hu>
Glauber de Oliveira Costa [Wed, 19 Mar 2008 17:25:44 +0000 (14:25 -0300)]
x86: get rid of commenced mask.
As we now boot cpus from cpu_up, we don't need it.
Signed-off-by: Glauber Costa <gcosta@redhat.com>
Signed-off-by: Ingo Molnar <mingo@elte.hu>
Glauber de Oliveira Costa [Wed, 19 Mar 2008 17:25:43 +0000 (14:25 -0300)]
x86: boot cpus from cpu_up, instead of prepare_cpus
After all the infrastructure work, we're now prepared
to boot the cpus from cpu_up, and not from prepare_cpus.
So the difference between cold boot and hotplug is effectively
over, and the functions are used to the purposes they're meant to.
Signed-off-by: Glauber Costa <gcosta@redhat.com>
Signed-off-by: Ingo Molnar <mingo@elte.hu>
Glauber de Oliveira Costa [Wed, 19 Mar 2008 17:25:42 +0000 (14:25 -0300)]
x86: do not zap_low_mappings in __smp_prepare_cpus
It was okay when cpus were cold booted before this point.
But with the new state machine, they will not have arrived to
the trampoline yet. zapping low mappings will have the bad effect
of breaking it completely after paging enablement
Signed-off-by: Glauber Costa <gcosta@redhat.com>
Signed-off-by: Ingo Molnar <mingo@elte.hu>
Glauber de Oliveira Costa [Wed, 19 Mar 2008 17:25:41 +0000 (14:25 -0300)]
x86: schedule work only if keventd is already running
Only call schedule_work if keventd is already running.
This is already the way x86_64 does
Signed-off-by: Glauber Costa <gcosta@redhat.com>
Signed-off-by: Ingo Molnar <mingo@elte.hu>
Glauber de Oliveira Costa [Wed, 19 Mar 2008 17:25:39 +0000 (14:25 -0300)]
x86: don't initialize sibling and core maps during preparation
it is redundant, since it is already done by set_cpu_sibling_map()
Signed-off-by: Glauber Costa <gcosta@redhat.com>
Signed-off-by: Ingo Molnar <mingo@elte.hu>
Glauber de Oliveira Costa [Wed, 19 Mar 2008 17:25:38 +0000 (14:25 -0300)]
x86: call nmi_watchdog_default in i386
this does not exist, so it will be an empty macro
Signed-off-by: Glauber Costa <gcosta@redhat.com>
Signed-off-by: Ingo Molnar <mingo@elte.hu>
Glauber de Oliveira Costa [Wed, 19 Mar 2008 17:25:37 +0000 (14:25 -0300)]
x86: call check_nmi_watchdog explicitly in native_smp_cpus_done
With this, remove its late_initcall marker from nmi_32.c
Signed-off-by: Glauber Costa <gcosta@redhat.com>
Signed-off-by: Ingo Molnar <mingo@elte.hu>
Glauber de Oliveira Costa [Wed, 19 Mar 2008 17:25:36 +0000 (14:25 -0300)]
x86: unify nmi_32.h and nmi_64.h
Two more files goes away. nmi_64.h and nmi_32.h gives birth
to nmi.h
Signed-off-by: Glauber Costa <gcosta@redhat.com>
Signed-off-by: Ingo Molnar <mingo@elte.hu>
Glauber de Oliveira Costa [Wed, 19 Mar 2008 17:25:35 +0000 (14:25 -0300)]
x86: wipe get_nmi_reason out of nmi_64.h
use mach_traps when it is supposed to be used.
Signed-off-by: Glauber Costa <gcosta@redhat.com>
Signed-off-by: Ingo Molnar <mingo@elte.hu>
Glauber de Oliveira Costa [Wed, 19 Mar 2008 17:25:34 +0000 (14:25 -0300)]
x86: don't set maps in native_smp_prepare_boot_cpu()
By this time, they are already set in init routines
Signed-off-by: Glauber Costa <gcosta@redhat.com>
Signed-off-by: Ingo Molnar <mingo@elte.hu>
Glauber de Oliveira Costa [Wed, 19 Mar 2008 17:25:33 +0000 (14:25 -0300)]
x86: move smp_intr_init away from smpboot_32.c
We move it to apic_32.c, since it's irq related anyway,
and only called from that file.
Signed-off-by: Glauber Costa <gcosta@redhat.com>
Signed-off-by: Ingo Molnar <mingo@elte.hu>
Glauber de Oliveira Costa [Wed, 19 Mar 2008 17:25:32 +0000 (14:25 -0300)]
x86: include smpboot_hooks.h in smpboot_64.c
We do it and also fix conflicts, which makes x86_64 automatically
closer to i386
Signed-off-by: Glauber Costa <gcosta@redhat.com>
Signed-off-by: Ingo Molnar <mingo@elte.hu>
Glauber de Oliveira Costa [Wed, 19 Mar 2008 17:25:31 +0000 (14:25 -0300)]
x86: include mach_wakecpu.h in smpboot_64
Do it and also fix conflicts, which automatically makes
x86_64 look closer to i386
Signed-off-by: Glauber Costa <gcosta@redhat.com>
Signed-off-by: Ingo Molnar <mingo@elte.hu>
Glauber de Oliveira Costa [Wed, 19 Mar 2008 17:25:30 +0000 (14:25 -0300)]
x86: add subarch support (for headers) to x86_64
this patch allows x86_64 to use subarch mach_ headers
in practice, since x86_64 does not have any subarch, it
will use mach_default. But it will allow for substantially
less code duplication
Signed-off-by: Glauber Costa <gcosta@redhat.com>
Signed-off-by: Ingo Molnar <mingo@elte.hu>
Glauber de Oliveira Costa [Wed, 19 Mar 2008 17:25:29 +0000 (14:25 -0300)]
x86: move impress_friends and smp_check to cpus_done
the cpu count is changed accordingly: now, what matters is
online cpus.
Also, we add those functions for x86_64
Signed-off-by: Glauber Costa <gcosta@redhat.com>
Signed-off-by: Ingo Molnar <mingo@elte.hu>
Glauber de Oliveira Costa [Wed, 19 Mar 2008 17:25:28 +0000 (14:25 -0300)]
x86: do smp tainting checks in a separate function
It will ease integration for x86_64
Signed-off-by: Glauber Costa <gcosta@redhat.com>
Signed-off-by: Ingo Molnar <mingo@elte.hu>
Glauber de Oliveira Costa [Wed, 19 Mar 2008 17:25:27 +0000 (14:25 -0300)]
x86: allow user to impress friends.
Impressing friends is a very important thing.
Do it in a separate function to make it even more
explicit, and ease integration.
Signed-off-by: Glauber Costa <gcosta@redhat.com>
Signed-off-by: Ingo Molnar <mingo@elte.hu>
Glauber de Oliveira Costa [Wed, 19 Mar 2008 17:25:26 +0000 (14:25 -0300)]
x86: get rid of cpucount
weighting a map will do.
Signed-off-by: Glauber Costa <gcosta@redhat.com>
Signed-off-by: Ingo Molnar <mingo@elte.hu>
Ingo Molnar [Wed, 19 Mar 2008 19:26:15 +0000 (20:26 +0100)]
x86: fill cpu to apicid and present map in mpparse, fix
Signed-off-by: Ingo Molnar <mingo@elte.hu>
Glauber de Oliveira Costa [Wed, 19 Mar 2008 17:25:25 +0000 (14:25 -0300)]
x86: fill cpu to apicid and present map in mpparse
This is the way x86_64 does, and complement the already
present patch that does the bios cpu to apicid mapping here
Signed-off-by: Glauber Costa <gcosta@redhat.com>
Signed-off-by: Ingo Molnar <mingo@elte.hu>
Glauber de Oliveira Costa [Wed, 19 Mar 2008 17:25:24 +0000 (14:25 -0300)]
x86: fill bios cpu to apicid maps
We fill the per-cpu (or array) that maps
bios cpu id to apicid in mpparse_32.c, the way x86_64 does
Signed-off-by: Glauber Costa <gcosta@redhat.com>
Signed-off-by: Ingo Molnar <mingo@elte.hu>
Glauber de Oliveira Costa [Wed, 19 Mar 2008 17:25:23 +0000 (14:25 -0300)]
x86: use specialized routine for setup per-cpu area
We use the same routing as x86_64, moved now to setup.c.
Just with a few ifdefs inside.
Note that this routing uses prefill_possible_map().
It has the very nice side effect of allowing hotplugging of
cpus that are marked as present but disabled by acpi bios.
Signed-off-by: Glauber Costa <gcosta@redhat.com>
Signed-off-by: Ingo Molnar <mingo@elte.hu>
Glauber de Oliveira Costa [Wed, 19 Mar 2008 17:25:22 +0000 (14:25 -0300)]
x86: fix alloc_bootmem_pages_node macro
missing a semicolon
Signed-off-by: Glauber Costa <gcosta@redhat.com>
Signed-off-by: Ingo Molnar <mingo@elte.hu>
Glauber de Oliveira Costa [Wed, 19 Mar 2008 17:25:21 +0000 (14:25 -0300)]
x86: make node to apic mapping declarations unconditional
Instead of declaring them inside of X86_64 ifdef, do it
unconditionally
Signed-off-by: Glauber Costa <gcosta@redhat.com>
Signed-off-by: Ingo Molnar <mingo@elte.hu>
Glauber de Oliveira Costa [Wed, 19 Mar 2008 17:25:20 +0000 (14:25 -0300)]
x86: initialize map pointers in setup_32.c
this will serve as a reference as to whether or not to
use the per_cpu variables in mpparse. Done the same way
as x86_64
Signed-off-by: Glauber Costa <gcosta@redhat.com>
Signed-off-by: Ingo Molnar <mingo@elte.hu>
Glauber de Oliveira Costa [Wed, 19 Mar 2008 17:25:19 +0000 (14:25 -0300)]
x86: define bios to apicid mapping
This mapping already exists in x86_64, just provide it for
i386
Signed-off-by: Glauber Costa <gcosta@redhat.com>
Signed-off-by: Ingo Molnar <mingo@elte.hu>
Glauber de Oliveira Costa [Wed, 19 Mar 2008 17:25:18 +0000 (14:25 -0300)]
x86: unify extern masks declaration
take them off smp_{32,64}.h and move to smp.h
Signed-off-by: Glauber Costa <gcosta@redhat.com>
Signed-off-by: Ingo Molnar <mingo@elte.hu>
Glauber de Oliveira Costa [Wed, 19 Mar 2008 17:25:17 +0000 (14:25 -0300)]
x86: move assignment of CPU_PREPARE before do_boot_cpu
Done to match x86_64
Signed-off-by: Glauber Costa <gcosta@redhat.com>
Signed-off-by: Ingo Molnar <mingo@elte.hu>
Glauber de Oliveira Costa [Wed, 19 Mar 2008 17:25:16 +0000 (14:25 -0300)]
x86: make __smp_prepare_cpu void
We have already removed the only condition that could fail here.
so just don't test for any return value
Signed-off-by: Glauber Costa <gcosta@redhat.com>
Signed-off-by: Ingo Molnar <mingo@elte.hu>
Glauber de Oliveira Costa [Wed, 19 Mar 2008 17:25:15 +0000 (14:25 -0300)]
x86: do tests before do_boot_cpu in i386
Do tests before do_boot_cpu in native_cpu_up for i386.
Tests are a little bit broader than originally, and are the
same as x86_64. Test for smp_callin is not applicable right now
and is deferred.
Signed-off-by: Glauber Costa <gcosta@redhat.com>
Signed-off-by: Ingo Molnar <mingo@elte.hu>