From mboxrd@z Thu Jan 1 00:00:00 1970 From: Dmitry Safonov Subject: Re: [PATCHv3] lib/ratelimit: Lockless ratelimiting Date: Tue, 17 Jul 2018 01:59:14 +0100 Message-ID: <1531789154.18720.3.camel@arista.com> References: <20180703225628.25684-1-dima@arista.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mail-ed1-x544.google.com (mail-ed1-x544.google.com [IPv6:2a00:1450:4864:20::544]) by gabe.freedesktop.org (Postfix) with ESMTPS id B4AFF6E11F for ; Tue, 17 Jul 2018 00:59:17 +0000 (UTC) Received: by mail-ed1-x544.google.com with SMTP id t3-v6so31338769eds.3 for ; Mon, 16 Jul 2018 17:59:17 -0700 (PDT) In-Reply-To: <20180703225628.25684-1-dima@arista.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" To: linux-kernel@vger.kernel.org Cc: Theodore Ts'o , Arnd Bergmann , David Airlie , Greg Kroah-Hartman , intel-gfx@lists.freedesktop.org, Andy Shevchenko , dri-devel@lists.freedesktop.org, Rodrigo Vivi , Thomas Gleixner List-Id: intel-gfx@lists.freedesktop.org SSB3b3VsZCBiZSBnbGFkIGlmIHNvbWVvbmUgaGVscHMvYm90aGVycyB0byByZXZpZXcgdGhlIGNo YW5nZSA6QwoKVGhhbmtzLApEbWl0cnkKCk9uIFR1ZSwgMjAxOC0wNy0wMyBhdCAyMzo1NiArMDEw MCwgRG1pdHJ5IFNhZm9ub3Ygd3JvdGU6Cj4gQ3VycmVudGx5IHJhdGVsaW1pdF9zdGF0ZSBpcyBw cm90ZWN0ZWQgd2l0aCBzcGluX2xvY2suIElmIHRoZSAubG9jawo+IGlzCj4gdGFrZW4gYXQgdGhl IG1vbWVudCBvZiBfX19yYXRlbGltaXQoKSBjYWxsLCB0aGUgbWVzc2FnZSBpcyBzdXBwcmVzc2Vk Cj4gdG8KPiBtYWtlIHJhdGVsaW1pdGluZyByb2J1c3QuCj4gCj4gVGhhdCByZXN1bHRzIGluIHRo ZSBmb2xsb3dpbmcgaXNzdWUgaXNzdWU6Cj4gICAgICAgQ1BVMCAgICAgICAgICAgICAgICAgICAg ICAgICAgQ1BVMQo+IC0tLS0tLS0tLS0tLS0tLS0tLSAgICAgICAgICAgLS0tLS0tLS0tLS0tLS0t LS0tCj4gcHJpbnRrX3JhdGVsaW1pdCgpICAgICAgICAgICBwcmludGtfcmF0ZWxpbWl0KCkKPiAg ICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKPiAgIHRyeV9zcGluX2xvY2so KSAgICAgICAgICAgICAgdHJ5X3NwaW5fbG9jaygpCj4gICAgICAgICB8ICAgICAgICAgICAgICAg ICAgICAgICAgICAgICB8Cj4gdGltZV9pc19iZWZvcmVfamlmZmllcygpICAgICAgICAgIHJldHVy biAwOyAvLyBzdXBwcmVzcwo+IAo+IFNvLCBjb25jdXJyZW50IGNhbGwgb2YgX19fcmF0ZWxpbWl0 KCkgcmVzdWx0cyBpbiBzaWxlbnRseSBzdXBwcmVzc2luZwo+IG9uZSBvZiB0aGUgbWVzc2FnZXMs IHJlZ2FyZGxlc3MgaWYgdGhlIGxpbWl0IGlzIHJlYWNoZWQgb3Igbm90Lgo+IEFuZCByYy0+bWlz c2VkIGlzIG5vdCBpbmNyZWFzZWQgaW4gc3VjaCBjYXNlIHNvIHRoZSBpc3N1ZSBpcyBjb3ZlcmVk Cj4gZnJvbSB1c2VyLgo+IAo+IENvbnZlcnQgcmF0ZWxpbWl0aW5nIHRvIHVzZSBhdG9taWMgY291 bnRlcnMgYW5kIGRyb3Agc3Bpbl9sb2NrLgo+IAo+IE5vdGU6IFRoYXQgbWlnaHQgYmUgdW5leHBl Y3RlZCwgYnV0IHdpdGggdGhlIGZpcnN0IGludGVydmFsIG9mCj4gbWVzc2FnZXMKPiBzdG9ybSBv bmUgY2FuIHByaW50IHVwIHRvIGJ1cnN0KjIgbWVzc2FnZXMuIFNvLCBpdCBkb2Vzbid0IGd1YXJh bnRlZQo+IHRoYXQgaW4gKmFueSogaW50ZXJ2YWwgYW1vdW50IG9mIG1lc3NhZ2VzIGlzIGxlc3Nl ciB0aGFuIGJ1cnN0Lgo+IEJ1dCwgdGhhdCBkaWZmZXJzIGxpZ2h0bHkgZnJvbSBwcmV2aW91cyBi ZWhhdmlvciB3aGVyZSBvbmUgY2FuIHN0YXJ0Cj4gYnVyc3Q9NSBpbnRlcnZhbCBhbmQgcHJpbnQg NCBtZXNzYWdlcyBvbiB0aGUgbGFzdCBtaWxsaXNlY29uZHMgb2YKPiBpbnRlcnZhbCArIG5ldyA1 IG1lc3NhZ2VzIGZyb20gbmV3IGludGVydmFsICh0b3RhbGx5IDkgbWVzc2FnZXMgaW4KPiBsZXNz ZXIgdGhhbiBpbnRlcnZhbCB2YWx1ZSk6Cj4gCj4gICAgbXNnMCAgICAgICAgICAgICAgbXNnMS1t c2c0IG1zZzAtbXNnNAo+ICAgICB8ICAgICAgICAgICAgICAgICAgICAgfCAgICAgICB8Cj4gICAg IHwgICAgICAgICAgICAgICAgICAgICB8ICAgICAgIHwKPiAgfC0tby0tLS0tLS0tLS0tLS0tLS0t LS0tLW8tfC0tLS0tby0tLS0tLS0tLS0tLS0tLS0tLS0tfC0tPiAodCkKPiAgICAgICAgICAgICAg ICAgICAgICAgICAgIDwtLS0tLS0tPgo+ICAgICAgICAgICAgICAgICAgICAgICAgTGVzc2VyIHRo YW4gYnVyc3QKPiAKPiBEcm9wcGVkIGRldi9yYW5kb20gcGF0Y2ggc2luY2UgdjEgdmVyc2lvbjoK PiBsa21sLmtlcm5lbC5vcmcvci88MjAxODA1MTAxMjUyMTEuMTI1ODMtMS1kaW1hQGFyaXN0YS5j b20+Cj4gCj4gRHJvcHBlZCBgbmFtZScgaW4gYXMgaXQncyB1bnVzZWQgaW4gUkFURUxJTUlUX1NU QVRFX0lOSVQoKQo+IAo+IENjOiBBbmR5IFNoZXZjaGVua28gPGFuZHkuc2hldmNoZW5rb0BnbWFp bC5jb20+Cj4gQ2M6IEFybmQgQmVyZ21hbm4gPGFybmRAYXJuZGIuZGU+Cj4gQ2M6IERhdmlkIEFp cmxpZSA8YWlybGllZEBsaW51eC5pZT4KPiBDYzogR3JlZyBLcm9haC1IYXJ0bWFuIDxncmVna2hA bGludXhmb3VuZGF0aW9uLm9yZz4KPiBDYzogSmFuaSBOaWt1bGEgPGphbmkubmlrdWxhQGxpbnV4 LmludGVsLmNvbT4KPiBDYzogSm9vbmFzIExhaHRpbmVuIDxqb29uYXMubGFodGluZW5AbGludXgu aW50ZWwuY29tPgo+IENjOiBSb2RyaWdvIFZpdmkgPHJvZHJpZ28udml2aUBpbnRlbC5jb20+Cj4g Q2M6ICJUaGVvZG9yZSBUcydvIiA8dHl0c29AbWl0LmVkdT4KPiBDYzogVGhvbWFzIEdsZWl4bmVy IDx0Z2x4QGxpbnV0cm9uaXguZGU+Cj4gQ2M6IGludGVsLWdmeEBsaXN0cy5mcmVlZGVza3RvcC5v cmcKPiBDYzogZHJpLWRldmVsQGxpc3RzLmZyZWVkZXNrdG9wLm9yZwo+IFNpZ25lZC1vZmYtYnk6 IERtaXRyeSBTYWZvbm92IDxkaW1hQGFyaXN0YS5jb20+Cj4gLS0tCj4gIGRyaXZlcnMvY2hhci9y YW5kb20uYyAgICAgICAgICAgIHwgMjggKysrKysrKystLS0tLS0tLS0tLQo+ICBkcml2ZXJzL2dw dS9kcm0vaTkxNS9pOTE1X3BlcmYuYyB8ICA4ICsrKystLQo+ICBmcy9idHJmcy9zdXBlci5jICAg ICAgICAgICAgICAgICB8IDE2ICsrKysrLS0tLS0tCj4gIGZzL3hmcy9zY3J1Yi9zY3J1Yi5jICAg ICAgICAgICAgIHwgIDIgKy0KPiAgaW5jbHVkZS9saW51eC9yYXRlbGltaXQuaCAgICAgICAgfCAz MSArKysrKysrKysrKystLS0tLS0tLS0KPiAga2VybmVsL3VzZXIuYyAgICAgICAgICAgICAgICAg ICAgfCAgMiArLQo+ICBsaWIvcmF0ZWxpbWl0LmMgICAgICAgICAgICAgICAgICB8IDU5ICsrKysr KysrKysrKysrKysrKystLS0tLS0tLS0tLQo+IC0tLS0tLS0tLS0KPiAgNyBmaWxlcyBjaGFuZ2Vk LCA3MyBpbnNlcnRpb25zKCspLCA3MyBkZWxldGlvbnMoLSkKPiAKPiBkaWZmIC0tZ2l0IGEvZHJp dmVycy9jaGFyL3JhbmRvbS5jIGIvZHJpdmVycy9jaGFyL3JhbmRvbS5jCj4gaW5kZXggY2Q4ODhk NGVlNjA1Li4wYmUzMWIzZWFkYWIgMTAwNjQ0Cj4gLS0tIGEvZHJpdmVycy9jaGFyL3JhbmRvbS5j Cj4gKysrIGIvZHJpdmVycy9jaGFyL3JhbmRvbS5jCj4gQEAgLTQzOSwxMCArNDM5LDggQEAgc3Rh dGljIHZvaWQgX2NybmdfYmFja3RyYWNrX3Byb3RlY3Qoc3RydWN0Cj4gY3JuZ19zdGF0ZSAqY3Ju ZywKPiAgc3RhdGljIHZvaWQgcHJvY2Vzc19yYW5kb21fcmVhZHlfbGlzdCh2b2lkKTsKPiAgc3Rh dGljIHZvaWQgX2dldF9yYW5kb21fYnl0ZXModm9pZCAqYnVmLCBpbnQgbmJ5dGVzKTsKPiAgCj4g LXN0YXRpYyBzdHJ1Y3QgcmF0ZWxpbWl0X3N0YXRlIHVuc2VlZGVkX3dhcm5pbmcgPQo+IC0JUkFU RUxJTUlUX1NUQVRFX0lOSVQoIndhcm5fdW5zZWVkZWRfcmFuZG9tbmVzcyIsIEhaLCAzKTsKPiAt c3RhdGljIHN0cnVjdCByYXRlbGltaXRfc3RhdGUgdXJhbmRvbV93YXJuaW5nID0KPiAtCVJBVEVM SU1JVF9TVEFURV9JTklUKCJ3YXJuX3VyYW5kb21fcmFuZG9tbmVzcyIsIEhaLCAzKTsKPiArc3Rh dGljIHN0cnVjdCByYXRlbGltaXRfc3RhdGUgdW5zZWVkZWRfd2FybmluZyA9Cj4gUkFURUxJTUlU X1NUQVRFX0lOSVQoSFosIDMpOwo+ICtzdGF0aWMgc3RydWN0IHJhdGVsaW1pdF9zdGF0ZSB1cmFu ZG9tX3dhcm5pbmcgPQo+IFJBVEVMSU1JVF9TVEFURV9JTklUKEhaLCAzKTsKPiAgCj4gIHN0YXRp YyBpbnQgcmF0ZWxpbWl0X2Rpc2FibGUgX19yZWFkX21vc3RseTsKPiAgCj4gQEAgLTkzNywyNCAr OTM1LDIyIEBAIHN0YXRpYyB2b2lkIGNybmdfcmVzZWVkKHN0cnVjdCBjcm5nX3N0YXRlCj4gKmNy bmcsIHN0cnVjdCBlbnRyb3B5X3N0b3JlICpyKQo+ICAJY3JuZy0+aW5pdF90aW1lID0gamlmZmll czsKPiAgCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNybmctPmxvY2ssIGZsYWdzKTsKPiAgCWlm IChjcm5nID09ICZwcmltYXJ5X2NybmcgJiYgY3JuZ19pbml0IDwgMikgewo+ICsJCXVuc2lnbmVk IGludCB1bnNlZWRlZF9taXNzLCB1cmFuZG9tX21pc3M7Cj4gKwo+ICAJCWludmFsaWRhdGVfYmF0 Y2hlZF9lbnRyb3B5KCk7Cj4gIAkJbnVtYV9jcm5nX2luaXQoKTsKPiAgCQljcm5nX2luaXQgPSAy Owo+ICAJCXByb2Nlc3NfcmFuZG9tX3JlYWR5X2xpc3QoKTsKPiAgCQl3YWtlX3VwX2ludGVycnVw dGlibGUoJmNybmdfaW5pdF93YWl0KTsKPiAgCQlwcl9ub3RpY2UoInJhbmRvbTogY3JuZyBpbml0 IGRvbmVcbiIpOwo+IC0JCWlmICh1bnNlZWRlZF93YXJuaW5nLm1pc3NlZCkgewo+IC0JCQlwcl9u b3RpY2UoInJhbmRvbTogJWQgZ2V0X3JhbmRvbV94eAo+IHdhcm5pbmcocykgbWlzc2VkICIKPiAt CQkJCSAgImR1ZSB0byByYXRlbGltaXRpbmdcbiIsCj4gLQkJCQkgIHVuc2VlZGVkX3dhcm5pbmcu bWlzc2VkKTsKPiAtCQkJdW5zZWVkZWRfd2FybmluZy5taXNzZWQgPSAwOwo+IC0JCX0KPiAtCQlp ZiAodXJhbmRvbV93YXJuaW5nLm1pc3NlZCkgewo+IC0JCQlwcl9ub3RpY2UoInJhbmRvbTogJWQg dXJhbmRvbSB3YXJuaW5nKHMpCj4gbWlzc2VkICIKPiAtCQkJCSAgImR1ZSB0byByYXRlbGltaXRp bmdcbiIsCj4gLQkJCQkgIHVyYW5kb21fd2FybmluZy5taXNzZWQpOwo+IC0JCQl1cmFuZG9tX3dh cm5pbmcubWlzc2VkID0gMDsKPiAtCQl9Cj4gKwkJdW5zZWVkZWRfbWlzcyA9Cj4gYXRvbWljX3hj aGcoJnVuc2VlZGVkX3dhcm5pbmcubWlzc2VkLCAwKTsKPiArCQlpZiAodW5zZWVkZWRfbWlzcykK PiArCQkJcHJfbm90aWNlKCJyYW5kb206ICV1IGdldF9yYW5kb21feHgKPiB3YXJuaW5nKHMpIG1p c3NlZCAiCj4gKwkJCQkgICJkdWUgdG8gcmF0ZWxpbWl0aW5nXG4iLAo+IHVuc2VlZGVkX21pc3Mp Owo+ICsJCXVyYW5kb21fbWlzcyA9IGF0b21pY194Y2hnKCZ1cmFuZG9tX3dhcm5pbmcubWlzc2Vk LAo+IDApOwo+ICsJCWlmICh1cmFuZG9tX21pc3MpCj4gKwkJCXByX25vdGljZSgicmFuZG9tOiAl dSB1cmFuZG9tIHdhcm5pbmcocykKPiBtaXNzZWQgIgo+ICsJCQkJICAiZHVlIHRvIHJhdGVsaW1p dGluZ1xuIiwKPiB1cmFuZG9tX21pc3MpOwo+ICAJfQo+ICB9Cj4gIAo+IGRpZmYgLS1naXQgYS9k cml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X3BlcmYuYwo+IGIvZHJpdmVycy9ncHUvZHJtL2k5MTUv aTkxNV9wZXJmLmMKPiBpbmRleCAwMTliZDJkMDczYWQuLmRjZmJhMzAyMzU0NyAxMDA2NDQKPiAt LS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X3BlcmYuYwo+ICsrKyBiL2RyaXZlcnMvZ3B1 L2RybS9pOTE1L2k5MTVfcGVyZi5jCj4gQEAgLTEyOTUsNiArMTI5NSw3IEBAIGZyZWVfb2FfYnVm ZmVyKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICppOTE1KQo+ICBzdGF0aWMgdm9pZCBpOTE1X29h X3N0cmVhbV9kZXN0cm95KHN0cnVjdCBpOTE1X3BlcmZfc3RyZWFtICpzdHJlYW0pCj4gIHsKPiAg CXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IHN0cmVhbS0+ZGV2X3ByaXY7Cj4g Kwl1bnNpZ25lZCBpbnQgbXNnX21pc3NlZDsKPiAgCj4gIAlCVUdfT04oc3RyZWFtICE9IGRldl9w cml2LT5wZXJmLm9hLmV4Y2x1c2l2ZV9zdHJlYW0pOwo+ICAKPiBAQCAtMTMxNyw5ICsxMzE4LDEw IEBAIHN0YXRpYyB2b2lkIGk5MTVfb2Ffc3RyZWFtX2Rlc3Ryb3koc3RydWN0Cj4gaTkxNV9wZXJm X3N0cmVhbSAqc3RyZWFtKQo+ICAKPiAgCXB1dF9vYV9jb25maWcoZGV2X3ByaXYsIHN0cmVhbS0+ b2FfY29uZmlnKTsKPiAgCj4gLQlpZiAoZGV2X3ByaXYtPnBlcmYub2Euc3B1cmlvdXNfcmVwb3J0 X3JzLm1pc3NlZCkgewo+IC0JCURSTV9OT1RFKCIlZCBzcHVyaW91cyBPQSByZXBvcnQgbm90aWNl cyBzdXBwcmVzc2VkCj4gZHVlIHRvIHJhdGVsaW1pdGluZ1xuIiwKPiAtCQkJIGRldl9wcml2LQo+ ID5wZXJmLm9hLnNwdXJpb3VzX3JlcG9ydF9ycy5taXNzZWQpOwo+ICsJbXNnX21pc3NlZCA9IGF0 b21pY19yZWFkKCZkZXZfcHJpdi0KPiA+cGVyZi5vYS5zcHVyaW91c19yZXBvcnRfcnMubWlzc2Vk KTsKPiArCWlmIChtc2dfbWlzc2VkKSB7Cj4gKwkJRFJNX05PVEUoIiV1IHNwdXJpb3VzIE9BIHJl cG9ydCBub3RpY2VzIHN1cHByZXNzZWQKPiBkdWUgdG8gcmF0ZWxpbWl0aW5nXG4iLAo+ICsJCQkg bXNnX21pc3NlZCk7Cj4gIAl9Cj4gIH0KPiAgCj4gZGlmZiAtLWdpdCBhL2ZzL2J0cmZzL3N1cGVy LmMgYi9mcy9idHJmcy9zdXBlci5jCj4gaW5kZXggODExMDdhZDQ5ZjNhLi5mZmFiNmMyM2JjNTAg MTAwNjQ0Cj4gLS0tIGEvZnMvYnRyZnMvc3VwZXIuYwo+ICsrKyBiL2ZzL2J0cmZzL3N1cGVyLmMK PiBAQCAtMTc3LDE0ICsxNzcsMTQgQEAgc3RhdGljIGNvbnN0IGNoYXIgKiBjb25zdCBsb2d0eXBl c1tdID0gewo+ICAgKiBtZXNzYWdlcyBkb2Vzbid0IGNhdXNlIG1vcmUgaW1wb3J0YW50IG9uZXMg dG8gYmUgZHJvcHBlZC4KPiAgICovCj4gIHN0YXRpYyBzdHJ1Y3QgcmF0ZWxpbWl0X3N0YXRlIHBy aW50a19saW1pdHNbXSA9IHsKPiAtCVJBVEVMSU1JVF9TVEFURV9JTklUKHByaW50a19saW1pdHNb MF0sCj4gREVGQVVMVF9SQVRFTElNSVRfSU5URVJWQUwsIDEwMCksCj4gLQlSQVRFTElNSVRfU1RB VEVfSU5JVChwcmludGtfbGltaXRzWzFdLAo+IERFRkFVTFRfUkFURUxJTUlUX0lOVEVSVkFMLCAx MDApLAo+IC0JUkFURUxJTUlUX1NUQVRFX0lOSVQocHJpbnRrX2xpbWl0c1syXSwKPiBERUZBVUxU X1JBVEVMSU1JVF9JTlRFUlZBTCwgMTAwKSwKPiAtCVJBVEVMSU1JVF9TVEFURV9JTklUKHByaW50 a19saW1pdHNbM10sCj4gREVGQVVMVF9SQVRFTElNSVRfSU5URVJWQUwsIDEwMCksCj4gLQlSQVRF TElNSVRfU1RBVEVfSU5JVChwcmludGtfbGltaXRzWzRdLAo+IERFRkFVTFRfUkFURUxJTUlUX0lO VEVSVkFMLCAxMDApLAo+IC0JUkFURUxJTUlUX1NUQVRFX0lOSVQocHJpbnRrX2xpbWl0c1s1XSwK PiBERUZBVUxUX1JBVEVMSU1JVF9JTlRFUlZBTCwgMTAwKSwKPiAtCVJBVEVMSU1JVF9TVEFURV9J TklUKHByaW50a19saW1pdHNbNl0sCj4gREVGQVVMVF9SQVRFTElNSVRfSU5URVJWQUwsIDEwMCks Cj4gLQlSQVRFTElNSVRfU1RBVEVfSU5JVChwcmludGtfbGltaXRzWzddLAo+IERFRkFVTFRfUkFU RUxJTUlUX0lOVEVSVkFMLCAxMDApLAo+ICsJUkFURUxJTUlUX1NUQVRFX0lOSVQoREVGQVVMVF9S QVRFTElNSVRfSU5URVJWQUwsIDEwMCksCj4gKwlSQVRFTElNSVRfU1RBVEVfSU5JVChERUZBVUxU X1JBVEVMSU1JVF9JTlRFUlZBTCwgMTAwKSwKPiArCVJBVEVMSU1JVF9TVEFURV9JTklUKERFRkFV TFRfUkFURUxJTUlUX0lOVEVSVkFMLCAxMDApLAo+ICsJUkFURUxJTUlUX1NUQVRFX0lOSVQoREVG QVVMVF9SQVRFTElNSVRfSU5URVJWQUwsIDEwMCksCj4gKwlSQVRFTElNSVRfU1RBVEVfSU5JVChE RUZBVUxUX1JBVEVMSU1JVF9JTlRFUlZBTCwgMTAwKSwKPiArCVJBVEVMSU1JVF9TVEFURV9JTklU KERFRkFVTFRfUkFURUxJTUlUX0lOVEVSVkFMLCAxMDApLAo+ICsJUkFURUxJTUlUX1NUQVRFX0lO SVQoREVGQVVMVF9SQVRFTElNSVRfSU5URVJWQUwsIDEwMCksCj4gKwlSQVRFTElNSVRfU1RBVEVf SU5JVChERUZBVUxUX1JBVEVMSU1JVF9JTlRFUlZBTCwgMTAwKSwKPiAgfTsKPiAgCj4gIHZvaWQg YnRyZnNfcHJpbnRrKGNvbnN0IHN0cnVjdCBidHJmc19mc19pbmZvICpmc19pbmZvLCBjb25zdCBj aGFyCj4gKmZtdCwgLi4uKQo+IGRpZmYgLS1naXQgYS9mcy94ZnMvc2NydWIvc2NydWIuYyBiL2Zz L3hmcy9zY3J1Yi9zY3J1Yi5jCj4gaW5kZXggNThhZTc2YjNhNDIxLi44YjU4YjQzOTY5NGEgMTAw NjQ0Cj4gLS0tIGEvZnMveGZzL3NjcnViL3NjcnViLmMKPiArKysgYi9mcy94ZnMvc2NydWIvc2Ny dWIuYwo+IEBAIC0zNDksNyArMzQ5LDcgQEAgeGZzX3NjcnViX2V4cGVyaW1lbnRhbF93YXJuaW5n KAo+ICAJc3RydWN0IHhmc19tb3VudAkqbXApCj4gIHsKPiAgCXN0YXRpYyBzdHJ1Y3QgcmF0ZWxp bWl0X3N0YXRlIHNjcnViX3dhcm5pbmcgPQo+IFJBVEVMSU1JVF9TVEFURV9JTklUKAo+IC0JCQki eGZzX3NjcnViX3dhcm5pbmciLCA4NjQwMCAqIEhaLCAxKTsKPiArCQkJODY0MDAgKiBIWiwgMSk7 Cj4gIAlyYXRlbGltaXRfc2V0X2ZsYWdzKCZzY3J1Yl93YXJuaW5nLAo+IFJBVEVMSU1JVF9NU0df T05fUkVMRUFTRSk7Cj4gIAo+ICAJaWYgKF9fcmF0ZWxpbWl0KCZzY3J1Yl93YXJuaW5nKSkKPiBk aWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9yYXRlbGltaXQuaCBiL2luY2x1ZGUvbGludXgvcmF0 ZWxpbWl0LmgKPiBpbmRleCA4ZGRmNzllOTIwN2EuLmY5YTkzODZkZDg2OSAxMDA2NDQKPiAtLS0g YS9pbmNsdWRlL2xpbnV4L3JhdGVsaW1pdC5oCj4gKysrIGIvaW5jbHVkZS9saW51eC9yYXRlbGlt aXQuaAo+IEBAIC00LDcgKzQsNiBAQAo+ICAKPiAgI2luY2x1ZGUgPGxpbnV4L3BhcmFtLmg+Cj4g ICNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgo+IC0jaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4K PiAgCj4gICNkZWZpbmUgREVGQVVMVF9SQVRFTElNSVRfSU5URVJWQUwJKDUgKiBIWikKPiAgI2Rl ZmluZSBERUZBVUxUX1JBVEVMSU1JVF9CVVJTVAkJMTAKPiBAQCAtMTMsMzggKzEyLDM5IEBACj4g ICNkZWZpbmUgUkFURUxJTUlUX01TR19PTl9SRUxFQVNFCUJJVCgwKQo+ICAKPiAgc3RydWN0IHJh dGVsaW1pdF9zdGF0ZSB7Cj4gLQlyYXdfc3BpbmxvY2tfdAlsb2NrOwkJLyogcHJvdGVjdCB0aGUK PiBzdGF0ZSAqLwo+ICsJYXRvbWljX3QJcHJpbnRlZDsKPiArCWF0b21pY190CW1pc3NlZDsKPiAg Cj4gIAlpbnQJCWludGVydmFsOwo+ICAJaW50CQlidXJzdDsKPiAtCWludAkJcHJpbnRlZDsKPiAt CWludAkJbWlzc2VkOwo+ICAJdW5zaWduZWQgbG9uZwliZWdpbjsKPiAgCXVuc2lnbmVkIGxvbmcJ ZmxhZ3M7Cj4gIH07Cj4gIAo+IC0jZGVmaW5lIFJBVEVMSU1JVF9TVEFURV9JTklUKG5hbWUsIGlu dGVydmFsX2luaXQsIGJ1cnN0X2luaXQpIHsJCj4gCVwKPiAtCQkubG9jawkJPQo+IF9fUkFXX1NQ SU5fTE9DS19VTkxPQ0tFRChuYW1lLmxvY2spLAlcCj4gKyNkZWZpbmUgUkFURUxJTUlUX1NUQVRF X0lOSVQoaW50ZXJ2YWxfaW5pdCwgYnVyc3RfaW5pdCkgewkJCj4gXAo+ICAJCS5pbnRlcnZhbAk9 IGludGVydmFsX2luaXQsCQkJCj4gXAo+ICAJCS5idXJzdAkJPSBidXJzdF9pbml0LAkJCQo+IAlc Cj4gKwkJLnByaW50ZWQJPSBBVE9NSUNfSU5JVCgwKSwJCQkKPiBcCj4gKwkJLm1pc3NlZAkJPSBB VE9NSUNfSU5JVCgwKSwJCQo+IAlcCj4gIAl9Cj4gIAo+ICAjZGVmaW5lIFJBVEVMSU1JVF9TVEFU RV9JTklUX0RJU0FCTEVECQkJCQo+IAlcCj4gLQlSQVRFTElNSVRfU1RBVEVfSU5JVChyYXRlbGlt aXRfc3RhdGUsIDAsCj4gREVGQVVMVF9SQVRFTElNSVRfQlVSU1QpCj4gKwlSQVRFTElNSVRfU1RB VEVfSU5JVCgwLCBERUZBVUxUX1JBVEVMSU1JVF9CVVJTVCkKPiAgCj4gICNkZWZpbmUgREVGSU5F X1JBVEVMSU1JVF9TVEFURShuYW1lLCBpbnRlcnZhbF9pbml0LCBidXJzdF9pbml0KQkKPiAJXAo+ ICAJCQkJCQkJCQkKPiBcCj4gIAlzdHJ1Y3QgcmF0ZWxpbWl0X3N0YXRlIG5hbWUgPQkJCQkKPiAJ XAo+IC0JCVJBVEVMSU1JVF9TVEFURV9JTklUKG5hbWUsIGludGVydmFsX2luaXQsCj4gYnVyc3Rf aW5pdCkJXAo+ICsJCVJBVEVMSU1JVF9TVEFURV9JTklUKGludGVydmFsX2luaXQsIGJ1cnN0X2lu aXQpCj4gIAo+ICBzdGF0aWMgaW5saW5lIHZvaWQgcmF0ZWxpbWl0X3N0YXRlX2luaXQoc3RydWN0 IHJhdGVsaW1pdF9zdGF0ZSAqcnMsCj4gIAkJCQkJaW50IGludGVydmFsLCBpbnQgYnVyc3QpCj4g IHsKPiAgCW1lbXNldChycywgMCwgc2l6ZW9mKCpycykpOwo+ICAKPiAtCXJhd19zcGluX2xvY2tf aW5pdCgmcnMtPmxvY2spOwo+ICAJcnMtPmludGVydmFsCT0gaW50ZXJ2YWw7Cj4gIAlycy0+YnVy c3QJPSBidXJzdDsKPiArCWF0b21pY19zZXQoJnJzLT5wcmludGVkLCAwKTsKPiArCWF0b21pY19z ZXQoJnJzLT5taXNzZWQsIDApOwo+ICB9Cj4gIAo+ICBzdGF0aWMgaW5saW5lIHZvaWQgcmF0ZWxp bWl0X2RlZmF1bHRfaW5pdChzdHJ1Y3QgcmF0ZWxpbWl0X3N0YXRlCj4gKnJzKQo+IEBAIC01Mywx NiArNTMsMjEgQEAgc3RhdGljIGlubGluZSB2b2lkIHJhdGVsaW1pdF9kZWZhdWx0X2luaXQoc3Ry dWN0Cj4gcmF0ZWxpbWl0X3N0YXRlICpycykKPiAgCQkJCQlERUZBVUxUX1JBVEVMSU1JVF9CVVJT VCk7Cj4gIH0KPiAgCj4gKy8qCj4gKyAqIEtlZXBpbmcgSXQgU2ltcGxlOiBub3QgcmVlbnRlcmFi bGUgYW5kIG5vdCBzYWZlIGZvciBjb25jdXJyZW50Cj4gKyAqIF9fX3JhdGVsaW1pdCgpIGNhbGwg YXMgdXNlZCBvbmx5IGJ5IGRldmttc2dfcmVsZWFzZSgpLgo+ICsgKi8KPiAgc3RhdGljIGlubGlu ZSB2b2lkIHJhdGVsaW1pdF9zdGF0ZV9leGl0KHN0cnVjdCByYXRlbGltaXRfc3RhdGUgKnJzKQo+ ICB7Cj4gKwlpbnQgbWlzc2VkOwo+ICsKPiAgCWlmICghKHJzLT5mbGFncyAmIFJBVEVMSU1JVF9N U0dfT05fUkVMRUFTRSkpCj4gIAkJcmV0dXJuOwo+ICAKPiAtCWlmIChycy0+bWlzc2VkKSB7Cj4g KwltaXNzZWQgPSBhdG9taWNfeGNoZygmcnMtPm1pc3NlZCwgMCk7Cj4gKwlpZiAobWlzc2VkKQo+ ICAJCXByX3dhcm4oIiVzOiAlZCBvdXRwdXQgbGluZXMgc3VwcHJlc3NlZCBkdWUgdG8KPiByYXRl bGltaXRpbmdcbiIsCj4gLQkJCWN1cnJlbnQtPmNvbW0sIHJzLT5taXNzZWQpOwo+IC0JCXJzLT5t aXNzZWQgPSAwOwo+IC0JfQo+ICsJCQljdXJyZW50LT5jb21tLCBtaXNzZWQpOwo+ICB9Cj4gIAo+ ICBzdGF0aWMgaW5saW5lIHZvaWQKPiBkaWZmIC0tZ2l0IGEva2VybmVsL3VzZXIuYyBiL2tlcm5l bC91c2VyLmMKPiBpbmRleCAzNjI4OGQ4NDA2NzUuLmE5NjRmODQyZDhmMCAxMDA2NDQKPiAtLS0g YS9rZXJuZWwvdXNlci5jCj4gKysrIGIva2VybmVsL3VzZXIuYwo+IEBAIC0xMDEsNyArMTAxLDcg QEAgc3RydWN0IHVzZXJfc3RydWN0IHJvb3RfdXNlciA9IHsKPiAgCS5zaWdwZW5kaW5nCT0gQVRP TUlDX0lOSVQoMCksCj4gIAkubG9ja2VkX3NobSAgICAgPSAwLAo+ICAJLnVpZAkJPSBHTE9CQUxf Uk9PVF9VSUQsCj4gLQkucmF0ZWxpbWl0CT0KPiBSQVRFTElNSVRfU1RBVEVfSU5JVChyb290X3Vz ZXIucmF0ZWxpbWl0LCAwLCAwKSwKPiArCS5yYXRlbGltaXQJPSBSQVRFTElNSVRfU1RBVEVfSU5J VCgwLCAwKSwKPiAgfTsKPiAgCj4gIC8qCj4gZGlmZiAtLWdpdCBhL2xpYi9yYXRlbGltaXQuYyBi L2xpYi9yYXRlbGltaXQuYwo+IGluZGV4IGQwMWY0NzEzNTIzOS4uZDliNzQ5ZDQwMTA4IDEwMDY0 NAo+IC0tLSBhL2xpYi9yYXRlbGltaXQuYwo+ICsrKyBiL2xpYi9yYXRlbGltaXQuYwo+IEBAIC0x Myw2ICsxMywxOCBAQAo+ICAjaW5jbHVkZSA8bGludXgvamlmZmllcy5oPgo+ICAjaW5jbHVkZSA8 bGludXgvZXhwb3J0Lmg+Cj4gIAo+ICtzdGF0aWMgdm9pZCByYXRlbGltaXRfZW5kX2ludGVydmFs KHN0cnVjdCByYXRlbGltaXRfc3RhdGUgKnJzLCBjb25zdAo+IGNoYXIgKmZ1bmMpCj4gK3sKPiAr CXJzLT5iZWdpbiA9IGppZmZpZXM7Cj4gKwo+ICsJaWYgKCEocnMtPmZsYWdzICYgUkFURUxJTUlU X01TR19PTl9SRUxFQVNFKSkgewo+ICsJCXVuc2lnbmVkIGludCBtaXNzZWQgPSBhdG9taWNfeGNo ZygmcnMtPm1pc3NlZCwgMCk7Cj4gKwo+ICsJCWlmIChtaXNzZWQpCj4gKwkJCXByX3dhcm4oIiVz OiAldSBjYWxsYmFja3Mgc3VwcHJlc3NlZFxuIiwKPiBmdW5jLCBtaXNzZWQpOwo+ICsJfQo+ICt9 Cj4gKwo+ICAvKgo+ICAgKiBfX3JhdGVsaW1pdCAtIHJhdGUgbGltaXRpbmcKPiAgICogQHJzOiBy YXRlbGltaXRfc3RhdGUgZGF0YQo+IEBAIC0yNyw0NSArMzksMzAgQEAKPiAgICovCj4gIGludCBf X19yYXRlbGltaXQoc3RydWN0IHJhdGVsaW1pdF9zdGF0ZSAqcnMsIGNvbnN0IGNoYXIgKmZ1bmMp Cj4gIHsKPiAtCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Cj4gLQlpbnQgcmV0Owo+IC0KPiAgCWlmICgh cnMtPmludGVydmFsKQo+ICAJCXJldHVybiAxOwo+ICAKPiAtCS8qCj4gLQkgKiBJZiB3ZSBjb250 ZW5kIG9uIHRoaXMgc3RhdGUncyBsb2NrIHRoZW4gYWxtb3N0Cj4gLQkgKiBieSBkZWZpbml0aW9u IHdlIGFyZSB0b28gYnVzeSB0byBwcmludCBhIG1lc3NhZ2UsCj4gLQkgKiBpbiBhZGRpdGlvbiB0 byB0aGUgb25lIHRoYXQgd2lsbCBiZSBwcmludGVkIGJ5Cj4gLQkgKiB0aGUgZW50aXR5IHRoYXQg aXMgaG9sZGluZyB0aGUgbG9jayBhbHJlYWR5Ogo+IC0JICovCj4gLQlpZiAoIXJhd19zcGluX3Ry eWxvY2tfaXJxc2F2ZSgmcnMtPmxvY2ssIGZsYWdzKSkKPiArCWlmICh1bmxpa2VseSghcnMtPmJ1 cnN0KSkgewo+ICsJCWF0b21pY19hZGRfdW5sZXNzKCZycy0+bWlzc2VkLCAxLCAtMSk7Cj4gKwkJ aWYgKHRpbWVfaXNfYmVmb3JlX2ppZmZpZXMocnMtPmJlZ2luICsgcnMtCj4gPmludGVydmFsKSkK PiArCQkJcmF0ZWxpbWl0X2VuZF9pbnRlcnZhbChycywgZnVuYyk7Cj4gKwo+ICAJCXJldHVybiAw Owo+ICsJfQo+ICAKPiAtCWlmICghcnMtPmJlZ2luKQo+IC0JCXJzLT5iZWdpbiA9IGppZmZpZXM7 Cj4gKwlpZiAoYXRvbWljX2FkZF91bmxlc3MoJnJzLT5wcmludGVkLCAxLCBycy0+YnVyc3QpKQo+ ICsJCXJldHVybiAxOwo+ICAKPiAgCWlmICh0aW1lX2lzX2JlZm9yZV9qaWZmaWVzKHJzLT5iZWdp biArIHJzLT5pbnRlcnZhbCkpIHsKPiAtCQlpZiAocnMtPm1pc3NlZCkgewo+IC0JCQlpZiAoIShy cy0+ZmxhZ3MgJiBSQVRFTElNSVRfTVNHX09OX1JFTEVBU0UpKQo+IHsKPiAtCQkJCXByaW50a19k ZWZlcnJlZChLRVJOX1dBUk5JTkcKPiAtCQkJCQkJIiVzOiAlZCBjYWxsYmFja3MKPiBzdXBwcmVz c2VkXG4iLAo+IC0JCQkJCQlmdW5jLCBycy0+bWlzc2VkKTsKPiAtCQkJCXJzLT5taXNzZWQgPSAw Owo+IC0JCQl9Cj4gLQkJfQo+IC0JCXJzLT5iZWdpbiAgID0gamlmZmllczsKPiAtCQlycy0+cHJp bnRlZCA9IDA7Cj4gLQl9Cj4gLQlpZiAocnMtPmJ1cnN0ICYmIHJzLT5idXJzdCA+IHJzLT5wcmlu dGVkKSB7Cj4gLQkJcnMtPnByaW50ZWQrKzsKPiAtCQlyZXQgPSAxOwo+IC0JfSBlbHNlIHsKPiAt CQlycy0+bWlzc2VkKys7Cj4gLQkJcmV0ID0gMDsKPiArCQlpZiAoYXRvbWljX2NtcHhjaGcoJnJz LT5wcmludGVkLCBycy0+YnVyc3QsIDApKQo+ICsJCQlyYXRlbGltaXRfZW5kX2ludGVydmFsKHJz LCBmdW5jKTsKPiAgCX0KPiAtCXJhd19zcGluX3VubG9ja19pcnFyZXN0b3JlKCZycy0+bG9jaywg ZmxhZ3MpOwo+ICAKPiAtCXJldHVybiByZXQ7Cj4gKwlpZiAoYXRvbWljX2FkZF91bmxlc3MoJnJz LT5wcmludGVkLCAxLCBycy0+YnVyc3QpKQo+ICsJCXJldHVybiAxOwo+ICsKPiArCWF0b21pY19h ZGRfdW5sZXNzKCZycy0+bWlzc2VkLCAxLCAtMSk7Cj4gKwo+ICsJcmV0dXJuIDA7Cj4gIH0KPiAg RVhQT1JUX1NZTUJPTChfX19yYXRlbGltaXQpOwpfX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fXwpJbnRlbC1nZnggbWFpbGluZyBsaXN0CkludGVsLWdmeEBsaXN0 cy5mcmVlZGVza3RvcC5vcmcKaHR0cHM6Ly9saXN0cy5mcmVlZGVza3RvcC5vcmcvbWFpbG1hbi9s aXN0aW5mby9pbnRlbC1nZngK