From mboxrd@z Thu Jan 1 00:00:00 1970 From: Christian Ehrhardt Date: Mon, 14 Apr 2008 12:37:37 +0000 Subject: [kvm-ppc-devel] Apps to read & process kvmppc instruction trace data Message-Id: <48035011.6030903@linux.vnet.ibm.com> MIME-Version: 1 Content-Type: multipart/mixed; boundary="------------090404060202040200050202" List-Id: To: kvm-ppc@vger.kernel.org This is a multi-part message in MIME format. --------------090404060202040200050202 Content-Type: text/plain; charset="iso-8859-1"; format="flowed" Content-Transfer-Encoding: quoted-printable Based on Hollis tlb tracing from http://penguinppc.org/~hollisb/kvm/ this m= ail contains a c file that can be used to read the instruction traces into = a file (binary) and a python script that processes these binary files to a = readable table. @Hollis we might think of merging these and possible following tools of tha= t kind and/or strive to add is to kvm-userspace - what do you think ? To use the instruction relay stuff, on the host: # First build a kernel with "ppc440 instruction emulation tracing" enabled= as host kernel # then run the guest workload while reading the relay file % gcc -Wall -O2 44x_instr.c -o 44x_instr % ./44x_instr > instrlog.bin & # can also be invoked later e.g only= around some guest workload part % qemu-system-ppcemb ... % kill the 44x_instr command % python decode_instr.py instrlog.bin # can be run on any system The python script decodes extra informations for some opcodes e.g. sprn for= m[ft]spr An example line: time: instr @ pc rsval raval = rbval mnemonic - context info 0.892007422: 7c700aa6 @ 1c 0 0 = 0 mfspr - sprn 0x030 PID 0.892007422: 7c8000a6 @ 20 0 0 = 0 mfmsr 0.892007422: 7c72eba6 @ 30 0 0 = 0 mtspr - sprn 0x3b2 MMUCR 0.892007422: 7ee02f24 @ 40 0 0 = 3c@r05 tlbsx 0.892007422: 7c6407a4 @ 54 0 1@r04 = 0 tlbwe - ws -> PAGEID - Time helps to find relations what the guest did in that moment - instruction is the full opcode - pc the program counter helping developers to analyze where that instr cam= e from e.g. check guest image with objdump and look for these addresses - r*val - the value in the used register, additionally the number of the us= ed register is printed e.g. 1@r04 means r4 is used in that instruction and = contains "1" - mnemonic is the name of that instruction - context info decodes special information for some instruction types (can = be extended as needed) - sprn for m[ft]spr - spr name for m[ft]spr - dcrn for m[ft]dcr - tlbwe action type encoded in "ws" --=20 Gr=FCsse / regards,=20 Christian Ehrhardt IBM Linux Technology Center, Open Virtualization --------------090404060202040200050202 Content-Type: text/x-csrc; name="44x_instr.c" Content-Transfer-Encoding: 7bit Content-Disposition: inline; filename="44x_instr.c" /* * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License, version 2, as * published by the Free Software Foundation. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. * * Copyright IBM Corp. 2008 * * Authors: Hollis Blanchard */ #include #include #include #include #include #include char *relay_file_name = "/sys/kernel/debug/kvm/44x_instr0"; struct instr_record { uint32_t time; uint32_t pc; uint32_t instr; uint32_t rsval; uint32_t raval; uint32_t rbval; }; int main(int argc, char **argv) { char buf[4096]; int relay_file; int rc; relay_file = open(relay_file_name, O_RDONLY | O_NONBLOCK); if (relay_file < 0) { printf("Couldn't open relay file %s: errcode = %s\n", relay_file_name, strerror(errno)); return -1; } do { rc = read(relay_file, buf, sizeof(struct instr_record)); if (rc < 0) { perror("read"); continue; } else if (rc > 0) { write(fileno(stdout), buf, rc); continue; } fsync(fileno(stdout)); usleep(1000); } while (1); close(relay_file); } --------------090404060202040200050202 Content-Type: application/x-python; name="decode_instr.py" Content-Transfer-Encoding: base64 Content-Disposition: inline; filename="decode_instr.py" IyEvdXNyL2Jpbi9lbnYgcHl0aG9uCiMKIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2Fy ZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQojIGl0IHVuZGVyIHRo ZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIHZlcnNpb24gMiwg YXMKIyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KIwojIFRo aXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUg dXNlZnVsLAojIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBp bXBsaWVkIHdhcnJhbnR5IG9mCiMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEg UEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQojIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNl bnNlIGZvciBtb3JlIGRldGFpbHMuCiMKIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBj b3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQojIGFsb25nIHdpdGggdGhp cyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCiMgRm91bmRh dGlvbiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIx MTAtMTMwMSwgVVNBLgojCiMgQ29weXJpZ2h0IElCTSBDb3JwLiAyMDA4CiMKIyBBdXRob3Jz OiBIb2xsaXMgQmxhbmNoYXJkIDxob2xsaXNiQHVzLmlibS5jb20+CgppbXBvcnQgc3lzCmlt cG9ydCBvcwppbXBvcnQgc3RydWN0CgpnbG9iYWwgcmVjb3Jkc2l6ZQpnbG9iYWwgbGFzdHRp bWUKZ2xvYmFsIHNlYwpsYXN0dGltZSA9IDAKc2VjID0gMApkYXRhZm10PSI+NkkiCnJlY29y ZHNpemUgPSBzdHJ1Y3QuY2FsY3NpemUoZGF0YWZtdCkKCmRlZiBnZXRfb3AoaW5zdHIpOgog ICAgICAgIHJldHVybiAoaW5zdHIgPj4gMjYpOwoKZGVmIGdldF94b3AoaW5zdHIpOgogICAg ICAgIHJldHVybiAoaW5zdHIgPj4gMSkgJiAweDNmZjsKCmRlZiBnZXRfc3BybihpbnN0cik6 CglyZXR1cm4gKChpbnN0ciA+PiAxNikgJiAweDFmKSB8ICgoaW5zdHIgPj4gNikgJiAweDNl MCkKCmRlZiBnZXRfZGNybihpbnN0cik6CglyZXR1cm4gKChpbnN0ciA+PiAxNikgJiAweDFm KSB8ICgoaW5zdHIgPj4gNikgJiAweDNlMCk7CgpkZWYgZ2V0X3JzKGluc3RyKToKCXJldHVy biAoaW5zdHIgPj4gMjEpICYgMHgxZjsKCmRlZiBnZXRfcmEoaW5zdHIpOgoJcmV0dXJuIChp bnN0ciA+PiAxNikgJiAweDFmOwoKZGVmIGdldF9yYihpbnN0cik6CglyZXR1cm4gKGluc3Ry ID4+IDExKSAmIDB4MWY7CgpkZWYgZ2V0X3RsYndlX3R5cGUoaW5zdHIpOgoJd3MgPSAoaW5z dHIgPj4gMTEpICYgMHgxZjsKCWlmIHdzID09IDA6CgkJcmV0dXJuICJQQUdFSUQiCgllbGlm IHdzID09IDE6CgkJcmV0dXJuICJYTEFUIgoJZWxpZiB3cyA9PSAyOgoJCXJldHVybiAiQVRU UklCIgoJZWxzZToKCQlyZXR1cm4gIlVOS05PV04iCgpkZWYgZ2V0X25hbWUoaW5zdHIpOgoJ aWYgZ2V0X29wKGluc3RyKT09MzoKCQlyZXR1cm4gInRyYXAiCgllbGlmIGdldF9vcChpbnN0 cik9PTE5OgoJCWlmIGdldF94b3AoaW5zdHIpID09IDUwOgoJCQlyZXR1cm4gInJmaSIKCQll bHNlOgoJCQlyZXR1cm4gInVua25vd24iCgllbGlmIGdldF9vcChpbnN0cik9PTMxOgoJCWlm IGdldF94b3AoaW5zdHIpID09IDgzOgoJCQlyZXR1cm4gIm1mbXNyIgoKCQllbGlmIGdldF94 b3AoaW5zdHIpID09IDg3OgoJCQlyZXR1cm4gImxiengiCgoJCWVsaWYgZ2V0X3hvcChpbnN0 cikgPT0gMTMxOgoJCQlyZXR1cm4gIndydGVlIgoKCQllbGlmIGdldF94b3AoaW5zdHIpID09 IDE0NjoKCQkJcmV0dXJuICJtdG1zciIKCgkJZWxpZiBnZXRfeG9wKGluc3RyKSA9PSAxNjM6 CgkJCXJldHVybiAid3J0ZWVpIgoKCQllbGlmIGdldF94b3AoaW5zdHIpID09IDIxNToKCQkJ cmV0dXJuICJzdGJ4IgoKCQllbGlmIGdldF94b3AoaW5zdHIpID09IDI0NzoKCQkJcmV0dXJu ICJzdGJ1eCIKCgkJZWxpZiBnZXRfeG9wKGluc3RyKSA9PSAyNzk6CgkJCXJldHVybiAibGh6 eCIKCgkJZWxpZiBnZXRfeG9wKGluc3RyKSA9PSAzMTE6CgkJCXJldHVybiAibGh6dXgiCgoJ CWVsaWYgZ2V0X3hvcChpbnN0cikgPT0gMzIzOgoJCQlyZXR1cm4gIm1mZGNyIgoKCQllbGlm IGdldF94b3AoaW5zdHIpID09IDMzOToKCQkJcmV0dXJuICJtZnNwciIKCgkJZWxpZiBnZXRf eG9wKGluc3RyKSA9PSA0MDc6CgkJCXJldHVybiAic3RoeCIKCgkJZWxpZiBnZXRfeG9wKGlu c3RyKSA9PSA0Mzk6CgkJCXJldHVybiAic3RodXgiCgoJCWVsaWYgZ2V0X3hvcChpbnN0cikg PT0gNDUxOgoJCQlyZXR1cm4gIm10ZGNyIgoKCQllbGlmIGdldF94b3AoaW5zdHIpID09IDQ2 NzoKCQkJcmV0dXJuICJtdHNwciIKCgkJZWxpZiBnZXRfeG9wKGluc3RyKSA9PSA0NzA6CgkJ CXJldHVybiAiZGNiaSIKCgkJZWxpZiBnZXRfeG9wKGluc3RyKSA9PSA1MzQ6CgkJCXJldHVy biAibHdicngiCgoJCWVsaWYgZ2V0X3hvcChpbnN0cikgPT0gNTY2OgoJCQlyZXR1cm4gInRs YnN5bmMiCgoJCWVsaWYgZ2V0X3hvcChpbnN0cikgPT0gNjYyOgoJCQlyZXR1cm4gInN0d2Jy eCIKCgkJZWxpZiBnZXRfeG9wKGluc3RyKSA9PSA5Nzg6CgkJCXJldHVybiAidGxid2UiCgoJ CWVsaWYgZ2V0X3hvcChpbnN0cikgPT0gOTE0OgoJCQlyZXR1cm4gInRsYnN4IgoKCQllbGlm IGdldF94b3AoaW5zdHIpID09IDc5MDoKCQkJcmV0dXJuICJsaGJyeCIKCgkJZWxpZiBnZXRf eG9wKGluc3RyKSA9PSA5MTg6CgkJCXJldHVybiAic3RoYnJ4IgoKCQllbGlmIGdldF94b3Ao aW5zdHIpID09IDk2NjoKCQkJcmV0dXJuICJpY2NjaSIKCgkJZWxzZToKCQkJcmV0dXJuICJ1 bmtub3duIgoKCWVsaWYgZ2V0X29wKGluc3RyKSA9PSAzMjoKCQlyZXR1cm4gImx3eiIKCgll bGlmIGdldF9vcChpbnN0cikgPT0gMzM6CgkJcmV0dXJuICJsd3p1IgoKCWVsaWYgZ2V0X29w KGluc3RyKSA9PSAzNDoKCQlyZXR1cm4gImxieiIKCgllbGlmIGdldF9vcChpbnN0cikgPT0g MzU6CgkJcmV0dXJuICJsYnp1IgoKCWVsaWYgZ2V0X29wKGluc3RyKSA9PSAzNjoKCQlyZXR1 cm4gInN0dyIKCgllbGlmIGdldF9vcChpbnN0cikgPT0gMzc6CgkJcmV0dXJuICJzdHd1IgoK CWVsaWYgZ2V0X29wKGluc3RyKSA9PSAzODoKCQlyZXR1cm4gInN0YiIKCgllbGlmIGdldF9v cChpbnN0cikgPT0gMzk6CgkJcmV0dXJuICJzdGJ1IgoKCWVsaWYgZ2V0X29wKGluc3RyKSA9 PSA0MDoKCQlyZXR1cm4gImxoeiIKCgllbGlmIGdldF9vcChpbnN0cikgPT0gNDE6CgkJcmV0 dXJuICJsaHp1IgoKCWVsaWYgZ2V0X29wKGluc3RyKSA9PSA0NDoKCQlyZXR1cm4gInN0aCIK CgllbGlmIGdldF9vcChpbnN0cikgPT0gNDU6CgkJcmV0dXJuICJzdGh1IgoKCWVsc2U6CgkJ cmV0dXJuICJ1bmtub3duIgoKZGVmIGdldF9zcHJuX25hbWUoc3Bybik6CgkJaWYgc3BybiA9 PSAweDAxYToKCQkJcmV0dXJuICJTUlIwIgoJCWVsaWYgc3BybiA9PSAweDAxYjoKCQkJcmV0 dXJuICJTUlIxIgoJCWVsaWYgc3BybiA9PSAweDNiMjoKCQkJcmV0dXJuICJNTVVDUiIKCQll bGlmIHNwcm4gPT0gMHgwMzA6CgkJCXJldHVybiAiUElEIgoJCWVsaWYgc3BybiA9PSAweDAz ZjoKCQkJcmV0dXJuICJJVlBSIgoJCWVsaWYgc3BybiA9PSAweDNiMzoKCQkJcmV0dXJuICJD Q1IwIgoJCWVsaWYgc3BybiA9PSAweDM3ODoKCQkJcmV0dXJuICJDQ1IxIgoJCWVsaWYgc3By biA9PSAweDExZjoKCQkJcmV0dXJuICJQVlIiCgkJZWxpZiBzcHJuID09IDB4MDNkOgoJCQly ZXR1cm4gIkRFQVIiCgkJZWxpZiBzcHJuID09IDB4MDNlOgoJCQlyZXR1cm4gIkVTUiIKCQll bGlmIHNwcm4gPT0gMHgxMzQ6CgkJCXJldHVybiAiREJDUjAiCgkJZWxpZiBzcHJuID09IDB4 MTM1OgoJCQlyZXR1cm4gIkRCQ1IxIgoJCWVsaWYgc3BybiA9PSAweDExYzoKCQkJcmV0dXJu ICJUQldMIgoJCWVsaWYgc3BybiA9PSAweDExZDoKCQkJcmV0dXJuICJUQldVIgoJCWVsaWYg c3BybiA9PSAweDAxNjoKCQkJcmV0dXJuICJERUMiCgkJZWxpZiBzcHJuID09IDB4MTUwOgoJ CQlyZXR1cm4gIlRTUiIKCQllbGlmIHNwcm4gPT0gMHgxNTQ6CgkJCXJldHVybiAiVENSIgoJ CWVsaWYgc3BybiA9PSAweDExMDoKCQkJcmV0dXJuICJTUFJHMCIKCQllbGlmIHNwcm4gPT0g MHgxMTE6CgkJCXJldHVybiAiU1BSRzEiCgkJZWxpZiBzcHJuID09IDB4MTEyOgoJCQlyZXR1 cm4gIlNQUkcyIgoJCWVsaWYgc3BybiA9PSAweDExMzoKCQkJcmV0dXJuICJTUFJHMyIKCQll bGlmIHNwcm4gPT0gMHgxMTQ6CgkJCXJldHVybiAiU1BSRzQiCgkJZWxpZiBzcHJuID09IDB4 MTE1OgoJCQlyZXR1cm4gIlNQUkc1IgoJCWVsaWYgc3BybiA9PSAweDExNjoKCQkJcmV0dXJu ICJTUFJHNiIKCQllbGlmIHNwcm4gPT0gMHgxMTc6CgkJCXJldHVybiAiU1BSRzciCgkJZWxp ZiBzcHJuID09IDB4MTkwOgoJCQlyZXR1cm4gIklWT1IwIgoJCWVsaWYgc3BybiA9PSAweDE5 MToKCQkJcmV0dXJuICJJVk9SMSIKCQllbGlmIHNwcm4gPT0gMHgxOTI6CgkJCXJldHVybiAi SVZPUjIiCgkJZWxpZiBzcHJuID09IDB4MTkzOgoJCQlyZXR1cm4gIklWT1IzIgoJCWVsaWYg c3BybiA9PSAweDE5NDoKCQkJcmV0dXJuICJJVk9SNCIKCQllbGlmIHNwcm4gPT0gMHgxOTU6 CgkJCXJldHVybiAiSVZPUjUiCgkJZWxpZiBzcHJuID09IDB4MTk2OgoJCQlyZXR1cm4gIklW T1I2IgoJCWVsaWYgc3BybiA9PSAweDE5NzoKCQkJcmV0dXJuICJJVk9SNyIKCQllbGlmIHNw cm4gPT0gMHgxOTg6CgkJCXJldHVybiAiSVZPUjgiCgkJZWxpZiBzcHJuID09IDB4MTk5OgoJ CQlyZXR1cm4gIklWT1I5IgoJCWVsaWYgc3BybiA9PSAweDE5YToKCQkJcmV0dXJuICJJVk9S MTAiCgkJZWxpZiBzcHJuID09IDB4MTliOgoJCQlyZXR1cm4gIklWT1IxMSIKCQllbGlmIHNw cm4gPT0gMHgxOWM6CgkJCXJldHVybiAiSVZPUjEyIgoJCWVsaWYgc3BybiA9PSAweDE5ZDoK CQkJcmV0dXJuICJJVk9SMTMiCgkJZWxpZiBzcHJuID09IDB4MTllOgoJCQlyZXR1cm4gIklW T1IxNCIKCQllbGlmIHNwcm4gPT0gMHgxOWY6CgkJCXJldHVybiAiSVZPUjE1IgoJCWVsc2U6 CgkJCXJldHVybiAiVU5LTk9XTiIKCmRlZiBnZXRfc3BlY2lhbChpbnN0cik6CglpZiBnZXRf b3AoaW5zdHIpID09IDMxOgoJCWlmIChnZXRfeG9wKGluc3RyKSA9PSAzMzkpIG9yIChnZXRf eG9wKGluc3RyKSA9PSA0NjcpOgoJCQlzcHJuID0gZ2V0X3Nwcm4oaW5zdHIpOwoJCQlyZXR1 cm4gKCItIHNwcm4gMHglMDN4ICU4c1xuIiAlIChzcHJuLCBnZXRfc3Bybl9uYW1lKHNwcm4p KSkKCQllbGlmIChnZXRfeG9wKGluc3RyKSA9PSAzMjMgKSBvciAoZ2V0X3hvcChpbnN0cikg PT0gNDUxKToKCQkJcmV0dXJuICgiLSBkY3JuIDB4JTAzeFxuIiAlIGdldF9kY3JuKGluc3Ry KSkKCQllbGlmIChnZXRfeG9wKGluc3RyKSA9PSA5NzggKSBvciAoZ2V0X3hvcChpbnN0cikg PT0gNDUxKToKCQkJcmV0dXJuICgiLSB3cyAtPiAlOHNcbiIgJSBnZXRfdGxid2VfdHlwZShp bnN0cikpCglyZXR1cm4gIlxuIgoKZGVmIHByb2Nlc3NfcmVjb3JkKGRhdGEpOgoJZ2xvYmFs IGxhc3R0aW1lCglnbG9iYWwgc2VjCgl0cnk6CgkJdGltZSwgcGMsIGluc3RyLCByc3ZhbCwg cmF2YWwsIHJidmFsID0gc3RydWN0LnVucGFjayhkYXRhZm10LCBkYXRhKQoJZXhjZXB0IHN0 cnVjdC5lcnJvcjoKCQlzeXMuc3Rkb3V0LndyaXRlKCJzdHJ1Y3QgZXJyb3IgcGFyc2luZyBy ZWNvcmRcbiIpCgkJcmFpc2UKCglpZiBsYXN0dGltZSA+IHRpbWU6CgkJc2VjID0gc2VjICsg MQoJbGFzdHRpbWUgPSB0aW1lCglyc3JlZyA9ICIiCglpZiByc3ZhbCAhPSAwOgoJCXJzcmVn ID0gIkByJTAyZCIgJSBnZXRfcnMoaW5zdHIpCglyYXJlZyA9ICIiCglpZiByYXZhbCAhPSAw OgoJCXJhcmVnID0gIkByJTAyZCIgJSBnZXRfcmEoaW5zdHIpCglyYnJlZyA9ICIiCglpZiBy YnZhbCAhPSAwOgoJCXJicmVnID0gIkByJTAyZCIgJSBnZXRfcmIoaW5zdHIpCglwZGF0YSA9 IChzZWMsIHRpbWUsIGluc3RyLCBwYywgcnN2YWwsIHJzcmVnLCByYXZhbCwgcmFyZWcsIHJi dmFsLCByYnJlZywgZ2V0X25hbWUoaW5zdHIpLCBnZXRfc3BlY2lhbChpbnN0cikpCglzeXMu c3Rkb3V0LndyaXRlKCIlM2QuJTA5ZDogJTEweCBAICUxMHggJTEweCU0cyAlMTB4JTRzICUx MHglNHMgJThzICVzIiAlIHBkYXRhKQoKZGVmIHBhcnNlX2ZpbGUocGF0aCk6CglnbG9iYWwg cmVjb3Jkc2l6ZQoJZiA9IG9wZW4ocGF0aCwgInJiIikKCXdoaWxlIDE6CgkJZGF0YSA9IGYu cmVhZChyZWNvcmRzaXplKQoJCWlmIGxlbihkYXRhKSA9PSAwOgoJCQlzeXMuc3Rkb3V0Lndy aXRlKCJyZWFjaGVkIEVPRlxuIikKCQkJYnJlYWs7CgkJdHJ5OgoJCQlwcm9jZXNzX3JlY29y ZChkYXRhKQoJCWV4Y2VwdCBzdHJ1Y3QuZXJyb3I6CgkJCXN5cy5zdGRvdXQud3JpdGUoInN0 cnVjdCBlcnJvciBwYXJzaW5nIHJlY29yZFxuIikKCQkJYnJlYWsKCWYuY2xvc2UoKQoKaWYg X19uYW1lX18gPT0gJ19fbWFpbl9fJzoKCWxvZ3BhdGggPSBzeXMuYXJndlsxXQoJbGFiZWxz ID0gKCJ0aW1lIiwgImluc3RyIiwgInBjIiwgInJzdmFsIiwgInJhdmFsIiwgInJidmFsIiwg Im1uZW1vbmljIiwgIi0gY29udGV4dCBpbmZvIikKCXN5cy5zdGRvdXQud3JpdGUoIiUxM3M6 ICUxMHMgQCAlMTBzICUxNHMgJTE0cyAlMTRzICU4cyAlc1xuIiAlIGxhYmVscykKCXBhcnNl X2ZpbGUobG9ncGF0aCkK --------------090404060202040200050202 Content-Type: text/plain; charset="us-ascii" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Content-Disposition: inline ------------------------------------------------------------------------- This SF.net email is sponsored by the 2008 JavaOne(SM) Conference Don't miss this year's exciting event. There's still time to save $100. Use priority code J8TL2D2. http://ad.doubleclick.net/clk;198757673;13503038;p?http://java.sun.com/javaone --------------090404060202040200050202 Content-Type: text/plain; charset="us-ascii" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Content-Disposition: inline _______________________________________________ kvm-ppc-devel mailing list kvm-ppc-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/kvm-ppc-devel --------------090404060202040200050202--