| --- | |
| date: 2018-6-1 | |
| 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_alloc_null_mr | |
| --- | |
| # NAME | |
| ibv_alloc_null_mr - allocate a null memory region (MR) | |
| # SYNOPSIS | |
| ```c | |
| #include <infiniband/verbs.h> | |
| struct ibv_mr *ibv_alloc_null_mr(struct ibv_pd *pd); | |
| ``` | |
| # DESCRIPTION | |
| **ibv_alloc_null_mr()** allocates a null memory region (MR) that is associated with the protection | |
| domain *pd*. | |
| A null MR discards all data written to it, and always returns 0 on | |
| read. It has the maximum length and only the lkey is valid, the MR is not | |
| exposed as an rkey. | |
| A device should implement the null MR in a way that bypasses PCI | |
| transfers, internally discarding or sourcing 0 data. This provides a | |
| way to avoid PCI bus transfers by using a scatter/gather list in | |
| commands if applications do not intend to access the data, or need | |
| data to be 0 filled. | |
| Specifically upon **ibv_post_send()** the device skips PCI read cycles and | |
| upon **ibv_post_recv()** the device skips PCI write cycles which finally | |
| improves performance. | |
| **ibv_dereg_mr()** deregisters the MR. | |
| The use of ibv_rereg_mr() or ibv_bind_mw() | |
| with this MR is invalid. | |
| # RETURN VALUE | |
| **ibv_alloc_null_mr()** returns a pointer to the allocated MR, or NULL if the request fails, and errno is set to indicate the reason. | |
| # SEE ALSO | |
| **ibv_reg_mr**(3), | |
| **ibv_dereg_mr**(3), | |
| # AUTHOR | |
| Yonatan Cohen <yonatanc@mellanox.com> | |