Simplify metadata_raw interface

Signed-off-by: Robert Baldyga <robert.baldyga@intel.com>
This commit is contained in:
Robert Baldyga 2019-08-03 20:02:03 +02:00
parent a31ddd44cb
commit 4b1a3fa4b5
6 changed files with 89 additions and 168 deletions

View File

@ -65,7 +65,7 @@ static bool _ocf_metadata_test_##what##_##type(struct ocf_cache *cache, \
\ \
const struct ocf_metadata_map_##type *map = raw->mem_pool; \ const struct ocf_metadata_map_##type *map = raw->mem_pool; \
\ \
_raw_bug_on(raw, line, sizeof(*map)); \ _raw_bug_on(raw, line); \
\ \
if (all) { \ if (all) { \
if (mask == (map[line].what & mask)) { \ if (mask == (map[line].what & mask)) { \
@ -95,7 +95,7 @@ static bool _ocf_metadata_test_out_##what##_##type(struct ocf_cache *cache, \
\ \
const struct ocf_metadata_map_##type *map = raw->mem_pool; \ const struct ocf_metadata_map_##type *map = raw->mem_pool; \
\ \
_raw_bug_on(raw, line, sizeof(*map)); \ _raw_bug_on(raw, line); \
\ \
if (map[line].what & ~mask) { \ if (map[line].what & ~mask) { \
return true; \ return true; \
@ -117,7 +117,7 @@ static bool _ocf_metadata_clear_##what##_##type(struct ocf_cache *cache, \
\ \
struct ocf_metadata_map_##type *map = raw->mem_pool; \ struct ocf_metadata_map_##type *map = raw->mem_pool; \
\ \
_raw_bug_on(raw, line, sizeof(*map)); \ _raw_bug_on(raw, line); \
\ \
map[line].what &= ~mask; \ map[line].what &= ~mask; \
\ \
@ -142,7 +142,7 @@ static bool _ocf_metadata_set_##what##_##type(struct ocf_cache *cache, \
\ \
struct ocf_metadata_map_##type *map = raw->mem_pool; \ struct ocf_metadata_map_##type *map = raw->mem_pool; \
\ \
_raw_bug_on(raw, line, sizeof(*map)); \ _raw_bug_on(raw, line); \
\ \
result = map[line].what ? true : false; \ result = map[line].what ? true : false; \
\ \
@ -166,7 +166,7 @@ static bool _ocf_metadata_test_and_set_##what##_##type( \
\ \
struct ocf_metadata_map_##type *map = raw->mem_pool; \ struct ocf_metadata_map_##type *map = raw->mem_pool; \
\ \
_raw_bug_on(raw, line, sizeof(*map)); \ _raw_bug_on(raw, line); \
\ \
if (all) { \ if (all) { \
if (mask == (map[line].what & mask)) { \ if (mask == (map[line].what & mask)) { \
@ -201,7 +201,7 @@ static bool _ocf_metadata_test_and_clear_##what##_##type( \
\ \
struct ocf_metadata_map_##type *map = raw->mem_pool; \ struct ocf_metadata_map_##type *map = raw->mem_pool; \
\ \
_raw_bug_on(raw, line, sizeof(*map)); \ _raw_bug_on(raw, line); \
\ \
if (all) { \ if (all) { \
if (mask == (map[line].what & mask)) { \ if (mask == (map[line].what & mask)) { \

View File

@ -2198,8 +2198,7 @@ static void ocf_metadata_hash_get_core_info(struct ocf_cache *cache,
(struct ocf_metadata_hash_ctrl *) cache->metadata.iface_priv; (struct ocf_metadata_hash_ctrl *) cache->metadata.iface_priv;
collision = ocf_metadata_raw_rd_access(cache, collision = ocf_metadata_raw_rd_access(cache,
&(ctrl->raw_desc[metadata_segment_collision]), line, &(ctrl->raw_desc[metadata_segment_collision]), line);
ctrl->mapping_size);
if (collision) { if (collision) {
if (core_id) if (core_id)
*core_id = collision->core_id; *core_id = collision->core_id;
@ -2224,8 +2223,7 @@ static void ocf_metadata_hash_set_core_info(struct ocf_cache *cache,
(struct ocf_metadata_hash_ctrl *) cache->metadata.iface_priv; (struct ocf_metadata_hash_ctrl *) cache->metadata.iface_priv;
collisioin = ocf_metadata_raw_wr_access(cache, collisioin = ocf_metadata_raw_wr_access(cache,
&(ctrl->raw_desc[metadata_segment_collision]), line, &(ctrl->raw_desc[metadata_segment_collision]), line);
ctrl->mapping_size);
if (collisioin) { if (collisioin) {
collisioin->core_id = core_id; collisioin->core_id = core_id;
@ -2243,8 +2241,7 @@ static ocf_core_id_t ocf_metadata_hash_get_core_id(
(struct ocf_metadata_hash_ctrl *) cache->metadata.iface_priv; (struct ocf_metadata_hash_ctrl *) cache->metadata.iface_priv;
collision = ocf_metadata_raw_rd_access(cache, collision = ocf_metadata_raw_rd_access(cache,
&(ctrl->raw_desc[metadata_segment_collision]), line, &(ctrl->raw_desc[metadata_segment_collision]), line);
ctrl->mapping_size);
if (collision) if (collision)
return collision->core_id; return collision->core_id;
@ -2261,8 +2258,7 @@ static struct ocf_metadata_uuid *ocf_metadata_hash_get_core_uuid(
(struct ocf_metadata_hash_ctrl *) cache->metadata.iface_priv; (struct ocf_metadata_hash_ctrl *) cache->metadata.iface_priv;
muuid = ocf_metadata_raw_wr_access(cache, muuid = ocf_metadata_raw_wr_access(cache,
&(ctrl->raw_desc[metadata_segment_core_uuid]), &(ctrl->raw_desc[metadata_segment_core_uuid]), core_id);
core_id, sizeof(struct ocf_metadata_uuid));
if (!muuid) if (!muuid)
ocf_metadata_error(cache); ocf_metadata_error(cache);
@ -2284,12 +2280,10 @@ static void ocf_metadata_hash_get_core_and_part_id(
(struct ocf_metadata_hash_ctrl *) cache->metadata.iface_priv; (struct ocf_metadata_hash_ctrl *) cache->metadata.iface_priv;
collision = ocf_metadata_raw_rd_access(cache, collision = ocf_metadata_raw_rd_access(cache,
&(ctrl->raw_desc[metadata_segment_collision]), line, &(ctrl->raw_desc[metadata_segment_collision]), line);
ctrl->mapping_size);
info = ocf_metadata_raw_rd_access(cache, info = ocf_metadata_raw_rd_access(cache,
&(ctrl->raw_desc[metadata_segment_list_info]), line, &(ctrl->raw_desc[metadata_segment_list_info]), line);
sizeof(*info));
if (collision && info) { if (collision && info) {
if (core_id) if (core_id)
@ -2320,8 +2314,7 @@ static ocf_cache_line_t ocf_metadata_hash_get_hash(
= (struct ocf_metadata_hash_ctrl *) cache->metadata.iface_priv; = (struct ocf_metadata_hash_ctrl *) cache->metadata.iface_priv;
result = ocf_metadata_raw_get(cache, result = ocf_metadata_raw_get(cache,
&(ctrl->raw_desc[metadata_segment_hash]), index, &(ctrl->raw_desc[metadata_segment_hash]), index, &line);
&line, sizeof(line));
if (result) if (result)
ocf_metadata_error(cache); ocf_metadata_error(cache);
@ -2340,8 +2333,7 @@ static void ocf_metadata_hash_set_hash(struct ocf_cache *cache,
= (struct ocf_metadata_hash_ctrl *) cache->metadata.iface_priv; = (struct ocf_metadata_hash_ctrl *) cache->metadata.iface_priv;
result = ocf_metadata_raw_set(cache, result = ocf_metadata_raw_set(cache,
&(ctrl->raw_desc[metadata_segment_hash]), index, &(ctrl->raw_desc[metadata_segment_hash]), index, &line);
&line, sizeof(line));
if (result) if (result)
ocf_metadata_error(cache); ocf_metadata_error(cache);
@ -2364,7 +2356,7 @@ static void ocf_metadata_hash_get_cleaning_policy(
result = ocf_metadata_raw_get(cache, result = ocf_metadata_raw_get(cache,
&(ctrl->raw_desc[metadata_segment_cleaning]), line, &(ctrl->raw_desc[metadata_segment_cleaning]), line,
cleaning_policy, sizeof(*cleaning_policy)); cleaning_policy);
if (result) if (result)
ocf_metadata_error(cache); ocf_metadata_error(cache);
@ -2383,7 +2375,7 @@ static void ocf_metadata_hash_set_cleaning_policy(
result = ocf_metadata_raw_set(cache, result = ocf_metadata_raw_set(cache,
&(ctrl->raw_desc[metadata_segment_cleaning]), line, &(ctrl->raw_desc[metadata_segment_cleaning]), line,
cleaning_policy, sizeof(*cleaning_policy)); cleaning_policy);
if (result) if (result)
ocf_metadata_error(cache); ocf_metadata_error(cache);
@ -2406,7 +2398,7 @@ static void ocf_metadata_hash_get_eviction_policy(
result = ocf_metadata_raw_get(cache, result = ocf_metadata_raw_get(cache,
&(ctrl->raw_desc[metadata_segment_eviction]), line, &(ctrl->raw_desc[metadata_segment_eviction]), line,
eviction_policy, sizeof(*eviction_policy)); eviction_policy);
if (result) if (result)
ocf_metadata_error(cache); ocf_metadata_error(cache);
@ -2425,7 +2417,7 @@ static void ocf_metadata_hash_set_eviction_policy(
result = ocf_metadata_raw_set(cache, result = ocf_metadata_raw_set(cache,
&(ctrl->raw_desc[metadata_segment_eviction]), line, &(ctrl->raw_desc[metadata_segment_eviction]), line,
eviction_policy, sizeof(*eviction_policy)); eviction_policy);
if (result) if (result)
ocf_metadata_error(cache); ocf_metadata_error(cache);
@ -2514,8 +2506,7 @@ static void ocf_metadata_hash_set_collision_info(
(struct ocf_metadata_hash_ctrl *) cache->metadata.iface_priv; (struct ocf_metadata_hash_ctrl *) cache->metadata.iface_priv;
info = ocf_metadata_raw_wr_access(cache, info = ocf_metadata_raw_wr_access(cache,
&(ctrl->raw_desc[metadata_segment_list_info]), line, &(ctrl->raw_desc[metadata_segment_list_info]), line);
sizeof(*info));
if (info) { if (info) {
info->next_col = next; info->next_col = next;
@ -2534,8 +2525,7 @@ static void ocf_metadata_hash_set_collision_next(
(struct ocf_metadata_hash_ctrl *) cache->metadata.iface_priv; (struct ocf_metadata_hash_ctrl *) cache->metadata.iface_priv;
info = ocf_metadata_raw_wr_access(cache, info = ocf_metadata_raw_wr_access(cache,
&(ctrl->raw_desc[metadata_segment_list_info]), line, &(ctrl->raw_desc[metadata_segment_list_info]), line);
sizeof(*info));
if (info) if (info)
info->next_col = next; info->next_col = next;
@ -2552,8 +2542,7 @@ static void ocf_metadata_hash_set_collision_prev(
(struct ocf_metadata_hash_ctrl *) cache->metadata.iface_priv; (struct ocf_metadata_hash_ctrl *) cache->metadata.iface_priv;
info = ocf_metadata_raw_wr_access(cache, info = ocf_metadata_raw_wr_access(cache,
&(ctrl->raw_desc[metadata_segment_list_info]), line, &(ctrl->raw_desc[metadata_segment_list_info]), line);
sizeof(*info));
if (info) if (info)
info->prev_col = prev; info->prev_col = prev;
@ -2572,8 +2561,7 @@ static void ocf_metadata_hash_get_collision_info(
ENV_BUG_ON(NULL == next && NULL == prev); ENV_BUG_ON(NULL == next && NULL == prev);
info = ocf_metadata_raw_rd_access(cache, info = ocf_metadata_raw_rd_access(cache,
&(ctrl->raw_desc[metadata_segment_list_info]), line, &(ctrl->raw_desc[metadata_segment_list_info]), line);
sizeof(*info));
if (info) { if (info) {
if (next) if (next)
*next = info->next_col; *next = info->next_col;
@ -2603,8 +2591,7 @@ static void ocf_metadata_hash_get_partition_info(
(struct ocf_metadata_hash_ctrl *) cache->metadata.iface_priv; (struct ocf_metadata_hash_ctrl *) cache->metadata.iface_priv;
info = ocf_metadata_raw_rd_access(cache, info = ocf_metadata_raw_rd_access(cache,
&(ctrl->raw_desc[metadata_segment_list_info]), line, &(ctrl->raw_desc[metadata_segment_list_info]), line);
sizeof(*info));
if (info) { if (info) {
if (part_id) if (part_id)
@ -2633,8 +2620,7 @@ static void ocf_metadata_hash_set_partition_next(
(struct ocf_metadata_hash_ctrl *) cache->metadata.iface_priv; (struct ocf_metadata_hash_ctrl *) cache->metadata.iface_priv;
info = ocf_metadata_raw_wr_access(cache, info = ocf_metadata_raw_wr_access(cache,
&(ctrl->raw_desc[metadata_segment_list_info]), line, &(ctrl->raw_desc[metadata_segment_list_info]), line);
sizeof(*info));
if (info) if (info)
info->partition_next = next_line; info->partition_next = next_line;
@ -2651,8 +2637,7 @@ static void ocf_metadata_hash_set_partition_prev(
(struct ocf_metadata_hash_ctrl *) cache->metadata.iface_priv; (struct ocf_metadata_hash_ctrl *) cache->metadata.iface_priv;
info = ocf_metadata_raw_wr_access(cache, info = ocf_metadata_raw_wr_access(cache,
&(ctrl->raw_desc[metadata_segment_list_info]), line, &(ctrl->raw_desc[metadata_segment_list_info]), line);
sizeof(*info));
if (info) if (info)
info->partition_prev = prev_line; info->partition_prev = prev_line;
@ -2670,8 +2655,7 @@ static void ocf_metadata_hash_set_partition_info(
(struct ocf_metadata_hash_ctrl *) cache->metadata.iface_priv; (struct ocf_metadata_hash_ctrl *) cache->metadata.iface_priv;
info = ocf_metadata_raw_wr_access(cache, info = ocf_metadata_raw_wr_access(cache,
&(ctrl->raw_desc[metadata_segment_list_info]), line, &(ctrl->raw_desc[metadata_segment_list_info]), line);
sizeof(*info));
if (info) { if (info) {
info->partition_id = part_id; info->partition_id = part_id;

View File

@ -152,49 +152,34 @@ static uint32_t _raw_ram_checksum(ocf_cache_t cache,
/* /*
* RAM Implementation - Get entry * RAM Implementation - Get entry
*/ */
static int _raw_ram_get(ocf_cache_t cache, static int _raw_ram_get(ocf_cache_t cache, struct ocf_metadata_raw *raw,
struct ocf_metadata_raw *raw, ocf_cache_line_t line, uint32_t entry, void *data)
void *data, uint32_t size)
{ {
ENV_BUG_ON(!_raw_is_valid(raw, line, size)); ENV_BUG_ON(!_raw_is_valid(raw, entry));
return _RAW_RAM_GET(raw, line, data); return _RAW_RAM_GET(raw, entry, data);
} }
/* /*
* RAM Implementation - Read only entry access * RAM Implementation - Read only entry access
*/ */
static const void *_raw_ram_rd_access(ocf_cache_t cache, static void *_raw_ram_access(ocf_cache_t cache,
struct ocf_metadata_raw *raw, ocf_cache_line_t line, struct ocf_metadata_raw *raw, uint32_t entry)
uint32_t size)
{ {
ENV_BUG_ON(!_raw_is_valid(raw, line, size)); ENV_BUG_ON(!_raw_is_valid(raw, entry));
return _RAW_RAM_ADDR(raw, line); return _RAW_RAM_ADDR(raw, entry);
}
/*
* RAM Implementation - Read only entry access
*/
static void *_raw_ram_wr_access(ocf_cache_t cache,
struct ocf_metadata_raw *raw, ocf_cache_line_t line,
uint32_t size)
{
ENV_BUG_ON(!_raw_is_valid(raw, line, size));
return _RAW_RAM_ADDR(raw, line);
} }
/* /*
* RAM Implementation - Set Entry * RAM Implementation - Set Entry
*/ */
static int _raw_ram_set(ocf_cache_t cache, static int _raw_ram_set(ocf_cache_t cache, struct ocf_metadata_raw *raw,
struct ocf_metadata_raw *raw, ocf_cache_line_t line, uint32_t entry, void *data)
void *data, uint32_t size)
{ {
ENV_BUG_ON(!_raw_is_valid(raw, line, size)); ENV_BUG_ON(!_raw_is_valid(raw, entry));
return _RAW_RAM_SET(raw, line, data); return _RAW_RAM_SET(raw, entry, data);
} }
struct _raw_ram_load_all_context { struct _raw_ram_load_all_context {
@ -558,8 +543,7 @@ static const struct raw_iface IRAW[metadata_raw_type_max] = {
.checksum = _raw_ram_checksum, .checksum = _raw_ram_checksum,
.get = _raw_ram_get, .get = _raw_ram_get,
.set = _raw_ram_set, .set = _raw_ram_set,
.rd_access = _raw_ram_rd_access, .access = _raw_ram_access,
.wr_access = _raw_ram_wr_access,
.load_all = _raw_ram_load_all, .load_all = _raw_ram_load_all,
.flush_all = _raw_ram_flush_all, .flush_all = _raw_ram_flush_all,
.flush_mark = _raw_ram_flush_mark, .flush_mark = _raw_ram_flush_mark,
@ -573,8 +557,7 @@ static const struct raw_iface IRAW[metadata_raw_type_max] = {
.checksum = raw_dynamic_checksum, .checksum = raw_dynamic_checksum,
.get = raw_dynamic_get, .get = raw_dynamic_get,
.set = raw_dynamic_set, .set = raw_dynamic_set,
.rd_access = raw_dynamic_rd_access, .access = raw_dynamic_access,
.wr_access = raw_dynamic_wr_access,
.load_all = raw_dynamic_load_all, .load_all = raw_dynamic_load_all,
.flush_all = raw_dynamic_flush_all, .flush_all = raw_dynamic_flush_all,
.flush_mark = raw_dynamic_flush_mark, .flush_mark = raw_dynamic_flush_mark,
@ -588,8 +571,7 @@ static const struct raw_iface IRAW[metadata_raw_type_max] = {
.checksum = raw_volatile_checksum, .checksum = raw_volatile_checksum,
.get = _raw_ram_get, .get = _raw_ram_get,
.set = _raw_ram_set, .set = _raw_ram_set,
.rd_access = _raw_ram_rd_access, .access = _raw_ram_access,
.wr_access = _raw_ram_wr_access,
.load_all = raw_volatile_load_all, .load_all = raw_volatile_load_all,
.flush_all = raw_volatile_flush_all, .flush_all = raw_volatile_flush_all,
.flush_mark = raw_volatile_flush_mark, .flush_mark = raw_volatile_flush_mark,
@ -603,8 +585,7 @@ static const struct raw_iface IRAW[metadata_raw_type_max] = {
.checksum = _raw_ram_checksum, .checksum = _raw_ram_checksum,
.get = _raw_ram_get, .get = _raw_ram_get,
.set = _raw_ram_set, .set = _raw_ram_set,
.rd_access = _raw_ram_rd_access, .access = _raw_ram_access,
.wr_access = _raw_ram_wr_access,
.load_all = _raw_ram_load_all, .load_all = _raw_ram_load_all,
.flush_all = _raw_ram_flush_all, .flush_all = _raw_ram_flush_all,
.flush_mark = raw_atomic_flush_mark, .flush_mark = raw_atomic_flush_mark,

View File

@ -103,21 +103,14 @@ struct raw_iface {
struct ocf_metadata_raw *raw); struct ocf_metadata_raw *raw);
int (*get)(ocf_cache_t cache, int (*get)(ocf_cache_t cache, struct ocf_metadata_raw *raw,
struct ocf_metadata_raw *raw, ocf_cache_line_t line, uint32_t entry, void *data);
void *data, uint32_t size);
int (*set)(ocf_cache_t cache, int (*set)(ocf_cache_t cache, struct ocf_metadata_raw *raw,
struct ocf_metadata_raw *raw, ocf_cache_line_t line, uint32_t entry, void *data);
void *data, uint32_t size);
const void* (*rd_access)(ocf_cache_t cache, void* (*access)(ocf_cache_t cache, struct ocf_metadata_raw *raw,
struct ocf_metadata_raw *raw, ocf_cache_line_t line, uint32_t entry);
uint32_t size);
void* (*wr_access)(ocf_cache_t cache,
struct ocf_metadata_raw *raw,
ocf_cache_line_t line, uint32_t size);
void (*load_all)(ocf_cache_t cache, struct ocf_metadata_raw *raw, void (*load_all)(ocf_cache_t cache, struct ocf_metadata_raw *raw,
ocf_metadata_end_t cmpl, void *priv); ocf_metadata_end_t cmpl, void *priv);
@ -130,8 +123,7 @@ struct raw_iface {
uint8_t stop); uint8_t stop);
int (*flush_do_asynch)(ocf_cache_t cache, struct ocf_request *req, int (*flush_do_asynch)(ocf_cache_t cache, struct ocf_request *req,
struct ocf_metadata_raw *raw, struct ocf_metadata_raw *raw, ocf_req_end_t complete);
ocf_req_end_t complete);
}; };
/** /**
@ -196,16 +188,14 @@ static inline uint32_t ocf_metadata_raw_checksum(struct ocf_cache* cache,
* *
* @param cache - Cache instance * @param cache - Cache instance
* @param raw - RAW descriptor * @param raw - RAW descriptor
* @param line - Cache line to be get * @param entry - Entry to be get
* @param data - Data where metadata entry will be copied into * @param data - Data where metadata entry will be copied into
* @param size - Size of data
* @return 0 - Operation success, otherwise error * @return 0 - Operation success, otherwise error
*/ */
static inline int ocf_metadata_raw_get(ocf_cache_t cache, static inline int ocf_metadata_raw_get(ocf_cache_t cache,
struct ocf_metadata_raw *raw, ocf_cache_line_t line, void *data, struct ocf_metadata_raw *raw, uint32_t entry, void *data)
uint32_t size)
{ {
return raw->iface->get(cache, raw, line, data, size); return raw->iface->get(cache, raw, entry, data);
} }
/** /**
@ -213,16 +203,14 @@ static inline int ocf_metadata_raw_get(ocf_cache_t cache,
* *
* @param cache - Cache instance * @param cache - Cache instance
* @param raw - RAW descriptor * @param raw - RAW descriptor
* @param line - Cache line to be get * @param entry - Entry to be get
* @param data - Data where metadata entry will be copied into * @param data - Data where metadata entry will be copied into
* @param size - Size of data
* @return 0 - Point to accessed data, in case of error NULL * @return 0 - Point to accessed data, in case of error NULL
*/ */
static inline void *ocf_metadata_raw_wr_access(ocf_cache_t cache, static inline void *ocf_metadata_raw_wr_access(ocf_cache_t cache,
struct ocf_metadata_raw *raw, ocf_cache_line_t line, struct ocf_metadata_raw *raw, uint32_t entry)
uint32_t size)
{ {
return raw->iface->wr_access(cache, raw, line, size); return raw->iface->access(cache, raw, entry);
} }
/** /**
@ -230,16 +218,14 @@ static inline void *ocf_metadata_raw_wr_access(ocf_cache_t cache,
* *
* @param cache - Cache instance * @param cache - Cache instance
* @param raw - RAW descriptor * @param raw - RAW descriptor
* @param line - Cache line to be get * @param entry - Entry to be get
* @param data - Data where metadata entry will be copied into * @param data - Data where metadata entry will be copied into
* @param size - Size of data
* @return 0 - Point to accessed data, in case of error NULL * @return 0 - Point to accessed data, in case of error NULL
*/ */
static inline const void *ocf_metadata_raw_rd_access( static inline const void *ocf_metadata_raw_rd_access( ocf_cache_t cache,
ocf_cache_t cache, struct ocf_metadata_raw *raw, struct ocf_metadata_raw *raw, uint32_t entry)
ocf_cache_line_t line, uint32_t size)
{ {
return raw->iface->rd_access(cache, raw, line, size); return raw->iface->access(cache, raw, entry);
} }
/** /**
@ -247,16 +233,14 @@ static inline const void *ocf_metadata_raw_rd_access(
* *
* @param cache - Cache instance * @param cache - Cache instance
* @param raw - RAW descriptor * @param raw - RAW descriptor
* @param line - Cache line to be set * @param entry - Entry to be set
* @param data - Data taht will be copied into metadata entry * @param data - Data taht will be copied into metadata entry
* @param size - Size of data
* @return 0 - Operation success, otherwise error * @return 0 - Operation success, otherwise error
*/ */
static inline int ocf_metadata_raw_set(ocf_cache_t cache, static inline int ocf_metadata_raw_set(ocf_cache_t cache,
struct ocf_metadata_raw *raw, ocf_cache_line_t line, void *data, struct ocf_metadata_raw *raw, uint32_t entry, void *data)
uint32_t size)
{ {
return raw->iface->set(cache, raw, line, data, size); return raw->iface->set(cache, raw, entry, data);
} }
/** /**
@ -307,25 +291,20 @@ static inline int ocf_metadata_raw_flush_do_asynch(ocf_cache_t cache,
/* /*
* Check if line is valid for specified RAW descriptor * Check if line is valid for specified RAW descriptor
*/ */
static inline bool _raw_is_valid(struct ocf_metadata_raw *raw, static inline bool _raw_is_valid(struct ocf_metadata_raw *raw, uint32_t entry)
ocf_cache_line_t line, uint32_t size)
{ {
if (!raw) if (!raw)
return false; return false;
if (size != raw->entry_size) if (entry >= raw->entries)
return false;
if (line >= raw->entries)
return false; return false;
return true; return true;
} }
static inline void _raw_bug_on(struct ocf_metadata_raw *raw, static inline void _raw_bug_on(struct ocf_metadata_raw *raw, uint32_t entry)
ocf_cache_line_t line, uint32_t size)
{ {
ENV_BUG_ON(!_raw_is_valid(raw, line, size)); ENV_BUG_ON(!_raw_is_valid(raw, entry));
} }
#define MAX_STACK_TAB_SIZE 32 #define MAX_STACK_TAB_SIZE 32

View File

@ -64,15 +64,15 @@ struct _raw_ctrl {
}; };
static void *_raw_dynamic_get_item(ocf_cache_t cache, static void *_raw_dynamic_get_item(ocf_cache_t cache,
struct ocf_metadata_raw *raw, ocf_cache_line_t line, uint32_t size) struct ocf_metadata_raw *raw, uint32_t entry)
{ {
void *new = NULL; void *new = NULL;
struct _raw_ctrl *ctrl = (struct _raw_ctrl *)raw->priv; struct _raw_ctrl *ctrl = (struct _raw_ctrl *)raw->priv;
uint32_t page = _RAW_DYNAMIC_PAGE(raw, line); uint32_t page = _RAW_DYNAMIC_PAGE(raw, entry);
ENV_BUG_ON(!_raw_is_valid(raw, line, size)); ENV_BUG_ON(!_raw_is_valid(raw, entry));
OCF_DEBUG_PARAM(cache, "Accessing item %u on page %u", line, page); OCF_DEBUG_PARAM(cache, "Accessing item %u on page %u", entry, page);
if (!ctrl->pages[page]) { if (!ctrl->pages[page]) {
/* No page, allocate one, and set*/ /* No page, allocate one, and set*/
@ -107,7 +107,7 @@ _raw_dynamic_get_item_SKIP:
} }
if (ctrl->pages[page]) if (ctrl->pages[page])
return ctrl->pages[page] + _RAW_DYNAMIC_PAGE_OFFSET(raw, line); return ctrl->pages[page] + _RAW_DYNAMIC_PAGE_OFFSET(raw, entry);
return NULL; return NULL;
} }
@ -220,56 +220,43 @@ uint32_t raw_dynamic_checksum(ocf_cache_t cache,
/* /*
* RAM DYNAMIC Implementation - Get * RAM DYNAMIC Implementation - Get
*/ */
int raw_dynamic_get(ocf_cache_t cache, int raw_dynamic_get(ocf_cache_t cache, struct ocf_metadata_raw *raw,
struct ocf_metadata_raw *raw, ocf_cache_line_t line, uint32_t entry, void *data)
void *data, uint32_t size)
{ {
void *item = _raw_dynamic_get_item(cache, raw, line, size); void *item = _raw_dynamic_get_item(cache, raw, entry);
if (!item) { if (!item) {
ENV_BUG_ON(env_memset(data, size, 0)); ENV_BUG_ON(env_memset(data, raw->entry_size, 0));
ocf_metadata_error(cache); ocf_metadata_error(cache);
return -1; return -1;
} }
return env_memcpy(data, size, item, size); return env_memcpy(data, raw->entry_size, item, raw->entry_size);
} }
/* /*
* RAM DYNAMIC Implementation - Set * RAM DYNAMIC Implementation - Set
*/ */
int raw_dynamic_set(ocf_cache_t cache, int raw_dynamic_set(ocf_cache_t cache, struct ocf_metadata_raw *raw,
struct ocf_metadata_raw *raw, ocf_cache_line_t line, uint32_t entry, void *data)
void *data, uint32_t size)
{ {
void *item = _raw_dynamic_get_item(cache, raw, line, size); void *item = _raw_dynamic_get_item(cache, raw, entry);
if (!item) { if (!item) {
ocf_metadata_error(cache); ocf_metadata_error(cache);
return -1; return -1;
} }
return env_memcpy(item, size, data, size); return env_memcpy(item, raw->entry_size, data, raw->entry_size);
} }
/* /*
* RAM DYNAMIC Implementation - access * RAM DYNAMIC Implementation - access
*/ */
const void *raw_dynamic_rd_access(ocf_cache_t cache, void *raw_dynamic_access(ocf_cache_t cache,
struct ocf_metadata_raw *raw, ocf_cache_line_t line, struct ocf_metadata_raw *raw, uint32_t entry)
uint32_t size)
{ {
return _raw_dynamic_get_item(cache, raw, line, size); return _raw_dynamic_get_item(cache, raw, entry);
}
/*
* RAM DYNAMIC Implementation - access
*/
void *raw_dynamic_wr_access(ocf_cache_t cache,
struct ocf_metadata_raw *raw, ocf_cache_line_t line,
uint32_t size)
{
return _raw_dynamic_get_item(cache, raw, line, size);
} }
/* /*

View File

@ -43,30 +43,20 @@ uint32_t raw_dynamic_checksum(ocf_cache_t cache,
/* /*
* RAW DYNAMIC - Get specified entry * RAW DYNAMIC - Get specified entry
*/ */
int raw_dynamic_get(ocf_cache_t cache, int raw_dynamic_get(ocf_cache_t cache, struct ocf_metadata_raw *raw,
struct ocf_metadata_raw *raw, ocf_cache_line_t line, uint32_t entry, void *data);
void *data, uint32_t size);
/* /*
* RAW DYNAMIC - Set specified entry * RAW DYNAMIC - Set specified entry
*/ */
int raw_dynamic_set(ocf_cache_t cache, int raw_dynamic_set(ocf_cache_t cache, struct ocf_metadata_raw *raw,
struct ocf_metadata_raw *raw, ocf_cache_line_t line, uint32_t entry, void *data);
void *data, uint32_t size);
/*
* RAW DYNAMIC - Read only access for specified entry
*/
const void *raw_dynamic_rd_access(ocf_cache_t cache,
struct ocf_metadata_raw *raw, ocf_cache_line_t line,
uint32_t size);
/* /*
* RAW DYNAMIC - Write access for specified entry * RAW DYNAMIC - Write access for specified entry
*/ */
void *raw_dynamic_wr_access(ocf_cache_t cache, void *raw_dynamic_access(ocf_cache_t cache,
struct ocf_metadata_raw *raw, ocf_cache_line_t line, struct ocf_metadata_raw *raw, uint32_t entry);
uint32_t size);
/* /*
* RAW DYNAMIC - Load all metadata of this RAW metadata container * RAW DYNAMIC - Load all metadata of this RAW metadata container