From mboxrd@z Thu Jan 1 00:00:00 1970 From: Dmitry Safonov Subject: [PATCHv3] lib/ratelimit: Lockless ratelimiting Date: Tue, 3 Jul 2018 23:56:28 +0100 Message-ID: <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-x542.google.com (mail-ed1-x542.google.com [IPv6:2a00:1450:4864:20::542]) by gabe.freedesktop.org (Postfix) with ESMTPS id 5626A6E071 for ; Tue, 3 Jul 2018 22:56:32 +0000 (UTC) Received: by mail-ed1-x542.google.com with SMTP id b12-v6so2692510edt.8 for ; Tue, 03 Jul 2018 15:56:32 -0700 (PDT) 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 , Dmitry Safonov , 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 Q3VycmVudGx5IHJhdGVsaW1pdF9zdGF0ZSBpcyBwcm90ZWN0ZWQgd2l0aCBzcGluX2xvY2suIElm IHRoZSAubG9jayBpcwp0YWtlbiBhdCB0aGUgbW9tZW50IG9mIF9fX3JhdGVsaW1pdCgpIGNhbGws IHRoZSBtZXNzYWdlIGlzIHN1cHByZXNzZWQgdG8KbWFrZSByYXRlbGltaXRpbmcgcm9idXN0LgoK VGhhdCByZXN1bHRzIGluIHRoZSBmb2xsb3dpbmcgaXNzdWUgaXNzdWU6CiAgICAgIENQVTAgICAg ICAgICAgICAgICAgICAgICAgICAgIENQVTEKLS0tLS0tLS0tLS0tLS0tLS0tICAgICAgICAgICAt LS0tLS0tLS0tLS0tLS0tLS0KcHJpbnRrX3JhdGVsaW1pdCgpICAgICAgICAgICBwcmludGtfcmF0 ZWxpbWl0KCkKICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CiAgdHJ5X3Nw aW5fbG9jaygpICAgICAgICAgICAgICB0cnlfc3Bpbl9sb2NrKCkKICAgICAgICB8ICAgICAgICAg ICAgICAgICAgICAgICAgICAgICB8CnRpbWVfaXNfYmVmb3JlX2ppZmZpZXMoKSAgICAgICAgICBy ZXR1cm4gMDsgLy8gc3VwcHJlc3MKClNvLCBjb25jdXJyZW50IGNhbGwgb2YgX19fcmF0ZWxpbWl0 KCkgcmVzdWx0cyBpbiBzaWxlbnRseSBzdXBwcmVzc2luZwpvbmUgb2YgdGhlIG1lc3NhZ2VzLCBy ZWdhcmRsZXNzIGlmIHRoZSBsaW1pdCBpcyByZWFjaGVkIG9yIG5vdC4KQW5kIHJjLT5taXNzZWQg aXMgbm90IGluY3JlYXNlZCBpbiBzdWNoIGNhc2Ugc28gdGhlIGlzc3VlIGlzIGNvdmVyZWQKZnJv bSB1c2VyLgoKQ29udmVydCByYXRlbGltaXRpbmcgdG8gdXNlIGF0b21pYyBjb3VudGVycyBhbmQg ZHJvcCBzcGluX2xvY2suCgpOb3RlOiBUaGF0IG1pZ2h0IGJlIHVuZXhwZWN0ZWQsIGJ1dCB3aXRo IHRoZSBmaXJzdCBpbnRlcnZhbCBvZiBtZXNzYWdlcwpzdG9ybSBvbmUgY2FuIHByaW50IHVwIHRv IGJ1cnN0KjIgbWVzc2FnZXMuIFNvLCBpdCBkb2Vzbid0IGd1YXJhbnRlZQp0aGF0IGluICphbnkq IGludGVydmFsIGFtb3VudCBvZiBtZXNzYWdlcyBpcyBsZXNzZXIgdGhhbiBidXJzdC4KQnV0LCB0 aGF0IGRpZmZlcnMgbGlnaHRseSBmcm9tIHByZXZpb3VzIGJlaGF2aW9yIHdoZXJlIG9uZSBjYW4g c3RhcnQKYnVyc3Q9NSBpbnRlcnZhbCBhbmQgcHJpbnQgNCBtZXNzYWdlcyBvbiB0aGUgbGFzdCBt aWxsaXNlY29uZHMgb2YKaW50ZXJ2YWwgKyBuZXcgNSBtZXNzYWdlcyBmcm9tIG5ldyBpbnRlcnZh bCAodG90YWxseSA5IG1lc3NhZ2VzIGluCmxlc3NlciB0aGFuIGludGVydmFsIHZhbHVlKToKCiAg IG1zZzAgICAgICAgICAgICAgIG1zZzEtbXNnNCBtc2cwLW1zZzQKICAgIHwgICAgICAgICAgICAg ICAgICAgICB8ICAgICAgIHwKICAgIHwgICAgICAgICAgICAgICAgICAgICB8ICAgICAgIHwKIHwt LW8tLS0tLS0tLS0tLS0tLS0tLS0tLS1vLXwtLS0tLW8tLS0tLS0tLS0tLS0tLS0tLS0tLXwtLT4g KHQpCiAgICAgICAgICAgICAgICAgICAgICAgICAgPC0tLS0tLS0+CiAgICAgICAgICAgICAgICAg ICAgICAgTGVzc2VyIHRoYW4gYnVyc3QKCkRyb3BwZWQgZGV2L3JhbmRvbSBwYXRjaCBzaW5jZSB2 MSB2ZXJzaW9uOgpsa21sLmtlcm5lbC5vcmcvci88MjAxODA1MTAxMjUyMTEuMTI1ODMtMS1kaW1h QGFyaXN0YS5jb20+CgpEcm9wcGVkIGBuYW1lJyBpbiBhcyBpdCdzIHVudXNlZCBpbiBSQVRFTElN SVRfU1RBVEVfSU5JVCgpCgpDYzogQW5keSBTaGV2Y2hlbmtvIDxhbmR5LnNoZXZjaGVua29AZ21h aWwuY29tPgpDYzogQXJuZCBCZXJnbWFubiA8YXJuZEBhcm5kYi5kZT4KQ2M6IERhdmlkIEFpcmxp ZSA8YWlybGllZEBsaW51eC5pZT4KQ2M6IEdyZWcgS3JvYWgtSGFydG1hbiA8Z3JlZ2toQGxpbnV4 Zm91bmRhdGlvbi5vcmc+CkNjOiBKYW5pIE5pa3VsYSA8amFuaS5uaWt1bGFAbGludXguaW50ZWwu Y29tPgpDYzogSm9vbmFzIExhaHRpbmVuIDxqb29uYXMubGFodGluZW5AbGludXguaW50ZWwuY29t PgpDYzogUm9kcmlnbyBWaXZpIDxyb2RyaWdvLnZpdmlAaW50ZWwuY29tPgpDYzogIlRoZW9kb3Jl IFRzJ28iIDx0eXRzb0BtaXQuZWR1PgpDYzogVGhvbWFzIEdsZWl4bmVyIDx0Z2x4QGxpbnV0cm9u aXguZGU+CkNjOiBpbnRlbC1nZnhAbGlzdHMuZnJlZWRlc2t0b3Aub3JnCkNjOiBkcmktZGV2ZWxA bGlzdHMuZnJlZWRlc2t0b3Aub3JnClNpZ25lZC1vZmYtYnk6IERtaXRyeSBTYWZvbm92IDxkaW1h QGFyaXN0YS5jb20+Ci0tLQogZHJpdmVycy9jaGFyL3JhbmRvbS5jICAgICAgICAgICAgfCAyOCAr KysrKysrKy0tLS0tLS0tLS0tCiBkcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X3BlcmYuYyB8ICA4 ICsrKystLQogZnMvYnRyZnMvc3VwZXIuYyAgICAgICAgICAgICAgICAgfCAxNiArKysrKy0tLS0t LQogZnMveGZzL3NjcnViL3NjcnViLmMgICAgICAgICAgICAgfCAgMiArLQogaW5jbHVkZS9saW51 eC9yYXRlbGltaXQuaCAgICAgICAgfCAzMSArKysrKysrKysrKystLS0tLS0tLS0KIGtlcm5lbC91 c2VyLmMgICAgICAgICAgICAgICAgICAgIHwgIDIgKy0KIGxpYi9yYXRlbGltaXQuYyAgICAgICAg ICAgICAgICAgIHwgNTkgKysrKysrKysrKysrKysrKysrKy0tLS0tLS0tLS0tLS0tLS0tLS0tLQog NyBmaWxlcyBjaGFuZ2VkLCA3MyBpbnNlcnRpb25zKCspLCA3MyBkZWxldGlvbnMoLSkKCmRpZmYg LS1naXQgYS9kcml2ZXJzL2NoYXIvcmFuZG9tLmMgYi9kcml2ZXJzL2NoYXIvcmFuZG9tLmMKaW5k ZXggY2Q4ODhkNGVlNjA1Li4wYmUzMWIzZWFkYWIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci9y YW5kb20uYworKysgYi9kcml2ZXJzL2NoYXIvcmFuZG9tLmMKQEAgLTQzOSwxMCArNDM5LDggQEAg c3RhdGljIHZvaWQgX2NybmdfYmFja3RyYWNrX3Byb3RlY3Qoc3RydWN0IGNybmdfc3RhdGUgKmNy bmcsCiBzdGF0aWMgdm9pZCBwcm9jZXNzX3JhbmRvbV9yZWFkeV9saXN0KHZvaWQpOwogc3RhdGlj IHZvaWQgX2dldF9yYW5kb21fYnl0ZXModm9pZCAqYnVmLCBpbnQgbmJ5dGVzKTsKIAotc3RhdGlj IHN0cnVjdCByYXRlbGltaXRfc3RhdGUgdW5zZWVkZWRfd2FybmluZyA9Ci0JUkFURUxJTUlUX1NU QVRFX0lOSVQoIndhcm5fdW5zZWVkZWRfcmFuZG9tbmVzcyIsIEhaLCAzKTsKLXN0YXRpYyBzdHJ1 Y3QgcmF0ZWxpbWl0X3N0YXRlIHVyYW5kb21fd2FybmluZyA9Ci0JUkFURUxJTUlUX1NUQVRFX0lO SVQoIndhcm5fdXJhbmRvbV9yYW5kb21uZXNzIiwgSFosIDMpOworc3RhdGljIHN0cnVjdCByYXRl bGltaXRfc3RhdGUgdW5zZWVkZWRfd2FybmluZyA9IFJBVEVMSU1JVF9TVEFURV9JTklUKEhaLCAz KTsKK3N0YXRpYyBzdHJ1Y3QgcmF0ZWxpbWl0X3N0YXRlIHVyYW5kb21fd2FybmluZyA9IFJBVEVM SU1JVF9TVEFURV9JTklUKEhaLCAzKTsKIAogc3RhdGljIGludCByYXRlbGltaXRfZGlzYWJsZSBf X3JlYWRfbW9zdGx5OwogCkBAIC05MzcsMjQgKzkzNSwyMiBAQCBzdGF0aWMgdm9pZCBjcm5nX3Jl c2VlZChzdHJ1Y3QgY3JuZ19zdGF0ZSAqY3JuZywgc3RydWN0IGVudHJvcHlfc3RvcmUgKnIpCiAJ Y3JuZy0+aW5pdF90aW1lID0gamlmZmllczsKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjcm5n LT5sb2NrLCBmbGFncyk7CiAJaWYgKGNybmcgPT0gJnByaW1hcnlfY3JuZyAmJiBjcm5nX2luaXQg PCAyKSB7CisJCXVuc2lnbmVkIGludCB1bnNlZWRlZF9taXNzLCB1cmFuZG9tX21pc3M7CisKIAkJ aW52YWxpZGF0ZV9iYXRjaGVkX2VudHJvcHkoKTsKIAkJbnVtYV9jcm5nX2luaXQoKTsKIAkJY3Ju Z19pbml0ID0gMjsKIAkJcHJvY2Vzc19yYW5kb21fcmVhZHlfbGlzdCgpOwogCQl3YWtlX3VwX2lu dGVycnVwdGlibGUoJmNybmdfaW5pdF93YWl0KTsKIAkJcHJfbm90aWNlKCJyYW5kb206IGNybmcg aW5pdCBkb25lXG4iKTsKLQkJaWYgKHVuc2VlZGVkX3dhcm5pbmcubWlzc2VkKSB7Ci0JCQlwcl9u b3RpY2UoInJhbmRvbTogJWQgZ2V0X3JhbmRvbV94eCB3YXJuaW5nKHMpIG1pc3NlZCAiCi0JCQkJ ICAiZHVlIHRvIHJhdGVsaW1pdGluZ1xuIiwKLQkJCQkgIHVuc2VlZGVkX3dhcm5pbmcubWlzc2Vk KTsKLQkJCXVuc2VlZGVkX3dhcm5pbmcubWlzc2VkID0gMDsKLQkJfQotCQlpZiAodXJhbmRvbV93 YXJuaW5nLm1pc3NlZCkgewotCQkJcHJfbm90aWNlKCJyYW5kb206ICVkIHVyYW5kb20gd2Fybmlu ZyhzKSBtaXNzZWQgIgotCQkJCSAgImR1ZSB0byByYXRlbGltaXRpbmdcbiIsCi0JCQkJICB1cmFu ZG9tX3dhcm5pbmcubWlzc2VkKTsKLQkJCXVyYW5kb21fd2FybmluZy5taXNzZWQgPSAwOwotCQl9 CisJCXVuc2VlZGVkX21pc3MgPSBhdG9taWNfeGNoZygmdW5zZWVkZWRfd2FybmluZy5taXNzZWQs IDApOworCQlpZiAodW5zZWVkZWRfbWlzcykKKwkJCXByX25vdGljZSgicmFuZG9tOiAldSBnZXRf cmFuZG9tX3h4IHdhcm5pbmcocykgbWlzc2VkICIKKwkJCQkgICJkdWUgdG8gcmF0ZWxpbWl0aW5n XG4iLCB1bnNlZWRlZF9taXNzKTsKKwkJdXJhbmRvbV9taXNzID0gYXRvbWljX3hjaGcoJnVyYW5k b21fd2FybmluZy5taXNzZWQsIDApOworCQlpZiAodXJhbmRvbV9taXNzKQorCQkJcHJfbm90aWNl KCJyYW5kb206ICV1IHVyYW5kb20gd2FybmluZyhzKSBtaXNzZWQgIgorCQkJCSAgImR1ZSB0byBy YXRlbGltaXRpbmdcbiIsIHVyYW5kb21fbWlzcyk7CiAJfQogfQogCmRpZmYgLS1naXQgYS9kcml2 ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X3BlcmYuYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVf cGVyZi5jCmluZGV4IDAxOWJkMmQwNzNhZC4uZGNmYmEzMDIzNTQ3IDEwMDY0NAotLS0gYS9kcml2 ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X3BlcmYuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9p OTE1X3BlcmYuYwpAQCAtMTI5NSw2ICsxMjk1LDcgQEAgZnJlZV9vYV9idWZmZXIoc3RydWN0IGRy bV9pOTE1X3ByaXZhdGUgKmk5MTUpCiBzdGF0aWMgdm9pZCBpOTE1X29hX3N0cmVhbV9kZXN0cm95 KHN0cnVjdCBpOTE1X3BlcmZfc3RyZWFtICpzdHJlYW0pCiB7CiAJc3RydWN0IGRybV9pOTE1X3By aXZhdGUgKmRldl9wcml2ID0gc3RyZWFtLT5kZXZfcHJpdjsKKwl1bnNpZ25lZCBpbnQgbXNnX21p c3NlZDsKIAogCUJVR19PTihzdHJlYW0gIT0gZGV2X3ByaXYtPnBlcmYub2EuZXhjbHVzaXZlX3N0 cmVhbSk7CiAKQEAgLTEzMTcsOSArMTMxOCwxMCBAQCBzdGF0aWMgdm9pZCBpOTE1X29hX3N0cmVh bV9kZXN0cm95KHN0cnVjdCBpOTE1X3BlcmZfc3RyZWFtICpzdHJlYW0pCiAKIAlwdXRfb2FfY29u ZmlnKGRldl9wcml2LCBzdHJlYW0tPm9hX2NvbmZpZyk7CiAKLQlpZiAoZGV2X3ByaXYtPnBlcmYu b2Euc3B1cmlvdXNfcmVwb3J0X3JzLm1pc3NlZCkgewotCQlEUk1fTk9URSgiJWQgc3B1cmlvdXMg T0EgcmVwb3J0IG5vdGljZXMgc3VwcHJlc3NlZCBkdWUgdG8gcmF0ZWxpbWl0aW5nXG4iLAotCQkJ IGRldl9wcml2LT5wZXJmLm9hLnNwdXJpb3VzX3JlcG9ydF9ycy5taXNzZWQpOworCW1zZ19taXNz ZWQgPSBhdG9taWNfcmVhZCgmZGV2X3ByaXYtPnBlcmYub2Euc3B1cmlvdXNfcmVwb3J0X3JzLm1p c3NlZCk7CisJaWYgKG1zZ19taXNzZWQpIHsKKwkJRFJNX05PVEUoIiV1IHNwdXJpb3VzIE9BIHJl cG9ydCBub3RpY2VzIHN1cHByZXNzZWQgZHVlIHRvIHJhdGVsaW1pdGluZ1xuIiwKKwkJCSBtc2df bWlzc2VkKTsKIAl9CiB9CiAKZGlmZiAtLWdpdCBhL2ZzL2J0cmZzL3N1cGVyLmMgYi9mcy9idHJm cy9zdXBlci5jCmluZGV4IDgxMTA3YWQ0OWYzYS4uZmZhYjZjMjNiYzUwIDEwMDY0NAotLS0gYS9m cy9idHJmcy9zdXBlci5jCisrKyBiL2ZzL2J0cmZzL3N1cGVyLmMKQEAgLTE3NywxNCArMTc3LDE0 IEBAIHN0YXRpYyBjb25zdCBjaGFyICogY29uc3QgbG9ndHlwZXNbXSA9IHsKICAqIG1lc3NhZ2Vz IGRvZXNuJ3QgY2F1c2UgbW9yZSBpbXBvcnRhbnQgb25lcyB0byBiZSBkcm9wcGVkLgogICovCiBz dGF0aWMgc3RydWN0IHJhdGVsaW1pdF9zdGF0ZSBwcmludGtfbGltaXRzW10gPSB7Ci0JUkFURUxJ TUlUX1NUQVRFX0lOSVQocHJpbnRrX2xpbWl0c1swXSwgREVGQVVMVF9SQVRFTElNSVRfSU5URVJW QUwsIDEwMCksCi0JUkFURUxJTUlUX1NUQVRFX0lOSVQocHJpbnRrX2xpbWl0c1sxXSwgREVGQVVM VF9SQVRFTElNSVRfSU5URVJWQUwsIDEwMCksCi0JUkFURUxJTUlUX1NUQVRFX0lOSVQocHJpbnRr X2xpbWl0c1syXSwgREVGQVVMVF9SQVRFTElNSVRfSU5URVJWQUwsIDEwMCksCi0JUkFURUxJTUlU X1NUQVRFX0lOSVQocHJpbnRrX2xpbWl0c1szXSwgREVGQVVMVF9SQVRFTElNSVRfSU5URVJWQUws IDEwMCksCi0JUkFURUxJTUlUX1NUQVRFX0lOSVQocHJpbnRrX2xpbWl0c1s0XSwgREVGQVVMVF9S QVRFTElNSVRfSU5URVJWQUwsIDEwMCksCi0JUkFURUxJTUlUX1NUQVRFX0lOSVQocHJpbnRrX2xp bWl0c1s1XSwgREVGQVVMVF9SQVRFTElNSVRfSU5URVJWQUwsIDEwMCksCi0JUkFURUxJTUlUX1NU QVRFX0lOSVQocHJpbnRrX2xpbWl0c1s2XSwgREVGQVVMVF9SQVRFTElNSVRfSU5URVJWQUwsIDEw MCksCi0JUkFURUxJTUlUX1NUQVRFX0lOSVQocHJpbnRrX2xpbWl0c1s3XSwgREVGQVVMVF9SQVRF TElNSVRfSU5URVJWQUwsIDEwMCksCisJUkFURUxJTUlUX1NUQVRFX0lOSVQoREVGQVVMVF9SQVRF TElNSVRfSU5URVJWQUwsIDEwMCksCisJUkFURUxJTUlUX1NUQVRFX0lOSVQoREVGQVVMVF9SQVRF TElNSVRfSU5URVJWQUwsIDEwMCksCisJUkFURUxJTUlUX1NUQVRFX0lOSVQoREVGQVVMVF9SQVRF TElNSVRfSU5URVJWQUwsIDEwMCksCisJUkFURUxJTUlUX1NUQVRFX0lOSVQoREVGQVVMVF9SQVRF TElNSVRfSU5URVJWQUwsIDEwMCksCisJUkFURUxJTUlUX1NUQVRFX0lOSVQoREVGQVVMVF9SQVRF TElNSVRfSU5URVJWQUwsIDEwMCksCisJUkFURUxJTUlUX1NUQVRFX0lOSVQoREVGQVVMVF9SQVRF TElNSVRfSU5URVJWQUwsIDEwMCksCisJUkFURUxJTUlUX1NUQVRFX0lOSVQoREVGQVVMVF9SQVRF TElNSVRfSU5URVJWQUwsIDEwMCksCisJUkFURUxJTUlUX1NUQVRFX0lOSVQoREVGQVVMVF9SQVRF TElNSVRfSU5URVJWQUwsIDEwMCksCiB9OwogCiB2b2lkIGJ0cmZzX3ByaW50ayhjb25zdCBzdHJ1 Y3QgYnRyZnNfZnNfaW5mbyAqZnNfaW5mbywgY29uc3QgY2hhciAqZm10LCAuLi4pCmRpZmYgLS1n aXQgYS9mcy94ZnMvc2NydWIvc2NydWIuYyBiL2ZzL3hmcy9zY3J1Yi9zY3J1Yi5jCmluZGV4IDU4 YWU3NmIzYTQyMS4uOGI1OGI0Mzk2OTRhIDEwMDY0NAotLS0gYS9mcy94ZnMvc2NydWIvc2NydWIu YworKysgYi9mcy94ZnMvc2NydWIvc2NydWIuYwpAQCAtMzQ5LDcgKzM0OSw3IEBAIHhmc19zY3J1 Yl9leHBlcmltZW50YWxfd2FybmluZygKIAlzdHJ1Y3QgeGZzX21vdW50CSptcCkKIHsKIAlzdGF0 aWMgc3RydWN0IHJhdGVsaW1pdF9zdGF0ZSBzY3J1Yl93YXJuaW5nID0gUkFURUxJTUlUX1NUQVRF X0lOSVQoCi0JCQkieGZzX3NjcnViX3dhcm5pbmciLCA4NjQwMCAqIEhaLCAxKTsKKwkJCTg2NDAw ICogSFosIDEpOwogCXJhdGVsaW1pdF9zZXRfZmxhZ3MoJnNjcnViX3dhcm5pbmcsIFJBVEVMSU1J VF9NU0dfT05fUkVMRUFTRSk7CiAKIAlpZiAoX19yYXRlbGltaXQoJnNjcnViX3dhcm5pbmcpKQpk aWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9yYXRlbGltaXQuaCBiL2luY2x1ZGUvbGludXgvcmF0 ZWxpbWl0LmgKaW5kZXggOGRkZjc5ZTkyMDdhLi5mOWE5Mzg2ZGQ4NjkgMTAwNjQ0Ci0tLSBhL2lu Y2x1ZGUvbGludXgvcmF0ZWxpbWl0LmgKKysrIGIvaW5jbHVkZS9saW51eC9yYXRlbGltaXQuaApA QCAtNCw3ICs0LDYgQEAKIAogI2luY2x1ZGUgPGxpbnV4L3BhcmFtLmg+CiAjaW5jbHVkZSA8bGlu dXgvc2NoZWQuaD4KLSNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgogCiAjZGVmaW5lIERFRkFV TFRfUkFURUxJTUlUX0lOVEVSVkFMCSg1ICogSFopCiAjZGVmaW5lIERFRkFVTFRfUkFURUxJTUlU X0JVUlNUCQkxMApAQCAtMTMsMzggKzEyLDM5IEBACiAjZGVmaW5lIFJBVEVMSU1JVF9NU0dfT05f UkVMRUFTRQlCSVQoMCkKIAogc3RydWN0IHJhdGVsaW1pdF9zdGF0ZSB7Ci0JcmF3X3NwaW5sb2Nr X3QJbG9jazsJCS8qIHByb3RlY3QgdGhlIHN0YXRlICovCisJYXRvbWljX3QJcHJpbnRlZDsKKwlh dG9taWNfdAltaXNzZWQ7CiAKIAlpbnQJCWludGVydmFsOwogCWludAkJYnVyc3Q7Ci0JaW50CQlw cmludGVkOwotCWludAkJbWlzc2VkOwogCXVuc2lnbmVkIGxvbmcJYmVnaW47CiAJdW5zaWduZWQg bG9uZwlmbGFnczsKIH07CiAKLSNkZWZpbmUgUkFURUxJTUlUX1NUQVRFX0lOSVQobmFtZSwgaW50 ZXJ2YWxfaW5pdCwgYnVyc3RfaW5pdCkgewkJXAotCQkubG9jawkJPSBfX1JBV19TUElOX0xPQ0tf VU5MT0NLRUQobmFtZS5sb2NrKSwJXAorI2RlZmluZSBSQVRFTElNSVRfU1RBVEVfSU5JVChpbnRl cnZhbF9pbml0LCBidXJzdF9pbml0KSB7CQlcCiAJCS5pbnRlcnZhbAk9IGludGVydmFsX2luaXQs CQkJXAogCQkuYnVyc3QJCT0gYnVyc3RfaW5pdCwJCQkJXAorCQkucHJpbnRlZAk9IEFUT01JQ19J TklUKDApLAkJCVwKKwkJLm1pc3NlZAkJPSBBVE9NSUNfSU5JVCgwKSwJCQlcCiAJfQogCiAjZGVm aW5lIFJBVEVMSU1JVF9TVEFURV9JTklUX0RJU0FCTEVECQkJCQlcCi0JUkFURUxJTUlUX1NUQVRF X0lOSVQocmF0ZWxpbWl0X3N0YXRlLCAwLCBERUZBVUxUX1JBVEVMSU1JVF9CVVJTVCkKKwlSQVRF TElNSVRfU1RBVEVfSU5JVCgwLCBERUZBVUxUX1JBVEVMSU1JVF9CVVJTVCkKIAogI2RlZmluZSBE RUZJTkVfUkFURUxJTUlUX1NUQVRFKG5hbWUsIGludGVydmFsX2luaXQsIGJ1cnN0X2luaXQpCQlc CiAJCQkJCQkJCQlcCiAJc3RydWN0IHJhdGVsaW1pdF9zdGF0ZSBuYW1lID0JCQkJCVwKLQkJUkFU RUxJTUlUX1NUQVRFX0lOSVQobmFtZSwgaW50ZXJ2YWxfaW5pdCwgYnVyc3RfaW5pdCkJXAorCQlS QVRFTElNSVRfU1RBVEVfSU5JVChpbnRlcnZhbF9pbml0LCBidXJzdF9pbml0KQogCiBzdGF0aWMg aW5saW5lIHZvaWQgcmF0ZWxpbWl0X3N0YXRlX2luaXQoc3RydWN0IHJhdGVsaW1pdF9zdGF0ZSAq cnMsCiAJCQkJCWludCBpbnRlcnZhbCwgaW50IGJ1cnN0KQogewogCW1lbXNldChycywgMCwgc2l6 ZW9mKCpycykpOwogCi0JcmF3X3NwaW5fbG9ja19pbml0KCZycy0+bG9jayk7CiAJcnMtPmludGVy dmFsCT0gaW50ZXJ2YWw7CiAJcnMtPmJ1cnN0CT0gYnVyc3Q7CisJYXRvbWljX3NldCgmcnMtPnBy aW50ZWQsIDApOworCWF0b21pY19zZXQoJnJzLT5taXNzZWQsIDApOwogfQogCiBzdGF0aWMgaW5s aW5lIHZvaWQgcmF0ZWxpbWl0X2RlZmF1bHRfaW5pdChzdHJ1Y3QgcmF0ZWxpbWl0X3N0YXRlICpy cykKQEAgLTUzLDE2ICs1MywyMSBAQCBzdGF0aWMgaW5saW5lIHZvaWQgcmF0ZWxpbWl0X2RlZmF1 bHRfaW5pdChzdHJ1Y3QgcmF0ZWxpbWl0X3N0YXRlICpycykKIAkJCQkJREVGQVVMVF9SQVRFTElN SVRfQlVSU1QpOwogfQogCisvKgorICogS2VlcGluZyBJdCBTaW1wbGU6IG5vdCByZWVudGVyYWJs ZSBhbmQgbm90IHNhZmUgZm9yIGNvbmN1cnJlbnQKKyAqIF9fX3JhdGVsaW1pdCgpIGNhbGwgYXMg dXNlZCBvbmx5IGJ5IGRldmttc2dfcmVsZWFzZSgpLgorICovCiBzdGF0aWMgaW5saW5lIHZvaWQg cmF0ZWxpbWl0X3N0YXRlX2V4aXQoc3RydWN0IHJhdGVsaW1pdF9zdGF0ZSAqcnMpCiB7CisJaW50 IG1pc3NlZDsKKwogCWlmICghKHJzLT5mbGFncyAmIFJBVEVMSU1JVF9NU0dfT05fUkVMRUFTRSkp CiAJCXJldHVybjsKIAotCWlmIChycy0+bWlzc2VkKSB7CisJbWlzc2VkID0gYXRvbWljX3hjaGco JnJzLT5taXNzZWQsIDApOworCWlmIChtaXNzZWQpCiAJCXByX3dhcm4oIiVzOiAlZCBvdXRwdXQg bGluZXMgc3VwcHJlc3NlZCBkdWUgdG8gcmF0ZWxpbWl0aW5nXG4iLAotCQkJY3VycmVudC0+Y29t bSwgcnMtPm1pc3NlZCk7Ci0JCXJzLT5taXNzZWQgPSAwOwotCX0KKwkJCWN1cnJlbnQtPmNvbW0s IG1pc3NlZCk7CiB9CiAKIHN0YXRpYyBpbmxpbmUgdm9pZApkaWZmIC0tZ2l0IGEva2VybmVsL3Vz ZXIuYyBiL2tlcm5lbC91c2VyLmMKaW5kZXggMzYyODhkODQwNjc1Li5hOTY0Zjg0MmQ4ZjAgMTAw NjQ0Ci0tLSBhL2tlcm5lbC91c2VyLmMKKysrIGIva2VybmVsL3VzZXIuYwpAQCAtMTAxLDcgKzEw MSw3IEBAIHN0cnVjdCB1c2VyX3N0cnVjdCByb290X3VzZXIgPSB7CiAJLnNpZ3BlbmRpbmcJPSBB VE9NSUNfSU5JVCgwKSwKIAkubG9ja2VkX3NobSAgICAgPSAwLAogCS51aWQJCT0gR0xPQkFMX1JP T1RfVUlELAotCS5yYXRlbGltaXQJPSBSQVRFTElNSVRfU1RBVEVfSU5JVChyb290X3VzZXIucmF0 ZWxpbWl0LCAwLCAwKSwKKwkucmF0ZWxpbWl0CT0gUkFURUxJTUlUX1NUQVRFX0lOSVQoMCwgMCks CiB9OwogCiAvKgpkaWZmIC0tZ2l0IGEvbGliL3JhdGVsaW1pdC5jIGIvbGliL3JhdGVsaW1pdC5j CmluZGV4IGQwMWY0NzEzNTIzOS4uZDliNzQ5ZDQwMTA4IDEwMDY0NAotLS0gYS9saWIvcmF0ZWxp bWl0LmMKKysrIGIvbGliL3JhdGVsaW1pdC5jCkBAIC0xMyw2ICsxMywxOCBAQAogI2luY2x1ZGUg PGxpbnV4L2ppZmZpZXMuaD4KICNpbmNsdWRlIDxsaW51eC9leHBvcnQuaD4KIAorc3RhdGljIHZv aWQgcmF0ZWxpbWl0X2VuZF9pbnRlcnZhbChzdHJ1Y3QgcmF0ZWxpbWl0X3N0YXRlICpycywgY29u c3QgY2hhciAqZnVuYykKK3sKKwlycy0+YmVnaW4gPSBqaWZmaWVzOworCisJaWYgKCEocnMtPmZs YWdzICYgUkFURUxJTUlUX01TR19PTl9SRUxFQVNFKSkgeworCQl1bnNpZ25lZCBpbnQgbWlzc2Vk ID0gYXRvbWljX3hjaGcoJnJzLT5taXNzZWQsIDApOworCisJCWlmIChtaXNzZWQpCisJCQlwcl93 YXJuKCIlczogJXUgY2FsbGJhY2tzIHN1cHByZXNzZWRcbiIsIGZ1bmMsIG1pc3NlZCk7CisJfQor fQorCiAvKgogICogX19yYXRlbGltaXQgLSByYXRlIGxpbWl0aW5nCiAgKiBAcnM6IHJhdGVsaW1p dF9zdGF0ZSBkYXRhCkBAIC0yNyw0NSArMzksMzAgQEAKICAqLwogaW50IF9fX3JhdGVsaW1pdChz dHJ1Y3QgcmF0ZWxpbWl0X3N0YXRlICpycywgY29uc3QgY2hhciAqZnVuYykKIHsKLQl1bnNpZ25l ZCBsb25nIGZsYWdzOwotCWludCByZXQ7Ci0KIAlpZiAoIXJzLT5pbnRlcnZhbCkKIAkJcmV0dXJu IDE7CiAKLQkvKgotCSAqIElmIHdlIGNvbnRlbmQgb24gdGhpcyBzdGF0ZSdzIGxvY2sgdGhlbiBh bG1vc3QKLQkgKiBieSBkZWZpbml0aW9uIHdlIGFyZSB0b28gYnVzeSB0byBwcmludCBhIG1lc3Nh Z2UsCi0JICogaW4gYWRkaXRpb24gdG8gdGhlIG9uZSB0aGF0IHdpbGwgYmUgcHJpbnRlZCBieQot CSAqIHRoZSBlbnRpdHkgdGhhdCBpcyBob2xkaW5nIHRoZSBsb2NrIGFscmVhZHk6Ci0JICovCi0J aWYgKCFyYXdfc3Bpbl90cnlsb2NrX2lycXNhdmUoJnJzLT5sb2NrLCBmbGFncykpCisJaWYgKHVu bGlrZWx5KCFycy0+YnVyc3QpKSB7CisJCWF0b21pY19hZGRfdW5sZXNzKCZycy0+bWlzc2VkLCAx LCAtMSk7CisJCWlmICh0aW1lX2lzX2JlZm9yZV9qaWZmaWVzKHJzLT5iZWdpbiArIHJzLT5pbnRl cnZhbCkpCisJCQlyYXRlbGltaXRfZW5kX2ludGVydmFsKHJzLCBmdW5jKTsKKwogCQlyZXR1cm4g MDsKKwl9CiAKLQlpZiAoIXJzLT5iZWdpbikKLQkJcnMtPmJlZ2luID0gamlmZmllczsKKwlpZiAo YXRvbWljX2FkZF91bmxlc3MoJnJzLT5wcmludGVkLCAxLCBycy0+YnVyc3QpKQorCQlyZXR1cm4g MTsKIAogCWlmICh0aW1lX2lzX2JlZm9yZV9qaWZmaWVzKHJzLT5iZWdpbiArIHJzLT5pbnRlcnZh bCkpIHsKLQkJaWYgKHJzLT5taXNzZWQpIHsKLQkJCWlmICghKHJzLT5mbGFncyAmIFJBVEVMSU1J VF9NU0dfT05fUkVMRUFTRSkpIHsKLQkJCQlwcmludGtfZGVmZXJyZWQoS0VSTl9XQVJOSU5HCi0J CQkJCQkiJXM6ICVkIGNhbGxiYWNrcyBzdXBwcmVzc2VkXG4iLAotCQkJCQkJZnVuYywgcnMtPm1p c3NlZCk7Ci0JCQkJcnMtPm1pc3NlZCA9IDA7Ci0JCQl9Ci0JCX0KLQkJcnMtPmJlZ2luICAgPSBq aWZmaWVzOwotCQlycy0+cHJpbnRlZCA9IDA7Ci0JfQotCWlmIChycy0+YnVyc3QgJiYgcnMtPmJ1 cnN0ID4gcnMtPnByaW50ZWQpIHsKLQkJcnMtPnByaW50ZWQrKzsKLQkJcmV0ID0gMTsKLQl9IGVs c2UgewotCQlycy0+bWlzc2VkKys7Ci0JCXJldCA9IDA7CisJCWlmIChhdG9taWNfY21weGNoZygm cnMtPnByaW50ZWQsIHJzLT5idXJzdCwgMCkpCisJCQlyYXRlbGltaXRfZW5kX2ludGVydmFsKHJz LCBmdW5jKTsKIAl9Ci0JcmF3X3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnJzLT5sb2NrLCBmbGFn cyk7CiAKLQlyZXR1cm4gcmV0OworCWlmIChhdG9taWNfYWRkX3VubGVzcygmcnMtPnByaW50ZWQs IDEsIHJzLT5idXJzdCkpCisJCXJldHVybiAxOworCisJYXRvbWljX2FkZF91bmxlc3MoJnJzLT5t aXNzZWQsIDEsIC0xKTsKKworCXJldHVybiAwOwogfQogRVhQT1JUX1NZTUJPTChfX19yYXRlbGlt aXQpOwotLSAKMi4xMy42CgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fXwpJbnRlbC1nZnggbWFpbGluZyBsaXN0CkludGVsLWdmeEBsaXN0cy5mcmVlZGVza3Rv cC5vcmcKaHR0cHM6Ly9saXN0cy5mcmVlZGVza3RvcC5vcmcvbWFpbG1hbi9saXN0aW5mby9pbnRl bC1nZngK