mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2024-12-28 16:53:49 +00:00
This includes the following changes related to sparc64 for v6.13:
- Make sparc64 compilable with clang - Replace one-element array with flexible array member -----BEGIN PGP SIGNATURE----- iIoEABYIADIWIQQfqfbgobF48oKMeq81AykqDLayywUCZ0hfaRQcYW5kcmVhc0Bn YWlzbGVyLmNvbQAKCRA1AykqDLayy+1tAQCr0D3+1QdWB1HGam9yxoq2sNOeqjJ6 GLv1rjnIYL97nAEAoaiRbb2nukNWhmLcvJi7D6z9x5c/YAOd1oQuUfy7IAk= =JlvH -----END PGP SIGNATURE----- Merge tag 'sparc-for-6.13-tag1' of git://git.kernel.org/pub/scm/linux/kernel/git/alarsson/linux-sparc Pull sparc updates from Andreas Larsson: - Make sparc64 compilable with clang - Replace one-element array with flexible array member * tag 'sparc-for-6.13-tag1' of git://git.kernel.org/pub/scm/linux/kernel/git/alarsson/linux-sparc: sparc/vdso: Add helper function for 64-bit right shift on 32-bit target sparc: Replace one-element array with flexible array member sparc/build: Add SPARC target flags for compiling with clang sparc/build: Put usage of -fcall-used* flags behind cc-option
This commit is contained in:
commit
fbb3c22f90
@ -179,6 +179,9 @@ yet. Bug reports are always welcome at the issue tracker below!
|
||||
* - s390
|
||||
- Maintained
|
||||
- ``LLVM=1`` (LLVM >= 18.1.0), ``CC=clang`` (LLVM < 18.1.0)
|
||||
* - sparc (sparc64 only)
|
||||
- Maintained
|
||||
- ``CC=clang LLVM_IAS=0`` (LLVM >= 20)
|
||||
* - um (User Mode)
|
||||
- Maintained
|
||||
- ``LLVM=1``
|
||||
|
@ -29,7 +29,7 @@ UTS_MACHINE := sparc
|
||||
# versions of gcc. Some gcc versions won't pass -Av8 to binutils when you
|
||||
# give -mcpu=v8. This silently worked with older bintutils versions but
|
||||
# does not any more.
|
||||
KBUILD_CFLAGS += -m32 -mcpu=v8 -pipe -mno-fpu -fcall-used-g5 -fcall-used-g7
|
||||
KBUILD_CFLAGS += -m32 -mcpu=v8 -pipe -mno-fpu $(call cc-option,-fcall-used-g5) $(call cc-option,-fcall-used-g7)
|
||||
KBUILD_CFLAGS += -Wa,-Av8
|
||||
|
||||
KBUILD_AFLAGS += -m32 -Wa,-Av8
|
||||
@ -45,7 +45,7 @@ export BITS := 64
|
||||
UTS_MACHINE := sparc64
|
||||
|
||||
KBUILD_CFLAGS += -m64 -pipe -mno-fpu -mcpu=ultrasparc -mcmodel=medlow
|
||||
KBUILD_CFLAGS += -ffixed-g4 -ffixed-g5 -fcall-used-g7 -Wno-sign-compare
|
||||
KBUILD_CFLAGS += -ffixed-g4 -ffixed-g5 $(call cc-option,-fcall-used-g7) -Wno-sign-compare
|
||||
KBUILD_CFLAGS += -Wa,--undeclared-regs
|
||||
KBUILD_CFLAGS += $(call cc-option,-mtune=ultrasparc3)
|
||||
KBUILD_AFLAGS += -m64 -mcpu=ultrasparc -Wa,--undeclared-regs
|
||||
|
@ -17,7 +17,7 @@ struct hvtramp_descr {
|
||||
__u64 fault_info_va;
|
||||
__u64 fault_info_pa;
|
||||
__u64 thread_reg;
|
||||
struct hvtramp_mapping maps[1];
|
||||
struct hvtramp_mapping maps[];
|
||||
};
|
||||
|
||||
void hv_cpu_startup(unsigned long hvdescr_pa);
|
||||
|
@ -297,9 +297,7 @@ static void ldom_startcpu_cpuid(unsigned int cpu, unsigned long thread_reg,
|
||||
unsigned long hv_err;
|
||||
int i;
|
||||
|
||||
hdesc = kzalloc(sizeof(*hdesc) +
|
||||
(sizeof(struct hvtramp_mapping) *
|
||||
num_kernel_image_mappings - 1),
|
||||
hdesc = kzalloc(struct_size(hdesc, maps, num_kernel_image_mappings),
|
||||
GFP_KERNEL);
|
||||
if (!hdesc) {
|
||||
printk(KERN_ERR "ldom_startcpu_cpuid: Cannot allocate "
|
||||
|
@ -46,7 +46,7 @@ CFL := $(PROFILING) -mcmodel=medlow -fPIC -O2 -fasynchronous-unwind-tables -m64
|
||||
-fno-omit-frame-pointer -foptimize-sibling-calls \
|
||||
-DDISABLE_BRANCH_PROFILING -DBUILD_VDSO
|
||||
|
||||
SPARC_REG_CFLAGS = -ffixed-g4 -ffixed-g5 -fcall-used-g5 -fcall-used-g7
|
||||
SPARC_REG_CFLAGS = -ffixed-g4 -ffixed-g5 $(call cc-option,-fcall-used-g5) $(call cc-option,-fcall-used-g7)
|
||||
|
||||
$(vobjs): KBUILD_CFLAGS := $(filter-out $(RANDSTRUCT_CFLAGS) $(GCC_PLUGINS_CFLAGS) $(SPARC_REG_CFLAGS),$(KBUILD_CFLAGS)) $(CFL)
|
||||
|
||||
|
@ -86,6 +86,11 @@ notrace static long vdso_fallback_gettimeofday(struct __kernel_old_timeval *tv,
|
||||
}
|
||||
|
||||
#ifdef CONFIG_SPARC64
|
||||
notrace static __always_inline u64 __shr64(u64 val, int amt)
|
||||
{
|
||||
return val >> amt;
|
||||
}
|
||||
|
||||
notrace static __always_inline u64 vread_tick(void)
|
||||
{
|
||||
u64 ret;
|
||||
@ -102,6 +107,21 @@ notrace static __always_inline u64 vread_tick_stick(void)
|
||||
return ret;
|
||||
}
|
||||
#else
|
||||
notrace static __always_inline u64 __shr64(u64 val, int amt)
|
||||
{
|
||||
u64 ret;
|
||||
|
||||
__asm__ __volatile__("sllx %H1, 32, %%g1\n\t"
|
||||
"srl %L1, 0, %L1\n\t"
|
||||
"or %%g1, %L1, %%g1\n\t"
|
||||
"srlx %%g1, %2, %L0\n\t"
|
||||
"srlx %L0, 32, %H0"
|
||||
: "=r" (ret)
|
||||
: "r" (val), "r" (amt)
|
||||
: "g1");
|
||||
return ret;
|
||||
}
|
||||
|
||||
notrace static __always_inline u64 vread_tick(void)
|
||||
{
|
||||
register unsigned long long ret asm("o4");
|
||||
@ -154,7 +174,7 @@ notrace static __always_inline int do_realtime(struct vvar_data *vvar,
|
||||
ts->tv_sec = vvar->wall_time_sec;
|
||||
ns = vvar->wall_time_snsec;
|
||||
ns += vgetsns(vvar);
|
||||
ns >>= vvar->clock.shift;
|
||||
ns = __shr64(ns, vvar->clock.shift);
|
||||
} while (unlikely(vvar_read_retry(vvar, seq)));
|
||||
|
||||
ts->tv_sec += __iter_div_u64_rem(ns, NSEC_PER_SEC, &ns);
|
||||
@ -174,7 +194,7 @@ notrace static __always_inline int do_realtime_stick(struct vvar_data *vvar,
|
||||
ts->tv_sec = vvar->wall_time_sec;
|
||||
ns = vvar->wall_time_snsec;
|
||||
ns += vgetsns_stick(vvar);
|
||||
ns >>= vvar->clock.shift;
|
||||
ns = __shr64(ns, vvar->clock.shift);
|
||||
} while (unlikely(vvar_read_retry(vvar, seq)));
|
||||
|
||||
ts->tv_sec += __iter_div_u64_rem(ns, NSEC_PER_SEC, &ns);
|
||||
@ -194,7 +214,7 @@ notrace static __always_inline int do_monotonic(struct vvar_data *vvar,
|
||||
ts->tv_sec = vvar->monotonic_time_sec;
|
||||
ns = vvar->monotonic_time_snsec;
|
||||
ns += vgetsns(vvar);
|
||||
ns >>= vvar->clock.shift;
|
||||
ns = __shr64(ns, vvar->clock.shift);
|
||||
} while (unlikely(vvar_read_retry(vvar, seq)));
|
||||
|
||||
ts->tv_sec += __iter_div_u64_rem(ns, NSEC_PER_SEC, &ns);
|
||||
@ -214,7 +234,7 @@ notrace static __always_inline int do_monotonic_stick(struct vvar_data *vvar,
|
||||
ts->tv_sec = vvar->monotonic_time_sec;
|
||||
ns = vvar->monotonic_time_snsec;
|
||||
ns += vgetsns_stick(vvar);
|
||||
ns >>= vvar->clock.shift;
|
||||
ns = __shr64(ns, vvar->clock.shift);
|
||||
} while (unlikely(vvar_read_retry(vvar, seq)));
|
||||
|
||||
ts->tv_sec += __iter_div_u64_rem(ns, NSEC_PER_SEC, &ns);
|
||||
|
@ -10,6 +10,7 @@ CLANG_TARGET_FLAGS_mips := mipsel-linux-gnu
|
||||
CLANG_TARGET_FLAGS_powerpc := powerpc64le-linux-gnu
|
||||
CLANG_TARGET_FLAGS_riscv := riscv64-linux-gnu
|
||||
CLANG_TARGET_FLAGS_s390 := s390x-linux-gnu
|
||||
CLANG_TARGET_FLAGS_sparc := sparc64-linux-gnu
|
||||
CLANG_TARGET_FLAGS_x86 := x86_64-linux-gnu
|
||||
CLANG_TARGET_FLAGS_um := $(CLANG_TARGET_FLAGS_$(SUBARCH))
|
||||
CLANG_TARGET_FLAGS := $(CLANG_TARGET_FLAGS_$(SRCARCH))
|
||||
|
Loading…
Reference in New Issue
Block a user