From mboxrd@z Thu Jan 1 00:00:00 1970 From: Saeed Mahameed Subject: [PATCH mlx5-next 13/16] net/mlx5: Move all IRQ logic to pci_irq.c Date: Mon, 10 Jun 2019 23:38:37 +0000 Message-ID: <20190610233733.12155-14-saeedm@mellanox.com> References: <20190610233733.12155-1-saeedm@mellanox.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <20190610233733.12155-1-saeedm@mellanox.com> Content-Language: en-US Sender: netdev-owner@vger.kernel.org To: Saeed Mahameed , Leon Romanovsky Cc: "linux-rdma@vger.kernel.org" , "netdev@vger.kernel.org" , Yuval Avnery , Parav Pandit List-Id: linux-rdma@vger.kernel.org RnJvbTogWXV2YWwgQXZuZXJ5IDx5dXZhbGF2QG1lbGxhbm94LmNvbT4NCg0KRmluYWxpemUgSVJR IHNlcGFyYXRpb24gYW5kIGV4cG9zZSBpcnEgaW50ZXJmYWNlLg0KDQpTaWduZWQtb2ZmLWJ5OiBZ dXZhbCBBdm5lcnkgPHl1dmFsYXZAbWVsbGFub3guY29tPg0KUmV2aWV3ZWQtYnk6IFBhcmF2IFBh bmRpdCA8cGFyYXZAbWVsbGFub3guY29tPg0KU2lnbmVkLW9mZi1ieTogU2FlZWQgTWFoYW1lZWQg PHNhZWVkbUBtZWxsYW5veC5jb20+DQotLS0NCiAuLi4vbmV0L2V0aGVybmV0L21lbGxhbm94L21s eDUvY29yZS9NYWtlZmlsZSAgfCAgIDIgKy0NCiBkcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5v eC9tbHg1L2NvcmUvZXEuYyAgfCAzMjcgLS0tLS0tLS0tLS0tLS0tLS0NCiAuLi4vbmV0L2V0aGVy bmV0L21lbGxhbm94L21seDUvY29yZS9saWIvZXEuaCAgfCAgIDEgLQ0KIC4uLi9ldGhlcm5ldC9t ZWxsYW5veC9tbHg1L2NvcmUvbWx4NV9jb3JlLmggICB8ICAgOCArDQogLi4uL25ldC9ldGhlcm5l dC9tZWxsYW5veC9tbHg1L2NvcmUvcGNpX2lycS5jIHwgMzQ1ICsrKysrKysrKysrKysrKysrKw0K IDUgZmlsZXMgY2hhbmdlZCwgMzU0IGluc2VydGlvbnMoKyksIDMyOSBkZWxldGlvbnMoLSkNCiBj cmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3Jl L3BjaV9pcnEuYw0KDQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gv bWx4NS9jb3JlL01ha2VmaWxlIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9j b3JlL01ha2VmaWxlDQppbmRleCAyNDMzNjhkYzIzZGIuLmNmOGQyYjc0YTJmYyAxMDA2NDQNCi0t LSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9NYWtlZmlsZQ0KKysr IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL01ha2VmaWxlDQpAQCAt MTMsNyArMTMsNyBAQCBvYmotJChDT05GSUdfTUxYNV9DT1JFKSArPSBtbHg1X2NvcmUubw0KICMN CiBtbHg1X2NvcmUteSA6PQltYWluLm8gY21kLm8gZGVidWdmcy5vIGZ3Lm8gZXEubyB1YXIubyBw YWdlYWxsb2MubyBcDQogCQloZWFsdGgubyBtY2cubyBjcS5vIGFsbG9jLm8gcXAubyBwb3J0Lm8g bXIubyBwZC5vIFwNCi0JCXRyYW5zb2JqLm8gdnBvcnQubyBzcmlvdi5vIGZzX2NtZC5vIGZzX2Nv cmUubyBcDQorCQl0cmFuc29iai5vIHZwb3J0Lm8gc3Jpb3YubyBmc19jbWQubyBmc19jb3JlLm8g cGNpX2lycS5vIFwNCiAJCWZzX2NvdW50ZXJzLm8gcmwubyBsYWcubyBkZXYubyBldmVudHMubyB3 cS5vIGxpYi9naWQubyBcDQogCQlsaWIvZGV2Y29tLm8gZGlhZy9mc190cmFjZXBvaW50Lm8gZGlh Zy9md190cmFjZXIubw0KIA0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxh bm94L21seDUvY29yZS9lcS5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9j b3JlL2VxLmMNCmluZGV4IDgwYTQzNmI1MDM0YS4uMGM3MmMxMjJkYWVmIDEwMDY0NA0KLS0tIGEv ZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2VxLmMNCisrKyBiL2RyaXZl cnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9lcS5jDQpAQCAtNzEsMjAgKzcxLDYg QEAgZW51bSB7DQogDQogc3RhdGljX2Fzc2VydChNTFg1X0VRX1BPTExJTkdfQlVER0VUIDw9IE1M WDVfTlVNX1NQQVJFX0VRRSk7DQogDQotc3RydWN0IG1seDVfaXJxX2luZm8gew0KLQlzdHJ1Y3Qg YXRvbWljX25vdGlmaWVyX2hlYWQgbmg7DQotCWNwdW1hc2tfdmFyX3QgbWFzazsNCi0JY2hhciBu YW1lW01MWDVfTUFYX0lSUV9OQU1FXTsNCi19Ow0KLQ0KLXN0cnVjdCBtbHg1X2lycV90YWJsZSB7 DQotCXN0cnVjdCBtbHg1X2lycV9pbmZvICppcnFfaW5mbzsNCi0JaW50IG52ZWM7DQotI2lmZGVm IENPTkZJR19SRlNfQUNDRUwNCi0Jc3RydWN0IGNwdV9ybWFwICpybWFwOw0KLSNlbmRpZg0KLX07 DQotDQogc3RydWN0IG1seDVfZXFfdGFibGUgew0KIAlzdHJ1Y3QgbGlzdF9oZWFkICAgICAgICBj b21wX2Vxc19saXN0Ow0KIAlzdHJ1Y3QgbWx4NV9lcV9hc3luYyAgICBwYWdlc19lcTsNCkBAIC0x MTQsMTU3ICsxMDAsNiBAQCBzdHJ1Y3QgbWx4NV9lcV90YWJsZSB7DQogCQkJICAgICAgICgxdWxs IDw8IE1MWDVfRVZFTlRfVFlQRV9TUlFfTEFTVF9XUUUpCSAgICB8IFwNCiAJCQkgICAgICAgKDF1 bGwgPDwgTUxYNV9FVkVOVF9UWVBFX1NSUV9SUV9MSU1JVCkpDQogDQotaW50IG1seDVfaXJxX3Rh YmxlX2luaXQoc3RydWN0IG1seDVfY29yZV9kZXYgKmRldikNCi17DQotCXN0cnVjdCBtbHg1X2ly cV90YWJsZSAqaXJxX3RhYmxlOw0KLQ0KLQlpcnFfdGFibGUgPSBrdnphbGxvYyhzaXplb2YoKmly cV90YWJsZSksIEdGUF9LRVJORUwpOw0KLQlpZiAoIWlycV90YWJsZSkNCi0JCXJldHVybiAtRU5P TUVNOw0KLQ0KLQlkZXYtPnByaXYuaXJxX3RhYmxlID0gaXJxX3RhYmxlOw0KLQlyZXR1cm4gMDsN Ci19DQotDQotdm9pZCBtbHg1X2lycV90YWJsZV9jbGVhbnVwKHN0cnVjdCBtbHg1X2NvcmVfZGV2 ICpkZXYpDQotew0KLQlrdmZyZWUoZGV2LT5wcml2LmlycV90YWJsZSk7DQotfQ0KLQ0KLXN0YXRp YyBpbnQgbWx4NV9pcnFfZ2V0X251bV9jb21wKHN0cnVjdCBtbHg1X2lycV90YWJsZSAqdGFibGUp DQotew0KLQlyZXR1cm4gdGFibGUtPm52ZWMgLSBNTFg1X0VRX1ZFQ19DT01QX0JBU0U7DQotfQ0K LQ0KLXN0YXRpYyBzdHJ1Y3QgbWx4NV9pcnFfaW5mbyAqbWx4NV9pcnFfZ2V0KHN0cnVjdCBtbHg1 X2NvcmVfZGV2ICpkZXYsIGludCB2ZWNpZHgpDQotew0KLQlzdHJ1Y3QgbWx4NV9pcnFfdGFibGUg KmlycV90YWJsZSA9IGRldi0+cHJpdi5pcnFfdGFibGU7DQotDQotCXJldHVybiAmaXJxX3RhYmxl LT5pcnFfaW5mb1t2ZWNpZHhdOw0KLX0NCi0NCi1zdGF0aWMgaW50IG1seDVfaXJxX2F0dGFjaF9u YihzdHJ1Y3QgbWx4NV9pcnFfdGFibGUgKmlycV90YWJsZSwgaW50IHZlY2lkeCwNCi0JCQkgICAg ICBzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKm5iKQ0KLXsNCi0Jc3RydWN0IG1seDVfaXJxX2luZm8g KmlycV9pbmZvOw0KLQ0KLQlpcnFfaW5mbyA9ICZpcnFfdGFibGUtPmlycV9pbmZvW3ZlY2lkeF07 DQotCXJldHVybiBhdG9taWNfbm90aWZpZXJfY2hhaW5fcmVnaXN0ZXIoJmlycV9pbmZvLT5uaCwg bmIpOw0KLX0NCi0NCi1zdGF0aWMgaW50IG1seDVfaXJxX2RldGFjaF9uYihzdHJ1Y3QgbWx4NV9p cnFfdGFibGUgKmlycV90YWJsZSwgaW50IHZlY2lkeCwNCi0JCQkgICAgICBzdHJ1Y3Qgbm90aWZp ZXJfYmxvY2sgKm5iKQ0KLXsNCi0Jc3RydWN0IG1seDVfaXJxX2luZm8gKmlycV9pbmZvOw0KLQ0K LQlpcnFfaW5mbyA9ICZpcnFfdGFibGUtPmlycV9pbmZvW3ZlY2lkeF07DQotCXJldHVybiBhdG9t aWNfbm90aWZpZXJfY2hhaW5fdW5yZWdpc3RlcigmaXJxX2luZm8tPm5oLCBuYik7DQotfQ0KLQ0K LXN0YXRpYyBpcnFyZXR1cm5fdCBtbHg1X2lycV9pbnRfaGFuZGxlcihpbnQgaXJxLCB2b2lkICpu aCkNCi17DQotCWF0b21pY19ub3RpZmllcl9jYWxsX2NoYWluKG5oLCAwLCBOVUxMKTsNCi0JcmV0 dXJuIElSUV9IQU5ETEVEOw0KLX0NCi0NCi1zdGF0aWMgdm9pZCBpcnFfc2V0X25hbWUoY2hhciAq bmFtZSwgaW50IHZlY2lkeCkNCi17DQotCXN3aXRjaCAodmVjaWR4KSB7DQotCWNhc2UgTUxYNV9F UV9DTURfSURYOg0KLQkJc25wcmludGYobmFtZSwgTUxYNV9NQVhfSVJRX05BTUUsICJtbHg1X2Nt ZF9lcSIpOw0KLQkJYnJlYWs7DQotCWNhc2UgTUxYNV9FUV9BU1lOQ19JRFg6DQotCQlzbnByaW50 ZihuYW1lLCBNTFg1X01BWF9JUlFfTkFNRSwgIm1seDVfYXN5bmNfZXEiKTsNCi0JCWJyZWFrOw0K LQljYXNlIE1MWDVfRVFfUEFHRVJFUV9JRFg6DQotCQlzbnByaW50ZihuYW1lLCBNTFg1X01BWF9J UlFfTkFNRSwgIm1seDVfcGFnZXNfZXEiKTsNCi0JCWJyZWFrOw0KLQljYXNlIE1MWDVfRVFfUEZB VUxUX0lEWDoNCi0JCXNucHJpbnRmKG5hbWUsIE1MWDVfTUFYX0lSUV9OQU1FLCAibWx4NV9pYl9w YWdlX2ZhdWx0X2VxIik7DQotCQlicmVhazsNCi0JZGVmYXVsdDoNCi0JCXNucHJpbnRmKG5hbWUs IE1MWDVfTUFYX0lSUV9OQU1FLCAibWx4NV9jb21wJWQiLA0KLQkJCSB2ZWNpZHggLSBNTFg1X0VR X1ZFQ19DT01QX0JBU0UpOw0KLQkJYnJlYWs7DQotCX0NCi19DQotDQotc3RhdGljIGludCByZXF1 ZXN0X2lycXMoc3RydWN0IG1seDVfY29yZV9kZXYgKmRldiwgaW50IG52ZWMpDQotew0KLQljaGFy IG5hbWVbTUxYNV9NQVhfSVJRX05BTUVdOw0KLQlpbnQgZXJyOw0KLQlpbnQgaTsNCi0NCi0JZm9y IChpID0gMDsgaSA8IG52ZWM7IGkrKykgew0KLQkJc3RydWN0IG1seDVfaXJxX2luZm8gKmlycV9p bmZvID0gbWx4NV9pcnFfZ2V0KGRldiwgaSk7DQotCQlpbnQgaXJxbiA9IHBjaV9pcnFfdmVjdG9y KGRldi0+cGRldiwgaSk7DQotDQotCQlpcnFfc2V0X25hbWUobmFtZSwgaSk7DQotCQlBVE9NSUNf SU5JVF9OT1RJRklFUl9IRUFEKCZpcnFfaW5mby0+bmgpOw0KLQkJc25wcmludGYoaXJxX2luZm8t Pm5hbWUsIE1MWDVfTUFYX0lSUV9OQU1FLA0KLQkJCSAiJXNAcGNpOiVzIiwgbmFtZSwgcGNpX25h bWUoZGV2LT5wZGV2KSk7DQotCQllcnIgPSByZXF1ZXN0X2lycShpcnFuLCBtbHg1X2lycV9pbnRf aGFuZGxlciwgMCwgaXJxX2luZm8tPm5hbWUsDQotCQkJCSAgJmlycV9pbmZvLT5uaCk7DQotCQlp ZiAoZXJyKSB7DQotCQkJbWx4NV9jb3JlX2VycihkZXYsICJGYWlsZWQgdG8gcmVxdWVzdCBpcnFc biIpOw0KLQkJCWdvdG8gZXJyX3JlcXVlc3RfaXJxOw0KLQkJfQ0KLQl9DQotCXJldHVybiAwOw0K LQ0KLWVycl9yZXF1ZXN0X2lycToNCi0JZm9yICg7IGkgPj0gMDsgaS0tKSB7DQotCQlzdHJ1Y3Qg bWx4NV9pcnFfaW5mbyAqaXJxX2luZm8gPSBtbHg1X2lycV9nZXQoZGV2LCBpKTsNCi0JCWludCBp cnFuID0gcGNpX2lycV92ZWN0b3IoZGV2LT5wZGV2LCBpKTsNCi0NCi0JCWZyZWVfaXJxKGlycW4s ICZpcnFfaW5mby0+bmgpOw0KLQl9DQotCXJldHVybiAgZXJyOw0KLX0NCi0NCi1zdGF0aWMgdm9p ZCBpcnFfY2xlYXJfcm1hcChzdHJ1Y3QgbWx4NV9jb3JlX2RldiAqZGV2KQ0KLXsNCi0jaWZkZWYg Q09ORklHX1JGU19BQ0NFTA0KLQlzdHJ1Y3QgbWx4NV9pcnFfdGFibGUgKmlycV90YWJsZSA9IGRl di0+cHJpdi5pcnFfdGFibGU7DQotDQotCWZyZWVfaXJxX2NwdV9ybWFwKGlycV90YWJsZS0+cm1h cCk7DQotI2VuZGlmDQotfQ0KLQ0KLXN0YXRpYyBpbnQgaXJxX3NldF9ybWFwKHN0cnVjdCBtbHg1 X2NvcmVfZGV2ICptZGV2KQ0KLXsNCi0JaW50IGVyciA9IDA7DQotI2lmZGVmIENPTkZJR19SRlNf QUNDRUwNCi0Jc3RydWN0IG1seDVfaXJxX3RhYmxlICppcnFfdGFibGUgPSBtZGV2LT5wcml2Lmly cV90YWJsZTsNCi0JaW50IG51bV9hZmZpbml0eV92ZWM7DQotCWludCB2ZWNpZHg7DQotDQotCW51 bV9hZmZpbml0eV92ZWMgPSBtbHg1X2lycV9nZXRfbnVtX2NvbXAoaXJxX3RhYmxlKTsNCi0JaXJx X3RhYmxlLT5ybWFwID0gYWxsb2NfaXJxX2NwdV9ybWFwKG51bV9hZmZpbml0eV92ZWMpOw0KLQlp ZiAoIWlycV90YWJsZS0+cm1hcCkgew0KLQkJZXJyID0gLUVOT01FTTsNCi0JCW1seDVfY29yZV9l cnIobWRldiwgImZhaWxlZCB0byBhbGxvY2F0ZSBjcHVfcm1hcC4gZXJyICVkIiwgZXJyKTsNCi0J CWdvdG8gZXJyX291dDsNCi0JfQ0KLQ0KLQl2ZWNpZHggPSBNTFg1X0VRX1ZFQ19DT01QX0JBU0U7 DQotCWZvciAoOyB2ZWNpZHggPCBpcnFfdGFibGUtPm52ZWM7IHZlY2lkeCsrKSB7DQotCQllcnIg PSBpcnFfY3B1X3JtYXBfYWRkKGlycV90YWJsZS0+cm1hcCwNCi0JCQkJICAgICAgIHBjaV9pcnFf dmVjdG9yKG1kZXYtPnBkZXYsIHZlY2lkeCkpOw0KLQkJaWYgKGVycikgew0KLQkJCW1seDVfY29y ZV9lcnIobWRldiwgImlycV9jcHVfcm1hcF9hZGQgZmFpbGVkLiBlcnIgJWQiLCBlcnIpOw0KLQkJ CWdvdG8gZXJyX2lycV9jcHVfcm1hcF9hZGQ7DQotCQl9DQotCX0NCi0JcmV0dXJuIDA7DQotDQot ZXJyX2lycV9jcHVfcm1hcF9hZGQ6DQotCWlycV9jbGVhcl9ybWFwKG1kZXYpOw0KLWVycl9vdXQ6 DQotI2VuZGlmDQotCXJldHVybiBlcnI7DQotfQ0KLQ0KIHN0YXRpYyBpbnQgbWx4NV9jbWRfZGVz dHJveV9lcShzdHJ1Y3QgbWx4NV9jb3JlX2RldiAqZGV2LCB1OCBlcW4pDQogew0KIAl1MzIgb3V0 W01MWDVfU1RfU1pfRFcoZGVzdHJveV9lcV9vdXQpXSA9IHswfTsNCkBAIC04NjgsNzUgKzcwMyw2 IEBAIHZvaWQgbWx4NV9lcV91cGRhdGVfY2koc3RydWN0IG1seDVfZXEgKmVxLCB1MzIgY2MsIGJv b2wgYXJtKQ0KIH0NCiBFWFBPUlRfU1lNQk9MKG1seDVfZXFfdXBkYXRlX2NpKTsNCiANCi0vKiBD b21wbGV0aW9uIEVRcyAqLw0KLQ0KLXN0YXRpYyBpbnQgc2V0X2NvbXBfaXJxX2FmZmluaXR5X2hp bnQoc3RydWN0IG1seDVfY29yZV9kZXYgKm1kZXYsIGludCBpKQ0KLXsNCi0JaW50IHZlY2lkeCA9 IE1MWDVfRVFfVkVDX0NPTVBfQkFTRSArIGk7DQotCXN0cnVjdCBtbHg1X3ByaXYgKnByaXYgID0g Jm1kZXYtPnByaXY7DQotCXN0cnVjdCBtbHg1X2lycV9pbmZvICppcnFfaW5mbzsNCi0JaW50IGly cTsNCi0NCi0JaXJxX2luZm8gPSBtbHg1X2lycV9nZXQobWRldiwgdmVjaWR4KTsNCi0JaXJxID0g cGNpX2lycV92ZWN0b3IobWRldi0+cGRldiwgdmVjaWR4KTsNCi0NCi0JaWYgKCF6YWxsb2NfY3B1 bWFza192YXIoJmlycV9pbmZvLT5tYXNrLCBHRlBfS0VSTkVMKSkgew0KLQkJbWx4NV9jb3JlX3dh cm4obWRldiwgInphbGxvY19jcHVtYXNrX3ZhciBmYWlsZWQiKTsNCi0JCXJldHVybiAtRU5PTUVN Ow0KLQl9DQotDQotCWNwdW1hc2tfc2V0X2NwdShjcHVtYXNrX2xvY2FsX3NwcmVhZChpLCBwcml2 LT5udW1hX25vZGUpLA0KLQkJCWlycV9pbmZvLT5tYXNrKTsNCi0NCi0JaWYgKElTX0VOQUJMRUQo Q09ORklHX1NNUCkgJiYNCi0JICAgIGlycV9zZXRfYWZmaW5pdHlfaGludChpcnEsIGlycV9pbmZv LT5tYXNrKSkNCi0JCW1seDVfY29yZV93YXJuKG1kZXYsICJpcnFfc2V0X2FmZmluaXR5X2hpbnQg ZmFpbGVkLCBpcnEgMHglLjR4IiwgaXJxKTsNCi0NCi0JcmV0dXJuIDA7DQotfQ0KLQ0KLXN0YXRp YyB2b2lkIGNsZWFyX2NvbXBfaXJxX2FmZmluaXR5X2hpbnQoc3RydWN0IG1seDVfY29yZV9kZXYg Km1kZXYsIGludCBpKQ0KLXsNCi0JaW50IHZlY2lkeCA9IE1MWDVfRVFfVkVDX0NPTVBfQkFTRSAr IGk7DQotCXN0cnVjdCBtbHg1X2lycV9pbmZvICppcnFfaW5mbzsNCi0JaW50IGlycTsNCi0NCi0J aXJxX2luZm8gPSBtbHg1X2lycV9nZXQobWRldiwgdmVjaWR4KTsNCi0JaXJxID0gcGNpX2lycV92 ZWN0b3IobWRldi0+cGRldiwgdmVjaWR4KTsNCi0JaXJxX3NldF9hZmZpbml0eV9oaW50KGlycSwg TlVMTCk7DQotCWZyZWVfY3B1bWFza192YXIoaXJxX2luZm8tPm1hc2spOw0KLX0NCi0NCi1zdGF0 aWMgaW50IHNldF9jb21wX2lycV9hZmZpbml0eV9oaW50cyhzdHJ1Y3QgbWx4NV9jb3JlX2RldiAq bWRldikNCi17DQotCWludCBudmVjID0gbWx4NV9pcnFfZ2V0X251bV9jb21wKG1kZXYtPnByaXYu aXJxX3RhYmxlKTsNCi0JaW50IGVycjsNCi0JaW50IGk7DQotDQotCWZvciAoaSA9IDA7IGkgPCBu dmVjOyBpKyspIHsNCi0JCWVyciA9IHNldF9jb21wX2lycV9hZmZpbml0eV9oaW50KG1kZXYsIGkp Ow0KLQkJaWYgKGVycikNCi0JCQlnb3RvIGVycl9vdXQ7DQotCX0NCi0NCi0JcmV0dXJuIDA7DQot DQotZXJyX291dDoNCi0JZm9yIChpLS07IGkgPj0gMDsgaS0tKQ0KLQkJY2xlYXJfY29tcF9pcnFf YWZmaW5pdHlfaGludChtZGV2LCBpKTsNCi0NCi0JcmV0dXJuIGVycjsNCi19DQotDQotc3RhdGlj IHZvaWQgY2xlYXJfY29tcF9pcnFzX2FmZmluaXR5X2hpbnRzKHN0cnVjdCBtbHg1X2NvcmVfZGV2 ICptZGV2KQ0KLXsNCi0JaW50IG52ZWMgPSBtbHg1X2lycV9nZXRfbnVtX2NvbXAobWRldi0+cHJp di5pcnFfdGFibGUpOw0KLQlpbnQgaTsNCi0NCi0JZm9yIChpID0gMDsgaSA8IG52ZWM7IGkrKykN Ci0JCWNsZWFyX2NvbXBfaXJxX2FmZmluaXR5X2hpbnQobWRldiwgaSk7DQotfQ0KLQ0KIHN0YXRp YyB2b2lkIGRlc3Ryb3lfY29tcF9lcXMoc3RydWN0IG1seDVfY29yZV9kZXYgKmRldikNCiB7DQog CXN0cnVjdCBtbHg1X2VxX3RhYmxlICp0YWJsZSA9IGRldi0+cHJpdi5lcV90YWJsZTsNCkBAIC0x MDMxLDEyICs3OTcsNiBAQCB1bnNpZ25lZCBpbnQgbWx4NV9jb21wX3ZlY3RvcnNfY291bnQoc3Ry dWN0IG1seDVfY29yZV9kZXYgKmRldikNCiB9DQogRVhQT1JUX1NZTUJPTChtbHg1X2NvbXBfdmVj dG9yc19jb3VudCk7DQogDQotc3RhdGljIHN0cnVjdCBjcHVtYXNrICoNCi1tbHg1X2lycV9nZXRf YWZmaW5pdHlfbWFzayhzdHJ1Y3QgbWx4NV9pcnFfdGFibGUgKmlycV90YWJsZSwgaW50IHZlY2lk eCkNCi17DQotCXJldHVybiBpcnFfdGFibGUtPmlycV9pbmZvW3ZlY2lkeF0ubWFzazsNCi19DQot DQogc3RydWN0IGNwdW1hc2sgKg0KIG1seDVfY29tcF9pcnFfZ2V0X2FmZmluaXR5X21hc2soc3Ry dWN0IG1seDVfY29yZV9kZXYgKmRldiwgaW50IHZlY3RvcikNCiB7DQpAQCAtMTA0OCwxMSArODA4 LDYgQEAgbWx4NV9jb21wX2lycV9nZXRfYWZmaW5pdHlfbWFzayhzdHJ1Y3QgbWx4NV9jb3JlX2Rl diAqZGV2LCBpbnQgdmVjdG9yKQ0KIEVYUE9SVF9TWU1CT0wobWx4NV9jb21wX2lycV9nZXRfYWZm aW5pdHlfbWFzayk7DQogDQogI2lmZGVmIENPTkZJR19SRlNfQUNDRUwNCi1zdGF0aWMgc3RydWN0 IGNwdV9ybWFwICptbHg1X2lycV9nZXRfcm1hcChzdHJ1Y3QgbWx4NV9pcnFfdGFibGUgKmlycV90 YWJsZSkNCi17DQotCXJldHVybiBpcnFfdGFibGUtPnJtYXA7DQotfQ0KLQ0KIHN0cnVjdCBjcHVf cm1hcCAqbWx4NV9lcV90YWJsZV9nZXRfcm1hcChzdHJ1Y3QgbWx4NV9jb3JlX2RldiAqZGV2KQ0K IHsNCiAJcmV0dXJuIG1seDVfaXJxX2dldF9ybWFwKGRldi0+cHJpdi5lcV90YWJsZS0+aXJxX3Rh YmxlKTsNCkBAIC0xMDgyLDg4ICs4MzcsNiBAQCB2b2lkIG1seDVfY29yZV9lcV9mcmVlX2lycXMo c3RydWN0IG1seDVfY29yZV9kZXYgKmRldikNCiAJbXV0ZXhfdW5sb2NrKCZ0YWJsZS0+bG9jayk7 DQogfQ0KIA0KLXN0YXRpYyB2b2lkIHVucmVxdWVzdF9pcnFzKHN0cnVjdCBtbHg1X2NvcmVfZGV2 ICpkZXYpDQotew0KLQlzdHJ1Y3QgbWx4NV9pcnFfdGFibGUgKnRhYmxlID0gZGV2LT5wcml2Lmly cV90YWJsZTsNCi0JaW50IGk7DQotDQotCWZvciAoaSA9IDA7IGkgPCB0YWJsZS0+bnZlYzsgaSsr KQ0KLQkJZnJlZV9pcnEocGNpX2lycV92ZWN0b3IoZGV2LT5wZGV2LCBpKSwNCi0JCQkgJm1seDVf aXJxX2dldChkZXYsIGkpLT5uaCk7DQotfQ0KLQ0KLWludCBtbHg1X2lycV90YWJsZV9jcmVhdGUo c3RydWN0IG1seDVfY29yZV9kZXYgKmRldikNCi17DQotCXN0cnVjdCBtbHg1X3ByaXYgKnByaXYg PSAmZGV2LT5wcml2Ow0KLQlzdHJ1Y3QgbWx4NV9pcnFfdGFibGUgKnRhYmxlID0gcHJpdi0+aXJx X3RhYmxlOw0KLQlpbnQgbnVtX2VxcyA9IE1MWDVfQ0FQX0dFTihkZXYsIG1heF9udW1fZXFzKSA/ DQotCQkgICAgICBNTFg1X0NBUF9HRU4oZGV2LCBtYXhfbnVtX2VxcykgOg0KLQkJICAgICAgMSA8 PCBNTFg1X0NBUF9HRU4oZGV2LCBsb2dfbWF4X2VxKTsNCi0JaW50IG52ZWM7DQotCWludCBlcnI7 DQotDQotCW52ZWMgPSBNTFg1X0NBUF9HRU4oZGV2LCBudW1fcG9ydHMpICogbnVtX29ubGluZV9j cHVzKCkgKw0KLQkgICAgICAgTUxYNV9FUV9WRUNfQ09NUF9CQVNFOw0KLQludmVjID0gbWluX3Qo aW50LCBudmVjLCBudW1fZXFzKTsNCi0JaWYgKG52ZWMgPD0gTUxYNV9FUV9WRUNfQ09NUF9CQVNF KQ0KLQkJcmV0dXJuIC1FTk9NRU07DQotDQotCXRhYmxlLT5pcnFfaW5mbyA9IGtjYWxsb2MobnZl Yywgc2l6ZW9mKCp0YWJsZS0+aXJxX2luZm8pLCBHRlBfS0VSTkVMKTsNCi0JaWYgKCF0YWJsZS0+ aXJxX2luZm8pDQotCQlyZXR1cm4gLUVOT01FTTsNCi0NCi0JbnZlYyA9IHBjaV9hbGxvY19pcnFf dmVjdG9ycyhkZXYtPnBkZXYsIE1MWDVfRVFfVkVDX0NPTVBfQkFTRSArIDEsDQotCQkJCSAgICAg bnZlYywgUENJX0lSUV9NU0lYKTsNCi0JaWYgKG52ZWMgPCAwKSB7DQotCQllcnIgPSBudmVjOw0K LQkJZ290byBlcnJfZnJlZV9pcnFfaW5mbzsNCi0JfQ0KLQ0KLQl0YWJsZS0+bnZlYyA9IG52ZWM7 DQotDQotCWVyciA9IGlycV9zZXRfcm1hcChkZXYpOw0KLQlpZiAoZXJyKQ0KLQkJZ290byBlcnJf c2V0X3JtYXA7DQotDQotCWVyciA9IHJlcXVlc3RfaXJxcyhkZXYsIG52ZWMpOw0KLQlpZiAoZXJy KQ0KLQkJZ290byBlcnJfcmVxdWVzdF9pcnFzOw0KLQ0KLQllcnIgPSBzZXRfY29tcF9pcnFfYWZm aW5pdHlfaGludHMoZGV2KTsNCi0JaWYgKGVycikNCi0JCWdvdG8gZXJyX3NldF9hZmZpbml0eTsN Ci0NCi0JcmV0dXJuIDA7DQotDQotZXJyX3NldF9hZmZpbml0eToNCi0JdW5yZXF1ZXN0X2lycXMo ZGV2KTsNCi1lcnJfcmVxdWVzdF9pcnFzOg0KLQlpcnFfY2xlYXJfcm1hcChkZXYpOw0KLWVycl9z ZXRfcm1hcDoNCi0JcGNpX2ZyZWVfaXJxX3ZlY3RvcnMoZGV2LT5wZGV2KTsNCi1lcnJfZnJlZV9p cnFfaW5mbzoNCi0Ja2ZyZWUodGFibGUtPmlycV9pbmZvKTsNCi0JcmV0dXJuIGVycjsNCi19DQot DQotdm9pZCBtbHg1X2lycV90YWJsZV9kZXN0cm95KHN0cnVjdCBtbHg1X2NvcmVfZGV2ICpkZXYp DQotew0KLQlzdHJ1Y3QgbWx4NV9pcnFfdGFibGUgKnRhYmxlID0gZGV2LT5wcml2LmlycV90YWJs ZTsNCi0JaW50IGk7DQotDQotCS8qIGZyZWVfaXJxIHJlcXVpcmVzIHRoYXQgYWZmaW5pdHkgYW5k IHJtYXAgd2lsbCBiZSBjbGVhcmVkDQotCSAqIGJlZm9yZSBjYWxsaW5nIGl0LiBUaGlzIGlzIHdo eSB0aGVyZSBpcyBhc3ltbWV0cnkgd2l0aCBzZXRfcm1hcA0KLQkgKiB3aGljaCBzaG91bGQgYmUg Y2FsbGVkIGFmdGVyIGFsbG9jX2lycSBidXQgYmVmb3JlIHJlcXVlc3RfaXJxLg0KLQkgKi8NCi0J aXJxX2NsZWFyX3JtYXAoZGV2KTsNCi0JY2xlYXJfY29tcF9pcnFzX2FmZmluaXR5X2hpbnRzKGRl dik7DQotCWZvciAoaSA9IDA7IGkgPCB0YWJsZS0+bnZlYzsgaSsrKQ0KLQkJZnJlZV9pcnEocGNp X2lycV92ZWN0b3IoZGV2LT5wZGV2LCBpKSwNCi0JCQkgJm1seDVfaXJxX2dldChkZXYsIGkpLT5u aCk7DQotCXBjaV9mcmVlX2lycV92ZWN0b3JzKGRldi0+cGRldik7DQotCWtmcmVlKHRhYmxlLT5p cnFfaW5mbyk7DQotfQ0KLQ0KIGludCBtbHg1X2VxX3RhYmxlX2NyZWF0ZShzdHJ1Y3QgbWx4NV9j b3JlX2RldiAqZGV2KQ0KIHsNCiAJc3RydWN0IG1seDVfZXFfdGFibGUgKmVxX3RhYmxlID0gZGV2 LT5wcml2LmVxX3RhYmxlOw0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxh bm94L21seDUvY29yZS9saWIvZXEuaCBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21s eDUvY29yZS9saWIvZXEuaA0KaW5kZXggYWRiYzIyOGJkNTVkLi4zODM2YzM5YjI5MDAgMTAwNjQ0 DQotLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvbGliL2VxLmgN CisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9saWIvZXEuaA0K QEAgLTcsNyArNyw2IEBADQogI2luY2x1ZGUgPGxpbnV4L21seDUvZXEuaD4NCiAjaW5jbHVkZSA8 bGludXgvbWx4NS9jcS5oPg0KIA0KLSNkZWZpbmUgTUxYNV9NQVhfSVJRX05BTUUgICAoMzIpDQog I2RlZmluZSBNTFg1X0VRRV9TSVpFICAgICAgIChzaXplb2Yoc3RydWN0IG1seDVfZXFlKSkNCiAN CiBzdHJ1Y3QgbWx4NV9lcV90YXNrbGV0IHsNCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhl cm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvbWx4NV9jb3JlLmggYi9kcml2ZXJzL25ldC9ldGhlcm5l dC9tZWxsYW5veC9tbHg1L2NvcmUvbWx4NV9jb3JlLmgNCmluZGV4IDE0ZjFmNjNkYjNlMy4uZTBm Njc4M2E1ZjZlIDEwMDY0NA0KLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4 NS9jb3JlL21seDVfY29yZS5oDQorKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9t bHg1L2NvcmUvbWx4NV9jb3JlLmgNCkBAIC0xNTcsNiArMTU3LDE0IEBAIGludCBtbHg1X2lycV90 YWJsZV9pbml0KHN0cnVjdCBtbHg1X2NvcmVfZGV2ICpkZXYpOw0KIHZvaWQgbWx4NV9pcnFfdGFi bGVfY2xlYW51cChzdHJ1Y3QgbWx4NV9jb3JlX2RldiAqZGV2KTsNCiBpbnQgbWx4NV9pcnFfdGFi bGVfY3JlYXRlKHN0cnVjdCBtbHg1X2NvcmVfZGV2ICpkZXYpOw0KIHZvaWQgbWx4NV9pcnFfdGFi bGVfZGVzdHJveShzdHJ1Y3QgbWx4NV9jb3JlX2RldiAqZGV2KTsNCitpbnQgbWx4NV9pcnFfYXR0 YWNoX25iKHN0cnVjdCBtbHg1X2lycV90YWJsZSAqaXJxX3RhYmxlLCBpbnQgdmVjaWR4LA0KKwkJ ICAgICAgIHN0cnVjdCBub3RpZmllcl9ibG9jayAqbmIpOw0KK2ludCBtbHg1X2lycV9kZXRhY2hf bmIoc3RydWN0IG1seDVfaXJxX3RhYmxlICppcnFfdGFibGUsIGludCB2ZWNpZHgsDQorCQkgICAg ICAgc3RydWN0IG5vdGlmaWVyX2Jsb2NrICpuYik7DQorc3RydWN0IGNwdW1hc2sgKg0KK21seDVf aXJxX2dldF9hZmZpbml0eV9tYXNrKHN0cnVjdCBtbHg1X2lycV90YWJsZSAqaXJxX3RhYmxlLCBp bnQgdmVjaWR4KTsNCitzdHJ1Y3QgY3B1X3JtYXAgKm1seDVfaXJxX2dldF9ybWFwKHN0cnVjdCBt bHg1X2lycV90YWJsZSAqdGFibGUpOw0KK2ludCBtbHg1X2lycV9nZXRfbnVtX2NvbXAoc3RydWN0 IG1seDVfaXJxX3RhYmxlICp0YWJsZSk7DQogDQogaW50IG1seDVfZXZlbnRzX2luaXQoc3RydWN0 IG1seDVfY29yZV9kZXYgKmRldik7DQogdm9pZCBtbHg1X2V2ZW50c19jbGVhbnVwKHN0cnVjdCBt bHg1X2NvcmVfZGV2ICpkZXYpOw0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21l bGxhbm94L21seDUvY29yZS9wY2lfaXJxLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5v eC9tbHg1L2NvcmUvcGNpX2lycS5jDQpuZXcgZmlsZSBtb2RlIDEwMDY0NA0KaW5kZXggMDAwMDAw MDAwMDAwLi43NTQwODYzOWQxNTANCi0tLSAvZGV2L251bGwNCisrKyBiL2RyaXZlcnMvbmV0L2V0 aGVybmV0L21lbGxhbm94L21seDUvY29yZS9wY2lfaXJxLmMNCkBAIC0wLDAgKzEsMzQ1IEBADQor Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAgT1IgTGludXgtT3BlbklCDQorLyog Q29weXJpZ2h0IChjKSAyMDE5IE1lbGxhbm94IFRlY2hub2xvZ2llcy4gKi8NCisNCisjaW5jbHVk ZSA8bGludXgvaW50ZXJydXB0Lmg+DQorI2luY2x1ZGUgPGxpbnV4L25vdGlmaWVyLmg+DQorI2lu Y2x1ZGUgPGxpbnV4L21vZHVsZS5oPg0KKyNpbmNsdWRlIDxsaW51eC9tbHg1L2RyaXZlci5oPg0K KyNpbmNsdWRlICJtbHg1X2NvcmUuaCINCisjaWZkZWYgQ09ORklHX1JGU19BQ0NFTA0KKyNpbmNs dWRlIDxsaW51eC9jcHVfcm1hcC5oPg0KKyNlbmRpZg0KKw0KKyNkZWZpbmUgTUxYNV9NQVhfSVJR X05BTUUgKDMyKQ0KKw0KK3N0cnVjdCBtbHg1X2lycV9pbmZvIHsNCisJc3RydWN0IGF0b21pY19u b3RpZmllcl9oZWFkIG5oOw0KKwljcHVtYXNrX3Zhcl90IG1hc2s7DQorCWNoYXIgbmFtZVtNTFg1 X01BWF9JUlFfTkFNRV07DQorfTsNCisNCitzdHJ1Y3QgbWx4NV9pcnFfdGFibGUgew0KKwlzdHJ1 Y3QgbWx4NV9pcnFfaW5mbyAqaXJxX2luZm87DQorCWludCBudmVjOw0KKyNpZmRlZiBDT05GSUdf UkZTX0FDQ0VMDQorCXN0cnVjdCBjcHVfcm1hcCAqcm1hcDsNCisjZW5kaWYNCit9Ow0KKw0KK2lu dCBtbHg1X2lycV90YWJsZV9pbml0KHN0cnVjdCBtbHg1X2NvcmVfZGV2ICpkZXYpDQorew0KKwlz dHJ1Y3QgbWx4NV9pcnFfdGFibGUgKmlycV90YWJsZTsNCisNCisJaXJxX3RhYmxlID0ga3Z6YWxs b2Moc2l6ZW9mKCppcnFfdGFibGUpLCBHRlBfS0VSTkVMKTsNCisJaWYgKCFpcnFfdGFibGUpDQor CQlyZXR1cm4gLUVOT01FTTsNCisNCisJZGV2LT5wcml2LmlycV90YWJsZSA9IGlycV90YWJsZTsN CisJcmV0dXJuIDA7DQorfQ0KKw0KK3ZvaWQgbWx4NV9pcnFfdGFibGVfY2xlYW51cChzdHJ1Y3Qg bWx4NV9jb3JlX2RldiAqZGV2KQ0KK3sNCisJa3ZmcmVlKGRldi0+cHJpdi5pcnFfdGFibGUpOw0K K30NCisNCitpbnQgbWx4NV9pcnFfZ2V0X251bV9jb21wKHN0cnVjdCBtbHg1X2lycV90YWJsZSAq dGFibGUpDQorew0KKwlyZXR1cm4gdGFibGUtPm52ZWMgLSBNTFg1X0VRX1ZFQ19DT01QX0JBU0U7 DQorfQ0KKw0KK3N0YXRpYyBzdHJ1Y3QgbWx4NV9pcnFfaW5mbyAqbWx4NV9pcnFfZ2V0KHN0cnVj dCBtbHg1X2NvcmVfZGV2ICpkZXYsIGludCB2ZWNpZHgpDQorew0KKwlzdHJ1Y3QgbWx4NV9pcnFf dGFibGUgKmlycV90YWJsZSA9IGRldi0+cHJpdi5pcnFfdGFibGU7DQorDQorCXJldHVybiAmaXJx X3RhYmxlLT5pcnFfaW5mb1t2ZWNpZHhdOw0KK30NCisNCitpbnQgbWx4NV9pcnFfYXR0YWNoX25i KHN0cnVjdCBtbHg1X2lycV90YWJsZSAqaXJxX3RhYmxlLCBpbnQgdmVjaWR4LA0KKwkJICAgICAg IHN0cnVjdCBub3RpZmllcl9ibG9jayAqbmIpDQorew0KKwlzdHJ1Y3QgbWx4NV9pcnFfaW5mbyAq aXJxX2luZm87DQorDQorCWlycV9pbmZvID0gJmlycV90YWJsZS0+aXJxX2luZm9bdmVjaWR4XTsN CisJcmV0dXJuIGF0b21pY19ub3RpZmllcl9jaGFpbl9yZWdpc3RlcigmaXJxX2luZm8tPm5oLCBu Yik7DQorfQ0KKw0KK2ludCBtbHg1X2lycV9kZXRhY2hfbmIoc3RydWN0IG1seDVfaXJxX3RhYmxl ICppcnFfdGFibGUsIGludCB2ZWNpZHgsDQorCQkgICAgICAgc3RydWN0IG5vdGlmaWVyX2Jsb2Nr ICpuYikNCit7DQorCXN0cnVjdCBtbHg1X2lycV9pbmZvICppcnFfaW5mbzsNCisNCisJaXJxX2lu Zm8gPSAmaXJxX3RhYmxlLT5pcnFfaW5mb1t2ZWNpZHhdOw0KKwlyZXR1cm4gYXRvbWljX25vdGlm aWVyX2NoYWluX3VucmVnaXN0ZXIoJmlycV9pbmZvLT5uaCwgbmIpOw0KK30NCisNCitzdGF0aWMg aXJxcmV0dXJuX3QgbWx4NV9pcnFfaW50X2hhbmRsZXIoaW50IGlycSwgdm9pZCAqbmgpDQorew0K KwlhdG9taWNfbm90aWZpZXJfY2FsbF9jaGFpbihuaCwgMCwgTlVMTCk7DQorCXJldHVybiBJUlFf SEFORExFRDsNCit9DQorDQorc3RhdGljIHZvaWQgaXJxX3NldF9uYW1lKGNoYXIgKm5hbWUsIGlu dCB2ZWNpZHgpDQorew0KKwlzd2l0Y2ggKHZlY2lkeCkgew0KKwljYXNlIE1MWDVfRVFfQ01EX0lE WDoNCisJCXNucHJpbnRmKG5hbWUsIE1MWDVfTUFYX0lSUV9OQU1FLCAibWx4NV9jbWRfZXEiKTsN CisJCWJyZWFrOw0KKwljYXNlIE1MWDVfRVFfQVNZTkNfSURYOg0KKwkJc25wcmludGYobmFtZSwg TUxYNV9NQVhfSVJRX05BTUUsICJtbHg1X2FzeW5jX2VxIik7DQorCQlicmVhazsNCisJY2FzZSBN TFg1X0VRX1BBR0VSRVFfSURYOg0KKwkJc25wcmludGYobmFtZSwgTUxYNV9NQVhfSVJRX05BTUUs ICJtbHg1X3BhZ2VzX2VxIik7DQorCQlicmVhazsNCisJY2FzZSBNTFg1X0VRX1BGQVVMVF9JRFg6 DQorCQlzbnByaW50ZihuYW1lLCBNTFg1X01BWF9JUlFfTkFNRSwgIm1seDVfaWJfcGFnZV9mYXVs dF9lcSIpOw0KKwkJYnJlYWs7DQorCWRlZmF1bHQ6DQorCQlzbnByaW50ZihuYW1lLCBNTFg1X01B WF9JUlFfTkFNRSwgIm1seDVfY29tcCVkIiwNCisJCQkgdmVjaWR4IC0gTUxYNV9FUV9WRUNfQ09N UF9CQVNFKTsNCisJCWJyZWFrOw0KKwl9DQorfQ0KKw0KK3N0YXRpYyBpbnQgcmVxdWVzdF9pcnFz KHN0cnVjdCBtbHg1X2NvcmVfZGV2ICpkZXYsIGludCBudmVjKQ0KK3sNCisJY2hhciBuYW1lW01M WDVfTUFYX0lSUV9OQU1FXTsNCisJaW50IGVycjsNCisJaW50IGk7DQorDQorCWZvciAoaSA9IDA7 IGkgPCBudmVjOyBpKyspIHsNCisJCXN0cnVjdCBtbHg1X2lycV9pbmZvICppcnFfaW5mbyA9IG1s eDVfaXJxX2dldChkZXYsIGkpOw0KKwkJaW50IGlycW4gPSBwY2lfaXJxX3ZlY3RvcihkZXYtPnBk ZXYsIGkpOw0KKw0KKwkJaXJxX3NldF9uYW1lKG5hbWUsIGkpOw0KKwkJQVRPTUlDX0lOSVRfTk9U SUZJRVJfSEVBRCgmaXJxX2luZm8tPm5oKTsNCisJCXNucHJpbnRmKGlycV9pbmZvLT5uYW1lLCBN TFg1X01BWF9JUlFfTkFNRSwNCisJCQkgIiVzQHBjaTolcyIsIG5hbWUsIHBjaV9uYW1lKGRldi0+ cGRldikpOw0KKwkJZXJyID0gcmVxdWVzdF9pcnEoaXJxbiwgbWx4NV9pcnFfaW50X2hhbmRsZXIs IDAsIGlycV9pbmZvLT5uYW1lLA0KKwkJCQkgICZpcnFfaW5mby0+bmgpOw0KKwkJaWYgKGVycikg ew0KKwkJCW1seDVfY29yZV9lcnIoZGV2LCAiRmFpbGVkIHRvIHJlcXVlc3QgaXJxXG4iKTsNCisJ CQlnb3RvIGVycl9yZXF1ZXN0X2lycTsNCisJCX0NCisJfQ0KKwlyZXR1cm4gMDsNCisNCitlcnJf cmVxdWVzdF9pcnE6DQorCWZvciAoOyBpID49IDA7IGktLSkgew0KKwkJc3RydWN0IG1seDVfaXJx X2luZm8gKmlycV9pbmZvID0gbWx4NV9pcnFfZ2V0KGRldiwgaSk7DQorCQlpbnQgaXJxbiA9IHBj aV9pcnFfdmVjdG9yKGRldi0+cGRldiwgaSk7DQorDQorCQlmcmVlX2lycShpcnFuLCAmaXJxX2lu Zm8tPm5oKTsNCisJfQ0KKwlyZXR1cm4gIGVycjsNCit9DQorDQorc3RhdGljIHZvaWQgaXJxX2Ns ZWFyX3JtYXAoc3RydWN0IG1seDVfY29yZV9kZXYgKmRldikNCit7DQorI2lmZGVmIENPTkZJR19S RlNfQUNDRUwNCisJc3RydWN0IG1seDVfaXJxX3RhYmxlICppcnFfdGFibGUgPSBkZXYtPnByaXYu aXJxX3RhYmxlOw0KKw0KKwlmcmVlX2lycV9jcHVfcm1hcChpcnFfdGFibGUtPnJtYXApOw0KKyNl bmRpZg0KK30NCisNCitzdGF0aWMgaW50IGlycV9zZXRfcm1hcChzdHJ1Y3QgbWx4NV9jb3JlX2Rl diAqbWRldikNCit7DQorCWludCBlcnIgPSAwOw0KKyNpZmRlZiBDT05GSUdfUkZTX0FDQ0VMDQor CXN0cnVjdCBtbHg1X2lycV90YWJsZSAqaXJxX3RhYmxlID0gbWRldi0+cHJpdi5pcnFfdGFibGU7 DQorCWludCBudW1fYWZmaW5pdHlfdmVjOw0KKwlpbnQgdmVjaWR4Ow0KKw0KKwludW1fYWZmaW5p dHlfdmVjID0gbWx4NV9pcnFfZ2V0X251bV9jb21wKGlycV90YWJsZSk7DQorCWlycV90YWJsZS0+ cm1hcCA9IGFsbG9jX2lycV9jcHVfcm1hcChudW1fYWZmaW5pdHlfdmVjKTsNCisJaWYgKCFpcnFf dGFibGUtPnJtYXApIHsNCisJCWVyciA9IC1FTk9NRU07DQorCQltbHg1X2NvcmVfZXJyKG1kZXYs ICJGYWlsZWQgdG8gYWxsb2NhdGUgY3B1X3JtYXAuIGVyciAlZCIsIGVycik7DQorCQlnb3RvIGVy cl9vdXQ7DQorCX0NCisNCisJdmVjaWR4ID0gTUxYNV9FUV9WRUNfQ09NUF9CQVNFOw0KKwlmb3Ig KDsgdmVjaWR4IDwgaXJxX3RhYmxlLT5udmVjOyB2ZWNpZHgrKykgew0KKwkJZXJyID0gaXJxX2Nw dV9ybWFwX2FkZChpcnFfdGFibGUtPnJtYXAsDQorCQkJCSAgICAgICBwY2lfaXJxX3ZlY3Rvciht ZGV2LT5wZGV2LCB2ZWNpZHgpKTsNCisJCWlmIChlcnIpIHsNCisJCQltbHg1X2NvcmVfZXJyKG1k ZXYsICJpcnFfY3B1X3JtYXBfYWRkIGZhaWxlZC4gZXJyICVkIiwNCisJCQkJICAgICAgZXJyKTsN CisJCQlnb3RvIGVycl9pcnFfY3B1X3JtYXBfYWRkOw0KKwkJfQ0KKwl9DQorCXJldHVybiAwOw0K Kw0KK2Vycl9pcnFfY3B1X3JtYXBfYWRkOg0KKwlpcnFfY2xlYXJfcm1hcChtZGV2KTsNCitlcnJf b3V0Og0KKyNlbmRpZg0KKwlyZXR1cm4gZXJyOw0KK30NCisNCisvKiBDb21wbGV0aW9uIElSUSB2 ZWN0b3JzICovDQorDQorc3RhdGljIGludCBzZXRfY29tcF9pcnFfYWZmaW5pdHlfaGludChzdHJ1 Y3QgbWx4NV9jb3JlX2RldiAqbWRldiwgaW50IGkpDQorew0KKwlpbnQgdmVjaWR4ID0gTUxYNV9F UV9WRUNfQ09NUF9CQVNFICsgaTsNCisJc3RydWN0IG1seDVfaXJxX2luZm8gKmlycV9pbmZvOw0K KwlpbnQgaXJxOw0KKw0KKwlpcnFfaW5mbyA9IG1seDVfaXJxX2dldChtZGV2LCB2ZWNpZHgpOw0K KwlpcnEgPSBwY2lfaXJxX3ZlY3RvcihtZGV2LT5wZGV2LCB2ZWNpZHgpOw0KKwlpZiAoIXphbGxv Y19jcHVtYXNrX3ZhcigmaXJxX2luZm8tPm1hc2ssIEdGUF9LRVJORUwpKSB7DQorCQltbHg1X2Nv cmVfd2FybihtZGV2LCAiemFsbG9jX2NwdW1hc2tfdmFyIGZhaWxlZCIpOw0KKwkJcmV0dXJuIC1F Tk9NRU07DQorCX0NCisNCisJY3B1bWFza19zZXRfY3B1KGNwdW1hc2tfbG9jYWxfc3ByZWFkKGks IG1kZXYtPnByaXYubnVtYV9ub2RlKSwNCisJCQlpcnFfaW5mby0+bWFzayk7DQorDQorCWlmIChJ U19FTkFCTEVEKENPTkZJR19TTVApICYmDQorCSAgICBpcnFfc2V0X2FmZmluaXR5X2hpbnQoaXJx LCBpcnFfaW5mby0+bWFzaykpDQorCQltbHg1X2NvcmVfd2FybihtZGV2LCAiaXJxX3NldF9hZmZp bml0eV9oaW50IGZhaWxlZCwgaXJxIDB4JS40eCIsDQorCQkJICAgICAgIGlycSk7DQorDQorCXJl dHVybiAwOw0KK30NCisNCitzdGF0aWMgdm9pZCBjbGVhcl9jb21wX2lycV9hZmZpbml0eV9oaW50 KHN0cnVjdCBtbHg1X2NvcmVfZGV2ICptZGV2LCBpbnQgaSkNCit7DQorCWludCB2ZWNpZHggPSBN TFg1X0VRX1ZFQ19DT01QX0JBU0UgKyBpOw0KKwlzdHJ1Y3QgbWx4NV9pcnFfaW5mbyAqaXJxX2lu Zm87DQorCWludCBpcnE7DQorDQorCWlycV9pbmZvID0gbWx4NV9pcnFfZ2V0KG1kZXYsIHZlY2lk eCk7DQorCWlycSA9IHBjaV9pcnFfdmVjdG9yKG1kZXYtPnBkZXYsIHZlY2lkeCk7DQorCWlycV9z ZXRfYWZmaW5pdHlfaGludChpcnEsIE5VTEwpOw0KKwlmcmVlX2NwdW1hc2tfdmFyKGlycV9pbmZv LT5tYXNrKTsNCit9DQorDQorc3RhdGljIGludCBzZXRfY29tcF9pcnFfYWZmaW5pdHlfaGludHMo c3RydWN0IG1seDVfY29yZV9kZXYgKm1kZXYpDQorew0KKwlpbnQgbnZlYyA9IG1seDVfaXJxX2dl dF9udW1fY29tcChtZGV2LT5wcml2LmlycV90YWJsZSk7DQorCWludCBlcnI7DQorCWludCBpOw0K Kw0KKwlmb3IgKGkgPSAwOyBpIDwgbnZlYzsgaSsrKSB7DQorCQllcnIgPSBzZXRfY29tcF9pcnFf YWZmaW5pdHlfaGludChtZGV2LCBpKTsNCisJCWlmIChlcnIpDQorCQkJZ290byBlcnJfb3V0Ow0K Kwl9DQorDQorCXJldHVybiAwOw0KKw0KK2Vycl9vdXQ6DQorCWZvciAoaS0tOyBpID49IDA7IGkt LSkNCisJCWNsZWFyX2NvbXBfaXJxX2FmZmluaXR5X2hpbnQobWRldiwgaSk7DQorDQorCXJldHVy biBlcnI7DQorfQ0KKw0KK3N0YXRpYyB2b2lkIGNsZWFyX2NvbXBfaXJxc19hZmZpbml0eV9oaW50 cyhzdHJ1Y3QgbWx4NV9jb3JlX2RldiAqbWRldikNCit7DQorCWludCBudmVjID0gbWx4NV9pcnFf Z2V0X251bV9jb21wKG1kZXYtPnByaXYuaXJxX3RhYmxlKTsNCisJaW50IGk7DQorDQorCWZvciAo aSA9IDA7IGkgPCBudmVjOyBpKyspDQorCQljbGVhcl9jb21wX2lycV9hZmZpbml0eV9oaW50KG1k ZXYsIGkpOw0KK30NCisNCitzdHJ1Y3QgY3B1bWFzayAqDQorbWx4NV9pcnFfZ2V0X2FmZmluaXR5 X21hc2soc3RydWN0IG1seDVfaXJxX3RhYmxlICppcnFfdGFibGUsIGludCB2ZWNpZHgpDQorew0K KwlyZXR1cm4gaXJxX3RhYmxlLT5pcnFfaW5mb1t2ZWNpZHhdLm1hc2s7DQorfQ0KKw0KKyNpZmRl ZiBDT05GSUdfUkZTX0FDQ0VMDQorc3RydWN0IGNwdV9ybWFwICptbHg1X2lycV9nZXRfcm1hcChz dHJ1Y3QgbWx4NV9pcnFfdGFibGUgKmlycV90YWJsZSkNCit7DQorCXJldHVybiBpcnFfdGFibGUt PnJtYXA7DQorfQ0KKyNlbmRpZg0KKw0KK3N0YXRpYyB2b2lkIHVucmVxdWVzdF9pcnFzKHN0cnVj dCBtbHg1X2NvcmVfZGV2ICpkZXYpDQorew0KKwlzdHJ1Y3QgbWx4NV9pcnFfdGFibGUgKnRhYmxl ID0gZGV2LT5wcml2LmlycV90YWJsZTsNCisJaW50IGk7DQorDQorCWZvciAoaSA9IDA7IGkgPCB0 YWJsZS0+bnZlYzsgaSsrKQ0KKwkJZnJlZV9pcnEocGNpX2lycV92ZWN0b3IoZGV2LT5wZGV2LCBp KSwNCisJCQkgJm1seDVfaXJxX2dldChkZXYsIGkpLT5uaCk7DQorfQ0KKw0KK2ludCBtbHg1X2ly cV90YWJsZV9jcmVhdGUoc3RydWN0IG1seDVfY29yZV9kZXYgKmRldikNCit7DQorCXN0cnVjdCBt bHg1X3ByaXYgKnByaXYgPSAmZGV2LT5wcml2Ow0KKwlzdHJ1Y3QgbWx4NV9pcnFfdGFibGUgKnRh YmxlID0gcHJpdi0+aXJxX3RhYmxlOw0KKwlpbnQgbnVtX2VxcyA9IE1MWDVfQ0FQX0dFTihkZXYs IG1heF9udW1fZXFzKSA/DQorCQkgICAgICBNTFg1X0NBUF9HRU4oZGV2LCBtYXhfbnVtX2Vxcykg Og0KKwkJICAgICAgMSA8PCBNTFg1X0NBUF9HRU4oZGV2LCBsb2dfbWF4X2VxKTsNCisJaW50IG52 ZWM7DQorCWludCBlcnI7DQorDQorCW52ZWMgPSBNTFg1X0NBUF9HRU4oZGV2LCBudW1fcG9ydHMp ICogbnVtX29ubGluZV9jcHVzKCkgKw0KKwkgICAgICAgTUxYNV9FUV9WRUNfQ09NUF9CQVNFOw0K KwludmVjID0gbWluX3QoaW50LCBudmVjLCBudW1fZXFzKTsNCisJaWYgKG52ZWMgPD0gTUxYNV9F UV9WRUNfQ09NUF9CQVNFKQ0KKwkJcmV0dXJuIC1FTk9NRU07DQorDQorCXRhYmxlLT5pcnFfaW5m byA9IGtjYWxsb2MobnZlYywgc2l6ZW9mKCp0YWJsZS0+aXJxX2luZm8pLCBHRlBfS0VSTkVMKTsN CisJaWYgKCF0YWJsZS0+aXJxX2luZm8pDQorCQlyZXR1cm4gLUVOT01FTTsNCisNCisJbnZlYyA9 IHBjaV9hbGxvY19pcnFfdmVjdG9ycyhkZXYtPnBkZXYsIE1MWDVfRVFfVkVDX0NPTVBfQkFTRSAr IDEsDQorCQkJCSAgICAgbnZlYywgUENJX0lSUV9NU0lYKTsNCisJaWYgKG52ZWMgPCAwKSB7DQor CQllcnIgPSBudmVjOw0KKwkJZ290byBlcnJfZnJlZV9pcnFfaW5mbzsNCisJfQ0KKw0KKwl0YWJs ZS0+bnZlYyA9IG52ZWM7DQorDQorCWVyciA9IGlycV9zZXRfcm1hcChkZXYpOw0KKwlpZiAoZXJy KQ0KKwkJZ290byBlcnJfc2V0X3JtYXA7DQorDQorCWVyciA9IHJlcXVlc3RfaXJxcyhkZXYsIG52 ZWMpOw0KKwlpZiAoZXJyKQ0KKwkJZ290byBlcnJfcmVxdWVzdF9pcnFzOw0KKw0KKwllcnIgPSBz ZXRfY29tcF9pcnFfYWZmaW5pdHlfaGludHMoZGV2KTsNCisJaWYgKGVycikgew0KKwkJbWx4NV9j b3JlX2VycihkZXYsICJGYWlsZWQgdG8gYWxsb2MgYWZmaW5pdHkgaGludCBjcHVtYXNrXG4iKTsN CisJCWdvdG8gZXJyX3NldF9hZmZpbml0eTsNCisJfQ0KKw0KKwlyZXR1cm4gMDsNCisNCitlcnJf c2V0X2FmZmluaXR5Og0KKwl1bnJlcXVlc3RfaXJxcyhkZXYpOw0KK2Vycl9yZXF1ZXN0X2lycXM6 DQorCWlycV9jbGVhcl9ybWFwKGRldik7DQorZXJyX3NldF9ybWFwOg0KKwlwY2lfZnJlZV9pcnFf dmVjdG9ycyhkZXYtPnBkZXYpOw0KK2Vycl9mcmVlX2lycV9pbmZvOg0KKwlrZnJlZSh0YWJsZS0+ aXJxX2luZm8pOw0KKwlyZXR1cm4gZXJyOw0KK30NCisNCit2b2lkIG1seDVfaXJxX3RhYmxlX2Rl c3Ryb3koc3RydWN0IG1seDVfY29yZV9kZXYgKmRldikNCit7DQorCXN0cnVjdCBtbHg1X2lycV90 YWJsZSAqdGFibGUgPSBkZXYtPnByaXYuaXJxX3RhYmxlOw0KKwlpbnQgaTsNCisNCisJLyogZnJl ZV9pcnEgcmVxdWlyZXMgdGhhdCBhZmZpbml0eSBhbmQgcm1hcCB3aWxsIGJlIGNsZWFyZWQNCisJ ICogYmVmb3JlIGNhbGxpbmcgaXQuIFRoaXMgaXMgd2h5IHRoZXJlIGlzIGFzeW1tZXRyeSB3aXRo IHNldF9ybWFwDQorCSAqIHdoaWNoIHNob3VsZCBiZSBjYWxsZWQgYWZ0ZXIgYWxsb2NfaXJxIGJ1 dCBiZWZvcmUgcmVxdWVzdF9pcnEuDQorCSAqLw0KKwlpcnFfY2xlYXJfcm1hcChkZXYpOw0KKwlj bGVhcl9jb21wX2lycXNfYWZmaW5pdHlfaGludHMoZGV2KTsNCisJZm9yIChpID0gMDsgaSA8IHRh YmxlLT5udmVjOyBpKyspDQorCQlmcmVlX2lycShwY2lfaXJxX3ZlY3RvcihkZXYtPnBkZXYsIGkp LA0KKwkJCSAmbWx4NV9pcnFfZ2V0KGRldiwgaSktPm5oKTsNCisJcGNpX2ZyZWVfaXJxX3ZlY3Rv cnMoZGV2LT5wZGV2KTsNCisJa2ZyZWUodGFibGUtPmlycV9pbmZvKTsNCit9DQorDQotLSANCjIu MjEuMA0KDQo=