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] Update default configuration.
[S390] disassembler: fix idte instruction format.
[S390] tape: fix race with stack local wait_queue_head_t.
[S390] 3270: fix race with stack local wait_queue_head_t.
[S390] dasd: use a generic wait_queue for sleep_on
[S390] sclp_vt220: fix scheduling while atomic bug.
[S390] showmem: Only walk spanned pages.
[S390] appldata: prevent cpu hotplug when walking cpu_online_map.
[S390] Fix section mismatch warnings.
[S390] s390 types: make dma_addr_t 64 bit capable
[S390] tape: Fix race condition in tape block device driver
[S390] fix sparsemem related compile error with allnoconfig on s390

+101 -87
+3
arch/s390/Kconfig
··· 308 308 config ARCH_SPARSEMEM_DEFAULT 309 309 def_bool y 310 310 311 + config ARCH_SELECT_MEMORY_MODEL 312 + def_bool y 313 + 311 314 source "mm/Kconfig" 312 315 313 316 comment "I/O subsystem configuration"
+8
arch/s390/appldata/appldata_base.c
··· 130 130 131 131 P_DEBUG(" -= Work Queue =-\n"); 132 132 i = 0; 133 + get_online_cpus(); 133 134 spin_lock(&appldata_ops_lock); 134 135 list_for_each(lh, &appldata_ops_list) { 135 136 ops = list_entry(lh, struct appldata_ops, list); ··· 141 140 } 142 141 } 143 142 spin_unlock(&appldata_ops_lock); 143 + put_online_cpus(); 144 144 } 145 145 146 146 /* ··· 268 266 len = *lenp; 269 267 if (copy_from_user(buf, buffer, len > sizeof(buf) ? sizeof(buf) : len)) 270 268 return -EFAULT; 269 + get_online_cpus(); 271 270 spin_lock(&appldata_timer_lock); 272 271 if (buf[0] == '1') 273 272 __appldata_vtimer_setup(APPLDATA_ADD_TIMER); 274 273 else if (buf[0] == '0') 275 274 __appldata_vtimer_setup(APPLDATA_DEL_TIMER); 276 275 spin_unlock(&appldata_timer_lock); 276 + put_online_cpus(); 277 277 out: 278 278 *lenp = len; 279 279 *ppos += len; ··· 318 314 return -EINVAL; 319 315 } 320 316 317 + get_online_cpus(); 321 318 spin_lock(&appldata_timer_lock); 322 319 appldata_interval = interval; 323 320 __appldata_vtimer_setup(APPLDATA_MOD_TIMER); 324 321 spin_unlock(&appldata_timer_lock); 322 + put_online_cpus(); 325 323 326 324 P_INFO("Monitoring CPU interval set to %u milliseconds.\n", 327 325 interval); ··· 562 556 return -ENOMEM; 563 557 } 564 558 559 + get_online_cpus(); 565 560 for_each_online_cpu(i) 566 561 appldata_online_cpu(i); 562 + put_online_cpus(); 567 563 568 564 /* Register cpu hotplug notifier */ 569 565 register_hotcpu_notifier(&appldata_nb);
+8 -3
arch/s390/defconfig
··· 1 1 # 2 2 # Automatically generated make config: don't edit 3 - # Linux kernel version: 2.6.25 4 - # Wed Apr 30 11:07:45 2008 3 + # Linux kernel version: 2.6.26-rc4 4 + # Fri May 30 09:49:33 2008 5 5 # 6 6 CONFIG_SCHED_MC=y 7 7 CONFIG_MMU=y ··· 103 103 # CONFIG_TINY_SHMEM is not set 104 104 CONFIG_BASE_SMALL=0 105 105 CONFIG_MODULES=y 106 + # CONFIG_MODULE_FORCE_LOAD is not set 106 107 CONFIG_MODULE_UNLOAD=y 107 108 # CONFIG_MODULE_FORCE_UNLOAD is not set 108 109 CONFIG_MODVERSIONS=y ··· 174 173 # CONFIG_PREEMPT_RCU is not set 175 174 CONFIG_ARCH_SPARSEMEM_ENABLE=y 176 175 CONFIG_ARCH_SPARSEMEM_DEFAULT=y 176 + CONFIG_ARCH_SELECT_MEMORY_MODEL=y 177 177 CONFIG_SELECT_MEMORY_MODEL=y 178 178 # CONFIG_FLATMEM_MANUAL is not set 179 179 # CONFIG_DISCONTIGMEM_MANUAL is not set ··· 212 210 CONFIG_PFAULT=y 213 211 # CONFIG_SHARED_KERNEL is not set 214 212 # CONFIG_CMM is not set 213 + # CONFIG_PAGE_STATES is not set 215 214 CONFIG_VIRT_TIMER=y 216 215 CONFIG_VIRT_CPU_ACCOUNTING=y 217 216 # CONFIG_APPLDATA_BASE is not set ··· 623 620 # 624 621 # CONFIG_MEMSTICK is not set 625 622 # CONFIG_NEW_LEDS is not set 623 + CONFIG_ACCESSIBILITY=y 626 624 627 625 # 628 626 # File systems ··· 758 754 CONFIG_MAGIC_SYSRQ=y 759 755 # CONFIG_UNUSED_SYMBOLS is not set 760 756 CONFIG_DEBUG_FS=y 761 - CONFIG_HEADERS_CHECK=y 757 + # CONFIG_HEADERS_CHECK is not set 762 758 CONFIG_DEBUG_KERNEL=y 763 759 # CONFIG_SCHED_DEBUG is not set 764 760 # CONFIG_SCHEDSTATS is not set 765 761 # CONFIG_TIMER_STATS is not set 762 + # CONFIG_DEBUG_OBJECTS is not set 766 763 # CONFIG_DEBUG_SLAB is not set 767 764 CONFIG_DEBUG_PREEMPT=y 768 765 # CONFIG_DEBUG_RT_MUTEXES is not set
+1 -1
arch/s390/kernel/dis.c
··· 208 208 [INSTR_RRF_F0FF] = { 0xff, F_16,F_24,F_28,0,0,0 }, /* e.g. madbr */ 209 209 [INSTR_RRF_FUFF] = { 0xff, F_24,F_16,F_28,U4_20,0,0 },/* e.g. didbr */ 210 210 [INSTR_RRF_RURR] = { 0xff, R_24,R_28,R_16,U4_20,0,0 },/* e.g. .insn */ 211 - [INSTR_RRF_R0RR] = { 0xff, R_24,R_28,R_16,0,0,0 }, /* e.g. idte */ 211 + [INSTR_RRF_R0RR] = { 0xff, R_24,R_16,R_28,0,0,0 }, /* e.g. idte */ 212 212 [INSTR_RRF_U0FF] = { 0xff, F_24,U4_16,F_28,0,0,0 }, /* e.g. fixr */ 213 213 [INSTR_RRF_U0RF] = { 0xff, R_24,U4_16,F_28,0,0,0 }, /* e.g. cfebr */ 214 214 [INSTR_RRF_M0RR] = { 0xff, R_24,R_28,M_16,0,0,0 }, /* e.g. sske */
+1 -1
arch/s390/kernel/smp.c
··· 1089 1089 1090 1090 #ifdef CONFIG_HOTPLUG_CPU 1091 1091 1092 - int smp_rescan_cpus(void) 1092 + int __ref smp_rescan_cpus(void) 1093 1093 { 1094 1094 cpumask_t newcpus; 1095 1095 int cpu;
+23 -26
arch/s390/mm/init.c
··· 44 44 45 45 void show_mem(void) 46 46 { 47 - int i, total = 0, reserved = 0; 48 - int shared = 0, cached = 0; 47 + unsigned long i, total = 0, reserved = 0; 48 + unsigned long shared = 0, cached = 0; 49 + unsigned long flags; 49 50 struct page *page; 51 + pg_data_t *pgdat; 50 52 51 53 printk("Mem-info:\n"); 52 54 show_free_areas(); 53 - i = max_mapnr; 54 - while (i-- > 0) { 55 - if (!pfn_valid(i)) 56 - continue; 57 - page = pfn_to_page(i); 58 - total++; 59 - if (PageReserved(page)) 60 - reserved++; 61 - else if (PageSwapCache(page)) 62 - cached++; 63 - else if (page_count(page)) 64 - shared += page_count(page) - 1; 55 + for_each_online_pgdat(pgdat) { 56 + pgdat_resize_lock(pgdat, &flags); 57 + for (i = 0; i < pgdat->node_spanned_pages; i++) { 58 + if (!pfn_valid(pgdat->node_start_pfn + i)) 59 + continue; 60 + page = pfn_to_page(pgdat->node_start_pfn + i); 61 + total++; 62 + if (PageReserved(page)) 63 + reserved++; 64 + else if (PageSwapCache(page)) 65 + cached++; 66 + else if (page_count(page)) 67 + shared += page_count(page) - 1; 68 + } 69 + pgdat_resize_unlock(pgdat, &flags); 65 70 } 66 - printk("%d pages of RAM\n", total); 67 - printk("%d reserved pages\n", reserved); 68 - printk("%d pages shared\n", shared); 69 - printk("%d pages swap cached\n", cached); 70 - 71 - printk("%lu pages dirty\n", global_page_state(NR_FILE_DIRTY)); 72 - printk("%lu pages writeback\n", global_page_state(NR_WRITEBACK)); 73 - printk("%lu pages mapped\n", global_page_state(NR_FILE_MAPPED)); 74 - printk("%lu pages slab\n", 75 - global_page_state(NR_SLAB_RECLAIMABLE) + 76 - global_page_state(NR_SLAB_UNRECLAIMABLE)); 77 - printk("%lu pages pagetables\n", global_page_state(NR_PAGETABLE)); 71 + printk("%ld pages of RAM\n", total); 72 + printk("%ld reserved pages\n", reserved); 73 + printk("%ld pages shared\n", shared); 74 + printk("%ld pages swap cached\n", cached); 78 75 } 79 76 80 77 /*
+13 -5
arch/s390/mm/vmem.c
··· 27 27 28 28 static LIST_HEAD(mem_segs); 29 29 30 - static pud_t *vmem_pud_alloc(void) 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) 31 38 { 32 39 pud_t *pud = NULL; 33 40 34 41 #ifdef CONFIG_64BIT 35 - pud = vmemmap_alloc_block(PAGE_SIZE * 4, 0); 42 + pud = vmem_alloc_pages(2); 36 43 if (!pud) 37 44 return NULL; 38 45 clear_table((unsigned long *) pud, _REGION3_ENTRY_EMPTY, PAGE_SIZE * 4); ··· 47 40 return pud; 48 41 } 49 42 50 - static pmd_t *vmem_pmd_alloc(void) 43 + static inline pmd_t *vmem_pmd_alloc(void) 51 44 { 52 45 pmd_t *pmd = NULL; 53 46 54 47 #ifdef CONFIG_64BIT 55 - pmd = vmemmap_alloc_block(PAGE_SIZE * 4, 0); 48 + pmd = vmem_alloc_pages(2); 56 49 if (!pmd) 57 50 return NULL; 58 51 clear_table((unsigned long *) pmd, _SEGMENT_ENTRY_EMPTY, PAGE_SIZE * 4); ··· 214 207 if (pte_none(*pt_dir)) { 215 208 unsigned long new_page; 216 209 217 - new_page =__pa(vmemmap_alloc_block(PAGE_SIZE, 0)); 210 + new_page =__pa(vmem_alloc_pages(0)); 218 211 if (!new_page) 219 212 goto out; 220 213 pte = pfn_pte(new_page >> PAGE_SHIFT, PAGE_KERNEL); 221 214 *pt_dir = pte; 222 215 } 223 216 } 217 + memset(start, 0, nr * sizeof(struct page)); 224 218 ret = 0; 225 219 out: 226 220 flush_tlb_kernel_range(start_addr, end_addr);
+14 -14
drivers/s390/block/dasd.c
··· 63 63 */ 64 64 static wait_queue_head_t dasd_init_waitq; 65 65 static wait_queue_head_t dasd_flush_wq; 66 + static wait_queue_head_t generic_waitq; 66 67 67 68 /* 68 69 * Allocate memory for a new device structure. ··· 1152 1151 struct list_head *l, *n; 1153 1152 struct dasd_ccw_req *cqr; 1154 1153 struct dasd_block *block; 1154 + void (*callback)(struct dasd_ccw_req *, void *data); 1155 + void *callback_data; 1155 1156 1156 1157 list_for_each_safe(l, n, final_queue) { 1157 1158 cqr = list_entry(l, struct dasd_ccw_req, devlist); 1158 1159 list_del_init(&cqr->devlist); 1159 1160 block = cqr->block; 1161 + callback = cqr->callback; 1162 + callback_data = cqr->callback_data; 1160 1163 if (block) 1161 1164 spin_lock_bh(&block->queue_lock); 1162 1165 switch (cqr->status) { ··· 1181 1176 BUG(); 1182 1177 } 1183 1178 if (cqr->callback != NULL) 1184 - (cqr->callback)(cqr, cqr->callback_data); 1179 + (callback)(cqr, callback_data); 1185 1180 if (block) 1186 1181 spin_unlock_bh(&block->queue_lock); 1187 1182 } ··· 1411 1406 */ 1412 1407 int dasd_sleep_on(struct dasd_ccw_req *cqr) 1413 1408 { 1414 - wait_queue_head_t wait_q; 1415 1409 struct dasd_device *device; 1416 1410 int rc; 1417 1411 1418 1412 device = cqr->startdev; 1419 1413 1420 - init_waitqueue_head (&wait_q); 1421 1414 cqr->callback = dasd_wakeup_cb; 1422 - cqr->callback_data = (void *) &wait_q; 1415 + cqr->callback_data = (void *) &generic_waitq; 1423 1416 dasd_add_request_tail(cqr); 1424 - wait_event(wait_q, _wait_for_wakeup(cqr)); 1417 + wait_event(generic_waitq, _wait_for_wakeup(cqr)); 1425 1418 1426 1419 /* Request status is either done or failed. */ 1427 1420 rc = (cqr->status == DASD_CQR_DONE) ? 0 : -EIO; ··· 1432 1429 */ 1433 1430 int dasd_sleep_on_interruptible(struct dasd_ccw_req *cqr) 1434 1431 { 1435 - wait_queue_head_t wait_q; 1436 1432 struct dasd_device *device; 1437 1433 int rc; 1438 1434 1439 1435 device = cqr->startdev; 1440 - init_waitqueue_head (&wait_q); 1441 1436 cqr->callback = dasd_wakeup_cb; 1442 - cqr->callback_data = (void *) &wait_q; 1437 + cqr->callback_data = (void *) &generic_waitq; 1443 1438 dasd_add_request_tail(cqr); 1444 - rc = wait_event_interruptible(wait_q, _wait_for_wakeup(cqr)); 1439 + rc = wait_event_interruptible(generic_waitq, _wait_for_wakeup(cqr)); 1445 1440 if (rc == -ERESTARTSYS) { 1446 1441 dasd_cancel_req(cqr); 1447 1442 /* wait (non-interruptible) for final status */ 1448 - wait_event(wait_q, _wait_for_wakeup(cqr)); 1443 + wait_event(generic_waitq, _wait_for_wakeup(cqr)); 1449 1444 } 1450 1445 rc = (cqr->status == DASD_CQR_DONE) ? 0 : -EIO; 1451 1446 return rc; ··· 1467 1466 1468 1467 int dasd_sleep_on_immediatly(struct dasd_ccw_req *cqr) 1469 1468 { 1470 - wait_queue_head_t wait_q; 1471 1469 struct dasd_device *device; 1472 1470 int rc; 1473 1471 ··· 1478 1478 return rc; 1479 1479 } 1480 1480 1481 - init_waitqueue_head (&wait_q); 1482 1481 cqr->callback = dasd_wakeup_cb; 1483 - cqr->callback_data = (void *) &wait_q; 1482 + cqr->callback_data = (void *) &generic_waitq; 1484 1483 cqr->status = DASD_CQR_QUEUED; 1485 1484 list_add(&cqr->devlist, &device->ccw_queue); 1486 1485 ··· 1488 1489 1489 1490 spin_unlock_irq(get_ccwdev_lock(device->cdev)); 1490 1491 1491 - wait_event(wait_q, _wait_for_wakeup(cqr)); 1492 + wait_event(generic_waitq, _wait_for_wakeup(cqr)); 1492 1493 1493 1494 /* Request status is either done or failed. */ 1494 1495 rc = (cqr->status == DASD_CQR_DONE) ? 0 : -EIO; ··· 2429 2430 2430 2431 init_waitqueue_head(&dasd_init_waitq); 2431 2432 init_waitqueue_head(&dasd_flush_wq); 2433 + init_waitqueue_head(&generic_waitq); 2432 2434 2433 2435 /* register 'common' DASD debug area, used for all DBF_XXX calls */ 2434 2436 dasd_debug_area = debug_register("dasd", 1, 1, 8 * sizeof(long));
+4 -5
drivers/s390/char/raw3270.c
··· 549 549 struct raw3270_request *rq) 550 550 { 551 551 unsigned long flags; 552 - wait_queue_head_t wq; 553 552 int rc; 554 553 555 554 #ifdef CONFIG_TN3270_CONSOLE ··· 565 566 return rq->rc; 566 567 } 567 568 #endif 568 - init_waitqueue_head(&wq); 569 569 rq->callback = raw3270_wake_init; 570 - rq->callback_data = &wq; 570 + rq->callback_data = &raw3270_wait_queue; 571 571 spin_lock_irqsave(get_ccwdev_lock(view->dev->cdev), flags); 572 572 rc = __raw3270_start(rp, view, rq); 573 573 spin_unlock_irqrestore(get_ccwdev_lock(view->dev->cdev), flags); 574 574 if (rc) 575 575 return rc; 576 576 /* Now wait for the completion. */ 577 - rc = wait_event_interruptible(wq, raw3270_request_final(rq)); 577 + rc = wait_event_interruptible(raw3270_wait_queue, 578 + raw3270_request_final(rq)); 578 579 if (rc == -ERESTARTSYS) { /* Interrupted by a signal. */ 579 580 raw3270_halt_io(view->dev, rq); 580 581 /* No wait for the halt to complete. */ 581 - wait_event(wq, raw3270_request_final(rq)); 582 + wait_event(raw3270_wait_queue, raw3270_request_final(rq)); 582 583 return -ERESTARTSYS; 583 584 } 584 585 return rq->rc;
+1 -1
drivers/s390/char/sclp_config.c
··· 40 40 put_online_cpus(); 41 41 } 42 42 43 - static void sclp_cpu_change_notify(struct work_struct *work) 43 + static void __ref sclp_cpu_change_notify(struct work_struct *work) 44 44 { 45 45 smp_rescan_cpus(); 46 46 }
+7 -20
drivers/s390/char/sclp_vt220.c
··· 71 71 /* Number of requests in outqueue */ 72 72 static int sclp_vt220_outqueue_count; 73 73 74 - /* Wait queue used to delay write requests while we've run out of buffers */ 75 - static wait_queue_head_t sclp_vt220_waitq; 76 - 77 74 /* Timer used for delaying write requests to merge subsequent messages into 78 75 * a single buffer */ 79 76 static struct timer_list sclp_vt220_timer; ··· 130 133 } while (request && __sclp_vt220_emit(request)); 131 134 if (request == NULL && sclp_vt220_flush_later) 132 135 sclp_vt220_emit_current(); 133 - wake_up(&sclp_vt220_waitq); 134 136 /* Check if the tty needs a wake up call */ 135 137 if (sclp_vt220_tty != NULL) { 136 138 tty_wakeup(sclp_vt220_tty); ··· 379 383 */ 380 384 static int 381 385 __sclp_vt220_write(const unsigned char *buf, int count, int do_schedule, 382 - int convertlf, int may_schedule) 386 + int convertlf, int may_fail) 383 387 { 384 388 unsigned long flags; 385 389 void *page; ··· 391 395 overall_written = 0; 392 396 spin_lock_irqsave(&sclp_vt220_lock, flags); 393 397 do { 394 - /* Create a sclp output buffer if none exists yet */ 398 + /* Create an sclp output buffer if none exists yet */ 395 399 if (sclp_vt220_current_request == NULL) { 396 400 while (list_empty(&sclp_vt220_empty)) { 397 401 spin_unlock_irqrestore(&sclp_vt220_lock, flags); 398 - if (in_interrupt() || !may_schedule) 399 - sclp_sync_wait(); 402 + if (may_fail) 403 + goto out; 400 404 else 401 - wait_event(sclp_vt220_waitq, 402 - !list_empty(&sclp_vt220_empty)); 405 + sclp_sync_wait(); 403 406 spin_lock_irqsave(&sclp_vt220_lock, flags); 404 407 } 405 408 page = (void *) sclp_vt220_empty.next; ··· 432 437 add_timer(&sclp_vt220_timer); 433 438 } 434 439 spin_unlock_irqrestore(&sclp_vt220_lock, flags); 440 + out: 435 441 return overall_written; 436 442 } 437 443 ··· 516 520 * character to the tty device. If the kernel uses this routine, 517 521 * it must call the flush_chars() routine (if defined) when it is 518 522 * done stuffing characters into the driver. 519 - * 520 - * NOTE: include/linux/tty_driver.h specifies that a character should be 521 - * ignored if there is no room in the queue. This driver implements a different 522 - * semantic in that it will block when there is no more room left. 523 - * 524 - * FIXME: putchar can currently be called from BH and other non blocking 525 - * handlers so this semantic isn't a good idea. 526 523 */ 527 524 static int 528 525 sclp_vt220_put_char(struct tty_struct *tty, unsigned char ch) 529 526 { 530 - __sclp_vt220_write(&ch, 1, 0, 0, 1); 531 - return 1; 527 + return __sclp_vt220_write(&ch, 1, 0, 0, 1); 532 528 } 533 529 534 530 /* ··· 641 653 spin_lock_init(&sclp_vt220_lock); 642 654 INIT_LIST_HEAD(&sclp_vt220_empty); 643 655 INIT_LIST_HEAD(&sclp_vt220_outqueue); 644 - init_waitqueue_head(&sclp_vt220_waitq); 645 656 init_timer(&sclp_vt220_timer); 646 657 sclp_vt220_current_request = NULL; 647 658 sclp_vt220_buffered_chars = 0;
+3
drivers/s390/char/tape.h
··· 231 231 /* Request queue. */ 232 232 struct list_head req_queue; 233 233 234 + /* Request wait queue. */ 235 + wait_queue_head_t wait_queue; 236 + 234 237 /* Each tape device has (currently) two minor numbers. */ 235 238 int first_minor; 236 239
+2 -2
drivers/s390/char/tape_block.c
··· 179 179 tapeblock_end_request(req, -EIO); 180 180 continue; 181 181 } 182 + blkdev_dequeue_request(req); 183 + nr_queued++; 182 184 spin_unlock_irq(&device->blk_data.request_queue_lock); 183 185 rc = tapeblock_start_request(device, req); 184 186 spin_lock_irq(&device->blk_data.request_queue_lock); 185 - blkdev_dequeue_request(req); 186 - nr_queued++; 187 187 } 188 188 spin_unlock_irq(&device->blk_data.request_queue_lock); 189 189 atomic_set(&device->blk_data.requeue_scheduled, 0);
+7 -9
drivers/s390/char/tape_core.c
··· 449 449 INIT_LIST_HEAD(&device->req_queue); 450 450 INIT_LIST_HEAD(&device->node); 451 451 init_waitqueue_head(&device->state_change_wq); 452 + init_waitqueue_head(&device->wait_queue); 452 453 device->tape_state = TS_INIT; 453 454 device->medium_state = MS_UNKNOWN; 454 455 *device->modeset_byte = 0; ··· 955 954 int 956 955 tape_do_io(struct tape_device *device, struct tape_request *request) 957 956 { 958 - wait_queue_head_t wq; 959 957 int rc; 960 958 961 - init_waitqueue_head(&wq); 962 959 spin_lock_irq(get_ccwdev_lock(device->cdev)); 963 960 /* Setup callback */ 964 961 request->callback = __tape_wake_up; 965 - request->callback_data = &wq; 962 + request->callback_data = &device->wait_queue; 966 963 /* Add request to request queue and try to start it. */ 967 964 rc = __tape_start_request(device, request); 968 965 spin_unlock_irq(get_ccwdev_lock(device->cdev)); 969 966 if (rc) 970 967 return rc; 971 968 /* Request added to the queue. Wait for its completion. */ 972 - wait_event(wq, (request->callback == NULL)); 969 + wait_event(device->wait_queue, (request->callback == NULL)); 973 970 /* Get rc from request */ 974 971 return request->rc; 975 972 } ··· 988 989 tape_do_io_interruptible(struct tape_device *device, 989 990 struct tape_request *request) 990 991 { 991 - wait_queue_head_t wq; 992 992 int rc; 993 993 994 - init_waitqueue_head(&wq); 995 994 spin_lock_irq(get_ccwdev_lock(device->cdev)); 996 995 /* Setup callback */ 997 996 request->callback = __tape_wake_up_interruptible; 998 - request->callback_data = &wq; 997 + request->callback_data = &device->wait_queue; 999 998 rc = __tape_start_request(device, request); 1000 999 spin_unlock_irq(get_ccwdev_lock(device->cdev)); 1001 1000 if (rc) 1002 1001 return rc; 1003 1002 /* Request added to the queue. Wait for its completion. */ 1004 - rc = wait_event_interruptible(wq, (request->callback == NULL)); 1003 + rc = wait_event_interruptible(device->wait_queue, 1004 + (request->callback == NULL)); 1005 1005 if (rc != -ERESTARTSYS) 1006 1006 /* Request finished normally. */ 1007 1007 return request->rc; ··· 1013 1015 /* Wait for the interrupt that acknowledges the halt. */ 1014 1016 do { 1015 1017 rc = wait_event_interruptible( 1016 - wq, 1018 + device->wait_queue, 1017 1019 (request->callback == NULL) 1018 1020 ); 1019 1021 } while (rc == -ERESTARTSYS);
+6
include/asm-s390/types.h
··· 40 40 41 41 #ifndef __ASSEMBLY__ 42 42 43 + typedef u64 dma64_addr_t; 44 + #ifdef __s390x__ 45 + /* DMA addresses come in 32-bit and 64-bit flavours. */ 46 + typedef u64 dma_addr_t; 47 + #else 43 48 typedef u32 dma_addr_t; 49 + #endif 44 50 45 51 #ifndef __s390x__ 46 52 typedef union {