equal
deleted
inserted
replaced
763 ss->iExIDfcPendingFlag = TRUE; |
763 ss->iExIDfcPendingFlag = TRUE; |
764 ss->iExIDfcs.Add(d); |
764 ss->iExIDfcs.Add(d); |
765 } |
765 } |
766 ss->iExIDfcLock.UnlockOnly(); |
766 ss->iExIDfcLock.UnlockOnly(); |
767 if (kick) |
767 if (kick) |
|
768 { |
|
769 TScheduler& s = TheScheduler; |
|
770 TUint32 cpuMask = 1u<<cpu; |
|
771 if (!(s.iThreadAcceptCpus & cpuMask)) // deal with case where target CPU is shutting down or has already shut down |
|
772 { |
|
773 TInt irq = s.iGenIPILock.LockIrqSave(); |
|
774 if (!(s.iIpiAcceptCpus & cpuMask)) |
|
775 { |
|
776 s.iCCReactivateCpus |= cpuMask; |
|
777 kick = FALSE; |
|
778 } |
|
779 s.iGenIPILock.UnlockIrqRestore(irq); |
|
780 if (!kick) |
|
781 s.iCCReactivateDfc.DoEnque(); // arrange for target CPU to be powered on |
|
782 } |
|
783 } |
|
784 if (kick) |
768 send_resched_ipi(cpu); |
785 send_resched_ipi(cpu); |
769 NKern::EnableAllInterrupts(); // let interrupts in |
786 NKern::EnableAllInterrupts(); // let interrupts in |
770 if (orig >= 8) |
787 if (orig >= 8) |
771 tied->EndTiedEvent(); // IDFC cancelled so release tied thread/group |
788 tied->EndTiedEvent(); // IDFC cancelled so release tied thread/group |
772 continue; |
789 continue; |