Date: Wed, 3 Feb 2016 22:52:24 +0000 From: "glebius (Gleb Smirnoff)" <phabric-noreply@FreeBSD.org> To: transport@freebsd.org Subject: [Differential] [Request, 1, 067 lines] D5180: Gather all mbuf(9) allocation APIs in one place Message-ID: <differential-rev-PHID-DREV-bxjtcdv4xb7nazwld5tw-req@FreeBSD.org>
next in thread | raw e-mail | index | archive | help
--b1_75bea7beb39ccff30d15b27f6a127c4f Content-Type: text/plain; charset = "utf-8" Content-Transfer-Encoding: 8bit glebius created this revision. glebius added a reviewer: gnn. Herald added a subscriber: imp. Herald added a reviewer: transport. REVISION SUMMARY Before upcoming changes to mbuf(9) gather all allocation APIs into kern_mbuf.c, and declare them in sys/mbuf.h The uipc_mbuf.c now will have only mbuf manipulation routines. sys/mbuf.h has only declaration and doesn't diclose internal allocator structures. TEST PLAN Since inlining level has reduced, benchmarking is required. REPOSITORY rS FreeBSD src repository BRANCH /head REVISION DETAIL https://reviews.freebsd.org/D5180 AFFECTED FILES sys/dev/cxgb/cxgb_adapter.h sys/dev/cxgb/cxgb_sge.c sys/dev/cxgbe/t4_netmap.c sys/dev/cxgbe/t4_sge.c sys/dev/netmap/netmap_generic.c sys/kern/kern_mbuf.c sys/kern/uipc_mbuf.c sys/netinet/tcp_pcap.c sys/sys/mbuf.h EMAIL PREFERENCES https://reviews.freebsd.org/settings/panel/emailpreferences/ To: glebius, transport, gnn Cc: imp --b1_75bea7beb39ccff30d15b27f6a127c4f Content-Type: text/x-patch; charset=utf-8; name="D5180.12984.patch" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="D5180.12984.patch" ZGlmZiAtLWdpdCBhL3N5cy9zeXMvbWJ1Zi5oIGIvc3lzL3N5cy9tYnVmLmgKLS0tIGEvc3lzL3N5 cy9tYnVmLmgKKysrIGIvc3lzL3N5cy9tYnVmLmgKQEAgLTM4LDcgKzM4LDYgQEAKICNpbmNsdWRl IDxzeXMvcXVldWUuaD4KICNpZmRlZiBfS0VSTkVMCiAjaW5jbHVkZSA8c3lzL3N5c3RtLmg+Ci0j aW5jbHVkZSA8dm0vdW1hLmg+CiAjaWZkZWYgV0lUTkVTUwogI2luY2x1ZGUgPHN5cy9sb2NrLmg+ CiAjZW5kaWYKQEAgLTgxLDE1ICs4MCw2IEBACiAgKi8KICNkZWZpbmUJbXRvZChtLCB0KQkoKHQp KChtKS0+bV9kYXRhKSkKICNkZWZpbmUJbXRvZG8obSwgbykJKCh2b2lkICopKCgobSktPm1fZGF0 YSkgKyAobykpKQotCi0vKgotICogQXJndW1lbnQgc3RydWN0dXJlIHBhc3NlZCB0byBVTUEgcm91 dGluZXMgZHVyaW5nIG1idWYgYW5kIHBhY2tldAotICogYWxsb2NhdGlvbnMuCi0gKi8KLXN0cnVj dCBtYl9hcmdzIHsKLQlpbnQJZmxhZ3M7CS8qIEZsYWdzIGZvciBtYnVmIGJlaW5nIGFsbG9jYXRl ZCAqLwotCXNob3J0CXR5cGU7CS8qIFR5cGUgb2YgbWJ1ZiBiZWluZyBhbGxvY2F0ZWQgKi8KLX07 CiAjZW5kaWYgLyogX0tFUk5FTCAqLwogCiAvKgpAQCAtNTEzLDIzICs1MDMsNiBAQAogI2RlZmlu ZQlNQlVGX0NIRUNLU0xFRVAoaG93KQogI2VuZGlmCiAKLS8qCi0gKiBOZXR3b3JrIGJ1ZmZlciBh bGxvY2F0aW9uIEFQSQotICoKLSAqIFRoZSByZXN0IG9mIGl0IGlzIGRlZmluZWQgaW4ga2Vybi9r ZXJuX21idWYuYwotICovCi1leHRlcm4gdW1hX3pvbmVfdAl6b25lX21idWY7Ci1leHRlcm4gdW1h X3pvbmVfdAl6b25lX2NsdXN0OwotZXh0ZXJuIHVtYV96b25lX3QJem9uZV9wYWNrOwotZXh0ZXJu IHVtYV96b25lX3QJem9uZV9qdW1ib3A7Ci1leHRlcm4gdW1hX3pvbmVfdAl6b25lX2p1bWJvOTsK LWV4dGVybiB1bWFfem9uZV90CXpvbmVfanVtYm8xNjsKLWV4dGVybiB1bWFfem9uZV90CXpvbmVf ZXh0X3JlZmNudDsKLQotdm9pZAkJIG1iX2R1cGNsKHN0cnVjdCBtYnVmICosIGNvbnN0IHN0cnVj dCBtYnVmICopOwotdm9pZAkJIG1iX2ZyZWVfZXh0KHN0cnVjdCBtYnVmICopOwotaW50CQkgbV9w a3RoZHJfaW5pdChzdHJ1Y3QgbWJ1ZiAqLCBpbnQpOwotCiBzdGF0aWMgX19pbmxpbmUgaW50CiBt X2dldHR5cGUoaW50IHNpemUpCiB7CkBAIC01ODMsMTg4ICs1NTYsNiBAQAogCW0tPm1fZXh0LmV4 dF9mbGFncyA9IDA7CiB9CiAKLXN0YXRpYyBfX2lubGluZSB1bWFfem9uZV90Ci1tX2dldHpvbmUo aW50IHNpemUpCi17Ci0JdW1hX3pvbmVfdCB6b25lOwotCi0Jc3dpdGNoIChzaXplKSB7Ci0JY2Fz ZSBNQ0xCWVRFUzoKLQkJem9uZSA9IHpvbmVfY2x1c3Q7Ci0JCWJyZWFrOwotI2lmIE1KVU1QQUdF U0laRSAhPSBNQ0xCWVRFUwotCWNhc2UgTUpVTVBBR0VTSVpFOgotCQl6b25lID0gem9uZV9qdW1i b3A7Ci0JCWJyZWFrOwotI2VuZGlmCi0JY2FzZSBNSlVNOUJZVEVTOgotCQl6b25lID0gem9uZV9q dW1ibzk7Ci0JCWJyZWFrOwotCWNhc2UgTUpVTTE2QllURVM6Ci0JCXpvbmUgPSB6b25lX2p1bWJv MTY7Ci0JCWJyZWFrOwotCWRlZmF1bHQ6Ci0JCXBhbmljKCIlczogaW52YWxpZCBjbHVzdGVyIHNp emUgJWQiLCBfX2Z1bmNfXywgc2l6ZSk7Ci0JfQotCi0JcmV0dXJuICh6b25lKTsKLX0KLQotLyoK LSAqIEluaXRpYWxpemUgYW4gbWJ1ZiB3aXRoIGxpbmVhciBzdG9yYWdlLgotICoKLSAqIElubGlu ZSBiZWNhdXNlIHRoZSBjb25zdW1lciB0ZXh0IG92ZXJoZWFkIHdpbGwgYmUgcm91Z2hseSB0aGUg c2FtZSB0bwotICogaW5pdGlhbGl6ZSBvciBjYWxsIGEgZnVuY3Rpb24gd2l0aCB0aGlzIG1hbnkg cGFyYW1ldGVycyBhbmQgTV9QS1RIRFIKLSAqIHNob3VsZCBnbyBhd2F5IHdpdGggY29uc3RhbnQg cHJvcGFnYXRpb24gZm9yICFNR0VUSERSLgotICovCi1zdGF0aWMgX19pbmxpbmUgaW50Ci1tX2lu aXQoc3RydWN0IG1idWYgKm0sIHVtYV96b25lX3Qgem9uZSBfX3VudXNlZCwgaW50IHNpemUgX191 bnVzZWQsIGludCBob3csCi0gICAgc2hvcnQgdHlwZSwgaW50IGZsYWdzKQotewotCWludCBlcnJv cjsKLQotCW0tPm1fbmV4dCA9IE5VTEw7Ci0JbS0+bV9uZXh0cGt0ID0gTlVMTDsKLQltLT5tX2Rh dGEgPSBtLT5tX2RhdDsKLQltLT5tX2xlbiA9IDA7Ci0JbS0+bV9mbGFncyA9IGZsYWdzOwotCW0t Pm1fdHlwZSA9IHR5cGU7Ci0JaWYgKGZsYWdzICYgTV9QS1RIRFIpIHsKLQkJaWYgKChlcnJvciA9 IG1fcGt0aGRyX2luaXQobSwgaG93KSkgIT0gMCkKLQkJCXJldHVybiAoZXJyb3IpOwotCX0KLQot CXJldHVybiAoMCk7Ci19Ci0KLXN0YXRpYyBfX2lubGluZSBzdHJ1Y3QgbWJ1ZiAqCi1tX2dldChp bnQgaG93LCBzaG9ydCB0eXBlKQotewotCXN0cnVjdCBtYl9hcmdzIGFyZ3M7Ci0KLQlhcmdzLmZs YWdzID0gMDsKLQlhcmdzLnR5cGUgPSB0eXBlOwotCXJldHVybiAodW1hX3phbGxvY19hcmcoem9u ZV9tYnVmLCAmYXJncywgaG93KSk7Ci19Ci0KLS8qCi0gKiBYWFggVGhpcyBzaG91bGQgYmUgZGVw cmVjYXRlZCwgdmVyeSBsaXR0bGUgdXNlLgotICovCi1zdGF0aWMgX19pbmxpbmUgc3RydWN0IG1i dWYgKgotbV9nZXRjbHIoaW50IGhvdywgc2hvcnQgdHlwZSkKLXsKLQlzdHJ1Y3QgbWJ1ZiAqbTsK LQlzdHJ1Y3QgbWJfYXJncyBhcmdzOwotCi0JYXJncy5mbGFncyA9IDA7Ci0JYXJncy50eXBlID0g dHlwZTsKLQltID0gdW1hX3phbGxvY19hcmcoem9uZV9tYnVmLCAmYXJncywgaG93KTsKLQlpZiAo bSAhPSBOVUxMKQotCQliemVybyhtLT5tX2RhdGEsIE1MRU4pOwotCXJldHVybiAobSk7Ci19Ci0K LXN0YXRpYyBfX2lubGluZSBzdHJ1Y3QgbWJ1ZiAqCi1tX2dldGhkcihpbnQgaG93LCBzaG9ydCB0 eXBlKQotewotCXN0cnVjdCBtYl9hcmdzIGFyZ3M7Ci0KLQlhcmdzLmZsYWdzID0gTV9QS1RIRFI7 Ci0JYXJncy50eXBlID0gdHlwZTsKLQlyZXR1cm4gKHVtYV96YWxsb2NfYXJnKHpvbmVfbWJ1Ziwg JmFyZ3MsIGhvdykpOwotfQotCi1zdGF0aWMgX19pbmxpbmUgc3RydWN0IG1idWYgKgotbV9nZXRj bChpbnQgaG93LCBzaG9ydCB0eXBlLCBpbnQgZmxhZ3MpCi17Ci0Jc3RydWN0IG1iX2FyZ3MgYXJn czsKLQotCWFyZ3MuZmxhZ3MgPSBmbGFnczsKLQlhcmdzLnR5cGUgPSB0eXBlOwotCXJldHVybiAo dW1hX3phbGxvY19hcmcoem9uZV9wYWNrLCAmYXJncywgaG93KSk7Ci19Ci0KLXN0YXRpYyBfX2lu bGluZSBpbnQKLW1fY2xnZXQoc3RydWN0IG1idWYgKm0sIGludCBob3cpCi17Ci0KLQlLQVNTRVJU KChtLT5tX2ZsYWdzICYgTV9FWFQpID09IDAsICgiJXM6IG1idWYgJXAgaGFzIE1fRVhUIiwKLQkg ICAgX19mdW5jX18sIG0pKTsKLQltLT5tX2V4dC5leHRfYnVmID0gKGNoYXIgKilOVUxMOwotCXVt YV96YWxsb2NfYXJnKHpvbmVfY2x1c3QsIG0sIGhvdyk7Ci0JLyoKLQkgKiBPbiBhIGNsdXN0ZXIg YWxsb2NhdGlvbiBmYWlsdXJlLCBkcmFpbiB0aGUgcGFja2V0IHpvbmUgYW5kIHJldHJ5LAotCSAq IHdlIG1pZ2h0IGJlIGFibGUgdG8gbG9vc2VuIGEgZmV3IGNsdXN0ZXJzIHVwIG9uIHRoZSBkcmFp bi4KLQkgKi8KLQlpZiAoKGhvdyAmIE1fTk9XQUlUKSAmJiAobS0+bV9leHQuZXh0X2J1ZiA9PSBO VUxMKSkgewotCQl6b25lX2RyYWluKHpvbmVfcGFjayk7Ci0JCXVtYV96YWxsb2NfYXJnKHpvbmVf Y2x1c3QsIG0sIGhvdyk7Ci0JfQotCXJldHVybiAobS0+bV9mbGFncyAmIE1fRVhUKTsKLX0KLQot LyoKLSAqIG1fY2xqZ2V0KCkgaXMgZGlmZmVyZW50IGZyb20gbV9jbGdldCgpIGFzIGl0IGNhbiBh bGxvY2F0ZSBjbHVzdGVycyB3aXRob3V0Ci0gKiBhdHRhY2hpbmcgdGhlbSB0byBhbiBtYnVmLiAg SW4gdGhhdCBjYXNlIHRoZSByZXR1cm4gdmFsdWUgaXMgdGhlIHBvaW50ZXIKLSAqIHRvIHRoZSBj bHVzdGVyIG9mIHRoZSByZXF1ZXN0ZWQgc2l6ZS4gIElmIGFuIG1idWYgd2FzIHNwZWNpZmllZCwg aXQgZ2V0cwotICogdGhlIGNsdXN0ZXIgYXR0YWNoZWQgdG8gaXQgYW5kIHRoZSByZXR1cm4gdmFs dWUgY2FuIGJlIHNhZmVseSBpZ25vcmVkLgotICogRm9yIHNpemUgaXQgdGFrZXMgTUNMQllURVMs IE1KVU1QQUdFU0laRSwgTUpVTTlCWVRFUywgTUpVTTE2QllURVMuCi0gKi8KLXN0YXRpYyBfX2lu bGluZSB2b2lkICoKLW1fY2xqZ2V0KHN0cnVjdCBtYnVmICptLCBpbnQgaG93LCBpbnQgc2l6ZSkK LXsKLQl1bWFfem9uZV90IHpvbmU7Ci0KLQlpZiAobSAhPSBOVUxMKSB7Ci0JCUtBU1NFUlQoKG0t Pm1fZmxhZ3MgJiBNX0VYVCkgPT0gMCwgKCIlczogbWJ1ZiAlcCBoYXMgTV9FWFQiLAotCQkgICAg X19mdW5jX18sIG0pKTsKLQkJbS0+bV9leHQuZXh0X2J1ZiA9IE5VTEw7Ci0JfQotCi0Jem9uZSA9 IG1fZ2V0em9uZShzaXplKTsKLQlyZXR1cm4gKHVtYV96YWxsb2NfYXJnKHpvbmUsIG0sIGhvdykp OwotfQotCi1zdGF0aWMgX19pbmxpbmUgdm9pZAotbV9jbGpzZXQoc3RydWN0IG1idWYgKm0sIHZv aWQgKmNsLCBpbnQgdHlwZSkKLXsKLQl1bWFfem9uZV90IHpvbmU7Ci0JaW50IHNpemU7Ci0KLQlz d2l0Y2ggKHR5cGUpIHsKLQljYXNlIEVYVF9DTFVTVEVSOgotCQlzaXplID0gTUNMQllURVM7Ci0J CXpvbmUgPSB6b25lX2NsdXN0OwotCQlicmVhazsKLSNpZiBNSlVNUEFHRVNJWkUgIT0gTUNMQllU RVMKLQljYXNlIEVYVF9KVU1CT1A6Ci0JCXNpemUgPSBNSlVNUEFHRVNJWkU7Ci0JCXpvbmUgPSB6 b25lX2p1bWJvcDsKLQkJYnJlYWs7Ci0jZW5kaWYKLQljYXNlIEVYVF9KVU1CTzk6Ci0JCXNpemUg PSBNSlVNOUJZVEVTOwotCQl6b25lID0gem9uZV9qdW1ibzk7Ci0JCWJyZWFrOwotCWNhc2UgRVhU X0pVTUJPMTY6Ci0JCXNpemUgPSBNSlVNMTZCWVRFUzsKLQkJem9uZSA9IHpvbmVfanVtYm8xNjsK LQkJYnJlYWs7Ci0JZGVmYXVsdDoKLQkJcGFuaWMoIiVzOiB1bmtub3duIGNsdXN0ZXIgdHlwZSAl ZCIsIF9fZnVuY19fLCB0eXBlKTsKLQkJYnJlYWs7Ci0JfQotCi0JbS0+bV9kYXRhID0gbS0+bV9l eHQuZXh0X2J1ZiA9IGNsOwotCW0tPm1fZXh0LmV4dF9mcmVlID0gbS0+bV9leHQuZXh0X2FyZzEg PSBtLT5tX2V4dC5leHRfYXJnMiA9IE5VTEw7Ci0JbS0+bV9leHQuZXh0X3NpemUgPSBzaXplOwot CW0tPm1fZXh0LmV4dF90eXBlID0gdHlwZTsKLQltLT5tX2V4dC5leHRfZmxhZ3MgPSAwOwotCW0t Pm1fZXh0LmV4dF9jbnQgPSB1bWFfZmluZF9yZWZjbnQoem9uZSwgY2wpOwotCW0tPm1fZmxhZ3Mg fD0gTV9FWFQ7Ci0KLX0KLQogc3RhdGljIF9faW5saW5lIHZvaWQKIG1fY2h0eXBlKHN0cnVjdCBt YnVmICptLCBzaG9ydCBuZXdfdHlwZSkKIHsKQEAgLTk0NCwxNSArNzM1LDE1IEBACiAKIHN0cnVj dCB1aW87CiAKK3ZvaWQJCSBtYl9kdXBjbChzdHJ1Y3QgbWJ1ZiAqLCBjb25zdCBzdHJ1Y3QgbWJ1 ZiAqKTsKIHZvaWQJCSBtX2FkaihzdHJ1Y3QgbWJ1ZiAqLCBpbnQpOwogaW50CQkgbV9hcHBseShz dHJ1Y3QgbWJ1ZiAqLCBpbnQsIGludCwKIAkJICAgIGludCAoKikodm9pZCAqLCB2b2lkICosIHVf aW50KSwgdm9pZCAqKTsKIGludAkJIG1fYXBwZW5kKHN0cnVjdCBtYnVmICosIGludCwgY19jYWRk cl90KTsKIHZvaWQJCSBtX2NhdChzdHJ1Y3QgbWJ1ZiAqLCBzdHJ1Y3QgbWJ1ZiAqKTsKIHZvaWQJ CSBtX2NhdHBrdChzdHJ1Y3QgbWJ1ZiAqLCBzdHJ1Y3QgbWJ1ZiAqKTsKLWludAkJIG1fZXh0YWRk KHN0cnVjdCBtYnVmICosIGNhZGRyX3QsIHVfaW50LAotCQkgICAgdm9pZCAoKikoc3RydWN0IG1i dWYgKiwgdm9pZCAqLCB2b2lkICopLCB2b2lkICosIHZvaWQgKiwKLQkJICAgIGludCwgaW50LCBp bnQpOworaW50CQkgbV9jbGdldChzdHJ1Y3QgbWJ1ZiAqbSwgaW50IGhvdyk7Cit2b2lkIAkJKm1f Y2xqZ2V0KHN0cnVjdCBtYnVmICptLCBpbnQgaG93LCBpbnQgc2l6ZSk7CiBzdHJ1Y3QgbWJ1Zgkq bV9jb2xsYXBzZShzdHJ1Y3QgbWJ1ZiAqLCBpbnQsIGludCk7CiB2b2lkCQkgbV9jb3B5YmFjayhz dHJ1Y3QgbWJ1ZiAqLCBpbnQsIGludCwgY19jYWRkcl90KTsKIHZvaWQJCSBtX2NvcHlkYXRhKGNv bnN0IHN0cnVjdCBtYnVmICosIGludCwgaW50LCBjYWRkcl90KTsKQEAgLTk2NywxMyArNzU4LDIx IEBACiAJCSAgICB2b2lkICgqKShjaGFyICosIGNhZGRyX3QsIHVfaW50KSk7CiBzdHJ1Y3QgbWJ1 ZgkqbV9kdXAoY29uc3Qgc3RydWN0IG1idWYgKiwgaW50KTsKIGludAkJIG1fZHVwX3BrdGhkcihz dHJ1Y3QgbWJ1ZiAqLCBjb25zdCBzdHJ1Y3QgbWJ1ZiAqLCBpbnQpOworaW50CQkgbV9leHRhZGQo c3RydWN0IG1idWYgKiwgY2FkZHJfdCwgdV9pbnQsCisJCSAgICB2b2lkICgqKShzdHJ1Y3QgbWJ1 ZiAqLCB2b2lkICosIHZvaWQgKiksIHZvaWQgKiwgdm9pZCAqLAorCQkgICAgaW50LCBpbnQsIGlu dCk7CiB1X2ludAkJIG1fZml4aGRyKHN0cnVjdCBtYnVmICopOwogc3RydWN0IG1idWYJKm1fZnJh Z21lbnQoc3RydWN0IG1idWYgKiwgaW50LCBpbnQpOworc3RydWN0IG1idWYJKm1fZnJlZShzdHJ1 Y3QgbWJ1ZiAqKTsKIHZvaWQJCSBtX2ZyZWVtKHN0cnVjdCBtYnVmICopOwogc3RydWN0IG1idWYJ Km1fZ2V0MihpbnQsIGludCwgc2hvcnQsIGludCk7CiBzdHJ1Y3QgbWJ1ZgkqbV9nZXRqY2woaW50 LCBzaG9ydCwgaW50LCBpbnQpOwogc3RydWN0IG1idWYJKm1fZ2V0bTIoc3RydWN0IG1idWYgKiwg aW50LCBpbnQsIHNob3J0LCBpbnQpOwogc3RydWN0IG1idWYJKm1fZ2V0cHRyKHN0cnVjdCBtYnVm ICosIGludCwgaW50ICopOworc3RydWN0IG1idWYgCSptX2dldChpbnQgaG93LCBzaG9ydCB0eXBl KTsKK3N0cnVjdCBtYnVmIAkqbV9nZXRjbChpbnQgaG93LCBzaG9ydCB0eXBlLCBpbnQgZmxhZ3Mp Oworc3RydWN0IG1idWYgCSptX2dldGhkcihpbnQgaG93LCBzaG9ydCB0eXBlKTsKK2ludAkJIG1f aW5pdChzdHJ1Y3QgbWJ1ZiAqbSwgaW50IGhvdywgc2hvcnQgdHlwZSwgaW50IGZsYWdzKTsKIHVf aW50CQkgbV9sZW5ndGgoc3RydWN0IG1idWYgKiwgc3RydWN0IG1idWYgKiopOwogaW50CQkgbV9t YnVmdG91aW8oc3RydWN0IHVpbyAqLCBzdHJ1Y3QgbWJ1ZiAqLCBpbnQpOwogdm9pZAkJIG1fbW92 ZV9wa3RoZHIoc3RydWN0IG1idWYgKiwgc3RydWN0IG1idWYgKik7CkBAIC0xMTY3LDIwICs5NjYs NiBAQAogCSAgICBtX3RhZ19sb2NhdGUobSwgTVRBR19BQklfQ09NUEFULCB0eXBlLCBzdGFydCkp OwogfQogCi1zdGF0aWMgX19pbmxpbmUgc3RydWN0IG1idWYgKgotbV9mcmVlKHN0cnVjdCBtYnVm ICptKQotewotCXN0cnVjdCBtYnVmICpuID0gbS0+bV9uZXh0OwotCi0JaWYgKChtLT5tX2ZsYWdz ICYgKE1fUEtUSERSfE1fTk9GUkVFKSkgPT0gKE1fUEtUSERSfE1fTk9GUkVFKSkKLQkJbV90YWdf ZGVsZXRlX2NoYWluKG0sIE5VTEwpOwotCWlmIChtLT5tX2ZsYWdzICYgTV9FWFQpCi0JCW1iX2Zy ZWVfZXh0KG0pOwotCWVsc2UgaWYgKChtLT5tX2ZsYWdzICYgTV9OT0ZSRUUpID09IDApCi0JCXVt YV96ZnJlZSh6b25lX21idWYsIG0pOwotCXJldHVybiAobik7Ci19Ci0KIHN0YXRpYyBfX2lubGlu ZSBpbnQKIHJ0X21fZ2V0ZmliKHN0cnVjdCBtYnVmICptKQogewpkaWZmIC0tZ2l0IGEvc3lzL25l dGluZXQvdGNwX3BjYXAuYyBiL3N5cy9uZXRpbmV0L3RjcF9wY2FwLmMKLS0tIGEvc3lzL25ldGlu ZXQvdGNwX3BjYXAuYworKysgYi9zeXMvbmV0aW5ldC90Y3BfcGNhcC5jCkBAIC0zNDEsNyArMzQx LDEwIEBACiAKIAkJCW4gPSBtaGVhZDsKIAkJCXRjcF9wY2FwX21fZnJlZW0obi0+bV9uZXh0KTsK LQkJCW1faW5pdChuLCBOVUxMLCAwLCBNX05PV0FJVCwgTVRfREFUQSwgMCk7CisJCQltLT5tX25l eHQgPSBOVUxMOworCQkJbS0+bV9uZXh0cGt0ID0gTlVMTDsKKwkJCW0tPm1fbGVuID0gMDsKKwkJ CW0tPm1fZmxhZ3MgPSAwOwogCQl9CiAJfQogCmRpZmYgLS1naXQgYS9zeXMva2Vybi91aXBjX21i dWYuYyBiL3N5cy9rZXJuL3VpcGNfbWJ1Zi5jCi0tLSBhL3N5cy9rZXJuL3VpcGNfbWJ1Zi5jCisr KyBiL3N5cy9rZXJuL3VpcGNfbWJ1Zi5jCkBAIC00OCw2ICs0OCw4IEBACiAjaW5jbHVkZSA8c3lz L3Byb3Rvc3cuaD4KICNpbmNsdWRlIDxzeXMvdWlvLmg+CiAKKyNpbmNsdWRlIDxzZWN1cml0eS9t YWMvbWFjX2ZyYW1ld29yay5oPgorCiBpbnQJbWF4X2xpbmtoZHI7CiBpbnQJbWF4X3Byb3RvaGRy OwogaW50CW1heF9oZHI7CkBAIC0xMzIsMjY2ICsxMzQsMzIgQEAKICNlbmRpZgogCiAvKgotICog bV9nZXQyKCkgYWxsb2NhdGVzIG1pbmltdW0gbWJ1ZiB0aGF0IHdvdWxkIGZpdCAic2l6ZSIgYXJn dW1lbnQuCi0gKi8KLXN0cnVjdCBtYnVmICoKLW1fZ2V0MihpbnQgc2l6ZSwgaW50IGhvdywgc2hv cnQgdHlwZSwgaW50IGZsYWdzKQotewotCXN0cnVjdCBtYl9hcmdzIGFyZ3M7Ci0Jc3RydWN0IG1i dWYgKm0sICpuOwotCi0JYXJncy5mbGFncyA9IGZsYWdzOwotCWFyZ3MudHlwZSA9IHR5cGU7Ci0K LQlpZiAoc2l6ZSA8PSBNSExFTiB8fCAoc2l6ZSA8PSBNTEVOICYmIChmbGFncyAmIE1fUEtUSERS KSA9PSAwKSkKLQkJcmV0dXJuICh1bWFfemFsbG9jX2FyZyh6b25lX21idWYsICZhcmdzLCBob3cp KTsKLQlpZiAoc2l6ZSA8PSBNQ0xCWVRFUykKLQkJcmV0dXJuICh1bWFfemFsbG9jX2FyZyh6b25l X3BhY2ssICZhcmdzLCBob3cpKTsKLQotCWlmIChzaXplID4gTUpVTVBBR0VTSVpFKQotCQlyZXR1 cm4gKE5VTEwpOwotCi0JbSA9IHVtYV96YWxsb2NfYXJnKHpvbmVfbWJ1ZiwgJmFyZ3MsIGhvdyk7 Ci0JaWYgKG0gPT0gTlVMTCkKLQkJcmV0dXJuIChOVUxMKTsKLQotCW4gPSB1bWFfemFsbG9jX2Fy Zyh6b25lX2p1bWJvcCwgbSwgaG93KTsKLQlpZiAobiA9PSBOVUxMKSB7Ci0JCXVtYV96ZnJlZSh6 b25lX21idWYsIG0pOwotCQlyZXR1cm4gKE5VTEwpOwotCX0KLQotCXJldHVybiAobSk7Ci19Ci0K LS8qCi0gKiBtX2dldGpjbCgpIHJldHVybnMgYW4gbWJ1ZiB3aXRoIGEgY2x1c3RlciBvZiB0aGUg c3BlY2lmaWVkIHNpemUgYXR0YWNoZWQuCi0gKiBGb3Igc2l6ZSBpdCB0YWtlcyBNQ0xCWVRFUywg TUpVTVBBR0VTSVpFLCBNSlVNOUJZVEVTLCBNSlVNMTZCWVRFUy4KLSAqLwotc3RydWN0IG1idWYg KgotbV9nZXRqY2woaW50IGhvdywgc2hvcnQgdHlwZSwgaW50IGZsYWdzLCBpbnQgc2l6ZSkKLXsK LQlzdHJ1Y3QgbWJfYXJncyBhcmdzOwotCXN0cnVjdCBtYnVmICptLCAqbjsKLQl1bWFfem9uZV90 IHpvbmU7Ci0KLQlpZiAoc2l6ZSA9PSBNQ0xCWVRFUykKLQkJcmV0dXJuIG1fZ2V0Y2woaG93LCB0 eXBlLCBmbGFncyk7Ci0KLQlhcmdzLmZsYWdzID0gZmxhZ3M7Ci0JYXJncy50eXBlID0gdHlwZTsK LQotCW0gPSB1bWFfemFsbG9jX2FyZyh6b25lX21idWYsICZhcmdzLCBob3cpOwotCWlmIChtID09 IE5VTEwpCi0JCXJldHVybiAoTlVMTCk7Ci0KLQl6b25lID0gbV9nZXR6b25lKHNpemUpOwotCW4g PSB1bWFfemFsbG9jX2FyZyh6b25lLCBtLCBob3cpOwotCWlmIChuID09IE5VTEwpIHsKLQkJdW1h X3pmcmVlKHpvbmVfbWJ1ZiwgbSk7Ci0JCXJldHVybiAoTlVMTCk7Ci0JfQotCXJldHVybiAobSk7 Ci19Ci0KLS8qCi0gKiBBbGxvY2F0ZSBhIGdpdmVuIGxlbmd0aCB3b3J0aCBvZiBtYnVmcyBhbmQv b3IgY2x1c3RlcnMgKHdoYXRldmVyIGZpdHMKLSAqIGJlc3QpIGFuZCByZXR1cm4gYSBwb2ludGVy IHRvIHRoZSB0b3Agb2YgdGhlIGFsbG9jYXRlZCBjaGFpbi4gIElmIGFuCi0gKiBleGlzdGluZyBt YnVmIGNoYWluIGlzIHByb3ZpZGVkLCB0aGVuIHdlIHdpbGwgYXBwZW5kIHRoZSBuZXcgY2hhaW4K LSAqIHRvIHRoZSBleGlzdGluZyBvbmUgYnV0IHN0aWxsIHJldHVybiB0aGUgdG9wIG9mIHRoZSBu ZXdseSBhbGxvY2F0ZWQKLSAqIGNoYWluLgotICovCi1zdHJ1Y3QgbWJ1ZiAqCi1tX2dldG0yKHN0 cnVjdCBtYnVmICptLCBpbnQgbGVuLCBpbnQgaG93LCBzaG9ydCB0eXBlLCBpbnQgZmxhZ3MpCi17 Ci0Jc3RydWN0IG1idWYgKm1iLCAqbm0gPSBOVUxMLCAqbXRhaWwgPSBOVUxMOwotCi0JS0FTU0VS VChsZW4gPj0gMCwgKCIlczogbGVuIGlzIDwgMCIsIF9fZnVuY19fKSk7Ci0KLQkvKiBWYWxpZGF0 ZSBmbGFncy4gKi8KLQlmbGFncyAmPSAoTV9QS1RIRFIgfCBNX0VPUik7Ci0KLQkvKiBQYWNrZXQg aGVhZGVyIG1idWYgbXVzdCBiZSBmaXJzdCBpbiBjaGFpbi4gKi8KLQlpZiAoKGZsYWdzICYgTV9Q S1RIRFIpICYmIG0gIT0gTlVMTCkKLQkJZmxhZ3MgJj0gfk1fUEtUSERSOwotCi0JLyogTG9vcCBh bmQgYXBwZW5kIG1heGltdW0gc2l6ZWQgbWJ1ZnMgdG8gdGhlIGNoYWluIHRhaWwuICovCi0Jd2hp bGUgKGxlbiA+IDApIHsKLQkJaWYgKGxlbiA+IE1DTEJZVEVTKQotCQkJbWIgPSBtX2dldGpjbCho b3csIHR5cGUsIChmbGFncyAmIE1fUEtUSERSKSwKLQkJCSAgICBNSlVNUEFHRVNJWkUpOwotCQll bHNlIGlmIChsZW4gPj0gTUlOQ0xTSVpFKQotCQkJbWIgPSBtX2dldGNsKGhvdywgdHlwZSwgKGZs YWdzICYgTV9QS1RIRFIpKTsKLQkJZWxzZSBpZiAoZmxhZ3MgJiBNX1BLVEhEUikKLQkJCW1iID0g bV9nZXRoZHIoaG93LCB0eXBlKTsKLQkJZWxzZQotCQkJbWIgPSBtX2dldChob3csIHR5cGUpOwot Ci0JCS8qIEZhaWwgdGhlIHdob2xlIG9wZXJhdGlvbiBpZiBvbmUgbWJ1ZiBjYW4ndCBiZSBhbGxv Y2F0ZWQuICovCi0JCWlmIChtYiA9PSBOVUxMKSB7Ci0JCQlpZiAobm0gIT0gTlVMTCkKLQkJCQlt X2ZyZWVtKG5tKTsKLQkJCXJldHVybiAoTlVMTCk7Ci0JCX0KLQotCQkvKiBCb29rIGtlZXBpbmcu ICovCi0JCWxlbiAtPSBNX1NJWkUobWIpOwotCQlpZiAobXRhaWwgIT0gTlVMTCkKLQkJCW10YWls LT5tX25leHQgPSBtYjsKLQkJZWxzZQotCQkJbm0gPSBtYjsKLQkJbXRhaWwgPSBtYjsKLQkJZmxh Z3MgJj0gfk1fUEtUSERSOwkvKiBPbmx5IHZhbGlkIG9uIHRoZSBmaXJzdCBtYnVmLiAqLwotCX0K LQlpZiAoZmxhZ3MgJiBNX0VPUikKLQkJbXRhaWwtPm1fZmxhZ3MgfD0gTV9FT1I7ICAvKiBPbmx5 IHZhbGlkIG9uIHRoZSBsYXN0IG1idWYuICovCi0KLQkvKiBJZiBtYnVmIHdhcyBzdXBwbGllZCwg YXBwZW5kIG5ldyBjaGFpbiB0byB0aGUgZW5kIG9mIGl0LiAqLwotCWlmIChtICE9IE5VTEwpIHsK LQkJZm9yIChtdGFpbCA9IG07IG10YWlsLT5tX25leHQgIT0gTlVMTDsgbXRhaWwgPSBtdGFpbC0+ bV9uZXh0KQotCQkJOwotCQltdGFpbC0+bV9uZXh0ID0gbm07Ci0JCW10YWlsLT5tX2ZsYWdzICY9 IH5NX0VPUjsKLQl9IGVsc2UKLQkJbSA9IG5tOwotCi0JcmV0dXJuIChtKTsKLX0KLQotLyoKLSAq IEZyZWUgYW4gZW50aXJlIGNoYWluIG9mIG1idWZzIGFuZCBhc3NvY2lhdGVkIGV4dGVybmFsIGJ1 ZmZlcnMsIGlmCi0gKiBhcHBsaWNhYmxlLgotICovCi12b2lkCi1tX2ZyZWVtKHN0cnVjdCBtYnVm ICptYikKLXsKLQotCXdoaWxlIChtYiAhPSBOVUxMKQotCQltYiA9IG1fZnJlZShtYik7Ci19Ci0K LS8qLQotICogQ29uZmlndXJlIGEgcHJvdmlkZWQgbWJ1ZiB0byByZWZlciB0byB0aGUgcHJvdmlk ZWQgZXh0ZXJuYWwgc3RvcmFnZQotICogYnVmZmVyIGFuZCBzZXR1cCBhIHJlZmVyZW5jZSBjb3Vu dCBmb3Igc2FpZCBidWZmZXIuICBJZiB0aGUgc2V0dGluZwotICogdXAgb2YgdGhlIHJlZmVyZW5j ZSBjb3VudCBmYWlscywgdGhlIE1fRVhUIGJpdCB3aWxsIG5vdCBiZSBzZXQuICBJZgotICogc3Vj Y2Vzc2Z1bGwsIHRoZSBNX0VYVCBiaXQgaXMgc2V0IGluIHRoZSBtYnVmJ3MgZmxhZ3MuCi0gKgot ICogQXJndW1lbnRzOgotICogICAgbWIgICAgIFRoZSBleGlzdGluZyBtYnVmIHRvIHdoaWNoIHRv IGF0dGFjaCB0aGUgcHJvdmlkZWQgYnVmZmVyLgotICogICAgYnVmICAgIFRoZSBhZGRyZXNzIG9m IHRoZSBwcm92aWRlZCBleHRlcm5hbCBzdG9yYWdlIGJ1ZmZlci4KLSAqICAgIHNpemUgICBUaGUg c2l6ZSBvZiB0aGUgcHJvdmlkZWQgYnVmZmVyLgotICogICAgZnJlZWYgIEEgcG9pbnRlciB0byBh IHJvdXRpbmUgdGhhdCBpcyByZXNwb25zaWJsZSBmb3IgZnJlZWluZyB0aGUKLSAqICAgICAgICAg ICBwcm92aWRlZCBleHRlcm5hbCBzdG9yYWdlIGJ1ZmZlci4KLSAqICAgIGFyZ3MgICBBIHBvaW50 ZXIgdG8gYW4gYXJndW1lbnQgc3RydWN0dXJlIChvZiBhbnkgdHlwZSkgdG8gYmUgcGFzc2VkCi0g KiAgICAgICAgICAgdG8gdGhlIHByb3ZpZGVkIGZyZWVmIHJvdXRpbmUgKG1heSBiZSBOVUxMKS4K LSAqICAgIGZsYWdzICBBbnkgb3RoZXIgZmxhZ3MgdG8gYmUgcGFzc2VkIHRvIHRoZSBwcm92aWRl ZCBtYnVmLgotICogICAgdHlwZSAgIFRoZSB0eXBlIHRoYXQgdGhlIGV4dGVybmFsIHN0b3JhZ2Ug YnVmZmVyIHNob3VsZCBiZQotICogICAgICAgICAgIGxhYmVsZWQgd2l0aC4KLSAqCi0gKiBSZXR1 cm5zOgotICogICAgTm90aGluZy4KKyAqIEluaXRpYWxpemUgYW4gbWJ1ZiB3aXRoIGxpbmVhciBz dG9yYWdlLgogICovCiBpbnQKLW1fZXh0YWRkKHN0cnVjdCBtYnVmICptYiwgY2FkZHJfdCBidWYs IHVfaW50IHNpemUsCi0gICAgdm9pZCAoKmZyZWVmKShzdHJ1Y3QgbWJ1ZiAqLCB2b2lkICosIHZv aWQgKiksIHZvaWQgKmFyZzEsIHZvaWQgKmFyZzIsCi0gICAgaW50IGZsYWdzLCBpbnQgdHlwZSwg aW50IHdhaXQpCi17Ci0JS0FTU0VSVCh0eXBlICE9IEVYVF9DTFVTVEVSLCAoIiVzOiBFWFRfQ0xV U1RFUiBub3QgYWxsb3dlZCIsIF9fZnVuY19fKSk7Ci0KLQlpZiAodHlwZSAhPSBFWFRfRVhUUkVG KQotCQltYi0+bV9leHQuZXh0X2NudCA9IHVtYV96YWxsb2Moem9uZV9leHRfcmVmY250LCB3YWl0 KTsKLQotCWlmIChtYi0+bV9leHQuZXh0X2NudCA9PSBOVUxMKQotCQlyZXR1cm4gKEVOT01FTSk7 Ci0KLQkqKG1iLT5tX2V4dC5leHRfY250KSA9IDE7Ci0JbWItPm1fZmxhZ3MgfD0gKE1fRVhUIHwg ZmxhZ3MpOwotCW1iLT5tX2V4dC5leHRfYnVmID0gYnVmOwotCW1iLT5tX2RhdGEgPSBtYi0+bV9l eHQuZXh0X2J1ZjsKLQltYi0+bV9leHQuZXh0X3NpemUgPSBzaXplOwotCW1iLT5tX2V4dC5leHRf ZnJlZSA9IGZyZWVmOwotCW1iLT5tX2V4dC5leHRfYXJnMSA9IGFyZzE7Ci0JbWItPm1fZXh0LmV4 dF9hcmcyID0gYXJnMjsKLQltYi0+bV9leHQuZXh0X3R5cGUgPSB0eXBlOwotCW1iLT5tX2V4dC5l eHRfZmxhZ3MgPSAwOwotCi0JcmV0dXJuICgwKTsKLX0KLQotLyoKLSAqIE5vbi1kaXJlY3RseS1l eHBvcnRlZCBmdW5jdGlvbiB0byBjbGVhbiB1cCBhZnRlciBtYnVmcyB3aXRoIE1fRVhUCi0gKiBz dG9yYWdlIGF0dGFjaGVkIHRvIHRoZW0gaWYgdGhlIHJlZmVyZW5jZSBjb3VudCBoaXRzIDEuCi0g Ki8KLXZvaWQKLW1iX2ZyZWVfZXh0KHN0cnVjdCBtYnVmICptKQorbV9pbml0KHN0cnVjdCBtYnVm ICptLCBpbnQgaG93LCBzaG9ydCB0eXBlLCBpbnQgZmxhZ3MpCiB7Ci0JaW50IGZyZWVtYnVmOwot Ci0JS0FTU0VSVChtLT5tX2ZsYWdzICYgTV9FWFQsICgiJXM6IE1fRVhUIG5vdCBzZXQgb24gJXAi LCBfX2Z1bmNfXywgbSkpOwogCi0JLyoKLQkgKiBDaGVjayBpZiB0aGUgaGVhZGVyIGlzIGVtYmVk ZGVkIGluIHRoZSBjbHVzdGVyLgotCSAqLwotCWZyZWVtYnVmID0gKG0tPm1fZmxhZ3MgJiBNX05P RlJFRSkgPyAwIDogMTsKLQotCXN3aXRjaCAobS0+bV9leHQuZXh0X3R5cGUpIHsKLQljYXNlIEVY VF9TRkJVRjoKLQkJc2ZfZXh0X2ZyZWUobS0+bV9leHQuZXh0X2FyZzEsIG0tPm1fZXh0LmV4dF9h cmcyKTsKLQkJYnJlYWs7Ci0JY2FzZSBFWFRfU0ZCVUZfTk9DQUNIRToKLQkJc2ZfZXh0X2ZyZWVf bm9jYWNoZShtLT5tX2V4dC5leHRfYXJnMSwgbS0+bV9leHQuZXh0X2FyZzIpOwotCQlicmVhazsK LQlkZWZhdWx0OgotCQlLQVNTRVJUKG0tPm1fZXh0LmV4dF9jbnQgIT0gTlVMTCwKLQkJICAgICgi JXM6IG5vIHJlZmNvdW50aW5nIHBvaW50ZXIgb24gJXAiLCBfX2Z1bmNfXywgbSkpOwotCQkvKiAK LQkJICogRnJlZSBhdHRhY2hlZCBzdG9yYWdlIGlmIHRoaXMgbWJ1ZiBpcyB0aGUgb25seQotCQkg KiByZWZlcmVuY2UgdG8gaXQuCi0JCSAqLwotCQlpZiAoKihtLT5tX2V4dC5leHRfY250KSAhPSAx KSB7Ci0JCQlpZiAoYXRvbWljX2ZldGNoYWRkX2ludChtLT5tX2V4dC5leHRfY250LCAtMSkgIT0g MSkKLQkJCQlicmVhazsKLQkJfQorCW0tPm1fbmV4dCA9IE5VTEw7CisJbS0+bV9uZXh0cGt0ID0g TlVMTDsKKwltLT5tX2RhdGEgPSBtLT5tX2RhdDsKKwltLT5tX2xlbiA9IDA7CisJbS0+bV9mbGFn cyA9IGZsYWdzOworCW0tPm1fdHlwZSA9IHR5cGU7CisJaWYgKGZsYWdzICYgTV9QS1RIRFIpIHsK KwkJaW50IGVycm9yOwogCi0JCXN3aXRjaCAobS0+bV9leHQuZXh0X3R5cGUpIHsKLQkJY2FzZSBF WFRfUEFDS0VUOgkvKiBUaGUgcGFja2V0IHpvbmUgaXMgc3BlY2lhbC4gKi8KLQkJCWlmICgqKG0t Pm1fZXh0LmV4dF9jbnQpID09IDApCi0JCQkJKihtLT5tX2V4dC5leHRfY250KSA9IDE7Ci0JCQl1 bWFfemZyZWUoem9uZV9wYWNrLCBtKTsKLQkJCXJldHVybjsJCS8qIEpvYiBkb25lLiAqLwotCQlj YXNlIEVYVF9DTFVTVEVSOgotCQkJdW1hX3pmcmVlKHpvbmVfY2x1c3QsIG0tPm1fZXh0LmV4dF9i dWYpOwotCQkJYnJlYWs7Ci0JCWNhc2UgRVhUX0pVTUJPUDoKLQkJCXVtYV96ZnJlZSh6b25lX2p1 bWJvcCwgbS0+bV9leHQuZXh0X2J1Zik7Ci0JCQlicmVhazsKLQkJY2FzZSBFWFRfSlVNQk85Ogot CQkJdW1hX3pmcmVlKHpvbmVfanVtYm85LCBtLT5tX2V4dC5leHRfYnVmKTsKLQkJCWJyZWFrOwot CQljYXNlIEVYVF9KVU1CTzE2OgotCQkJdW1hX3pmcmVlKHpvbmVfanVtYm8xNiwgbS0+bV9leHQu ZXh0X2J1Zik7Ci0JCQlicmVhazsKLQkJY2FzZSBFWFRfTkVUX0RSVjoKLQkJY2FzZSBFWFRfTU9E X1RZUEU6Ci0JCWNhc2UgRVhUX0RJU1BPU0FCTEU6Ci0JCQkqKG0tPm1fZXh0LmV4dF9jbnQpID0g MDsKLQkJCXVtYV96ZnJlZSh6b25lX2V4dF9yZWZjbnQsIF9fREVWT0xBVElMRSh1X2ludCAqLAot CQkJCW0tPm1fZXh0LmV4dF9jbnQpKTsKLQkJCS8qIEZBTExUSFJPVUdIICovCi0JCWNhc2UgRVhU X0VYVFJFRjoKLQkJCUtBU1NFUlQobS0+bV9leHQuZXh0X2ZyZWUgIT0gTlVMTCwKLQkJCQkoIiVz OiBleHRfZnJlZSBub3Qgc2V0IiwgX19mdW5jX18pKTsKLQkJCSgqKG0tPm1fZXh0LmV4dF9mcmVl KSkobSwgbS0+bV9leHQuZXh0X2FyZzEsCi0JCQkgICAgbS0+bV9leHQuZXh0X2FyZzIpOwotCQkJ YnJlYWs7Ci0JCWRlZmF1bHQ6Ci0JCQlLQVNTRVJUKG0tPm1fZXh0LmV4dF90eXBlID09IDAsCi0J CQkJKCIlczogdW5rbm93biBleHRfdHlwZSIsIF9fZnVuY19fKSk7Ci0JCX0KKwkJbS0+bV9kYXRh ID0gbS0+bV9wa3RkYXQ7CisJCWJ6ZXJvKCZtLT5tX3BrdGhkciwgc2l6ZW9mKG0tPm1fcGt0aGRy KSk7CisjaWZkZWYgTUFDCisJCS8qIElmIHRoZSBsYWJlbCBpbml0IGZhaWxzLCBmYWlsIHRoZSBh bGxvYyAqLworCQllcnJvciA9IG1hY19tYnVmX2luaXQobSwgaG93KTsKKwkJaWYgKGVycm9yKQor CQkJcmV0dXJuIChlcnJvcik7CisjZW5kaWYKIAl9CiAKLQlpZiAoZnJlZW1idWYpCi0JCXVtYV96 ZnJlZSh6b25lX21idWYsIG0pOworCXJldHVybiAoMCk7CiB9CiAKIC8qCmRpZmYgLS1naXQgYS9z eXMva2Vybi9rZXJuX21idWYuYyBiL3N5cy9rZXJuL2tlcm5fbWJ1Zi5jCi0tLSBhL3N5cy9rZXJu L2tlcm5fbWJ1Zi5jCisrKyBiL3N5cy9rZXJuL2tlcm5fbWJ1Zi5jCkBAIC00NCw4ICs0NCw2IEBA CiAjaW5jbHVkZSA8c3lzL3NtcC5oPgogI2luY2x1ZGUgPHN5cy9zeXNjdGwuaD4KIAotI2luY2x1 ZGUgPHNlY3VyaXR5L21hYy9tYWNfZnJhbWV3b3JrLmg+Ci0KICNpbmNsdWRlIDx2bS92bS5oPgog I2luY2x1ZGUgPHZtL3ZtX2V4dGVybi5oPgogI2luY2x1ZGUgPHZtL3ZtX2tlcm4uaD4KQEAgLTk5 LDYgKzk3LDE3IEBACiAgKgogICovCiAKKy8qCisgKiBab25lcyBmcm9tIHdoaWNoIHdlIGFsbG9j YXRlLgorICovCitzdGF0aWMgdW1hX3pvbmVfdAl6b25lX21idWY7CitzdGF0aWMgdW1hX3pvbmVf dAl6b25lX2NsdXN0Oworc3RhdGljIHVtYV96b25lX3QJem9uZV9wYWNrOworc3RhdGljIHVtYV96 b25lX3QJem9uZV9qdW1ib3A7CitzdGF0aWMgdW1hX3pvbmVfdAl6b25lX2p1bWJvOTsKK3N0YXRp YyB1bWFfem9uZV90CXpvbmVfanVtYm8xNjsKK3N0YXRpYyB1bWFfem9uZV90CXpvbmVfZXh0X3Jl ZmNudDsKKwogaW50IG5tYnVmczsJCQkvKiBsaW1pdHMgbnVtYmVyIG9mIG1idWZzICovCiBpbnQg bm1iY2x1c3RlcnM7CQkvKiBsaW1pdHMgbnVtYmVyIG9mIG1idWYgY2x1c3RlcnMgKi8KIGludCBu bWJqdW1ib3A7CQkJLyogbGltaXRzIG51bWJlciBvZiBwYWdlIHNpemUganVtYm8gY2x1c3RlcnMg Ki8KQEAgLTExMSw2ICsxMjAsMTUgQEAKICAgICAiTWF4aW11bSByZWFsIG1lbW9yeSBhbGxvY2F0 YWJsZSB0byB2YXJpb3VzIG1idWYgdHlwZXMiKTsKIAogLyoKKyAqIEFyZ3VtZW50IHN0cnVjdHVy ZSBwYXNzZWQgdG8gVU1BIHJvdXRpbmVzIGR1cmluZyBtYnVmIGFuZCBwYWNrZXQKKyAqIGFsbG9j YXRpb25zLgorICovCitzdHJ1Y3QgbWJfYXJncyB7CisJaW50CWZsYWdzOwkvKiBGbGFncyBmb3Ig bWJ1ZiBiZWluZyBhbGxvY2F0ZWQgKi8KKwlzaG9ydAl0eXBlOwkvKiBUeXBlIG9mIG1idWYgYmVp bmcgYWxsb2NhdGVkICovCit9OworCisvKgogICogdHVuYWJsZV9tYmluaXQoKSBoYXMgdG8gYmUg cnVuIGJlZm9yZSBhbnkgbWJ1ZiBhbGxvY2F0aW9ucyBhcmUgZG9uZS4KICAqLwogc3RhdGljIHZv aWQKQEAgLTI2MywzNCArMjgxLDI1IEBACiAgICAgIk1heGltdW0gbnVtYmVyIG9mIG1idWZzIGFs bG93ZWQiKTsKIAogLyoKLSAqIFpvbmVzIGZyb20gd2hpY2ggd2UgYWxsb2NhdGUuCi0gKi8KLXVt YV96b25lX3QJem9uZV9tYnVmOwotdW1hX3pvbmVfdAl6b25lX2NsdXN0OwotdW1hX3pvbmVfdAl6 b25lX3BhY2s7Ci11bWFfem9uZV90CXpvbmVfanVtYm9wOwotdW1hX3pvbmVfdAl6b25lX2p1bWJv OTsKLXVtYV96b25lX3QJem9uZV9qdW1ibzE2OwotdW1hX3pvbmVfdAl6b25lX2V4dF9yZWZjbnQ7 Ci0KLS8qCiAgKiBDYWxsb3V0IHRvIGFzc2lzdCB1cyBpbiBmcmVlaW5nIG1idWZzLgogICovCiBz dGF0aWMgc3RydWN0IGNhbGxvdXQJbWJfcmVjbGFpbV9jYWxsb3V0Owogc3RhdGljIHN0cnVjdCBt dHgJbWJfcmVjbGFpbV9jYWxsb3V0X210eDsKIAogLyoKICAqIExvY2FsIHByb3RvdHlwZXMuCisg KiBYWFg6IHR3byBhcmUgZXhwb3J0ZWQgZm9yIHNha2Ugb2YgY3hnYmUoNCkKICAqLwordW1hX3pv bmVfdAltX2dldHpvbmUoaW50KTsKK3ZvaWQJCW1fY2xqc2V0KHN0cnVjdCBtYnVmICosIHZvaWQg KiwgaW50KTsKIHN0YXRpYyBpbnQJbWJfY3Rvcl9tYnVmKHZvaWQgKiwgaW50LCB2b2lkICosIGlu dCk7CiBzdGF0aWMgaW50CW1iX2N0b3JfY2x1c3Qodm9pZCAqLCBpbnQsIHZvaWQgKiwgaW50KTsK IHN0YXRpYyBpbnQJbWJfY3Rvcl9wYWNrKHZvaWQgKiwgaW50LCB2b2lkICosIGludCk7CiBzdGF0 aWMgdm9pZAltYl9kdG9yX21idWYodm9pZCAqLCBpbnQsIHZvaWQgKik7CiBzdGF0aWMgdm9pZAlt Yl9kdG9yX2NsdXN0KHZvaWQgKiwgaW50LCB2b2lkICopOwogc3RhdGljIHZvaWQJbWJfZHRvcl9w YWNrKHZvaWQgKiwgaW50LCB2b2lkICopOwogc3RhdGljIGludAltYl96aW5pdF9wYWNrKHZvaWQg KiwgaW50LCBpbnQpOwogc3RhdGljIHZvaWQJbWJfemZpbmlfcGFjayh2b2lkICosIGludCk7Ci0K IHN0YXRpYyB2b2lkCW1iX3JlY2xhaW0odm9pZCAqKTsKIHN0YXRpYyB2b2lkICAgICptYnVmX2p1 bWJvX2FsbG9jKHVtYV96b25lX3QsIHZtX3NpemVfdCwgdWludDhfdCAqLCBpbnQpOwogc3RhdGlj IHZvaWQJbWJfbWF4YWN0aW9uKHVtYV96b25lX3QpOwpAQCAtNDQ5LDcgKzQ1OCw3IEBACiAJbSA9 IChzdHJ1Y3QgbWJ1ZiAqKW1lbTsKIAlmbGFncyA9IGFyZ3MtPmZsYWdzOwogCi0JZXJyb3IgPSBt X2luaXQobSwgTlVMTCwgc2l6ZSwgaG93LCB0eXBlLCBmbGFncyk7CisJZXJyb3IgPSBtX2luaXQo bSwgaG93LCB0eXBlLCBmbGFncyk7CiAKIAlyZXR1cm4gKGVycm9yKTsKIH0KQEAgLTY0OSwzMyAr NjU4LDE1IEBACiAJdHJhc2hfY3RvcihtLT5tX2V4dC5leHRfYnVmLCBNQ0xCWVRFUywgYXJnLCBo b3cpOwogI2VuZGlmCiAKLQllcnJvciA9IG1faW5pdChtLCBOVUxMLCBzaXplLCBob3csIHR5cGUs IGZsYWdzKTsKKwllcnJvciA9IG1faW5pdChtLCBob3csIHR5cGUsIGZsYWdzKTsKIAogCS8qIG1f ZXh0IGlzIGFscmVhZHkgaW5pdGlhbGl6ZWQuICovCiAJbS0+bV9kYXRhID0gbS0+bV9leHQuZXh0 X2J1ZjsKICAJbS0+bV9mbGFncyA9IChmbGFncyB8IE1fRVhUKTsKIAogCXJldHVybiAoZXJyb3Ip OwogfQogCi1pbnQKLW1fcGt0aGRyX2luaXQoc3RydWN0IG1idWYgKm0sIGludCBob3cpCi17Ci0j aWZkZWYgTUFDCi0JaW50IGVycm9yOwotI2VuZGlmCi0JbS0+bV9kYXRhID0gbS0+bV9wa3RkYXQ7 Ci0JYnplcm8oJm0tPm1fcGt0aGRyLCBzaXplb2YobS0+bV9wa3RoZHIpKTsKLSNpZmRlZiBNQUMK LQkvKiBJZiB0aGUgbGFiZWwgaW5pdCBmYWlscywgZmFpbCB0aGUgYWxsb2MgKi8KLQllcnJvciA9 IG1hY19tYnVmX2luaXQobSwgaG93KTsKLQlpZiAoZXJyb3IpCi0JCXJldHVybiAoZXJyb3IpOwot I2VuZGlmCi0KLQlyZXR1cm4gKDApOwotfQotCiAvKgogICogVGhpcyBpcyB0aGUgcHJvdG9jb2wg ZHJhaW4gcm91dGluZS4KICAqCkBAIC03NTUsMyArNzQ2LDQzNyBAQAogCiAJbXR4X3VubG9jaygm bWJfcmVjbGFpbV9jYWxsb3V0X210eCk7CiB9CisKKy8qCisgKiBTZWxlY3Qgem9uZSBieSBzaXpl LgorICovCit1bWFfem9uZV90CittX2dldHpvbmUoaW50IHNpemUpCit7CisJdW1hX3pvbmVfdCB6 b25lOworCisJc3dpdGNoIChzaXplKSB7CisJY2FzZSBNQ0xCWVRFUzoKKwkJem9uZSA9IHpvbmVf Y2x1c3Q7CisJCWJyZWFrOworI2lmIE1KVU1QQUdFU0laRSAhPSBNQ0xCWVRFUworCWNhc2UgTUpV TVBBR0VTSVpFOgorCQl6b25lID0gem9uZV9qdW1ib3A7CisJCWJyZWFrOworI2VuZGlmCisJY2Fz ZSBNSlVNOUJZVEVTOgorCQl6b25lID0gem9uZV9qdW1ibzk7CisJCWJyZWFrOworCWNhc2UgTUpV TTE2QllURVM6CisJCXpvbmUgPSB6b25lX2p1bWJvMTY7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJ CXBhbmljKCIlczogaW52YWxpZCBjbHVzdGVyIHNpemUgJWQiLCBfX2Z1bmNfXywgc2l6ZSk7CisJ fQorCisJcmV0dXJuICh6b25lKTsKK30KKworLyoKKyAqIENsZWFuIHVwIGFmdGVyIG1idWZzIHdp dGggTV9FWFQgc3RvcmFnZSBhdHRhY2hlZCB0byB0aGVtIGlmIHRoZQorICogcmVmZXJlbmNlIGNv dW50IGhpdHMgMS4KKyAqLworc3RhdGljIHZvaWQKK21iX2ZyZWVfZXh0KHN0cnVjdCBtYnVmICpt KQoreworCWludCBmcmVlbWJ1ZjsKKworCUtBU1NFUlQobS0+bV9mbGFncyAmIE1fRVhULCAoIiVz OiBNX0VYVCBub3Qgc2V0IG9uICVwIiwgX19mdW5jX18sIG0pKTsKKworCS8qCisJICogQ2hlY2sg aWYgdGhlIGhlYWRlciBpcyBlbWJlZGRlZCBpbiB0aGUgY2x1c3Rlci4KKwkgKi8KKwlmcmVlbWJ1 ZiA9IChtLT5tX2ZsYWdzICYgTV9OT0ZSRUUpID8gMCA6IDE7CisKKwlzd2l0Y2ggKG0tPm1fZXh0 LmV4dF90eXBlKSB7CisJY2FzZSBFWFRfU0ZCVUY6CisJCXNmX2V4dF9mcmVlKG0tPm1fZXh0LmV4 dF9hcmcxLCBtLT5tX2V4dC5leHRfYXJnMik7CisJCWJyZWFrOworCWNhc2UgRVhUX1NGQlVGX05P Q0FDSEU6CisJCXNmX2V4dF9mcmVlX25vY2FjaGUobS0+bV9leHQuZXh0X2FyZzEsIG0tPm1fZXh0 LmV4dF9hcmcyKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJS0FTU0VSVChtLT5tX2V4dC5leHRf Y250ICE9IE5VTEwsCisJCSAgICAoIiVzOiBubyByZWZjb3VudGluZyBwb2ludGVyIG9uICVwIiwg X19mdW5jX18sIG0pKTsKKwkJLyogCisJCSAqIEZyZWUgYXR0YWNoZWQgc3RvcmFnZSBpZiB0aGlz IG1idWYgaXMgdGhlIG9ubHkKKwkJICogcmVmZXJlbmNlIHRvIGl0LgorCQkgKi8KKwkJaWYgKCoo bS0+bV9leHQuZXh0X2NudCkgIT0gMSkgeworCQkJaWYgKGF0b21pY19mZXRjaGFkZF9pbnQobS0+ bV9leHQuZXh0X2NudCwgLTEpICE9IDEpCisJCQkJYnJlYWs7CisJCX0KKworCQlzd2l0Y2ggKG0t Pm1fZXh0LmV4dF90eXBlKSB7CisJCWNhc2UgRVhUX1BBQ0tFVDoJLyogVGhlIHBhY2tldCB6b25l IGlzIHNwZWNpYWwuICovCisJCQlpZiAoKihtLT5tX2V4dC5leHRfY250KSA9PSAwKQorCQkJCSoo bS0+bV9leHQuZXh0X2NudCkgPSAxOworCQkJdW1hX3pmcmVlKHpvbmVfcGFjaywgbSk7CisJCQly ZXR1cm47CQkvKiBKb2IgZG9uZS4gKi8KKwkJY2FzZSBFWFRfQ0xVU1RFUjoKKwkJCXVtYV96ZnJl ZSh6b25lX2NsdXN0LCBtLT5tX2V4dC5leHRfYnVmKTsKKwkJCWJyZWFrOworCQljYXNlIEVYVF9K VU1CT1A6CisJCQl1bWFfemZyZWUoem9uZV9qdW1ib3AsIG0tPm1fZXh0LmV4dF9idWYpOworCQkJ YnJlYWs7CisJCWNhc2UgRVhUX0pVTUJPOToKKwkJCXVtYV96ZnJlZSh6b25lX2p1bWJvOSwgbS0+ bV9leHQuZXh0X2J1Zik7CisJCQlicmVhazsKKwkJY2FzZSBFWFRfSlVNQk8xNjoKKwkJCXVtYV96 ZnJlZSh6b25lX2p1bWJvMTYsIG0tPm1fZXh0LmV4dF9idWYpOworCQkJYnJlYWs7CisJCWNhc2Ug RVhUX05FVF9EUlY6CisJCWNhc2UgRVhUX01PRF9UWVBFOgorCQljYXNlIEVYVF9ESVNQT1NBQkxF OgorCQkJKihtLT5tX2V4dC5leHRfY250KSA9IDA7CisJCQl1bWFfemZyZWUoem9uZV9leHRfcmVm Y250LCBfX0RFVk9MQVRJTEUodV9pbnQgKiwKKwkJCQltLT5tX2V4dC5leHRfY250KSk7CisJCQkv KiBGQUxMVEhST1VHSCAqLworCQljYXNlIEVYVF9FWFRSRUY6CisJCQlLQVNTRVJUKG0tPm1fZXh0 LmV4dF9mcmVlICE9IE5VTEwsCisJCQkJKCIlczogZXh0X2ZyZWUgbm90IHNldCIsIF9fZnVuY19f KSk7CisJCQkoKihtLT5tX2V4dC5leHRfZnJlZSkpKG0sIG0tPm1fZXh0LmV4dF9hcmcxLAorCQkJ ICAgIG0tPm1fZXh0LmV4dF9hcmcyKTsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJS0FTU0VS VChtLT5tX2V4dC5leHRfdHlwZSA9PSAwLAorCQkJCSgiJXM6IHVua25vd24gZXh0X3R5cGUiLCBf X2Z1bmNfXykpOworCQl9CisJfQorCisJaWYgKGZyZWVtYnVmKQorCQl1bWFfemZyZWUoem9uZV9t YnVmLCBtKTsKK30KKworLyoKKyAqIE9mZmljaWFsIG1idWYoOSkgYWxsb2NhdGlvbiBLUEkgZm9y IHN0YWNrIGFuZCBkcml2ZXJzOgorICoKKyAqIG1fZ2V0KCkJLSBhIHNpbmdsZSBtYnVmIHdpdGhv dXQgYW55IGF0dGFjaG1lbnRzLgorICogbV9nZXRoZHIoKQktIGEgc2luZ2xlIG1idWYgaW5pdGlh bGl6ZWQgYXMgTV9QS1RIRFIuCisgKiBtX2dldGNsKCkJLSBhbiBtYnVmICsgMmsgY2x1c3Rlci4K KyAqIG1fY2xnZXQoKQktIGF0dGFjaCBjbHVzdGVyIHRvIGFscmVhZHkgYWxsb2NhdGVkIG1idWYu CisgKiBtX2NsamdldCgpCS0gYXR0YWNoIGp1bWJvIGNsdXN0ZXIgdG8gYWxyZWFkeSBhbGxvY2F0 ZWQgbWJ1Zi4KKyAqIG1fZ2V0MigpCS0gYWxsb2NhdGUgbWluaW11bSBtYnVmIHRoYXQgd291bGQg Zml0IHNpemUgYXJndW1lbnQuCisgKiBtX2dldG0yKCkJLSBhbGxvY2F0ZSBhIGNoYWluIG9mIG1i dWZzL2NsdXN0ZXJzLgorICogbV9leHRhZGQoKQktIGF0dGFjaCBleHRlcm5hbCBjbHVzdGVyIHRv IG1idWYuCisgKgorICogbV9mcmVlKCkJLSBmcmVlIHNpbmdsZSBtYnVmIHdpdGggaXRzIHRhZ3Mg YW5kIGV4dCwgcmV0dXJucyBuZXh0IG1idWYuCisgKiBtX2ZyZWVtKCkJLSBmcmVlIGNoYWluIG9m IG1idWZzLgorICovCisKK3N0cnVjdCBtYnVmICoKK21fZ2V0KGludCBob3csIHNob3J0IHR5cGUp Cit7CisJc3RydWN0IG1iX2FyZ3MgYXJnczsKKworCWFyZ3MuZmxhZ3MgPSAwOworCWFyZ3MudHlw ZSA9IHR5cGU7CisJcmV0dXJuICh1bWFfemFsbG9jX2FyZyh6b25lX21idWYsICZhcmdzLCBob3cp KTsKK30KKworc3RydWN0IG1idWYgKgorbV9nZXRoZHIoaW50IGhvdywgc2hvcnQgdHlwZSkKK3sK KwlzdHJ1Y3QgbWJfYXJncyBhcmdzOworCisJYXJncy5mbGFncyA9IE1fUEtUSERSOworCWFyZ3Mu dHlwZSA9IHR5cGU7CisJcmV0dXJuICh1bWFfemFsbG9jX2FyZyh6b25lX21idWYsICZhcmdzLCBo b3cpKTsKK30KKworc3RydWN0IG1idWYgKgorbV9nZXRjbChpbnQgaG93LCBzaG9ydCB0eXBlLCBp bnQgZmxhZ3MpCit7CisJc3RydWN0IG1iX2FyZ3MgYXJnczsKKworCWFyZ3MuZmxhZ3MgPSBmbGFn czsKKwlhcmdzLnR5cGUgPSB0eXBlOworCXJldHVybiAodW1hX3phbGxvY19hcmcoem9uZV9wYWNr LCAmYXJncywgaG93KSk7Cit9CisKK2ludAorbV9jbGdldChzdHJ1Y3QgbWJ1ZiAqbSwgaW50IGhv dykKK3sKKworCUtBU1NFUlQoKG0tPm1fZmxhZ3MgJiBNX0VYVCkgPT0gMCwgKCIlczogbWJ1ZiAl cCBoYXMgTV9FWFQiLAorCSAgICBfX2Z1bmNfXywgbSkpOworCW0tPm1fZXh0LmV4dF9idWYgPSAo Y2hhciAqKU5VTEw7CisJdW1hX3phbGxvY19hcmcoem9uZV9jbHVzdCwgbSwgaG93KTsKKwkvKgor CSAqIE9uIGEgY2x1c3RlciBhbGxvY2F0aW9uIGZhaWx1cmUsIGRyYWluIHRoZSBwYWNrZXQgem9u ZSBhbmQgcmV0cnksCisJICogd2UgbWlnaHQgYmUgYWJsZSB0byBsb29zZW4gYSBmZXcgY2x1c3Rl cnMgdXAgb24gdGhlIGRyYWluLgorCSAqLworCWlmICgoaG93ICYgTV9OT1dBSVQpICYmIChtLT5t X2V4dC5leHRfYnVmID09IE5VTEwpKSB7CisJCXpvbmVfZHJhaW4oem9uZV9wYWNrKTsKKwkJdW1h X3phbGxvY19hcmcoem9uZV9jbHVzdCwgbSwgaG93KTsKKwl9CisJcmV0dXJuIChtLT5tX2ZsYWdz ICYgTV9FWFQpOworfQorCisvKgorICogbV9jbGpnZXQoKSBpcyBkaWZmZXJlbnQgZnJvbSBtX2Ns Z2V0KCkgYXMgaXQgY2FuIGFsbG9jYXRlIGNsdXN0ZXJzIHdpdGhvdXQKKyAqIGF0dGFjaGluZyB0 aGVtIHRvIGFuIG1idWYuICBJbiB0aGF0IGNhc2UgdGhlIHJldHVybiB2YWx1ZSBpcyB0aGUgcG9p bnRlcgorICogdG8gdGhlIGNsdXN0ZXIgb2YgdGhlIHJlcXVlc3RlZCBzaXplLiAgSWYgYW4gbWJ1 ZiB3YXMgc3BlY2lmaWVkLCBpdCBnZXRzCisgKiB0aGUgY2x1c3RlciBhdHRhY2hlZCB0byBpdCBh bmQgdGhlIHJldHVybiB2YWx1ZSBjYW4gYmUgc2FmZWx5IGlnbm9yZWQuCisgKiBGb3Igc2l6ZSBp dCB0YWtlcyBNQ0xCWVRFUywgTUpVTVBBR0VTSVpFLCBNSlVNOUJZVEVTLCBNSlVNMTZCWVRFUy4K KyAqLwordm9pZCAqCittX2NsamdldChzdHJ1Y3QgbWJ1ZiAqbSwgaW50IGhvdywgaW50IHNpemUp Cit7CisJdW1hX3pvbmVfdCB6b25lOworCisJaWYgKG0gIT0gTlVMTCkgeworCQlLQVNTRVJUKCht LT5tX2ZsYWdzICYgTV9FWFQpID09IDAsICgiJXM6IG1idWYgJXAgaGFzIE1fRVhUIiwKKwkJICAg IF9fZnVuY19fLCBtKSk7CisJCW0tPm1fZXh0LmV4dF9idWYgPSBOVUxMOworCX0KKworCXpvbmUg PSBtX2dldHpvbmUoc2l6ZSk7CisJcmV0dXJuICh1bWFfemFsbG9jX2FyZyh6b25lLCBtLCBob3cp KTsKK30KKwordm9pZAorbV9jbGpzZXQoc3RydWN0IG1idWYgKm0sIHZvaWQgKmNsLCBpbnQgdHlw ZSkKK3sKKwl1bWFfem9uZV90IHpvbmU7CisJaW50IHNpemU7CisKKwlzd2l0Y2ggKHR5cGUpIHsK KwljYXNlIEVYVF9DTFVTVEVSOgorCQlzaXplID0gTUNMQllURVM7CisJCXpvbmUgPSB6b25lX2Ns dXN0OworCQlicmVhazsKKyNpZiBNSlVNUEFHRVNJWkUgIT0gTUNMQllURVMKKwljYXNlIEVYVF9K VU1CT1A6CisJCXNpemUgPSBNSlVNUEFHRVNJWkU7CisJCXpvbmUgPSB6b25lX2p1bWJvcDsKKwkJ YnJlYWs7CisjZW5kaWYKKwljYXNlIEVYVF9KVU1CTzk6CisJCXNpemUgPSBNSlVNOUJZVEVTOwor CQl6b25lID0gem9uZV9qdW1ibzk7CisJCWJyZWFrOworCWNhc2UgRVhUX0pVTUJPMTY6CisJCXNp emUgPSBNSlVNMTZCWVRFUzsKKwkJem9uZSA9IHpvbmVfanVtYm8xNjsKKwkJYnJlYWs7CisJZGVm YXVsdDoKKwkJcGFuaWMoIiVzOiB1bmtub3duIGNsdXN0ZXIgdHlwZSAlZCIsIF9fZnVuY19fLCB0 eXBlKTsKKwkJYnJlYWs7CisJfQorCisJbS0+bV9kYXRhID0gbS0+bV9leHQuZXh0X2J1ZiA9IGNs OworCW0tPm1fZXh0LmV4dF9mcmVlID0gbS0+bV9leHQuZXh0X2FyZzEgPSBtLT5tX2V4dC5leHRf YXJnMiA9IE5VTEw7CisJbS0+bV9leHQuZXh0X3NpemUgPSBzaXplOworCW0tPm1fZXh0LmV4dF90 eXBlID0gdHlwZTsKKwltLT5tX2V4dC5leHRfZmxhZ3MgPSAwOworCW0tPm1fZXh0LmV4dF9jbnQg PSB1bWFfZmluZF9yZWZjbnQoem9uZSwgY2wpOworCW0tPm1fZmxhZ3MgfD0gTV9FWFQ7CisKK30K KworLyoKKyAqIG1fZ2V0MigpIGFsbG9jYXRlcyBtaW5pbXVtIG1idWYgdGhhdCB3b3VsZCBmaXQg InNpemUiIGFyZ3VtZW50LgorICovCitzdHJ1Y3QgbWJ1ZiAqCittX2dldDIoaW50IHNpemUsIGlu dCBob3csIHNob3J0IHR5cGUsIGludCBmbGFncykKK3sKKwlzdHJ1Y3QgbWJfYXJncyBhcmdzOwor CXN0cnVjdCBtYnVmICptLCAqbjsKKworCWFyZ3MuZmxhZ3MgPSBmbGFnczsKKwlhcmdzLnR5cGUg PSB0eXBlOworCisJaWYgKHNpemUgPD0gTUhMRU4gfHwgKHNpemUgPD0gTUxFTiAmJiAoZmxhZ3Mg JiBNX1BLVEhEUikgPT0gMCkpCisJCXJldHVybiAodW1hX3phbGxvY19hcmcoem9uZV9tYnVmLCAm YXJncywgaG93KSk7CisJaWYgKHNpemUgPD0gTUNMQllURVMpCisJCXJldHVybiAodW1hX3phbGxv Y19hcmcoem9uZV9wYWNrLCAmYXJncywgaG93KSk7CisKKwlpZiAoc2l6ZSA+IE1KVU1QQUdFU0la RSkKKwkJcmV0dXJuIChOVUxMKTsKKworCW0gPSB1bWFfemFsbG9jX2FyZyh6b25lX21idWYsICZh cmdzLCBob3cpOworCWlmIChtID09IE5VTEwpCisJCXJldHVybiAoTlVMTCk7CisKKwluID0gdW1h X3phbGxvY19hcmcoem9uZV9qdW1ib3AsIG0sIGhvdyk7CisJaWYgKG4gPT0gTlVMTCkgeworCQl1 bWFfemZyZWUoem9uZV9tYnVmLCBtKTsKKwkJcmV0dXJuIChOVUxMKTsKKwl9CisKKwlyZXR1cm4g KG0pOworfQorCisvKgorICogbV9nZXRqY2woKSByZXR1cm5zIGFuIG1idWYgd2l0aCBhIGNsdXN0 ZXIgb2YgdGhlIHNwZWNpZmllZCBzaXplIGF0dGFjaGVkLgorICogRm9yIHNpemUgaXQgdGFrZXMg TUNMQllURVMsIE1KVU1QQUdFU0laRSwgTUpVTTlCWVRFUywgTUpVTTE2QllURVMuCisgKi8KK3N0 cnVjdCBtYnVmICoKK21fZ2V0amNsKGludCBob3csIHNob3J0IHR5cGUsIGludCBmbGFncywgaW50 IHNpemUpCit7CisJc3RydWN0IG1iX2FyZ3MgYXJnczsKKwlzdHJ1Y3QgbWJ1ZiAqbSwgKm47CisJ dW1hX3pvbmVfdCB6b25lOworCisJaWYgKHNpemUgPT0gTUNMQllURVMpCisJCXJldHVybiBtX2dl dGNsKGhvdywgdHlwZSwgZmxhZ3MpOworCisJYXJncy5mbGFncyA9IGZsYWdzOworCWFyZ3MudHlw ZSA9IHR5cGU7CisKKwltID0gdW1hX3phbGxvY19hcmcoem9uZV9tYnVmLCAmYXJncywgaG93KTsK KwlpZiAobSA9PSBOVUxMKQorCQlyZXR1cm4gKE5VTEwpOworCisJem9uZSA9IG1fZ2V0em9uZShz aXplKTsKKwluID0gdW1hX3phbGxvY19hcmcoem9uZSwgbSwgaG93KTsKKwlpZiAobiA9PSBOVUxM KSB7CisJCXVtYV96ZnJlZSh6b25lX21idWYsIG0pOworCQlyZXR1cm4gKE5VTEwpOworCX0KKwly ZXR1cm4gKG0pOworfQorCisvKgorICogQWxsb2NhdGUgYSBnaXZlbiBsZW5ndGggd29ydGggb2Yg bWJ1ZnMgYW5kL29yIGNsdXN0ZXJzICh3aGF0ZXZlciBmaXRzCisgKiBiZXN0KSBhbmQgcmV0dXJu IGEgcG9pbnRlciB0byB0aGUgdG9wIG9mIHRoZSBhbGxvY2F0ZWQgY2hhaW4uICBJZiBhbgorICog ZXhpc3RpbmcgbWJ1ZiBjaGFpbiBpcyBwcm92aWRlZCwgdGhlbiB3ZSB3aWxsIGFwcGVuZCB0aGUg bmV3IGNoYWluCisgKiB0byB0aGUgZXhpc3Rpbmcgb25lIGJ1dCBzdGlsbCByZXR1cm4gdGhlIHRv cCBvZiB0aGUgbmV3bHkgYWxsb2NhdGVkCisgKiBjaGFpbi4KKyAqLworc3RydWN0IG1idWYgKgor bV9nZXRtMihzdHJ1Y3QgbWJ1ZiAqbSwgaW50IGxlbiwgaW50IGhvdywgc2hvcnQgdHlwZSwgaW50 IGZsYWdzKQoreworCXN0cnVjdCBtYnVmICptYiwgKm5tID0gTlVMTCwgKm10YWlsID0gTlVMTDsK KworCUtBU1NFUlQobGVuID49IDAsICgiJXM6IGxlbiBpcyA8IDAiLCBfX2Z1bmNfXykpOworCisJ LyogVmFsaWRhdGUgZmxhZ3MuICovCisJZmxhZ3MgJj0gKE1fUEtUSERSIHwgTV9FT1IpOworCisJ LyogUGFja2V0IGhlYWRlciBtYnVmIG11c3QgYmUgZmlyc3QgaW4gY2hhaW4uICovCisJaWYgKChm bGFncyAmIE1fUEtUSERSKSAmJiBtICE9IE5VTEwpCisJCWZsYWdzICY9IH5NX1BLVEhEUjsKKwor CS8qIExvb3AgYW5kIGFwcGVuZCBtYXhpbXVtIHNpemVkIG1idWZzIHRvIHRoZSBjaGFpbiB0YWls LiAqLworCXdoaWxlIChsZW4gPiAwKSB7CisJCWlmIChsZW4gPiBNQ0xCWVRFUykKKwkJCW1iID0g bV9nZXRqY2woaG93LCB0eXBlLCAoZmxhZ3MgJiBNX1BLVEhEUiksCisJCQkgICAgTUpVTVBBR0VT SVpFKTsKKwkJZWxzZSBpZiAobGVuID49IE1JTkNMU0laRSkKKwkJCW1iID0gbV9nZXRjbChob3cs IHR5cGUsIChmbGFncyAmIE1fUEtUSERSKSk7CisJCWVsc2UgaWYgKGZsYWdzICYgTV9QS1RIRFIp CisJCQltYiA9IG1fZ2V0aGRyKGhvdywgdHlwZSk7CisJCWVsc2UKKwkJCW1iID0gbV9nZXQoaG93 LCB0eXBlKTsKKworCQkvKiBGYWlsIHRoZSB3aG9sZSBvcGVyYXRpb24gaWYgb25lIG1idWYgY2Fu J3QgYmUgYWxsb2NhdGVkLiAqLworCQlpZiAobWIgPT0gTlVMTCkgeworCQkJaWYgKG5tICE9IE5V TEwpCisJCQkJbV9mcmVlbShubSk7CisJCQlyZXR1cm4gKE5VTEwpOworCQl9CisKKwkJLyogQm9v ayBrZWVwaW5nLiAqLworCQlsZW4gLT0gTV9TSVpFKG1iKTsKKwkJaWYgKG10YWlsICE9IE5VTEwp CisJCQltdGFpbC0+bV9uZXh0ID0gbWI7CisJCWVsc2UKKwkJCW5tID0gbWI7CisJCW10YWlsID0g bWI7CisJCWZsYWdzICY9IH5NX1BLVEhEUjsJLyogT25seSB2YWxpZCBvbiB0aGUgZmlyc3QgbWJ1 Zi4gKi8KKwl9CisJaWYgKGZsYWdzICYgTV9FT1IpCisJCW10YWlsLT5tX2ZsYWdzIHw9IE1fRU9S OyAgLyogT25seSB2YWxpZCBvbiB0aGUgbGFzdCBtYnVmLiAqLworCisJLyogSWYgbWJ1ZiB3YXMg c3VwcGxpZWQsIGFwcGVuZCBuZXcgY2hhaW4gdG8gdGhlIGVuZCBvZiBpdC4gKi8KKwlpZiAobSAh PSBOVUxMKSB7CisJCWZvciAobXRhaWwgPSBtOyBtdGFpbC0+bV9uZXh0ICE9IE5VTEw7IG10YWls ID0gbXRhaWwtPm1fbmV4dCkKKwkJCTsKKwkJbXRhaWwtPm1fbmV4dCA9IG5tOworCQltdGFpbC0+ bV9mbGFncyAmPSB+TV9FT1I7CisJfSBlbHNlCisJCW0gPSBubTsKKworCXJldHVybiAobSk7Cit9 CisKKy8qLQorICogQ29uZmlndXJlIGEgcHJvdmlkZWQgbWJ1ZiB0byByZWZlciB0byB0aGUgcHJv dmlkZWQgZXh0ZXJuYWwgc3RvcmFnZQorICogYnVmZmVyIGFuZCBzZXR1cCBhIHJlZmVyZW5jZSBj b3VudCBmb3Igc2FpZCBidWZmZXIuICBJZiB0aGUgc2V0dGluZworICogdXAgb2YgdGhlIHJlZmVy ZW5jZSBjb3VudCBmYWlscywgdGhlIE1fRVhUIGJpdCB3aWxsIG5vdCBiZSBzZXQuICBJZgorICog c3VjY2Vzc2Z1bGwsIHRoZSBNX0VYVCBiaXQgaXMgc2V0IGluIHRoZSBtYnVmJ3MgZmxhZ3MuCisg KgorICogQXJndW1lbnRzOgorICogICAgbWIgICAgIFRoZSBleGlzdGluZyBtYnVmIHRvIHdoaWNo IHRvIGF0dGFjaCB0aGUgcHJvdmlkZWQgYnVmZmVyLgorICogICAgYnVmICAgIFRoZSBhZGRyZXNz IG9mIHRoZSBwcm92aWRlZCBleHRlcm5hbCBzdG9yYWdlIGJ1ZmZlci4KKyAqICAgIHNpemUgICBU aGUgc2l6ZSBvZiB0aGUgcHJvdmlkZWQgYnVmZmVyLgorICogICAgZnJlZWYgIEEgcG9pbnRlciB0 byBhIHJvdXRpbmUgdGhhdCBpcyByZXNwb25zaWJsZSBmb3IgZnJlZWluZyB0aGUKKyAqICAgICAg ICAgICBwcm92aWRlZCBleHRlcm5hbCBzdG9yYWdlIGJ1ZmZlci4KKyAqICAgIGFyZ3MgICBBIHBv aW50ZXIgdG8gYW4gYXJndW1lbnQgc3RydWN0dXJlIChvZiBhbnkgdHlwZSkgdG8gYmUgcGFzc2Vk CisgKiAgICAgICAgICAgdG8gdGhlIHByb3ZpZGVkIGZyZWVmIHJvdXRpbmUgKG1heSBiZSBOVUxM KS4KKyAqICAgIGZsYWdzICBBbnkgb3RoZXIgZmxhZ3MgdG8gYmUgcGFzc2VkIHRvIHRoZSBwcm92 aWRlZCBtYnVmLgorICogICAgdHlwZSAgIFRoZSB0eXBlIHRoYXQgdGhlIGV4dGVybmFsIHN0b3Jh Z2UgYnVmZmVyIHNob3VsZCBiZQorICogICAgICAgICAgIGxhYmVsZWQgd2l0aC4KKyAqCisgKiBS ZXR1cm5zOgorICogICAgTm90aGluZy4KKyAqLworaW50CittX2V4dGFkZChzdHJ1Y3QgbWJ1ZiAq bWIsIGNhZGRyX3QgYnVmLCB1X2ludCBzaXplLAorICAgIHZvaWQgKCpmcmVlZikoc3RydWN0IG1i dWYgKiwgdm9pZCAqLCB2b2lkICopLCB2b2lkICphcmcxLCB2b2lkICphcmcyLAorICAgIGludCBm bGFncywgaW50IHR5cGUsIGludCB3YWl0KQoreworCUtBU1NFUlQodHlwZSAhPSBFWFRfQ0xVU1RF UiwgKCIlczogRVhUX0NMVVNURVIgbm90IGFsbG93ZWQiLCBfX2Z1bmNfXykpOworCisJaWYgKHR5 cGUgIT0gRVhUX0VYVFJFRikKKwkJbWItPm1fZXh0LmV4dF9jbnQgPSB1bWFfemFsbG9jKHpvbmVf ZXh0X3JlZmNudCwgd2FpdCk7CisKKwlpZiAobWItPm1fZXh0LmV4dF9jbnQgPT0gTlVMTCkKKwkJ cmV0dXJuIChFTk9NRU0pOworCisJKihtYi0+bV9leHQuZXh0X2NudCkgPSAxOworCW1iLT5tX2Zs YWdzIHw9IChNX0VYVCB8IGZsYWdzKTsKKwltYi0+bV9leHQuZXh0X2J1ZiA9IGJ1ZjsKKwltYi0+ bV9kYXRhID0gbWItPm1fZXh0LmV4dF9idWY7CisJbWItPm1fZXh0LmV4dF9zaXplID0gc2l6ZTsK KwltYi0+bV9leHQuZXh0X2ZyZWUgPSBmcmVlZjsKKwltYi0+bV9leHQuZXh0X2FyZzEgPSBhcmcx OworCW1iLT5tX2V4dC5leHRfYXJnMiA9IGFyZzI7CisJbWItPm1fZXh0LmV4dF90eXBlID0gdHlw ZTsKKwltYi0+bV9leHQuZXh0X2ZsYWdzID0gMDsKKworCXJldHVybiAoMCk7Cit9CisKK3N0cnVj dCBtYnVmICoKK21fZnJlZShzdHJ1Y3QgbWJ1ZiAqbSkKK3sKKwlzdHJ1Y3QgbWJ1ZiAqbiA9IG0t Pm1fbmV4dDsKKworCWlmICgobS0+bV9mbGFncyAmIChNX1BLVEhEUnxNX05PRlJFRSkpID09IChN X1BLVEhEUnxNX05PRlJFRSkpCisJCW1fdGFnX2RlbGV0ZV9jaGFpbihtLCBOVUxMKTsKKwlpZiAo bS0+bV9mbGFncyAmIE1fRVhUKQorCQltYl9mcmVlX2V4dChtKTsKKwllbHNlIGlmICgobS0+bV9m bGFncyAmIE1fTk9GUkVFKSA9PSAwKQorCQl1bWFfemZyZWUoem9uZV9tYnVmLCBtKTsKKwlyZXR1 cm4gKG4pOworfQorCisvKgorICogRnJlZSBhbiBlbnRpcmUgY2hhaW4gb2YgbWJ1ZnMgYW5kIGFz c29jaWF0ZWQgZXh0ZXJuYWwgYnVmZmVycywgaWYKKyAqIGFwcGxpY2FibGUuCisgKi8KK3ZvaWQK K21fZnJlZW0oc3RydWN0IG1idWYgKm1iKQoreworCisJd2hpbGUgKG1iICE9IE5VTEwpCisJCW1i ID0gbV9mcmVlKG1iKTsKK30KZGlmZiAtLWdpdCBhL3N5cy9kZXYvbmV0bWFwL25ldG1hcF9nZW5l cmljLmMgYi9zeXMvZGV2L25ldG1hcC9uZXRtYXBfZ2VuZXJpYy5jCi0tLSBhL3N5cy9kZXYvbmV0 bWFwL25ldG1hcF9nZW5lcmljLmMKKysrIGIvc3lzL2Rldi9uZXRtYXAvbmV0bWFwX2dlbmVyaWMu YwpAQCAtMTIyLDcgKzEyMiw3IEBACiAJbS0+bV9leHQuZXh0X2ZyZWUgPSBOVUxMOwogCWlmIChH RVRfTUJVRl9SRUZDTlQobSkgPT0gMCkKIAkJU0VUX01CVUZfUkVGQ05UKG0sIDEpOwotCXVtYV96 ZnJlZSh6b25lX3BhY2ssIG0pOworCW1fZnJlZShtKTsKIH0KIAogc3RhdGljIGlubGluZSBzdHJ1 Y3QgbWJ1ZiAqCmRpZmYgLS1naXQgYS9zeXMvZGV2L2N4Z2JlL3Q0X3NnZS5jIGIvc3lzL2Rldi9j eGdiZS90NF9zZ2UuYwotLS0gYS9zeXMvZGV2L2N4Z2JlL3Q0X3NnZS5jCisrKyBiL3N5cy9kZXYv Y3hnYmUvdDRfc2dlLmMKQEAgLTcwLDYgKzcwLDEyIEBACiAjaW5jbHVkZSAiY29tbW9uL3Q0X21z Zy5oIgogI2luY2x1ZGUgInQ0X21wX3JpbmcuaCIKIAorLyoKKyAqIEludGVybmFsIG1idWYoOSkg a25vd2xlZGdlLgorICovCit1bWFfem9uZV90ICAgICAgbV9nZXR6b25lKGludCk7Cit2b2lkCQlt X2NsanNldChzdHJ1Y3QgbWJ1ZiAqbSwgdm9pZCAqY2wsIGludCB0eXBlKTsKKwogI2lmZGVmIFQ0 X1BLVF9USU1FU1RBTVAKICNkZWZpbmUgUlhfQ09QWV9USFJFU0hPTEQgKE1JTkNMU0laRSAtIDgp CiAjZWxzZQpAQCAtMTU3MCw3ICsxNTc2LDcgQEAKIAkJTVBBU1MoY2xtICE9IE5VTEwpOwogCQlt ID0gKHN0cnVjdCBtYnVmICopKHNkLT5jbCArIHNkLT5ubWJ1ZiAqIE1TSVpFKTsKIAkJLyogTm8g Ynplcm8gcmVxdWlyZWQgKi8KLQkJaWYgKG1faW5pdChtLCBOVUxMLCAwLCBNX05PV0FJVCwgTVRf REFUQSwKKwkJaWYgKG1faW5pdChtLCBNX05PV0FJVCwgTVRfREFUQSwKIAkJICAgIGZyX29mZnNl dCA9PSAwID8gTV9QS1RIRFIgfCBNX05PRlJFRSA6IE1fTk9GUkVFKSkKIAkJCXJldHVybiAoTlVM TCk7CiAJCWZsLT5tYnVmX2lubGluZWQrKzsKZGlmZiAtLWdpdCBhL3N5cy9kZXYvY3hnYmUvdDRf bmV0bWFwLmMgYi9zeXMvZGV2L2N4Z2JlL3Q0X25ldG1hcC5jCi0tLSBhL3N5cy9kZXYvY3hnYmUv dDRfbmV0bWFwLmMKKysrIGIvc3lzL2Rldi9jeGdiZS90NF9uZXRtYXAuYwpAQCAtMzYsNiArMzYs NyBAQAogI2luY2x1ZGUgPHN5cy9idXMuaD4KICNpbmNsdWRlIDxzeXMvZXZlbnRoYW5kbGVyLmg+ CiAjaW5jbHVkZSA8c3lzL2xvY2suaD4KKyNpbmNsdWRlIDxzeXMvbWFsbG9jLmg+CiAjaW5jbHVk ZSA8c3lzL21idWYuaD4KICNpbmNsdWRlIDxzeXMvbW9kdWxlLmg+CiAjaW5jbHVkZSA8c3lzL3Nl bGluZm8uaD4KZGlmZiAtLWdpdCBhL3N5cy9kZXYvY3hnYi9jeGdiX3NnZS5jIGIvc3lzL2Rldi9j eGdiL2N4Z2Jfc2dlLmMKLS0tIGEvc3lzL2Rldi9jeGdiL2N4Z2Jfc2dlLmMKKysrIGIvc3lzL2Rl di9jeGdiL2N4Z2Jfc2dlLmMKQEAgLTc3LDYgKzc3LDEyIEBACiAjaW5jbHVkZSA8Y3hnYl9pbmNs dWRlLmg+CiAjaW5jbHVkZSA8c3lzL212ZWMuaD4KIAorLyoKKyAqIEludGVybmFsIG1idWYoOSkg a25vd2xlZGdlLgorICovCit1bWFfem9uZV90CW1fZ2V0em9uZShpbnQpOwordm9pZAkJbV9jbGpz ZXQoc3RydWN0IG1idWYgKm0sIHZvaWQgKmNsLCBpbnQgdHlwZSk7CisKIGludAl0eHFfZmlsbHMg PSAwOwogaW50CW11bHRpcV90eF9lbmFibGUgPSAxOwogCkBAIC03MTMsNyArNzE5LDcgQEAKIAkJ ICogV2UgYWxsb2NhdGUgYW4gdW5pbml0aWFsaXplZCBtYnVmICsgY2x1c3RlciwgbWJ1ZiBpcwog CQkgKiBpbml0aWFsaXplZCBhZnRlciByeC4KIAkJICovCi0JCWlmIChxLT56b25lID09IHpvbmVf cGFjaykgeworCQlpZiAocS0+dHlwZSA9PSBFWFRfQ0xVU1RFUikgewogCQkJaWYgKChtID0gbV9n ZXRjbChNX05PV0FJVCwgTVRfTk9JTklULCBNX1BLVEhEUikpID09IE5VTEwpCiAJCQkJYnJlYWs7 CiAJCQljbCA9IG0tPm1fZXh0LmV4dF9idWY7CQkJCkBAIC03MzgsNyArNzQ0LDcgQEAKIAkJICAg IGNsLCBxLT5idWZfc2l6ZSwgcmVmaWxsX2ZsX2NiLCAmY2JfYXJnLCAwKTsKIAkJCiAJCWlmIChl cnIgIT0gMCB8fCBjYl9hcmcuZXJyb3IpIHsKLQkJCWlmIChxLT56b25lICE9IHpvbmVfcGFjaykK KwkJCWlmIChxLT50eXBlICE9IEVYVF9DTFVTVEVSKQogCQkJCXVtYV96ZnJlZShxLT56b25lLCBj bCk7CiAJCQltX2ZyZWUobSk7CiAJCQlnb3RvIGRvbmU7CkBAIC03OTQsMTQgKzgwMCwxMiBAQAog CQlpZiAoZC0+ZmxhZ3MgJiBSWF9TV19ERVNDX0lOVVNFKSB7CiAJCQlidXNfZG1hbWFwX3VubG9h ZChxLT5lbnRyeV90YWcsIGQtPm1hcCk7CiAJCQlidXNfZG1hbWFwX2Rlc3Ryb3kocS0+ZW50cnlf dGFnLCBkLT5tYXApOwotCQkJaWYgKHEtPnpvbmUgPT0gem9uZV9wYWNrKSB7Ci0JCQkJbV9pbml0 KGQtPm0sIHpvbmVfcGFjaywgTUNMQllURVMsCi0JCQkJICAgIE1fTk9XQUlULCBNVF9EQVRBLCBN X0VYVCk7Ci0JCQkJdW1hX3pmcmVlKHpvbmVfcGFjaywgZC0+bSk7CisJCQlpZiAocS0+dHlwZSA9 PSBFWFRfQ0xVU1RFUikgeworCQkJCW1faW5pdChkLT5tLCBNX05PV0FJVCwgTVRfREFUQSwgTV9F WFQpOworCQkJCXVtYV96ZnJlZShxLT56b25lLCBkLT5tKTsKIAkJCX0gZWxzZSB7Ci0JCQkJbV9p bml0KGQtPm0sIHpvbmVfbWJ1ZiwgTUxFTiwKLQkJCQkgICAgTV9OT1dBSVQsIE1UX0RBVEEsIDAp OwotCQkJCXVtYV96ZnJlZSh6b25lX21idWYsIGQtPm0pOworCQkJCW1faW5pdChkLT5tLCBNX05P V0FJVCwgTVRfREFUQSwgMCk7CisJCQkJbV9mcmVlKGQtPm0pOwogCQkJCXVtYV96ZnJlZShxLT56 b25lLCBkLT5yeHNkX2NsKTsKIAkJCX0JCQkKIAkJfQpAQCAtMjUxMCwyNCArMjUxNCwxMiBAQAog CSAgICBmbGl0c190b19kZXNjKHNnbF9sZW4oVFhfTUFYX1NFR1MgKyAxKSArIDMpOwogCiAJcS0+ ZmxbMF0uYnVmX3NpemUgPSBNQ0xCWVRFUzsKLQlxLT5mbFswXS56b25lID0gem9uZV9wYWNrOwot CXEtPmZsWzBdLnR5cGUgPSBFWFRfUEFDS0VUOworCXEtPmZsWzBdLnpvbmUgPSBtX2dldHpvbmUo cS0+ZmxbMF0uYnVmX3NpemUpOworCXEtPmZsWzBdLnR5cGUgPSBtX2dldHR5cGUocS0+ZmxbMF0u YnVmX3NpemUpOwogCi0JaWYgKHAtPmp1bWJvX2J1Zl9zaXplID09ICBNSlVNMTZCWVRFUykgewot CQlxLT5mbFsxXS56b25lID0gem9uZV9qdW1ibzE2OwotCQlxLT5mbFsxXS50eXBlID0gRVhUX0pV TUJPMTY7Ci0JfSBlbHNlIGlmIChwLT5qdW1ib19idWZfc2l6ZSA9PSAgTUpVTTlCWVRFUykgewot CQlxLT5mbFsxXS56b25lID0gem9uZV9qdW1ibzk7Ci0JCXEtPmZsWzFdLnR5cGUgPSBFWFRfSlVN Qk85OwkJCi0JfSBlbHNlIGlmIChwLT5qdW1ib19idWZfc2l6ZSA9PSAgTUpVTVBBR0VTSVpFKSB7 Ci0JCXEtPmZsWzFdLnpvbmUgPSB6b25lX2p1bWJvcDsKLQkJcS0+ZmxbMV0udHlwZSA9IEVYVF9K VU1CT1A7Ci0JfSBlbHNlIHsKLQkJS0FTU0VSVCgwLCAoImNhbid0IGRlYWwgd2l0aCBqdW1ib19i dWZfc2l6ZSAlZC4iLCBwLT5qdW1ib19idWZfc2l6ZSkpOwotCQlyZXQgPSBFRE9PRlVTOwotCQln b3RvIGVycjsKLQl9CiAJcS0+ZmxbMV0uYnVmX3NpemUgPSBwLT5qdW1ib19idWZfc2l6ZTsKKwlx LT5mbFsxXS56b25lID0gbV9nZXR6b25lKHEtPmZsWzFdLmJ1Zl9zaXplKTsKKwlxLT5mbFsxXS50 eXBlID0gbV9nZXR0eXBlKHEtPmZsWzFdLmJ1Zl9zaXplKTsKIAogCS8qIEFsbG9jYXRlIGFuZCBz ZXR1cCB0aGUgbHJvX2N0cmwgc3RydWN0dXJlICovCiAJcS0+bHJvLmVuYWJsZWQgPSAhIShwaS0+ aWZwLT5pZl9jYXBlbmFibGUgJiBJRkNBUF9MUk8pOwpAQCAtMjcyNSw4ICsyNzE3LDggQEAKIAkJ aWYgKChzb3Blb3AgPT0gUlNQUV9TT1BfRU9QKSB8fAogCQkgICAgKHNvcGVvcCA9PSBSU1BRX1NP UCkpCiAJCQlmbGFncyB8PSBNX1BLVEhEUjsKLQkJbV9pbml0KG0sIGZsLT56b25lLCBmbC0+YnVm X3NpemUsIE1fTk9XQUlULCBNVF9EQVRBLCBmbGFncyk7Ci0JCWlmIChmbC0+em9uZSA9PSB6b25l X3BhY2spIHsKKwkJbV9pbml0KG0sIE1fTk9XQUlULCBNVF9EQVRBLCBmbGFncyk7CisJCWlmIChm bC0+dHlwZSA9PSBFWFRfQ0xVU1RFUikgewogCQkJLyoKIAkJCSAqIHJlc3RvcmUgY2xvYmJlcmVk IGRhdGEgcG9pbnRlcgogCQkJICovCmRpZmYgLS1naXQgYS9zeXMvZGV2L2N4Z2IvY3hnYl9hZGFw dGVyLmggYi9zeXMvZGV2L2N4Z2IvY3hnYl9hZGFwdGVyLmgKLS0tIGEvc3lzL2Rldi9jeGdiL2N4 Z2JfYWRhcHRlci5oCisrKyBiL3N5cy9kZXYvY3hnYi9jeGdiX2FkYXB0ZXIuaApAQCAtNDIsNiAr NDIsNyBAQAogI2luY2x1ZGUgPHN5cy9jb25kdmFyLmg+CiAjaW5jbHVkZSA8c3lzL2J1Zl9yaW5n Lmg+CiAjaW5jbHVkZSA8c3lzL3Rhc2txdWV1ZS5oPgorI2luY2x1ZGUgPHZtL3VtYS5oPgogCiAj aW5jbHVkZSA8bmV0L2V0aGVybmV0Lmg+CiAjaW5jbHVkZSA8bmV0L2lmLmg+Cgo= --b1_75bea7beb39ccff30d15b27f6a127c4f--
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?differential-rev-PHID-DREV-bxjtcdv4xb7nazwld5tw-req>