From mboxrd@z Thu Jan 1 00:00:00 1970 From: Pradyumna Sampath Subject: Re: [PATCH] Re: mq_timedrecieve timeout accuracy Date: Tue, 30 Mar 2010 09:41:57 +0200 Message-ID: References: <6d09081c1003240527r471ee34etbba11b4b7c7e92b3@mail.gmail.com> <8226231.1269436934345.JavaMail.ngmail@webmail10.arcor-online.net> <6d09081c1003240637w28ee6861tfcef4c7876ef3e40@mail.gmail.com> <6d09081c1003240703o19ad3dffx20abae9d15e2d0b@mail.gmail.com> <6d09081c1003240846s31fa5917p470f8936a39662f@mail.gmail.com> <4BB0C269.9050408@osadl.org> Mime-Version: 1.0 Content-Type: multipart/mixed; boundary=0014852d24c0ace62b0482ffc34f Cc: "M. Koehrer" , linux-rt-users@vger.kernel.org, rachana.rao@in.abb.com, Thomas Gleixner To: Carsten Emde Return-path: Received: from ey-out-2122.google.com ([74.125.78.24]:56416 "EHLO ey-out-2122.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751409Ab0C3HmB (ORCPT ); Tue, 30 Mar 2010 03:42:01 -0400 Received: by ey-out-2122.google.com with SMTP id d26so1199820eyd.19 for ; Tue, 30 Mar 2010 00:41:59 -0700 (PDT) In-Reply-To: <4BB0C269.9050408@osadl.org> Sender: linux-rt-users-owner@vger.kernel.org List-ID: --0014852d24c0ace62b0482ffc34f Content-Type: text/plain; charset=ISO-8859-1 Hi Carsten, On Mon, Mar 29, 2010 at 5:08 PM, Carsten Emde wrote: > Does the attached patch work for you? > > - Fixed error handling > - Replaced schedule_timeout() with schedule_hrtimeout() > - Let schedule_hrtimeout() handle expired timers Well no, the mq_timedrecieve blocks for ever using my test program. This behaviour would not really be evident in the pmqtest since the frequency of sending the test messages is lesser than the timeout value. So, I have modified the pmqtest (attached) to - Not send test messages This means when the -T1 option is used it should wait on mq_timedrecieve for 1 second and then exit. On a normal kernel this behaviour is demostrated but with the patch on, the timeout never expires and hence the program does not exit. regards /prady -- http://www.prady.in --0014852d24c0ace62b0482ffc34f Content-Type: text/plain; charset=US-ASCII; name="pmqtest.c" Content-Disposition: attachment; filename="pmqtest.c" Content-Transfer-Encoding: base64 X-Attachment-Id: f_g7eef5sh1 LyoNCiAqIHBtcXRlc3QuYw0KICoNCiAqIENvcHlyaWdodCAoQykgMjAwOSBDYXJzdGVuIEVtZGUg PEMuRW1kZUBvc2FkbC5vcmc+DQogKg0KICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7 IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkNCiAqIGl0IHVuZGVyIHRoZSB0 ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5DQog KiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExp Y2Vuc2UsIG9yDQogKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLg0KICoNCiAq IFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUg dXNlZnVsLA0KICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGlt cGxpZWQgd2FycmFudHkgb2YNCiAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBB UlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUNCiAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNl IGZvciBtb3JlIGRldGFpbHMuDQogKg0KICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29w eSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UNCiAqIGFsb25nIHdpdGggdGhpcyBw cm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlDQogKiBGb3VuZGF0aW9u LCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3 LA0KICogVVNBLg0KICovDQoNCiNpbmNsdWRlIDxzdGRpby5oPg0KI2luY2x1ZGUgPHN0ZGxpYi5o Pg0KI2luY2x1ZGUgPHVuaXN0ZC5oPg0KI2luY2x1ZGUgPGxpbWl0cy5oPg0KI2luY2x1ZGUgPGZj bnRsLmg+DQojaW5jbHVkZSA8Z2V0b3B0Lmg+DQojaW5jbHVkZSA8c2lnbmFsLmg+DQojaW5jbHVk ZSA8c3RyaW5nLmg+DQojaW5jbHVkZSA8dGltZS5oPg0KI2luY2x1ZGUgPHN5cy90eXBlcy5oPg0K I2luY2x1ZGUgPHN5cy9zdGF0Lmg+DQojaW5jbHVkZSA8c3lzL3RpbWUuaD4NCiNpbmNsdWRlIDxz eXMvbW1hbi5oPg0KI2luY2x1ZGUgPGxpbnV4L3VuaXN0ZC5oPg0KI2luY2x1ZGUgPHV0bXB4Lmg+ DQojaW5jbHVkZSA8bXF1ZXVlLmg+DQojaW5jbHVkZSAicnQtdXRpbHMuaCINCiNpbmNsdWRlICJy dC1nZXRfY3B1LmgiDQoNCiNpbmNsdWRlIDxwdGhyZWFkLmg+DQoNCiNkZWZpbmUgZ2V0dGlkKCkg c3lzY2FsbChfX05SX2dldHRpZCkNCg0KI2RlZmluZSBVU0VDX1BFUl9TRUMgMTAwMDAwMA0KDQoj ZGVmaW5lIFNZTkNNUV9OQU1FICIvc3luY21zZyVkIg0KI2RlZmluZSBURVNUTVFfTkFNRSAiL3Rl c3Rtc2clZCINCiNkZWZpbmUgTVNHX1NJWkUgOA0KI2RlZmluZSBNU0VDX1BFUl9TRUMgMTAwMA0K I2RlZmluZSBOU0VDX1BFUl9TRUMgMTAwMDAwMDAwMA0KDQpjaGFyICpzeW5jbXNnID0gIlN5bmNp bmciOw0KY2hhciAqdGVzdG1zZyA9ICJUZXN0aW5nIjsNCg0KZW51bSB7DQoJQUZGSU5JVFlfVU5T UEVDSUZJRUQsDQoJQUZGSU5JVFlfU1BFQ0lGSUVELA0KCUFGRklOSVRZX1VTRUFMTA0KfTsNCg0K c3RydWN0IHBhcmFtcyB7DQoJaW50IG51bTsNCglpbnQgY3B1Ow0KCWludCBwcmlvcml0eTsNCglp bnQgYWZmaW5pdHk7DQoJaW50IHNlbmRlcjsNCglpbnQgc2FtcGxlczsNCglpbnQgbWF4X2N5Y2xl czsNCglpbnQgdHJhY2VsaW1pdDsNCglpbnQgdGlkOw0KCWludCBzaHV0ZG93bjsNCglpbnQgc3Rv cHBlZDsNCglzdHJ1Y3QgdGltZXNwZWMgZGVsYXk7DQoJdW5zaWduZWQgaW50IG1pbmRpZmYsIG1h eGRpZmY7DQoJZG91YmxlIHN1bWRpZmY7DQoJc3RydWN0IHRpbWV2YWwgc2VudCwgcmVjZWl2ZWQs IGRpZmY7DQoJcHRocmVhZF90IHRocmVhZGlkOw0KCWludCB0aW1lb3V0Ow0KCW1xZF90IHN5bmNt cSwgdGVzdG1xOw0KCWNoYXIgcmVjdnN5bmNtc2dbTVNHX1NJWkVdOw0KCWNoYXIgcmVjdnRlc3Rt c2dbTVNHX1NJWkVdOw0KCXN0cnVjdCBwYXJhbXMgKm5laWdoYm9yOw0KCWNoYXIgZXJyb3JbTUFY X1BBVEggKiAyXTsNCn07DQoNCmludCBub19zZW5kID0gMTsNCg0Kdm9pZCAqcG1xdGhyZWFkKHZv aWQgKnBhcmFtKQ0Kew0KCWludCBtdXN0Z2V0Y3B1ID0gMDsNCglzdHJ1Y3QgcGFyYW1zICpwYXIg PSBwYXJhbTsNCgljcHVfc2V0X3QgbWFzazsNCglpbnQgcG9saWN5ID0gU0NIRURfRklGTzsNCglz dHJ1Y3Qgc2NoZWRfcGFyYW0gc2NoZWRwOw0KCXN0cnVjdCB0aW1lc3BlYyB0czsNCg0KCW1lbXNl dCgmc2NoZWRwLCAwLCBzaXplb2Yoc2NoZWRwKSk7DQoJc2NoZWRwLnNjaGVkX3ByaW9yaXR5ID0g cGFyLT5wcmlvcml0eTsNCglzY2hlZF9zZXRzY2hlZHVsZXIoMCwgcG9saWN5LCAmc2NoZWRwKTsN Cg0KCWlmIChwYXItPmNwdSAhPSAtMSkgew0KCQlDUFVfWkVSTygmbWFzayk7DQoJCUNQVV9TRVQo cGFyLT5jcHUsICZtYXNrKTsNCgkJaWYoc2NoZWRfc2V0YWZmaW5pdHkoMCwgc2l6ZW9mKG1hc2sp LCAmbWFzaykgPT0gLTEpDQoJCQlmcHJpbnRmKHN0ZGVyciwJIldBUk5JTkc6IENvdWxkIG5vdCBz ZXQgQ1BVIGFmZmluaXR5ICINCgkJCQkidG8gQ1BVICMlZFxuIiwgcGFyLT5jcHUpOw0KCX0gZWxz ZQ0KCQltdXN0Z2V0Y3B1ID0gMTsNCg0KCXBhci0+dGlkID0gZ2V0dGlkKCk7DQoNCglpZiAocGFy LT50aW1lb3V0ID4gMCkgew0KCQljbG9ja19nZXR0aW1lKENMT0NLX1JFQUxUSU1FLCAmdHMpOw0K CQl0cy50dl9zZWMgKz0gcGFyLT50aW1lb3V0Ow0KCX0NCg0KCXdoaWxlICghcGFyLT5zaHV0ZG93 bikgew0KCQlpZiAocGFyLT5zZW5kZXIpIHsNCgkJCS8qIFNlbmQgbWVzc2FnZTogU3RhcnQgb2Yg bGF0ZW5jeSBtZWFzdXJlbWVudCAuLi4gKi8NCgkJCWdldHRpbWVvZmRheSgmcGFyLT5zZW50LCBO VUxMKTsNCgkJCWlmIChtcV9zZW5kKHBhci0+dGVzdG1xLCB0ZXN0bXNnLCBzdHJsZW4odGVzdG1z ZyksIDEpICE9IDApIHsNCgkJCQlmcHJpbnRmKHN0ZGVyciwgImNvdWxkIG5vdCBzZW5kIHRlc3Qg bWVzc2FnZVxuIik7DQoJCQkJcGFyLT5zaHV0ZG93biA9IDE7DQoJCQl9DQoJCQlwYXItPnNhbXBs ZXMrKzsNCgkJCWlmKHBhci0+bWF4X2N5Y2xlcyAmJiBwYXItPnNhbXBsZXMgPj0gcGFyLT5tYXhf Y3ljbGVzKQ0KCQkJCXBhci0+c2h1dGRvd24gPSAxOw0KCQkJaWYgKG11c3RnZXRjcHUpDQoJCQkJ cGFyLT5jcHUgPSBnZXRfY3B1KCk7DQoJCQkvKiBXYWl0IHVudGlsIHJlY2VpdmVyIHJlYWR5ICov DQoJCQlpZiAocGFyLT50aW1lb3V0ID4gMCkgew0KCQkJCWlmIChtcV90aW1lZHJlY2VpdmUocGFy LT5zeW5jbXEsIHBhci0+cmVjdnN5bmNtc2csIE1TR19TSVpFLCBOVUxMLCAmdHMpDQoJCQkJICAg ICE9IHN0cmxlbihzeW5jbXNnKSkgew0KCQkJCQlmcHJpbnRmKHN0ZGVyciwgImNvdWxkIG5vdCBy ZWNlaXZlIHN5bmMgbWVzc2FnZVxuIik7DQoJCQkJCXBhci0+c2h1dGRvd24gPSAxOw0KCQkJCX0N CgkJCX0gZWxzZSB7DQoJCQkJaWYgKG1xX3JlY2VpdmUocGFyLT5zeW5jbXEsIHBhci0+cmVjdnN5 bmNtc2csIE1TR19TSVpFLCBOVUxMKSAhPQ0KCQkJCSAgICBzdHJsZW4oc3luY21zZykpIHsNCgkJ CQkJZnByaW50ZihzdGRlcnIsICJjb3VsZCBub3QgcmVjZWl2ZSBzeW5jIG1lc3NhZ2VcbiIpOw0K CQkJCQlwYXItPnNodXRkb3duID0gMTsNCgkJCQl9DQoJCQl9DQoJCQlpZiAoc3RyY21wKHN5bmNt c2csIHBhci0+cmVjdnN5bmNtc2cpKSB7DQoJCQkJZnByaW50ZihzdGRlcnIsICJFUlJPUjogU3lu YyBtZXNzYWdlIG1pc21hdGNoIGRldGVjdGVkXG4iKTsNCgkJCQlmcHJpbnRmKHN0ZGVyciwgIiAg JXMgIT0gJXNcbiIsIHN5bmNtc2csIHBhci0+cmVjdnN5bmNtc2cpOw0KCQkJCXBhci0+c2h1dGRv d24gPSAxOw0KCQkJfQ0KDQoJCX0gZWxzZSB7DQoJCQkvKiBSZWNlaXZlciAqLw0KCQkJaWYgKHBh ci0+dGltZW91dCA+IDApIHsNCgkJCQlpZiAobXFfdGltZWRyZWNlaXZlKHBhci0+dGVzdG1xLCBw YXItPnJlY3Z0ZXN0bXNnLCBNU0dfU0laRSwgTlVMTCwgJnRzKSAhPQ0KCQkJCSAgICBzdHJsZW4o dGVzdG1zZykpIHsNCgkJCQkJZnByaW50ZihzdGRlcnIsICJjb3VsZCBub3QgcmVjZWl2ZSB0ZXN0 IG1lc3NhZ2VcbiIpOw0KCQkJCQlwYXItPnNodXRkb3duID0gMTsNCgkJCQl9DQoJCQl9IGVsc2Ug ew0KCQkJCWlmIChtcV9yZWNlaXZlKHBhci0+dGVzdG1xLCBwYXItPnJlY3Z0ZXN0bXNnLCBNU0df U0laRSwgTlVMTCkgIT0NCgkJCQkgICAgc3RybGVuKHRlc3Rtc2cpKSB7DQoJCQkJCWZwcmludGYo c3RkZXJyLCAiY291bGQgbm90IHJlY2VpdmUgdGVzdCBtZXNzYWdlXG4iKTsNCgkJCQkJcGFyLT5z aHV0ZG93biA9IDE7DQoJCQkJfQ0KCQkJfQ0KCQkJLyogLi4uIFJlY2VpdmVkIHRoZSBtZXNzYWdl OiBFbmQgb2YgbGF0ZW5jeSBtZWFzdXJlbWVudCAqLw0KCQkJZ2V0dGltZW9mZGF5KCZwYXItPnJl Y2VpdmVkLCBOVUxMKTsNCg0KCQkJaWYgKHN0cmNtcCh0ZXN0bXNnLCBwYXItPnJlY3Z0ZXN0bXNn KSkgew0KCQkJCWZwcmludGYoc3RkZXJyLCAiRVJST1I6IFRlc3QgbWVzc2FnZSBtaXNtYXRjaCBk ZXRlY3RlZFxuIik7DQoJCQkJZnByaW50ZihzdGRlcnIsICIgICVzICE9ICVzXG4iLCB0ZXN0bXNn LCBwYXItPnJlY3Z0ZXN0bXNnKTsNCgkJCQlwYXItPnNodXRkb3duID0gMTsNCgkJCX0NCgkJCXBh ci0+c2FtcGxlcysrOw0KCQkJdGltZXJzdWIoJnBhci0+cmVjZWl2ZWQsICZwYXItPm5laWdoYm9y LT5zZW50LA0KCQkJICAgICZwYXItPmRpZmYpOw0KDQoJCQlpZiAocGFyLT5kaWZmLnR2X3VzZWMg PCBwYXItPm1pbmRpZmYpDQoJCQkJcGFyLT5taW5kaWZmID0gcGFyLT5kaWZmLnR2X3VzZWM7DQoJ CQlpZiAocGFyLT5kaWZmLnR2X3VzZWMgPiBwYXItPm1heGRpZmYpDQoJCQkJcGFyLT5tYXhkaWZm ID0gcGFyLT5kaWZmLnR2X3VzZWM7DQoJCQlwYXItPnN1bWRpZmYgKz0gKGRvdWJsZSkgcGFyLT5k aWZmLnR2X3VzZWM7DQoJCQlpZiAocGFyLT50cmFjZWxpbWl0ICYmIHBhci0+bWF4ZGlmZiA+IHBh ci0+dHJhY2VsaW1pdCkgew0KCQkJCWNoYXIgdHJhY2luZ19lbmFibGVkX2ZpbGVbTUFYX1BBVEhd Ow0KDQoJCQkJc3RyY3B5KHRyYWNpbmdfZW5hYmxlZF9maWxlLCBnZXRfZGVidWdmaWxlcHJlZml4 KCkpOw0KCQkJCXN0cmNhdCh0cmFjaW5nX2VuYWJsZWRfZmlsZSwgInRyYWNpbmdfZW5hYmxlZCIp Ow0KCQkJCWludCB0cmFjaW5nX2VuYWJsZWQgPQ0KCQkJCSAgICBvcGVuKHRyYWNpbmdfZW5hYmxl ZF9maWxlLCBPX1dST05MWSk7DQoJCQkJaWYgKHRyYWNpbmdfZW5hYmxlZCA+PSAwKSB7DQoJCQkJ CXdyaXRlKHRyYWNpbmdfZW5hYmxlZCwgIjAiLCAxKTsNCgkJCQkJY2xvc2UodHJhY2luZ19lbmFi bGVkKTsNCgkJCQl9IGVsc2UNCgkJCQkJc25wcmludGYocGFyLT5lcnJvciwgc2l6ZW9mKHBhci0+ ZXJyb3IpLA0KCQkJCQkgICAgIkNvdWxkIG5vdCBhY2Nlc3MgJXNcbiIsDQoJCQkJCSAgICB0cmFj aW5nX2VuYWJsZWRfZmlsZSk7DQoJCQkJcGFyLT5zaHV0ZG93biA9IDE7DQoJCQkJcGFyLT5uZWln aGJvci0+c2h1dGRvd24gPSAxOw0KCQkJfQ0KDQoJCQlpZiAocGFyLT5tYXhfY3ljbGVzICYmIHBh ci0+c2FtcGxlcyA+PSBwYXItPm1heF9jeWNsZXMpDQoJCQkJcGFyLT5zaHV0ZG93biA9IDE7DQoJ CQlpZiAobXVzdGdldGNwdSkNCgkJCQlwYXItPmNwdSA9IGdldF9jcHUoKTsNCgkJCW5hbm9zbGVl cCgmcGFyLT5kZWxheSwgTlVMTCk7DQoNCgkJCS8qIFRlbGwgcmVjZWl2ZXIgdGhhdCB3ZSBhcmUg cmVhZHkgZm9yIHRoZSBuZXh0IG1lYXN1cmVtZW50ICovDQoJCQlpZiAobm9fc2VuZCA9PSAxKQ0K CQkJew0KCQkJCWlmIChtcV9zZW5kKHBhci0+c3luY21xLCBzeW5jbXNnLCBzdHJsZW4oc3luY21z ZyksIDEpICE9IDApIHsNCgkJCQkJZnByaW50ZihzdGRlcnIsICJjb3VsZCBub3Qgc2VuZCBzeW5j IG1lc3NhZ2VcbiIpOw0KCQkJCQlwYXItPnNodXRkb3duID0gMTsNCgkJCQl9DQoJCQl9DQoJCX0N Cgl9DQoJcGFyLT5zdG9wcGVkID0gMTsNCglyZXR1cm4gTlVMTDsNCn0NCg0KDQpzdGF0aWMgdm9p ZCBkaXNwbGF5X2hlbHAodm9pZCkNCnsNCglwcmludGYoInBtcXRlc3QgViAlMS4yZlxuIiwgVkVS U0lPTl9TVFJJTkcpOw0KCXB1dHMoIlVzYWdlOiBwbXF0ZXN0IDxvcHRpb25zPiIpOw0KCXB1dHMo IkZ1bmN0aW9uOiB0ZXN0IFBPU0lYIG1lc3NhZ2UgcXVldWUgbGF0ZW5jeSIpOw0KCXB1dHMoDQoJ Ik9wdGlvbnM6XG4iDQoJIi1hIFtOVU1dIC0tYWZmaW5pdHkgICAgICAgIHJ1biB0aHJlYWQgI04g b24gcHJvY2Vzc29yICNOLCBpZiBwb3NzaWJsZVxuIg0KCSIgICAgICAgICAgICAgICAgICAgICAg ICAgICB3aXRoIE5VTSBwaW4gYWxsIHRocmVhZHMgdG8gdGhlIHByb2Nlc3NvciBOVU1cbiINCgki LWIgVVNFQyAgLS1icmVha3RyYWNlPVVTRUMgc2VuZCBicmVhayB0cmFjZSBjb21tYW5kIHdoZW4g bGF0ZW5jeSA+IFVTRUNcbiINCgkiLWQgRElTVCAgLS1kaXN0YW5jZT1ESVNUICAgZGlzdGFuY2Ug b2YgdGhyZWFkIGludGVydmFscyBpbiB1cyBkZWZhdWx0PTUwMFxuIg0KCSItaSBJTlRWICAtLWlu dGVydmFsPUlOVFYgICBiYXNlIGludGVydmFsIG9mIHRocmVhZCBpbiB1cyBkZWZhdWx0PTEwMDBc biINCgkiLWwgTE9PUFMgLS1sb29wcz1MT09QUyAgICAgbnVtYmVyIG9mIGxvb3BzOiBkZWZhdWx0 PTAoZW5kbGVzcylcbiINCgkiLXAgUFJJTyAgLS1wcmlvPVBSSU8gICAgICAgcHJpb3JpdHlcbiIN CgkiLVMgICAgICAgLS1zbXAgICAgICAgICAgICAgU01QIHRlc3Rpbmc6IG9wdGlvbnMgLWEgLXQg YW5kIHNhbWUgcHJpb3JpdHlcbiINCiAgICAgICAgIiAgICAgICAgICAgICAgICAgICAgICAgICAg IG9mIGFsbCB0aHJlYWRzXG4iDQoJIi10ICAgICAgIC0tdGhyZWFkcyAgICAgICAgIG9uZSB0aHJl YWQgcGVyIGF2YWlsYWJsZSBwcm9jZXNzb3JcbiINCgkiLXQgW05VTV0gLS10aHJlYWRzPU5VTSAg ICAgbnVtYmVyIG9mIHRocmVhZHM6XG4iDQoJIiAgICAgICAgICAgICAgICAgICAgICAgICAgIHdp dGhvdXQgTlVNLCB0aHJlYWRzID0gbWF4X2NwdXNcbiINCgkiICAgICAgICAgICAgICAgICAgICAg ICAgICAgd2l0aG91dCAtdCBkZWZhdWx0ID0gMVxuIg0KCSItVCBUTyAgICAtLXRpbWVvdXQ9VE8g ICAgICB1c2UgbXFfdGltZWRyZWNlaXZlKCkgaW5zdGVhZCBvZiBtcV9yZWNlaXZlKClcbiINCgki ICAgICAgICAgICAgICAgICAgICAgICAgICAgd2l0aCB0aW1lb3V0IFRPIGluIHNlY29uZHNcbiIp Ow0KCWV4aXQoMSk7DQp9DQoNCg0Kc3RhdGljIGludCBzZXRhZmZpbml0eSA9IEFGRklOSVRZX1VO U1BFQ0lGSUVEOw0Kc3RhdGljIGludCBhZmZpbml0eTsNCnN0YXRpYyBpbnQgdHJhY2VsaW1pdDsN CnN0YXRpYyBpbnQgcHJpb3JpdHk7DQpzdGF0aWMgaW50IG51bV90aHJlYWRzID0gMTsNCnN0YXRp YyBpbnQgbWF4X2N5Y2xlczsNCnN0YXRpYyBpbnQgaW50ZXJ2YWwgPSAxMDAwOw0Kc3RhdGljIGlu dCBkaXN0YW5jZSA9IDUwMDsNCnN0YXRpYyBpbnQgc21wOw0Kc3RhdGljIGludCBzYW1lcHJpbzsN CnN0YXRpYyBpbnQgdGltZW91dDsNCg0Kc3RhdGljIHZvaWQgcHJvY2Vzc19vcHRpb25zIChpbnQg YXJnYywgY2hhciAqYXJndltdKQ0Kew0KCWludCBlcnJvciA9IDA7DQoJaW50IG1heF9jcHVzID0g c3lzY29uZihfU0NfTlBST0NFU1NPUlNfQ09ORik7DQoNCglmb3IgKDs7KSB7DQoJCWludCBvcHRp b25faW5kZXggPSAwOw0KCQkvKiogT3B0aW9ucyBmb3IgZ2V0b3B0ICovDQoJCXN0YXRpYyBzdHJ1 Y3Qgb3B0aW9uIGxvbmdfb3B0aW9uc1tdID0gew0KCQkJeyJhZmZpbml0eSIsIG9wdGlvbmFsX2Fy Z3VtZW50LCBOVUxMLCAnYSd9LA0KCQkJeyJicmVha3RyYWNlIiwgcmVxdWlyZWRfYXJndW1lbnQs IE5VTEwsICdiJ30sDQoJCQl7ImRpc3RhbmNlIiwgcmVxdWlyZWRfYXJndW1lbnQsIE5VTEwsICdk J30sDQoJCQl7ImludGVydmFsIiwgcmVxdWlyZWRfYXJndW1lbnQsIE5VTEwsICdpJ30sDQoJCQl7 Imxvb3BzIiwgcmVxdWlyZWRfYXJndW1lbnQsIE5VTEwsICdsJ30sDQoJCQl7InByaW9yaXR5Iiwg cmVxdWlyZWRfYXJndW1lbnQsIE5VTEwsICdwJ30sDQoJCQl7InNtcCIsIG5vX2FyZ3VtZW50LCBO VUxMLCAnUyd9LA0KCQkJeyJ0aHJlYWRzIiwgb3B0aW9uYWxfYXJndW1lbnQsIE5VTEwsICd0J30s DQoJCQl7InRpbWVvdXQiLCByZXF1aXJlZF9hcmd1bWVudCwgTlVMTCwgJ1QnfSwNCgkJCXsiaGVs cCIsIG5vX2FyZ3VtZW50LCBOVUxMLCAnPyd9LA0KCQkJe05VTEwsIDAsIE5VTEwsIDB9DQoJCX07 DQoJCWludCBjID0gZ2V0b3B0X2xvbmcgKGFyZ2MsIGFyZ3YsICJhOjpiOmQ6aTpsOnA6U3Q6OlQ6 IiwNCgkJCWxvbmdfb3B0aW9ucywgJm9wdGlvbl9pbmRleCk7DQoJCWlmIChjID09IC0xKQ0KCQkJ YnJlYWs7DQoJCXN3aXRjaCAoYykgew0KCQljYXNlICdhJzoNCgkJCWlmIChzbXApIHsNCgkJCQl3 YXJuKCItYSBpZ25vcmVkIGR1ZSB0byAtLXNtcFxuIik7DQoJCQkJYnJlYWs7DQoJCQl9DQoJCQlp ZiAob3B0YXJnICE9IE5VTEwpIHsNCgkJCQlhZmZpbml0eSA9IGF0b2kob3B0YXJnKTsNCgkJCQlz ZXRhZmZpbml0eSA9IEFGRklOSVRZX1NQRUNJRklFRDsNCgkJCX0gZWxzZSBpZiAob3B0aW5kPGFy Z2MgJiYgYXRvaShhcmd2W29wdGluZF0pKSB7DQoJCQkJYWZmaW5pdHkgPSBhdG9pKGFyZ3Zbb3B0 aW5kXSk7DQoJCQkJc2V0YWZmaW5pdHkgPSBBRkZJTklUWV9TUEVDSUZJRUQ7DQoJCQl9IGVsc2Ug ew0KCQkJCXNldGFmZmluaXR5ID0gQUZGSU5JVFlfVVNFQUxMOw0KCQkJfQ0KCQkJYnJlYWs7DQoJ CWNhc2UgJ2InOiB0cmFjZWxpbWl0ID0gYXRvaShvcHRhcmcpOyBicmVhazsNCgkJY2FzZSAnZCc6 IGRpc3RhbmNlID0gYXRvaShvcHRhcmcpOyBicmVhazsNCgkJY2FzZSAnaSc6IGludGVydmFsID0g YXRvaShvcHRhcmcpOyBicmVhazsNCgkJY2FzZSAnbCc6IG1heF9jeWNsZXMgPSBhdG9pKG9wdGFy Zyk7IGJyZWFrOw0KCQljYXNlICdwJzogcHJpb3JpdHkgPSBhdG9pKG9wdGFyZyk7IGJyZWFrOw0K CQljYXNlICdTJzoNCgkJCXNtcCA9IDE7DQoJCQludW1fdGhyZWFkcyA9IG1heF9jcHVzOw0KCQkJ c2V0YWZmaW5pdHkgPSBBRkZJTklUWV9VU0VBTEw7DQoJCQlicmVhazsNCgkJY2FzZSAndCc6DQoJ CQlpZiAoc21wKSB7DQoJCQkJd2FybigiLXQgaWdub3JlZCBkdWUgdG8gLS1zbXBcbiIpOw0KCQkJ CWJyZWFrOw0KCQkJfQ0KCQkJaWYgKG9wdGFyZyAhPSBOVUxMKQ0KCQkJCW51bV90aHJlYWRzID0g YXRvaShvcHRhcmcpOw0KCQkJZWxzZSBpZiAob3B0aW5kPGFyZ2MgJiYgYXRvaShhcmd2W29wdGlu ZF0pKQ0KCQkJCW51bV90aHJlYWRzID0gYXRvaShhcmd2W29wdGluZF0pOw0KCQkJZWxzZQ0KCQkJ CW51bV90aHJlYWRzID0gbWF4X2NwdXM7DQoJCQlicmVhazsNCgkJY2FzZSAnVCc6IHRpbWVvdXQg PSBhdG9pKG9wdGFyZyk7IGJyZWFrOw0KCQljYXNlICc/JzogZXJyb3IgPSAxOyBicmVhazsNCgkJ fQ0KCX0NCg0KCWlmIChzZXRhZmZpbml0eSA9PSBBRkZJTklUWV9TUEVDSUZJRUQpIHsNCgkJaWYg KGFmZmluaXR5IDwgMCkNCgkJCWVycm9yID0gMTsNCgkJaWYgKGFmZmluaXR5ID49IG1heF9jcHVz KSB7DQoJCQlmcHJpbnRmKHN0ZGVyciwgIkVSUk9SOiBDUFUgIyVkIG5vdCBmb3VuZCwgb25seSAl ZCBDUFVzIGF2YWlsYWJsZVxuIiwNCgkJCSAgICBhZmZpbml0eSwgbWF4X2NwdXMpOw0KCQkJZXJy b3IgPSAxOw0KCQl9DQoJfQ0KDQoJaWYgKG51bV90aHJlYWRzIDwgMCB8fCBudW1fdGhyZWFkcyA+ IDI1NSkNCgkJZXJyb3IgPSAxOw0KDQoJaWYgKHByaW9yaXR5IDwgMCB8fCBwcmlvcml0eSA+IDk5 KQ0KCQllcnJvciA9IDE7DQoNCglpZiAobnVtX3RocmVhZHMgPCAxKQ0KCQllcnJvciA9IDE7DQoN CglpZiAocHJpb3JpdHkgJiYgc21wKQ0KCQlzYW1lcHJpbyA9IDE7DQoNCglpZiAodGltZW91dCA8 IDApDQoJCWVycm9yID0gMTsNCg0KCWlmIChlcnJvcikNCgkJZGlzcGxheV9oZWxwICgpOw0KfQ0K DQoNCnN0YXRpYyBpbnQgdm9sYXRpbGUgc2h1dGRvd247DQoNCnN0YXRpYyB2b2lkIHNpZ2hhbmQo aW50IHNpZykNCnsNCglzaHV0ZG93biA9IDE7DQp9DQoNCmludCBtYWluKGludCBhcmdjLCBjaGFy ICphcmd2W10pDQp7DQoJaW50IGk7DQoJaW50IG1heF9jcHVzID0gc3lzY29uZihfU0NfTlBST0NF U1NPUlNfQ09ORik7DQoJaW50IG9sZHNhbXBsZXMgPSAxOw0KCXN0cnVjdCBwYXJhbXMgKnJlY2Vp dmVyID0gTlVMTDsNCglzdHJ1Y3QgcGFyYW1zICpzZW5kZXIgPSBOVUxMOw0KCXNpZ3NldF90IHNp Z3NldDsNCglzdHJ1Y3QgdGltZXNwZWMgbWFpbmRlbGF5Ow0KCWludCBvZmxhZyA9IE9fQ1JFQVR8 T19SRFdSOw0KCXN0cnVjdCBtcV9hdHRyIG1xc3RhdDsNCg0KCW1lbXNldCgmbXFzdGF0LCAwLCBz aXplb2YobXFzdGF0KSk7DQoJbXFzdGF0Lm1xX21heG1zZyA9IDE7DQoJbXFzdGF0Lm1xX21zZ3Np emUgPSA4Ow0KCW1xc3RhdC5tcV9mbGFncyA9IDA7DQoNCglwcm9jZXNzX29wdGlvbnMoYXJnYywg YXJndik7DQoNCglpZiAoY2hlY2tfcHJpdnMoKSkNCgkJcmV0dXJuIDE7DQoNCglpZiAobWxvY2th bGwoTUNMX0NVUlJFTlR8TUNMX0ZVVFVSRSkgPT0gLTEpIHsNCgkJcGVycm9yKCJtbG9ja2FsbCIp Ow0KCQlyZXR1cm4gMTsNCgl9DQoNCglzaWduYWwoU0lHSU5ULCBzaWdoYW5kKTsNCglzaWduYWwo U0lHVEVSTSwgc2lnaGFuZCk7DQoNCglyZWNlaXZlciA9IGNhbGxvYyhudW1fdGhyZWFkcywgc2l6 ZW9mKHN0cnVjdCBwYXJhbXMpKTsNCglzZW5kZXIgPSBjYWxsb2MobnVtX3RocmVhZHMsIHNpemVv ZihzdHJ1Y3QgcGFyYW1zKSk7DQoJaWYgKHJlY2VpdmVyID09IE5VTEwgfHwgc2VuZGVyID09IE5V TEwpDQoJCWdvdG8gbm9tZW07DQoNCglmb3IgKGkgPSAwOyBpIDwgbnVtX3RocmVhZHM7IGkrKykg ew0KCQljaGFyIG1xbmFtZVsxNl07DQoNCgkJc3ByaW50ZihtcW5hbWUsIFNZTkNNUV9OQU1FLCBp KTsNCgkJcmVjZWl2ZXJbaV0uc3luY21xID0gbXFfb3BlbihtcW5hbWUsIG9mbGFnLCAwNzc3LCAm bXFzdGF0KTsNCgkJaWYgKHJlY2VpdmVyW2ldLnN5bmNtcSA9PSAobXFkX3QpIC0xKSB7DQoJCQlm cHJpbnRmKHN0ZGVyciwgImNvdWxkIG5vdCBvcGVuIFBPU0lYIG1lc3NhZ2UgcXVldWUgIzFcbiIp Ow0KCQkJcmV0dXJuIDE7DQoJCX0NCgkJc3ByaW50ZihtcW5hbWUsIFRFU1RNUV9OQU1FLCBpKTsN CgkJcmVjZWl2ZXJbaV0udGVzdG1xID0gbXFfb3BlbihtcW5hbWUsIG9mbGFnLCAwNzc3LCAmbXFz dGF0KTsNCgkJaWYgKHJlY2VpdmVyW2ldLnRlc3RtcSA9PSAobXFkX3QpIC0xKSB7DQoJCQlmcHJp bnRmKHN0ZGVyciwgImNvdWxkIG5vdCBvcGVuIFBPU0lYIG1lc3NhZ2UgcXVldWUgIzJcbiIpOw0K CQkJcmV0dXJuIDE7DQoJCX0NCg0KCQlyZWNlaXZlcltpXS5taW5kaWZmID0gVUlOVF9NQVg7DQoJ CXJlY2VpdmVyW2ldLm1heGRpZmYgPSAwOw0KCQlyZWNlaXZlcltpXS5zdW1kaWZmID0gMC4wOw0K DQoJCXJlY2VpdmVyW2ldLm51bSA9IGk7DQoJCXJlY2VpdmVyW2ldLmNwdSA9IGk7DQoJCXN3aXRj aCAoc2V0YWZmaW5pdHkpIHsNCgkJY2FzZSBBRkZJTklUWV9VTlNQRUNJRklFRDogcmVjZWl2ZXJb aV0uY3B1ID0gLTE7IGJyZWFrOw0KCQljYXNlIEFGRklOSVRZX1NQRUNJRklFRDogcmVjZWl2ZXJb aV0uY3B1ID0gYWZmaW5pdHk7IGJyZWFrOw0KCQljYXNlIEFGRklOSVRZX1VTRUFMTDogcmVjZWl2 ZXJbaV0uY3B1ID0gaSAlIG1heF9jcHVzOyBicmVhazsNCgkJfQ0KCQlyZWNlaXZlcltpXS5wcmlv cml0eSA9IHByaW9yaXR5Ow0KCQlyZWNlaXZlcltpXS50cmFjZWxpbWl0ID0gdHJhY2VsaW1pdDsN CgkJaWYgKHByaW9yaXR5ID4gMSAmJiAhc2FtZXByaW8pDQoJCQlwcmlvcml0eS0tOw0KCQlyZWNl aXZlcltpXS5kZWxheS50dl9zZWMgPSBpbnRlcnZhbCAvIFVTRUNfUEVSX1NFQzsNCgkJcmVjZWl2 ZXJbaV0uZGVsYXkudHZfbnNlYyA9IChpbnRlcnZhbCAlIFVTRUNfUEVSX1NFQykgKiAxMDAwOw0K CQlpbnRlcnZhbCArPSBkaXN0YW5jZTsNCgkJcmVjZWl2ZXJbaV0ubWF4X2N5Y2xlcyA9IG1heF9j eWNsZXM7DQoJCXJlY2VpdmVyW2ldLnNlbmRlciA9IDA7DQoJCXJlY2VpdmVyW2ldLm5laWdoYm9y ID0gJnNlbmRlcltpXTsNCgkJcmVjZWl2ZXJbaV0udGltZW91dCA9IHRpbWVvdXQ7DQoJCXB0aHJl YWRfY3JlYXRlKCZyZWNlaXZlcltpXS50aHJlYWRpZCwgTlVMTCwgcG1xdGhyZWFkLCAmcmVjZWl2 ZXJbaV0pOw0KCQltZW1jcHkoJnNlbmRlcltpXSwgJnJlY2VpdmVyW2ldLCBzaXplb2YocmVjZWl2 ZXJbMF0pKTsNCgkJc2VuZGVyW2ldLnNlbmRlciA9IDE7DQoJCXNlbmRlcltpXS5uZWlnaGJvciA9 ICZyZWNlaXZlcltpXTsNCgkJcHRocmVhZF9jcmVhdGUoJnNlbmRlcltpXS50aHJlYWRpZCwgTlVM TCwgcG1xdGhyZWFkLCAmc2VuZGVyW2ldKTsNCgl9DQoNCgltYWluZGVsYXkudHZfc2VjID0gMDsN CgltYWluZGVsYXkudHZfbnNlYyA9IDUwMDAwMDAwOyAvKiA1MCBtcyAqLw0KDQoJd2hpbGUgKCFz aHV0ZG93bikgew0KCQlpbnQgcHJpbnRlZDsNCgkJaW50IGVycm9ybGluZXMgPSAwOw0KDQoJCWZv ciAoaSA9IDA7IGkgPCBudW1fdGhyZWFkczsgaSsrKQ0KCQkJc2h1dGRvd24gfD0gcmVjZWl2ZXJb aV0uc2h1dGRvd24gfCBzZW5kZXJbaV0uc2h1dGRvd247DQoNCgkJaWYgKHJlY2VpdmVyWzBdLnNh bXBsZXMgPiBvbGRzYW1wbGVzIHx8IHNodXRkb3duKSB7DQoJCQlmb3IgKGkgPSAwOyBpIDwgbnVt X3RocmVhZHM7IGkrKykgew0KCQkJCXByaW50ZigiIyUxZDogSUQlZCwgUCVkLCBDUFUlZCwgSSVs ZDsgIyUxZDogSUQlZCwgUCVkLCBDUFUlZCwgQ3ljbGVzICVkXG4iLA0KCQkJCSAgICBpKjIsIHJl Y2VpdmVyW2ldLnRpZCwgcmVjZWl2ZXJbaV0ucHJpb3JpdHksIHJlY2VpdmVyW2ldLmNwdSwNCgkJ CQkgICAgcmVjZWl2ZXJbaV0uZGVsYXkudHZfbnNlYyAvIDEwMDAsDQoJCQkJICAgIGkqMisxLCBz ZW5kZXJbaV0udGlkLCBzZW5kZXJbaV0ucHJpb3JpdHksIHNlbmRlcltpXS5jcHUsDQoJCQkJICAg IHNlbmRlcltpXS5zYW1wbGVzKTsNCgkJCX0NCgkJCWZvciAoaSA9IDA7IGkgPCBudW1fdGhyZWFk czsgaSsrKSB7DQoJCQkJcHJpbnRmKCIjJWQgLT4gIyVkLCBNaW4gJTRkLCBDdXIgJTRkLCBBdmcg JTRkLCBNYXggJTRkXG4iLA0KCQkJCQlpKjIrMSwgaSoyLA0KCQkJCQlyZWNlaXZlcltpXS5taW5k aWZmLCAoaW50KSByZWNlaXZlcltpXS5kaWZmLnR2X3VzZWMsDQoJCQkJCShpbnQpICgocmVjZWl2 ZXJbaV0uc3VtZGlmZiAvIHJlY2VpdmVyW2ldLnNhbXBsZXMpICsgMC41KSwNCgkJCQkJcmVjZWl2 ZXJbaV0ubWF4ZGlmZik7DQoJCQkJaWYgKHJlY2VpdmVyW2ldLmVycm9yWzBdICE9ICdcMCcpIHsN CgkJCQkJcHJpbnRmKHJlY2VpdmVyW2ldLmVycm9yKTsNCgkJCQkJZXJyb3JsaW5lcysrOw0KCQkJ CQlyZWNlaXZlcltpXS5lcnJvclswXSA9ICdcMCc7DQoJCQkJfQ0KCQkJCWlmIChzZW5kZXJbaV0u ZXJyb3JbMF0gIT0gJ1wwJykgew0KCQkJCQlwcmludGYoc2VuZGVyW2ldLmVycm9yKTsNCgkJCQkJ ZXJyb3JsaW5lcysrOw0KCQkJCQlyZWNlaXZlcltpXS5lcnJvclswXSA9ICdcMCc7DQoJCQkJfQ0K CQkJfQ0KCQkJcHJpbnRlZCA9IDE7DQoJCX0gZWxzZQ0KCQkJcHJpbnRlZCA9IDA7DQoNCgkJc2ln ZW1wdHlzZXQoJnNpZ3NldCk7DQoJCXNpZ2FkZHNldCgmc2lnc2V0LCBTSUdURVJNKTsNCgkJc2ln YWRkc2V0KCZzaWdzZXQsIFNJR0lOVCk7DQoJCXB0aHJlYWRfc2lnbWFzayhTSUdfU0VUTUFTSywg JnNpZ3NldCwgTlVMTCk7DQoNCgkJbmFub3NsZWVwKCZtYWluZGVsYXksIE5VTEwpOw0KDQoJCXNp Z2VtcHR5c2V0KCZzaWdzZXQpOw0KCQlwdGhyZWFkX3NpZ21hc2soU0lHX1NFVE1BU0ssICZzaWdz ZXQsIE5VTEwpOw0KDQoJCWlmIChwcmludGVkICYmICFzaHV0ZG93bikNCgkJCXByaW50ZigiXDAz M1slZEEiLCBudW1fdGhyZWFkcyoyICsgZXJyb3JsaW5lcyk7DQoJfQ0KDQoJZm9yIChpID0gMDsg aSA8IG51bV90aHJlYWRzOyBpKyspIHsNCgkJcmVjZWl2ZXJbaV0uc2h1dGRvd24gPSAxOw0KCQlz ZW5kZXJbaV0uc2h1dGRvd24gPSAxOw0KCX0NCgluYW5vc2xlZXAoJnJlY2VpdmVyWzBdLmRlbGF5 LCBOVUxMKTsNCg0KCWZvciAoaSA9IDA7IGkgPCBudW1fdGhyZWFkczsgaSsrKSB7DQoJCW1xX2Ns b3NlKHJlY2VpdmVyW2ldLnN5bmNtcSk7DQoJCW1xX2Nsb3NlKHJlY2VpdmVyW2ldLnRlc3RtcSk7 DQoJCWlmICghcmVjZWl2ZXJbaV0uc3RvcHBlZCkNCgkJCXB0aHJlYWRfa2lsbChyZWNlaXZlcltp XS50aHJlYWRpZCwgU0lHVEVSTSk7DQoJCWlmICghc2VuZGVyW2ldLnN0b3BwZWQpDQoJCQlwdGhy ZWFkX2tpbGwoc2VuZGVyW2ldLnRocmVhZGlkLCBTSUdURVJNKTsNCgl9DQoNCglub21lbToNCg0K CXJldHVybiAwOw0KfQ0KDQo= --0014852d24c0ace62b0482ffc34f--