extern void calc_global_load(unsigned long ticks);
  extern void update_cpu_load_nohz(void);
  
+ /* Notifier for when a task gets migrated to a new CPU */
+ struct task_migration_notifier {
+       struct task_struct *task;
+       int from_cpu;
+       int to_cpu;
+ };
+ extern void register_task_migration_notifier(struct notifier_block *n);
+ 
  extern unsigned long get_parent_ip(unsigned long addr);
  
 +extern void dump_cpu_task(int cpu);
 +
  struct seq_file;
  struct cfs_rq;
  struct task_group;
 
        trace_sched_migrate_task(p, new_cpu);
  
        if (task_cpu(p) != new_cpu) {
+               struct task_migration_notifier tmn;
+ 
 +              if (p->sched_class->migrate_task_rq)
 +                      p->sched_class->migrate_task_rq(p, new_cpu);
                p->se.nr_migrations++;
                perf_sw_event(PERF_COUNT_SW_CPU_MIGRATIONS, 1, NULL, 0);
+ 
+               tmn.task = p;
+               tmn.from_cpu = task_cpu(p);
+               tmn.to_cpu = new_cpu;
+ 
+               atomic_notifier_call_chain(&task_migration_notifier, 0, &tmn);
        }
  
        __set_task_cpu(p, new_cpu);