1 /* SPDX-License-Identifier: BSD-3-Clause */
2 /* Copyright 2014-2020, Intel Corporation */
5 * pmem2_arch.h -- core-arch interface
13 #include "valgrind_internal.h"
19 struct pmem2_arch_info
;
21 typedef void (*fence_func
)(void);
22 typedef void (*flush_func
)(const void *, size_t);
23 typedef void *(*memmove_nodrain_func
)(void *pmemdest
, const void *src
,
24 size_t len
, unsigned flags
, flush_func flush
);
25 typedef void *(*memset_nodrain_func
)(void *pmemdest
, int c
, size_t len
,
26 unsigned flags
, flush_func flush
);
28 struct pmem2_arch_info
{
29 memmove_nodrain_func memmove_nodrain
;
30 memmove_nodrain_func memmove_nodrain_eadr
;
31 memset_nodrain_func memset_nodrain
;
32 memset_nodrain_func memset_nodrain_eadr
;
35 int flush_has_builtin_fence
;
38 void pmem2_arch_init(struct pmem2_arch_info
*info
);
41 * flush_empty_nolog -- (internal) do not flush the CPU cache
43 static force_inline
void
44 flush_empty_nolog(const void *addr
, size_t len
)
46 /* NOP, but tell pmemcheck about it */
47 VALGRIND_DO_FLUSH(addr
, len
);
50 void *memmove_nodrain_generic(void *pmemdest
, const void *src
, size_t len
,
51 unsigned flags
, flush_func flush
);
52 void *memset_nodrain_generic(void *pmemdest
, int c
, size_t len
, unsigned flags
,