MINOR: activity: make the profiling status per thread and not global

In order to later support automatic profiling turn on/off, we need to
have it per-thread. We're keeping the global option to know whether to
turn it or on off, but the profiling status is now set per thread. We're
updating the status in activity_count_runtime() which is called before
entering poll(). The reason is that we'll extend this with run time
measurement when deciding to automatically turn it on or off.
diff --git a/include/proto/activity.h b/include/proto/activity.h
index 098206e..922f493 100644
--- a/include/proto/activity.h
+++ b/include/proto/activity.h
@@ -32,6 +32,7 @@
 #define HA_PROF_TASKS       0x00000001     /* enable per-task CPU profiling */
 
 extern unsigned int profiling;
+extern unsigned long task_profiling_mask;
 extern struct activity activity[MAX_THREADS];
 
 
@@ -67,6 +68,14 @@
 
 	run_time = (before_poll.tv_sec - after_poll.tv_sec) * 1000000U + (before_poll.tv_usec - after_poll.tv_usec);
 	swrate_add(&activity[tid].avg_loop_us, TIME_STATS_SAMPLES, run_time);
+
+	if (!(task_profiling_mask & tid_bit)) {
+		if (unlikely(profiling & HA_PROF_TASKS))
+			_HA_ATOMIC_OR(&task_profiling_mask, tid_bit);
+	} else {
+		if (unlikely(!(profiling & HA_PROF_TASKS)))
+			_HA_ATOMIC_AND(&task_profiling_mask, ~tid_bit);
+	}
 }
 
 
diff --git a/src/activity.c b/src/activity.c
index b48f4b4..eac2c10 100644
--- a/src/activity.c
+++ b/src/activity.c
@@ -24,6 +24,7 @@
 
 /* bit field of profiling options. Beware, may be modified at runtime! */
 unsigned int profiling = 0;
+unsigned long task_profiling_mask = 0;
 
 /* One struct per thread containing all collected measurements */
 struct activity activity[MAX_THREADS] __attribute__((aligned(64))) = { };
diff --git a/src/task.c b/src/task.c
index 04476fe..2775743 100644
--- a/src/task.c
+++ b/src/task.c
@@ -93,7 +93,7 @@
 		t->rq.key += offset;
 	}
 
-	if (profiling & HA_PROF_TASKS)
+	if (task_profiling_mask & tid_bit)
 		t->call_date = now_mono_time();
 
 	eb32sc_insert(root, &t->rq, t->thread_mask);