From ccd0abfea54cbc95bc1155ce1e39380b1a299ecd Mon Sep 17 00:00:00 2001 From: Michal Mielewczyk Date: Fri, 10 Sep 2021 11:08:04 +0200 Subject: [PATCH] Add cache line recovery utils to OCF internal API Signed-off-by: Michal Mielewczyk --- src/mngt/ocf_mngt_cache.c | 39 +----------------------------------- src/utils/utils_cache_line.c | 37 ++++++++++++++++++++++++++++++++++ src/utils/utils_cache_line.h | 4 ++++ 3 files changed, 42 insertions(+), 38 deletions(-) diff --git a/src/mngt/ocf_mngt_cache.c b/src/mngt/ocf_mngt_cache.c index da13f00..50ec9af 100644 --- a/src/mngt/ocf_mngt_cache.c +++ b/src/mngt/ocf_mngt_cache.c @@ -481,43 +481,6 @@ err: OCF_PL_FINISH_RET(pipeline, -OCF_ERR_START_CACHE_FAIL); } -static void _recovery_rebuild_cline_metadata(ocf_cache_t cache, - ocf_core_id_t core_id, uint64_t core_line, - ocf_cache_line_t cache_line) -{ - ocf_core_t core = ocf_cache_get_core(cache, core_id); - ocf_part_id_t part_id; - ocf_cache_line_t hash_index; - struct ocf_part_runtime *part; - - part_id = PARTITION_DEFAULT; - part = cache->user_parts[part_id].part.runtime; - - ocf_metadata_set_partition_id(cache, cache_line, part_id); - env_atomic_inc(&part->curr_size); - - hash_index = ocf_metadata_hash_func(cache, core_line, core_id); - ocf_metadata_add_to_collision(cache, core_id, core_line, hash_index, - cache_line); - - ocf_lru_init_cline(cache, cache_line); - - ocf_lru_add(cache, cache_line); - - env_atomic_inc(&core->runtime_meta->cached_clines); - env_atomic_inc(&core->runtime_meta-> - part_counters[part_id].cached_clines); - - if (metadata_test_dirty(cache, cache_line)) { - env_atomic_inc(&core->runtime_meta->dirty_clines); - env_atomic_inc(&core->runtime_meta-> - part_counters[part_id].dirty_clines); - if (!env_atomic64_read(&core->runtime_meta->dirty_since)) - env_atomic64_cmpxchg(&core->runtime_meta->dirty_since, 0, - env_ticks_to_secs(env_get_tick_count())); - } -} - static void _recovery_reset_cline_metadata(struct ocf_cache *cache, ocf_cache_line_t cline) { @@ -546,7 +509,7 @@ static void _ocf_mngt_recovery_rebuild_metadata(ocf_cache_t cache) (!dirty_only || metadata_test_dirty(cache, cline))) { /* Rebuild metadata for mapped cache line */ - _recovery_rebuild_cline_metadata(cache, core_id, + ocf_cline_rebuild_metadata(cache, core_id, core_line, cline); if (dirty_only) metadata_clear_valid_if_clean(cache, cline); diff --git a/src/utils/utils_cache_line.c b/src/utils/utils_cache_line.c index 8dfbae2..d7df67b 100644 --- a/src/utils/utils_cache_line.c +++ b/src/utils/utils_cache_line.c @@ -167,3 +167,40 @@ void set_cache_line_dirty(struct ocf_cache *cache, uint8_t start_bit, ocf_cleaning_set_hot_cache_line(cache, line); } + +void ocf_cline_rebuild_metadata(ocf_cache_t cache, + ocf_core_id_t core_id, uint64_t core_line, + ocf_cache_line_t cache_line) +{ + ocf_core_t core = ocf_cache_get_core(cache, core_id); + ocf_part_id_t part_id; + ocf_cache_line_t hash_index; + struct ocf_part_runtime *part; + + part_id = PARTITION_DEFAULT; + part = cache->user_parts[part_id].part.runtime; + + ocf_metadata_set_partition_id(cache, cache_line, part_id); + env_atomic_inc(&part->curr_size); + + hash_index = ocf_metadata_hash_func(cache, core_line, core_id); + ocf_metadata_add_to_collision(cache, core_id, core_line, hash_index, + cache_line); + + ocf_lru_init_cline(cache, cache_line); + + ocf_lru_add(cache, cache_line); + + env_atomic_inc(&core->runtime_meta->cached_clines); + env_atomic_inc(&core->runtime_meta-> + part_counters[part_id].cached_clines); + + if (metadata_test_dirty(cache, cache_line)) { + env_atomic_inc(&core->runtime_meta->dirty_clines); + env_atomic_inc(&core->runtime_meta-> + part_counters[part_id].dirty_clines); + if (!env_atomic64_read(&core->runtime_meta->dirty_since)) + env_atomic64_cmpxchg(&core->runtime_meta->dirty_since, 0, + env_ticks_to_secs(env_get_tick_count())); + } +} diff --git a/src/utils/utils_cache_line.h b/src/utils/utils_cache_line.h index ccfafac..10e5078 100644 --- a/src/utils/utils_cache_line.h +++ b/src/utils/utils_cache_line.h @@ -123,6 +123,10 @@ void set_cache_line_clean(struct ocf_cache *cache, uint8_t start_bit, void set_cache_line_dirty(struct ocf_cache *cache, uint8_t start_bit, uint8_t end_bit, struct ocf_request *req, uint32_t map_idx); +void ocf_cline_rebuild_metadata(ocf_cache_t cache, + ocf_core_id_t core_id, uint64_t core_line, + ocf_cache_line_t cache_line); + /** * @brief Remove cache line from cleaning policy *