[PATCH v3 3/3] Rework i386 Paravirtualization to have paravirt.h

Joel Sherrill joel at rtems.org
Wed Feb 21 20:07:51 UTC 2018


---
 cpukit/score/cpu/i386/cpu.c                        |  2 +-
 cpukit/score/cpu/i386/include/rtems/score/cpu.h    |  2 +-
 .../cpu/i386/include/rtems/score/interrupts.h      |  2 +-
 .../score/cpu/i386/include/rtems/score/paravirt.h  | 63 ++++++++++++++++++++++
 cpukit/score/cpu/i386/include/rtems/score/types.h  |  3 ++
 5 files changed, 69 insertions(+), 3 deletions(-)
 create mode 100644 cpukit/score/cpu/i386/include/rtems/score/paravirt.h

diff --git a/cpukit/score/cpu/i386/cpu.c b/cpukit/score/cpu/i386/cpu.c
index c9434f7..a16718a 100644
--- a/cpukit/score/cpu/i386/cpu.c
+++ b/cpukit/score/cpu/i386/cpu.c
@@ -199,7 +199,7 @@ uint32_t   _CPU_ISR_Get_level( void )
 {
   uint32_t   level;
 
-#if !defined(RTEMS_PARAVIRT)
+#if !defined(CPU_DISABLE_INLINE_ISR_DISABLE_ENABLE)
   i386_get_interrupt_level( level );
 #else
   level = i386_get_interrupt_level();
diff --git a/cpukit/score/cpu/i386/include/rtems/score/cpu.h b/cpukit/score/cpu/i386/include/rtems/score/cpu.h
index f78149c..f1ed932 100644
--- a/cpukit/score/cpu/i386/include/rtems/score/cpu.h
+++ b/cpukit/score/cpu/i386/include/rtems/score/cpu.h
@@ -381,7 +381,7 @@ extern Context_Control_fp _CPU_Null_fp_context;
  *     + set a particular level
  */
 
-#if !defined(RTEMS_PARAVIRT)
+#if !defined(CPU_DISABLE_INLINE_ISR_DISABLE_ENABLE)
 #define _CPU_ISR_Disable( _level ) i386_disable_interrupts( _level )
 
 #define _CPU_ISR_Enable( _level )  i386_enable_interrupts( _level )
diff --git a/cpukit/score/cpu/i386/include/rtems/score/interrupts.h b/cpukit/score/cpu/i386/include/rtems/score/interrupts.h
index 3a7971c..c47176a 100644
--- a/cpukit/score/cpu/i386/include/rtems/score/interrupts.h
+++ b/cpukit/score/cpu/i386/include/rtems/score/interrupts.h
@@ -33,7 +33,7 @@ typedef int  (*rtems_raw_irq_is_enabled)	(const struct __rtems_raw_irq_connect_d
  * 
  */
 /**@{**/
-#if !defined(RTEMS_PARAVIRT)
+#if !defined(CPU_DISABLE_INLINE_ISR_DISABLE_ENABLE)
 #define i386_disable_interrupts( _level ) \
   { \
     __asm__ volatile ( "pushf ; \
diff --git a/cpukit/score/cpu/i386/include/rtems/score/paravirt.h b/cpukit/score/cpu/i386/include/rtems/score/paravirt.h
new file mode 100644
index 0000000..788ffed
--- /dev/null
+++ b/cpukit/score/cpu/i386/include/rtems/score/paravirt.h
@@ -0,0 +1,63 @@
+/**
+ * @file
+ *
+ * @brief i386 Paravirtualization Definitions
+ *
+ * This include file contains definitions pertaining to paravirtualization
+ * of the i386 port.
+ */
+
+/*
+ *  COPYRIGHT (c) 2018.
+ *  On-Line Applications Research Corporation (OAR).
+ *
+ *  The license and distribution terms for this file may in
+ *  the file LICENSE in this distribution or at
+ *  http://www.rtems.org/license/LICENSE.
+ */
+
+
+#ifndef RTEMS_PARAVIRT
+#error "This file should only be included with paravirtualization is enabled."
+#endif
+
+#ifndef _RTEMS_SCORE_PARAVIRT_H
+#define _RTEMS_SCORE_PARAVIRT_H
+
+/**
+ * @defgroup Paravirti386 Paravirtualization i386 Support
+ *
+ * @ingroup Score
+ *
+ * This handler encapulates the functionality (primarily conditional
+ * feature defines) related to paravirtualization on the i386.
+ *
+ * Paravirtualization on the i386 makes the following assumptions:
+ *
+ *   - RTEMS executes in user space
+ *   - Interrupt enable/disable support using the MSR must be disabled
+ *     and replaced with BSP provided methods which are adapted to the
+ *     hosting environment.
+ */
+
+#ifndef ASM
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif  /* !ASM */
+
+/**
+ * In a paravirtualized environment, RTEMS executes in user space
+ * and cannot disable/enable external exceptions (e.g. interrupts).
+ * The BSP which acts as an adapter to the hosting environment will
+ * provide the interrupt enable/disable methods.
+ */
+#define CPU_DISABLE_INLINE_ISR_DISABLE_ENABLE
+
+#endif
diff --git a/cpukit/score/cpu/i386/include/rtems/score/types.h b/cpukit/score/cpu/i386/include/rtems/score/types.h
index 00555d4..75414c4 100644
--- a/cpukit/score/cpu/i386/include/rtems/score/types.h
+++ b/cpukit/score/cpu/i386/include/rtems/score/types.h
@@ -20,6 +20,9 @@
 #define _RTEMS_SCORE_TYPES_H
 
 #include <rtems/score/basedefs.h>
+#if defined(RTEMS_PARAVIRT)
+#include <rtems/score/paravirt.h>
+#endif
 
 #ifndef ASM
 
-- 
1.8.3.1




More information about the devel mailing list