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] correct address of _stext with CONFIG_SHARED_KERNEL=y
[S390] ptrace: fix return value of do_syscall_trace_enter()
[S390] dasd: fix race between tasklet and dasd_sleep_on

+14 -12
+1 -1
arch/s390/kernel/head31.S
··· 82 82 _ehead: 83 83 84 84 #ifdef CONFIG_SHARED_KERNEL 85 - .org 0x100000 85 + .org 0x100000 - 0x11000 # head.o ends at 0x11000 86 86 #endif 87 87 88 88 #
+1 -1
arch/s390/kernel/head64.S
··· 80 80 _ehead: 81 81 82 82 #ifdef CONFIG_SHARED_KERNEL 83 - .org 0x100000 83 + .org 0x100000 - 0x11000 # head.o ends at 0x11000 84 84 #endif 85 85 86 86 #
+2 -3
arch/s390/kernel/ptrace.c
··· 640 640 641 641 asmlinkage long do_syscall_trace_enter(struct pt_regs *regs) 642 642 { 643 - long ret; 643 + long ret = 0; 644 644 645 645 /* Do the secure computing check first. */ 646 646 secure_computing(regs->gprs[2]); ··· 649 649 * The sysc_tracesys code in entry.S stored the system 650 650 * call number to gprs[2]. 651 651 */ 652 - ret = regs->gprs[2]; 653 652 if (test_thread_flag(TIF_SYSCALL_TRACE) && 654 653 (tracehook_report_syscall_entry(regs) || 655 654 regs->gprs[2] >= NR_syscalls)) { ··· 670 671 regs->gprs[2], regs->orig_gpr2, 671 672 regs->gprs[3], regs->gprs[4], 672 673 regs->gprs[5]); 673 - return ret; 674 + return ret ?: regs->gprs[2]; 674 675 } 675 676 676 677 asmlinkage void do_syscall_trace_exit(struct pt_regs *regs)
+10 -7
drivers/s390/block/dasd.c
··· 37 37 */ 38 38 #define DASD_CHANQ_MAX_SIZE 4 39 39 40 + #define DASD_SLEEPON_START_TAG (void *) 1 41 + #define DASD_SLEEPON_END_TAG (void *) 2 42 + 40 43 /* 41 44 * SECTION: exported variables of dasd.c 42 45 */ ··· 1475 1472 */ 1476 1473 static void dasd_wakeup_cb(struct dasd_ccw_req *cqr, void *data) 1477 1474 { 1478 - wake_up((wait_queue_head_t *) data); 1475 + spin_lock_irq(get_ccwdev_lock(cqr->startdev->cdev)); 1476 + cqr->callback_data = DASD_SLEEPON_END_TAG; 1477 + spin_unlock_irq(get_ccwdev_lock(cqr->startdev->cdev)); 1478 + wake_up(&generic_waitq); 1479 1479 } 1480 1480 1481 1481 static inline int _wait_for_wakeup(struct dasd_ccw_req *cqr) ··· 1488 1482 1489 1483 device = cqr->startdev; 1490 1484 spin_lock_irq(get_ccwdev_lock(device->cdev)); 1491 - rc = ((cqr->status == DASD_CQR_DONE || 1492 - cqr->status == DASD_CQR_NEED_ERP || 1493 - cqr->status == DASD_CQR_TERMINATED) && 1494 - list_empty(&cqr->devlist)); 1485 + rc = (cqr->callback_data == DASD_SLEEPON_END_TAG); 1495 1486 spin_unlock_irq(get_ccwdev_lock(device->cdev)); 1496 1487 return rc; 1497 1488 } ··· 1576 1573 wait_event(generic_waitq, !(device->stopped)); 1577 1574 1578 1575 cqr->callback = dasd_wakeup_cb; 1579 - cqr->callback_data = (void *) &generic_waitq; 1576 + cqr->callback_data = DASD_SLEEPON_START_TAG; 1580 1577 dasd_add_request_tail(cqr); 1581 1578 if (interruptible) { 1582 1579 rc = wait_event_interruptible( ··· 1655 1652 } 1656 1653 1657 1654 cqr->callback = dasd_wakeup_cb; 1658 - cqr->callback_data = (void *) &generic_waitq; 1655 + cqr->callback_data = DASD_SLEEPON_START_TAG; 1659 1656 cqr->status = DASD_CQR_QUEUED; 1660 1657 list_add(&cqr->devlist, &device->ccw_queue); 1661 1658