Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1752752Ab1FBPd4 (ORCPT ); Thu, 2 Jun 2011 11:33:56 -0400 Received: from mail-wy0-f174.google.com ([74.125.82.174]:54276 "EHLO mail-wy0-f174.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751225Ab1FBPdy (ORCPT ); Thu, 2 Jun 2011 11:33:54 -0400 DomainKey-Signature: a=rsa-sha1; c=nofws; d=googlemail.com; s=gamma; h=mime-version:from:date:message-id:subject:to:cc:content-type; b=s8QRvrtmjqHXl2st9S7L9ezTD+6MUqAyMFUPnvdXhwP4nxMdI3Pg6xn3z31f+AVaZ6 cGzkFh2j1qh8iewYP9R2R7sLuVoGBSXVdo5SacbF8tbGFUWQ9b3hO0QNNk8GgSMxJ9oV 8my2ySlo0ouWYbigb4306kF6kDJCF+MO3Hyf8= MIME-Version: 1.0 From: Denys Vlasenko Date: Thu, 2 Jun 2011 17:33:33 +0200 Message-ID: Subject: thread leader death under strace (was Re: [PATCH 03/10] ptrace: implement PTRACE_SEIZE) To: Tejun Heo Cc: Oleg Nesterov , Linus Torvalds , indan@nul.nu, bdonlan@gmail.com, linux-kernel@vger.kernel.org, jan.kratochvil@redhat.com, akpm@linux-foundation.org Content-Type: multipart/mixed; boundary=0016e6db2a8f50be9a04a4bc5deb Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Length: 14299 Lines: 237 --0016e6db2a8f50be9a04a4bc5deb Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: quoted-printable On Thu, Jun 2, 2011 at 7:01 AM, Tejun Heo wrote: > Maybe I misunderstood the problem but wasn't the problem about not > being able to wait for the exit of a leader thread and detach it? =A0We > have reliable (sans exec but that's a different story) exit > notification with EVENT_EXIT which even reports the exit_code, so I > don't see what the problem is. =A0What am I missing? The problem is that right now it seems that if tracer doesn't catch EVENT_EXIT and detach tracee when it sees it, really weird things happen. Case 1: tracer traces thread leader. An untraced thread execs. tracer sees EVENT_EXIT, PTRACE_CONTs tracee, and... never sees WIFEXITED, waitpid just blocks forever! Case 2: discovered when I started experiments with current kernel behavior. No execve involved. I just run two tracees, make leader exit, then make the other tracee signal itself with fatal signal (SIGUSR1). Tracer sees leader's exit, but never sees other tracee's signal! Please see attached program. The output on my F15 machine: 4816: thread leader 4816: status:0003057f WIFSTOPPED sig:5 (TRAP) event:CLONE eventdata:0x12d1 4817: status:0000137f WIFSTOPPED sig:19 (STOP) event:none eventdata:0x0 EXITING <=3D=3D=3D leader will exit now. tracer sees it: 4816: status:0006057f WIFSTOPPED sig:5 (TRAP) event:EXIT eventdata:0x7700 DYING <=3D=3D=3D other thread SIGUSR1's itself. tracer *doesn't see anythin= g* alarm timed out <=3D=3D=3D tracer dies on alarm(1). Now, if I send a non-fatal signal first, by uncommenting these lines: // usleep(100*1000); // VERBOSE("WINCH\n"); // raise(SIGWINCH); Output: 4834: thread leader 4834: status:0003057f WIFSTOPPED sig:5 (TRAP) event:CLONE eventdata:0x12e3 4835: status:0000137f WIFSTOPPED sig:19 (STOP) event:none eventdata:0x0 EXITING <=3D=3D=3D leader will exit now. tracer sees it: 4834: status:0006057f WIFSTOPPED sig:5 (TRAP) event:EXIT eventdata:0x7700 WINCH <=3D=3D=3D other thread WINCH's itself. tracer *doesn't see anything* DYING <=3D=3D=3D other thread SIGUSR1's itself. tracer sees it: 4835: status:00000a7f WIFSTOPPED sig:10 (USR1) event:none eventdata:0x0 tracer sees other thread about to die from signal 10: 4835: status:0006057f WIFSTOPPED sig:5 (TRAP) event:EXIT eventdata:0xa tracer sees other thread die from signal 10: 4835: status:0000000a WIFSIGNALED sig:10 (USR1) tracer sees leader die from signal 10: 4834: status:0000000a WIFSIGNALED sig:10 (USR1) tracer is informed "no more tracees": waitpid returned -1 This is just plain broken, right? (1) It should have worked in the first case too. (2) Where is SIGWINCH notification? Why ptrace didn't report it? Re (2): if I disable leader exit - these lines: VERBOSE("EXITING\n"); syscall(__NR_exit, 0x77); then I do see SIGWINCH notification: 4891: thread leader 4891: status:0003057f WIFSTOPPED sig:5 (TRAP) event:CLONE eventdata:0x131c 4892: status:0000137f WIFSTOPPED sig:19 (STOP) event:none eventdata:0x0 WINCH 4891: status:00001c7f WIFSTOPPED sig:28 ((null)) event:none eventdata:0x131= c ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ DYING 4891: status:00000a7f WIFSTOPPED sig:10 (USR1) event:none eventdata:0x131c 4892: status:0006057f WIFSTOPPED sig:5 (TRAP) event:EXIT eventdata:0xa 4891: status:0006057f WIFSTOPPED sig:5 (TRAP) event:EXIT eventdata:0xa 4892: status:0000000a WIFSIGNALED sig:10 (USR1) 4891: status:0000000a WIFSIGNALED sig:10 (USR1) waitpid returned -1 Looks like leader's exit throws a wrench into ptrace machinery. Now I understand why strace DETACHs on exit! :) --=20 vda --0016e6db2a8f50be9a04a4bc5deb Content-Type: text/x-csrc; charset=US-ASCII; name="thread_leader_exit_with_TRACEEXIT_1.c" Content-Disposition: attachment; filename="thread_leader_exit_with_TRACEEXIT_1.c" Content-Transfer-Encoding: base64 X-Attachment-Id: f_gofuodpu0 LyogLi4uREVTQ1JJVElPTi4uLgoKICAgVGhpcyBzb2Z0d2FyZSBpcyBwcm92aWRlZCAnYXMtaXMn LCB3aXRob3V0IGFueSBleHByZXNzIG9yIGltcGxpZWQKICAgd2FycmFudHkuICBJbiBubyBldmVu dCB3aWxsIHRoZSBhdXRob3JzIGJlIGhlbGQgbGlhYmxlIGZvciBhbnkgZGFtYWdlcwogICBhcmlz aW5nIGZyb20gdGhlIHVzZSBvZiB0aGlzIHNvZnR3YXJlLgoKICAgUGVybWlzc2lvbiBpcyBncmFu dGVkIHRvIGFueW9uZSB0byB1c2UgdGhpcyBzb2Z0d2FyZSBmb3IgYW55IHB1cnBvc2UsCiAgIGlu Y2x1ZGluZyBjb21tZXJjaWFsIGFwcGxpY2F0aW9ucywgYW5kIHRvIGFsdGVyIGl0IGFuZCByZWRp c3RyaWJ1dGUgaXQKICAgZnJlZWx5LiAgKi8KCiNkZWZpbmUgX0dOVV9TT1VSQ0UgMQojaW5jbHVk ZSA8YXNzZXJ0Lmg+CiNpbmNsdWRlIDxsaW1pdHMuaD4KI2luY2x1ZGUgPHN0ZGRlZi5oPgojaW5j bHVkZSA8c3RkbGliLmg+CiNpbmNsdWRlIDxzdHJpbmcuaD4KI2luY2x1ZGUgPHVuaXN0ZC5oPgoj aW5jbHVkZSA8ZXJybm8uaD4KI2luY2x1ZGUgPHN0ZGlvLmg+CiNpbmNsdWRlIDxzY2hlZC5oPgoj aW5jbHVkZSA8c2lnbmFsLmg+CiNpbmNsdWRlIDxkaXJlbnQuaD4KI2luY2x1ZGUgPGZjbnRsLmg+ CiNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KI2luY2x1ZGUgPHN5cy93YWl0Lmg+CiNpbmNsdWRlIDxz eXMvc3lzY2FsbC5oPgovKiAjaW5jbHVkZSA8cHRocmVhZC5oPiAqLwovKiBEYW5jZSBhcm91bmQg cHRyYWNlLmggKyB1c2VyLmggaW5jb21wYXRpYmlsaXR5ICovCiNpZmRlZiBfX2lhNjRfXwojIGRl ZmluZSBpYTY0X2ZwcmVnIGlhNjRfZnByZWdfRElTQUJMRQojIGRlZmluZSBwdF9hbGxfdXNlcl9y ZWdzIHB0X2FsbF91c2VyX3JlZ3NfRElTQUJMRQojZW5kaWYKI2luY2x1ZGUgPHN5cy9wdHJhY2Uu aD4KI2luY2x1ZGUgPGxpbnV4L3B0cmFjZS5oPgojaWZkZWYgX19pYTY0X18KIyB1bmRlZiBpYTY0 X2ZwcmVnCiMgdW5kZWYgcHRfYWxsX3VzZXJfcmVncwojZW5kaWYKI2luY2x1ZGUgPHN5cy91c2Vy Lmg+CiNpZiBkZWZpbmVkIF9faTM4Nl9fIHx8IGRlZmluZWQgX194ODZfNjRfXwojIGluY2x1ZGUg PHN5cy9kZWJ1Z3JlZy5oPgojZW5kaWYKLyogRGVmaW5lIGNsb25lMiBmb3IgYWxsIGFyY2hlcyAq LwojaWZkZWYgX19pYTY0X18KZXh0ZXJuIGludCBfX2Nsb25lMihpbnQgKCpmbikgKHZvaWQgKiks IHZvaWQgKmNoaWxkX3N0YWNrX2Jhc2UsCiAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBzdGFj a19zaXplLCBpbnQgZmxhZ3MsIHZvaWQgKmFyZywgLi4uKTsKI2RlZmluZSBjbG9uZTIgX19jbG9u ZTIKI2Vsc2UKI2RlZmluZSBjbG9uZTIoZnVuYywgc3RhY2tfYmFzZSwgc2l6ZSwgZmxhZ3MsIGFy Zy4uLikgXAogICAgICAgIGNsb25lKGZ1bmMsIChzdGFja19iYXNlKSArIChzaXplKSwgZmxhZ3Ms IGFyZykKI2VuZGlmCgoKc3RhdGljIGludCB2ZXJib3NlOwoKI2RlZmluZSBWRVJCT1NFKC4uLikg ZG8geyBcCglpZiAodmVyYm9zZSkgeyBcCgkJcHJpbnRmKF9fVkFfQVJHU19fKTsgZmZsdXNoKHN0 ZG91dCk7IFwKCX0gXAp9IHdoaWxlICgwKQoKc3RhdGljIHBpZF90IGNoaWxkOwovKnN0YXRpYyBw aWRfdCBncmFuZGNoaWxkOyovCgpzdGF0aWMgdm9pZApzaWdraWxsKHBpZF90ICpwcCkKewoJcGlk X3QgcGlkID0gKnBwOwoJKnBwID0gMDsKCWlmIChwaWQgPiAwKQoJCWtpbGwocGlkLCBTSUdLSUxM KTsKfQoKc3RhdGljIHZvaWQKY2xlYW51cCh2b2lkKQp7CgkvKnNpZ2tpbGwoJmdyYW5kY2hpbGQp OyovCglzaWdraWxsKCZjaGlsZCk7Cgl3aGlsZSAod2FpdHBpZCgtMSwgTlVMTCwgX19XQUxMKSA+ IDApCgkJY29udGludWU7Cn0KCnN0YXRpYyB2b2lkCmhhbmRsZXJfZmFpbChpbnQgc2lnbm8pCnsK CVZFUkJPU0UoImFsYXJtIHRpbWVkIG91dFxuIik7CglzaWdzZXRfdCBzZXQ7CglzaWduYWwoU0lH QUJSVCwgU0lHX0RGTCk7CglzaWduYWwoU0lHQUxSTSwgU0lHX0RGTCk7CgkvKiBTSUdBTFJNIG1h eSBiZSBibG9ja2VkIGluIHNpZ2hhbmRsZXIsIG5lZWQgdG8gdW5ibG9jayAqLwoJc2lnZmlsbHNl dCgmc2V0KTsKCXNpZ3Byb2NtYXNrKFNJR19VTkJMT0NLLCAmc2V0LCBOVUxMKTsKCS8qIER1ZSB0 byBrZXJuZWwgYnVncywgd2FpdHBpZCBtYXkgYmxvY2suIE5lZWQgdG8gaGF2ZSBhIHRpbWVvdXQg Ki8KCWFsYXJtKDEpOwoJY2xlYW51cCgpOwoJZXhpdCgwKTsgLy9hc3NlcnQoMCk7Cn0KCnN0YXRp YyBjb25zdCBjaGFyKiBzaWdfbmFtZSh1bnNpZ25lZCBzaWcpCnsKCXN0YXRpYyBjb25zdCBjaGFy ICpjb25zdCBzaWdzW10gPSB7CgkJW1NJR1NUT1BdID0gIlNUT1AiLCBbU0lHVFJBUF0gPSAiVFJB UCIsIFtTSUdLSUxMXSA9ICJLSUxMIiwKCQlbU0lHVEVSTV0gPSAiVEVSTSIsIFtTSUdJTlQgXSA9 ICJJTlQiICwgW1NJR0FMUk1dID0gIkFMUk0iLAoJCVtTSUdBQlJUXSA9ICJBQlJUIiwgW1NJR1VT UjFdID0gIlVTUjEiLCBbU0lHVVNSMl0gPSAiVVNSMiIsCgkJWzAgICAgICBdID0gIjAiLAoJCVtT SUdUUkFQfDB4ODBdID0gIlRSQVB8ODAiLAoJfTsKCXN0YXRpYyBjb25zdCB1bnNpZ25lZCBudW1f c2lncyA9IHNpemVvZihzaWdzKSAvIHNpemVvZihzaWdzWzBdKTsKCWlmIChzaWcgPCBudW1fc2ln cykKCQlyZXR1cm4gc2lnc1tzaWddOwoJcmV0dXJuIE5VTEw7Cn0KCnN0YXRpYyBjb25zdCBjaGFy KiBldmVudF9uYW1lKGludCBzdGF0dXMpCnsKCXN0YXRpYyBjb25zdCBjaGFyICpjb25zdCBldmVu dHNbXSA9IHsKCQlbMF0gICAgICAgICAgICAgICAgICAgICAgID0gIm5vbmUiLAoJCVtQVFJBQ0Vf RVZFTlRfRk9SSyAgICAgIF0gPSAiRk9SSyIsCgkJW1BUUkFDRV9FVkVOVF9WRk9SSyAgICAgXSA9 ICJWRk9SSyIsCgkJW1BUUkFDRV9FVkVOVF9DTE9ORSAgICAgXSA9ICJDTE9ORSIsCgkJW1BUUkFD RV9FVkVOVF9FWEVDICAgICAgXSA9ICJFWEVDIiwKCQlbUFRSQUNFX0VWRU5UX1ZGT1JLX0RPTkVd ID0gIlZGT1JLX0RPTkUiLAoJCVtQVFJBQ0VfRVZFTlRfRVhJVCAgICAgIF0gPSAiRVhJVCIsCgl9 OwoJc3RhdGljIGNvbnN0IHVuc2lnbmVkIG51bV9ldmVudHMgPSBzaXplb2YoZXZlbnRzKSAvIHNp emVvZihldmVudHNbMF0pOwoJc3RhdHVzID0gKHVuc2lnbmVkKXN0YXR1cyA+PiAxNjsKCWlmIChz dGF0dXMgPCBudW1fZXZlbnRzKQoJCXJldHVybiBldmVudHNbc3RhdHVzXTsKCXJldHVybiBOVUxM Owp9CgovKioqKioqKioqKioqKioqKioqIFN0YW5kYXJkIHNjYWZmb2xkaW5nIGVuZHMgaGVyZSAq KioqKioqKioqKioqKioqLwoKLyoKICogRXh0ZW5kZWQgY29tbWVudGFyeSBvZiB0aGUgZW50aXJl IHRlc3QuCiAqCiAqIFdoYXQga2VybmVscyAvIHBhdGNoZXMgZXhoaWJpdCBpdD8gV2hlbiBpdCB3 YXMgZml4ZWQ/CiAqIElzIGl0IENQVSB2ZW5kb3IvbW9kZWwgZGVwZW5kZW50PyBTTVAgZGVwZW5k ZW50PwogKiBJcyBpdCBkZXRlcm1pbmlzdGljPwogKiBIb3cgZWFzeS9oYXJkIGlzIHRvIHJlcHJv ZHVjZSBpdAogKiAoYWx3YXlzPyBhIGRvemVuIGxvb3BzPyBhIHNlY29uZD8gbWludXRlPyBldGMp CiAqLwoKLyogSWYgdGhlIHRlc3QgaXMgbm90IGRldGVybWluaXN0aWM6CiAqIEFtb3VudCBvZiBz ZWNvbmRzIG5lZWRlZCB0byBhbG1vc3QgMTAwJSBjYXRjaCBpdCAqLwovLyNkZWZpbmUgREVGQVVM VF9URVNUVElNRSA1Ci8qIG9yIChpZiByZXByb2R1Y2libGUgaW4gYSBmZXcgbG9vcHMgb25seSkg Ki8KLy8jZGVmaW5lIERFRkFVTFRfTE9PUFMgMTAwCgpzdGF0aWMgaW50CnRocmVhZDEodm9pZCAq dW51c2VkKQp7Ci8vCXVzbGVlcCgxMDAqMTAwMCk7Ci8vCVZFUkJPU0UoIldJTkNIXG4iKTsKLy8J cmFpc2UoU0lHV0lOQ0gpOwoKCXVzbGVlcCgxMDAqMTAwMCk7CglWRVJCT1NFKCJEWUlOR1xuIik7 CglyYWlzZShTSUdVU1IxKTsKCglmb3IoOzspIHBhdXNlKCk7CglyZXR1cm4gMDsKfQoKc3RhdGlj IGludAp0aHJlYWRfbGVhZGVyKHZvaWQgKnVudXNlZCkKewoJLyogbWFsbG9jIGdpdmVzIHN1ZmZp Y2llbnRseSBhbGlnbmVkIGJ1ZmZlci4KCSAqIGxvbmcgYnVmW10gZG9lcyBub3QhIChvbiBpYTY0 KS4KCSAqLwoJY2xvbmUyKHRocmVhZDEsIG1hbGxvYygxNiAqIDEwMjQpLCAxNiAqIDEwMjQsIDAK CQl8IENMT05FX1ZNCgkJfCBDTE9ORV9GUwoJCXwgQ0xPTkVfRklMRVMgfCBDTE9ORV9TSUdIQU5E IHwgQ0xPTkVfVEhSRUFEIHwgQ0xPTkVfU1lTVlNFTQovLwkJfCBDTE9ORV9QVFJBQ0UKCQl8IDAg ICAgICAgIC8qIG5vIHNpZ25hbCB0byBzZW5kIG9uIGRlYXRoICovCgkJLCBOVUxMKTsKCVZFUkJP U0UoIkVYSVRJTkdcbiIpOwoJc3lzY2FsbChfX05SX2V4aXQsIDB4NzcpOwoJZm9yKDs7KSBwYXVz ZSgpOwoJcmV0dXJuIDA7Cn0KCi8qIElmIG5vdGhpbmcgc3RyYW5nZSBoYXBwZW5zLCBqdXN0IHJl dHVybnMuCiAqIE5vdGFibGUgZXZlbnRzICh3aGljaCBhcmUgbm90IGJ1Z3MpIHByaW50IHNvbWUg c29ydCBvZiBtYXJrZXIKICogaXMgdmVyYm9zZSBpcyBvbiwgYnV0IHN0aWxsIGNvbnRpbnVlIGFu ZCByZXR1cm4gbm9ybWFsbHkuCiAqIEtub3duIGJ1Z3MgYWxzbyBwcmludCBhIG1lc3NhZ2UgaWYg dmVyYm9zZSwgYnV0IHRoZXkgZXhpdCgxKS4KICogTmV3IGJ1Z3MgYXJlIGxpa2VseSB0byB0cmlw IGFzc2VydHMgb3IgY2F1c2UgaGFuZy9rZXJuZWwgY3Jhc2ggOikKICovCnN0YXRpYyB2b2lkCnJl cHJvZHVjZSh2b2lkKQp7CglpbnQgc3RhdHVzOwoJcGlkX3QgcGlkOwoKCWFsYXJtKDEpOwoKCS8q IFR5cGljYWwgc2NlbmFyaW8gc3RhcnRzIGxpa2UgdGhpcy4gICovCgljaGlsZCA9IGZvcmsoKTsK CWFzc2VydChjaGlsZCAhPSAtMSk7CglpZiAoY2hpbGQgPT0gMCkgewoJCS8qIGNoaWxkICovCgkJ ZXJybm8gPSAwOwoJCXB0cmFjZShQVFJBQ0VfVFJBQ0VNRSwgMCwgKHZvaWQgKikgMCwgKHZvaWQg KikgMCk7CgkJYXNzZXJ0X3BlcnJvcihlcnJubyk7CgkJcmFpc2UoU0lHU1RPUCk7CgkJYXNzZXJ0 X3BlcnJvcihlcnJubyk7CgoJCXByaW50ZigiJWQ6IHRocmVhZCBsZWFkZXJcbiIsIGdldHBpZCgp KTsKCQl0aHJlYWRfbGVhZGVyKE5VTEwpOwoJfQoKCS8qIFdlIGFyZSBwYXJlbnQgdHJhY2VyICov Cglhc3NlcnQoY2hpbGQgPiAwKTsKCWVycm5vID0gMDsKCgkvKiBDaGlsZCBoYXMgc3RvcHBlZCBp dHNlbGYsIGNoZWNraW5nICovCglwaWQgPSB3YWl0cGlkKGNoaWxkLCAmc3RhdHVzLCAwKTsKCWFz c2VydChwaWQgPT0gY2hpbGQpOwoJYXNzZXJ0KFdJRlNUT1BQRUQoc3RhdHVzKSk7Cglhc3NlcnQo V1NUT1BTSUcoc3RhdHVzKSA9PSBTSUdTVE9QKTsKCglwdHJhY2UoUFRSQUNFX1NFVE9QVElPTlMs IGNoaWxkLCBOVUxMLCAwCgkJfCBQVFJBQ0VfT19UUkFDRVNZU0dPT0QKCQl8IFBUUkFDRV9PX1RS QUNFQ0xPTkUKCQl8IFBUUkFDRV9PX1RSQUNFRVhJVAoJCXwgUFRSQUNFX09fVFJBQ0VFWEVDCgkp OwoJYXNzZXJ0X3BlcnJvcihlcnJubyk7CgoJcHRyYWNlKFBUUkFDRV9DT05ULCBjaGlsZCwgTlVM TCwgKHZvaWQgKikgMCk7Cglhc3NlcnRfcGVycm9yKGVycm5vKTsKCgkvKiBMZXQncyBqdXN0IGxv b2sgb24gdGhlIHJlc3VsdGluZyBzZXF1ZW5jZSBvZiBldmVudHMgKi8KCWZvciAoOzspIHsKCQlw aWRfdCBwaWQgPSB3YWl0cGlkKC0xLCAmc3RhdHVzLCBfX1dBTEwpOwoJCWlmIChwaWQgPD0gMCkg ewoJCQlwcmludGYoIndhaXRwaWQgcmV0dXJuZWQgJWRcbiIsIHBpZCk7CgkJCXJldHVybjsKCQl9 CgkJaWYgKFdJRlNUT1BQRUQoc3RhdHVzKSkgewoJCQlpbnQgc2lnID0gV1NUT1BTSUcoc3RhdHVz KTsKCgkJCWNoYXIgZXZlbnRfc3RyW3NpemVvZihsb25nKSozXSA9ICI8ZXJyPiI7CgkJCWxvbmcg ZXZlbnRfZGF0YSA9IDB4MTExMTExMTE7CgkJCWludCBoYXZlX2V2ZW50ID0gIXB0cmFjZShQVFJB Q0VfR0VURVZFTlRNU0csIHBpZCwgMEwsICZldmVudF9kYXRhKTsKCQkJaWYgKGhhdmVfZXZlbnQp CgkJCQlzcHJpbnRmKGV2ZW50X3N0ciwgIjB4JWx4IiwgZXZlbnRfZGF0YSk7CgoJCQlwcmludGYo IiVkOiBzdGF0dXM6JTA4eCBXSUZTVE9QUEVEIHNpZzolZCAoJXMpIGV2ZW50OiVzIGV2ZW50ZGF0 YTolc1xuIiwKCQkJCXBpZCwgc3RhdHVzLAoJCQkJc2lnLCBzaWdfbmFtZShzaWcpLAoJCQkJZXZl bnRfbmFtZShzdGF0dXMpLAoJCQkJZXZlbnRfc3RyCgkJCSk7CgkJCWlmIChzaWcgPT0gU0lHU1RP UCkgc2lnID0gMDsKCQkJaWYgKHNpZyA9PSBTSUdUUkFQKSBzaWcgPSAwOwoJCQlpZiAoc2lnID09 IChTSUdUUkFQfDB4ODApKSBzaWcgPSAwOwoJCQlwdHJhY2UoUFRSQUNFX0NPTlQsIHBpZCwgTlVM TCwgc2lnKTsKCQkJYXNzZXJ0X3BlcnJvcihlcnJubyk7CgkJfQoJCWVsc2UgaWYgKFdJRkVYSVRF RChzdGF0dXMpKQoJCQlwcmludGYoIiVkOiBzdGF0dXM6JTA4eCBXSUZFWElURUQgZXhpdGNvZGU6 JWRcbiIsCgkJCQlwaWQsIHN0YXR1cywgV0VYSVRTVEFUVVMoc3RhdHVzKSk7CgkJZWxzZSBpZiAo V0lGU0lHTkFMRUQoc3RhdHVzKSkKCQkJcHJpbnRmKCIlZDogc3RhdHVzOiUwOHggV0lGU0lHTkFM RUQgc2lnOiVkICglcylcbiIsCgkJCQlwaWQsIHN0YXR1cywgV1RFUk1TSUcoc3RhdHVzKSwgc2ln X25hbWUoV1RFUk1TSUcoc3RhdHVzKSkpOwoJCWVsc2UKCQkJcHJpbnRmKCIlZDogc3RhdHVzOiUw OHggLSA/Pz9cbiIsCgkJCQlwaWQsIHN0YXR1cyk7Cgl9CgoJY2xlYW51cCgpOwp9CgppbnQKbWFp bihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCnsKCXNldGJ1ZihzdGRvdXQsIE5VTEwpOwoKI2lmIGRl ZmluZWQgREVGQVVMVF9URVNUVElNRSB8fCBkZWZpbmVkIERFRkFVTFRfTE9PUFMKCWludCBpOwoJ Y2hhciAqZW52X3Rlc3R0aW1lID0gZ2V0ZW52KCJURVNUVElNRSIpOyAgLyogbWlzbm9tZXIgKi8K CWludCB0ZXN0dGltZSA9IChlbnZfdGVzdHRpbWUgPyBhdG9pKGVudl90ZXN0dGltZSkgOiAxKTsK I2VuZGlmCgoJYXRleGl0KGNsZWFudXApOwoJc2lnbmFsKFNJR0lOVCwgaGFuZGxlcl9mYWlsKTsK CXNpZ25hbChTSUdBQlJULCBoYW5kbGVyX2ZhaWwpOwoJc2lnbmFsKFNJR0FMUk0sIGhhbmRsZXJf ZmFpbCk7Cgl2ZXJib3NlID0gMSA7Ly8oYXJnYyAtIDEpOwoKI2lmIGRlZmluZWQgREVGQVVMVF9U RVNUVElNRQoJdGVzdHRpbWUgKj0gREVGQVVMVF9URVNUVElNRTsKCWZvcihpID0gMDsgaSA8IHRl c3R0aW1lOyBpKyspIHsKCQl0aW1lX3QgdCA9IHRpbWUoTlVMTCk7CgkJd2hpbGUgKHQgPT0gdGlt ZShOVUxMKSkgewoJCQlWRVJCT1NFKCIuIik7CgkJCXJlcHJvZHVjZSgpOwoJCX0KCX0KCVZFUkJP U0UoIlxuIik7CiNlbGlmIGRlZmluZWQgREVGQVVMVF9MT09QUwoJdGVzdHRpbWUgKj0gREVGQVVM VF9MT09QUzsKCWZvcihpID0gMDsgaSA8IHRlc3R0aW1lOyBpKyspIHsKCQlWRVJCT1NFKCIuIik7 CgkJcmVwcm9kdWNlKCk7Cgl9CglWRVJCT1NFKCJcbiIpOwojZWxzZQoJcmVwcm9kdWNlKCk7CiNl bmRpZgoKCXJldHVybiAwOwp9Cg== --0016e6db2a8f50be9a04a4bc5deb-- -- 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/