- sprintf(name, "mlx5_regex_%02x:%02x.%02x", pci_dev->addr.bus,
- pci_dev->addr.devid, pci_dev->addr.function);
+ sprintf(name, "mlx5_regex_%s", dev->name);
+}
+
+/**
+ * Callback for memory event.
+ *
+ * @param event_type
+ * Memory event type.
+ * @param addr
+ * Address of memory.
+ * @param len
+ * Size of memory.
+ */
+static void
+mlx5_regex_mr_mem_event_cb(enum rte_mem_event event_type, const void *addr,
+ size_t len, void *arg __rte_unused)
+{
+ struct mlx5_regex_priv *priv;
+
+ /* Must be called from the primary process. */
+ MLX5_ASSERT(rte_eal_process_type() == RTE_PROC_PRIMARY);
+ switch (event_type) {
+ case RTE_MEM_EVENT_FREE:
+ pthread_mutex_lock(&mem_event_list_lock);
+ /* Iterate all the existing mlx5 devices. */
+ TAILQ_FOREACH(priv, &mlx5_mem_event_list, mem_event_cb)
+ mlx5_free_mr_by_addr(&priv->mr_scache,
+ mlx5_os_get_ctx_device_name
+ (priv->cdev->ctx),
+ addr, len);
+ pthread_mutex_unlock(&mem_event_list_lock);
+ break;
+ case RTE_MEM_EVENT_ALLOC:
+ default:
+ break;
+ }