You've already forked linux-apfs
mirror of
https://github.com/linux-apfs/linux-apfs.git
synced 2026-05-01 15:00:59 -07:00
Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/s390/linux
Pull s390 updates from Martin Schwidefsky:
"This patch set contains the main portion of the changes for 3.18 in
regard to the s390 architecture. It is a bit bigger than usual,
mainly because of a new driver and the vector extension patches.
The interesting bits are:
- Quite a bit of work on the tracing front. Uprobes is enabled and
the ftrace code is reworked to get some of the lost performance
back if CONFIG_FTRACE is enabled.
- To improve boot time with CONFIG_DEBIG_PAGEALLOC, support for the
IPTE range facility is added.
- The rwlock code is re-factored to improve writer fairness and to be
able to use the interlocked-access instructions.
- The kernel part for the support of the vector extension is added.
- The device driver to access the CD/DVD on the HMC is added, this
will hopefully come in handy to improve the installation process.
- Add support for control-unit initiated reconfiguration.
- The crypto device driver is enhanced to enable the additional AP
domains and to allow the new crypto hardware to be used.
- Bug fixes"
* 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/s390/linux: (39 commits)
s390/ftrace: simplify enabling/disabling of ftrace_graph_caller
s390/ftrace: remove 31 bit ftrace support
s390/kdump: add support for vector extension
s390/disassembler: add vector instructions
s390: add support for vector extension
s390/zcrypt: Toleration of new crypto hardware
s390/idle: consolidate idle functions and definitions
s390/nohz: use a per-cpu flag for arch_needs_cpu
s390/vtime: do not reset idle data on CPU hotplug
s390/dasd: add support for control unit initiated reconfiguration
s390/dasd: fix infinite loop during format
s390/mm: make use of ipte range facility
s390/setup: correct 4-level kernel page table detection
s390/topology: call set_sched_topology early
s390/uprobes: architecture backend for uprobes
s390/uprobes: common library for kprobes and uprobes
s390/rwlock: use the interlocked-access facility 1 instructions
s390/rwlock: improve writer fairness
s390/rwlock: remove interrupt-enabling rwlock variant.
s390/mm: remove change bit override support
...
This commit is contained in:
@@ -300,6 +300,7 @@ architectures:
|
||||
- arm
|
||||
- ppc
|
||||
- mips
|
||||
- s390
|
||||
|
||||
3. Configuring Kprobes
|
||||
|
||||
|
||||
+8
-3
@@ -58,6 +58,9 @@ config NO_IOPORT_MAP
|
||||
config PCI_QUIRKS
|
||||
def_bool n
|
||||
|
||||
config ARCH_SUPPORTS_UPROBES
|
||||
def_bool 64BIT
|
||||
|
||||
config S390
|
||||
def_bool y
|
||||
select ARCH_HAS_ATOMIC64_DEC_IF_POSITIVE
|
||||
@@ -97,6 +100,7 @@ config S390
|
||||
select ARCH_WANT_IPC_PARSE_VERSION
|
||||
select BUILDTIME_EXTABLE_SORT
|
||||
select CLONE_BACKWARDS2
|
||||
select DYNAMIC_FTRACE if FUNCTION_TRACER
|
||||
select GENERIC_CLOCKEVENTS
|
||||
select GENERIC_CPU_DEVICES if !SMP
|
||||
select GENERIC_FIND_FIRST_BIT
|
||||
@@ -113,10 +117,11 @@ config S390
|
||||
select HAVE_CMPXCHG_LOCAL
|
||||
select HAVE_C_RECORDMCOUNT
|
||||
select HAVE_DEBUG_KMEMLEAK
|
||||
select HAVE_DYNAMIC_FTRACE
|
||||
select HAVE_DYNAMIC_FTRACE if 64BIT
|
||||
select HAVE_DYNAMIC_FTRACE_WITH_REGS if 64BIT
|
||||
select HAVE_FTRACE_MCOUNT_RECORD
|
||||
select HAVE_FUNCTION_GRAPH_TRACER
|
||||
select HAVE_FUNCTION_TRACER
|
||||
select HAVE_FUNCTION_GRAPH_TRACER if 64BIT
|
||||
select HAVE_FUNCTION_TRACER if 64BIT
|
||||
select HAVE_FUTEX_CMPXCHG if FUTEX
|
||||
select HAVE_KERNEL_BZIP2
|
||||
select HAVE_KERNEL_GZIP
|
||||
|
||||
+10
-7
@@ -35,13 +35,16 @@ endif
|
||||
|
||||
export LD_BFD
|
||||
|
||||
cflags-$(CONFIG_MARCH_G5) += -march=g5
|
||||
cflags-$(CONFIG_MARCH_Z900) += -march=z900
|
||||
cflags-$(CONFIG_MARCH_Z990) += -march=z990
|
||||
cflags-$(CONFIG_MARCH_Z9_109) += -march=z9-109
|
||||
cflags-$(CONFIG_MARCH_Z10) += -march=z10
|
||||
cflags-$(CONFIG_MARCH_Z196) += -march=z196
|
||||
cflags-$(CONFIG_MARCH_ZEC12) += -march=zEC12
|
||||
mflags-$(CONFIG_MARCH_G5) := -march=g5
|
||||
mflags-$(CONFIG_MARCH_Z900) := -march=z900
|
||||
mflags-$(CONFIG_MARCH_Z990) := -march=z990
|
||||
mflags-$(CONFIG_MARCH_Z9_109) := -march=z9-109
|
||||
mflags-$(CONFIG_MARCH_Z10) := -march=z10
|
||||
mflags-$(CONFIG_MARCH_Z196) := -march=z196
|
||||
mflags-$(CONFIG_MARCH_ZEC12) := -march=zEC12
|
||||
|
||||
aflags-y += $(mflags-y)
|
||||
cflags-y += $(mflags-y)
|
||||
|
||||
cflags-$(CONFIG_MARCH_G5_TUNE) += -mtune=g5
|
||||
cflags-$(CONFIG_MARCH_Z900_TUNE) += -mtune=z900
|
||||
|
||||
@@ -15,11 +15,13 @@
|
||||
|
||||
#ifdef CONFIG_HAVE_MARCH_Z196_FEATURES
|
||||
/* Fast-BCR without checkpoint synchronization */
|
||||
#define mb() do { asm volatile("bcr 14,0" : : : "memory"); } while (0)
|
||||
#define __ASM_BARRIER "bcr 14,0\n"
|
||||
#else
|
||||
#define mb() do { asm volatile("bcr 15,0" : : : "memory"); } while (0)
|
||||
#define __ASM_BARRIER "bcr 15,0\n"
|
||||
#endif
|
||||
|
||||
#define mb() do { asm volatile(__ASM_BARRIER : : : "memory"); } while (0)
|
||||
|
||||
#define rmb() mb()
|
||||
#define wmb() mb()
|
||||
#define read_barrier_depends() do { } while(0)
|
||||
|
||||
@@ -8,8 +8,6 @@
|
||||
#define _S390_CPUTIME_H
|
||||
|
||||
#include <linux/types.h>
|
||||
#include <linux/percpu.h>
|
||||
#include <linux/spinlock.h>
|
||||
#include <asm/div64.h>
|
||||
|
||||
|
||||
@@ -167,28 +165,8 @@ static inline clock_t cputime64_to_clock_t(cputime64_t cputime)
|
||||
return clock;
|
||||
}
|
||||
|
||||
struct s390_idle_data {
|
||||
int nohz_delay;
|
||||
unsigned int sequence;
|
||||
unsigned long long idle_count;
|
||||
unsigned long long idle_time;
|
||||
unsigned long long clock_idle_enter;
|
||||
unsigned long long clock_idle_exit;
|
||||
unsigned long long timer_idle_enter;
|
||||
unsigned long long timer_idle_exit;
|
||||
};
|
||||
cputime64_t arch_cpu_idle_time(int cpu);
|
||||
|
||||
DECLARE_PER_CPU(struct s390_idle_data, s390_idle);
|
||||
|
||||
cputime64_t s390_get_idle_time(int cpu);
|
||||
|
||||
#define arch_idle_time(cpu) s390_get_idle_time(cpu)
|
||||
|
||||
static inline int s390_nohz_delay(int cpu)
|
||||
{
|
||||
return __get_cpu_var(s390_idle).nohz_delay != 0;
|
||||
}
|
||||
|
||||
#define arch_needs_cpu(cpu) s390_nohz_delay(cpu)
|
||||
#define arch_idle_time(cpu) arch_cpu_idle_time(cpu)
|
||||
|
||||
#endif /* _S390_CPUTIME_H */
|
||||
|
||||
@@ -13,12 +13,13 @@
|
||||
#define OPERAND_FPR 0x2 /* Operand printed as %fx */
|
||||
#define OPERAND_AR 0x4 /* Operand printed as %ax */
|
||||
#define OPERAND_CR 0x8 /* Operand printed as %cx */
|
||||
#define OPERAND_DISP 0x10 /* Operand printed as displacement */
|
||||
#define OPERAND_BASE 0x20 /* Operand printed as base register */
|
||||
#define OPERAND_INDEX 0x40 /* Operand printed as index register */
|
||||
#define OPERAND_PCREL 0x80 /* Operand printed as pc-relative symbol */
|
||||
#define OPERAND_SIGNED 0x100 /* Operand printed as signed value */
|
||||
#define OPERAND_LENGTH 0x200 /* Operand printed as length (+1) */
|
||||
#define OPERAND_VR 0x10 /* Operand printed as %vx */
|
||||
#define OPERAND_DISP 0x20 /* Operand printed as displacement */
|
||||
#define OPERAND_BASE 0x40 /* Operand printed as base register */
|
||||
#define OPERAND_INDEX 0x80 /* Operand printed as index register */
|
||||
#define OPERAND_PCREL 0x100 /* Operand printed as pc-relative symbol */
|
||||
#define OPERAND_SIGNED 0x200 /* Operand printed as signed value */
|
||||
#define OPERAND_LENGTH 0x400 /* Operand printed as length (+1) */
|
||||
|
||||
|
||||
struct s390_operand {
|
||||
|
||||
@@ -102,6 +102,7 @@
|
||||
#define HWCAP_S390_ETF3EH 256
|
||||
#define HWCAP_S390_HIGH_GPRS 512
|
||||
#define HWCAP_S390_TE 1024
|
||||
#define HWCAP_S390_VXRS 2048
|
||||
|
||||
/*
|
||||
* These are used to set parameters in the core dumps.
|
||||
@@ -225,6 +226,6 @@ int arch_setup_additional_pages(struct linux_binprm *, int);
|
||||
extern unsigned long arch_randomize_brk(struct mm_struct *mm);
|
||||
#define arch_randomize_brk arch_randomize_brk
|
||||
|
||||
void *fill_cpu_elf_notes(void *ptr, struct save_area *sa);
|
||||
void *fill_cpu_elf_notes(void *ptr, struct save_area *sa, __vector128 *vxrs);
|
||||
|
||||
#endif
|
||||
|
||||
@@ -4,6 +4,7 @@
|
||||
#ifndef __ASSEMBLY__
|
||||
|
||||
extern void _mcount(void);
|
||||
extern char ftrace_graph_caller_end;
|
||||
|
||||
struct dyn_arch_ftrace { };
|
||||
|
||||
@@ -17,10 +18,8 @@ static inline unsigned long ftrace_call_adjust(unsigned long addr)
|
||||
|
||||
#endif /* __ASSEMBLY__ */
|
||||
|
||||
#ifdef CONFIG_64BIT
|
||||
#define MCOUNT_INSN_SIZE 12
|
||||
#else
|
||||
#define MCOUNT_INSN_SIZE 22
|
||||
#endif
|
||||
#define MCOUNT_INSN_SIZE 18
|
||||
|
||||
#define ARCH_SUPPORTS_FTRACE_OPS 1
|
||||
|
||||
#endif /* _ASM_S390_FTRACE_H */
|
||||
|
||||
@@ -0,0 +1,26 @@
|
||||
/*
|
||||
* Copyright IBM Corp. 2014
|
||||
*
|
||||
* Author: Martin Schwidefsky <schwidefsky@de.ibm.com>
|
||||
*/
|
||||
|
||||
#ifndef _S390_IDLE_H
|
||||
#define _S390_IDLE_H
|
||||
|
||||
#include <linux/types.h>
|
||||
#include <linux/device.h>
|
||||
|
||||
struct s390_idle_data {
|
||||
unsigned int sequence;
|
||||
unsigned long long idle_count;
|
||||
unsigned long long idle_time;
|
||||
unsigned long long clock_idle_enter;
|
||||
unsigned long long clock_idle_exit;
|
||||
unsigned long long timer_idle_enter;
|
||||
unsigned long long timer_idle_exit;
|
||||
};
|
||||
|
||||
extern struct device_attribute dev_attr_idle_count;
|
||||
extern struct device_attribute dev_attr_idle_time_us;
|
||||
|
||||
#endif /* _S390_IDLE_H */
|
||||
@@ -89,12 +89,12 @@ extern u32 ipl_flags;
|
||||
extern u32 dump_prefix_page;
|
||||
|
||||
struct dump_save_areas {
|
||||
struct save_area **areas;
|
||||
struct save_area_ext **areas;
|
||||
int count;
|
||||
};
|
||||
|
||||
extern struct dump_save_areas dump_save_areas;
|
||||
struct save_area *dump_save_area_create(int cpu);
|
||||
struct save_area_ext *dump_save_area_create(int cpu);
|
||||
|
||||
extern void do_reipl(void);
|
||||
extern void do_halt(void);
|
||||
|
||||
@@ -51,6 +51,7 @@ enum interruption_class {
|
||||
IRQEXT_CMS,
|
||||
IRQEXT_CMC,
|
||||
IRQEXT_CMR,
|
||||
IRQEXT_FTP,
|
||||
IRQIO_CIO,
|
||||
IRQIO_QAI,
|
||||
IRQIO_DAS,
|
||||
|
||||
@@ -84,6 +84,10 @@ int kprobe_fault_handler(struct pt_regs *regs, int trapnr);
|
||||
int kprobe_exceptions_notify(struct notifier_block *self,
|
||||
unsigned long val, void *data);
|
||||
|
||||
int probe_is_prohibited_opcode(u16 *insn);
|
||||
int probe_get_fixup_type(u16 *insn);
|
||||
int probe_is_insn_relative_long(u16 *insn);
|
||||
|
||||
#define flush_insn_slot(p) do { } while (0)
|
||||
|
||||
#endif /* _ASM_S390_KPROBES_H */
|
||||
|
||||
@@ -11,6 +11,7 @@
|
||||
#include <linux/types.h>
|
||||
#include <asm/ptrace.h>
|
||||
#include <asm/cpu.h>
|
||||
#include <asm/types.h>
|
||||
|
||||
#ifdef CONFIG_32BIT
|
||||
|
||||
@@ -31,6 +32,11 @@ struct save_area {
|
||||
u32 ctrl_regs[16];
|
||||
} __packed;
|
||||
|
||||
struct save_area_ext {
|
||||
struct save_area sa;
|
||||
__vector128 vx_regs[32];
|
||||
};
|
||||
|
||||
struct _lowcore {
|
||||
psw_t restart_psw; /* 0x0000 */
|
||||
psw_t restart_old_psw; /* 0x0008 */
|
||||
@@ -183,6 +189,11 @@ struct save_area {
|
||||
u64 ctrl_regs[16];
|
||||
} __packed;
|
||||
|
||||
struct save_area_ext {
|
||||
struct save_area sa;
|
||||
__vector128 vx_regs[32];
|
||||
};
|
||||
|
||||
struct _lowcore {
|
||||
__u8 pad_0x0000[0x0014-0x0000]; /* 0x0000 */
|
||||
__u32 ipl_parmblock_ptr; /* 0x0014 */
|
||||
@@ -310,7 +321,10 @@ struct _lowcore {
|
||||
|
||||
/* Extended facility list */
|
||||
__u64 stfle_fac_list[32]; /* 0x0f00 */
|
||||
__u8 pad_0x1000[0x11b8-0x1000]; /* 0x1000 */
|
||||
__u8 pad_0x1000[0x11b0-0x1000]; /* 0x1000 */
|
||||
|
||||
/* Pointer to vector register save area */
|
||||
__u64 vector_save_area_addr; /* 0x11b0 */
|
||||
|
||||
/* 64 bit extparam used for pfault/diag 250: defined by architecture */
|
||||
__u64 ext_params2; /* 0x11B8 */
|
||||
@@ -334,9 +348,10 @@ struct _lowcore {
|
||||
|
||||
/* Transaction abort diagnostic block */
|
||||
__u8 pgm_tdb[256]; /* 0x1800 */
|
||||
__u8 pad_0x1900[0x1c00-0x1900]; /* 0x1900 */
|
||||
|
||||
/* align to the top of the prefix area */
|
||||
__u8 pad_0x1900[0x2000-0x1900]; /* 0x1900 */
|
||||
/* Software defined save area for vector registers */
|
||||
__u8 vector_save_area[1024]; /* 0x1c00 */
|
||||
} __packed;
|
||||
|
||||
#endif /* CONFIG_32BIT */
|
||||
|
||||
@@ -38,7 +38,7 @@ struct mci {
|
||||
__u32 pm : 1; /* 22 psw program mask and cc validity */
|
||||
__u32 ia : 1; /* 23 psw instruction address validity */
|
||||
__u32 fa : 1; /* 24 failing storage address validity */
|
||||
__u32 : 1; /* 25 */
|
||||
__u32 vr : 1; /* 25 vector register validity */
|
||||
__u32 ec : 1; /* 26 external damage code validity */
|
||||
__u32 fp : 1; /* 27 floating point register validity */
|
||||
__u32 gr : 1; /* 28 general register validity */
|
||||
|
||||
@@ -217,7 +217,6 @@ extern unsigned long MODULES_END;
|
||||
*/
|
||||
|
||||
/* Hardware bits in the page table entry */
|
||||
#define _PAGE_CO 0x100 /* HW Change-bit override */
|
||||
#define _PAGE_PROTECT 0x200 /* HW read-only bit */
|
||||
#define _PAGE_INVALID 0x400 /* HW invalid bit */
|
||||
#define _PAGE_LARGE 0x800 /* Bit to mark a large pte */
|
||||
@@ -234,8 +233,8 @@ extern unsigned long MODULES_END;
|
||||
#define __HAVE_ARCH_PTE_SPECIAL
|
||||
|
||||
/* Set of bits not changed in pte_modify */
|
||||
#define _PAGE_CHG_MASK (PAGE_MASK | _PAGE_SPECIAL | _PAGE_CO | \
|
||||
_PAGE_DIRTY | _PAGE_YOUNG)
|
||||
#define _PAGE_CHG_MASK (PAGE_MASK | _PAGE_SPECIAL | _PAGE_DIRTY | \
|
||||
_PAGE_YOUNG)
|
||||
|
||||
/*
|
||||
* handle_pte_fault uses pte_present, pte_none and pte_file to find out the
|
||||
@@ -354,7 +353,6 @@ extern unsigned long MODULES_END;
|
||||
|
||||
#define _REGION3_ENTRY_LARGE 0x400 /* RTTE-format control, large page */
|
||||
#define _REGION3_ENTRY_RO 0x200 /* page protection bit */
|
||||
#define _REGION3_ENTRY_CO 0x100 /* change-recording override */
|
||||
|
||||
/* Bits in the segment table entry */
|
||||
#define _SEGMENT_ENTRY_BITS 0xfffffffffffffe33UL
|
||||
@@ -371,7 +369,6 @@ extern unsigned long MODULES_END;
|
||||
#define _SEGMENT_ENTRY_YOUNG 0x1000 /* SW segment young bit */
|
||||
#define _SEGMENT_ENTRY_SPLIT 0x0800 /* THP splitting bit */
|
||||
#define _SEGMENT_ENTRY_LARGE 0x0400 /* STE-format control, large page */
|
||||
#define _SEGMENT_ENTRY_CO 0x0100 /* change-recording override */
|
||||
#define _SEGMENT_ENTRY_READ 0x0002 /* SW segment read bit */
|
||||
#define _SEGMENT_ENTRY_WRITE 0x0001 /* SW segment write bit */
|
||||
|
||||
@@ -873,8 +870,6 @@ static inline void set_pte_at(struct mm_struct *mm, unsigned long addr,
|
||||
pgste = pgste_set_pte(ptep, pgste, entry);
|
||||
pgste_set_unlock(ptep, pgste);
|
||||
} else {
|
||||
if (!(pte_val(entry) & _PAGE_INVALID) && MACHINE_HAS_EDAT1)
|
||||
pte_val(entry) |= _PAGE_CO;
|
||||
*ptep = entry;
|
||||
}
|
||||
}
|
||||
@@ -1044,6 +1039,22 @@ static inline void __ptep_ipte_local(unsigned long address, pte_t *ptep)
|
||||
: "=m" (*ptep) : "m" (*ptep), "a" (pto), "a" (address));
|
||||
}
|
||||
|
||||
static inline void __ptep_ipte_range(unsigned long address, int nr, pte_t *ptep)
|
||||
{
|
||||
unsigned long pto = (unsigned long) ptep;
|
||||
|
||||
#ifndef CONFIG_64BIT
|
||||
/* pto in ESA mode must point to the start of the segment table */
|
||||
pto &= 0x7ffffc00;
|
||||
#endif
|
||||
/* Invalidate a range of ptes + global TLB flush of the ptes */
|
||||
do {
|
||||
asm volatile(
|
||||
" .insn rrf,0xb2210000,%2,%0,%1,0"
|
||||
: "+a" (address), "+a" (nr) : "a" (pto) : "memory");
|
||||
} while (nr != 255);
|
||||
}
|
||||
|
||||
static inline void ptep_flush_direct(struct mm_struct *mm,
|
||||
unsigned long address, pte_t *ptep)
|
||||
{
|
||||
|
||||
@@ -13,9 +13,11 @@
|
||||
|
||||
#define CIF_MCCK_PENDING 0 /* machine check handling is pending */
|
||||
#define CIF_ASCE 1 /* user asce needs fixup / uaccess */
|
||||
#define CIF_NOHZ_DELAY 2 /* delay HZ disable for a tick */
|
||||
|
||||
#define _CIF_MCCK_PENDING (1<<CIF_MCCK_PENDING)
|
||||
#define _CIF_ASCE (1<<CIF_ASCE)
|
||||
#define _CIF_NOHZ_DELAY (1<<CIF_NOHZ_DELAY)
|
||||
|
||||
|
||||
#ifndef __ASSEMBLY__
|
||||
@@ -43,6 +45,8 @@ static inline int test_cpu_flag(int flag)
|
||||
return !!(S390_lowcore.cpu_flags & (1U << flag));
|
||||
}
|
||||
|
||||
#define arch_needs_cpu() test_cpu_flag(CIF_NOHZ_DELAY)
|
||||
|
||||
/*
|
||||
* Default implementation of macro that returns current
|
||||
* instruction pointer ("program counter").
|
||||
@@ -113,6 +117,7 @@ struct thread_struct {
|
||||
int ri_signum;
|
||||
#ifdef CONFIG_64BIT
|
||||
unsigned char trap_tdb[256]; /* Transaction abort diagnose block */
|
||||
__vector128 *vxrs; /* Vector register save area */
|
||||
#endif
|
||||
};
|
||||
|
||||
@@ -285,7 +290,12 @@ static inline unsigned long __rewind_psw(psw_t psw, unsigned long ilc)
|
||||
return (psw.addr - ilc) & mask;
|
||||
#endif
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* Function to stop a processor until the next interrupt occurs
|
||||
*/
|
||||
void enabled_wait(void);
|
||||
|
||||
/*
|
||||
* Function to drop a processor into disabled wait state
|
||||
*/
|
||||
|
||||
@@ -161,6 +161,12 @@ static inline long regs_return_value(struct pt_regs *regs)
|
||||
return regs->gprs[2];
|
||||
}
|
||||
|
||||
static inline void instruction_pointer_set(struct pt_regs *regs,
|
||||
unsigned long val)
|
||||
{
|
||||
regs->psw.addr = val | PSW_ADDR_AMODE;
|
||||
}
|
||||
|
||||
int regs_query_register_offset(const char *name);
|
||||
const char *regs_query_register_name(unsigned int offset);
|
||||
unsigned long regs_get_register(struct pt_regs *regs, unsigned int offset);
|
||||
|
||||
@@ -55,8 +55,8 @@ extern void detect_memory_memblock(void);
|
||||
#define MACHINE_FLAG_LPP (1UL << 13)
|
||||
#define MACHINE_FLAG_TOPOLOGY (1UL << 14)
|
||||
#define MACHINE_FLAG_TE (1UL << 15)
|
||||
#define MACHINE_FLAG_RRBM (1UL << 16)
|
||||
#define MACHINE_FLAG_TLB_LC (1UL << 17)
|
||||
#define MACHINE_FLAG_VX (1UL << 18)
|
||||
|
||||
#define MACHINE_IS_VM (S390_lowcore.machine_flags & MACHINE_FLAG_VM)
|
||||
#define MACHINE_IS_KVM (S390_lowcore.machine_flags & MACHINE_FLAG_KVM)
|
||||
@@ -78,8 +78,8 @@ extern void detect_memory_memblock(void);
|
||||
#define MACHINE_HAS_LPP (0)
|
||||
#define MACHINE_HAS_TOPOLOGY (0)
|
||||
#define MACHINE_HAS_TE (0)
|
||||
#define MACHINE_HAS_RRBM (0)
|
||||
#define MACHINE_HAS_TLB_LC (0)
|
||||
#define MACHINE_HAS_VX (0)
|
||||
#else /* CONFIG_64BIT */
|
||||
#define MACHINE_HAS_IEEE (1)
|
||||
#define MACHINE_HAS_CSP (1)
|
||||
@@ -91,8 +91,8 @@ extern void detect_memory_memblock(void);
|
||||
#define MACHINE_HAS_LPP (S390_lowcore.machine_flags & MACHINE_FLAG_LPP)
|
||||
#define MACHINE_HAS_TOPOLOGY (S390_lowcore.machine_flags & MACHINE_FLAG_TOPOLOGY)
|
||||
#define MACHINE_HAS_TE (S390_lowcore.machine_flags & MACHINE_FLAG_TE)
|
||||
#define MACHINE_HAS_RRBM (S390_lowcore.machine_flags & MACHINE_FLAG_RRBM)
|
||||
#define MACHINE_HAS_TLB_LC (S390_lowcore.machine_flags & MACHINE_FLAG_TLB_LC)
|
||||
#define MACHINE_HAS_VX (S390_lowcore.machine_flags & MACHINE_FLAG_VX)
|
||||
#endif /* CONFIG_64BIT */
|
||||
|
||||
/*
|
||||
|
||||
@@ -15,6 +15,7 @@
|
||||
#define SIGP_SET_ARCHITECTURE 18
|
||||
#define SIGP_COND_EMERGENCY_SIGNAL 19
|
||||
#define SIGP_SENSE_RUNNING 21
|
||||
#define SIGP_STORE_ADDITIONAL_STATUS 23
|
||||
|
||||
/* SIGP condition codes */
|
||||
#define SIGP_CC_ORDER_CODE_ACCEPTED 0
|
||||
@@ -33,9 +34,10 @@
|
||||
|
||||
#ifndef __ASSEMBLY__
|
||||
|
||||
static inline int __pcpu_sigp(u16 addr, u8 order, u32 parm, u32 *status)
|
||||
static inline int __pcpu_sigp(u16 addr, u8 order, unsigned long parm,
|
||||
u32 *status)
|
||||
{
|
||||
register unsigned int reg1 asm ("1") = parm;
|
||||
register unsigned long reg1 asm ("1") = parm;
|
||||
int cc;
|
||||
|
||||
asm volatile(
|
||||
|
||||
@@ -29,7 +29,6 @@ extern int smp_find_processor_id(u16 address);
|
||||
extern int smp_store_status(int cpu);
|
||||
extern int smp_vcpu_scheduled(int cpu);
|
||||
extern void smp_yield_cpu(int cpu);
|
||||
extern void smp_yield(void);
|
||||
extern void smp_cpu_set_polarization(int cpu, int val);
|
||||
extern int smp_cpu_get_polarization(int cpu);
|
||||
extern void smp_fill_possible_mask(void);
|
||||
@@ -50,7 +49,6 @@ static inline int smp_find_processor_id(u16 address) { return 0; }
|
||||
static inline int smp_store_status(int cpu) { return 0; }
|
||||
static inline int smp_vcpu_scheduled(int cpu) { return 1; }
|
||||
static inline void smp_yield_cpu(int cpu) { }
|
||||
static inline void smp_yield(void) { }
|
||||
static inline void smp_fill_possible_mask(void) { }
|
||||
|
||||
#endif /* CONFIG_SMP */
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user