Lines Matching defs:devr
2593 mutex_lock(&ports->devr->mutex);
2595 mutex_unlock(&ports->devr->mutex);
2693 schedule_work(&ibdev->devr.ports[port - 1].pkey_change_work);
2905 static int create_dev_resources(struct mlx5_ib_resources *devr)
2914 dev = container_of(devr, struct mlx5_ib_dev, devr);
2917 mutex_init(&devr->mutex);
2919 devr->p0 = rdma_zalloc_drv_obj(ibdev, ib_pd);
2920 if (!devr->p0)
2923 devr->p0->device = ibdev;
2924 devr->p0->uobject = NULL;
2925 atomic_set(&devr->p0->usecnt, 0);
2927 ret = mlx5_ib_alloc_pd(devr->p0, NULL);
2931 devr->c0 = rdma_zalloc_drv_obj(ibdev, ib_cq);
2932 if (!devr->c0) {
2937 devr->c0->device = &dev->ib_dev;
2938 atomic_set(&devr->c0->usecnt, 0);
2940 ret = mlx5_ib_create_cq(devr->c0, &cq_attr, NULL);
2944 devr->x0 = mlx5_ib_alloc_xrcd(&dev->ib_dev, NULL);
2945 if (IS_ERR(devr->x0)) {
2946 ret = PTR_ERR(devr->x0);
2949 devr->x0->device = &dev->ib_dev;
2950 devr->x0->inode = NULL;
2951 atomic_set(&devr->x0->usecnt, 0);
2952 mutex_init(&devr->x0->tgt_qp_mutex);
2953 INIT_LIST_HEAD(&devr->x0->tgt_qp_list);
2955 devr->x1 = mlx5_ib_alloc_xrcd(&dev->ib_dev, NULL);
2956 if (IS_ERR(devr->x1)) {
2957 ret = PTR_ERR(devr->x1);
2960 devr->x1->device = &dev->ib_dev;
2961 devr->x1->inode = NULL;
2962 atomic_set(&devr->x1->usecnt, 0);
2963 mutex_init(&devr->x1->tgt_qp_mutex);
2964 INIT_LIST_HEAD(&devr->x1->tgt_qp_list);
2970 attr.ext.cq = devr->c0;
2971 attr.ext.xrc.xrcd = devr->x0;
2973 devr->s0 = rdma_zalloc_drv_obj(ibdev, ib_srq);
2974 if (!devr->s0) {
2979 devr->s0->device = &dev->ib_dev;
2980 devr->s0->pd = devr->p0;
2981 devr->s0->srq_type = IB_SRQT_XRC;
2982 devr->s0->ext.xrc.xrcd = devr->x0;
2983 devr->s0->ext.cq = devr->c0;
2984 ret = mlx5_ib_create_srq(devr->s0, &attr, NULL);
2988 atomic_inc(&devr->s0->ext.xrc.xrcd->usecnt);
2989 atomic_inc(&devr->s0->ext.cq->usecnt);
2990 atomic_inc(&devr->p0->usecnt);
2991 atomic_set(&devr->s0->usecnt, 0);
2997 devr->s1 = rdma_zalloc_drv_obj(ibdev, ib_srq);
2998 if (!devr->s1) {
3003 devr->s1->device = &dev->ib_dev;
3004 devr->s1->pd = devr->p0;
3005 devr->s1->srq_type = IB_SRQT_BASIC;
3006 devr->s1->ext.cq = devr->c0;
3008 ret = mlx5_ib_create_srq(devr->s1, &attr, NULL);
3012 atomic_inc(&devr->p0->usecnt);
3013 atomic_set(&devr->s1->usecnt, 0);
3015 for (port = 0; port < ARRAY_SIZE(devr->ports); ++port) {
3016 INIT_WORK(&devr->ports[port].pkey_change_work,
3018 devr->ports[port].devr = devr;
3024 kfree(devr->s1);
3026 mlx5_ib_destroy_srq(devr->s0, NULL);
3028 kfree(devr->s0);
3030 mlx5_ib_dealloc_xrcd(devr->x1, NULL);
3032 mlx5_ib_dealloc_xrcd(devr->x0, NULL);
3034 mlx5_ib_destroy_cq(devr->c0, NULL);
3036 kfree(devr->c0);
3038 mlx5_ib_dealloc_pd(devr->p0, NULL);
3040 kfree(devr->p0);
3044 static void destroy_dev_resources(struct mlx5_ib_resources *devr)
3048 mlx5_ib_destroy_srq(devr->s1, NULL);
3049 kfree(devr->s1);
3050 mlx5_ib_destroy_srq(devr->s0, NULL);
3051 kfree(devr->s0);
3052 mlx5_ib_dealloc_xrcd(devr->x0, NULL);
3053 mlx5_ib_dealloc_xrcd(devr->x1, NULL);
3054 mlx5_ib_destroy_cq(devr->c0, NULL);
3055 kfree(devr->c0);
3056 mlx5_ib_dealloc_pd(devr->p0, NULL);
3057 kfree(devr->p0);
3060 for (port = 0; port < ARRAY_SIZE(devr->ports); ++port)
3061 cancel_work_sync(&devr->ports[port].pkey_change_work);
3542 err = create_dev_resources(&dev->devr);
3597 destroy_dev_resources(&dev->devr);
3626 destroy_dev_resources(&dev->devr);