From b42194c6063f64d59fe1c360fa4ae4edd85ad2f3 Mon Sep 17 00:00:00 2001 From: Bill Hoffa Date: Wed, 13 Jan 2016 14:06:31 -0600 Subject: 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 Reviewed-by: Prachi Gupta Reviewed-by: Daniel M. Crowell --- src/include/kernel/intmsghandler.H | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) (limited to 'src/include/kernel/intmsghandler.H') diff --git a/src/include/kernel/intmsghandler.H b/src/include/kernel/intmsghandler.H index 8fd4e34b6..8f7c08559 100644 --- a/src/include/kernel/intmsghandler.H +++ b/src/include/kernel/intmsghandler.H @@ -145,14 +145,15 @@ class InterruptMsgHdlr : public MessageHandler static void addCpuCore(uint64_t i_pir); /** - * Issue an IPI to the core. + * Send message to interrupt resource provider (intrrp) in userspace to + * indicate a wakeup occurred for core/thread indicated by given pir. + * The intrrp monitors the expected cores/threads wakeup and will issue + * a timeout/error in the event that not all expected cores/threads + * send this message * - * @param[in] i_pir - The PIR of the CPU to send IPI at. - * @param[in] i_favor - How favored the interrupt is; 0 = most favored - * 254 = least favored, 255 = no interrupt - * Default 0x1 - IPI from kernel side (wakeup) + * @param[in] i_pir - The PIR of the CPU to send doorbell to. */ - static void sendIPI(uint64_t i_pir, uint8_t i_favor = 0x1); + static void sendThreadWakeupMsg(uint64_t i_pir); /** * Issue the sbe/mailbox workaround (issue a mbox EOI to mailbox) -- cgit v1.2.1