<div dir="ltr"><div>2017-08-20 5:18 GMT+02:00 Hesham Almatary <span dir="ltr"><<a href="mailto:heshamelmatary@gmail.com" target="_blank">heshamelmatary@gmail.com</a>></span>:<br></div><div class="gmail_extra"><div class="gmail_quote"><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div class="gmail-HOEnZb"><div class="gmail-h5">On Thu, Aug 17, 2017 at 1:13 AM, Denis Obrezkov <<a href="mailto:denisobrezkov@gmail.com">denisobrezkov@gmail.com</a>> wrote:<br>
> ---<br>
>  cpukit/score/cpu/riscv32/<wbr>rtems/score/cpu.h | 18 ++++++++++++------<br>
>  1 file changed, 12 insertions(+), 6 deletions(-)<br>
><br>
> diff --git a/cpukit/score/cpu/riscv32/<wbr>rtems/score/cpu.h b/cpukit/score/cpu/riscv32/<wbr>rtems/score/cpu.h<br>
> index 8f8a864..9b484e6 100644<br>
> --- a/cpukit/score/cpu/riscv32/<wbr>rtems/score/cpu.h<br>
> +++ b/cpukit/score/cpu/riscv32/<wbr>rtems/score/cpu.h<br>
> @@ -455,7 +455,7 @@ Context_Control_fp  _CPU_Null_fp_context;<br>
>   *<br>
>   */<br>
><br>
> -#define CPU_STACK_MINIMUM_SIZE  4096<br>
> +#define CPU_STACK_MINIMUM_SIZE  700<br>
><br>
>  /*<br>
>   *  CPU's worst alignment requirement for data types on a byte boundary.  This<br>
> @@ -538,7 +538,6 @@ Context_Control_fp  _CPU_Null_fp_context;<br>
>   *  level is returned in _level.<br>
>   *<br>
>   */<br>
> -<br>
>  static inline uint32_t riscv_interrupt_disable( void )<br>
>  {<br>
>    register uint32_t sstatus;<br>
> @@ -549,13 +548,15 @@ static inline uint32_t riscv_interrupt_disable( void )<br>
>                          "csrw sstatus, %[temp]; \t"<br>
>                          : [temp] "=r" (temp) : [sstatus] "r" (sstatus):<br>
>                          );<br>
> +#elif FE3XX<br>
> +  __asm__ volatile ("csrci mstatus, 0x8");<br>
> +  (void)temp;<br>
</div></div>Consider implementing this proprely as we discussed before. Also,<br>
there's no need for the #elif FE3XX; just modify the #else below.<br>
Enabling/disabling global interrupts in RISC-V (and this file) is<br>
ISA/RISC-V specific, not BSP specific.<br>
<span class="gmail-"><br>
>  #else<br>
>    __asm__ __volatile__ ("csrr %[sstatus], mstatus; \t"<br>
>                          "andi %[temp], %[sstatus], -2; \t"<br>
>                          "csrw mstatus, %[temp]; \t"<br>
>                          : [temp] "=r" (temp) : [sstatus] "r" (sstatus):<br>
>                          );<br>
> -<br>
>  #endif<br>
>    return sstatus;<br>
>  }<br>
> @@ -565,15 +566,18 @@ static inline void riscv_interrupt_enable(uint32_<wbr>t level)<br>
>  #ifdef SEL4<br>
>    __asm__ __volatile__ ("csrw sstatus, %[level];"<br>
>                          :: [level] "r" (level):);<br>
> +#elif FE3XX<br>
> +  __asm__ volatile ("csrsi mstatus, 0x8");<br>
</span>ditto<br>
<span class="gmail-">>  #else<br>
>    __asm__ __volatile__ ("csrw mstatus, %[level];"<br>
>                          :: [level] "r" (level):);<br>
> -<br>
>  #endif<br>
>  }<br>
><br>
>  #define _CPU_ISR_Disable( _level ) \<br>
> -    _level = riscv_interrupt_disable()<br>
> +    do { \<br>
> +    _level = riscv_interrupt_disable();\<br>
> +    } while(0)<br>
><br>
>  /*<br>
>   *  Enable interrupts to the previous level (returned by _CPU_ISR_Disable).<br>
> @@ -583,7 +587,9 @@ static inline void riscv_interrupt_enable(uint32_<wbr>t level)<br>
>   */<br>
><br>
>  #define _CPU_ISR_Enable( _level )  \<br>
> -  riscv_interrupt_enable( _level )<br>
> +    do {\<br>
> +      riscv_interrupt_enable( _level ); \<br>
> +    } while(0)<br>
><br>
>  /*<br>
>   *  This temporarily restores the interrupt to _level before immediately<br>
> --<br>
> 2.1.4<br>
><br>
</span>> ______________________________<wbr>_________________<br>
> devel mailing list<br>
> <a href="mailto:devel@rtems.org">devel@rtems.org</a><br>
> <a href="http://lists.rtems.org/mailman/listinfo/devel" rel="noreferrer" target="_blank">http://lists.rtems.org/<wbr>mailman/listinfo/devel</a><br>
<span class="gmail-HOEnZb"><font color="#888888"><br>
<br>
<br>
--<br>
Hesham<br>
</font></span></blockquote></div><br>As I answered you earlier I tried your solution and it just didn't work.</div><div class="gmail_extra">I can try it again on the next iteration of the reviewing process, but as I said</div><div class="gmail_extra">the _level value just isn't preserved between interrupts enabling/disabling.<br clear="all"><div><br></div>-- <br><div class="gmail_signature">Regards, Denis Obrezkov</div>
</div></div>