mirror of
https://github.com/nyanmisaka/mpp.git
synced 2025-12-26 11:17:44 +01:00
chore[kmpp_obj]: Change kmpp_shm get / put input
1. Use KmppShm to replace KmppShmPtr as input. 2. Add kmpp_shm_to_entry to get valid access address. 3. Add more test case. Signed-off-by: Herman Chen <herman.chen@rock-chips.com> Change-Id: Id554e4e60f8e11e08578c91a9c30c7b173f10ab9
This commit is contained in:
parent
7e060500df
commit
29521e7f4a
4 changed files with 58 additions and 13 deletions
|
|
@ -186,6 +186,8 @@ typedef void* MppMeta;
|
|||
typedef void* KmppObjDef;
|
||||
/* KmppObj - mpp object for string name access and function access */
|
||||
typedef void* KmppObj;
|
||||
/* KmppShm - mpp share memory for kernel / userspace transaction */
|
||||
typedef void* KmppShm;
|
||||
|
||||
/* kmpp transaction object */
|
||||
typedef void* KmppMeta;
|
||||
|
|
|
|||
|
|
@ -164,11 +164,14 @@ rk_s32 kmpp_obj_kdump_f(KmppObj obj, const char *caller);
|
|||
#define kmpp_obj_udump(obj) kmpp_obj_udump_f(obj, __FUNCTION__)
|
||||
#define kmpp_obj_kdump(obj) kmpp_obj_kdump_f(obj, __FUNCTION__)
|
||||
|
||||
rk_s32 kmpp_shm_get(KmppShmPtr **shm, rk_s32 size, const char *caller);
|
||||
rk_s32 kmpp_shm_put(KmppShmPtr *shm, const char *caller);
|
||||
rk_s32 kmpp_shm_get(KmppShm *shm, rk_s32 size, const char *caller);
|
||||
rk_s32 kmpp_shm_put(KmppShm shm, const char *caller);
|
||||
|
||||
void *kmpp_shm_to_entry(KmppShm shm, const char *caller);
|
||||
|
||||
#define kmpp_shm_get_f(shm, size) kmpp_shm_get(shm, size, __FUNCTION__)
|
||||
#define kmpp_shm_put_f(shm) kmpp_shm_put(shm, __FUNCTION__)
|
||||
#define kmpp_shm_to_entry_f(shm) kmpp_shm_to_entry(shm, __FUNCTION__)
|
||||
|
||||
const char *strof_elem_type(ElemType type);
|
||||
|
||||
|
|
|
|||
|
|
@ -1893,7 +1893,7 @@ rk_s32 kmpp_obj_kdump_f(KmppObj obj, const char *caller)
|
|||
return ret ? rk_nok : rk_ok;
|
||||
}
|
||||
|
||||
rk_s32 kmpp_shm_get(KmppShmPtr **shm, rk_s32 size, const char *caller)
|
||||
rk_s32 kmpp_shm_get(KmppShm *shm, rk_s32 size, const char *caller)
|
||||
{
|
||||
KmppObjs *p;
|
||||
KmppObjIocArg *ioc;
|
||||
|
|
@ -1926,12 +1926,12 @@ rk_s32 kmpp_shm_get(KmppShmPtr **shm, rk_s32 size, const char *caller)
|
|||
return ret;
|
||||
}
|
||||
|
||||
*shm = (KmppShmPtr *)U64_TO_PTR(ioc->obj_sptr[0].uaddr);
|
||||
*shm = U64_TO_PTR(ioc->obj_sptr[0].uaddr);
|
||||
|
||||
return *shm ? rk_ok : rk_nok;
|
||||
}
|
||||
|
||||
rk_s32 kmpp_shm_put(KmppShmPtr *shm, const char *caller)
|
||||
rk_s32 kmpp_shm_put(KmppShm shm, const char *caller)
|
||||
{
|
||||
KmppObjs *p = get_objs(caller);
|
||||
rk_s32 ret = rk_nok;
|
||||
|
|
@ -1945,15 +1945,19 @@ rk_s32 kmpp_shm_put(KmppShmPtr *shm, const char *caller)
|
|||
return ret;
|
||||
|
||||
if (p && p->fd >= 0) {
|
||||
KmppShmPtr *sptr = (KmppShmPtr *)shm;
|
||||
KmppObjIocArg *ioc = alloca(sizeof(KmppObjIocArg) + sizeof(KmppShmPtr));
|
||||
|
||||
ioc->count = 1;
|
||||
ioc->flag = 0;
|
||||
ioc->obj_sptr[0].uaddr = shm->uaddr;
|
||||
ioc->obj_sptr[0].kaddr = shm->kaddr;
|
||||
|
||||
ioc->count = 1;
|
||||
ioc->flag = 0;
|
||||
ioc->obj_sptr[0].uaddr = sptr->uaddr;
|
||||
ioc->obj_sptr[0].kaddr = sptr->kaddr;
|
||||
|
||||
obj_dbg_flow("put shm %p entry [u:k] %llx:%llx at %s\n",
|
||||
shm, shm->uaddr, shm->kaddr, caller);
|
||||
sptr, sptr->uaddr, sptr->kaddr, caller);
|
||||
|
||||
ret = ioctl(p->fd, KMPP_SHM_IOC_PUT_SHM, ioc);
|
||||
if (ret)
|
||||
|
|
@ -1962,3 +1966,16 @@ rk_s32 kmpp_shm_put(KmppShmPtr *shm, const char *caller)
|
|||
|
||||
return ret;
|
||||
}
|
||||
|
||||
void *kmpp_shm_to_entry(KmppShm shm, const char *caller)
|
||||
{
|
||||
KmppObjs *p = get_objs(caller);
|
||||
KmppShmPtr *sptr = (KmppShmPtr *)shm;
|
||||
|
||||
if (!shm) {
|
||||
mpp_loge_f("invalid param shm %p at %s\n", shm, caller);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
return sptr->uptr + p->entry_offset;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -236,22 +236,26 @@ done:
|
|||
|
||||
static rk_s32 kmpp_shm_test(const char *name, rk_u32 flag)
|
||||
{
|
||||
KmppShmPtr *shm[4];
|
||||
rk_u32 sizes[4] = {512, 4096, 4096 * 4, 4096 * 4096};
|
||||
rk_u32 sizes[] = {512, SZ_4K, SZ_16K, SZ_128K, SZ_256K, SZ_1M, SZ_4M, SZ_16M};
|
||||
rk_u32 count = sizeof(sizes) / sizeof(sizes[0]);
|
||||
KmppShm shm[count];
|
||||
void *ptr;
|
||||
rk_s32 ret = rk_ok;
|
||||
rk_u32 i;
|
||||
rk_s32 i;
|
||||
(void)name;
|
||||
(void)flag;
|
||||
|
||||
for (i = 0; i < MPP_ARRAY_ELEMS(sizes); i++) {
|
||||
for (i = 0; i < (RK_S32)MPP_ARRAY_ELEMS(sizes); i++) {
|
||||
kmpp_shm_get_f(&shm[i], sizes[i]);
|
||||
if (!shm[i]) {
|
||||
mpp_log_f("shm get size %d failed\n", sizes[i]);
|
||||
ret = rk_nok;
|
||||
}
|
||||
|
||||
test_detail("shm get size %d addr %p\n", sizes[i], kmpp_shm_to_entry_f(shm[i]));
|
||||
}
|
||||
|
||||
for (i = 0; i < MPP_ARRAY_ELEMS(sizes); i++) {
|
||||
for (i = 0; i < (RK_S32)MPP_ARRAY_ELEMS(sizes); i++) {
|
||||
if (kmpp_shm_put_f(shm[i])) {
|
||||
mpp_log_f("shm put size %d failed\n", sizes[i]);
|
||||
ret = rk_nok;
|
||||
|
|
@ -259,6 +263,25 @@ static rk_s32 kmpp_shm_test(const char *name, rk_u32 flag)
|
|||
shm[i] = NULL;
|
||||
}
|
||||
|
||||
for (i = (RK_S32)MPP_ARRAY_ELEMS(sizes) - 1; i >= 0; i--) {
|
||||
kmpp_shm_get_f(&shm[i], sizes[i]);
|
||||
if (!shm[i]) {
|
||||
mpp_log_f("shm get size %d failed\n", sizes[i]);
|
||||
ret = rk_nok;
|
||||
}
|
||||
|
||||
ptr = kmpp_shm_to_entry_f(shm[i]);
|
||||
|
||||
test_detail("shm get size %d addr %p\n", sizes[i], ptr);
|
||||
|
||||
memset(ptr, 0, sizes[i]);
|
||||
|
||||
if (kmpp_shm_put_f(shm[i])) {
|
||||
mpp_log_f("shm put size %d failed\n", sizes[i]);
|
||||
ret = rk_nok;
|
||||
}
|
||||
}
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue