From mboxrd@z Thu Jan 1 00:00:00 1970 From: Christoph Hellwig Subject: [PATCH 07/10] nouveau: simplify nouveau_dmem_migrate_vma Date: Wed, 14 Aug 2019 09:59:25 +0200 Message-ID: <20190814075928.23766-8-hch@lst.de> References: <20190814075928.23766-1-hch@lst.de> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <20190814075928.23766-1-hch-jcswGhMUV9g@public.gmane.org> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: nouveau-bounces-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org Sender: "Nouveau" To: =?UTF-8?q?J=C3=A9r=C3=B4me=20Glisse?= , Jason Gunthorpe , Ben Skeggs Cc: Ralph Campbell , nouveau-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org, linux-kernel-u79uwXL29TY76Z2rM5mHXA@public.gmane.org, dri-devel-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org, Bharata B Rao , linux-mm-Bw31MaZKKs3YtjvyW6yDsg@public.gmane.org, Andrew Morton List-Id: dri-devel@lists.freedesktop.org RmFjdG9yIHRoZSBtYWluIGNvcHkgcGFnZSB0byB2cmFtIHJvdXRpbmUgb3V0IGludG8gYSBoZWxw ZXIgdGhhdCBhY3RzCm9uIGEgc2luZ2xlIHBhZ2UgYW5kIHdoaWNoIGRvZXNuJ3QgcmVxdWlyZSB0 aGUgbm91dmVhdV9kbWVtX21pZ3JhdGUKc3RydWN0dXJlIGZvciBhcmd1bWVudCBwYXNzaW5nLiAg QXMgYW4gYWRkZWQgYmVuZWZpdCB0aGUgbmV3IHZlcnNpb24Kb25seSBhbGxvY2F0ZXMgdGhlIGRt YSBhZGRyZXNzIGFycmF5IG9uY2UgYW5kIHJldXNlcyBpdCBmb3IgZWFjaApzdWJzZXF1ZW50IGNo dW5rIG9mIHdvcmsuCgpTaWduZWQtb2ZmLWJ5OiBDaHJpc3RvcGggSGVsbHdpZyA8aGNoQGxzdC5k ZT4KUmV2aWV3ZWQtYnk6IFJhbHBoIENhbXBiZWxsIDxyY2FtcGJlbGxAbnZpZGlhLmNvbT4KLS0t CiBkcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9ub3V2ZWF1X2RtZW0uYyB8IDE4NCArKysrKysrKy0t LS0tLS0tLS0tLS0tLS0tCiAxIGZpbGUgY2hhbmdlZCwgNTUgaW5zZXJ0aW9ucygrKSwgMTI5IGRl bGV0aW9ucygtKQoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L25vdXZlYXVf ZG1lbS5jIGIvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV9kbWVtLmMKaW5kZXggN2Rk ZWQ4NjQwMjJjLi5kOTZiOTg3Yjk5ODIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9ub3V2 ZWF1L25vdXZlYXVfZG1lbS5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L25vdXZlYXVf ZG1lbS5jCkBAIC00NCw4ICs0NCw2IEBACiAjZGVmaW5lIERNRU1fQ0hVTktfU0laRSAoMlVMIDw8 IDIwKQogI2RlZmluZSBETUVNX0NIVU5LX05QQUdFUyAoRE1FTV9DSFVOS19TSVpFID4+IFBBR0Vf U0hJRlQpCiAKLXN0cnVjdCBub3V2ZWF1X21pZ3JhdGU7Ci0KIGVudW0gbm91dmVhdV9hcGVyIHsK IAlOT1VWRUFVX0FQRVJfVklSVCwKIAlOT1VWRUFVX0FQRVJfVlJBTSwKQEAgLTg2LDE1ICs4NCw2 IEBAIHN0YXRpYyBpbmxpbmUgc3RydWN0IG5vdXZlYXVfZG1lbSAqcGFnZV90b19kbWVtKHN0cnVj dCBwYWdlICpwYWdlKQogCXJldHVybiBjb250YWluZXJfb2YocGFnZS0+cGdtYXAsIHN0cnVjdCBu b3V2ZWF1X2RtZW0sIHBhZ2VtYXApOwogfQogCi1zdHJ1Y3Qgbm91dmVhdV9taWdyYXRlIHsKLQlz dHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYTsKLQlzdHJ1Y3Qgbm91dmVhdV9kcm0gKmRybTsKLQlz dHJ1Y3Qgbm91dmVhdV9mZW5jZSAqZmVuY2U7Ci0JdW5zaWduZWQgbG9uZyBucGFnZXM7Ci0JZG1h X2FkZHJfdCAqZG1hOwotCXVuc2lnbmVkIGxvbmcgZG1hX25yOwotfTsKLQogc3RhdGljIHVuc2ln bmVkIGxvbmcgbm91dmVhdV9kbWVtX3BhZ2VfYWRkcihzdHJ1Y3QgcGFnZSAqcGFnZSkKIHsKIAlz dHJ1Y3Qgbm91dmVhdV9kbWVtX2NodW5rICpjaHVuayA9IHBhZ2UtPnpvbmVfZGV2aWNlX2RhdGE7 CkBAIC01NjgsMTMxICs1NTcsNjYgQEAgbm91dmVhdV9kbWVtX2luaXQoc3RydWN0IG5vdXZlYXVf ZHJtICpkcm0pCiAJZHJtLT5kbWVtID0gTlVMTDsKIH0KIAotc3RhdGljIHZvaWQKLW5vdXZlYXVf ZG1lbV9taWdyYXRlX2FsbG9jX2FuZF9jb3B5KHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLAot CQkJCSAgICBjb25zdCB1bnNpZ25lZCBsb25nICpzcmNfcGZucywKLQkJCQkgICAgdW5zaWduZWQg bG9uZyAqZHN0X3BmbnMsCi0JCQkJICAgIHVuc2lnbmVkIGxvbmcgc3RhcnQsCi0JCQkJICAgIHVu c2lnbmVkIGxvbmcgZW5kLAotCQkJCSAgICBzdHJ1Y3Qgbm91dmVhdV9taWdyYXRlICptaWdyYXRl KQorc3RhdGljIHVuc2lnbmVkIGxvbmcgbm91dmVhdV9kbWVtX21pZ3JhdGVfY29weV9vbmUoc3Ry dWN0IG5vdXZlYXVfZHJtICpkcm0sCisJCXVuc2lnbmVkIGxvbmcgc3JjLCBkbWFfYWRkcl90ICpk bWFfYWRkcikKIHsKLQlzdHJ1Y3Qgbm91dmVhdV9kcm0gKmRybSA9IG1pZ3JhdGUtPmRybTsKIAlz dHJ1Y3QgZGV2aWNlICpkZXYgPSBkcm0tPmRldi0+ZGV2OwotCXVuc2lnbmVkIGxvbmcgYWRkciwg aSwgbnBhZ2VzID0gMDsKLQlub3V2ZWF1X21pZ3JhdGVfY29weV90IGNvcHk7Ci0JaW50IHJldDsK LQotCS8qIEZpcnN0IGFsbG9jYXRlIG5ldyBtZW1vcnkgKi8KLQlmb3IgKGFkZHIgPSBzdGFydCwg aSA9IDA7IGFkZHIgPCBlbmQ7IGFkZHIgKz0gUEFHRV9TSVpFLCBpKyspIHsKLQkJc3RydWN0IHBh Z2UgKmRwYWdlLCAqc3BhZ2U7Ci0KLQkJZHN0X3BmbnNbaV0gPSAwOwotCQlzcGFnZSA9IG1pZ3Jh dGVfcGZuX3RvX3BhZ2Uoc3JjX3BmbnNbaV0pOwotCQlpZiAoIXNwYWdlIHx8ICEoc3JjX3BmbnNb aV0gJiBNSUdSQVRFX1BGTl9NSUdSQVRFKSkKLQkJCWNvbnRpbnVlOwotCi0JCWRwYWdlID0gbm91 dmVhdV9kbWVtX3BhZ2VfYWxsb2NfbG9ja2VkKGRybSk7Ci0JCWlmICghZHBhZ2UpCi0JCQljb250 aW51ZTsKLQotCQlkc3RfcGZuc1tpXSA9IG1pZ3JhdGVfcGZuKHBhZ2VfdG9fcGZuKGRwYWdlKSkg fAotCQkJICAgICAgTUlHUkFURV9QRk5fTE9DS0VEIHwKLQkJCSAgICAgIE1JR1JBVEVfUEZOX0RF VklDRTsKLQkJbnBhZ2VzKys7Ci0JfQotCi0JaWYgKCFucGFnZXMpCi0JCXJldHVybjsKLQotCS8q IEFsbG9jYXRlIHN0b3JhZ2UgZm9yIERNQSBhZGRyZXNzZXMsIHNvIHdlIGNhbiB1bm1hcCBsYXRl ci4gKi8KLQltaWdyYXRlLT5kbWEgPSBrbWFsbG9jKHNpemVvZigqbWlncmF0ZS0+ZG1hKSAqIG5w YWdlcywgR0ZQX0tFUk5FTCk7Ci0JaWYgKCFtaWdyYXRlLT5kbWEpCi0JCWdvdG8gZXJyb3I7Ci0J bWlncmF0ZS0+ZG1hX25yID0gMDsKLQotCS8qIENvcHkgdGhpbmdzIG92ZXIgKi8KLQljb3B5ID0g ZHJtLT5kbWVtLT5taWdyYXRlLmNvcHlfZnVuYzsKLQlmb3IgKGFkZHIgPSBzdGFydCwgaSA9IDA7 IGFkZHIgPCBlbmQ7IGFkZHIgKz0gUEFHRV9TSVpFLCBpKyspIHsKLQkJc3RydWN0IHBhZ2UgKnNw YWdlLCAqZHBhZ2U7Ci0KLQkJZHBhZ2UgPSBtaWdyYXRlX3Bmbl90b19wYWdlKGRzdF9wZm5zW2ld KTsKLQkJaWYgKCFkcGFnZSB8fCBkc3RfcGZuc1tpXSA9PSBNSUdSQVRFX1BGTl9FUlJPUikKLQkJ CWNvbnRpbnVlOwotCi0JCXNwYWdlID0gbWlncmF0ZV9wZm5fdG9fcGFnZShzcmNfcGZuc1tpXSk7 Ci0JCWlmICghc3BhZ2UgfHwgIShzcmNfcGZuc1tpXSAmIE1JR1JBVEVfUEZOX01JR1JBVEUpKSB7 Ci0JCQlub3V2ZWF1X2RtZW1fcGFnZV9mcmVlX2xvY2tlZChkcm0sIGRwYWdlKTsKLQkJCWRzdF9w Zm5zW2ldID0gMDsKLQkJCWNvbnRpbnVlOwotCQl9Ci0KLQkJbWlncmF0ZS0+ZG1hW21pZ3JhdGUt PmRtYV9ucl0gPQotCQkJZG1hX21hcF9wYWdlX2F0dHJzKGRldiwgc3BhZ2UsIDAsIFBBR0VfU0la RSwKLQkJCQkJICAgUENJX0RNQV9CSURJUkVDVElPTkFMLAotCQkJCQkgICBETUFfQVRUUl9TS0lQ X0NQVV9TWU5DKTsKLQkJaWYgKGRtYV9tYXBwaW5nX2Vycm9yKGRldiwgbWlncmF0ZS0+ZG1hW21p Z3JhdGUtPmRtYV9ucl0pKSB7Ci0JCQlub3V2ZWF1X2RtZW1fcGFnZV9mcmVlX2xvY2tlZChkcm0s IGRwYWdlKTsKLQkJCWRzdF9wZm5zW2ldID0gMDsKLQkJCWNvbnRpbnVlOwotCQl9Ci0KLQkJcmV0 ID0gY29weShkcm0sIDEsIE5PVVZFQVVfQVBFUl9WUkFNLAotCQkJCW5vdXZlYXVfZG1lbV9wYWdl X2FkZHIoZHBhZ2UpLAotCQkJCU5PVVZFQVVfQVBFUl9IT1NULAotCQkJCW1pZ3JhdGUtPmRtYVtt aWdyYXRlLT5kbWFfbnIrK10pOwotCQlpZiAocmV0KSB7Ci0JCQlub3V2ZWF1X2RtZW1fcGFnZV9m cmVlX2xvY2tlZChkcm0sIGRwYWdlKTsKLQkJCWRzdF9wZm5zW2ldID0gMDsKLQkJCWNvbnRpbnVl OwotCQl9Ci0JfQorCXN0cnVjdCBwYWdlICpkcGFnZSwgKnNwYWdlOwogCi0Jbm91dmVhdV9mZW5j ZV9uZXcoZHJtLT5kbWVtLT5taWdyYXRlLmNoYW4sIGZhbHNlLCAmbWlncmF0ZS0+ZmVuY2UpOwor CXNwYWdlID0gbWlncmF0ZV9wZm5fdG9fcGFnZShzcmMpOworCWlmICghc3BhZ2UgfHwgIShzcmMg JiBNSUdSQVRFX1BGTl9NSUdSQVRFKSkKKwkJZ290byBvdXQ7CiAKLQlyZXR1cm47CisJZHBhZ2Ug PSBub3V2ZWF1X2RtZW1fcGFnZV9hbGxvY19sb2NrZWQoZHJtKTsKKwlpZiAoIWRwYWdlKQorCQly ZXR1cm4gMDsKIAotZXJyb3I6Ci0JZm9yIChhZGRyID0gc3RhcnQsIGkgPSAwOyBhZGRyIDwgZW5k OyBhZGRyICs9IFBBR0VfU0laRSwgKytpKSB7Ci0JCXN0cnVjdCBwYWdlICpwYWdlOworCSpkbWFf YWRkciA9IGRtYV9tYXBfcGFnZShkZXYsIHNwYWdlLCAwLCBQQUdFX1NJWkUsIERNQV9CSURJUkVD VElPTkFMKTsKKwlpZiAoZG1hX21hcHBpbmdfZXJyb3IoZGV2LCAqZG1hX2FkZHIpKQorCQlnb3Rv IG91dF9mcmVlX3BhZ2U7CiAKLQkJaWYgKCFkc3RfcGZuc1tpXSB8fCBkc3RfcGZuc1tpXSA9PSBN SUdSQVRFX1BGTl9FUlJPUikKLQkJCWNvbnRpbnVlOworCWlmIChkcm0tPmRtZW0tPm1pZ3JhdGUu Y29weV9mdW5jKGRybSwgMSwgTk9VVkVBVV9BUEVSX1ZSQU0sCisJCQlub3V2ZWF1X2RtZW1fcGFn ZV9hZGRyKGRwYWdlKSwgTk9VVkVBVV9BUEVSX0hPU1QsCisJCQkqZG1hX2FkZHIpKQorCQlnb3Rv IG91dF9kbWFfdW5tYXA7CiAKLQkJcGFnZSA9IG1pZ3JhdGVfcGZuX3RvX3BhZ2UoZHN0X3BmbnNb aV0pOwotCQlkc3RfcGZuc1tpXSA9IE1JR1JBVEVfUEZOX0VSUk9SOwotCQlpZiAocGFnZSA9PSBO VUxMKQotCQkJY29udGludWU7CisJcmV0dXJuIG1pZ3JhdGVfcGZuKHBhZ2VfdG9fcGZuKGRwYWdl KSkgfAorCQlNSUdSQVRFX1BGTl9MT0NLRUQgfCBNSUdSQVRFX1BGTl9ERVZJQ0U7CiAKLQkJX19m cmVlX3BhZ2UocGFnZSk7Ci0JfQorb3V0X2RtYV91bm1hcDoKKwlkbWFfdW5tYXBfcGFnZShkZXYs ICpkbWFfYWRkciwgUEFHRV9TSVpFLCBETUFfQklESVJFQ1RJT05BTCk7CitvdXRfZnJlZV9wYWdl OgorCW5vdXZlYXVfZG1lbV9wYWdlX2ZyZWVfbG9ja2VkKGRybSwgZHBhZ2UpOworb3V0OgorCXJl dHVybiAwOwogfQogCi1zdGF0aWMgdm9pZAotbm91dmVhdV9kbWVtX21pZ3JhdGVfZmluYWxpemVf YW5kX21hcChzdHJ1Y3Qgbm91dmVhdV9taWdyYXRlICptaWdyYXRlKQorc3RhdGljIHZvaWQgbm91 dmVhdV9kbWVtX21pZ3JhdGVfY2h1bmsoc3RydWN0IG5vdXZlYXVfZHJtICpkcm0sCisJCXN0cnVj dCBtaWdyYXRlX3ZtYSAqYXJncywgZG1hX2FkZHJfdCAqZG1hX2FkZHJzKQogewotCXN0cnVjdCBu b3V2ZWF1X2RybSAqZHJtID0gbWlncmF0ZS0+ZHJtOworCXN0cnVjdCBub3V2ZWF1X2ZlbmNlICpm ZW5jZTsKKwl1bnNpZ25lZCBsb25nIGFkZHIgPSBhcmdzLT5zdGFydCwgbnJfZG1hID0gMCwgaTsK KworCWZvciAoaSA9IDA7IGFkZHIgPCBhcmdzLT5lbmQ7IGkrKykgeworCQlhcmdzLT5kc3RbaV0g PSBub3V2ZWF1X2RtZW1fbWlncmF0ZV9jb3B5X29uZShkcm0sIGFyZ3MtPnNyY1tpXSwKKwkJCQlk bWFfYWRkcnMgKyBucl9kbWEpOworCQlpZiAoYXJncy0+ZHN0W2ldKQorCQkJbnJfZG1hKys7CisJ CWFkZHIgKz0gUEFHRV9TSVpFOworCX0KIAotCW5vdXZlYXVfZG1lbV9mZW5jZV9kb25lKCZtaWdy YXRlLT5mZW5jZSk7CisJbm91dmVhdV9mZW5jZV9uZXcoZHJtLT5kbWVtLT5taWdyYXRlLmNoYW4s IGZhbHNlLCAmZmVuY2UpOworCW1pZ3JhdGVfdm1hX3BhZ2VzKGFyZ3MpOworCW5vdXZlYXVfZG1l bV9mZW5jZV9kb25lKCZmZW5jZSk7CiAKLQl3aGlsZSAobWlncmF0ZS0+ZG1hX25yLS0pIHsKLQkJ ZG1hX3VubWFwX3BhZ2UoZHJtLT5kZXYtPmRldiwgbWlncmF0ZS0+ZG1hW21pZ3JhdGUtPmRtYV9u cl0sCi0JCQkgICAgICAgUEFHRV9TSVpFLCBQQ0lfRE1BX0JJRElSRUNUSU9OQUwpOworCXdoaWxl IChucl9kbWEtLSkgeworCQlkbWFfdW5tYXBfcGFnZShkcm0tPmRldi0+ZGV2LCBkbWFfYWRkcnNb bnJfZG1hXSwgUEFHRV9TSVpFLAorCQkJCURNQV9CSURJUkVDVElPTkFMKTsKIAl9Ci0Ja2ZyZWUo bWlncmF0ZS0+ZG1hKTsKLQogCS8qCi0JICogRklYTUUgb3B0aW1pemF0aW9uOiB1cGRhdGUgR1BV IHBhZ2UgdGFibGUgdG8gcG9pbnQgdG8gbmV3bHkKLQkgKiBtaWdyYXRlZCBtZW1vcnkuCisJICog RklYTUUgb3B0aW1pemF0aW9uOiB1cGRhdGUgR1BVIHBhZ2UgdGFibGUgdG8gcG9pbnQgdG8gbmV3 bHkgbWlncmF0ZWQKKwkgKiBtZW1vcnkuCiAJICovCi19Ci0KLXN0YXRpYyB2b2lkIG5vdXZlYXVf ZG1lbV9taWdyYXRlX2NodW5rKHN0cnVjdCBtaWdyYXRlX3ZtYSAqYXJncywKLQkJc3RydWN0IG5v dXZlYXVfbWlncmF0ZSAqbWlncmF0ZSkKLXsKLQlub3V2ZWF1X2RtZW1fbWlncmF0ZV9hbGxvY19h bmRfY29weShhcmdzLT52bWEsIGFyZ3MtPnNyYywgYXJncy0+ZHN0LAotCQkJYXJncy0+c3RhcnQs IGFyZ3MtPmVuZCwgbWlncmF0ZSk7Ci0JbWlncmF0ZV92bWFfcGFnZXMoYXJncyk7Ci0Jbm91dmVh dV9kbWVtX21pZ3JhdGVfZmluYWxpemVfYW5kX21hcChtaWdyYXRlKTsKIAltaWdyYXRlX3ZtYV9m aW5hbGl6ZShhcmdzKTsKIH0KIApAQCAtNzA0LDM4ICs2MjgsNDAgQEAgbm91dmVhdV9kbWVtX21p Z3JhdGVfdm1hKHN0cnVjdCBub3V2ZWF1X2RybSAqZHJtLAogewogCXVuc2lnbmVkIGxvbmcgbnBh Z2VzID0gKGVuZCAtIHN0YXJ0KSA+PiBQQUdFX1NISUZUOwogCXVuc2lnbmVkIGxvbmcgbWF4ID0g bWluKFNHX01BWF9TSU5HTEVfQUxMT0MsIG5wYWdlcyk7CisJZG1hX2FkZHJfdCAqZG1hX2FkZHJz OwogCXN0cnVjdCBtaWdyYXRlX3ZtYSBhcmdzID0gewogCQkudm1hCQk9IHZtYSwKIAkJLnN0YXJ0 CQk9IHN0YXJ0LAogCX07Ci0Jc3RydWN0IG5vdXZlYXVfbWlncmF0ZSBtaWdyYXRlID0gewotCQku ZHJtCQk9IGRybSwKLQkJLnZtYQkJPSB2bWEsCi0JCS5ucGFnZXMJCT0gbnBhZ2VzLAotCX07CiAJ dW5zaWduZWQgbG9uZyBjLCBpOwogCWludCByZXQgPSAtRU5PTUVNOwogCi0JYXJncy5zcmMgPSBr emFsbG9jKHNpemVvZihsb25nKSAqIG1heCwgR0ZQX0tFUk5FTCk7CisJYXJncy5zcmMgPSBrY2Fs bG9jKG1heCwgc2l6ZW9mKGFyZ3Muc3JjKSwgR0ZQX0tFUk5FTCk7CiAJaWYgKCFhcmdzLnNyYykK IAkJZ290byBvdXQ7Ci0JYXJncy5kc3QgPSBremFsbG9jKHNpemVvZihsb25nKSAqIG1heCwgR0ZQ X0tFUk5FTCk7CisJYXJncy5kc3QgPSBrY2FsbG9jKG1heCwgc2l6ZW9mKGFyZ3MuZHN0KSwgR0ZQ X0tFUk5FTCk7CiAJaWYgKCFhcmdzLmRzdCkKIAkJZ290byBvdXRfZnJlZV9zcmM7CiAKKwlkbWFf YWRkcnMgPSBrbWFsbG9jX2FycmF5KG1heCwgc2l6ZW9mKCpkbWFfYWRkcnMpLCBHRlBfS0VSTkVM KTsKKwlpZiAoIWRtYV9hZGRycykKKwkJZ290byBvdXRfZnJlZV9kc3Q7CisKIAlmb3IgKGkgPSAw OyBpIDwgbnBhZ2VzOyBpICs9IGMpIHsKIAkJYyA9IG1pbihTR19NQVhfU0lOR0xFX0FMTE9DLCBu cGFnZXMpOwogCQlhcmdzLmVuZCA9IHN0YXJ0ICsgKGMgPDwgUEFHRV9TSElGVCk7CiAJCXJldCA9 IG1pZ3JhdGVfdm1hX3NldHVwKCZhcmdzKTsKIAkJaWYgKHJldCkKLQkJCWdvdG8gb3V0X2ZyZWVf ZHN0OworCQkJZ290byBvdXRfZnJlZV9kbWE7CiAKIAkJaWYgKGFyZ3MuY3BhZ2VzKQotCQkJbm91 dmVhdV9kbWVtX21pZ3JhdGVfY2h1bmsoJmFyZ3MsICZtaWdyYXRlKTsKKwkJCW5vdXZlYXVfZG1l bV9taWdyYXRlX2NodW5rKGRybSwgJmFyZ3MsIGRtYV9hZGRycyk7CiAJCWFyZ3Muc3RhcnQgPSBh cmdzLmVuZDsKIAl9CiAKIAlyZXQgPSAwOworb3V0X2ZyZWVfZG1hOgorCWtmcmVlKGRtYV9hZGRy cyk7CiBvdXRfZnJlZV9kc3Q6CiAJa2ZyZWUoYXJncy5kc3QpOwogb3V0X2ZyZWVfc3JjOgotLSAK Mi4yMC4xCgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpO b3V2ZWF1IG1haWxpbmcgbGlzdApOb3V2ZWF1QGxpc3RzLmZyZWVkZXNrdG9wLm9yZwpodHRwczov L2xpc3RzLmZyZWVkZXNrdG9wLm9yZy9tYWlsbWFuL2xpc3RpbmZvL25vdXZlYXU=