From mboxrd@z Thu Jan 1 00:00:00 1970 From: "Zeng, Oak" Subject: [PATCH 4/6] drm/amdkfd: Separate mqd allocation and initialization Date: Thu, 6 Jun 2019 18:25:14 +0000 Message-ID: <1559845507-3052-1-git-send-email-Oak.Zeng@amd.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Content-Language: en-US List-Id: Discussion list for AMD gfx List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: amd-gfx-bounces-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org Sender: "amd-gfx" To: "amd-gfx-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org" Cc: "Zhao, Yong" , "Kuehling, Felix" , "Freehill, Chris" , "Zeng, Oak" , "Liu, Alex" SW50cm9kdWNlIGEgbmV3IG1xZCBhbGxvY2F0aW9uIGludGVyZmFjZSBhbmQgc3BsaXQgdGhlIG9y aWdpbmFsDQppbml0X21xZCBmdW5jdGlvbiBpbnRvIHR3byBmdW5jdGlvbnM6IGFsbG9jYXRlX21x ZCBhbmQgaW5pdF9tcWQuDQpBbHNvIHJlbmFtZWQgdW5pbml0X21xZCB0byBmcmVlX21xZC4gVGhp cyBpcyBwcmVwYXJhdGlvbiB3b3JrIHRvDQpmaXggYSBjaXJjdWxhciBsb2NrIGRlcGVuZGVuY3ku DQoNCkNoYW5nZS1JZDogSTI2ZTUzZWUxYWJjZGQ2ODhhZDExZDM1YjQzM2RhNzdlM2ZhMWJlZTcN ClNpZ25lZC1vZmYtYnk6IE9hayBaZW5nIDxPYWsuWmVuZ0BhbWQuY29tPg0KLS0tDQogLi4uL2dw dS9kcm0vYW1kL2FtZGtmZC9rZmRfZGV2aWNlX3F1ZXVlX21hbmFnZXIuYyAgfCAzNCArKysrLS0t LS0NCiBkcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGtmZC9rZmRfa2VybmVsX3F1ZXVlLmMgICAgICB8 IDE2ICsrLS0NCiBkcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGtmZC9rZmRfbXFkX21hbmFnZXIuYyAg ICAgICB8ICA0ICstDQogZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRrZmQva2ZkX21xZF9tYW5hZ2Vy LmggICAgICAgfCAxOCArKystLQ0KIGRyaXZlcnMvZ3B1L2RybS9hbWQvYW1ka2ZkL2tmZF9tcWRf bWFuYWdlcl9jaWsuYyAgIHwgNzggKysrKysrKy0tLS0tLS0tLS0tLQ0KIGRyaXZlcnMvZ3B1L2Ry bS9hbWQvYW1ka2ZkL2tmZF9tcWRfbWFuYWdlcl92OS5jICAgIHwgNzggKysrKysrKy0tLS0tLS0t LS0tLQ0KIGRyaXZlcnMvZ3B1L2RybS9hbWQvYW1ka2ZkL2tmZF9tcWRfbWFuYWdlcl92aS5jICAg IHwgODggKysrKysrKystLS0tLS0tLS0tLS0tLQ0KIDcgZmlsZXMgY2hhbmdlZCwgMTI0IGluc2Vy dGlvbnMoKyksIDE5MiBkZWxldGlvbnMoLSkNCg0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2Ry bS9hbWQvYW1ka2ZkL2tmZF9kZXZpY2VfcXVldWVfbWFuYWdlci5jIGIvZHJpdmVycy9ncHUvZHJt L2FtZC9hbWRrZmQva2ZkX2RldmljZV9xdWV1ZV9tYW5hZ2VyLmMNCmluZGV4IDNjMDQyZWIuLjEw ZDRmNGYgMTAwNjQ0DQotLS0gYS9kcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGtmZC9rZmRfZGV2aWNl X3F1ZXVlX21hbmFnZXIuYw0KKysrIGIvZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRrZmQva2ZkX2Rl dmljZV9xdWV1ZV9tYW5hZ2VyLmMNCkBAIC0zMTksMTEgKzMxOSwxMSBAQCBzdGF0aWMgaW50IGNy ZWF0ZV9xdWV1ZV9ub2Nwc2NoKHN0cnVjdCBkZXZpY2VfcXVldWVfbWFuYWdlciAqZHFtLA0KIAlp ZiAocmV0dmFsKQ0KIAkJZ290byBvdXRfZGVhbGxvY2F0ZV9ocWQ7DQogDQotCXJldHZhbCA9IG1x ZF9tZ3ItPmluaXRfbXFkKG1xZF9tZ3IsICZxLT5tcWQsICZxLT5tcWRfbWVtX29iaiwNCi0JCQkJ JnEtPmdhcnRfbXFkX2FkZHIsICZxLT5wcm9wZXJ0aWVzKTsNCi0JaWYgKHJldHZhbCkNCisJcS0+ bXFkX21lbV9vYmogPSBtcWRfbWdyLT5hbGxvY2F0ZV9tcWQobXFkX21nci0+ZGV2LCAmcS0+cHJv cGVydGllcyk7DQorCWlmICghcS0+bXFkX21lbV9vYmopDQogCQlnb3RvIG91dF9kZWFsbG9jYXRl X2Rvb3JiZWxsOw0KLQ0KKwltcWRfbWdyLT5pbml0X21xZChtcWRfbWdyLCAmcS0+bXFkLCBxLT5t cWRfbWVtX29iaiwNCisJCQkJJnEtPmdhcnRfbXFkX2FkZHIsICZxLT5wcm9wZXJ0aWVzKTsNCiAJ aWYgKHEtPnByb3BlcnRpZXMuaXNfYWN0aXZlKSB7DQogDQogCQlpZiAoV0FSTihxLT5wcm9jZXNz LT5tbSAhPSBjdXJyZW50LT5tbSwNCkBAIC0zMzMsNyArMzMzLDcgQEAgc3RhdGljIGludCBjcmVh dGVfcXVldWVfbm9jcHNjaChzdHJ1Y3QgZGV2aWNlX3F1ZXVlX21hbmFnZXIgKmRxbSwNCiAJCQly ZXR2YWwgPSBtcWRfbWdyLT5sb2FkX21xZChtcWRfbWdyLCBxLT5tcWQsIHEtPnBpcGUsDQogCQkJ CQlxLT5xdWV1ZSwgJnEtPnByb3BlcnRpZXMsIGN1cnJlbnQtPm1tKTsNCiAJCWlmIChyZXR2YWwp DQotCQkJZ290byBvdXRfdW5pbml0X21xZDsNCisJCQlnb3RvIG91dF9mcmVlX21xZDsNCiAJfQ0K IA0KIAlsaXN0X2FkZCgmcS0+bGlzdCwgJnFwZC0+cXVldWVzX2xpc3QpOw0KQEAgLTM1NSw4ICsz NTUsOCBAQCBzdGF0aWMgaW50IGNyZWF0ZV9xdWV1ZV9ub2Nwc2NoKHN0cnVjdCBkZXZpY2VfcXVl dWVfbWFuYWdlciAqZHFtLA0KIAkJCWRxbS0+dG90YWxfcXVldWVfY291bnQpOw0KIAlnb3RvIG91 dF91bmxvY2s7DQogDQotb3V0X3VuaW5pdF9tcWQ6DQotCW1xZF9tZ3ItPnVuaW5pdF9tcWQobXFk X21nciwgcS0+bXFkLCBxLT5tcWRfbWVtX29iaik7DQorb3V0X2ZyZWVfbXFkOg0KKwltcWRfbWdy LT5mcmVlX21xZChtcWRfbWdyLCBxLT5tcWQsIHEtPm1xZF9tZW1fb2JqKTsNCiBvdXRfZGVhbGxv Y2F0ZV9kb29yYmVsbDoNCiAJZGVhbGxvY2F0ZV9kb29yYmVsbChxcGQsIHEpOw0KIG91dF9kZWFs bG9jYXRlX2hxZDoNCkBAIC00NTAsNyArNDUwLDcgQEAgc3RhdGljIGludCBkZXN0cm95X3F1ZXVl X25vY3BzY2hfbG9ja2VkKHN0cnVjdCBkZXZpY2VfcXVldWVfbWFuYWdlciAqZHFtLA0KIAlpZiAo cmV0dmFsID09IC1FVElNRSkNCiAJCXFwZC0+cmVzZXRfd2F2ZWZyb250cyA9IHRydWU7DQogDQot CW1xZF9tZ3ItPnVuaW5pdF9tcWQobXFkX21nciwgcS0+bXFkLCBxLT5tcWRfbWVtX29iaik7DQor CW1xZF9tZ3ItPmZyZWVfbXFkKG1xZF9tZ3IsIHEtPm1xZCwgcS0+bXFkX21lbV9vYmopOw0KIA0K IAlsaXN0X2RlbCgmcS0+bGlzdCk7DQogCWlmIChsaXN0X2VtcHR5KCZxcGQtPnF1ZXVlc19saXN0 KSkgew0KQEAgLTUyNyw3ICs1MjcsNyBAQCBzdGF0aWMgaW50IHVwZGF0ZV9xdWV1ZShzdHJ1Y3Qg ZGV2aWNlX3F1ZXVlX21hbmFnZXIgKmRxbSwgc3RydWN0IHF1ZXVlICpxKQ0KIAkJfQ0KIAl9DQog DQotCXJldHZhbCA9IG1xZF9tZ3ItPnVwZGF0ZV9tcWQobXFkX21nciwgcS0+bXFkLCAmcS0+cHJv cGVydGllcyk7DQorCW1xZF9tZ3ItPnVwZGF0ZV9tcWQobXFkX21nciwgcS0+bXFkLCAmcS0+cHJv cGVydGllcyk7DQogDQogCS8qDQogCSAqIGNoZWNrIGFjdGl2ZSBzdGF0ZSB2cy4gdGhlIHByZXZp b3VzIHN0YXRlIGFuZCBtb2RpZnkNCkBAIC0xMTYwLDExICsxMTYwLDExIEBAIHN0YXRpYyBpbnQg Y3JlYXRlX3F1ZXVlX2Nwc2NoKHN0cnVjdCBkZXZpY2VfcXVldWVfbWFuYWdlciAqZHFtLCBzdHJ1 Y3QgcXVldWUgKnEsDQogCQlkcW0tPmFzaWNfb3BzLmluaXRfc2RtYV92bShkcW0sIHEsIHFwZCk7 DQogCXEtPnByb3BlcnRpZXMudGJhX2FkZHIgPSBxcGQtPnRiYV9hZGRyOw0KIAlxLT5wcm9wZXJ0 aWVzLnRtYV9hZGRyID0gcXBkLT50bWFfYWRkcjsNCi0JcmV0dmFsID0gbXFkX21nci0+aW5pdF9t cWQobXFkX21nciwgJnEtPm1xZCwgJnEtPm1xZF9tZW1fb2JqLA0KLQkJCQkmcS0+Z2FydF9tcWRf YWRkciwgJnEtPnByb3BlcnRpZXMpOw0KLQlpZiAocmV0dmFsKQ0KKwlxLT5tcWRfbWVtX29iaiA9 IG1xZF9tZ3ItPmFsbG9jYXRlX21xZChtcWRfbWdyLT5kZXYsICZxLT5wcm9wZXJ0aWVzKTsNCisJ aWYgKCFxLT5tcWRfbWVtX29iaikNCiAJCWdvdG8gb3V0X2RlYWxsb2NhdGVfZG9vcmJlbGw7DQot DQorCW1xZF9tZ3ItPmluaXRfbXFkKG1xZF9tZ3IsICZxLT5tcWQsIHEtPm1xZF9tZW1fb2JqLA0K KwkJCQkmcS0+Z2FydF9tcWRfYWRkciwgJnEtPnByb3BlcnRpZXMpOw0KIAlkcW1fbG9jayhkcW0p Ow0KIA0KIAlsaXN0X2FkZCgmcS0+bGlzdCwgJnFwZC0+cXVldWVzX2xpc3QpOw0KQEAgLTEzNzMs OCArMTM3Myw4IEBAIHN0YXRpYyBpbnQgZGVzdHJveV9xdWV1ZV9jcHNjaChzdHJ1Y3QgZGV2aWNl X3F1ZXVlX21hbmFnZXIgKmRxbSwNCiANCiAJZHFtX3VubG9jayhkcW0pOw0KIA0KLQkvKiBEbyB1 bmluaXRfbXFkIGFmdGVyIGRxbV91bmxvY2soZHFtKSB0byBhdm9pZCBjaXJjdWxhciBsb2NraW5n ICovDQotCW1xZF9tZ3ItPnVuaW5pdF9tcWQobXFkX21nciwgcS0+bXFkLCBxLT5tcWRfbWVtX29i aik7DQorCS8qIERvIGZyZWVfbXFkIGFmdGVyIGRxbV91bmxvY2soZHFtKSB0byBhdm9pZCBjaXJj dWxhciBsb2NraW5nICovDQorCW1xZF9tZ3ItPmZyZWVfbXFkKG1xZF9tZ3IsIHEtPm1xZCwgcS0+ bXFkX21lbV9vYmopOw0KIA0KIAlyZXR1cm4gcmV0dmFsOw0KIA0KQEAgLTE2MTUsMTQgKzE2MTUs MTQgQEAgc3RhdGljIGludCBwcm9jZXNzX3Rlcm1pbmF0aW9uX2Nwc2NoKHN0cnVjdCBkZXZpY2Vf cXVldWVfbWFuYWdlciAqZHFtLA0KIAkJa2ZkX2RlY19jb21wdXRlX2FjdGl2ZShkcW0tPmRldik7 DQogDQogCS8qIExhc3RseSwgZnJlZSBtcWQgcmVzb3VyY2VzLg0KLQkgKiBEbyB1bmluaXRfbXFk KCkgYWZ0ZXIgZHFtX3VubG9jayB0byBhdm9pZCBjaXJjdWxhciBsb2NraW5nLg0KKwkgKiBEbyBm cmVlX21xZCgpIGFmdGVyIGRxbV91bmxvY2sgdG8gYXZvaWQgY2lyY3VsYXIgbG9ja2luZy4NCiAJ ICovDQogCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShxLCBuZXh0LCAmcXBkLT5xdWV1ZXNfbGlz dCwgbGlzdCkgew0KIAkJbXFkX21nciA9IGRxbS0+bXFkX21ncnNbZ2V0X21xZF90eXBlX2Zyb21f cXVldWVfdHlwZSgNCiAJCQkJcS0+cHJvcGVydGllcy50eXBlKV07DQogCQlsaXN0X2RlbCgmcS0+ bGlzdCk7DQogCQlxcGQtPnF1ZXVlX2NvdW50LS07DQotCQltcWRfbWdyLT51bmluaXRfbXFkKG1x ZF9tZ3IsIHEtPm1xZCwgcS0+bXFkX21lbV9vYmopOw0KKwkJbXFkX21nci0+ZnJlZV9tcWQobXFk X21nciwgcS0+bXFkLCBxLT5tcWRfbWVtX29iaik7DQogCX0NCiANCiAJcmV0dXJuIHJldHZhbDsN CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGtmZC9rZmRfa2VybmVsX3F1ZXVl LmMgYi9kcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGtmZC9rZmRfa2VybmVsX3F1ZXVlLmMNCmluZGV4 IDFjYzAzYjMuLjIyOTUwMGMgMTAwNjQ0DQotLS0gYS9kcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGtm ZC9rZmRfa2VybmVsX3F1ZXVlLmMNCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9hbWQvYW1ka2ZkL2tm ZF9rZXJuZWxfcXVldWUuYw0KQEAgLTEzMiwxMyArMTMyLDE0IEBAIHN0YXRpYyBib29sIGluaXRp YWxpemUoc3RydWN0IGtlcm5lbF9xdWV1ZSAqa3EsIHN0cnVjdCBrZmRfZGV2ICpkZXYsDQogCWtx LT5xdWV1ZS0+ZGV2aWNlID0gZGV2Ow0KIAlrcS0+cXVldWUtPnByb2Nlc3MgPSBrZmRfZ2V0X3By b2Nlc3MoY3VycmVudCk7DQogDQotCXJldHZhbCA9IGtxLT5tcWRfbWdyLT5pbml0X21xZChrcS0+ bXFkX21nciwgJmtxLT5xdWV1ZS0+bXFkLA0KLQkJCQkJJmtxLT5xdWV1ZS0+bXFkX21lbV9vYmos DQorCWtxLT5xdWV1ZS0+bXFkX21lbV9vYmogPSBrcS0+bXFkX21nci0+YWxsb2NhdGVfbXFkKGtx LT5tcWRfbWdyLT5kZXYsDQorCQkJCQkma3EtPnF1ZXVlLT5wcm9wZXJ0aWVzKTsNCisJaWYgKCFr cS0+cXVldWUtPm1xZF9tZW1fb2JqKQ0KKwkJZ290byBlcnJfYWxsb2NhdGVfbXFkOw0KKwlrcS0+ bXFkX21nci0+aW5pdF9tcWQoa3EtPm1xZF9tZ3IsICZrcS0+cXVldWUtPm1xZCwNCisJCQkJCWtx LT5xdWV1ZS0+bXFkX21lbV9vYmosDQogCQkJCQkma3EtPnF1ZXVlLT5nYXJ0X21xZF9hZGRyLA0K IAkJCQkJJmtxLT5xdWV1ZS0+cHJvcGVydGllcyk7DQotCWlmIChyZXR2YWwgIT0gMCkNCi0JCWdv dG8gZXJyX2luaXRfbXFkOw0KLQ0KIAkvKiBhc3NpZ24gSElRIHRvIEhRRCAqLw0KIAlpZiAodHlw ZSA9PSBLRkRfUVVFVUVfVFlQRV9ISVEpIHsNCiAJCXByX2RlYnVnKCJBc3NpZ25pbmcgaGlxIHRv IGhxZFxuIik7DQpAQCAtMTY0LDcgKzE2NSw4IEBAIHN0YXRpYyBib29sIGluaXRpYWxpemUoc3Ry dWN0IGtlcm5lbF9xdWV1ZSAqa3EsIHN0cnVjdCBrZmRfZGV2ICpkZXYsDQogDQogCXJldHVybiB0 cnVlOw0KIGVycl9hbGxvY19mZW5jZToNCi1lcnJfaW5pdF9tcWQ6DQorCWtxLT5tcWRfbWdyLT5m cmVlX21xZChrcS0+bXFkX21nciwga3EtPnF1ZXVlLT5tcWQsIGtxLT5xdWV1ZS0+bXFkX21lbV9v YmopOw0KK2Vycl9hbGxvY2F0ZV9tcWQ6DQogCXVuaW5pdF9xdWV1ZShrcS0+cXVldWUpOw0KIGVy cl9pbml0X3F1ZXVlOg0KIAlrZmRfZ3R0X3NhX2ZyZWUoZGV2LCBrcS0+d3B0cl9tZW0pOw0KQEAg LTE5Myw3ICsxOTUsNyBAQCBzdGF0aWMgdm9pZCB1bmluaXRpYWxpemUoc3RydWN0IGtlcm5lbF9x dWV1ZSAqa3EpDQogCWVsc2UgaWYgKGtxLT5xdWV1ZS0+cHJvcGVydGllcy50eXBlID09IEtGRF9R VUVVRV9UWVBFX0RJUSkNCiAJCWtmZF9ndHRfc2FfZnJlZShrcS0+ZGV2LCBrcS0+ZmVuY2VfbWVt X29iaik7DQogDQotCWtxLT5tcWRfbWdyLT51bmluaXRfbXFkKGtxLT5tcWRfbWdyLCBrcS0+cXVl dWUtPm1xZCwNCisJa3EtPm1xZF9tZ3ItPmZyZWVfbXFkKGtxLT5tcWRfbWdyLCBrcS0+cXVldWUt Pm1xZCwNCiAJCQkJa3EtPnF1ZXVlLT5tcWRfbWVtX29iaik7DQogDQogCWtmZF9ndHRfc2FfZnJl ZShrcS0+ZGV2LCBrcS0+cnB0cl9tZW0pOw0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9h bWQvYW1ka2ZkL2tmZF9tcWRfbWFuYWdlci5jIGIvZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRrZmQv a2ZkX21xZF9tYW5hZ2VyLmMNCmluZGV4IGNjMDRiMzYyLi5kNmNmMzkxIDEwMDY0NA0KLS0tIGEv ZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRrZmQva2ZkX21xZF9tYW5hZ2VyLmMNCisrKyBiL2RyaXZl cnMvZ3B1L2RybS9hbWQvYW1ka2ZkL2tmZF9tcWRfbWFuYWdlci5jDQpAQCAtNDUsNyArNDUsNyBA QCBpbnQgcGlwZV9wcmlvcml0eV9tYXBbXSA9IHsNCiAJS0ZEX1BJUEVfUFJJT1JJVFlfQ1NfSElH SA0KIH07DQogDQotc3RydWN0IGtmZF9tZW1fb2JqICphbGxvY2F0ZV9oaXFfbXFkKHN0cnVjdCBr ZmRfZGV2ICpkZXYpDQorc3RydWN0IGtmZF9tZW1fb2JqICphbGxvY2F0ZV9oaXFfbXFkKHN0cnVj dCBrZmRfZGV2ICpkZXYsIHN0cnVjdCBxdWV1ZV9wcm9wZXJ0aWVzICpxKQ0KIHsNCiAJc3RydWN0 IGtmZF9tZW1fb2JqICptcWRfbWVtX29iaiA9IE5VTEw7DQogDQpAQCAtODYsNyArODYsNyBAQCBz dHJ1Y3Qga2ZkX21lbV9vYmogKmFsbG9jYXRlX3NkbWFfbXFkKHN0cnVjdCBrZmRfZGV2ICpkZXYs DQogCXJldHVybiBtcWRfbWVtX29iajsNCiB9DQogDQotdm9pZCB1bmluaXRfbXFkX2hpcV9zZG1h KHN0cnVjdCBtcWRfbWFuYWdlciAqbW0sIHZvaWQgKm1xZCwNCit2b2lkIGZyZWVfbXFkX2hpcV9z ZG1hKHN0cnVjdCBtcWRfbWFuYWdlciAqbW0sIHZvaWQgKm1xZCwNCiAJCQlzdHJ1Y3Qga2ZkX21l bV9vYmogKm1xZF9tZW1fb2JqKQ0KIHsNCiAJV0FSTl9PTighbXFkX21lbV9vYmotPmd0dF9tZW0p Ow0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9hbWQvYW1ka2ZkL2tmZF9tcWRfbWFuYWdl ci5oIGIvZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRrZmQva2ZkX21xZF9tYW5hZ2VyLmgNCmluZGV4 IDY2YjhjNjcuLjU1MGI2MWUgMTAwNjQ0DQotLS0gYS9kcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGtm ZC9rZmRfbXFkX21hbmFnZXIuaA0KKysrIGIvZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRrZmQva2Zk X21xZF9tYW5hZ2VyLmgNCkBAIC0zOSw3ICszOSw3IEBADQogICogQGRlc3Ryb3lfbXFkOiBEZXN0 cm95cyB0aGUgSFFEIHNsb3QgYW5kIGJ5IHRoYXQgcHJlZW1wdCB0aGUgcmVsZXZhbnQgcXVldWUu DQogICogVXNlZCBvbmx5IGZvciBubyBjcCBzY2hlZHVsaW5nLg0KICAqDQotICogQHVuaW5pdF9t cWQ6IFJlbGVhc2VzIHRoZSBtcWQgYnVmZmVyIGZyb20gbG9jYWwgZ3B1IG1lbW9yeS4NCisgKiBA ZnJlZV9tcWQ6IFJlbGVhc2VzIHRoZSBtcWQgYnVmZmVyIGZyb20gbG9jYWwgZ3B1IG1lbW9yeS4N CiAgKg0KICAqIEBpc19vY2N1cGllZDogQ2hlY2tzIGlmIHRoZSByZWxldmFudCBIUUQgc2xvdCBp cyBvY2N1cGllZC4NCiAgKg0KQEAgLTY0LDggKzY0LDExIEBADQogICovDQogZXh0ZXJuIGludCBw aXBlX3ByaW9yaXR5X21hcFtdOw0KIHN0cnVjdCBtcWRfbWFuYWdlciB7DQotCWludAkoKmluaXRf bXFkKShzdHJ1Y3QgbXFkX21hbmFnZXIgKm1tLCB2b2lkICoqbXFkLA0KLQkJCXN0cnVjdCBrZmRf bWVtX29iaiAqKm1xZF9tZW1fb2JqLCB1aW50NjRfdCAqZ2FydF9hZGRyLA0KKwlzdHJ1Y3Qga2Zk X21lbV9vYmoqCSgqYWxsb2NhdGVfbXFkKShzdHJ1Y3Qga2ZkX2RldiAqa2ZkLA0KKwkJc3RydWN0 IHF1ZXVlX3Byb3BlcnRpZXMgKnEpOw0KKw0KKwl2b2lkCSgqaW5pdF9tcWQpKHN0cnVjdCBtcWRf bWFuYWdlciAqbW0sIHZvaWQgKiptcWQsDQorCQkJc3RydWN0IGtmZF9tZW1fb2JqICptcWRfbWVt X29iaiwgdWludDY0X3QgKmdhcnRfYWRkciwNCiAJCQlzdHJ1Y3QgcXVldWVfcHJvcGVydGllcyAq cSk7DQogDQogCWludAkoKmxvYWRfbXFkKShzdHJ1Y3QgbXFkX21hbmFnZXIgKm1tLCB2b2lkICpt cWQsDQpAQCAtNzMsNyArNzYsNyBAQCBzdHJ1Y3QgbXFkX21hbmFnZXIgew0KIAkJCQlzdHJ1Y3Qg cXVldWVfcHJvcGVydGllcyAqcCwNCiAJCQkJc3RydWN0IG1tX3N0cnVjdCAqbW1zKTsNCiANCi0J aW50CSgqdXBkYXRlX21xZCkoc3RydWN0IG1xZF9tYW5hZ2VyICptbSwgdm9pZCAqbXFkLA0KKwl2 b2lkCSgqdXBkYXRlX21xZCkoc3RydWN0IG1xZF9tYW5hZ2VyICptbSwgdm9pZCAqbXFkLA0KIAkJ CQlzdHJ1Y3QgcXVldWVfcHJvcGVydGllcyAqcSk7DQogDQogCWludAkoKmRlc3Ryb3lfbXFkKShz dHJ1Y3QgbXFkX21hbmFnZXIgKm1tLCB2b2lkICptcWQsDQpAQCAtODEsNyArODQsNyBAQCBzdHJ1 Y3QgbXFkX21hbmFnZXIgew0KIAkJCQl1bnNpZ25lZCBpbnQgdGltZW91dCwgdWludDMyX3QgcGlw ZV9pZCwNCiAJCQkJdWludDMyX3QgcXVldWVfaWQpOw0KIA0KLQl2b2lkCSgqdW5pbml0X21xZCko c3RydWN0IG1xZF9tYW5hZ2VyICptbSwgdm9pZCAqbXFkLA0KKwl2b2lkCSgqZnJlZV9tcWQpKHN0 cnVjdCBtcWRfbWFuYWdlciAqbW0sIHZvaWQgKm1xZCwNCiAJCQkJc3RydWN0IGtmZF9tZW1fb2Jq ICptcWRfbWVtX29iaik7DQogDQogCWJvb2wJKCppc19vY2N1cGllZCkoc3RydWN0IG1xZF9tYW5h Z2VyICptbSwgdm9pZCAqbXFkLA0KQEAgLTEwMiwxMSArMTA1LDEyIEBAIHN0cnVjdCBtcWRfbWFu YWdlciB7DQogCXVpbnQzMl90IG1xZF9zaXplOw0KIH07DQogDQotc3RydWN0IGtmZF9tZW1fb2Jq ICphbGxvY2F0ZV9oaXFfbXFkKHN0cnVjdCBrZmRfZGV2ICpkZXYpOw0KK3N0cnVjdCBrZmRfbWVt X29iaiAqYWxsb2NhdGVfaGlxX21xZChzdHJ1Y3Qga2ZkX2RldiAqZGV2LA0KKwkJCQlzdHJ1Y3Qg cXVldWVfcHJvcGVydGllcyAqcSk7DQogDQogc3RydWN0IGtmZF9tZW1fb2JqICphbGxvY2F0ZV9z ZG1hX21xZChzdHJ1Y3Qga2ZkX2RldiAqZGV2LA0KIAkJCQkJc3RydWN0IHF1ZXVlX3Byb3BlcnRp ZXMgKnEpOw0KLXZvaWQgdW5pbml0X21xZF9oaXFfc2RtYShzdHJ1Y3QgbXFkX21hbmFnZXIgKm1t LCB2b2lkICptcWQsDQordm9pZCBmcmVlX21xZF9oaXFfc2RtYShzdHJ1Y3QgbXFkX21hbmFnZXIg Km1tLCB2b2lkICptcWQsDQogCQkJCXN0cnVjdCBrZmRfbWVtX29iaiAqbXFkX21lbV9vYmopOw0K IA0KIHZvaWQgbXFkX3N5bW1ldHJpY2FsbHlfbWFwX2N1X21hc2soc3RydWN0IG1xZF9tYW5hZ2Vy ICptbSwNCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGtmZC9rZmRfbXFkX21h bmFnZXJfY2lrLmMgYi9kcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGtmZC9rZmRfbXFkX21hbmFnZXJf Y2lrLmMNCmluZGV4IGU5MTE0MzguLjI4ODc2YWMgMTAwNjQ0DQotLS0gYS9kcml2ZXJzL2dwdS9k cm0vYW1kL2FtZGtmZC9rZmRfbXFkX21hbmFnZXJfY2lrLmMNCisrKyBiL2RyaXZlcnMvZ3B1L2Ry bS9hbWQvYW1ka2ZkL2tmZF9tcWRfbWFuYWdlcl9jaWsuYw0KQEAgLTc3LDkgKzc3LDYgQEAgc3Rh dGljIHN0cnVjdCBrZmRfbWVtX29iaiAqYWxsb2NhdGVfbXFkKHN0cnVjdCBrZmRfZGV2ICprZmQs DQogew0KIAlzdHJ1Y3Qga2ZkX21lbV9vYmogKm1xZF9tZW1fb2JqOw0KIA0KLQlpZiAocS0+dHlw ZSA9PSBLRkRfUVVFVUVfVFlQRV9ISVEpDQotCQlyZXR1cm4gYWxsb2NhdGVfaGlxX21xZChrZmQp Ow0KLQ0KIAlpZiAoa2ZkX2d0dF9zYV9hbGxvY2F0ZShrZmQsIHNpemVvZihzdHJ1Y3QgY2lrX21x ZCksDQogCQkJJm1xZF9tZW1fb2JqKSkNCiAJCXJldHVybiBOVUxMOw0KQEAgLTg3LDIxICs4NCwx NSBAQCBzdGF0aWMgc3RydWN0IGtmZF9tZW1fb2JqICphbGxvY2F0ZV9tcWQoc3RydWN0IGtmZF9k ZXYgKmtmZCwNCiAJcmV0dXJuIG1xZF9tZW1fb2JqOw0KIH0NCiANCi1zdGF0aWMgaW50IGluaXRf bXFkKHN0cnVjdCBtcWRfbWFuYWdlciAqbW0sIHZvaWQgKiptcWQsDQotCQlzdHJ1Y3Qga2ZkX21l bV9vYmogKiptcWRfbWVtX29iaiwgdWludDY0X3QgKmdhcnRfYWRkciwNCitzdGF0aWMgdm9pZCBp bml0X21xZChzdHJ1Y3QgbXFkX21hbmFnZXIgKm1tLCB2b2lkICoqbXFkLA0KKwkJc3RydWN0IGtm ZF9tZW1fb2JqICptcWRfbWVtX29iaiwgdWludDY0X3QgKmdhcnRfYWRkciwNCiAJCXN0cnVjdCBx dWV1ZV9wcm9wZXJ0aWVzICpxKQ0KIHsNCiAJdWludDY0X3QgYWRkcjsNCiAJc3RydWN0IGNpa19t cWQgKm07DQotCWludCByZXR2YWw7DQotCXN0cnVjdCBrZmRfZGV2ICprZmQgPSBtbS0+ZGV2Ow0K LQ0KLQkqbXFkX21lbV9vYmogPSBhbGxvY2F0ZV9tcWQoa2ZkLCBxKTsNCi0JaWYgKCEqbXFkX21l bV9vYmopDQotCQlyZXR1cm4gLUVOT01FTTsNCiANCi0JbSA9IChzdHJ1Y3QgY2lrX21xZCAqKSAo Km1xZF9tZW1fb2JqKS0+Y3B1X3B0cjsNCi0JYWRkciA9ICgqbXFkX21lbV9vYmopLT5ncHVfYWRk cjsNCisJbSA9IChzdHJ1Y3QgY2lrX21xZCAqKSBtcWRfbWVtX29iai0+Y3B1X3B0cjsNCisJYWRk ciA9IG1xZF9tZW1fb2JqLT5ncHVfYWRkcjsNCiANCiAJbWVtc2V0KG0sIDAsIEFMSUdOKHNpemVv ZihzdHJ1Y3QgY2lrX21xZCksIDI1NikpOw0KIA0KQEAgLTE0NCwzNyArMTM1LDI3IEBAIHN0YXRp YyBpbnQgaW5pdF9tcWQoc3RydWN0IG1xZF9tYW5hZ2VyICptbSwgdm9pZCAqKm1xZCwNCiAJKm1x ZCA9IG07DQogCWlmIChnYXJ0X2FkZHIpDQogCQkqZ2FydF9hZGRyID0gYWRkcjsNCi0JcmV0dmFs ID0gbW0tPnVwZGF0ZV9tcWQobW0sIG0sIHEpOw0KLQ0KLQlyZXR1cm4gcmV0dmFsOw0KKwltbS0+ dXBkYXRlX21xZChtbSwgbSwgcSk7DQogfQ0KIA0KLXN0YXRpYyBpbnQgaW5pdF9tcWRfc2RtYShz dHJ1Y3QgbXFkX21hbmFnZXIgKm1tLCB2b2lkICoqbXFkLA0KLQkJCXN0cnVjdCBrZmRfbWVtX29i aiAqKm1xZF9tZW1fb2JqLCB1aW50NjRfdCAqZ2FydF9hZGRyLA0KK3N0YXRpYyB2b2lkIGluaXRf bXFkX3NkbWEoc3RydWN0IG1xZF9tYW5hZ2VyICptbSwgdm9pZCAqKm1xZCwNCisJCQlzdHJ1Y3Qg a2ZkX21lbV9vYmogKm1xZF9tZW1fb2JqLCB1aW50NjRfdCAqZ2FydF9hZGRyLA0KIAkJCXN0cnVj dCBxdWV1ZV9wcm9wZXJ0aWVzICpxKQ0KIHsNCi0JaW50IHJldHZhbDsNCiAJc3RydWN0IGNpa19z ZG1hX3JsY19yZWdpc3RlcnMgKm07DQotCXN0cnVjdCBrZmRfZGV2ICpkZXYgPSBtbS0+ZGV2Ow0K IA0KLQkqbXFkX21lbV9vYmogPSBhbGxvY2F0ZV9zZG1hX21xZChkZXYsIHEpOw0KLQlpZiAoISpt cWRfbWVtX29iaikNCi0JCXJldHVybiAtRU5PTUVNOw0KLQ0KLQltID0gKHN0cnVjdCBjaWtfc2Rt YV9ybGNfcmVnaXN0ZXJzICopICgqbXFkX21lbV9vYmopLT5jcHVfcHRyOw0KKwltID0gKHN0cnVj dCBjaWtfc2RtYV9ybGNfcmVnaXN0ZXJzICopIG1xZF9tZW1fb2JqLT5jcHVfcHRyOw0KIA0KIAlt ZW1zZXQobSwgMCwgc2l6ZW9mKHN0cnVjdCBjaWtfc2RtYV9ybGNfcmVnaXN0ZXJzKSk7DQogDQog CSptcWQgPSBtOw0KIAlpZiAoZ2FydF9hZGRyKQ0KLQkJKmdhcnRfYWRkciA9ICgqbXFkX21lbV9v YmopLT5ncHVfYWRkcjsNCi0NCi0JcmV0dmFsID0gbW0tPnVwZGF0ZV9tcWQobW0sIG0sIHEpOw0K KwkJKmdhcnRfYWRkciA9IG1xZF9tZW1fb2JqLT5ncHVfYWRkcjsNCiANCi0JcmV0dXJuIHJldHZh bDsNCisJbW0tPnVwZGF0ZV9tcWQobW0sIG0sIHEpOw0KIH0NCiANCi1zdGF0aWMgdm9pZCB1bmlu aXRfbXFkKHN0cnVjdCBtcWRfbWFuYWdlciAqbW0sIHZvaWQgKm1xZCwNCitzdGF0aWMgdm9pZCBm cmVlX21xZChzdHJ1Y3QgbXFkX21hbmFnZXIgKm1tLCB2b2lkICptcWQsDQogCQkJc3RydWN0IGtm ZF9tZW1fb2JqICptcWRfbWVtX29iaikNCiB7DQogCWtmZF9ndHRfc2FfZnJlZShtbS0+ZGV2LCBt cWRfbWVtX29iaik7DQpAQCAtMjAzLDcgKzE4NCw3IEBAIHN0YXRpYyBpbnQgbG9hZF9tcWRfc2Rt YShzdHJ1Y3QgbXFkX21hbmFnZXIgKm1tLCB2b2lkICptcWQsDQogCQkJCQkgICAgICAgbW1zKTsN CiB9DQogDQotc3RhdGljIGludCBfX3VwZGF0ZV9tcWQoc3RydWN0IG1xZF9tYW5hZ2VyICptbSwg dm9pZCAqbXFkLA0KK3N0YXRpYyB2b2lkIF9fdXBkYXRlX21xZChzdHJ1Y3QgbXFkX21hbmFnZXIg Km1tLCB2b2lkICptcWQsDQogCQkJc3RydWN0IHF1ZXVlX3Byb3BlcnRpZXMgKnEsIHVuc2lnbmVk IGludCBhdGNfYml0KQ0KIHsNCiAJc3RydWN0IGNpa19tcWQgKm07DQpAQCAtMjM3LDIzICsyMTgs MjEgQEAgc3RhdGljIGludCBfX3VwZGF0ZV9tcWQoc3RydWN0IG1xZF9tYW5hZ2VyICptbSwgdm9p ZCAqbXFkLA0KIAlzZXRfcHJpb3JpdHkobSwgcSk7DQogDQogCXEtPmlzX2FjdGl2ZSA9IFFVRVVF X0lTX0FDVElWRSgqcSk7DQotDQotCXJldHVybiAwOw0KIH0NCiANCi1zdGF0aWMgaW50IHVwZGF0 ZV9tcWQoc3RydWN0IG1xZF9tYW5hZ2VyICptbSwgdm9pZCAqbXFkLA0KK3N0YXRpYyB2b2lkIHVw ZGF0ZV9tcWQoc3RydWN0IG1xZF9tYW5hZ2VyICptbSwgdm9pZCAqbXFkLA0KIAkJCXN0cnVjdCBx dWV1ZV9wcm9wZXJ0aWVzICpxKQ0KIHsNCi0JcmV0dXJuIF9fdXBkYXRlX21xZChtbSwgbXFkLCBx LCAxKTsNCisJX191cGRhdGVfbXFkKG1tLCBtcWQsIHEsIDEpOw0KIH0NCiANCi1zdGF0aWMgaW50 IHVwZGF0ZV9tcWRfaGF3YWlpKHN0cnVjdCBtcWRfbWFuYWdlciAqbW0sIHZvaWQgKm1xZCwNCitz dGF0aWMgdm9pZCB1cGRhdGVfbXFkX2hhd2FpaShzdHJ1Y3QgbXFkX21hbmFnZXIgKm1tLCB2b2lk ICptcWQsDQogCQkJc3RydWN0IHF1ZXVlX3Byb3BlcnRpZXMgKnEpDQogew0KLQlyZXR1cm4gX191 cGRhdGVfbXFkKG1tLCBtcWQsIHEsIDApOw0KKwlfX3VwZGF0ZV9tcWQobW0sIG1xZCwgcSwgMCk7 DQogfQ0KIA0KLXN0YXRpYyBpbnQgdXBkYXRlX21xZF9zZG1hKHN0cnVjdCBtcWRfbWFuYWdlciAq bW0sIHZvaWQgKm1xZCwNCitzdGF0aWMgdm9pZCB1cGRhdGVfbXFkX3NkbWEoc3RydWN0IG1xZF9t YW5hZ2VyICptbSwgdm9pZCAqbXFkLA0KIAkJCQlzdHJ1Y3QgcXVldWVfcHJvcGVydGllcyAqcSkN CiB7DQogCXN0cnVjdCBjaWtfc2RtYV9ybGNfcmVnaXN0ZXJzICptOw0KQEAgLTI3OCw4ICsyNTcs NiBAQCBzdGF0aWMgaW50IHVwZGF0ZV9tcWRfc2RtYShzdHJ1Y3QgbXFkX21hbmFnZXIgKm1tLCB2 b2lkICptcWQsDQogCW0tPnNkbWFfcXVldWVfaWQgPSBxLT5zZG1hX3F1ZXVlX2lkOw0KIA0KIAlx LT5pc19hY3RpdmUgPSBRVUVVRV9JU19BQ1RJVkUoKnEpOw0KLQ0KLQlyZXR1cm4gMDsNCiB9DQog DQogc3RhdGljIGludCBkZXN0cm95X21xZChzdHJ1Y3QgbXFkX21hbmFnZXIgKm1tLCB2b2lkICpt cWQsDQpAQCAtMzI2LDE0ICszMDMsMTQgQEAgc3RhdGljIGJvb2wgaXNfb2NjdXBpZWRfc2RtYShz dHJ1Y3QgbXFkX21hbmFnZXIgKm1tLCB2b2lkICptcWQsDQogICogcXVldWVzIGJ1dCB3aXRoIGRp ZmZlcmVudCBpbml0aWFsIHZhbHVlcy4NCiAgKi8NCiANCi1zdGF0aWMgaW50IGluaXRfbXFkX2hp cShzdHJ1Y3QgbXFkX21hbmFnZXIgKm1tLCB2b2lkICoqbXFkLA0KLQkJc3RydWN0IGtmZF9tZW1f b2JqICoqbXFkX21lbV9vYmosIHVpbnQ2NF90ICpnYXJ0X2FkZHIsDQorc3RhdGljIHZvaWQgaW5p dF9tcWRfaGlxKHN0cnVjdCBtcWRfbWFuYWdlciAqbW0sIHZvaWQgKiptcWQsDQorCQlzdHJ1Y3Qg a2ZkX21lbV9vYmogKm1xZF9tZW1fb2JqLCB1aW50NjRfdCAqZ2FydF9hZGRyLA0KIAkJc3RydWN0 IHF1ZXVlX3Byb3BlcnRpZXMgKnEpDQogew0KLQlyZXR1cm4gaW5pdF9tcWQobW0sIG1xZCwgbXFk X21lbV9vYmosIGdhcnRfYWRkciwgcSk7DQorCWluaXRfbXFkKG1tLCBtcWQsIG1xZF9tZW1fb2Jq LCBnYXJ0X2FkZHIsIHEpOw0KIH0NCiANCi1zdGF0aWMgaW50IHVwZGF0ZV9tcWRfaGlxKHN0cnVj dCBtcWRfbWFuYWdlciAqbW0sIHZvaWQgKm1xZCwNCitzdGF0aWMgdm9pZCB1cGRhdGVfbXFkX2hp cShzdHJ1Y3QgbXFkX21hbmFnZXIgKm1tLCB2b2lkICptcWQsDQogCQkJCXN0cnVjdCBxdWV1ZV9w cm9wZXJ0aWVzICpxKQ0KIHsNCiAJc3RydWN0IGNpa19tcWQgKm07DQpAQCAtMzYwLDcgKzMzNyw2 IEBAIHN0YXRpYyBpbnQgdXBkYXRlX21xZF9oaXEoc3RydWN0IG1xZF9tYW5hZ2VyICptbSwgdm9p ZCAqbXFkLA0KIAlxLT5pc19hY3RpdmUgPSBRVUVVRV9JU19BQ1RJVkUoKnEpOw0KIA0KIAlzZXRf cHJpb3JpdHkobSwgcSk7DQotCXJldHVybiAwOw0KIH0NCiANCiAjaWYgZGVmaW5lZChDT05GSUdf REVCVUdfRlMpDQpAQCAtMzk5LDggKzM3NSw5IEBAIHN0cnVjdCBtcWRfbWFuYWdlciAqbXFkX21h bmFnZXJfaW5pdF9jaWsoZW51bSBLRkRfTVFEX1RZUEUgdHlwZSwNCiAJc3dpdGNoICh0eXBlKSB7 DQogCWNhc2UgS0ZEX01RRF9UWVBFX0NQOg0KIAljYXNlIEtGRF9NUURfVFlQRV9DT01QVVRFOg0K KwkJbXFkLT5hbGxvY2F0ZV9tcWQgPSBhbGxvY2F0ZV9tcWQ7DQogCQltcWQtPmluaXRfbXFkID0g aW5pdF9tcWQ7DQotCQltcWQtPnVuaW5pdF9tcWQgPSB1bmluaXRfbXFkOw0KKwkJbXFkLT5mcmVl X21xZCA9IGZyZWVfbXFkOw0KIAkJbXFkLT5sb2FkX21xZCA9IGxvYWRfbXFkOw0KIAkJbXFkLT51 cGRhdGVfbXFkID0gdXBkYXRlX21xZDsNCiAJCW1xZC0+ZGVzdHJveV9tcWQgPSBkZXN0cm95X21x ZDsNCkBAIC00MTEsOCArMzg4LDkgQEAgc3RydWN0IG1xZF9tYW5hZ2VyICptcWRfbWFuYWdlcl9p bml0X2NpayhlbnVtIEtGRF9NUURfVFlQRSB0eXBlLA0KICNlbmRpZg0KIAkJYnJlYWs7DQogCWNh c2UgS0ZEX01RRF9UWVBFX0hJUToNCisJCW1xZC0+YWxsb2NhdGVfbXFkID0gYWxsb2NhdGVfaGlx X21xZDsNCiAJCW1xZC0+aW5pdF9tcWQgPSBpbml0X21xZF9oaXE7DQotCQltcWQtPnVuaW5pdF9t cWQgPSB1bmluaXRfbXFkX2hpcV9zZG1hOw0KKwkJbXFkLT5mcmVlX21xZCA9IGZyZWVfbXFkX2hp cV9zZG1hOw0KIAkJbXFkLT5sb2FkX21xZCA9IGxvYWRfbXFkOw0KIAkJbXFkLT51cGRhdGVfbXFk ID0gdXBkYXRlX21xZF9oaXE7DQogCQltcWQtPmRlc3Ryb3lfbXFkID0gZGVzdHJveV9tcWQ7DQpA QCAtNDIzLDggKzQwMSw5IEBAIHN0cnVjdCBtcWRfbWFuYWdlciAqbXFkX21hbmFnZXJfaW5pdF9j aWsoZW51bSBLRkRfTVFEX1RZUEUgdHlwZSwNCiAjZW5kaWYNCiAJCWJyZWFrOw0KIAljYXNlIEtG RF9NUURfVFlQRV9ESVE6DQorCQltcWQtPmFsbG9jYXRlX21xZCA9IGFsbG9jYXRlX2hpcV9tcWQ7 DQogCQltcWQtPmluaXRfbXFkID0gaW5pdF9tcWRfaGlxOw0KLQkJbXFkLT51bmluaXRfbXFkID0g dW5pbml0X21xZDsNCisJCW1xZC0+ZnJlZV9tcWQgPSBmcmVlX21xZDsNCiAJCW1xZC0+bG9hZF9t cWQgPSBsb2FkX21xZDsNCiAJCW1xZC0+dXBkYXRlX21xZCA9IHVwZGF0ZV9tcWRfaGlxOw0KIAkJ bXFkLT5kZXN0cm95X21xZCA9IGRlc3Ryb3lfbXFkOw0KQEAgLTQzNSw4ICs0MTQsOSBAQCBzdHJ1 Y3QgbXFkX21hbmFnZXIgKm1xZF9tYW5hZ2VyX2luaXRfY2lrKGVudW0gS0ZEX01RRF9UWVBFIHR5 cGUsDQogI2VuZGlmDQogCQlicmVhazsNCiAJY2FzZSBLRkRfTVFEX1RZUEVfU0RNQToNCisJCW1x ZC0+YWxsb2NhdGVfbXFkID0gYWxsb2NhdGVfc2RtYV9tcWQ7DQogCQltcWQtPmluaXRfbXFkID0g aW5pdF9tcWRfc2RtYTsNCi0JCW1xZC0+dW5pbml0X21xZCA9IHVuaW5pdF9tcWRfaGlxX3NkbWE7 DQorCQltcWQtPmZyZWVfbXFkID0gZnJlZV9tcWRfaGlxX3NkbWE7DQogCQltcWQtPmxvYWRfbXFk ID0gbG9hZF9tcWRfc2RtYTsNCiAJCW1xZC0+dXBkYXRlX21xZCA9IHVwZGF0ZV9tcWRfc2RtYTsN CiAJCW1xZC0+ZGVzdHJveV9tcWQgPSBkZXN0cm95X21xZF9zZG1hOw0KZGlmZiAtLWdpdCBhL2Ry aXZlcnMvZ3B1L2RybS9hbWQvYW1ka2ZkL2tmZF9tcWRfbWFuYWdlcl92OS5jIGIvZHJpdmVycy9n cHUvZHJtL2FtZC9hbWRrZmQva2ZkX21xZF9tYW5hZ2VyX3Y5LmMNCmluZGV4IDgxODk0NGIuLjBj NThmOTEgMTAwNjQ0DQotLS0gYS9kcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGtmZC9rZmRfbXFkX21h bmFnZXJfdjkuYw0KKysrIGIvZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRrZmQva2ZkX21xZF9tYW5h Z2VyX3Y5LmMNCkBAIC03OSw5ICs3OSw2IEBAIHN0YXRpYyBzdHJ1Y3Qga2ZkX21lbV9vYmogKmFs bG9jYXRlX21xZChzdHJ1Y3Qga2ZkX2RldiAqa2ZkLA0KIAlpbnQgcmV0dmFsOw0KIAlzdHJ1Y3Qg a2ZkX21lbV9vYmogKm1xZF9tZW1fb2JqID0gTlVMTDsNCiANCi0JaWYgKHEtPnR5cGUgPT0gS0ZE X1FVRVVFX1RZUEVfSElRKQ0KLQkJcmV0dXJuIGFsbG9jYXRlX2hpcV9tcWQoa2ZkKTsNCi0NCiAJ LyogRnJvbSBWOSwgIGZvciBDV1NSLCB0aGUgY29udHJvbCBzdGFjayBpcyBsb2NhdGVkIG9uIHRo ZSBuZXh0IHBhZ2UNCiAJICogYm91bmRhcnkgYWZ0ZXIgdGhlIG1xZCwgd2Ugd2lsbCB1c2UgdGhl IGd0dCBhbGxvY2F0aW9uIGZ1bmN0aW9uDQogCSAqIGluc3RlYWQgb2Ygc3ViLWFsbG9jYXRpb24g ZnVuY3Rpb24uDQpAQCAtMTEwLDIxICsxMDcsMTUgQEAgc3RhdGljIHN0cnVjdCBrZmRfbWVtX29i aiAqYWxsb2NhdGVfbXFkKHN0cnVjdCBrZmRfZGV2ICprZmQsDQogDQogfQ0KIA0KLXN0YXRpYyBp bnQgaW5pdF9tcWQoc3RydWN0IG1xZF9tYW5hZ2VyICptbSwgdm9pZCAqKm1xZCwNCi0JCQlzdHJ1 Y3Qga2ZkX21lbV9vYmogKiptcWRfbWVtX29iaiwgdWludDY0X3QgKmdhcnRfYWRkciwNCitzdGF0 aWMgdm9pZCBpbml0X21xZChzdHJ1Y3QgbXFkX21hbmFnZXIgKm1tLCB2b2lkICoqbXFkLA0KKwkJ CXN0cnVjdCBrZmRfbWVtX29iaiAqbXFkX21lbV9vYmosIHVpbnQ2NF90ICpnYXJ0X2FkZHIsDQog CQkJc3RydWN0IHF1ZXVlX3Byb3BlcnRpZXMgKnEpDQogew0KLQlpbnQgcmV0dmFsOw0KIAl1aW50 NjRfdCBhZGRyOw0KIAlzdHJ1Y3QgdjlfbXFkICptOw0KLQlzdHJ1Y3Qga2ZkX2RldiAqa2ZkID0g bW0tPmRldjsNCi0NCi0JKm1xZF9tZW1fb2JqID0gYWxsb2NhdGVfbXFkKGtmZCwgcSk7DQotCWlm ICghKm1xZF9tZW1fb2JqKQ0KLQkJcmV0dXJuIC1FTk9NRU07DQogDQotCW0gPSAoc3RydWN0IHY5 X21xZCAqKSAoKm1xZF9tZW1fb2JqKS0+Y3B1X3B0cjsNCi0JYWRkciA9ICgqbXFkX21lbV9vYmop LT5ncHVfYWRkcjsNCisJbSA9IChzdHJ1Y3QgdjlfbXFkICopIG1xZF9tZW1fb2JqLT5jcHVfcHRy Ow0KKwlhZGRyID0gbXFkX21lbV9vYmotPmdwdV9hZGRyOw0KIA0KIAltZW1zZXQobSwgMCwgc2l6 ZW9mKHN0cnVjdCB2OV9tcWQpKTsNCiANCkBAIC0xNzMsOSArMTY0LDcgQEAgc3RhdGljIGludCBp bml0X21xZChzdHJ1Y3QgbXFkX21hbmFnZXIgKm1tLCB2b2lkICoqbXFkLA0KIAkqbXFkID0gbTsN CiAJaWYgKGdhcnRfYWRkcikNCiAJCSpnYXJ0X2FkZHIgPSBhZGRyOw0KLQlyZXR2YWwgPSBtbS0+ dXBkYXRlX21xZChtbSwgbSwgcSk7DQotDQotCXJldHVybiByZXR2YWw7DQorCW1tLT51cGRhdGVf bXFkKG1tLCBtLCBxKTsNCiB9DQogDQogc3RhdGljIGludCBsb2FkX21xZChzdHJ1Y3QgbXFkX21h bmFnZXIgKm1tLCB2b2lkICptcWQsDQpAQCAtMTkwLDcgKzE3OSw3IEBAIHN0YXRpYyBpbnQgbG9h ZF9tcWQoc3RydWN0IG1xZF9tYW5hZ2VyICptbSwgdm9pZCAqbXFkLA0KIAkJCQkJICB3cHRyX3No aWZ0LCAwLCBtbXMpOw0KIH0NCiANCi1zdGF0aWMgaW50IHVwZGF0ZV9tcWQoc3RydWN0IG1xZF9t YW5hZ2VyICptbSwgdm9pZCAqbXFkLA0KK3N0YXRpYyB2b2lkIHVwZGF0ZV9tcWQoc3RydWN0IG1x ZF9tYW5hZ2VyICptbSwgdm9pZCAqbXFkLA0KIAkJICAgICAgc3RydWN0IHF1ZXVlX3Byb3BlcnRp ZXMgKnEpDQogew0KIAlzdHJ1Y3QgdjlfbXFkICptOw0KQEAgLTI1Miw4ICsyNDEsNiBAQCBzdGF0 aWMgaW50IHVwZGF0ZV9tcWQoc3RydWN0IG1xZF9tYW5hZ2VyICptbSwgdm9pZCAqbXFkLA0KIAlz ZXRfcHJpb3JpdHkobSwgcSk7DQogDQogCXEtPmlzX2FjdGl2ZSA9IFFVRVVFX0lTX0FDVElWRSgq cSk7DQotDQotCXJldHVybiAwOw0KIH0NCiANCiANCkBAIC0yNjcsNyArMjU0LDcgQEAgc3RhdGlj IGludCBkZXN0cm95X21xZChzdHJ1Y3QgbXFkX21hbmFnZXIgKm1tLCB2b2lkICptcWQsDQogCQlw aXBlX2lkLCBxdWV1ZV9pZCk7DQogfQ0KIA0KLXN0YXRpYyB2b2lkIHVuaW5pdF9tcWQoc3RydWN0 IG1xZF9tYW5hZ2VyICptbSwgdm9pZCAqbXFkLA0KK3N0YXRpYyB2b2lkIGZyZWVfbXFkKHN0cnVj dCBtcWRfbWFuYWdlciAqbW0sIHZvaWQgKm1xZCwNCiAJCQlzdHJ1Y3Qga2ZkX21lbV9vYmogKm1x ZF9tZW1fb2JqKQ0KIHsNCiAJc3RydWN0IGtmZF9kZXYgKmtmZCA9IG1tLT5kZXY7DQpAQCAtMzEx LDYyICsyOTgsNDcgQEAgc3RhdGljIGludCBnZXRfd2F2ZV9zdGF0ZShzdHJ1Y3QgbXFkX21hbmFn ZXIgKm1tLCB2b2lkICptcWQsDQogCXJldHVybiAwOw0KIH0NCiANCi1zdGF0aWMgaW50IGluaXRf bXFkX2hpcShzdHJ1Y3QgbXFkX21hbmFnZXIgKm1tLCB2b2lkICoqbXFkLA0KLQkJCXN0cnVjdCBr ZmRfbWVtX29iaiAqKm1xZF9tZW1fb2JqLCB1aW50NjRfdCAqZ2FydF9hZGRyLA0KK3N0YXRpYyB2 b2lkIGluaXRfbXFkX2hpcShzdHJ1Y3QgbXFkX21hbmFnZXIgKm1tLCB2b2lkICoqbXFkLA0KKwkJ CXN0cnVjdCBrZmRfbWVtX29iaiAqbXFkX21lbV9vYmosIHVpbnQ2NF90ICpnYXJ0X2FkZHIsDQog CQkJc3RydWN0IHF1ZXVlX3Byb3BlcnRpZXMgKnEpDQogew0KIAlzdHJ1Y3QgdjlfbXFkICptOw0K LQlpbnQgcmV0dmFsID0gaW5pdF9tcWQobW0sIG1xZCwgbXFkX21lbV9vYmosIGdhcnRfYWRkciwg cSk7DQogDQotCWlmIChyZXR2YWwgIT0gMCkNCi0JCXJldHVybiByZXR2YWw7DQorCWluaXRfbXFk KG1tLCBtcWQsIG1xZF9tZW1fb2JqLCBnYXJ0X2FkZHIsIHEpOw0KIA0KIAltID0gZ2V0X21xZCgq bXFkKTsNCiANCiAJbS0+Y3BfaHFkX3BxX2NvbnRyb2wgfD0gMSA8PCBDUF9IUURfUFFfQ09OVFJP TF9fUFJJVl9TVEFURV9fU0hJRlQgfA0KIAkJCTEgPDwgQ1BfSFFEX1BRX0NPTlRST0xfX0tNRF9R VUVVRV9fU0hJRlQ7DQotDQotCXJldHVybiByZXR2YWw7DQogfQ0KIA0KLXN0YXRpYyBpbnQgdXBk YXRlX21xZF9oaXEoc3RydWN0IG1xZF9tYW5hZ2VyICptbSwgdm9pZCAqbXFkLA0KK3N0YXRpYyB2 b2lkIHVwZGF0ZV9tcWRfaGlxKHN0cnVjdCBtcWRfbWFuYWdlciAqbW0sIHZvaWQgKm1xZCwNCiAJ CQlzdHJ1Y3QgcXVldWVfcHJvcGVydGllcyAqcSkNCiB7DQogCXN0cnVjdCB2OV9tcWQgKm07DQot CWludCByZXR2YWwgPSB1cGRhdGVfbXFkKG1tLCBtcWQsIHEpOw0KIA0KLQlpZiAocmV0dmFsICE9 IDApDQotCQlyZXR1cm4gcmV0dmFsOw0KKwl1cGRhdGVfbXFkKG1tLCBtcWQsIHEpOw0KIA0KIAkv KiBUT0RPOiB3aGF0J3MgdGhlIHBvaW50PyB1cGRhdGVfbXFkIGFscmVhZHkgZG9lcyB0aGlzLiAq Lw0KIAltID0gZ2V0X21xZChtcWQpOw0KIAltLT5jcF9ocWRfdm1pZCA9IHEtPnZtaWQ7DQotCXJl dHVybiByZXR2YWw7DQogfQ0KIA0KLXN0YXRpYyBpbnQgaW5pdF9tcWRfc2RtYShzdHJ1Y3QgbXFk X21hbmFnZXIgKm1tLCB2b2lkICoqbXFkLA0KLQkJc3RydWN0IGtmZF9tZW1fb2JqICoqbXFkX21l bV9vYmosIHVpbnQ2NF90ICpnYXJ0X2FkZHIsDQorc3RhdGljIHZvaWQgaW5pdF9tcWRfc2RtYShz dHJ1Y3QgbXFkX21hbmFnZXIgKm1tLCB2b2lkICoqbXFkLA0KKwkJc3RydWN0IGtmZF9tZW1fb2Jq ICptcWRfbWVtX29iaiwgdWludDY0X3QgKmdhcnRfYWRkciwNCiAJCXN0cnVjdCBxdWV1ZV9wcm9w ZXJ0aWVzICpxKQ0KIHsNCi0JaW50IHJldHZhbDsNCiAJc3RydWN0IHY5X3NkbWFfbXFkICptOw0K LQlzdHJ1Y3Qga2ZkX2RldiAqZGV2ID0gbW0tPmRldjsNCi0NCi0JKm1xZF9tZW1fb2JqID0gYWxs b2NhdGVfc2RtYV9tcWQoZGV2LCBxKTsNCi0JaWYgKCEqbXFkX21lbV9vYmopDQotCQlyZXR1cm4g LUVOT01FTTsNCiANCi0JbSA9IChzdHJ1Y3Qgdjlfc2RtYV9tcWQgKikgKCptcWRfbWVtX29iaikt PmNwdV9wdHI7DQorCW0gPSAoc3RydWN0IHY5X3NkbWFfbXFkICopIG1xZF9tZW1fb2JqLT5jcHVf cHRyOw0KIA0KIAltZW1zZXQobSwgMCwgc2l6ZW9mKHN0cnVjdCB2OV9zZG1hX21xZCkpOw0KIA0K IAkqbXFkID0gbTsNCiAJaWYgKGdhcnRfYWRkcikNCi0JCSpnYXJ0X2FkZHIgPSAoKm1xZF9tZW1f b2JqKS0+Z3B1X2FkZHI7DQorCQkqZ2FydF9hZGRyID0gbXFkX21lbV9vYmotPmdwdV9hZGRyOw0K IA0KLQlyZXR2YWwgPSBtbS0+dXBkYXRlX21xZChtbSwgbSwgcSk7DQotDQotCXJldHVybiByZXR2 YWw7DQorCW1tLT51cGRhdGVfbXFkKG1tLCBtLCBxKTsNCiB9DQogDQogc3RhdGljIGludCBsb2Fk X21xZF9zZG1hKHN0cnVjdCBtcWRfbWFuYWdlciAqbW0sIHZvaWQgKm1xZCwNCkBAIC0zODAsNyAr MzUyLDcgQEAgc3RhdGljIGludCBsb2FkX21xZF9zZG1hKHN0cnVjdCBtcWRfbWFuYWdlciAqbW0s IHZvaWQgKm1xZCwNCiANCiAjZGVmaW5lIFNETUFfUkxDX0RVTU1ZX0RFRkFVTFQgMHhmDQogDQot c3RhdGljIGludCB1cGRhdGVfbXFkX3NkbWEoc3RydWN0IG1xZF9tYW5hZ2VyICptbSwgdm9pZCAq bXFkLA0KK3N0YXRpYyB2b2lkIHVwZGF0ZV9tcWRfc2RtYShzdHJ1Y3QgbXFkX21hbmFnZXIgKm1t LCB2b2lkICptcWQsDQogCQlzdHJ1Y3QgcXVldWVfcHJvcGVydGllcyAqcSkNCiB7DQogCXN0cnVj dCB2OV9zZG1hX21xZCAqbTsNCkBAIC00MDQsOCArMzc2LDYgQEAgc3RhdGljIGludCB1cGRhdGVf bXFkX3NkbWEoc3RydWN0IG1xZF9tYW5hZ2VyICptbSwgdm9pZCAqbXFkLA0KIAltLT5zZG1heF9y bGN4X2R1bW15X3JlZyA9IFNETUFfUkxDX0RVTU1ZX0RFRkFVTFQ7DQogDQogCXEtPmlzX2FjdGl2 ZSA9IFFVRVVFX0lTX0FDVElWRSgqcSk7DQotDQotCXJldHVybiAwOw0KIH0NCiANCiAvKg0KQEAg LTQ2Miw4ICs0MzIsOSBAQCBzdHJ1Y3QgbXFkX21hbmFnZXIgKm1xZF9tYW5hZ2VyX2luaXRfdjko ZW51bSBLRkRfTVFEX1RZUEUgdHlwZSwNCiAJc3dpdGNoICh0eXBlKSB7DQogCWNhc2UgS0ZEX01R RF9UWVBFX0NQOg0KIAljYXNlIEtGRF9NUURfVFlQRV9DT01QVVRFOg0KKwkJbXFkLT5hbGxvY2F0 ZV9tcWQgPSBhbGxvY2F0ZV9tcWQ7DQogCQltcWQtPmluaXRfbXFkID0gaW5pdF9tcWQ7DQotCQlt cWQtPnVuaW5pdF9tcWQgPSB1bmluaXRfbXFkOw0KKwkJbXFkLT5mcmVlX21xZCA9IGZyZWVfbXFk Ow0KIAkJbXFkLT5sb2FkX21xZCA9IGxvYWRfbXFkOw0KIAkJbXFkLT51cGRhdGVfbXFkID0gdXBk YXRlX21xZDsNCiAJCW1xZC0+ZGVzdHJveV9tcWQgPSBkZXN0cm95X21xZDsNCkBAIC00NzUsOCAr NDQ2LDkgQEAgc3RydWN0IG1xZF9tYW5hZ2VyICptcWRfbWFuYWdlcl9pbml0X3Y5KGVudW0gS0ZE X01RRF9UWVBFIHR5cGUsDQogI2VuZGlmDQogCQlicmVhazsNCiAJY2FzZSBLRkRfTVFEX1RZUEVf SElROg0KKwkJbXFkLT5hbGxvY2F0ZV9tcWQgPSBhbGxvY2F0ZV9oaXFfbXFkOw0KIAkJbXFkLT5p bml0X21xZCA9IGluaXRfbXFkX2hpcTsNCi0JCW1xZC0+dW5pbml0X21xZCA9IHVuaW5pdF9tcWRf aGlxX3NkbWE7DQorCQltcWQtPmZyZWVfbXFkID0gZnJlZV9tcWRfaGlxX3NkbWE7DQogCQltcWQt PmxvYWRfbXFkID0gbG9hZF9tcWQ7DQogCQltcWQtPnVwZGF0ZV9tcWQgPSB1cGRhdGVfbXFkX2hp cTsNCiAJCW1xZC0+ZGVzdHJveV9tcWQgPSBkZXN0cm95X21xZDsNCkBAIC00ODcsOCArNDU5LDkg QEAgc3RydWN0IG1xZF9tYW5hZ2VyICptcWRfbWFuYWdlcl9pbml0X3Y5KGVudW0gS0ZEX01RRF9U WVBFIHR5cGUsDQogI2VuZGlmDQogCQlicmVhazsNCiAJY2FzZSBLRkRfTVFEX1RZUEVfRElROg0K KwkJbXFkLT5hbGxvY2F0ZV9tcWQgPSBhbGxvY2F0ZV9oaXFfbXFkOw0KIAkJbXFkLT5pbml0X21x ZCA9IGluaXRfbXFkX2hpcTsNCi0JCW1xZC0+dW5pbml0X21xZCA9IHVuaW5pdF9tcWQ7DQorCQlt cWQtPmZyZWVfbXFkID0gZnJlZV9tcWQ7DQogCQltcWQtPmxvYWRfbXFkID0gbG9hZF9tcWQ7DQog CQltcWQtPnVwZGF0ZV9tcWQgPSB1cGRhdGVfbXFkX2hpcTsNCiAJCW1xZC0+ZGVzdHJveV9tcWQg PSBkZXN0cm95X21xZDsNCkBAIC00OTksOCArNDcyLDkgQEAgc3RydWN0IG1xZF9tYW5hZ2VyICpt cWRfbWFuYWdlcl9pbml0X3Y5KGVudW0gS0ZEX01RRF9UWVBFIHR5cGUsDQogI2VuZGlmDQogCQli cmVhazsNCiAJY2FzZSBLRkRfTVFEX1RZUEVfU0RNQToNCisJCW1xZC0+YWxsb2NhdGVfbXFkID0g YWxsb2NhdGVfc2RtYV9tcWQ7DQogCQltcWQtPmluaXRfbXFkID0gaW5pdF9tcWRfc2RtYTsNCi0J CW1xZC0+dW5pbml0X21xZCA9IHVuaW5pdF9tcWRfaGlxX3NkbWE7DQorCQltcWQtPmZyZWVfbXFk ID0gZnJlZV9tcWRfaGlxX3NkbWE7DQogCQltcWQtPmxvYWRfbXFkID0gbG9hZF9tcWRfc2RtYTsN CiAJCW1xZC0+dXBkYXRlX21xZCA9IHVwZGF0ZV9tcWRfc2RtYTsNCiAJCW1xZC0+ZGVzdHJveV9t cWQgPSBkZXN0cm95X21xZF9zZG1hOw0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9hbWQv YW1ka2ZkL2tmZF9tcWRfbWFuYWdlcl92aS5jIGIvZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRrZmQv a2ZkX21xZF9tYW5hZ2VyX3ZpLmMNCmluZGV4IDAwZTZhNTkuLjdkMTQ0ZjUgMTAwNjQ0DQotLS0g YS9kcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGtmZC9rZmRfbXFkX21hbmFnZXJfdmkuYw0KKysrIGIv ZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRrZmQva2ZkX21xZF9tYW5hZ2VyX3ZpLmMNCkBAIC04MCw5 ICs4MCw2IEBAIHN0YXRpYyBzdHJ1Y3Qga2ZkX21lbV9vYmogKmFsbG9jYXRlX21xZChzdHJ1Y3Qg a2ZkX2RldiAqa2ZkLA0KIHsNCiAJc3RydWN0IGtmZF9tZW1fb2JqICptcWRfbWVtX29iajsNCiAN Ci0JaWYgKHEtPnR5cGUgPT0gS0ZEX1FVRVVFX1RZUEVfSElRKQ0KLQkJcmV0dXJuIGFsbG9jYXRl X2hpcV9tcWQoa2ZkKTsNCi0NCiAJaWYgKGtmZF9ndHRfc2FfYWxsb2NhdGUoa2ZkLCBzaXplb2Yo c3RydWN0IHZpX21xZCksDQogCQkJJm1xZF9tZW1fb2JqKSkNCiAJCXJldHVybiBOVUxMOw0KQEAg LTkwLDIxICs4NywxNSBAQCBzdGF0aWMgc3RydWN0IGtmZF9tZW1fb2JqICphbGxvY2F0ZV9tcWQo c3RydWN0IGtmZF9kZXYgKmtmZCwNCiAJcmV0dXJuIG1xZF9tZW1fb2JqOw0KIH0NCiANCi1zdGF0 aWMgaW50IGluaXRfbXFkKHN0cnVjdCBtcWRfbWFuYWdlciAqbW0sIHZvaWQgKiptcWQsDQotCQkJ c3RydWN0IGtmZF9tZW1fb2JqICoqbXFkX21lbV9vYmosIHVpbnQ2NF90ICpnYXJ0X2FkZHIsDQor c3RhdGljIHZvaWQgaW5pdF9tcWQoc3RydWN0IG1xZF9tYW5hZ2VyICptbSwgdm9pZCAqKm1xZCwN CisJCQlzdHJ1Y3Qga2ZkX21lbV9vYmogKm1xZF9tZW1fb2JqLCB1aW50NjRfdCAqZ2FydF9hZGRy LA0KIAkJCXN0cnVjdCBxdWV1ZV9wcm9wZXJ0aWVzICpxKQ0KIHsNCi0JaW50IHJldHZhbDsNCiAJ dWludDY0X3QgYWRkcjsNCiAJc3RydWN0IHZpX21xZCAqbTsNCi0Jc3RydWN0IGtmZF9kZXYgKmtm ZCA9IG1tLT5kZXY7DQotDQotCSptcWRfbWVtX29iaiA9IGFsbG9jYXRlX21xZChrZmQsIHEpOw0K LQlpZiAoISptcWRfbWVtX29iaikNCi0JCXJldHVybiAtRU5PTUVNOw0KIA0KLQltID0gKHN0cnVj dCB2aV9tcWQgKikgKCptcWRfbWVtX29iaiktPmNwdV9wdHI7DQotCWFkZHIgPSAoKm1xZF9tZW1f b2JqKS0+Z3B1X2FkZHI7DQorCW0gPSAoc3RydWN0IHZpX21xZCAqKSBtcWRfbWVtX29iai0+Y3B1 X3B0cjsNCisJYWRkciA9IG1xZF9tZW1fb2JqLT5ncHVfYWRkcjsNCiANCiAJbWVtc2V0KG0sIDAs IHNpemVvZihzdHJ1Y3QgdmlfbXFkKSk7DQogDQpAQCAtMTU5LDkgKzE1MCw3IEBAIHN0YXRpYyBp bnQgaW5pdF9tcWQoc3RydWN0IG1xZF9tYW5hZ2VyICptbSwgdm9pZCAqKm1xZCwNCiAJKm1xZCA9 IG07DQogCWlmIChnYXJ0X2FkZHIpDQogCQkqZ2FydF9hZGRyID0gYWRkcjsNCi0JcmV0dmFsID0g bW0tPnVwZGF0ZV9tcWQobW0sIG0sIHEpOw0KLQ0KLQlyZXR1cm4gcmV0dmFsOw0KKwltbS0+dXBk YXRlX21xZChtbSwgbSwgcSk7DQogfQ0KIA0KIHN0YXRpYyBpbnQgbG9hZF9tcWQoc3RydWN0IG1x ZF9tYW5hZ2VyICptbSwgdm9pZCAqbXFkLA0KQEAgLTE3Nyw3ICsxNjYsNyBAQCBzdGF0aWMgaW50 IGxvYWRfbXFkKHN0cnVjdCBtcWRfbWFuYWdlciAqbW0sIHZvaWQgKm1xZCwNCiAJCQkJCSAgd3B0 cl9zaGlmdCwgd3B0cl9tYXNrLCBtbXMpOw0KIH0NCiANCi1zdGF0aWMgaW50IF9fdXBkYXRlX21x ZChzdHJ1Y3QgbXFkX21hbmFnZXIgKm1tLCB2b2lkICptcWQsDQorc3RhdGljIHZvaWQgX191cGRh dGVfbXFkKHN0cnVjdCBtcWRfbWFuYWdlciAqbW0sIHZvaWQgKm1xZCwNCiAJCQlzdHJ1Y3QgcXVl dWVfcHJvcGVydGllcyAqcSwgdW5zaWduZWQgaW50IG10eXBlLA0KIAkJCXVuc2lnbmVkIGludCBh dGNfYml0KQ0KIHsNCkBAIC0yNDUsMjEgKzIzNCwxOSBAQCBzdGF0aWMgaW50IF9fdXBkYXRlX21x ZChzdHJ1Y3QgbXFkX21hbmFnZXIgKm1tLCB2b2lkICptcWQsDQogCXNldF9wcmlvcml0eShtLCBx KTsNCiANCiAJcS0+aXNfYWN0aXZlID0gUVVFVUVfSVNfQUNUSVZFKCpxKTsNCi0NCi0JcmV0dXJu IDA7DQogfQ0KIA0KIA0KLXN0YXRpYyBpbnQgdXBkYXRlX21xZChzdHJ1Y3QgbXFkX21hbmFnZXIg Km1tLCB2b2lkICptcWQsDQorc3RhdGljIHZvaWQgdXBkYXRlX21xZChzdHJ1Y3QgbXFkX21hbmFn ZXIgKm1tLCB2b2lkICptcWQsDQogCQkJc3RydWN0IHF1ZXVlX3Byb3BlcnRpZXMgKnEpDQogew0K LQlyZXR1cm4gX191cGRhdGVfbXFkKG1tLCBtcWQsIHEsIE1UWVBFX0NDLCAxKTsNCisJX191cGRh dGVfbXFkKG1tLCBtcWQsIHEsIE1UWVBFX0NDLCAxKTsNCiB9DQogDQotc3RhdGljIGludCB1cGRh dGVfbXFkX3RvbmdhKHN0cnVjdCBtcWRfbWFuYWdlciAqbW0sIHZvaWQgKm1xZCwNCitzdGF0aWMg dm9pZCB1cGRhdGVfbXFkX3RvbmdhKHN0cnVjdCBtcWRfbWFuYWdlciAqbW0sIHZvaWQgKm1xZCwN CiAJCQlzdHJ1Y3QgcXVldWVfcHJvcGVydGllcyAqcSkNCiB7DQotCXJldHVybiBfX3VwZGF0ZV9t cWQobW0sIG1xZCwgcSwgTVRZUEVfVUMsIDApOw0KKwlfX3VwZGF0ZV9tcWQobW0sIG1xZCwgcSwg TVRZUEVfVUMsIDApOw0KIH0NCiANCiBzdGF0aWMgaW50IGRlc3Ryb3lfbXFkKHN0cnVjdCBtcWRf bWFuYWdlciAqbW0sIHZvaWQgKm1xZCwNCkBAIC0yNzIsNyArMjU5LDcgQEAgc3RhdGljIGludCBk ZXN0cm95X21xZChzdHJ1Y3QgbXFkX21hbmFnZXIgKm1tLCB2b2lkICptcWQsDQogCQlwaXBlX2lk LCBxdWV1ZV9pZCk7DQogfQ0KIA0KLXN0YXRpYyB2b2lkIHVuaW5pdF9tcWQoc3RydWN0IG1xZF9t YW5hZ2VyICptbSwgdm9pZCAqbXFkLA0KK3N0YXRpYyB2b2lkIGZyZWVfbXFkKHN0cnVjdCBtcWRf bWFuYWdlciAqbW0sIHZvaWQgKm1xZCwNCiAJCQlzdHJ1Y3Qga2ZkX21lbV9vYmogKm1xZF9tZW1f b2JqKQ0KIHsNCiAJa2ZkX2d0dF9zYV9mcmVlKG1tLT5kZXYsIG1xZF9tZW1fb2JqKTsNCkBAIC0z MDksNjEgKzI5Niw0NCBAQCBzdGF0aWMgaW50IGdldF93YXZlX3N0YXRlKHN0cnVjdCBtcWRfbWFu YWdlciAqbW0sIHZvaWQgKm1xZCwNCiAJcmV0dXJuIDA7DQogfQ0KIA0KLXN0YXRpYyBpbnQgaW5p dF9tcWRfaGlxKHN0cnVjdCBtcWRfbWFuYWdlciAqbW0sIHZvaWQgKiptcWQsDQotCQkJc3RydWN0 IGtmZF9tZW1fb2JqICoqbXFkX21lbV9vYmosIHVpbnQ2NF90ICpnYXJ0X2FkZHIsDQorc3RhdGlj IHZvaWQgaW5pdF9tcWRfaGlxKHN0cnVjdCBtcWRfbWFuYWdlciAqbW0sIHZvaWQgKiptcWQsDQor CQkJc3RydWN0IGtmZF9tZW1fb2JqICptcWRfbWVtX29iaiwgdWludDY0X3QgKmdhcnRfYWRkciwN CiAJCQlzdHJ1Y3QgcXVldWVfcHJvcGVydGllcyAqcSkNCiB7DQogCXN0cnVjdCB2aV9tcWQgKm07 DQotCWludCByZXR2YWwgPSBpbml0X21xZChtbSwgbXFkLCBtcWRfbWVtX29iaiwgZ2FydF9hZGRy LCBxKTsNCi0NCi0JaWYgKHJldHZhbCAhPSAwKQ0KLQkJcmV0dXJuIHJldHZhbDsNCisJaW5pdF9t cWQobW0sIG1xZCwgbXFkX21lbV9vYmosIGdhcnRfYWRkciwgcSk7DQogDQogCW0gPSBnZXRfbXFk KCptcWQpOw0KIA0KIAltLT5jcF9ocWRfcHFfY29udHJvbCB8PSAxIDw8IENQX0hRRF9QUV9DT05U Uk9MX19QUklWX1NUQVRFX19TSElGVCB8DQogCQkJMSA8PCBDUF9IUURfUFFfQ09OVFJPTF9fS01E X1FVRVVFX19TSElGVDsNCi0NCi0JcmV0dXJuIHJldHZhbDsNCiB9DQogDQotc3RhdGljIGludCB1 cGRhdGVfbXFkX2hpcShzdHJ1Y3QgbXFkX21hbmFnZXIgKm1tLCB2b2lkICptcWQsDQorc3RhdGlj IHZvaWQgdXBkYXRlX21xZF9oaXEoc3RydWN0IG1xZF9tYW5hZ2VyICptbSwgdm9pZCAqbXFkLA0K IAkJCXN0cnVjdCBxdWV1ZV9wcm9wZXJ0aWVzICpxKQ0KIHsNCiAJc3RydWN0IHZpX21xZCAqbTsN Ci0JaW50IHJldHZhbCA9IF9fdXBkYXRlX21xZChtbSwgbXFkLCBxLCBNVFlQRV9VQywgMCk7DQot DQotCWlmIChyZXR2YWwgIT0gMCkNCi0JCXJldHVybiByZXR2YWw7DQorCV9fdXBkYXRlX21xZCht bSwgbXFkLCBxLCBNVFlQRV9VQywgMCk7DQogDQogCW0gPSBnZXRfbXFkKG1xZCk7DQogCW0tPmNw X2hxZF92bWlkID0gcS0+dm1pZDsNCi0JcmV0dXJuIHJldHZhbDsNCiB9DQogDQotc3RhdGljIGlu dCBpbml0X21xZF9zZG1hKHN0cnVjdCBtcWRfbWFuYWdlciAqbW0sIHZvaWQgKiptcWQsDQotCQlz dHJ1Y3Qga2ZkX21lbV9vYmogKiptcWRfbWVtX29iaiwgdWludDY0X3QgKmdhcnRfYWRkciwNCitz dGF0aWMgdm9pZCBpbml0X21xZF9zZG1hKHN0cnVjdCBtcWRfbWFuYWdlciAqbW0sIHZvaWQgKipt cWQsDQorCQlzdHJ1Y3Qga2ZkX21lbV9vYmogKm1xZF9tZW1fb2JqLCB1aW50NjRfdCAqZ2FydF9h ZGRyLA0KIAkJc3RydWN0IHF1ZXVlX3Byb3BlcnRpZXMgKnEpDQogew0KLQlpbnQgcmV0dmFsOw0K IAlzdHJ1Y3Qgdmlfc2RtYV9tcWQgKm07DQotCXN0cnVjdCBrZmRfZGV2ICpkZXYgPSBtbS0+ZGV2 Ow0KLQ0KLQkqbXFkX21lbV9vYmogPSBhbGxvY2F0ZV9zZG1hX21xZChkZXYsIHEpOw0KLQlpZiAo ISptcWRfbWVtX29iaikNCi0JCXJldHVybiAtRU5PTUVNOw0KIA0KLQltID0gKHN0cnVjdCB2aV9z ZG1hX21xZCAqKSAoKm1xZF9tZW1fb2JqKS0+Y3B1X3B0cjsNCisJbSA9IChzdHJ1Y3Qgdmlfc2Rt YV9tcWQgKikgbXFkX21lbV9vYmotPmNwdV9wdHI7DQogDQogCW1lbXNldChtLCAwLCBzaXplb2Yo c3RydWN0IHZpX3NkbWFfbXFkKSk7DQogDQogCSptcWQgPSBtOw0KIAlpZiAoZ2FydF9hZGRyKQ0K LQkJKmdhcnRfYWRkciA9ICgqbXFkX21lbV9vYmopLT5ncHVfYWRkcjsNCisJCSpnYXJ0X2FkZHIg PSBtcWRfbWVtX29iai0+Z3B1X2FkZHI7DQogDQotCXJldHZhbCA9IG1tLT51cGRhdGVfbXFkKG1t LCBtLCBxKTsNCi0NCi0JcmV0dXJuIHJldHZhbDsNCisJbW0tPnVwZGF0ZV9tcWQobW0sIG0sIHEp Ow0KIH0NCiANCiBzdGF0aWMgaW50IGxvYWRfbXFkX3NkbWEoc3RydWN0IG1xZF9tYW5hZ2VyICpt bSwgdm9pZCAqbXFkLA0KQEAgLTM3NSw3ICszNDUsNyBAQCBzdGF0aWMgaW50IGxvYWRfbXFkX3Nk bWEoc3RydWN0IG1xZF9tYW5hZ2VyICptbSwgdm9pZCAqbXFkLA0KIAkJCQkJICAgICAgIG1tcyk7 DQogfQ0KIA0KLXN0YXRpYyBpbnQgdXBkYXRlX21xZF9zZG1hKHN0cnVjdCBtcWRfbWFuYWdlciAq bW0sIHZvaWQgKm1xZCwNCitzdGF0aWMgdm9pZCB1cGRhdGVfbXFkX3NkbWEoc3RydWN0IG1xZF9t YW5hZ2VyICptbSwgdm9pZCAqbXFkLA0KIAkJc3RydWN0IHF1ZXVlX3Byb3BlcnRpZXMgKnEpDQog ew0KIAlzdHJ1Y3Qgdmlfc2RtYV9tcWQgKm07DQpAQCAtNDAwLDggKzM3MCw2IEBAIHN0YXRpYyBp bnQgdXBkYXRlX21xZF9zZG1hKHN0cnVjdCBtcWRfbWFuYWdlciAqbW0sIHZvaWQgKm1xZCwNCiAJ bS0+c2RtYV9xdWV1ZV9pZCA9IHEtPnNkbWFfcXVldWVfaWQ7DQogDQogCXEtPmlzX2FjdGl2ZSA9 IFFVRVVFX0lTX0FDVElWRSgqcSk7DQotDQotCXJldHVybiAwOw0KIH0NCiANCiAvKg0KQEAgLTQ1 OCw4ICs0MjYsOSBAQCBzdHJ1Y3QgbXFkX21hbmFnZXIgKm1xZF9tYW5hZ2VyX2luaXRfdmkoZW51 bSBLRkRfTVFEX1RZUEUgdHlwZSwNCiAJc3dpdGNoICh0eXBlKSB7DQogCWNhc2UgS0ZEX01RRF9U WVBFX0NQOg0KIAljYXNlIEtGRF9NUURfVFlQRV9DT01QVVRFOg0KKwkJbXFkLT5hbGxvY2F0ZV9t cWQgPSBhbGxvY2F0ZV9tcWQ7DQogCQltcWQtPmluaXRfbXFkID0gaW5pdF9tcWQ7DQotCQltcWQt PnVuaW5pdF9tcWQgPSB1bmluaXRfbXFkOw0KKwkJbXFkLT5mcmVlX21xZCA9IGZyZWVfbXFkOw0K IAkJbXFkLT5sb2FkX21xZCA9IGxvYWRfbXFkOw0KIAkJbXFkLT51cGRhdGVfbXFkID0gdXBkYXRl X21xZDsNCiAJCW1xZC0+ZGVzdHJveV9tcWQgPSBkZXN0cm95X21xZDsNCkBAIC00NzEsOCArNDQw LDkgQEAgc3RydWN0IG1xZF9tYW5hZ2VyICptcWRfbWFuYWdlcl9pbml0X3ZpKGVudW0gS0ZEX01R RF9UWVBFIHR5cGUsDQogI2VuZGlmDQogCQlicmVhazsNCiAJY2FzZSBLRkRfTVFEX1RZUEVfSElR Og0KKwkJbXFkLT5hbGxvY2F0ZV9tcWQgPSBhbGxvY2F0ZV9oaXFfbXFkOw0KIAkJbXFkLT5pbml0 X21xZCA9IGluaXRfbXFkX2hpcTsNCi0JCW1xZC0+dW5pbml0X21xZCA9IHVuaW5pdF9tcWRfaGlx X3NkbWE7DQorCQltcWQtPmZyZWVfbXFkID0gZnJlZV9tcWRfaGlxX3NkbWE7DQogCQltcWQtPmxv YWRfbXFkID0gbG9hZF9tcWQ7DQogCQltcWQtPnVwZGF0ZV9tcWQgPSB1cGRhdGVfbXFkX2hpcTsN CiAJCW1xZC0+ZGVzdHJveV9tcWQgPSBkZXN0cm95X21xZDsNCkBAIC00ODMsOCArNDUzLDkgQEAg c3RydWN0IG1xZF9tYW5hZ2VyICptcWRfbWFuYWdlcl9pbml0X3ZpKGVudW0gS0ZEX01RRF9UWVBF IHR5cGUsDQogI2VuZGlmDQogCQlicmVhazsNCiAJY2FzZSBLRkRfTVFEX1RZUEVfRElROg0KKwkJ bXFkLT5hbGxvY2F0ZV9tcWQgPSBhbGxvY2F0ZV9oaXFfbXFkOw0KIAkJbXFkLT5pbml0X21xZCA9 IGluaXRfbXFkX2hpcTsNCi0JCW1xZC0+dW5pbml0X21xZCA9IHVuaW5pdF9tcWQ7DQorCQltcWQt PmZyZWVfbXFkID0gZnJlZV9tcWQ7DQogCQltcWQtPmxvYWRfbXFkID0gbG9hZF9tcWQ7DQogCQlt cWQtPnVwZGF0ZV9tcWQgPSB1cGRhdGVfbXFkX2hpcTsNCiAJCW1xZC0+ZGVzdHJveV9tcWQgPSBk ZXN0cm95X21xZDsNCkBAIC00OTUsOCArNDY2LDkgQEAgc3RydWN0IG1xZF9tYW5hZ2VyICptcWRf bWFuYWdlcl9pbml0X3ZpKGVudW0gS0ZEX01RRF9UWVBFIHR5cGUsDQogI2VuZGlmDQogCQlicmVh azsNCiAJY2FzZSBLRkRfTVFEX1RZUEVfU0RNQToNCisJCW1xZC0+YWxsb2NhdGVfbXFkID0gYWxs b2NhdGVfc2RtYV9tcWQ7DQogCQltcWQtPmluaXRfbXFkID0gaW5pdF9tcWRfc2RtYTsNCi0JCW1x ZC0+dW5pbml0X21xZCA9IHVuaW5pdF9tcWRfaGlxX3NkbWE7DQorCQltcWQtPmZyZWVfbXFkID0g ZnJlZV9tcWRfaGlxX3NkbWE7DQogCQltcWQtPmxvYWRfbXFkID0gbG9hZF9tcWRfc2RtYTsNCiAJ CW1xZC0+dXBkYXRlX21xZCA9IHVwZGF0ZV9tcWRfc2RtYTsNCiAJCW1xZC0+ZGVzdHJveV9tcWQg PSBkZXN0cm95X21xZF9zZG1hOw0KLS0gDQoyLjcuNA0KDQpfX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fXwphbWQtZ2Z4IG1haWxpbmcgbGlzdAphbWQtZ2Z4QGxp c3RzLmZyZWVkZXNrdG9wLm9yZwpodHRwczovL2xpc3RzLmZyZWVkZXNrdG9wLm9yZy9tYWlsbWFu L2xpc3RpbmZvL2FtZC1nZng=