From mboxrd@z Thu Jan 1 00:00:00 1970 From: Rob Gardner Subject: [PATCH]fix for xentrace_format on 64bit Date: Fri, 18 Nov 2005 09:47:37 -0700 Message-ID: <437E05A9.8070204@hp.com> Mime-Version: 1.0 Content-Type: multipart/mixed; boundary="------------060904030303070102080804" Return-path: List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Sender: xen-devel-bounces@lists.xensource.com Errors-To: xen-devel-bounces@lists.xensource.com To: xen-devel List-Id: xen-devel@lists.xenproject.org This is a multi-part message in MIME format. --------------060904030303070102080804 Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit This is a resend of the patch I sent out yesterday which apparently got garbled. The xentrace_format script doesn't work on x86/64. Python pads the input structure because the first field is 32 bits and the next is 64 bits, whereas x86-32 doesn't pad. The quick fix is to read the cpu id separately as a 32bit value, then read the rest of the trace record. Here is a little patch that does that. Tested on x86/32 SMP and x86/64. Signed-off-by: Rob Gardner # HG changeset patch # User rob.gardner@hp.com # Node ID a65d04d96b04d686f29c7a0df8c829b46a957d4f # Parent 9bf6f907b3ff0261902f06d261f76c1bd12af9f5 Change xentrace_format to handle 64 bit structure packing diff -r 9bf6f907b3ff -r a65d04d96b04 tools/xentrace/xentrace_format --- a/tools/xentrace/xentrace_format Wed Nov 16 10:29:52 2005 +++ b/tools/xentrace/xentrace_format Thu Nov 17 22:28:32 2005 @@ -85,7 +85,9 @@ # structure of trace record + prepended CPU id (as output by xentrace): # CPU(I) TSC(Q) EVENT(L) D1(L) D2(L) D3(L) D4(L) D5(L) -TRCREC = "IQLLLLLL" +# read CPU id separately to avoid structure packing problems on 64-bit arch. +CPUREC = "I" +TRCREC = "QLLLLLL" last_tsc = [0,0,0,0,0,0,0,0] @@ -94,11 +96,16 @@ while not interrupted: try: i=i+1 + line = sys.stdin.read(struct.calcsize(CPUREC)) + if not line: + break + cpu = struct.unpack(CPUREC, line)[0] + line = sys.stdin.read(struct.calcsize(TRCREC)) if not line: break - (cpu, tsc, event, d1, d2, d3, d4, d5) = struct.unpack(TRCREC, line) + (tsc, event, d1, d2, d3, d4, d5) = struct.unpack(TRCREC, line) #tsc = (tscH<<32) | tscL --------------060904030303070102080804 Content-Type: text/plain; name="xentrace_format.patch" Content-Transfer-Encoding: 7bit Content-Disposition: inline; filename="xentrace_format.patch" # HG changeset patch # User rob.gardner@hp.com # Node ID a65d04d96b04d686f29c7a0df8c829b46a957d4f # Parent 9bf6f907b3ff0261902f06d261f76c1bd12af9f5 Change xentrace_format to handle 64 bit structure packing diff -r 9bf6f907b3ff -r a65d04d96b04 tools/xentrace/xentrace_format --- a/tools/xentrace/xentrace_format Wed Nov 16 10:29:52 2005 +++ b/tools/xentrace/xentrace_format Thu Nov 17 22:28:32 2005 @@ -85,7 +85,9 @@ # structure of trace record + prepended CPU id (as output by xentrace): # CPU(I) TSC(Q) EVENT(L) D1(L) D2(L) D3(L) D4(L) D5(L) -TRCREC = "IQLLLLLL" +# read CPU id separately to avoid structure packing problems on 64-bit arch. +CPUREC = "I" +TRCREC = "QLLLLLL" last_tsc = [0,0,0,0,0,0,0,0] @@ -94,11 +96,16 @@ while not interrupted: try: i=i+1 + line = sys.stdin.read(struct.calcsize(CPUREC)) + if not line: + break + cpu = struct.unpack(CPUREC, line)[0] + line = sys.stdin.read(struct.calcsize(TRCREC)) if not line: break - (cpu, tsc, event, d1, d2, d3, d4, d5) = struct.unpack(TRCREC, line) + (tsc, event, d1, d2, d3, d4, d5) = struct.unpack(TRCREC, line) #tsc = (tscH<<32) | tscL --------------060904030303070102080804 Content-Type: text/plain; charset="us-ascii" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Content-Disposition: inline _______________________________________________ Xen-devel mailing list Xen-devel@lists.xensource.com http://lists.xensource.com/xen-devel --------------060904030303070102080804--