On Mon, May 22, 2017 at 3:20 AM, Ankit Kumar <an...@linux.vnet.ibm.com> wrote: > Current pstore code(ram.c) gets dump timestamp and make it part of header. > Different diffent architecture uses different header format and hence it > won't be good idea to make ramoops_write_kmsg_hdr/ramoops_read_kmsg_hdr > part of generic pstore code. > > ramoops_write_kmsg_hdr calls __getnstimeofday to get timestamp and also > takes care of condition if timekeeping has not resumed. > > This patch moves code for retrieving timestamp to common place and hence > can be used by other functions as well.
Ah! Heh, funny, I had just done a version of this while working on EFI pstore fixes. Here's what I did instead: https://git.kernel.org/pub/scm/linux/kernel/git/kees/linux.git/commit/?h=pstore/fixes&id=ea209b760f104daf0cf62953090b66c5628b0842 This makes it so the time field is prepopulated for all backend writes, which should simplify things (no need to have the backends call out). -Kees > > Signed-off-by: Ankit Kumar <an...@linux.vnet.ibm.com> > --- > fs/pstore/internal.h | 1 + > fs/pstore/platform.c | 13 +++++++++++++ > fs/pstore/ram.c | 9 ++++----- > 3 files changed, 18 insertions(+), 5 deletions(-) > > diff --git a/fs/pstore/internal.h b/fs/pstore/internal.h > index c416e65..339dcdc 100644 > --- a/fs/pstore/internal.h > +++ b/fs/pstore/internal.h > @@ -22,6 +22,7 @@ static inline void pstore_unregister_pmsg(void) {} > #endif > > extern struct pstore_info *psinfo; > +void pstore_get_timestamp(struct timespec *timestamp); > > extern void pstore_set_kmsg_bytes(int); > extern void pstore_get_records(int); > diff --git a/fs/pstore/platform.c b/fs/pstore/platform.c > index d468eec..5cb25b0 100644 > --- a/fs/pstore/platform.c > +++ b/fs/pstore/platform.c > @@ -474,6 +474,19 @@ static size_t copy_kmsg_to_buffer(int hsize, size_t len) > return total_len; > } > > +void pstore_get_timestamp(struct timespec *timestamp) > +{ > + if (!timestamp) > + return; > + > + /* Report zeroed timestamp if called before timekeeping has resumed. > */ > + if (__getnstimeofday(timestamp)) { > + timestamp->tv_sec = 0; > + timestamp->tv_nsec = 0; > + } > +} > +EXPORT_SYMBOL_GPL(pstore_get_timestamp); > + > /* > * callback from kmsg_dump. (s2,l2) has the most recently > * written bytes, older bytes are in (s1,l1). Save as much > diff --git a/fs/pstore/ram.c b/fs/pstore/ram.c > index 5cb022c..e39297d 100644 > --- a/fs/pstore/ram.c > +++ b/fs/pstore/ram.c > @@ -37,6 +37,8 @@ > #include <linux/of.h> > #include <linux/of_address.h> > > +#include "internal.h" > + > #define RAMOOPS_KERNMSG_HDR "====" > #define MIN_MEM_SIZE 4096UL > > @@ -362,11 +364,8 @@ static size_t ramoops_write_kmsg_hdr(struct > persistent_ram_zone *prz, > struct timespec timestamp; > size_t len; > > - /* Report zeroed timestamp if called before timekeeping has resumed. > */ > - if (__getnstimeofday(×tamp)) { > - timestamp.tv_sec = 0; > - timestamp.tv_nsec = 0; > - } > + pstore_get_timestamp(×tamp); > + > hdr = kasprintf(GFP_ATOMIC, RAMOOPS_KERNMSG_HDR "%lu.%lu-%c\n", > (long)timestamp.tv_sec, (long)(timestamp.tv_nsec / 1000), > compressed ? 'C' : 'D'); > -- > 2.7.4 > -- Kees Cook Pixel Security