diff options
author | Linus Torvalds <torvalds@woody.linux-foundation.org> | 2008-02-09 14:15:23 -0500 |
---|---|---|
committer | Linus Torvalds <torvalds@woody.linux-foundation.org> | 2008-02-09 14:15:23 -0500 |
commit | 531021f2ca681faf58f926771f85bb5c76f13eba (patch) | |
tree | b730cd35a1bde5f2ddd85e080a6269df96c50074 /drivers | |
parent | 451688ba0b488faf274e13dc591734b1e695642c (diff) | |
parent | 6252d702c5311ce916caf75ed82e5c8245171c92 (diff) |
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] dynamic page tables.
[S390] Add four level page tables for CONFIG_64BIT=y.
[S390] 1K/2K page table pages.
[S390] Remove a.out header file.
[S390] sclp_vt220: Fix vt220 initialization
[S390] qdio: avoid hang when establishing qdio queues
[S390] VMEM_MAX_PHYS overflow on 31 bit.
[S390] zcrypt: Do not start ap poll thread per default
[S390] Fix __ffs_word_loop/__ffz_word_loop inlnie assembly.
[S390] Wire up new timerfd syscalls.
[S390] Update default configuration.
Diffstat (limited to 'drivers')
-rw-r--r-- | drivers/s390/char/sclp_vt220.c | 31 | ||||
-rw-r--r-- | drivers/s390/cio/qdio.c | 18 | ||||
-rw-r--r-- | drivers/s390/crypto/ap_bus.c | 4 |
3 files changed, 28 insertions, 25 deletions
diff --git a/drivers/s390/char/sclp_vt220.c b/drivers/s390/char/sclp_vt220.c index 68071622d4bb..f47f4a768be5 100644 --- a/drivers/s390/char/sclp_vt220.c +++ b/drivers/s390/char/sclp_vt220.c | |||
@@ -3,7 +3,7 @@ | |||
3 | * SCLP VT220 terminal driver. | 3 | * SCLP VT220 terminal driver. |
4 | * | 4 | * |
5 | * S390 version | 5 | * S390 version |
6 | * Copyright (C) 2003 IBM Deutschland Entwicklung GmbH, IBM Corporation | 6 | * Copyright IBM Corp. 2003,2008 |
7 | * Author(s): Peter Oberparleiter <Peter.Oberparleiter@de.ibm.com> | 7 | * Author(s): Peter Oberparleiter <Peter.Oberparleiter@de.ibm.com> |
8 | */ | 8 | */ |
9 | 9 | ||
@@ -632,6 +632,9 @@ static void __init __sclp_vt220_cleanup(void) | |||
632 | else | 632 | else |
633 | free_bootmem((unsigned long) page, PAGE_SIZE); | 633 | free_bootmem((unsigned long) page, PAGE_SIZE); |
634 | } | 634 | } |
635 | if (!list_empty(&sclp_vt220_register.list)) | ||
636 | sclp_unregister(&sclp_vt220_register); | ||
637 | sclp_vt220_initialized = 0; | ||
635 | } | 638 | } |
636 | 639 | ||
637 | static int __init __sclp_vt220_init(void) | 640 | static int __init __sclp_vt220_init(void) |
@@ -639,6 +642,7 @@ static int __init __sclp_vt220_init(void) | |||
639 | void *page; | 642 | void *page; |
640 | int i; | 643 | int i; |
641 | int num_pages; | 644 | int num_pages; |
645 | int rc; | ||
642 | 646 | ||
643 | if (sclp_vt220_initialized) | 647 | if (sclp_vt220_initialized) |
644 | return 0; | 648 | return 0; |
@@ -667,7 +671,14 @@ static int __init __sclp_vt220_init(void) | |||
667 | } | 671 | } |
668 | list_add_tail((struct list_head *) page, &sclp_vt220_empty); | 672 | list_add_tail((struct list_head *) page, &sclp_vt220_empty); |
669 | } | 673 | } |
670 | return 0; | 674 | rc = sclp_register(&sclp_vt220_register); |
675 | if (rc) { | ||
676 | printk(KERN_ERR SCLP_VT220_PRINT_HEADER | ||
677 | "could not register vt220 - " | ||
678 | "sclp_register returned %d\n", rc); | ||
679 | __sclp_vt220_cleanup(); | ||
680 | } | ||
681 | return rc; | ||
671 | } | 682 | } |
672 | 683 | ||
673 | static const struct tty_operations sclp_vt220_ops = { | 684 | static const struct tty_operations sclp_vt220_ops = { |
@@ -688,22 +699,17 @@ static int __init sclp_vt220_tty_init(void) | |||
688 | { | 699 | { |
689 | struct tty_driver *driver; | 700 | struct tty_driver *driver; |
690 | int rc; | 701 | int rc; |
702 | int cleanup; | ||
691 | 703 | ||
692 | /* Note: we're not testing for CONSOLE_IS_SCLP here to preserve | 704 | /* Note: we're not testing for CONSOLE_IS_SCLP here to preserve |
693 | * symmetry between VM and LPAR systems regarding ttyS1. */ | 705 | * symmetry between VM and LPAR systems regarding ttyS1. */ |
694 | driver = alloc_tty_driver(1); | 706 | driver = alloc_tty_driver(1); |
695 | if (!driver) | 707 | if (!driver) |
696 | return -ENOMEM; | 708 | return -ENOMEM; |
709 | cleanup = !sclp_vt220_initialized; | ||
697 | rc = __sclp_vt220_init(); | 710 | rc = __sclp_vt220_init(); |
698 | if (rc) | 711 | if (rc) |
699 | goto out_driver; | 712 | goto out_driver; |
700 | rc = sclp_register(&sclp_vt220_register); | ||
701 | if (rc) { | ||
702 | printk(KERN_ERR SCLP_VT220_PRINT_HEADER | ||
703 | "could not register tty - " | ||
704 | "sclp_register returned %d\n", rc); | ||
705 | goto out_init; | ||
706 | } | ||
707 | 713 | ||
708 | driver->owner = THIS_MODULE; | 714 | driver->owner = THIS_MODULE; |
709 | driver->driver_name = SCLP_VT220_DRIVER_NAME; | 715 | driver->driver_name = SCLP_VT220_DRIVER_NAME; |
@@ -721,15 +727,14 @@ static int __init sclp_vt220_tty_init(void) | |||
721 | printk(KERN_ERR SCLP_VT220_PRINT_HEADER | 727 | printk(KERN_ERR SCLP_VT220_PRINT_HEADER |
722 | "could not register tty - " | 728 | "could not register tty - " |
723 | "tty_register_driver returned %d\n", rc); | 729 | "tty_register_driver returned %d\n", rc); |
724 | goto out_sclp; | 730 | goto out_init; |
725 | } | 731 | } |
726 | sclp_vt220_driver = driver; | 732 | sclp_vt220_driver = driver; |
727 | return 0; | 733 | return 0; |
728 | 734 | ||
729 | out_sclp: | ||
730 | sclp_unregister(&sclp_vt220_register); | ||
731 | out_init: | 735 | out_init: |
732 | __sclp_vt220_cleanup(); | 736 | if (cleanup) |
737 | __sclp_vt220_cleanup(); | ||
733 | out_driver: | 738 | out_driver: |
734 | put_tty_driver(driver); | 739 | put_tty_driver(driver); |
735 | return rc; | 740 | return rc; |
diff --git a/drivers/s390/cio/qdio.c b/drivers/s390/cio/qdio.c index e2a781b6b21d..097fc0967e9d 100644 --- a/drivers/s390/cio/qdio.c +++ b/drivers/s390/cio/qdio.c | |||
@@ -3189,13 +3189,11 @@ qdio_establish(struct qdio_initialize *init_data) | |||
3189 | spin_lock_irqsave(get_ccwdev_lock(cdev),saveflags); | 3189 | spin_lock_irqsave(get_ccwdev_lock(cdev),saveflags); |
3190 | 3190 | ||
3191 | ccw_device_set_options_mask(cdev, 0); | 3191 | ccw_device_set_options_mask(cdev, 0); |
3192 | result=ccw_device_start_timeout(cdev,&irq_ptr->ccw, | 3192 | result = ccw_device_start(cdev, &irq_ptr->ccw, |
3193 | QDIO_DOING_ESTABLISH,0, 0, | 3193 | QDIO_DOING_ESTABLISH, 0, 0); |
3194 | QDIO_ESTABLISH_TIMEOUT); | ||
3195 | if (result) { | 3194 | if (result) { |
3196 | result2=ccw_device_start_timeout(cdev,&irq_ptr->ccw, | 3195 | result2 = ccw_device_start(cdev, &irq_ptr->ccw, |
3197 | QDIO_DOING_ESTABLISH,0,0, | 3196 | QDIO_DOING_ESTABLISH, 0, 0); |
3198 | QDIO_ESTABLISH_TIMEOUT); | ||
3199 | sprintf(dbf_text,"eq:io%4x",result); | 3197 | sprintf(dbf_text,"eq:io%4x",result); |
3200 | QDIO_DBF_TEXT2(1,setup,dbf_text); | 3198 | QDIO_DBF_TEXT2(1,setup,dbf_text); |
3201 | if (result2) { | 3199 | if (result2) { |
@@ -3219,10 +3217,10 @@ qdio_establish(struct qdio_initialize *init_data) | |||
3219 | return result; | 3217 | return result; |
3220 | } | 3218 | } |
3221 | 3219 | ||
3222 | /* Timeout is cared for already by using ccw_device_start_timeout(). */ | 3220 | wait_event_interruptible_timeout(cdev->private->wait_q, |
3223 | wait_event_interruptible(cdev->private->wait_q, | 3221 | irq_ptr->state == QDIO_IRQ_STATE_ESTABLISHED || |
3224 | irq_ptr->state == QDIO_IRQ_STATE_ESTABLISHED || | 3222 | irq_ptr->state == QDIO_IRQ_STATE_ERR, |
3225 | irq_ptr->state == QDIO_IRQ_STATE_ERR); | 3223 | QDIO_ESTABLISH_TIMEOUT); |
3226 | 3224 | ||
3227 | if (irq_ptr->state == QDIO_IRQ_STATE_ESTABLISHED) | 3225 | if (irq_ptr->state == QDIO_IRQ_STATE_ESTABLISHED) |
3228 | result = 0; | 3226 | result = 0; |
diff --git a/drivers/s390/crypto/ap_bus.c b/drivers/s390/crypto/ap_bus.c index 67aaff3e668d..d0c6fd3b1c19 100644 --- a/drivers/s390/crypto/ap_bus.c +++ b/drivers/s390/crypto/ap_bus.c | |||
@@ -61,9 +61,9 @@ module_param_named(domain, ap_domain_index, int, 0000); | |||
61 | MODULE_PARM_DESC(domain, "domain index for ap devices"); | 61 | MODULE_PARM_DESC(domain, "domain index for ap devices"); |
62 | EXPORT_SYMBOL(ap_domain_index); | 62 | EXPORT_SYMBOL(ap_domain_index); |
63 | 63 | ||
64 | static int ap_thread_flag = 1; | 64 | static int ap_thread_flag = 0; |
65 | module_param_named(poll_thread, ap_thread_flag, int, 0000); | 65 | module_param_named(poll_thread, ap_thread_flag, int, 0000); |
66 | MODULE_PARM_DESC(poll_thread, "Turn on/off poll thread, default is 1 (on)."); | 66 | MODULE_PARM_DESC(poll_thread, "Turn on/off poll thread, default is 0 (off)."); |
67 | 67 | ||
68 | static struct device *ap_root_device = NULL; | 68 | static struct device *ap_root_device = NULL; |
69 | static DEFINE_SPINLOCK(ap_device_lock); | 69 | static DEFINE_SPINLOCK(ap_device_lock); |