feat: 低内存资源回收low memory killer
低内存资源回收特性,支持维护可杀低重要任务,当高内存任务申请不到足够内存时,临时释放低重要性的任务来释放内存来满足高内存任务正常运行; 当高内存任务退出运行时,自动恢复被杀的低重要性任务。设计文档归档位置 https://gitee.com/rtos_yuan/lmk/tree/design/ BREAKING CHANGE: 增加低内存资源回收注册相关接口LOS_LmkOpsNodeRegister、LOS_LmkOpsNodeUnregister和内存资源释放和任务恢复接口LOS_LmkTasksKill和LOS_LmkTasksRestore. close #I4ID0M Signed-off-by: kenneth <zhushangyuan@huawei.com>
This commit is contained in:
@@ -0,0 +1,41 @@
|
||||
# Copyright (c) 2021-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.
|
||||
|
||||
static_library("test_lmk") {
|
||||
sources = [
|
||||
"It_los_lmk.c",
|
||||
"It_los_lmk_001.c",
|
||||
"It_los_lmk_002.c",
|
||||
"It_los_lmk_003.c",
|
||||
"It_los_lmk_004.c",
|
||||
]
|
||||
|
||||
include_dirs = [ "//kernel/liteos_m/components/lmk" ]
|
||||
|
||||
configs += [ "//kernel/liteos_m/testsuites:include" ]
|
||||
}
|
||||
@@ -0,0 +1,40 @@
|
||||
/*
|
||||
* Copyright (c) 2021-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.
|
||||
*/
|
||||
|
||||
#include "osTest.h"
|
||||
#include "It_los_lmk.h"
|
||||
|
||||
VOID ItSuiteLosLmk(VOID)
|
||||
{
|
||||
ItLosLmk001();
|
||||
ItLosLmk002();
|
||||
ItLosLmk003();
|
||||
ItLosLmk004();
|
||||
}
|
||||
@@ -0,0 +1,60 @@
|
||||
/*
|
||||
* Copyright (c) 2021-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.
|
||||
*/
|
||||
|
||||
#include "osTest.h"
|
||||
#include "los_lmk.h"
|
||||
|
||||
#ifndef IT_LOS_LMK_H
|
||||
#define IT_LOS_LMK_H
|
||||
|
||||
#ifdef __cplusplus
|
||||
#if __cplusplus
|
||||
extern "C"
|
||||
{
|
||||
#endif /* __cplusplus */
|
||||
#endif /* __cplusplus */
|
||||
|
||||
#define LMK_PRIORITY_HIGH 1
|
||||
#define LMK_PRIORITY_MEDIUM 3
|
||||
#define LMK_PRIORITY_LOW 5
|
||||
|
||||
#if (LOSCFG_KERNEL_LMK == 1)
|
||||
extern VOID ItLosLmk001(VOID);
|
||||
extern VOID ItLosLmk002(VOID);
|
||||
extern VOID ItLosLmk003(VOID);
|
||||
extern VOID ItLosLmk004(VOID);
|
||||
#endif
|
||||
|
||||
#ifdef __cplusplus
|
||||
#if __cplusplus
|
||||
}
|
||||
#endif /* __cplusplus */
|
||||
#endif /* __cplusplus */
|
||||
#endif /* IT_LOS_LMK_H */
|
||||
@@ -0,0 +1,98 @@
|
||||
/*
|
||||
* Copyright (c) 2021-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.
|
||||
*/
|
||||
|
||||
#include "osTest.h"
|
||||
#include "It_los_lmk.h"
|
||||
#include "los_list.h"
|
||||
|
||||
STATIC UINT32 release(VOID)
|
||||
{
|
||||
return LOS_OK;
|
||||
}
|
||||
|
||||
STATIC UINT32 restore(VOID)
|
||||
{
|
||||
return LOS_OK;
|
||||
}
|
||||
|
||||
STATIC UINT32 TestCase(VOID)
|
||||
{
|
||||
UINT32 ret;
|
||||
|
||||
LosLmkOpsNode firstOpsNode = {
|
||||
.priority = LMK_PRIORITY_LOW,
|
||||
.freeMem = NULL,
|
||||
.restoreTask = restore,
|
||||
};
|
||||
|
||||
LosLmkOpsNode anotherOpsNode = {
|
||||
.priority = LMK_PRIORITY_MEDIUM,
|
||||
.freeMem = release,
|
||||
.restoreTask = restore,
|
||||
};
|
||||
|
||||
LosLmkOpsNode thirdOpsNode = {
|
||||
.priority = LMK_PRIORITY_HIGH,
|
||||
.freeMem = release,
|
||||
.restoreTask = restore,
|
||||
};
|
||||
|
||||
ret = LOS_LmkOpsNodeRegister(NULL);
|
||||
ICUNIT_ASSERT_EQUAL(ret, LOS_ERRNO_LMK_INVALID_PARAMETER, ret);
|
||||
|
||||
ret = LOS_LmkOpsNodeRegister(&firstOpsNode);
|
||||
ICUNIT_ASSERT_EQUAL(ret, LOS_OK, ret);
|
||||
|
||||
ret = LOS_LmkOpsNodeRegister(&firstOpsNode);
|
||||
ICUNIT_ASSERT_EQUAL(ret, LOS_ERRNO_LMK_ALREADY_REGISTERED, ret);
|
||||
|
||||
ret = LOS_LmkOpsNodeRegister(&anotherOpsNode);
|
||||
ICUNIT_ASSERT_EQUAL(ret, LOS_OK, ret);
|
||||
|
||||
ret = LOS_LmkOpsNodeRegister(&anotherOpsNode);
|
||||
ICUNIT_ASSERT_EQUAL(ret, LOS_ERRNO_LMK_ALREADY_REGISTERED, ret);
|
||||
|
||||
ret = LOS_LmkOpsNodeRegister(&thirdOpsNode);
|
||||
ICUNIT_ASSERT_EQUAL(ret, LOS_OK, ret);
|
||||
|
||||
ret = LOS_LmkOpsNodeRegister(&thirdOpsNode);
|
||||
ICUNIT_ASSERT_EQUAL(ret, LOS_ERRNO_LMK_ALREADY_REGISTERED, ret);
|
||||
|
||||
(VOID)LOS_LmkOpsNodeUnregister(&firstOpsNode);
|
||||
(VOID)LOS_LmkOpsNodeUnregister(&anotherOpsNode);
|
||||
(VOID)LOS_LmkOpsNodeUnregister(&thirdOpsNode);
|
||||
|
||||
return LOS_OK;
|
||||
}
|
||||
|
||||
VOID ItLosLmk001(VOID)
|
||||
{
|
||||
TEST_ADD_CASE("ItLosLmk001", TestCase, TEST_LOS, TEST_COMP, TEST_LEVEL0, TEST_FUNCTION);
|
||||
}
|
||||
@@ -0,0 +1,96 @@
|
||||
/*
|
||||
* Copyright (c) 2021-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.
|
||||
*/
|
||||
|
||||
#include "osTest.h"
|
||||
#include "It_los_lmk.h"
|
||||
#include "los_list.h"
|
||||
|
||||
STATIC UINT32 release(VOID)
|
||||
{
|
||||
return LOS_OK;
|
||||
}
|
||||
|
||||
STATIC UINT32 restore(VOID)
|
||||
{
|
||||
return LOS_OK;
|
||||
}
|
||||
|
||||
STATIC UINT32 TestCase(VOID)
|
||||
{
|
||||
UINT32 ret;
|
||||
|
||||
LosLmkOpsNode firstOpsNode = {
|
||||
.priority = LMK_PRIORITY_LOW,
|
||||
.freeMem = release,
|
||||
.restoreTask = restore,
|
||||
};
|
||||
|
||||
LosLmkOpsNode anotherOpsNode = {
|
||||
.priority = LMK_PRIORITY_MEDIUM,
|
||||
.freeMem = release,
|
||||
.restoreTask = restore,
|
||||
};
|
||||
|
||||
LosLmkOpsNode thirdOpsNode = {
|
||||
.priority = LMK_PRIORITY_HIGH,
|
||||
.freeMem = release,
|
||||
.restoreTask = restore,
|
||||
};
|
||||
|
||||
ret = LOS_LmkOpsNodeUnregister(NULL);
|
||||
ICUNIT_ASSERT_EQUAL(ret, LOS_ERRNO_LMK_INVALID_PARAMETER, ret);
|
||||
ret = LOS_LmkOpsNodeUnregister(&firstOpsNode);
|
||||
ICUNIT_ASSERT_EQUAL(ret, LOS_ERRNO_LMK_NOT_REGISTERED, ret);
|
||||
ret = LOS_LmkOpsNodeUnregister(&anotherOpsNode);
|
||||
ICUNIT_ASSERT_EQUAL(ret, LOS_ERRNO_LMK_NOT_REGISTERED, ret);
|
||||
|
||||
ret = LOS_LmkOpsNodeRegister(&firstOpsNode);
|
||||
ICUNIT_ASSERT_EQUAL(ret, LOS_OK, ret);
|
||||
ret = LOS_LmkOpsNodeUnregister(&firstOpsNode);
|
||||
ICUNIT_ASSERT_EQUAL(ret, LOS_OK, ret);
|
||||
ret = LOS_LmkOpsNodeUnregister(&firstOpsNode);
|
||||
ICUNIT_ASSERT_EQUAL(ret, LOS_ERRNO_LMK_NOT_REGISTERED, ret);
|
||||
|
||||
ret = LOS_LmkOpsNodeRegister(&thirdOpsNode);
|
||||
ICUNIT_ASSERT_EQUAL(ret, LOS_OK, ret);
|
||||
ret = LOS_LmkOpsNodeUnregister(&thirdOpsNode);
|
||||
ICUNIT_ASSERT_EQUAL(ret, LOS_OK, ret);
|
||||
|
||||
(VOID)LOS_LmkOpsNodeUnregister(&firstOpsNode);
|
||||
(VOID)LOS_LmkOpsNodeUnregister(&anotherOpsNode);
|
||||
(VOID)LOS_LmkOpsNodeUnregister(&thirdOpsNode);
|
||||
|
||||
return LOS_OK;
|
||||
}
|
||||
|
||||
VOID ItLosLmk002(VOID)
|
||||
{
|
||||
TEST_ADD_CASE("ItLosLmk002", TestCase, TEST_LOS, TEST_COMP, TEST_LEVEL0, TEST_FUNCTION);
|
||||
}
|
||||
@@ -0,0 +1,117 @@
|
||||
/*
|
||||
* Copyright (c) 2021-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.
|
||||
*/
|
||||
|
||||
#include "osTest.h"
|
||||
#include "It_los_lmk.h"
|
||||
#include "los_list.h"
|
||||
|
||||
STATIC UINT32 release_OK(VOID)
|
||||
{
|
||||
return LOS_OK;
|
||||
}
|
||||
|
||||
STATIC UINT32 release_NOK(VOID)
|
||||
{
|
||||
return LOS_NOK;
|
||||
}
|
||||
|
||||
STATIC UINT32 restore_OK(VOID)
|
||||
{
|
||||
return LOS_OK;
|
||||
}
|
||||
|
||||
STATIC UINT32 restore_NOK(VOID)
|
||||
{
|
||||
return LOS_NOK;
|
||||
}
|
||||
|
||||
STATIC UINT32 TestCase(VOID)
|
||||
{
|
||||
UINT32 ret;
|
||||
LosLmkOpsNode firstOpsNode = {
|
||||
.priority = LMK_PRIORITY_LOW,
|
||||
.freeMem = release_NOK,
|
||||
.restoreTask = restore_NOK,
|
||||
};
|
||||
|
||||
LosLmkOpsNode anotherOpsNode = {
|
||||
.priority = LMK_PRIORITY_MEDIUM,
|
||||
.freeMem = release_NOK,
|
||||
.restoreTask = restore_NOK,
|
||||
};
|
||||
|
||||
LosLmkOpsNode thirdOpsNode = {
|
||||
.priority = LMK_PRIORITY_HIGH,
|
||||
.freeMem = release_OK,
|
||||
.restoreTask = restore_OK,
|
||||
};
|
||||
|
||||
ret = LOS_LmkOpsNodeRegister(&firstOpsNode);
|
||||
ICUNIT_ASSERT_EQUAL(ret, LOS_OK, ret);
|
||||
|
||||
ret = LOS_LmkOpsNodeRegister(&anotherOpsNode);
|
||||
ICUNIT_ASSERT_EQUAL(ret, LOS_OK, ret);
|
||||
|
||||
ret = LOS_LmkTasksKill();
|
||||
ICUNIT_ASSERT_EQUAL(ret, LOS_ERRNO_LMK_FREE_MEMORY_FAILURE, ret);
|
||||
ret = LOS_LmkTasksRestore();
|
||||
ICUNIT_ASSERT_EQUAL(ret, LOS_ERRNO_LMK_RESTORE_TASKS_FAILURE, ret);
|
||||
|
||||
ret = LOS_LmkOpsNodeRegister(&thirdOpsNode);
|
||||
ICUNIT_ASSERT_EQUAL(ret, LOS_OK, ret);
|
||||
ret = LOS_LmkTasksKill();
|
||||
ICUNIT_ASSERT_EQUAL(ret, LOS_ERRNO_LMK_FREE_MEMORY_FAILURE, ret);
|
||||
ret = LOS_LmkTasksKill();
|
||||
ICUNIT_ASSERT_EQUAL(ret, LOS_ERRNO_LMK_MEMORY_ALREADY_FREED, ret);
|
||||
ret = LOS_LmkTasksRestore();
|
||||
ICUNIT_ASSERT_EQUAL(ret, LOS_ERRNO_LMK_RESTORE_TASKS_FAILURE, ret);
|
||||
ret = LOS_LmkTasksRestore();
|
||||
ICUNIT_ASSERT_EQUAL(ret, LOS_ERRNO_LMK_RESTORE_NOT_NEEDED, ret);
|
||||
|
||||
firstOpsNode.freeMem = release_OK;
|
||||
firstOpsNode.restoreTask =restore_OK;
|
||||
anotherOpsNode.freeMem = release_OK;
|
||||
anotherOpsNode.restoreTask =restore_OK;
|
||||
ret = LOS_LmkTasksKill();
|
||||
ICUNIT_ASSERT_EQUAL(ret, LOS_OK, ret);
|
||||
ret = LOS_LmkTasksRestore();
|
||||
ICUNIT_ASSERT_EQUAL(ret, LOS_OK, ret);
|
||||
|
||||
(VOID)LOS_LmkOpsNodeUnregister(&firstOpsNode);
|
||||
(VOID)LOS_LmkOpsNodeUnregister(&anotherOpsNode);
|
||||
(VOID)LOS_LmkOpsNodeUnregister(&thirdOpsNode);
|
||||
|
||||
return LOS_OK;
|
||||
}
|
||||
|
||||
VOID ItLosLmk003(VOID)
|
||||
{
|
||||
TEST_ADD_CASE("ItLosLmk003", TestCase, TEST_LOS, TEST_COMP, TEST_LEVEL0, TEST_FUNCTION);
|
||||
}
|
||||
@@ -0,0 +1,132 @@
|
||||
/*
|
||||
* Copyright (c) 2021-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.
|
||||
*/
|
||||
|
||||
#include "osTest.h"
|
||||
#include "It_los_lmk.h"
|
||||
#include "los_list.h"
|
||||
|
||||
STATIC UINT32 release_OK_First(VOID)
|
||||
{
|
||||
return LOS_OK;
|
||||
}
|
||||
|
||||
STATIC UINT32 restore_OK_First(VOID)
|
||||
{
|
||||
return LOS_OK;
|
||||
}
|
||||
|
||||
STATIC UINT32 release_OK_Another(VOID)
|
||||
{
|
||||
return LOS_OK;
|
||||
}
|
||||
|
||||
STATIC UINT32 restore_OK_Another(VOID)
|
||||
{
|
||||
return LOS_OK;
|
||||
}
|
||||
|
||||
STATIC UINT32 release_OK_Third(VOID)
|
||||
{
|
||||
return LOS_OK;
|
||||
}
|
||||
|
||||
STATIC UINT32 restore_OK_Third(VOID)
|
||||
{
|
||||
return LOS_OK;
|
||||
}
|
||||
|
||||
STATIC UINT32 TestCase(VOID)
|
||||
{
|
||||
UINT32 ret;
|
||||
|
||||
LosLmkOpsNode firstOpsNode = {
|
||||
.priority = LMK_PRIORITY_LOW,
|
||||
.freeMem = release_OK_First,
|
||||
.restoreTask = restore_OK_First,
|
||||
};
|
||||
|
||||
LosLmkOpsNode anotherOpsNode = {
|
||||
.priority = LMK_PRIORITY_MEDIUM,
|
||||
.freeMem = release_OK_Another,
|
||||
.restoreTask = restore_OK_Another,
|
||||
};
|
||||
|
||||
LosLmkOpsNode thirdOpsNode = {
|
||||
.priority = LMK_PRIORITY_HIGH,
|
||||
.freeMem = release_OK_Third,
|
||||
.restoreTask = restore_OK_Third,
|
||||
};
|
||||
|
||||
ret = LOS_LmkOpsNodeRegister(&firstOpsNode);
|
||||
ICUNIT_ASSERT_EQUAL(ret, LOS_OK, ret);
|
||||
ret = LOS_LmkOpsNodeRegister(&thirdOpsNode);
|
||||
ICUNIT_ASSERT_EQUAL(ret, LOS_OK, ret);
|
||||
ret = LOS_LmkOpsNodeRegister(&anotherOpsNode);
|
||||
ICUNIT_ASSERT_EQUAL(ret, LOS_OK, ret);
|
||||
#if (LOSCFG_KERNEL_LMK_DEBUG == 1)
|
||||
(VOID)LOS_LmkOpsNodeInfoShow();
|
||||
#endif
|
||||
(VOID)LOS_LmkOpsNodeUnregister(&firstOpsNode);
|
||||
(VOID)LOS_LmkOpsNodeUnregister(&anotherOpsNode);
|
||||
(VOID)LOS_LmkOpsNodeUnregister(&thirdOpsNode);
|
||||
|
||||
ret = LOS_LmkOpsNodeRegister(&firstOpsNode);
|
||||
ICUNIT_ASSERT_EQUAL(ret, LOS_OK, ret);
|
||||
ret = LOS_LmkOpsNodeRegister(&anotherOpsNode);
|
||||
ICUNIT_ASSERT_EQUAL(ret, LOS_OK, ret);
|
||||
ret = LOS_LmkOpsNodeRegister(&thirdOpsNode);
|
||||
ICUNIT_ASSERT_EQUAL(ret, LOS_OK, ret);
|
||||
#if (LOSCFG_KERNEL_LMK_DEBUG == 1)
|
||||
(VOID)LOS_LmkOpsNodeInfoShow();
|
||||
#endif
|
||||
(VOID)LOS_LmkOpsNodeUnregister(&firstOpsNode);
|
||||
(VOID)LOS_LmkOpsNodeUnregister(&anotherOpsNode);
|
||||
(VOID)LOS_LmkOpsNodeUnregister(&thirdOpsNode);
|
||||
|
||||
ret = LOS_LmkOpsNodeRegister(&anotherOpsNode);
|
||||
ICUNIT_ASSERT_EQUAL(ret, LOS_OK, ret);
|
||||
ret = LOS_LmkOpsNodeRegister(&thirdOpsNode);
|
||||
ICUNIT_ASSERT_EQUAL(ret, LOS_OK, ret);
|
||||
ret = LOS_LmkOpsNodeRegister(&firstOpsNode);
|
||||
ICUNIT_ASSERT_EQUAL(ret, LOS_OK, ret);
|
||||
#if (LOSCFG_KERNEL_LMK_DEBUG == 1)
|
||||
(VOID)LOS_LmkOpsNodeInfoShow();
|
||||
#endif
|
||||
(VOID)LOS_LmkOpsNodeUnregister(&firstOpsNode);
|
||||
(VOID)LOS_LmkOpsNodeUnregister(&anotherOpsNode);
|
||||
(VOID)LOS_LmkOpsNodeUnregister(&thirdOpsNode);
|
||||
|
||||
return LOS_OK;
|
||||
}
|
||||
|
||||
VOID ItLosLmk004(VOID)
|
||||
{
|
||||
TEST_ADD_CASE("ItLosLmk004", TestCase, TEST_LOS, TEST_COMP, TEST_LEVEL0, TEST_FUNCTION);
|
||||
}
|
||||
Reference in New Issue
Block a user