IB: convert from semaphores to mutexes

semaphore to mutex conversion by Ingo and Arjan's script.

Signed-off-by: Ingo Molnar <mingo@elte.hu>
[ Sanity-checked on real IB hardware ]
Signed-off-by: Roland Dreier <rolandd@cisco.com>

authored by Ingo Molnar and committed by Roland Dreier 95ed644f 9eacee2a

+145 -144
+11 -12
drivers/infiniband/core/device.c
··· 38 38 #include <linux/errno.h> 39 39 #include <linux/slab.h> 40 40 #include <linux/init.h> 41 - 42 - #include <asm/semaphore.h> 41 + #include <linux/mutex.h> 43 42 44 43 #include "core_priv.h" 45 44 ··· 56 57 static LIST_HEAD(client_list); 57 58 58 59 /* 59 - * device_sem protects access to both device_list and client_list. 60 + * device_mutex protects access to both device_list and client_list. 60 61 * There's no real point to using multiple locks or something fancier 61 62 * like an rwsem: we always access both lists, and we're always 62 63 * modifying one list or the other list. In any case this is not a 63 64 * hot path so there's no point in trying to optimize. 64 65 */ 65 - static DECLARE_MUTEX(device_sem); 66 + static DEFINE_MUTEX(device_mutex); 66 67 67 68 static int ib_device_check_mandatory(struct ib_device *device) 68 69 { ··· 220 221 { 221 222 int ret; 222 223 223 - down(&device_sem); 224 + mutex_lock(&device_mutex); 224 225 225 226 if (strchr(device->name, '%')) { 226 227 ret = alloc_name(device->name); ··· 258 259 } 259 260 260 261 out: 261 - up(&device_sem); 262 + mutex_unlock(&device_mutex); 262 263 return ret; 263 264 } 264 265 EXPORT_SYMBOL(ib_register_device); ··· 275 276 struct ib_client_data *context, *tmp; 276 277 unsigned long flags; 277 278 278 - down(&device_sem); 279 + mutex_lock(&device_mutex); 279 280 280 281 list_for_each_entry_reverse(client, &client_list, list) 281 282 if (client->remove) ··· 283 284 284 285 list_del(&device->core_list); 285 286 286 - up(&device_sem); 287 + mutex_unlock(&device_mutex); 287 288 288 289 spin_lock_irqsave(&device->client_data_lock, flags); 289 290 list_for_each_entry_safe(context, tmp, &device->client_data_list, list) ··· 311 312 { 312 313 struct ib_device *device; 313 314 314 - down(&device_sem); 315 + mutex_lock(&device_mutex); 315 316 316 317 list_add_tail(&client->list, &client_list); 317 318 list_for_each_entry(device, &device_list, core_list) 318 319 if (client->add && !add_client_context(device, client)) 319 320 client->add(device); 320 321 321 - up(&device_sem); 322 + mutex_unlock(&device_mutex); 322 323 323 324 return 0; 324 325 } ··· 338 339 struct ib_device *device; 339 340 unsigned long flags; 340 341 341 - down(&device_sem); 342 + mutex_lock(&device_mutex); 342 343 343 344 list_for_each_entry(device, &device_list, core_list) { 344 345 if (client->remove) ··· 354 355 } 355 356 list_del(&client->list); 356 357 357 - up(&device_sem); 358 + mutex_unlock(&device_mutex); 358 359 } 359 360 EXPORT_SYMBOL(ib_unregister_client); 360 361
+12 -11
drivers/infiniband/core/ucm.c
··· 42 42 #include <linux/mount.h> 43 43 #include <linux/cdev.h> 44 44 #include <linux/idr.h> 45 + #include <linux/mutex.h> 45 46 46 47 #include <asm/uaccess.h> 47 48 ··· 114 113 .remove = ib_ucm_remove_one 115 114 }; 116 115 117 - static DECLARE_MUTEX(ctx_id_mutex); 116 + static DEFINE_MUTEX(ctx_id_mutex); 118 117 static DEFINE_IDR(ctx_id_table); 119 118 static DECLARE_BITMAP(dev_map, IB_UCM_MAX_DEVICES); 120 119 ··· 122 121 { 123 122 struct ib_ucm_context *ctx; 124 123 125 - down(&ctx_id_mutex); 124 + mutex_lock(&ctx_id_mutex); 126 125 ctx = idr_find(&ctx_id_table, id); 127 126 if (!ctx) 128 127 ctx = ERR_PTR(-ENOENT); ··· 130 129 ctx = ERR_PTR(-EINVAL); 131 130 else 132 131 atomic_inc(&ctx->ref); 133 - up(&ctx_id_mutex); 132 + mutex_unlock(&ctx_id_mutex); 134 133 135 134 return ctx; 136 135 } ··· 187 186 if (!result) 188 187 goto error; 189 188 190 - down(&ctx_id_mutex); 189 + mutex_lock(&ctx_id_mutex); 191 190 result = idr_get_new(&ctx_id_table, ctx, &ctx->id); 192 - up(&ctx_id_mutex); 191 + mutex_unlock(&ctx_id_mutex); 193 192 } while (result == -EAGAIN); 194 193 195 194 if (result) ··· 551 550 err2: 552 551 ib_destroy_cm_id(ctx->cm_id); 553 552 err1: 554 - down(&ctx_id_mutex); 553 + mutex_lock(&ctx_id_mutex); 555 554 idr_remove(&ctx_id_table, ctx->id); 556 - up(&ctx_id_mutex); 555 + mutex_unlock(&ctx_id_mutex); 557 556 kfree(ctx); 558 557 return result; 559 558 } ··· 573 572 if (copy_from_user(&cmd, inbuf, sizeof(cmd))) 574 573 return -EFAULT; 575 574 576 - down(&ctx_id_mutex); 575 + mutex_lock(&ctx_id_mutex); 577 576 ctx = idr_find(&ctx_id_table, cmd.id); 578 577 if (!ctx) 579 578 ctx = ERR_PTR(-ENOENT); ··· 581 580 ctx = ERR_PTR(-EINVAL); 582 581 else 583 582 idr_remove(&ctx_id_table, ctx->id); 584 - up(&ctx_id_mutex); 583 + mutex_unlock(&ctx_id_mutex); 585 584 586 585 if (IS_ERR(ctx)) 587 586 return PTR_ERR(ctx); ··· 1281 1280 struct ib_ucm_context, file_list); 1282 1281 up(&file->mutex); 1283 1282 1284 - down(&ctx_id_mutex); 1283 + mutex_lock(&ctx_id_mutex); 1285 1284 idr_remove(&ctx_id_table, ctx->id); 1286 - up(&ctx_id_mutex); 1285 + mutex_unlock(&ctx_id_mutex); 1287 1286 1288 1287 ib_destroy_cm_id(ctx->cm_id); 1289 1288 ib_ucm_cleanup_events(ctx);
+3 -2
drivers/infiniband/core/uverbs.h
··· 41 41 42 42 #include <linux/kref.h> 43 43 #include <linux/idr.h> 44 + #include <linux/mutex.h> 44 45 45 46 #include <rdma/ib_verbs.h> 46 47 #include <rdma/ib_user_verbs.h> ··· 89 88 90 89 struct ib_uverbs_file { 91 90 struct kref ref; 92 - struct semaphore mutex; 91 + struct mutex mutex; 93 92 struct ib_uverbs_device *device; 94 93 struct ib_ucontext *ucontext; 95 94 struct ib_event_handler event_handler; ··· 132 131 u32 async_events_reported; 133 132 }; 134 133 135 - extern struct semaphore ib_uverbs_idr_mutex; 134 + extern struct mutex ib_uverbs_idr_mutex; 136 135 extern struct idr ib_uverbs_pd_idr; 137 136 extern struct idr ib_uverbs_mr_idr; 138 137 extern struct idr ib_uverbs_mw_idr;
+75 -75
drivers/infiniband/core/uverbs_cmd.c
··· 67 67 if (copy_from_user(&cmd, buf, sizeof cmd)) 68 68 return -EFAULT; 69 69 70 - down(&file->mutex); 70 + mutex_lock(&file->mutex); 71 71 72 72 if (file->ucontext) { 73 73 ret = -EINVAL; ··· 119 119 120 120 fd_install(resp.async_fd, filp); 121 121 122 - up(&file->mutex); 122 + mutex_unlock(&file->mutex); 123 123 124 124 return in_len; 125 125 ··· 131 131 ibdev->dealloc_ucontext(ucontext); 132 132 133 133 err: 134 - up(&file->mutex); 134 + mutex_unlock(&file->mutex); 135 135 return ret; 136 136 } 137 137 ··· 290 290 pd->uobject = uobj; 291 291 atomic_set(&pd->usecnt, 0); 292 292 293 - down(&ib_uverbs_idr_mutex); 293 + mutex_lock(&ib_uverbs_idr_mutex); 294 294 295 295 retry: 296 296 if (!idr_pre_get(&ib_uverbs_pd_idr, GFP_KERNEL)) { ··· 314 314 goto err_idr; 315 315 } 316 316 317 - down(&file->mutex); 317 + mutex_lock(&file->mutex); 318 318 list_add_tail(&uobj->list, &file->ucontext->pd_list); 319 - up(&file->mutex); 319 + mutex_unlock(&file->mutex); 320 320 321 - up(&ib_uverbs_idr_mutex); 321 + mutex_unlock(&ib_uverbs_idr_mutex); 322 322 323 323 return in_len; 324 324 ··· 326 326 idr_remove(&ib_uverbs_pd_idr, uobj->id); 327 327 328 328 err_up: 329 - up(&ib_uverbs_idr_mutex); 329 + mutex_unlock(&ib_uverbs_idr_mutex); 330 330 ib_dealloc_pd(pd); 331 331 332 332 err: ··· 346 346 if (copy_from_user(&cmd, buf, sizeof cmd)) 347 347 return -EFAULT; 348 348 349 - down(&ib_uverbs_idr_mutex); 349 + mutex_lock(&ib_uverbs_idr_mutex); 350 350 351 351 pd = idr_find(&ib_uverbs_pd_idr, cmd.pd_handle); 352 352 if (!pd || pd->uobject->context != file->ucontext) ··· 360 360 361 361 idr_remove(&ib_uverbs_pd_idr, cmd.pd_handle); 362 362 363 - down(&file->mutex); 363 + mutex_lock(&file->mutex); 364 364 list_del(&uobj->list); 365 - up(&file->mutex); 365 + mutex_unlock(&file->mutex); 366 366 367 367 kfree(uobj); 368 368 369 369 out: 370 - up(&ib_uverbs_idr_mutex); 370 + mutex_unlock(&ib_uverbs_idr_mutex); 371 371 372 372 return ret ? ret : in_len; 373 373 } ··· 426 426 427 427 obj->umem.virt_base = cmd.hca_va; 428 428 429 - down(&ib_uverbs_idr_mutex); 429 + mutex_lock(&ib_uverbs_idr_mutex); 430 430 431 431 pd = idr_find(&ib_uverbs_pd_idr, cmd.pd_handle); 432 432 if (!pd || pd->uobject->context != file->ucontext) { ··· 476 476 goto err_idr; 477 477 } 478 478 479 - down(&file->mutex); 479 + mutex_lock(&file->mutex); 480 480 list_add_tail(&obj->uobject.list, &file->ucontext->mr_list); 481 - up(&file->mutex); 481 + mutex_unlock(&file->mutex); 482 482 483 - up(&ib_uverbs_idr_mutex); 483 + mutex_unlock(&ib_uverbs_idr_mutex); 484 484 485 485 return in_len; 486 486 ··· 492 492 atomic_dec(&pd->usecnt); 493 493 494 494 err_up: 495 - up(&ib_uverbs_idr_mutex); 495 + mutex_unlock(&ib_uverbs_idr_mutex); 496 496 497 497 ib_umem_release(file->device->ib_dev, &obj->umem); 498 498 ··· 513 513 if (copy_from_user(&cmd, buf, sizeof cmd)) 514 514 return -EFAULT; 515 515 516 - down(&ib_uverbs_idr_mutex); 516 + mutex_lock(&ib_uverbs_idr_mutex); 517 517 518 518 mr = idr_find(&ib_uverbs_mr_idr, cmd.mr_handle); 519 519 if (!mr || mr->uobject->context != file->ucontext) ··· 527 527 528 528 idr_remove(&ib_uverbs_mr_idr, cmd.mr_handle); 529 529 530 - down(&file->mutex); 530 + mutex_lock(&file->mutex); 531 531 list_del(&memobj->uobject.list); 532 - up(&file->mutex); 532 + mutex_unlock(&file->mutex); 533 533 534 534 ib_umem_release(file->device->ib_dev, &memobj->umem); 535 535 kfree(memobj); 536 536 537 537 out: 538 - up(&ib_uverbs_idr_mutex); 538 + mutex_unlock(&ib_uverbs_idr_mutex); 539 539 540 540 return ret ? ret : in_len; 541 541 } ··· 628 628 cq->cq_context = ev_file; 629 629 atomic_set(&cq->usecnt, 0); 630 630 631 - down(&ib_uverbs_idr_mutex); 631 + mutex_lock(&ib_uverbs_idr_mutex); 632 632 633 633 retry: 634 634 if (!idr_pre_get(&ib_uverbs_cq_idr, GFP_KERNEL)) { ··· 653 653 goto err_idr; 654 654 } 655 655 656 - down(&file->mutex); 656 + mutex_lock(&file->mutex); 657 657 list_add_tail(&uobj->uobject.list, &file->ucontext->cq_list); 658 - up(&file->mutex); 658 + mutex_unlock(&file->mutex); 659 659 660 - up(&ib_uverbs_idr_mutex); 660 + mutex_unlock(&ib_uverbs_idr_mutex); 661 661 662 662 return in_len; 663 663 ··· 665 665 idr_remove(&ib_uverbs_cq_idr, uobj->uobject.id); 666 666 667 667 err_up: 668 - up(&ib_uverbs_idr_mutex); 668 + mutex_unlock(&ib_uverbs_idr_mutex); 669 669 ib_destroy_cq(cq); 670 670 671 671 err: ··· 701 701 goto out_wc; 702 702 } 703 703 704 - down(&ib_uverbs_idr_mutex); 704 + mutex_lock(&ib_uverbs_idr_mutex); 705 705 cq = idr_find(&ib_uverbs_cq_idr, cmd.cq_handle); 706 706 if (!cq || cq->uobject->context != file->ucontext) { 707 707 ret = -EINVAL; ··· 731 731 ret = -EFAULT; 732 732 733 733 out: 734 - up(&ib_uverbs_idr_mutex); 734 + mutex_unlock(&ib_uverbs_idr_mutex); 735 735 kfree(resp); 736 736 737 737 out_wc: ··· 750 750 if (copy_from_user(&cmd, buf, sizeof cmd)) 751 751 return -EFAULT; 752 752 753 - down(&ib_uverbs_idr_mutex); 753 + mutex_lock(&ib_uverbs_idr_mutex); 754 754 cq = idr_find(&ib_uverbs_cq_idr, cmd.cq_handle); 755 755 if (cq && cq->uobject->context == file->ucontext) { 756 756 ib_req_notify_cq(cq, cmd.solicited_only ? 757 757 IB_CQ_SOLICITED : IB_CQ_NEXT_COMP); 758 758 ret = in_len; 759 759 } 760 - up(&ib_uverbs_idr_mutex); 760 + mutex_unlock(&ib_uverbs_idr_mutex); 761 761 762 762 return ret; 763 763 } ··· 779 779 780 780 memset(&resp, 0, sizeof resp); 781 781 782 - down(&ib_uverbs_idr_mutex); 782 + mutex_lock(&ib_uverbs_idr_mutex); 783 783 784 784 cq = idr_find(&ib_uverbs_cq_idr, cmd.cq_handle); 785 785 if (!cq || cq->uobject->context != file->ucontext) ··· 795 795 796 796 idr_remove(&ib_uverbs_cq_idr, cmd.cq_handle); 797 797 798 - down(&file->mutex); 798 + mutex_lock(&file->mutex); 799 799 list_del(&uobj->uobject.list); 800 - up(&file->mutex); 800 + mutex_unlock(&file->mutex); 801 801 802 802 ib_uverbs_release_ucq(file, ev_file, uobj); 803 803 ··· 811 811 ret = -EFAULT; 812 812 813 813 out: 814 - up(&ib_uverbs_idr_mutex); 814 + mutex_unlock(&ib_uverbs_idr_mutex); 815 815 816 816 return ret ? ret : in_len; 817 817 } ··· 845 845 if (!uobj) 846 846 return -ENOMEM; 847 847 848 - down(&ib_uverbs_idr_mutex); 848 + mutex_lock(&ib_uverbs_idr_mutex); 849 849 850 850 pd = idr_find(&ib_uverbs_pd_idr, cmd.pd_handle); 851 851 scq = idr_find(&ib_uverbs_cq_idr, cmd.send_cq_handle); ··· 930 930 goto err_idr; 931 931 } 932 932 933 - down(&file->mutex); 933 + mutex_lock(&file->mutex); 934 934 list_add_tail(&uobj->uevent.uobject.list, &file->ucontext->qp_list); 935 - up(&file->mutex); 935 + mutex_unlock(&file->mutex); 936 936 937 - up(&ib_uverbs_idr_mutex); 937 + mutex_unlock(&ib_uverbs_idr_mutex); 938 938 939 939 return in_len; 940 940 ··· 950 950 atomic_dec(&attr.srq->usecnt); 951 951 952 952 err_up: 953 - up(&ib_uverbs_idr_mutex); 953 + mutex_unlock(&ib_uverbs_idr_mutex); 954 954 955 955 kfree(uobj); 956 956 return ret; ··· 972 972 if (!attr) 973 973 return -ENOMEM; 974 974 975 - down(&ib_uverbs_idr_mutex); 975 + mutex_lock(&ib_uverbs_idr_mutex); 976 976 977 977 qp = idr_find(&ib_uverbs_qp_idr, cmd.qp_handle); 978 978 if (!qp || qp->uobject->context != file->ucontext) { ··· 1033 1033 ret = in_len; 1034 1034 1035 1035 out: 1036 - up(&ib_uverbs_idr_mutex); 1036 + mutex_unlock(&ib_uverbs_idr_mutex); 1037 1037 kfree(attr); 1038 1038 1039 1039 return ret; ··· 1054 1054 1055 1055 memset(&resp, 0, sizeof resp); 1056 1056 1057 - down(&ib_uverbs_idr_mutex); 1057 + mutex_lock(&ib_uverbs_idr_mutex); 1058 1058 1059 1059 qp = idr_find(&ib_uverbs_qp_idr, cmd.qp_handle); 1060 1060 if (!qp || qp->uobject->context != file->ucontext) ··· 1073 1073 1074 1074 idr_remove(&ib_uverbs_qp_idr, cmd.qp_handle); 1075 1075 1076 - down(&file->mutex); 1076 + mutex_lock(&file->mutex); 1077 1077 list_del(&uobj->uevent.uobject.list); 1078 - up(&file->mutex); 1078 + mutex_unlock(&file->mutex); 1079 1079 1080 1080 ib_uverbs_release_uevent(file, &uobj->uevent); 1081 1081 ··· 1088 1088 ret = -EFAULT; 1089 1089 1090 1090 out: 1091 - up(&ib_uverbs_idr_mutex); 1091 + mutex_unlock(&ib_uverbs_idr_mutex); 1092 1092 1093 1093 return ret ? ret : in_len; 1094 1094 } ··· 1119 1119 if (!user_wr) 1120 1120 return -ENOMEM; 1121 1121 1122 - down(&ib_uverbs_idr_mutex); 1122 + mutex_lock(&ib_uverbs_idr_mutex); 1123 1123 1124 1124 qp = idr_find(&ib_uverbs_qp_idr, cmd.qp_handle); 1125 1125 if (!qp || qp->uobject->context != file->ucontext) ··· 1224 1224 ret = -EFAULT; 1225 1225 1226 1226 out: 1227 - up(&ib_uverbs_idr_mutex); 1227 + mutex_unlock(&ib_uverbs_idr_mutex); 1228 1228 1229 1229 while (wr) { 1230 1230 next = wr->next; ··· 1341 1341 if (IS_ERR(wr)) 1342 1342 return PTR_ERR(wr); 1343 1343 1344 - down(&ib_uverbs_idr_mutex); 1344 + mutex_lock(&ib_uverbs_idr_mutex); 1345 1345 1346 1346 qp = idr_find(&ib_uverbs_qp_idr, cmd.qp_handle); 1347 1347 if (!qp || qp->uobject->context != file->ucontext) ··· 1362 1362 ret = -EFAULT; 1363 1363 1364 1364 out: 1365 - up(&ib_uverbs_idr_mutex); 1365 + mutex_unlock(&ib_uverbs_idr_mutex); 1366 1366 1367 1367 while (wr) { 1368 1368 next = wr->next; ··· 1392 1392 if (IS_ERR(wr)) 1393 1393 return PTR_ERR(wr); 1394 1394 1395 - down(&ib_uverbs_idr_mutex); 1395 + mutex_lock(&ib_uverbs_idr_mutex); 1396 1396 1397 1397 srq = idr_find(&ib_uverbs_srq_idr, cmd.srq_handle); 1398 1398 if (!srq || srq->uobject->context != file->ucontext) ··· 1413 1413 ret = -EFAULT; 1414 1414 1415 1415 out: 1416 - up(&ib_uverbs_idr_mutex); 1416 + mutex_unlock(&ib_uverbs_idr_mutex); 1417 1417 1418 1418 while (wr) { 1419 1419 next = wr->next; ··· 1446 1446 if (!uobj) 1447 1447 return -ENOMEM; 1448 1448 1449 - down(&ib_uverbs_idr_mutex); 1449 + mutex_lock(&ib_uverbs_idr_mutex); 1450 1450 1451 1451 pd = idr_find(&ib_uverbs_pd_idr, cmd.pd_handle); 1452 1452 if (!pd || pd->uobject->context != file->ucontext) { ··· 1498 1498 goto err_idr; 1499 1499 } 1500 1500 1501 - down(&file->mutex); 1501 + mutex_lock(&file->mutex); 1502 1502 list_add_tail(&uobj->list, &file->ucontext->ah_list); 1503 - up(&file->mutex); 1503 + mutex_unlock(&file->mutex); 1504 1504 1505 - up(&ib_uverbs_idr_mutex); 1505 + mutex_unlock(&ib_uverbs_idr_mutex); 1506 1506 1507 1507 return in_len; 1508 1508 ··· 1513 1513 ib_destroy_ah(ah); 1514 1514 1515 1515 err_up: 1516 - up(&ib_uverbs_idr_mutex); 1516 + mutex_unlock(&ib_uverbs_idr_mutex); 1517 1517 1518 1518 kfree(uobj); 1519 1519 return ret; ··· 1530 1530 if (copy_from_user(&cmd, buf, sizeof cmd)) 1531 1531 return -EFAULT; 1532 1532 1533 - down(&ib_uverbs_idr_mutex); 1533 + mutex_lock(&ib_uverbs_idr_mutex); 1534 1534 1535 1535 ah = idr_find(&ib_uverbs_ah_idr, cmd.ah_handle); 1536 1536 if (!ah || ah->uobject->context != file->ucontext) ··· 1544 1544 1545 1545 idr_remove(&ib_uverbs_ah_idr, cmd.ah_handle); 1546 1546 1547 - down(&file->mutex); 1547 + mutex_lock(&file->mutex); 1548 1548 list_del(&uobj->list); 1549 - up(&file->mutex); 1549 + mutex_unlock(&file->mutex); 1550 1550 1551 1551 kfree(uobj); 1552 1552 1553 1553 out: 1554 - up(&ib_uverbs_idr_mutex); 1554 + mutex_unlock(&ib_uverbs_idr_mutex); 1555 1555 1556 1556 return ret ? ret : in_len; 1557 1557 } ··· 1569 1569 if (copy_from_user(&cmd, buf, sizeof cmd)) 1570 1570 return -EFAULT; 1571 1571 1572 - down(&ib_uverbs_idr_mutex); 1572 + mutex_lock(&ib_uverbs_idr_mutex); 1573 1573 1574 1574 qp = idr_find(&ib_uverbs_qp_idr, cmd.qp_handle); 1575 1575 if (!qp || qp->uobject->context != file->ucontext) ··· 1602 1602 kfree(mcast); 1603 1603 1604 1604 out: 1605 - up(&ib_uverbs_idr_mutex); 1605 + mutex_unlock(&ib_uverbs_idr_mutex); 1606 1606 1607 1607 return ret ? ret : in_len; 1608 1608 } ··· 1620 1620 if (copy_from_user(&cmd, buf, sizeof cmd)) 1621 1621 return -EFAULT; 1622 1622 1623 - down(&ib_uverbs_idr_mutex); 1623 + mutex_lock(&ib_uverbs_idr_mutex); 1624 1624 1625 1625 qp = idr_find(&ib_uverbs_qp_idr, cmd.qp_handle); 1626 1626 if (!qp || qp->uobject->context != file->ucontext) ··· 1641 1641 } 1642 1642 1643 1643 out: 1644 - up(&ib_uverbs_idr_mutex); 1644 + mutex_unlock(&ib_uverbs_idr_mutex); 1645 1645 1646 1646 return ret ? ret : in_len; 1647 1647 } ··· 1673 1673 if (!uobj) 1674 1674 return -ENOMEM; 1675 1675 1676 - down(&ib_uverbs_idr_mutex); 1676 + mutex_lock(&ib_uverbs_idr_mutex); 1677 1677 1678 1678 pd = idr_find(&ib_uverbs_pd_idr, cmd.pd_handle); 1679 1679 ··· 1730 1730 goto err_idr; 1731 1731 } 1732 1732 1733 - down(&file->mutex); 1733 + mutex_lock(&file->mutex); 1734 1734 list_add_tail(&uobj->uobject.list, &file->ucontext->srq_list); 1735 - up(&file->mutex); 1735 + mutex_unlock(&file->mutex); 1736 1736 1737 - up(&ib_uverbs_idr_mutex); 1737 + mutex_unlock(&ib_uverbs_idr_mutex); 1738 1738 1739 1739 return in_len; 1740 1740 ··· 1746 1746 atomic_dec(&pd->usecnt); 1747 1747 1748 1748 err_up: 1749 - up(&ib_uverbs_idr_mutex); 1749 + mutex_unlock(&ib_uverbs_idr_mutex); 1750 1750 1751 1751 kfree(uobj); 1752 1752 return ret; ··· 1764 1764 if (copy_from_user(&cmd, buf, sizeof cmd)) 1765 1765 return -EFAULT; 1766 1766 1767 - down(&ib_uverbs_idr_mutex); 1767 + mutex_lock(&ib_uverbs_idr_mutex); 1768 1768 1769 1769 srq = idr_find(&ib_uverbs_srq_idr, cmd.srq_handle); 1770 1770 if (!srq || srq->uobject->context != file->ucontext) { ··· 1778 1778 ret = ib_modify_srq(srq, &attr, cmd.attr_mask); 1779 1779 1780 1780 out: 1781 - up(&ib_uverbs_idr_mutex); 1781 + mutex_unlock(&ib_uverbs_idr_mutex); 1782 1782 1783 1783 return ret ? ret : in_len; 1784 1784 } ··· 1796 1796 if (copy_from_user(&cmd, buf, sizeof cmd)) 1797 1797 return -EFAULT; 1798 1798 1799 - down(&ib_uverbs_idr_mutex); 1799 + mutex_lock(&ib_uverbs_idr_mutex); 1800 1800 1801 1801 memset(&resp, 0, sizeof resp); 1802 1802 ··· 1812 1812 1813 1813 idr_remove(&ib_uverbs_srq_idr, cmd.srq_handle); 1814 1814 1815 - down(&file->mutex); 1815 + mutex_lock(&file->mutex); 1816 1816 list_del(&uobj->uobject.list); 1817 - up(&file->mutex); 1817 + mutex_unlock(&file->mutex); 1818 1818 1819 1819 ib_uverbs_release_uevent(file, uobj); 1820 1820 ··· 1827 1827 ret = -EFAULT; 1828 1828 1829 1829 out: 1830 - up(&ib_uverbs_idr_mutex); 1830 + mutex_unlock(&ib_uverbs_idr_mutex); 1831 1831 1832 1832 return ret ? ret : in_len; 1833 1833 }
+4 -4
drivers/infiniband/core/uverbs_main.c
··· 66 66 67 67 static struct class *uverbs_class; 68 68 69 - DECLARE_MUTEX(ib_uverbs_idr_mutex); 69 + DEFINE_MUTEX(ib_uverbs_idr_mutex); 70 70 DEFINE_IDR(ib_uverbs_pd_idr); 71 71 DEFINE_IDR(ib_uverbs_mr_idr); 72 72 DEFINE_IDR(ib_uverbs_mw_idr); ··· 180 180 if (!context) 181 181 return 0; 182 182 183 - down(&ib_uverbs_idr_mutex); 183 + mutex_lock(&ib_uverbs_idr_mutex); 184 184 185 185 list_for_each_entry_safe(uobj, tmp, &context->ah_list, list) { 186 186 struct ib_ah *ah = idr_find(&ib_uverbs_ah_idr, uobj->id); ··· 250 250 kfree(uobj); 251 251 } 252 252 253 - up(&ib_uverbs_idr_mutex); 253 + mutex_unlock(&ib_uverbs_idr_mutex); 254 254 255 255 return context->device->dealloc_ucontext(context); 256 256 } ··· 653 653 file->ucontext = NULL; 654 654 file->async_file = NULL; 655 655 kref_init(&file->ref); 656 - init_MUTEX(&file->mutex); 656 + mutex_init(&file->mutex); 657 657 658 658 filp->private_data = file; 659 659
+3 -3
drivers/infiniband/ulp/ipoib/ipoib.h
··· 45 45 #include <linux/config.h> 46 46 #include <linux/kref.h> 47 47 #include <linux/if_infiniband.h> 48 + #include <linux/mutex.h> 48 49 49 50 #include <net/neighbour.h> 50 51 51 52 #include <asm/atomic.h> 52 - #include <asm/semaphore.h> 53 53 54 54 #include <rdma/ib_verbs.h> 55 55 #include <rdma/ib_pack.h> ··· 123 123 124 124 unsigned long flags; 125 125 126 - struct semaphore mcast_mutex; 127 - struct semaphore vlan_mutex; 126 + struct mutex mcast_mutex; 127 + struct mutex vlan_mutex; 128 128 129 129 struct rb_root path_tree; 130 130 struct list_head path_list;
+9 -9
drivers/infiniband/ulp/ipoib/ipoib_ib.c
··· 52 52 53 53 #define IPOIB_OP_RECV (1ul << 31) 54 54 55 - static DECLARE_MUTEX(pkey_sem); 55 + static DEFINE_MUTEX(pkey_mutex); 56 56 57 57 struct ipoib_ah *ipoib_create_ah(struct net_device *dev, 58 58 struct ib_pd *pd, struct ib_ah_attr *attr) ··· 445 445 446 446 /* Shutdown the P_Key thread if still active */ 447 447 if (!test_bit(IPOIB_PKEY_ASSIGNED, &priv->flags)) { 448 - down(&pkey_sem); 448 + mutex_lock(&pkey_mutex); 449 449 set_bit(IPOIB_PKEY_STOP, &priv->flags); 450 450 cancel_delayed_work(&priv->pkey_task); 451 - up(&pkey_sem); 451 + mutex_unlock(&pkey_mutex); 452 452 flush_workqueue(ipoib_workqueue); 453 453 } 454 454 ··· 599 599 if (test_bit(IPOIB_FLAG_ADMIN_UP, &priv->flags)) 600 600 ipoib_ib_dev_up(dev); 601 601 602 - down(&priv->vlan_mutex); 602 + mutex_lock(&priv->vlan_mutex); 603 603 604 604 /* Flush any child interfaces too */ 605 605 list_for_each_entry(cpriv, &priv->child_intfs, list) 606 606 ipoib_ib_dev_flush(&cpriv->dev); 607 607 608 - up(&priv->vlan_mutex); 608 + mutex_unlock(&priv->vlan_mutex); 609 609 } 610 610 611 611 void ipoib_ib_dev_cleanup(struct net_device *dev) ··· 651 651 if (test_bit(IPOIB_PKEY_ASSIGNED, &priv->flags)) 652 652 ipoib_open(dev); 653 653 else { 654 - down(&pkey_sem); 654 + mutex_lock(&pkey_mutex); 655 655 if (!test_bit(IPOIB_PKEY_STOP, &priv->flags)) 656 656 queue_delayed_work(ipoib_workqueue, 657 657 &priv->pkey_task, 658 658 HZ); 659 - up(&pkey_sem); 659 + mutex_unlock(&pkey_mutex); 660 660 } 661 661 } 662 662 ··· 670 670 671 671 /* P_Key value not assigned yet - start polling */ 672 672 if (!test_bit(IPOIB_PKEY_ASSIGNED, &priv->flags)) { 673 - down(&pkey_sem); 673 + mutex_lock(&pkey_mutex); 674 674 clear_bit(IPOIB_PKEY_STOP, &priv->flags); 675 675 queue_delayed_work(ipoib_workqueue, 676 676 &priv->pkey_task, 677 677 HZ); 678 - up(&pkey_sem); 678 + mutex_unlock(&pkey_mutex); 679 679 return 1; 680 680 } 681 681
+6 -6
drivers/infiniband/ulp/ipoib/ipoib_main.c
··· 105 105 struct ipoib_dev_priv *cpriv; 106 106 107 107 /* Bring up any child interfaces too */ 108 - down(&priv->vlan_mutex); 108 + mutex_lock(&priv->vlan_mutex); 109 109 list_for_each_entry(cpriv, &priv->child_intfs, list) { 110 110 int flags; 111 111 ··· 115 115 116 116 dev_change_flags(cpriv->dev, flags | IFF_UP); 117 117 } 118 - up(&priv->vlan_mutex); 118 + mutex_unlock(&priv->vlan_mutex); 119 119 } 120 120 121 121 netif_start_queue(dev); ··· 140 140 struct ipoib_dev_priv *cpriv; 141 141 142 142 /* Bring down any child interfaces too */ 143 - down(&priv->vlan_mutex); 143 + mutex_lock(&priv->vlan_mutex); 144 144 list_for_each_entry(cpriv, &priv->child_intfs, list) { 145 145 int flags; 146 146 ··· 150 150 151 151 dev_change_flags(cpriv->dev, flags & ~IFF_UP); 152 152 } 153 - up(&priv->vlan_mutex); 153 + mutex_unlock(&priv->vlan_mutex); 154 154 } 155 155 156 156 return 0; ··· 892 892 spin_lock_init(&priv->lock); 893 893 spin_lock_init(&priv->tx_lock); 894 894 895 - init_MUTEX(&priv->mcast_mutex); 896 - init_MUTEX(&priv->vlan_mutex); 895 + mutex_init(&priv->mcast_mutex); 896 + mutex_init(&priv->vlan_mutex); 897 897 898 898 INIT_LIST_HEAD(&priv->path_list); 899 899 INIT_LIST_HEAD(&priv->child_intfs);
+13 -13
drivers/infiniband/ulp/ipoib/ipoib_multicast.c
··· 55 55 "Enable multicast debug tracing if > 0"); 56 56 #endif 57 57 58 - static DECLARE_MUTEX(mcast_mutex); 58 + static DEFINE_MUTEX(mcast_mutex); 59 59 60 60 /* Used for all multicast joins (broadcast, IPv4 mcast and IPv6 mcast) */ 61 61 struct ipoib_mcast { ··· 385 385 386 386 if (!status && !ipoib_mcast_join_finish(mcast, mcmember)) { 387 387 mcast->backoff = 1; 388 - down(&mcast_mutex); 388 + mutex_lock(&mcast_mutex); 389 389 if (test_bit(IPOIB_MCAST_RUN, &priv->flags)) 390 390 queue_work(ipoib_workqueue, &priv->mcast_task); 391 - up(&mcast_mutex); 391 + mutex_unlock(&mcast_mutex); 392 392 complete(&mcast->done); 393 393 return; 394 394 } ··· 418 418 419 419 mcast->query = NULL; 420 420 421 - down(&mcast_mutex); 421 + mutex_lock(&mcast_mutex); 422 422 if (test_bit(IPOIB_MCAST_RUN, &priv->flags)) { 423 423 if (status == -ETIMEDOUT) 424 424 queue_work(ipoib_workqueue, &priv->mcast_task); ··· 427 427 mcast->backoff * HZ); 428 428 } else 429 429 complete(&mcast->done); 430 - up(&mcast_mutex); 430 + mutex_unlock(&mcast_mutex); 431 431 432 432 return; 433 433 } ··· 482 482 if (mcast->backoff > IPOIB_MAX_BACKOFF_SECONDS) 483 483 mcast->backoff = IPOIB_MAX_BACKOFF_SECONDS; 484 484 485 - down(&mcast_mutex); 485 + mutex_lock(&mcast_mutex); 486 486 if (test_bit(IPOIB_MCAST_RUN, &priv->flags)) 487 487 queue_delayed_work(ipoib_workqueue, 488 488 &priv->mcast_task, 489 489 mcast->backoff * HZ); 490 - up(&mcast_mutex); 490 + mutex_unlock(&mcast_mutex); 491 491 } else 492 492 mcast->query_id = ret; 493 493 } ··· 520 520 priv->broadcast = ipoib_mcast_alloc(dev, 1); 521 521 if (!priv->broadcast) { 522 522 ipoib_warn(priv, "failed to allocate broadcast group\n"); 523 - down(&mcast_mutex); 523 + mutex_lock(&mcast_mutex); 524 524 if (test_bit(IPOIB_MCAST_RUN, &priv->flags)) 525 525 queue_delayed_work(ipoib_workqueue, 526 526 &priv->mcast_task, HZ); 527 - up(&mcast_mutex); 527 + mutex_unlock(&mcast_mutex); 528 528 return; 529 529 } 530 530 ··· 580 580 581 581 ipoib_dbg_mcast(priv, "starting multicast thread\n"); 582 582 583 - down(&mcast_mutex); 583 + mutex_lock(&mcast_mutex); 584 584 if (!test_and_set_bit(IPOIB_MCAST_RUN, &priv->flags)) 585 585 queue_work(ipoib_workqueue, &priv->mcast_task); 586 - up(&mcast_mutex); 586 + mutex_unlock(&mcast_mutex); 587 587 588 588 return 0; 589 589 } ··· 595 595 596 596 ipoib_dbg_mcast(priv, "stopping multicast thread\n"); 597 597 598 - down(&mcast_mutex); 598 + mutex_lock(&mcast_mutex); 599 599 clear_bit(IPOIB_MCAST_RUN, &priv->flags); 600 600 cancel_delayed_work(&priv->mcast_task); 601 - up(&mcast_mutex); 601 + mutex_unlock(&mcast_mutex); 602 602 603 603 if (flush) 604 604 flush_workqueue(ipoib_workqueue);
+4 -4
drivers/infiniband/ulp/ipoib/ipoib_verbs.c
··· 65 65 } 66 66 67 67 /* attach QP to multicast group */ 68 - down(&priv->mcast_mutex); 68 + mutex_lock(&priv->mcast_mutex); 69 69 ret = ib_attach_mcast(priv->qp, mgid, mlid); 70 - up(&priv->mcast_mutex); 70 + mutex_unlock(&priv->mcast_mutex); 71 71 if (ret) 72 72 ipoib_warn(priv, "failed to attach to multicast group, ret = %d\n", ret); 73 73 ··· 81 81 struct ipoib_dev_priv *priv = netdev_priv(dev); 82 82 int ret; 83 83 84 - down(&priv->mcast_mutex); 84 + mutex_lock(&priv->mcast_mutex); 85 85 ret = ib_detach_mcast(priv->qp, mgid, mlid); 86 - up(&priv->mcast_mutex); 86 + mutex_unlock(&priv->mcast_mutex); 87 87 if (ret) 88 88 ipoib_warn(priv, "ib_detach_mcast failed (result = %d)\n", ret); 89 89
+5 -5
drivers/infiniband/ulp/ipoib/ipoib_vlan.c
··· 63 63 64 64 ppriv = netdev_priv(pdev); 65 65 66 - down(&ppriv->vlan_mutex); 66 + mutex_lock(&ppriv->vlan_mutex); 67 67 68 68 /* 69 69 * First ensure this isn't a duplicate. We check the parent device and ··· 124 124 125 125 list_add_tail(&priv->list, &ppriv->child_intfs); 126 126 127 - up(&ppriv->vlan_mutex); 127 + mutex_unlock(&ppriv->vlan_mutex); 128 128 129 129 return 0; 130 130 ··· 139 139 free_netdev(priv->dev); 140 140 141 141 err: 142 - up(&ppriv->vlan_mutex); 142 + mutex_unlock(&ppriv->vlan_mutex); 143 143 return result; 144 144 } 145 145 ··· 153 153 154 154 ppriv = netdev_priv(pdev); 155 155 156 - down(&ppriv->vlan_mutex); 156 + mutex_lock(&ppriv->vlan_mutex); 157 157 list_for_each_entry_safe(priv, tpriv, &ppriv->child_intfs, list) { 158 158 if (priv->pkey == pkey) { 159 159 unregister_netdev(priv->dev); ··· 167 167 break; 168 168 } 169 169 } 170 - up(&ppriv->vlan_mutex); 170 + mutex_unlock(&ppriv->vlan_mutex); 171 171 172 172 return ret; 173 173 }