447 lines
14 KiB
C
447 lines
14 KiB
C
/*
|
|
* Copyright (c) 2013-2019 Huawei Technologies Co., Ltd. All rights reserved.
|
|
* Copyright (c) 2020-2021 Huawei Device Co., Ltd. All rights reserved.
|
|
*
|
|
* Redistribution and use in source and binary forms, with or without modification,
|
|
* are permitted provided that the following conditions are met:
|
|
*
|
|
* 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 of the copyright holder 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 HOLDER 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.
|
|
*/
|
|
#ifndef _IT_POSIX_PTHREAD_H
|
|
#define _IT_POSIX_PTHREAD_H
|
|
|
|
#include "sched.h"
|
|
#include "signal.h"
|
|
#include "semaphore.h"
|
|
#include "sched.h"
|
|
#include "osTest.h"
|
|
#include "pthread.h"
|
|
#include "limits.h"
|
|
#include "unistd.h"
|
|
#include "mqueue.h"
|
|
#include "signal.h"
|
|
#include "sys/time.h"
|
|
|
|
#ifndef VERBOSE
|
|
#define VERBOSE 1
|
|
#endif
|
|
|
|
/* Some routines are part of the XSI Extensions */
|
|
|
|
#define LOSCFG_BASE_CORE_TSK_DEFAULT_STACK_SIZE (0x6000)
|
|
#define LOS_HwiCreate(ID, prio, mode, Func, arg) (-1)
|
|
#define HalIrqMask(ID)
|
|
#define TEST_TEST_HwiDelete(ID, NULL)
|
|
#define TEST_HwiTrigger(HWI_NUM_TEST)
|
|
#define LOS_TaskLock()
|
|
#define LOS_TaskUnlock()
|
|
#define LOS_MS2Tick(ms) (ms / 10)
|
|
#define OS_TASK_PRIORITY_HIGHEST 0
|
|
#define OS_TASK_PRIORITY_LOWEST 31
|
|
|
|
#define PTHREAD_NO_ERROR 0
|
|
#define PTHREAD_IS_ERROR (-1)
|
|
#define PTHREAD_SIGNAL_SUPPORT 0 /* 0 means that not support the signal */
|
|
#define PTHREAD_PRIORITY_TEST 20
|
|
#define PTHREAD_DEFAULT_STACK_SIZE (LOSCFG_BASE_CORE_TSK_DEFAULT_STACK_SIZE)
|
|
#define PTHREAD_KEY_NUM 10
|
|
#define THREAD_NUM 3
|
|
#define PTHREAD_TIMEOUT (THREAD_NUM * 2)
|
|
#define PTHREAD_INTHREAD_TEST 0 /* Control going to or is already for Thread */
|
|
#define PTHREAD_INMAIN_TEST 1 /* Control going to or is already for Main */
|
|
#define INVALID_PSHARED_VALUE (-100)
|
|
#define NUM_OF_CONDATTR 10
|
|
#define RUNTIME 5
|
|
#define PTHREAD_THREADS_NUM 3
|
|
#define TCOUNT 5 // Number of single-threaded polling
|
|
#define COUNT_LIMIT 7 // The number of times the signal is sent
|
|
#define HIGH_PRIORITY 5
|
|
#define LOW_PRIORITY 10
|
|
#define PTHREAD_EXIT_VALUE ((void *)100) /* The return code of the thread when using pthread_exit(). */
|
|
|
|
#define PTHREAD_EXISTED_NUM TASK_EXISTED_NUM
|
|
#define PTHREAD_EXISTED_SEM_NUM SEM_EXISTED_NUM
|
|
|
|
/* We are testing conformance to IEEE Std 1003.1, 2003 Edition */
|
|
#define _POSIX_C_SOURCE 200112L
|
|
|
|
#define uart_printf_func printf
|
|
|
|
/* The value below shall be >= to the # of CPU on the test architecture */
|
|
#define NCPU (4)
|
|
|
|
#define PRIORITY_OTHER (-1)
|
|
#define PRIORITY_FIFO 20
|
|
#define PRIORITY_RR 20
|
|
|
|
#define PTHREAD_TEST_BUG printf
|
|
|
|
#define CASE(det, expl, scp, spa, sco, sta, gua, ssi, desc, res) \
|
|
{ \
|
|
{ 0 }, det, expl, scp, spa, sco, sta, gua, ssi, desc, NULL, res, \
|
|
{ \
|
|
0 \
|
|
} \
|
|
}
|
|
#define CASE_POS(det, expl, scp, spa, sco, sta, gua, ssi, desc) CASE(det, expl, scp, spa, sco, sta, gua, ssi, desc, 0)
|
|
#define CASE_NEG(det, expl, scp, spa, sco, sta, gua, ssi, desc) CASE(det, expl, scp, spa, sco, sta, gua, ssi, desc, 1)
|
|
#define CASE_UNK(det, expl, scp, spa, sco, sta, gua, ssi, desc) CASE(det, expl, scp, spa, sco, sta, gua, ssi, desc, 2)
|
|
|
|
struct params {
|
|
INT32 policy;
|
|
INT32 priority;
|
|
char *policy_label;
|
|
INT32 status;
|
|
};
|
|
|
|
typedef struct {
|
|
/*
|
|
* Object to hold the given configuration,
|
|
* and which will be used to create the threads
|
|
*/
|
|
pthread_attr_t ta;
|
|
|
|
/* General parameters */
|
|
/* 0 => joinable; 1 => detached */
|
|
INT32 detached;
|
|
|
|
/* Scheduling parameters */
|
|
/*
|
|
* 0 => sched policy is inherited;
|
|
* 1 => sched policy from the attr param
|
|
*/
|
|
INT32 explicitsched;
|
|
/* 0 => default; 1=> SCHED_FIFO; 2=> SCHED_RR */
|
|
INT32 schedpolicy;
|
|
/*
|
|
* 0 => default sched param;
|
|
* 1 => max value for sched param;
|
|
* -1 => min value for sched param
|
|
*/
|
|
INT32 schedparam;
|
|
/*
|
|
* 0 => default contension scope;
|
|
* 1 => alternative contension scope
|
|
*/
|
|
INT32 altscope;
|
|
|
|
/* Stack parameters */
|
|
/* 0 => system manages the stack; 1 => stack is provided */
|
|
INT32 altstack;
|
|
/*
|
|
* 0 => default guardsize;
|
|
* 1=> guardsize is 0;
|
|
* 2=> guard is 1 page
|
|
* -- this setting only affect system stacks (not user's).
|
|
*/
|
|
INT32 guard;
|
|
/*
|
|
* 0 => default stack size;
|
|
* 1 => stack size specified (min value)
|
|
* -- ignored when stack is provided
|
|
*/
|
|
INT32 altsize;
|
|
|
|
/* Additionnal information */
|
|
/* object description */
|
|
char *descr;
|
|
/* Stores the stack start when an alternate stack is required */
|
|
void *bottom;
|
|
/*
|
|
* This thread creation is expected to:
|
|
* 0 => succeed; 1 => fail; 2 => unknown
|
|
*/
|
|
INT32 result;
|
|
/*
|
|
* This semaphore is used to signal the end of
|
|
* the detached threads execution
|
|
*/
|
|
sem_t sem;
|
|
} __scenario;
|
|
|
|
#define NSCENAR 10 // (sizeof(scenarii)/sizeof(scenarii[0]))
|
|
|
|
extern __scenario g_scenarii[];
|
|
|
|
extern pthread_key_t g_key;
|
|
extern pthread_key_t g_key1;
|
|
extern pthread_key_t g_key2;
|
|
extern pthread_key_t g_pthreadKeyTest[PTHREAD_KEY_NUM];
|
|
extern pthread_t g_newTh;
|
|
extern pthread_t g_newTh2;
|
|
extern UINT32 g_taskMaxNum;
|
|
extern pthread_once_t g_onceControl;
|
|
extern pthread_cond_t g_pthreadCondTest1;
|
|
extern pthread_mutex_t g_pthreadMutexTest1;
|
|
extern pthread_mutex_t g_pthreadMutexTest2;
|
|
extern INT32 g_startNum;
|
|
extern INT32 g_wakenNum;
|
|
extern INT32 g_t1Start;
|
|
extern INT32 g_signaled;
|
|
extern INT32 g_wokenUp;
|
|
extern INT32 g_lowDone;
|
|
extern INT32 g_pthreadSem;
|
|
extern INT32 g_pthreadScopeValue;
|
|
extern INT32 g_pthreadSchedInherit;
|
|
extern INT32 g_pthreadSchedPolicy;
|
|
|
|
extern sem_t g_pthreadSem1;
|
|
extern sem_t g_pthreadSem2;
|
|
|
|
extern pthread_t g_pthreadTestTh;
|
|
|
|
extern INT32 g_iCunitErrCode;
|
|
extern INT32 g_iCunitErrLineNo;
|
|
|
|
#ifdef LOSCFG_AARCH64
|
|
#define PTHREAD_STACK_MIN_TEST (PTHREAD_STACK_MIN * 3)
|
|
#else
|
|
#define PTHREAD_STACK_MIN_TEST PTHREAD_STACK_MIN
|
|
#endif
|
|
|
|
extern pthread_t g_Test_new_th;
|
|
|
|
struct testdata {
|
|
pthread_mutex_t mutex;
|
|
pthread_cond_t cond;
|
|
};
|
|
extern struct testdata g_td;
|
|
|
|
|
|
extern unsigned int sleep(unsigned int seconds);
|
|
extern unsigned int alarm(unsigned int seconds);
|
|
|
|
extern int map_errno(UINT32 err);
|
|
extern long sysconf(int name);
|
|
extern void posix_signal_start(void);
|
|
|
|
VOID ScenarInit(VOID);
|
|
VOID ScenarFini(VOID);
|
|
pthread_t TestPthreadSelf(void);
|
|
|
|
extern UINT32 PosixPthreadInit(pthread_attr_t *attr, INT32 pri);
|
|
|
|
#if defined(LOSCFG_USER_TEST_SMOKE)
|
|
VOID ItPosixPthread003(VOID);
|
|
VOID ItPosixPthread004(VOID);
|
|
VOID ItPosixPthread005(VOID);
|
|
VOID ItPosixPthread006(VOID);
|
|
VOID IT_POSIX_PTHREAD_009(VOID);
|
|
VOID ItPosixPthread018(VOID);
|
|
VOID ItPosixPthread019(VOID);
|
|
VOID ItPosixPthread020(VOID);
|
|
VOID ItPosixPthread021(VOID);
|
|
VOID ItPosixPthread022(VOID);
|
|
VOID ItPosixPthread203(VOID);
|
|
#endif
|
|
|
|
#if defined(LOSCFG_USER_TEST_FULL)
|
|
VOID ItPosixPthread001(VOID);
|
|
VOID ItPosixPthread002(VOID);
|
|
VOID ItPosixPthread007(VOID);
|
|
VOID IT_POSIX_PTHREAD_008(VOID);
|
|
VOID ItPosixPthread010(VOID);
|
|
VOID ItPosixPthread011(VOID);
|
|
VOID ItPosixPthread013(VOID);
|
|
VOID ItPosixPthread023(VOID);
|
|
VOID ItPosixPthread025(VOID);
|
|
VOID ItPosixPthread026(VOID);
|
|
VOID ItPosixPthread027(VOID);
|
|
VOID ItPosixPthread028(VOID);
|
|
VOID ItPosixPthread029(VOID);
|
|
VOID ItPosixPthread030(VOID);
|
|
VOID ItPosixPthread031(VOID);
|
|
VOID IT_POSIX_PTHREAD_032(VOID);
|
|
VOID IT_POSIX_PTHREAD_033(VOID);
|
|
VOID ItPosixPthread034(VOID);
|
|
VOID ItPosixPthread035(VOID);
|
|
VOID ItPosixPthread039(VOID);
|
|
VOID ItPosixPthread040(VOID);
|
|
VOID IT_POSIX_PTHREAD_041(VOID);
|
|
VOID ItPosixPthread042(VOID);
|
|
VOID ItPosixPthread044(VOID);
|
|
VOID ItPosixPthread045(VOID);
|
|
VOID ItPosixPthread046(VOID);
|
|
VOID IT_POSIX_PTHREAD_047(VOID);
|
|
VOID IT_POSIX_PTHREAD_048(VOID);
|
|
VOID IT_POSIX_PTHREAD_049(VOID);
|
|
VOID IT_POSIX_PTHREAD_050(VOID);
|
|
VOID ItPosixPthread051(VOID);
|
|
VOID ItPosixPthread052(VOID);
|
|
VOID ItPosixPthread053(VOID);
|
|
VOID ItPosixPthread054(VOID);
|
|
VOID ItPosixPthread055(VOID);
|
|
VOID IT_POSIX_PTHREAD_056(VOID);
|
|
VOID ItPosixPthread057(VOID);
|
|
VOID IT_POSIX_PTHREAD_058(VOID);
|
|
VOID ItPosixPthread059(VOID);
|
|
VOID ItPosixPthread060(VOID);
|
|
VOID ItPosixPthread061(VOID);
|
|
VOID ItPosixPthread062(VOID);
|
|
VOID ItPosixPthread063(VOID);
|
|
VOID ItPosixPthread064(VOID);
|
|
VOID ItPosixPthread066(VOID);
|
|
VOID IT_POSIX_PTHREAD_068(VOID);
|
|
VOID ItPosixPthread069(VOID);
|
|
VOID ItPosixPthread070(VOID);
|
|
VOID ItPosixPthread071(VOID);
|
|
VOID ItPosixPthread072(VOID);
|
|
VOID ItPosixPthread073(VOID);
|
|
VOID ItPosixPthread074(VOID);
|
|
VOID IT_POSIX_PTHREAD_075(VOID);
|
|
VOID ItPosixPthread078(VOID);
|
|
VOID ItPosixPthread079(VOID);
|
|
VOID ItPosixPthread080(VOID);
|
|
VOID ItPosixPthread081(VOID);
|
|
VOID ItPosixPthread082(VOID);
|
|
VOID ItPosixPthread083(VOID);
|
|
VOID ItPosixPthread084(VOID);
|
|
VOID ItPosixPthread085(VOID);
|
|
VOID ItPosixPthread087(VOID);
|
|
VOID ItPosixPthread088(VOID);
|
|
VOID ItPosixPthread089(VOID);
|
|
VOID ItPosixPthread090(VOID);
|
|
VOID ItPosixPthread091(VOID);
|
|
VOID ItPosixPthread092(VOID);
|
|
VOID ItPosixPthread094(VOID);
|
|
VOID ItPosixPthread095(VOID);
|
|
VOID IT_POSIX_PTHREAD_098(VOID);
|
|
VOID IT_POSIX_PTHREAD_101(VOID);
|
|
VOID IT_POSIX_PTHREAD_102(VOID);
|
|
VOID IT_POSIX_PTHREAD_103(VOID);
|
|
VOID IT_POSIX_PTHREAD_105(VOID);
|
|
VOID ItPosixPthread106(VOID);
|
|
VOID ItPosixPthread107(VOID);
|
|
VOID IT_POSIX_PTHREAD_108(VOID);
|
|
VOID IT_POSIX_PTHREAD_110(VOID);
|
|
VOID IT_POSIX_PTHREAD_112(VOID);
|
|
VOID ItPosixPthread116(VOID);
|
|
VOID ItPosixPthread121(VOID);
|
|
VOID ItPosixPthread123(VOID);
|
|
VOID ItPosixPthread124(VOID);
|
|
VOID ItPosixPthread125(VOID);
|
|
VOID ItPosixPthread127(VOID);
|
|
VOID IT_POSIX_PTHREAD_128(VOID);
|
|
VOID ItPosixPthread129(VOID);
|
|
VOID ItPosixPthread132(VOID);
|
|
VOID ItPosixPthread133(VOID);
|
|
VOID ItPosixPthread134(VOID);
|
|
VOID ItPosixPthread136(VOID);
|
|
VOID ItPosixPthread138(VOID);
|
|
VOID ItPosixPthread141(VOID);
|
|
VOID ItPosixPthread142(VOID);
|
|
VOID ItPosixPthread144(VOID);
|
|
VOID IT_POSIX_PTHREAD_150(VOID);
|
|
VOID ItPosixPthread152(VOID);
|
|
VOID ItPosixPthread154(VOID);
|
|
VOID ItPosixPthread166(VOID);
|
|
VOID ItPosixPthread167(VOID);
|
|
VOID ItPosixPthread173(VOID);
|
|
VOID ItPosixPthread175(VOID);
|
|
VOID ItPosixPthread176(VOID);
|
|
VOID ItPosixPthread177(VOID);
|
|
VOID ItPosixPthread182(VOID);
|
|
VOID ItPosixPthread185(VOID);
|
|
VOID ItPosixPthread186(VOID);
|
|
VOID ItPosixPthread187(VOID);
|
|
VOID ItPosixPthread188(VOID);
|
|
VOID ItPosixPthread193(VOID);
|
|
VOID ItPosixPthread194(VOID);
|
|
VOID IT_POSIX_PTHREAD_197(VOID);
|
|
VOID IT_POSIX_PTHREAD_198(VOID);
|
|
VOID ItPosixPthread200(VOID);
|
|
VOID ItPosixPthread204(VOID);
|
|
VOID ItPosixPthread205(VOID);
|
|
VOID ItPosixPthread206(VOID);
|
|
VOID IT_POSIX_PTHREAD_208(VOID);
|
|
VOID ItPosixPthread209(VOID);
|
|
VOID IT_POSIX_PTHREAD_211(VOID);
|
|
VOID ItPosixPthread213(VOID);
|
|
VOID IT_POSIX_PTHREAD_214(VOID);
|
|
VOID IT_POSIX_PTHREAD_215(VOID);
|
|
VOID ItPosixPthread217(VOID);
|
|
VOID ItPosixPthread218(VOID);
|
|
VOID ItPosixPthread219(VOID);
|
|
VOID ItPosixPthread221(VOID);
|
|
VOID ItPosixPthread224(VOID);
|
|
VOID ItPosixPthread226(VOID);
|
|
VOID ItPosixPthread233(VOID);
|
|
VOID IT_POSIX_PTHREAD_237(VOID);
|
|
VOID ItPosixPthread238(VOID);
|
|
VOID ItPosixPthread239(VOID);
|
|
VOID ItPosixPthread240(VOID);
|
|
VOID ItPosixPthread241(VOID);
|
|
VOID IT_POSIX_PTHREAD_246(VOID);
|
|
#endif
|
|
|
|
#if defined(LOSCFG_USER_TEST_PRESSURE)
|
|
VOID ItPosixPthread065(VOID);
|
|
#endif
|
|
#if defined(LOSCFG_USER_TEST_LLT)
|
|
VOID LltPosixPthread001(VOID);
|
|
VOID LltPosixPthread002(VOID);
|
|
VOID LltPosixPthread003(VOID);
|
|
VOID LltPosixPthread004(VOID);
|
|
VOID ItPosixPthread012(VOID);
|
|
VOID ItPosixPthread014(VOID);
|
|
VOID ItPosixPthread015(VOID);
|
|
VOID ItPosixPthread016(VOID);
|
|
VOID ItPosixPthread017(VOID);
|
|
VOID ItPosixPthread024(VOID);
|
|
VOID ItPosixPthread036(VOID);
|
|
VOID ItPosixPthread037(VOID);
|
|
VOID ItPosixPthread038(VOID);
|
|
VOID ItPosixPthread043(VOID);
|
|
VOID ItPosixPthread067(VOID);
|
|
VOID ItPosixPthread076(VOID);
|
|
VOID ItPosixPthread077(VOID);
|
|
VOID ItPosixPthread086(VOID);
|
|
VOID ItPosixPthread090(VOID);
|
|
VOID ItPosixPthread093(VOID);
|
|
VOID ItPosixPthread096(VOID);
|
|
VOID ItPosixPthread097(VOID);
|
|
VOID ItPosixPthread099(VOID);
|
|
VOID ItPosixPthread100(VOID);
|
|
VOID ItPosixPthread104(VOID);
|
|
VOID ItPosixPthread109(VOID);
|
|
VOID ItPosixPthread111(VOID);
|
|
VOID ItPosixPthread113(VOID);
|
|
VOID ItPosixPthread114(VOID);
|
|
VOID ItPosixPthread115(VOID);
|
|
VOID ItPosixPthread169(VOID);
|
|
VOID ItPosixPthread170(VOID);
|
|
VOID ItPosixPthread172(VOID);
|
|
VOID ItPosixPthread179(VOID);
|
|
VOID ItPosixPthread180(VOID);
|
|
VOID ItPosixPthread181(VOID);
|
|
VOID ItPosixPthread184(VOID);
|
|
VOID ItPosixPthread190(VOID);
|
|
VOID ItPosixPthread191(VOID);
|
|
VOID ItPosixPthread199(VOID);
|
|
VOID ItPosixPthread201(VOID);
|
|
VOID ItPosixPthread202(VOID);
|
|
#endif
|
|
|
|
#endif /* _IT_POSIX_PTHREAD_H */
|