Skip to content
Snippets Groups Projects
Commit 74502602 authored by Zhou Guanghui's avatar Zhou Guanghui Committed by Yongqiang Liu
Browse files

mm/sharepool: Add an interface to obtain an id

hulk inclusion
category: feature
bugzilla: https://gitee.com/openeuler/kernel/issues/I5EORS


CVE: NA

--------------------------------

The DVPP address space is per process or per sharing group.
During sp_free and unshare, you need to know which address
space the current address belongs to.

Signed-off-by: default avatarZhou Guanghui <zhouguanghui1@huawei.com>
Reviewed-by: default avatarWeilong Chen <chenweilong@huawei.com>
Signed-off-by: default avatarYongqiang Liu <liuyongqiang13@huawei.com>
parent 60465087
No related branches found
No related tags found
No related merge requests found
......@@ -397,6 +397,8 @@ static inline void sp_free_pages(struct page *page, struct vm_struct *area)
extern bool sp_check_addr(unsigned long addr);
extern bool sp_check_mmap_addr(unsigned long addr, unsigned long flags);
extern int sp_id_of_current(void);
extern int mg_sp_id_of_current(void);
#else
static inline int mg_sp_group_add_task(int pid, unsigned long prot, int spg_id)
......@@ -660,6 +662,16 @@ static inline bool sp_check_mmap_addr(unsigned long addr, unsigned long flags)
return false;
}
static inline int sp_id_of_current(void)
{
return -EPERM;
}
static inline int mg_sp_id_of_current(void)
{
return -EPERM;
}
#endif
#endif /* LINUX_SHARE_POOL_H */
......@@ -1758,6 +1758,43 @@ int sp_group_del_task(int pid, int spg_id)
}
EXPORT_SYMBOL_GPL(sp_group_del_task);
int sp_id_of_current(void)
{
int ret, spg_id;
struct sp_group_master *master;
if (current->flags & PF_KTHREAD || !current->mm)
return -EINVAL;
down_read(&sp_group_sem);
master = current->mm->sp_group_master;
if (master && master->local) {
spg_id = master->local->id;
up_read(&sp_group_sem);
return spg_id;
}
up_read(&sp_group_sem);
down_write(&sp_group_sem);
ret = sp_mapping_group_setup_local(current->mm);
if (ret) {
up_write(&sp_group_sem);
return ret;
}
master = current->mm->sp_group_master;
spg_id = master->local->id;
up_write(&sp_group_sem);
return spg_id;
}
EXPORT_SYMBOL_GPL(sp_id_of_current);
int mg_sp_id_of_current(void)
{
return sp_id_of_current();
}
EXPORT_SYMBOL_GPL(mg_sp_id_of_current);
/* the caller must hold sp_area_lock */
static void __insert_sp_area(struct sp_area *spa)
{
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment