env: introduce spdk_memzone_reserve_aligned
This is an spdk_memzone_reserve variant with additional alignment parameter. Now that memzones must be used for physically contiguous memory, it will become extremely useful. Change-Id: Ie48d682217e0e2f5c859a1603bb8a81fd2a7d7df Signed-off-by: Dariusz Stojaczyk <dariuszx.stojaczyk@intel.com> Reviewed-on: https://review.gerrithub.io/416978 Tested-by: SPDK Automated Test System <sys_sgsw@intel.com> Reviewed-by: Shuhei Matsumoto <shuhei.matsumoto.xt@hitachi.com> Reviewed-by: Daniel Verkamp <daniel.verkamp@intel.com> Reviewed-by: Ben Walker <benjamin.walker@intel.com>
This commit is contained in:
parent
2044690e6a
commit
8681eecd9a
@ -255,6 +255,22 @@ void spdk_dma_free(void *buf);
|
|||||||
*/
|
*/
|
||||||
void *spdk_memzone_reserve(const char *name, size_t len, int socket_id, unsigned flags);
|
void *spdk_memzone_reserve(const char *name, size_t len, int socket_id, unsigned flags);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Reserve a named, process shared memory zone with the given size, socket_id,
|
||||||
|
* flags and alignment.
|
||||||
|
*
|
||||||
|
* \param name Name to set for this memory zone.
|
||||||
|
* \param len Length in bytes.
|
||||||
|
* \param socket_id Socket ID to allocate memory on, or SPDK_ENV_SOCKET_ID_ANY
|
||||||
|
* for any socket.
|
||||||
|
* \param flags Flags to set for this memory zone.
|
||||||
|
* \param align Alignment for resulting memzone. Must be a power of 2.
|
||||||
|
*
|
||||||
|
* \return a pointer to the allocated memory address on success, or NULL on failure.
|
||||||
|
*/
|
||||||
|
void *spdk_memzone_reserve_aligned(const char *name, size_t len, int socket_id,
|
||||||
|
unsigned flags, unsigned align);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Lookup the memory zone identified by the given name.
|
* Lookup the memory zone identified by the given name.
|
||||||
*
|
*
|
||||||
|
@ -133,7 +133,8 @@ spdk_dma_free(void *buf)
|
|||||||
}
|
}
|
||||||
|
|
||||||
void *
|
void *
|
||||||
spdk_memzone_reserve(const char *name, size_t len, int socket_id, unsigned flags)
|
spdk_memzone_reserve_aligned(const char *name, size_t len, int socket_id,
|
||||||
|
unsigned flags, unsigned align)
|
||||||
{
|
{
|
||||||
const struct rte_memzone *mz;
|
const struct rte_memzone *mz;
|
||||||
unsigned dpdk_flags = 0;
|
unsigned dpdk_flags = 0;
|
||||||
@ -151,7 +152,7 @@ spdk_memzone_reserve(const char *name, size_t len, int socket_id, unsigned flags
|
|||||||
socket_id = SOCKET_ID_ANY;
|
socket_id = SOCKET_ID_ANY;
|
||||||
}
|
}
|
||||||
|
|
||||||
mz = rte_memzone_reserve(name, len, socket_id, dpdk_flags);
|
mz = rte_memzone_reserve_aligned(name, len, socket_id, dpdk_flags, align);
|
||||||
|
|
||||||
if (mz != NULL) {
|
if (mz != NULL) {
|
||||||
memset(mz->addr, 0, len);
|
memset(mz->addr, 0, len);
|
||||||
@ -161,6 +162,13 @@ spdk_memzone_reserve(const char *name, size_t len, int socket_id, unsigned flags
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void *
|
||||||
|
spdk_memzone_reserve(const char *name, size_t len, int socket_id, unsigned flags)
|
||||||
|
{
|
||||||
|
return spdk_memzone_reserve_aligned(name, len, socket_id, flags,
|
||||||
|
RTE_CACHE_LINE_SIZE);
|
||||||
|
}
|
||||||
|
|
||||||
void *
|
void *
|
||||||
spdk_memzone_lookup(const char *name)
|
spdk_memzone_lookup(const char *name)
|
||||||
{
|
{
|
||||||
|
@ -75,6 +75,20 @@ spdk_memzone_reserve(const char *name, size_t len, int socket_id, unsigned flags
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* setup the mock control to pass thru by default */
|
||||||
|
void *ut_p_spdk_memzone_reserve_aligned = MOCK_PASS_THRU_P;
|
||||||
|
void *
|
||||||
|
spdk_memzone_reserve_aligned(const char *name, size_t len, int socket_id,
|
||||||
|
unsigned flags, unsigned align)
|
||||||
|
{
|
||||||
|
if (ut_p_spdk_memzone_reserve_aligned &&
|
||||||
|
ut_p_spdk_memzone_reserve_aligned == MOCK_PASS_THRU_P) {
|
||||||
|
return malloc(len);
|
||||||
|
} else {
|
||||||
|
return ut_p_spdk_memzone_reserve_aligned;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
void *
|
void *
|
||||||
spdk_dma_malloc(size_t size, size_t align, uint64_t *phys_addr)
|
spdk_dma_malloc(size_t size, size_t align, uint64_t *phys_addr)
|
||||||
{
|
{
|
||||||
|
Loading…
Reference in New Issue
Block a user