From mboxrd@z Thu Jan 1 00:00:00 1970 From: compudj@krystal.dyndns.org (Mathieu Desnoyers) Date: Fri, 16 Jan 2009 23:37:03 -0500 Subject: [ltt-dev] [PATCH 05/13] read basic type from ltt-relay buffer In-Reply-To: <49714F54.6080009@cn.fujitsu.com> References: <496C5A2D.2040300@cn.fujitsu.com> <20090115184859.GE32620@Krystal> <49714F54.6080009@cn.fujitsu.com> Message-ID: <20090117043702.GA17265@Krystal> * Lai Jiangshan (laijs at cn.fujitsu.com) wrote: > Mathieu Desnoyers wrote: > > * Lai Jiangshan (laijs at cn.fujitsu.com) wrote: > >> we need function read the base type from ltt-relay buffer > >> in the kernel for text output > >> > >> Signed-off-by: Lai Jiangshan > >> --- > >> ltt-serialize.c | 71 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ > >> 1 file changed, 71 insertions(+) > >> diff --git a/ltt/ltt-serialize.c b/ltt/ltt-serialize.c > >> index 5c34899..deb9106 100644 > >> --- a/ltt/ltt-serialize.c > >> +++ b/ltt/ltt-serialize.c > >> @@ -531,6 +538,77 @@ > >> } > >> EXPORT_SYMBOL_GPL(ltt_serialize_data); > >> > >> +static inline u64 serialize_read_base_type(struct rchan_buf *buf, size_t *ppos, > > > > Maybe the name "unserialize" would be more appropriate ? > > > >> + char trace_size, enum ltt_type trace_type) > >> +{ > >> + union { > >> + uint8_t u_8; > >> + uint16_t u_16; > >> + uint32_t u_32; > >> + uint64_t u_64; > >> + int8_t s_8; > >> + int16_t s_16; > >> + int32_t s_32; > >> + int64_t s_64; > >> + } tmp; > >> + uint64_t value; > >> + > >> + if (ltt_get_alignment()) > > > > This if () is unneeded. It's already in the ltt_align logic. > > > >> + *ppos += ltt_align(*ppos, trace_size); > >> + > >> + switch (trace_type) { > >> + case LTT_TYPE_SIGNED_INT: > >> + switch (trace_size) { > >> + case 1: > >> + ltt_relay_read(buf, *ppos, &tmp.s_8, trace_size); > >> + value = tmp.s_8; > > > > I think we could separate that in two parts to make the code smaller : > > separate it into 2 functions? > Not necessarily 2 functions. Just separating it in two switch () statements would do the job. Mathieu > > > > 1 - > > ltt_relay_read for u8, u16, u32, u64 (not caring about singedness) > > > > 2 - depending on the sign, cast to (s8, s16, s32) and then cast to a > > 64-bit signed value. Or if it was already 64-bits, no conversion is > > needed. > > > > The end result (64-bit signed or unsigned value) should in the end be > > casted to a u64. > > > > Mathieu > > > > > > > _______________________________________________ > ltt-dev mailing list > ltt-dev at lists.casi.polymtl.ca > http://lists.casi.polymtl.ca/cgi-bin/mailman/listinfo/ltt-dev > -- Mathieu Desnoyers OpenPGP key fingerprint: 8CD5 52C3 8E3C 4140 715F BA06 3F25 A8FE 3BAE 9A68