Merge pull request #770 from robertbaldyga/fix-priv-alignment

Fix alignment of private data in parallelize & pipeline
This commit is contained in:
Robert Baldyga 2023-04-17 20:37:56 +02:00 committed by GitHub
commit f3878a86e1
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 16 additions and 6 deletions

View File

@ -1,5 +1,6 @@
/*
* Copyright(c) 2012-2022 Intel Corporation
* Copyright(c) 2023 Huawei Technologies
* SPDX-License-Identifier: BSD-3-Clause
*/
@ -9,6 +10,8 @@
#include "../ocf_request.h"
#include "utils_parallelize.h"
#define OCF_PARALLELIZE_ALIGNMENT 64
struct ocf_parallelize {
ocf_cache_t cache;
ocf_parallelize_handle_t handle;
@ -65,12 +68,15 @@ int ocf_parallelize_create(ocf_parallelize_t *parallelize,
prl_size = sizeof(*tmp_parallelize) +
shards_cnt * sizeof(*tmp_parallelize->reqs);
tmp_parallelize = env_vzalloc(prl_size + priv_size);
tmp_parallelize = env_vzalloc(prl_size + priv_size + OCF_PARALLELIZE_ALIGNMENT);
if (!tmp_parallelize)
return -OCF_ERR_NO_MEM;
if (priv_size > 0)
tmp_parallelize->priv = (void *)tmp_parallelize + prl_size;
if (priv_size > 0) {
uintptr_t priv = (uintptr_t)tmp_parallelize + prl_size;
priv = OCF_DIV_ROUND_UP(priv, OCF_PARALLELIZE_ALIGNMENT) * OCF_PARALLELIZE_ALIGNMENT;
tmp_parallelize->priv = (void*)priv;
}
tmp_parallelize->cache = cache;
tmp_parallelize->handle = handle;

View File

@ -1,5 +1,6 @@
/*
* Copyright(c) 2019-2022 Intel Corporation
* Copyright(c) 2023 Huawei Technologies
* SPDX-License-Identifier: BSD-3-Clause
*/
@ -9,6 +10,8 @@
#include "../ocf_request.h"
#include "utils_pipeline.h"
#define OCF_PIPELINE_ALIGNMENT 64
struct ocf_pipeline {
struct ocf_pipeline_properties *properties;
struct ocf_request *req;
@ -74,13 +77,14 @@ int ocf_pipeline_create(ocf_pipeline_t *pipeline, ocf_cache_t cache,
struct ocf_request *req;
tmp_pipeline = env_vzalloc(sizeof(*tmp_pipeline) +
properties->priv_size);
properties->priv_size + OCF_PIPELINE_ALIGNMENT);
if (!tmp_pipeline)
return -OCF_ERR_NO_MEM;
if (properties->priv_size > 0) {
tmp_pipeline->priv = (void *)tmp_pipeline +
sizeof(*tmp_pipeline);
uintptr_t priv = (uintptr_t)tmp_pipeline + sizeof(*tmp_pipeline);
priv = OCF_DIV_ROUND_UP(priv, OCF_PIPELINE_ALIGNMENT) * OCF_PIPELINE_ALIGNMENT;
tmp_pipeline->priv = (void *)priv;
}
req = ocf_req_new(cache->mngt_queue, NULL, 0, 0, 0);