Add entry abstraction
Signed-off-by: Adam Rutkowski <adam.j.rutkowski@intel.com>
This commit is contained in:

committed by
Kozlowski Mateusz

parent
9746df0b1a
commit
fae620a070
@@ -640,7 +640,7 @@ static inline void ocf_alock_waitlist_remove_entry(struct ocf_alock *alock,
|
||||
struct ocf_alock_lock_cbs *cbs,
|
||||
struct ocf_request *req, int i, int rw)
|
||||
{
|
||||
ocf_cache_line_t entry = req->map[i].coll_idx;
|
||||
ocf_cache_line_t entry = cbs->line_get_entry(req, i);
|
||||
uint32_t idx = _WAITERS_LIST_ITEM(entry);
|
||||
struct ocf_alock_waiters_list *lst = &alock->waiters_lsts[idx];
|
||||
struct list_head *iter, *next;
|
||||
@@ -690,7 +690,7 @@ static int ocf_alock_lock_rd_fast(struct ocf_alock *alock,
|
||||
continue;
|
||||
}
|
||||
|
||||
entry = req->map[i].coll_idx;
|
||||
entry = cbs->line_get_entry(req, i);
|
||||
ENV_BUG_ON(entry >= alock->num_entries);
|
||||
ENV_BUG_ON(cbs->line_is_locked(req, i, OCF_READ));
|
||||
ENV_BUG_ON(cbs->line_is_locked(req, i, OCF_WRITE));
|
||||
@@ -715,7 +715,7 @@ static int ocf_alock_lock_rd_fast(struct ocf_alock *alock,
|
||||
continue;
|
||||
}
|
||||
|
||||
entry = req->map[i].coll_idx;
|
||||
entry = cbs->line_get_entry(req, i);
|
||||
|
||||
if (cbs->line_is_locked(req, i, OCF_READ)) {
|
||||
ocf_alock_unlock_one_rd(alock, cbs, entry);
|
||||
@@ -752,7 +752,7 @@ static int ocf_alock_lock_rd_slow(struct ocf_alock *alock,
|
||||
continue;
|
||||
}
|
||||
|
||||
entry = req->map[i].coll_idx;
|
||||
entry = cbs->line_get_entry(req, i);
|
||||
ENV_BUG_ON(entry >= alock->num_entries);
|
||||
ENV_BUG_ON(cbs->line_is_locked(req, i, OCF_READ));
|
||||
ENV_BUG_ON(cbs->line_is_locked(req, i, OCF_WRITE));
|
||||
@@ -821,7 +821,7 @@ static int ocf_alock_lock_wr_fast(struct ocf_alock *alock,
|
||||
continue;
|
||||
}
|
||||
|
||||
entry = req->map[i].coll_idx;
|
||||
entry = cbs->line_get_entry(req, i);
|
||||
ENV_BUG_ON(entry >= alock->num_entries);
|
||||
ENV_BUG_ON(cbs->line_is_locked(req, i, OCF_READ));
|
||||
ENV_BUG_ON(cbs->line_is_locked(req, i, OCF_WRITE));
|
||||
@@ -844,7 +844,7 @@ static int ocf_alock_lock_wr_fast(struct ocf_alock *alock,
|
||||
if (!cbs->line_needs_lock(req, i))
|
||||
continue;
|
||||
|
||||
entry = req->map[i].coll_idx;
|
||||
entry = cbs->line_get_entry(req, i);
|
||||
|
||||
if (cbs->line_is_locked(req, i, OCF_WRITE)) {
|
||||
ocf_alock_unlock_one_wr(alock, cbs, entry);
|
||||
@@ -883,7 +883,7 @@ static int ocf_alock_lock_wr_slow(struct ocf_alock *alock,
|
||||
continue;
|
||||
}
|
||||
|
||||
entry = req->map[i].coll_idx;
|
||||
entry = cbs->line_get_entry(req, i);
|
||||
ENV_BUG_ON(entry >= alock->num_entries);
|
||||
ENV_BUG_ON(cbs->line_is_locked(req, i, OCF_READ));
|
||||
ENV_BUG_ON(cbs->line_is_locked(req, i, OCF_WRITE));
|
||||
@@ -950,7 +950,7 @@ void ocf_alock_unlock_rd(struct ocf_alock *alock,
|
||||
if (!cbs->line_is_locked(req, i, OCF_READ))
|
||||
continue;
|
||||
|
||||
entry = req->map[i].coll_idx;
|
||||
entry = cbs->line_get_entry(req, i);
|
||||
|
||||
ENV_BUG_ON(entry >= alock->num_entries);
|
||||
|
||||
@@ -977,7 +977,7 @@ void ocf_alock_unlock_wr(struct ocf_alock *alock,
|
||||
if (!cbs->line_is_locked(req, i, OCF_WRITE))
|
||||
continue;
|
||||
|
||||
entry = req->map[i].coll_idx;
|
||||
entry = cbs->line_get_entry(req, i);
|
||||
|
||||
ENV_BUG_ON(entry >= alock->num_entries);
|
||||
|
||||
@@ -999,7 +999,7 @@ void ocf_alock_unlock(struct ocf_alock *alock,
|
||||
if (!cbs->line_is_acting(req, i))
|
||||
continue;
|
||||
|
||||
entry = req->map[i].coll_idx;
|
||||
entry = cbs->line_get_entry(req, i);
|
||||
ENV_BUG_ON(entry >= alock->num_entries);
|
||||
|
||||
if (cbs->line_is_locked(req, i, OCF_READ) &&
|
||||
@@ -1019,16 +1019,18 @@ void ocf_alock_unlock_one(struct ocf_alock *alock,
|
||||
struct ocf_alock_lock_cbs *cbs,
|
||||
struct ocf_request *req, uint32_t idx)
|
||||
{
|
||||
ocf_cache_line_t entry = cbs->line_get_entry(req, idx);
|
||||
|
||||
ENV_BUG_ON(!cbs->line_is_acting(req, idx));
|
||||
|
||||
if (cbs->line_is_locked(req, idx, OCF_READ) &&
|
||||
cbs->line_is_locked(req, idx, OCF_WRITE)) {
|
||||
ENV_BUG();
|
||||
} else if (cbs->line_is_locked(req, idx, OCF_READ)) {
|
||||
ocf_alock_unlock_one_rd(alock, cbs, req->map[idx].coll_idx);
|
||||
ocf_alock_unlock_one_rd(alock, cbs, entry);
|
||||
cbs->line_mark_locked(req, idx, OCF_READ, false);
|
||||
} else if (cbs->line_is_locked(req, idx, OCF_WRITE)) {
|
||||
ocf_alock_unlock_one_wr(alock, cbs, req->map[idx].coll_idx);
|
||||
ocf_alock_unlock_one_wr(alock, cbs, entry);
|
||||
cbs->line_mark_locked(req, idx, OCF_WRITE, false);
|
||||
} else {
|
||||
ENV_BUG();
|
||||
|
@@ -32,6 +32,8 @@ typedef bool (*ocf_cl_lock_line_is_locked_cb)(struct ocf_request *req,
|
||||
typedef void (*ocf_cl_lock_line_mark_locked_cb)(struct ocf_request *req,
|
||||
unsigned index, int rw, bool locked);
|
||||
|
||||
typedef ocf_cache_line_t (*ocf_cl_lock_line_get_entry_cb)(
|
||||
struct ocf_request *req, unsigned index);
|
||||
|
||||
struct ocf_alock_lock_cbs
|
||||
{
|
||||
@@ -39,6 +41,7 @@ struct ocf_alock_lock_cbs
|
||||
ocf_cl_lock_line_is_acting_cb line_is_acting;
|
||||
ocf_cl_lock_line_is_locked_cb line_is_locked;
|
||||
ocf_cl_lock_line_mark_locked_cb line_mark_locked;
|
||||
ocf_cl_lock_line_get_entry_cb line_get_entry;
|
||||
};
|
||||
|
||||
bool ocf_alock_trylock_one_rd(struct ocf_alock *alock,
|
||||
|
Reference in New Issue
Block a user