From mboxrd@z Thu Jan 1 00:00:00 1970 From: Tvrtko Ursulin Subject: [RFC 08/10] cgroup/drm: Introduce weight based drm cgroup control Date: Tue, 14 Mar 2023 14:19:02 +0000 Message-ID: <20230314141904.1210824-9-tvrtko.ursulin@linux.intel.com> References: <20230314141904.1210824-1-tvrtko.ursulin@linux.intel.com> Mime-Version: 1.0 Content-Transfer-Encoding: base64 Return-path: DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1678803592; x=1710339592; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=Lz4KHqLFh7pnuonBnFmsRzri9N472KLS0VZ+xVXNm7w=; b=eNJ/VEa6lulrbJCzfNNsoEMD6YYZN/QmtQJyMSuEpFbvp/ffOHRfeMCK m5gEvGG+VHpZTzhEg1NMwNIKlEmLsY1HIBp9vki0QkpNvqoIsd1Lseulc Q1kdRIrLM74RfPvxGJBDZEY6/V5ofp8pT4atjC3qsZZS38nxjjIKjK0jv b9TXvNurZ8jmslfsqs2v2ANG6MbDN71/PlVaqMyxGlJZrb8mIZOA/53Tp JOyahK22rnXhgF5EYp8edOXW8P7sU0QLYU+sN25UbfEPDEZpaBVMChGS/ OQzSL7rTL/Y9RpPBb1545SUTlvn4Y9JMkm3jUZ7bPrCjr6+YB08uzMPzF g==; In-Reply-To: <20230314141904.1210824-1-tvrtko.ursulin@linux.intel.com> List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" Content-Type: text/plain; charset="macroman" To: Intel-gfx@lists.freedesktop.org, dri-devel@lists.freedesktop.org Cc: Rob Clark , Kenny.Ho@amd.com, Daniel Vetter , Johannes Weiner , linux-kernel@vger.kernel.org, =?UTF-8?q?St=C3=A9phane=20Marchesin?= , =?UTF-8?q?Christian=20K=C3=B6nig?= , =?UTF-8?q?Michal=20Koutn=C3=BD?= , Zefan Li , Dave Airlie , Tejun Heo , cgroups@vger.kernel.org, "T . J . Mercier" RnJvbTogVHZydGtvIFVyc3VsaW4gPHR2cnRrby51cnN1bGluQGludGVsLmNvbT4KClNpbWlsYXIg dG8gQ1BVIHNjaGVkdWxpbmcsIGltcGxlbWVudCBhIGNvbmNlcHQgb2Ygd2VpZ2h0IGluIHRoZSBk cm0gY2dyb3VwCmNvbnRyb2xsZXIuCgpVc2VzIHRoZSBzYW1lIHJhbmdlIGFuZCBkZWZhdWx0IGFz IHRoZSBDUFUgY29udHJvbGxlciAtIENHUk9VUF9XRUlHSFRfTUlOLApDR1JPVVBfV0VJR0hUX0RG TCBhbmQgQ0dST1VQX1dFSUdIVF9NQVguCgpMYXRlciBlYWNoIGNncm91cCBpcyBhc3NpZ25lZCBh IHRpbWUgYnVkZ2V0IHByb3BvcnRpb25hbHkgYmFzZWQgb24gdGhlCnJlbGF0aXZlIHdlaWdodHMg b2YgaXQncyBzaWJsaW5ncy4gVGhpcyB0aW1lIGJ1ZGdldCBpcyBpbiB0dXJuIHNwbGl0IGJ5CnRo ZSBncm91cCdzIGNoaWxkcmVuIGFuZCBzbyBvbi4KClRoaXMgd2lsbCBiZSB1c2VkIHRvIGltcGxl bWVudCBhIHNvZnQsIG9yIGJlc3QgZWZmb3J0IHNpZ25hbCBmcm9tIGRybQpjZ3JvdXAgdG8gZHJt IGNvcmUgbm90aWZ5aW5nIGFib3V0IGdyb3VwcyB3aGljaCBhcmUgb3ZlciB0aGVpciBhbGxvdHRl ZApidWRnZXQuCgpObyBndWFyYW50ZWVzIHRoYXQgdGhlIGxpbWl0IGNhbiBiZSBlbmZvcmNlZCBh cmUgcHJvdmlkZWQgb3IgaW1wbGllZC4KCkNoZWNraW5nIG9mIEdQVSB1c2FnZSBpcyBkb25lIHBl cmlvZGljYWxseSBieSB0aGUgY29udHJvbGxlciB3aGljaCBjYW4gYmUKY29uZmlndXJlZCB2aWEg ZHJtY2dfcGVyaW9kX21zIGtlcm5lbCBib290IHBhcmFtZXRlciBhbmQgd2hpY2ggZGVmYXVsdHMK dG8gMnMuCgpTaWduZWQtb2ZmLWJ5OiBUdnJ0a28gVXJzdWxpbiA8dHZydGtvLnVyc3VsaW5AaW50 ZWwuY29tPgpDYzogTWljaGFsIEtvdXRuw70gPG1rb3V0bnlAc3VzZS5jb20+CkNjOiBUZWp1biBI ZW8gPHRqQGtlcm5lbC5vcmc+Ci0tLQogRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9jZ3JvdXAt djIucnN0IHwgIDMxICsrCiBrZXJuZWwvY2dyb3VwL2RybS5jICAgICAgICAgICAgICAgICAgICAg fCA0MDkgKysrKysrKysrKysrKysrKysrKysrKystCiAyIGZpbGVzIGNoYW5nZWQsIDQzNyBpbnNl cnRpb25zKCspLCAzIGRlbGV0aW9ucygtKQoKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vYWRt aW4tZ3VpZGUvY2dyb3VwLXYyLnJzdCBiL0RvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvY2dyb3Vw LXYyLnJzdAppbmRleCBmNjdjMDgyOTM1MGIuLjg5MDZmZGY1YzhkNiAxMDA2NDQKLS0tIGEvRG9j dW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9jZ3JvdXAtdjIucnN0CisrKyBiL0RvY3VtZW50YXRpb24v YWRtaW4tZ3VpZGUvY2dyb3VwLXYyLnJzdApAQCAtMjQwNyw2ICsyNDA3LDM3IEBAIEh1Z2VUTEIg SW50ZXJmYWNlIEZpbGVzCiAgICAgICAgIGh1Z2V0bGIgcGFnZXMgb2YgPGh1Z2VwYWdlc2l6ZT4g aW4gdGhpcyBjZ3JvdXAuICBPbmx5IGFjdGl2ZSBpbgogICAgICAgICB1c2UgaHVnZXRsYiBwYWdl cyBhcmUgaW5jbHVkZWQuICBUaGUgcGVyLW5vZGUgdmFsdWVzIGFyZSBpbiBieXRlcy4KIAorRFJN CistLS0KKworVGhlIERSTSBjb250cm9sbGVyIGFsbG93cyBjb25maWd1cmluZyBzY2hlZHVsaW5n IHNvZnQgbGltaXRzLgorCitEUk0gc2NoZWR1bGluZyBzb2Z0IGxpbWl0cworfn5+fn5+fn5+fn5+ fn5+fn5+fn5+fn5+fn4KKworQmVjYXVzZSBvZiB0aGUgaGV0ZXJvZ2Vub3VzIGhhcmR3YXJlIGFu ZCBkcml2ZXIgRFJNIGNhcGFiaWxpdGllcywgc29mdCBsaW1pdHMKK2FyZSBpbXBsZW1lbnRlZCBh cyBhIGxvb3NlIGNvLW9wZXJhdGl2ZSAoYmktZGlyZWN0aW9uYWwpIGludGVyZmFjZSBiZXR3ZWVu IHRoZQorY29udHJvbGxlciBhbmQgRFJNIGNvcmUuCisKK1RoZSBjb250cm9sbGVyIGNvbmZpZ3Vy ZXMgdGhlIEdQVSB0aW1lIGFsbG93ZWQgcGVyIGdyb3VwIGFuZCBwZXJpb2RpY2FsbHkgc2NhbnMK K3RoZSBiZWxvbmdpbmcgdGFza3MgdG8gZGV0ZWN0IHRoZSBvdmVyIGJ1ZGdldCBjb25kaXRpb24s IGF0IHdoaWNoIHBvaW50IGl0CitpbnZva2VzIGEgY2FsbGJhY2sgbm90aWZ5aW5nIHRoZSBEUk0g Y29yZSBvZiB0aGUgY29uZGl0aW9uLgorCitEUk0gY29yZSBwcm92aWRlcyBhbiBBUEkgdG8gcXVl cnkgcGVyIHByb2Nlc3MgR1BVIHV0aWxpemF0aW9uIGFuZCAybmQgQVBJIHRvCityZWNlaXZlIG5v dGlmaWNhdGlvbiBmcm9tIHRoZSBjZ3JvdXAgY29udHJvbGxlciB3aGVuIHRoZSBncm91cCBlbnRl cnMgb3IgZXhpdHMKK3RoZSBvdmVyIGJ1ZGdldCBjb25kaXRpb24uCisKK0luZGl2aWR1YWwgRFJN IGRyaXZlcnMgd2hpY2ggaW1wbGVtZW50IHRoZSBpbnRlcmZhY2UgYXJlIGV4cGVjdGVkIHRvIGFj dCBvbiB0aGlzCitpbiB0aGUgYmVzdC1lZmZvcnQgbWFubmVyIG9ubHkuIFRoZXJlIGFyZSBubyBn dWFyYW50ZWVzIHRoYXQgdGhlIHNvZnQgbGltaXRzCit3aWxsIGJlIHJlc3BlY3RlZC4KKworRFJN IHNjaGVkdWxpbmcgc29mdCBsaW1pdHMgaW50ZXJmYWNlIGZpbGVzCit+fn5+fn5+fn5+fn5+fn5+ fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn4KKworICBkcm0ud2VpZ2h0CisJU3RhbmRhcmQgY2dy b3VwIHdlaWdodCBiYXNlZCBjb250cm9sIFsxLCAxMDAwMF0gdXNlZCB0byBjb25maWd1cmUgdGhl CisJcmVsYXRpdmUgZGlzdHJpYnV0aW5nIG9mIEdQVSB0aW1lIGJldHdlZW4gdGhlIHNpYmxpbmcg Z3JvdXBzLgorCiBNaXNjCiAtLS0tCiAKZGlmZiAtLWdpdCBhL2tlcm5lbC9jZ3JvdXAvZHJtLmMg Yi9rZXJuZWwvY2dyb3VwL2RybS5jCmluZGV4IDYwZTFmMzg2MTU3Ni4uYjI0NGUzZDgyOGNjIDEw MDY0NAotLS0gYS9rZXJuZWwvY2dyb3VwL2RybS5jCisrKyBiL2tlcm5lbC9jZ3JvdXAvZHJtLmMK QEAgLTYsNyArNiw5IEBACiAjaW5jbHVkZSA8bGludXgvY2dyb3VwLmg+CiAjaW5jbHVkZSA8bGlu dXgvY2dyb3VwX2RybS5oPgogI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4KKyNpbmNsdWRlIDxsaW51 eC9tb2R1bGVwYXJhbS5oPgogI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+CisjaW5jbHVkZSA8bGlu dXgvc2lnbmFsLmg+CiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgogCiAjaW5jbHVkZSA8ZHJtL2Ry bV9kcnYuaD4KQEAgLTE1LDEwICsxNywyOCBAQCBzdHJ1Y3QgZHJtX2Nncm91cF9zdGF0ZSB7CiAJ c3RydWN0IGNncm91cF9zdWJzeXNfc3RhdGUgY3NzOwogCiAJc3RydWN0IGxpc3RfaGVhZCBjbGll bnRzOworCisJdW5zaWduZWQgaW50IHdlaWdodDsKKworCXVuc2lnbmVkIGludCBzdW1fY2hpbGRy ZW5fd2VpZ2h0czsKKworCWJvb2wgb3ZlcjsKKwlib29sIG92ZXJfYnVkZ2V0OworCisJdTY0IHBl cl9zX2J1ZGdldF91czsKKwl1NjQgcHJldl9hY3RpdmVfdXM7CisJdTY0IGFjdGl2ZV91czsKIH07 CiAKIHN0cnVjdCBkcm1fcm9vdF9jZ3JvdXBfc3RhdGUgewogCXN0cnVjdCBkcm1fY2dyb3VwX3N0 YXRlIGRybWNzOworCisJdW5zaWduZWQgaW50IHBlcmlvZF91czsKKworCXVuc2lnbmVkIGludCBs YXN0X3NjYW5fZHVyYXRpb25fdXM7CisJa3RpbWVfdCBwcmV2X3RpbWVzdGFtcDsKKworCXN0cnVj dCBkZWxheWVkX3dvcmsgc2Nhbl93b3JrOwogfTsKIAogc3RhdGljIHN0cnVjdCBkcm1fcm9vdF9j Z3JvdXBfc3RhdGUgcm9vdF9kcm1jcyA9IHsKQEAgLTI3LDYgKzQ3LDkgQEAgc3RhdGljIHN0cnVj dCBkcm1fcm9vdF9jZ3JvdXBfc3RhdGUgcm9vdF9kcm1jcyA9IHsKIAogc3RhdGljIERFRklORV9N VVRFWChkcm1jZ19tdXRleCk7CiAKK3N0YXRpYyBpbnQgZHJtY2dfcGVyaW9kX21zID0gMjAwMDsK K21vZHVsZV9wYXJhbShkcm1jZ19wZXJpb2RfbXMsIGludCwgMDY0NCk7CisKIHN0YXRpYyBpbmxp bmUgc3RydWN0IGRybV9jZ3JvdXBfc3RhdGUgKgogY3NzX3RvX2RybWNzKHN0cnVjdCBjZ3JvdXBf c3Vic3lzX3N0YXRlICpjc3MpCiB7CkBAIC02NywxMiArOTAsMjYzIEBAIGRybWNzX3NpZ25hbF9i dWRnZXQoc3RydWN0IGRybV9jZ3JvdXBfc3RhdGUgKmRybWNzLCB1NjQgdXNhZ2UsIHU2NCBidWRn ZXQpCiAJfQogfQogCi1zdGF0aWMgdm9pZCBkcm1jc19mcmVlKHN0cnVjdCBjZ3JvdXBfc3Vic3lz X3N0YXRlICpjc3MpCitzdGF0aWMgdTY0Citkcm1jc19yZWFkX3dlaWdodChzdHJ1Y3QgY2dyb3Vw X3N1YnN5c19zdGF0ZSAqY3NzLCBzdHJ1Y3QgY2Z0eXBlICpjZnQpCit7CisJc3RydWN0IGRybV9j Z3JvdXBfc3RhdGUgKmRybWNzID0gY3NzX3RvX2RybWNzKGNzcyk7CisKKwlyZXR1cm4gZHJtY3Mt PndlaWdodDsKK30KKworc3RhdGljIGludAorZHJtY3Nfd3JpdGVfd2VpZ2h0KHN0cnVjdCBjZ3Jv dXBfc3Vic3lzX3N0YXRlICpjc3MsIHN0cnVjdCBjZnR5cGUgKmNmdHlwZSwKKwkJICAgdTY0IHdl aWdodCkKIHsKIAlzdHJ1Y3QgZHJtX2Nncm91cF9zdGF0ZSAqZHJtY3MgPSBjc3NfdG9fZHJtY3Mo Y3NzKTsKKwlpbnQgcmV0OworCisJaWYgKHdlaWdodCA8IENHUk9VUF9XRUlHSFRfTUlOIHx8IHdl aWdodCA+IENHUk9VUF9XRUlHSFRfTUFYKQorCQlyZXR1cm4gLUVSQU5HRTsKKworCXJldCA9IG11 dGV4X2xvY2tfaW50ZXJydXB0aWJsZSgmZHJtY2dfbXV0ZXgpOworCWlmIChyZXQpCisJCXJldHVy biByZXQ7CisJZHJtY3MtPndlaWdodCA9IHdlaWdodDsKKwltdXRleF91bmxvY2soJmRybWNnX211 dGV4KTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgYm9vbCBfX3N0YXJ0X3NjYW5uaW5nKHVu c2lnbmVkIGludCBwZXJpb2RfdXMpCit7CisJc3RydWN0IGRybV9jZ3JvdXBfc3RhdGUgKnJvb3Qg PSAmcm9vdF9kcm1jcy5kcm1jczsKKwlzdHJ1Y3QgY2dyb3VwX3N1YnN5c19zdGF0ZSAqbm9kZTsK KwlrdGltZV90IHN0YXJ0LCBub3c7CisJYm9vbCBvayA9IGZhbHNlOworCisJbG9ja2RlcF9hc3Nl cnRfaGVsZCgmZHJtY2dfbXV0ZXgpOworCisJc3RhcnQgPSBrdGltZV9nZXQoKTsKKwlpZiAocGVy aW9kX3VzID4gcm9vdF9kcm1jcy5sYXN0X3NjYW5fZHVyYXRpb25fdXMpCisJCXBlcmlvZF91cyAt PSByb290X2RybWNzLmxhc3Rfc2Nhbl9kdXJhdGlvbl91czsKKworCXJjdV9yZWFkX2xvY2soKTsK KworCWNzc19mb3JfZWFjaF9kZXNjZW5kYW50X3Bvc3Qobm9kZSwgJnJvb3QtPmNzcykgeworCQlz dHJ1Y3QgZHJtX2Nncm91cF9zdGF0ZSAqZHJtY3MgPSBjc3NfdG9fZHJtY3Mobm9kZSk7CisKKwkJ aWYgKCFjc3NfdHJ5Z2V0X29ubGluZShub2RlKSkKKwkJCWdvdG8gb3V0OwogCi0JaWYgKGRybWNz ICE9ICZyb290X2RybWNzLmRybWNzKQotCQlrZnJlZShkcm1jcyk7CisJCWRybWNzLT5hY3RpdmVf dXMgPSAwOworCQlkcm1jcy0+c3VtX2NoaWxkcmVuX3dlaWdodHMgPSAwOworCisJCWlmIChwZXJp b2RfdXMgJiYgbm9kZSA9PSAmcm9vdC0+Y3NzKQorCQkJZHJtY3MtPnBlcl9zX2J1ZGdldF91cyA9 CisJCQkJRElWX1JPVU5EX1VQX1VMTCgodTY0KXBlcmlvZF91cyAqIFVTRUNfUEVSX1NFQywKKwkJ CQkJCSBVU0VDX1BFUl9TRUMpOworCQllbHNlCisJCQlkcm1jcy0+cGVyX3NfYnVkZ2V0X3VzID0g MDsKKworCQljc3NfcHV0KG5vZGUpOworCX0KKworCWNzc19mb3JfZWFjaF9kZXNjZW5kYW50X3Bv c3Qobm9kZSwgJnJvb3QtPmNzcykgeworCQlzdHJ1Y3QgZHJtX2Nncm91cF9zdGF0ZSAqZHJtY3Mg PSBjc3NfdG9fZHJtY3Mobm9kZSk7CisJCXN0cnVjdCBkcm1fY2dyb3VwX3N0YXRlICpwYXJlbnQ7 CisJCXU2NCBhY3RpdmU7CisKKwkJaWYgKCFjc3NfdHJ5Z2V0X29ubGluZShub2RlKSkKKwkJCWdv dG8gb3V0OworCQlpZiAoIW5vZGUtPnBhcmVudCkgeworCQkJY3NzX3B1dChub2RlKTsKKwkJCWNv bnRpbnVlOworCQl9CisJCWlmICghY3NzX3RyeWdldF9vbmxpbmUobm9kZS0+cGFyZW50KSkgewor CQkJY3NzX3B1dChub2RlKTsKKwkJCWdvdG8gb3V0OworCQl9CisJCXBhcmVudCA9IGNzc190b19k cm1jcyhub2RlLT5wYXJlbnQpOworCisJCWFjdGl2ZSA9IGRybWNzX2dldF9hY3RpdmVfdGltZV91 cyhkcm1jcyk7CisJCWlmIChwZXJpb2RfdXMgJiYgYWN0aXZlID4gZHJtY3MtPnByZXZfYWN0aXZl X3VzKQorCQkJZHJtY3MtPmFjdGl2ZV91cyArPSBhY3RpdmUgLSBkcm1jcy0+cHJldl9hY3RpdmVf dXM7CisJCWRybWNzLT5wcmV2X2FjdGl2ZV91cyA9IGFjdGl2ZTsKKworCQlwYXJlbnQtPmFjdGl2 ZV91cyArPSBkcm1jcy0+YWN0aXZlX3VzOworCQlwYXJlbnQtPnN1bV9jaGlsZHJlbl93ZWlnaHRz ICs9IGRybWNzLT53ZWlnaHQ7CisKKwkJY3NzX3B1dChub2RlKTsKKwkJY3NzX3B1dCgmcGFyZW50 LT5jc3MpOworCX0KKworCW9rID0gdHJ1ZTsKKwlub3cgPSBrdGltZV9nZXQoKTsKKwlyb290X2Ry bWNzLmxhc3Rfc2Nhbl9kdXJhdGlvbl91cyA9IGt0aW1lX3RvX3VzKGt0aW1lX3N1Yihub3csIHN0 YXJ0KSk7CisJcm9vdF9kcm1jcy5wcmV2X3RpbWVzdGFtcCA9IG5vdzsKKworb3V0OgorCXJjdV9y ZWFkX3VubG9jaygpOworCisJcmV0dXJuIG9rOworfQorCitzdGF0aWMgdm9pZCBzY2FuX3dvcmtl cihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCit7CisJc3RydWN0IGRybV9jZ3JvdXBfc3RhdGUg KnJvb3QgPSAmcm9vdF9kcm1jcy5kcm1jczsKKwlzdHJ1Y3QgY2dyb3VwX3N1YnN5c19zdGF0ZSAq bm9kZTsKKwl1bnNpZ25lZCBpbnQgcGVyaW9kX3VzOworCisJbXV0ZXhfbG9jaygmZHJtY2dfbXV0 ZXgpOworCisJcmN1X3JlYWRfbG9jaygpOworCisJaWYgKFdBUk5fT05fT05DRSghY3NzX3RyeWdl dF9vbmxpbmUoJnJvb3QtPmNzcykpKSB7CisJCXJjdV9yZWFkX3VubG9jaygpOworCQltdXRleF91 bmxvY2soJmRybWNnX211dGV4KTsKKwkJcmV0dXJuOworCX0KKworCXBlcmlvZF91cyA9IGt0aW1l X3RvX3VzKGt0aW1lX3N1YihrdGltZV9nZXQoKSwKKwkJCQkJICByb290X2RybWNzLnByZXZfdGlt ZXN0YW1wKSk7CisKKwkvKgorCSAqIDFzdCBwYXNzIC0gcmVzZXQgd29ya2luZyB2YWx1ZXMgYW5k IHVwZGF0ZSBoaWVyYXJjaGljYWwgd2VpZ2h0cyBhbmQKKwkgKiBHUFUgdXRpbGlzYXRpb24uCisJ ICovCisJaWYgKCFfX3N0YXJ0X3NjYW5uaW5nKHBlcmlvZF91cykpCisJCWdvdG8gb3V0X3JldHJ5 OyAvKgorCQkJCSAqIEFsd2F5cyBjb21lIGJhY2sgbGF0ZXIgaWYgc2Nhbm5lciByYWNlcyB3aXRo CisJCQkJICogY29yZSBjZ3JvdXAgbWFuYWdlbWVudC4gKFJlcGVhdGVkIHBhdHRlcm4uKQorCQkJ CSAqLworCisJY3NzX2Zvcl9lYWNoX2Rlc2NlbmRhbnRfcHJlKG5vZGUsICZyb290LT5jc3MpIHsK KwkJc3RydWN0IGRybV9jZ3JvdXBfc3RhdGUgKmRybWNzID0gY3NzX3RvX2RybWNzKG5vZGUpOwor CQlzdHJ1Y3QgY2dyb3VwX3N1YnN5c19zdGF0ZSAqY3NzOworCQl1NjQgcmV1c2VkX3VzID0gMCwg dW51c2VkX3VzID0gMDsKKwkJdW5zaWduZWQgaW50IG92ZXJfd2VpZ2h0cyA9IDA7CisKKwkJaWYg KCFjc3NfdHJ5Z2V0X29ubGluZShub2RlKSkKKwkJCWdvdG8gb3V0X3JldHJ5OworCisJCS8qCisJ CSAqIDJuZCBwYXNzIC0gY2FsY3VsYXRlIGluaXRpYWwgYnVkZ2V0cywgbWFyayBvdmVyIGJ1ZGdl dAorCQkgKiBzaWJsaW5ncyBhbmQgYWRkIHVwIHVudXNlZCBidWRnZXQgZm9yIHRoZSBncm91cC4K KwkJICovCisJCWNzc19mb3JfZWFjaF9jaGlsZChjc3MsICZkcm1jcy0+Y3NzKSB7CisJCQlzdHJ1 Y3QgZHJtX2Nncm91cF9zdGF0ZSAqc2libGluZyA9IGNzc190b19kcm1jcyhjc3MpOworCisJCQlp ZiAoIWNzc190cnlnZXRfb25saW5lKGNzcykpIHsKKwkJCQljc3NfcHV0KG5vZGUpOworCQkJCWdv dG8gb3V0X3JldHJ5OworCQkJfQorCisJCQlzaWJsaW5nLT5wZXJfc19idWRnZXRfdXMgID0KKwkJ CQlESVZfUk9VTkRfVVBfVUxMKGRybWNzLT5wZXJfc19idWRnZXRfdXMgKgorCQkJCQkJIHNpYmxp bmctPndlaWdodCwKKwkJCQkJCSBkcm1jcy0+c3VtX2NoaWxkcmVuX3dlaWdodHMpOworCisJCQlz aWJsaW5nLT5vdmVyID0gc2libGluZy0+YWN0aXZlX3VzID4KKwkJCQkJc2libGluZy0+cGVyX3Nf YnVkZ2V0X3VzOworCQkJaWYgKHNpYmxpbmctPm92ZXIpCisJCQkJb3Zlcl93ZWlnaHRzICs9IHNp YmxpbmctPndlaWdodDsKKwkJCWVsc2UKKwkJCQl1bnVzZWRfdXMgKz0gc2libGluZy0+cGVyX3Nf YnVkZ2V0X3VzIC0KKwkJCQkJICAgICBzaWJsaW5nLT5hY3RpdmVfdXM7CisKKwkJCWNzc19wdXQo Y3NzKTsKKwkJfQorCisJCS8qCisJCSAqIDNyZCBwYXNzIC0gc3ByZWFkIHVudXNlZCBidWRnZXQg YWNjb3JkaW5nIHRvIHJlbGF0aXZlIHdlaWdodHMKKwkJICogb2Ygb3ZlciBidWRnZXQgc2libGlu Z3MuCisJCSAqLworCQl3aGlsZSAob3Zlcl93ZWlnaHRzICYmIHJldXNlZF91cyA8IHVudXNlZF91 cykgeworCQkJdW5zaWduZWQgaW50IHVuZGVyID0gMDsKKworCQkJdW51c2VkX3VzIC09IHJldXNl ZF91czsKKwkJCXJldXNlZF91cyA9IDA7CisKKwkJCWNzc19mb3JfZWFjaF9jaGlsZChjc3MsICZk cm1jcy0+Y3NzKSB7CisJCQkJc3RydWN0IGRybV9jZ3JvdXBfc3RhdGUgKnNpYmxpbmc7CisJCQkJ dTY0IGV4dHJhX3VzLCBtYXhfdXMsIG5lZWRfdXM7CisKKwkJCQlpZiAoIWNzc190cnlnZXRfb25s aW5lKGNzcykpIHsKKwkJCQkJY3NzX3B1dChub2RlKTsKKwkJCQkJZ290byBvdXRfcmV0cnk7CisJ CQkJfQorCisJCQkJc2libGluZyA9IGNzc190b19kcm1jcyhjc3MpOworCQkJCWlmICghc2libGlu Zy0+b3ZlcikgeworCQkJCQljc3NfcHV0KGNzcyk7CisJCQkJCWNvbnRpbnVlOworCQkJCX0KKwor CQkJCWV4dHJhX3VzID0gRElWX1JPVU5EX1VQX1VMTCh1bnVzZWRfdXMgKgorCQkJCQkJCSAgICBz aWJsaW5nLT53ZWlnaHQsCisJCQkJCQkJICAgIG92ZXJfd2VpZ2h0cyk7CisJCQkJbWF4X3VzID0g c2libGluZy0+cGVyX3NfYnVkZ2V0X3VzICsgZXh0cmFfdXM7CisJCQkJaWYgKG1heF91cyA+IHNp YmxpbmctPmFjdGl2ZV91cykKKwkJCQkJbmVlZF91cyA9IHNpYmxpbmctPmFjdGl2ZV91cyAtCisJ CQkJCQkgIHNpYmxpbmctPnBlcl9zX2J1ZGdldF91czsKKwkJCQllbHNlCisJCQkJCW5lZWRfdXMg PSBleHRyYV91czsKKwkJCQlyZXVzZWRfdXMgKz0gbmVlZF91czsKKwkJCQlzaWJsaW5nLT5wZXJf c19idWRnZXRfdXMgKz0gbmVlZF91czsKKwkJCQlzaWJsaW5nLT5vdmVyID0gc2libGluZy0+YWN0 aXZlX3VzICA+CisJCQkJCQlzaWJsaW5nLT5wZXJfc19idWRnZXRfdXM7CisJCQkJaWYgKCFzaWJs aW5nLT5vdmVyKQorCQkJCQl1bmRlciArPSBzaWJsaW5nLT53ZWlnaHQ7CisKKwkJCQljc3NfcHV0 KGNzcyk7CisJCQl9CisKKwkJCW92ZXJfd2VpZ2h0cyAtPSB1bmRlcjsKKwkJfQorCisJCWNzc19w dXQobm9kZSk7CisJfQorCisJLyoKKwkgKiA0dGggcGFzcyAtIHNlbmQgb3V0IG92ZXIvdW5kZXIg YnVkZ2V0IG5vdGlmaWNhdGlvbnMuCisJICovCisJY3NzX2Zvcl9lYWNoX2Rlc2NlbmRhbnRfcG9z dChub2RlLCAmcm9vdC0+Y3NzKSB7CisJCXN0cnVjdCBkcm1fY2dyb3VwX3N0YXRlICpkcm1jcyA9 IGNzc190b19kcm1jcyhub2RlKTsKKworCQlpZiAoIWNzc190cnlnZXRfb25saW5lKG5vZGUpKQor CQkJZ290byBvdXRfcmV0cnk7CisKKwkJaWYgKGRybWNzLT5vdmVyIHx8IGRybWNzLT5vdmVyX2J1 ZGdldCkKKwkJCWRybWNzX3NpZ25hbF9idWRnZXQoZHJtY3MsCisJCQkJCSAgICBkcm1jcy0+YWN0 aXZlX3VzLAorCQkJCQkgICAgZHJtY3MtPnBlcl9zX2J1ZGdldF91cyk7CisJCWRybWNzLT5vdmVy X2J1ZGdldCA9IGRybWNzLT5vdmVyOworCisJCWNzc19wdXQobm9kZSk7CisJfQorCitvdXRfcmV0 cnk6CisJcmN1X3JlYWRfdW5sb2NrKCk7CisJbXV0ZXhfdW5sb2NrKCZkcm1jZ19tdXRleCk7CisK KwlwZXJpb2RfdXMgPSBSRUFEX09OQ0Uocm9vdF9kcm1jcy5wZXJpb2RfdXMpOworCWlmIChwZXJp b2RfdXMpCisJCXNjaGVkdWxlX2RlbGF5ZWRfd29yaygmcm9vdF9kcm1jcy5zY2FuX3dvcmssCisJ CQkJICAgICAgdXNlY3NfdG9famlmZmllcyhwZXJpb2RfdXMpKTsKKworCWNzc19wdXQoJnJvb3Qt PmNzcyk7Cit9CisKK3N0YXRpYyB2b2lkIGRybWNzX2ZyZWUoc3RydWN0IGNncm91cF9zdWJzeXNf c3RhdGUgKmNzcykKK3sKKwlpZiAoY3NzICE9ICZyb290X2RybWNzLmRybWNzLmNzcykKKwkJa2Zy ZWUoY3NzX3RvX2RybWNzKGNzcykpOworfQorCitzdGF0aWMgdm9pZCByZWNvcmRfYmFzZWxpbmVf dXRpbGlzYXRpb24odm9pZCkKK3sKKwkvKiBSZS1jYXB0dXJlIGJhc2VsaW5lIGdyb3VwIEdQVSB0 aW1lcyB0byBhdm9pZCBkb3dud2FyZCBqdW1wcy4gKi8KKwlXQVJOX09OX09OQ0UoIV9fc3RhcnRf c2Nhbm5pbmcoMCkpOyAvKiBRUVEgUmV0cnkgaWYgaXQgZmFpbHM/ICovCiB9CiAKIHN0YXRpYyBz dHJ1Y3QgY2dyb3VwX3N1YnN5c19zdGF0ZSAqCkBAIC04Miw2ICszNTYsNyBAQCBkcm1jc19hbGxv YyhzdHJ1Y3QgY2dyb3VwX3N1YnN5c19zdGF0ZSAqcGFyZW50X2NzcykKIAogCWlmICghcGFyZW50 X2NzcykgewogCQlkcm1jcyA9ICZyb290X2RybWNzLmRybWNzOworCQlJTklUX0RFTEFZRURfV09S Sygmcm9vdF9kcm1jcy5zY2FuX3dvcmssIHNjYW5fd29ya2VyKTsKIAl9IGVsc2UgewogCQlkcm1j cyA9IGt6YWxsb2Moc2l6ZW9mKCpkcm1jcyksIEdGUF9LRVJORUwpOwogCQlpZiAoIWRybWNzKQpA QCAtOTAsOSArMzY1LDEyNCBAQCBkcm1jc19hbGxvYyhzdHJ1Y3QgY2dyb3VwX3N1YnN5c19zdGF0 ZSAqcGFyZW50X2NzcykKIAkJSU5JVF9MSVNUX0hFQUQoJmRybWNzLT5jbGllbnRzKTsKIAl9CiAK Kwlkcm1jcy0+d2VpZ2h0ID0gQ0dST1VQX1dFSUdIVF9ERkw7CisKIAlyZXR1cm4gJmRybWNzLT5j c3M7CiB9CiAKK3N0YXRpYyBpbnQgZHJtY3Nfb25saW5lKHN0cnVjdCBjZ3JvdXBfc3Vic3lzX3N0 YXRlICpjc3MpCit7CisJaWYgKGNzcyA9PSAmcm9vdF9kcm1jcy5kcm1jcy5jc3MgJiYgZHJtY2df cGVyaW9kX21zKSB7CisJCW11dGV4X2xvY2soJmRybWNnX211dGV4KTsKKwkJcmVjb3JkX2Jhc2Vs aW5lX3V0aWxpc2F0aW9uKCk7CisJCXJvb3RfZHJtY3MucGVyaW9kX3VzID0gbWF4KDUwMCwgZHJt Y2dfcGVyaW9kX21zKSAqIDEwMDA7CisJCW1vZF9kZWxheWVkX3dvcmsoc3lzdGVtX3dxLAorCQkJ CSAmcm9vdF9kcm1jcy5zY2FuX3dvcmssCisJCQkJIHVzZWNzX3RvX2ppZmZpZXMocm9vdF9kcm1j cy5wZXJpb2RfdXMpKTsKKwkJbXV0ZXhfdW5sb2NrKCZkcm1jZ19tdXRleCk7CisJfQorCisJcmV0 dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIGRybWNzX29mZmxpbmUoc3RydWN0IGNncm91cF9zdWJz eXNfc3RhdGUgKmNzcykKK3sKKwlib29sIGZsdXNoID0gZmFsc2U7CisKKwlpZiAoY3NzICE9ICZy b290X2RybWNzLmRybWNzLmNzcykKKwkJcmV0dXJuOworCisJbXV0ZXhfbG9jaygmZHJtY2dfbXV0 ZXgpOworCWlmIChyb290X2RybWNzLnBlcmlvZF91cykgeworCQlyb290X2RybWNzLnBlcmlvZF91 cyA9IDA7CisJCWNhbmNlbF9kZWxheWVkX3dvcmsoJnJvb3RfZHJtY3Muc2Nhbl93b3JrKTsKKwkJ Zmx1c2ggPSB0cnVlOworCX0KKwltdXRleF91bmxvY2soJmRybWNnX211dGV4KTsKKworCWlmIChm bHVzaCkKKwkJZmx1c2hfZGVsYXllZF93b3JrKCZyb290X2RybWNzLnNjYW5fd29yayk7Cit9CisK K3N0YXRpYyBzdHJ1Y3QgZHJtX2Nncm91cF9zdGF0ZSAqb2xkX2RybWNzOworCitzdGF0aWMgaW50 IGRybWNzX2Nhbl9hdHRhY2goc3RydWN0IGNncm91cF90YXNrc2V0ICp0c2V0KQoreworCXN0cnVj dCBjZ3JvdXBfc3Vic3lzX3N0YXRlICpjc3M7CisJc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrOwor CisJLyoKKwkgKiBRUVEKKwkgKiBTYW1lIHBhc3Npbmcgb2Ygc3RhdGUgdmlhIGdsb2JhbCBhcyBj cHVzZXRfY2FuX2F0dGFjaCB0bworCSAqIGNwdXNldF9hdHRhY2guIEFsd2F5cyBzZXJpYWxpemVk PworCSAqLworCisJdGFzayA9IGNncm91cF90YXNrc2V0X2ZpcnN0KHRzZXQsICZjc3MpOworCW9s ZF9kcm1jcyA9IGNzc190b19kcm1jcyh0YXNrX2Nzcyh0YXNrLCBkcm1fY2dycF9pZCkpOworCisJ cmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIGRybWNzX2F0dGFjaChzdHJ1Y3QgY2dyb3VwX3Rh c2tzZXQgKnRzZXQpCit7CisJc3RydWN0IGRybV9jZ3JvdXBfc3RhdGUgKm9sZCA9IG9sZF9kcm1j czsKKwlzdHJ1Y3QgY2dyb3VwX3N1YnN5c19zdGF0ZSAqY3NzOworCXN0cnVjdCBkcm1fZmlsZSAq ZnByaXYsICpuZXh0OworCXN0cnVjdCBkcm1fY2dyb3VwX3N0YXRlICpuZXc7CisJc3RydWN0IHRh c2tfc3RydWN0ICp0YXNrOworCWJvb2wgbWlncmF0ZWQgPSBmYWxzZTsKKworCWlmICghb2xkKQor CQlyZXR1cm47CisKKwl0YXNrID0gY2dyb3VwX3Rhc2tzZXRfZmlyc3QodHNldCwgJmNzcyk7CisJ bmV3ID0gY3NzX3RvX2RybWNzKHRhc2tfY3NzKHRhc2ssIGRybV9jZ3JwX2lkKSk7CisJaWYgKG5l dyA9PSBvbGQpCisJCXJldHVybjsKKworCW11dGV4X2xvY2soJmRybWNnX211dGV4KTsKKworCWxp c3RfZm9yX2VhY2hfZW50cnlfc2FmZShmcHJpdiwgbmV4dCwgJm9sZC0+Y2xpZW50cywgY2xpbmsp IHsKKwkJY2dyb3VwX3Rhc2tzZXRfZm9yX2VhY2godGFzaywgY3NzLCB0c2V0KSB7CisJCQlzdHJ1 Y3QgY2dyb3VwX3N1YnN5c19zdGF0ZSAqb2xkX2NzczsKKworCQkJaWYgKHRhc2stPmZsYWdzICYg UEZfS1RIUkVBRCkKKwkJCQljb250aW51ZTsKKwkJCWlmICghdGhyZWFkX2dyb3VwX2xlYWRlcih0 YXNrKSkKKwkJCQljb250aW51ZTsKKworCQkJbmV3ID0gY3NzX3RvX2RybWNzKHRhc2tfY3NzKHRh c2ssIGRybV9jZ3JwX2lkKSk7CisJCQlpZiAoV0FSTl9PTl9PTkNFKG5ldyA9PSBvbGQpKQorCQkJ CWNvbnRpbnVlOworCisJCQlpZiAocmN1X2FjY2Vzc19wb2ludGVyKGZwcml2LT5waWQpICE9IHRh c2tfdGdpZCh0YXNrKSkKKwkJCQljb250aW51ZTsKKworCQkJaWYgKFdBUk5fT05fT05DRShmcHJp di0+X19jc3MgIT0gJm9sZC0+Y3NzKSkKKwkJCQljb250aW51ZTsKKworCQkJb2xkX2NzcyA9IGZw cml2LT5fX2NzczsKKwkJCWZwcml2LT5fX2NzcyA9ICZuZXctPmNzczsKKwkJCWNzc19nZXQoZnBy aXYtPl9fY3NzKTsKKwkJCWxpc3RfbW92ZV90YWlsKCZmcHJpdi0+Y2xpbmssICZuZXctPmNsaWVu dHMpOworCQkJY3NzX3B1dChvbGRfY3NzKTsKKwkJCW1pZ3JhdGVkID0gdHJ1ZTsKKwkJfQorCX0K KworCWlmIChtaWdyYXRlZCkKKwkJcmVjb3JkX2Jhc2VsaW5lX3V0aWxpc2F0aW9uKCk7CisKKwlt dXRleF91bmxvY2soJmRybWNnX211dGV4KTsKKworCW9sZF9kcm1jcyA9IE5VTEw7Cit9CisKK3N0 YXRpYyB2b2lkIGRybWNzX2NhbmNlbF9hdHRhY2goc3RydWN0IGNncm91cF90YXNrc2V0ICp0c2V0 KQoreworCW9sZF9kcm1jcyA9IE5VTEw7Cit9CisKIHZvaWQgZHJtY2dyb3VwX2NsaWVudF9vcGVu KHN0cnVjdCBkcm1fZmlsZSAqZmlsZV9wcml2KQogewogCXN0cnVjdCBkcm1fY2dyb3VwX3N0YXRl ICpkcm1jczsKQEAgLTEyMSw2ICs1MTEsNyBAQCB2b2lkIGRybWNncm91cF9jbGllbnRfY2xvc2Uo c3RydWN0IGRybV9maWxlICpmaWxlX3ByaXYpCiAJbXV0ZXhfbG9jaygmZHJtY2dfbXV0ZXgpOwog CWxpc3RfZGVsKCZmaWxlX3ByaXYtPmNsaW5rKTsKIAlmaWxlX3ByaXYtPl9fY3NzID0gTlVMTDsK KwlyZWNvcmRfYmFzZWxpbmVfdXRpbGlzYXRpb24oKTsKIAltdXRleF91bmxvY2soJmRybWNnX211 dGV4KTsKIAogCWNzc19wdXQoJmRybWNzLT5jc3MpOwpAQCAtMTQ0LDYgKzUzNSw3IEBAIHZvaWQg ZHJtY2dyb3VwX2NsaWVudF9taWdyYXRlKHN0cnVjdCBkcm1fZmlsZSAqZmlsZV9wcml2KQogCWlm IChzcmMgIT0gZHN0KSB7CiAJCWZpbGVfcHJpdi0+X19jc3MgPSAmZHN0LT5jc3M7IC8qIEtlZXBz IHRoZSByZWZlcmVuY2UuICovCiAJCWxpc3RfbW92ZV90YWlsKCZmaWxlX3ByaXYtPmNsaW5rLCAm ZHN0LT5jbGllbnRzKTsKKwkJcmVjb3JkX2Jhc2VsaW5lX3V0aWxpc2F0aW9uKCk7CiAJfQogCiAJ bXV0ZXhfdW5sb2NrKCZkcm1jZ19tdXRleCk7CkBAIC0xNTMsMTIgKzU0NSwyMyBAQCB2b2lkIGRy bWNncm91cF9jbGllbnRfbWlncmF0ZShzdHJ1Y3QgZHJtX2ZpbGUgKmZpbGVfcHJpdikKIEVYUE9S VF9TWU1CT0xfR1BMKGRybWNncm91cF9jbGllbnRfbWlncmF0ZSk7CiAKIHN0cnVjdCBjZnR5cGUg ZmlsZXNbXSA9IHsKKwl7CisJCS5uYW1lID0gIndlaWdodCIsCisJCS5mbGFncyA9IENGVFlQRV9O T1RfT05fUk9PVCwKKwkJLnJlYWRfdTY0ID0gZHJtY3NfcmVhZF93ZWlnaHQsCisJCS53cml0ZV91 NjQgPSBkcm1jc193cml0ZV93ZWlnaHQsCisJfSwKIAl7IH0gLyogWmVybyBlbnRyeSB0ZXJtaW5h dGVzLiAqLwogfTsKIAogc3RydWN0IGNncm91cF9zdWJzeXMgZHJtX2NncnBfc3Vic3lzID0gewog CS5jc3NfYWxsb2MJPSBkcm1jc19hbGxvYywKIAkuY3NzX2ZyZWUJPSBkcm1jc19mcmVlLAorCS5j c3Nfb25saW5lCT0gZHJtY3Nfb25saW5lLAorCS5jc3Nfb2ZmbGluZQk9IGRybWNzX29mZmxpbmUs CisJLmNhbl9hdHRhY2ggICAgID0gZHJtY3NfY2FuX2F0dGFjaCwKKwkuYXR0YWNoCQk9IGRybWNz X2F0dGFjaCwKKwkuY2FuY2VsX2F0dGFjaCAgPSBkcm1jc19jYW5jZWxfYXR0YWNoLAogCS5lYXJs eV9pbml0CT0gZmFsc2UsCiAJLmxlZ2FjeV9jZnR5cGVzCT0gZmlsZXMsCiAJLmRmbF9jZnR5cGVz CT0gZmlsZXMsCi0tIAoyLjM3LjIKCg==