summaryrefslogtreecommitdiffstats
path: root/src/kernel/cpumgr.C
diff options
context:
space:
mode:
authorBill Hoffa <wghoffa@us.ibm.com>2016-01-13 14:06:31 -0600
committerDaniel M. Crowell <dcrowell@us.ibm.com>2016-05-06 11:03:22 -0400
commitb42194c6063f64d59fe1c360fa4ae4edd85ad2f3 (patch)
treeb055e27081164600409203f31c3eac93f32397cb /src/kernel/cpumgr.C
parentdaf95f9b2b66313079186c2d8669ffa75155056f (diff)
downloadblackbird-hostboot-b42194c6063f64d59fe1c360fa4ae4edd85ad2f3.tar.gz
blackbird-hostboot-b42194c6063f64d59fe1c360fa4ae4edd85ad2f3.zip
Doorbell Interrupt Base Support for Core/Thread Wakeup
This change includes: - Implementation of a generic KernelWorkItem Class - Kernel functionality for doorbell send to specific PIRs - Kernel changes to send core/thread Wakeup doorbells using doorbell_send() + placing KernelWorkItems on a cpu stack obj to be executed during doorbell wakeup - Kernel Interrupt Message handler changes to send wakeup msgs - Interrupt Resource Provider (INTRRP) Changes to handle wakeup msgs and monitor for timeouts - Changes to the IPL flow to invoke proper Core/Thread Wakeup - A basic outline (commented out) for how IPC messages can be implemented in the future Change-Id: I547fb8719bac657def561565ae11ab18cde72096 CMVC-Prereq: 992722 RTC:137564 Reviewed-on: http://ralgit01.raleigh.ibm.com/gerrit1/22815 Tested-by: Jenkins Server Tested-by: FSP CI Jenkins Reviewed-by: Andrew J. Geissler <andrewg@us.ibm.com> Reviewed-by: Prachi Gupta <pragupta@us.ibm.com> Reviewed-by: Daniel M. Crowell <dcrowell@us.ibm.com>
Diffstat (limited to 'src/kernel/cpumgr.C')
-rw-r--r--src/kernel/cpumgr.C18
1 files changed, 16 insertions, 2 deletions
diff --git a/src/kernel/cpumgr.C b/src/kernel/cpumgr.C
index 1aef65650..c1733bb7c 100644
--- a/src/kernel/cpumgr.C
+++ b/src/kernel/cpumgr.C
@@ -5,7 +5,7 @@
/* */
/* OpenPOWER HostBoot Project */
/* */
-/* Contributors Listed Below - COPYRIGHT 2010,2015 */
+/* Contributors Listed Below - COPYRIGHT 2010,2016 */
/* [+] International Business Machines Corp. */
/* */
/* */
@@ -45,6 +45,7 @@
#include <kernel/hbterminatetypes.H>
#include <kernel/kernel_reasoncodes.H>
#include <kernel/cpuid.H>
+#include <kernel/doorbell.H>
cpu_t** CpuManager::cv_cpus[KERNEL_MAX_SUPPORTED_NODES];
bool CpuManager::cv_shutdown_requested = false;
@@ -193,7 +194,7 @@ void CpuManager::startCPU(ssize_t i)
// Initialize CPU structure.
if (NULL == cv_cpus[nodeId][cpuId])
{
- printk("Starting CPU %ld...", i);
+ printk("Starting CPU with pir %ld...", i);
cpu_t* cpu = cv_cpus[nodeId][cpuId] = new cpu_t();
// Initialize CPU.
@@ -434,8 +435,21 @@ void CpuManager::startCore(uint64_t pir,uint64_t i_threads)
}
__sync_synchronize();
+ //Send a message to userspace that a core with this base pir is being added
+ // userspace will know which threads on the core to expect already
InterruptMsgHdlr::addCpuCore(pir);
+ for(size_t i = 0; i < threads; i++)
+ {
+ // Only wakeup the threads we were told to wakeup
+ if( i_threads & (0x8000000000000000 >> i) )
+ {
+ printk("Dbell wkup pir %ld\n", pir + i);
+ //Initiate the Doorbell for this core/pir
+ send_doorbell_wakeup(pir + i);
+ }
+ }
+
return;
};
OpenPOWER on IntegriCloud