s390 patches for 4.9-rc3
Subsystems (6)
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:
A few more s390 patches for 4.9:
- A fix for an overflow in the dasd driver reported by UBSAN
- Fix a regression and add hotplug memory to the zone movable again
- Add ignore defines for the pkey system calls
- Fix the ouput of the merged stack tracer
- Replace printk with pr_cont in arch/s390 where appropriate
- Remove the arch specific return_address function again
- Ignore reserved channel paths at boot time
- Add a missing hugetlb_bad_size call to the arch backend
Christian Borntraeger (1):
s390/dasd: avoid undefined behaviour
Gerald Schaefer (1):
s390/mm: fix zone calculation in arch_add_memory()
Heiko Carstens (6):
s390: ignore pkey system calls
s390/dumpstack: restore reliable indicator for call traces s390/dumpstack: use pr_cont where appropriate s390/disassambler: use pr_cont where appropriate s390/dumpstack: get rid of return_address again s390/dumpstack: use pr_cont within show_stack and die
Sebastian Ott (1):
s390/cio: don't register chpids in reserved state
Shyam Saini (1):
s390/mm: use hugetlb_bad_size()
arch/s390/include/asm/ftrace.h | 4 +-- arch/s390/include/asm/processor.h | 2 +- arch/s390/include/asm/unistd.h | 3 ++ arch/s390/kernel/dis.c | 4 +-- arch/s390/kernel/dumpstack.c | 63 ++++++++++++++------------------------- arch/s390/kernel/perf_event.c | 2 +- arch/s390/kernel/stacktrace.c | 4 +-- arch/s390/mm/hugetlbpage.c | 1 + arch/s390/mm/init.c | 38 ++++++++++++----------- arch/s390/oprofile/init.c | 2 +- drivers/s390/block/dasd_eckd.c | 4 +-- drivers/s390/cio/chp.c | 6 ++-- 12 files changed, 61 insertions(+), 72 deletions(-)
arch/s390/include/asm/ftrace.h +1 -3
@@ -12,9 +12,7 @@#ifndef __ASSEMBLY__ -unsigned long return_address (int depth); - -#define ftrace_return_address (n) return_address(n) +#define ftrace_return_address (n) __builtin_return_address(n)void _mcount (void );void ftrace_caller (void );
arch/s390/include/asm/processor.h +1 -1
@@ -192,7 +192,7 @@ struct stack_frame {struct mm_struct ;struct seq_file ; -typedef int (*dump_trace_func_t )(void *data,unsigned long address); +typedef int (*dump_trace_func_t )(void *data,unsigned long address,int reliable);void dump_trace (dump_trace_func_t func,void *data,struct task_struct *task,unsigned long sp);
arch/s390/include/asm/unistd.h +3 -0
@@ -9,6 +9,9 @@#include <uapi/asm/unistd.h> #define __IGNORE_time +#define __IGNORE_pkey_mprotect +#define __IGNORE_pkey_alloc +#define __IGNORE_pkey_free#define __ARCH_WANT_OLD_READDIR#define __ARCH_WANT_SYS_ALARM
arch/s390/kernel/dis.c +2 -2
@@ -2014,12 +2014,12 @@ void show_code(struct pt_regs *regs) *ptr++ ='\t' ; ptr +=print_insn (ptr, code + start, addr); start += opsize; -printk ("%s" , buffer); +pr_cont ("%s" , buffer); ptr = buffer; ptr +=sprintf (ptr,"\n " ); hops++; } -printk ("\n" ); +pr_cont ("\n" ); }void print_fn_code (unsigned char *code,unsigned long len)
arch/s390/kernel/dumpstack.c +22 -41
119 lines not on this page · raw message
arch/s390/kernel/perf_event.c +1 -1
@@ -222,7 +222,7 @@ static int __init service_level_perf_register(void) }arch_initcall (service_level_perf_register); -static int __perf_callchain_kernel (void *data,unsigned long address) +static int __perf_callchain_kernel (void *data,unsigned long address,int reliable) {struct perf_callchain_entry_ctx *entry = data;
arch/s390/kernel/stacktrace.c +2 -2
@@ -27,12 +27,12 @@ static int __save_address(void *data, unsigned long address, int nosched)return 1 ; } -static int save_address (void *data,unsigned long address) +static int save_address (void *data,unsigned long address,int reliable) {return __save_address (data, address,0 ); } -static int save_address_nosched (void *data,unsigned long address) +static int save_address_nosched (void *data,unsigned long address,int reliable) {return __save_address (data, address,1 ); }
arch/s390/mm/hugetlbpage.c +1 -0
@@ -217,6 +217,7 @@ static __init int setup_hugepagesz(char *opt) }else if (MACHINE_HAS_EDAT2 && size ==PUD_SIZE ) {hugetlb_add_hstate (PUD_SHIFT -PAGE_SHIFT ); }else { +hugetlb_bad_size ();pr_err ("hugepagesz= specifies an unsupported page size %s\n" , string);return 0 ;
arch/s390/mm/init.c +21 -17
@@ -151,36 +151,40 @@ void __init free_initrd_mem(unsigned long start, unsigned long end)#ifdef CONFIG_MEMORY_HOTPLUG int arch_add_memory (int nid,u64 start,u64 size,bool for_device) { -unsigned long normal_end_pfn =PFN_DOWN (memblock_end_of_DRAM ()); -unsigned long dma_end_pfn =PFN_DOWN (MAX_DMA_ADDRESS ); +unsigned long zone_start_pfn, zone_end_pfn, nr_pages;unsigned long start_pfn =PFN_DOWN (start);unsigned long size_pages =PFN_DOWN (size); -unsigned long nr_pages; -int rc, zone_enum; +pg_data_t *pgdat =NODE_DATA (nid); +struct zone *zone; +int rc, i; rc =vmem_add_mapping (start, size);if (rc)return rc; -while (size_pages >0 ) { -if (start_pfn < dma_end_pfn) { - nr_pages = (start_pfn + size_pages > dma_end_pfn) ? - dma_end_pfn - start_pfn : size_pages; - zone_enum =ZONE_DMA ; - }else if (start_pfn < normal_end_pfn) { - nr_pages = (start_pfn + size_pages > normal_end_pfn) ? - normal_end_pfn - start_pfn : size_pages; - zone_enum =ZONE_NORMAL ; +for (i =0 ; i <MAX_NR_ZONES ; i++) { + zone = pgdat->node_zones + i; +if (zone_idx (zone) !=ZONE_MOVABLE ) { +/* Add range within existing zone limits, if possible */ + zone_start_pfn = zone->zone_start_pfn; + zone_end_pfn = zone->zone_start_pfn + + zone->spanned_pages; }else { - nr_pages = size_pages; - zone_enum =ZONE_MOVABLE ; +/* Add remaining range to ZONE_MOVABLE */ + zone_start_pfn = start_pfn; + zone_end_pfn = start_pfn + size_pages; } - rc =__add_pages (nid,NODE_DATA (nid)->node_zones + zone_enum, - start_pfn, size_pages); +if (start_pfn < zone_start_pfn || start_pfn >= zone_end_pfn) +continue ; + nr_pages = (start_pfn + size_pages > zone_end_pfn) ? + zone_end_pfn - start_pfn : size_pages; + rc =__add_pages (nid, zone, start_pfn, nr_pages);if (rc)break ; start_pfn += nr_pages; size_pages -= nr_pages; +if (!size_pages) +break ; }if (rc)vmem_remove_mapping (start, size);
arch/s390/oprofile/init.c +1 -1
@@ -13,7 +13,7 @@#include <linux/init.h> #include <asm/processor.h> -static int __s390_backtrace (void *data,unsigned long address) +static int __s390_backtrace (void *data,unsigned long address,int reliable) {unsigned int *depth = data;
drivers/s390/block/dasd_eckd.c +2 -2
@@ -1205,7 +1205,7 @@ static int verify_fcx_max_data(struct dasd_device *device, __u8 lpm) mdc, lpm);return mdc; } - fcx_max_data = mdc *FCX_MAX_DATA_FACTOR ; + fcx_max_data = (u32 )mdc *FCX_MAX_DATA_FACTOR ;if (fcx_max_data < private->fcx_max_data) {dev_warn (&device->cdev->dev, "The maximum data size for zHPF requests %u "
@@ -1675,7 +1675,7 @@ static u32 get_fcx_max_data(struct dasd_device *device) " data size for zHPF requests failed\n");return 0 ; }else -return mdc *FCX_MAX_DATA_FACTOR ; +return (u32 )mdc *FCX_MAX_DATA_FACTOR ; }/*
drivers/s390/cio/chp.c +4 -2
@@ -780,7 +780,7 @@ static int cfg_wait_idle(void)static int __init chp_init (void ) {struct chp_id chpid; -int ret; +int state, ret; ret =crw_register_handler (CRW_RSC_CPATH , chp_process_crw);if (ret)
@@ -791,7 +791,9 @@ static int __init chp_init(void)return 0 ;/* Register available channel-paths. */ chp_id_for_each (&chpid) { -if (chp_info_get_status (chpid) !=CHP_STATUS_NOT_RECOGNIZED ) + state =chp_info_get_status (chpid); +if (state ==CHP_STATUS_CONFIGURED || + state ==CHP_STATUS_STANDBY )chp_new (chpid); }