s390 patches for the 4.8 merge window #2
Subsystems (5)
Hi Linus,
please pull from the 'for-linus' branch of
git://git.kernel.org/pub/scm/linux/kernel/git/s390/linux.git for-linus
to receive the following updates:
- Some cleanup for the hugetlbfs pte/pmd conversion functions
- The code to check for the minimum CPU type is converted from assembler to C and an informational message is added in case the CPU is not new enough to run the kernel
- Bug fixes
Gerald Schaefer (1):
s390/mm: clean up pte/pmd encoding
Heiko Carstens (7):
s390/sclp: move uninitialized data to data section s390/als: convert architecture level set code to C s390/als: print machine type on facility mismatch s390/als: print missing facilities on facility mismatch s390/facilities: do not generate DWORDS define anymore s390/als: fix compile with gcov enabled s390/numa: only set possible nodes within node_possible_map
Ingo Tuchscherer (1):
s390/zcrypt: Fix zcrypt suspend/resume behavior
James Hogan (1):
s390: Define AT_VECTOR_SIZE_ARCH for ARCH_DLINFO
Jiri Olsa (1):
s390/ftrace/jprobes: Fix conflict between jprobes and function graph tracing
Sebastian Ott (2):
s390/cio: convert cfg_lock mutex to spinlock s390/cio: fix premature wakeup during chp configure
Wei Yongjun (1):
s390/zcrypt: fix possible memory leak in ap_module_init()
arch/s390/boot/compressed/Makefile | 2 +- arch/s390/include/asm/elf.h | 1 + arch/s390/include/asm/pgtable.h | 20 +++--- arch/s390/include/uapi/asm/auxvec.h | 2 + arch/s390/kernel/Makefile | 11 +++- arch/s390/kernel/als.c | 124 ++++++++++++++++++++++++++++++++++++ arch/s390/kernel/entry.h | 2 + arch/s390/kernel/head.S | 43 ++----------- arch/s390/kernel/kprobes.c | 12 ++++ arch/s390/kernel/sclp.c | 5 +- arch/s390/mm/hugetlbpage.c | 52 +++++++++++---- arch/s390/numa/mode_emu.c | 4 ++ arch/s390/numa/numa.c | 8 ++- arch/s390/tools/gen_facilities.c | 1 - drivers/s390/cio/chp.c | 60 +++++++++++------ drivers/s390/crypto/ap_bus.c | 50 +++++++++++++-- drivers/s390/crypto/ap_bus.h | 1 + drivers/s390/crypto/zcrypt_cex2a.c | 2 +- drivers/s390/crypto/zcrypt_cex4.c | 2 +- drivers/s390/crypto/zcrypt_pcixcc.c | 2 +- 20 files changed, 305 insertions(+), 99 deletions(-) create mode 100644 arch/s390/kernel/als.c
arch/s390/boot/compressed/Makefile +1 -1
@@ -18,7 +18,7 @@ KBUILD_CFLAGS += $(call cc-option,-ffreestanding) GCOV_PROFILE := n -OBJECTS := $(addprefix $(objtree)/arch/s390/kernel/, head.o sclp.o ebcdic.o) +OBJECTS := $(addprefix $(objtree)/arch/s390/kernel/, head.o sclp.o ebcdic.o als.o) OBJECTS += $(obj)/head.o $(obj)/misc.o $(obj)/piggy.o LDFLAGS_vmlinux := --oformat $(LD_BFD) -e startup -T
arch/s390/include/asm/elf.h +1 -0
@@ -225,6 +225,7 @@ do { \#define MMAP_ALIGN_MASK (is_compat_task() ? 0 : 0x7fUL)#define STACK_RND_MASK MMAP_RND_MASK +/* update AT_VECTOR_SIZE_ARCH if the number of NEW_AUX_ENT entries changes */ #define ARCH_DLINFO \ do { \ if (vdso_enabled) \
arch/s390/include/asm/pgtable.h +10 -10
@@ -242,8 +242,8 @@ static inline int is_module_addr(void *addr)* swap .11..ttttt.0 * prot-none, clean, old .11.xx0000.1 * prot-none, clean, young .11.xx0001.1 -* prot-none, dirty, old .10.xx0010.1 -* prot-none, dirty, young .10.xx0011.1 +* prot-none, dirty, old .11.xx0010.1 +* prot-none, dirty, young .11.xx0011.1 * read-only, clean, old .11.xx0100.1 * read-only, clean, young .01.xx0101.1 * read-only, dirty, old .11.xx0110.1
@@ -323,8 +323,8 @@ static inline int is_module_addr(void *addr)#define _SEGMENT_ENTRY_DIRTY 0x2000/* SW segment dirty bit */ #define _SEGMENT_ENTRY_YOUNG 0x1000/* SW segment young bit */ #define _SEGMENT_ENTRY_LARGE 0x0400/* STE-format control, large page */ -#define _SEGMENT_ENTRY_READ 0x0002/* SW segment read bit */ -#define _SEGMENT_ENTRY_WRITE 0x0001/* SW segment write bit */ +#define _SEGMENT_ENTRY_WRITE 0x0002/* SW segment write bit */ +#define _SEGMENT_ENTRY_READ 0x0001/* SW segment read bit */ #ifdef CONFIG_MEM_SOFT_DIRTY #define _SEGMENT_ENTRY_SOFT_DIRTY 0x4000/* SW segment soft dirty bit */
@@ -335,15 +335,15 @@ static inline int is_module_addr(void *addr)/* * Segment table and region3 table entry encoding * (R = read-only, I = invalid, y = young bit): -* dy..R...I...rw +* dy..R...I...wr * prot-none, clean, old 00..1...1...00 * prot-none, clean, young 01..1...1...00 * prot-none, dirty, old 10..1...1...00 * prot-none, dirty, young 11..1...1...00 -* read-only, clean, old 00..1...1...10 -* read-only, clean, young 01..1...0...10 -* read-only, dirty, old 10..1...1...10 -* read-only, dirty, young 11..1...0...10 +* read-only, clean, old 00..1...1...01 +* read-only, clean, young 01..1...0...01 +* read-only, dirty, old 10..1...1...01 +* read-only, dirty, young 11..1...0...01 * read-write, clean, old 00..1...1...11 * read-write, clean, young 01..1...0...11 * read-write, dirty, old 10..0...1...11
@@ -382,7 +382,7 @@ static inline int is_module_addr(void *addr)/* * Page protection definitions. */ -#define PAGE_NONE __pgprot(_PAGE_PRESENT | _PAGE_INVALID) +#define PAGE_NONE __pgprot(_PAGE_PRESENT | _PAGE_INVALID | _PAGE_PROTECT)#define PAGE_READ __pgprot(_PAGE_PRESENT | _PAGE_READ | \ _PAGE_INVALID | _PAGE_PROTECT)#define PAGE_WRITE __pgprot(_PAGE_PRESENT | _PAGE_READ | _PAGE_WRITE | \
arch/s390/include/uapi/asm/auxvec.h +2 -0
@@ -3,4 +3,6 @@#define AT_SYSINFO_EHDR 33 +#define AT_VECTOR_SIZE_ARCH 1/* entries in ARCH_DLINFO */ +#endif
arch/s390/kernel/Makefile +8 -3
@@ -4,6 +4,7 @@ KCOV_INSTRUMENT_early.o := n KCOV_INSTRUMENT_sclp.o := n +KCOV_INSTRUMENT_als.o := n ifdef CONFIG_FUNCTION_TRACER # Don't trace early setup code and tracing code
@@ -32,21 +33,25 @@ CFLAGS_ptrace.o += -DUTS_MACHINE='"$(UTS_MACHINE)"' CFLAGS_sysinfo.o += -w # -# Use -march=z900 for sclp.c to be able to print an error message if -# the kernel is started on a machine which is too old +# Use -march=z900 for sclp.c and als.c to be able to print an error +# message if the kernel is started on a machine which is too old # CFLAGS_REMOVE_sclp.o = $(CC_FLAGS_FTRACE) +CFLAGS_REMOVE_als.o = $(CC_FLAGS_FTRACE) ifneq ($(CC_FLAGS_MARCH),-march=z900) CFLAGS_REMOVE_sclp.o += $(CC_FLAGS_MARCH) CFLAGS_sclp.o += -march=z900 +CFLAGS_REMOVE_als.o += $(CC_FLAGS_MARCH) +CFLAGS_als.o += -march=z900 AFLAGS_REMOVE_head.o += $(CC_FLAGS_MARCH) AFLAGS_head.o += -march=z900 endif GCOV_PROFILE_sclp.o := n +GCOV_PROFILE_als.o := n obj-y := traps.o time.o process.o base.o early.o setup.o idle.o vtime.o obj-y += processor.o sys_s390.o ptrace.o signal.o cpcmd.o ebcdic.o nmi.o -obj-y += debug.o irq.o ipl.o dis.o diag.o sclp.o vdso.o +obj-y += debug.o irq.o ipl.o dis.o diag.o sclp.o vdso.o als.o obj-y += sysinfo.o jump_label.o lgr.o os_info.o machine_kexec.o pgm_check.o obj-y += runtime_instr.o cache.o fpu.o dumpstack.o obj-y += entry.o reipl.o relocate_kernel.o
arch/s390/kernel/als.c new file +124 -0
124 lines not on this page · raw message
arch/s390/kernel/entry.h +2 -0
@@ -79,4 +79,6 @@ long sys_s390_pci_mmio_read(unsigned long, void __user *, size_t);DECLARE_PER_CPU (u64, mt_cycles[8 ]); +void verify_facilities (void ); +#endif /* _ENTRY_H */
arch/s390/kernel/head.S +4 -39
53 lines not on this page · raw message
arch/s390/kernel/kprobes.c +12 -0
@@ -690,6 +690,15 @@ int setjmp_pre_handler(struct kprobe *p, struct pt_regs *regs) stack = (unsigned long ) regs->gprs[15 ];memcpy (kcb->jprobes_stack, (void *) stack,MIN_STACK_SIZE (stack)); + +/* +* jprobes use jprobe_return() which skips the normal return +* path of the function, and this messes up the accounting of the +* function graph tracer to get messed up. +* +* Pause function graph tracing while performing the jprobe function. +*/ +pause_graph_tracing ();return 1 ; }NOKPROBE_SYMBOL (setjmp_pre_handler);
@@ -705,6 +714,9 @@ int longjmp_break_handler(struct kprobe *p, struct pt_regs *regs)struct kprobe_ctlblk *kcb =get_kprobe_ctlblk ();unsigned long stack; +/* It's OK to start function graph tracing again */ +unpause_graph_tracing (); + stack = (unsigned long ) kcb->jprobe_saved_regs.gprs[15 ];/* Put the regs back */
arch/s390/kernel/sclp.c +3 -2
@@ -12,8 +12,9 @@#define EVTYP_VT220MSG_MASK 0x00000040#define EVTYP_MSG_MASK 0x40000000 -static char _sclp_work_area[4096 ]__aligned(PAGE_SIZE) ; -static bool have_vt220, have_linemode; +static char _sclp_work_area[4096] __aligned(PAGE_SIZE) __section(data); +static bool have_vt220 __section(data); +static bool have_linemode __section(data);static void _sclp_wait_int (void ) {
arch/s390/mm/hugetlbpage.c +38 -14
70 lines not on this page · raw message
arch/s390/numa/mode_emu.c +4 -0
@@ -482,8 +482,12 @@ static int emu_setup_nodes_adjust(int nodes)*/ static void emu_setup (void ) { +int nid; + emu_size =emu_setup_size_adjust (emu_size); emu_nodes =emu_setup_nodes_adjust (emu_nodes); +for (nid =0 ; nid < emu_nodes; nid++) +node_set (nid, node_possible_map);pr_info ("Creating %d nodes with memory stripe size %ld MB\n" , emu_nodes, emu_size >>20 ); }
arch/s390/numa/numa.c +7 -1
@@ -26,8 +26,14 @@ EXPORT_SYMBOL(node_data);cpumask_t node_to_cpumask_map[MAX_NUMNODES ];EXPORT_SYMBOL (node_to_cpumask_map); +static void plain_setup (void ) +{ +node_set (0 , node_possible_map); +} +const struct numa_mode numa_mode_plain = { .name ="plain" , + .setup = plain_setup, };static const struct numa_mode *mode = &numa_mode_plain;
@@ -126,13 +132,13 @@ static void __init numa_setup_memory(void)void __init numa_setup (void ) {pr_info ("NUMA mode: %s\n" , mode->name); +nodes_clear (node_possible_map);if (mode->setup) mode->setup ();numa_setup_memory ();memblock_dump_all (); } -/* * numa_init_early() - Initialization initcall *
arch/s390/tools/gen_facilities.c +0 -1
@@ -39,7 +39,6 @@ static void print_facility_list(struct facility_def *def)printf ("#define %s " , def->name);for (i =0 ; i <= high; i++)printf ("_AC(0x%016llx,UL)%c" , array[i], i < high ?',' :'\n' ); -printf ("#define %s_DWORDS %d\n" , def->name, high +1 );free (array); }
drivers/s390/cio/chp.c +39 -21
106 lines not on this page · raw message
drivers/s390/crypto/ap_bus.c +46 -4
104 lines not on this page · raw message
drivers/s390/crypto/ap_bus.h +1 -0
@@ -262,6 +262,7 @@ void ap_queue_message(struct ap_device *ap_dev, struct ap_message *ap_msg);void ap_cancel_message (struct ap_device *ap_dev,struct ap_message *ap_msg);void ap_flush_queue (struct ap_device *ap_dev);void ap_bus_force_rescan (void ); +void ap_device_init_reply (struct ap_device *ap_dev,struct ap_message *ap_msg);int ap_module_init (void );void ap_module_exit (void );
drivers/s390/crypto/zcrypt_cex2a.c +1 -1
@@ -126,7 +126,7 @@ static int zcrypt_cex2a_probe(struct ap_device *ap_dev) MSGTYPE50_VARIANT_DEFAULT); zdev->ap_dev = ap_dev; zdev->online =1 ; - ap_dev->reply = &zdev->reply; +ap_device_init_reply (ap_dev, &zdev->reply); ap_dev->private = zdev; rc =zcrypt_device_register (zdev);if (rc) {
drivers/s390/crypto/zcrypt_cex4.c +1 -1
@@ -147,7 +147,7 @@ static int zcrypt_cex4_probe(struct ap_device *ap_dev)return -ENODEV ; zdev->ap_dev = ap_dev; zdev->online =1 ; - ap_dev->reply = &zdev->reply; +ap_device_init_reply (ap_dev, &zdev->reply); ap_dev->private = zdev; rc =zcrypt_device_register (zdev);if (rc) {
drivers/s390/crypto/zcrypt_pcixcc.c +1 -1
@@ -327,7 +327,7 @@ static int zcrypt_pcixcc_probe(struct ap_device *ap_dev)else zdev->ops =zcrypt_msgtype_request (MSGTYPE06_NAME ,MSGTYPE06_VARIANT_NORNG ); - ap_dev->reply = &zdev->reply; +ap_device_init_reply (ap_dev, &zdev->reply); ap_dev->private = zdev; rc =zcrypt_device_register (zdev);if (rc)