Add functions to lock specific hash bucket
Signed-off-by: Adam Rutkowski <adam.j.rutkowski@intel.com>
This commit is contained in:
parent
fd88c2c3a4
commit
93bda499c7
@ -221,6 +221,34 @@ int ocf_metadata_hash_try_lock(struct ocf_metadata_lock *metadata_lock,
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void ocf_metadata_lock_hash_rd(struct ocf_metadata_lock *metadata_lock,
|
||||||
|
ocf_cache_line_t hash)
|
||||||
|
{
|
||||||
|
ocf_metadata_start_shared_access(metadata_lock);
|
||||||
|
ocf_metadata_hash_lock(metadata_lock, hash, OCF_METADATA_RD);
|
||||||
|
}
|
||||||
|
|
||||||
|
void ocf_metadata_unlock_hash_rd(struct ocf_metadata_lock *metadata_lock,
|
||||||
|
ocf_cache_line_t hash)
|
||||||
|
{
|
||||||
|
ocf_metadata_hash_unlock(metadata_lock, hash, OCF_METADATA_RD);
|
||||||
|
ocf_metadata_end_shared_access(metadata_lock);
|
||||||
|
}
|
||||||
|
|
||||||
|
void ocf_metadata_lock_hash_wr(struct ocf_metadata_lock *metadata_lock,
|
||||||
|
ocf_cache_line_t hash)
|
||||||
|
{
|
||||||
|
ocf_metadata_start_shared_access(metadata_lock);
|
||||||
|
ocf_metadata_hash_lock(metadata_lock, hash, OCF_METADATA_WR);
|
||||||
|
}
|
||||||
|
|
||||||
|
void ocf_metadata_unlock_hash_wr(struct ocf_metadata_lock *metadata_lock,
|
||||||
|
ocf_cache_line_t hash)
|
||||||
|
{
|
||||||
|
ocf_metadata_hash_unlock(metadata_lock, hash, OCF_METADATA_WR);
|
||||||
|
ocf_metadata_end_shared_access(metadata_lock);
|
||||||
|
}
|
||||||
|
|
||||||
/* NOTE: attempt to acquire hash lock for multiple core lines may end up
|
/* NOTE: attempt to acquire hash lock for multiple core lines may end up
|
||||||
* in deadlock. In order to hash lock multiple core lines safely, use
|
* in deadlock. In order to hash lock multiple core lines safely, use
|
||||||
* ocf_req_hash_lock_* functions */
|
* ocf_req_hash_lock_* functions */
|
||||||
|
@ -136,6 +136,17 @@ static inline void ocf_metadata_status_bits_unlock(
|
|||||||
ocf_metadata_status_bits_unlock(&cache->metadata.lock, \
|
ocf_metadata_status_bits_unlock(&cache->metadata.lock, \
|
||||||
OCF_METADATA_WR)
|
OCF_METADATA_WR)
|
||||||
|
|
||||||
|
/* lock/unlock single hash */
|
||||||
|
void ocf_metadata_lock_hash_rd(struct ocf_metadata_lock *metadata_lock,
|
||||||
|
ocf_cache_line_t hash);
|
||||||
|
void ocf_metadata_unlock_hash_rd(struct ocf_metadata_lock *metadata_lock,
|
||||||
|
ocf_cache_line_t hash);
|
||||||
|
void ocf_metadata_lock_hash_wr(struct ocf_metadata_lock *metadata_lock,
|
||||||
|
ocf_cache_line_t hash);
|
||||||
|
void ocf_metadata_unlock_hash_wr(struct ocf_metadata_lock *metadata_lock,
|
||||||
|
ocf_cache_line_t hash);
|
||||||
|
|
||||||
|
/* lock/unlock single hash provided core id and core line */
|
||||||
void ocf_metadata_hash_lock_rd(struct ocf_metadata_lock *metadata_lock,
|
void ocf_metadata_hash_lock_rd(struct ocf_metadata_lock *metadata_lock,
|
||||||
uint32_t core_id, uint64_t core_line);
|
uint32_t core_id, uint64_t core_line);
|
||||||
void ocf_metadata_hash_unlock_rd(struct ocf_metadata_lock *metadata_lock,
|
void ocf_metadata_hash_unlock_rd(struct ocf_metadata_lock *metadata_lock,
|
||||||
|
Loading…
Reference in New Issue
Block a user