mirror of
https://github.com/hardkernel/linux.git
synced 2026-06-05 18:41:58 +09:00
LoongArch: Fix build errors due to backported TIMENS
Commiteb3710efff("LoongArch: Add support to clone a time namespace") backports the TIMENS support for LoongArch (corresponding upstream commitaa5e65dc08) but causes build errors: CC arch/loongarch/kernel/vdso.o arch/loongarch/kernel/vdso.c: In function ‘vvar_fault’: arch/loongarch/kernel/vdso.c:54:36: error: implicit declaration of function ‘find_timens_vvar_page’ [-Werror=implicit-function-declaration] 54 | struct page *timens_page = find_timens_vvar_page(vma); | ^~~~~~~~~~~~~~~~~~~~~ arch/loongarch/kernel/vdso.c:54:36: warning: initialization of ‘struct page *’ from ‘int’ makes pointer from integer without a cast [-Wint-conversion] arch/loongarch/kernel/vdso.c: In function ‘vdso_join_timens’: arch/loongarch/kernel/vdso.c:143:25: error: implicit declaration of function ‘zap_vma_pages’; did you mean ‘zap_vma_ptes’? [-Werror=implicit-function-declaration] 143 | zap_vma_pages(vma); | ^~~~~~~~~~~~~ | zap_vma_ptes cc1: some warnings being treated as errors Because in 6.1.y we should define find_timens_vvar_page() by ourselves and use zap_page_range() instead of zap_vma_pages(), so fix it. Signed-off-by: Huacai Chen <chenhuacai@loongson.cn> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
This commit is contained in:
committed by
Greg Kroah-Hartman
parent
82cae1e30b
commit
1c2f04ce02
@@ -40,6 +40,8 @@ static struct page *vdso_pages[] = { NULL };
|
|||||||
struct vdso_data *vdso_data = generic_vdso_data.data;
|
struct vdso_data *vdso_data = generic_vdso_data.data;
|
||||||
struct vdso_pcpu_data *vdso_pdata = loongarch_vdso_data.vdata.pdata;
|
struct vdso_pcpu_data *vdso_pdata = loongarch_vdso_data.vdata.pdata;
|
||||||
|
|
||||||
|
static struct page *find_timens_vvar_page(struct vm_area_struct *vma);
|
||||||
|
|
||||||
static int vdso_mremap(const struct vm_special_mapping *sm, struct vm_area_struct *new_vma)
|
static int vdso_mremap(const struct vm_special_mapping *sm, struct vm_area_struct *new_vma)
|
||||||
{
|
{
|
||||||
current->mm->context.vdso = (void *)(new_vma->vm_start);
|
current->mm->context.vdso = (void *)(new_vma->vm_start);
|
||||||
@@ -139,13 +141,37 @@ int vdso_join_timens(struct task_struct *task, struct time_namespace *ns)
|
|||||||
|
|
||||||
mmap_read_lock(mm);
|
mmap_read_lock(mm);
|
||||||
for_each_vma(vmi, vma) {
|
for_each_vma(vmi, vma) {
|
||||||
|
unsigned long size = vma->vm_end - vma->vm_start;
|
||||||
|
|
||||||
if (vma_is_special_mapping(vma, &vdso_info.data_mapping))
|
if (vma_is_special_mapping(vma, &vdso_info.data_mapping))
|
||||||
zap_vma_pages(vma);
|
zap_page_range(vma, vma->vm_start, size);
|
||||||
}
|
}
|
||||||
mmap_read_unlock(mm);
|
mmap_read_unlock(mm);
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static struct page *find_timens_vvar_page(struct vm_area_struct *vma)
|
||||||
|
{
|
||||||
|
if (likely(vma->vm_mm == current->mm))
|
||||||
|
return current->nsproxy->time_ns->vvar_page;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* VM_PFNMAP | VM_IO protect .fault() handler from being called
|
||||||
|
* through interfaces like /proc/$pid/mem or
|
||||||
|
* process_vm_{readv,writev}() as long as there's no .access()
|
||||||
|
* in special_mapping_vmops.
|
||||||
|
* For more details check_vma_flags() and __access_remote_vm()
|
||||||
|
*/
|
||||||
|
WARN(1, "vvar_page accessed remotely");
|
||||||
|
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
#else
|
||||||
|
static struct page *find_timens_vvar_page(struct vm_area_struct *vma)
|
||||||
|
{
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
static unsigned long vdso_base(void)
|
static unsigned long vdso_base(void)
|
||||||
|
|||||||
Reference in New Issue
Block a user