]> nv-tegra.nvidia Code Review - linux-2.6.git/commitdiff
Merge branch 'for-linus' of git://git390.osdl.marist.edu/pub/scm/linux-2.6
authorLinus Torvalds <torvalds@linux-foundation.org>
Thu, 15 May 2008 16:10:13 +0000 (09:10 -0700)
committerLinus Torvalds <torvalds@linux-foundation.org>
Thu, 15 May 2008 16:10:13 +0000 (09:10 -0700)
* 'for-linus' of git://git390.osdl.marist.edu/pub/scm/linux-2.6:
  [S390] show_interrupts: prevent cpu hotplug when walking cpu_online_map.
  [S390] smp: __smp_call_function_map vs cpu_online_map fix.
  [S390] tape: Use ccw_dev_id to build cdev_id.
  [S390] dasd: fix timeout handling in interrupt handler
  [S390] s390dbf: Use const char * for dbf name.
  [S390] dasd: Use const in busid functions.
  [S390] blacklist.c: removed duplicated include
  [S390] vmlogrdr: module initialization function should return negative errors
  [S390] sparsemem vmemmap: initialize memmap.
  [S390] Remove last traces of cio_msg=.
  [S390] cio: Remove CCW_CMD_SUSPEND_RECONN in front of CCW_CMD_SET_PGID.

13 files changed:
Documentation/kernel-parameters.txt
arch/s390/kernel/debug.c
arch/s390/kernel/irq.c
arch/s390/kernel/smp.c
arch/s390/mm/vmem.c
drivers/s390/block/dasd.c
drivers/s390/block/dasd_devmap.c
drivers/s390/block/dasd_int.h
drivers/s390/char/tape_core.c
drivers/s390/char/vmlogrdr.c
drivers/s390/cio/blacklist.c
drivers/s390/cio/device_pgid.c
include/asm-s390/debug.h

index cdd5b934f43ea89865f1f605ecc5f295b03192d3..7038a6da3c12ecf396b8eafc0c42761fcdc6acc9 100644 (file)
@@ -398,9 +398,6 @@ and is between 256 and 4096 characters. It is defined in the file
        cio_ignore=     [S390]
                        See Documentation/s390/CommonIO for details.
 
-       cio_msg=        [S390]
-                       See Documentation/s390/CommonIO for details.
-
        clock=          [BUGS=X86-32, HW] gettimeofday clocksource override.
                        [Deprecated]
                        Forces specified clocksource (if available) to be used
index dff0568e67ec8869fa427b7769b0ca329b561650..c93d1296cc0a7eeff66feaa20e9666bb5e31b6fa 100644 (file)
@@ -71,7 +71,7 @@ static ssize_t debug_input(struct file *file, const char __user *user_buf,
                        size_t user_len, loff_t * offset);
 static int debug_open(struct inode *inode, struct file *file);
 static int debug_close(struct inode *inode, struct file *file);
-static debug_info_t*  debug_info_create(char *name, int pages_per_area,
+static debug_info_t *debug_info_create(const char *name, int pages_per_area,
                        int nr_areas, int buf_size, mode_t mode);
 static void debug_info_get(debug_info_t *);
 static void debug_info_put(debug_info_t *);
@@ -234,8 +234,8 @@ fail_malloc_areas:
  */
 
 static debug_info_t*
-debug_info_alloc(char *name, int pages_per_area, int nr_areas, int buf_size,
-               int level, int mode)
+debug_info_alloc(const char *name, int pages_per_area, int nr_areas,
+                int buf_size, int level, int mode)
 {
        debug_info_t* rc;
 
@@ -326,8 +326,8 @@ debug_info_free(debug_info_t* db_info){
  */
 
 static debug_info_t*
-debug_info_create(char *name, int pages_per_area, int nr_areas, int buf_size,
-                 mode_t mode)
+debug_info_create(const char *name, int pages_per_area, int nr_areas,
+                 int buf_size, mode_t mode)
 {
        debug_info_t* rc;
 
@@ -684,9 +684,9 @@ debug_close(struct inode *inode, struct file *file)
  * - Returns handle for debug area
  */
 
-debug_info_t *debug_register_mode(char *name, int pages_per_area, int nr_areas,
-                                 int buf_size, mode_t mode, uid_t uid,
-                                 gid_t gid)
+debug_info_t *debug_register_mode(const char *name, int pages_per_area,
+                                 int nr_areas, int buf_size, mode_t mode,
+                                 uid_t uid, gid_t gid)
 {
        debug_info_t *rc = NULL;
 
@@ -722,8 +722,8 @@ EXPORT_SYMBOL(debug_register_mode);
  * - returns handle for debug area
  */
 
-debug_info_t *debug_register(char *name, int pages_per_area, int nr_areas,
-                            int buf_size)
+debug_info_t *debug_register(const char *name, int pages_per_area,
+                            int nr_areas, int buf_size)
 {
        return debug_register_mode(name, pages_per_area, nr_areas, buf_size,
                                   S_IRUSR | S_IWUSR, 0, 0);
index c59a86dca5849617ac74428647fe3ddb7834937e..e7c5bfb7c755acf812f563a6c4d2986843fcbd04 100644 (file)
@@ -25,6 +25,7 @@ int show_interrupts(struct seq_file *p, void *v)
        static const char *intrclass_names[] = { "EXT", "I/O", };
        int i = *(loff_t *) v, j;
 
+       get_online_cpus();
        if (i == 0) {
                seq_puts(p, "           ");
                for_each_online_cpu(j)
@@ -43,7 +44,7 @@ int show_interrupts(struct seq_file *p, void *v)
                 seq_putc(p, '\n');
 
         }
-
+       put_online_cpus();
         return 0;
 }
 
index 0aeb290060d9cb379532568880dc4d408b0ac01c..1f4228948dc4396ad19c5bc1f771d13f3b19286d 100644 (file)
@@ -139,7 +139,6 @@ static void __smp_call_function_map(void (*func) (void *info), void *info,
        if (wait)
                data.finished = CPU_MASK_NONE;
 
-       spin_lock(&call_lock);
        call_data = &data;
 
        for_each_cpu_mask(cpu, map)
@@ -151,7 +150,6 @@ static void __smp_call_function_map(void (*func) (void *info), void *info,
        if (wait)
                while (!cpus_equal(map, data.finished))
                        cpu_relax();
-       spin_unlock(&call_lock);
 out:
        if (local) {
                local_irq_disable();
@@ -177,11 +175,11 @@ int smp_call_function(void (*func) (void *info), void *info, int nonatomic,
 {
        cpumask_t map;
 
-       preempt_disable();
+       spin_lock(&call_lock);
        map = cpu_online_map;
        cpu_clear(smp_processor_id(), map);
        __smp_call_function_map(func, info, nonatomic, wait, map);
-       preempt_enable();
+       spin_unlock(&call_lock);
        return 0;
 }
 EXPORT_SYMBOL(smp_call_function);
@@ -202,10 +200,10 @@ EXPORT_SYMBOL(smp_call_function);
 int smp_call_function_single(int cpu, void (*func) (void *info), void *info,
                             int nonatomic, int wait)
 {
-       preempt_disable();
+       spin_lock(&call_lock);
        __smp_call_function_map(func, info, nonatomic, wait,
                                cpumask_of_cpu(cpu));
-       preempt_enable();
+       spin_unlock(&call_lock);
        return 0;
 }
 EXPORT_SYMBOL(smp_call_function_single);
@@ -228,10 +226,10 @@ EXPORT_SYMBOL(smp_call_function_single);
 int smp_call_function_mask(cpumask_t mask, void (*func)(void *), void *info,
                           int wait)
 {
-       preempt_disable();
+       spin_lock(&call_lock);
        cpu_clear(smp_processor_id(), mask);
        __smp_call_function_map(func, info, 0, wait, mask);
-       preempt_enable();
+       spin_unlock(&call_lock);
        return 0;
 }
 EXPORT_SYMBOL(smp_call_function_mask);
@@ -592,7 +590,9 @@ int __cpuinit start_secondary(void *cpuvoid)
        pfault_init();
 
        /* Mark this cpu as online */
+       spin_lock(&call_lock);
        cpu_set(smp_processor_id(), cpu_online_map);
+       spin_unlock(&call_lock);
        /* Switch on interrupts */
        local_irq_enable();
        /* Print info about this processor */
index beccacf907f3481190b10496cad77a1bb4d1d23f..ea2804808f39a98c368637b75a060431fd750d54 100644 (file)
@@ -27,19 +27,12 @@ struct memory_segment {
 
 static LIST_HEAD(mem_segs);
 
-static void __ref *vmem_alloc_pages(unsigned int order)
-{
-       if (slab_is_available())
-               return (void *)__get_free_pages(GFP_KERNEL, order);
-       return alloc_bootmem_pages((1 << order) * PAGE_SIZE);
-}
-
-static inline pud_t *vmem_pud_alloc(void)
+static pud_t *vmem_pud_alloc(void)
 {
        pud_t *pud = NULL;
 
 #ifdef CONFIG_64BIT
-       pud = vmem_alloc_pages(2);
+       pud = vmemmap_alloc_block(PAGE_SIZE * 4, 0);
        if (!pud)
                return NULL;
        clear_table((unsigned long *) pud, _REGION3_ENTRY_EMPTY, PAGE_SIZE * 4);
@@ -47,12 +40,12 @@ static inline pud_t *vmem_pud_alloc(void)
        return pud;
 }
 
-static inline pmd_t *vmem_pmd_alloc(void)
+static pmd_t *vmem_pmd_alloc(void)
 {
        pmd_t *pmd = NULL;
 
 #ifdef CONFIG_64BIT
-       pmd = vmem_alloc_pages(2);
+       pmd = vmemmap_alloc_block(PAGE_SIZE * 4, 0);
        if (!pmd)
                return NULL;
        clear_table((unsigned long *) pmd, _SEGMENT_ENTRY_EMPTY, PAGE_SIZE * 4);
@@ -60,7 +53,7 @@ static inline pmd_t *vmem_pmd_alloc(void)
        return pmd;
 }
 
-static pte_t __init_refok *vmem_pte_alloc(void)
+static pte_t __ref *vmem_pte_alloc(void)
 {
        pte_t *pte;
 
@@ -214,7 +207,7 @@ int __meminit vmemmap_populate(struct page *start, unsigned long nr, int node)
                if (pte_none(*pt_dir)) {
                        unsigned long new_page;
 
-                       new_page =__pa(vmem_alloc_pages(0));
+                       new_page =__pa(vmemmap_alloc_block(PAGE_SIZE, 0));
                        if (!new_page)
                                goto out;
                        pte = pfn_pte(new_page >> PAGE_SHIFT, PAGE_KERNEL);
index ac6d4d3218b3d9c4d7652407c5847d87dc844fbb..8ba3f135da221fe59cfeb2badf3c25df8e28cdb5 100644 (file)
@@ -925,6 +925,8 @@ static void dasd_handle_killed_request(struct ccw_device *cdev,
        struct dasd_ccw_req *cqr;
        struct dasd_device *device;
 
+       if (!intparm)
+               return;
        cqr = (struct dasd_ccw_req *) intparm;
        if (cqr->status != DASD_CQR_IN_IO) {
                MESSAGE(KERN_DEBUG,
@@ -976,17 +978,16 @@ void dasd_int_handler(struct ccw_device *cdev, unsigned long intparm,
        if (IS_ERR(irb)) {
                switch (PTR_ERR(irb)) {
                case -EIO:
-                       dasd_handle_killed_request(cdev, intparm);
                        break;
                case -ETIMEDOUT:
                        printk(KERN_WARNING"%s(%s): request timed out\n",
                               __func__, cdev->dev.bus_id);
-                       //FIXME - dasd uses own timeout interface...
                        break;
                default:
                        printk(KERN_WARNING"%s(%s): unknown error %ld\n",
                               __func__, cdev->dev.bus_id, PTR_ERR(irb));
                }
+               dasd_handle_killed_request(cdev, intparm);
                return;
        }
 
index f4fb40257348e3bd3e42b59b1061332233e1eed0..d774e79476fee0c73e967979781210aa0faffdef 100644 (file)
@@ -86,10 +86,10 @@ static DEFINE_SPINLOCK(dasd_devmap_lock);
 static struct list_head dasd_hashlists[256];
 int dasd_max_devindex;
 
-static struct dasd_devmap *dasd_add_busid(char *, int);
+static struct dasd_devmap *dasd_add_busid(const char *, int);
 
 static inline int
-dasd_hash_busid(char *bus_id)
+dasd_hash_busid(const char *bus_id)
 {
        int hash, i;
 
@@ -394,7 +394,7 @@ dasd_parse(void)
  * devices.
  */
 static struct dasd_devmap *
-dasd_add_busid(char *bus_id, int features)
+dasd_add_busid(const char *bus_id, int features)
 {
        struct dasd_devmap *devmap, *new, *tmp;
        int hash;
@@ -430,7 +430,7 @@ dasd_add_busid(char *bus_id, int features)
  * Find devmap for device with given bus_id.
  */
 static struct dasd_devmap *
-dasd_find_busid(char *bus_id)
+dasd_find_busid(const char *bus_id)
 {
        struct dasd_devmap *devmap, *tmp;
        int hash;
@@ -452,7 +452,7 @@ dasd_find_busid(char *bus_id)
  * Check if busid has been added to the list of dasd ranges.
  */
 int
-dasd_busid_known(char *bus_id)
+dasd_busid_known(const char *bus_id)
 {
        return IS_ERR(dasd_find_busid(bus_id)) ? -ENOENT : 0;
 }
index 6c624bf44617174887ceab0e3395fc6491ab0c97..fb2f931cf8441d66c0fab05806c8f218f63d5308 100644 (file)
@@ -598,7 +598,7 @@ struct dasd_device *dasd_device_from_cdev_locked(struct ccw_device *);
 struct dasd_device *dasd_device_from_devindex(int);
 
 int dasd_parse(void);
-int dasd_busid_known(char *);
+int dasd_busid_known(const char *);
 
 /* externals in dasd_gendisk.c */
 int  dasd_gendisk_init(void);
index 7ad8cf157641a22dd000831de72173f76aa2e5e6..76e44eb7c47f74c7d45988e0fa50316a5480620b 100644 (file)
@@ -76,32 +76,9 @@ const char *tape_op_verbose[TO_SIZE] =
        [TO_KEKL_QUERY] = "KLQ",[TO_RDC] = "RDC",
 };
 
-static int
-busid_to_int(char *bus_id)
+static int devid_to_int(struct ccw_dev_id *dev_id)
 {
-       int     dec;
-       int     d;
-       char *  s;
-
-       for(s = bus_id, d = 0; *s != '\0' && *s != '.'; s++)
-               d = (d * 10) + (*s - '0');
-       dec = d;
-       for(s++, d = 0; *s != '\0' && *s != '.'; s++)
-               d = (d * 10) + (*s - '0');
-       dec = (dec << 8) + d;
-
-       for(s++; *s != '\0'; s++) {
-               if (*s >= '0' && *s <= '9') {
-                       d = *s - '0';
-               } else if (*s >= 'a' && *s <= 'f') {
-                       d = *s - 'a' + 10;
-               } else {
-                       d = *s - 'A' + 10;
-               }
-               dec = (dec << 4) + d;
-       }
-
-       return dec;
+       return dev_id->devno + (dev_id->ssid << 16);
 }
 
 /*
@@ -551,6 +528,7 @@ tape_generic_probe(struct ccw_device *cdev)
 {
        struct tape_device *device;
        int ret;
+       struct ccw_dev_id dev_id;
 
        device = tape_alloc_device();
        if (IS_ERR(device))
@@ -565,7 +543,8 @@ tape_generic_probe(struct ccw_device *cdev)
        cdev->dev.driver_data = device;
        cdev->handler = __tape_do_irq;
        device->cdev = cdev;
-       device->cdev_id = busid_to_int(cdev->dev.bus_id);
+       ccw_device_get_id(cdev, &dev_id);
+       device->cdev_id = devid_to_int(&dev_id);
        PRINT_INFO("tape device %s found\n", cdev->dev.bus_id);
        return ret;
 }
index d364e0bfae12eb1ff999439aee0a94fa7c99087d..e8487347e4d4aa33eb7e844e815ad77028b50f16 100644 (file)
@@ -858,7 +858,7 @@ static int __init vmlogrdr_init(void)
        for (i=0; i < MAXMINOR; ++i ) {
                sys_ser[i].buffer = (char *) get_zeroed_page(GFP_KERNEL);
                if (!sys_ser[i].buffer) {
-                       rc = ENOMEM;
+                       rc = -ENOMEM;
                        break;
                }
                sys_ser[i].current_position = sys_ser[i].buffer;
index 9c21b8f43f9b70ab8b559d9a880bfb160d73ec01..a4a5f2efea4865cd4932ef92a01ea3460cd1a300 100644 (file)
@@ -19,7 +19,6 @@
 
 #include <asm/cio.h>
 #include <asm/uaccess.h>
-#include <asm/cio.h>
 
 #include "blacklist.h"
 #include "cio.h"
index ba559053402e341134af40565b8a571f4b3359d9..5cf7be008e981232742c7d57420e0359dd33e977 100644 (file)
@@ -243,16 +243,10 @@ __ccw_device_do_pgid(struct ccw_device *cdev, __u8 func)
        /* Setup sense path group id channel program. */
        cdev->private->pgid[0].inf.fc = func;
        ccw = cdev->private->iccws;
-       if (!cdev->private->flags.pgid_single) {
-               cdev->private->pgid[0].inf.fc |= SPID_FUNC_MULTI_PATH;
-               ccw->cmd_code = CCW_CMD_SUSPEND_RECONN;
-               ccw->cda = 0;
-               ccw->count = 0;
-               ccw->flags = CCW_FLAG_SLI | CCW_FLAG_CC;
-               ccw++;
-       } else
+       if (cdev->private->flags.pgid_single)
                cdev->private->pgid[0].inf.fc |= SPID_FUNC_SINGLE_PATH;
-
+       else
+               cdev->private->pgid[0].inf.fc |= SPID_FUNC_MULTI_PATH;
        ccw->cmd_code = CCW_CMD_SET_PGID;
        ccw->cda = (__u32) __pa (&cdev->private->pgid[0]);
        ccw->count = sizeof (struct pgid);
index 335baf4fc64f59991c2d37fb965e7de46006ef6b..9450ce6e32defae5e57a6cd8e138506b350e4b0f 100644 (file)
@@ -120,10 +120,10 @@ debug_entry_t* debug_exception_common(debug_info_t* id, int level,
 
 /* Debug Feature API: */
 
-debug_info_t* debug_register(char* name, int pages, int nr_areas,
+debug_info_t *debug_register(const char *name, int pages, int nr_areas,
                              int buf_size);
 
-debug_info_t *debug_register_mode(char *name, int pages, int nr_areas,
+debug_info_t *debug_register_mode(const char *name, int pages, int nr_areas,
                                  int buf_size, mode_t mode, uid_t uid,
                                  gid_t gid);