Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1751522AbbESVIO (ORCPT ); Tue, 19 May 2015 17:08:14 -0400 Received: from mail-ob0-f172.google.com ([209.85.214.172]:35562 "EHLO mail-ob0-f172.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1750802AbbESVIL (ORCPT ); Tue, 19 May 2015 17:08:11 -0400 From: Ashley Lai X-Google-Original-From: Ashley Lai Date: Tue, 19 May 2015 16:08:09 -0500 (CDT) To: "Hon Ching(Vicky) Lo" cc: tpmdd-devel@lists.sourceforge.net, Peter Huewe , Ashley Lai , Mimi Zohar , Vicky Lo , linux-kernel@vger.kernel.org, Joy Latten Subject: Re: [PATCH 3/3] vTPM: support little endian guests In-Reply-To: <1430873486-25868-4-git-send-email-honclo@linux.vnet.ibm.com> Message-ID: References: <1430873486-25868-1-git-send-email-honclo@linux.vnet.ibm.com> <1430873486-25868-4-git-send-email-honclo@linux.vnet.ibm.com> User-Agent: Alpine 2.11 (DEB 23 2013-08-11) MIME-Version: 1.0 Content-Type: TEXT/PLAIN; format=flowed; charset=US-ASCII Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Length: 3535 Lines: 112 Thank you Vicky and Joy for the clarification. This patch mainly converts the fields in the tcpa_event structure. I see the code converts everytime it accesses the event fields. Would it be more efficient if you do the conversion once and reuse them when needed? Could convert_to_host_format(x) takes x as a tcpa_event structure? If not you still can convert individual fields and reuse them. I'm aware that the pcr_value field is type u8 and it does not need the conversion but if convert_to_host_format() can convert the structure it shouldn't convert u8 type I think. > static const char* tcpa_event_type_strings[] = { > "PREBOOT", > @@ -82,9 +87,11 @@ static void *tpm_bios_measurements_start(struct seq_file *m, loff_t *pos) > event = addr; > > if ((addr + sizeof(struct tcpa_event)) < limit) { > - if (event->event_type == 0 && event->event_size == 0) > + if ((convert_to_host_format(event->event_type) == 0) && > + (convert_to_host_format(event->event_size) == 0)) > return NULL; > - addr += sizeof(struct tcpa_event) + event->event_size; > + addr += (sizeof(struct tcpa_event) + > + convert_to_host_format(event->event_size)); > } > } > > @@ -94,8 +101,11 @@ static void *tpm_bios_measurements_start(struct seq_file *m, loff_t *pos) > > event = addr; > > - if ((event->event_type == 0 && event->event_size == 0) || > - ((addr + sizeof(struct tcpa_event) + event->event_size) >= limit)) > + if (((convert_to_host_format(event->event_type) == 0) && > + (convert_to_host_format(event->event_size) == 0)) > + || > + ((addr + sizeof(struct tcpa_event) + > + convert_to_host_format(event->event_size)) >= limit)) > return NULL; > > return addr; In this function, event_type and event_size can be converted once and reuse. > case SEPARATOR: > case ACTION: > - if (MAX_TEXT_EVENT > event->event_size) { > + if (MAX_TEXT_EVENT > > + convert_to_host_format(event->event_size)) { > name = event_entry; > - n_len = event->event_size; > + n_len = convert_to_host_format(event->event_size); > } > break; > case EVENT_TAG: Same here. > @@ -208,11 +229,43 @@ static int tpm_binary_bios_measurements_show(struct seq_file *m, void *v) > struct tcpa_event *event = v; > char *data = v; > int i; > - > - for (i = 0; i < sizeof(struct tcpa_event) + event->event_size; i++) > + u32 x; > + char tmp[4]; > + > + /* PCR */ > + x = convert_to_host_format(event->pcr_index); > + memcpy(tmp, &x, 4); > + for (i = 0; i < 4; i++) > + seq_putc(m, tmp[i]); > + data += 4; > + > + /* Event Type */ > + x = convert_to_host_format(event->event_type); > + memcpy(tmp, &x, 4); > + for (i = 0; i < 4; i++) > + seq_putc(m, tmp[i]); > + data += 4; > + > + /* HASH */ > + for (i = 0; i < 20; i++) > seq_putc(m, data[i]); > + data += 20; > + > + /* Size */ > + x = convert_to_host_format(event->event_size); > + memcpy(tmp, &x, 4); > + for (i = 0; i < 4; i++) > + seq_putc(m, tmp[i]); > + data += 4; > + > + /* Data */ > + if (convert_to_host_format(event->event_size)) { > + for (i = 0; i < convert_to_host_format(event->event_size); i++) > + seq_putc(m, data[i]); > + } > > return 0; > + > } If the tcpa_event structure is converted, you may be able to get away with memcpy and the for loop. Thanks, --Ashley Lai -- 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/