|
@@ -30,7 +30,7 @@ static void dsos__init(struct dsos *dsos)
|
|
|
{
|
|
|
INIT_LIST_HEAD(&dsos->head);
|
|
|
dsos->root = RB_ROOT;
|
|
|
- pthread_rwlock_init(&dsos->lock, NULL);
|
|
|
+ init_rwsem(&dsos->lock);
|
|
|
}
|
|
|
|
|
|
static void machine__threads_init(struct machine *machine)
|
|
@@ -40,7 +40,7 @@ static void machine__threads_init(struct machine *machine)
|
|
|
for (i = 0; i < THREADS__TABLE_SIZE; i++) {
|
|
|
struct threads *threads = &machine->threads[i];
|
|
|
threads->entries = RB_ROOT;
|
|
|
- pthread_rwlock_init(&threads->lock, NULL);
|
|
|
+ init_rwsem(&threads->lock);
|
|
|
threads->nr = 0;
|
|
|
INIT_LIST_HEAD(&threads->dead);
|
|
|
threads->last_match = NULL;
|
|
@@ -130,7 +130,7 @@ static void dsos__purge(struct dsos *dsos)
|
|
|
{
|
|
|
struct dso *pos, *n;
|
|
|
|
|
|
- pthread_rwlock_wrlock(&dsos->lock);
|
|
|
+ down_write(&dsos->lock);
|
|
|
|
|
|
list_for_each_entry_safe(pos, n, &dsos->head, node) {
|
|
|
RB_CLEAR_NODE(&pos->rb_node);
|
|
@@ -139,13 +139,13 @@ static void dsos__purge(struct dsos *dsos)
|
|
|
dso__put(pos);
|
|
|
}
|
|
|
|
|
|
- pthread_rwlock_unlock(&dsos->lock);
|
|
|
+ up_write(&dsos->lock);
|
|
|
}
|
|
|
|
|
|
static void dsos__exit(struct dsos *dsos)
|
|
|
{
|
|
|
dsos__purge(dsos);
|
|
|
- pthread_rwlock_destroy(&dsos->lock);
|
|
|
+ exit_rwsem(&dsos->lock);
|
|
|
}
|
|
|
|
|
|
void machine__delete_threads(struct machine *machine)
|
|
@@ -155,7 +155,7 @@ void machine__delete_threads(struct machine *machine)
|
|
|
|
|
|
for (i = 0; i < THREADS__TABLE_SIZE; i++) {
|
|
|
struct threads *threads = &machine->threads[i];
|
|
|
- pthread_rwlock_wrlock(&threads->lock);
|
|
|
+ down_write(&threads->lock);
|
|
|
nd = rb_first(&threads->entries);
|
|
|
while (nd) {
|
|
|
struct thread *t = rb_entry(nd, struct thread, rb_node);
|
|
@@ -163,7 +163,7 @@ void machine__delete_threads(struct machine *machine)
|
|
|
nd = rb_next(nd);
|
|
|
__machine__remove_thread(machine, t, false);
|
|
|
}
|
|
|
- pthread_rwlock_unlock(&threads->lock);
|
|
|
+ up_write(&threads->lock);
|
|
|
}
|
|
|
}
|
|
|
|
|
@@ -180,7 +180,7 @@ void machine__exit(struct machine *machine)
|
|
|
|
|
|
for (i = 0; i < THREADS__TABLE_SIZE; i++) {
|
|
|
struct threads *threads = &machine->threads[i];
|
|
|
- pthread_rwlock_destroy(&threads->lock);
|
|
|
+ exit_rwsem(&threads->lock);
|
|
|
}
|
|
|
}
|
|
|
|
|
@@ -482,9 +482,9 @@ struct thread *machine__findnew_thread(struct machine *machine, pid_t pid,
|
|
|
struct threads *threads = machine__threads(machine, tid);
|
|
|
struct thread *th;
|
|
|
|
|
|
- pthread_rwlock_wrlock(&threads->lock);
|
|
|
+ down_write(&threads->lock);
|
|
|
th = __machine__findnew_thread(machine, pid, tid);
|
|
|
- pthread_rwlock_unlock(&threads->lock);
|
|
|
+ up_write(&threads->lock);
|
|
|
return th;
|
|
|
}
|
|
|
|
|
@@ -494,9 +494,9 @@ struct thread *machine__find_thread(struct machine *machine, pid_t pid,
|
|
|
struct threads *threads = machine__threads(machine, tid);
|
|
|
struct thread *th;
|
|
|
|
|
|
- pthread_rwlock_rdlock(&threads->lock);
|
|
|
+ down_read(&threads->lock);
|
|
|
th = ____machine__findnew_thread(machine, threads, pid, tid, false);
|
|
|
- pthread_rwlock_unlock(&threads->lock);
|
|
|
+ up_read(&threads->lock);
|
|
|
return th;
|
|
|
}
|
|
|
|
|
@@ -588,7 +588,7 @@ static struct dso *machine__findnew_module_dso(struct machine *machine,
|
|
|
{
|
|
|
struct dso *dso;
|
|
|
|
|
|
- pthread_rwlock_wrlock(&machine->dsos.lock);
|
|
|
+ down_write(&machine->dsos.lock);
|
|
|
|
|
|
dso = __dsos__find(&machine->dsos, m->name, true);
|
|
|
if (!dso) {
|
|
@@ -602,7 +602,7 @@ static struct dso *machine__findnew_module_dso(struct machine *machine,
|
|
|
|
|
|
dso__get(dso);
|
|
|
out_unlock:
|
|
|
- pthread_rwlock_unlock(&machine->dsos.lock);
|
|
|
+ up_write(&machine->dsos.lock);
|
|
|
return dso;
|
|
|
}
|
|
|
|
|
@@ -749,7 +749,8 @@ size_t machine__fprintf(struct machine *machine, FILE *fp)
|
|
|
|
|
|
for (i = 0; i < THREADS__TABLE_SIZE; i++) {
|
|
|
struct threads *threads = &machine->threads[i];
|
|
|
- pthread_rwlock_rdlock(&threads->lock);
|
|
|
+
|
|
|
+ down_read(&threads->lock);
|
|
|
|
|
|
ret = fprintf(fp, "Threads: %u\n", threads->nr);
|
|
|
|
|
@@ -759,7 +760,7 @@ size_t machine__fprintf(struct machine *machine, FILE *fp)
|
|
|
ret += thread__fprintf(pos, fp);
|
|
|
}
|
|
|
|
|
|
- pthread_rwlock_unlock(&threads->lock);
|
|
|
+ up_read(&threads->lock);
|
|
|
}
|
|
|
return ret;
|
|
|
}
|
|
@@ -1319,7 +1320,7 @@ static int machine__process_kernel_mmap_event(struct machine *machine,
|
|
|
struct dso *kernel = NULL;
|
|
|
struct dso *dso;
|
|
|
|
|
|
- pthread_rwlock_rdlock(&machine->dsos.lock);
|
|
|
+ down_read(&machine->dsos.lock);
|
|
|
|
|
|
list_for_each_entry(dso, &machine->dsos.head, node) {
|
|
|
|
|
@@ -1349,7 +1350,7 @@ static int machine__process_kernel_mmap_event(struct machine *machine,
|
|
|
break;
|
|
|
}
|
|
|
|
|
|
- pthread_rwlock_unlock(&machine->dsos.lock);
|
|
|
+ up_read(&machine->dsos.lock);
|
|
|
|
|
|
if (kernel == NULL)
|
|
|
kernel = machine__findnew_dso(machine, kmmap_prefix);
|
|
@@ -1513,7 +1514,7 @@ static void __machine__remove_thread(struct machine *machine, struct thread *th,
|
|
|
|
|
|
BUG_ON(refcount_read(&th->refcnt) == 0);
|
|
|
if (lock)
|
|
|
- pthread_rwlock_wrlock(&threads->lock);
|
|
|
+ down_write(&threads->lock);
|
|
|
rb_erase_init(&th->rb_node, &threads->entries);
|
|
|
RB_CLEAR_NODE(&th->rb_node);
|
|
|
--threads->nr;
|
|
@@ -1524,7 +1525,7 @@ static void __machine__remove_thread(struct machine *machine, struct thread *th,
|
|
|
*/
|
|
|
list_add_tail(&th->node, &threads->dead);
|
|
|
if (lock)
|
|
|
- pthread_rwlock_unlock(&threads->lock);
|
|
|
+ up_write(&threads->lock);
|
|
|
thread__put(th);
|
|
|
}
|
|
|
|