Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S934137Ab3GQRvF (ORCPT ); Wed, 17 Jul 2013 13:51:05 -0400 Received: from mx1.redhat.com ([209.132.183.28]:4276 "EHLO mx1.redhat.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S934124Ab3GQRvC (ORCPT ); Wed, 17 Jul 2013 13:51:02 -0400 From: Jiri Olsa To: linux-kernel@vger.kernel.org Cc: Jiri Olsa , Corey Ashford , Frederic Weisbecker , Ingo Molnar , Namhyung Kim , Paul Mackerras , Peter Zijlstra , Arnaldo Carvalho de Melo , Andi Kleen , David Ahern Subject: [PATCH 10/23] perf tools: Introduce swap_header function Date: Wed, 17 Jul 2013 19:49:50 +0200 Message-Id: <1374083403-14591-11-git-send-email-jolsa@redhat.com> In-Reply-To: <1374083403-14591-1-git-send-email-jolsa@redhat.com> References: <1374083403-14591-1-git-send-email-jolsa@redhat.com> Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Length: 2313 Lines: 74 Introducing swap_header function to make the swapping code more clear and extensible. Signed-off-by: Jiri Olsa Cc: Corey Ashford Cc: Frederic Weisbecker Cc: Ingo Molnar Cc: Namhyung Kim Cc: Paul Mackerras Cc: Peter Zijlstra Cc: Arnaldo Carvalho de Melo Cc: Andi Kleen Cc: David Ahern --- tools/perf/util/header.c | 31 ++++++++++++++++++------------- 1 file changed, 18 insertions(+), 13 deletions(-) diff --git a/tools/perf/util/header.c b/tools/perf/util/header.c index 4d82dac..eb50de8 100644 --- a/tools/perf/util/header.c +++ b/tools/perf/util/header.c @@ -2545,6 +2545,22 @@ static void swap_features(unsigned long *adds_features) } } +static int swap_header(struct perf_file_header *header) +{ + mem_bswap_64(header, offsetof(struct perf_file_header, adds_features)); + + if (header->size != sizeof(*header)) { + /* Support the previous format */ + if (header->size == offsetof(typeof(*header), adds_features)) + bitmap_zero(header->adds_features, HEADER_FEAT_BITS); + else + return -1; + } else + swap_features(header->adds_features); + + return 0; +} + int perf_file_header__read(struct perf_file_header *header, struct perf_header *ph, int fd) { @@ -2562,19 +2578,8 @@ int perf_file_header__read(struct perf_file_header *header, return -1; } - if (ph->needs_swap) { - mem_bswap_64(header, offsetof(struct perf_file_header, - adds_features)); - } - - if (header->size != sizeof(*header)) { - /* Support the previous format */ - if (header->size == offsetof(typeof(*header), adds_features)) - bitmap_zero(header->adds_features, HEADER_FEAT_BITS); - else - return -1; - } else if (ph->needs_swap) - swap_features(header->adds_features); + if (ph->needs_swap && swap_header(header)) + return -1; memcpy(&ph->adds_features, &header->adds_features, sizeof(ph->adds_features)); -- 1.7.11.7 -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/