forked from epagris/FreeRTOS-Kernel
		
	Change xPortRaisePrivilege and vPortResetPrivilege to macros
This prevents non-kernel code from calling these functions. Signed-off-by: Gaurav Aggarwal <aggarg@amazon.com>
This commit is contained in:
		
							parent
							
								
									78da9cb261
								
							
						
					
					
						commit
						7a3848753b
					
				@ -168,11 +168,41 @@
 | 
			
		||||
 | 
			
		||||
    #else /* MPU_WRAPPERS_INCLUDED_FROM_API_FILE */
 | 
			
		||||
 | 
			
		||||
/* Ensure API functions go in the privileged execution section. */
 | 
			
		||||
        /* Ensure API functions go in the privileged execution section. */
 | 
			
		||||
        #define PRIVILEGED_FUNCTION     __attribute__( ( section( "privileged_functions" ) ) )
 | 
			
		||||
        #define PRIVILEGED_DATA         __attribute__( ( section( "privileged_data" ) ) )
 | 
			
		||||
        #define FREERTOS_SYSTEM_CALL    __attribute__( ( section( "freertos_system_calls" ) ) )
 | 
			
		||||
 | 
			
		||||
        /**
 | 
			
		||||
         * @brief Calls the port specific code to raise the privilege.
 | 
			
		||||
         *
 | 
			
		||||
         * Sets xRunningPrivileged to pdFALSE if privilege was raised, else sets
 | 
			
		||||
         * it to pdTRUE.
 | 
			
		||||
         */
 | 
			
		||||
        #define xPortRaisePrivilege( xRunningPrivileged )                      \
 | 
			
		||||
        {                                                                      \
 | 
			
		||||
            /* Check whether the processor is already privileged. */           \
 | 
			
		||||
            xRunningPrivileged = portIS_PRIVILEGED();                          \
 | 
			
		||||
                                                                               \
 | 
			
		||||
            /* If the processor is not already privileged, raise privilege. */ \
 | 
			
		||||
            if( xRunningPrivileged == pdFALSE )                                \
 | 
			
		||||
            {                                                                  \
 | 
			
		||||
                portRAISE_PRIVILEGE();                                         \
 | 
			
		||||
            }                                                                  \
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        /**
 | 
			
		||||
         * @brief If xRunningPrivileged is not pdTRUE, calls the port specific
 | 
			
		||||
         * code to reset the privilege, otherwise does nothing.
 | 
			
		||||
         */
 | 
			
		||||
        #define vPortResetPrivilege( xRunningPrivileged )   \
 | 
			
		||||
        {                                                   \
 | 
			
		||||
            if( xRunningPrivileged == pdFALSE )             \
 | 
			
		||||
            {                                               \
 | 
			
		||||
                portRESET_PRIVILEGE();                      \
 | 
			
		||||
            }                                               \
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
    #endif /* MPU_WRAPPERS_INCLUDED_FROM_API_FILE */
 | 
			
		||||
 | 
			
		||||
#else /* portUSING_MPU_WRAPPERS */
 | 
			
		||||
 | 
			
		||||
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							@ -160,17 +160,14 @@ BaseType_t xIsPrivileged( void ) __attribute__( ( naked ) );
 | 
			
		||||
void vResetPrivilege( void ) __attribute__( ( naked ) );
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * @brief Calls the port specific code to raise the privilege.
 | 
			
		||||
 *
 | 
			
		||||
 * @return pdFALSE if privilege was raised, pdTRUE otherwise.
 | 
			
		||||
 * @brief Enter critical section.
 | 
			
		||||
 */
 | 
			
		||||
extern BaseType_t xPortRaisePrivilege( void );
 | 
			
		||||
void vPortEnterCritical( void ) FREERTOS_SYSTEM_CALL;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * @brief If xRunningPrivileged is not pdTRUE, calls the port specific
 | 
			
		||||
 * code to reset the privilege, otherwise does nothing.
 | 
			
		||||
 * @brief Exit from critical section.
 | 
			
		||||
 */
 | 
			
		||||
extern void vPortResetPrivilege( BaseType_t xRunningPrivileged );
 | 
			
		||||
void vPortExitCritical( void ) FREERTOS_SYSTEM_CALL;
 | 
			
		||||
/*-----------------------------------------------------------*/
 | 
			
		||||
 | 
			
		||||
/* Each task maintains its own interrupt status in the critical nesting
 | 
			
		||||
@ -483,7 +480,8 @@ void vPortEndScheduler( void )
 | 
			
		||||
 | 
			
		||||
void vPortEnterCritical( void )
 | 
			
		||||
{
 | 
			
		||||
    BaseType_t xRunningPrivileged = xPortRaisePrivilege();
 | 
			
		||||
    BaseType_t xRunningPrivileged;
 | 
			
		||||
    xPortRaisePrivilege( xRunningPrivileged );
 | 
			
		||||
 | 
			
		||||
    portDISABLE_INTERRUPTS();
 | 
			
		||||
    uxCriticalNesting++;
 | 
			
		||||
@ -494,7 +492,8 @@ void vPortEnterCritical( void )
 | 
			
		||||
 | 
			
		||||
void vPortExitCritical( void )
 | 
			
		||||
{
 | 
			
		||||
    BaseType_t xRunningPrivileged = xPortRaisePrivilege();
 | 
			
		||||
    BaseType_t xRunningPrivileged;
 | 
			
		||||
    xPortRaisePrivilege( xRunningPrivileged );
 | 
			
		||||
 | 
			
		||||
    configASSERT( uxCriticalNesting );
 | 
			
		||||
    uxCriticalNesting--;
 | 
			
		||||
 | 
			
		||||
@ -173,17 +173,14 @@ BaseType_t xIsPrivileged( void ) __attribute__( ( naked ) );
 | 
			
		||||
void vResetPrivilege( void ) __attribute__( ( naked ) );
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * @brief Calls the port specific code to raise the privilege.
 | 
			
		||||
 *
 | 
			
		||||
 * @return pdFALSE if privilege was raised, pdTRUE otherwise.
 | 
			
		||||
 * @brief Enter critical section.
 | 
			
		||||
 */
 | 
			
		||||
extern BaseType_t xPortRaisePrivilege( void );
 | 
			
		||||
void vPortEnterCritical( void ) FREERTOS_SYSTEM_CALL;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * @brief If xRunningPrivileged is not pdTRUE, calls the port specific
 | 
			
		||||
 * code to reset the privilege, otherwise does nothing.
 | 
			
		||||
 * @brief Exit from critical section.
 | 
			
		||||
 */
 | 
			
		||||
extern void vPortResetPrivilege( BaseType_t xRunningPrivileged );
 | 
			
		||||
void vPortExitCritical( void ) FREERTOS_SYSTEM_CALL;
 | 
			
		||||
/*-----------------------------------------------------------*/
 | 
			
		||||
 | 
			
		||||
/* Each task maintains its own interrupt status in the critical nesting
 | 
			
		||||
@ -519,7 +516,8 @@ void vPortEndScheduler( void )
 | 
			
		||||
 | 
			
		||||
void vPortEnterCritical( void )
 | 
			
		||||
{
 | 
			
		||||
    BaseType_t xRunningPrivileged = xPortRaisePrivilege();
 | 
			
		||||
    BaseType_t xRunningPrivileged;
 | 
			
		||||
    xPortRaisePrivilege( xRunningPrivileged );
 | 
			
		||||
 | 
			
		||||
    portDISABLE_INTERRUPTS();
 | 
			
		||||
    uxCriticalNesting++;
 | 
			
		||||
@ -530,7 +528,8 @@ void vPortEnterCritical( void )
 | 
			
		||||
 | 
			
		||||
void vPortExitCritical( void )
 | 
			
		||||
{
 | 
			
		||||
    BaseType_t xRunningPrivileged = xPortRaisePrivilege();
 | 
			
		||||
    BaseType_t xRunningPrivileged;
 | 
			
		||||
    xPortRaisePrivilege( xRunningPrivileged );
 | 
			
		||||
 | 
			
		||||
    configASSERT( uxCriticalNesting );
 | 
			
		||||
    uxCriticalNesting--;
 | 
			
		||||
 | 
			
		||||
@ -186,17 +186,14 @@ void vPortSVCHandler_C( uint32_t * pulParam );
 | 
			
		||||
extern void vPortRestoreContextOfFirstTask( void ) PRIVILEGED_FUNCTION;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * @brief Calls the port specific code to raise the privilege.
 | 
			
		||||
 *
 | 
			
		||||
 * @return pdFALSE if privilege was raised, pdTRUE otherwise.
 | 
			
		||||
 * @brief Enter critical section.
 | 
			
		||||
 */
 | 
			
		||||
extern BaseType_t xPortRaisePrivilege( void );
 | 
			
		||||
void vPortEnterCritical( void ) FREERTOS_SYSTEM_CALL;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * @brief If xRunningPrivileged is not pdTRUE, calls the port specific
 | 
			
		||||
 * code to reset the privilege, otherwise does nothing.
 | 
			
		||||
 * @brief Exit from critical section.
 | 
			
		||||
 */
 | 
			
		||||
extern void vPortResetPrivilege( BaseType_t xRunningPrivileged );
 | 
			
		||||
void vPortExitCritical( void ) FREERTOS_SYSTEM_CALL;
 | 
			
		||||
/*-----------------------------------------------------------*/
 | 
			
		||||
 | 
			
		||||
/* Each task maintains its own interrupt status in the critical nesting
 | 
			
		||||
@ -447,13 +444,12 @@ void vPortEndScheduler( void )
 | 
			
		||||
 | 
			
		||||
void vPortEnterCritical( void )
 | 
			
		||||
{
 | 
			
		||||
    BaseType_t xRunningPrivileged = xPortRaisePrivilege();
 | 
			
		||||
    BaseType_t xRunningPrivileged;
 | 
			
		||||
    xPortRaisePrivilege( xRunningPrivileged );
 | 
			
		||||
 | 
			
		||||
    portDISABLE_INTERRUPTS();
 | 
			
		||||
    uxCriticalNesting++;
 | 
			
		||||
 | 
			
		||||
    vPortResetPrivilege( xRunningPrivileged );
 | 
			
		||||
 | 
			
		||||
    /* This is not the interrupt safe version of the enter critical function so
 | 
			
		||||
     * assert() if it is being called from an interrupt context.  Only API
 | 
			
		||||
     * functions that end in "FromISR" can be used in an interrupt.  Only assert if
 | 
			
		||||
@ -463,12 +459,15 @@ void vPortEnterCritical( void )
 | 
			
		||||
    {
 | 
			
		||||
        configASSERT( ( portNVIC_INT_CTRL_REG & portVECTACTIVE_MASK ) == 0 );
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    vPortResetPrivilege( xRunningPrivileged );
 | 
			
		||||
}
 | 
			
		||||
/*-----------------------------------------------------------*/
 | 
			
		||||
 | 
			
		||||
void vPortExitCritical( void )
 | 
			
		||||
{
 | 
			
		||||
    BaseType_t xRunningPrivileged = xPortRaisePrivilege();
 | 
			
		||||
    BaseType_t xRunningPrivileged;
 | 
			
		||||
    xPortRaisePrivilege( xRunningPrivileged );
 | 
			
		||||
 | 
			
		||||
    configASSERT( uxCriticalNesting );
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -187,17 +187,14 @@ BaseType_t xIsPrivileged( void );
 | 
			
		||||
void vResetPrivilege( void );
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * @brief Calls the port specific code to raise the privilege.
 | 
			
		||||
 *
 | 
			
		||||
 * @return pdFALSE if privilege was raised, pdTRUE otherwise.
 | 
			
		||||
 * @brief Enter critical section.
 | 
			
		||||
 */
 | 
			
		||||
extern BaseType_t xPortRaisePrivilege( void );
 | 
			
		||||
void vPortEnterCritical( void ) FREERTOS_SYSTEM_CALL;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * @brief If xRunningPrivileged is not pdTRUE, calls the port specific
 | 
			
		||||
 * code to reset the privilege, otherwise does nothing.
 | 
			
		||||
 * @brief Exit from critical section.
 | 
			
		||||
 */
 | 
			
		||||
extern void vPortResetPrivilege( BaseType_t xRunningPrivileged );
 | 
			
		||||
void vPortExitCritical( void ) FREERTOS_SYSTEM_CALL;
 | 
			
		||||
/*-----------------------------------------------------------*/
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
@ -522,7 +519,8 @@ void vPortEndScheduler( void )
 | 
			
		||||
 | 
			
		||||
void vPortEnterCritical( void )
 | 
			
		||||
{
 | 
			
		||||
    BaseType_t xRunningPrivileged = xPortRaisePrivilege();
 | 
			
		||||
    BaseType_t xRunningPrivileged;
 | 
			
		||||
    xPortRaisePrivilege( xRunningPrivileged );
 | 
			
		||||
 | 
			
		||||
    portDISABLE_INTERRUPTS();
 | 
			
		||||
    uxCriticalNesting++;
 | 
			
		||||
@ -533,7 +531,8 @@ void vPortEnterCritical( void )
 | 
			
		||||
 | 
			
		||||
void vPortExitCritical( void )
 | 
			
		||||
{
 | 
			
		||||
    BaseType_t xRunningPrivileged = xPortRaisePrivilege();
 | 
			
		||||
    BaseType_t xRunningPrivileged;
 | 
			
		||||
    xPortRaisePrivilege( xRunningPrivileged );
 | 
			
		||||
 | 
			
		||||
    configASSERT( uxCriticalNesting );
 | 
			
		||||
    uxCriticalNesting--;
 | 
			
		||||
 | 
			
		||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user