From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mga12.intel.com (mga12.intel.com [192.55.52.136]) by gabe.freedesktop.org (Postfix) with ESMTPS id 579976E8D5 for ; Fri, 29 Nov 2019 10:38:54 +0000 (UTC) From: Imre Deak Date: Fri, 29 Nov 2019 12:38:40 +0200 Message-Id: <20191129103843.5765-4-imre.deak@intel.com> In-Reply-To: <20191129103843.5765-1-imre.deak@intel.com> References: <20191129103843.5765-1-imre.deak@intel.com> MIME-Version: 1.0 Subject: [igt-dev] [PATCH i-g-t 3/6] lib: Move aux pgtable state prepare/emit to intel_aux_pgtable.c List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Errors-To: igt-dev-bounces@lists.freedesktop.org Sender: "igt-dev" To: igt-dev@lists.freedesktop.org Cc: Brian Welty List-ID: VGhlIEFVWCBwYWdldGFibGVzIG5lZWQgdG8gYmUgc2V0IHVwIGZvciBibGl0cyB1c2luZyB0aGUg dmVib3ggZW5naW5lCnRvbywgc28gbW92ZSB0aGUgcmVsYXRlZCBoZWxwZXIgZnVuY3Rpb25zIHRv IGludGVsX2F1eF9wZ3RhYmxlLmMuCgpDYzogTWlrYSBLYWhvbGEgPG1pa2Eua2Fob2xhQGludGVs LmNvbT4KQ2M6IEJyaWFuIFdlbHR5IDxicmlhbi53ZWx0eUBpbnRlbC5jb20+CkNjOiBDaHJpcyBX aWxzb24gPGNocmlzQGNocmlzLXdpbHNvbi5jby51az4KQ2M6IFZpbGxlIFN5cmrDpGzDpCA8dmls bGUuc3lyamFsYUBsaW51eC5pbnRlbC5jb20+ClNpZ25lZC1vZmYtYnk6IEltcmUgRGVhayA8aW1y ZS5kZWFrQGludGVsLmNvbT4KLS0tCiBsaWIvaW50ZWxfYXV4X3BndGFibGUuYyB8IDE5OCArKysr KysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKwogbGliL2ludGVsX2F1eF9wZ3RhYmxl LmggfCAgMjMgKysrKysKIGxpYi9yZW5kZXJjb3B5X2dlbjkuYyAgIHwgMjA1IC0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIDMgZmlsZXMgY2hhbmdlZCwgMjIxIGluc2Vy dGlvbnMoKyksIDIwNSBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9saWIvaW50ZWxfYXV4X3Bn dGFibGUuYyBiL2xpYi9pbnRlbF9hdXhfcGd0YWJsZS5jCmluZGV4IGVhOTA5ZWMwLi4zMTliMjc0 NSAxMDA2NDQKLS0tIGEvbGliL2ludGVsX2F1eF9wZ3RhYmxlLmMKKysrIGIvbGliL2ludGVsX2F1 eF9wZ3RhYmxlLmMKQEAgLTM3MCwzICszNzAsMjAxIEBAIGludGVsX2F1eF9wZ3RhYmxlX2NyZWF0 ZShkcm1faW50ZWxfYnVmbWdyICpidWZtZ3IsCiAKIAlyZXR1cm4gcGd0X2JvOwogfQorCitzdGF0 aWMgdm9pZAorYXV4X3BndGFibGVfZmluZF9tYXhfZnJlZV9yYW5nZShjb25zdCBzdHJ1Y3QgaWd0 X2J1ZiAqKmJ1ZnMsIGludCBidWZfY291bnQsCisJCQkJdWludDY0X3QgKnJhbmdlX3N0YXJ0LCB1 aW50NjRfdCAqcmFuZ2Vfc2l6ZSkKK3sKKwkvKgorCSAqIEtlZXAgdGhlIGZpcnN0IHBhZ2UgcmVz ZXJ2ZWQsIHNvIHdlIGNhbiBkaWZmZXJlbnRpYXRlIHBpbm5lZAorCSAqIG9iamVjdHMgYmFzZWQg b24gYSBub24tTlVMTCBvZmZzZXQuCisJICovCisJdWludDY0X3Qgc3RhcnQgPSAweDEwMDA7CisJ LyogRm9yIG5vdyBhbGxvYyBvbmx5IGZyb20gdGhlIGZpcnN0IDRHQiBhZGRyZXNzIHNwYWNlLiAq LworCWNvbnN0IHVpbnQ2NF90IGVuZCA9IDFVTEwgPDwgMzI7CisJdWludDY0X3QgbWF4X3Jhbmdl X3N0YXJ0ID0gMDsKKwl1aW50NjRfdCBtYXhfcmFuZ2Vfc2l6ZSA9IDA7CisJaW50IGk7CisKKwlm b3IgKGkgPSAwOyBpIDwgYnVmX2NvdW50OyBpKyspIHsKKwkJaWYgKGJ1ZnNbaV0tPmJvLT5vZmZz ZXQ2NCA+PSBlbmQpCisJCQlicmVhazsKKworCQlpZiAoYnVmc1tpXS0+Ym8tPm9mZnNldDY0IC0g c3RhcnQgPiBtYXhfcmFuZ2Vfc2l6ZSkgeworCQkJbWF4X3JhbmdlX3N0YXJ0ID0gc3RhcnQ7CisJ CQltYXhfcmFuZ2Vfc2l6ZSA9IGJ1ZnNbaV0tPmJvLT5vZmZzZXQ2NCAtIHN0YXJ0OworCQl9CisJ CXN0YXJ0ID0gYnVmc1tpXS0+Ym8tPm9mZnNldDY0ICsgYnVmc1tpXS0+Ym8tPnNpemU7CisJfQor CisJaWYgKHN0YXJ0IDwgZW5kICYmIGVuZCAtIHN0YXJ0ID4gbWF4X3JhbmdlX3NpemUpIHsKKwkJ bWF4X3JhbmdlX3N0YXJ0ID0gc3RhcnQ7CisJCW1heF9yYW5nZV9zaXplID0gZW5kIC0gc3RhcnQ7 CisJfQorCisJKnJhbmdlX3N0YXJ0ID0gbWF4X3JhbmdlX3N0YXJ0OworCSpyYW5nZV9zaXplID0g bWF4X3JhbmdlX3NpemU7Cit9CisKK3N0YXRpYyB1aW50NjRfdAorYXV4X3BndGFibGVfZmluZF9m cmVlX3JhbmdlKGNvbnN0IHN0cnVjdCBpZ3RfYnVmICoqYnVmcywgaW50IGJ1Zl9jb3VudCwKKwkJ CSAgICB1aW50MzJfdCBzaXplKQoreworCXVpbnQ2NF90IHJhbmdlX3N0YXJ0OworCXVpbnQ2NF90 IHJhbmdlX3NpemU7CisJLyogQSBjb21wcmVzc2VkIHN1cmZhY2UgbXVzdCBiZSA2NGtCIGFsaWdu ZWQuICovCisJY29uc3QgdWludDMyX3QgYWxpZ24gPSAweDEwMDAwOworCWludCBwYWQ7CisKKwlh dXhfcGd0YWJsZV9maW5kX21heF9mcmVlX3JhbmdlKGJ1ZnMsIGJ1Zl9jb3VudCwKKwkJCQkJJnJh bmdlX3N0YXJ0LCAmcmFuZ2Vfc2l6ZSk7CisKKwlwYWQgPSBBTElHTihyYW5nZV9zdGFydCwgYWxp Z24pIC0gcmFuZ2Vfc3RhcnQ7CisJcmFuZ2Vfc3RhcnQgKz0gcGFkOworCXJhbmdlX3NpemUgLT0g cGFkOworCWlndF9hc3NlcnQocmFuZ2Vfc2l6ZSA+PSBzaXplKTsKKworCXJldHVybiByYW5nZV9z dGFydCArCisJICAgICAgIEFMSUdOX0RPV04ocmFuZCgpICUgKChyYW5nZV9zaXplIC0gc2l6ZSkg KyAxKSwgYWxpZ24pOworfQorCitzdGF0aWMgdm9pZAorYXV4X3BndGFibGVfcmVzZXJ2ZV9yYW5n ZShjb25zdCBzdHJ1Y3QgaWd0X2J1ZiAqKmJ1ZnMsIGludCBidWZfY291bnQsCisJCQkgIGNvbnN0 IHN0cnVjdCBpZ3RfYnVmICpuZXdfYnVmKQoreworCWludCBpOworCisJaWYgKG5ld19idWYtPmF1 eC5zdHJpZGUpIHsKKwkJdWludDY0X3QgcGluX29mZnNldCA9IG5ld19idWYtPmJvLT5vZmZzZXQ2 NDsKKworCQlpZiAoIXBpbl9vZmZzZXQpCisJCQlwaW5fb2Zmc2V0ID0gYXV4X3BndGFibGVfZmlu ZF9mcmVlX3JhbmdlKGJ1ZnMsCisJCQkJCQkJCSBidWZfY291bnQsCisJCQkJCQkJCSBuZXdfYnVm LT5iby0+c2l6ZSk7CisJCWRybV9pbnRlbF9ib19zZXRfc29mdHBpbl9vZmZzZXQobmV3X2J1Zi0+ Ym8sIHBpbl9vZmZzZXQpOworCQlpZ3RfYXNzZXJ0KG5ld19idWYtPmJvLT5vZmZzZXQ2NCA9PSBw aW5fb2Zmc2V0KTsKKwl9CisKKwlmb3IgKGkgPSAwOyBpIDwgYnVmX2NvdW50OyBpKyspCisJCWlm IChidWZzW2ldLT5iby0+b2Zmc2V0NjQgPiBuZXdfYnVmLT5iby0+b2Zmc2V0NjQpCisJCQlicmVh azsKKworCW1lbW1vdmUoJmJ1ZnNbaSArIDFdLCAmYnVmc1tpXSwgc2l6ZW9mKGJ1ZnNbMF0pICog KGJ1Zl9jb3VudCAtIGkpKTsKKworCWJ1ZnNbaV0gPSBuZXdfYnVmOworfQorCit2b2lkCitnZW4x Ml9hdXhfcGd0YWJsZV9pbml0KHN0cnVjdCBhdXhfcGd0YWJsZV9pbmZvICppbmZvLAorCQkgICAg ICAgZHJtX2ludGVsX2J1Zm1nciAqYnVmbWdyLAorCQkgICAgICAgY29uc3Qgc3RydWN0IGlndF9i dWYgKnNyY19idWYsCisJCSAgICAgICBjb25zdCBzdHJ1Y3QgaWd0X2J1ZiAqZHN0X2J1ZikKK3sK Kwljb25zdCBzdHJ1Y3QgaWd0X2J1ZiAqYnVmc1syXTsKKwljb25zdCBzdHJ1Y3QgaWd0X2J1ZiAq cmVzZXJ2ZWRfYnVmc1syXTsKKwlpbnQgcmVzZXJ2ZWRfYnVmX2NvdW50OworCWludCBpOworCisJ aWYgKCFzcmNfYnVmLT5hdXguc3RyaWRlICYmICFkc3RfYnVmLT5hdXguc3RyaWRlKQorCQlyZXR1 cm47CisKKwlidWZzWzBdID0gc3JjX2J1ZjsKKwlidWZzWzFdID0gZHN0X2J1ZjsKKworCS8qCisJ ICogSWRlYWxseSB3ZSdkIG5lZWQgYW4gSUdULXdpZGUgR0ZYIGFkZHJlc3Mgc3BhY2UgYWxsb2Nh dG9yLCB3aGljaAorCSAqIHdvdWxkIGNvbnNpZGVyIGFsbCBhbGxvY2F0aW9ucyBhbmQgdGh1cyBh dm9pZCBldmljdGlvbnMuIEZvciBub3cgdXNlCisJICogYSBzaW1wbGVyIHNjaGVtZSBoZXJlLCB3 aGljaCBvbmx5IGNvbnNpZGVycyB0aGUgYnVmZmVycyBpbnZvbHZlZCBpbgorCSAqIHRoZSBibGl0 LCB3aGljaCBzaG91bGQgYXQgbGVhc3QgbWluaW1pemUgdGhlIGNoYW5jZSBmb3IgZXZpY3Rpb25z CisJICogaW4gdGhlIGNhc2Ugb2Ygc3Vic2VxdWVudCBibGl0czoKKwkgKiAgIDEuIElmIHRoZXkg d2VyZSBhbHJlYWR5IGJvdW5kIChiby0+b2Zmc2V0NjQgIT0gMCksIHVzZSB0aGlzCisJICogICAg ICBhZGRyZXNzLgorCSAqICAgMi4gUGljayBhIHJhbmdlIHJhbmRvbWx5IGZyb20gdGhlIDRHQiBh ZGRyZXNzIHNwYWNlLCB0aGF0IGlzIG5vdAorCSAqICAgICAgYWxyZWFkeSBvY2N1cGllZCBieSBh IGJvdW5kIG9iamVjdCwgb3IgYW4gb2JqZWN0IHdlIHBpbm5lZC4KKwkgKi8KKwlyZXNlcnZlZF9i dWZfY291bnQgPSAwOworCS8qIEZpcnN0IHJlc2VydmUgc3BhY2UgZm9yIGFueSBidWZzIHRoYXQg YXJlIGJvdW5kIGFscmVhZHkuICovCisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoYnVmcyk7 IGkrKykKKwkJaWYgKGJ1ZnNbaV0tPmJvLT5vZmZzZXQ2NCkKKwkJCWF1eF9wZ3RhYmxlX3Jlc2Vy dmVfcmFuZ2UocmVzZXJ2ZWRfYnVmcywKKwkJCQkJCSAgcmVzZXJ2ZWRfYnVmX2NvdW50KyssCisJ CQkJCQkgIGJ1ZnNbaV0pOworCisJLyogTmV4dCwgcmVzZXJ2ZSBzcGFjZSBmb3IgdW5ib3VuZCBi dWZzIHdpdGggYW4gQVVYIHN1cmZhY2UuICovCisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUo YnVmcyk7IGkrKykKKwkJaWYgKCFidWZzW2ldLT5iby0+b2Zmc2V0NjQgJiYgYnVmc1tpXS0+YXV4 LnN0cmlkZSkKKwkJCWF1eF9wZ3RhYmxlX3Jlc2VydmVfcmFuZ2UocmVzZXJ2ZWRfYnVmcywKKwkJ CQkJCSAgcmVzZXJ2ZWRfYnVmX2NvdW50KyssCisJCQkJCQkgIGJ1ZnNbaV0pOworCisJLyogQ3Jl YXRlIEFVWCBwZ3RhYmxlIGVudHJpZXMgb25seSBmb3IgYnVmcyB3aXRoIGFuIEFVWCBzdXJmYWNl ICovCisJaW5mby0+YnVmX2NvdW50ID0gMDsKKwlmb3IgKGkgPSAwOyBpIDwgcmVzZXJ2ZWRfYnVm X2NvdW50OyBpKyspIHsKKwkJaWYgKCFyZXNlcnZlZF9idWZzW2ldLT5hdXguc3RyaWRlKQorCQkJ Y29udGludWU7CisKKwkJaW5mby0+YnVmc1tpbmZvLT5idWZfY291bnRdID0gcmVzZXJ2ZWRfYnVm c1tpXTsKKwkJaW5mby0+YnVmX3Bpbl9vZmZzZXRzW2luZm8tPmJ1Zl9jb3VudF0gPQorCQkJcmVz ZXJ2ZWRfYnVmc1tpXS0+Ym8tPm9mZnNldDY0OworCQlpbmZvLT5idWZfY291bnQrKzsKKwl9CisK KwlpbmZvLT5wZ3RhYmxlX2JvID0gaW50ZWxfYXV4X3BndGFibGVfY3JlYXRlKGJ1Zm1nciwKKwkJ CQkJCSAgICBpbmZvLT5idWZzLAorCQkJCQkJICAgIGluZm8tPmJ1Zl9jb3VudCk7CisJaWd0X2Fz c2VydChpbmZvLT5wZ3RhYmxlX2JvKTsKK30KKwordm9pZAorZ2VuMTJfYXV4X3BndGFibGVfY2xl YW51cChzdHJ1Y3QgYXV4X3BndGFibGVfaW5mbyAqaW5mbykKK3sKKwlpbnQgaTsKKworCS8qIENo ZWNrIHRoYXQgdGhlIHBpbm5lZCBidWZzIGtlcHQgdGhlaXIgb2Zmc2V0IGFmdGVyIHRoZSBleGVj LiAqLworCWZvciAoaSA9IDA7IGkgPCBpbmZvLT5idWZfY291bnQ7IGkrKykKKwkJaWd0X2Fzc2Vy dF9lcV91NjQoaW5mby0+YnVmc1tpXS0+Ym8tPm9mZnNldDY0LAorCQkJCSAgaW5mby0+YnVmX3Bp bl9vZmZzZXRzW2ldKTsKKworCWRybV9pbnRlbF9ib191bnJlZmVyZW5jZShpbmZvLT5wZ3RhYmxl X2JvKTsKK30KKwordWludDMyX3QKK2dlbjEyX2NyZWF0ZV9hdXhfcGd0YWJsZV9zdGF0ZShzdHJ1 Y3QgaW50ZWxfYmF0Y2hidWZmZXIgKmJhdGNoLAorCQkJICAgICAgIGRybV9pbnRlbF9ibyAqYXV4 X3BndGFibGVfYm8pCit7CisJdWludDY0X3QgKnBndGFibGVfcHRyOworCXVpbnQzMl90IHBndGFi bGVfcHRyX29mZnNldDsKKwlpbnQgcmV0OworCisJaWYgKCFhdXhfcGd0YWJsZV9ibykKKwkJcmV0 dXJuIDA7CisKKwlwZ3RhYmxlX3B0ciA9IGludGVsX2JhdGNoYnVmZmVyX3N1YmRhdGFfYWxsb2Mo YmF0Y2gsCisJCQkJCQkgICAgICBzaXplb2YoKnBndGFibGVfcHRyKSwKKwkJCQkJCSAgICAgIHNp emVvZigqcGd0YWJsZV9wdHIpKTsKKwlwZ3RhYmxlX3B0cl9vZmZzZXQgPSBpbnRlbF9iYXRjaGJ1 ZmZlcl9zdWJkYXRhX29mZnNldChiYXRjaCwKKwkJCQkJCQkgICAgICBwZ3RhYmxlX3B0cik7CisK KwkqcGd0YWJsZV9wdHIgPSBhdXhfcGd0YWJsZV9iby0+b2Zmc2V0NjQ7CisJcmV0ID0gZHJtX2lu dGVsX2JvX2VtaXRfcmVsb2MoYmF0Y2gtPmJvLCBwZ3RhYmxlX3B0cl9vZmZzZXQsCisJCQkJICAg ICAgYXV4X3BndGFibGVfYm8sIDAsCisJCQkJICAgICAgMCwgMCk7CisJYXNzZXJ0KHJldCA9PSAw KTsKKworCXJldHVybiBwZ3RhYmxlX3B0cl9vZmZzZXQ7Cit9CisKK3ZvaWQKK2dlbjEyX2VtaXRf YXV4X3BndGFibGVfc3RhdGUoc3RydWN0IGludGVsX2JhdGNoYnVmZmVyICpiYXRjaCwgdWludDMy X3Qgc3RhdGUpCit7CisJaWYgKCFzdGF0ZSkKKwkJcmV0dXJuOworCisJT1VUX0JBVENIKE1JX0xP QURfUkVHSVNURVJfTUVNX0dFTjgpOworCU9VVF9CQVRDSChHRU4xMl9HRlhfQVVYX1RBQkxFX0JB U0VfQUREUik7CisJT1VUX1JFTE9DKGJhdGNoLT5ibywgMCwgMCwgc3RhdGUpOworCisJT1VUX0JB VENIKE1JX0xPQURfUkVHSVNURVJfTUVNX0dFTjgpOworCU9VVF9CQVRDSChHRU4xMl9HRlhfQVVY X1RBQkxFX0JBU0VfQUREUiArIDQpOworCU9VVF9SRUxPQyhiYXRjaC0+Ym8sIDAsIDAsIHN0YXRl ICsgNCk7Cit9CmRpZmYgLS1naXQgYS9saWIvaW50ZWxfYXV4X3BndGFibGUuaCBiL2xpYi9pbnRl bF9hdXhfcGd0YWJsZS5oCmluZGV4IGMwZjAwMWI0Li4yMDI3OGRiMCAxMDA2NDQKLS0tIGEvbGli L2ludGVsX2F1eF9wZ3RhYmxlLmgKKysrIGIvbGliL2ludGVsX2F1eF9wZ3RhYmxlLmgKQEAgLTQs OSArNCwzMiBAQAogI2luY2x1ZGUgImludGVsX2J1Zm1nci5oIgogCiBzdHJ1Y3QgaWd0X2J1ZjsK K3N0cnVjdCBpbnRlbF9iYXRjaGJ1ZmZlcjsKKworc3RydWN0IGF1eF9wZ3RhYmxlX2luZm8gewor CWludCBidWZfY291bnQ7CisJY29uc3Qgc3RydWN0IGlndF9idWYgKmJ1ZnNbMl07CisJdWludDY0 X3QgYnVmX3Bpbl9vZmZzZXRzWzJdOworCWRybV9pbnRlbF9ibyAqcGd0YWJsZV9ibzsKK307CiAK IGRybV9pbnRlbF9ibyAqCiBpbnRlbF9hdXhfcGd0YWJsZV9jcmVhdGUoZHJtX2ludGVsX2J1Zm1n ciAqYnVmbWdyLAogCQkJIGNvbnN0IHN0cnVjdCBpZ3RfYnVmICoqYnVmcywgaW50IGJ1Zl9jb3Vu dCk7CiAKK3ZvaWQKK2dlbjEyX2F1eF9wZ3RhYmxlX2luaXQoc3RydWN0IGF1eF9wZ3RhYmxlX2lu Zm8gKmluZm8sCisJCSAgICAgICBkcm1faW50ZWxfYnVmbWdyICpidWZtZ3IsCisJCSAgICAgICBj b25zdCBzdHJ1Y3QgaWd0X2J1ZiAqc3JjX2J1ZiwKKwkJICAgICAgIGNvbnN0IHN0cnVjdCBpZ3Rf YnVmICpkc3RfYnVmKTsKKwordm9pZAorZ2VuMTJfYXV4X3BndGFibGVfY2xlYW51cChzdHJ1Y3Qg YXV4X3BndGFibGVfaW5mbyAqaW5mbyk7CisKK3VpbnQzMl90CitnZW4xMl9jcmVhdGVfYXV4X3Bn dGFibGVfc3RhdGUoc3RydWN0IGludGVsX2JhdGNoYnVmZmVyICpiYXRjaCwKKwkJCSAgICAgICBk cm1faW50ZWxfYm8gKmF1eF9wZ3RhYmxlX2JvKTsKK3ZvaWQKK2dlbjEyX2VtaXRfYXV4X3BndGFi bGVfc3RhdGUoc3RydWN0IGludGVsX2JhdGNoYnVmZmVyICpiYXRjaCwgdWludDMyX3Qgc3RhdGUp OworCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYi9yZW5kZXJjb3B5X2dlbjkuYyBiL2xpYi9yZW5k ZXJjb3B5X2dlbjkuYwppbmRleCAzMTg5NTk0Zi4uOTRlODE2YjYgMTAwNjQ0Ci0tLSBhL2xpYi9y ZW5kZXJjb3B5X2dlbjkuYworKysgYi9saWIvcmVuZGVyY29weV9nZW45LmMKQEAgLTk3MywyMTEg Kzk3Myw2IEBAIHN0YXRpYyB2b2lkIGdlbjhfZW1pdF9wcmltaXRpdmUoc3RydWN0IGludGVsX2Jh dGNoYnVmZmVyICpiYXRjaCwgdWludDMyX3Qgb2Zmc2V0CiAKICNkZWZpbmUgQkFUQ0hfU1RBVEVf U1BMSVQgMjA0OAogCi1zdGF0aWMgdm9pZAotYXV4X3BndGFibGVfZmluZF9tYXhfZnJlZV9yYW5n ZShjb25zdCBzdHJ1Y3QgaWd0X2J1ZiAqKmJ1ZnMsIGludCBidWZfY291bnQsCi0JCQkJdWludDY0 X3QgKnJhbmdlX3N0YXJ0LCB1aW50NjRfdCAqcmFuZ2Vfc2l6ZSkKLXsKLQkvKgotCSAqIEtlZXAg dGhlIGZpcnN0IHBhZ2UgcmVzZXJ2ZWQsIHNvIHdlIGNhbiBkaWZmZXJlbnRpYXRlIHBpbm5lZAot CSAqIG9iamVjdHMgYmFzZWQgb24gYSBub24tTlVMTCBvZmZzZXQuCi0JICovCi0JdWludDY0X3Qg c3RhcnQgPSAweDEwMDA7Ci0JLyogRm9yIG5vdyBhbGxvYyBvbmx5IGZyb20gdGhlIGZpcnN0IDRH QiBhZGRyZXNzIHNwYWNlLiAqLwotCWNvbnN0IHVpbnQ2NF90IGVuZCA9IDFVTEwgPDwgMzI7Ci0J dWludDY0X3QgbWF4X3JhbmdlX3N0YXJ0ID0gMDsKLQl1aW50NjRfdCBtYXhfcmFuZ2Vfc2l6ZSA9 IDA7Ci0JaW50IGk7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgYnVmX2NvdW50OyBpKyspIHsKLQkJaWYg KGJ1ZnNbaV0tPmJvLT5vZmZzZXQ2NCA+PSBlbmQpCi0JCQlicmVhazsKLQotCQlpZiAoYnVmc1tp XS0+Ym8tPm9mZnNldDY0IC0gc3RhcnQgPiBtYXhfcmFuZ2Vfc2l6ZSkgewotCQkJbWF4X3Jhbmdl X3N0YXJ0ID0gc3RhcnQ7Ci0JCQltYXhfcmFuZ2Vfc2l6ZSA9IGJ1ZnNbaV0tPmJvLT5vZmZzZXQ2 NCAtIHN0YXJ0OwotCQl9Ci0JCXN0YXJ0ID0gYnVmc1tpXS0+Ym8tPm9mZnNldDY0ICsgYnVmc1tp XS0+Ym8tPnNpemU7Ci0JfQotCi0JaWYgKHN0YXJ0IDwgZW5kICYmIGVuZCAtIHN0YXJ0ID4gbWF4 X3JhbmdlX3NpemUpIHsKLQkJbWF4X3JhbmdlX3N0YXJ0ID0gc3RhcnQ7Ci0JCW1heF9yYW5nZV9z aXplID0gZW5kIC0gc3RhcnQ7Ci0JfQotCi0JKnJhbmdlX3N0YXJ0ID0gbWF4X3JhbmdlX3N0YXJ0 OwotCSpyYW5nZV9zaXplID0gbWF4X3JhbmdlX3NpemU7Ci19Ci0KLXN0YXRpYyB1aW50NjRfdAot YXV4X3BndGFibGVfZmluZF9mcmVlX3JhbmdlKGNvbnN0IHN0cnVjdCBpZ3RfYnVmICoqYnVmcywg aW50IGJ1Zl9jb3VudCwKLQkJCSAgICB1aW50MzJfdCBzaXplKQotewotCXVpbnQ2NF90IHJhbmdl X3N0YXJ0OwotCXVpbnQ2NF90IHJhbmdlX3NpemU7Ci0JLyogQSBjb21wcmVzc2VkIHN1cmZhY2Ug bXVzdCBiZSA2NGtCIGFsaWduZWQuICovCi0JY29uc3QgdWludDMyX3QgYWxpZ24gPSAweDEwMDAw OwotCWludCBwYWQ7Ci0KLQlhdXhfcGd0YWJsZV9maW5kX21heF9mcmVlX3JhbmdlKGJ1ZnMsIGJ1 Zl9jb3VudCwKLQkJCQkJJnJhbmdlX3N0YXJ0LCAmcmFuZ2Vfc2l6ZSk7Ci0KLQlwYWQgPSBBTElH TihyYW5nZV9zdGFydCwgYWxpZ24pIC0gcmFuZ2Vfc3RhcnQ7Ci0JcmFuZ2Vfc3RhcnQgKz0gcGFk OwotCXJhbmdlX3NpemUgLT0gcGFkOwotCWlndF9hc3NlcnQocmFuZ2Vfc2l6ZSA+PSBzaXplKTsK LQotCXJldHVybiByYW5nZV9zdGFydCArCi0JICAgICAgIEFMSUdOX0RPV04ocmFuZCgpICUgKChy YW5nZV9zaXplIC0gc2l6ZSkgKyAxKSwgYWxpZ24pOwotfQotCi1zdGF0aWMgdm9pZAotYXV4X3Bn dGFibGVfcmVzZXJ2ZV9yYW5nZShjb25zdCBzdHJ1Y3QgaWd0X2J1ZiAqKmJ1ZnMsIGludCBidWZf Y291bnQsCi0JCQkgIGNvbnN0IHN0cnVjdCBpZ3RfYnVmICpuZXdfYnVmKQotewotCWludCBpOwot Ci0JaWYgKG5ld19idWYtPmF1eC5zdHJpZGUpIHsKLQkJdWludDY0X3QgcGluX29mZnNldCA9IG5l d19idWYtPmJvLT5vZmZzZXQ2NDsKLQotCQlpZiAoIXBpbl9vZmZzZXQpCi0JCQlwaW5fb2Zmc2V0 ID0gYXV4X3BndGFibGVfZmluZF9mcmVlX3JhbmdlKGJ1ZnMsCi0JCQkJCQkJCSBidWZfY291bnQs Ci0JCQkJCQkJCSBuZXdfYnVmLT5iby0+c2l6ZSk7Ci0JCWRybV9pbnRlbF9ib19zZXRfc29mdHBp bl9vZmZzZXQobmV3X2J1Zi0+Ym8sIHBpbl9vZmZzZXQpOwotCQlpZ3RfYXNzZXJ0KG5ld19idWYt PmJvLT5vZmZzZXQ2NCA9PSBwaW5fb2Zmc2V0KTsKLQl9Ci0KLQlmb3IgKGkgPSAwOyBpIDwgYnVm X2NvdW50OyBpKyspCi0JCWlmIChidWZzW2ldLT5iby0+b2Zmc2V0NjQgPiBuZXdfYnVmLT5iby0+ b2Zmc2V0NjQpCi0JCQlicmVhazsKLQotCW1lbW1vdmUoJmJ1ZnNbaSArIDFdLCAmYnVmc1tpXSwg c2l6ZW9mKGJ1ZnNbMF0pICogKGJ1Zl9jb3VudCAtIGkpKTsKLQotCWJ1ZnNbaV0gPSBuZXdfYnVm OwotfQotCi1zdHJ1Y3QgYXV4X3BndGFibGVfaW5mbyB7Ci0JaW50IGJ1Zl9jb3VudDsKLQljb25z dCBzdHJ1Y3QgaWd0X2J1ZiAqYnVmc1syXTsKLQl1aW50NjRfdCBidWZfcGluX29mZnNldHNbMl07 Ci0JZHJtX2ludGVsX2JvICpwZ3RhYmxlX2JvOwotfTsKLQotc3RhdGljIHZvaWQKLWdlbjEyX2F1 eF9wZ3RhYmxlX2luaXQoc3RydWN0IGF1eF9wZ3RhYmxlX2luZm8gKmluZm8sCi0JCSAgICAgICBk cm1faW50ZWxfYnVmbWdyICpidWZtZ3IsCi0JCSAgICAgICBjb25zdCBzdHJ1Y3QgaWd0X2J1ZiAq c3JjX2J1ZiwKLQkJICAgICAgIGNvbnN0IHN0cnVjdCBpZ3RfYnVmICpkc3RfYnVmKQotewotCWNv bnN0IHN0cnVjdCBpZ3RfYnVmICpidWZzWzJdOwotCWNvbnN0IHN0cnVjdCBpZ3RfYnVmICpyZXNl cnZlZF9idWZzWzJdOwotCWludCByZXNlcnZlZF9idWZfY291bnQ7Ci0JaW50IGk7Ci0KLQlpZiAo IXNyY19idWYtPmF1eC5zdHJpZGUgJiYgIWRzdF9idWYtPmF1eC5zdHJpZGUpCi0JCXJldHVybjsK LQotCWJ1ZnNbMF0gPSBzcmNfYnVmOwotCWJ1ZnNbMV0gPSBkc3RfYnVmOwotCi0JLyoKLQkgKiBJ ZGVhbGx5IHdlJ2QgbmVlZCBhbiBJR1Qtd2lkZSBHRlggYWRkcmVzcyBzcGFjZSBhbGxvY2F0b3Is IHdoaWNoCi0JICogd291bGQgY29uc2lkZXIgYWxsIGFsbG9jYXRpb25zIGFuZCB0aHVzIGF2b2lk IGV2aWN0aW9ucy4gRm9yIG5vdyB1c2UKLQkgKiBhIHNpbXBsZXIgc2NoZW1lIGhlcmUsIHdoaWNo IG9ubHkgY29uc2lkZXJzIHRoZSBidWZmZXJzIGludm9sdmVkIGluCi0JICogdGhlIGJsaXQsIHdo aWNoIHNob3VsZCBhdCBsZWFzdCBtaW5pbWl6ZSB0aGUgY2hhbmNlIGZvciBldmljdGlvbnMKLQkg KiBpbiB0aGUgY2FzZSBvZiBzdWJzZXF1ZW50IGJsaXRzOgotCSAqICAgMS4gSWYgdGhleSB3ZXJl IGFscmVhZHkgYm91bmQgKGJvLT5vZmZzZXQ2NCAhPSAwKSwgdXNlIHRoaXMKLQkgKiAgICAgIGFk ZHJlc3MuCi0JICogICAyLiBQaWNrIGEgcmFuZ2UgcmFuZG9tbHkgZnJvbSB0aGUgNEdCIGFkZHJl c3Mgc3BhY2UsIHRoYXQgaXMgbm90Ci0JICogICAgICBhbHJlYWR5IG9jY3VwaWVkIGJ5IGEgYm91 bmQgb2JqZWN0LCBvciBhbiBvYmplY3Qgd2UgcGlubmVkLgotCSAqLwotCXJlc2VydmVkX2J1Zl9j b3VudCA9IDA7Ci0JLyogRmlyc3QgcmVzZXJ2ZSBzcGFjZSBmb3IgYW55IGJ1ZnMgdGhhdCBhcmUg Ym91bmQgYWxyZWFkeS4gKi8KLQlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShidWZzKTsgaSsr KQotCQlpZiAoYnVmc1tpXS0+Ym8tPm9mZnNldDY0KQotCQkJYXV4X3BndGFibGVfcmVzZXJ2ZV9y YW5nZShyZXNlcnZlZF9idWZzLAotCQkJCQkJICByZXNlcnZlZF9idWZfY291bnQrKywKLQkJCQkJ CSAgYnVmc1tpXSk7Ci0KLQkvKiBOZXh0LCByZXNlcnZlIHNwYWNlIGZvciB1bmJvdW5kIGJ1ZnMg d2l0aCBhbiBBVVggc3VyZmFjZS4gKi8KLQlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShidWZz KTsgaSsrKQotCQlpZiAoIWJ1ZnNbaV0tPmJvLT5vZmZzZXQ2NCAmJiBidWZzW2ldLT5hdXguc3Ry aWRlKQotCQkJYXV4X3BndGFibGVfcmVzZXJ2ZV9yYW5nZShyZXNlcnZlZF9idWZzLAotCQkJCQkJ ICByZXNlcnZlZF9idWZfY291bnQrKywKLQkJCQkJCSAgYnVmc1tpXSk7Ci0KLQkvKiBDcmVhdGUg QVVYIHBndGFibGUgZW50cmllcyBvbmx5IGZvciBidWZzIHdpdGggYW4gQVVYIHN1cmZhY2UgKi8K LQlpbmZvLT5idWZfY291bnQgPSAwOwotCWZvciAoaSA9IDA7IGkgPCByZXNlcnZlZF9idWZfY291 bnQ7IGkrKykgewotCQlpZiAoIXJlc2VydmVkX2J1ZnNbaV0tPmF1eC5zdHJpZGUpCi0JCQljb250 aW51ZTsKLQotCQlpbmZvLT5idWZzW2luZm8tPmJ1Zl9jb3VudF0gPSByZXNlcnZlZF9idWZzW2ld OwotCQlpbmZvLT5idWZfcGluX29mZnNldHNbaW5mby0+YnVmX2NvdW50XSA9Ci0JCQlyZXNlcnZl ZF9idWZzW2ldLT5iby0+b2Zmc2V0NjQ7Ci0JCWluZm8tPmJ1Zl9jb3VudCsrOwotCX0KLQotCWlu Zm8tPnBndGFibGVfYm8gPSBpbnRlbF9hdXhfcGd0YWJsZV9jcmVhdGUoYnVmbWdyLAotCQkJCQkJ ICAgIGluZm8tPmJ1ZnMsCi0JCQkJCQkgICAgaW5mby0+YnVmX2NvdW50KTsKLQlpZ3RfYXNzZXJ0 KGluZm8tPnBndGFibGVfYm8pOwotfQotCi1zdGF0aWMgdm9pZAotZ2VuMTJfYXV4X3BndGFibGVf Y2xlYW51cChzdHJ1Y3QgYXV4X3BndGFibGVfaW5mbyAqaW5mbykKLXsKLQlpbnQgaTsKLQotCS8q IENoZWNrIHRoYXQgdGhlIHBpbm5lZCBidWZzIGtlcHQgdGhlaXIgb2Zmc2V0IGFmdGVyIHRoZSBl eGVjLiAqLwotCWZvciAoaSA9IDA7IGkgPCBpbmZvLT5idWZfY291bnQ7IGkrKykKLQkJaWd0X2Fz c2VydF9lcV91NjQoaW5mby0+YnVmc1tpXS0+Ym8tPm9mZnNldDY0LAotCQkJCSAgaW5mby0+YnVm X3Bpbl9vZmZzZXRzW2ldKTsKLQotCWRybV9pbnRlbF9ib191bnJlZmVyZW5jZShpbmZvLT5wZ3Rh YmxlX2JvKTsKLX0KLQotc3RhdGljIHVpbnQzMl90Ci1nZW4xMl9jcmVhdGVfYXV4X3BndGFibGVf c3RhdGUoc3RydWN0IGludGVsX2JhdGNoYnVmZmVyICpiYXRjaCwKLQkJCSAgICAgICBkcm1faW50 ZWxfYm8gKmF1eF9wZ3RhYmxlX2JvKQotewotCXVpbnQ2NF90ICpwZ3RhYmxlX3B0cjsKLQl1aW50 MzJfdCBwZ3RhYmxlX3B0cl9vZmZzZXQ7Ci0JaW50IHJldDsKLQotCWlmICghYXV4X3BndGFibGVf Ym8pCi0JCXJldHVybiAwOwotCi0JcGd0YWJsZV9wdHIgPSBpbnRlbF9iYXRjaGJ1ZmZlcl9zdWJk YXRhX2FsbG9jKGJhdGNoLAotCQkJCQkJICAgICAgc2l6ZW9mKCpwZ3RhYmxlX3B0ciksCi0JCQkJ CQkgICAgICBzaXplb2YoKnBndGFibGVfcHRyKSk7Ci0JcGd0YWJsZV9wdHJfb2Zmc2V0ID0gaW50 ZWxfYmF0Y2hidWZmZXJfc3ViZGF0YV9vZmZzZXQoYmF0Y2gsCi0JCQkJCQkJICAgICAgcGd0YWJs ZV9wdHIpOwotCi0JKnBndGFibGVfcHRyID0gYXV4X3BndGFibGVfYm8tPm9mZnNldDY0OwotCXJl dCA9IGRybV9pbnRlbF9ib19lbWl0X3JlbG9jKGJhdGNoLT5ibywgcGd0YWJsZV9wdHJfb2Zmc2V0 LAotCQkJCSAgICAgIGF1eF9wZ3RhYmxlX2JvLCAwLAotCQkJCSAgICAgIDAsIDApOwotCWFzc2Vy dChyZXQgPT0gMCk7Ci0KLQlyZXR1cm4gcGd0YWJsZV9wdHJfb2Zmc2V0OwotfQotCi1zdGF0aWMg dm9pZAotZ2VuMTJfZW1pdF9hdXhfcGd0YWJsZV9zdGF0ZShzdHJ1Y3QgaW50ZWxfYmF0Y2hidWZm ZXIgKmJhdGNoLCB1aW50MzJfdCBzdGF0ZSkKLXsKLQlpZiAoIXN0YXRlKQotCQlyZXR1cm47Ci0K LQlPVVRfQkFUQ0goTUlfTE9BRF9SRUdJU1RFUl9NRU1fR0VOOCk7Ci0JT1VUX0JBVENIKEdFTjEy X0dGWF9BVVhfVEFCTEVfQkFTRV9BRERSKTsKLQlPVVRfUkVMT0MoYmF0Y2gtPmJvLCAwLCAwLCBz dGF0ZSk7Ci0KLQlPVVRfQkFUQ0goTUlfTE9BRF9SRUdJU1RFUl9NRU1fR0VOOCk7Ci0JT1VUX0JB VENIKEdFTjEyX0dGWF9BVVhfVEFCTEVfQkFTRV9BRERSICsgNCk7Ci0JT1VUX1JFTE9DKGJhdGNo LT5ibywgMCwgMCwgc3RhdGUgKyA0KTsKLX0KLQogc3RhdGljCiB2b2lkIF9nZW45X3JlbmRlcl9j b3B5ZnVuYyhzdHJ1Y3QgaW50ZWxfYmF0Y2hidWZmZXIgKmJhdGNoLAogCQkJICBkcm1faW50ZWxf Y29udGV4dCAqY29udGV4dCwKLS0gCjIuMTcuMQoKX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX18KaWd0LWRldiBtYWlsaW5nIGxpc3QKaWd0LWRldkBsaXN0cy5m cmVlZGVza3RvcC5vcmcKaHR0cHM6Ly9saXN0cy5mcmVlZGVza3RvcC5vcmcvbWFpbG1hbi9saXN0 aW5mby9pZ3QtZGV2