mirror of
git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2025-09-04 20:19:47 +08:00
ARC fixes for 6.16
- arch_atomic64_cmpxchg relaxed variant [Jason] - use of inbuilt swap in stack unwinder [Yu-Chun Lin] - use of __ASSEMBLER__ in kernel headers [Thomas Huth] -----BEGIN PGP SIGNATURE----- iQIzBAABCgAdFiEEOXpuCuR6hedrdLCJadfx3eKKwl4FAmhKSP8ACgkQadfx3eKK wl62ow/+MuVWaXXqsAAEJD1VZ2Toy8r/Pw0U4DUvSCooe7+OsOjby9Cufo9Em2d+ zEqExqnYAS5dL2wmGHdB46rz5k5xFPAqrzozMC6+l9PhY4cQPZCfGJd0L6pGOZ2R eHr1UimG5WIApwtozHOFEBmbLrOSk0zK24A9+6RGBDpeAIoug/fH8s43dnA3pKF2 jA8MOqRY3ZsfCKHKqSsNA0P7u0sxoQleob35IsPgwpFod5RxempCCx7Q1flDLYCy lI00vgSt5jBwFiF+z9msdLLgr2fUjfffG7ip7fW0n1G12tQXqKSVt/tqrrgJFX5N Q14cHoCnOIHqxDnKwy4KZvzpTbTJzVzLiYpxxFSfvUn/c1Q/UkchPScgCTz2g1F+ QX3aWMvgmWn+z7O1aSDyj+gXmi2PA7GPefoY9iTkymGDJ4JqyFcGcHyBNKL43zWk 4fsCUkozNsK/NUCRZVYI4jRSAW+1qKW5Hbr7zHSPJ64K3yzVeLWstu7YpDlLpSbP eWuGATOblVmuIG9dkJ6vAqZX6nJCn+L4M00BCFrGPoNMX5FOggR5dH1btLL6QDIs 49kSwGc8QAQmVNHo1uqpdXfzWJrPc/6qATCJj/Qw7F9foCG5KgcXi5ZNIYHlZ9QD gIg3xiVU5ONzQigpaHZDQhtRucdAsj2ofXOKQR6hWnFUY4Rr94A= =Y6sv -----END PGP SIGNATURE----- Merge tag 'arc-6.16-rc1' of git://git.kernel.org/pub/scm/linux/kernel/git/vgupta/arc Pull ARC fixes from Vineet Gupta: - arch_atomic64_cmpxchg relaxed variant [Jason] - use of inbuilt swap in stack unwinder [Yu-Chun Lin] - use of __ASSEMBLER__ in kernel headers [Thomas Huth] * tag 'arc-6.16-rc1' of git://git.kernel.org/pub/scm/linux/kernel/git/vgupta/arc: ARC: Replace __ASSEMBLY__ with __ASSEMBLER__ in the non-uapi headers ARC: Replace __ASSEMBLY__ with __ASSEMBLER__ in uapi headers ARC: unwind: Use built-in sort swap to reduce code size and improve performance ARC: atomics: Implement arch_atomic64_cmpxchg using _relaxed
This commit is contained in:
commit
3d853391c4
@ -144,7 +144,7 @@
|
||||
#define ARC_AUX_AGU_MOD2 0x5E2
|
||||
#define ARC_AUX_AGU_MOD3 0x5E3
|
||||
|
||||
#ifndef __ASSEMBLY__
|
||||
#ifndef __ASSEMBLER__
|
||||
|
||||
#include <soc/arc/arc_aux.h>
|
||||
|
||||
|
@ -6,7 +6,7 @@
|
||||
#ifndef _ASM_ARC_ATOMIC_H
|
||||
#define _ASM_ARC_ATOMIC_H
|
||||
|
||||
#ifndef __ASSEMBLY__
|
||||
#ifndef __ASSEMBLER__
|
||||
|
||||
#include <linux/types.h>
|
||||
#include <linux/compiler.h>
|
||||
@ -31,6 +31,6 @@
|
||||
#include <asm/atomic64-arcv2.h>
|
||||
#endif
|
||||
|
||||
#endif /* !__ASSEMBLY__ */
|
||||
#endif /* !__ASSEMBLER__ */
|
||||
|
||||
#endif
|
||||
|
@ -137,12 +137,9 @@ ATOMIC64_OPS(xor, xor, xor)
|
||||
#undef ATOMIC64_OP_RETURN
|
||||
#undef ATOMIC64_OP
|
||||
|
||||
static inline s64
|
||||
arch_atomic64_cmpxchg(atomic64_t *ptr, s64 expected, s64 new)
|
||||
static inline u64 __arch_cmpxchg64_relaxed(volatile void *ptr, u64 old, u64 new)
|
||||
{
|
||||
s64 prev;
|
||||
|
||||
smp_mb();
|
||||
u64 prev;
|
||||
|
||||
__asm__ __volatile__(
|
||||
"1: llockd %0, [%1] \n"
|
||||
@ -152,14 +149,12 @@ arch_atomic64_cmpxchg(atomic64_t *ptr, s64 expected, s64 new)
|
||||
" bnz 1b \n"
|
||||
"2: \n"
|
||||
: "=&r"(prev)
|
||||
: "r"(ptr), "ir"(expected), "r"(new)
|
||||
: "cc"); /* memory clobber comes from smp_mb() */
|
||||
|
||||
smp_mb();
|
||||
: "r"(ptr), "ir"(old), "r"(new)
|
||||
: "memory", "cc");
|
||||
|
||||
return prev;
|
||||
}
|
||||
#define arch_atomic64_cmpxchg arch_atomic64_cmpxchg
|
||||
#define arch_cmpxchg64_relaxed __arch_cmpxchg64_relaxed
|
||||
|
||||
static inline s64 arch_atomic64_xchg(atomic64_t *ptr, s64 new)
|
||||
{
|
||||
|
@ -10,7 +10,7 @@
|
||||
#error only <linux/bitops.h> can be included directly
|
||||
#endif
|
||||
|
||||
#ifndef __ASSEMBLY__
|
||||
#ifndef __ASSEMBLER__
|
||||
|
||||
#include <linux/types.h>
|
||||
#include <linux/compiler.h>
|
||||
@ -192,6 +192,6 @@ static inline __attribute__ ((const)) unsigned long __ffs(unsigned long x)
|
||||
#include <asm-generic/bitops/le.h>
|
||||
#include <asm-generic/bitops/ext2-atomic-setbit.h>
|
||||
|
||||
#endif /* !__ASSEMBLY__ */
|
||||
#endif /* !__ASSEMBLER__ */
|
||||
|
||||
#endif
|
||||
|
@ -6,7 +6,7 @@
|
||||
#ifndef _ASM_ARC_BUG_H
|
||||
#define _ASM_ARC_BUG_H
|
||||
|
||||
#ifndef __ASSEMBLY__
|
||||
#ifndef __ASSEMBLER__
|
||||
|
||||
#include <asm/ptrace.h>
|
||||
|
||||
@ -29,6 +29,6 @@ void die(const char *str, struct pt_regs *regs, unsigned long address);
|
||||
|
||||
#include <asm-generic/bug.h>
|
||||
|
||||
#endif /* !__ASSEMBLY__ */
|
||||
#endif /* !__ASSEMBLER__ */
|
||||
|
||||
#endif
|
||||
|
@ -23,7 +23,7 @@
|
||||
*/
|
||||
#define ARC_UNCACHED_ADDR_SPACE 0xc0000000
|
||||
|
||||
#ifndef __ASSEMBLY__
|
||||
#ifndef __ASSEMBLER__
|
||||
|
||||
#include <linux/build_bug.h>
|
||||
|
||||
@ -65,7 +65,7 @@
|
||||
extern int ioc_enable;
|
||||
extern unsigned long perip_base, perip_end;
|
||||
|
||||
#endif /* !__ASSEMBLY__ */
|
||||
#endif /* !__ASSEMBLER__ */
|
||||
|
||||
/* Instruction cache related Auxiliary registers */
|
||||
#define ARC_REG_IC_BCR 0x77 /* Build Config reg */
|
||||
|
@ -9,7 +9,7 @@
|
||||
#ifndef _ASM_ARC_CURRENT_H
|
||||
#define _ASM_ARC_CURRENT_H
|
||||
|
||||
#ifndef __ASSEMBLY__
|
||||
#ifndef __ASSEMBLER__
|
||||
|
||||
#ifdef CONFIG_ARC_CURR_IN_REG
|
||||
|
||||
@ -20,6 +20,6 @@ register struct task_struct *curr_arc asm("gp");
|
||||
#include <asm-generic/current.h>
|
||||
#endif /* ! CONFIG_ARC_CURR_IN_REG */
|
||||
|
||||
#endif /* ! __ASSEMBLY__ */
|
||||
#endif /* ! __ASSEMBLER__ */
|
||||
|
||||
#endif /* _ASM_ARC_CURRENT_H */
|
||||
|
@ -11,7 +11,7 @@
|
||||
|
||||
#define DSP_CTRL_DISABLED_ALL 0
|
||||
|
||||
#ifdef __ASSEMBLY__
|
||||
#ifdef __ASSEMBLER__
|
||||
|
||||
/* clobbers r5 register */
|
||||
.macro DSP_EARLY_INIT
|
||||
|
@ -7,7 +7,7 @@
|
||||
#ifndef __ASM_ARC_DSP_H
|
||||
#define __ASM_ARC_DSP_H
|
||||
|
||||
#ifndef __ASSEMBLY__
|
||||
#ifndef __ASSEMBLER__
|
||||
|
||||
/*
|
||||
* DSP-related saved registers - need to be saved only when you are
|
||||
@ -24,6 +24,6 @@ struct dsp_callee_regs {
|
||||
#endif
|
||||
};
|
||||
|
||||
#endif /* !__ASSEMBLY__ */
|
||||
#endif /* !__ASSEMBLER__ */
|
||||
|
||||
#endif /* __ASM_ARC_DSP_H */
|
||||
|
@ -6,7 +6,7 @@
|
||||
#ifndef _ASM_ARC_DWARF_H
|
||||
#define _ASM_ARC_DWARF_H
|
||||
|
||||
#ifdef __ASSEMBLY__
|
||||
#ifdef __ASSEMBLER__
|
||||
|
||||
#ifdef ARC_DW2_UNWIND_AS_CFI
|
||||
|
||||
@ -38,6 +38,6 @@
|
||||
|
||||
#endif /* !ARC_DW2_UNWIND_AS_CFI */
|
||||
|
||||
#endif /* __ASSEMBLY__ */
|
||||
#endif /* __ASSEMBLER__ */
|
||||
|
||||
#endif /* _ASM_ARC_DWARF_H */
|
||||
|
@ -13,7 +13,7 @@
|
||||
#include <asm/processor.h> /* For VMALLOC_START */
|
||||
#include <asm/mmu.h>
|
||||
|
||||
#ifdef __ASSEMBLY__
|
||||
#ifdef __ASSEMBLER__
|
||||
|
||||
#ifdef CONFIG_ISA_ARCOMPACT
|
||||
#include <asm/entry-compact.h> /* ISA specific bits */
|
||||
@ -146,7 +146,7 @@
|
||||
|
||||
#endif /* CONFIG_ARC_CURR_IN_REG */
|
||||
|
||||
#else /* !__ASSEMBLY__ */
|
||||
#else /* !__ASSEMBLER__ */
|
||||
|
||||
extern void do_signal(struct pt_regs *);
|
||||
extern void do_notify_resume(struct pt_regs *);
|
||||
|
@ -50,7 +50,7 @@
|
||||
#define ISA_INIT_STATUS_BITS (STATUS_IE_MASK | __AD_ENB | \
|
||||
(ARCV2_IRQ_DEF_PRIO << 1))
|
||||
|
||||
#ifndef __ASSEMBLY__
|
||||
#ifndef __ASSEMBLER__
|
||||
|
||||
/*
|
||||
* Save IRQ state and disable IRQs
|
||||
@ -170,6 +170,6 @@ static inline void arc_softirq_clear(int irq)
|
||||
seti
|
||||
.endm
|
||||
|
||||
#endif /* __ASSEMBLY__ */
|
||||
#endif /* __ASSEMBLER__ */
|
||||
|
||||
#endif
|
||||
|
@ -40,7 +40,7 @@
|
||||
|
||||
#define ISA_INIT_STATUS_BITS STATUS_IE_MASK
|
||||
|
||||
#ifndef __ASSEMBLY__
|
||||
#ifndef __ASSEMBLER__
|
||||
|
||||
/******************************************************************
|
||||
* IRQ Control Macros
|
||||
@ -196,6 +196,6 @@ static inline int arch_irqs_disabled(void)
|
||||
flag \scratch
|
||||
.endm
|
||||
|
||||
#endif /* __ASSEMBLY__ */
|
||||
#endif /* __ASSEMBLER__ */
|
||||
|
||||
#endif
|
||||
|
@ -2,7 +2,7 @@
|
||||
#ifndef _ASM_ARC_JUMP_LABEL_H
|
||||
#define _ASM_ARC_JUMP_LABEL_H
|
||||
|
||||
#ifndef __ASSEMBLY__
|
||||
#ifndef __ASSEMBLER__
|
||||
|
||||
#include <linux/stringify.h>
|
||||
#include <linux/types.h>
|
||||
@ -68,5 +68,5 @@ struct jump_entry {
|
||||
jump_label_t key;
|
||||
};
|
||||
|
||||
#endif /* __ASSEMBLY__ */
|
||||
#endif /* __ASSEMBLER__ */
|
||||
#endif
|
||||
|
@ -12,7 +12,7 @@
|
||||
#define __ALIGN .align 4
|
||||
#define __ALIGN_STR __stringify(__ALIGN)
|
||||
|
||||
#ifdef __ASSEMBLY__
|
||||
#ifdef __ASSEMBLER__
|
||||
|
||||
.macro ST2 e, o, off
|
||||
#ifdef CONFIG_ARC_HAS_LL64
|
||||
@ -61,7 +61,7 @@
|
||||
CFI_ENDPROC ASM_NL \
|
||||
.size name, .-name
|
||||
|
||||
#else /* !__ASSEMBLY__ */
|
||||
#else /* !__ASSEMBLER__ */
|
||||
|
||||
#ifdef CONFIG_ARC_HAS_ICCM
|
||||
#define __arcfp_code __section(".text.arcfp")
|
||||
@ -75,6 +75,6 @@
|
||||
#define __arcfp_data __section(".data")
|
||||
#endif
|
||||
|
||||
#endif /* __ASSEMBLY__ */
|
||||
#endif /* __ASSEMBLER__ */
|
||||
|
||||
#endif
|
||||
|
@ -69,7 +69,7 @@
|
||||
|
||||
#define PTE_BITS_NON_RWX_IN_PD1 (PAGE_MASK_PHYS | _PAGE_CACHEABLE)
|
||||
|
||||
#ifndef __ASSEMBLY__
|
||||
#ifndef __ASSEMBLER__
|
||||
|
||||
struct mm_struct;
|
||||
extern int pae40_exist_but_not_enab(void);
|
||||
@ -100,6 +100,6 @@ static inline void mmu_setup_pgd(struct mm_struct *mm, void *pgd)
|
||||
sr \reg, [ARC_REG_PID]
|
||||
.endm
|
||||
|
||||
#endif /* !__ASSEMBLY__ */
|
||||
#endif /* !__ASSEMBLER__ */
|
||||
|
||||
#endif
|
||||
|
@ -6,7 +6,7 @@
|
||||
#ifndef _ASM_ARC_MMU_H
|
||||
#define _ASM_ARC_MMU_H
|
||||
|
||||
#ifndef __ASSEMBLY__
|
||||
#ifndef __ASSEMBLER__
|
||||
|
||||
#include <linux/threads.h> /* NR_CPUS */
|
||||
|
||||
|
@ -19,7 +19,7 @@
|
||||
|
||||
#endif /* CONFIG_ARC_HAS_PAE40 */
|
||||
|
||||
#ifndef __ASSEMBLY__
|
||||
#ifndef __ASSEMBLER__
|
||||
|
||||
#define clear_page(paddr) memset((paddr), 0, PAGE_SIZE)
|
||||
#define copy_user_page(to, from, vaddr, pg) copy_page(to, from)
|
||||
@ -136,6 +136,6 @@ static inline unsigned long virt_to_pfn(const void *kaddr)
|
||||
#include <asm-generic/memory_model.h> /* page_to_pfn, pfn_to_page */
|
||||
#include <asm-generic/getorder.h>
|
||||
|
||||
#endif /* !__ASSEMBLY__ */
|
||||
#endif /* !__ASSEMBLER__ */
|
||||
|
||||
#endif
|
||||
|
@ -75,7 +75,7 @@
|
||||
* This is to enable COW mechanism
|
||||
*/
|
||||
/* xwr */
|
||||
#ifndef __ASSEMBLY__
|
||||
#ifndef __ASSEMBLER__
|
||||
|
||||
#define pte_write(pte) (pte_val(pte) & _PAGE_WRITE)
|
||||
#define pte_dirty(pte) (pte_val(pte) & _PAGE_DIRTY)
|
||||
@ -142,6 +142,6 @@ PTE_BIT_FUNC(swp_clear_exclusive, &= ~(_PAGE_SWP_EXCLUSIVE));
|
||||
#include <asm/hugepage.h>
|
||||
#endif
|
||||
|
||||
#endif /* __ASSEMBLY__ */
|
||||
#endif /* __ASSEMBLER__ */
|
||||
|
||||
#endif
|
||||
|
@ -85,7 +85,7 @@
|
||||
|
||||
#define PTRS_PER_PTE BIT(PMD_SHIFT - PAGE_SHIFT)
|
||||
|
||||
#ifndef __ASSEMBLY__
|
||||
#ifndef __ASSEMBLER__
|
||||
|
||||
#if CONFIG_PGTABLE_LEVELS > 3
|
||||
#include <asm-generic/pgtable-nop4d.h>
|
||||
@ -181,6 +181,6 @@
|
||||
#define pmd_leaf(x) (pmd_val(x) & _PAGE_HW_SZ)
|
||||
#endif
|
||||
|
||||
#endif /* !__ASSEMBLY__ */
|
||||
#endif /* !__ASSEMBLER__ */
|
||||
|
||||
#endif
|
||||
|
@ -19,7 +19,7 @@
|
||||
*/
|
||||
#define USER_PTRS_PER_PGD (TASK_SIZE / PGDIR_SIZE)
|
||||
|
||||
#ifndef __ASSEMBLY__
|
||||
#ifndef __ASSEMBLER__
|
||||
|
||||
extern char empty_zero_page[PAGE_SIZE];
|
||||
#define ZERO_PAGE(vaddr) (virt_to_page(empty_zero_page))
|
||||
@ -29,6 +29,6 @@ extern pgd_t swapper_pg_dir[] __aligned(PAGE_SIZE);
|
||||
/* to cope with aliasing VIPT cache */
|
||||
#define HAVE_ARCH_UNMAPPED_AREA
|
||||
|
||||
#endif /* __ASSEMBLY__ */
|
||||
#endif /* __ASSEMBLER__ */
|
||||
|
||||
#endif
|
||||
|
@ -11,7 +11,7 @@
|
||||
#ifndef __ASM_ARC_PROCESSOR_H
|
||||
#define __ASM_ARC_PROCESSOR_H
|
||||
|
||||
#ifndef __ASSEMBLY__
|
||||
#ifndef __ASSEMBLER__
|
||||
|
||||
#include <asm/ptrace.h>
|
||||
#include <asm/dsp.h>
|
||||
@ -66,7 +66,7 @@ extern void start_thread(struct pt_regs * regs, unsigned long pc,
|
||||
|
||||
extern unsigned int __get_wchan(struct task_struct *p);
|
||||
|
||||
#endif /* !__ASSEMBLY__ */
|
||||
#endif /* !__ASSEMBLER__ */
|
||||
|
||||
/*
|
||||
* Default System Memory Map on ARC
|
||||
|
@ -10,7 +10,7 @@
|
||||
#include <uapi/asm/ptrace.h>
|
||||
#include <linux/compiler.h>
|
||||
|
||||
#ifndef __ASSEMBLY__
|
||||
#ifndef __ASSEMBLER__
|
||||
|
||||
typedef union {
|
||||
struct {
|
||||
@ -172,6 +172,6 @@ static inline unsigned long regs_get_register(struct pt_regs *regs,
|
||||
extern int syscall_trace_enter(struct pt_regs *);
|
||||
extern void syscall_trace_exit(struct pt_regs *);
|
||||
|
||||
#endif /* !__ASSEMBLY__ */
|
||||
#endif /* !__ASSEMBLER__ */
|
||||
|
||||
#endif /* __ASM_PTRACE_H */
|
||||
|
@ -6,7 +6,7 @@
|
||||
#ifndef _ASM_ARC_SWITCH_TO_H
|
||||
#define _ASM_ARC_SWITCH_TO_H
|
||||
|
||||
#ifndef __ASSEMBLY__
|
||||
#ifndef __ASSEMBLER__
|
||||
|
||||
#include <linux/sched.h>
|
||||
#include <asm/dsp-impl.h>
|
||||
|
@ -24,7 +24,7 @@
|
||||
#define THREAD_SIZE (PAGE_SIZE << THREAD_SIZE_ORDER)
|
||||
#define THREAD_SHIFT (PAGE_SHIFT << THREAD_SIZE_ORDER)
|
||||
|
||||
#ifndef __ASSEMBLY__
|
||||
#ifndef __ASSEMBLER__
|
||||
|
||||
#include <linux/thread_info.h>
|
||||
|
||||
@ -62,7 +62,7 @@ static inline __attribute_const__ struct thread_info *current_thread_info(void)
|
||||
return (struct thread_info *)(sp & ~(THREAD_SIZE - 1));
|
||||
}
|
||||
|
||||
#endif /* !__ASSEMBLY__ */
|
||||
#endif /* !__ASSEMBLER__ */
|
||||
|
||||
/*
|
||||
* thread information flags
|
||||
|
@ -14,7 +14,7 @@
|
||||
|
||||
#define PTRACE_GET_THREAD_AREA 25
|
||||
|
||||
#ifndef __ASSEMBLY__
|
||||
#ifndef __ASSEMBLER__
|
||||
/*
|
||||
* Userspace ABI: Register state needed by
|
||||
* -ptrace (gdbserver)
|
||||
@ -53,6 +53,6 @@ struct user_regs_arcv2 {
|
||||
unsigned long r30, r58, r59;
|
||||
};
|
||||
|
||||
#endif /* !__ASSEMBLY__ */
|
||||
#endif /* !__ASSEMBLER__ */
|
||||
|
||||
#endif /* _UAPI__ASM_ARC_PTRACE_H */
|
||||
|
@ -241,15 +241,6 @@ static int cmp_eh_frame_hdr_table_entries(const void *p1, const void *p2)
|
||||
return (e1->start > e2->start) - (e1->start < e2->start);
|
||||
}
|
||||
|
||||
static void swap_eh_frame_hdr_table_entries(void *p1, void *p2, int size)
|
||||
{
|
||||
struct eh_frame_hdr_table_entry *e1 = p1;
|
||||
struct eh_frame_hdr_table_entry *e2 = p2;
|
||||
|
||||
swap(e1->start, e2->start);
|
||||
swap(e1->fde, e2->fde);
|
||||
}
|
||||
|
||||
static void init_unwind_hdr(struct unwind_table *table,
|
||||
void *(*alloc) (unsigned long))
|
||||
{
|
||||
@ -345,7 +336,7 @@ static void init_unwind_hdr(struct unwind_table *table,
|
||||
sort(header->table,
|
||||
n,
|
||||
sizeof(*header->table),
|
||||
cmp_eh_frame_hdr_table_entries, swap_eh_frame_hdr_table_entries);
|
||||
cmp_eh_frame_hdr_table_entries, NULL);
|
||||
|
||||
table->hdrsz = hdrSize;
|
||||
smp_wmb();
|
||||
|
Loading…
Reference in New Issue
Block a user