mr.c (3121e3c441b5eccdd15e6c320ec32215b334b9ec) | mr.c (d5436ba01075ef4629015f7a00914d64ffd795d6) |
---|---|
1/* 2 * Copyright (c) 2013, Mellanox Technologies inc. All rights reserved. 3 * 4 * This software is available to you under a choice of one of two 5 * licenses. You may choose to be licensed under the terms of the GNU 6 * General Public License (GPL) Version 2, available from the file 7 * COPYING in the main directory of this source tree, or the 8 * OpenIB.org BSD license below: --- 1024 unchanged lines hidden (view full) --- 1033 err = mlx5_core_create_psv(&dev->mdev, to_mpd(pd)->pdn, 1034 2, psv_index); 1035 if (err) 1036 goto err_free_sig; 1037 1038 access_mode = MLX5_ACCESS_MODE_KLM; 1039 mr->sig->psv_memory.psv_idx = psv_index[0]; 1040 mr->sig->psv_wire.psv_idx = psv_index[1]; | 1/* 2 * Copyright (c) 2013, Mellanox Technologies inc. All rights reserved. 3 * 4 * This software is available to you under a choice of one of two 5 * licenses. You may choose to be licensed under the terms of the GNU 6 * General Public License (GPL) Version 2, available from the file 7 * COPYING in the main directory of this source tree, or the 8 * OpenIB.org BSD license below: --- 1024 unchanged lines hidden (view full) --- 1033 err = mlx5_core_create_psv(&dev->mdev, to_mpd(pd)->pdn, 1034 2, psv_index); 1035 if (err) 1036 goto err_free_sig; 1037 1038 access_mode = MLX5_ACCESS_MODE_KLM; 1039 mr->sig->psv_memory.psv_idx = psv_index[0]; 1040 mr->sig->psv_wire.psv_idx = psv_index[1]; |
1041 1042 mr->sig->sig_status_checked = true; 1043 mr->sig->sig_err_exists = false; 1044 /* Next UMR, Arm SIGERR */ 1045 ++mr->sig->sigerr_count; |
|
1041 } 1042 1043 in->seg.flags = MLX5_PERM_UMR_EN | access_mode; 1044 err = mlx5_core_create_mkey(&dev->mdev, &mr->mmr, in, sizeof(*in), 1045 NULL, NULL, NULL); 1046 if (err) 1047 goto err_destroy_psv; 1048 --- 134 unchanged lines hidden (view full) --- 1183 struct mlx5_ib_dev *dev = to_mdev(page_list->device); 1184 int size = page_list->max_page_list_len * sizeof(u64); 1185 1186 dma_free_coherent(&dev->mdev.pdev->dev, size, mfrpl->mapped_page_list, 1187 mfrpl->map); 1188 kfree(mfrpl->ibfrpl.page_list); 1189 kfree(mfrpl); 1190} | 1046 } 1047 1048 in->seg.flags = MLX5_PERM_UMR_EN | access_mode; 1049 err = mlx5_core_create_mkey(&dev->mdev, &mr->mmr, in, sizeof(*in), 1050 NULL, NULL, NULL); 1051 if (err) 1052 goto err_destroy_psv; 1053 --- 134 unchanged lines hidden (view full) --- 1188 struct mlx5_ib_dev *dev = to_mdev(page_list->device); 1189 int size = page_list->max_page_list_len * sizeof(u64); 1190 1191 dma_free_coherent(&dev->mdev.pdev->dev, size, mfrpl->mapped_page_list, 1192 mfrpl->map); 1193 kfree(mfrpl->ibfrpl.page_list); 1194 kfree(mfrpl); 1195} |
1196 1197int mlx5_ib_check_mr_status(struct ib_mr *ibmr, u32 check_mask, 1198 struct ib_mr_status *mr_status) 1199{ 1200 struct mlx5_ib_mr *mmr = to_mmr(ibmr); 1201 int ret = 0; 1202 1203 if (check_mask & ~IB_MR_CHECK_SIG_STATUS) { 1204 pr_err("Invalid status check mask\n"); 1205 ret = -EINVAL; 1206 goto done; 1207 } 1208 1209 mr_status->fail_status = 0; 1210 if (check_mask & IB_MR_CHECK_SIG_STATUS) { 1211 if (!mmr->sig) { 1212 ret = -EINVAL; 1213 pr_err("signature status check requested on a non-signature enabled MR\n"); 1214 goto done; 1215 } 1216 1217 mmr->sig->sig_status_checked = true; 1218 if (!mmr->sig->sig_err_exists) 1219 goto done; 1220 1221 if (ibmr->lkey == mmr->sig->err_item.key) 1222 memcpy(&mr_status->sig_err, &mmr->sig->err_item, 1223 sizeof(mr_status->sig_err)); 1224 else { 1225 mr_status->sig_err.err_type = IB_SIG_BAD_GUARD; 1226 mr_status->sig_err.sig_err_offset = 0; 1227 mr_status->sig_err.key = mmr->sig->err_item.key; 1228 } 1229 1230 mmr->sig->sig_err_exists = false; 1231 mr_status->fail_status |= IB_MR_CHECK_SIG_STATUS; 1232 } 1233 1234done: 1235 return ret; 1236} |
|