diff options
author | Ard Biesheuvel <ard.biesheuvel@linaro.org> | 2016-03-30 16:45:56 +0200 |
---|---|---|
committer | Will Deacon <will.deacon@arm.com> | 2016-04-14 16:31:49 +0100 |
commit | 97bbb54e4f27f4c63645f603bf767183ee0dd549 (patch) | |
tree | d6f08bc4b8ef2f63870a5a5c7f36add0d140e0db /arch/arm64/kernel/vdso.c | |
parent | 8923a16686569375bfa25b877769f9a3093e9f22 (diff) | |
download | lwn-97bbb54e4f27f4c63645f603bf767183ee0dd549.tar.gz lwn-97bbb54e4f27f4c63645f603bf767183ee0dd549.zip |
arm64: vdso: avoid virt_to_page() translations on kernel symbols
The translation performed by virt_to_page() is only valid for linear
addresses, and kernel symbols are no longer in the linear mapping.
So perform the __pa() translation explicitly, which does the right
thing in either case, and only then translate to a struct page offset.
Signed-off-by: Ard Biesheuvel <ard.biesheuvel@linaro.org>
Signed-off-by: Will Deacon <will.deacon@arm.com>
Diffstat (limited to 'arch/arm64/kernel/vdso.c')
-rw-r--r-- | arch/arm64/kernel/vdso.c | 4 |
1 files changed, 2 insertions, 2 deletions
diff --git a/arch/arm64/kernel/vdso.c b/arch/arm64/kernel/vdso.c index 97bc68f4c689..64fc030be0f2 100644 --- a/arch/arm64/kernel/vdso.c +++ b/arch/arm64/kernel/vdso.c @@ -131,11 +131,11 @@ static int __init vdso_init(void) return -ENOMEM; /* Grab the vDSO data page. */ - vdso_pagelist[0] = virt_to_page(vdso_data); + vdso_pagelist[0] = pfn_to_page(PHYS_PFN(__pa(vdso_data))); /* Grab the vDSO code pages. */ for (i = 0; i < vdso_pages; i++) - vdso_pagelist[i + 1] = virt_to_page(&vdso_start + i * PAGE_SIZE); + vdso_pagelist[i + 1] = pfn_to_page(PHYS_PFN(__pa(&vdso_start)) + i); /* Populate the special mapping structures */ vdso_spec[0] = (struct vm_special_mapping) { |