[PATCH 13/14] more debug
Tvrtko Ursulin
tursulin at ursulin.net
Thu Oct 19 11:47:06 UTC 2017
From: Tvrtko Ursulin <tvrtko.ursulin at intel.com>
Signed-off-by: Tvrtko Ursulin <tvrtko.ursulin at intel.com>
---
drivers/gpu/drm/i915/i915_pmu.c | 6 +++++-
include/linux/padata.h | 1 +
kernel/padata.c | 28 +++++++++++++++++++++++++++-
3 files changed, 33 insertions(+), 2 deletions(-)
diff --git a/drivers/gpu/drm/i915/i915_pmu.c b/drivers/gpu/drm/i915/i915_pmu.c
index 25ff1f5a5cc9..e2ce66159041 100644
--- a/drivers/gpu/drm/i915/i915_pmu.c
+++ b/drivers/gpu/drm/i915/i915_pmu.c
@@ -788,10 +788,13 @@ static int i915_pmu_register_cpuhp_state(struct drm_i915_private *i915)
"perf/x86/intel/i915:online",
i915_pmu_cpu_online,
i915_pmu_cpu_offline);
- if (ret < 0)
+ if (ret < 0) {
+ printk("i915 cpuhp setup %d\n", ret);
return ret;
+ }
slot = ret;
+ printk("i915 cpuhp slot %d\n", ret);
ret = cpuhp_state_add_instance(slot, &i915->pmu.node);
if (ret) {
cpuhp_remove_multi_state(slot);
@@ -812,6 +815,7 @@ static void i915_pmu_unregister_cpuhp_state(struct drm_i915_private *i915)
#else
static int i915_pmu_register_cpuhp_state(void)
{
+ printk("i915 cpuhp off\n");
return 0;
}
diff --git a/include/linux/padata.h b/include/linux/padata.h
index 2f9c1f93b1ce..3234c9c29d16 100644
--- a/include/linux/padata.h
+++ b/include/linux/padata.h
@@ -151,6 +151,7 @@ struct parallel_data {
* @flags: padata flags.
*/
struct padata_instance {
+ u64 magic;
struct hlist_node node;
struct workqueue_struct *wq;
struct parallel_data *pd;
diff --git a/kernel/padata.c b/kernel/padata.c
index 1ee2d32a766d..a4117d0c575d 100644
--- a/kernel/padata.c
+++ b/kernel/padata.c
@@ -33,6 +33,8 @@
#include <linux/module.h>
#define MAX_OBJ_NUM 1000
+#define PADATA_MAGIC 0xf414e1015deed1d0ULL
+#define PADATA_MAGIC_FREED 0x0414e1015deed1d0ULL
static int padata_index_to_cpu(struct parallel_data *pd, int cpu_index)
{
@@ -803,6 +805,20 @@ static int padata_cpu_online(unsigned int cpu, struct hlist_node *node)
int ret;
pinst = hlist_entry_safe(node, struct padata_instance, node);
+ WARN_ON(!pinst);
+ if (WARN_ON(pinst->magic != PADATA_MAGIC)) {
+ printk("padata_cpu_online WRONG_MAGIC %llx node=%p\n",
+ pinst->magic, node);
+ return 0;
+ }
+
+ printk("padata_cpu_online 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));
+
if (!pinst_has_cpu(pinst, cpu))
return 0;
@@ -818,13 +834,19 @@ static int padata_cpu_prep_down(unsigned int cpu, struct hlist_node *node)
int ret;
pinst = hlist_entry_safe(node, struct padata_instance, node);
+ WARN_ON(!pinst);
+ if (WARN_ON(pinst->magic != PADATA_MAGIC)) {
+ printk("padata_cpu_prep_down WRONG MAGIC %llx node=%p\n",
+ pinst->magic, node);
+ return 0;
+ }
+
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;
@@ -847,6 +869,7 @@ static void __padata_free(struct padata_instance *pinst)
padata_free_pd(pinst->pd);
free_cpumask_var(pinst->cpumask.pcpu);
free_cpumask_var(pinst->cpumask.cbcpu);
+ pinst->magic = PADATA_MAGIC_FREED;
kfree(pinst);
}
@@ -1012,6 +1035,7 @@ static struct padata_instance *padata_alloc(struct workqueue_struct *wq,
rcu_assign_pointer(pinst->pd, pd);
+ pinst->magic = PADATA_MAGIC;
pinst->wq = wq;
cpumask_copy(pinst->cpumask.pcpu, pcpumask);
@@ -1037,6 +1061,7 @@ static struct padata_instance *padata_alloc(struct workqueue_struct *wq,
free_cpumask_var(pinst->cpumask.pcpu);
free_cpumask_var(pinst->cpumask.cbcpu);
err_free_inst:
+ pinst->magic = PADATA_MAGIC_FREED;
kfree(pinst);
err:
return NULL;
@@ -1081,6 +1106,7 @@ static __init int padata_driver_init(void)
if (ret < 0)
return ret;
hp_online = ret;
+ printk("padata cpuhp slot %u\n", ret);
return 0;
}
module_init(padata_driver_init);
--
2.9.5
More information about the Intel-gfx-trybot
mailing list