blob: f6346e469cc3e9ab77d20aff08e66f0402c772a9 [file] [log] [blame] [view]
---
date: 2020-5-3
footer: libibverbs
header: "Libibverbs Programmer's Manual"
layout: page
license: 'Licensed under the OpenIB.org BSD license (FreeBSD Variant) - See COPYING.md'
section: 3
title: ibv_import_mr ibv_unimport_mr
---
# NAME
ibv_import_mr - import an MR from a given ibv_pd
ibv_unimport_mr - unimport an MR
# SYNOPSIS
```c
#include <infiniband/verbs.h>
struct ibv_mr *ibv_import_mr(struct ibv_pd *pd, uint32_t mr_handle);
void ibv_unimport_mr(struct ibv_mr *mr)
```
# DESCRIPTION
**ibv_import_mr()** returns a Memory region (MR) that is associated with the given
*mr_handle* in the RDMA context that assosicated with the given *pd*.
The input *mr_handle* value must be a valid kernel handle for an MR object in the assosicated RDMA context.
It can be achieved from the original MR by getting its ibv_mr->handle member value.
**ibv_unimport_mr()** un import the MR.
Once the MR usage has been ended ibv_dereg_mr() or ibv_unimport_mr() should be called.
The first one will go to the kernel to destroy the object once the second one way cleanup what
ever is needed/opposite of the import without calling the kernel.
This is the responsibility of the application to coordinate between all ibv_context(s) that use this MR.
Once destroy is done no other process can touch the object except for unimport. All users of the context must
collaborate to ensure this.
# RETURN VALUE
**ibv_import_mr()** returns a pointer to the allocated MR, or NULL if the request fails.
# NOTES
The *addr* field in the imported MR is not applicable, NULL value is expected.
# SEE ALSO
**ibv_reg_mr**(3),
**ibv_reg_dm_mr**(3),
**ibv_reg_mr_iova**(3),
**ibv_reg_mr_iova2**(3),
**ibv_dereg_mr**(3),
# AUTHOR
Yishai Hadas <yishaih@mellanox.com>