From mboxrd@z Thu Jan 1 00:00:00 1970 From: Anthony Liguori Subject: [RFC] Multiple QEMU AIO implementations Date: Wed, 16 Apr 2008 16:36:42 -0500 Message-ID: <4806716A.70504@us.ibm.com> Mime-Version: 1.0 Content-Type: multipart/mixed; boundary="------------030003010708030807020508" To: Marcelo Tosatti , Avi Kivity , kvm-devel Return-path: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: kvm-devel-bounces@lists.sourceforge.net Errors-To: kvm-devel-bounces@lists.sourceforge.net List-Id: kvm.vger.kernel.org This is a multi-part message in MIME format. --------------030003010708030807020508 Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit This isn't fully cooked yet, but pretty close. The basic idea is to make the aio usage in block-raw go to a set of function pointers and allow multiple simultaneous AIO implementations. I converted the posix-aio support to this, and also introduced a "unix" aio which just uses O_NONBLOCK and select(). The later only supports 1 simultaneous request per-fd but currently posix-aio is limited to that too. At least with my QEMU testing, the unix aio implementation outperforms posix-aio by a factor of 2. And it uses no signals... I'm inclined to suggest that we use signalfd with posix-aio, and for older guests, just fall back to unix aio. We can also introduce a linux-aio and use that when possible. Regards, Anthony Liguori --------------030003010708030807020508 Content-Type: application/mbox; name="qemu-block-aio-unix.patch" Content-Transfer-Encoding: base64 Content-Disposition: inline; filename="qemu-block-aio-unix.patch" ZGlmZiAtLWdpdCBhL01ha2VmaWxlIGIvTWFrZWZpbGUKaW5kZXggYThkZjI3OC4uOTE2ZjA3 MSAxMDA2NDQKLS0tIGEvTWFrZWZpbGUKKysrIGIvTWFrZWZpbGUKQEAgLTEzOSw3ICsxMzks NyBAQCBRRU1VX0lNR19CTE9DS19PQkpTID0gJChCTE9DS19PQkpTKQogaWZkZWYgQ09ORklH X1dJTjMyCiBRRU1VX0lNR19CTE9DS19PQkpTICs9IHFlbXUtaW1nLWJsb2NrLXJhdy13aW4z Mi5vCiBlbHNlCi1RRU1VX0lNR19CTE9DS19PQkpTICs9IHFlbXUtaW1nLWJsb2NrLXJhdy1w b3NpeC5vCitRRU1VX0lNR19CTE9DS19PQkpTICs9IHFlbXUtaW1nLWJsb2NrLXJhdy1wb3Np eC5vIHFlbXUtaW1nLWFpby1wb3NpeC5vCiBlbmRpZgogCiAjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCmRp ZmYgLS1naXQgYS9NYWtlZmlsZS50YXJnZXQgYi9NYWtlZmlsZS50YXJnZXQKaW5kZXggNzVk ZTc1My4uNzczZTgxZCAxMDA2NDQKLS0tIGEvTWFrZWZpbGUudGFyZ2V0CisrKyBiL01ha2Vm aWxlLnRhcmdldApAQCAtNDg1LDcgKzQ4NSw3IEBAIE9CSlM9dmwubyBvc2RlcC5vIG1vbml0 b3IubyBwY2kubyBsb2FkZXIubyBpc2FfbW1pby5vCiBpZmRlZiBDT05GSUdfV0lOMzIKIE9C SlMrPWJsb2NrLXJhdy13aW4zMi5vCiBlbHNlCi1PQkpTKz1ibG9jay1yYXctcG9zaXgubwor T0JKUys9YmxvY2stcmF3LXBvc2l4Lm8gYWlvLXBvc2l4Lm8gYWlvLXVuaXgubwogZW5kaWYK IAogTElCUys9LWx6CmRpZmYgLS1naXQgYS9haW8tcG9zaXguYyBiL2Fpby1wb3NpeC5jCm5l dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ2MWViOWIKLS0tIC9kZXYvbnVs bAorKysgYi9haW8tcG9zaXguYwpAQCAtMCwwICsxLDI5MSBAQAorLyoKKyAqIEJsb2NrIGRy aXZlciBmb3IgUkFXIGZpbGVzIChwb3NpeCkKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDYg RmFicmljZSBCZWxsYXJkCisgKgorICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwg ZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weQorICogb2Yg dGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUg IlNvZnR3YXJlIiksIHRvIGRlYWwKKyAqIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3Ry aWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMKKyAqIHRv IHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGlj ZW5zZSwgYW5kL29yIHNlbGwKKyAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBw ZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcworICogZnVybmlzaGVkIHRv IGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKKyAqCisgKiBU aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBz aGFsbCBiZSBpbmNsdWRlZCBpbgorICogYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0 aW9ucyBvZiB0aGUgU29mdHdhcmUuCisgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVE ICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IKKyAq IElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMg T0YgTUVSQ0hBTlRBQklMSVRZLAorICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBP U0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwKKyAqIFRIRSBBVVRI T1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1B R0VTIE9SIE9USEVSCisgKiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENP TlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLAorICogT1VUIE9GIE9S IElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBE RUFMSU5HUyBJTgorICogVEhFIFNPRlRXQVJFLgorICovCisKKyNpbmNsdWRlICJxZW11LWNv bW1vbi5oIgorI2lmbmRlZiBRRU1VX0lNRworI2luY2x1ZGUgInFlbXUtdGltZXIuaCIKKyNp bmNsdWRlICJleGVjLWFsbC5oIgorI2VuZGlmCisjaW5jbHVkZSAiYmxvY2tfaW50LmgiCisj aW5jbHVkZSAiYmxvY2stYWlvLmgiCisjaW5jbHVkZSAic3lzZW11LmgiCisjaW5jbHVkZSA8 YXNzZXJ0Lmg+CisjaW5jbHVkZSA8YWlvLmg+CisKKyNpZmRlZiBDT05GSUdfQ09DT0EKKyNp bmNsdWRlIDxwYXRocy5oPgorI2luY2x1ZGUgPHN5cy9wYXJhbS5oPgorI2luY2x1ZGUgPElP S2l0L0lPS2l0TGliLmg+CisjaW5jbHVkZSA8SU9LaXQvSU9CU0QuaD4KKyNpbmNsdWRlIDxJ T0tpdC9zdG9yYWdlL0lPTWVkaWFCU0RDbGllbnQuaD4KKyNpbmNsdWRlIDxJT0tpdC9zdG9y YWdlL0lPTWVkaWEuaD4KKyNpbmNsdWRlIDxJT0tpdC9zdG9yYWdlL0lPQ0RNZWRpYS5oPgor Ly8jaW5jbHVkZSA8SU9LaXQvc3RvcmFnZS9JT0NEVHlwZXMuaD4KKyNpbmNsdWRlIDxDb3Jl Rm91bmRhdGlvbi9Db3JlRm91bmRhdGlvbi5oPgorI2VuZGlmCisKKyNpZmRlZiBfX3N1bl9f CisjZGVmaW5lIF9QT1NJWF9QVEhSRUFEX1NFTUFOVElDUyAxCisjaW5jbHVkZSA8c2lnbmFs Lmg+CisjaW5jbHVkZSA8c3lzL2RraW8uaD4KKyNlbmRpZgorI2lmZGVmIF9fbGludXhfXwor I2luY2x1ZGUgPHN5cy9pb2N0bC5oPgorI2luY2x1ZGUgPGxpbnV4L2Nkcm9tLmg+CisjaW5j bHVkZSA8bGludXgvZmQuaD4KKyNlbmRpZgorI2lmZGVmIF9fRnJlZUJTRF9fCisjaW5jbHVk ZSA8c3lzL2Rpc2suaD4KKyNlbmRpZgorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiBVbml4IEFJTyB1c2luZyBQ T1NJWCBBSU8gKi8KKwordHlwZWRlZiBzdHJ1Y3QgUmF3QUlPQ0IgeworICAgIEJsb2NrRHJp dmVyQUlPQ0IgY29tbW9uOworICAgIHN0cnVjdCBhaW9jYiBhaW9jYjsKKyAgICBzdHJ1Y3Qg UmF3QUlPQ0IgKm5leHQ7Cit9IFJhd0FJT0NCOworCitzdGF0aWMgaW50IGFpb19zaWdfbnVt ID0gU0lHVVNSMjsKK3N0YXRpYyBSYXdBSU9DQiAqZmlyc3RfYWlvOyAvKiBBSU8gaXNzdWVk ICovCisvKiB3YWl0IHVudGlsIGF0IGxlYXN0IG9uZSBBSU8gd2FzIGhhbmRsZWQgKi8KK3N0 YXRpYyBzaWdzZXRfdCB3YWl0X29zZXQ7CisKK3N0YXRpYyB2b2lkIGFpb19zaWduYWxfaGFu ZGxlcihpbnQgc2lnbnVtKQoreworI2lmbmRlZiBRRU1VX0lNRworICAgIENQVVN0YXRlICpl bnYgPSBjcHVfc2luZ2xlX2VudjsKKyAgICBpZiAoZW52KSB7CisgICAgICAgIC8qIHN0b3Ag dGhlIGN1cnJlbnRseSBleGVjdXRpbmcgY3B1IGJlY2F1c2UgYSB0aW1lciBvY2N1cmVkICov CisgICAgICAgIGNwdV9pbnRlcnJ1cHQoZW52LCBDUFVfSU5URVJSVVBUX0VYSVQpOworI2lm ZGVmIFVTRV9LUUVNVQorICAgICAgICBpZiAoZW52LT5rcWVtdV9lbmFibGVkKSB7CisgICAg ICAgICAgICBrcWVtdV9jcHVfaW50ZXJydXB0KGVudik7CisgICAgICAgIH0KKyNlbmRpZgor ICAgIH0KKyNlbmRpZgorfQorCitzdGF0aWMgdm9pZCBwYV9wb2xsKHZvaWQgKm9wYXF1ZSkK K3sKKyAgICBSYXdBSU9DQiAqYWNiLCAqKnBhY2I7CisgICAgaW50IHJldDsKKworICAgIGZv cig7OykgeworICAgICAgICBwYWNiID0gJmZpcnN0X2FpbzsKKyAgICAgICAgZm9yKDs7KSB7 CisgICAgICAgICAgICBhY2IgPSAqcGFjYjsKKyAgICAgICAgICAgIGlmICghYWNiKQorICAg ICAgICAgICAgICAgIGdvdG8gdGhlX2VuZDsKKyAgICAgICAgICAgIHJldCA9IGFpb19lcnJv cigmYWNiLT5haW9jYik7CisgICAgICAgICAgICBpZiAocmV0ID09IEVDQU5DRUxFRCkgewor ICAgICAgICAgICAgICAgIC8qIHJlbW92ZSB0aGUgcmVxdWVzdCAqLworICAgICAgICAgICAg ICAgICpwYWNiID0gYWNiLT5uZXh0OworICAgICAgICAgICAgICAgIHFlbXVfYWlvX3JlbGVh c2UoYWNiKTsKKyAgICAgICAgICAgIH0gZWxzZSBpZiAocmV0ICE9IEVJTlBST0dSRVNTKSB7 CisgICAgICAgICAgICAgICAgLyogZW5kIG9mIGFpbyAqLworICAgICAgICAgICAgICAgIGlm IChyZXQgPT0gMCkgeworICAgICAgICAgICAgICAgICAgICByZXQgPSBhaW9fcmV0dXJuKCZh Y2ItPmFpb2NiKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHJldCA9PSBhY2ItPmFpb2Ni LmFpb19uYnl0ZXMpCisgICAgICAgICAgICAgICAgICAgICAgICByZXQgPSAwOworICAgICAg ICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICByZXQgPSAtRUlO VkFMOworICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIHJl dCA9IC1yZXQ7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIC8qIHJlbW92 ZSB0aGUgcmVxdWVzdCAqLworICAgICAgICAgICAgICAgICpwYWNiID0gYWNiLT5uZXh0Owor ICAgICAgICAgICAgICAgIC8qIGNhbGwgdGhlIGNhbGxiYWNrICovCisgICAgICAgICAgICAg ICAgYWNiLT5jb21tb24uY2IoYWNiLT5jb21tb24ub3BhcXVlLCByZXQpOworICAgICAgICAg ICAgICAgIHFlbXVfYWlvX3JlbGVhc2UoYWNiKTsKKyAgICAgICAgICAgICAgICBicmVhazsK KyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgcGFjYiA9ICZhY2ItPm5l eHQ7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisgdGhlX2VuZDogOworfQor CisKK3N0YXRpYyB2b2lkIHBhX2luaXQodm9pZCkKK3sKKyAgICBzdHJ1Y3Qgc2lnYWN0aW9u IGFjdDsKKworI2lmbmRlZiBRRU1VX0lNRworICAgIHFlbXVfcmVnaXN0ZXJfcG9sbChwYV9w b2xsLCBOVUxMKTsKKyNlbmRpZgorCisgICAgc2lnZmlsbHNldCgmYWN0LnNhX21hc2spOwor ICAgIGFjdC5zYV9mbGFncyA9IDA7IC8qIGRvIG5vdCByZXN0YXJ0IHN5c2NhbGxzIHRvIGlu dGVycnVwdCBzZWxlY3QoKSAqLworICAgIGFjdC5zYV9oYW5kbGVyID0gYWlvX3NpZ25hbF9o YW5kbGVyOworICAgIHNpZ2FjdGlvbihhaW9fc2lnX251bSwgJmFjdCwgTlVMTCk7CisKKyNp ZiBkZWZpbmVkKF9fR0xJQkNfXykgJiYgZGVmaW5lZChfX2xpbnV4X18pCisgICAgeworICAg ICAgICAvKiBYWFg6IGFpbyB0aHJlYWQgZXhpdCBzZWVtcyB0byBoYW5nIG9uIFJlZEhhdCA5 IGFuZCB0aGlzIGluaXQKKyAgICAgICAgICAgc2VlbXMgdG8gZml4IHRoZSBwcm9ibGVtLiAq LworICAgICAgICBzdHJ1Y3QgYWlvaW5pdCBhaTsKKyAgICAgICAgbWVtc2V0KCZhaSwgMCwg c2l6ZW9mKGFpKSk7CisgICAgICAgIGFpLmFpb190aHJlYWRzID0gMTsKKyAgICAgICAgYWku YWlvX251bSA9IDE7CisgICAgICAgIGFpLmFpb19pZGxlX3RpbWUgPSAzNjUgKiAxMDAwMDA7 CisgICAgICAgIGFpb19pbml0KCZhaSk7CisgICAgfQorI2VuZGlmCit9CisKK3N0YXRpYyB2 b2lkIHBhX3dhaXRfc3RhcnQodm9pZCkKK3sKKyAgICBzaWdzZXRfdCBzZXQ7CisKKyAgICBz aWdlbXB0eXNldCgmc2V0KTsKKyAgICBzaWdhZGRzZXQoJnNldCwgYWlvX3NpZ19udW0pOwor ICAgIHNpZ3Byb2NtYXNrKFNJR19CTE9DSywgJnNldCwgJndhaXRfb3NldCk7Cit9CisKK3N0 YXRpYyB2b2lkIHBhX3dhaXQodm9pZCkKK3sKKyAgICBzaWdzZXRfdCBzZXQ7CisgICAgaW50 IG5iX3NpZ3M7CisKKyNpZm5kZWYgUUVNVV9JTUcKKyAgICBpZiAocWVtdV9iaF9wb2xsKCkp CisgICAgICAgIHJldHVybjsKKyNlbmRpZgorICAgIHNpZ2VtcHR5c2V0KCZzZXQpOworICAg IHNpZ2FkZHNldCgmc2V0LCBhaW9fc2lnX251bSk7CisgICAgc2lnd2FpdCgmc2V0LCAmbmJf c2lncyk7CisgICAgcGFfcG9sbChOVUxMKTsKK30KKworc3RhdGljIHZvaWQgcGFfd2FpdF9l bmQodm9pZCkKK3sKKyAgICBzaWdwcm9jbWFzayhTSUdfU0VUTUFTSywgJndhaXRfb3NldCwg TlVMTCk7Cit9CisKK3N0YXRpYyB2b2lkIHBhX2ZsdXNoKHZvaWQpCit7CisgICAgcGFfd2Fp dF9zdGFydCgpOworICAgIHBhX3BvbGwoTlVMTCk7CisgICAgd2hpbGUgKGZpcnN0X2Fpbykg eworICAgICAgICBwYV93YWl0KCk7CisgICAgfQorICAgIHBhX3dhaXRfZW5kKCk7Cit9CisK K3N0YXRpYyBSYXdBSU9DQiAqcmF3X2Fpb19zZXR1cChCbG9ja0RyaXZlclN0YXRlICpicywg aW50IGZkLAorICAgICAgICBpbnQ2NF90IHNlY3Rvcl9udW0sIHVpbnQ4X3QgKmJ1ZiwgaW50 IG5iX3NlY3RvcnMsCisgICAgICAgIEJsb2NrRHJpdmVyQ29tcGxldGlvbkZ1bmMgKmNiLCB2 b2lkICpvcGFxdWUpCit7CisgICAgUmF3QUlPQ0IgKmFjYjsKKworICAgIGFjYiA9IHFlbXVf YWlvX2dldChicywgY2IsIG9wYXF1ZSk7CisgICAgaWYgKCFhY2IpCisgICAgICAgIHJldHVy biBOVUxMOworICAgIGFjYi0+YWlvY2IuYWlvX2ZpbGRlcyA9IGZkOworICAgIGFjYi0+YWlv Y2IuYWlvX3NpZ2V2ZW50LnNpZ2V2X3NpZ25vID0gYWlvX3NpZ19udW07CisgICAgYWNiLT5h aW9jYi5haW9fc2lnZXZlbnQuc2lnZXZfbm90aWZ5ID0gU0lHRVZfU0lHTkFMOworICAgIGFj Yi0+YWlvY2IuYWlvX2J1ZiA9IGJ1ZjsKKyAgICBpZiAobmJfc2VjdG9ycyA8IDApCisgICAg ICAgIGFjYi0+YWlvY2IuYWlvX25ieXRlcyA9IC1uYl9zZWN0b3JzOworICAgIGVsc2UKKyAg ICAgICAgYWNiLT5haW9jYi5haW9fbmJ5dGVzID0gbmJfc2VjdG9ycyAqIDUxMjsKKyAgICBh Y2ItPmFpb2NiLmFpb19vZmZzZXQgPSBzZWN0b3JfbnVtICogNTEyOworICAgIGFjYi0+bmV4 dCA9IGZpcnN0X2FpbzsKKyAgICBmaXJzdF9haW8gPSBhY2I7CisgICAgcmV0dXJuIGFjYjsK K30KKworc3RhdGljIEJsb2NrRHJpdmVyQUlPQ0IgKnBhX3N1Ym1pdChCbG9ja0RyaXZlclN0 YXRlICpicywKKwkJCQkgICBpbnQgZmQsIGludDY0X3Qgc2VjdG9yX251bSwKKwkJCQkgICB2 b2lkICpidWYsIGludCBuYl9zZWN0b3JzLCBpbnQgd3JpdGUsCisJCQkJICAgQmxvY2tEcml2 ZXJDb21wbGV0aW9uRnVuYyAqY2IsCisJCQkJICAgdm9pZCAqb3BhcXVlKQoreworICAgIFJh d0FJT0NCICphY2I7CisgICAgaW50IGVycjsKKworICAgIGFjYiA9IHJhd19haW9fc2V0dXAo YnMsIGZkLCBzZWN0b3JfbnVtLCBidWYsIG5iX3NlY3RvcnMsIGNiLCBvcGFxdWUpOworICAg IGlmICghYWNiKQorICAgICAgICByZXR1cm4gTlVMTDsKKworICAgIGlmICh3cml0ZSkgCisJ ZXJyID0gYWlvX3dyaXRlKCZhY2ItPmFpb2NiKTsKKyAgICBlbHNlCisJZXJyID0gYWlvX3Jl YWQoJmFjYi0+YWlvY2IpOworCisgICAgaWYgKGVyciA8IDApIHsKKyAgICAgICAgcWVtdV9h aW9fcmVsZWFzZShhY2IpOworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisgICAgcmV0 dXJuICZhY2ItPmNvbW1vbjsKK30KKworc3RhdGljIHZvaWQgcGFfY2FuY2VsKEJsb2NrRHJp dmVyQUlPQ0IgKmJsb2NrYWNiKQoreworICAgIGludCByZXQ7CisgICAgUmF3QUlPQ0IgKmFj YiA9IChSYXdBSU9DQiAqKWJsb2NrYWNiOworICAgIFJhd0FJT0NCICoqcGFjYjsKKworICAg IHJldCA9IGFpb19jYW5jZWwoYWNiLT5haW9jYi5haW9fZmlsZGVzLCAmYWNiLT5haW9jYik7 CisgICAgaWYgKHJldCA9PSBBSU9fTk9UQ0FOQ0VMRUQpIHsKKyAgICAgICAgLyogZmFpbCBz YWZlOiBpZiB0aGUgYWlvIGNvdWxkIG5vdCBiZSBjYW5jZWxlZCwgd2Ugd2FpdCBmb3IKKyAg ICAgICAgICAgaXQgKi8KKyAgICAgICAgd2hpbGUgKGFpb19lcnJvcigmYWNiLT5haW9jYikg PT0gRUlOUFJPR1JFU1MpOworICAgIH0KKworICAgIC8qIHJlbW92ZSB0aGUgY2FsbGJhY2sg ZnJvbSB0aGUgcXVldWUgKi8KKyAgICBwYWNiID0gJmZpcnN0X2FpbzsKKyAgICBmb3IoOzsp IHsKKyAgICAgICAgaWYgKCpwYWNiID09IE5VTEwpIHsKKyAgICAgICAgICAgIGJyZWFrOwor ICAgICAgICB9IGVsc2UgaWYgKCpwYWNiID09IGFjYikgeworICAgICAgICAgICAgKnBhY2Ig PSBhY2ItPm5leHQ7CisgICAgICAgICAgICBxZW11X2Fpb19yZWxlYXNlKGFjYik7CisgICAg ICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBwYWNiID0gJmFjYi0+bmV4dDsK KyAgICB9Cit9CisKK3N0YXRpYyBBSU9Ecml2ZXIgcG9zaXhfYWlvX2RydiA9IHsKKyAgICAu bmFtZSA9ICJwb3NpeCIsCisgICAgLmFpb2NiX3NpemUgPSBzaXplb2YoUmF3QUlPQ0IpLAor ICAgIC5haW9faW5pdCA9IHBhX2luaXQsCisgICAgLmFpb193YWl0X3N0YXJ0ID0gcGFfd2Fp dF9zdGFydCwKKyAgICAuYWlvX3dhaXQgPSBwYV93YWl0LAorICAgIC5haW9fd2FpdF9lbmQg PSBwYV93YWl0X2VuZCwKKyAgICAuYWlvX2ZsdXNoID0gcGFfZmx1c2gsCisgICAgLmFpb19z dWJtaXQgPSBwYV9zdWJtaXQsCisgICAgLmFpb19jYW5jZWwgPSBwYV9jYW5jZWwsCit9Owor CitpbnQgcG9zaXhfYWlvX2luaXQodm9pZCkKK3sKKyAgICByZXR1cm4gcWVtdV9yZWdpc3Rl cl9haW8oJnBvc2l4X2Fpb19kcnYpOworfQorCQpkaWZmIC0tZ2l0IGEvYWlvLXVuaXguYyBi L2Fpby11bml4LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjJhMWVm NwotLS0gL2Rldi9udWxsCisrKyBiL2Fpby11bml4LmMKQEAgLTAsMCArMSwyMDggQEAKKyNp bmNsdWRlICJxZW11LWNvbW1vbi5oIgorI2luY2x1ZGUgInFlbXUtY2hhci5oIgorI2luY2x1 ZGUgImJsb2NrLmgiCisjaW5jbHVkZSAiYmxvY2tfaW50LmgiCisjaW5jbHVkZSAiYmxvY2st YWlvLmgiCisjaW5jbHVkZSAic3lzZW11LmgiCisKK3R5cGVkZWYgc3RydWN0IFVuaXhBSU9D QiB7CisgICAgQmxvY2tEcml2ZXJBSU9DQiBjb21tb247CisgICAgaW50IGZkOworICAgIHZv aWQgKmJ1ZmZlcjsKKyAgICBvZmZfdCBvZmZzZXQ7CisgICAgaW50IHdyaXRlOworICAgIHNp emVfdCBzaXplOworICAgIHNpemVfdCBjb21wbGV0ZWQ7CisgICAgc3RydWN0IFVuaXhBSU9D QiAqbmV4dDsKK30gVW5peEFJT0NCOworCitzdGF0aWMgVW5peEFJT0NCICphaW9fdGFibGVb MTAyNF07CisKK3N0YXRpYyB2b2lkIGRldGFjaF9haW9jYihVbml4QUlPQ0IgKipsaXN0LCBV bml4QUlPQ0IgKmFpbykKK3sKKyAgICBmb3IgKDsgKmxpc3Q7IGxpc3QgPSAmKCpsaXN0KS0+ bmV4dCkgeworCWlmICgqbGlzdCA9PSBhaW8pIHsKKwkgICAgKmxpc3QgPSBhaW8tPm5leHQ7 CisJICAgIHJldHVybjsKKwl9CisgICAgfQorfQorCitzdGF0aWMgaW50IHRyeV9jb21wbGV0 ZShVbml4QUlPQ0IgKmFpbykKK3sKKyAgICBzc2l6ZV90IGxlbjsKKyAgICB1aW50OF90ICpw dHI7CisKKyAgICBpZiAoYWlvID09IE5VTEwpCisJcmV0dXJuIDA7CisKKyAgICBwdHIgPSBh aW8tPmJ1ZmZlcjsKKworICAgIGRvIHsKKwlpZiAoYWlvLT53cml0ZSkKKwkgICAgbGVuID0g cHdyaXRlKGFpby0+ZmQsIHB0ciArIGFpby0+Y29tcGxldGVkLAorCQkJIGFpby0+c2l6ZSAt IGFpby0+Y29tcGxldGVkLAorCQkJIGFpby0+b2Zmc2V0ICsgYWlvLT5jb21wbGV0ZWQpOwor CWVsc2UKKwkgICAgbGVuID0gcHJlYWQoYWlvLT5mZCwgcHRyICsgYWlvLT5jb21wbGV0ZWQs CisJCQlhaW8tPnNpemUgLSBhaW8tPmNvbXBsZXRlZCwKKwkJCWFpby0+b2Zmc2V0ICsgYWlv LT5jb21wbGV0ZWQpOworCWlmIChsZW4gPiAwKQorCSAgICBhaW8tPmNvbXBsZXRlZCArPSBs ZW47CisgICAgfSB3aGlsZSAoKGxlbiA9PSAtMSAmJiBlcnJubyA9PSBFSU5UUikgfHwgbGVu ID4gMCk7CisKKyAgICAvKiB3ZSBzdGlsbCBoYXZlIG1vcmUgdG8gY29tcGxldGUgYnV0IHdl J2QgYmxvY2sgKi8KKyAgICBpZiAobGVuID09IC0xICYmIGVycm5vID09IEVBR0FJTikKKwly ZXR1cm4gLUVBR0FJTjsKKworICAgIC8qIHdlIGhhdmUgYW4gZXJyb3IgaW4gdGhlIHJlcXVl c3Qgb3Igd2UndmUgc3VjY2VlZGVkLAorICAgICAqIGVpdGhlciB3YXksIGNvbXBsZXRlIHRo ZSBhaW8gb3BlcmF0aW9uCisgICAgICovCisgICAgaWYgKGxlbiA9PSAtMSkgeworCXByaW50 ZigiaW8gZXJyb3IgJW0hXG4iKTsKKwlsZW4gPSAtZXJybm87CisgICAgfSBlbHNlIAorCWxl biA9IDA7CisKKyAgICBpZiAobGVuID09IDAgJiYgYWlvLT5jb21wbGV0ZWQgIT0gYWlvLT5z aXplKSB7CisJcHJpbnRmKCJ3dGYhXG4iKTsKKyAgICB9CisKKyAgICBkZXRhY2hfYWlvY2Io JmFpb190YWJsZVthaW8tPmZkXSwgYWlvKTsKKyAgICBhaW8tPmNvbW1vbi5jYihhaW8tPmNv bW1vbi5vcGFxdWUsIGxlbik7CisgICAgcWVtdV9haW9fcmVsZWFzZShhaW8pOworCisgICAg cmV0dXJuIDE7Cit9CisKK3N0YXRpYyB2b2lkIGRvX3RyeV9jb21wbGV0ZSh2b2lkICpvcGFx dWUpCit7CisgICAgVW5peEFJT0NCICoqcHAgPSBvcGFxdWU7CisgICAgaW50IGVyciwgZmQ7 CisKKyAgICBpZiAoISpwcCkKKwlyZXR1cm47CisKKyAgICBmZCA9ICgqcHApLT5mZDsKKwor ICAgIGRvIHsKKwllcnIgPSB0cnlfY29tcGxldGUoKnBwKTsKKyAgICB9IHdoaWxlIChlcnIg PiAwKTsKKworICAgIC8qIFdlIGNvdWxkIG9wdGltaXplIHRoaXMgZm9yIHRoZSBjYXNlIHdl J3JlIGFscmVhZHkgcmVnaXN0ZXJlZCAqLworCisgICAgaWYgKGVyciA9PSAwKQorCXFlbXVf c2V0X2ZkX2hhbmRsZXIyKGZkLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMKTsKKyAgICBlbHNl IGlmICgoKnBwKS0+d3JpdGUpCisJcWVtdV9zZXRfZmRfaGFuZGxlcjIoZmQsIE5VTEwsIE5V TEwsIGRvX3RyeV9jb21wbGV0ZSwgcHApOworICAgIGVsc2UKKwlxZW11X3NldF9mZF9oYW5k bGVyMihmZCwgTlVMTCwgZG9fdHJ5X2NvbXBsZXRlLCBOVUxMLCBwcCk7Cit9CisKK3N0YXRp YyBCbG9ja0RyaXZlckFJT0NCICp1YV9zdWJtaXQoQmxvY2tEcml2ZXJTdGF0ZSAqYnMsCisJ CQkJICAgaW50IGZkLCBpbnQ2NF90IHNlY3Rvcl9udW0sCisJCQkJICAgdm9pZCAqYnVmLCBp bnQgbmJfc2VjdG9ycywgaW50IHdyaXRlLAorCQkJCSAgIEJsb2NrRHJpdmVyQ29tcGxldGlv bkZ1bmMgKmNiLAorCQkJCSAgIHZvaWQgKm9wYXF1ZSkKK3sKKyAgICBVbml4QUlPQ0IgKmFp b2NiLCAqKnBwOworICAgIGludCBuZWVkX3JlZ2lzdGVyOworCisgICAgYWlvY2IgPSBxZW11 X2Fpb19nZXQoYnMsIGNiLCBvcGFxdWUpOworICAgIGlmICghYWlvY2IpIHsKKwlwcmludGYo InJldHVybmluZyBudWxsPz9cbiIpOworCXJldHVybiBOVUxMOworICAgIH0KKworICAgIGlm IChmZCA+PSAxMDI0KSB7CisJZnByaW50ZihzdGRlcnIsICJhaW8gZmQgZ3JlYXRlciB0aGFu IDEwMjQ/XG4iKTsKKwlyZXR1cm4gTlVMTDsKKyAgICB9CisKKyAgICBuZWVkX3JlZ2lzdGVy ID0gISEoYWlvX3RhYmxlW2ZkXSA9PSBOVUxMKTsKKworICAgIGFpb2NiLT5mZCA9IGZkOwor ICAgIGFpb2NiLT5idWZmZXIgPSBidWY7CisgICAgYWlvY2ItPm9mZnNldCA9IHNlY3Rvcl9u dW0gKiA1MTI7CisgICAgYWlvY2ItPnNpemUgPSBuYl9zZWN0b3JzICogNTEyOworICAgIGFp b2NiLT5jb21wbGV0ZWQgPSAwOworICAgIGFpb2NiLT53cml0ZSA9IHdyaXRlOworICAgIGFp b2NiLT5uZXh0ID0gTlVMTDsKKworICAgIC8qIFB1dCBhdCBlbmQgb2YgcXVldWUgKi8KKyAg ICBmb3IgKHBwID0gJmFpb190YWJsZVtmZF07ICpwcDsgcHAgPSAmKCpwcCktPm5leHQpOwor ICAgICpwcCA9IGFpb2NiOworCisgICAgLyogSWYgd2UncmUgYWxyZWFkeSB3YWl0aW5nLCBk b24ndCBib3RoZXIgdHJ5aW5nIHRvIGNvbXBsZXRlIHRoZSBJTworICAgICAgIHJlcXVlc3Qg Ki8KKyAgICBpZiAobmVlZF9yZWdpc3RlcikgeworCWludCBlcnI7CisKKwlkbyB7CisJICAg IGVyciA9IHRyeV9jb21wbGV0ZShhaW9fdGFibGVbZmRdKTsKKwl9IHdoaWxlIChlcnIgPiAw KTsKKworCS8qIGlmIHRoZSBjdXJyZW50IHJlcXVlc3Qgd291bGQgYmxvY2ssIHJlZ2lzdGVy IGEgY2FsbGJhY2sgKi8KKwlpZiAoZXJyID09IC1FQUdBSU4pIHsKKwkgICAgaWYgKGFpb190 YWJsZVtmZF0tPndyaXRlKQorCQlxZW11X3NldF9mZF9oYW5kbGVyMihmZCwgTlVMTCwgTlVM TCwgZG9fdHJ5X2NvbXBsZXRlLAorCQkJCSAgICAgJmFpb190YWJsZVtmZF0pOworCSAgICBl bHNlCisJCXFlbXVfc2V0X2ZkX2hhbmRsZXIyKGZkLCBOVUxMLCBkb190cnlfY29tcGxldGUs IE5VTEwsCisJCQkJICAgICAmYWlvX3RhYmxlW2ZkXSk7CisJfQorICAgIH0KKworICAgIHJl dHVybiAmYWlvY2ItPmNvbW1vbjsKK30KKworc3RhdGljIHZvaWQgdWFfd2FpdCh2b2lkKQor eworICAgIG1haW5fbG9vcF93YWl0KDEwKTsKK30KKworc3RhdGljIHZvaWQgdWFfZmx1c2go dm9pZCkKK3sKKyAgICBpbnQgaTsKKyAgICBpbnQgb3V0c3RhbmRpbmdfcmVxdWVzdHM7CisK KyAgICBkbyB7CisJb3V0c3RhbmRpbmdfcmVxdWVzdHMgPSAwOworCisJZm9yIChpID0gMDsg aSA8IDEwMjQ7IGkrKykgeworCSAgICBpZiAoYWlvX3RhYmxlW2ldKSB7CisJCW91dHN0YW5k aW5nX3JlcXVlc3RzID0gMTsKKwkJYnJlYWs7CisJICAgIH0KKwl9CisKKwlpZiAob3V0c3Rh bmRpbmdfcmVxdWVzdHMpCisJICAgIHVhX3dhaXQoKTsKKyAgICB9IHdoaWxlIChvdXRzdGFu ZGluZ19yZXF1ZXN0cyk7Cit9CisKK3N0YXRpYyB2b2lkIHVhX2NhbmNlbChCbG9ja0RyaXZl ckFJT0NCICpiYWlvY2IpCit7CisgICAgVW5peEFJT0NCICphaW9jYiA9ICh2b2lkICopYmFp b2NiOworCisgICAgZGV0YWNoX2Fpb2NiKCZhaW9fdGFibGVbYWlvY2ItPmZkXSwgYWlvY2Ip OworCisgICAgaWYgKGFpb190YWJsZVthaW9jYi0+ZmRdID09IE5VTEwpCisJcWVtdV9zZXRf ZmRfaGFuZGxlcjIoYWlvY2ItPmZkLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMKTsKKworICAg IHFlbXVfYWlvX3JlbGVhc2UoYWlvY2IpOworfQorCitzdGF0aWMgQUlPRHJpdmVyIHVuaXhf YWlvX2RydiA9IHsKKyAgICAubmFtZSA9ICJ1bml4IiwKKyAgICAuYWlvY2Jfc2l6ZSA9IHNp emVvZihVbml4QUlPQ0IpLAorICAgIC5haW9fd2FpdCA9IHVhX3dhaXQsCisgICAgLmFpb19m bHVzaCA9IHVhX2ZsdXNoLAorICAgIC5haW9fc3VibWl0ID0gdWFfc3VibWl0LAorICAgIC5h aW9fY2FuY2VsID0gdWFfY2FuY2VsLAorfTsKKworaW50IHVuaXhfYWlvX2luaXQodm9pZCkK K3sKKyAgICByZXR1cm4gcWVtdV9yZWdpc3Rlcl9haW8oJnVuaXhfYWlvX2Rydik7Cit9CmRp ZmYgLS1naXQgYS9ibG9jay1haW8uaCBiL2Jsb2NrLWFpby5oCm5ldyBmaWxlIG1vZGUgMTAw NjQ0CmluZGV4IDAwMDAwMDAuLjMwYzI3OWEKLS0tIC9kZXYvbnVsbAorKysgYi9ibG9jay1h aW8uaApAQCAtMCwwICsxLDM0IEBACisjaWZuZGVmIFFFTVVfQUlPX0gKKyNkZWZpbmUgUUVN VV9BSU9fSAorCisjaW5jbHVkZSAicWVtdS1jb21tb24uaCIKKyNpbmNsdWRlICJibG9jay5o IgorCit0eXBlZGVmIHN0cnVjdCBBSU9Ecml2ZXIKK3sKKyAgICBjb25zdCBjaGFyICpuYW1l OworICAgIHNpemVfdCBhaW9jYl9zaXplOworICAgIHZvaWQgKCphaW9faW5pdCkodm9pZCk7 CisgICAgdm9pZCAoKmFpb193YWl0X3N0YXJ0KSh2b2lkKTsKKyAgICB2b2lkICgqYWlvX3dh aXQpKHZvaWQpOworICAgIHZvaWQgKCphaW9fd2FpdF9lbmQpKHZvaWQpOworICAgIHZvaWQg KCphaW9fZmx1c2gpKHZvaWQpOworICAgIEJsb2NrRHJpdmVyQUlPQ0IgKigqYWlvX3N1Ym1p dCkoQmxvY2tEcml2ZXJTdGF0ZSAqYnMsIGludCBmZCwKKwkJCQkgICAgaW50NjRfdCBzZWN0 b3JfbnVtLCB2b2lkICpidWYsCisJCQkJICAgIGludCBzZWN0b3JzLCBpbnQgd3JpdGUsCisJ CQkJICAgIEJsb2NrRHJpdmVyQ29tcGxldGlvbkZ1bmMgKmNiLAorCQkJCSAgICB2b2lkICpv cGFxdWUpOworICAgIHZvaWQgKCphaW9fY2FuY2VsKShCbG9ja0RyaXZlckFJT0NCICphaW9j Yik7CisgICAgc3RydWN0IEFJT0RyaXZlciAqbmV4dDsKK30gQUlPRHJpdmVyOworCitpbnQg cWVtdV9yZWdpc3Rlcl9haW8oQUlPRHJpdmVyICpkcnYpOworCitpbnQgcWVtdV9zZXRfYWlv X2RyaXZlcihjb25zdCBjaGFyICpuYW1lKTsKKworZXh0ZXJuIEFJT0RyaXZlciAqYWlvX2Ry djsKKworaW50IHBvc2l4X2Fpb19pbml0KHZvaWQpOworaW50IHVuaXhfYWlvX2luaXQodm9p ZCk7CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvYmxvY2stcmF3LXBvc2l4LmMgYi9ibG9jay1y YXctcG9zaXguYwppbmRleCA2YjAwMDllLi4yYjA3ZjU4IDEwMDY0NAotLS0gYS9ibG9jay1y YXctcG9zaXguYworKysgYi9ibG9jay1yYXctcG9zaXguYwpAQCAtMjcsOCArMjcsOCBAQAog I2luY2x1ZGUgImV4ZWMtYWxsLmgiCiAjZW5kaWYKICNpbmNsdWRlICJibG9ja19pbnQuaCIK KyNpbmNsdWRlICJibG9jay1haW8uaCIKICNpbmNsdWRlIDxhc3NlcnQuaD4KLSNpbmNsdWRl IDxhaW8uaD4KIAogI2lmZGVmIENPTkZJR19DT0NPQQogI2luY2x1ZGUgPHBhdGhzLmg+CkBA IC0xMTEsNiArMTExLDggQEAgc3RhdGljIGludCByYXdfb3BlbihCbG9ja0RyaXZlclN0YXRl ICpicywgY29uc3QgY2hhciAqZmlsZW5hbWUsIGludCBmbGFncykKICAgICAgICAgb3Blbl9m bGFncyB8PSBPX0RJUkVDVDsKICNlbmRpZgogCisgICAgb3Blbl9mbGFncyB8PSBPX05PTkJM T0NLOworCiAgICAgcy0+dHlwZSA9IEZUWVBFX0ZJTEU7CiAKICAgICBmZCA9IG9wZW4oZmls ZW5hbWUsIG9wZW5fZmxhZ3MsIDA2NDQpOwpAQCAtMjMwLDIzMCArMjMyLDc1IEBAIGxhYmVs X19yYXdfd3JpdGVfX3N1Y2Nlc3M6CiAgICAgcmV0dXJuIHJldDsKIH0KIAotLyoqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwot LyogVW5peCBBSU8gdXNpbmcgUE9TSVggQUlPICovCi0KLXR5cGVkZWYgc3RydWN0IFJhd0FJ T0NCIHsKLSAgICBCbG9ja0RyaXZlckFJT0NCIGNvbW1vbjsKLSAgICBzdHJ1Y3QgYWlvY2Ig YWlvY2I7Ci0gICAgc3RydWN0IFJhd0FJT0NCICpuZXh0OwotfSBSYXdBSU9DQjsKLQotc3Rh dGljIGludCBhaW9fc2lnX251bSA9IFNJR1VTUjI7Ci1zdGF0aWMgUmF3QUlPQ0IgKmZpcnN0 X2FpbzsgLyogQUlPIGlzc3VlZCAqLwotc3RhdGljIGludCBhaW9faW5pdGlhbGl6ZWQgPSAw OwotCi1zdGF0aWMgdm9pZCBhaW9fc2lnbmFsX2hhbmRsZXIoaW50IHNpZ251bSkKLXsKLSNp Zm5kZWYgUUVNVV9JTUcKLSAgICBDUFVTdGF0ZSAqZW52ID0gY3B1X3NpbmdsZV9lbnY7Ci0g ICAgaWYgKGVudikgewotICAgICAgICAvKiBzdG9wIHRoZSBjdXJyZW50bHkgZXhlY3V0aW5n IGNwdSBiZWNhdXNlIGEgdGltZXIgb2NjdXJlZCAqLwotICAgICAgICBjcHVfaW50ZXJydXB0 KGVudiwgQ1BVX0lOVEVSUlVQVF9FWElUKTsKLSNpZmRlZiBVU0VfS1FFTVUKLSAgICAgICAg aWYgKGVudi0+a3FlbXVfZW5hYmxlZCkgewotICAgICAgICAgICAga3FlbXVfY3B1X2ludGVy cnVwdChlbnYpOwotICAgICAgICB9Ci0jZW5kaWYKLSAgICB9Ci0jZW5kaWYKLX0KK3N0YXRp YyBpbnQgYWlvX2luaXRpYWxpemVkOwogCiB2b2lkIHFlbXVfYWlvX2luaXQodm9pZCkKIHsK LSAgICBzdHJ1Y3Qgc2lnYWN0aW9uIGFjdDsKKyAgICBpZiAoYWlvX2luaXRpYWxpemVkKQor CXJldHVybjsKIAogICAgIGFpb19pbml0aWFsaXplZCA9IDE7Ci0KLSAgICBzaWdmaWxsc2V0 KCZhY3Quc2FfbWFzayk7Ci0gICAgYWN0LnNhX2ZsYWdzID0gMDsgLyogZG8gbm90IHJlc3Rh cnQgc3lzY2FsbHMgdG8gaW50ZXJydXB0IHNlbGVjdCgpICovCi0gICAgYWN0LnNhX2hhbmRs ZXIgPSBhaW9fc2lnbmFsX2hhbmRsZXI7Ci0gICAgc2lnYWN0aW9uKGFpb19zaWdfbnVtLCAm YWN0LCBOVUxMKTsKLQotI2lmIGRlZmluZWQoX19HTElCQ19fKSAmJiBkZWZpbmVkKF9fbGlu dXhfXykKLSAgICB7Ci0gICAgICAgIC8qIFhYWDogYWlvIHRocmVhZCBleGl0IHNlZW1zIHRv IGhhbmcgb24gUmVkSGF0IDkgYW5kIHRoaXMgaW5pdAotICAgICAgICAgICBzZWVtcyB0byBm aXggdGhlIHByb2JsZW0uICovCi0gICAgICAgIHN0cnVjdCBhaW9pbml0IGFpOwotICAgICAg ICBtZW1zZXQoJmFpLCAwLCBzaXplb2YoYWkpKTsKLSAgICAgICAgYWkuYWlvX3RocmVhZHMg PSAxOwotICAgICAgICBhaS5haW9fbnVtID0gMTsKLSAgICAgICAgYWkuYWlvX2lkbGVfdGlt ZSA9IDM2NSAqIDEwMDAwMDsKLSAgICAgICAgYWlvX2luaXQoJmFpKTsKLSAgICB9Ci0jZW5k aWYKLX0KLQotdm9pZCBxZW11X2Fpb19wb2xsKHZvaWQpCi17Ci0gICAgUmF3QUlPQ0IgKmFj YiwgKipwYWNiOwotICAgIGludCByZXQ7Ci0KLSAgICBmb3IoOzspIHsKLSAgICAgICAgcGFj YiA9ICZmaXJzdF9haW87Ci0gICAgICAgIGZvcig7OykgewotICAgICAgICAgICAgYWNiID0g KnBhY2I7Ci0gICAgICAgICAgICBpZiAoIWFjYikKLSAgICAgICAgICAgICAgICBnb3RvIHRo ZV9lbmQ7Ci0gICAgICAgICAgICByZXQgPSBhaW9fZXJyb3IoJmFjYi0+YWlvY2IpOwotICAg ICAgICAgICAgaWYgKHJldCA9PSBFQ0FOQ0VMRUQpIHsKLSAgICAgICAgICAgICAgICAvKiBy ZW1vdmUgdGhlIHJlcXVlc3QgKi8KLSAgICAgICAgICAgICAgICAqcGFjYiA9IGFjYi0+bmV4 dDsKLSAgICAgICAgICAgICAgICBxZW11X2Fpb19yZWxlYXNlKGFjYik7Ci0gICAgICAgICAg ICB9IGVsc2UgaWYgKHJldCAhPSBFSU5QUk9HUkVTUykgewotICAgICAgICAgICAgICAgIC8q IGVuZCBvZiBhaW8gKi8KLSAgICAgICAgICAgICAgICBpZiAocmV0ID09IDApIHsKLSAgICAg ICAgICAgICAgICAgICAgcmV0ID0gYWlvX3JldHVybigmYWNiLT5haW9jYik7Ci0gICAgICAg ICAgICAgICAgICAgIGlmIChyZXQgPT0gYWNiLT5haW9jYi5haW9fbmJ5dGVzKQotICAgICAg ICAgICAgICAgICAgICAgICAgcmV0ID0gMDsKLSAgICAgICAgICAgICAgICAgICAgZWxzZQot ICAgICAgICAgICAgICAgICAgICAgICAgcmV0ID0gLUVJTlZBTDsKLSAgICAgICAgICAgICAg ICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICByZXQgPSAtcmV0OwotICAgICAgICAg ICAgICAgIH0KLSAgICAgICAgICAgICAgICAvKiByZW1vdmUgdGhlIHJlcXVlc3QgKi8KLSAg ICAgICAgICAgICAgICAqcGFjYiA9IGFjYi0+bmV4dDsKLSAgICAgICAgICAgICAgICAvKiBj YWxsIHRoZSBjYWxsYmFjayAqLwotICAgICAgICAgICAgICAgIGFjYi0+Y29tbW9uLmNiKGFj Yi0+Y29tbW9uLm9wYXF1ZSwgcmV0KTsKLSAgICAgICAgICAgICAgICBxZW11X2Fpb19yZWxl YXNlKGFjYik7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9IGVsc2Ug ewotICAgICAgICAgICAgICAgIHBhY2IgPSAmYWNiLT5uZXh0OwotICAgICAgICAgICAgfQot ICAgICAgICB9Ci0gICAgfQotIHRoZV9lbmQ6IDsKKyAgICBiZHJ2X2hvc3RfZGV2aWNlLmFp b2NiX3NpemUgPSBhaW9fZHJ2LT5haW9jYl9zaXplOworICAgIGJkcnZfcmF3LmFpb2NiX3Np emUgPSBhaW9fZHJ2LT5haW9jYl9zaXplOworICAgIGlmIChhaW9fZHJ2LT5haW9faW5pdCkK KwlhaW9fZHJ2LT5haW9faW5pdCgpOwogfQogCiAvKiBXYWl0IGZvciBhbGwgSU8gcmVxdWVz dHMgdG8gY29tcGxldGUuICAqLwogdm9pZCBxZW11X2Fpb19mbHVzaCh2b2lkKQogewotICAg IHFlbXVfYWlvX3dhaXRfc3RhcnQoKTsKLSAgICBxZW11X2Fpb19wb2xsKCk7Ci0gICAgd2hp bGUgKGZpcnN0X2FpbykgewotICAgICAgICBxZW11X2Fpb193YWl0KCk7Ci0gICAgfQotICAg IHFlbXVfYWlvX3dhaXRfZW5kKCk7CisgICAgcWVtdV9haW9faW5pdCgpOworICAgIGFpb19k cnYtPmFpb19mbHVzaCgpOwogfQogCi0vKiB3YWl0IHVudGlsIGF0IGxlYXN0IG9uZSBBSU8g d2FzIGhhbmRsZWQgKi8KLXN0YXRpYyBzaWdzZXRfdCB3YWl0X29zZXQ7Ci0KIHZvaWQgcWVt dV9haW9fd2FpdF9zdGFydCh2b2lkKQogewotICAgIHNpZ3NldF90IHNldDsKLQotICAgIGlm ICghYWlvX2luaXRpYWxpemVkKQotICAgICAgICBxZW11X2Fpb19pbml0KCk7Ci0gICAgc2ln ZW1wdHlzZXQoJnNldCk7Ci0gICAgc2lnYWRkc2V0KCZzZXQsIGFpb19zaWdfbnVtKTsKLSAg ICBzaWdwcm9jbWFzayhTSUdfQkxPQ0ssICZzZXQsICZ3YWl0X29zZXQpOworICAgIHFlbXVf YWlvX2luaXQoKTsKKyAgICBpZiAoYWlvX2Rydi0+YWlvX3dhaXRfc3RhcnQpCisJYWlvX2Ry di0+YWlvX3dhaXRfc3RhcnQoKTsKIH0KIAogdm9pZCBxZW11X2Fpb193YWl0KHZvaWQpCiB7 Ci0gICAgc2lnc2V0X3Qgc2V0OwotICAgIGludCBuYl9zaWdzOwotCi0jaWZuZGVmIFFFTVVf SU1HCi0gICAgaWYgKHFlbXVfYmhfcG9sbCgpKQotICAgICAgICByZXR1cm47Ci0jZW5kaWYK LSAgICBzaWdlbXB0eXNldCgmc2V0KTsKLSAgICBzaWdhZGRzZXQoJnNldCwgYWlvX3NpZ19u dW0pOwotICAgIHNpZ3dhaXQoJnNldCwgJm5iX3NpZ3MpOwotICAgIHFlbXVfYWlvX3BvbGwo KTsKKyAgICBxZW11X2Fpb19pbml0KCk7CisgICAgYWlvX2Rydi0+YWlvX3dhaXQoKTsKIH0K IAogdm9pZCBxZW11X2Fpb193YWl0X2VuZCh2b2lkKQogewotICAgIHNpZ3Byb2NtYXNrKFNJ R19TRVRNQVNLLCAmd2FpdF9vc2V0LCBOVUxMKTsKKyAgICBpZiAoYWlvX2Rydi0+YWlvX3dh aXRfZW5kKQorCWFpb19kcnYtPmFpb193YWl0X2VuZCgpOwogfQogCi1zdGF0aWMgUmF3QUlP Q0IgKnJhd19haW9fc2V0dXAoQmxvY2tEcml2ZXJTdGF0ZSAqYnMsCitzdGF0aWMgQmxvY2tE cml2ZXJBSU9DQiAqcmF3X2Fpb19yZWFkKEJsb2NrRHJpdmVyU3RhdGUgKmJzLAogICAgICAg ICBpbnQ2NF90IHNlY3Rvcl9udW0sIHVpbnQ4X3QgKmJ1ZiwgaW50IG5iX3NlY3RvcnMsCiAg ICAgICAgIEJsb2NrRHJpdmVyQ29tcGxldGlvbkZ1bmMgKmNiLCB2b2lkICpvcGFxdWUpCiB7 CiAgICAgQkRSVlJhd1N0YXRlICpzID0gYnMtPm9wYXF1ZTsKLSAgICBSYXdBSU9DQiAqYWNi OwogCiAgICAgaWYgKGZkX29wZW4oYnMpIDwgMCkKLSAgICAgICAgcmV0dXJuIE5VTEw7Ci0K LSAgICBhY2IgPSBxZW11X2Fpb19nZXQoYnMsIGNiLCBvcGFxdWUpOwotICAgIGlmICghYWNi KQotICAgICAgICByZXR1cm4gTlVMTDsKLSAgICBhY2ItPmFpb2NiLmFpb19maWxkZXMgPSBz LT5mZDsKLSAgICBhY2ItPmFpb2NiLmFpb19zaWdldmVudC5zaWdldl9zaWdubyA9IGFpb19z aWdfbnVtOwotICAgIGFjYi0+YWlvY2IuYWlvX3NpZ2V2ZW50LnNpZ2V2X25vdGlmeSA9IFNJ R0VWX1NJR05BTDsKLSAgICBhY2ItPmFpb2NiLmFpb19idWYgPSBidWY7Ci0gICAgaWYgKG5i X3NlY3RvcnMgPCAwKQotICAgICAgICBhY2ItPmFpb2NiLmFpb19uYnl0ZXMgPSAtbmJfc2Vj dG9yczsKLSAgICBlbHNlCi0gICAgICAgIGFjYi0+YWlvY2IuYWlvX25ieXRlcyA9IG5iX3Nl Y3RvcnMgKiA1MTI7Ci0gICAgYWNiLT5haW9jYi5haW9fb2Zmc2V0ID0gc2VjdG9yX251bSAq IDUxMjsKLSAgICBhY2ItPm5leHQgPSBmaXJzdF9haW87Ci0gICAgZmlyc3RfYWlvID0gYWNi OwotICAgIHJldHVybiBhY2I7Ci19CisJcmV0dXJuIE5VTEw7CiAKLXN0YXRpYyBCbG9ja0Ry aXZlckFJT0NCICpyYXdfYWlvX3JlYWQoQmxvY2tEcml2ZXJTdGF0ZSAqYnMsCi0gICAgICAg IGludDY0X3Qgc2VjdG9yX251bSwgdWludDhfdCAqYnVmLCBpbnQgbmJfc2VjdG9ycywKLSAg ICAgICAgQmxvY2tEcml2ZXJDb21wbGV0aW9uRnVuYyAqY2IsIHZvaWQgKm9wYXF1ZSkKLXsK LSAgICBSYXdBSU9DQiAqYWNiOwotCi0gICAgYWNiID0gcmF3X2Fpb19zZXR1cChicywgc2Vj dG9yX251bSwgYnVmLCBuYl9zZWN0b3JzLCBjYiwgb3BhcXVlKTsKLSAgICBpZiAoIWFjYikK LSAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgaWYgKGFpb19yZWFkKCZhY2ItPmFpb2NiKSA8 IDApIHsKLSAgICAgICAgcWVtdV9haW9fcmVsZWFzZShhY2IpOwotICAgICAgICByZXR1cm4g TlVMTDsKLSAgICB9Ci0gICAgcmV0dXJuICZhY2ItPmNvbW1vbjsKKyAgICByZXR1cm4gYWlv X2Rydi0+YWlvX3N1Ym1pdChicywgcy0+ZmQsIHNlY3Rvcl9udW0sIGJ1ZiwgbmJfc2VjdG9y cywgMCwKKwkJCSAgICAgICBjYiwgb3BhcXVlKTsKIH0KIAogc3RhdGljIEJsb2NrRHJpdmVy QUlPQ0IgKnJhd19haW9fd3JpdGUoQmxvY2tEcml2ZXJTdGF0ZSAqYnMsCiAgICAgICAgIGlu dDY0X3Qgc2VjdG9yX251bSwgY29uc3QgdWludDhfdCAqYnVmLCBpbnQgbmJfc2VjdG9ycywK ICAgICAgICAgQmxvY2tEcml2ZXJDb21wbGV0aW9uRnVuYyAqY2IsIHZvaWQgKm9wYXF1ZSkK IHsKLSAgICBSYXdBSU9DQiAqYWNiOwotCi0gICAgYWNiID0gcmF3X2Fpb19zZXR1cChicywg c2VjdG9yX251bSwgKHVpbnQ4X3QqKWJ1ZiwgbmJfc2VjdG9ycywgY2IsIG9wYXF1ZSk7Ci0g ICAgaWYgKCFhY2IpCi0gICAgICAgIHJldHVybiBOVUxMOwotICAgIGlmIChhaW9fd3JpdGUo JmFjYi0+YWlvY2IpIDwgMCkgewotICAgICAgICBxZW11X2Fpb19yZWxlYXNlKGFjYik7Ci0g ICAgICAgIHJldHVybiBOVUxMOwotICAgIH0KLSAgICByZXR1cm4gJmFjYi0+Y29tbW9uOwor ICAgIEJEUlZSYXdTdGF0ZSAqcyA9IGJzLT5vcGFxdWU7CisKKyAgICBpZiAoZmRfb3Blbihi cykgPCAwKQorCXJldHVybiBOVUxMOworCisgICAgcmV0dXJuIGFpb19kcnYtPmFpb19zdWJt aXQoYnMsIHMtPmZkLCBzZWN0b3JfbnVtLCAodm9pZCAqKWJ1ZiwgbmJfc2VjdG9ycywKKwkJ CSAgICAgICAxLCBjYiwgb3BhcXVlKTsKIH0KIAogc3RhdGljIHZvaWQgcmF3X2Fpb19jYW5j ZWwoQmxvY2tEcml2ZXJBSU9DQiAqYmxvY2thY2IpCiB7Ci0gICAgaW50IHJldDsKLSAgICBS YXdBSU9DQiAqYWNiID0gKFJhd0FJT0NCICopYmxvY2thY2I7Ci0gICAgUmF3QUlPQ0IgKipw YWNiOwotCi0gICAgcmV0ID0gYWlvX2NhbmNlbChhY2ItPmFpb2NiLmFpb19maWxkZXMsICZh Y2ItPmFpb2NiKTsKLSAgICBpZiAocmV0ID09IEFJT19OT1RDQU5DRUxFRCkgewotICAgICAg ICAvKiBmYWlsIHNhZmU6IGlmIHRoZSBhaW8gY291bGQgbm90IGJlIGNhbmNlbGVkLCB3ZSB3 YWl0IGZvcgotICAgICAgICAgICBpdCAqLwotICAgICAgICB3aGlsZSAoYWlvX2Vycm9yKCZh Y2ItPmFpb2NiKSA9PSBFSU5QUk9HUkVTUyk7Ci0gICAgfQotCi0gICAgLyogcmVtb3ZlIHRo ZSBjYWxsYmFjayBmcm9tIHRoZSBxdWV1ZSAqLwotICAgIHBhY2IgPSAmZmlyc3RfYWlvOwot ICAgIGZvcig7OykgewotICAgICAgICBpZiAoKnBhY2IgPT0gTlVMTCkgewotICAgICAgICAg ICAgYnJlYWs7Ci0gICAgICAgIH0gZWxzZSBpZiAoKnBhY2IgPT0gYWNiKSB7Ci0gICAgICAg ICAgICAqcGFjYiA9IGFjYi0+bmV4dDsKLSAgICAgICAgICAgIHFlbXVfYWlvX3JlbGVhc2Uo YWNiKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIHBhY2IgPSAm YWNiLT5uZXh0OwotICAgIH0KKyAgICBhaW9fZHJ2LT5haW9fY2FuY2VsKGJsb2NrYWNiKTsK IH0KIAogc3RhdGljIHZvaWQgcmF3X2Nsb3NlKEJsb2NrRHJpdmVyU3RhdGUgKmJzKQpAQCAt NTU5LDcgKzQwNiw2IEBAIEJsb2NrRHJpdmVyIGJkcnZfcmF3ID0gewogICAgIC5iZHJ2X2Fp b19yZWFkID0gcmF3X2Fpb19yZWFkLAogICAgIC5iZHJ2X2Fpb193cml0ZSA9IHJhd19haW9f d3JpdGUsCiAgICAgLmJkcnZfYWlvX2NhbmNlbCA9IHJhd19haW9fY2FuY2VsLAotICAgIC5h aW9jYl9zaXplID0gc2l6ZW9mKFJhd0FJT0NCKSwKICAgICAucHJvdG9jb2xfbmFtZSA9ICJm aWxlIiwKICAgICAuYmRydl9wcmVhZCA9IHJhd19wcmVhZCwKICAgICAuYmRydl9wd3JpdGUg PSByYXdfcHdyaXRlLApAQCAtOTExLDcgKzc1Nyw2IEBAIEJsb2NrRHJpdmVyIGJkcnZfaG9z dF9kZXZpY2UgPSB7CiAgICAgLmJkcnZfYWlvX3JlYWQgPSByYXdfYWlvX3JlYWQsCiAgICAg LmJkcnZfYWlvX3dyaXRlID0gcmF3X2Fpb193cml0ZSwKICAgICAuYmRydl9haW9fY2FuY2Vs ID0gcmF3X2Fpb19jYW5jZWwsCi0gICAgLmFpb2NiX3NpemUgPSBzaXplb2YoUmF3QUlPQ0Ip LAogICAgIC5iZHJ2X3ByZWFkID0gcmF3X3ByZWFkLAogICAgIC5iZHJ2X3B3cml0ZSA9IHJh d19wd3JpdGUsCiAgICAgLmJkcnZfZ2V0bGVuZ3RoID0gcmF3X2dldGxlbmd0aCwKZGlmZiAt LWdpdCBhL2Jsb2NrLXJhdy13aW4zMi5jIGIvYmxvY2stcmF3LXdpbjMyLmMKaW5kZXggNDNk M2Y2Yy4uNmI0MGEyNyAxMDA2NDQKLS0tIGEvYmxvY2stcmF3LXdpbjMyLmMKKysrIGIvYmxv Y2stcmF3LXdpbjMyLmMKQEAgLTM1MCwxMCArMzUwLDYgQEAgdm9pZCBxZW11X2Fpb19pbml0 KHZvaWQpCiB7CiB9CiAKLXZvaWQgcWVtdV9haW9fcG9sbCh2b2lkKQotewotfQotCiB2b2lk IHFlbXVfYWlvX2ZsdXNoKHZvaWQpCiB7CiB9CmRpZmYgLS1naXQgYS9ibG9jay5jIGIvYmxv Y2suYwppbmRleCBlYjYxMGUwLi5iNmU0YmQ0IDEwMDY0NAotLS0gYS9ibG9jay5jCisrKyBi L2Jsb2NrLmMKQEAgLTI2LDYgKzI2LDcgQEAKICNpbmNsdWRlICJjb25zb2xlLmgiCiAjZW5k aWYKICNpbmNsdWRlICJibG9ja19pbnQuaCIKKyNpbmNsdWRlICJibG9jay1haW8uaCIKIAog I2lmZGVmIF9CU0QKICNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KQEAgLTEzNDcsNiArMTM0OCwx MCBAQCB2b2lkIGJkcnZfaW5pdCh2b2lkKQogICAgIGJkcnZfcmVnaXN0ZXIoJmJkcnZfdnZm YXQpOwogICAgIGJkcnZfcmVnaXN0ZXIoJmJkcnZfcWNvdzIpOwogICAgIGJkcnZfcmVnaXN0 ZXIoJmJkcnZfcGFyYWxsZWxzKTsKKyNpZm5kZWYgUUVNVV9JTUcKKyAgICB1bml4X2Fpb19p bml0KCk7CisjZW5kaWYKKyAgICBwb3NpeF9haW9faW5pdCgpOwogfQogCiB2b2lkICpxZW11 X2Fpb19nZXQoQmxvY2tEcml2ZXJTdGF0ZSAqYnMsIEJsb2NrRHJpdmVyQ29tcGxldGlvbkZ1 bmMgKmNiLApAQCAtMTM3OCw2ICsxMzgzLDQwIEBAIHZvaWQgcWVtdV9haW9fcmVsZWFzZSh2 b2lkICpwKQogICAgIGRydi0+ZnJlZV9haW9jYiA9IGFjYjsKIH0KIAorc3RhdGljIEFJT0Ry aXZlciAqYWlvX2RyaXZlcl9saXN0OworQUlPRHJpdmVyICphaW9fZHJ2OworCitpbnQgcWVt dV9yZWdpc3Rlcl9haW8oQUlPRHJpdmVyICpkcnYpCit7CisgICAgZHJ2LT5uZXh0ID0gYWlv X2RyaXZlcl9saXN0OworICAgIGFpb19kcml2ZXJfbGlzdCA9IGRydjsKKyAgICBhaW9fZHJ2 ID0gYWlvX2RyaXZlcl9saXN0OworCisgICAgcmV0dXJuIDA7Cit9CisKK2ludCBxZW11X3Nl dF9haW9fZHJpdmVyKGNvbnN0IGNoYXIgKm5hbWUpCit7CisgICAgQUlPRHJpdmVyICpkcnY7 CisKKyAgICBpZiAoIXN0cmNtcChuYW1lLCAiPyIpKSB7CisJcHJpbnRmKCJBdmFpbGFibGUg YWlvIGRyaXZlcnM6XG4iKTsKKwlmb3IgKGRydiA9IGFpb19kcml2ZXJfbGlzdDsgZHJ2OyBk cnYgPSBkcnYtPm5leHQpIHsKKwkgICAgcHJpbnRmKCIlc1xuIiwgZHJ2LT5uYW1lKTsKKwl9 CisJZXhpdCgwKTsKKyAgICB9CisKKyAgICBmb3IgKGRydiA9IGFpb19kcml2ZXJfbGlzdDsg ZHJ2OyBkcnYgPSBkcnYtPm5leHQpIHsKKwlpZiAoIXN0cmNtcChuYW1lLCBkcnYtPm5hbWUp KQorCSAgICBicmVhazsKKyAgICB9CisKKyAgICBhaW9fZHJ2ID0gZHJ2OworCisgICAgcmV0 dXJuIDA7Cit9CisKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKi8KIC8qIHJlbW92YWJsZSBkZXZpY2Ugc3VwcG9ydCAq LwogCmRpZmYgLS1naXQgYS9ibG9jay5oIGIvYmxvY2suaAppbmRleCA5ZDMwZGIyLi5mZjE5 NDI1IDEwMDY0NAotLS0gYS9ibG9jay5oCisrKyBiL2Jsb2NrLmgKQEAgLTk0LDcgKzk0LDYg QEAgQmxvY2tEcml2ZXJBSU9DQiAqYmRydl9haW9fd3JpdGUoQmxvY2tEcml2ZXJTdGF0ZSAq YnMsIGludDY0X3Qgc2VjdG9yX251bSwKIHZvaWQgYmRydl9haW9fY2FuY2VsKEJsb2NrRHJp dmVyQUlPQ0IgKmFjYik7CiAKIHZvaWQgcWVtdV9haW9faW5pdCh2b2lkKTsKLXZvaWQgcWVt dV9haW9fcG9sbCh2b2lkKTsKIHZvaWQgcWVtdV9haW9fZmx1c2godm9pZCk7CiB2b2lkIHFl bXVfYWlvX3dhaXRfc3RhcnQodm9pZCk7CiB2b2lkIHFlbXVfYWlvX3dhaXQodm9pZCk7CmRp ZmYgLS1naXQgYS9zeXNlbXUuaCBiL3N5c2VtdS5oCmluZGV4IDAwNzgxOTAuLjk5MzExMzkg MTAwNjQ0Ci0tLSBhL3N5c2VtdS5oCisrKyBiL3N5c2VtdS5oCkBAIC00MSw2ICs0MSw4IEBA IHZvaWQgcWVtdV9zeXN0ZW1fcG93ZXJkb3duKHZvaWQpOwogI2VuZGlmCiB2b2lkIHFlbXVf c3lzdGVtX3Jlc2V0KHZvaWQpOwogCit2b2lkIHFlbXVfcmVnaXN0ZXJfcG9sbChJT0hhbmRs ZXIgKnBvbGwsIHZvaWQgKm9wYXF1ZSk7CisKIHZvaWQgY3B1X3NhdmUoUUVNVUZpbGUgKmYs IHZvaWQgKm9wYXF1ZSk7CiBpbnQgY3B1X2xvYWQoUUVNVUZpbGUgKmYsIHZvaWQgKm9wYXF1 ZSwgaW50IHZlcnNpb25faWQpOwogCmRpZmYgLS1naXQgYS92bC5jIGIvdmwuYwppbmRleCBj YzMyOGIwLi4xZjc3N2RjIDEwMDY0NAotLS0gYS92bC5jCisrKyBiL3ZsLmMKQEAgLTM2LDYg KzM2LDcgQEAKICNpbmNsdWRlICJxZW11LXRpbWVyLmgiCiAjaW5jbHVkZSAicWVtdS1jaGFy LmgiCiAjaW5jbHVkZSAiYmxvY2suaCIKKyNpbmNsdWRlICJibG9jay1haW8uaCIKICNpbmNs dWRlICJhdWRpby9hdWRpby5oIgogI2luY2x1ZGUgImJhbGxvb24uaCIKIApAQCAtNzM3Miw2 ICs3MzczLDMzIEBAIHZvaWQgcWVtdV9iaF9kZWxldGUoUUVNVUJIICpiaCkKIH0KIAogLyoq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqLworLyogcG9sbCBoYW5kbGVycyAqLworCit0eXBlZGVmIHN0cnVjdCBQb2xsSGFuZGxl cgoreworICAgIElPSGFuZGxlciAqZnVuYzsKKyAgICB2b2lkICpvcGFxdWU7CisgICAgc3Ry dWN0IFBvbGxIYW5kbGVyICpuZXh0OworfSBQb2xsSGFuZGxlcjsKKworc3RhdGljIFBvbGxI YW5kbGVyICpwb2xsX2hhbmRsZXJzOworCit2b2lkIHFlbXVfcmVnaXN0ZXJfcG9sbChJT0hh bmRsZXIgKnBvbGwsIHZvaWQgKm9wYXF1ZSkKK3sKKyAgICBQb2xsSGFuZGxlciAqcDsKKwor ICAgIHAgPSBxZW11X21hbGxvY3ooc2l6ZW9mKCpwKSk7CisgICAgaWYgKHAgPT0gTlVMTCkK KwlyZXR1cm47CisKKyAgICBwLT5mdW5jID0gcG9sbDsKKyAgICBwLT5vcGFxdWUgPSBvcGFx dWU7CisgICAgcC0+bmV4dCA9IHBvbGxfaGFuZGxlcnM7CisKKyAgICBwb2xsX2hhbmRsZXJz ID0gcDsKK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqLwogLyogbWFjaGluZSByZWdpc3RyYXRpb24gKi8KIAogUUVN VU1hY2hpbmUgKmZpcnN0X21hY2hpbmUgPSBOVUxMOwpAQCAtNzY4OSw3ICs3NzE3LDEyIEBA IHZvaWQgbWFpbl9sb29wX3dhaXQoaW50IHRpbWVvdXQpCiAgICAgICAgIHNsaXJwX3NlbGVj dF9wb2xsKCZyZmRzLCAmd2ZkcywgJnhmZHMpOwogICAgIH0KICNlbmRpZgotICAgIHFlbXVf YWlvX3BvbGwoKTsKKyAgICBpZiAocG9sbF9oYW5kbGVycykgeworCVBvbGxIYW5kbGVyICpw b2xsOworCisJZm9yIChwb2xsID0gcG9sbF9oYW5kbGVyczsgcG9sbDsgcG9sbCA9IHBvbGwt Pm5leHQpCisJICAgIHBvbGwtPmZ1bmMocG9sbC0+b3BhcXVlKTsKKyAgICB9CiAKICAgICBp ZiAodm1fcnVubmluZykgewogICAgICAgICBxZW11X3J1bl90aW1lcnMoJmFjdGl2ZV90aW1l cnNbUUVNVV9USU1FUl9WSVJUVUFMXSwKQEAgLTc5MjgsNiArNzk2MSw4IEBAIHN0YXRpYyB2 b2lkIGhlbHAoaW50IGV4aXRjb2RlKQogICAgICAgICAgICAiLWNsb2NrICAgICAgICAgIGZv cmNlIHRoZSB1c2Ugb2YgdGhlIGdpdmVuIG1ldGhvZHMgZm9yIHRpbWVyIGFsYXJtLlxuIgog ICAgICAgICAgICAiICAgICAgICAgICAgICAgIFRvIHNlZSB3aGF0IHRpbWVycyBhcmUgYXZh aWxhYmxlIHVzZSAtY2xvY2sgP1xuIgogICAgICAgICAgICAiLXN0YXJ0ZGF0ZSAgICAgIHNl bGVjdCBpbml0aWFsIGRhdGUgb2YgdGhlIGNsb2NrXG4iCisJICAgIi1haW8gc3RyaW5nICAg ICBGb3JjZSBhaW8gdHlwZSBgc3RyaW5nJ1xuIgorCSAgICIgICAgICAgICAgICAgICAgVXNl IC1haW8gPyB0byBzZWUgYXZhaWxhYmxlIGFpbyB0eXBlcy5cbiIKICAgICAgICAgICAgIlxu IgogICAgICAgICAgICAiRHVyaW5nIGVtdWxhdGlvbiwgdGhlIGZvbGxvd2luZyBrZXlzIGFy ZSB1c2VmdWw6XG4iCiAgICAgICAgICAgICJjdHJsLWFsdC1mICAgICAgdG9nZ2xlIGZ1bGwg c2NyZWVuXG4iCkBAIC04MDMxLDYgKzgwNjYsNyBAQCBlbnVtIHsKICAgICBRRU1VX09QVElP Tl9vbGRfcGFyYW0sCiAgICAgUUVNVV9PUFRJT05fY2xvY2ssCiAgICAgUUVNVV9PUFRJT05f c3RhcnRkYXRlLAorICAgIFFFTVVfT1BUSU9OX2FpbywKIH07CiAKIHR5cGVkZWYgc3RydWN0 IFFFTVVPcHRpb24gewpAQCAtODE0Miw2ICs4MTc4LDcgQEAgY29uc3QgUUVNVU9wdGlvbiBx ZW11X29wdGlvbnNbXSA9IHsKICNlbmRpZgogICAgIHsgImNsb2NrIiwgSEFTX0FSRywgUUVN VV9PUFRJT05fY2xvY2sgfSwKICAgICB7ICJzdGFydGRhdGUiLCBIQVNfQVJHLCBRRU1VX09Q VElPTl9zdGFydGRhdGUgfSwKKyAgICB7ICJhaW8iLCBIQVNfQVJHLCBRRU1VX09QVElPTl9h aW8gfSwKICAgICB7IE5VTEwgfSwKIH07CiAKQEAgLTg0MTcsNiArODQ1NCw3IEBAIGludCBt YWluKGludCBhcmdjLCBjaGFyICoqYXJndikKICAgICBpbnQgZmRzWzJdOwogICAgIGNvbnN0 IGNoYXIgKnBpZF9maWxlID0gTlVMTDsKICAgICBWTEFOU3RhdGUgKnZsYW47CisgICAgY29u c3QgY2hhciAqYWlvX29wdCA9IE5VTEw7CiAKICAgICBMSVNUX0lOSVQgKCZ2bV9jaGFuZ2Vf c3RhdGVfaGVhZCk7CiAjaWZuZGVmIF9XSU4zMgpAQCAtODk5MSw2ICs5MDI5LDkgQEAgaW50 IG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQogICAgICAgICAgICAgICAgICAgICB9CiAg ICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIGJyZWFrOworCSAgICBjYXNlIFFF TVVfT1BUSU9OX2FpbzoKKwkJYWlvX29wdCA9IG9wdGFyZzsKKwkJYnJlYWs7CiAgICAgICAg ICAgICB9CiAgICAgICAgIH0KICAgICB9CkBAIC05MDc1LDcgKzkxMTYsNiBAQCBpbnQgbWFp bihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCiAKICAgICBpbml0X3RpbWVycygpOwogICAgIGlu aXRfdGltZXJfYWxhcm0oKTsKLSAgICBxZW11X2Fpb19pbml0KCk7CiAKICNpZmRlZiBfV0lO MzIKICAgICBzb2NrZXRfaW5pdCgpOwpAQCAtOTE0Niw2ICs5MTg2LDkgQEAgaW50IG1haW4o aW50IGFyZ2MsIGNoYXIgKiphcmd2KQogCiAgICAgYmRydl9pbml0KCk7CiAKKyAgICBpZiAo YWlvX29wdCkKKwlxZW11X3NldF9haW9fZHJpdmVyKGFpb19vcHQpOworCiAgICAgLyogd2Ug YWx3YXlzIGNyZWF0ZSB0aGUgY2Ryb20gZHJpdmUsIGV2ZW4gaWYgbm8gZGlzayBpcyB0aGVy ZSAqLwogCiAgICAgaWYgKG5iX2RyaXZlc19vcHQgPCBNQVhfRFJJVkVTKQo= --------------030003010708030807020508 Content-Type: text/plain; charset="us-ascii" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Content-Disposition: inline ------------------------------------------------------------------------- This SF.net email is sponsored by the 2008 JavaOne(SM) Conference Don't miss this year's exciting event. There's still time to save $100. Use priority code J8TL2D2. http://ad.doubleclick.net/clk;198757673;13503038;p?http://java.sun.com/javaone --------------030003010708030807020508 Content-Type: text/plain; charset="us-ascii" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Content-Disposition: inline _______________________________________________ kvm-devel mailing list kvm-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/kvm-devel --------------030003010708030807020508--