mirror of
git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2025-05-24 10:39:52 +00:00

A series from Baoquan He cleans up the asm-generic/io.h to remove the ioremap_uc() definition from everything except x86, which still needs it for pre-PAT systems. This series notably contains a patch from Jiaxun Yang that converts MIPS to use asm-generic/io.h like every other architecture does, enabling future cleanups. Some of my own patches fix -Wmissing-prototype warnings in architecture specific code across several architectures. This is now needed as the warning is enabled by default. There are still some remaining warnings in minor platforms, but the series should catch most of the widely used ones make them more consistent with one another. David McKay fixes a bug in __generic_cmpxchg_local() when this is used on 64-bit architectures. This could currently only affect parisc64 and sparc64. Additional cleanups address from Linus Walleij, Uwe Kleine-König, Thomas Huth, and Kefeng Wang help reduce unnecessary inconsistencies between architectures. -----BEGIN PGP SIGNATURE----- iQIzBAABCgAdFiEEiK/NIGsWEZVxh/FrYKtH/8kJUicFAmWeak8ACgkQYKtH/8kJ UidSiQ/+LL1WTO9d3Zx5HI0GGGjaIYpYs6jUNSf9Y5GPQiOrvjfEWj7CU11/4vxl GlQRpRyncYm8Eiz0Qu+aNxZFiiMah8Uful75yfbX8P1L4EPTbAYNDjkyNJrTjIAK jPK4sl8awIrapOeFUz++PsEj22R/4Is4f0mo+CqoCkL5RKlHe5oFdXzcwjmds4yK CvU6Ldn+M7FZ3EItMdjXaB3D3HS9uictFiO5JByZY8p+IcqgNRI/iHNnZIMsltJ+ XjDi0DG+x4jCj6teElSchw7AofE4OcNSP3xbR1PLKv6+xBLGYaAGZhNuPTz88eV/ Gj0loDQrrR5McGUfDBRHK9zN2Jd0O/FKnfh9kLOt1FLFyGPvC78Q/2HkpVCjbBr2 Pr1aqhLDHA+tGNSsThsV8RUa8/tiEnxAki43tfBFS3SEKhtQsTm2g1z4miwbE3p0 BJIrSgTqrP/SBq7a9z/thPrkzdZcNuA9FUETTbaMeUlJS51n1V9E5A1t7sOG7jaI vV/gbuR6FjvD49mTyQiOSCt3V4ygRqgN1Q+C4QM8WLqq2keUq0AhGodquv8F78in J3x2j2r27lHY7jKf8B0dua/JXAsF20u8qD6yDQ9ymkjt/MWhGXBgK0jpT7RTIuMS e2jmTywUVD4UohAcx3inkOojUhIJ5KDB0I4Pzv4zWcHNbyFNKcY= =4VQl -----END PGP SIGNATURE----- Merge tag 'asm-generic-6.8' of git://git.kernel.org/pub/scm/linux/kernel/git/arnd/asm-generic Pull asm-generic cleanups from Arnd Bergmann: "A series from Baoquan He cleans up the asm-generic/io.h to remove the ioremap_uc() definition from everything except x86, which still needs it for pre-PAT systems. This series notably contains a patch from Jiaxun Yang that converts MIPS to use asm-generic/io.h like every other architecture does, enabling future cleanups. Some of my own patches fix -Wmissing-prototype warnings in architecture specific code across several architectures. This is now needed as the warning is enabled by default. There are still some remaining warnings in minor platforms, but the series should catch most of the widely used ones make them more consistent with one another. David McKay fixes a bug in __generic_cmpxchg_local() when this is used on 64-bit architectures. This could currently only affect parisc64 and sparc64. Additional cleanups address from Linus Walleij, Uwe Kleine-König, Thomas Huth, and Kefeng Wang help reduce unnecessary inconsistencies between architectures" * tag 'asm-generic-6.8' of git://git.kernel.org/pub/scm/linux/kernel/git/arnd/asm-generic: asm-generic: Fix 32 bit __generic_cmpxchg_local Hexagon: Make pfn accessors statics inlines ARC: mm: Make virt_to_pfn() a static inline mips: remove extraneous asm-generic/iomap.h include sparc: Use $(kecho) to announce kernel images being ready arm64: vdso32: Define BUILD_VDSO32_64 to correct prototypes csky: fix arch_jump_label_transform_static override arch: add do_page_fault prototypes arch: add missing prepare_ftrace_return() prototypes arch: vdso: consolidate gettime prototypes arch: include linux/cpu.h for trap_init() prototype arch: fix asm-offsets.c building with -Wmissing-prototypes arch: consolidate arch_irq_work_raise prototypes hexagon: Remove CONFIG_HEXAGON_ARCH_VERSION from uapi header asm/io: remove unnecessary xlate_dev_mem_ptr() and unxlate_dev_mem_ptr() mips: io: remove duplicated codes arch/*/io.h: remove ioremap_uc in some architectures mips: add <asm-generic/io.h> including
140 lines
3.7 KiB
C
140 lines
3.7 KiB
C
/*
|
|
* 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) 2000 - 2001 by Kanoj Sarcar (kanoj@sgi.com)
|
|
* Copyright (C) 2000 - 2001 by Silicon Graphics, Inc.
|
|
* Copyright (C) 2000, 2001, 2002 Ralf Baechle
|
|
* Copyright (C) 2000, 2001 Broadcom Corporation
|
|
*/
|
|
#ifndef __ASM_SMP_H
|
|
#define __ASM_SMP_H
|
|
|
|
#include <linux/compiler.h>
|
|
#include <linux/linkage.h>
|
|
#include <linux/threads.h>
|
|
#include <linux/cpumask.h>
|
|
|
|
#include <asm/smp-ops.h>
|
|
|
|
extern int smp_num_siblings;
|
|
extern cpumask_t cpu_sibling_map[];
|
|
extern cpumask_t cpu_core_map[];
|
|
extern cpumask_t cpu_foreign_map[];
|
|
|
|
static inline int raw_smp_processor_id(void)
|
|
{
|
|
#if defined(__VDSO__)
|
|
extern int vdso_smp_processor_id(void)
|
|
__compiletime_error("VDSO should not call smp_processor_id()");
|
|
return vdso_smp_processor_id();
|
|
#else
|
|
return current_thread_info()->cpu;
|
|
#endif
|
|
}
|
|
#define raw_smp_processor_id raw_smp_processor_id
|
|
|
|
/* Map from cpu id to sequential logical cpu number. This will only
|
|
not be idempotent when cpus failed to come on-line. */
|
|
extern int __cpu_number_map[CONFIG_MIPS_NR_CPU_NR_MAP];
|
|
#define cpu_number_map(cpu) __cpu_number_map[cpu]
|
|
|
|
/* The reverse map from sequential logical cpu number to cpu id. */
|
|
extern int __cpu_logical_map[NR_CPUS];
|
|
#define cpu_logical_map(cpu) __cpu_logical_map[cpu]
|
|
|
|
#define NO_PROC_ID (-1)
|
|
|
|
#define SMP_RESCHEDULE_YOURSELF 0x1 /* XXX braindead */
|
|
#define SMP_CALL_FUNCTION 0x2
|
|
/* Octeon - Tell another core to flush its icache */
|
|
#define SMP_ICACHE_FLUSH 0x4
|
|
#define SMP_ASK_C0COUNT 0x8
|
|
|
|
/* Mask of CPUs which are currently definitely operating coherently */
|
|
extern cpumask_t cpu_coherent_mask;
|
|
|
|
extern unsigned int smp_max_threads __initdata;
|
|
|
|
extern asmlinkage void smp_bootstrap(void);
|
|
|
|
extern void calculate_cpu_foreign_map(void);
|
|
|
|
asmlinkage void start_secondary(void);
|
|
|
|
/*
|
|
* this function sends a 'reschedule' IPI to another CPU.
|
|
* it goes straight through and wastes no time serializing
|
|
* anything. Worst case is that we lose a reschedule ...
|
|
*/
|
|
static inline void arch_smp_send_reschedule(int cpu)
|
|
{
|
|
extern const struct plat_smp_ops *mp_ops; /* private */
|
|
|
|
mp_ops->send_ipi_single(cpu, SMP_RESCHEDULE_YOURSELF);
|
|
}
|
|
|
|
#ifdef CONFIG_HOTPLUG_CPU
|
|
static inline int __cpu_disable(void)
|
|
{
|
|
extern const struct plat_smp_ops *mp_ops; /* private */
|
|
|
|
return mp_ops->cpu_disable();
|
|
}
|
|
|
|
static inline void __cpu_die(unsigned int cpu)
|
|
{
|
|
extern const struct plat_smp_ops *mp_ops; /* private */
|
|
|
|
mp_ops->cpu_die(cpu);
|
|
}
|
|
|
|
extern void __noreturn play_dead(void);
|
|
#endif
|
|
|
|
#ifdef CONFIG_KEXEC_CORE
|
|
static inline void kexec_nonboot_cpu(void)
|
|
{
|
|
extern const struct plat_smp_ops *mp_ops; /* private */
|
|
|
|
return mp_ops->kexec_nonboot_cpu();
|
|
}
|
|
|
|
static inline void *kexec_nonboot_cpu_func(void)
|
|
{
|
|
extern const struct plat_smp_ops *mp_ops; /* private */
|
|
|
|
return mp_ops->kexec_nonboot_cpu;
|
|
}
|
|
#endif
|
|
|
|
/*
|
|
* This function will set up the necessary IPIs for Linux to communicate
|
|
* with the CPUs in mask.
|
|
* Return 0 on success.
|
|
*/
|
|
int mips_smp_ipi_allocate(const struct cpumask *mask);
|
|
|
|
/*
|
|
* This function will free up IPIs allocated with mips_smp_ipi_allocate to the
|
|
* CPUs in mask, which must be a subset of the IPIs that have been configured.
|
|
* Return 0 on success.
|
|
*/
|
|
int mips_smp_ipi_free(const struct cpumask *mask);
|
|
|
|
static inline void arch_send_call_function_single_ipi(int cpu)
|
|
{
|
|
extern const struct plat_smp_ops *mp_ops; /* private */
|
|
|
|
mp_ops->send_ipi_single(cpu, SMP_CALL_FUNCTION);
|
|
}
|
|
|
|
static inline void arch_send_call_function_ipi_mask(const struct cpumask *mask)
|
|
{
|
|
extern const struct plat_smp_ops *mp_ops; /* private */
|
|
|
|
mp_ops->send_ipi_mask(mask, SMP_CALL_FUNCTION);
|
|
}
|
|
|
|
#endif /* __ASM_SMP_H */
|