nios2: implement kernel_event_logger
Interrupts and context switches are logged. Since this CPU does not have a power-saving instruction, it never enters a sleep state so we do not call _sys_k_event_logger_enter_sleep() from anywhere. Change-Id: Idcef388e93ffea373446997a0f87e93a4db44331 Signed-off-by: Andrew Boie <andrew.p.boie@intel.com>
This commit is contained in:
parent
71e22620a8
commit
f33b8d32a1
3 changed files with 62 additions and 1 deletions
|
@ -27,6 +27,7 @@
|
|||
#include <irq.h>
|
||||
#include <misc/printk.h>
|
||||
#include <sw_isr_table.h>
|
||||
#include <misc/kernel_event_logger.h>
|
||||
|
||||
void _irq_spurious(void *unused)
|
||||
{
|
||||
|
@ -102,6 +103,10 @@ void _enter_irq(uint32_t ipending)
|
|||
while (ipending) {
|
||||
_IsrTableEntry_t *ite;
|
||||
|
||||
#ifdef CONFIG_KERNEL_EVENT_LOGGER_INTERRUPT
|
||||
_sys_k_event_logger_interrupt();
|
||||
#endif
|
||||
|
||||
index = find_lsb_set(ipending) - 1;
|
||||
ipending &= ~(1 << index);
|
||||
|
||||
|
|
|
@ -23,6 +23,9 @@
|
|||
GTEXT(_Swap)
|
||||
GTEXT(_thread_entry_wrapper)
|
||||
|
||||
/* imports */
|
||||
GTEXT(_sys_k_event_logger_context_switch)
|
||||
|
||||
/* unsigned int _Swap(unsigned int key)
|
||||
*
|
||||
* Always called with interrupts locked
|
||||
|
@ -58,7 +61,9 @@ SECTION_FUNC(exception.other, _Swap)
|
|||
*/
|
||||
stw r4, __tTCS_coopReg_OFFSET + __t_coop_key_OFFSET(r11)
|
||||
|
||||
/* FIXME call _sys_k_event_logger_context_switch */
|
||||
#if CONFIG_KERNEL_EVENT_LOGGER_CONTEXT_SWITCH
|
||||
call _sys_k_event_logger_context_switch
|
||||
#endif
|
||||
|
||||
/* Find the next context to run. Choose _nanokernel.fiber
|
||||
* if non-NULL */
|
||||
|
|
51
arch/nios2/include/kernel_event_logger_arch.h
Normal file
51
arch/nios2/include/kernel_event_logger_arch.h
Normal file
|
@ -0,0 +1,51 @@
|
|||
/*
|
||||
* Copyright (c) 2016 Intel Corporation
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
/**
|
||||
* @file
|
||||
* @brief Kernel event logger support for Nios II
|
||||
*/
|
||||
|
||||
#ifndef __KERNEL_EVENT_LOGGER_ARCH_H__
|
||||
#define __KERNEL_EVENT_LOGGER_ARCH_H__
|
||||
|
||||
#include <arch/cpu.h>
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
/**
|
||||
* @brief Get the identification of the current interrupt.
|
||||
*
|
||||
* This routine obtain the key of the interrupt that is currently processed
|
||||
* if it is called from a ISR context.
|
||||
*
|
||||
* @return The key of the interrupt that is currently being processed.
|
||||
*/
|
||||
static inline int _sys_current_irq_key_get(void)
|
||||
{
|
||||
uint32_t ipending;
|
||||
|
||||
ipending = _nios2_creg_read(NIOS2_CR_IPENDING);
|
||||
return find_lsb_set(ipending) - 1;
|
||||
}
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif /* __KERNEL_EVENT_LOGGER_ARCH_H__ */
|
Loading…
Add table
Add a link
Reference in a new issue