Thanksit seems this patch is must, Why do you separate patch [10/17] and [11/17]?
this patch remove almost portion of [10/17].
IMHO these patch merge into 1 patch is better.
Hi Kosaki,
You are right, I will merge them and resend them in the following post.
Ah, OK. I understand.The answer to this mistery is in include/linux/stop_machine.h modified+static int stop_machine_imv_update(void *imv_ptr)it seems racy.
+{
+ struct __imv *imv = imv_ptr;
+
+ if (!wrote_text) {
Why don't need test_and_set?
I think your stop_machine_run(ALL_CPUS) call fn concurrency...
by add-all-cpus-option-to-stop-machine-run.patch :
/**
* stop_machine_run: freeze the machine on all CPUs and run this function
* @fn: the function to run
* @data: the data ptr for the @fn()
- * @cpu: the cpu to run @fn() on (or any, if @cpu == NR_CPUS.
+ * @cpu: if @cpu == n, run @fn() on cpu n
+ * if @cpu == NR_CPUS, run @fn() on any cpu
+ * if @cpu == ALL_CPUS, run @fn() first on the calling cpu, and then
+ * concurrently on all the other cpus
*
* Description: This causes a thread to be scheduled on every other cpu,
* each of which disables interrupts, and finally interrupts are disabled
Therefore, the first execution of the function is done before all other
executions.