From mboxrd@z Thu Jan 1 00:00:00 1970 From: Christoph Hellwig Subject: [PATCH 01/10] mm: turn migrate_vma upside down Date: Wed, 14 Aug 2019 09:59:19 +0200 Message-ID: <20190814075928.23766-2-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 VGhlcmUgaXNuJ3QgYW55IGdvb2QgcmVhc29uIHRvIHBhc3MgY2FsbGJhY2tzIHRvIG1pZ3JhdGVf dm1hLiAgSW5zdGVhZAp3ZSBjYW4ganVzdCBleHBvcnQgdGhlIHRocmVlIHN0ZXBzIGRvbmUgYnkg dGhpcyBmdW5jdGlvbiB0byBkcml2ZXJzIGFuZApsZXQgdGhlbSBzZXF1ZW5jZSB0aGUgb3BlcmF0 aW9uIHdpdGhvdXQgY2FsbGJhY2tzLiAgVGhpcyByZW1vdmVzIGEgbG90Cm9mIGJvaWxlcnBsYXRl IGNvZGUgYXMtaXMsIGFuZCB3aWxsIGFsbG93IHRoZSBkcml2ZXJzIHRvIGRyYXN0aWNhbGx5Cmlt cHJvdmUgY29kZSBmbG93IGFuZCBlcnJvciBoYW5kbGluZyBmdXJ0aGVyIG9uLgoKU2lnbmVkLW9m Zi1ieTogQ2hyaXN0b3BoIEhlbGx3aWcgPGhjaEBsc3QuZGU+ClJldmlld2VkLWJ5OiBSYWxwaCBD YW1wYmVsbCA8cmNhbXBiZWxsQG52aWRpYS5jb20+Ci0tLQogRG9jdW1lbnRhdGlvbi92bS9obW0u cnN0ICAgICAgICAgICAgICAgfCAgNTUgKy0tLS0tCiBkcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9u b3V2ZWF1X2RtZW0uYyB8IDEyMiArKysrKysrLS0tLS0tCiBpbmNsdWRlL2xpbnV4L21pZ3JhdGUu aCAgICAgICAgICAgICAgICB8IDExOCArKy0tLS0tLS0tLS0KIG1tL21pZ3JhdGUuYyAgICAgICAg ICAgICAgICAgICAgICAgICAgIHwgMjQ0ICsrKysrKysrKysrLS0tLS0tLS0tLS0tLS0KIDQgZmls ZXMgY2hhbmdlZCwgMTk1IGluc2VydGlvbnMoKyksIDM0NCBkZWxldGlvbnMoLSkKCmRpZmYgLS1n aXQgYS9Eb2N1bWVudGF0aW9uL3ZtL2htbS5yc3QgYi9Eb2N1bWVudGF0aW9uL3ZtL2htbS5yc3QK aW5kZXggZTYzYzExZjdlMGUwLi40ZjgxYzc3MDU5ZTMgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRp b24vdm0vaG1tLnJzdAorKysgYi9Eb2N1bWVudGF0aW9uL3ZtL2htbS5yc3QKQEAgLTMzOSw1OCAr MzM5LDkgQEAgTWlncmF0aW9uIHRvIGFuZCBmcm9tIGRldmljZSBtZW1vcnkKID09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09CiAKIEJlY2F1c2UgdGhlIENQVSBjYW5ub3QgYWNjZXNz IGRldmljZSBtZW1vcnksIG1pZ3JhdGlvbiBtdXN0IHVzZSB0aGUgZGV2aWNlIERNQQotZW5naW5l IHRvIHBlcmZvcm0gY29weSBmcm9tIGFuZCB0byBkZXZpY2UgbWVtb3J5LiBGb3IgdGhpcyB3ZSBu ZWVkIGEgbmV3Ci1taWdyYXRpb24gaGVscGVyOjoKLQotIGludCBtaWdyYXRlX3ZtYShjb25zdCBz dHJ1Y3QgbWlncmF0ZV92bWFfb3BzICpvcHMsCi0gICAgICAgICAgICAgICAgIHN0cnVjdCB2bV9h cmVhX3N0cnVjdCAqdm1hLAotICAgICAgICAgICAgICAgICB1bnNpZ25lZCBsb25nIG1lbnRyaWVz LAotICAgICAgICAgICAgICAgICB1bnNpZ25lZCBsb25nIHN0YXJ0LAotICAgICAgICAgICAgICAg ICB1bnNpZ25lZCBsb25nIGVuZCwKLSAgICAgICAgICAgICAgICAgdW5zaWduZWQgbG9uZyAqc3Jj LAotICAgICAgICAgICAgICAgICB1bnNpZ25lZCBsb25nICpkc3QsCi0gICAgICAgICAgICAgICAg IHZvaWQgKnByaXZhdGUpOwotCi1Vbmxpa2Ugb3RoZXIgbWlncmF0aW9uIGZ1bmN0aW9ucyBpdCB3 b3JrcyBvbiBhIHJhbmdlIG9mIHZpcnR1YWwgYWRkcmVzcywgdGhlcmUKLWFyZSB0d28gcmVhc29u cyBmb3IgdGhhdC4gRmlyc3QsIGRldmljZSBETUEgY29weSBoYXMgYSBoaWdoIHNldHVwIG92ZXJo ZWFkIGNvc3QKLWFuZCB0aHVzIGJhdGNoaW5nIG11bHRpcGxlIHBhZ2VzIGlzIG5lZWRlZCBhcyBv dGhlcndpc2UgdGhlIG1pZ3JhdGlvbiBvdmVyaGVhZAotbWFrZXMgdGhlIHdob2xlIGV4ZXJjaXNl IHBvaW50bGVzcy4gVGhlIHNlY29uZCByZWFzb24gaXMgYmVjYXVzZSB0aGUKLW1pZ3JhdGlvbiBt aWdodCBiZSBmb3IgYSByYW5nZSBvZiBhZGRyZXNzZXMgdGhlIGRldmljZSBpcyBhY3RpdmVseSBh Y2Nlc3NpbmcuCi0KLVRoZSBtaWdyYXRlX3ZtYV9vcHMgc3RydWN0IGRlZmluZXMgdHdvIGNhbGxi YWNrcy4gRmlyc3Qgb25lIChhbGxvY19hbmRfY29weSgpKQotY29udHJvbHMgZGVzdGluYXRpb24g bWVtb3J5IGFsbG9jYXRpb24gYW5kIGNvcHkgb3BlcmF0aW9uLiBTZWNvbmQgb25lIGlzIHRoZXJl Ci10byBhbGxvdyB0aGUgZGV2aWNlIGRyaXZlciB0byBwZXJmb3JtIGNsZWFudXAgb3BlcmF0aW9u cyBhZnRlciBtaWdyYXRpb246OgotCi0gc3RydWN0IG1pZ3JhdGVfdm1hX29wcyB7Ci0gICAgIHZv aWQgKCphbGxvY19hbmRfY29weSkoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsCi0gICAgICAg ICAgICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgbG9uZyAqc3JjLAotICAgICAgICAg ICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcgKmRzdCwKLSAgICAgICAgICAgICAgICAg ICAgICAgICAgICB1bnNpZ25lZCBsb25nIHN0YXJ0LAotICAgICAgICAgICAgICAgICAgICAgICAg ICAgIHVuc2lnbmVkIGxvbmcgZW5kLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQg KnByaXZhdGUpOwotICAgICB2b2lkICgqZmluYWxpemVfYW5kX21hcCkoc3RydWN0IHZtX2FyZWFf c3RydWN0ICp2bWEsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25l ZCBsb25nICpzcmMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25l ZCBsb25nICpkc3QsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBsb25n IHN0YXJ0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgbG9uZyBlbmQs Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICpwcml2YXRlKTsKLSB9OwotCi1J dCBpcyBpbXBvcnRhbnQgdG8gc3RyZXNzIHRoYXQgdGhlc2UgbWlncmF0aW9uIGhlbHBlcnMgYWxs b3cgZm9yIGhvbGVzIGluIHRoZQotdmlydHVhbCBhZGRyZXNzIHJhbmdlLiBTb21lIHBhZ2VzIGlu IHRoZSByYW5nZSBtaWdodCBub3QgYmUgbWlncmF0ZWQgZm9yIGFsbAotdGhlIHVzdWFsIHJlYXNv bnMgKHBhZ2UgaXMgcGlubmVkLCBwYWdlIGlzIGxvY2tlZCwgLi4uKS4gVGhpcyBoZWxwZXIgZG9l cyBub3QKLWZhaWwgYnV0IGp1c3Qgc2tpcHMgb3ZlciB0aG9zZSBwYWdlcy4KLQotVGhlIGFsbG9j X2FuZF9jb3B5KCkgbWlnaHQgZGVjaWRlIHRvIG5vdCBtaWdyYXRlIGFsbCBwYWdlcyBpbiB0aGUK LXJhbmdlIChmb3IgcmVhc29ucyB1bmRlciB0aGUgY2FsbGJhY2sgY29udHJvbCkuIEZvciB0aG9z ZSwgdGhlIGNhbGxiYWNrIGp1c3QKLWhhcyB0byBsZWF2ZSB0aGUgY29ycmVzcG9uZGluZyBkc3Qg ZW50cnkgZW1wdHkuCi0KLUZpbmFsbHksIHRoZSBtaWdyYXRpb24gb2YgdGhlIHN0cnVjdCBwYWdl IG1pZ2h0IGZhaWwgKGZvciBmaWxlIGJhY2tlZCBwYWdlKSBmb3IKLXZhcmlvdXMgcmVhc29ucyAo ZmFpbHVyZSB0byBmcmVlemUgcmVmZXJlbmNlLCBvciB1cGRhdGUgcGFnZSBjYWNoZSwgLi4uKS4g SWYKLXRoYXQgaGFwcGVucywgdGhlbiB0aGUgZmluYWxpemVfYW5kX21hcCgpIGNhbiBjYXRjaCBh bnkgcGFnZXMgdGhhdCB3ZXJlIG5vdAotbWlncmF0ZWQuIE5vdGUgdGhvc2UgcGFnZXMgd2VyZSBz dGlsbCBjb3BpZWQgdG8gYSBuZXcgcGFnZSBhbmQgdGh1cyB3ZSB3YXN0ZWQKLWJhbmR3aWR0aCBi dXQgdGhpcyBpcyBjb25zaWRlcmVkIGFzIGEgcmFyZSBldmVudCBhbmQgYSBwcmljZSB0aGF0IHdl IGFyZQotd2lsbGluZyB0byBwYXkgdG8ga2VlcCBhbGwgdGhlIGNvZGUgc2ltcGxlci4KK2VuZ2lu ZSB0byBwZXJmb3JtIGNvcHkgZnJvbSBhbmQgdG8gZGV2aWNlIG1lbW9yeS4gRm9yIHRoaXMgd2Ug bmVlZCBhIG5ldyB0bwordXNlIG1pZ3JhdGVfdm1hX3NldHVwKCksIG1pZ3JhdGVfdm1hX3BhZ2Vz KCksIGFuZCBtaWdyYXRlX3ZtYV9maW5hbGl6ZSgpCitoZWxwZXJzLgogCiAKIE1lbW9yeSBjZ3Jv dXAgKG1lbWNnKSBhbmQgcnNzIGFjY291bnRpbmcKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2Ry bS9ub3V2ZWF1L25vdXZlYXVfZG1lbS5jIGIvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVh dV9kbWVtLmMKaW5kZXggMzQ1YzYzY2I3NTJhLi4zODQxNjc5OGFiZDQgMTAwNjQ0Ci0tLSBhL2Ry aXZlcnMvZ3B1L2RybS9ub3V2ZWF1L25vdXZlYXVfZG1lbS5jCisrKyBiL2RyaXZlcnMvZ3B1L2Ry bS9ub3V2ZWF1L25vdXZlYXVfZG1lbS5jCkBAIC0xMzEsOSArMTMxLDggQEAgbm91dmVhdV9kbWVt X2ZhdWx0X2FsbG9jX2FuZF9jb3B5KHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLAogCQkJCSAg dW5zaWduZWQgbG9uZyAqZHN0X3BmbnMsCiAJCQkJICB1bnNpZ25lZCBsb25nIHN0YXJ0LAogCQkJ CSAgdW5zaWduZWQgbG9uZyBlbmQsCi0JCQkJICB2b2lkICpwcml2YXRlKQorCQkJCSAgc3RydWN0 IG5vdXZlYXVfZG1lbV9mYXVsdCAqZmF1bHQpCiB7Ci0Jc3RydWN0IG5vdXZlYXVfZG1lbV9mYXVs dCAqZmF1bHQgPSBwcml2YXRlOwogCXN0cnVjdCBub3V2ZWF1X2RybSAqZHJtID0gZmF1bHQtPmRy bTsKIAlzdHJ1Y3QgZGV2aWNlICpkZXYgPSBkcm0tPmRldi0+ZGV2OwogCXVuc2lnbmVkIGxvbmcg YWRkciwgaSwgbnBhZ2VzID0gMDsKQEAgLTIzMCwxNCArMjI5LDkgQEAgbm91dmVhdV9kbWVtX2Zh dWx0X2FsbG9jX2FuZF9jb3B5KHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLAogCX0KIH0KIAot dm9pZCBub3V2ZWF1X2RtZW1fZmF1bHRfZmluYWxpemVfYW5kX21hcChzdHJ1Y3Qgdm1fYXJlYV9z dHJ1Y3QgKnZtYSwKLQkJCQkJIGNvbnN0IHVuc2lnbmVkIGxvbmcgKnNyY19wZm5zLAotCQkJCQkg Y29uc3QgdW5zaWduZWQgbG9uZyAqZHN0X3BmbnMsCi0JCQkJCSB1bnNpZ25lZCBsb25nIHN0YXJ0 LAotCQkJCQkgdW5zaWduZWQgbG9uZyBlbmQsCi0JCQkJCSB2b2lkICpwcml2YXRlKQorc3RhdGlj IHZvaWQKK25vdXZlYXVfZG1lbV9mYXVsdF9maW5hbGl6ZV9hbmRfbWFwKHN0cnVjdCBub3V2ZWF1 X2RtZW1fZmF1bHQgKmZhdWx0KQogewotCXN0cnVjdCBub3V2ZWF1X2RtZW1fZmF1bHQgKmZhdWx0 ID0gcHJpdmF0ZTsKIAlzdHJ1Y3Qgbm91dmVhdV9kcm0gKmRybSA9IGZhdWx0LT5kcm07CiAKIAlp ZiAoZmF1bHQtPmZlbmNlKSB7CkBAIC0yNTcsMjkgKzI1MSwzNSBAQCB2b2lkIG5vdXZlYXVfZG1l bV9mYXVsdF9maW5hbGl6ZV9hbmRfbWFwKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLAogCWtm cmVlKGZhdWx0LT5kbWEpOwogfQogCi1zdGF0aWMgY29uc3Qgc3RydWN0IG1pZ3JhdGVfdm1hX29w cyBub3V2ZWF1X2RtZW1fZmF1bHRfbWlncmF0ZV9vcHMgPSB7Ci0JLmFsbG9jX2FuZF9jb3B5CQk9 IG5vdXZlYXVfZG1lbV9mYXVsdF9hbGxvY19hbmRfY29weSwKLQkuZmluYWxpemVfYW5kX21hcAk9 IG5vdXZlYXVfZG1lbV9mYXVsdF9maW5hbGl6ZV9hbmRfbWFwLAotfTsKLQogc3RhdGljIHZtX2Zh dWx0X3Qgbm91dmVhdV9kbWVtX21pZ3JhdGVfdG9fcmFtKHN0cnVjdCB2bV9mYXVsdCAqdm1mKQog ewogCXN0cnVjdCBub3V2ZWF1X2RtZW0gKmRtZW0gPSBwYWdlX3RvX2RtZW0odm1mLT5wYWdlKTsK IAl1bnNpZ25lZCBsb25nIHNyY1sxXSA9IHswfSwgZHN0WzFdID0gezB9OworCXN0cnVjdCBtaWdy YXRlX3ZtYSBhcmdzID0geworCQkudm1hCQk9IHZtZi0+dm1hLAorCQkuc3RhcnQJCT0gdm1mLT5h ZGRyZXNzLAorCQkuZW5kCQk9IHZtZi0+YWRkcmVzcyArIFBBR0VfU0laRSwKKwkJLnNyYwkJPSBz cmMsCisJCS5kc3QJCT0gZHN0LAorCX07CiAJc3RydWN0IG5vdXZlYXVfZG1lbV9mYXVsdCBmYXVs dCA9IHsgLmRybSA9IGRtZW0tPmRybSB9OwotCWludCByZXQ7CiAKIAkvKgogCSAqIEZJWE1FIHdo YXQgd2UgcmVhbGx5IHdhbnQgaXMgdG8gZmluZCBzb21lIGhldXJpc3RpYyB0byBtaWdyYXRlIG1v cmUKIAkgKiB0aGFuIGp1c3Qgb25lIHBhZ2Ugb24gQ1BVIGZhdWx0LiBXaGVuIHN1Y2ggZmF1bHQg aGFwcGVucyBpdCBpcyB2ZXJ5CiAJICogbGlrZWx5IHRoYXQgbW9yZSBzdXJyb3VuZGluZyBwYWdl IHdpbGwgQ1BVIGZhdWx0IHRvby4KIAkgKi8KLQlyZXQgPSBtaWdyYXRlX3ZtYSgmbm91dmVhdV9k bWVtX2ZhdWx0X21pZ3JhdGVfb3BzLCB2bWYtPnZtYSwKLQkJCXZtZi0+YWRkcmVzcywgdm1mLT5h ZGRyZXNzICsgUEFHRV9TSVpFLAotCQkJc3JjLCBkc3QsICZmYXVsdCk7Ci0JaWYgKHJldCkKKwlp ZiAobWlncmF0ZV92bWFfc2V0dXAoJmFyZ3MpIDwgMCkKIAkJcmV0dXJuIFZNX0ZBVUxUX1NJR0JV UzsKKwlpZiAoIWFyZ3MuY3BhZ2VzKQorCQlyZXR1cm4gMDsKKworCW5vdXZlYXVfZG1lbV9mYXVs dF9hbGxvY19hbmRfY29weShhcmdzLnZtYSwgc3JjLCBkc3QsIGFyZ3Muc3RhcnQsCisJCQlhcmdz LmVuZCwgJmZhdWx0KTsKKwltaWdyYXRlX3ZtYV9wYWdlcygmYXJncyk7CisJbm91dmVhdV9kbWVt X2ZhdWx0X2ZpbmFsaXplX2FuZF9tYXAoJmZhdWx0KTsKIAorCW1pZ3JhdGVfdm1hX2ZpbmFsaXpl KCZhcmdzKTsKIAlpZiAoZHN0WzBdID09IE1JR1JBVEVfUEZOX0VSUk9SKQogCQlyZXR1cm4gVk1f RkFVTFRfU0lHQlVTOwogCkBAIC02NDgsOSArNjQ4LDggQEAgbm91dmVhdV9kbWVtX21pZ3JhdGVf YWxsb2NfYW5kX2NvcHkoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsCiAJCQkJICAgIHVuc2ln bmVkIGxvbmcgKmRzdF9wZm5zLAogCQkJCSAgICB1bnNpZ25lZCBsb25nIHN0YXJ0LAogCQkJCSAg ICB1bnNpZ25lZCBsb25nIGVuZCwKLQkJCQkgICAgdm9pZCAqcHJpdmF0ZSkKKwkJCQkgICAgc3Ry dWN0IG5vdXZlYXVfbWlncmF0ZSAqbWlncmF0ZSkKIHsKLQlzdHJ1Y3Qgbm91dmVhdV9taWdyYXRl ICptaWdyYXRlID0gcHJpdmF0ZTsKIAlzdHJ1Y3Qgbm91dmVhdV9kcm0gKmRybSA9IG1pZ3JhdGUt PmRybTsKIAlzdHJ1Y3QgZGV2aWNlICpkZXYgPSBkcm0tPmRldi0+ZGV2OwogCXVuc2lnbmVkIGxv bmcgYWRkciwgaSwgbnBhZ2VzID0gMDsKQEAgLTc0NywxNCArNzQ2LDkgQEAgbm91dmVhdV9kbWVt X21pZ3JhdGVfYWxsb2NfYW5kX2NvcHkoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsCiAJfQog fQogCi12b2lkIG5vdXZlYXVfZG1lbV9taWdyYXRlX2ZpbmFsaXplX2FuZF9tYXAoc3RydWN0IHZt X2FyZWFfc3RydWN0ICp2bWEsCi0JCQkJCSAgIGNvbnN0IHVuc2lnbmVkIGxvbmcgKnNyY19wZm5z LAotCQkJCQkgICBjb25zdCB1bnNpZ25lZCBsb25nICpkc3RfcGZucywKLQkJCQkJICAgdW5zaWdu ZWQgbG9uZyBzdGFydCwKLQkJCQkJICAgdW5zaWduZWQgbG9uZyBlbmQsCi0JCQkJCSAgIHZvaWQg KnByaXZhdGUpCitzdGF0aWMgdm9pZAorbm91dmVhdV9kbWVtX21pZ3JhdGVfZmluYWxpemVfYW5k X21hcChzdHJ1Y3Qgbm91dmVhdV9taWdyYXRlICptaWdyYXRlKQogewotCXN0cnVjdCBub3V2ZWF1 X21pZ3JhdGUgKm1pZ3JhdGUgPSBwcml2YXRlOwogCXN0cnVjdCBub3V2ZWF1X2RybSAqZHJtID0g bWlncmF0ZS0+ZHJtOwogCiAJaWYgKG1pZ3JhdGUtPmZlbmNlKSB7CkBAIC03NzksMTAgKzc3Mywx NSBAQCB2b2lkIG5vdXZlYXVfZG1lbV9taWdyYXRlX2ZpbmFsaXplX2FuZF9tYXAoc3RydWN0IHZt X2FyZWFfc3RydWN0ICp2bWEsCiAJICovCiB9CiAKLXN0YXRpYyBjb25zdCBzdHJ1Y3QgbWlncmF0 ZV92bWFfb3BzIG5vdXZlYXVfZG1lbV9taWdyYXRlX29wcyA9IHsKLQkuYWxsb2NfYW5kX2NvcHkJ CT0gbm91dmVhdV9kbWVtX21pZ3JhdGVfYWxsb2NfYW5kX2NvcHksCi0JLmZpbmFsaXplX2FuZF9t YXAJPSBub3V2ZWF1X2RtZW1fbWlncmF0ZV9maW5hbGl6ZV9hbmRfbWFwLAotfTsKK3N0YXRpYyB2 b2lkIG5vdXZlYXVfZG1lbV9taWdyYXRlX2NodW5rKHN0cnVjdCBtaWdyYXRlX3ZtYSAqYXJncywK KwkJc3RydWN0IG5vdXZlYXVfbWlncmF0ZSAqbWlncmF0ZSkKK3sKKwlub3V2ZWF1X2RtZW1fbWln cmF0ZV9hbGxvY19hbmRfY29weShhcmdzLT52bWEsIGFyZ3MtPnNyYywgYXJncy0+ZHN0LAorCQkJ YXJncy0+c3RhcnQsIGFyZ3MtPmVuZCwgbWlncmF0ZSk7CisJbWlncmF0ZV92bWFfcGFnZXMoYXJn cyk7CisJbm91dmVhdV9kbWVtX21pZ3JhdGVfZmluYWxpemVfYW5kX21hcChtaWdyYXRlKTsKKwlt aWdyYXRlX3ZtYV9maW5hbGl6ZShhcmdzKTsKK30KIAogaW50CiBub3V2ZWF1X2RtZW1fbWlncmF0 ZV92bWEoc3RydWN0IG5vdXZlYXVfZHJtICpkcm0sCkBAIC03OTAsNDAgKzc4OSw0NSBAQCBub3V2 ZWF1X2RtZW1fbWlncmF0ZV92bWEoc3RydWN0IG5vdXZlYXVfZHJtICpkcm0sCiAJCQkgdW5zaWdu ZWQgbG9uZyBzdGFydCwKIAkJCSB1bnNpZ25lZCBsb25nIGVuZCkKIHsKLQl1bnNpZ25lZCBsb25n ICpzcmNfcGZucywgKmRzdF9wZm5zLCBucGFnZXM7Ci0Jc3RydWN0IG5vdXZlYXVfbWlncmF0ZSBt aWdyYXRlID0gezB9OwotCXVuc2lnbmVkIGxvbmcgaSwgYywgbWF4OwotCWludCByZXQgPSAwOwot Ci0JbnBhZ2VzID0gKGVuZCAtIHN0YXJ0KSA+PiBQQUdFX1NISUZUOwotCW1heCA9IG1pbihTR19N QVhfU0lOR0xFX0FMTE9DLCBucGFnZXMpOwotCXNyY19wZm5zID0ga3phbGxvYyhzaXplb2YobG9u ZykgKiBtYXgsIEdGUF9LRVJORUwpOwotCWlmIChzcmNfcGZucyA9PSBOVUxMKQotCQlyZXR1cm4g LUVOT01FTTsKLQlkc3RfcGZucyA9IGt6YWxsb2Moc2l6ZW9mKGxvbmcpICogbWF4LCBHRlBfS0VS TkVMKTsKLQlpZiAoZHN0X3BmbnMgPT0gTlVMTCkgewotCQlrZnJlZShzcmNfcGZucyk7Ci0JCXJl dHVybiAtRU5PTUVNOwotCX0KKwl1bnNpZ25lZCBsb25nIG5wYWdlcyA9IChlbmQgLSBzdGFydCkg Pj4gUEFHRV9TSElGVDsKKwl1bnNpZ25lZCBsb25nIG1heCA9IG1pbihTR19NQVhfU0lOR0xFX0FM TE9DLCBucGFnZXMpOworCXN0cnVjdCBtaWdyYXRlX3ZtYSBhcmdzID0geworCQkudm1hCQk9IHZt YSwKKwkJLnN0YXJ0CQk9IHN0YXJ0LAorCX07CisJc3RydWN0IG5vdXZlYXVfbWlncmF0ZSBtaWdy YXRlID0geworCQkuZHJtCQk9IGRybSwKKwkJLnZtYQkJPSB2bWEsCisJCS5ucGFnZXMJCT0gbnBh Z2VzLAorCX07CisJdW5zaWduZWQgbG9uZyBjLCBpOworCWludCByZXQgPSAtRU5PTUVNOworCisJ YXJncy5zcmMgPSBremFsbG9jKHNpemVvZihsb25nKSAqIG1heCwgR0ZQX0tFUk5FTCk7CisJaWYg KCFhcmdzLnNyYykKKwkJZ290byBvdXQ7CisJYXJncy5kc3QgPSBremFsbG9jKHNpemVvZihsb25n KSAqIG1heCwgR0ZQX0tFUk5FTCk7CisJaWYgKCFhcmdzLmRzdCkKKwkJZ290byBvdXRfZnJlZV9z cmM7CiAKLQltaWdyYXRlLmRybSA9IGRybTsKLQltaWdyYXRlLnZtYSA9IHZtYTsKLQltaWdyYXRl Lm5wYWdlcyA9IG5wYWdlczsKIAlmb3IgKGkgPSAwOyBpIDwgbnBhZ2VzOyBpICs9IGMpIHsKLQkJ dW5zaWduZWQgbG9uZyBuZXh0OwotCiAJCWMgPSBtaW4oU0dfTUFYX1NJTkdMRV9BTExPQywgbnBh Z2VzKTsKLQkJbmV4dCA9IHN0YXJ0ICsgKGMgPDwgUEFHRV9TSElGVCk7Ci0JCXJldCA9IG1pZ3Jh dGVfdm1hKCZub3V2ZWF1X2RtZW1fbWlncmF0ZV9vcHMsIHZtYSwgc3RhcnQsCi0JCQkJICBuZXh0 LCBzcmNfcGZucywgZHN0X3BmbnMsICZtaWdyYXRlKTsKKwkJYXJncy5lbmQgPSBzdGFydCArIChj IDw8IFBBR0VfU0hJRlQpOworCQlyZXQgPSBtaWdyYXRlX3ZtYV9zZXR1cCgmYXJncyk7CiAJCWlm IChyZXQpCi0JCQlnb3RvIG91dDsKLQkJc3RhcnQgPSBuZXh0OworCQkJZ290byBvdXRfZnJlZV9k c3Q7CisKKwkJaWYgKGFyZ3MuY3BhZ2VzKQorCQkJbm91dmVhdV9kbWVtX21pZ3JhdGVfY2h1bmso JmFyZ3MsICZtaWdyYXRlKTsKKwkJYXJncy5zdGFydCA9IGFyZ3MuZW5kOwogCX0KIAorCXJldCA9 IDA7CitvdXRfZnJlZV9kc3Q6CisJa2ZyZWUoYXJncy5kc3QpOworb3V0X2ZyZWVfc3JjOgorCWtm cmVlKGFyZ3Muc3JjKTsKIG91dDoKLQlrZnJlZShkc3RfcGZucyk7Ci0Ja2ZyZWUoc3JjX3BmbnMp OwogCXJldHVybiByZXQ7CiB9CiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbWlncmF0ZS5o IGIvaW5jbHVkZS9saW51eC9taWdyYXRlLmgKaW5kZXggN2YwNDc1NGM3ZjJiLi4xODE1NmQzNzll YmYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbWlncmF0ZS5oCisrKyBiL2luY2x1ZGUvbGlu dXgvbWlncmF0ZS5oCkBAIC0xODIsMTA3ICsxODIsMjcgQEAgc3RhdGljIGlubGluZSB1bnNpZ25l ZCBsb25nIG1pZ3JhdGVfcGZuKHVuc2lnbmVkIGxvbmcgcGZuKQogCXJldHVybiAocGZuIDw8IE1J R1JBVEVfUEZOX1NISUZUKSB8IE1JR1JBVEVfUEZOX1ZBTElEOwogfQogCi0vKgotICogc3RydWN0 IG1pZ3JhdGVfdm1hX29wcyAtIG1pZ3JhdGUgb3BlcmF0aW9uIGNhbGxiYWNrCi0gKgotICogQGFs bG9jX2FuZF9jb3B5OiBhbGxvYyBkZXN0aW5hdGlvbiBtZW1vcnkgYW5kIGNvcHkgc291cmNlIG1l bW9yeSB0byBpdAotICogQGZpbmFsaXplX2FuZF9tYXA6IGFsbG93IGNhbGxlciB0byBtYXAgdGhl IHN1Y2Nlc3NmdWxseSBtaWdyYXRlZCBwYWdlcwotICoKLSAqCi0gKiBUaGUgYWxsb2NfYW5kX2Nv cHkoKSBjYWxsYmFjayBoYXBwZW5zIG9uY2UgYWxsIHNvdXJjZSBwYWdlcyBoYXZlIGJlZW4gbG9j a2VkLAotICogdW5tYXBwZWQgYW5kIGNoZWNrZWQgKGNoZWNrZWQgd2hldGhlciBwaW5uZWQgb3Ig bm90KS4gQWxsIHBhZ2VzIHRoYXQgY2FuIGJlCi0gKiBtaWdyYXRlZCB3aWxsIGhhdmUgYW4gZW50 cnkgaW4gdGhlIHNyYyBhcnJheSBzZXQgd2l0aCB0aGUgcGZuIHZhbHVlIG9mIHRoZQotICogcGFn ZSBhbmQgd2l0aCB0aGUgTUlHUkFURV9QRk5fVkFMSUQgYW5kIE1JR1JBVEVfUEZOX01JR1JBVEUg ZmxhZyBzZXQgKG90aGVyCi0gKiBmbGFncyBtaWdodCBiZSBzZXQgYnV0IHNob3VsZCBiZSBpZ25v cmVkIGJ5IHRoZSBjYWxsYmFjaykuCi0gKgotICogVGhlIGFsbG9jX2FuZF9jb3B5KCkgY2FsbGJh Y2sgY2FuIHRoZW4gYWxsb2NhdGUgZGVzdGluYXRpb24gbWVtb3J5IGFuZCBjb3B5Ci0gKiBzb3Vy Y2UgbWVtb3J5IHRvIGl0IGZvciBhbGwgdGhvc2UgZW50cmllcyAoaWUgd2l0aCBNSUdSQVRFX1BG Tl9WQUxJRCBhbmQKLSAqIE1JR1JBVEVfUEZOX01JR1JBVEUgZmxhZyBzZXQpLiBPbmNlIHRoZXNl IGFyZSBhbGxvY2F0ZWQgYW5kIGNvcGllZCwgdGhlCi0gKiBjYWxsYmFjayBtdXN0IHVwZGF0ZSBl YWNoIGNvcnJlc3BvbmRpbmcgZW50cnkgaW4gdGhlIGRzdCBhcnJheSB3aXRoIHRoZSBwZm4KLSAq IHZhbHVlIG9mIHRoZSBkZXN0aW5hdGlvbiBwYWdlIGFuZCB3aXRoIHRoZSBNSUdSQVRFX1BGTl9W QUxJRCBhbmQKLSAqIE1JR1JBVEVfUEZOX0xPQ0tFRCBmbGFncyBzZXQgKGRlc3RpbmF0aW9uIHBh Z2VzIG11c3QgaGF2ZSB0aGVpciBzdHJ1Y3QgcGFnZXMKLSAqIGxvY2tlZCwgdmlhIGxvY2tfcGFn ZSgpKS4KLSAqCi0gKiBBdCB0aGlzIHBvaW50IHRoZSBhbGxvY19hbmRfY29weSgpIGNhbGxiYWNr IGlzIGRvbmUgYW5kIHJldHVybnMuCi0gKgotICogTm90ZSB0aGF0IHRoZSBjYWxsYmFjayBkb2Vz IG5vdCBoYXZlIHRvIG1pZ3JhdGUgYWxsIHRoZSBwYWdlcyB0aGF0IGFyZQotICogbWFya2VkIHdp dGggTUlHUkFURV9QRk5fTUlHUkFURSBmbGFnIGluIHNyYyBhcnJheSB1bmxlc3MgdGhpcyBpcyBh IG1pZ3JhdGlvbgotICogZnJvbSBkZXZpY2UgbWVtb3J5IHRvIHN5c3RlbSBtZW1vcnkgKGllIHRo ZSBNSUdSQVRFX1BGTl9ERVZJQ0UgZmxhZyBpcyBhbHNvCi0gKiBzZXQgaW4gdGhlIHNyYyBhcnJh eSBlbnRyeSkuIElmIHRoZSBkZXZpY2UgZHJpdmVyIGNhbm5vdCBtaWdyYXRlIGEgZGV2aWNlCi0g KiBwYWdlIGJhY2sgdG8gc3lzdGVtIG1lbW9yeSwgdGhlbiBpdCBtdXN0IHNldCB0aGUgY29ycmVz cG9uZGluZyBkc3QgYXJyYXkKLSAqIGVudHJ5IHRvIE1JR1JBVEVfUEZOX0VSUk9SLiBUaGlzIHdp bGwgdHJpZ2dlciBhIFNJR0JVUyBpZiBDUFUgdHJpZXMgdG8KLSAqIGFjY2VzcyBhbnkgb2YgdGhl IHZpcnR1YWwgYWRkcmVzc2VzIG9yaWdpbmFsbHkgYmFja2VkIGJ5IHRoaXMgcGFnZS4gQmVjYXVz ZQotICogYSBTSUdCVVMgaXMgc3VjaCBhIHNldmVyZSByZXN1bHQgZm9yIHRoZSB1c2Vyc3BhY2Ug cHJvY2VzcywgdGhlIGRldmljZQotICogZHJpdmVyIHNob3VsZCBhdm9pZCBzZXR0aW5nIE1JR1JB VEVfUEZOX0VSUk9SIHVubGVzcyBpdCBpcyByZWFsbHkgaW4gYW4KLSAqIHVucmVjb3ZlcmFibGUg c3RhdGUuCi0gKgotICogRm9yIGVtcHR5IGVudHJ5IGluc2lkZSBDUFUgcGFnZSB0YWJsZSAocHRl X25vbmUoKSBvciBwbWRfbm9uZSgpIGlzIHRydWUpIHdlCi0gKiBkbyBzZXQgTUlHUkFURV9QRk5f TUlHUkFURSBmbGFnIGluc2lkZSB0aGUgY29ycmVzcG9uZGluZyBzb3VyY2UgYXJyYXkgdGh1cwot ICogYWxsb3dpbmcgZGV2aWNlIGRyaXZlciB0byBhbGxvY2F0ZSBkZXZpY2UgbWVtb3J5IGZvciB0 aG9zZSB1bmJhY2sgdmlydHVhbAotICogYWRkcmVzcy4gRm9yIHRoaXMgdGhlIGRldmljZSBkcml2 ZXIgc2ltcGx5IGhhdmUgdG8gYWxsb2NhdGUgZGV2aWNlIG1lbW9yeQotICogYW5kIHByb3Blcmx5 IHNldCB0aGUgZGVzdGluYXRpb24gZW50cnkgbGlrZSBmb3IgcmVndWxhciBtaWdyYXRpb24uIE5v dGUgdGhhdAotICogdGhpcyBjYW4gc3RpbGwgZmFpbHMgYW5kIHRodXMgaW5zaWRlIHRoZSBkZXZp Y2UgZHJpdmVyIG11c3QgY2hlY2sgaWYgdGhlCi0gKiBtaWdyYXRpb24gd2FzIHN1Y2Nlc3NmdWwg Zm9yIHRob3NlIGVudHJ5IGluc2lkZSB0aGUgZmluYWxpemVfYW5kX21hcCgpCi0gKiBjYWxsYmFj ayBqdXN0IGxpa2UgZm9yIHJlZ3VsYXIgbWlncmF0aW9uLgotICoKLSAqIFRIRSBhbGxvY19hbmRf Y29weSgpIENBTExCQUNLIE1VU1QgTk9UIENIQU5HRSBBTlkgT0YgVEhFIFNSQyBBUlJBWSBFTlRS SUVTCi0gKiBPUiBCQUQgVEhJTkdTIFdJTEwgSEFQUEVOICEKLSAqCi0gKgotICogVGhlIGZpbmFs aXplX2FuZF9tYXAoKSBjYWxsYmFjayBoYXBwZW5zIGFmdGVyIHN0cnVjdCBwYWdlIG1pZ3JhdGlv biBmcm9tCi0gKiBzb3VyY2UgdG8gZGVzdGluYXRpb24gKGRlc3RpbmF0aW9uIHN0cnVjdCBwYWdl cyBhcmUgdGhlIHN0cnVjdCBwYWdlcyBmb3IgdGhlCi0gKiBtZW1vcnkgYWxsb2NhdGVkIGJ5IHRo ZSBhbGxvY19hbmRfY29weSgpIGNhbGxiYWNrKS4gIE1pZ3JhdGlvbiBjYW4gZmFpbCwgYW5kCi0g KiB0aHVzIHRoZSBmaW5hbGl6ZV9hbmRfbWFwKCkgYWxsb3dzIHRoZSBkcml2ZXIgdG8gaW5zcGVj dCB3aGljaCBwYWdlcyB3ZXJlCi0gKiBzdWNjZXNzZnVsbHkgbWlncmF0ZWQsIGFuZCB3aGljaCB3 ZXJlIG5vdC4gU3VjY2Vzc2Z1bGx5IG1pZ3JhdGVkIHBhZ2VzIHdpbGwKLSAqIGhhdmUgdGhlIE1J R1JBVEVfUEZOX01JR1JBVEUgZmxhZyBzZXQgZm9yIHRoZWlyIHNyYyBhcnJheSBlbnRyeS4KLSAq Ci0gKiBJdCBpcyBzYWZlIHRvIHVwZGF0ZSBkZXZpY2UgcGFnZSB0YWJsZSBmcm9tIHdpdGhpbiB0 aGUgZmluYWxpemVfYW5kX21hcCgpCi0gKiBjYWxsYmFjayBiZWNhdXNlIGJvdGggZGVzdGluYXRp b24gYW5kIHNvdXJjZSBwYWdlIGFyZSBzdGlsbCBsb2NrZWQsIGFuZCB0aGUKLSAqIG1tYXBfc2Vt IGlzIGhlbGQgaW4gcmVhZCBtb2RlIChoZW5jZSBubyBvbmUgY2FuIHVubWFwIHRoZSByYW5nZSBi ZWluZwotICogbWlncmF0ZWQpLgotICoKLSAqIE9uY2UgY2FsbGJhY2sgaXMgZG9uZSBjbGVhbmlu ZyB1cCB0aGluZ3MgYW5kIHVwZGF0aW5nIGl0cyBwYWdlIHRhYmxlIChpZiBpdAotICogY2hvc2Ug dG8gZG8gc28sIHRoaXMgaXMgbm90IGFuIG9ibGlnYXRpb24pIHRoZW4gaXQgcmV0dXJucy4gQXQg dGhpcyBwb2ludCwKLSAqIHRoZSBITU0gY29yZSB3aWxsIGZpbmlzaCB1cCB0aGUgZmluYWwgc3Rl cHMsIGFuZCB0aGUgbWlncmF0aW9uIGlzIGNvbXBsZXRlLgotICoKLSAqIFRIRSBmaW5hbGl6ZV9h bmRfbWFwKCkgQ0FMTEJBQ0sgTVVTVCBOT1QgQ0hBTkdFIEFOWSBPRiBUSEUgU1JDIE9SIERTVCBB UlJBWQotICogRU5UUklFUyBPUiBCQUQgVEhJTkdTIFdJTEwgSEFQUEVOICEKLSAqLwotc3RydWN0 IG1pZ3JhdGVfdm1hX29wcyB7Ci0Jdm9pZCAoKmFsbG9jX2FuZF9jb3B5KShzdHJ1Y3Qgdm1fYXJl YV9zdHJ1Y3QgKnZtYSwKLQkJCSAgICAgICBjb25zdCB1bnNpZ25lZCBsb25nICpzcmMsCi0JCQkg ICAgICAgdW5zaWduZWQgbG9uZyAqZHN0LAotCQkJICAgICAgIHVuc2lnbmVkIGxvbmcgc3RhcnQs Ci0JCQkgICAgICAgdW5zaWduZWQgbG9uZyBlbmQsCi0JCQkgICAgICAgdm9pZCAqcHJpdmF0ZSk7 Ci0Jdm9pZCAoKmZpbmFsaXplX2FuZF9tYXApKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLAot CQkJCSBjb25zdCB1bnNpZ25lZCBsb25nICpzcmMsCi0JCQkJIGNvbnN0IHVuc2lnbmVkIGxvbmcg KmRzdCwKLQkJCQkgdW5zaWduZWQgbG9uZyBzdGFydCwKLQkJCQkgdW5zaWduZWQgbG9uZyBlbmQs Ci0JCQkJIHZvaWQgKnByaXZhdGUpOworc3RydWN0IG1pZ3JhdGVfdm1hIHsKKwlzdHJ1Y3Qgdm1f YXJlYV9zdHJ1Y3QJKnZtYTsKKwkvKgorCSAqIEJvdGggc3JjIGFuZCBkc3QgYXJyYXkgbXVzdCBi ZSBiaWcgZW5vdWdoIGZvcgorCSAqIChlbmQgLSBzdGFydCkgPj4gUEFHRV9TSElGVCBlbnRyaWVz LgorCSAqCisJICogVGhlIHNyYyBhcnJheSBtdXN0IG5vdCBiZSBtb2RpZmllZCBieSB0aGUgY2Fs bGVyIGFmdGVyCisJICogbWlncmF0ZV92bWFfc2V0dXAoKSwgYW5kIG11c3Qgbm90IGNoYW5nZSB0 aGUgZHN0IGFycmF5IGFmdGVyCisJICogbWlncmF0ZV92bWFfcGFnZXMoKSByZXR1cm5zLgorCSAq LworCXVuc2lnbmVkIGxvbmcJCSpkc3Q7CisJdW5zaWduZWQgbG9uZwkJKnNyYzsKKwl1bnNpZ25l ZCBsb25nCQljcGFnZXM7CisJdW5zaWduZWQgbG9uZwkJbnBhZ2VzOworCXVuc2lnbmVkIGxvbmcJ CXN0YXJ0OworCXVuc2lnbmVkIGxvbmcJCWVuZDsKIH07CiAKLSNpZiBkZWZpbmVkKENPTkZJR19N SUdSQVRFX1ZNQV9IRUxQRVIpCi1pbnQgbWlncmF0ZV92bWEoY29uc3Qgc3RydWN0IG1pZ3JhdGVf dm1hX29wcyAqb3BzLAotCQlzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwKLQkJdW5zaWduZWQg bG9uZyBzdGFydCwKLQkJdW5zaWduZWQgbG9uZyBlbmQsCi0JCXVuc2lnbmVkIGxvbmcgKnNyYywK LQkJdW5zaWduZWQgbG9uZyAqZHN0LAotCQl2b2lkICpwcml2YXRlKTsKLSNlbHNlCi1zdGF0aWMg aW5saW5lIGludCBtaWdyYXRlX3ZtYShjb25zdCBzdHJ1Y3QgbWlncmF0ZV92bWFfb3BzICpvcHMs Ci0JCQkgICAgICBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwKLQkJCSAgICAgIHVuc2lnbmVk IGxvbmcgc3RhcnQsCi0JCQkgICAgICB1bnNpZ25lZCBsb25nIGVuZCwKLQkJCSAgICAgIHVuc2ln bmVkIGxvbmcgKnNyYywKLQkJCSAgICAgIHVuc2lnbmVkIGxvbmcgKmRzdCwKLQkJCSAgICAgIHZv aWQgKnByaXZhdGUpCi17Ci0JcmV0dXJuIC1FSU5WQUw7Ci19Ci0jZW5kaWYgLyogSVNfRU5BQkxF RChDT05GSUdfTUlHUkFURV9WTUFfSEVMUEVSKSAqLworaW50IG1pZ3JhdGVfdm1hX3NldHVwKHN0 cnVjdCBtaWdyYXRlX3ZtYSAqYXJncyk7Cit2b2lkIG1pZ3JhdGVfdm1hX3BhZ2VzKHN0cnVjdCBt aWdyYXRlX3ZtYSAqbWlncmF0ZSk7Cit2b2lkIG1pZ3JhdGVfdm1hX2ZpbmFsaXplKHN0cnVjdCBt aWdyYXRlX3ZtYSAqbWlncmF0ZSk7CiAKICNlbmRpZiAvKiBDT05GSUdfTUlHUkFUSU9OICovCiAK ZGlmZiAtLWdpdCBhL21tL21pZ3JhdGUuYyBiL21tL21pZ3JhdGUuYwppbmRleCA4OTkyNzQxZjEw YWEuLmUyNTY1Mzc0ZDMzMCAxMDA2NDQKLS0tIGEvbW0vbWlncmF0ZS5jCisrKyBiL21tL21pZ3Jh dGUuYwpAQCAtMjExOCwxNiArMjExOCw2IEBAIGludCBtaWdyYXRlX21pc3BsYWNlZF90cmFuc2h1 Z2VfcGFnZShzdHJ1Y3QgbW1fc3RydWN0ICptbSwKICNlbmRpZiAvKiBDT05GSUdfTlVNQSAqLwog CiAjaWYgZGVmaW5lZChDT05GSUdfTUlHUkFURV9WTUFfSEVMUEVSKQotc3RydWN0IG1pZ3JhdGVf dm1hIHsKLQlzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QJKnZtYTsKLQl1bnNpZ25lZCBsb25nCQkqZHN0 OwotCXVuc2lnbmVkIGxvbmcJCSpzcmM7Ci0JdW5zaWduZWQgbG9uZwkJY3BhZ2VzOwotCXVuc2ln bmVkIGxvbmcJCW5wYWdlczsKLQl1bnNpZ25lZCBsb25nCQlzdGFydDsKLQl1bnNpZ25lZCBsb25n CQllbmQ7Ci19OwotCiBzdGF0aWMgaW50IG1pZ3JhdGVfdm1hX2NvbGxlY3RfaG9sZSh1bnNpZ25l ZCBsb25nIHN0YXJ0LAogCQkJCSAgICB1bnNpZ25lZCBsb25nIGVuZCwKIAkJCQkgICAgc3RydWN0 IG1tX3dhbGsgKndhbGspCkBAIC0yNTc4LDYgKzI1NjgsMTEwIEBAIHN0YXRpYyB2b2lkIG1pZ3Jh dGVfdm1hX3VubWFwKHN0cnVjdCBtaWdyYXRlX3ZtYSAqbWlncmF0ZSkKIAl9CiB9CiAKKy8qKgor ICogbWlncmF0ZV92bWFfc2V0dXAoKSAtIHByZXBhcmUgdG8gbWlncmF0ZSBhIHJhbmdlIG9mIG1l bW9yeQorICogQGFyZ3M6IGNvbnRhaW5zIHRoZSB2bWEsIHN0YXJ0LCBhbmQgYW5kIHBmbnMgYXJy YXlzIGZvciB0aGUgbWlncmF0aW9uCisgKgorICogUmV0dXJuczogbmVnYXRpdmUgZXJybm8gb24g ZmFpbHVyZXMsIDAgd2hlbiAwIG9yIG1vcmUgcGFnZXMgd2VyZSBtaWdyYXRlZAorICogd2l0aG91 dCBhbiBlcnJvci4KKyAqCisgKiBQcmVwYXJlIHRvIG1pZ3JhdGUgYSByYW5nZSBvZiBtZW1vcnkg dmlydHVhbCBhZGRyZXNzIHJhbmdlIGJ5IGNvbGxlY3RpbmcgYWxsCisgKiB0aGUgcGFnZXMgYmFj a2luZyBlYWNoIHZpcnR1YWwgYWRkcmVzcyBpbiB0aGUgcmFuZ2UsIHNhdmluZyB0aGVtIGluc2lk ZSB0aGUKKyAqIHNyYyBhcnJheS4gIFRoZW4gbG9jayB0aG9zZSBwYWdlcyBhbmQgdW5tYXAgdGhl bS4gT25jZSB0aGUgcGFnZXMgYXJlIGxvY2tlZAorICogYW5kIHVubWFwcGVkLCBjaGVjayB3aGV0 aGVyIGVhY2ggcGFnZSBpcyBwaW5uZWQgb3Igbm90LiAgUGFnZXMgdGhhdCBhcmVuJ3QKKyAqIHBp bm5lZCBoYXZlIHRoZSBNSUdSQVRFX1BGTl9NSUdSQVRFIGZsYWcgc2V0IChieSB0aGlzIGZ1bmN0 aW9uKSBpbiB0aGUKKyAqIGNvcnJlc3BvbmRpbmcgc3JjIGFycmF5IGVudHJ5LiAgVGhlbiByZXN0 b3JlcyBhbnkgcGFnZXMgdGhhdCBhcmUgcGlubmVkLCBieQorICogcmVtYXBwaW5nIGFuZCB1bmxv Y2tpbmcgdGhvc2UgcGFnZXMuCisgKgorICogVGhlIGNhbGxlciBzaG91bGQgdGhlbiBhbGxvY2F0 ZSBkZXN0aW5hdGlvbiBtZW1vcnkgYW5kIGNvcHkgc291cmNlIG1lbW9yeSB0bworICogaXQgZm9y IGFsbCB0aG9zZSBlbnRyaWVzIChpZSB3aXRoIE1JR1JBVEVfUEZOX1ZBTElEIGFuZCBNSUdSQVRF X1BGTl9NSUdSQVRFCisgKiBmbGFnIHNldCkuICBPbmNlIHRoZXNlIGFyZSBhbGxvY2F0ZWQgYW5k IGNvcGllZCwgdGhlIGNhbGxlciBtdXN0IHVwZGF0ZSBlYWNoCisgKiBjb3JyZXNwb25kaW5nIGVu dHJ5IGluIHRoZSBkc3QgYXJyYXkgd2l0aCB0aGUgcGZuIHZhbHVlIG9mIHRoZSBkZXN0aW5hdGlv bgorICogcGFnZSBhbmQgd2l0aCB0aGUgTUlHUkFURV9QRk5fVkFMSUQgYW5kIE1JR1JBVEVfUEZO X0xPQ0tFRCBmbGFncyBzZXQKKyAqIChkZXN0aW5hdGlvbiBwYWdlcyBtdXN0IGhhdmUgdGhlaXIg c3RydWN0IHBhZ2VzIGxvY2tlZCwgdmlhIGxvY2tfcGFnZSgpKS4KKyAqCisgKiBOb3RlIHRoYXQg dGhlIGNhbGxlciBkb2VzIG5vdCBoYXZlIHRvIG1pZ3JhdGUgYWxsIHRoZSBwYWdlcyB0aGF0IGFy ZSBtYXJrZWQKKyAqIHdpdGggTUlHUkFURV9QRk5fTUlHUkFURSBmbGFnIGluIHNyYyBhcnJheSB1 bmxlc3MgdGhpcyBpcyBhIG1pZ3JhdGlvbiBmcm9tCisgKiBkZXZpY2UgbWVtb3J5IHRvIHN5c3Rl bSBtZW1vcnkuICBJZiB0aGUgY2FsbGVyIGNhbm5vdCBtaWdyYXRlIGEgZGV2aWNlIHBhZ2UKKyAq IGJhY2sgdG8gc3lzdGVtIG1lbW9yeSwgdGhlbiBpdCBtdXN0IHJldHVybiBWTV9GQVVMVF9TSUdC VVMsIHdoaWNoIGhhcyBzZXZlcmUKKyAqIGNvbnNlcXVlbmNlcyBmb3IgdGhlIHVzZXJzcGFjZSBw cm9jZXNzLCBzbyBpdCBtdXN0IGJlIGF2b2lkZWQgaWYgYXQgYWxsCisgKiBwb3NzaWJsZS4KKyAq CisgKiBGb3IgZW1wdHkgZW50cmllcyBpbnNpZGUgQ1BVIHBhZ2UgdGFibGUgKHB0ZV9ub25lKCkg b3IgcG1kX25vbmUoKSBpcyB0cnVlKSB3ZQorICogZG8gc2V0IE1JR1JBVEVfUEZOX01JR1JBVEUg ZmxhZyBpbnNpZGUgdGhlIGNvcnJlc3BvbmRpbmcgc291cmNlIGFycmF5IHRodXMKKyAqIGFsbG93 aW5nIHRoZSBjYWxsZXIgdG8gYWxsb2NhdGUgZGV2aWNlIG1lbW9yeSBmb3IgdGhvc2UgdW5iYWNr IHZpcnR1YWwKKyAqIGFkZHJlc3MuICBGb3IgdGhpcyB0aGUgY2FsbGVyIHNpbXBseSBoYXMgdG8g YWxsb2NhdGUgZGV2aWNlIG1lbW9yeSBhbmQKKyAqIHByb3Blcmx5IHNldCB0aGUgZGVzdGluYXRp b24gZW50cnkgbGlrZSBmb3IgcmVndWxhciBtaWdyYXRpb24uICBOb3RlIHRoYXQKKyAqIHRoaXMg Y2FuIHN0aWxsIGZhaWxzIGFuZCB0aHVzIGluc2lkZSB0aGUgZGV2aWNlIGRyaXZlciBtdXN0IGNo ZWNrIGlmIHRoZQorICogbWlncmF0aW9uIHdhcyBzdWNjZXNzZnVsIGZvciB0aG9zZSBlbnRyaWVz IGFmdGVyIGNhbGxpbmcgbWlncmF0ZV92bWFfcGFnZXMoKQorICoganVzdCBsaWtlIGZvciByZWd1 bGFyIG1pZ3JhdGlvbi4KKyAqCisgKiBBZnRlciB0aGF0LCB0aGUgY2FsbGVycyBtdXN0IGNhbGwg bWlncmF0ZV92bWFfcGFnZXMoKSB0byBnbyBvdmVyIGVhY2ggZW50cnkKKyAqIGluIHRoZSBzcmMg YXJyYXkgdGhhdCBoYXMgdGhlIE1JR1JBVEVfUEZOX1ZBTElEIGFuZCBNSUdSQVRFX1BGTl9NSUdS QVRFIGZsYWcKKyAqIHNldC4gSWYgdGhlIGNvcnJlc3BvbmRpbmcgZW50cnkgaW4gZHN0IGFycmF5 IGhhcyBNSUdSQVRFX1BGTl9WQUxJRCBmbGFnIHNldCwKKyAqIHRoZW4gbWlncmF0ZV92bWFfcGFn ZXMoKSB0byBtaWdyYXRlIHN0cnVjdCBwYWdlIGluZm9ybWF0aW9uIGZyb20gdGhlIHNvdXJjZQor ICogc3RydWN0IHBhZ2UgdG8gdGhlIGRlc3RpbmF0aW9uIHN0cnVjdCBwYWdlLiAgSWYgaXQgZmFp bHMgdG8gbWlncmF0ZSB0aGUKKyAqIHN0cnVjdCBwYWdlIGluZm9ybWF0aW9uLCB0aGVuIGl0IGNs ZWFycyB0aGUgTUlHUkFURV9QRk5fTUlHUkFURSBmbGFnIGluIHRoZQorICogc3JjIGFycmF5Lgor ICoKKyAqIEF0IHRoaXMgcG9pbnQgYWxsIHN1Y2Nlc3NmdWxseSBtaWdyYXRlZCBwYWdlcyBoYXZl IGFuIGVudHJ5IGluIHRoZSBzcmMKKyAqIGFycmF5IHdpdGggTUlHUkFURV9QRk5fVkFMSUQgYW5k IE1JR1JBVEVfUEZOX01JR1JBVEUgZmxhZyBzZXQgYW5kIHRoZSBkc3QKKyAqIGFycmF5IGVudHJ5 IHdpdGggTUlHUkFURV9QRk5fVkFMSUQgZmxhZyBzZXQuCisgKgorICogT25jZSBtaWdyYXRlX3Zt YV9wYWdlcygpIHJldHVybnMgdGhlIGNhbGxlciBtYXkgaW5zcGVjdCB3aGljaCBwYWdlcyB3ZXJl CisgKiBzdWNjZXNzZnVsbHkgbWlncmF0ZWQsIGFuZCB3aGljaCB3ZXJlIG5vdC4gIFN1Y2Nlc3Nm dWxseSBtaWdyYXRlZCBwYWdlcyB3aWxsCisgKiBoYXZlIHRoZSBNSUdSQVRFX1BGTl9NSUdSQVRF IGZsYWcgc2V0IGZvciB0aGVpciBzcmMgYXJyYXkgZW50cnkuCisgKgorICogSXQgaXMgc2FmZSB0 byB1cGRhdGUgZGV2aWNlIHBhZ2UgdGFibGUgZnJvbSB3aXRoaW4gdGhlIGZpbmFsaXplX2FuZF9t YXAoKQorICogY2FsbGJhY2sgYmVjYXVzZSBib3RoIGRlc3RpbmF0aW9uIGFuZCBzb3VyY2UgcGFn ZSBhcmUgc3RpbGwgbG9ja2VkLCBhbmQgdGhlCisgKiBtbWFwX3NlbSBpcyBoZWxkIGluIHJlYWQg bW9kZSAoaGVuY2Ugbm8gb25lIGNhbiB1bm1hcCB0aGUgcmFuZ2UgYmVpbmcKKyAqIG1pZ3JhdGVk KS4KKyAqCisgKiBPbmNlIHRoZSBjYWxsZXIgaXMgZG9uZSBjbGVhbmluZyB1cCB0aGluZ3MgYW5k IHVwZGF0aW5nIGl0cyBwYWdlIHRhYmxlIChpZiBpdAorICogY2hvc2UgdG8gZG8gc28sIHRoaXMg aXMgbm90IGFuIG9ibGlnYXRpb24pIGl0IGZpbmFsbHkgY2FsbHMKKyAqIG1pZ3JhdGVfdm1hX2Zp bmFsaXplKCkgdG8gdXBkYXRlIHRoZSBDUFUgcGFnZSB0YWJsZSB0byBwb2ludCB0byBuZXcgcGFn ZXMKKyAqIGZvciBzdWNjZXNzZnVsbHkgbWlncmF0ZWQgcGFnZXMgb3Igb3RoZXJ3aXNlIHJlc3Rv cmUgdGhlIENQVSBwYWdlIHRhYmxlIHRvCisgKiBwb2ludCB0byB0aGUgb3JpZ2luYWwgc291cmNl IHBhZ2VzLgorICovCitpbnQgbWlncmF0ZV92bWFfc2V0dXAoc3RydWN0IG1pZ3JhdGVfdm1hICph cmdzKQoreworCWxvbmcgbnJfcGFnZXMgPSAoYXJncy0+ZW5kIC0gYXJncy0+c3RhcnQpID4+IFBB R0VfU0hJRlQ7CisKKwlhcmdzLT5zdGFydCAmPSBQQUdFX01BU0s7CisJYXJncy0+ZW5kICY9IFBB R0VfTUFTSzsKKwlpZiAoIWFyZ3MtPnZtYSB8fCBpc192bV9odWdldGxiX3BhZ2UoYXJncy0+dm1h KSB8fAorCSAgICAoYXJncy0+dm1hLT52bV9mbGFncyAmIFZNX1NQRUNJQUwpIHx8IHZtYV9pc19k YXgoYXJncy0+dm1hKSkKKwkJcmV0dXJuIC1FSU5WQUw7CisJaWYgKG5yX3BhZ2VzIDw9IDApCisJ CXJldHVybiAtRUlOVkFMOworCWlmIChhcmdzLT5zdGFydCA8IGFyZ3MtPnZtYS0+dm1fc3RhcnQg fHwKKwkgICAgYXJncy0+c3RhcnQgPj0gYXJncy0+dm1hLT52bV9lbmQpCisJCXJldHVybiAtRUlO VkFMOworCWlmIChhcmdzLT5lbmQgPD0gYXJncy0+dm1hLT52bV9zdGFydCB8fCBhcmdzLT5lbmQg PiBhcmdzLT52bWEtPnZtX2VuZCkKKwkJcmV0dXJuIC1FSU5WQUw7CisJaWYgKCFhcmdzLT5zcmMg fHwgIWFyZ3MtPmRzdCkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwltZW1zZXQoYXJncy0+c3JjLCAw LCBzaXplb2YoKmFyZ3MtPnNyYykgKiBucl9wYWdlcyk7CisJYXJncy0+Y3BhZ2VzID0gMDsKKwlh cmdzLT5ucGFnZXMgPSAwOworCisJbWlncmF0ZV92bWFfY29sbGVjdChhcmdzKTsKKwlpZiAoYXJn cy0+Y3BhZ2VzKQorCQltaWdyYXRlX3ZtYV9wcmVwYXJlKGFyZ3MpOworCWlmIChhcmdzLT5jcGFn ZXMpCisJCW1pZ3JhdGVfdm1hX3VubWFwKGFyZ3MpOworCisJLyoKKwkgKiBBdCB0aGlzIHBvaW50 IHBhZ2VzIGFyZSBsb2NrZWQgYW5kIHVubWFwcGVkLCBhbmQgdGh1cyB0aGV5IGhhdmUKKwkgKiBz dGFibGUgY29udGVudCBhbmQgY2FuIHNhZmVseSBiZSBjb3BpZWQgdG8gZGVzdGluYXRpb24gbWVt b3J5IHRoYXQKKwkgKiBpcyBhbGxvY2F0ZWQgYnkgdGhlIGRyaXZlcnMuCisJICovCisJcmV0dXJu IDA7CisKK30KK0VYUE9SVF9TWU1CT0wobWlncmF0ZV92bWFfc2V0dXApOworCiBzdGF0aWMgdm9p ZCBtaWdyYXRlX3ZtYV9pbnNlcnRfcGFnZShzdHJ1Y3QgbWlncmF0ZV92bWEgKm1pZ3JhdGUsCiAJ CQkJICAgIHVuc2lnbmVkIGxvbmcgYWRkciwKIAkJCQkgICAgc3RydWN0IHBhZ2UgKnBhZ2UsCkBA IC0yNzA5LDcgKzI4MDMsNyBAQCBzdGF0aWMgdm9pZCBtaWdyYXRlX3ZtYV9pbnNlcnRfcGFnZShz dHJ1Y3QgbWlncmF0ZV92bWEgKm1pZ3JhdGUsCiAJKnNyYyAmPSB+TUlHUkFURV9QRk5fTUlHUkFU RTsKIH0KIAotLyoKKy8qKgogICogbWlncmF0ZV92bWFfcGFnZXMoKSAtIG1pZ3JhdGUgbWV0YS1k YXRhIGZyb20gc3JjIHBhZ2UgdG8gZHN0IHBhZ2UKICAqIEBtaWdyYXRlOiBtaWdyYXRlIHN0cnVj dCBjb250YWluaW5nIGFsbCBtaWdyYXRpb24gaW5mb3JtYXRpb24KICAqCkBAIC0yNzE3LDcgKzI4 MTEsNyBAQCBzdGF0aWMgdm9pZCBtaWdyYXRlX3ZtYV9pbnNlcnRfcGFnZShzdHJ1Y3QgbWlncmF0 ZV92bWEgKm1pZ3JhdGUsCiAgKiBzdHJ1Y3QgcGFnZS4gVGhpcyBlZmZlY3RpdmVseSBmaW5pc2hl cyB0aGUgbWlncmF0aW9uIGZyb20gc291cmNlIHBhZ2UgdG8gdGhlCiAgKiBkZXN0aW5hdGlvbiBw YWdlLgogICovCi1zdGF0aWMgdm9pZCBtaWdyYXRlX3ZtYV9wYWdlcyhzdHJ1Y3QgbWlncmF0ZV92 bWEgKm1pZ3JhdGUpCit2b2lkIG1pZ3JhdGVfdm1hX3BhZ2VzKHN0cnVjdCBtaWdyYXRlX3ZtYSAq bWlncmF0ZSkKIHsKIAljb25zdCB1bnNpZ25lZCBsb25nIG5wYWdlcyA9IG1pZ3JhdGUtPm5wYWdl czsKIAljb25zdCB1bnNpZ25lZCBsb25nIHN0YXJ0ID0gbWlncmF0ZS0+c3RhcnQ7CkBAIC0yNzkx LDggKzI4ODUsOSBAQCBzdGF0aWMgdm9pZCBtaWdyYXRlX3ZtYV9wYWdlcyhzdHJ1Y3QgbWlncmF0 ZV92bWEgKm1pZ3JhdGUpCiAJaWYgKG5vdGlmaWVkKQogCQltbXVfbm90aWZpZXJfaW52YWxpZGF0 ZV9yYW5nZV9vbmx5X2VuZCgmcmFuZ2UpOwogfQorRVhQT1JUX1NZTUJPTChtaWdyYXRlX3ZtYV9w YWdlcyk7CiAKLS8qCisvKioKICAqIG1pZ3JhdGVfdm1hX2ZpbmFsaXplKCkgLSByZXN0b3JlIENQ VSBwYWdlIHRhYmxlIGVudHJ5CiAgKiBAbWlncmF0ZTogbWlncmF0ZSBzdHJ1Y3QgY29udGFpbmlu ZyBhbGwgbWlncmF0aW9uIGluZm9ybWF0aW9uCiAgKgpAQCAtMjgwMyw3ICsyODk4LDcgQEAgc3Rh dGljIHZvaWQgbWlncmF0ZV92bWFfcGFnZXMoc3RydWN0IG1pZ3JhdGVfdm1hICptaWdyYXRlKQog ICogVGhpcyBhbHNvIHVubG9ja3MgdGhlIHBhZ2VzIGFuZCBwdXRzIHRoZW0gYmFjayBvbiB0aGUg bHJ1LCBvciBkcm9wcyB0aGUgZXh0cmEKICAqIHJlZmNvdW50LCBmb3IgZGV2aWNlIHBhZ2VzLgog ICovCi1zdGF0aWMgdm9pZCBtaWdyYXRlX3ZtYV9maW5hbGl6ZShzdHJ1Y3QgbWlncmF0ZV92bWEg Km1pZ3JhdGUpCit2b2lkIG1pZ3JhdGVfdm1hX2ZpbmFsaXplKHN0cnVjdCBtaWdyYXRlX3ZtYSAq bWlncmF0ZSkKIHsKIAljb25zdCB1bnNpZ25lZCBsb25nIG5wYWdlcyA9IG1pZ3JhdGUtPm5wYWdl czsKIAl1bnNpZ25lZCBsb25nIGk7CkBAIC0yODQ2LDEyNCArMjk0MSw1IEBAIHN0YXRpYyB2b2lk IG1pZ3JhdGVfdm1hX2ZpbmFsaXplKHN0cnVjdCBtaWdyYXRlX3ZtYSAqbWlncmF0ZSkKIAkJfQog CX0KIH0KLQotLyoKLSAqIG1pZ3JhdGVfdm1hKCkgLSBtaWdyYXRlIGEgcmFuZ2Ugb2YgbWVtb3J5 IGluc2lkZSB2bWEKLSAqCi0gKiBAb3BzOiBtaWdyYXRpb24gY2FsbGJhY2sgZm9yIGFsbG9jYXRp bmcgZGVzdGluYXRpb24gbWVtb3J5IGFuZCBjb3B5aW5nCi0gKiBAdm1hOiB2aXJ0dWFsIG1lbW9y eSBhcmVhIGNvbnRhaW5pbmcgdGhlIHJhbmdlIHRvIGJlIG1pZ3JhdGVkCi0gKiBAc3RhcnQ6IHN0 YXJ0IGFkZHJlc3Mgb2YgdGhlIHJhbmdlIHRvIG1pZ3JhdGUgKGluY2x1c2l2ZSkKLSAqIEBlbmQ6 IGVuZCBhZGRyZXNzIG9mIHRoZSByYW5nZSB0byBtaWdyYXRlIChleGNsdXNpdmUpCi0gKiBAc3Jj OiBhcnJheSBvZiBobW1fcGZuX3QgY29udGFpbmluZyBzb3VyY2UgcGZucwotICogQGRzdDogYXJy YXkgb2YgaG1tX3Bmbl90IGNvbnRhaW5pbmcgZGVzdGluYXRpb24gcGZucwotICogQHByaXZhdGU6 IHBvaW50ZXIgcGFzc2VkIGJhY2sgdG8gZWFjaCBvZiB0aGUgY2FsbGJhY2sKLSAqIFJldHVybnM6 IDAgb24gc3VjY2VzcywgZXJyb3IgY29kZSBvdGhlcndpc2UKLSAqCi0gKiBUaGlzIGZ1bmN0aW9u IHRyaWVzIHRvIG1pZ3JhdGUgYSByYW5nZSBvZiBtZW1vcnkgdmlydHVhbCBhZGRyZXNzIHJhbmdl LCB1c2luZwotICogY2FsbGJhY2tzIHRvIGFsbG9jYXRlIGFuZCBjb3B5IG1lbW9yeSBmcm9tIHNv dXJjZSB0byBkZXN0aW5hdGlvbi4gRmlyc3QgaXQKLSAqIGNvbGxlY3RzIGFsbCB0aGUgcGFnZXMg YmFja2luZyBlYWNoIHZpcnR1YWwgYWRkcmVzcyBpbiB0aGUgcmFuZ2UsIHNhdmluZyB0aGlzCi0g KiBpbnNpZGUgdGhlIHNyYyBhcnJheS4gVGhlbiBpdCBsb2NrcyB0aG9zZSBwYWdlcyBhbmQgdW5t YXBzIHRoZW0uIE9uY2UgdGhlIHBhZ2VzCi0gKiBhcmUgbG9ja2VkIGFuZCB1bm1hcHBlZCwgaXQg Y2hlY2tzIHdoZXRoZXIgZWFjaCBwYWdlIGlzIHBpbm5lZCBvciBub3QuIFBhZ2VzCi0gKiB0aGF0 IGFyZW4ndCBwaW5uZWQgaGF2ZSB0aGUgTUlHUkFURV9QRk5fTUlHUkFURSBmbGFnIHNldCAoYnkg dGhpcyBmdW5jdGlvbikKLSAqIGluIHRoZSBjb3JyZXNwb25kaW5nIHNyYyBhcnJheSBlbnRyeS4g SXQgdGhlbiByZXN0b3JlcyBhbnkgcGFnZXMgdGhhdCBhcmUKLSAqIHBpbm5lZCwgYnkgcmVtYXBw aW5nIGFuZCB1bmxvY2tpbmcgdGhvc2UgcGFnZXMuCi0gKgotICogQXQgdGhpcyBwb2ludCBpdCBj YWxscyB0aGUgYWxsb2NfYW5kX2NvcHkoKSBjYWxsYmFjay4gRm9yIGRvY3VtZW50YXRpb24gb24K LSAqIHdoYXQgaXMgZXhwZWN0ZWQgZnJvbSB0aGF0IGNhbGxiYWNrLCBzZWUgc3RydWN0IG1pZ3Jh dGVfdm1hX29wcyBjb21tZW50cyBpbgotICogaW5jbHVkZS9saW51eC9taWdyYXRlLmgKLSAqCi0g KiBBZnRlciB0aGUgYWxsb2NfYW5kX2NvcHkoKSBjYWxsYmFjaywgdGhpcyBmdW5jdGlvbiBnb2Vz IG92ZXIgZWFjaCBlbnRyeSBpbgotICogdGhlIHNyYyBhcnJheSB0aGF0IGhhcyB0aGUgTUlHUkFU RV9QRk5fVkFMSUQgYW5kIE1JR1JBVEVfUEZOX01JR1JBVEUgZmxhZwotICogc2V0LiBJZiB0aGUg Y29ycmVzcG9uZGluZyBlbnRyeSBpbiBkc3QgYXJyYXkgaGFzIE1JR1JBVEVfUEZOX1ZBTElEIGZs YWcgc2V0LAotICogdGhlbiB0aGUgZnVuY3Rpb24gdHJpZXMgdG8gbWlncmF0ZSBzdHJ1Y3QgcGFn ZSBpbmZvcm1hdGlvbiBmcm9tIHRoZSBzb3VyY2UKLSAqIHN0cnVjdCBwYWdlIHRvIHRoZSBkZXN0 aW5hdGlvbiBzdHJ1Y3QgcGFnZS4gSWYgaXQgZmFpbHMgdG8gbWlncmF0ZSB0aGUgc3RydWN0Ci0g KiBwYWdlIGluZm9ybWF0aW9uLCB0aGVuIGl0IGNsZWFycyB0aGUgTUlHUkFURV9QRk5fTUlHUkFU RSBmbGFnIGluIHRoZSBzcmMKLSAqIGFycmF5LgotICoKLSAqIEF0IHRoaXMgcG9pbnQgYWxsIHN1 Y2Nlc3NmdWxseSBtaWdyYXRlZCBwYWdlcyBoYXZlIGFuIGVudHJ5IGluIHRoZSBzcmMKLSAqIGFy cmF5IHdpdGggTUlHUkFURV9QRk5fVkFMSUQgYW5kIE1JR1JBVEVfUEZOX01JR1JBVEUgZmxhZyBz ZXQgYW5kIHRoZSBkc3QKLSAqIGFycmF5IGVudHJ5IHdpdGggTUlHUkFURV9QRk5fVkFMSUQgZmxh ZyBzZXQuCi0gKgotICogSXQgdGhlbiBjYWxscyB0aGUgZmluYWxpemVfYW5kX21hcCgpIGNhbGxi YWNrLiBTZWUgY29tbWVudHMgZm9yICJzdHJ1Y3QKLSAqIG1pZ3JhdGVfdm1hX29wcyIsIGluIGlu Y2x1ZGUvbGludXgvbWlncmF0ZS5oIGZvciBkZXRhaWxzIGFib3V0Ci0gKiBmaW5hbGl6ZV9hbmRf bWFwKCkgYmVoYXZpb3IuCi0gKgotICogQWZ0ZXIgdGhlIGZpbmFsaXplX2FuZF9tYXAoKSBjYWxs YmFjaywgZm9yIHN1Y2Nlc3NmdWxseSBtaWdyYXRlZCBwYWdlcywgdGhpcwotICogZnVuY3Rpb24g dXBkYXRlcyB0aGUgQ1BVIHBhZ2UgdGFibGUgdG8gcG9pbnQgdG8gbmV3IHBhZ2VzLCBvdGhlcndp c2UgaXQKLSAqIHJlc3RvcmVzIHRoZSBDUFUgcGFnZSB0YWJsZSB0byBwb2ludCB0byB0aGUgb3Jp Z2luYWwgc291cmNlIHBhZ2VzLgotICoKLSAqIEZ1bmN0aW9uIHJldHVybnMgMCBhZnRlciB0aGUg YWJvdmUgc3RlcHMsIGV2ZW4gaWYgbm8gcGFnZXMgd2VyZSBtaWdyYXRlZAotICogKFRoZSBmdW5j dGlvbiBvbmx5IHJldHVybnMgYW4gZXJyb3IgaWYgYW55IG9mIHRoZSBhcmd1bWVudHMgYXJlIGlu dmFsaWQuKQotICoKLSAqIEJvdGggc3JjIGFuZCBkc3QgYXJyYXkgbXVzdCBiZSBiaWcgZW5vdWdo IGZvciAoZW5kIC0gc3RhcnQpID4+IFBBR0VfU0hJRlQKLSAqIHVuc2lnbmVkIGxvbmcgZW50cmll cy4KLSAqLwotaW50IG1pZ3JhdGVfdm1hKGNvbnN0IHN0cnVjdCBtaWdyYXRlX3ZtYV9vcHMgKm9w cywKLQkJc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsCi0JCXVuc2lnbmVkIGxvbmcgc3RhcnQs Ci0JCXVuc2lnbmVkIGxvbmcgZW5kLAotCQl1bnNpZ25lZCBsb25nICpzcmMsCi0JCXVuc2lnbmVk IGxvbmcgKmRzdCwKLQkJdm9pZCAqcHJpdmF0ZSkKLXsKLQlzdHJ1Y3QgbWlncmF0ZV92bWEgbWln cmF0ZTsKLQotCS8qIFNhbml0eSBjaGVjayB0aGUgYXJndW1lbnRzICovCi0Jc3RhcnQgJj0gUEFH RV9NQVNLOwotCWVuZCAmPSBQQUdFX01BU0s7Ci0JaWYgKCF2bWEgfHwgaXNfdm1faHVnZXRsYl9w YWdlKHZtYSkgfHwgKHZtYS0+dm1fZmxhZ3MgJiBWTV9TUEVDSUFMKSB8fAotCQkJdm1hX2lzX2Rh eCh2bWEpKQotCQlyZXR1cm4gLUVJTlZBTDsKLQlpZiAoc3RhcnQgPCB2bWEtPnZtX3N0YXJ0IHx8 IHN0YXJ0ID49IHZtYS0+dm1fZW5kKQotCQlyZXR1cm4gLUVJTlZBTDsKLQlpZiAoZW5kIDw9IHZt YS0+dm1fc3RhcnQgfHwgZW5kID4gdm1hLT52bV9lbmQpCi0JCXJldHVybiAtRUlOVkFMOwotCWlm ICghb3BzIHx8ICFzcmMgfHwgIWRzdCB8fCBzdGFydCA+PSBlbmQpCi0JCXJldHVybiAtRUlOVkFM OwotCi0JbWVtc2V0KHNyYywgMCwgc2l6ZW9mKCpzcmMpICogKChlbmQgLSBzdGFydCkgPj4gUEFH RV9TSElGVCkpOwotCW1pZ3JhdGUuc3JjID0gc3JjOwotCW1pZ3JhdGUuZHN0ID0gZHN0OwotCW1p Z3JhdGUuc3RhcnQgPSBzdGFydDsKLQltaWdyYXRlLm5wYWdlcyA9IDA7Ci0JbWlncmF0ZS5jcGFn ZXMgPSAwOwotCW1pZ3JhdGUuZW5kID0gZW5kOwotCW1pZ3JhdGUudm1hID0gdm1hOwotCi0JLyog Q29sbGVjdCwgYW5kIHRyeSB0byB1bm1hcCBzb3VyY2UgcGFnZXMgKi8KLQltaWdyYXRlX3ZtYV9j b2xsZWN0KCZtaWdyYXRlKTsKLQlpZiAoIW1pZ3JhdGUuY3BhZ2VzKQotCQlyZXR1cm4gMDsKLQot CS8qIExvY2sgYW5kIGlzb2xhdGUgcGFnZSAqLwotCW1pZ3JhdGVfdm1hX3ByZXBhcmUoJm1pZ3Jh dGUpOwotCWlmICghbWlncmF0ZS5jcGFnZXMpCi0JCXJldHVybiAwOwotCi0JLyogVW5tYXAgcGFn ZXMgKi8KLQltaWdyYXRlX3ZtYV91bm1hcCgmbWlncmF0ZSk7Ci0JaWYgKCFtaWdyYXRlLmNwYWdl cykKLQkJcmV0dXJuIDA7Ci0KLQkvKgotCSAqIEF0IHRoaXMgcG9pbnQgcGFnZXMgYXJlIGxvY2tl ZCBhbmQgdW5tYXBwZWQsIGFuZCB0aHVzIHRoZXkgaGF2ZQotCSAqIHN0YWJsZSBjb250ZW50IGFu ZCBjYW4gc2FmZWx5IGJlIGNvcGllZCB0byBkZXN0aW5hdGlvbiBtZW1vcnkgdGhhdAotCSAqIGlz IGFsbG9jYXRlZCBieSB0aGUgY2FsbGJhY2suCi0JICoKLQkgKiBOb3RlIHRoYXQgbWlncmF0aW9u IGNhbiBmYWlsIGluIG1pZ3JhdGVfdm1hX3N0cnVjdF9wYWdlKCkgZm9yIGVhY2gKLQkgKiBpbmRp dmlkdWFsIHBhZ2UuCi0JICovCi0Jb3BzLT5hbGxvY19hbmRfY29weSh2bWEsIHNyYywgZHN0LCBz dGFydCwgZW5kLCBwcml2YXRlKTsKLQotCS8qIFRoaXMgZG9lcyB0aGUgcmVhbCBtaWdyYXRpb24g b2Ygc3RydWN0IHBhZ2UgKi8KLQltaWdyYXRlX3ZtYV9wYWdlcygmbWlncmF0ZSk7Ci0KLQlvcHMt PmZpbmFsaXplX2FuZF9tYXAodm1hLCBzcmMsIGRzdCwgc3RhcnQsIGVuZCwgcHJpdmF0ZSk7Ci0K LQkvKiBVbmxvY2sgYW5kIHJlbWFwIHBhZ2VzICovCi0JbWlncmF0ZV92bWFfZmluYWxpemUoJm1p Z3JhdGUpOwotCi0JcmV0dXJuIDA7Ci19Ci1FWFBPUlRfU1lNQk9MKG1pZ3JhdGVfdm1hKTsKK0VY UE9SVF9TWU1CT0wobWlncmF0ZV92bWFfZmluYWxpemUpOwogI2VuZGlmIC8qIGRlZmluZWQoTUlH UkFURV9WTUFfSEVMUEVSKSAqLwotLSAKMi4yMC4xCgpfX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fXwpOb3V2ZWF1IG1haWxpbmcgbGlzdApOb3V2ZWF1QGxpc3Rz LmZyZWVkZXNrdG9wLm9yZwpodHRwczovL2xpc3RzLmZyZWVkZXNrdG9wLm9yZy9tYWlsbWFuL2xp c3RpbmZvL25vdXZlYXU=