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 <irq.h>
|
||||||
#include <misc/printk.h>
|
#include <misc/printk.h>
|
||||||
#include <sw_isr_table.h>
|
#include <sw_isr_table.h>
|
||||||
|
#include <misc/kernel_event_logger.h>
|
||||||
|
|
||||||
void _irq_spurious(void *unused)
|
void _irq_spurious(void *unused)
|
||||||
{
|
{
|
||||||
|
@ -102,6 +103,10 @@ void _enter_irq(uint32_t ipending)
|
||||||
while (ipending) {
|
while (ipending) {
|
||||||
_IsrTableEntry_t *ite;
|
_IsrTableEntry_t *ite;
|
||||||
|
|
||||||
|
#ifdef CONFIG_KERNEL_EVENT_LOGGER_INTERRUPT
|
||||||
|
_sys_k_event_logger_interrupt();
|
||||||
|
#endif
|
||||||
|
|
||||||
index = find_lsb_set(ipending) - 1;
|
index = find_lsb_set(ipending) - 1;
|
||||||
ipending &= ~(1 << index);
|
ipending &= ~(1 << index);
|
||||||
|
|
||||||
|
|
|
@ -23,6 +23,9 @@
|
||||||
GTEXT(_Swap)
|
GTEXT(_Swap)
|
||||||
GTEXT(_thread_entry_wrapper)
|
GTEXT(_thread_entry_wrapper)
|
||||||
|
|
||||||
|
/* imports */
|
||||||
|
GTEXT(_sys_k_event_logger_context_switch)
|
||||||
|
|
||||||
/* unsigned int _Swap(unsigned int key)
|
/* unsigned int _Swap(unsigned int key)
|
||||||
*
|
*
|
||||||
* Always called with interrupts locked
|
* Always called with interrupts locked
|
||||||
|
@ -58,7 +61,9 @@ SECTION_FUNC(exception.other, _Swap)
|
||||||
*/
|
*/
|
||||||
stw r4, __tTCS_coopReg_OFFSET + __t_coop_key_OFFSET(r11)
|
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
|
/* Find the next context to run. Choose _nanokernel.fiber
|
||||||
* if non-NULL */
|
* 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