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] 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.

+46 -82
-3
Documentation/kernel-parameters.txt
··· 398 398 cio_ignore= [S390] 399 399 See Documentation/s390/CommonIO for details. 400 400 401 - cio_msg= [S390] 402 - See Documentation/s390/CommonIO for details. 403 - 404 401 clock= [BUGS=X86-32, HW] gettimeofday clocksource override. 405 402 [Deprecated] 406 403 Forces specified clocksource (if available) to be used
+10 -10
arch/s390/kernel/debug.c
··· 71 71 size_t user_len, loff_t * offset); 72 72 static int debug_open(struct inode *inode, struct file *file); 73 73 static int debug_close(struct inode *inode, struct file *file); 74 - static debug_info_t* debug_info_create(char *name, int pages_per_area, 74 + static debug_info_t *debug_info_create(const char *name, int pages_per_area, 75 75 int nr_areas, int buf_size, mode_t mode); 76 76 static void debug_info_get(debug_info_t *); 77 77 static void debug_info_put(debug_info_t *); ··· 234 234 */ 235 235 236 236 static debug_info_t* 237 - debug_info_alloc(char *name, int pages_per_area, int nr_areas, int buf_size, 238 - int level, int mode) 237 + debug_info_alloc(const char *name, int pages_per_area, int nr_areas, 238 + int buf_size, int level, int mode) 239 239 { 240 240 debug_info_t* rc; 241 241 ··· 326 326 */ 327 327 328 328 static debug_info_t* 329 - debug_info_create(char *name, int pages_per_area, int nr_areas, int buf_size, 330 - mode_t mode) 329 + debug_info_create(const char *name, int pages_per_area, int nr_areas, 330 + int buf_size, mode_t mode) 331 331 { 332 332 debug_info_t* rc; 333 333 ··· 684 684 * - Returns handle for debug area 685 685 */ 686 686 687 - debug_info_t *debug_register_mode(char *name, int pages_per_area, int nr_areas, 688 - int buf_size, mode_t mode, uid_t uid, 689 - gid_t gid) 687 + debug_info_t *debug_register_mode(const char *name, int pages_per_area, 688 + int nr_areas, int buf_size, mode_t mode, 689 + uid_t uid, gid_t gid) 690 690 { 691 691 debug_info_t *rc = NULL; 692 692 ··· 722 722 * - returns handle for debug area 723 723 */ 724 724 725 - debug_info_t *debug_register(char *name, int pages_per_area, int nr_areas, 726 - int buf_size) 725 + debug_info_t *debug_register(const char *name, int pages_per_area, 726 + int nr_areas, int buf_size) 727 727 { 728 728 return debug_register_mode(name, pages_per_area, nr_areas, buf_size, 729 729 S_IRUSR | S_IWUSR, 0, 0);
+2 -1
arch/s390/kernel/irq.c
··· 25 25 static const char *intrclass_names[] = { "EXT", "I/O", }; 26 26 int i = *(loff_t *) v, j; 27 27 28 + get_online_cpus(); 28 29 if (i == 0) { 29 30 seq_puts(p, " "); 30 31 for_each_online_cpu(j) ··· 44 43 seq_putc(p, '\n'); 45 44 46 45 } 47 - 46 + put_online_cpus(); 48 47 return 0; 49 48 } 50 49
+8 -8
arch/s390/kernel/smp.c
··· 139 139 if (wait) 140 140 data.finished = CPU_MASK_NONE; 141 141 142 - spin_lock(&call_lock); 143 142 call_data = &data; 144 143 145 144 for_each_cpu_mask(cpu, map) ··· 150 151 if (wait) 151 152 while (!cpus_equal(map, data.finished)) 152 153 cpu_relax(); 153 - spin_unlock(&call_lock); 154 154 out: 155 155 if (local) { 156 156 local_irq_disable(); ··· 175 177 { 176 178 cpumask_t map; 177 179 178 - preempt_disable(); 180 + spin_lock(&call_lock); 179 181 map = cpu_online_map; 180 182 cpu_clear(smp_processor_id(), map); 181 183 __smp_call_function_map(func, info, nonatomic, wait, map); 182 - preempt_enable(); 184 + spin_unlock(&call_lock); 183 185 return 0; 184 186 } 185 187 EXPORT_SYMBOL(smp_call_function); ··· 200 202 int smp_call_function_single(int cpu, void (*func) (void *info), void *info, 201 203 int nonatomic, int wait) 202 204 { 203 - preempt_disable(); 205 + spin_lock(&call_lock); 204 206 __smp_call_function_map(func, info, nonatomic, wait, 205 207 cpumask_of_cpu(cpu)); 206 - preempt_enable(); 208 + spin_unlock(&call_lock); 207 209 return 0; 208 210 } 209 211 EXPORT_SYMBOL(smp_call_function_single); ··· 226 228 int smp_call_function_mask(cpumask_t mask, void (*func)(void *), void *info, 227 229 int wait) 228 230 { 229 - preempt_disable(); 231 + spin_lock(&call_lock); 230 232 cpu_clear(smp_processor_id(), mask); 231 233 __smp_call_function_map(func, info, 0, wait, mask); 232 - preempt_enable(); 234 + spin_unlock(&call_lock); 233 235 return 0; 234 236 } 235 237 EXPORT_SYMBOL(smp_call_function_mask); ··· 590 592 pfault_init(); 591 593 592 594 /* Mark this cpu as online */ 595 + spin_lock(&call_lock); 593 596 cpu_set(smp_processor_id(), cpu_online_map); 597 + spin_unlock(&call_lock); 594 598 /* Switch on interrupts */ 595 599 local_irq_enable(); 596 600 /* Print info about this processor */
+6 -13
arch/s390/mm/vmem.c
··· 27 27 28 28 static LIST_HEAD(mem_segs); 29 29 30 - static void __ref *vmem_alloc_pages(unsigned int order) 31 - { 32 - if (slab_is_available()) 33 - return (void *)__get_free_pages(GFP_KERNEL, order); 34 - return alloc_bootmem_pages((1 << order) * PAGE_SIZE); 35 - } 36 - 37 - static inline pud_t *vmem_pud_alloc(void) 30 + static pud_t *vmem_pud_alloc(void) 38 31 { 39 32 pud_t *pud = NULL; 40 33 41 34 #ifdef CONFIG_64BIT 42 - pud = vmem_alloc_pages(2); 35 + pud = vmemmap_alloc_block(PAGE_SIZE * 4, 0); 43 36 if (!pud) 44 37 return NULL; 45 38 clear_table((unsigned long *) pud, _REGION3_ENTRY_EMPTY, PAGE_SIZE * 4); ··· 40 47 return pud; 41 48 } 42 49 43 - static inline pmd_t *vmem_pmd_alloc(void) 50 + static pmd_t *vmem_pmd_alloc(void) 44 51 { 45 52 pmd_t *pmd = NULL; 46 53 47 54 #ifdef CONFIG_64BIT 48 - pmd = vmem_alloc_pages(2); 55 + pmd = vmemmap_alloc_block(PAGE_SIZE * 4, 0); 49 56 if (!pmd) 50 57 return NULL; 51 58 clear_table((unsigned long *) pmd, _SEGMENT_ENTRY_EMPTY, PAGE_SIZE * 4); ··· 53 60 return pmd; 54 61 } 55 62 56 - static pte_t __init_refok *vmem_pte_alloc(void) 63 + static pte_t __ref *vmem_pte_alloc(void) 57 64 { 58 65 pte_t *pte; 59 66 ··· 207 214 if (pte_none(*pt_dir)) { 208 215 unsigned long new_page; 209 216 210 - new_page =__pa(vmem_alloc_pages(0)); 217 + new_page =__pa(vmemmap_alloc_block(PAGE_SIZE, 0)); 211 218 if (!new_page) 212 219 goto out; 213 220 pte = pfn_pte(new_page >> PAGE_SHIFT, PAGE_KERNEL);
+3 -2
drivers/s390/block/dasd.c
··· 925 925 struct dasd_ccw_req *cqr; 926 926 struct dasd_device *device; 927 927 928 + if (!intparm) 929 + return; 928 930 cqr = (struct dasd_ccw_req *) intparm; 929 931 if (cqr->status != DASD_CQR_IN_IO) { 930 932 MESSAGE(KERN_DEBUG, ··· 978 976 if (IS_ERR(irb)) { 979 977 switch (PTR_ERR(irb)) { 980 978 case -EIO: 981 - dasd_handle_killed_request(cdev, intparm); 982 979 break; 983 980 case -ETIMEDOUT: 984 981 printk(KERN_WARNING"%s(%s): request timed out\n", 985 982 __func__, cdev->dev.bus_id); 986 - //FIXME - dasd uses own timeout interface... 987 983 break; 988 984 default: 989 985 printk(KERN_WARNING"%s(%s): unknown error %ld\n", 990 986 __func__, cdev->dev.bus_id, PTR_ERR(irb)); 991 987 } 988 + dasd_handle_killed_request(cdev, intparm); 992 989 return; 993 990 } 994 991
+5 -5
drivers/s390/block/dasd_devmap.c
··· 86 86 static struct list_head dasd_hashlists[256]; 87 87 int dasd_max_devindex; 88 88 89 - static struct dasd_devmap *dasd_add_busid(char *, int); 89 + static struct dasd_devmap *dasd_add_busid(const char *, int); 90 90 91 91 static inline int 92 - dasd_hash_busid(char *bus_id) 92 + dasd_hash_busid(const char *bus_id) 93 93 { 94 94 int hash, i; 95 95 ··· 394 394 * devices. 395 395 */ 396 396 static struct dasd_devmap * 397 - dasd_add_busid(char *bus_id, int features) 397 + dasd_add_busid(const char *bus_id, int features) 398 398 { 399 399 struct dasd_devmap *devmap, *new, *tmp; 400 400 int hash; ··· 430 430 * Find devmap for device with given bus_id. 431 431 */ 432 432 static struct dasd_devmap * 433 - dasd_find_busid(char *bus_id) 433 + dasd_find_busid(const char *bus_id) 434 434 { 435 435 struct dasd_devmap *devmap, *tmp; 436 436 int hash; ··· 452 452 * Check if busid has been added to the list of dasd ranges. 453 453 */ 454 454 int 455 - dasd_busid_known(char *bus_id) 455 + dasd_busid_known(const char *bus_id) 456 456 { 457 457 return IS_ERR(dasd_find_busid(bus_id)) ? -ENOENT : 0; 458 458 }
+1 -1
drivers/s390/block/dasd_int.h
··· 598 598 struct dasd_device *dasd_device_from_devindex(int); 599 599 600 600 int dasd_parse(void); 601 - int dasd_busid_known(char *); 601 + int dasd_busid_known(const char *); 602 602 603 603 /* externals in dasd_gendisk.c */ 604 604 int dasd_gendisk_init(void);
+5 -26
drivers/s390/char/tape_core.c
··· 76 76 [TO_KEKL_QUERY] = "KLQ",[TO_RDC] = "RDC", 77 77 }; 78 78 79 - static int 80 - busid_to_int(char *bus_id) 79 + static int devid_to_int(struct ccw_dev_id *dev_id) 81 80 { 82 - int dec; 83 - int d; 84 - char * s; 85 - 86 - for(s = bus_id, d = 0; *s != '\0' && *s != '.'; s++) 87 - d = (d * 10) + (*s - '0'); 88 - dec = d; 89 - for(s++, d = 0; *s != '\0' && *s != '.'; s++) 90 - d = (d * 10) + (*s - '0'); 91 - dec = (dec << 8) + d; 92 - 93 - for(s++; *s != '\0'; s++) { 94 - if (*s >= '0' && *s <= '9') { 95 - d = *s - '0'; 96 - } else if (*s >= 'a' && *s <= 'f') { 97 - d = *s - 'a' + 10; 98 - } else { 99 - d = *s - 'A' + 10; 100 - } 101 - dec = (dec << 4) + d; 102 - } 103 - 104 - return dec; 81 + return dev_id->devno + (dev_id->ssid << 16); 105 82 } 106 83 107 84 /* ··· 528 551 { 529 552 struct tape_device *device; 530 553 int ret; 554 + struct ccw_dev_id dev_id; 531 555 532 556 device = tape_alloc_device(); 533 557 if (IS_ERR(device)) ··· 543 565 cdev->dev.driver_data = device; 544 566 cdev->handler = __tape_do_irq; 545 567 device->cdev = cdev; 546 - device->cdev_id = busid_to_int(cdev->dev.bus_id); 568 + ccw_device_get_id(cdev, &dev_id); 569 + device->cdev_id = devid_to_int(&dev_id); 547 570 PRINT_INFO("tape device %s found\n", cdev->dev.bus_id); 548 571 return ret; 549 572 }
+1 -1
drivers/s390/char/vmlogrdr.c
··· 858 858 for (i=0; i < MAXMINOR; ++i ) { 859 859 sys_ser[i].buffer = (char *) get_zeroed_page(GFP_KERNEL); 860 860 if (!sys_ser[i].buffer) { 861 - rc = ENOMEM; 861 + rc = -ENOMEM; 862 862 break; 863 863 } 864 864 sys_ser[i].current_position = sys_ser[i].buffer;
-1
drivers/s390/cio/blacklist.c
··· 19 19 20 20 #include <asm/cio.h> 21 21 #include <asm/uaccess.h> 22 - #include <asm/cio.h> 23 22 24 23 #include "blacklist.h" 25 24 #include "cio.h"
+3 -9
drivers/s390/cio/device_pgid.c
··· 243 243 /* Setup sense path group id channel program. */ 244 244 cdev->private->pgid[0].inf.fc = func; 245 245 ccw = cdev->private->iccws; 246 - if (!cdev->private->flags.pgid_single) { 247 - cdev->private->pgid[0].inf.fc |= SPID_FUNC_MULTI_PATH; 248 - ccw->cmd_code = CCW_CMD_SUSPEND_RECONN; 249 - ccw->cda = 0; 250 - ccw->count = 0; 251 - ccw->flags = CCW_FLAG_SLI | CCW_FLAG_CC; 252 - ccw++; 253 - } else 246 + if (cdev->private->flags.pgid_single) 254 247 cdev->private->pgid[0].inf.fc |= SPID_FUNC_SINGLE_PATH; 255 - 248 + else 249 + cdev->private->pgid[0].inf.fc |= SPID_FUNC_MULTI_PATH; 256 250 ccw->cmd_code = CCW_CMD_SET_PGID; 257 251 ccw->cda = (__u32) __pa (&cdev->private->pgid[0]); 258 252 ccw->count = sizeof (struct pgid);
+2 -2
include/asm-s390/debug.h
··· 120 120 121 121 /* Debug Feature API: */ 122 122 123 - debug_info_t* debug_register(char* name, int pages, int nr_areas, 123 + debug_info_t *debug_register(const char *name, int pages, int nr_areas, 124 124 int buf_size); 125 125 126 - debug_info_t *debug_register_mode(char *name, int pages, int nr_areas, 126 + debug_info_t *debug_register_mode(const char *name, int pages, int nr_areas, 127 127 int buf_size, mode_t mode, uid_t uid, 128 128 gid_t gid); 129 129