[PATCH 10/15] padata debug

Tvrtko Ursulin tursulin at ursulin.net
Thu Oct 19 17:48:41 UTC 2017


From: Tvrtko Ursulin <tvrtko.ursulin at intel.com>

Signed-off-by: Tvrtko Ursulin <tvrtko.ursulin at intel.com>
---
 kernel/padata.c | 51 +++++++++++++++++++++++++++++++++++++++++++++++++--
 1 file changed, 49 insertions(+), 2 deletions(-)

diff --git a/kernel/padata.c b/kernel/padata.c
index 868f947166d7..1ee2d32a766d 100644
--- a/kernel/padata.c
+++ b/kernel/padata.c
@@ -441,6 +441,7 @@ static struct parallel_data *padata_alloc_pd(struct padata_instance *pinst,
 
 static void padata_free_pd(struct parallel_data *pd)
 {
+	printk("padata_free_pd pd=%p\n", pd);
 	free_cpumask_var(pd->cpumask.pcpu);
 	free_cpumask_var(pd->cpumask.cbcpu);
 	free_percpu(pd->pqueue);
@@ -455,6 +456,7 @@ static void padata_flush_queues(struct parallel_data *pd)
 	struct padata_parallel_queue *pqueue;
 	struct padata_serial_queue *squeue;
 
+	printk("padata_flush_queues pd=%p\n", pd);
 	for_each_cpu(cpu, pd->cpumask.pcpu) {
 		pqueue = per_cpu_ptr(pd->pqueue, cpu);
 		flush_work(&pqueue->work);
@@ -496,9 +498,17 @@ static void __padata_stop(struct padata_instance *pinst)
 static void padata_replace(struct padata_instance *pinst,
 			   struct parallel_data *pd_new)
 {
-	struct parallel_data *pd_old = pinst->pd;
+	struct parallel_data *pd_old = rcu_access_pointer(pinst->pd);
 	int notification_mask = 0;
 
+	printk("padata_replace pinst=%p pd_old=%p pd_new=%p cpumasks=%*pbl,%*pbl\n",
+	       pinst,
+	       pd_old,
+	       pd_new,
+	       cpumask_pr_args(pinst->cpumask.pcpu),
+	       cpumask_pr_args(pinst->cpumask.cbcpu));
+	WARN_ON(!pd_old);
+
 	pinst->flags |= PADATA_RESET;
 
 	rcu_assign_pointer(pinst->pd, pd_new);
@@ -591,6 +601,12 @@ static int __padata_set_cpumasks(struct padata_instance *pinst,
 	cpumask_copy(pinst->cpumask.pcpu, pcpumask);
 	cpumask_copy(pinst->cpumask.cbcpu, cbcpumask);
 
+	printk("__padata_set_cpumasks pinst=%p pd=%p cpumasks=%*pbl,%*pbl\n",
+	       pinst,
+	       pd,
+	       cpumask_pr_args(pinst->cpumask.pcpu),
+	       cpumask_pr_args(pinst->cpumask.cbcpu));
+
 	padata_replace(pinst, pd);
 
 	if (valid)
@@ -687,6 +703,13 @@ static int __padata_add_cpu(struct padata_instance *pinst, int cpu)
 		if (!pd)
 			return -ENOMEM;
 
+	printk("__padata_add_cpu cpu=%u pinst=%p pd=%p cpumasks=%*pbl,%*pbl\n",
+	       cpu,
+	       pinst,
+	       pd,
+	       cpumask_pr_args(pinst->cpumask.pcpu),
+	       cpumask_pr_args(pinst->cpumask.cbcpu));
+
 		padata_replace(pinst, pd);
 
 		if (padata_validate_cpumask(pinst, pinst->cpumask.pcpu) &&
@@ -712,6 +735,13 @@ static int __padata_remove_cpu(struct padata_instance *pinst, int cpu)
 		if (!pd)
 			return -ENOMEM;
 
+	printk("__padata_remove_cpu cpu=%u pinst=%p pd=%p cpumasks=%*pbl,%*pbl\n",
+	       cpu,
+	       pinst,
+	       pd,
+	       cpumask_pr_args(pinst->cpumask.pcpu),
+	       cpumask_pr_args(pinst->cpumask.cbcpu));
+
 		padata_replace(pinst, pd);
 
 		cpumask_clear_cpu(cpu, pd->cpumask.cbcpu);
@@ -758,6 +788,11 @@ EXPORT_SYMBOL(padata_remove_cpu);
 
 static inline int pinst_has_cpu(struct padata_instance *pinst, int cpu)
 {
+	printk("padata:pinst_has_cpu cpu=%u pinst=%p cpumasks=%*pbl,%*pbl\n",
+	       cpu,
+	       pinst,
+	       cpumask_pr_args(pinst->cpumask.pcpu),
+	       cpumask_pr_args(pinst->cpumask.cbcpu));
 	return cpumask_test_cpu(cpu, pinst->cpumask.pcpu) ||
 		cpumask_test_cpu(cpu, pinst->cpumask.cbcpu);
 }
@@ -783,6 +818,13 @@ static int padata_cpu_prep_down(unsigned int cpu, struct hlist_node *node)
 	int ret;
 
 	pinst = hlist_entry_safe(node, struct padata_instance, node);
+	printk("padata_cpu_prep_down cpu=%u pinst=%p pd=%p cpumasks=%*pbl,%*pbl\n",
+	       cpu,
+	       pinst,
+	       rcu_access_pointer(pinst->pd),
+	       cpumask_pr_args(pinst->cpumask.pcpu),
+	       cpumask_pr_args(pinst->cpumask.cbcpu));
+	WARN_ON(!pinst);
 	if (!pinst_has_cpu(pinst, cpu))
 		return 0;
 
@@ -800,7 +842,7 @@ static void __padata_free(struct padata_instance *pinst)
 #ifdef CONFIG_HOTPLUG_CPU
 	cpuhp_state_remove_instance_nocalls(hp_online, &pinst->node);
 #endif
-
+	printk("__data_free pinst=%p\n", pinst);
 	padata_stop(pinst);
 	padata_free_pd(pinst->pd);
 	free_cpumask_var(pinst->cpumask.pcpu);
@@ -984,6 +1026,11 @@ static struct padata_instance *padata_alloc(struct workqueue_struct *wq,
 #ifdef CONFIG_HOTPLUG_CPU
 	cpuhp_state_add_instance_nocalls_cpuslocked(hp_online, &pinst->node);
 #endif
+	printk("padata_alloc pinst=%p pd=%p cpumasks=%*pbl,%*pbl\n",
+	       pinst,
+	       pd,
+	       cpumask_pr_args(pinst->cpumask.pcpu),
+	       cpumask_pr_args(pinst->cpumask.cbcpu));
 	return pinst;
 
 err_free_masks:
-- 
2.9.5



More information about the Intel-gfx-trybot mailing list