MCPcopy Create free account
hub / github.com/F-Stack/f-stack / mlx5_common_dev_dma_unmap

Function mlx5_common_dev_dma_unmap

dpdk/drivers/common/mlx5/mlx5_common.c:1161–1201  ·  view source on GitHub ↗

* Callback to DMA unmap external memory to a device. * * @param rte_dev * Pointer to the generic device. * @param addr * Starting virtual address of memory to be unmapped. * @param iova * Starting IOVA address of memory to be unmapped. * @param len * Length of memory segment being unmapped. * * @return * 0 on success, negative value on error. */

Source from the content-addressed store, hash-verified

1159 * 0 on success, negative value on error.
1160 */
1161int
1162mlx5_common_dev_dma_unmap(struct rte_device *rte_dev, void *addr,
1163 uint64_t iova __rte_unused, size_t len __rte_unused)
1164{
1165 struct mlx5_common_device *dev;
1166 struct mr_cache_entry entry;
1167 struct mlx5_mr *mr;
1168
1169 dev = to_mlx5_device(rte_dev);
1170 if (!dev) {
1171 DRV_LOG(WARNING,
1172 "Unable to find matching mlx5 device to device %s.",
1173 rte_dev->name);
1174 rte_errno = ENODEV;
1175 return -1;
1176 }
1177 rte_rwlock_read_lock(&dev->mr_scache.rwlock);
1178 mr = mlx5_mr_lookup_list(&dev->mr_scache, &entry, (uintptr_t)addr);
1179 if (!mr) {
1180 rte_rwlock_read_unlock(&dev->mr_scache.rwlock);
1181 DRV_LOG(WARNING,
1182 "Address 0x%" PRIxPTR " wasn't registered to device %s",
1183 (uintptr_t)addr, rte_dev->name);
1184 rte_errno = EINVAL;
1185 return -1;
1186 }
1187 LIST_REMOVE(mr, mr);
1188 DRV_LOG(DEBUG, "MR(%p) is removed from list.", (void *)mr);
1189 mlx5_mr_free(mr, dev->mr_scache.dereg_mr_cb);
1190 mlx5_mr_rebuild_cache(&dev->mr_scache);
1191 /*
1192 * No explicit wmb is needed after updating dev_gen due to
1193 * store-release ordering in unlock that provides the
1194 * implicit barrier at the software visible level.
1195 */
1196 ++dev->mr_scache.dev_gen;
1197 DRV_LOG(DEBUG, "Broadcasting local cache flush, gen=%d.",
1198 dev->mr_scache.dev_gen);
1199 rte_rwlock_read_unlock(&dev->mr_scache.rwlock);
1200 return 0;
1201}
1202
1203void
1204mlx5_class_driver_register(struct mlx5_class_driver *driver)

Callers 2

Calls 4

to_mlx5_deviceFunction · 0.85
mlx5_mr_lookup_listFunction · 0.85
mlx5_mr_freeFunction · 0.85
mlx5_mr_rebuild_cacheFunction · 0.85

Tested by

no test coverage detected