Thread (2 messages) 2 messages, 2 authors, 2019-01-14

Re: [PATCH RT] padata: Make padata_do_serial() use get_cpu_light()

From: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
Date: 2019-01-14 10:05:31
Also in: linux-crypto, lkml

On 2019-01-09 16:59:26 [+0100], Daniel Bristot de Oliveira wrote:
quoted hunk ↗ jump to hunk
diff --git a/kernel/padata.c b/kernel/padata.c
index d568cc56405f..bfcbdeb20ba5 100644
--- a/kernel/padata.c
+++ b/kernel/padata.c
@@ -295,7 +295,7 @@ static void padata_reorder_timer(struct timer_list *t)
 	unsigned int weight;
 	int target_cpu, cpu;
 
-	cpu = get_cpu();
+	cpu = get_cpu_light();
This can become a
	cpu = smp_processor_id()
quoted hunk ↗ jump to hunk
 	/* We don't lock pd here to not interfere with parallel processing
 	 * padata_reorder() calls on other CPUs. We just need any CPU out of
@@ -321,7 +321,7 @@ static void padata_reorder_timer(struct timer_list *t)
 		padata_reorder(pd);
 	}
 
-	put_cpu();
+	put_cpu_light();
and this can go because this is invoked in a timer callback.
quoted hunk ↗ jump to hunk
 }
 
 static void padata_serial_worker(struct work_struct *serial_work)
@@ -369,7 +369,7 @@ void padata_do_serial(struct padata_priv *padata)
 
 	pd = padata->pd;
 
-	cpu = get_cpu();
+	cpu = get_cpu_light();
this is tricky but I would also say that this can become
smp_processor_id() like in the upper hunk
quoted hunk ↗ jump to hunk
 	/* We need to run on the same CPU padata_do_parallel(.., padata, ..)
 	 * was called on -- or, at least, enqueue the padata object into the
@@ -387,7 +387,7 @@ void padata_do_serial(struct padata_priv *padata)
 	list_add_tail(&padata->list, &pqueue->reorder.list);
 	spin_unlock(&pqueue->reorder.lock);
 
-	put_cpu();
+	put_cpu_light();
and than this can go, too. It looks like this invoked from a worker with
BH disabled. If it does, it is all good. If not then it might be
problematic because later we have
	queue_work_on(cpu, pd->pinst->wq, &pqueue->reorder_work);

and nothing guarantees that the work is carried out by the CPU specified
if CPU-hotplug is involved.
 	/* If we're running on the wrong CPU, call padata_reorder() via a
 	 * kernel worker.
Sebastian
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help