From mboxrd@z Thu Jan 1 00:00:00 1970 From: "Nick Edelen" Subject: [RFC/PATCH 3/4] rev-cache: misc features + slight refactor Date: Fri, 03 Jul 2009 16:13:40 +0100 Message-ID: Mime-Version: 1.0 Content-Type: multipart/mixed; boundary=----------1eqvSik9lgXdMSKvDGxrXG Cc: "Junio C Hamano" , "Sam Vilain" , "Shawn O. Pearce" , "Johannes Schindelin" , "Andreas Ericsson" , "Jeff King" To: "git@vger.kernel.org" X-From: git-owner@vger.kernel.org Fri Jul 03 17:14:22 2009 Return-path: Envelope-to: gcvg-git-2@gmane.org Received: from vger.kernel.org ([209.132.176.167]) by lo.gmane.org with esmtp (Exim 4.50) id 1MMkSy-0005qe-Jx for gcvg-git-2@gmane.org; Fri, 03 Jul 2009 17:14:21 +0200 Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1755644AbZGCPNx (ORCPT ); Fri, 3 Jul 2009 11:13:53 -0400 Received: (majordomo@vger.kernel.org) by vger.kernel.org id S1755462AbZGCPNw (ORCPT ); Fri, 3 Jul 2009 11:13:52 -0400 Received: from mail-ew0-f215.google.com ([209.85.219.215]:58426 "EHLO mail-ew0-f215.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1755420AbZGCPNv (ORCPT ); Fri, 3 Jul 2009 11:13:51 -0400 Received: by mail-ew0-f215.google.com with SMTP id 11so1142634ewy.37 for ; Fri, 03 Jul 2009 08:13:54 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=gamma; h=domainkey-signature:received:received:date:to:subject:from:cc :content-type:mime-version:message-id:user-agent; bh=LPgDYQ8oOkU2UUMbcsgcQqq2g5T0Cb0VP0Oto9HJRXk=; b=xQ23gAlhkwTfeeQeqzgjBtZnEPnoZQeWNOkvhFKQtZ5CgkPj44JSOt1YeSy8B/00Ig XN/YPZFZI97qFYVFM54biaJISSDQ/lFWKVqQXD9huH1UjiT78N3VSATQhBFv533iBbGn tTR/CfZesizi5wdqY34izD0++YJiUsvqm+v0g= DomainKey-Signature: a=rsa-sha1; c=nofws; d=gmail.com; s=gamma; h=date:to:subject:from:cc:content-type:mime-version:message-id :user-agent; b=yD+m6HNcBnedaOEbO0BLk1vigAuGQk08Im4R/cHAdR9QgjDxULZH6X+CUrCbnacQDi dCy8jLaqumV1NfSv+RkUPmh5y87ul5UD5UYDKeOO3a8cWnJH2IoaejZghZZeG4UcI5Ic kF2gMhYhKvWjOPvgvRFfH3dj1FOmv1ma4gJEg= Received: by 10.210.67.13 with SMTP id p13mr1798462eba.53.1246634034038; Fri, 03 Jul 2009 08:13:54 -0700 (PDT) Received: from sirnot (resnet-nat-217.ucs.ed.ac.uk [194.81.254.217]) by mx.google.com with ESMTPS id 7sm597272eyb.25.2009.07.03.08.13.53 (version=TLSv1/SSLv3 cipher=RC4-MD5); Fri, 03 Jul 2009 08:13:53 -0700 (PDT) User-Agent: Opera Mail/9.63 (Win32) Sender: git-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: git@vger.kernel.org Archived-At: ------------1eqvSik9lgXdMSKvDGxrXG Content-Type: text/plain; charset=iso-8859-15 Content-Transfer-Encoding: 7bit Several miscellaneous features of rev-cache are introduced, and the non-commit object generation is refactored. Cache coagulation and index regeneration are added, allowing for cache slice maintenance and garbage collection. Commit and blob objects are modified to store object size, as the tree object does, and this parameter is instated upon parsing. Object enumeration makes use of this addition and more fluidly generates its list. Tests for coagulation and index generation are added in the integration patch, as the former in its proper incarnation makes use of rev-cache's influence on the revision walker. Signed-off-by: Nick Edelen --- blob.c | 1 + blob.h | 1 + builtin-rev-cache.c | 49 ++++++- commit.c | 1 + commit.h | 1 + rev-cache.c | 415 ++++++++++++++++++++++++++++++++++++++++++--------- revision.h | 4 +- 7 files changed, 397 insertions(+), 75 deletions(-) ------------1eqvSik9lgXdMSKvDGxrXG Content-Disposition: attachment; filename=patch_misc.diff Content-Type: application/octet-stream; name=patch_misc.diff Content-Transfer-Encoding: Base64 U2V2ZXJhbCBtaXNjZWxsYW5lb3VzIGZlYXR1cmVzIG9mIHJldi1jYWNoZSBhcmUg aW50cm9kdWNlZCwgYW5kIHRoZSBub24tY29tbWl0IG9iamVjdCBnZW5lcmF0aW9u IGlzIHJlZmFjdG9yZWQuICBDYWNoZSBjb2FndWxhdGlvbiBhbmQgaW5kZXggcmVn ZW5lcmF0aW9uIGFyZSBhZGRlZCwgYWxsb3dpbmcgZm9yIGNhY2hlIHNsaWNlIG1h aW50ZW5hbmNlIGFuZCBnYXJiYWdlIGNvbGxlY3Rpb24uICBDb21taXQgYW5kIGJs b2Igb2JqZWN0cyBhcmUgbW9kaWZpZWQgdG8gc3RvcmUgb2JqZWN0IHNpemUsIGFz IHRoZSB0cmVlIG9iamVjdCBkb2VzLCBhbmQgdGhpcyBwYXJhbWV0ZXIgaXMgaW5z dGF0ZWQgdXBvbiBwYXJzaW5nLiAgT2JqZWN0IGVudW1lcmF0aW9uIG1ha2VzIHVz ZSBvZiB0aGlzIGFkZGl0aW9uIGFuZCBtb3JlIGZsdWlkbHkgZ2VuZXJhdGVzIGl0 cyBsaXN0LgoKVGVzdHMgZm9yIGNvYWd1bGF0aW9uIGFuZCBpbmRleCBnZW5lcmF0 aW9uIGFyZSBhZGRlZCBpbiB0aGUgaW50ZWdyYXRpb24gcGF0Y2gsIGFzIHRoZSBm b3JtZXIgaW4gaXRzIHByb3BlciBpbmNhcm5hdGlvbiBtYWtlcyB1c2Ugb2YgcmV2 LWNhY2hlJ3MgaW5mbHVlbmNlIG9uIHRoZSByZXZpc2lvbiB3YWxrZXIuCgpTaWdu ZWQtb2ZmLWJ5OiBOaWNrIEVkZWxlbiA8c2lybm90QGdtYWlsLmNvbT4KCi0tLQog YmxvYi5jICAgICAgICAgICAgICB8ICAgIDEgKwogYmxvYi5oICAgICAgICAgICAg ICB8ICAgIDEgKwogYnVpbHRpbi1yZXYtY2FjaGUuYyB8ICAgNDkgKysrKysrLQog Y29tbWl0LmMgICAgICAgICAgICB8ICAgIDEgKwogY29tbWl0LmggICAgICAgICAg ICB8ICAgIDEgKwogcmV2LWNhY2hlLmMgICAgICAgICB8ICA0MTUgKysrKysrKysr KysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrLS0tLS0tLS0tCiByZXZp c2lvbi5oICAgICAgICAgIHwgICAgNCArLQogNyBmaWxlcyBjaGFuZ2VkLCAzOTcg aW5zZXJ0aW9ucygrKSwgNzUgZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvYmxv Yi5jIGIvYmxvYi5jCmluZGV4IGJkN2QwNzguLmUxYmFiM2YgMTAwNjQ0Ci0tLSBh L2Jsb2IuYworKysgYi9ibG9iLmMKQEAgLTIxLDYgKzIxLDcgQEAgc3RydWN0IGJs b2IgKmxvb2t1cF9ibG9iKGNvbnN0IHVuc2lnbmVkIGNoYXIgKnNoYTEpCiBpbnQg cGFyc2VfYmxvYl9idWZmZXIoc3RydWN0IGJsb2IgKml0ZW0sIHZvaWQgKmJ1ZmZl ciwgdW5zaWduZWQgbG9uZyBzaXplKQogewogCWl0ZW0tPm9iamVjdC5wYXJzZWQg PSAxOworCWl0ZW0tPnNpemUgPSBzaXplOwogCXJldHVybiAwOwogfQogCmRpZmYg LS1naXQgYS9ibG9iLmggYi9ibG9iLmgKaW5kZXggZWE1ZDllOS4uZDhkYjk2YSAx MDA2NDQKLS0tIGEvYmxvYi5oCisrKyBiL2Jsb2IuaApAQCAtNyw2ICs3LDcgQEAg ZXh0ZXJuIGNvbnN0IGNoYXIgKmJsb2JfdHlwZTsKIAogc3RydWN0IGJsb2Igewog CXN0cnVjdCBvYmplY3Qgb2JqZWN0OworCXVuc2lnbmVkIGxvbmcgc2l6ZTsKIH07 CiAKIHN0cnVjdCBibG9iICpsb29rdXBfYmxvYihjb25zdCB1bnNpZ25lZCBjaGFy ICpzaGExKTsKZGlmZiAtLWdpdCBhL2J1aWx0aW4tcmV2LWNhY2hlLmMgYi9idWls dGluLXJldi1jYWNoZS5jCmluZGV4IDhkNjk2ZGIuLjM4MDgxOGYgMTAwNzU1Ci0t LSBhL2J1aWx0aW4tcmV2LWNhY2hlLmMKKysrIGIvYnVpbHRpbi1yZXYtY2FjaGUu YwpAQCAtNCw2ICs0LDggQEAKICNpbmNsdWRlICJkaWZmLmgiCiAjaW5jbHVkZSAi cmV2aXNpb24uaCIKIAorI2RlZmluZSBERUZBVUxUX0lHTk9SRV9TTElDRV9TSVpF CQk1MDAwMDAwIC8qIGluIGJ5dGVzICovCisKIC8qIHBvcmNlbGFpbiBmb3IgcmV2 LWNhY2hlLmMgKi8KIHN0YXRpYyBpbnQgaGFuZGxlX2FkZChpbnQgYXJnYywgY29u c3QgY2hhciAqYXJndltdKSAvKiBhcmdzIGJleW9uZCB0aGlzIGNvbW1hbmQgKi8K IHsKQEAgLTIxLDcgKzIzLDcgQEAgc3RhdGljIGludCBoYW5kbGVfYWRkKGludCBh cmdjLCBjb25zdCBjaGFyICphcmd2W10pIC8qIGFyZ3MgYmV5b25kIHRoaXMgY29t bWFuZAogCQlpZiAoIXN0cmNtcChhcmd2W2ldLCAiLS1zdGRpbiIpKQogCQkJZG9z dGRpbiA9IDE7CiAJCWVsc2UgaWYgKCFzdHJjbXAoYXJndltpXSwgIi0tZnJlc2gi KSkKLQkJCWVuZHNfZnJvbV9zbGljZXMoJnJldnMsIFVOSU5URVJFU1RJTkcpOwor CQkJZW5kc19mcm9tX3NsaWNlcygmcmV2cywgVU5JTlRFUkVTVElORywgMCwgMCk7 CiAJCWVsc2UgaWYgKCFzdHJjbXAoYXJndltpXSwgIi0tbm90IikpCiAJCQlmbGFn cyBePSBVTklOVEVSRVNUSU5HOwogCQllbHNlIGlmICghc3RyY21wKGFyZ3ZbaV0s ICItLWxlZ3MiKSkKQEAgLTE0MSw2ICsxNDMsNDcgQEAgc3RhdGljIGludCBoYW5k bGVfd2FsayhpbnQgYXJnYywgY29uc3QgY2hhciAqYXJndltdKQogCXJldHVybiAw OwogfQogCitzdGF0aWMgaW50IGhhbmRsZV9mdXNlKGludCBhcmdjLCBjb25zdCBj aGFyICphcmd2W10pCit7CisJc3RydWN0IHJldl9pbmZvIHJldnM7CisJc3RydWN0 IHJldl9jYWNoZV9pbmZvIHJjaTsKKwljb25zdCBjaGFyICphcmdzWzVdOworCWlu dCBpLCBhcmduID0gMDsKKwljaGFyIGFkZF9hbGwgPSAwOworCQorCWluaXRfcmV2 aXNpb25zKCZyZXZzLCAwKTsKKwlpbml0X3JjaSgmcmNpKTsKKwlhcmdzW2FyZ24r K10gPSAicmV2LWxpc3QiOworCQorCWZvciAoaSA9IDA7IGkgPCBhcmdjOyBpKysp IHsKKwkJaWYgKCFzdHJjbXAoYXJndltpXSwgIi0tYWxsIikpIHsKKwkJCWFyZ3Nb YXJnbisrXSA9ICItLWFsbCI7CisJCQlzZXR1cF9yZXZpc2lvbnMoYXJnbiwgYXJn cywgJnJldnMsIDApOworCQkJYWRkX2FsbCA9IDE7CisJCX0gZWxzZSBpZiAoIXN0 cmNtcChhcmd2W2ldLCAiLS1ub29iamVjdHMiKSkgCisJCQlyY2kub2JqZWN0cyA9 IDA7CisJCWVsc2UgaWYgKCFzdHJuY21wKGFyZ3ZbaV0sICItLWlnbm9yZS1zaXpl IiwgMTMpKSB7CisJCQlpbnQgc3ogPSBERUZBVUxUX0lHTk9SRV9TTElDRV9TSVpF OworCQkJCisJCQlpZiAoYXJndltpXVsxM10gPT0gJz0nKQorCQkJCXN6ID0gYXRv aShhcmd2W2ldICsgMTQpOworCQkJCisJCQlyY2kuaWdub3JlX3NpemUgPSBzejsK KwkJfSBlbHNlIAorCQkJY29udGludWU7CisJfQorCQorCWlmICghYWRkX2FsbCkK KwkJZW5kc19mcm9tX3NsaWNlcygmcmV2cywgMCwgMCwgMCk7CisJCisJcmV0dXJu IGNvYWd1bGF0ZV9jYWNoZV9zbGljZXMoJnJjaSwgJnJldnMpOworfQorCitzdGF0 aWMgaW50IGhhbmRsZV9pbmRleChpbnQgYXJnYywgY29uc3QgY2hhciAqYXJndltd KQoreworCXJldHVybiByZWdlbmVyYXRlX2NhY2hlX2luZGV4KCk7Cit9CisKIHN0 YXRpYyBpbnQgaGFuZGxlX2hlbHAodm9pZCkKIHsKIAljaGFyICp1c2FnZSA9ICJc CkBAIC0xODYsOCArMjI5LDEyIEBAIGludCBjbWRfcmV2X2NhY2hlKGludCBhcmdj LCBjb25zdCBjaGFyICphcmd2W10sIGNvbnN0IGNoYXIgKnByZWZpeCkKIAlhcmd2 ICs9IDI7CiAJaWYgKCFzdHJjbXAoYXJnLCAiYWRkIikpCiAJCXIgPSBoYW5kbGVf YWRkKGFyZ2MsIGFyZ3YpOworCWVsc2UgaWYgKCFzdHJjbXAoYXJnLCAiZnVzZSIp KQorCQlyID0gaGFuZGxlX2Z1c2UoYXJnYywgYXJndik7CiAJZWxzZSBpZiAoIXN0 cmNtcChhcmcsICJ3YWxrIikpCiAJCXIgPSBoYW5kbGVfd2FsayhhcmdjLCBhcmd2 KTsKKwllbHNlIGlmICghc3RyY21wKGFyZywgImluZGV4IikpCisJCXIgPSBoYW5k bGVfaW5kZXgoYXJnYywgYXJndik7CiAJZWxzZQogCQlyZXR1cm4gaGFuZGxlX2hl bHAoKTsKIAkKZGlmZiAtLWdpdCBhL2NvbW1pdC5jIGIvY29tbWl0LmMKaW5kZXgg YjQ1YTk5MS4uZDk3NzhiYSAxMDA2NDQKLS0tIGEvY29tbWl0LmMKKysrIGIvY29t bWl0LmMKQEAgLTI0Nyw2ICsyNDcsNyBAQCBpbnQgcGFyc2VfY29tbWl0X2J1ZmZl cihzdHJ1Y3QgY29tbWl0ICppdGVtLCB2b2lkICpidWZmZXIsIHVuc2lnbmVkIGxv bmcgc2l6ZSkKIAlpZiAoaXRlbS0+b2JqZWN0LnBhcnNlZCkKIAkJcmV0dXJuIDA7 CiAJaXRlbS0+b2JqZWN0LnBhcnNlZCA9IDE7CisJaXRlbS0+c2l6ZSA9IHNpemU7 CiAJdGFpbCArPSBzaXplOwogCWlmICh0YWlsIDw9IGJ1ZnB0ciArIDQ2IHx8IG1l bWNtcChidWZwdHIsICJ0cmVlICIsIDUpIHx8IGJ1ZnB0cls0NV0gIT0gJ1xuJykK IAkJcmV0dXJuIGVycm9yKCJib2d1cyBjb21taXQgb2JqZWN0ICVzIiwgc2hhMV90 b19oZXgoaXRlbS0+b2JqZWN0LnNoYTEpKTsKZGlmZiAtLWdpdCBhL2NvbW1pdC5o IGIvY29tbWl0LmgKaW5kZXggYmE5ZjYzOC4uMDUyOWZjZiAxMDA2NDQKLS0tIGEv Y29tbWl0LmgKKysrIGIvY29tbWl0LmgKQEAgLTE5LDYgKzE5LDcgQEAgc3RydWN0 IGNvbW1pdCB7CiAJc3RydWN0IGNvbW1pdF9saXN0ICpwYXJlbnRzOwogCXN0cnVj dCB0cmVlICp0cmVlOwogCWNoYXIgKmJ1ZmZlcjsKKwl1bnNpZ25lZCBsb25nIHNp emU7CiB9OwogCiBleHRlcm4gaW50IHNhdmVfY29tbWl0X2J1ZmZlcjsKZGlmZiAt LWdpdCBhL3Jldi1jYWNoZS5jIGIvcmV2LWNhY2hlLmMKaW5kZXggZDM3MGIzZC4u NjAyY2VjNiAxMDA3NTUKLS0tIGEvcmV2LWNhY2hlLmMKKysrIGIvcmV2LWNhY2hl LmMKQEAgLTgsNiArOCw3IEBACiAjaW5jbHVkZSAiZGlmZi5oIgogI2luY2x1ZGUg InJldmlzaW9uLmgiCiAjaW5jbHVkZSAicnVuLWNvbW1hbmQuaCIKKyNpbmNsdWRl ICJzdHJpbmctbGlzdC5oIgogCiAKIC8qIHNpbmdsZSBpbmRleCBtYXBzIG9iamVj dHMgdG8gY2FjaGUgZmlsZXMgKi8KQEAgLTEwNSw2ICsxMDYsNyBAQCBzdGF0aWMg c3RydWN0IHN0cmJ1ZiAqZ19idWZmZXI7CiAjZGVmaW5lIElFX0NBU1QocCkJKChz dHJ1Y3QgaW5kZXhfZW50cnkgKikocCkpCiAKICNkZWZpbmUgQUNUVUFMX09CSkVD VF9FTlRSWV9TSVpFKGUpCQkoT0VfU0laRSArIFBBVEhfU0laRSgoZSktPm1lcmdl X25yICsgKGUpLT5zcGxpdF9ucikgKyAoZSktPnNpemVfc2l6ZSkKKyNkZWZpbmUg RU5UUllfU0laRV9PRkZTRVQoZSkJCQkoQUNUVUFMX09CSkVDVF9FTlRSWV9TSVpF KGUpIC0gKGUpLT5zaXplX3NpemUpCiAKICNkZWZpbmUgU0xPUAkJNQogCkBAIC0y MzcsNyArMjM5LDYgQEAgdW5zaWduZWQgY2hhciAqZ2V0X2NhY2hlX3NsaWNlKHN0 cnVjdCBjb21taXQgKmNvbW1pdCkKIAkJcmV0dXJuIDA7CiAJCiAJaWUgPSBzZWFy Y2hfaW5kZXgoY29tbWl0LT5vYmplY3Quc2hhMSk7Ci0JCiAJaWYgKGllICYmIGll LT5jYWNoZV9pbmRleCA8IGlkeF9oZWFkLmNhY2hlcykKIAkJcmV0dXJuIGlkeF9o ZWFkLmNhY2hlX3NoYTFzICsgaWUtPmNhY2hlX2luZGV4ICogMjA7CiAJCkBAIC0y NDcsMjcgKzI0OCw0NiBAQCB1bnNpZ25lZCBjaGFyICpnZXRfY2FjaGVfc2xpY2Uo c3RydWN0IGNvbW1pdCAqY29tbWl0KQogCiAvKiB0cmF2ZXJzYWwgKi8KIAotc3Rh dGljIHZvaWQgaGFuZGxlX25vbmNvbW1pdChzdHJ1Y3QgcmV2X2luZm8gKnJldnMs IHN0cnVjdCBvYmplY3RfZW50cnkgKmVudHJ5KQorc3RhdGljIHVuc2lnbmVkIGxv bmcgZGVjb2RlX3NpemUodW5zaWduZWQgY2hhciAqc3RyLCBpbnQgbGVuKTsKKwor c3RhdGljIHZvaWQgaGFuZGxlX25vbmNvbW1pdChzdHJ1Y3QgcmV2X2luZm8gKnJl dnMsIHN0cnVjdCBjb21taXQgKmNvbW1pdCwgc3RydWN0IG9iamVjdF9lbnRyeSAq ZW50cnkpCiB7Ci0Jc3RydWN0IG9iamVjdCAqb2JqID0gMDsKKwlzdHJ1Y3QgYmxv YiAqYmxvYjsKKwlzdHJ1Y3QgdHJlZSAqdHJlZTsKKwlzdHJ1Y3Qgb2JqZWN0ICpv Ymo7CisJdW5zaWduZWQgbG9uZyBzaXplOwogCQorCXNpemUgPSBkZWNvZGVfc2l6 ZSgodW5zaWduZWQgY2hhciAqKWVudHJ5ICsgRU5UUllfU0laRV9PRkZTRVQoZW50 cnkpLCBlbnRyeS0+c2l6ZV9zaXplKTsKIAlzd2l0Y2ggKGVudHJ5LT50eXBlKSB7 CiAJY2FzZSBPQkpfVFJFRSA6IAotCQlpZiAocmV2cy0+dHJlZV9vYmplY3RzKQot CQkJb2JqID0gKHN0cnVjdCBvYmplY3QgKilsb29rdXBfdHJlZShlbnRyeS0+c2hh MSk7CisJCWlmICghcmV2cy0+dHJlZV9vYmplY3RzKQorCQkJcmV0dXJuOworCQkK KwkJdHJlZSA9IGxvb2t1cF90cmVlKGVudHJ5LT5zaGExKTsKKwkJaWYgKCF0cmVl KQorCQkJcmV0dXJuOworCQkKKwkJdHJlZS0+c2l6ZSA9IHNpemU7CisJCWNvbW1p dC0+dHJlZSA9IHRyZWU7CisJCW9iaiA9IChzdHJ1Y3Qgb2JqZWN0ICopdHJlZTsK IAkJYnJlYWs7CisJCiAJY2FzZSBPQkpfQkxPQiA6IAotCQlpZiAocmV2cy0+Ymxv Yl9vYmplY3RzKQotCQkJb2JqID0gKHN0cnVjdCBvYmplY3QgKilsb29rdXBfYmxv YihlbnRyeS0+c2hhMSk7Ci0JCWJyZWFrOwotCWNhc2UgT0JKX1RBRyA6IAotCQlp ZiAocmV2cy0+dGFnX29iamVjdHMpCi0JCQlvYmogPSAoc3RydWN0IG9iamVjdCAq KWxvb2t1cF90YWcoZW50cnktPnNoYTEpOworCQlpZiAoIXJldnMtPmJsb2Jfb2Jq ZWN0cykKKwkJCXJldHVybjsKKwkJCisJCWJsb2IgPSBsb29rdXBfYmxvYihlbnRy eS0+c2hhMSk7CisJCWlmICghYmxvYikKKwkJCXJldHVybjsKKwkJCisJCWJsb2It PnNpemUgPSBzaXplOworCQlvYmogPSAoc3RydWN0IG9iamVjdCAqKWJsb2I7CiAJ CWJyZWFrOwotCX0KLQkKLQlpZiAoIW9iaikKKwkJCisJZGVmYXVsdCA6IAorCQkv KiB0YWcgb2JqZWN0cyBhcmVuJ3QgcmVhbGx5IHN1cHBvc2VkIHRvIGJlIGhlcmUg Ki8KIAkJcmV0dXJuOworCX0KIAkKIAlvYmotPmZsYWdzIHw9IEZBQ0VfVkFMVUU7 CiAJYWRkX3BlbmRpbmdfb2JqZWN0KHJldnMsIG9iaiwgIiIpOwpAQCAtMjgwLDcg KzMwMCw2IEBAIHN0YXRpYyBpbnQgc2V0dXBfdHJhdmVyc2FsKHN0cnVjdCBjYWNo ZV9zbGljZV9oZWFkZXIgKmhlYWQsIHVuc2lnbmVkIGNoYXIgKm1hcCwKIAlzdHJ1 Y3QgY29tbWl0X2xpc3QgKnByZXYsICp3cCwgKip3cHA7CiAJaW50IHJldHZhbDsK IAkKLQkvKiBwcmludGYoImFkZGluZyAlc1xuIiwgc2hhMV90b19oZXgoY29tbWl0 LT5vYmplY3Quc2hhMSkpOyAqLwogCWllcCA9IHNlYXJjaF9pbmRleChjb21taXQt Pm9iamVjdC5zaGExKTsKIAlvZXAgPSBPRV9DQVNUKG1hcCArIG50b2hsKGllcC0+ cG9zKSk7CiAJb2VwLT5pbmNsdWRlID0gMTsKQEAgLTM1NSw3ICszNzQsNyBAQCBz dGF0aWMgaW50IHRyYXZlcnNlX2NhY2hlX3NsaWNlXzEoc3RydWN0IGNhY2hlX3Ns aWNlX2hlYWRlciAqaGVhZCwgdW5zaWduZWQgY2hhcgogCQkvKiBhZGQgZXh0cmEg b2JqZWN0cyBpZiBuZWNlc3NhcnkgKi8KIAkJaWYgKGVudHJ5LT50eXBlICE9IE9C Sl9DT01NSVQpIHsKIAkJCWlmIChjb25zdW1lX2NoaWxkcmVuKQotCQkJCWhhbmRs ZV9ub25jb21taXQocmV2cywgZW50cnkpOworCQkJCWhhbmRsZV9ub25jb21taXQo cmV2cywgY28sIGVudHJ5KTsKIAkJCQogCQkJY29udGludWU7CiAJCX0gZWxzZQpA QCAtMzg5LDYgKzQwOCw4IEBAIHN0YXRpYyBpbnQgdHJhdmVyc2VfY2FjaGVfc2xp Y2VfMShzdHJ1Y3QgY2FjaGVfc2xpY2VfaGVhZGVyICpoZWFkLCB1bnNpZ25lZCBj aGFyCiAJCQlpZiAobGFzdF9vYmplY3RzW3BhdGhdKSB7CiAJCQkJcGFyc2VfY29t bWl0KGxhc3Rfb2JqZWN0c1twYXRoXSk7CiAJCQkJCisJCQkJLyogd2UgbmVlZG4n dCB3b3JyeSBhYm91dCB0aGUgdW5pcXVlIGZpZWxkOyB0aGF0IHdpbGwgYmUgdmFs aWQgYXMgCisJCQkJICogbG9uZyBhcyB3ZSdyZSBub3QgYSBzdGFydCBlbnRyeSAq LwogCQkJCWxhc3Rfb2JqZWN0c1twYXRoXS0+b2JqZWN0LmZsYWdzICY9IH5GQUNF X1ZBTFVFOwogCQkJCWxhc3Rfb2JqZWN0c1twYXRoXSA9IDA7CiAJCQl9CkBAIC01 NjcsNiArNTg4LDY4IEBAIGVuZDoKIAogLyogZ2VuZXJhdGlvbiAqLwogCitzdGF0 aWMgaW50IGlzX3N0YXJ0X2VuZHBvaW50KHN0cnVjdCBjb21taXQgKmNvbW1pdCkK K3sKKwlzdHJ1Y3QgY29tbWl0X2xpc3QgKmxpc3QgPSBjb21taXQtPnBhcmVudHM7 CisJCisJd2hpbGUgKGxpc3QpIHsKKwkJaWYgKCEobGlzdC0+aXRlbS0+b2JqZWN0 LmZsYWdzICYgVU5JTlRFUkVTVElORykpCisJCQlyZXR1cm4gMDsKKwkJCisJCWxp c3QgPSBsaXN0LT5uZXh0OworCX0KKwkKKwlyZXR1cm4gMTsKK30KKworLyogZW5z dXJlcyBicmFuY2ggaXMgc2VsZi1jb250YWluZWQ6IHBhcmVudHMgYXJlIGVpdGhl ciBhbGwgaW50ZXJlc3Rpbmcgb3IgYWxsIHVuaW50ZXJlc3RpbmcgKi8KK3N0YXRp YyB2b2lkIG1ha2VfbGVncyhzdHJ1Y3QgcmV2X2luZm8gKnJldnMpCit7CisJc3Ry dWN0IGNvbW1pdF9saXN0ICpsaXN0LCAqKnBsaXN0OworCWludCB0b3RhbCA9IDA7 CisJCisJLyogYXR0YWNoIHBsaXN0IHRvIGVuZCBvZiBjb21taXRzIGxpc3QgKi8K KwlsaXN0ID0gcmV2cy0+Y29tbWl0czsKKwl3aGlsZSAobGlzdCAmJiBsaXN0LT5u ZXh0KQorCQlsaXN0ID0gbGlzdC0+bmV4dDsKKwkKKwlpZiAobGlzdCkKKwkJcGxp c3QgPSAmbGlzdC0+bmV4dDsKKwllbHNlCisJCXJldHVybjsKKwkKKwkvKiBkdXBs aWNhdGVzIGRvbid0IG1hdHRlciwgYXMgZ2V0X3JldmlzaW9uKCkgaWdub3JlcyB0 aGVtICovCisJZm9yIChsaXN0ID0gcmV2cy0+Y29tbWl0czsgbGlzdDsgbGlzdCA9 IGxpc3QtPm5leHQpIHsKKwkJc3RydWN0IGNvbW1pdCAqaXRlbSA9IGxpc3QtPml0 ZW07CisJCXN0cnVjdCBjb21taXRfbGlzdCAqcGFyZW50cyA9IGl0ZW0tPnBhcmVu dHM7CisJCQorCQlpZiAoaXRlbS0+b2JqZWN0LmZsYWdzICYgVU5JTlRFUkVTVElO RykKKwkJCWNvbnRpbnVlOworCQlpZiAoaXNfc3RhcnRfZW5kcG9pbnQoaXRlbSkp CisJCQljb250aW51ZTsKKwkJCisJCXdoaWxlIChwYXJlbnRzKSB7CisJCQlzdHJ1 Y3QgY29tbWl0ICpwID0gcGFyZW50cy0+aXRlbTsKKwkJCXBhcmVudHMgPSBwYXJl bnRzLT5uZXh0OworCQkJCisJCQlpZiAoIShwLT5vYmplY3QuZmxhZ3MgJiBVTklO VEVSRVNUSU5HKSkKKwkJCQljb250aW51ZTsKKwkJCQorCQkJcC0+b2JqZWN0LmZs YWdzICY9IH5VTklOVEVSRVNUSU5HOworCQkJcGFyc2VfY29tbWl0KHApOworCQkJ cGxpc3QgPSAmY29tbWl0X2xpc3RfaW5zZXJ0KHAsIHBsaXN0KS0+bmV4dDsKKwkJ CQorCQkJaWYgKCEocC0+b2JqZWN0LmZsYWdzICYgU0VFTikpCisJCQkJdG90YWwr KzsKKwkJfQorCX0KKwkKKwlpZiAodG90YWwpCisJCXNvcnRfaW5fdG9wb2xvZ2lj YWxfb3JkZXIoJnJldnMtPmNvbW1pdHMsIDEpOworCQorfQorCisKIHN0cnVjdCBw YXRoX3RyYWNrIHsKIAlzdHJ1Y3QgY29tbWl0ICpjb21taXQ7CiAJaW50IHBhdGg7 IC8qIGZvciBkZWNyZW1lbnRpbmcgcGF0aHMgKi8KQEAgLTc4MSwzMSArODY0LDk3 IEBAIHN0YXRpYyB2b2lkIGhhbmRsZV9wYXRocyhzdHJ1Y3QgY29tbWl0ICpjb21t aXQsIHN0cnVjdCBvYmplY3RfZW50cnkgKm9iamVjdCwgc3RyCiB9CiAKIAotc3Rh dGljIHZvaWQgYWRkX29iamVjdF9lbnRyeShjb25zdCB1bnNpZ25lZCBjaGFyICpz aGExLCBpbnQgdHlwZSwgc3RydWN0IG9iamVjdF9lbnRyeSAqbm90aGlzb25lLCAK K3N0YXRpYyBpbnQgZW5jb2RlX3NpemUodW5zaWduZWQgbG9uZyBzaXplLCB1bnNp Z25lZCBjaGFyICpvdXQpCit7CisJaW50IGxlbiA9IDA7CisJCisJd2hpbGUgKHNp emUpIHsKKwkJKm91dCsrID0gKHVuc2lnbmVkIGNoYXIpKHNpemUgJiAweGZmKTsK KwkJc2l6ZSA+Pj0gODsKKwkJbGVuKys7CisJfQorCQorCXJldHVybiBsZW47Cit9 CisKK3N0YXRpYyB1bnNpZ25lZCBsb25nIGRlY29kZV9zaXplKHVuc2lnbmVkIGNo YXIgKnN0ciwgaW50IGxlbikKK3sKKwl1bnNpZ25lZCBsb25nIHNpemUgPSAwOwor CWludCBzaGlmdCA9IDA7CisJCisJd2hpbGUgKGxlbi0tKSB7CisJCXNpemUgfD0g KHVuc2lnbmVkIGxvbmcpKnN0ciA8PCBzaGlmdDsKKwkJc2hpZnQgKz0gODsKKwkJ c3RyKys7CisJfQorCQorCXJldHVybiBzaXplOworfQorCitzdGF0aWMgdm9pZCBh ZGRfb2JqZWN0X2VudHJ5KGNvbnN0IHVuc2lnbmVkIGNoYXIgKnNoYTEsIHN0cnVj dCBvYmplY3RfZW50cnkgKmVudHJ5cCwgCiAJc3RydWN0IHN0cmJ1ZiAqbWVyZ2Vf c3RyLCBzdHJ1Y3Qgc3RyYnVmICpzcGxpdF9zdHIpCiB7Ci0Jc3RydWN0IG9iamVj dF9lbnRyeSBvYmplY3Q7CisJc3RydWN0IG9iamVjdF9lbnRyeSBlbnRyeTsKKwlz dHJ1Y3Qgb2JqZWN0ICpvYmo7CisJdW5zaWduZWQgY2hhciBzaXplX3N0cls3XTsK Kwl1bnNpZ25lZCBsb25nIHNpemU7CisJZW51bSBvYmplY3RfdHlwZSB0eXBlOwor CQorCWlmIChlbnRyeXApCisJCXNoYTEgPSBlbnRyeXAtPnNoYTE7CisJCisJb2Jq ID0gbG9va3VwX29iamVjdChzaGExKTsKKwlpZiAob2JqKSB7CisJCS8qIGl0J2Qg YmUgc21vb3RoZXIgdG8gaGF2ZSB0aGUgc2l6ZSBpbiB0aGUgb2JqZWN0Li4uICov CisJCXN3aXRjaCAob2JqLT50eXBlKSB7CisJCWNhc2UgT0JKX0NPTU1JVCA6IAor CQkJc2l6ZSA9ICgoc3RydWN0IGNvbW1pdCAqKW9iaiktPnNpemU7CisJCQlicmVh azsKKwkJY2FzZSBPQkpfVFJFRSA6IAorCQkJc2l6ZSA9ICgoc3RydWN0IHRyZWUg KilvYmopLT5zaXplOworCQkJYnJlYWs7CisJCWNhc2UgT0JKX0JMT0IgOiAKKwkJ CXNpemUgPSAoKHN0cnVjdCBibG9iICopb2JqKS0+c2l6ZTsKKwkJCWJyZWFrOwor CQlkZWZhdWx0IDogCisJCQkvKiB0YWdzIGFyZSBwb3RlbnRpYWxseSBkeW5hbWlj IG1ldGFkYXRhOyB0aGV5IGRvbid0IHJlYWxseSBiZWxvbmcgaGVyZSAqLworCQkJ cmV0dXJuOworCQl9CisJCQorCQl0eXBlID0gb2JqLT50eXBlOworCX0KIAkKLQlp ZiAoIW5vdGhpc29uZSkgewotCQltZW1zZXQoJm9iamVjdCwgMCwgc2l6ZW9mKG9i amVjdCkpOwotCQloYXNoY3B5KG9iamVjdC5zaGExLCBzaGExKTsKLQkJb2JqZWN0 LnR5cGUgPSB0eXBlOworCWlmICghb2JqIHx8ICFzaXplKSB7CisJCXZvaWQgKmRh dGEgPSByZWFkX3NoYTFfZmlsZShzaGExLCAmdHlwZSwgJnNpemUpOworCQkKKwkJ aWYgKGRhdGEpCisJCQlmcmVlKGRhdGEpOworCX0KKwkKKwlpZiAoIWVudHJ5cCkg eworCQltZW1zZXQoJmVudHJ5LCAwLCBzaXplb2YoZW50cnkpKTsKKwkJaGFzaGNw eShlbnRyeS5zaGExLCBzaGExKTsKKwkJZW50cnkudHlwZSA9IHR5cGU7CiAJCQog CQlpZiAobWVyZ2Vfc3RyKQotCQkJb2JqZWN0Lm1lcmdlX25yID0gbWVyZ2Vfc3Ry LT5sZW4gLyBQQVRIX1dJRFRIOworCQkJZW50cnkubWVyZ2VfbnIgPSBtZXJnZV9z dHItPmxlbiAvIFBBVEhfV0lEVEg7CiAJCWlmIChzcGxpdF9zdHIpCi0JCQlvYmpl Y3Quc3BsaXRfbnIgPSBzcGxpdF9zdHItPmxlbiAvIFBBVEhfV0lEVEg7CisJCQll bnRyeS5zcGxpdF9uciA9IHNwbGl0X3N0ci0+bGVuIC8gUEFUSF9XSURUSDsKIAkJ Ci0JCW5vdGhpc29uZSA9ICZvYmplY3Q7CisJCWVudHJ5cCA9ICZlbnRyeTsKIAl9 CiAJCi0Jc3RyYnVmX2FkZChnX2J1ZmZlciwgbm90aGlzb25lLCBzaXplb2Yob2Jq ZWN0KSk7CisJZW50cnlwLT5zaXplX3NpemUgPSBlbmNvZGVfc2l6ZShzaXplLCBz aXplX3N0cik7CisJCisJLyogd3JpdGUgdGhlIG11dmFiaXRjaCAqLworCXN0cmJ1 Zl9hZGQoZ19idWZmZXIsIGVudHJ5cCwgc2l6ZW9mKGVudHJ5KSk7CiAJCi0JaWYg KG1lcmdlX3N0ciAmJiBtZXJnZV9zdHItPmxlbikKKwlpZiAobWVyZ2Vfc3RyKQog CQlzdHJidWZfYWRkKGdfYnVmZmVyLCBtZXJnZV9zdHItPmJ1ZiwgbWVyZ2Vfc3Ry LT5sZW4pOwotCWlmIChzcGxpdF9zdHIgJiYgc3BsaXRfc3RyLT5sZW4pCisJaWYg KHNwbGl0X3N0cikKIAkJc3RyYnVmX2FkZChnX2J1ZmZlciwgc3BsaXRfc3RyLT5i dWYsIHNwbGl0X3N0ci0+bGVuKTsKIAkKKwlzdHJidWZfYWRkKGdfYnVmZmVyLCBz aXplX3N0ciwgZW50cnlwLT5zaXplX3NpemUpOwogfQogCiAvKiByZXR1cm5zIG5v bi16ZXJvIHRvIGNvbnRpbnVlIHBhcnNpbmcsIDAgdG8gc2tpcCAqLwpAQCAtODQ5 LDEyICs5OTgsNyBAQCBjb250aW51ZV9sb29wOgogCiBzdGF0aWMgaW50IGR1bXBf dHJlZV9jYWxsYmFjayhjb25zdCB1bnNpZ25lZCBjaGFyICpzaGExLCBjb25zdCBj aGFyICpwYXRoLCB1bnNpZ25lZCBpbnQgbW9kZSkKIHsKLQl1bnNpZ25lZCBjaGFy IGRhdGFbMjFdOwotCQotCWhhc2hjcHkoZGF0YSwgc2hhMSk7Ci0JZGF0YVsyMF0g PSAhIVNfSVNESVIobW9kZSk7Ci0JCi0Jc3RyYnVmX2FkZChnX2J1ZmZlciwgZGF0 YSwgMjEpOworCXN0cmJ1Zl9hZGQoZ19idWZmZXIsIHNoYTEsIDIwKTsKIAkKIAly ZXR1cm4gMTsKIH0KQEAgLTg2NCwxNSArMTAwOCwxMCBAQCBzdGF0aWMgdm9pZCB0 cmVlX2FkZHJlbW92ZShzdHJ1Y3QgZGlmZl9vcHRpb25zICpvcHRpb25zLAogCWNv bnN0IHVuc2lnbmVkIGNoYXIgKnNoYTEsCiAJY29uc3QgY2hhciAqY29uY2F0cGF0 aCkKIHsKLQl1bnNpZ25lZCBjaGFyIGRhdGFbMjFdOwotCQogCWlmICh3aGF0bm93 ICE9ICcrJykKIAkJcmV0dXJuOwogCQotCWhhc2hjcHkoZGF0YSwgc2hhMSk7Ci0J ZGF0YVsyMF0gPSAhIVNfSVNESVIobW9kZSk7Ci0JCi0Jc3RyYnVmX2FkZChnX2J1 ZmZlciwgZGF0YSwgMjEpOworCXN0cmJ1Zl9hZGQoZ19idWZmZXIsIHNoYTEsIDIw KTsKIH0KIAogc3RhdGljIHZvaWQgdHJlZV9jaGFuZ2Uoc3RydWN0IGRpZmZfb3B0 aW9ucyAqb3B0aW9ucywKQEAgLTg4MSwyNiArMTAyMCwxMCBAQCBzdGF0aWMgdm9p ZCB0cmVlX2NoYW5nZShzdHJ1Y3QgZGlmZl9vcHRpb25zICpvcHRpb25zLAogCWNv bnN0IHVuc2lnbmVkIGNoYXIgKm5ld19zaGExLAogCWNvbnN0IGNoYXIgKmNvbmNh dHBhdGgpCiB7Ci0JdW5zaWduZWQgY2hhciBkYXRhWzIxXTsKLQkKIAlpZiAoIWhh c2hjbXAob2xkX3NoYTEsIG5ld19zaGExKSkKIAkJcmV0dXJuOwogCQotCWhhc2hj cHkoZGF0YSwgbmV3X3NoYTEpOwotCWRhdGFbMjBdID0gISFTX0lTRElSKG5ld19t b2RlKTsKLQkKLQlzdHJidWZfYWRkKGdfYnVmZmVyLCBkYXRhLCAyMSk7Ci19Ci0K LXN0YXRpYyBpbnQgc29ydF90eXBlX2hhc2goY29uc3Qgdm9pZCAqYSwgY29uc3Qg dm9pZCAqYikKLXsKLQljb25zdCB1bnNpZ25lZCBjaGFyICpzYSA9IChjb25zdCB1 bnNpZ25lZCBjaGFyICopYSwgCi0JCSpzYiA9IChjb25zdCB1bnNpZ25lZCBjaGFy ICopYjsKLQkKLQlpZiAoc2FbMjBdID09IHNiWzIwXSkKLQkJcmV0dXJuIGhhc2hj bXAoc2EsIHNiKTsKLQkKLQlyZXR1cm4gc2FbMjBdID4gc2JbMjBdID8gLTEgOiAx OworCXN0cmJ1Zl9hZGQoZ19idWZmZXIsIG5ld19zaGExLCAyMCk7CiB9CiAKIHN0 YXRpYyBpbnQgYWRkX3VuaXF1ZV9vYmplY3RzKHN0cnVjdCBjb21taXQgKmNvbW1p dCkKQEAgLTkxMSw2ICsxMDM0LDcgQEAgc3RhdGljIGludCBhZGRfdW5pcXVlX29i amVjdHMoc3RydWN0IGNvbW1pdCAqY29tbWl0KQogCWludCBpLCBqLCBuZXh0Owog CWNoYXIgaXNfZmlyc3QgPSAxOwogCQorCS8qIC4uLm5vLCBjYWxjdWxhdGUgdW5p cXVlIG9iamVjdHMgKi8KIAlzdHJidWZfaW5pdCgmb3MsIDApOwogCXN0cmJ1Zl9p bml0KCZvc3QsIDApOwogCW9yaWdfYnVmID0gZ19idWZmZXI7CkBAIC05MzAsMjAg KzEwNTQsMjAgQEAgc3RhdGljIGludCBhZGRfdW5pcXVlX29iamVjdHMoc3RydWN0 IGNvbW1pdCAqY29tbWl0KQogCQkKIAkJc3RyYnVmX3NldGxlbihnX2J1ZmZlciwg MCk7CiAJCWRpZmZfdHJlZV9zaGExKGxpc3QtPml0ZW0tPnRyZWUtPm9iamVjdC5z aGExLCBjb21taXQtPnRyZWUtPm9iamVjdC5zaGExLCAiIiwgJm9wdHMpOwotCQlx c29ydChnX2J1ZmZlci0+YnVmLCBnX2J1ZmZlci0+bGVuIC8gMjEsIDIxLCAoaW50 ICgqKShjb25zdCB2b2lkICosIGNvbnN0IHZvaWQgKikpaGFzaGNtcCk7CisJCXFz b3J0KGdfYnVmZmVyLT5idWYsIGdfYnVmZmVyLT5sZW4gLyAyMCwgMjAsIChpbnQg KCopKGNvbnN0IHZvaWQgKiwgY29uc3Qgdm9pZCAqKSloYXNoY21wKTsKIAkJCiAJ CS8qIHRha2UgaW50ZXJzZWN0aW9uICovCiAJCWlmICghaXNfZmlyc3QpIHsKLQkJ CWZvciAobmV4dCA9IGkgPSBqID0gMDsgaSA8IG9zLmxlbjsgaSArPSAyMSkgewor CQkJZm9yIChuZXh0ID0gaSA9IGogPSAwOyBpIDwgb3MubGVuOyBpICs9IDIwKSB7 CiAJCQkJd2hpbGUgKGogPCBvc3QubGVuICYmIGhhc2hjbXAoKHVuc2lnbmVkIGNo YXIgKikob3N0LmJ1ZiArIGopLCAodW5zaWduZWQgY2hhciAqKShvcy5idWYgKyBp KSkgPCAwKQotCQkJCQlqICs9IDIxOworCQkJCQlqICs9IDIwOwogCQkJCQogCQkJ CWlmIChqID49IG9zdC5sZW4gfHwgaGFzaGNtcCgodW5zaWduZWQgY2hhciAqKShv c3QuYnVmICsgaiksICh1bnNpZ25lZCBjaGFyICopKG9zLmJ1ZiArIGkpKSkKIAkJ CQkJY29udGludWU7CiAJCQkJCiAJCQkJaWYgKG5leHQgIT0gaSkKLQkJCQkJbWVt Y3B5KG9zLmJ1ZiArIG5leHQsIG9zLmJ1ZiArIGksIDIxKTsKLQkJCQluZXh0ICs9 IDIxOworCQkJCQltZW1jcHkob3MuYnVmICsgbmV4dCwgb3MuYnVmICsgaSwgMjAp OworCQkJCW5leHQgKz0gMjA7CiAJCQl9CiAJCQkKIAkJCWlmIChuZXh0ICE9IGkp CkBAIC05NTIsMjIgKzEwNzYsMjEgQEAgc3RhdGljIGludCBhZGRfdW5pcXVlX29i amVjdHMoc3RydWN0IGNvbW1pdCAqY29tbWl0KQogCQkJaXNfZmlyc3QgPSAwOwog CX0KIAkKKwkvKiBubyBwYXJlbnRzICghKSAqLwogCWlmIChpc19maXJzdCkgewog CQlnX2J1ZmZlciA9ICZvczsKIAkJZHVtcF90cmVlKGNvbW1pdC0+dHJlZSwgZHVt cF90cmVlX2NhbGxiYWNrKTsKIAl9CiAJCi0JaWYgKG9zLmxlbikKLQkJcXNvcnQo b3MuYnVmLCBvcy5sZW4gLyAyMSwgMjEsIHNvcnRfdHlwZV9oYXNoKTsKLQkKKwkv KiB0aGUgb3JkZXJpbmcgb2Ygbm9uLWNvbW1pdCBvYmplY3RzIGRvc24ndCByZWFs bHkgbWF0dGVyLCBzbyB3ZSdyZSBub3QgZ29ubmEgYm90aGVyICovCiAJZ19idWZm ZXIgPSBvcmlnX2J1ZjsKLQlmb3IgKGkgPSAwOyBpIDwgb3MubGVuOyBpICs9IDIx KQotCQlhZGRfb2JqZWN0X2VudHJ5KCh1bnNpZ25lZCBjaGFyICopKG9zLmJ1ZiAr IGkpLCBvcy5idWZbaSArIDIwXSA/IE9CSl9UUkVFIDogT0JKX0JMT0IsIDAsIDAs IDApOworCWZvciAoaSA9IDA7IGkgPCBvcy5sZW47IGkgKz0gMjApCisJCWFkZF9v YmplY3RfZW50cnkoKHVuc2lnbmVkIGNoYXIgKikob3MuYnVmICsgaSksIDAsIDAs IDApOwogCQogCXN0cmJ1Zl9yZWxlYXNlKCZvc3QpOwogCXN0cmJ1Zl9yZWxlYXNl KCZvcyk7CiAJCi0JcmV0dXJuIDA7CisJcmV0dXJuIGkgLyAyMDsKIH0KIAogc3Rh dGljIHZvaWQgaW5pdF9yZXZjYWNoZV9kaXJlY3Rvcnkodm9pZCkKQEAgLTEwNTMs NiArMTE3Niw5IEBAIGludCBtYWtlX2NhY2hlX3NsaWNlKHN0cnVjdCByZXZfY2Fj aGVfaW5mbyAqcmNpLAogCWlmIChwcmVwYXJlX3JldmlzaW9uX3dhbGsocmV2cykp CiAJCWRpZSgiZGllZCBwcmVwYXJpbmcgcmV2aXNpb24gd2FsayIpOwogCQorCWlm IChyY2ktPmxlZ3MpCisJCW1ha2VfbGVncyhyZXZzKTsKKwkKIAlvYmplY3RfbnIg PSB0b3RhbF9zeiA9IDA7CiAJd2hpbGUgKChjb21taXQgPSBnZXRfcmV2aXNpb24o cmV2cykpICE9IDApIHsKIAkJc3RydWN0IG9iamVjdF9lbnRyeSBvYmplY3Q7CkBA IC0xMDc0LDEyICsxMjAwLDEyIEBAIGludCBtYWtlX2NhY2hlX3NsaWNlKHN0cnVj dCByZXZfY2FjaGVfaW5mbyAqcmNpLAogCQkKIAkJY29tbWl0LT5pbmRlZ3JlZSA9 IDA7CiAJCQotCQlhZGRfb2JqZWN0X2VudHJ5KDAsIDAsICZvYmplY3QsICZtZXJn ZV9wYXRocywgJnNwbGl0X3BhdGhzKTsKKwkJYWRkX29iamVjdF9lbnRyeSgwLCAm b2JqZWN0LCAmbWVyZ2VfcGF0aHMsICZzcGxpdF9wYXRocyk7CiAJCW9iamVjdF9u cisrOwogCQkKLQkJaWYgKCEoY29tbWl0LT5vYmplY3QuZmxhZ3MgJiBUUkVFU0FN RSkpIHsKKwkJaWYgKHJjaS0+b2JqZWN0cyAmJiAhKGNvbW1pdC0+b2JqZWN0LmZs YWdzICYgVFJFRVNBTUUpKSB7CiAJCQkvKiBhZGQgYWxsIHVuaXF1ZSBjaGlsZHJl biBmb3IgdGhpcyBjb21taXQgKi8KLQkJCWFkZF9vYmplY3RfZW50cnkoY29tbWl0 LT50cmVlLT5vYmplY3Quc2hhMSwgT0JKX1RSRUUsIDAsIDAsIDApOworCQkJYWRk X29iamVjdF9lbnRyeShjb21taXQtPnRyZWUtPm9iamVjdC5zaGExLCAwLCAwLCAw KTsKIAkJCW9iamVjdF9ucisrOwogCQkJCiAJCQlpZiAoIW9iamVjdC5pc19zdGFy dCkKQEAgLTEyNzUsNyArMTQwMSw3IEBAIGludCBtYWtlX2NhY2hlX2luZGV4KHN0 cnVjdCByZXZfY2FjaGVfaW5mbyAqcmNpLCB1bnNpZ25lZCBjaGFyICpjYWNoZV9z aGExLAogCQkgKiBzaG91bGQgd2UgYWxsb3cgbW9yZSBpbnRlbGxpZ2VudCBvdmVy cmlkaW5nPyAqLwogCQlkYXRlID0gbnRvaGwob2JqZWN0X2VudHJ5LT5kYXRlKTsK IAkJaWYgKGRhdGUgPiBpZHhfaGVhZC5tYXhfZGF0ZSkgewotIAkJCWVudHJ5ID0g MDsKKwkJCWVudHJ5ID0gMDsKIAkJCWlmIChkYXRlID4gbWF4X2RhdGUpCiAJCQkJ bWF4X2RhdGUgPSBkYXRlOwogCQl9IGVsc2UKQEAgLTEzMzIsNyArMTQ1OCw3IEBA IGludCBtYWtlX2NhY2hlX2luZGV4KHN0cnVjdCByZXZfY2FjaGVfaW5mbyAqcmNp LCB1bnNpZ25lZCBjaGFyICpjYWNoZV9zaGExLAogCiAKIC8qIGFkZCBlbmQtY29t bWl0cyBmcm9tIGVhY2ggY2FjaGUgc2xpY2UgKHVuaW50ZXJlc3RpbmduZXNzIHdp bGwgYmUgcHJvcG9nYXRlZCkgKi8KLXZvaWQgZW5kc19mcm9tX3NsaWNlcyhzdHJ1 Y3QgcmV2X2luZm8gKnJldnMsIHVuc2lnbmVkIGludCBmbGFncykKK3ZvaWQgZW5k c19mcm9tX3NsaWNlcyhzdHJ1Y3QgcmV2X2luZm8gKnJldnMsIHVuc2lnbmVkIGlu dCBmbGFncywgdW5zaWduZWQgY2hhciAqd2hpY2gsIGludCBuKQogewogCXN0cnVj dCBjb21taXQgKmNvbW1pdDsKIAlpbnQgaTsKQEAgLTEzNDksNiArMTQ3NSwxOCBA QCB2b2lkIGVuZHNfZnJvbV9zbGljZXMoc3RydWN0IHJldl9pbmZvICpyZXZzLCB1 bnNpZ25lZCBpbnQgZmxhZ3MpCiAJCWlmICghZW50cnktPmlzX2VuZCkKIAkJCWNv bnRpbnVlOwogCQkKKwkJLyogb25seSBpbmNsdWRlIGVudHJpZXMgaW4gJ3doaWNo JyBzbGljZXMgKi8KKwkJaWYgKG4pIHsKKwkJCWludCBqOworCQkJCisJCQlmb3Ig KGogPSAwOyBqIDwgbjsgaisrKQorCQkJCWlmICghaGFzaGNtcChpZHhfaGVhZC5j YWNoZV9zaGExcyArIGVudHJ5LT5jYWNoZV9pbmRleCAqIDIwLCB3aGljaCArIGog KiAyMCkpCisJCQkJCWJyZWFrOworCQkJCisJCQlpZiAoaiA9PSBuKQorCQkJCWNv bnRpbnVlOworCQl9CisJCQogCQljb21taXQgPSBsb29rdXBfY29tbWl0KGVudHJ5 LT5zaGExKTsKIAkJaWYgKCFjb21taXQpCiAJCQljb250aW51ZTsKQEAgLTEzNTgs MyArMTQ5NiwxMzQgQEAgdm9pZCBlbmRzX2Zyb21fc2xpY2VzKHN0cnVjdCByZXZf aW5mbyAqcmV2cywgdW5zaWduZWQgaW50IGZsYWdzKQogCX0KIAkKIH0KKworCisv KiB0aGUgbW9zdCB3b3JrLWludGVuc2l2ZSBhdHRyaWJ1dGVzIGluIHRoZSBjYWNo ZSBhcmUgdGhlIHVuaXF1ZSBvYmplY3RzIGFuZCBzaXplLCBib3RoIAorICogb2Yg d2hpY2ggY2FuIGJlIHJlLXVzZWQuICBhbHRob3VnaCBwYXRoIHN0cnVjdHVyZXMg d2lsbCBiZSBpc29tb3JwaGljLCBwYXRoIGdlbmVyYXRpb24gaXMgCisgKiBub3Qg cGFydGljdWxhcmx5IGV4cGVuc2l2ZSwgYW5kIGF0IGFueSByYXRlIHdlIG5lZWQg dG8gcmUtc29ydCB0aGUgY29tbWl0cyAqLworaW50IGNvYWd1bGF0ZV9jYWNoZV9z bGljZXMoc3RydWN0IHJldl9jYWNoZV9pbmZvICpyY2ksIHN0cnVjdCByZXZfaW5m byAqcmV2cykKK3sKKwl1bnNpZ25lZCBjaGFyIGNhY2hlX3NoYTFbMjBdOworCWNo YXIgYmFzZVtQQVRIX01BWF07CisJaW50IGZkLCBiYXNlbGVuLCBpOworCXN0cnVj dCBzdGF0IGZpOworCXN0cnVjdCBzdHJpbmdfbGlzdCBmaWxlcyA9IHswLCAwLCAw LCAxfTsgLyogZHVwICovCisJc3RydWN0IHN0cmJ1ZiBpZ25vcmU7CisJRElSICpk aXJoOworCQorCXN0cmJ1Zl9pbml0KCZpZ25vcmUsIDApOworCXN0cm5jcHkoYmFz ZSwgZ2l0X3BhdGgoInJldi1jYWNoZSIpLCBzaXplb2YoYmFzZSkpOworCWJhc2Vs ZW4gPSBzdHJsZW4oYmFzZSk7CisJCisJLyogZW51bWVyYXRlIGZpbGVzICovCisJ ZGlyaCA9IG9wZW5kaXIoYmFzZSk7CisJaWYgKGRpcmgpIHsKKwkJc3RydWN0IGRp cmVudCAqZGU7CisJCQorCQl3aGlsZSAoKGRlID0gcmVhZGRpcihkaXJoKSkpIHsK KwkJCWlmIChkZS0+ZF9uYW1lWzBdID09ICcuJykKKwkJCQljb250aW51ZTsKKwkJ CQorCQkJYmFzZVtiYXNlbGVuXSA9ICcvJzsKKwkJCXN0cm5jcHkoYmFzZSArIGJh c2VsZW4gKyAxLCBkZS0+ZF9uYW1lLCBzaXplb2YoYmFzZSkgLSBiYXNlbGVuIC0g MSk7CisJCQkKKwkJCS8qIF90aGVvcmV0aWNhbGx5XyBpdCBpcyBwb3NzaWJsZSBh IHNsaWNlIDwgaWdub3JlX3NpemUgdG8gbWFwIG9iamVjdHMgbm90IGNvdmVyZWQg YnksIHlldCByZWFjaGFibGUgZnJvbSwgCisJCQkgKiBhIHNsaWNlID49IGlnbm9y ZV9zaXplLCBtZWFuaW5nIHRoYXQgd2UgY291bGQgcG90ZW50aWFsbHkgZGVsZXRl IGFuICd1bmZ1c2VkJyBzbGljZTsgYnV0IGlmIHRoYXQgCisJCQkgKiBldmVyICpk aWQqIGhhcHBlbiB0aGVpciBjYWNoZSBzdHJ1Y3R1cmUnZCBiZSBzbyBmdWNrZWQg dXAgdGhleSBtaWdodCBhcyB3ZWxsIHJlZnVzZSB0aGUgZW50aXJlIHRoaW5nLgor CQkJICogYW5kIGF0IGFueSByYXRlIHRoZSB3b3JzdCBpdCdkIGRvIGlzIG1ha2Ug cmV2LWxpc3QgcmV2ZXJ0IHRvIHN0YW5kYXJkIHdhbGtpbmcgaW4gdGhhdCAoc21h bGwpIGJpdC4KKwkJCSAqLworCQkJaWYgKHJjaS0+aWdub3JlX3NpemUpIHsKKwkJ CQl1bnNpZ25lZCBjaGFyIHNoYTFbMjBdOworCQkJCQorCQkJCWlmIChzdGF0KGJh c2UsICZmaSkpCisJCQkJCXdhcm5pbmcoImNhbid0IHF1ZXJ5IGZpbGUgJXNcbiIs IGJhc2UpOworCQkJCWVsc2UgaWYgKGZpLnN0X3NpemUgPj0gcmNpLT5pZ25vcmVf c2l6ZSAmJiAhZ2V0X3NoYTFfaGV4KGRlLT5kX25hbWUsIHNoYTEpKSB7CisJCQkJ CXN0cmJ1Zl9hZGQoJmlnbm9yZSwgc2hhMSwgMjApOworCQkJCQljb250aW51ZTsK KwkJCQl9CisJCQl9CisJCQkKKwkJCXN0cmluZ19saXN0X2luc2VydChiYXNlLCAm ZmlsZXMpOworCQl9CisJCQorCQljbG9zZWRpcihkaXJoKTsKKwl9CisJCisJaWYg KGlnbm9yZS5sZW4pIHsKKwkJZW5kc19mcm9tX3NsaWNlcyhyZXZzLCBVTklOVEVS RVNUSU5HLCAodW5zaWduZWQgY2hhciAqKWlnbm9yZS5idWYsIGlnbm9yZS5sZW4g LyAyMCk7CisJCXN0cmJ1Zl9yZWxlYXNlKCZpZ25vcmUpOworCX0KKwkKKwlyY2kt Pm1ha2VfaW5kZXggPSAwOworCWlmIChtYWtlX2NhY2hlX3NsaWNlKHJjaSwgcmV2 cywgMCwgMCwgY2FjaGVfc2hhMSkgPCAwKQorCQlkaWUoImNhbid0IG1ha2UgY2Fj aGUgc2xpY2UiKTsKKwkKKwkvKiBjbGVhbiB1cCB0aW1lISAqLworCWNsZWFudXBf Y2FjaGVfc2xpY2VzKCk7CisJCisJZm9yIChpID0gMDsgaSA8IGZpbGVzLm5yOyBp KyspIHsKKwkJY2hhciAqbmFtZSA9IGZpbGVzLml0ZW1zW2ldLnN0cmluZzsKKwkJ CisJCWZwcmludGYoc3RkZXJyLCAicmVtb3ZpbmcgJXNcbiIsIG5hbWUpOworCQl1 bmxpbmtfb3Jfd2FybihuYW1lKTsKKwl9CisJCisJc3RyaW5nX2xpc3RfY2xlYXIo JmZpbGVzLCAwKTsKKwkKKwlmZCA9IG9wZW4oZ2l0X3BhdGgoInJldi1jYWNoZS8l cyIsIHNoYTFfdG9faGV4KGNhY2hlX3NoYTEpKSwgT19SRFdSKTsKKwlpZiAoZmQg PCAwIHx8IGZzdGF0KGZkLCAmZmkpKQorCQlkaWUoIndoYXQ/ICBJIGNhbid0IG9w ZW4vcXVlcnkgdGhlIGNhY2hlIEkganVzdCBnZW5lcmF0ZWQiKTsKKwkKKwlpZiAo bWFrZV9jYWNoZV9pbmRleChyY2ksIGNhY2hlX3NoYTEsIGZkLCBmaS5zdF9zaXpl KSA8IDApCisJCWRpZSgiY2FuJ3QgbWFrZSBuZXcgaW5kZXgiKTsKKwkKKwljbG9z ZShmZCk7CisJCisJcmV0dXJuIDA7Cit9CisKK2ludCByZWdlbmVyYXRlX2NhY2hl X2luZGV4KHN0cnVjdCByZXZfY2FjaGVfaW5mbyAqcmNpKQoreworCURJUiAqZGly aDsKKwljaGFyIGJhc2VbUEFUSF9NQVhdOworCWludCBiYXNlbGVuOworCQorCS8q IGZpcnN0IHJlbW92ZSBvbGQgaW5kZXggaWYgaXQgZXhpc3RzICovCisJdW5saW5r X29yX3dhcm4oZ2l0X3BhdGgoInJldi1jYWNoZS9pbmRleCIpKTsKKwkKKwlzdHJu Y3B5KGJhc2UsIGdpdF9wYXRoKCJyZXYtY2FjaGUiKSwgc2l6ZW9mKGJhc2UpKTsK KwliYXNlbGVuID0gc3RybGVuKGJhc2UpOworCQorCWRpcmggPSBvcGVuZGlyKGJh c2UpOworCWlmIChkaXJoKSB7CisJCXN0cnVjdCBkaXJlbnQgKmRlOworCQlzdHJ1 Y3Qgc3RhdCBmaTsKKwkJaW50IGZkOworCQl1bnNpZ25lZCBjaGFyIHNoYTFbMjBd OworCQkKKwkJd2hpbGUgKChkZSA9IHJlYWRkaXIoZGlyaCkpKSB7CisJCQlpZiAo ZGUtPmRfbmFtZVswXSA9PSAnLicpCisJCQkJY29udGludWU7CisJCQkKKwkJCWlm IChnZXRfc2hhMV9oZXgoZGUtPmRfbmFtZSwgc2hhMSkpCisJCQkJY29udGludWU7 CisJCQkKKwkJCWJhc2VbYmFzZWxlbl0gPSAnLyc7CisJCQlzdHJuY3B5KGJhc2Ug KyBiYXNlbGVuICsgMSwgZGUtPmRfbmFtZSwgc2l6ZW9mKGJhc2UpIC0gYmFzZWxl biAtIDEpOworCQkJCisJCQkvKiBvcGVuIHdpdGggUkRXUiBiZWNhdXNlIG9mIG1t YXAgY2FsbCBpbiBtYWtlX2NhY2hlX2luZGV4KCkgKi8KKwkJCWZkID0gb3Blbihi YXNlLCBPX1JEV1IpOworCQkJaWYgKGZkIDwgMCB8fCBmc3RhdChmZCwgJmZpKSkK KwkJCQl3YXJuaW5nKCJiYWQgY2FjaGUgZm91bmQgWyVzXTsgZnVzZSByZWNvbW1l bmRlZCIsIGRlLT5kX25hbWUpOworCQkJCisJCQlpZiAobWFrZV9jYWNoZV9pbmRl eChyY2ksIHNoYTEsIGZkLCBmaS5zdF9zaXplKSA8IDApCisJCQkJZGllKCJlcnJv ciB3cml0aW5nIGNhY2hlIik7CisJCQkKKwkJCWNsb3NlKGZkKTsKKwkJfQorCQkK KwkJY2xvc2VkaXIoZGlyaCk7CisJfQorCQorCXJldHVybiAwOworfQpcIE5vIG5l d2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3JldmlzaW9uLmggYi9y ZXZpc2lvbi5oCmluZGV4IGU4N2Y0MWQuLjUyNjk2MDIgMTAwNjQ0Ci0tLSBhL3Jl dmlzaW9uLmgKKysrIGIvcmV2aXNpb24uaApAQCAtMjA0LDYgKzIwNCw4IEBAIGV4 dGVybiBpbnQgbWFrZV9jYWNoZV9zbGljZShzdHJ1Y3QgcmV2X2NhY2hlX2luZm8g KnJjaSwKIGV4dGVybiBpbnQgbWFrZV9jYWNoZV9pbmRleChzdHJ1Y3QgcmV2X2Nh Y2hlX2luZm8gKnJjaSwgdW5zaWduZWQgY2hhciAqY2FjaGVfc2hhMSwgCiAJaW50 IGZkLCB1bnNpZ25lZCBpbnQgc2l6ZSk7CiAKLWV4dGVybiB2b2lkIGVuZHNfZnJv bV9zbGljZXMoc3RydWN0IHJldl9pbmZvICpyZXZzLCB1bnNpZ25lZCBpbnQgZmxh Z3MpOworZXh0ZXJuIHZvaWQgZW5kc19mcm9tX3NsaWNlcyhzdHJ1Y3QgcmV2X2lu Zm8gKnJldnMsIHVuc2lnbmVkIGludCBmbGFncywgdW5zaWduZWQgY2hhciAqd2hp Y2gsIGludCBuKTsKK2V4dGVybiBpbnQgY29hZ3VsYXRlX2NhY2hlX3NsaWNlcyhz dHJ1Y3QgcmV2X2NhY2hlX2luZm8gKnJjaSwgc3RydWN0IHJldl9pbmZvICpyZXZz KTsKK2V4dGVybiBpbnQgcmVnZW5lcmF0ZV9jYWNoZV9pbmRleChzdHJ1Y3QgcmV2 X2NhY2hlX2luZm8gKnJjaSk7CiAKICNlbmRpZgotLSAKdGc6ICgzZTEzMmY3Li4p IHQvcmV2Y2FjaGUvbWlzYyAoZGVwZW5kcyBvbjogdC9yZXZjYWNoZS9vYmplY3Rz KQo= ------------1eqvSik9lgXdMSKvDGxrXG--