s390 bux fixes for 2.6.25-rc4.
Subsystems (3)
cover s390 bux fixes for 2.6.25-rc4.
Assorted bug fixes for s390. The shortlog:
Christian Borntraeger (1):
[S390] sclp_vt220: speed up console output for interactive work
Heiko Carstens (3):
[S390] idle: Fix machine check handling in idle loop. [S390] Get rid of memcpy gcc warning workaround. [S390] Fix IPL from NSS.
Hongjie Yang (1):
[S390] incorrect reipl nss name.
Martin Schwidefsky (1):
[S390] Update default configuration.
Michael Holzheu (1):
[S390] Load disabled wait psw if reipl fails.
Ralph Wuerthner (1):
[S390] zcrypt: fix ap_device_list handling
Stefan Weinhuber (2):
[S390] dasd: let dasd erp matching recognize alias recovery [S390] dasd: fix reference counting in display method for proc/dasd/devices
Signature · 4 lines
blue skies, Martin. "Reality continues to ruin my life." - Calvin.
PATCH 1/10 Update default configuration.
From: Martin Schwidefsky <[email protected]>
---
arch/s390/defconfig | 18 +++++++++++++----- 1 file changed, 13 insertions(+), 5 deletions(-)
arch/s390/defconfig +13 -5
@@ -1,7 +1,7 @@ # # Automatically generated make config: don't edit -# Linux kernel version: 2.6.24 -# Sat Feb 9 12:13:01 2008 +# Linux kernel version: 2.6.25-rc4 +# Wed Mar 5 11:22:59 2008 # CONFIG_MMU=y CONFIG_ZONE_DMA=y
@@ -43,12 +43,15 @@ CONFIG_CGROUPS=y # CONFIG_CGROUP_DEBUG is not set CONFIG_CGROUP_NS=y # CONFIG_CPUSETS is not set +CONFIG_GROUP_SCHED=y CONFIG_FAIR_GROUP_SCHED=y -CONFIG_FAIR_USER_SCHED=y -# CONFIG_FAIR_CGROUP_SCHED is not set +# CONFIG_RT_GROUP_SCHED is not set +CONFIG_USER_SCHED=y +# CONFIG_CGROUP_SCHED is not set # CONFIG_CGROUP_CPUACCT is not set # CONFIG_RESOURCE_COUNTERS is not set CONFIG_SYSFS_DEPRECATED=y +CONFIG_SYSFS_DEPRECATED_V2=y # CONFIG_RELAY is not set CONFIG_NAMESPACES=y CONFIG_UTS_NS=y
@@ -85,7 +88,9 @@ CONFIG_SLAB=y # CONFIG_MARKERS is not set CONFIG_HAVE_OPROFILE=y CONFIG_KPROBES=y +CONFIG_KRETPROBES=y CONFIG_HAVE_KPROBES=y +CONFIG_HAVE_KRETPROBES=y CONFIG_PROC_PAGE_MONITOR=y CONFIG_SLABINFO=y CONFIG_RT_MUTEXES=y
@@ -185,6 +190,7 @@ CONFIG_IPL=y CONFIG_IPL_VM=y CONFIG_BINFMT_ELF=y CONFIG_BINFMT_MISC=m +CONFIG_FORCE_MAX_ZONEORDER=9 # CONFIG_PROCESS_DEBUG is not set CONFIG_PFAULT=y # CONFIG_SHARED_KERNEL is not set
@@ -435,6 +441,7 @@ CONFIG_DASD_EER=y CONFIG_MISC_DEVICES=y # CONFIG_EEPROM_93CX6 is not set # CONFIG_ENCLOSURE_SERVICES is not set +# CONFIG_HAVE_IDE is not set # # SCSI device support
@@ -593,6 +600,7 @@ CONFIG_S390_VMUR=m # # Sonics Silicon Backplane # +# CONFIG_MEMSTICK is not set # # File systems
@@ -750,7 +758,6 @@ CONFIG_DEBUG_BUGVERBOSE=y # CONFIG_DEBUG_LIST is not set # CONFIG_DEBUG_SG is not set # CONFIG_FRAME_POINTER is not set -CONFIG_FORCED_INLINING=y # CONFIG_RCU_TORTURE_TEST is not set # CONFIG_KPROBES_SANITY_TEST is not set # CONFIG_BACKTRACE_SELF_TEST is not set
@@ -759,6 +766,7 @@ CONFIG_FORCED_INLINING=y # CONFIG_LATENCYTOP is not set CONFIG_SAMPLES=y # CONFIG_SAMPLE_KOBJECT is not set +# CONFIG_SAMPLE_KPROBES is not set # CONFIG_DEBUG_PAGEALLOC is not set #
Signature · 4 lines
blue skies, Martin. "Reality continues to ruin my life." - Calvin.
PATCH 2/10 idle: Fix machine check handling in idle loop.
In reply to Martin SchwidefskyFrom: Heiko Carstens <[email protected]>
If a machine check handling is pending when the idle loop is entered default_idle will be left with timer ticks and virtual timer disabled. Fix this by "calling" the idle_chain. Also a BUG_ON(!in_interrupt) in start_hz_timer must be removed since the function now gets called from non interrupt context as well.
---
arch/s390/kernel/process.c | 4 ++++ arch/s390/kernel/time.c | 2 -- 2 files changed, 4 insertions(+), 2 deletions(-)
arch/s390/kernel/process.c +4 -0
@@ -152,6 +152,10 @@ static void default_idle(void)local_mcck_disable ();if (test_thread_flag (TIF_MCCK_PENDING )) {local_mcck_enable (); +/* disable monitor call class 0 */ +__ctl_clear_bit (8 ,15 ); +atomic_notifier_call_chain (&idle_chain,S390_CPU_NOT_IDLE , + hcpu);local_irq_enable ();s390_handle_mcck ();return ;
arch/s390/kernel/time.c +0 -2
@@ -209,8 +209,6 @@ static void stop_hz_timer(void)*/ static void start_hz_timer (void ) { -BUG_ON (!in_interrupt ()); -if (!cpu_isset (smp_processor_id (), nohz_cpu_mask))return ;account_ticks (get_clock ());
Signature · 4 lines
blue skies, Martin. "Reality continues to ruin my life." - Calvin.
PATCH 3/10 Get rid of memcpy gcc warning workaround.
In reply to Martin SchwidefskyFrom: Heiko Carstens <[email protected]>
Compile smp.o with -Wno-nonnull so gcc stops warning about memcpy being used with a null parameter. Also remove the workaround code and use a char * cast instead of a void * cast to do computations.
---
arch/s390/kernel/Makefile | 5 +++++ arch/s390/kernel/smp.c | 10 ++-------- 2 files changed, 7 insertions(+), 8 deletions(-)
arch/s390/kernel/Makefile +5 -0
@@ -4,6 +4,11 @@ EXTRA_AFLAGS := -traditional +# +# Passing null pointers is ok for smp code, since we access the lowcore here. +# +CFLAGS_smp.o := -Wno-nonnull + obj-y := bitmap.o traps.o time.o process.o base.o early.o \ setup.o sys_s390.o ptrace.o signal.o cpcmd.o ebcdic.o \ semaphore.o s390_ext.o debug.o irq.o ipl.o dis.o diag.o
arch/s390/kernel/smp.c +2 -8
@@ -629,14 +629,8 @@ static int __cpuinit smp_alloc_lowcore(i panic_stack =__get_free_page (GFP_KERNEL );if (!panic_stack || !async_stack) goto out; -/* -* Only need to copy the first 512 bytes from address 0. But since -* the compiler emits a warning if src == NULL for memcpy use copy_page -* instead. Copies more than needed but this code is not performance -* critical. -*/ -copy_page (lowcore, &S390_lowcore); -memset ((void *)lowcore +512 ,0 ,sizeof (*lowcore) -512 ); +memcpy (lowcore, &S390_lowcore,512 ); +memset ((char *)lowcore +512 ,0 ,sizeof (*lowcore) -512 ); lowcore->async_stack = async_stack +ASYNC_SIZE ; lowcore->panic_stack = panic_stack +PAGE_SIZE ;
Signature · 4 lines
blue skies, Martin. "Reality continues to ruin my life." - Calvin.
PATCH 4/10 dasd: let dasd erp matching recognize alias recovery
In reply to Martin SchwidefskyFrom: Stefan Weinhuber <[email protected]>
When a request fails that was started on an alias device then the first recovery step is to retry it on the base device. If the recovery request fails again with the same symptoms, the next step should not be a simple retry, but should be a proper recovery based on sense data, etc. To do so, the dasd recovery functions need to recognize the alias recovery step in the erp chain by comparing the start devices.
---
drivers/s390/block/dasd_3990_erp.c | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-)
drivers/s390/block/dasd_3990_erp.c +2 -4
@@ -2310,10 +2310,8 @@ static int dasd_3990_erp_error_match(struct dasd_ccw_req *cqr1, struct dasd_ccw_req *cqr2) { -/* check failed CCW */ -if (cqr1->irb.scsw.cpa != cqr2->irb.scsw.cpa) { -// return 0; /* CCW doesn't match */ - } +if (cqr1->startdev != cqr2->startdev) +return 0 ;if (cqr1->irb.esw.esw0.erw.cons != cqr2->irb.esw.esw0.erw.cons)return 0 ;
Signature · 4 lines
blue skies, Martin. "Reality continues to ruin my life." - Calvin.
PATCH 5/10 dasd: fix reference counting in display method for proc/dasd/devices
In reply to Martin SchwidefskyFrom: Stefan Weinhuber <[email protected]>
Using the /proc/dasd/devices interface leaves the reference counter of alias devices in an inconsistent state. A process that tries to set such a device offline afterwards will hang.
The dasd_devices_show function returns immediately for alias devices and this code path was missing a dasd_put_device call.
---
drivers/s390/block/dasd_proc.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-)
drivers/s390/block/dasd_proc.c +3 -1
@@ -62,8 +62,10 @@ dasd_devices_show(struct seq_file *m, voreturn 0 ;if (device->block) block = device->block; -else +else { +dasd_put_device (device);return 0 ; + }/* Print device number. */ seq_printf (m,"%s" , device->cdev->dev.bus_id);/* Print discipline string. */
Signature · 4 lines
blue skies, Martin. "Reality continues to ruin my life." - Calvin.
PATCH 6/10 sclp_vt220: speed up console output for interactive work
In reply to Martin SchwidefskyFrom: Christian Borntraeger <[email protected]>
Currently an output buffer can wait up to HZ/2 until the buffer is flushed. The wait time is noticeable in interactive tools like mc.
Change the value to HZ/20, which seems enough for interactive work.
---
drivers/s390/char/sclp_vt220.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
drivers/s390/char/sclp_vt220.c +1 -1
@@ -367,7 +367,7 @@ sclp_vt220_timeout(unsigned long data)sclp_vt220_emit_current (); } -#define BUFFER_MAX_DELAY HZ/2 +#define BUFFER_MAX_DELAY HZ/20/* * Internal implementation of the write function. Write COUNT bytes of data
Signature · 4 lines
blue skies, Martin. "Reality continues to ruin my life." - Calvin.
PATCH 7/10 zcrypt: fix ap_device_list handling
In reply to Martin SchwidefskyFrom: Ralph Wuerthner <[email protected]>
In ap_device_probe() we can add the new ap device to the internal device list only if the device probe function successfully returns. Otherwise we might end up with an invalid device in the internal ap device list.
---
drivers/s390/crypto/ap_bus.c | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-)
drivers/s390/crypto/ap_bus.c +7 -5
@@ -490,10 +490,12 @@ static int ap_device_probe(struct deviceint rc; ap_dev->drv = ap_drv; -spin_lock_bh (&ap_device_lock); -list_add (&ap_dev->list, &ap_device_list); -spin_unlock_bh (&ap_device_lock); rc = ap_drv->probe ? ap_drv->probe (ap_dev) : -ENODEV ; +if (!rc) { +spin_lock_bh (&ap_device_lock); +list_add (&ap_dev->list, &ap_device_list); +spin_unlock_bh (&ap_device_lock); + }return rc; }
@@ -532,11 +534,11 @@ static int ap_device_remove(struct devicap_flush_queue (ap_dev);del_timer_sync (&ap_dev->timeout); -if (ap_drv->remove) - ap_drv->remove (ap_dev);spin_lock_bh (&ap_device_lock);list_del_init (&ap_dev->list);spin_unlock_bh (&ap_device_lock); +if (ap_drv->remove) + ap_drv->remove (ap_dev);spin_lock_bh (&ap_dev->lock);atomic_sub (ap_dev->queue_count, &ap_poll_requests);spin_unlock_bh (&ap_dev->lock);
Signature · 4 lines
blue skies, Martin. "Reality continues to ruin my life." - Calvin.
PATCH 8/10 Fix IPL from NSS.
In reply to Martin SchwidefskyFrom: Heiko Carstens <[email protected]>
IPL from NSS didn't work because the memory detection routine omits any memory sections with a size lower than what MAX_ORDER defines. This causes the detection routine to skip the first memory segment which has a size of 1MB. Which later on will let the kernel think that there is no memory available at all.
Since in addition the z/VM memory increment size is 1MB force MAX_ORDER to be 9, so we can support 1MB segments.
---
arch/s390/Kconfig | 4 ++++ 1 file changed, 4 insertions(+)
arch/s390/Kconfig +4 -0
@@ -351,6 +351,10 @@ endchoice source "fs/Kconfig.binfmt" +config FORCE_MAX_ZONEORDER + int + default "9" + config PROCESS_DEBUG bool "Show crashed user process info" help
Signature · 4 lines
blue skies, Martin. "Reality continues to ruin my life." - Calvin.
PATCH 9/10 Load disabled wait psw if reipl fails.
In reply to Martin SchwidefskyFrom: Michael Holzheu <[email protected]>
Normally this should not happen, but it's cleaner to do it that way.
---
arch/s390/kernel/ipl.c | 1 + 1 file changed, 1 insertion(+)
arch/s390/kernel/ipl.c +1 -0
@@ -704,6 +704,7 @@ void reipl_run(struct shutdown_trigger *default :break ; } +disabled_wait ((unsigned long )__builtin_return_address (0 )); }static void __init reipl_probe (void )
Signature · 4 lines
blue skies, Martin. "Reality continues to ruin my life." - Calvin.
PATCH 10/10 incorrect reipl nss name.
In reply to Martin SchwidefskyFrom: Hongjie Yang <[email protected]>
/sys/firmware/reipl/nss/name contains the nss name when defsys or savesys command has been executed. If the defsys or savesys command fails the kernel_nss_name has to be cleared since a reipl on that nss name won't be possible.
---
arch/s390/kernel/early.c | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-)
arch/s390/kernel/early.c +6 -2
@@ -88,13 +88,17 @@ static noinline __init void create_kerne__cpcmd (defsys_cmd,NULL ,0 , &response); -if (response !=0 ) +if (response !=0 ) { + kernel_nss_name[0 ] ='\0' ;return ; + }__cpcmd (savesys_cmd,NULL ,0 , &response); -if (response !=strlen (savesys_cmd)) +if (response !=strlen (savesys_cmd)) { + kernel_nss_name[0 ] ='\0' ;return ; + } ipl_flags =IPL_NSS_VALID ; }
Signature · 4 lines
blue skies, Martin. "Reality continues to ruin my life." - Calvin.