You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@nuttx.apache.org by ac...@apache.org on 2020/06/16 17:05:01 UTC

[incubator-nuttx] branch master updated (dde25b0 -> 4fd506e)

This is an automated email from the ASF dual-hosted git repository.

acassis pushed a change to branch master
in repository https://gitbox.apache.org/repos/asf/incubator-nuttx.git.


    from dde25b0  tools/nxstyle: Fix AddressSanitizer error
     new df2bc1e  Add syscall and irqhandler hooks in sched_note.h
     new ed9532e  CONFIG_SCHED_INSTRUMENTATION_SYSCALL should not available if the architecture does not support the required system hook note hooks.
     new 4fd506e  include/nuttx/sched_note.h: nxstyle fixes.

The 3 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails.  The revisions
listed as "add" were already present in the repository and have only
been added to this reference.


Summary of changes:
 arch/Kconfig               |   8 +++
 include/nuttx/sched_note.h | 126 +++++++++++++++++++++++++++++++--------------
 sched/Kconfig              |  20 +++++++
 sched/irq/irq_dispatch.c   |  13 +++++
 4 files changed, 128 insertions(+), 39 deletions(-)


[incubator-nuttx] 01/03: Add syscall and irqhandler hooks in sched_note.h

Posted by ac...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

acassis pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/incubator-nuttx.git

commit df2bc1e4c36b3f706cce83c075659339e27027db
Author: Yuuichi Nakamura <Yu...@sony.com>
AuthorDate: Tue Jun 16 07:57:49 2020 -0600

    Add syscall and irqhandler hooks in sched_note.h
---
 include/nuttx/sched_note.h | 18 ++++++++++++++++++
 sched/Kconfig              | 19 +++++++++++++++++++
 sched/irq/irq_dispatch.c   | 13 +++++++++++++
 3 files changed, 50 insertions(+)

diff --git a/include/nuttx/sched_note.h b/include/nuttx/sched_note.h
index e04935a..bb7f032 100644
--- a/include/nuttx/sched_note.h
+++ b/include/nuttx/sched_note.h
@@ -45,6 +45,7 @@
 #include <sys/types.h>
 #include <stdint.h>
 #include <stdbool.h>
+#include <stdarg.h>
 
 #include <nuttx/sched.h>
 
@@ -305,6 +306,20 @@ void sched_note_spinabort(FAR struct tcb_s *tcb, FAR volatile void *spinlock);
 #  define sched_note_spinabort(t,s)
 #endif
 
+#ifdef CONFIG_SCHED_INSTRUMENTATION_SYSCALL
+void sched_note_syscall_enter(int nr, int argc, ...);
+void sched_note_syscall_leave(int nr, uintptr_t result);
+#else
+#  define sched_note_syscall_enter(n,a...)
+#  define sched_note_syscall_leave(n,r)
+#endif
+
+#ifdef CONFIG_SCHED_INSTRUMENTATION_IRQHANDLER
+void sched_note_irqhandler(int irq, FAR void *handler, bool enter);
+#else
+#  define sched_note_irqhandler(i,h,e)
+#endif
+
 /****************************************************************************
  * Name: sched_note_get
  *
@@ -387,6 +402,9 @@ int note_register(void);
 #  define sched_note_spinlocked(t,s)
 #  define sched_note_spinunlock(t,s)
 #  define sched_note_spinabort(t,s)
+#  define sched_note_syscall_enter(n,a...)
+#  define sched_note_syscall_leave(n,r)
+#  define sched_note_irqhandler(i,h,e)
 
 #endif /* CONFIG_SCHED_INSTRUMENTATION */
 #endif /* __INCLUDE_NUTTX_SCHED_NOTE_H */
diff --git a/sched/Kconfig b/sched/Kconfig
index f7fe1ef..a1d66dd 100644
--- a/sched/Kconfig
+++ b/sched/Kconfig
@@ -972,6 +972,25 @@ config SCHED_INSTRUMENTATION_SPINLOCKS
 			void sched_note_spinunlock(FAR struct tcb_s *tcb, bool state);
 			void sched_note_spinabort(FAR struct tcb_s *tcb, bool state);
 
+config SCHED_INSTRUMENTATION_SYSCALL
+	bool "System call monitor hooks"
+	default n
+	---help---
+		Enables additional hooks for entry and exit from system call.
+		Board-specific logic must provide this additional logic.
+
+			void sched_note_syscall_enter(int nr, int argc, ...);
+			void sched_note_syscall_leave(int nr, uintptr_t result);
+
+config SCHED_INSTRUMENTATION_IRQHANDLER
+	bool "Interrupt handler monitor hooks"
+	default n
+	---help---
+		Enables additional hooks for interrupt handler. Board-specific logic
+		must provide this additional logic.
+
+			void sched_note_irqhandler(int irq, FAR void *handler, bool enter);
+
 config SCHED_INSTRUMENTATION_BUFFER
 	bool "Buffer instrumentation data in memory"
 	default n
diff --git a/sched/irq/irq_dispatch.c b/sched/irq/irq_dispatch.c
index f07cc13..49be385 100644
--- a/sched/irq/irq_dispatch.c
+++ b/sched/irq/irq_dispatch.c
@@ -43,6 +43,7 @@
 #include <nuttx/arch.h>
 #include <nuttx/irq.h>
 #include <nuttx/random.h>
+#include <nuttx/sched_note.h>
 
 #include "irq/irq.h"
 #include "clock/clock.h"
@@ -171,11 +172,23 @@ void irq_dispatch(int irq, FAR void *context)
   add_irq_randomness(irq);
 #endif
 
+#ifdef CONFIG_SCHED_INSTRUMENTATION_IRQHANDLER
+  /* Notify that we are entering into the interrupt handler */
+
+  sched_note_irqhandler(irq, vector, true);
+#endif
+
   /* Then dispatch to the interrupt handler */
 
   CALL_VECTOR(ndx, vector, irq, context, arg);
   UNUSED(ndx);
 
+#ifdef CONFIG_SCHED_INSTRUMENTATION_IRQHANDLER
+  /* Notify that we are leaving from the interrupt handler */
+
+  sched_note_irqhandler(irq, vector, false);
+#endif
+
   /* Record the new "running" task.  g_running_tasks[] is only used by
    * assertion logic for reporting crashes.
    */


[incubator-nuttx] 02/03: CONFIG_SCHED_INSTRUMENTATION_SYSCALL should not available if the architecture does not support the required system hook note hooks.

Posted by ac...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

acassis pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/incubator-nuttx.git

commit ed9532e31f8d2b41d66e865fe59d76ca9ea789c7
Author: Gregory Nutt <gn...@nuttx.org>
AuthorDate: Tue Jun 16 08:02:03 2020 -0600

    CONFIG_SCHED_INSTRUMENTATION_SYSCALL should not available if the architecture does not support the required system hook note hooks.
---
 arch/Kconfig  | 8 ++++++++
 sched/Kconfig | 1 +
 2 files changed, 9 insertions(+)

diff --git a/arch/Kconfig b/arch/Kconfig
index eaebb89..21e3f5d 100644
--- a/arch/Kconfig
+++ b/arch/Kconfig
@@ -284,6 +284,14 @@ config ARCH_GLOBAL_IRQDISABLE
 		interrupts as well so that no context switches can occur on the CPU
 		that disabled "local" interrupts.
 
+config ARCH_HAVE_SYSCALL_HOOKS
+	bool
+	default n
+	---help---
+		Indicates that the architecture supports the system call hooks as
+		required if CONFIG_SCHED_INSTRUMENTATION_SYSCALL is enabled.  Refer
+		to sched/Kconfig for additional information.
+
 config ARCH_FPU
 	bool "FPU support"
 	default y
diff --git a/sched/Kconfig b/sched/Kconfig
index a1d66dd..a534969 100644
--- a/sched/Kconfig
+++ b/sched/Kconfig
@@ -975,6 +975,7 @@ config SCHED_INSTRUMENTATION_SPINLOCKS
 config SCHED_INSTRUMENTATION_SYSCALL
 	bool "System call monitor hooks"
 	default n
+	depends on LIB_SYSCALL && ARCH_HAVE_SYSCALL_HOOKS
 	---help---
 		Enables additional hooks for entry and exit from system call.
 		Board-specific logic must provide this additional logic.


[incubator-nuttx] 03/03: include/nuttx/sched_note.h: nxstyle fixes.

Posted by ac...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

acassis pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/incubator-nuttx.git

commit 4fd506efaac9634cedb8838932261d3ebac9d551
Author: Gregory Nutt <gn...@nuttx.org>
AuthorDate: Tue Jun 16 08:22:59 2020 -0600

    include/nuttx/sched_note.h: nxstyle fixes.
---
 include/nuttx/sched_note.h | 108 +++++++++++++++++++++++++++++----------------
 1 file changed, 69 insertions(+), 39 deletions(-)

diff --git a/include/nuttx/sched_note.h b/include/nuttx/sched_note.h
index bb7f032..721d234 100644
--- a/include/nuttx/sched_note.h
+++ b/include/nuttx/sched_note.h
@@ -1,35 +1,20 @@
 /****************************************************************************
  * include/nuttx/sched_note.h
  *
- *   Copyright (C) 2016 Gregory Nutt. All rights reserved.
- *   Author: Gregory Nutt <gn...@nuttx.org>
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.  The
+ * ASF licenses this file to you 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
  *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
+ *   http://www.apache.org/licenses/LICENSE-2.0
  *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- * 3. Neither the name NuttX nor the names of its contributors may be
- *    used to endorse or promote products derived from this software
- *    without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
- * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
- * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
- * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
- * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
- * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
- * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- * POSSIBILITY OF SUCH DAMAGE.
+ * 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.
  *
  ****************************************************************************/
 
@@ -107,6 +92,15 @@ enum note_type_e
   NOTE_SPINLOCK_UNLOCK = 16,
   NOTE_SPINLOCK_ABORT  = 17
 #endif
+#ifdef CONFIG_SCHED_INSTRUMENTATION_SYSCALL
+  ,
+  NOTE_SYSCALL_ENTER   = 18,
+  NOTE_SYSCALL_LEAVE   = 19
+#endif
+#ifdef CONFIG_SCHED_INSTRUMENTATION_IRQHANDLER
+  ,
+  NOTE_IRQHANDLER      = 20
+#endif
 };
 
 /* This structure provides the common header of each note */
@@ -226,7 +220,9 @@ struct note_csection_s
 #endif /* CONFIG_SCHED_INSTRUMENTATION_CSECTION */
 
 #ifdef CONFIG_SCHED_INSTRUMENTATION_SPINLOCKS
-/* This is the specific form of the NOTE_SPINLOCK_LOCK/LOCKED/UNLOCK/ABORT note */
+/* This is the specific form of the NOTE_SPINLOCK_LOCK/LOCKED/UNLOCK/ABORT
+ * note.
+ */
 
 struct note_spinlock_s
 {
@@ -235,23 +231,53 @@ struct note_spinlock_s
   uint8_t nsp_value;            /* Value of spinlock */
 };
 #endif /* CONFIG_SCHED_INSTRUMENTATION_SPINLOCKS */
+
+#ifdef CONFIG_SCHED_INSTRUMENTATION_SYSCALL
+/* This is the specific form of the NOTE_SYSCALL_ENTER/LEAVE notes */
+
+struct note_syscall_enter_s
+{
+  struct note_common_s nsc_cmn; /* Common note parameters */
+  int nsc_nr;                   /* System call number */
+  bool nsc_enter;               /* true:  Entering system call */
+};
+
+struct note_syscall_leave_s
+{
+  struct note_common_s nsc_cmn; /* Common note parameters */
+  uintptr_t nsc_result;         /* Result of the system call */
+  int nsc_nr;                   /* System call number */
+  bool nsc_enter;               /* false:  Leaving system call */
+};
+#endif /* CONFIG_SCHED_INSTRUMENTATION_SYSCALL */
+
+#ifdef CONFIG_SCHED_INSTRUMENTATION_IRQHANDLER
+/* This is the specific form of the NOTE_IRQHANDLER note */
+
+struct note_irqhandler_s
+{
+  struct note_common_s nih_cmn; /* Common note parameters */
+  int nih_irq;                  /* IRQ number */
+  bool nih_enter;               /* true:  Entering handler */
+};
+#endif /* CONFIG_SCHED_INSTRUMENTATION_IRQHANDLER */
 #endif /* CONFIG_SCHED_INSTRUMENTATION_BUFFER */
 
 /****************************************************************************
  * Public Function Prototypes
  ****************************************************************************/
 
-/********************************************************************************
+/****************************************************************************
  * Name: sched_note_*
  *
  * Description:
- *   If instrumentation of the scheduler is enabled, then some outboard logic
- *   must provide the following interfaces.  These interfaces are not available
- *   to application code.
+ *   If instrumentation of the scheduler is enabled, then some outboard
+ *   logic must provide the following interfaces.  These interfaces are not
+ *   available to application code.
  *
  *   NOTE: if CONFIG_SCHED_INSTRUMENTATION_BUFFER, then these interfaces are
- *   *not* available to the platform-specific logic.  Rather, they provided by
- *   the note buffering logic.  See sched_note_get() below.
+ *   *not* available to the platform-specific logic.  Rather, they provided
+ *   by the note buffering logic.  See sched_note_get() below.
  *
  * Input Parameters:
  *   tcb - The TCB of the thread.
@@ -259,7 +285,7 @@ struct note_spinlock_s
  * Returned Value:
  *   None
  *
- ********************************************************************************/
+ ****************************************************************************/
 
 void sched_note_start(FAR struct tcb_s *tcb);
 void sched_note_stop(FAR struct tcb_s *tcb);
@@ -295,10 +321,14 @@ void sched_note_csection(FAR struct tcb_s *tcb, bool enter);
 #endif
 
 #ifdef CONFIG_SCHED_INSTRUMENTATION_SPINLOCKS
-void sched_note_spinlock(FAR struct tcb_s *tcb, FAR volatile void *spinlock);
-void sched_note_spinlocked(FAR struct tcb_s *tcb, FAR volatile void *spinlock);
-void sched_note_spinunlock(FAR struct tcb_s *tcb, FAR volatile void *spinlock);
-void sched_note_spinabort(FAR struct tcb_s *tcb, FAR volatile void *spinlock);
+void sched_note_spinlock(FAR struct tcb_s *tcb,
+                         FAR volatile void *spinlock);
+void sched_note_spinlocked(FAR struct tcb_s *tcb,
+                           FAR volatile void *spinlock);
+void sched_note_spinunlock(FAR struct tcb_s *tcb,
+                           FAR volatile void *spinlock);
+void sched_note_spinabort(FAR struct tcb_s *tcb,
+                          FAR volatile void *spinlock);
 #else
 #  define sched_note_spinlock(t,s)
 #  define sched_note_spinlocked(t,s)