From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1752265AbdKHQCy (ORCPT ); Wed, 8 Nov 2017 11:02:54 -0500 Received: from mout.kundenserver.de ([212.227.126.134]:65522 "EHLO mout.kundenserver.de" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751534AbdKHQCw (ORCPT ); Wed, 8 Nov 2017 11:02:52 -0500 From: Arnd Bergmann To: Kees Cook , Anton Vorontsov , Colin Cross , Tony Luck , John Stultz , Thomas Gleixner Cc: Arnd Bergmann , Stephen Boyd , Ingo Molnar , linux-kernel@vger.kernel.org Subject: [PATCH] pstore: use ktime_get_real_fast_ns() instead of __getnstimeofday() Date: Wed, 8 Nov 2017 17:00:14 +0100 Message-Id: <20171108160056.3042976-1-arnd@arndb.de> X-Mailer: git-send-email 2.9.0 X-Provags-ID: V03:K0:9xRBgbPyF2vNXRo1NE9vN85y/LftiBWmdNU+jTXDj/FjlQCeEbe lSUaGdgMaaLSDk1hewSXJSDDpNOGZQ3n68Y+w3Hl1oWU1y9QHbwdNa2N9Yvxc98g0qhInQA r8zpypfnZ5J2NycUBZACQIBlrbu1KBt/FmvxUevJEx2OH8OKZwOuYmMKoqo2V7PDj8hHcpm bk6eLZz5alrEySqo99Cug== X-UI-Out-Filterresults: notjunk:1;V01:K0:YEP9+FYesJ8=:XgykSGdaChrkJhSg4Cuzhj GwAeXF9FursGxBmlN4Qp+4sQUm7gdYNe404zxOtZwRVlvrn05HOsabd0Bp1PHvekx3S1Zh1P+ kHh4DuVxQXyLjiLEU4sIZqXkgEiaVaRZpOq6g2vAhi1u/EJatleEnEye2wC2Uvx2J9dbkN5mb qMp7JaVegEkzH5M/yb8Qm6wWd0oOTBiP666VAhQRK0sbzUZ909ZDRS49F0Vkaas9PRcpMvbiJ LF/dd8sWoVb06+xsCesgm1b7twkj0G0OiqWCJ4Q+B7VtWjbLKhI6RTVbBviHKlRyIYnIOUA1i MDBk6KYaBWNsduARucyxgMmHWJGwK36IYf183HHFethG0KHRcoJ5BaEyByTGE7BRyVaY7DZ8L Lfk9Q4YYXAbT/asQj4+S/4pw61xh7Cs/9NNRn/RefcPZCm4A+trRRdg4DTuJpktdr3+fHA8q5 wVqCVxPW8Eibm6HnfG72yPu49C/SeZTDL1NK+zqlmn1/riDCC0J1AngPW47/+ipkk9ZF3dm3D 03IDjrCAcHSDB1YwwCgadfAYtc/3CUgLDOjcPP9dS80mNDBbd7CwQWJDaQkftc+2HZY+UyNOB LXXdWXvXn5rOIA9CROWDZS3jyP89cD8TjDk1uhZm23/MJcm5mr8uxpbSru+twzuOKZ5NhIR/c MmYmF4IO8Uar1WeXknGXN0vgG2F3JeoOeM1F1htmQ7enoshiwbpMX0WgLZcWp5nmasEPD2Sy1 RpYPY9uv45WZ4sIjQNXnlUyy33M94khDTVlAAg== Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org I noticed that __getnstimeofday() is a rather odd interface, with a number of quirks: - The caller may come from NMI context, but the implementation is not NMI safe - The calling conventions are different from any other timekeeping functions - The naming doesn't fit into the 'ktime_get_*()' scheme This addresses the above issues by using a completely different method to get the time: ktime_get_real_fast_ns() is NMI safe and doesn't print a warning when called with the timekeeping suspended, and we can easily transform the result into a timespec structure. Since ktime_get_real_fast_ns() was not exported to modules, I also add the export. The behavior for the suspended case changes, we now return the time if we can find it out rather than setting it to zero. We could still change that but this would require exporting the 'timekeeping_suspended' to modules. I'm not trying to address y2038-safety at this point, but plan to do that later with a more complex patch. Cc: Kees Cook Signed-off-by: Arnd Bergmann --- It would be helpful to get this merged into v4.15-rc1, since I have some other cleanups that depend on this. Please have a look to see if this makes sense to you. --- fs/pstore/platform.c | 5 +---- kernel/time/timekeeping.c | 1 + 2 files changed, 2 insertions(+), 4 deletions(-) diff --git a/fs/pstore/platform.c b/fs/pstore/platform.c index ec7199e859d2..086e491faf04 100644 --- a/fs/pstore/platform.c +++ b/fs/pstore/platform.c @@ -482,10 +482,7 @@ void pstore_record_init(struct pstore_record *record, record->psi = psinfo; /* Report zeroed timestamp if called before timekeeping has resumed. */ - if (__getnstimeofday(&record->time)) { - record->time.tv_sec = 0; - record->time.tv_nsec = 0; - } + record->time = ns_to_timespec(ktime_get_real_fast_ns()); } /* diff --git a/kernel/time/timekeeping.c b/kernel/time/timekeeping.c index 353f7bd1eeb0..198afa78bf69 100644 --- a/kernel/time/timekeeping.c +++ b/kernel/time/timekeeping.c @@ -528,6 +528,7 @@ u64 ktime_get_real_fast_ns(void) { return __ktime_get_real_fast_ns(&tk_fast_mono); } +EXPORT_SYMBOL_GPL(ktime_get_real_fast_ns); /** * halt_fast_timekeeper - Prevent fast timekeeper from accessing clocksource. -- 2.9.0