Commit 8cce3e7c authored by Linus Torvalds's avatar Linus Torvalds

Merge branch 'for-linus' of git://git390.osdl.marist.edu/pub/scm/linux-2.6

* 'for-linus' of git://git390.osdl.marist.edu/pub/scm/linux-2.6:
  [S390] incorrect reipl nss name.
  [S390] Load disabled wait psw if reipl fails.
  [S390] Fix IPL from NSS.
  [S390] zcrypt: fix ap_device_list handling
  [S390] sclp_vt220: speed up console output for interactive work
  [S390] dasd: fix reference counting in display method for proc/dasd/devices
  [S390] dasd: let dasd erp matching recognize alias recovery
  [S390] Get rid of memcpy gcc warning workaround.
  [S390] idle: Fix machine check handling in idle loop.
  [S390] Update default configuration.
parents a878539e 583b33bc
...@@ -351,6 +351,10 @@ endchoice ...@@ -351,6 +351,10 @@ endchoice
source "fs/Kconfig.binfmt" source "fs/Kconfig.binfmt"
config FORCE_MAX_ZONEORDER
int
default "9"
config PROCESS_DEBUG config PROCESS_DEBUG
bool "Show crashed user process info" bool "Show crashed user process info"
help help
......
# #
# Automatically generated make config: don't edit # Automatically generated make config: don't edit
# Linux kernel version: 2.6.24 # Linux kernel version: 2.6.25-rc4
# Sat Feb 9 12:13:01 2008 # Wed Mar 5 11:22:59 2008
# #
CONFIG_MMU=y CONFIG_MMU=y
CONFIG_ZONE_DMA=y CONFIG_ZONE_DMA=y
...@@ -43,12 +43,15 @@ CONFIG_CGROUPS=y ...@@ -43,12 +43,15 @@ CONFIG_CGROUPS=y
# CONFIG_CGROUP_DEBUG is not set # CONFIG_CGROUP_DEBUG is not set
CONFIG_CGROUP_NS=y CONFIG_CGROUP_NS=y
# CONFIG_CPUSETS is not set # CONFIG_CPUSETS is not set
CONFIG_GROUP_SCHED=y
CONFIG_FAIR_GROUP_SCHED=y CONFIG_FAIR_GROUP_SCHED=y
CONFIG_FAIR_USER_SCHED=y # CONFIG_RT_GROUP_SCHED is not set
# CONFIG_FAIR_CGROUP_SCHED is not set CONFIG_USER_SCHED=y
# CONFIG_CGROUP_SCHED is not set
# CONFIG_CGROUP_CPUACCT is not set # CONFIG_CGROUP_CPUACCT is not set
# CONFIG_RESOURCE_COUNTERS is not set # CONFIG_RESOURCE_COUNTERS is not set
CONFIG_SYSFS_DEPRECATED=y CONFIG_SYSFS_DEPRECATED=y
CONFIG_SYSFS_DEPRECATED_V2=y
# CONFIG_RELAY is not set # CONFIG_RELAY is not set
CONFIG_NAMESPACES=y CONFIG_NAMESPACES=y
CONFIG_UTS_NS=y CONFIG_UTS_NS=y
...@@ -85,7 +88,9 @@ CONFIG_SLAB=y ...@@ -85,7 +88,9 @@ CONFIG_SLAB=y
# CONFIG_MARKERS is not set # CONFIG_MARKERS is not set
CONFIG_HAVE_OPROFILE=y CONFIG_HAVE_OPROFILE=y
CONFIG_KPROBES=y CONFIG_KPROBES=y
CONFIG_KRETPROBES=y
CONFIG_HAVE_KPROBES=y CONFIG_HAVE_KPROBES=y
CONFIG_HAVE_KRETPROBES=y
CONFIG_PROC_PAGE_MONITOR=y CONFIG_PROC_PAGE_MONITOR=y
CONFIG_SLABINFO=y CONFIG_SLABINFO=y
CONFIG_RT_MUTEXES=y CONFIG_RT_MUTEXES=y
...@@ -185,6 +190,7 @@ CONFIG_IPL=y ...@@ -185,6 +190,7 @@ CONFIG_IPL=y
CONFIG_IPL_VM=y CONFIG_IPL_VM=y
CONFIG_BINFMT_ELF=y CONFIG_BINFMT_ELF=y
CONFIG_BINFMT_MISC=m CONFIG_BINFMT_MISC=m
CONFIG_FORCE_MAX_ZONEORDER=9
# CONFIG_PROCESS_DEBUG is not set # CONFIG_PROCESS_DEBUG is not set
CONFIG_PFAULT=y CONFIG_PFAULT=y
# CONFIG_SHARED_KERNEL is not set # CONFIG_SHARED_KERNEL is not set
...@@ -435,6 +441,7 @@ CONFIG_DASD_EER=y ...@@ -435,6 +441,7 @@ CONFIG_DASD_EER=y
CONFIG_MISC_DEVICES=y CONFIG_MISC_DEVICES=y
# CONFIG_EEPROM_93CX6 is not set # CONFIG_EEPROM_93CX6 is not set
# CONFIG_ENCLOSURE_SERVICES is not set # CONFIG_ENCLOSURE_SERVICES is not set
# CONFIG_HAVE_IDE is not set
# #
# SCSI device support # SCSI device support
...@@ -593,6 +600,7 @@ CONFIG_S390_VMUR=m ...@@ -593,6 +600,7 @@ CONFIG_S390_VMUR=m
# #
# Sonics Silicon Backplane # Sonics Silicon Backplane
# #
# CONFIG_MEMSTICK is not set
# #
# File systems # File systems
...@@ -750,7 +758,6 @@ CONFIG_DEBUG_BUGVERBOSE=y ...@@ -750,7 +758,6 @@ CONFIG_DEBUG_BUGVERBOSE=y
# CONFIG_DEBUG_LIST is not set # CONFIG_DEBUG_LIST is not set
# CONFIG_DEBUG_SG is not set # CONFIG_DEBUG_SG is not set
# CONFIG_FRAME_POINTER is not set # CONFIG_FRAME_POINTER is not set
CONFIG_FORCED_INLINING=y
# CONFIG_RCU_TORTURE_TEST is not set # CONFIG_RCU_TORTURE_TEST is not set
# CONFIG_KPROBES_SANITY_TEST is not set # CONFIG_KPROBES_SANITY_TEST is not set
# CONFIG_BACKTRACE_SELF_TEST is not set # CONFIG_BACKTRACE_SELF_TEST is not set
...@@ -759,6 +766,7 @@ CONFIG_FORCED_INLINING=y ...@@ -759,6 +766,7 @@ CONFIG_FORCED_INLINING=y
# CONFIG_LATENCYTOP is not set # CONFIG_LATENCYTOP is not set
CONFIG_SAMPLES=y CONFIG_SAMPLES=y
# CONFIG_SAMPLE_KOBJECT is not set # CONFIG_SAMPLE_KOBJECT is not set
# CONFIG_SAMPLE_KPROBES is not set
# CONFIG_DEBUG_PAGEALLOC is not set # CONFIG_DEBUG_PAGEALLOC is not set
# #
......
...@@ -4,6 +4,11 @@ ...@@ -4,6 +4,11 @@
EXTRA_AFLAGS := -traditional 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 \ 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 \ 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 semaphore.o s390_ext.o debug.o irq.o ipl.o dis.o diag.o
......
...@@ -88,13 +88,17 @@ static noinline __init void create_kernel_nss(void) ...@@ -88,13 +88,17 @@ static noinline __init void create_kernel_nss(void)
__cpcmd(defsys_cmd, NULL, 0, &response); __cpcmd(defsys_cmd, NULL, 0, &response);
if (response != 0) if (response != 0) {
kernel_nss_name[0] = '\0';
return; return;
}
__cpcmd(savesys_cmd, NULL, 0, &response); __cpcmd(savesys_cmd, NULL, 0, &response);
if (response != strlen(savesys_cmd)) if (response != strlen(savesys_cmd)) {
kernel_nss_name[0] = '\0';
return; return;
}
ipl_flags = IPL_NSS_VALID; ipl_flags = IPL_NSS_VALID;
} }
......
...@@ -704,6 +704,7 @@ void reipl_run(struct shutdown_trigger *trigger) ...@@ -704,6 +704,7 @@ void reipl_run(struct shutdown_trigger *trigger)
default: default:
break; break;
} }
disabled_wait((unsigned long) __builtin_return_address(0));
} }
static void __init reipl_probe(void) static void __init reipl_probe(void)
......
...@@ -152,6 +152,10 @@ static void default_idle(void) ...@@ -152,6 +152,10 @@ static void default_idle(void)
local_mcck_disable(); local_mcck_disable();
if (test_thread_flag(TIF_MCCK_PENDING)) { if (test_thread_flag(TIF_MCCK_PENDING)) {
local_mcck_enable(); 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(); local_irq_enable();
s390_handle_mcck(); s390_handle_mcck();
return; return;
......
...@@ -629,14 +629,8 @@ static int __cpuinit smp_alloc_lowcore(int cpu) ...@@ -629,14 +629,8 @@ static int __cpuinit smp_alloc_lowcore(int cpu)
panic_stack = __get_free_page(GFP_KERNEL); panic_stack = __get_free_page(GFP_KERNEL);
if (!panic_stack || !async_stack) if (!panic_stack || !async_stack)
goto out; goto out;
/* memcpy(lowcore, &S390_lowcore, 512);
* Only need to copy the first 512 bytes from address 0. But since memset((char *)lowcore + 512, 0, sizeof(*lowcore) - 512);
* 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);
lowcore->async_stack = async_stack + ASYNC_SIZE; lowcore->async_stack = async_stack + ASYNC_SIZE;
lowcore->panic_stack = panic_stack + PAGE_SIZE; lowcore->panic_stack = panic_stack + PAGE_SIZE;
......
...@@ -209,8 +209,6 @@ static void stop_hz_timer(void) ...@@ -209,8 +209,6 @@ static void stop_hz_timer(void)
*/ */
static void start_hz_timer(void) static void start_hz_timer(void)
{ {
BUG_ON(!in_interrupt());
if (!cpu_isset(smp_processor_id(), nohz_cpu_mask)) if (!cpu_isset(smp_processor_id(), nohz_cpu_mask))
return; return;
account_ticks(get_clock()); account_ticks(get_clock());
......
...@@ -2310,10 +2310,8 @@ static int ...@@ -2310,10 +2310,8 @@ static int
dasd_3990_erp_error_match(struct dasd_ccw_req *cqr1, struct dasd_ccw_req *cqr2) dasd_3990_erp_error_match(struct dasd_ccw_req *cqr1, struct dasd_ccw_req *cqr2)
{ {
/* check failed CCW */ if (cqr1->startdev != cqr2->startdev)
if (cqr1->irb.scsw.cpa != cqr2->irb.scsw.cpa) { return 0;
// return 0; /* CCW doesn't match */
}
if (cqr1->irb.esw.esw0.erw.cons != cqr2->irb.esw.esw0.erw.cons) if (cqr1->irb.esw.esw0.erw.cons != cqr2->irb.esw.esw0.erw.cons)
return 0; return 0;
......
...@@ -62,8 +62,10 @@ dasd_devices_show(struct seq_file *m, void *v) ...@@ -62,8 +62,10 @@ dasd_devices_show(struct seq_file *m, void *v)
return 0; return 0;
if (device->block) if (device->block)
block = device->block; block = device->block;
else else {
dasd_put_device(device);
return 0; return 0;
}
/* Print device number. */ /* Print device number. */
seq_printf(m, "%s", device->cdev->dev.bus_id); seq_printf(m, "%s", device->cdev->dev.bus_id);
/* Print discipline string. */ /* Print discipline string. */
......
...@@ -367,7 +367,7 @@ sclp_vt220_timeout(unsigned long data) ...@@ -367,7 +367,7 @@ sclp_vt220_timeout(unsigned long data)
sclp_vt220_emit_current(); 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 * Internal implementation of the write function. Write COUNT bytes of data
......
...@@ -490,10 +490,12 @@ static int ap_device_probe(struct device *dev) ...@@ -490,10 +490,12 @@ static int ap_device_probe(struct device *dev)
int rc; int rc;
ap_dev->drv = ap_drv; 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; 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; return rc;
} }
...@@ -532,11 +534,11 @@ static int ap_device_remove(struct device *dev) ...@@ -532,11 +534,11 @@ static int ap_device_remove(struct device *dev)
ap_flush_queue(ap_dev); ap_flush_queue(ap_dev);
del_timer_sync(&ap_dev->timeout); del_timer_sync(&ap_dev->timeout);
if (ap_drv->remove)
ap_drv->remove(ap_dev);
spin_lock_bh(&ap_device_lock); spin_lock_bh(&ap_device_lock);
list_del_init(&ap_dev->list); list_del_init(&ap_dev->list);
spin_unlock_bh(&ap_device_lock); spin_unlock_bh(&ap_device_lock);
if (ap_drv->remove)
ap_drv->remove(ap_dev);
spin_lock_bh(&ap_dev->lock); spin_lock_bh(&ap_dev->lock);
atomic_sub(ap_dev->queue_count, &ap_poll_requests); atomic_sub(ap_dev->queue_count, &ap_poll_requests);
spin_unlock_bh(&ap_dev->lock); spin_unlock_bh(&ap_dev->lock);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment