Generally looks good except you are mentioning a new .h file which is not present.
+#include <virtualizationlayercpu.h> I would assume that should be part of a patch in this series and that it should be "rtems/virtualizationlayercpu.h". My only other comment is that the use of only cpu.c and cpu_asm.c dates to the dawn of RTEMS. If you want to add score/cpu/i386/cpuidle.c and move that code into its own file, I wouldn't be opposed to it. But I don't consider that a hard requirement. The other two patches look OK if folks like the name. --joel On 11/27/2013 12:00 PM, Philipp Eppelt wrote: > --- > cpukit/score/cpu/i386/cpu.c | 18 +++++++++ > cpukit/score/cpu/i386/rtems/score/cpu.h | 51 > ++++++++++++++++++++------ > cpukit/score/cpu/i386/rtems/score/interrupts.h | 31 ++++++++++++++++ > 3 files changed, 88 insertions(+), 12 deletions(-) > > diff --git a/cpukit/score/cpu/i386/cpu.c b/cpukit/score/cpu/i386/cpu.c > index c87a76d..0a6139f 100644 > --- a/cpukit/score/cpu/i386/cpu.c > +++ b/cpukit/score/cpu/i386/cpu.c > @@ -97,6 +97,22 @@ uint32_t _CPU_ISR_Get_level( void ) > return level; > } > > + > +#if defined(RTEMS_PARAVIRT) > + > +#include <virtualizationlayercpu.h> > + > +void *_CPU_Thread_Idle_body( uintptr_t ignored ) > +{ > + while(1) > + { > + _CPU_Virtual_idle_thread(); > + } > + return NULL; > +} > + > +#else > + > void *_CPU_Thread_Idle_body( uintptr_t ignored ) > { > while(1){ > @@ -105,6 +121,8 @@ void *_CPU_Thread_Idle_body( uintptr_t ignored ) > return NULL; > } > > +#endif /*RTEMS_PARAVIRT*/ > + > struct Frame_ { > struct Frame_ *up; > uintptr_t pc; > diff --git a/cpukit/score/cpu/i386/rtems/score/cpu.h > b/cpukit/score/cpu/i386/rtems/score/cpu.h > index 43422ed..a8c2ed3 100644 > --- a/cpukit/score/cpu/i386/rtems/score/cpu.h > +++ b/cpukit/score/cpu/i386/rtems/score/cpu.h > @@ -376,11 +376,24 @@ SCORE_EXTERN Context_Control_fp _CPU_Null_fp_context; > > #define _CPU_ISR_Flash( _level ) i386_flash_interrupts( _level ) > > -#define _CPU_ISR_Set_level( _new_level ) \ > - { \ > - if ( _new_level ) __asm__ volatile ( "cli" ); \ > - else __asm__ volatile ( "sti" ); \ > - } > +#if defined(RTEMS_PARAVIRT) > + #include <virtualizationlayercpu.h> > + > + #define _CPU_ISR_Set_level( _new_level ) \ > + { \ > + if( _new_level ) _CPU_Virtual_Interrupts_close(); \ > + else _CPU_Virtual_Interrupts_open(); \ > + } > + > +#else > + > + #define _CPU_ISR_Set_level( _new_level ) \ > + { \ > + if ( _new_level ) __asm__ volatile ( "cli" ); \ > + else __asm__ volatile ( "sti" ); \ > + } > + > +#endif /*RTEMS_PARAVIRT*/ > > uint32_t _CPU_ISR_Get_level( void ); > > @@ -497,16 +510,30 @@ uint32_t _CPU_ISR_Get_level( void ); > * + disable interrupts and halt the CPU > */ > > -#define _CPU_Fatal_halt( _error ) \ > +#if defined(RTEMS_PARAVIRT) > + > + #include <virtualizationlayercpu.h> > + > + #define _CPU_Fatal_halt( _error ) \ > { \ > - uint32_t _error_lvalue = ( _error ); \ > - __asm__ volatile ( "cli ; \ > - movl %0,%%eax ; \ > - hlt" \ > - : "=r" ((_error_lvalue)) : "0" ((_error_lvalue)) \ > - ); \ > + _CPU_Virtual_Interrupts_close(); \ > + _CPU_Virtual_exec_stop_error( _error ); \ > } > > +#else > + > + #define _CPU_Fatal_halt( _error ) \ > + { \ > + uint32_t _error_lvalue = ( _error ); \ > + __asm__ volatile ( "cli ; \ > + movl %0,%%eax ; \ > + hlt" \ > + : "=r" ((_error_lvalue)) : "0" ((_error_lvalue)) \ > + ); \ > + } > + > +#endif /*RTEMS_PARAVIRT*/ > + > #endif /* ASM */ > > /* end of Fatal Error manager macros */ > diff --git a/cpukit/score/cpu/i386/rtems/score/interrupts.h > b/cpukit/score/cpu/i386/rtems/score/interrupts.h > index bed6330..1bc9391 100644 > --- a/cpukit/score/cpu/i386/rtems/score/interrupts.h > +++ b/cpukit/score/cpu/i386/rtems/score/interrupts.h > @@ -33,6 +33,36 @@ typedef int (*rtems_raw_irq_is_enabled) (const struct > __rtems_raw_irq_connect_d > * > */ > /**@{**/ > +#if defined(RTEMS_PARAVIRT) > + #include <virtualizationlayercpu.h> > + > +#define i386_disable_interrupts( _level ) \ > + { \ > + _CPU_Virtual_Interrupts_disable( _level ); \ > + } > + > +#define i386_enable_interrupts( _level ) \ > + { \ > + _CPU_Virtual_Interrupts_enable( _level ); \ > + } > + > +#define i386_flash_interrupts( _level ) \ > + { \ > + _CPU_Virtual_Interrupts_enable(_level); \ > + _CPU_Virtual_Interrupts_disable(_level); \ > + } > + > +#define i386_get_interrupt_level( _level ) \ > + { \ > + _CPU_Virtual_Interrupts_get_level( _level ); \ > + } > + > +#define _CPU_ISR_Disable( _level ) i386_disable_interrupts( _level ) > +#define _CPU_ISR_Enable( _level ) i386_enable_interrupts( _level ) > + > + > +#else /*RTEMS_PARAVIRT*/ > + > > #define i386_disable_interrupts( _level ) \ > { \ > @@ -75,6 +105,7 @@ typedef int (*rtems_raw_irq_is_enabled) (const struct > __rtems_raw_irq_connect_d > #define _CPU_ISR_Disable( _level ) i386_disable_interrupts( _level ) > #define _CPU_ISR_Enable( _level ) i386_enable_interrupts( _level ) > > +#endif /*RTEMS_PARAVIRT*/ > /** @} */ > > #endif > -- Joel Sherrill, Ph.D. Director of Research & Development joel.sherr...@oarcorp.com On-Line Applications Research Ask me about RTEMS: a free RTOS Huntsville AL 35805 Support Available (256) 722-9985 _______________________________________________ rtems-devel mailing list rtems-devel@rtems.org http://www.rtems.org/mailman/listinfo/rtems-devel