Helper functions to get request start/end sector in cacheline

Signed-off-by: Adam Rutkowski <adam.j.rutkowski@intel.com>
This commit is contained in:
Adam Rutkowski 2019-06-07 14:55:51 -04:00
parent 7b7d65e092
commit ae6164a49c
2 changed files with 31 additions and 64 deletions

View File

@ -95,15 +95,8 @@ void ocf_engine_update_req_info(struct ocf_cache *cache,
uint8_t end_sector = ocf_line_end_sector(cache); uint8_t end_sector = ocf_line_end_sector(cache);
struct ocf_map_info *_entry = &(req->map[entry]); struct ocf_map_info *_entry = &(req->map[entry]);
if (entry == 0) { start_sector = ocf_map_line_start_sector(req, entry);
start_sector = BYTES_TO_SECTORS(req->byte_position) end_sector = ocf_map_line_end_sector(req, entry);
% ocf_line_sectors(cache);
}
if (entry == req->core_line_count - 1) {
end_sector = BYTES_TO_SECTORS(req->byte_position +
req->byte_length - 1)% ocf_line_sectors(cache);
}
/* Handle return value */ /* Handle return value */
switch (_entry->status) { switch (_entry->status) {

View File

@ -229,6 +229,29 @@ static inline void ocf_purge_map_info(struct ocf_request *req)
} }
} }
static inline
uint8_t ocf_map_line_start_sector(struct ocf_request *req, uint32_t line)
{
if (line == 0) {
return BYTES_TO_SECTORS(req->byte_position)
% ocf_line_sectors(req->cache);
}
return 0;
}
static inline
uint8_t ocf_map_line_end_sector(struct ocf_request *req, uint32_t line)
{
if (line == req->core_line_count - 1) {
return BYTES_TO_SECTORS(req->byte_position +
req->byte_length - 1) %
ocf_line_sectors(req->cache);
}
return ocf_line_end_sector(req->cache);
}
static inline void ocf_set_valid_map_info(struct ocf_request *req) static inline void ocf_set_valid_map_info(struct ocf_request *req)
{ {
uint32_t map_idx = 0; uint32_t map_idx = 0;
@ -244,27 +267,11 @@ static inline void ocf_set_valid_map_info(struct ocf_request *req)
* | -----+++ | ++++++++ | +++ | ++++++++ | +++++--- | * | -----+++ | ++++++++ | +++ | ++++++++ | +++++--- |
* | first | Middle | last | * | first | Middle | last |
*/ */
for (map_idx = 0; map_idx < count; map_idx++) { for (map_idx = 0; map_idx < count; map_idx++) {
ENV_BUG_ON(map[map_idx].status == LOOKUP_MISS); ENV_BUG_ON(map[map_idx].status == LOOKUP_MISS);
start_bit = 0; start_bit = ocf_map_line_start_sector(req, map_idx);
end_bit = ocf_line_end_sector(cache); end_bit = ocf_map_line_end_sector(req, map_idx);
if (map_idx == 0) {
/* First */
start_bit = BYTES_TO_SECTORS(req->byte_position)
% ocf_line_sectors(cache);
}
if (map_idx == (count - 1)) {
/* Last */
end_bit = BYTES_TO_SECTORS(req->byte_position +
req->byte_length - 1)
% ocf_line_sectors(cache);
}
set_cache_line_valid(cache, start_bit, end_bit, req, map_idx); set_cache_line_valid(cache, start_bit, end_bit, req, map_idx);
} }
@ -286,24 +293,8 @@ static inline void ocf_set_dirty_map_info(struct ocf_request *req)
*/ */
for (map_idx = 0; map_idx < count; map_idx++) { for (map_idx = 0; map_idx < count; map_idx++) {
start_bit = 0; start_bit = ocf_map_line_start_sector(req, map_idx);
end_bit = ocf_line_end_sector(cache); end_bit = ocf_map_line_end_sector(req, map_idx);
if (map_idx == 0) {
/* First */
start_bit = BYTES_TO_SECTORS(req->byte_position)
% ocf_line_sectors(cache);
}
if (map_idx == (count - 1)) {
/* Last */
end_bit = BYTES_TO_SECTORS(req->byte_position +
req->byte_length - 1) %
ocf_line_sectors(cache);
}
set_cache_line_dirty(cache, start_bit, end_bit, req, map_idx); set_cache_line_dirty(cache, start_bit, end_bit, req, map_idx);
} }
} }
@ -324,25 +315,8 @@ static inline void ocf_set_clean_map_info(struct ocf_request *req)
*/ */
for (map_idx = 0; map_idx < count; map_idx++) { for (map_idx = 0; map_idx < count; map_idx++) {
start_bit = 0; start_bit = ocf_map_line_start_sector(req, map_idx);
end_bit = ocf_line_end_sector(cache); end_bit = ocf_map_line_end_sector(req, map_idx);
if (map_idx == 0) {
/* First */
start_bit = BYTES_TO_SECTORS(req->byte_position)
% ocf_line_sectors(cache);
}
if (map_idx == (count - 1)) {
/* Last */
end_bit = BYTES_TO_SECTORS(req->byte_position +
req->byte_length - 1) %
ocf_line_sectors(cache);
}
set_cache_line_clean(cache, start_bit, end_bit, req, map_idx); set_cache_line_clean(cache, start_bit, end_bit, req, map_idx);
} }
} }