};
#ifdef CONFIG_PREEMPT_RT
-static DEFINE_RAW_SPINLOCK(addr_map_lock);
+static DEFINE_RAW_RWLOCK(addr_map_lock);
#else
-static DEFINE_SPINLOCK(addr_map_lock);
+static DEFINE_RWLOCK(addr_map_lock);
#endif
static struct addr_map* blackmap;
#endif
/* Search for the given range in the black-listed map. */
- spin_lock(&addr_map_lock);
+ read_lock(&addr_map_lock);
result = lookup_addr_aux(addr, size, blackmap);
- spin_unlock(&addr_map_lock);
+ read_unlock(&addr_map_lock);
if (result)
return 1;
else
while (1)
{
size_t old_size = 0;
- spin_lock(&addr_map_lock);
+ write_lock(&addr_map_lock);
old_map = blackmap;
if (old_map)
old_size = old_map->size;
added an entry while we were sleeping. */
if (!new_map || (new_map && new_map->size < old_size + 1))
{
- spin_unlock(&addr_map_lock);
+ write_unlock(&addr_map_lock);
if (new_map)
{
_stp_kfree(new_map);
*existing_min = min_entry;
if (existing_max)
*existing_max = max_entry;
- spin_unlock(&addr_map_lock);
+ write_unlock(&addr_map_lock);
_stp_kfree(new_map);
return 1;
}
(old_map->size - existing) * sizeof(*new_entry));
}
blackmap = new_map;
- spin_unlock(&addr_map_lock);
+ write_unlock(&addr_map_lock);
if (old_map)
_stp_kfree(old_map);
return 0;