@@ -62,7 +62,14 @@ static __always_inline
size_t memcpy_to_iter(void *iter_to, size_t progress,
size_t len, void *from, void *priv2)
{
- memcpy(iter_to, from + progress, len);
+ /*
+ * When using direct data placement (DDP) the hardware writes
+ * data directly to the destination buffer, and constructs
+ * IOVs such that they point to this data.
+ * Thus, when the src == dst we skip the memcpy.
+ */
+ if (!(IS_ENABLED(CONFIG_ULP_DDP) && iter_to == from + progress))
+ memcpy(iter_to, from + progress, len);
return 0;
}