Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Stable 1.12 #5508

Merged
merged 24 commits into from
Nov 29, 2022
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
24 commits
Select commit Hold shift + click to select a range
8fcd435
obj: always perform cleanup of logs with leftover state
pbalcer Jul 11, 2022
5d583fe
pmem2: actually skip msync with noflush on non-pmem
pbalcer Jul 18, 2022
6a02375
pmem2: make sure async functions use proper vdm flags
pbalcer Jul 13, 2022
93b4b89
Merge pull request #5465 from pbalcer/tx-ulog-failure-atomicity-bug
wlemkows Jul 20, 2022
99ef13f
Merge pull request #5468 from pbalcer/pmem2-fix-async-fn
lplewa Aug 2, 2022
e3ba304
common: fix default cflags in makefiles
pbalcer Aug 4, 2022
9cb127f
Merge pull request #5488 from pbalcer/1.12-perf-regression
wlemkows Aug 5, 2022
29c453f
pmem2: enable movdir64b compilation but disable it in the runtime
lplewa Jul 18, 2022
38ebb59
Merge pull request #5471 from lplewa/movdir
pbalcer Aug 8, 2022
b1d9a57
obj: ensure zones are reclaimed prior to free
pbalcer Jul 18, 2022
5cc7f35
Merge pull request #5489 from pbalcer/obj-reclaim-on-free-1-11
lplewa Aug 11, 2022
03d0729
Merge remote-tracking branch 'upstream/stable-1.11' into stable-1.12
lplewa Aug 11, 2022
e1677b6
Merge pull request #5491 from lplewa/stable-1.12
lplewa Aug 12, 2022
5894310
Merge commit '4c95db3223336cc85cb495c90e58d6be3826beed' into masync
lplewa Aug 16, 2022
4c95db3
Squashed 'src/deps/miniasync/' changes from 706d2635f..f3b809217
lplewa Aug 16, 2022
155c26e
Merge pull request #5492 from lplewa/masync
lplewa Aug 16, 2022
ab3fc0b
common: 1.12.1-rc1 release
lplewa Aug 16, 2022
9081161
common: git versions
lplewa Aug 16, 2022
b619064
Squashed 'src/deps/miniasync/' changes from f3b809217..a8d51f0a4
lplewa Aug 25, 2022
c39491d
Merge commit 'b619064e2bf899ca3c7704d4139784af3ce117cb' into stable-1.12
lplewa Aug 25, 2022
b1d7bb0
Merge pull request #5498 from lplewa/stable-1.12
lplewa Aug 25, 2022
786098a
common: 1.12.1 release
lplewa Aug 25, 2022
a6e1bc1
common: git versions
lplewa Aug 25, 2022
64d2aa4
Merge remote-tracking branch 'upstream/stable-1.12' into master
lplewa Nov 7, 2022
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
15 changes: 15 additions & 0 deletions ChangeLog
Original file line number Diff line number Diff line change
@@ -1,3 +1,18 @@
Tue Aug 25 2022 Łukasz Plewa <lukasz.plewa@intel.com>

* Version 1.12.1

This release allows usings the movdir64b instruction by setting an
environment variable, and fixes a number of smaller bugs.

Detailed list of bug fixes:
- obj: always perform cleanup of logs with leftover state
- pmem2: actually skip msync with noflush on non-pmem
- pmem2: make sure async functions use proper vdm flags
- common: fix default cflags in makefiles
- obj: ensure zones are reclaimed prior to free
- pmem2: enable movdir64b compilation but disable it in the runtime

Tue May 24 2022 Łukasz Plewa <lukasz.plewa@intel.com>

* Version 1.12.0
Expand Down
2 changes: 1 addition & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -182,7 +182,7 @@ To build from source, clone this tree:

For a stable version, checkout a [release tag](https://github.com/pmem/pmdk/releases) as follows. Otherwise skip this step to build the latest development release.
```
$ git checkout tags/1.12.0
$ git checkout tags/1.12.1
```

Once the build system is setup, the Persistent Memory Development Kit is built using the `make` command at the top level:
Expand Down
7 changes: 6 additions & 1 deletion src/Makefile.inc
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
# SPDX-License-Identifier: BSD-3-Clause
# Copyright 2014-2021, Intel Corporation
# Copyright 2014-2022, Intel Corporation
#
# src/Makefile.inc -- common Makefile rules for PMDK
#
Expand Down Expand Up @@ -67,6 +67,11 @@ ifeq ($(WSTRINGOP_TRUNCATION_AVAILABLE), y)
DEFAULT_CFLAGS += -DSTRINGOP_TRUNCATION_SUPPORTED
endif

# Librpmem is deprecated.
# This flag allows to build tests, examples and benchmarks
# using rpmem despite the deprecated state.
DEFAULT_CFLAGS += -Wno-deprecated-declarations

ifeq ($(DEBUG),1)
# Undefine _FORTIFY_SOURCE in case it's set in system-default or
# user-defined CFLAGS as it conflicts with -O0.
Expand Down
7 changes: 7 additions & 0 deletions src/PMDK.sln
Original file line number Diff line number Diff line change
Expand Up @@ -929,6 +929,8 @@ Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "obj_list_remove", "test\obj
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "obj_defrag", "test\obj_defrag\obj_defrag.vcxproj", "{FF6E5B0C-DC00-4C93-B9C2-63D1E858BA80}"
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "obj_heap_reopen", "test\obj_heap_reopen\obj_heap_reopen.vcxproj", "{FF6E5B0C-DC00-4C93-B9C2-63D1E858BA81}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|x64 = Debug|x64
Expand Down Expand Up @@ -2100,6 +2102,10 @@ Global
{FF6E5B0C-DC00-4C93-B9C2-63D1E858BA80}.Debug|x64.Build.0 = Debug|x64
{FF6E5B0C-DC00-4C93-B9C2-63D1E858BA80}.Release|x64.ActiveCfg = Release|x64
{FF6E5B0C-DC00-4C93-B9C2-63D1E858BA80}.Release|x64.Build.0 = Release|x64
{FF6E5B0C-DC00-4C93-B9C2-63D1E858BA81}.Debug|x64.ActiveCfg = Debug|x64
{FF6E5B0C-DC00-4C93-B9C2-63D1E858BA81}.Debug|x64.Build.0 = Debug|x64
{FF6E5B0C-DC00-4C93-B9C2-63D1E858BA81}.Release|x64.ActiveCfg = Release|x64
{FF6E5B0C-DC00-4C93-B9C2-63D1E858BA81}.Release|x64.Build.0 = Release|x64
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
Expand Down Expand Up @@ -2435,6 +2441,7 @@ Global
{FEA09B48-34C2-4963-8A5A-F97BDA136D72} = {B870D8A6-12CD-4DD0-B843-833695C2310A}
{FF6E5B0C-DC00-4C93-B9C2-63D1E858BA79} = {63C9B3F8-437D-4AD9-B32D-D04AE38C35B6}
{FF6E5B0C-DC00-4C93-B9C2-63D1E858BA80} = {63C9B3F8-437D-4AD9-B32D-D04AE38C35B6}
{FF6E5B0C-DC00-4C93-B9C2-63D1E858BA81} = {63C9B3F8-437D-4AD9-B32D-D04AE38C35B6}
EndGlobalSection
GlobalSection(ExtensibilityGlobals) = postSolution
SolutionGuid = {5E690324-2D48-486A-8D3C-DCB520D3F693}
Expand Down
4 changes: 0 additions & 4 deletions src/common/Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,3 @@ include ../Makefile.inc

CFLAGS += $(LIBNDCTL_CFLAGS) $(MINIASYNC_CFLAGS) -DPMEM2_USE_MINIASYNC=1
CFLAGS += -DUSE_LIBDL
# Librpmem is deprecated.
# This flag allows to build tests, examples and benchmarks
# using rpmem despite the deprecated state.
CFLAGS += -Wno-deprecated-declarations
5 changes: 0 additions & 5 deletions src/common/pmemcommon.inc
Original file line number Diff line number Diff line change
Expand Up @@ -56,8 +56,3 @@ SOURCE +=\
$(PMEM2)/region_namespace_none.c\
$(PMEM2)/numa_none.c
endif

# Librpmem is deprecated.
# This flag allows to build tests, examples and benchmarks
# using rpmem despite the deprecated state.
CFLAGS += -Wno-deprecated-declarations
5 changes: 0 additions & 5 deletions src/core/Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -10,8 +10,3 @@ LIBRARY_NAME = pmemcore
include pmemcore.inc

include ../Makefile.inc

# Librpmem is deprecated.
# This flag allows to build tests, examples and benchmarks
# using rpmem despite the deprecated state.
CFLAGS += -Wno-deprecated-declarations
22 changes: 20 additions & 2 deletions src/deps/miniasync/ChangeLog
Original file line number Diff line number Diff line change
@@ -1,13 +1,31 @@
Thu Aug 11 2022 Łukasz Plewa <Lukasz.Plewa@intel.com>

* Version 0.2.0-rc1

common: use correct atomics in ringbuf
common: fix use-after-free in membuf in mt scenarios
common: replace improper 'RPMA' in man pages with 'MINIASYNC'
doc: add async property to documentation
doc: update async property documentation
doc: update code styling to properly appear in manpage
masync: drop unused #ifdefs that block portability
masync: add hashmap example
masync: add flush operation for DML data mover
masync: add flag indicating that future is async
masync: add destination_readback flag to persistent memory writes
masync: add macro to check if chain entry was initialized


Fri May 20 2022 Weronika Lewandowska <weronika.lewandowska@intel.com>

* Version 0.1.0

This is the first official release of the miniasync library.

The library provides the API for asynchronous memory operations
through the use of features and runtime mechanisms and independence
in terms of hardware by implementing a virtual data mover.

This release also contains:
- documentation on the implemented functionality
- basic examples
Expand Down
5 changes: 3 additions & 2 deletions src/deps/miniasync/doc/data_mover_dml_get_vdm.3.md
Original file line number Diff line number Diff line change
Expand Up @@ -47,12 +47,13 @@ structure *struct vdm* is needed by every **miniasync**(7) data mover operation.
* **vdm_memcpy**(3) - memory copy operation
* **vdm_memmove**(3) - memory move operation
* **vdm_memset**(3) - memory set operation
* **vdm_flush**(3) - cache flush operation

# RETURN VALUE #

The **data_mover_dml_get_vdm**() function returns a pointer to *struct vdm* structure.

# SEE ALSO #

**vdm_memcpy**(3), **vdm_memmove**(3), **vdm_memset**(3),
**miniasync**(7), **miniasync_vdm_dml**(7) and **<https://pmem.io>**
**vdm_flush**(3), **vdm_memcpy**(3), **vdm_memmove**(3), **vdm_memset**(3),
**miniasync**(7), **miniasync_vdm_dml**(7) and **<https://pmem.io>**
2 changes: 1 addition & 1 deletion src/deps/miniasync/doc/data_mover_threads_new.3.md
Original file line number Diff line number Diff line change
Expand Up @@ -58,7 +58,7 @@ The **data_mover_threads_default**() function allocates and initialzied a new th
data mover structure with default parameters. It spanws *12* threads and creates a
ringbuffer with size of *128* bytes.

Currently, thread data mover supports following notifer types:
Currently, thread data mover supports following notifier types:

* **FUTURE_NOTIFIER_NONE**

Expand Down
1 change: 1 addition & 0 deletions src/deps/miniasync/doc/manuals.txt
Original file line number Diff line number Diff line change
Expand Up @@ -20,3 +20,4 @@ runtime_wait.3
vdm_memcpy.3
vdm_memmove.3
vdm_memset.3
vdm_flush.3
61 changes: 44 additions & 17 deletions src/deps/miniasync/doc/miniasync_future.7.md
Original file line number Diff line number Diff line change
Expand Up @@ -38,6 +38,9 @@ typedef void (*future_map_fn)(struct future_context *lhs,
typedef void (*future_init_fn)(void *future,
struct future_context *chain_fut, void *arg);

typedef int (*future_has_property_fn)(void *future,
enum future_property property);

enum future_state {
FUTURE_STATE_IDLE,
FUTURE_STATE_COMPLETE,
Expand Down Expand Up @@ -73,13 +76,18 @@ struct future_notifier {
uint32_t padding;
};

enum future_property {
FUTURE_PROPERTY_ASYNC,
};

FUTURE(_name, _data_type, _output_type)
FUTURE_INIT(_futurep, _taskfn)
FUTURE_INIT_COMPLETE(_futurep)
FUTURE_CHAIN_ENTRY(_future_type, _name)
FUTURE_CHAIN_ENTRY_LAST(_future_type, _name)
FUTURE_CHAIN_ENTRY_INIT(_entry, _fut, _map, _map_arg)
FUTURE_CHAIN_ENTRY_LAZY_INIT(_entry, _init, _init_arg, _map, _map_arg)
FUTURE_CHAIN_ENTRY_IS_INITIALIZED(_entry)
FUTURE_CHAIN_INIT(_futurep)
FUTURE_AS_RUNNABLE(_futurep)
FUTURE_OUTPUT(_futurep)
Expand All @@ -103,6 +111,7 @@ A future contains the following context:
* structure for data which is the required state needed to perform the task
* structure for output to store the result of the task
* the size of the data and output structures (both can be 0)
* a pointer for the property checking function which checks if the future has a custom property

A future definition must begin with an instance of the *struct future* type, which
contains all common metadata for all futures, followed by the structures for
Expand Down Expand Up @@ -132,14 +141,24 @@ A future implementation supporting **FUTURE_NOTIFIER_WAKER** type of notifier ca
use a **FUTURE_WAKER_WAKE(_wakerp)** macro to signal the caller that some progress
can be made and the future should be polled again.

TODO: Mention **FUTURE_NOTIFIER_POLLER** when it becomes supported.
<!-- TODO: Mention **FUTURE_NOTIFIER_POLLER** when it becomes supported. -->

Futures can contain custom properties. Information, whether the future contains
the property or not, is returned by the **future_has_property** function.
Concrete implementation of the **future_has_property_fn** function should return the
information, whether given future property applies to the future. Individual futures
can be initialized using `FUTURE_INIT_EXT(_futurep, _taskfn, _propertyfn)` macro to
set the property checking function. Futures initialized regularly have no properties applied.

Supported properties:
* **FUTURE_PROPERTY_ASYNC** property indicates that the future is asynchronous.

For more information about the usage of future API, see *examples* directory
in miniasync repository <https://github.com/pmem/miniasync>.

# MACROS #

**FUTURE(_name, _data_type, _output_type)** macro defines a future structure with *\_name*
`FUTURE(_name, _data_type, _output_type)` macro defines a future structure with *\_name*
as its name. Besides internal data needed by the future API, the defined structure contains
data member of *\_data_type* type and output member of *\_output_type* type. User can
provide the data that may later be retrieved in the future task implementation using
Expand All @@ -148,51 +167,59 @@ retrieved using **future_context_get_output**(3) function. Combined size of data
structures can be retrieved using **future_context_get_size**(3) function. When the user has
no need for input or output data, *\_data_type* and *\_output_type* can be defined as empty structures.

**FUTURE_INIT(_futurep, _taskfn)** macro assigns task function *\_taskfn* to the future pointed
`FUTURE_INIT(_futurep, _taskfn)` macro assigns task function *\_taskfn* to the future pointed
by *\_futurep*. Task function must be of the *future_task_fn* type.

**FUTURE_INIT_COMPLETE(_futurep)** macro instantiates a new already completed future with no assigned
`FUTURE_INIT_EXT(_futurep, _taskfn, _propertyfn)` macro assigns task function *\_taskfn* and property
checking function *\_propertyfn* to the future pointed by *\_futurep*. Task function must be of the
*future_task_fn* type and the property checking function must be of the type *future_has_property_fn*.

`FUTURE_INIT_COMPLETE(_futurep)` macro instantiates a new already completed future with no assigned
task. This is helpful for handling initialization errors during future creation or simply for convenience
in instantly ready futures.

**FUTURE_CHAIN_ENTRY(_future_type, _name)** macro defines the future chain entry of the *\_future_type*
`FUTURE_CHAIN_ENTRY(_future_type, _name)` macro defines the future chain entry of the *\_future_type*
type named *\_name*. Future chain entries are defined as the members of chained future data structure
using this macro. Chained future can be composed of multiple future chain entries that will be
executed sequentially in the order they were defined.

**FUTURE_CHAIN_ENTRY_LAST(_future_type, _name)** macro can be optionally used to indicate the last
`FUTURE_CHAIN_ENTRY_LAST(_future_type, _name)` macro can be optionally used to indicate the last
future in a chain. This lets software to include additional state inside of the *\_data_type* since
otherwise the chain task implementation would not be able to differentiate between an entry and
other data.

**FUTURE_CHAIN_ENTRY_INIT(_entry, _fut, _map, _map_arg)** macro initializes the future chain
`FUTURE_CHAIN_ENTRY_INIT(_entry, _fut, _map, _map_arg)` macro initializes the future chain
entry pointed by *\_entry*. It requires pointer to the future instance *\_fut*, address of the mapping
function *\_map* and the pointer to the argument for the mapping function *\_map_arg*. *\_fut* can either be
the instance of the future defined using **FUTURE(_name, _data_type, _output_type)** macro or a virtual
the instance of the future defined using `FUTURE(_name, _data_type, _output_type)` macro or a virtual
data mover future. *\_map* function must be of the *future_map_fn* type and is an optional parameter.
*map* function should define the mapping behavior of the data and output structures between chained
future entry *\_entry* that has finished and the chained future entry that is about to start its execution.
Chained future instance must initialize all of its future chain entries using this macro.

**FUTURE_CHAIN_ENTRY_LAZY_INIT(_entry, _init, _init_arg, _map, _map_arg)** macro intializes the
`FUTURE_CHAIN_ENTRY_LAZY_INIT(_entry, _init, _init_arg, _map, _map_arg)` macro initializes the
future chain entry pointed by *\_entry* but it does not initialize its underlying future. Instead
it uses function *\_init* and its argument *\init_arg* to instantiate the future right before
its needed. This lets software instantiate futures with arguments derived from the results of
previous entries in the chain. The *\map* and *\map_arg* variables behave the
it uses function *\_init* and its argument *\_init_arg* to instantiate the future right before
it's needed. This lets software instantiate futures with arguments derived from the results of
previous entries in the chain. The *\_map* and *\_map_arg* variables behave the
same as in **FUTURE_CHAIN_ENTRY_INIT**.

**FUTURE_CHAIN_INIT(_futurep)** macro initializes the chained future at the address *\_futurep*.
`FUTURE_CHAIN_ENTRY_IS_INITIALIZED(_entry)` macro checks if the future chain entry, pointed by *\_entry*,
is already initialized (either lazily or regularly). If it is initialized, its structure can be safely
accessed and used.

`FUTURE_CHAIN_INIT(_futurep)` macro initializes the chained future at the address *\_futurep*.

**FUTURE_AS_RUNNABLE(_futurep)** macro returns pointer to the runnable form of the future pointed by
`FUTURE_AS_RUNNABLE(_futurep)` macro returns pointer to the runnable form of the future pointed by
*\_futurep*. Runnable form of the future is required as an argument in **runtime_wait**(3) and
**runtime_wait_multiple**(3) functions.

**FUTURE_OUTPUT(_futurep)** macro returns the output of the future pointed by *\_futurep*.
`FUTURE_OUTPUT(_futurep)` macro returns the output of the future pointed by *\_futurep*.

**FUTURE_BUSY_POLL(_futurep)** repeatedly polls the future pointed by *\_futurep* until
`FUTURE_BUSY_POLL(_futurep)` repeatedly polls the future pointed by *\_futurep* until
it completes its execution. This macro does not use optimized polling.

**FUTURE_WAKER_WAKE(_wakerp)** macro performs implementation-defined wake operation. It takes
`FUTURE_WAKER_WAKE(_wakerp)` macro performs implementation-defined wake operation. It takes
a pointer to the waker structure of *struct future_waker* type.

# SEE ALSO #
Expand Down
10 changes: 8 additions & 2 deletions src/deps/miniasync/doc/miniasync_vdm.7.md
Original file line number Diff line number Diff line change
Expand Up @@ -42,12 +42,14 @@ struct vdm {
vdm_operation_delete op_delete;
vdm_operation_start op_start;
vdm_operation_check op_check;
unsigned capabilities;
};

enum vdm_operation_type {
VDM_OPERATION_MEMCPY,
VDM_OPERATION_MEMMOVE,
VDM_OPERATION_MEMSET,
VDM_OPERATION_FLUSH,
};

enum vdm_operation_result {
Expand All @@ -57,8 +59,9 @@ enum vdm_operation_result {
};

struct vdm_operation_data {
void *op;
void *data;
struct vdm *vdm;
struct vdm_operation operation;
};

struct vdm_operation_output {
Expand All @@ -67,6 +70,8 @@ struct vdm_operation_output {
union {
struct vdm_operation_output_memcpy memcpy;
struct vdm_operation_output_memmove memmove;
struct vdm_operation_output_memset memset;
struct vdm_operation_output_flush flush;
} output;
};
```
Expand Down Expand Up @@ -95,6 +100,7 @@ Currently, virtual data mover API supports following operation types:
* **VDM_OPERATION_MEMCPY** - a memory copy operation
* **VDM_OPERATION_MEMMOVE** - a memory move operation
* **VDM_OPERATION_MEMSET** - a memory set operation
* **VDM_OPERATION_FLUSH** - a cache flush operation

For more information about concrete data mover implementations, see **miniasync_vdm_threads**(7),
**miniasync_vdm_synchronous**(7) and **miniasync_vdm_dml**(7).
Expand Down Expand Up @@ -122,7 +128,7 @@ The *result* field can be set to one of the following values:

# SEE ALSO #

**vdm_memcpy**(3), **vdm_memmove**(3), **vdm_memset**(3),
**vdm_flush**(3), **vdm_memcpy**(3), **vdm_memmove**(3), **vdm_memset**(3),
**miniasync**(7), **miniasync_future**(7),
**miniasync_vdm_dml**(7), **miniasync_vdm_synchronous**(7),
**miniasync_vdm_threads**(7) and **<https://pmem.io>**
7 changes: 4 additions & 3 deletions src/deps/miniasync/doc/miniasync_vdm_dml.7.md
Original file line number Diff line number Diff line change
Expand Up @@ -49,19 +49,20 @@ An example of **DML** data mover API usage with flags can be found in **EXAMPLE*

When the future is polled for the first time the data mover operation will be executed
asynchronously under the control of **DML** library. **DML** data mover does not
block the calling thread
block the calling thread.

To create a new **DML** data mover instance, use **data_mover_dml_new**(3) function.

**DML** data mover provides the following flags:

* **MINIASYNC_DML_F_MEM_DURABLE** - write to destination is identified as write to durable memory
* **VDM_F_MEM_DURABLE** - write to destination is identified as write to durable memory

**DML** data mover supports following operations:

* **vdm_memcpy**(3) - memory copy operation
* **vdm_memmove**(3) - memory move operation
* **vdm_memset**(3) - memory set operation
* **vdm_flush**(3) - cache flush operation

**DML** data mover does not support notifier feature. For more information about
notifiers, see **miniasync_future**(7).
Expand All @@ -80,6 +81,6 @@ struct vdm_memcpy_future memcpy_fut = vdm_memcpy(dml_mover, dest, src,
# SEE ALSO #

**data_mover_dml_new**(3), **data_mover_dml_get_vdm**(3),
**vdm_memcpy**(3), **vdm_memmove**(3), **vdm_memset**(3),
**vdm_flush**(3), **vdm_memcpy**(3), **vdm_memmove**(3), **vdm_memset**(3),
**miniasync**(7), **miniasync_future**(7), **miniasync_vdm**(7),
**<https://github.com/intel/DML>** and **<https://pmem.io>**
2 changes: 1 addition & 1 deletion src/deps/miniasync/doc/miniasync_vdm_threads.7.md
Original file line number Diff line number Diff line change
Expand Up @@ -55,7 +55,7 @@ Thread data mover supports following operations:
* **vdm_memmove**(3) - memory move operation
* **vdm_memset**(3) - memory set operation

Thread data mover supports following notifer types:
Thread data mover supports following notifier types:

* **FUTURE_NOTIFIER_NONE** - no notifier
* **FUTURE_NOTIFIER_WAKER** - waker
Expand Down
Loading