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:
kenneth
2021-11-30 08:55:34 +08:00
parent 16259a955e
commit ab886d848a
18 changed files with 1112 additions and 1 deletions
+41
View File
@@ -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" ]
}
+40
View File
@@ -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();
}
+60
View File
@@ -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);
}