aboutsummaryrefslogtreecommitdiffstats
path: root/drivers
diff options
context:
space:
mode:
authorLinus Torvalds <torvalds@woody.linux-foundation.org>2008-02-09 14:15:23 -0500
committerLinus Torvalds <torvalds@woody.linux-foundation.org>2008-02-09 14:15:23 -0500
commit531021f2ca681faf58f926771f85bb5c76f13eba (patch)
treeb730cd35a1bde5f2ddd85e080a6269df96c50074 /drivers
parent451688ba0b488faf274e13dc591734b1e695642c (diff)
parent6252d702c5311ce916caf75ed82e5c8245171c92 (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.c31
-rw-r--r--drivers/s390/cio/qdio.c18
-rw-r--r--drivers/s390/crypto/ap_bus.c4
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
637static int __init __sclp_vt220_init(void) 640static 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
673static const struct tty_operations sclp_vt220_ops = { 684static 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
729out_sclp:
730 sclp_unregister(&sclp_vt220_register);
731out_init: 735out_init:
732 __sclp_vt220_cleanup(); 736 if (cleanup)
737 __sclp_vt220_cleanup();
733out_driver: 738out_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);
61MODULE_PARM_DESC(domain, "domain index for ap devices"); 61MODULE_PARM_DESC(domain, "domain index for ap devices");
62EXPORT_SYMBOL(ap_domain_index); 62EXPORT_SYMBOL(ap_domain_index);
63 63
64static int ap_thread_flag = 1; 64static int ap_thread_flag = 0;
65module_param_named(poll_thread, ap_thread_flag, int, 0000); 65module_param_named(poll_thread, ap_thread_flag, int, 0000);
66MODULE_PARM_DESC(poll_thread, "Turn on/off poll thread, default is 1 (on)."); 66MODULE_PARM_DESC(poll_thread, "Turn on/off poll thread, default is 0 (off).");
67 67
68static struct device *ap_root_device = NULL; 68static struct device *ap_root_device = NULL;
69static DEFINE_SPINLOCK(ap_device_lock); 69static DEFINE_SPINLOCK(ap_device_lock);