From mboxrd@z Thu Jan 1 00:00:00 1970 From: Daniel John FitzGerald Subject: Re: perf_event sampling a multithreaded process - ioctl with PERF_EVENT_IOC_SET_OUTPUT fails Date: Wed, 19 Apr 2017 12:37:09 -0400 Message-ID: <87d101db-47df-8a4d-eb7b-9952bf0e06b8@gmail.com> References: <877f2go0xc.fsf@firstfloor.org> Mime-Version: 1.0 Content-Type: multipart/mixed; boundary="------------8BA00E4C30FE94D7C598AFEE" Return-path: Received: from mail-qk0-f172.google.com ([209.85.220.172]:32927 "EHLO mail-qk0-f172.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S938168AbdDSQhM (ORCPT ); Wed, 19 Apr 2017 12:37:12 -0400 Received: by mail-qk0-f172.google.com with SMTP id h67so24959724qke.0 for ; Wed, 19 Apr 2017 09:37:12 -0700 (PDT) In-Reply-To: <877f2go0xc.fsf@firstfloor.org> Sender: linux-perf-users-owner@vger.kernel.org List-ID: To: Andi Kleen Cc: linux-perf-users@vger.kernel.org This is a multi-part message in MIME format. --------------8BA00E4C30FE94D7C598AFEE Content-Type: text/plain; charset=windows-1252 Content-Transfer-Encoding: 7bit I'm confused as to why either would be the case; I'm specifying the same PID and same CPU number. Is there any documentation out there on all of the restrictions to PERF_EVENT_IOC_SET_OUTPUT? For reference, attached is the source for my function that calls perf_event_open(), mmaps the ring buffer, and tries to do the ioctl. Regards, Dan FitzGerald An enlightenment painter would paint a grand house on a lawn; A romantic painter would paint it on fire. On 04/19/2017 11:46 AM, Andi Kleen wrote: > Daniel John FitzGerald writes: >> The problem that I am running into is that whenever I attempt to call >> ioctl() with PERF_EVENT_IOC_SET_OUTPUT, I get a -1 response with >> errno==EINVAL. > There are lots of restrictions to PERF_EVENT_IOC_SET_OUTPUT. > > Likely you're violating that it has to be on the same CPU or same task. > > -Andi --------------8BA00E4C30FE94D7C598AFEE Content-Type: application/x-c-file; name="code-snippit.c" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="code-snippit.c" LyoqCiAqIEBuYW1lICAgIGluaXRpYWxpemVQZXJmb3JtYW5jZU1vbml0b3JpbmcKICogQGJy aWVmICAgSW5pdGlhbGl6ZSBwZXJmb3JtYW5jZSBtb25pdG9yaW5nIGFuZCBzcGF3biB0aGUg cGVyZm9ybWFuY2UKICogICAgICAgICAgbW9uaXRvcmluZyB0aHJlYWQuCiAqCiAqIEBwYXJh bSBpbnQgZ3JvdXBudW0KICogICAgICAgICAgVGhlIENQVSBjb3VudGVyIGdyb3VwIG51bWJl ciB3ZSdyZSB0byBtb25pdG9yCiAqIEBwYXJhbSBwaWRfdCB0YXJnZXRQSUQKICogICAgICAg ICAgVGhlIFBJRCBvZiB0aGUgcHJvY2VzcyB0aGF0IHdlIGFyZSB0byBtb25pdG9yCiAqCiAq IEByZXR1cm4gcHRocmVhZCBvZiBwZXJmb3JtYW5jZSBtb25pdG9yaW5nIHRocmVhZCBvbiBz dWNjZXNzLCAwIG9uIGZhaWx1cmUKICovCnB0aHJlYWRfdCBpbml0aWFsaXplUGVyZm9ybWFu Y2VNb25pdG9yaW5nKGludCBncm91cG51bSwgcGlkX3QgdGFyZ2V0UElEKXsKCgkvKgoJICog TG9jYWwgZGF0YSBtZW1iZXJzCgkgKi8KCXN0cnVjdCBwZXJmX2V2ZW50X2F0dHIgZXZlbnQ7 CglwdGhyZWFkX3QgcGVyZm1vblRocmVhZElEOwoJbG9uZyAqbW1jck1hcDsKCWxvbmcgY3Vz dG9tQ291bnRlckdyb3VwW0hQTV9NQVhfQ09VTlRFUlNdID0gezAsMCwwLDAsMCwwfTsKCXVu c2lnbmVkIGxvbmcgZmxhZ3MgPSBQRVJGX0ZMQUdfRkRfQ0xPRVhFQzsKCgkvKgoJICogQ29u ZmlndXJlIGhvdyBzYW1wbGluZyB3aWxsIHdvcmsKCSAqLwoJbWVtc2V0KCZldmVudCwgMCwg c2l6ZW9mKGV2ZW50KSk7ICAgICAgICAgICAgICAgLy8gSW5pdGlhbGl6ZSBhbGwgZmllbGRz IHRvIHplcm8KCWV2ZW50LnR5cGUgPSBQRVJGX1RZUEVfUkFXOyAgICAgICAgICAgICAgICAg ICAgIC8vIFdlIHdpbGwgdXNlIGN1c3RvbSAicmF3IiBjb25maWcgdmFsdWVzLCBkZWZpbmVk IGluIHB3cjhfaHBtX01NQ1JfbWFwW10KCWV2ZW50LnNpemUgPSBzaXplb2Yoc3RydWN0IHBl cmZfZXZlbnRfYXR0cik7ICAgIC8vIFRoZSBzaXplIG9mIHRoZSBwZXJmX2V2ZW50X2F0dHIg c3RydWN0dXJlCglhc3NlcnQoZXZlbnQuY29uZmlnID09IDApOyAgICAgICAgICAgICAgICAg ICAgICAvLyBUaGlzIHdpbGwgYmUgc2V0IHdoZW4gd2Ugb3BlbiBvdXIgaW5kaXZpZHVhbCBw ZXJmb3JtYW5jZSBjb3VudGVycwoJZXZlbnQuc2FtcGxlX3BlcmlvZCA9IDEwNDg1NzY7ICAg ICAgICAgICAgICAgICAgLy8gR2VuZXJhdGUgYSBzYW1wbGUgb3ZlcmZsb3cgbm90aWZpY2F0 aW9uIGV2ZXJ5IDFNIGV2ZW50cwoJZXZlbnQuc2FtcGxlX3R5cGUgPSBQRVJGX1NBTVBMRV9J UDsgICAgICAgICAgICAgLy8gUmVjb3JkIHRoZSBpbnN0cnVjdGlvbiBwb2ludGVyCglldmVu dC5zYW1wbGVfdHlwZSB8PSBQRVJGX1NBTVBMRV9USUQ7ICAgICAgICAgICAvLyBSZWNvcmQg dGhlIHByb2Nlc3MgYW5kIHRocmVhZCBJRHMKCWV2ZW50LnNhbXBsZV90eXBlIHw9IFBFUkZf U0FNUExFX1RJTUU7ICAgICAgICAgIC8vIFJlY29yZCBhIHRpbWVzdGFtcCB3aXRoIGVhY2gg c2FtcGxlCglldmVudC5zYW1wbGVfdHlwZSB8PSBQRVJGX1NBTVBMRV9SRUFEOyAgICAgICAg ICAvLyBSZWNvcmQgY291bnRlciB2YWx1ZXMgZm9yIGFsbCBldmVudHMgaW4gdGhlIGdyb3Vw CglldmVudC5zYW1wbGVfdHlwZSB8PSBQRVJGX1NBTVBMRV9DUFU7ICAgICAgICAgICAvLyBS ZWNvcmQgdGhlIENQVSBudW1iZXIgYXNzb2NpYXRlZCB3aXRoIHRoaXMgZXZlbnQKCWV2ZW50 LmluaGVyaXQgPSAxOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFNhbXBsZSBm b3IgY2hpbGQgdGhyZWFkcyBhcyB3ZWxsCglldmVudC5leGNsdWRlX2tlcm5lbCA9IDE7ICAg ICAgICAgICAgICAgICAgICAgICAvLyBFeGNsdWRlIGV2ZW50cyB0aGF0IGhhcHBlbmVkIGlu IGtlcm5lbCBzcGFjZQoJZXZlbnQuZXhjbHVkZV9odiA9IDE7ICAgICAgICAgICAgICAgICAg ICAgICAgICAgLy8gRXhjbHVkZSBldmVudHMgdGhhdCBoYXBwZW5lZCBpbiBoeXBlcnZpc29y IHNwYWNlCglldmVudC5leGNsdWRlX2lkbGUgPSAwOyAgICAgICAgICAgICAgICAgICAgICAg ICAvLyBJbmNsdWRlIGV2ZW50cyB0aGF0IGhhcHBlbmVkIHdoZW4gdGhlIENQVSBpcyBpZGxl CglldmVudC5wcmVjaXNlX2lwID0gMjsgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBS ZXF1ZXN0IGEgcHJlY2lzZSBJUCBhZGRyZXNzIHdoZW5ldmVyIHBvc3NpYmxlCglhc3NlcnQo ZXZlbnQud2F0ZXJtYXJrID09IDApOyAgICAgICAgICAgICAgICAgICAvLyBSZXF1aXJlZCB0 byB1c2Ugd2FrZXVwX2V2ZW50cwoJYXNzZXJ0KGV2ZW50LmZyZXEgPT0gMCk7ICAgICAgICAg ICAgICAgICAgICAgICAgLy8gSW5kaWNhdGUgdGhhdCB3ZSdyZSB1c2luZyBjb3VudGVyLWJh c2VkIHNhbXBsaW5nCglldmVudC53YWtldXBfZXZlbnRzID0gMTsgICAgICAgICAgICAgICAg ICAgCSAgICAvLyBCZWdpbiBzZW5kaW5nIG92ZXJmbG93IG5vdGlmaWNhdGlvbnMgYWZ0ZXIg eCBldmVudHMKCWV2ZW50LmJwX3R5cGUgPSBIV19CUkVBS1BPSU5UX0VNUFRZOyAgICAgICAg ICAgIC8vIE5vIGJyZWFrcG9pbnQgdHlwZQoJYXNzZXJ0KGV2ZW50LmNvbmZpZzEgPT0gMCk7 ICAgICAgICAgICAgICAgICAgICAgLy8gTm90IHVzZWQKCWFzc2VydChldmVudC5jb25maWcy ID09IDApOyAgICAgICAgICAgICAgICAgICAgIC8vIE5vdCB1c2VkCgoJLyoKCSAqIExvY2F0 ZSBvdXIgcGVyZm9ybWFuY2UgY291bnRlciBncm91cCBmcm9tIHRoZSBNTUNSIG1hcC4KCSAq IElmIHRoZSB1c2VyIHNwZWNpZmllZCBhIGdyb3VwIG51bWJlciBvZiAwLCBpbnN0ZWFkIHVz ZSBhIGN1c3RvbQoJICogZ3JvdXAgdGhhdCB3ZSdsbCBkZWZpbmUgb3Vyc2VsdmVzLgoJICov CglpZihncm91cG51bSA9PSAwKXsKCQljdXN0b21Db3VudGVyR3JvdXBbMF0gPSAweDAwMDAw MTAwRjQ7IC8vIFBNX0ZMT1AgICAgICAgIC0tIEZMT1AgZmluaXNoZWQKCQljdXN0b21Db3Vu dGVyTmFtZXNbMF0gPSAiUE1fRkxPUCI7CgoJCWN1c3RvbUNvdW50ZXJHcm91cFsxXSA9IDB4 MDAwMDAwYTBhODsgLy8gUE1fVlNVMF9TSU5HTEUgLS0gRlBVIHNpbmdsZSBwcmVjaXNpb24K CQljdXN0b21Db3VudGVyTmFtZXNbMV0gPSAiUE1fVlNVMF9TSU5HTEUiOwoKCQljdXN0b21D b3VudGVyR3JvdXBbMl0gPSAweDAwMDAwMGEwYWE7IC8vIFBNX1ZTVTFfU0lOR0xFIC0tIEZQ VSBzaW5nbGUgcHJlY2lzaW9uCgkJY3VzdG9tQ291bnRlck5hbWVzWzJdID0gIlBNX1ZTVTFf U0lOR0xFIjsKCgkJY3VzdG9tQ291bnRlckdyb3VwWzNdID0gMHgwMDAwMDBiMDhjOyAvLyBQ TV9WU1UwX1NURiAgICAtLSBGUFUgc3RvcmUgKFNQIG9yIERQKSBpc3N1ZWQgb24gUGlwZTAK CQljdXN0b21Db3VudGVyTmFtZXNbM10gPSAiUE1fVlNVMF9TVEYiOwoKCQljdXN0b21Db3Vu dGVyR3JvdXBbNF0gPSAweDAwMDAwMGIwOGU7IC8vIFBNX1ZTVTFfU1RGICAgIC0tIEZQVSBz dG9yZSAoU1Agb3IgRFApIGlzc3VlZCBvbiBQaXBlMQoJCWN1c3RvbUNvdW50ZXJOYW1lc1s0 XSA9ICJQTV9WU1UxX1NURiI7CgoJCWN1c3RvbUNvdW50ZXJHcm91cFs1XSA9IDB4MDAwMDAw YTBiNjsgLy8gUE1fRlBVMV9GUlNQICAgLS0gRlJvdW5kIHRvIHNpbmdsZSBwcmVjaXNpb24g aW5zdHJ1Y3Rpb24gZXhlY3V0ZWQKCQljdXN0b21Db3VudGVyTmFtZXNbNV0gPSAiUE1fRlBV MV9GUlNQIjsKCgkJbW1jck1hcCA9IChsb25nICopKCZjdXN0b21Db3VudGVyR3JvdXApOwoJ fQoJZWxzZSB7CgkJbW1jck1hcCA9IChsb25nICopKCZwd3I4X2hwbV9NTUNSX21hcFtncm91 cG51bS0xXSk7Cgl9CgoJLyoKCSAqIEFsbG9jYXRlIHRoZSBnbG9iYWwgZGF0YSBzdHJ1Y3R1 cmVzIHRoYXQgd2Ugd2lsbCB1c2UgdG8gbWFuYWdlCgkgKiB0aGVzZSBwZXJmb3JtYW5jZSBj b3VudGVycyBhbmQgdGhlaXIgZGF0YQoJICovCgoJLy8gQWxsb2NhdGUgdGhlIGFycmF5IGZv ciBzdG9yaW5nIHNhbXBsaW5nIGRhdGEKCW91clNhbXBsaW5nRGF0YSA9IChzYW1wbGluZ0Rh dGFBbmNob3IgKiljYWxsb2MoMSwgc2l6ZW9mKHNhbXBsaW5nRGF0YUFuY2hvcikpOwoKCS8v IEFsbG9jYXRlIHRoZSBhcnJheSB0cmFja2luZyBvdXIgb3BlbiBwZXJmb3JtYW5jZSBjb3Vu dGVycwoJcGVyZkNvdW50ZXJzQnlDUFUgPSAocGVyZm9ybWFuY2VDb3VudGVyc0J5Q1BVICop Y2FsbG9jKDEsKHNpemVvZihwZXJmb3JtYW5jZUNvdW50ZXJzQnlDUFUpICogbnVtQ1BVcykp OwoKCS8qCgkgKiBPcGVuIGFsbCBwZXJmb3JtYW5jZSBjb3VudGVycyBvbiBhbGwgQ1BVcwoJ ICoKCSAqIEVhY2ggY291bnRlciB3aWxsIGJlIG9wZW5lZCBpbiB0aGUgImRpc2FibGVkIiBz dGF0ZSwgdG8gcHJldmVudAoJICogYW55IGRhdGEgZnJvbSBjb21pbmcgaW4gdW50aWwgd2Un cmUgcmVhZHkuCgkgKi8KCWZvcihpbnQgaSA9IDA7IGkgPCBudW1DUFVzOyBpKyspewoKCQlw ZXJmb3JtYW5jZUNvdW50ZXIqIGNvdW50ZXJzID0gKHBlcmZvcm1hbmNlQ291bnRlciAqKWNh bGxvYygxLChzaXplb2YocGVyZm9ybWFuY2VDb3VudGVyKSAqIEhQTV9NQVhfQ09VTlRFUlMp KTsKCQlwZXJmQ291bnRlcnNCeUNQVVtpXS5jcHVpZCA9IGk7CgkJcGVyZkNvdW50ZXJzQnlD UFVbaV0ubGVhZGVyX2ZkID0gLTE7CgkJYXNzZXJ0KHBlcmZDb3VudGVyc0J5Q1BVW2ldLm1t YXBfYnVmZmVyID09IE5VTEwpOwoJCXBlcmZDb3VudGVyc0J5Q1BVW2ldLnBlcmZvcm1hbmNl Q291bnRlckFycmF5ID0gY291bnRlcnM7CgoJCWZvciAoaW50IGogPSAwOyBqIDwgSFBNX01B WF9DT1VOVEVSUzsgaisrKSB7CgoJCQkvLyBTZWxlY3QgdGhlIGRlc2lyZWQgcGVyZm9ybWFu Y2UgZXZlbnQKCQkJZXZlbnQuY29uZmlnID0gbW1jck1hcFtqXTsKCgkJCS8vIFN0YXJ0IHBh cmVudCBjb3VudGVyIGluIHRoZSAiZGlzYWJsZWQiIHN0YXRlCgkJCWV2ZW50LmRpc2FibGVk ID0gKHBlcmZDb3VudGVyc0J5Q1BVW2ldLmxlYWRlcl9mZCA8IDApID8gMSA6IDA7CgoJCQkv LyBGaWxsIGluIHRoZSBwZXJmb3JtYW5jZSBldmVudCBjb3VudGVyIG1ldGFkYXRhCgkJCWNv dW50ZXJzW2pdLmZkID0gLTE7CgkJCWNvdW50ZXJzW2pdLmNvdW50ZXJfaWQgPSBldmVudC5j b25maWc7CgkJCWNvdW50ZXJzW2pdLmNvdW50ZXJfbmFtZSA9IGdldENvdW50ZXJOYW1lKGdy b3VwbnVtLTEsIGopOwoKCQkJLy8gQ2FsbCBwZXJmX2V2ZW50X29wZW4oKSB0byBvcGVuIHRo ZSBwZXJmb3JtYW5jZSBldmVudAoJCQljb3VudGVyc1tqXS5mZCA9IHBlcmZfZXZlbnRfb3Bl bigmZXZlbnQsIHRhcmdldFBJRCwgaiwgcGVyZkNvdW50ZXJzQnlDUFVbaV0ubGVhZGVyX2Zk LCBmbGFncyk7CgkJCWlmIChjb3VudGVyc1tqXS5mZCA9PSAtMSkgewoJCQkJcHJpbnRFcnJv cigibGluZSAlZCAtIHBlcmZfZXZlbnRfb3BlbigpIGZhaWxlZCBmb3IgY291bnRlciAlZCAo JXMpIG9uIENQVSAlZCB3L2Vycm5vID0gJWQgKCVzKVxuIiwKCQkJCQkgICBfX0xJTkVfXywg aiwgY291bnRlcnNbal0uY291bnRlcl9uYW1lLCBpLCBlcnJubywgc3RyZXJyb3IoZXJybm8p KTsKCQkJCXJldHVybiAoKHB0aHJlYWRfdCkwKTsKCQkJfQoKCQkJLy8gSWYgdGhpcyBpcyB0 aGUgZmlyc3QgZXZlbnQgZGVmaW5lZCBmb3IgdGhpcyBDUFUsIHRoZW4gdXNlIG1tYXAKCQkJ Ly8gdG8gZGVmaW5lIHRoZSBwZXJmX2V2ZW50IHJpbmcgYnVmZmVyIHRoYXQgd2lsbCBiZSBz aGFyZWQgYnkgYWxsCgkJCS8vIGV2ZW50cyBvbiB0aGlzIENQVS4KCQkJaWYocGVyZkNvdW50 ZXJzQnlDUFVbaV0ubGVhZGVyX2ZkIDwgMCl7CgoJCQkJYXNzZXJ0KHBlcmZDb3VudGVyc0J5 Q1BVW2ldLm1tYXBfYnVmZmVyID09IE5VTEwpOwoJCQkJcGVyZkNvdW50ZXJzQnlDUFVbaV0u bGVhZGVyX2ZkID0gY291bnRlcnNbal0uZmQ7ICAvLyBXZSd2ZSBmb3VuZCBvdXIgZXZlbnQg Z3JvdXAgbGVhZGVyCgoJCQkJLy8gbW1hcCB0aGUgcmluZyBidWZmZXIgZm9yIHRoaXMgQ1BV CgkJCQl2b2lkICpidWZfYWRkciA9IG1tYXAoTlVMTCwgTU1BUEJVRkZFUlNJWkUsIFBST1Rf UkVBRCB8IFBST1RfV1JJVEUsIE1BUF9TSEFSRUQsIGNvdW50ZXJzW2pdLmZkLCAwKTsKCQkJ CWlmIChidWZfYWRkciA9PSBNQVBfRkFJTEVEKSB7CgkJCQkJcHJpbnRFcnJvcigibGluZSAl ZCAtIG1tYXAoTlVMTCwgJWQsIFBST1RfUkVBRCB8IFBST1RfV1JJVEUsIE1BUF9TSEFSRUQs ICVkLCAwKSByZXR1cm5lZCBlcnJvcjogJXNcbiIsCgkJCQkJCSAgX19MSU5FX18sIE1NQVBC VUZGRVJTSVpFLCBjb3VudGVyc1tqXS5mZCwgc3RyZXJyb3IoZXJybm8pKTsKCQkJCQlyZXR1 cm4gKChwdGhyZWFkX3QpMCk7CgkJCQl9CgoJCQkJLy8gU3RvcmUgYSBwb2ludGVyIHRvIG91 ciBtbWFwIGJ1ZmZlciBpbnRvIHRoZSBhcnJheSB0cmFja2luZyBvdXIgb3BlbiBwZXJmb3Jt YW5jZSBjb3VudGVycwoJCQkJcGVyZkNvdW50ZXJzQnlDUFVbaV0ubW1hcF9idWZmZXIgPSAo c3RydWN0IHBlcmZfZXZlbnRfbW1hcF9wYWdlKilidWZfYWRkcjsKCQkJfQoKCQkJLy8gSWYg dGhpcyBpcyAqbm90KiB0aGUgZmlyc3QgZXZlbnQgZGVmaW5lZCBmb3IgdGhpcyBDUFUsIHRo ZW4gdXNlCgkJCS8vIGlvY3RsIHdpdGggUEVSRl9FVkVOVF9JT0NfU0VUX09VVFBVVCB0byB0 ZWxsIHBlcmZfZXZlbnQgdG8gYXNzb2NpYXRlCgkJCS8vIHRoaXMgcGVyZl9ldmVudCBmaWxl IGRlc2NyaXB0b3Igd2l0aCBjb3VudGVyc1swXS5mZC4gIFRoaXMgd2lsbAoJCQkvLyBjYXVz ZSBwZXJmX2V2ZW50IHRvIHJlcG9ydCB0aGlzIGV2ZW50J3Mga2VybmVsIG5vdGlmaWNhdGlv bnMgdG8gdGhlCgkJCS8vIHJpbmcgYnVmZmVyIGF0IHBlcmZDb3VudGVyc0J5Q1BVW2ldLm1t YXBfYnVmZmVyLgoJCQllbHNlIHsKCgkJCQlhc3NlcnQocGVyZkNvdW50ZXJzQnlDUFVbaV0u bW1hcF9idWZmZXIgIT0gTlVMTCk7CgoJCQkJaWYoaW9jdGwoY291bnRlcnNbal0uZmQsIFBF UkZfRVZFTlRfSU9DX1NFVF9PVVRQVVQsIHBlcmZDb3VudGVyc0J5Q1BVW2ldLmxlYWRlcl9m ZCkgIT0gMCl7CgkJCQkJcHJpbnRFcnJvcigibGluZSAlZCAtIGlvY3RsKCVkLCBQRVJGX0VW RU5UX0lPQ19TRVRfT1VUUFVULCAlZCkgcmV0dXJuZWQgZXJyb3I6ICVzXG4iLAoJCQkJCQkJ X19MSU5FX18sIGNvdW50ZXJzW2pdLmZkLCBwZXJmQ291bnRlcnNCeUNQVVtpXS5sZWFkZXJf ZmQsIHN0cmVycm9yKGVycm5vKSk7CgkJCQkJcmV0dXJuICgocHRocmVhZF90KTApOwoJCQkJ fQoJCQl9CgkJfQoJfQoKCS8qCgkgKiBTcGF3biB0aGUgcGVyZm9ybWFuY2UgbW9uaXRvcmlu ZyB0aHJlYWQgYW5kIHJldHVybiBpdHMgcHRocmVhZHMgVElECgkgKi8KCWlmKHB0aHJlYWRf Y3JlYXRlKCZwZXJmbW9uVGhyZWFkSUQsIE5VTEwsIHBlcmZtb25UaHJlYWQsICh2b2lkKikm cGVyZm1vblRocmVhZEluRXJyb3IpICE9IDApewoJCXByaW50RXJyb3IoIkVycm9yIGNhbGxp bmcgcHRocmVhZF9jcmVhdGUgZm9yIHBlcmZtb24gdGhyZWFkWyVsdV1cbiIsICh1bnNpZ25l ZCBsb25nKXBlcmZtb25UaHJlYWRJRCk7CgkJcGVyZm1vblRocmVhZElEID0gKChwdGhyZWFk X3QpMCk7Cgl9CgoJLy8gQ2hlY2sgdG8gc2VlIGlmIHRoZSBwZXJmb3JtYW5jZSBtb25pdG9y aW5nIHRocmVhZCBzdGFydGVkIHdpdGhvdXQgZXJyb3IKCWlmKHBlcmZtb25UaHJlYWRJbkVy cm9yKXsKCQlyZXR1cm4gKChwdGhyZWFkX3QpMCk7Cgl9CgoJcGVyZm1vbkluaXRpYWxpemVk ID0gMTsKCXJldHVybiBwZXJmbW9uVGhyZWFkSUQ7Cn0K --------------8BA00E4C30FE94D7C598AFEE--