Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux
1
fork

Configure Feed

Select the types of activity you want to include in your feed.

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

* 'for-linus' of git://git390.marist.edu/pub/scm/linux-2.6:
[S390] memory hotplug: only unassign assigned increments
[S390] Change default action from reipl to stop for on_restart
[S390] arch/s390/kernel/ipl.c: correct error detection check
[S390] drivers/s390/block/dasd_ioctl.c: add missing kfree
[S390] nss,initrd: kernel image and initrd must be in different segments

+23 -14
+8 -6
arch/s390/kernel/early.c
··· 396 396 static __init void rescue_initrd(void) 397 397 { 398 398 #ifdef CONFIG_BLK_DEV_INITRD 399 + unsigned long min_initrd_addr = (unsigned long) _end + (4UL << 20); 399 400 /* 400 - * Move the initrd right behind the bss section in case it starts 401 - * within the bss section. So we don't overwrite it when the bss 402 - * section gets cleared. 401 + * Just like in case of IPL from VM reader we make sure there is a 402 + * gap of 4MB between end of kernel and start of initrd. 403 + * That way we can also be sure that saving an NSS will succeed, 404 + * which however only requires different segments. 403 405 */ 404 406 if (!INITRD_START || !INITRD_SIZE) 405 407 return; 406 - if (INITRD_START >= (unsigned long) __bss_stop) 408 + if (INITRD_START >= min_initrd_addr) 407 409 return; 408 - memmove(__bss_stop, (void *) INITRD_START, INITRD_SIZE); 409 - INITRD_START = (unsigned long) __bss_stop; 410 + memmove((void *) min_initrd_addr, (void *) INITRD_START, INITRD_SIZE); 411 + INITRD_START = min_initrd_addr; 410 412 #endif 411 413 } 412 414
+4 -3
arch/s390/kernel/ipl.c
··· 1220 1220 /* sysfs: create fcp kset for mixing attr group and bin attrs */ 1221 1221 reipl_fcp_kset = kset_create_and_add(IPL_FCP_STR, NULL, 1222 1222 &reipl_kset->kobj); 1223 - if (!reipl_kset) { 1223 + if (!reipl_fcp_kset) { 1224 1224 free_page((unsigned long) reipl_block_fcp); 1225 1225 return -ENOMEM; 1226 1226 } ··· 1618 1618 1619 1619 static void stop_run(struct shutdown_trigger *trigger) 1620 1620 { 1621 - if (strcmp(trigger->name, ON_PANIC_STR) == 0) 1621 + if (strcmp(trigger->name, ON_PANIC_STR) == 0 || 1622 + strcmp(trigger->name, ON_RESTART_STR) == 0) 1622 1623 disabled_wait((unsigned long) __builtin_return_address(0)); 1623 1624 while (sigp(smp_processor_id(), sigp_stop) == sigp_busy) 1624 1625 cpu_relax(); ··· 1718 1717 /* on restart */ 1719 1718 1720 1719 static struct shutdown_trigger on_restart_trigger = {ON_RESTART_STR, 1721 - &reipl_action}; 1720 + &stop_action}; 1722 1721 1723 1722 static ssize_t on_restart_show(struct kobject *kobj, 1724 1723 struct kobj_attribute *attr, char *page)
+7 -3
drivers/s390/block/dasd_ioctl.c
··· 249 249 static int dasd_ioctl_read_profile(struct dasd_block *block, void __user *argp) 250 250 { 251 251 struct dasd_profile_info_t *data; 252 + int rc = 0; 252 253 253 254 data = kmalloc(sizeof(*data), GFP_KERNEL); 254 255 if (!data) ··· 280 279 spin_unlock_bh(&block->profile.lock); 281 280 } else { 282 281 spin_unlock_bh(&block->profile.lock); 283 - return -EIO; 282 + rc = -EIO; 283 + goto out; 284 284 } 285 285 if (copy_to_user(argp, data, sizeof(*data))) 286 - return -EFAULT; 287 - return 0; 286 + rc = -EFAULT; 287 + out: 288 + kfree(data); 289 + return rc; 288 290 } 289 291 #else 290 292 static int dasd_ioctl_reset_profile(struct dasd_block *block)
+4 -2
drivers/s390/char/sclp_cmd.c
··· 383 383 switch (sccb->header.response_code) { 384 384 case 0x0020: 385 385 set_bit(id, sclp_storage_ids); 386 - for (i = 0; i < sccb->assigned; i++) 387 - sclp_unassign_storage(sccb->entries[i] >> 16); 386 + for (i = 0; i < sccb->assigned; i++) { 387 + if (sccb->entries[i]) 388 + sclp_unassign_storage(sccb->entries[i] >> 16); 389 + } 388 390 break; 389 391 default: 390 392 rc = -EIO;