mirror of https://gitee.com/openkylin/linux.git
s390/vdso: on timens page fault prefault also VVAR page
This is the s390 variant of commit e6b28ec65b
("x86/vdso: On timens
page fault prefault also VVAR page").
Reviewed-by: Alexander Gordeev <agordeev@linux.ibm.com>
Signed-off-by: Heiko Carstens <hca@linux.ibm.com>
Signed-off-by: Vasily Gorbik <gor@linux.ibm.com>
This commit is contained in:
parent
eeab78b05d
commit
fe8344a092
|
@ -105,14 +105,23 @@ static vm_fault_t vvar_fault(const struct vm_special_mapping *sm,
|
||||||
struct vm_area_struct *vma, struct vm_fault *vmf)
|
struct vm_area_struct *vma, struct vm_fault *vmf)
|
||||||
{
|
{
|
||||||
struct page *timens_page = find_timens_vvar_page(vma);
|
struct page *timens_page = find_timens_vvar_page(vma);
|
||||||
unsigned long pfn;
|
unsigned long addr, pfn;
|
||||||
|
vm_fault_t err;
|
||||||
|
|
||||||
switch (vmf->pgoff) {
|
switch (vmf->pgoff) {
|
||||||
case VVAR_DATA_PAGE_OFFSET:
|
case VVAR_DATA_PAGE_OFFSET:
|
||||||
if (timens_page)
|
pfn = virt_to_pfn(vdso_data);
|
||||||
|
if (timens_page) {
|
||||||
|
/*
|
||||||
|
* Fault in VVAR page too, since it will be accessed
|
||||||
|
* to get clock data anyway.
|
||||||
|
*/
|
||||||
|
addr = vmf->address + VVAR_TIMENS_PAGE_OFFSET * PAGE_SIZE;
|
||||||
|
err = vmf_insert_pfn(vma, addr, pfn);
|
||||||
|
if (unlikely(err & VM_FAULT_ERROR))
|
||||||
|
return err;
|
||||||
pfn = page_to_pfn(timens_page);
|
pfn = page_to_pfn(timens_page);
|
||||||
else
|
}
|
||||||
pfn = virt_to_pfn(vdso_data);
|
|
||||||
break;
|
break;
|
||||||
#ifdef CONFIG_TIME_NS
|
#ifdef CONFIG_TIME_NS
|
||||||
case VVAR_TIMENS_PAGE_OFFSET:
|
case VVAR_TIMENS_PAGE_OFFSET:
|
||||||
|
|
Loading…
Reference in New Issue