Hello Chris,

After appling below patch, I met software deadlock while hmp_idle_pull.
commit 940407d585a1a632086159d19e71bc190a1d07f9
Author: Chris Redpath <chris.redpath@arm.com>
Date:   Fri May 9 14:36:53 2014 +0100

    hmp: Use idle pull to perform forced up-migrations

The problem is occurred when current task is ksoftirqd and hmp_idle_pull decide to pull a task.

Call stack is as below.

current: ksoftirqd/4

kthread+0xc0
 smp_boot_thread_fn+0x118
  schedule+0x40
   need_resched+0x768
    idle_balance+0x180
     hmp_idle_pull+0x348
      hrtimer_start+0x30
       __hrtimer_start_range_ns+0x3a4
        raise_softirq_irqoff+0x34
         wakeup_softirqd+0x38
          wake_up_process+0x34
           try_to_wake_up+0x68

I use lsk 14.06 based kernel.

It spins below line on try_to_wake_up.
#ifdef CONFIG_SMP
    /*                                                                                                                    
     * If the owning (remote) cpu is still in the middle of schedule() with                                               
     * this task as prev, wait until its done referencing the task.                                                       
     */
    while (p->on_cpu)
        cpu_relax();                       <----------- spinning

Are you aware of this issue?
If so, do you have a patch for this?

Thanks,
Munyoung.