lib/accel: remove PMEM support from accel library

This patch removes references to deprecated PMEM from accel library.
The code that was executed when ACCEL_FLAG_PERSISTENT flag is set,
is no longer needed and is removed.

_sw_accel_copy() function is removed and replaced with memcpy(), as
after PMEM removal its functionality is the same as memcpy().

_sw_accel_dualcast() is no longer needed, replaced with direct calls
to memcpy()

Removed 'flags' parameter - it is no longer needed

accel_ut.c: removed references to PMDK

deprecation.md updated

ACCEL_FLAG_PERSISTENT flag will be removed in next patch.

Change-Id: I86130466fe7a5f6ee547df1517b803035ff41a7a
Signed-off-by: Marcin Spiewak <marcin.spiewak@intel.com>
Reviewed-on: https://review.spdk.io/gerrit/c/spdk/spdk/+/16899
Reviewed-by: Tomasz Zawadzki <tomasz.zawadzki@intel.com>
Reviewed-by: Aleksey Marchuk <alexeymar@nvidia.com>
Tested-by: SPDK CI Jenkins <sys_sgci@intel.com>
Reviewed-by: Konrad Sztyber <konrad.sztyber@intel.com>
Reviewed-by: Ben Walker <benjamin.walker@intel.com>
This commit is contained in:
Marcin Spiewak 2023-02-21 16:00:42 +00:00 committed by Tomasz Zawadzki
parent 71a0db0e66
commit 27d5b38523
3 changed files with 18 additions and 122 deletions

View File

@ -24,10 +24,6 @@ The tags can be matched with the level 4 headers below.
PMDK is no longer supported and integrations with it in SPDK are now deprecated, and will be removed in SPDK 23.05. PMDK is no longer supported and integrations with it in SPDK are now deprecated, and will be removed in SPDK 23.05.
Please see: [UPDATE ON PMDK AND OUR LONG TERM SUPPORT STRATEGY](https://pmem.io/blog/2022/11/update-on-pmdk-and-our-long-term-support-strategy/). Please see: [UPDATE ON PMDK AND OUR LONG TERM SUPPORT STRATEGY](https://pmem.io/blog/2022/11/update-on-pmdk-and-our-long-term-support-strategy/).
#### `accel_flag_persistent`
Deprecated `ACCEL_FLAG_PERSISTENT` flag in `accel_sw` accel framework module, it will be removed in SPDK 23.05.
#### `bdev_pmem` #### `bdev_pmem`
Deprecated `bdev_pmem` based on libpmemblk, it will be removed in SPDK 23.05. Deprecated `bdev_pmem` based on libpmemblk, it will be removed in SPDK 23.05.

View File

@ -18,10 +18,6 @@
#include "spdk/util.h" #include "spdk/util.h"
#include "spdk/xor.h" #include "spdk/xor.h"
#ifdef SPDK_CONFIG_PMDK
#include "libpmem.h"
#endif
#ifdef SPDK_CONFIG_ISAL #ifdef SPDK_CONFIG_ISAL
#include "../isa-l/include/igzip_lib.h" #include "../isa-l/include/igzip_lib.h"
#ifdef SPDK_CONFIG_ISAL_CRYPTO #ifdef SPDK_CONFIG_ISAL_CRYPTO
@ -67,24 +63,6 @@ _add_to_comp_list(struct sw_accel_io_channel *sw_ch, struct spdk_accel_task *acc
TAILQ_INSERT_TAIL(&sw_ch->tasks_to_complete, accel_task, link); TAILQ_INSERT_TAIL(&sw_ch->tasks_to_complete, accel_task, link);
} }
SPDK_LOG_DEPRECATION_REGISTER(accel_flag_persistent,
"PMDK libpmem accel_sw integration", "SPDK 23.05", 10);
/* Used when the SW engine is selected and the durable flag is set. */
inline static int
_check_flags(int flags)
{
if (flags & ACCEL_FLAG_PERSISTENT) {
SPDK_LOG_DEPRECATED(accel_flag_persistent);
#ifndef SPDK_CONFIG_PMDK
/* PMDK is required to use this flag. */
SPDK_ERRLOG("ACCEL_FLAG_PERSISTENT set but PMDK not configured. Configure PMDK or do not use this flag.\n");
return -EINVAL;
#endif
}
return 0;
}
static bool static bool
sw_accel_supports_opcode(enum accel_opcode opc) sw_accel_supports_opcode(enum accel_opcode opc)
{ {
@ -106,40 +84,10 @@ sw_accel_supports_opcode(enum accel_opcode opc)
} }
} }
static inline void
_pmem_memcpy(void *dst, const void *src, size_t len)
{
#ifdef SPDK_CONFIG_PMDK
int is_pmem = pmem_is_pmem(dst, len);
if (is_pmem) {
pmem_memcpy_persist(dst, src, len);
} else {
memcpy(dst, src, len);
pmem_msync(dst, len);
}
#else
SPDK_ERRLOG("Function not defined without SPDK_CONFIG_PMDK enabled.\n");
assert(0);
#endif
}
static void
_sw_accel_dualcast(void *dst1, void *dst2, void *src, size_t nbytes, int flags)
{
if (flags & ACCEL_FLAG_PERSISTENT) {
_pmem_memcpy(dst1, src, nbytes);
_pmem_memcpy(dst2, src, nbytes);
} else {
memcpy(dst1, src, nbytes);
memcpy(dst2, src, nbytes);
}
}
static int static int
_sw_accel_dualcast_iovs(struct iovec *dst_iovs, uint32_t dst_iovcnt, _sw_accel_dualcast_iovs(struct iovec *dst_iovs, uint32_t dst_iovcnt,
struct iovec *dst2_iovs, uint32_t dst2_iovcnt, struct iovec *dst2_iovs, uint32_t dst2_iovcnt,
struct iovec *src_iovs, uint32_t src_iovcnt, int flags) struct iovec *src_iovs, uint32_t src_iovcnt)
{ {
if (spdk_unlikely(dst_iovcnt != 1 || dst2_iovcnt != 1 || src_iovcnt != 1)) { if (spdk_unlikely(dst_iovcnt != 1 || dst2_iovcnt != 1 || src_iovcnt != 1)) {
return -EINVAL; return -EINVAL;
@ -150,26 +98,15 @@ _sw_accel_dualcast_iovs(struct iovec *dst_iovs, uint32_t dst_iovcnt,
return -EINVAL; return -EINVAL;
} }
_sw_accel_dualcast(dst_iovs[0].iov_base, dst2_iovs[0].iov_base, src_iovs[0].iov_base, memcpy(dst_iovs[0].iov_base, src_iovs[0].iov_base, dst_iovs[0].iov_len);
dst_iovs[0].iov_len, flags); memcpy(dst2_iovs[0].iov_base, src_iovs[0].iov_base, dst_iovs[0].iov_len);
return 0; return 0;
} }
static void
_sw_accel_copy(void *dst, void *src, size_t nbytes, int flags)
{
if (flags & ACCEL_FLAG_PERSISTENT) {
_pmem_memcpy(dst, src, nbytes);
} else {
memcpy(dst, src, nbytes);
}
}
static void static void
_sw_accel_copy_iovs(struct iovec *dst_iovs, uint32_t dst_iovcnt, _sw_accel_copy_iovs(struct iovec *dst_iovs, uint32_t dst_iovcnt,
struct iovec *src_iovs, uint32_t src_iovcnt, int flags) struct iovec *src_iovs, uint32_t src_iovcnt)
{ {
struct spdk_ioviter iter; struct spdk_ioviter iter;
void *src, *dst; void *src, *dst;
@ -179,7 +116,7 @@ _sw_accel_copy_iovs(struct iovec *dst_iovs, uint32_t dst_iovcnt,
dst_iovs, dst_iovcnt, &src, &dst); dst_iovs, dst_iovcnt, &src, &dst);
len != 0; len != 0;
len = spdk_ioviter_next(&iter, &src, &dst)) { len = spdk_ioviter_next(&iter, &src, &dst)) {
_sw_accel_copy(dst, src, len, flags); memcpy(dst, src, len);
} }
} }
@ -199,7 +136,7 @@ _sw_accel_compare(struct iovec *src_iovs, uint32_t src_iovcnt,
} }
static int static int
_sw_accel_fill(struct iovec *iovs, uint32_t iovcnt, uint8_t fill, int flags) _sw_accel_fill(struct iovec *iovs, uint32_t iovcnt, uint8_t fill)
{ {
void *dst; void *dst;
size_t nbytes; size_t nbytes;
@ -211,23 +148,7 @@ _sw_accel_fill(struct iovec *iovs, uint32_t iovcnt, uint8_t fill, int flags)
dst = iovs[0].iov_base; dst = iovs[0].iov_base;
nbytes = iovs[0].iov_len; nbytes = iovs[0].iov_len;
if (flags & ACCEL_FLAG_PERSISTENT) { memset(dst, fill, nbytes);
#ifdef SPDK_CONFIG_PMDK
int is_pmem = pmem_is_pmem(dst, nbytes);
if (is_pmem) {
pmem_memset_persist(dst, fill, nbytes);
} else {
memset(dst, fill, nbytes);
pmem_msync(dst, nbytes);
}
#else
SPDK_ERRLOG("Function not defined without SPDK_CONFIG_PMDK enabled.\n");
assert(0);
#endif
} else {
memset(dst, fill, nbytes);
}
return 0; return 0;
} }
@ -531,28 +452,17 @@ sw_accel_submit_tasks(struct spdk_io_channel *ch, struct spdk_accel_task *accel_
do { do {
switch (accel_task->op_code) { switch (accel_task->op_code) {
case ACCEL_OPC_COPY: case ACCEL_OPC_COPY:
rc = _check_flags(accel_task->flags); _sw_accel_copy_iovs(accel_task->d.iovs, accel_task->d.iovcnt,
if (rc == 0) { accel_task->s.iovs, accel_task->s.iovcnt);
_sw_accel_copy_iovs(accel_task->d.iovs, accel_task->d.iovcnt,
accel_task->s.iovs, accel_task->s.iovcnt,
accel_task->flags);
}
break; break;
case ACCEL_OPC_FILL: case ACCEL_OPC_FILL:
rc = _check_flags(accel_task->flags); rc = _sw_accel_fill(accel_task->d.iovs, accel_task->d.iovcnt,
if (rc == 0) { accel_task->fill_pattern);
rc = _sw_accel_fill(accel_task->d.iovs, accel_task->d.iovcnt,
accel_task->fill_pattern, accel_task->flags);
}
break; break;
case ACCEL_OPC_DUALCAST: case ACCEL_OPC_DUALCAST:
rc = _check_flags(accel_task->flags); rc = _sw_accel_dualcast_iovs(accel_task->d.iovs, accel_task->d.iovcnt,
if (rc == 0) { accel_task->d2.iovs, accel_task->d2.iovcnt,
rc = _sw_accel_dualcast_iovs(accel_task->d.iovs, accel_task->d.iovcnt, accel_task->s.iovs, accel_task->s.iovcnt);
accel_task->d2.iovs, accel_task->d2.iovcnt,
accel_task->s.iovs, accel_task->s.iovcnt,
accel_task->flags);
}
break; break;
case ACCEL_OPC_COMPARE: case ACCEL_OPC_COMPARE:
rc = _sw_accel_compare(accel_task->s.iovs, accel_task->s.iovcnt, rc = _sw_accel_compare(accel_task->s.iovs, accel_task->s.iovcnt,
@ -562,14 +472,10 @@ sw_accel_submit_tasks(struct spdk_io_channel *ch, struct spdk_accel_task *accel_
_sw_accel_crc32cv(accel_task->crc_dst, accel_task->s.iovs, accel_task->s.iovcnt, accel_task->seed); _sw_accel_crc32cv(accel_task->crc_dst, accel_task->s.iovs, accel_task->s.iovcnt, accel_task->seed);
break; break;
case ACCEL_OPC_COPY_CRC32C: case ACCEL_OPC_COPY_CRC32C:
rc = _check_flags(accel_task->flags); _sw_accel_copy_iovs(accel_task->d.iovs, accel_task->d.iovcnt,
if (rc == 0) { accel_task->s.iovs, accel_task->s.iovcnt);
_sw_accel_copy_iovs(accel_task->d.iovs, accel_task->d.iovcnt, _sw_accel_crc32cv(accel_task->crc_dst, accel_task->s.iovs,
accel_task->s.iovs, accel_task->s.iovcnt, accel_task->s.iovcnt, accel_task->seed);
accel_task->flags);
_sw_accel_crc32cv(accel_task->crc_dst, accel_task->s.iovs,
accel_task->s.iovcnt, accel_task->seed);
}
break; break;
case ACCEL_OPC_COMPRESS: case ACCEL_OPC_COMPRESS:
rc = _sw_accel_compress(sw_ch, accel_task); rc = _sw_accel_compress(sw_ch, accel_task);

View File

@ -13,12 +13,6 @@
#include "accel/accel_sw.c" #include "accel/accel_sw.c"
#include "unit/lib/json_mock.c" #include "unit/lib/json_mock.c"
#ifdef SPDK_CONFIG_PMDK
DEFINE_STUB(pmem_msync, int, (const void *addr, size_t len), 0);
DEFINE_STUB(pmem_memcpy_persist, void *, (void *pmemdest, const void *src, size_t len), NULL);
DEFINE_STUB(pmem_is_pmem, int, (const void *addr, size_t len), 0);
DEFINE_STUB(pmem_memset_persist, void *, (void *pmemdest, int c, size_t len), NULL);
#endif
DEFINE_STUB_V(spdk_memory_domain_destroy, (struct spdk_memory_domain *domain)); DEFINE_STUB_V(spdk_memory_domain_destroy, (struct spdk_memory_domain *domain));
DEFINE_STUB(spdk_memory_domain_get_dma_device_id, const char *, DEFINE_STUB(spdk_memory_domain_get_dma_device_id, const char *,
(struct spdk_memory_domain *domain), "UT_DMA"); (struct spdk_memory_domain *domain), "UT_DMA");