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