mirror of https://github.com/OpenIPC/firmware.git
42 lines
1.5 KiB
Diff
42 lines
1.5 KiB
Diff
diff -drupN a/arch/arm64/kernel/vdso.c b/arch/arm64/kernel/vdso.c
|
|
--- a/arch/arm64/kernel/vdso.c 2018-08-06 17:23:04.000000000 +0300
|
|
+++ b/arch/arm64/kernel/vdso.c 2022-06-12 05:28:14.000000000 +0300
|
|
@@ -123,6 +123,7 @@ static int __init vdso_init(void)
|
|
{
|
|
int i;
|
|
struct page **vdso_pagelist;
|
|
+ unsigned long pfn;
|
|
|
|
if (memcmp(&vdso_start, "\177ELF", 4)) {
|
|
pr_err("vDSO is not a valid ELF object!\n");
|
|
@@ -140,11 +141,14 @@ static int __init vdso_init(void)
|
|
return -ENOMEM;
|
|
|
|
/* Grab the vDSO data page. */
|
|
- vdso_pagelist[0] = pfn_to_page(PHYS_PFN(__pa(vdso_data)));
|
|
+ vdso_pagelist[0] = phys_to_page(__pa_symbol(vdso_data));
|
|
+
|
|
|
|
/* Grab the vDSO code pages. */
|
|
+ pfn = sym_to_pfn(&vdso_start);
|
|
+
|
|
for (i = 0; i < vdso_pages; i++)
|
|
- vdso_pagelist[i + 1] = pfn_to_page(PHYS_PFN(__pa(&vdso_start)) + i);
|
|
+ vdso_pagelist[i + 1] = pfn_to_page(pfn + i);
|
|
|
|
vdso_spec[0].pages = &vdso_pagelist[0];
|
|
vdso_spec[1].pages = &vdso_pagelist[1];
|
|
@@ -216,10 +220,8 @@ void update_vsyscall(struct timekeeper *
|
|
if (!use_syscall) {
|
|
/* tkr_mono.cycle_last == tkr_raw.cycle_last */
|
|
vdso_data->cs_cycle_last = tk->tkr_mono.cycle_last;
|
|
- vdso_data->raw_time_sec = tk->raw_time.tv_sec;
|
|
- vdso_data->raw_time_nsec = (tk->raw_time.tv_nsec <<
|
|
- tk->tkr_raw.shift) +
|
|
- tk->tkr_raw.xtime_nsec;
|
|
+ vdso_data->raw_time_sec = tk->raw_sec;
|
|
+ vdso_data->raw_time_nsec = tk->tkr_raw.xtime_nsec;
|
|
vdso_data->xtime_clock_sec = tk->xtime_sec;
|
|
vdso_data->xtime_clock_nsec = tk->tkr_mono.xtime_nsec;
|
|
vdso_data->cs_mono_mult = tk->tkr_mono.mult;
|