summaryrefslogtreecommitdiffstats
path: root/arch/x86/include/asm/es7000/apic.h
Commit message (Collapse)AuthorAgeFilesLines
* x86, ES7000: consolidate the APIC codeIngo Molnar2009-01-281-236/+0
| | | | | | | | Consolidate all the ES7000 APIC code into arch/x86/mach-generic/es7000.c. With this ES7000 ceases to rely on any subarchitecture include files. Signed-off-by: Ingo Molnar <mingo@elte.hu>
* x86, apic: refactor ->cpu_mask_to_apicid*()Ingo Molnar2009-01-281-11/+18
| | | | | | | | | | - spread out the namespace on a per driver basis - clean up the functions - get rid of macros Signed-off-by: Ingo Molnar <mingo@elte.hu>
* x86, apic: refactor ->phys_pkg_id()Ingo Molnar2009-01-281-1/+1
| | | | | | | | | | | | Refactor the ->phys_pkg_id() methods: - namespace separation - macro wrapper removal - open-coded calls to the methods in the generic code Signed-off-by: Ingo Molnar <mingo@elte.hu>
* x86, apic: unify phys_pkg_id()Ingo Molnar2009-01-281-1/+1
| | | | | | | | | | - unify the call signature of 64-bit to that of 32-bit - clean up the types all around - clean up namespace contamination Signed-off-by: Ingo Molnar <mingo@elte.hu>
* x86, es7000: clean up es7000_enable_apic_mode()Ingo Molnar2009-01-281-0/+2
| | | | | | | | | | | - eliminate the needless es7000_enable_apic_mode() complication which was not apparent prior the namespace cleanups - clean up the control flow in es7000_enable_apic_mode() - other cleanups Signed-off-by: Ingo Molnar <mingo@elte.hu>
* x86: refactor ->check_phys_apicid_present() subarch methodsIngo Molnar2009-01-281-2/+2
| | | | | | | | | - spread out the namespace to per driver methods - extend it to 64-bit as well so that we can use apic->check_phys_apicid_present() unconditionally Signed-off-by: Ingo Molnar <mingo@elte.hu>
* x86: refactor ->setup_portio_remap() subarch methodsIngo Molnar2009-01-281-4/+0
| | | | | | | | | | | | | | Only NUMAQ has a real ->setup_portio_remap() method, the other subarchitectures define it but keep it empty. So mark the vector as NULL, extend the generic code to handle NULL -setup_portio_remap() entries and remove all the empty handlers. Also move the NUMAQ method from the header file into the apic driver .c file. Signed-off-by: Ingo Molnar <mingo@elte.hu>
* x86, apic: clean up ->apicid_to_cpu_present()Ingo Molnar2009-01-281-1/+1
| | | | | | | | - separate the namespace - remove macros Signed-off-by: Ingo Molnar <mingo@elte.hu>
* x86, apic: clean up ->cpu_present_to_apicid()Ingo Molnar2009-01-281-1/+1
| | | | | | | | - separate the namespace - remove macros Signed-off-by: Ingo Molnar <mingo@elte.hu>
* x86, apic: clean up ->cpu_to_logical_apicid()Ingo Molnar2009-01-281-8/+8
| | | | | | | | - separate the namespace - remove macros Signed-off-by: Ingo Molnar <mingo@elte.hu>
* x86, apic: clean up ->apicid_to_node()Ingo Molnar2009-01-281-1/+1
| | | | | | | | - separate the namespace - remove macros Signed-off-by: Ingo Molnar <mingo@elte.hu>
* x86, apic: streamline the ->multi_timer_check() quirkIngo Molnar2009-01-281-5/+0
| | | | | | | | | | | | only NUMAQ uses this quirk: to prevent the timer IRQ from being added on secondary nodes. All other genapic templates can have a NULL ->multi_timer_check() callback. Also, extend the generic code to treat a NULL pointer accordingly. Signed-off-by: Ingo Molnar <mingo@elte.hu>
* x86, apic: clean up ->setup_apic_routing()Ingo Molnar2009-01-281-1/+1
| | | | | | | | | | - separate the namespace - remove macros - remove namespace clash on 64-bit Signed-off-by: Ingo Molnar <mingo@elte.hu>
* x86, apic: clean up ->ioapic_phys_id_map()Ingo Molnar2009-01-281-1/+1
| | | | | | | | - separate the namespace - remove macros Signed-off-by: Ingo Molnar <mingo@elte.hu>
* x86, apic: clean up ->init_apic_ldr()Ingo Molnar2009-01-281-2/+2
| | | | | | | | - separate the namespace - remove macros Signed-off-by: Ingo Molnar <mingo@elte.hu>
* x86, apic: remove no_balance_irq and no_ioapic_check flagsIngo Molnar2009-01-281-2/+0
| | | | | | | These flags are completely unused. (the in-kernel IRQ balancer has been removed from the upstream kernel.) Signed-off-by: Ingo Molnar <mingo@elte.hu>
* x86, apic: clean up check_apicid*() callbacksIngo Molnar2009-01-281-2/+3
| | | | | | | Clean up these methods - to make it clearer which function is used in which case. Signed-off-by: Ingo Molnar <mingo@elte.hu>
* x86: clean up the APIC_DEST_LOGICAL logicIngo Molnar2009-01-281-2/+0
| | | | | | | | | | | | | | | Impact: cleanup The bigsmp and es7000 subarchitectures un-defined APIC_DEST_LOGICAL in a rather nasty way by re-defining it to zero. That is infinitely fragile and makes it very hard to see what to code really does in a given context. The very same constant has different meanings and values - depending on which subarch is enabled. Untangle this mess by never undefining the constant, but instead propagating the right values into the genapic driver templates. Signed-off-by: Ingo Molnar <mingo@elte.hu>
* x86: clean up esr_disable() methodsIngo Molnar2009-01-281-1/+0
| | | | | | | | | | | | | | Impact: cleanup Most subarchitectures want to disable the APIC ESR (Error Status Register), because they generally have hardware hacks that wrap standard CPUs into a bigger system and hence the APIC bus is quite non-standard and weirdnesses (lockups) have been seen with ESR reporting. Remove the esr_disable macros and put the desired flag into each subarchitecture's genapic template directly. Signed-off-by: Ingo Molnar <mingo@elte.hu>
* x86, apic: clean up / remove TARGET_CPUSIngo Molnar2009-01-281-2/+2
| | | | | | | | Impact: cleanup use apic->target_cpus() directly instead of the TARGET_CPUS wrapper. Signed-off-by: Ingo Molnar <mingo@elte.hu>
* x86, apic: clean up target_cpus methodsIngo Molnar2009-01-281-2/+2
| | | | | | | | | | Impact: cleanup Clean up all the target_cpus() namespace overlap that exists between bigsmp, es7000, mach-default, numaq and summit - by separating the different functions into different names. Signed-off-by: Ingo Molnar <mingo@elte.hu>
* x86, apic: remove ES7000_IRQ_DELIVERY_MODE and ES7000_IRQ_DEST_MODEIngo Molnar2009-01-281-2/+0
| | | | | | | | | Impact: cleanup They were only used in a single place and obscured the apic_es7000 driver template. Signed-off-by: Ingo Molnar <mingo@elte.hu>
* x86, apic: remove IRQ_DEST_MODE / IRQ_DELIVERY_MODEIngo Molnar2009-01-281-2/+2
| | | | | | | | | | | | | Remove the wrapper macros IRQ_DEST_MODE and IRQ_DELIVERY_MODE. The typical 32-bit and the 64-bit build all dereference via the genapic, so it's pointless to hide that indirection via these ugly macros. Furthermore, it also obscures subarchitecture details. So replace it with apic->irq_dest_mode / etc. accesses. Signed-off-by: Ingo Molnar <mingo@elte.hu>
* x86, genapic: rename int_delivery_mode, et. al.Ingo Molnar2009-01-281-2/+2
| | | | | | | | | | | | | | | int_delivery_mode is supposed to mean 'interrupt delivery mode', but it's quite a misnomer as 'int' we usually think of as an integer type ... The standard naming for such attributes is 'irq' - so rename the following fields and macros: int_delivery_mode => irq_delivery_mode INT_DELIVERY_MODE => IRQ_DELIVERY_MODE int_dest_mode => irq_dest_mode INT_DEST_MODE => IRQ_DEST_MODE Signed-off-by: Ingo Molnar <mingo@elte.hu>
* x86: clean up apic->apic_id_registered() methodsIngo Molnar2009-01-281-2/+2
| | | | | | | | | | | | | | | Impact: cleanup x86 subarchitectures each defined a "apic_id_registered()" method, which could be an inline function depending on which subarch we build for, and which was also the name of a genapic field. Untangle this namespace spaghetti by giving each of the instances a separate name. Also remove wrapper macro obfuscation. Signed-off-by: Ingo Molnar <mingo@elte.hu>
* x86: fix x86_32 builds for summit and es7000 arch'sMike Travis2009-01-061-0/+2
| | | | | | | | | | | | | | Fix the following build errors reported by Yinghai Lu: | In file included from arch/x86/mach-generic/summit.c:16: | tip/linux-2.6/arch/x86/include/asm/summit/apic.h: | In function 'cpu_mask_to_apicid_and': | tip/linux-2.6/arch/x86/include/asm/summit/apic.h:179: | error: 'GFP_ATOMIC' undeclared (first use in this function) Reported-by: Yinghai Lu <Yinghai.Lu@Sun.COM> Signed-off-by: Mike Travis <travis@sgi.com> Signed-off-by: Ingo Molnar <mingo@elte.hu>
* x86: cleanup some remaining usages of NR_CPUS where s/b nr_cpu_idsMike Travis2009-01-031-29/+3
| | | | | | | | | | | | | | | | | | | | Impact: Reduce future system panics due to cpumask operations using NR_CPUS Insure that code does not look at bits >= nr_cpu_ids as when cpumasks are allocated based on nr_cpu_ids, these extra bits will not be defined. Also some other minor updates: * change in to use cpu accessor function set_cpu_present() instead of directly accessing cpu_present_map w/cpu_clear() [arch/x86/kernel/reboot.c] * use cpumask_of() instead of &cpumask_of_cpu() [arch/x86/kernel/reboot.c] * optimize some cpu_mask_to_apicid_and functions. Signed-off-by: Mike Travis <travis@sgi.com> Acked-by: Rusty Russell <rusty@rustcorp.com.au> Signed-off-by: Ingo Molnar <mingo@elte.hu>
* x86: fix cpu_mask_to_apicid_and to include cpu_online_maskMike Travis2008-12-181-22/+18
| | | | | | | | | | | | | | | | | | | | | | | | | | Impact: fix potential APIC crash In determining the destination apicid, there are usually three cpumasks that are considered: the incoming cpumask arg, cfg->domain and the cpu_online_mask. Since we are just introducing the cpu_mask_to_apicid_and function, make sure it includes the cpu_online_mask in it's evaluation. [Added with this patch.] There are two io_apic.c functions that did not previously use the cpu_online_mask: setup_IO_APIC_irq and msi_compose_msg. Both of these simply used cpu_mask_to_apicid(cfg->domain & TARGET_CPUS), and all but one arch (NUMAQ[*]) returns only online cpus in the TARGET_CPUS mask, so the behavior is identical for all cases. [*: NUMAQ bug?] Note that alloc_cpumask_var is only used for the 32-bit cases where it's highly likely that the cpumask set size will be small and therefore CPUMASK_OFFSTACK=n. But if that's not the case, failing the allocate will cause the same return value as the default. Signed-off-by: Mike Travis <travis@sgi.com> Signed-off-by: Ingo Molnar <mingo@elte.hu>
* x86: update add-cpu_mask_to_apicid_and to use struct cpumask*Mike Travis2008-12-161-9/+10
| | | | | | | | | | | Impact: use updated APIs Various API updates for x86:add-cpu_mask_to_apicid_and (Note: separate because previous patch has been "backported" to 2.6.27.) Signed-off-by: Rusty Russell <rusty@rustcorp.com.au> Signed-off-by: Mike Travis <travis@sgi.com>
* x86: Add cpu_mask_to_apicid_andMike Travis2008-12-161-0/+47
| | | | | | | | | | | Impact: new API Add a helper function that takes two cpumask's, and's them and then returns the apicid of the result. This removes a need in io_apic.c that uses a temporary cpumask to hold (mask & cfg->domain). Signed-off-by: Mike Travis <travis@sgi.com> Signed-off-by: Rusty Russell <rusty@rustcorp.com.au>
* x86 smp: modify send_IPI_mask interface to accept cpumask_t pointersMike Travis2008-12-161-18/+20
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Impact: cleanup, change parameter passing * Change genapic interfaces to accept cpumask_t pointers where possible. * Modify external callers to use cpumask_t pointers in function calls. * Create new send_IPI_mask_allbutself which is the same as the send_IPI_mask functions but removes smp_processor_id() from list. This removes another common need for a temporary cpumask_t variable. * Functions that used a temp cpumask_t variable for: cpumask_t allbutme = cpu_online_map; cpu_clear(smp_processor_id(), allbutme); if (!cpus_empty(allbutme)) ... become: if (!cpus_equal(cpu_online_map, cpumask_of_cpu(cpu))) ... * Other minor code optimizations (like using cpus_clear instead of CPU_MASK_NONE, etc.) Applies to linux-2.6.tip/master. Signed-off-by: Mike Travis <travis@sgi.com> Signed-off-by: Rusty Russell <rusty@rustcorp.com.au> Acked-by: Ingo Molnar <mingo@elte.hu>
* x86: use update_genapic to get rid of ES7000_CLUSTERED_APIC v2Yinghai Lu2008-11-181-23/+53
| | | | | | | | | | | | | Impact: clean up We can autodetect those system that need cluster apic, and update genapic accordingly. We can also remove wakeup.h for e7000, because it's default one is now the same as overall default mach_wakecpu.h Signed-off-by: Yinghai Lu <yinghai@kernel.org> Signed-off-by: Ingo Molnar <mingo@elte.hu>
* x86: fix wakeup_cpu with numaq/es7000, v2Yinghai Lu2008-11-171-3/+0
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Impact: fix secondary-CPU wakeup/init path with numaq and es7000 While looking at wakeup_secondary_cpu for WAKE_SECONDARY_VIA_NMI: |#ifdef WAKE_SECONDARY_VIA_NMI |/* | * Poke the other CPU in the eye via NMI to wake it up. Remember that the normal | * INIT, INIT, STARTUP sequence will reset the chip hard for us, and this | * won't ... remember to clear down the APIC, etc later. | */ |static int __devinit |wakeup_secondary_cpu(int logical_apicid, unsigned long start_eip) |{ | unsigned long send_status, accept_status = 0; | int maxlvt; |... | if (APIC_INTEGRATED(apic_version[phys_apicid])) { | maxlvt = lapic_get_maxlvt(); I noticed that there is no warning about undefined phys_apicid... because WAKE_SECONDARY_VIA_NMI and WAKE_SECONDARY_VIA_INIT can not be defined at the same time. So NUMAQ is using wrong wakeup_secondary_cpu. WAKE_SECONDARY_VIA_NMI, WAKE_SECONDARY_VIA_INIT and WAKE_SECONDARY_VIA_MIP are variants of a weird and fragile preprocessor-driven "HAL" mechanisms to specify the kind of secondary-CPU wakeup strategy a given x86 kernel will use. The vast majority of systems want to use INIT for secondary wakeup - NUMAQ uses an NMI, (old-style-) ES7000 uses 'MIP' (a firmware driven in-memory flag to let secondaries continue). So convert these mechanisms to x86_quirks and add a ->wakeup_secondary_cpu() method to specify the rare exception to the sane default. Extend genapic accordingly as well, for 32-bit. While looking further, I noticed that functions in wakecup.h for numaq and es7000 are different to the default in mach_wakecpu.h - but smpboot.c will only use default mach_wakecpu.h with smphook.h. So we need to add mach_wakecpu.h for mach_generic, to properly support numaq and es7000, and vectorize the following SMP init methods: int trampoline_phys_low; int trampoline_phys_high; void (*wait_for_init_deassert)(atomic_t *deassert); void (*smp_callin_clear_local_apic)(void); void (*store_NMI_vector)(unsigned short *high, unsigned short *low); void (*restore_NMI_vector)(unsigned short *high, unsigned short *low); void (*inquire_remote_apic)(int apicid); Signed-off-by: Yinghai Lu <yinghai@kernel.org> Signed-off-by: Ingo Molnar <mingo@elte.hu>
* x86, um: ... and asm-x86 moveAl Viro2008-10-221-0/+193
Signed-off-by: Al Viro <viro@zeniv.linux.org.uk> Signed-off-by: H. Peter Anvin <hpa@zytor.com>
OpenPOWER on IntegriCloud