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.
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`
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/xor.h"
#ifdef SPDK_CONFIG_PMDK
#include "libpmem.h"
#endif
#ifdef SPDK_CONFIG_ISAL
#include "../isa-l/include/igzip_lib.h"
#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);
}
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
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
_sw_accel_dualcast_iovs(struct iovec *dst_iovs, uint32_t dst_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)) {
return -EINVAL;
@ -150,26 +98,15 @@ _sw_accel_dualcast_iovs(struct iovec *dst_iovs, uint32_t dst_iovcnt,
return -EINVAL;
}
_sw_accel_dualcast(dst_iovs[0].iov_base, dst2_iovs[0].iov_base, src_iovs[0].iov_base,
dst_iovs[0].iov_len, flags);
memcpy(dst_iovs[0].iov_base, src_iovs[0].iov_base, dst_iovs[0].iov_len);
memcpy(dst2_iovs[0].iov_base, src_iovs[0].iov_base, dst_iovs[0].iov_len);
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
_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;
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);
len != 0;
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
_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;
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;
nbytes = iovs[0].iov_len;
if (flags & ACCEL_FLAG_PERSISTENT) {
#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);
}
memset(dst, fill, nbytes);
return 0;
}
@ -531,28 +452,17 @@ sw_accel_submit_tasks(struct spdk_io_channel *ch, struct spdk_accel_task *accel_
do {
switch (accel_task->op_code) {
case ACCEL_OPC_COPY:
rc = _check_flags(accel_task->flags);
if (rc == 0) {
_sw_accel_copy_iovs(accel_task->d.iovs, accel_task->d.iovcnt,
accel_task->s.iovs, accel_task->s.iovcnt,
accel_task->flags);
}
_sw_accel_copy_iovs(accel_task->d.iovs, accel_task->d.iovcnt,
accel_task->s.iovs, accel_task->s.iovcnt);
break;
case ACCEL_OPC_FILL:
rc = _check_flags(accel_task->flags);
if (rc == 0) {
rc = _sw_accel_fill(accel_task->d.iovs, accel_task->d.iovcnt,
accel_task->fill_pattern, accel_task->flags);
}
rc = _sw_accel_fill(accel_task->d.iovs, accel_task->d.iovcnt,
accel_task->fill_pattern);
break;
case ACCEL_OPC_DUALCAST:
rc = _check_flags(accel_task->flags);
if (rc == 0) {
rc = _sw_accel_dualcast_iovs(accel_task->d.iovs, accel_task->d.iovcnt,
accel_task->d2.iovs, accel_task->d2.iovcnt,
accel_task->s.iovs, accel_task->s.iovcnt,
accel_task->flags);
}
rc = _sw_accel_dualcast_iovs(accel_task->d.iovs, accel_task->d.iovcnt,
accel_task->d2.iovs, accel_task->d2.iovcnt,
accel_task->s.iovs, accel_task->s.iovcnt);
break;
case ACCEL_OPC_COMPARE:
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);
break;
case ACCEL_OPC_COPY_CRC32C:
rc = _check_flags(accel_task->flags);
if (rc == 0) {
_sw_accel_copy_iovs(accel_task->d.iovs, accel_task->d.iovcnt,
accel_task->s.iovs, accel_task->s.iovcnt,
accel_task->flags);
_sw_accel_crc32cv(accel_task->crc_dst, accel_task->s.iovs,
accel_task->s.iovcnt, accel_task->seed);
}
_sw_accel_copy_iovs(accel_task->d.iovs, accel_task->d.iovcnt,
accel_task->s.iovs, accel_task->s.iovcnt);
_sw_accel_crc32cv(accel_task->crc_dst, accel_task->s.iovs,
accel_task->s.iovcnt, accel_task->seed);
break;
case ACCEL_OPC_COMPRESS:
rc = _sw_accel_compress(sw_ch, accel_task);

View File

@ -13,12 +13,6 @@
#include "accel/accel_sw.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(spdk_memory_domain_get_dma_device_id, const char *,
(struct spdk_memory_domain *domain), "UT_DMA");