fix[mpp_singleton]: fix init order issue

Platform: General
Spec: all

Error case:
Constructors may be added after 65535(mpp_singleton_init)
ex: mpp_platform added after 65535 when mpp_soc is
    refactored to c

Signed-off-by: Hongjin Li <vic.hong@rock-chips.com>
Signed-off-by: xiaoxu.chen <xiaoxu.chen@rock-chips.com>
Change-Id: If736904beb0cd64a3e4ae3b20fd72e1198646ac7
This commit is contained in:
Hongjin Li
2025-05-17 10:40:03 +08:00
committed by Herman Chen
parent 63e1e88b0b
commit dee9bced95
4 changed files with 23 additions and 17 deletions

View File

@@ -21,29 +21,29 @@ static MppSingletonInfo sgln_info[MPP_SGLN_MAX_CNT] = {0};
static rk_u64 sgln_mask = 0;
static rk_u32 sgln_debug = 0;
rk_s32 mpp_singleton_add(MppSingletonInfo *info)
rk_s32 mpp_singleton_add(MppSingletonInfo *info, const char *caller)
{
mpp_env_get_u32("mpp_sgln_debug", &sgln_debug, 0);
if (!info) {
sgln_dbg("can not add NULL info\n");
sgln_dbg("can not add NULL info at %s\n", caller);
return rk_nok;
}
if (info->id >= MPP_SGLN_MAX_CNT) {
sgln_dbg("id %d larger than max %d\n", info->id, MPP_SGLN_MAX_CNT);
sgln_dbg("id %d larger than max %d at %s\n", info->id, MPP_SGLN_MAX_CNT, caller);
return rk_nok;
}
if (sgln_mask & (1 << info->id)) {
sgln_dbg("info %d has been registered\n", info->id);
sgln_dbg("info %d has been registered at %s\n", info->id, caller);
return rk_nok;
}
sgln_info[info->id] = *info;
sgln_mask |= (1 << info->id);
sgln_dbg("info %d %s registered\n", info->id, info->name);
sgln_dbg("info %2d %-12s registered at %s\n", info->id, info->name, caller);
return rk_ok;
}
@@ -60,9 +60,9 @@ static void mpp_singleton_deinit(void)
MppSingletonInfo *info = &sgln_info[i];
if (info->deinit) {
sgln_dbg("info %d %s deinit start\n", info->id, info->name);
sgln_dbg("info %2d %-12s deinit start\n", info->id, info->name);
info->deinit();
sgln_dbg("info %d %s deinit finish\n", info->id, info->name);
sgln_dbg("info %2d %-12s deinit finish\n", info->id, info->name);
}
}
}
@@ -84,9 +84,9 @@ __attribute__((constructor(65535))) static void mpp_singleton_init(void)
MppSingletonInfo *info = &sgln_info[i];
if (info->init) {
sgln_dbg("info %d %s init start\n", info->id, info->name);
sgln_dbg("info %2d %-12s init start\n", info->id, info->name);
info->init();
sgln_dbg("info %d %s init finish\n", info->id, info->name);
sgln_dbg("info %2d %-12s init finish\n", info->id, info->name);
}
}
}