* Copyright 2016 Mellanox Technologies, Ltd
*/
-#ifdef PEDANTIC
-#pragma GCC diagnostic ignored "-Wpedantic"
-#endif
-#include <infiniband/verbs.h>
-#ifdef PEDANTIC
-#pragma GCC diagnostic error "-Wpedantic"
-#endif
-
#include <rte_eal_memconfig.h>
#include <rte_mempool.h>
#include <rte_malloc.h>
#include <rte_rwlock.h>
#include <rte_bus_pci.h>
-#include <mlx5_glue.h>
#include <mlx5_common_mp.h>
#include <mlx5_common_mr.h>
#include "mlx5.h"
#include "mlx5_mr.h"
#include "mlx5_rxtx.h"
+#include "mlx5_rx.h"
+#include "mlx5_tx.h"
struct mr_find_contig_memsegs_data {
uintptr_t addr;
int i;
int rebuild = 0;
- DEBUG("device %s free callback: addr=%p, len=%zu",
+ DRV_LOG(DEBUG, "device %s free callback: addr=%p, len=%zu",
sh->ibdev_name, addr, len);
msl = rte_mem_virt2memseg_list(addr);
/* addr and len must be page-aligned. */
pos = ms_idx - mr->ms_base_idx;
MLX5_ASSERT(rte_bitmap_get(mr->ms_bmp, pos));
MLX5_ASSERT(pos < mr->ms_bmp_n);
- DEBUG("device %s MR(%p): clear bitmap[%u] for addr %p",
+ DRV_LOG(DEBUG, "device %s MR(%p): clear bitmap[%u] for addr %p",
sh->ibdev_name, (void *)mr, pos, (void *)start);
rte_bitmap_clear(mr->ms_bmp, pos);
if (--mr->ms_n == 0) {
LIST_REMOVE(mr, mr);
LIST_INSERT_HEAD(&sh->share_cache.mr_free_list, mr, mr);
- DEBUG("device %s remove MR(%p) from list",
+ DRV_LOG(DEBUG, "device %s remove MR(%p) from list",
sh->ibdev_name, (void *)mr);
}
/*
* before the core sees the newly allocated memory.
*/
++sh->share_cache.dev_gen;
- DEBUG("broadcasting local cache flush, gen=%d",
+ DRV_LOG(DEBUG, "broadcasting local cache flush, gen=%d",
sh->share_cache.dev_gen);
rte_smp_wmb();
}
{
uint16_t port_id;
- RTE_ETH_FOREACH_DEV_OF(port_id, &pdev->device)
- return &rte_eth_devices[port_id];
- return NULL;
+ port_id = rte_eth_find_next_of(0, &pdev->device);
+ if (port_id == RTE_MAX_ETHPORTS)
+ return NULL;
+ return &rte_eth_devices[port_id];
}
/**
return -1;
}
LIST_REMOVE(mr, mr);
- LIST_INSERT_HEAD(&sh->share_cache.mr_free_list, mr, mr);
- DEBUG("port %u remove MR(%p) from list", dev->data->port_id,
+ mlx5_mr_free(mr, sh->share_cache.dereg_mr_cb);
+ DRV_LOG(DEBUG, "port %u remove MR(%p) from list", dev->data->port_id,
(void *)mr);
mlx5_mr_rebuild_cache(&sh->share_cache);
/*
* before the core sees the newly allocated memory.
*/
++sh->share_cache.dev_gen;
- DEBUG("broadcasting local cache flush, gen=%d",
+ DRV_LOG(DEBUG, "broadcasting local cache flush, gen=%d",
sh->share_cache.dev_gen);
rte_smp_wmb();
rte_rwlock_read_unlock(&sh->share_cache.rwlock);
.mr_ctrl = mr_ctrl,
.ret = 0,
};
+ uint32_t flags = rte_pktmbuf_priv_flags(mp);
+ if (flags & RTE_PKTMBUF_POOL_F_PINNED_EXT_BUF) {
+ /*
+ * The pinned external buffer should be registered for DMA
+ * operations by application. The mem_list of the pool contains
+ * the list of chunks with mbuf structures w/o built-in data
+ * buffers and DMA actually does not happen there, no need
+ * to create MR for these chunks.
+ */
+ return 0;
+ }
+ DRV_LOG(DEBUG, "Port %u Rx queue registering mp %s "
+ "having %u chunks.", dev->data->port_id,
+ mp->name, mp->nb_mem_chunks);
rte_mempool_mem_iter(mp, mlx5_mr_update_mp_cb, &data);
if (data.ret < 0 && rte_errno == ENXIO) {
/* Mempool may have externally allocated memory. */