From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-9.8 required=3.0 tests=HEADER_FROM_DIFFERENT_DOMAINS, INCLUDES_PATCH,MAILING_LIST_MULTI,SIGNED_OFF_BY,SPF_HELO_NONE,SPF_PASS, USER_AGENT_GIT autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id B57D9C3A589 for ; Mon, 19 Aug 2019 01:22:13 +0000 (UTC) Received: from lists.xenproject.org (lists.xenproject.org [192.237.175.120]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id 818C52184E for ; Mon, 19 Aug 2019 01:22:13 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 818C52184E Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=intel.com Authentication-Results: mail.kernel.org; spf=none smtp.mailfrom=xen-devel-bounces@lists.xenproject.org Received: from localhost ([127.0.0.1] helo=lists.xenproject.org) by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from ) id 1hzWN0-0001Qq-O9; Mon, 19 Aug 2019 01:22:02 +0000 Received: from all-amaz-eas1.inumbo.com ([34.197.232.57] helo=us1-amaz-eas2.inumbo.com) by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from ) id 1hzWMz-0001Px-RL for xen-devel@lists.xenproject.org; Mon, 19 Aug 2019 01:22:01 +0000 X-Inumbo-ID: bebbd22c-c21f-11e9-8be6-12813bfff9fa Received: from mga03.intel.com (unknown [134.134.136.65]) by us1-amaz-eas2.inumbo.com (Halon) with ESMTPS id bebbd22c-c21f-11e9-8be6-12813bfff9fa; Mon, 19 Aug 2019 01:22:01 +0000 (UTC) X-Amp-Result: SKIPPED(no attachment in message) X-Amp-File-Uploaded: False Received: from orsmga001.jf.intel.com ([10.7.209.18]) by orsmga103.jf.intel.com with ESMTP/TLS/DHE-RSA-AES256-GCM-SHA384; 18 Aug 2019 18:22:01 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.64,403,1559545200"; d="scan'208";a="261683947" Received: from gao-cwp.sh.intel.com ([10.239.159.26]) by orsmga001.jf.intel.com with ESMTP; 18 Aug 2019 18:21:59 -0700 From: Chao Gao To: xen-devel@lists.xenproject.org Date: Mon, 19 Aug 2019 09:25:25 +0800 Message-Id: <1566177928-19114-13-git-send-email-chao.gao@intel.com> X-Mailer: git-send-email 1.9.1 In-Reply-To: <1566177928-19114-1-git-send-email-chao.gao@intel.com> References: <1566177928-19114-1-git-send-email-chao.gao@intel.com> Subject: [Xen-devel] [PATCH v9 12/15] microcode: reduce memory allocation and copy when creating a patch X-BeenThere: xen-devel@lists.xenproject.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: Xen developer discussion List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Cc: Ashok Raj , Wei Liu , Andrew Cooper , Jan Beulich , Chao Gao , =?UTF-8?q?Roger=20Pau=20Monn=C3=A9?= MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Errors-To: xen-devel-bounces@lists.xenproject.org Sender: "Xen-devel" VG8gY3JlYXRlIGEgbWljcm9jb2RlIHBhdGNoIGZyb20gYSB2ZW5kb3Itc3BlY2lmaWMgdXBkYXRl LAphbGxvY2F0ZV9taWNyb2NvZGVfcGF0Y2goKSBjb3BpZWQgZXZlcnl0aGluZyBmcm9tIHRoZSB1 cGRhdGUuCkl0IGlzIG5vdCBlZmZpY2llbnQuIEVzc2VudGlhbGx5LCB3ZSBqdXN0IG5lZWQgdG8g Z28gdGhyb3VnaAp1Y29kZXMgaW4gdGhlIGJsb2IsIGZpbmQgdGhlIG9uZSB3aXRoIHRoZSBuZXdl c3QgcmV2aXNpb24gYW5kCmluc3RhbGwgaXQgaW50byB0aGUgbWljcm9jb2RlX3BhdGNoLiBJbiB0 aGUgcHJvY2VzcywgYnVmZmVycwpsaWtlIG1jX2FtZCwgZXF1aXZfY3B1X3RhYmxlIChvbiBBTUQg c2lkZSksIGFuZCBtYyAob24gSW50ZWwKc2lkZSkgY2FuIGJlIHJldXNlZC4gbWljcm9jb2RlX3Bh dGNoIG5vdyBpcyBhbGxvY2F0ZWQgYWZ0ZXIKaXQgaXMgc3VyZSB0aGF0IHRoZXJlIGlzIGEgbWF0 Y2hpbmcgdWNvZGUuCgpTaWduZWQtb2ZmLWJ5OiBDaGFvIEdhbyA8Y2hhby5nYW9AaW50ZWwuY29t PgotLS0KQ2hhbmdlcyBpbiB2OToKIC0gbmV3Ci0tLQogeGVuL2FyY2gveDg2L21pY3JvY29kZV9h bWQuYyAgIHwgOTkgKysrKysrKysrKysrKysrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiB4 ZW4vYXJjaC94ODYvbWljcm9jb2RlX2ludGVsLmMgfCA2NSArKysrKysrKysrLS0tLS0tLS0tLS0t LS0tLS0KIDIgZmlsZXMgY2hhbmdlZCwgNTggaW5zZXJ0aW9ucygrKSwgMTA2IGRlbGV0aW9ucygt KQoKZGlmZiAtLWdpdCBhL3hlbi9hcmNoL3g4Ni9taWNyb2NvZGVfYW1kLmMgYi94ZW4vYXJjaC94 ODYvbWljcm9jb2RlX2FtZC5jCmluZGV4IDYzNTMzMjMuLmVjMWMyZWIgMTAwNjQ0Ci0tLSBhL3hl bi9hcmNoL3g4Ni9taWNyb2NvZGVfYW1kLmMKKysrIGIveGVuL2FyY2gveDg2L21pY3JvY29kZV9h bWQuYwpAQCAtMTk0LDM2ICsxOTQsNiBAQCBzdGF0aWMgYm9vbCBtYXRjaF9jcHUoY29uc3Qgc3Ry dWN0IG1pY3JvY29kZV9wYXRjaCAqcGF0Y2gpCiAgICAgcmV0dXJuIHBhdGNoICYmIChtaWNyb2Nv ZGVfZml0cyhwYXRjaC0+bWNfYW1kKSA9PSBORVdfVUNPREUpOwogfQogCi1zdGF0aWMgc3RydWN0 IG1pY3JvY29kZV9wYXRjaCAqYWxsb2NfbWljcm9jb2RlX3BhdGNoKAotICAgIGNvbnN0IHN0cnVj dCBtaWNyb2NvZGVfYW1kICptY19hbWQpCi17Ci0gICAgc3RydWN0IG1pY3JvY29kZV9wYXRjaCAq bWljcm9jb2RlX3BhdGNoID0geG1hbGxvYyhzdHJ1Y3QgbWljcm9jb2RlX3BhdGNoKTsKLSAgICBz dHJ1Y3QgbWljcm9jb2RlX2FtZCAqY2FjaGUgPSB4bWFsbG9jKHN0cnVjdCBtaWNyb2NvZGVfYW1k KTsKLSAgICB2b2lkICptcGIgPSB4bWFsbG9jX2J5dGVzKG1jX2FtZC0+bXBiX3NpemUpOwotICAg IHN0cnVjdCBlcXVpdl9jcHVfZW50cnkgKmVxdWl2X2NwdV90YWJsZSA9Ci0gICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIHhtYWxsb2NfYnl0ZXMobWNfYW1kLT5lcXVpdl9jcHVfdGFibGVf c2l6ZSk7Ci0KLSAgICBpZiAoICFtaWNyb2NvZGVfcGF0Y2ggfHwgIWNhY2hlIHx8ICFtcGIgfHwg IWVxdWl2X2NwdV90YWJsZSApCi0gICAgewotICAgICAgICB4ZnJlZShtaWNyb2NvZGVfcGF0Y2gp OwotICAgICAgICB4ZnJlZShjYWNoZSk7Ci0gICAgICAgIHhmcmVlKG1wYik7Ci0gICAgICAgIHhm cmVlKGVxdWl2X2NwdV90YWJsZSk7Ci0gICAgICAgIHJldHVybiBFUlJfUFRSKC1FTk9NRU0pOwot ICAgIH0KLQotICAgIG1lbWNweShtcGIsIG1jX2FtZC0+bXBiLCBtY19hbWQtPm1wYl9zaXplKTsK LSAgICBjYWNoZS0+bXBiID0gbXBiOwotICAgIGNhY2hlLT5tcGJfc2l6ZSA9IG1jX2FtZC0+bXBi X3NpemU7Ci0gICAgbWVtY3B5KGVxdWl2X2NwdV90YWJsZSwgbWNfYW1kLT5lcXVpdl9jcHVfdGFi bGUsCi0gICAgICAgICAgIG1jX2FtZC0+ZXF1aXZfY3B1X3RhYmxlX3NpemUpOwotICAgIGNhY2hl LT5lcXVpdl9jcHVfdGFibGUgPSBlcXVpdl9jcHVfdGFibGU7Ci0gICAgY2FjaGUtPmVxdWl2X2Nw dV90YWJsZV9zaXplID0gbWNfYW1kLT5lcXVpdl9jcHVfdGFibGVfc2l6ZTsKLSAgICBtaWNyb2Nv ZGVfcGF0Y2gtPm1jX2FtZCA9IGNhY2hlOwotCi0gICAgcmV0dXJuIG1pY3JvY29kZV9wYXRjaDsK LX0KLQogc3RhdGljIHZvaWQgZnJlZV9wYXRjaCh2b2lkICptYykKIHsKICAgICBzdHJ1Y3QgbWlj cm9jb2RlX2FtZCAqbWNfYW1kID0gbWM7CkBAIC0zMjAsMTggKzI5MCwxMCBAQCBzdGF0aWMgaW50 IGdldF91Y29kZV9mcm9tX2J1ZmZlcl9hbWQoCiAgICAgICAgIHJldHVybiAtRUlOVkFMOwogICAg IH0KIAotICAgIGlmICggbWNfYW1kLT5tcGJfc2l6ZSA8IG1wYnVmLT5sZW4gKQotICAgIHsKLSAg ICAgICAgaWYgKCBtY19hbWQtPm1wYiApCi0gICAgICAgIHsKLSAgICAgICAgICAgIHhmcmVlKG1j X2FtZC0+bXBiKTsKLSAgICAgICAgICAgIG1jX2FtZC0+bXBiX3NpemUgPSAwOwotICAgICAgICB9 Ci0gICAgICAgIG1jX2FtZC0+bXBiID0geG1hbGxvY19ieXRlcyhtcGJ1Zi0+bGVuKTsKLSAgICAg ICAgaWYgKCBtY19hbWQtPm1wYiA9PSBOVUxMICkKLSAgICAgICAgICAgIHJldHVybiAtRU5PTUVN OwotICAgICAgICBtY19hbWQtPm1wYl9zaXplID0gbXBidWYtPmxlbjsKLSAgICB9CisgICAgbWNf YW1kLT5tcGIgPSB4bWFsbG9jX2J5dGVzKG1wYnVmLT5sZW4pOworICAgIGlmICggbWNfYW1kLT5t cGIgPT0gTlVMTCApCisgICAgICAgIHJldHVybiAtRU5PTUVNOworICAgIG1jX2FtZC0+bXBiX3Np emUgPSBtcGJ1Zi0+bGVuOwogICAgIG1lbWNweShtY19hbWQtPm1wYiwgbXBidWYtPmRhdGEsIG1w YnVmLT5sZW4pOwogCiAgICAgcHJfZGVidWcoIm1pY3JvY29kZTogQ1BVJWQgc2l6ZSAlenUsIGJs b2NrIHNpemUgJXUgb2Zmc2V0ICV6dSBlcXVpdklEICUjeCByZXYgJSN4XG4iLApAQCAtNDUxLDgg KzQxMyw5IEBAIHN0YXRpYyBzdHJ1Y3QgbWljcm9jb2RlX3BhdGNoICpjcHVfcmVxdWVzdF9taWNy b2NvZGUoY29uc3Qgdm9pZCAqYnVmLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBzaXplX3QgYnVmc2l6ZSkKIHsKICAgICBzdHJ1Y3QgbWljcm9j b2RlX2FtZCAqbWNfYW1kOworICAgIHN0cnVjdCBtaWNyb2NvZGVfaGVhZGVyX2FtZCAqc2F2ZWQg PSBOVUxMOwogICAgIHN0cnVjdCBtaWNyb2NvZGVfcGF0Y2ggKnBhdGNoID0gTlVMTDsKLSAgICBz aXplX3Qgb2Zmc2V0ID0gMDsKKyAgICBzaXplX3Qgb2Zmc2V0ID0gMCwgc2F2ZWRfc2l6ZSA9IDA7 CiAgICAgaW50IGVycm9yID0gMDsKICAgICB1bnNpZ25lZCBpbnQgY3VycmVudF9jcHVfaWQ7CiAg ICAgdW5zaWduZWQgaW50IGVxdWl2X2NwdV9pZDsKQEAgLTU0MiwyOSArNTA1LDIxIEBAIHN0YXRp YyBzdHJ1Y3QgbWljcm9jb2RlX3BhdGNoICpjcHVfcmVxdWVzdF9taWNyb2NvZGUoY29uc3Qgdm9p ZCAqYnVmLAogICAgIHdoaWxlICggKGVycm9yID0gZ2V0X3Vjb2RlX2Zyb21fYnVmZmVyX2FtZCht Y19hbWQsIGJ1ZiwgYnVmc2l6ZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgJm9mZnNldCkpID09IDAgKQogICAgIHsKLSAgICAgICAgc3RydWN0IG1pY3Jv Y29kZV9wYXRjaCAqbmV3X3BhdGNoID0gYWxsb2NfbWljcm9jb2RlX3BhdGNoKG1jX2FtZCk7Ci0K LSAgICAgICAgaWYgKCBJU19FUlIobmV3X3BhdGNoKSApCi0gICAgICAgIHsKLSAgICAgICAgICAg IGVycm9yID0gUFRSX0VSUihuZXdfcGF0Y2gpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg IH0KLQogICAgICAgICAvKgotICAgICAgICAgKiBJZiB0aGUgbmV3IHBhdGNoIGNvdmVycyBjdXJy ZW50IENQVSwgY29tcGFyZSBwYXRjaGVzIGFuZCBzdG9yZSB0aGUKKyAgICAgICAgICogSWYgdGhl IG5ldyB1Y29kZSBjb3ZlcnMgY3VycmVudCBDUFUsIGNvbXBhcmUgdWNvZGVzIGFuZCBzdG9yZSB0 aGUKICAgICAgICAgICogb25lIHdpdGggaGlnaGVyIHJldmlzaW9uLgogICAgICAgICAgKi8KLSAg ICAgICAgaWYgKCAobWljcm9jb2RlX2ZpdHMobmV3X3BhdGNoLT5tY19hbWQpICE9IE1JU19VQ09E RSkgJiYKLSAgICAgICAgICAgICAoIXBhdGNoIHx8IChjb21wYXJlX3BhdGNoKG5ld19wYXRjaCwg cGF0Y2gpID09IE5FV19VQ09ERSkpICkKKyNkZWZpbmUgUkVWX0lEKG1wYikgKCgoc3RydWN0IG1p Y3JvY29kZV9oZWFkZXJfYW1kICopKG1wYikpLT5wcm9jZXNzb3JfcmV2X2lkKQorICAgICAgICBp ZiAoIChtaWNyb2NvZGVfZml0cyhtY19hbWQpICE9IE1JU19VQ09ERSkgJiYKKyAgICAgICAgICAg ICAoIXNhdmVkIHx8IChSRVZfSUQobWNfYW1kLT5tcGIpID4gUkVWX0lEKHNhdmVkKSkpICkKKyN1 bmRlZiBSRVZfSUQKICAgICAgICAgewotICAgICAgICAgICAgc3RydWN0IG1pY3JvY29kZV9wYXRj aCAqdG1wID0gcGF0Y2g7Ci0KLSAgICAgICAgICAgIHBhdGNoID0gbmV3X3BhdGNoOwotICAgICAg ICAgICAgbmV3X3BhdGNoID0gdG1wOworICAgICAgICAgICAgeGZyZWUoc2F2ZWQpOworICAgICAg ICAgICAgc2F2ZWQgPSBtY19hbWQtPm1wYjsKKyAgICAgICAgICAgIHNhdmVkX3NpemUgPSBtY19h bWQtPm1wYl9zaXplOwogICAgICAgICB9Ci0KLSAgICAgICAgaWYgKCBuZXdfcGF0Y2ggKQotICAg ICAgICAgICAgbWljcm9jb2RlX2ZyZWVfcGF0Y2gobmV3X3BhdGNoKTsKKyAgICAgICAgZWxzZQor ICAgICAgICAgICAgeGZyZWUobWNfYW1kLT5tcGIpOwogCiAgICAgICAgIGlmICggb2Zmc2V0ID49 IGJ1ZnNpemUgKQogICAgICAgICAgICAgYnJlYWs7CkBAIC01OTMsOSArNTQ4LDI1IEBAIHN0YXRp YyBzdHJ1Y3QgbWljcm9jb2RlX3BhdGNoICpjcHVfcmVxdWVzdF9taWNyb2NvZGUoY29uc3Qgdm9p ZCAqYnVmLAogICAgICAgICAgICAgICooY29uc3QgdWludDMyX3QgKikoYnVmICsgb2Zmc2V0KSA9 PSBVQ09ERV9NQUdJQyApCiAgICAgICAgICAgICBicmVhazsKICAgICB9Ci0gICAgeGZyZWUobWNf YW1kLT5tcGIpOwotICAgIHhmcmVlKG1jX2FtZC0+ZXF1aXZfY3B1X3RhYmxlKTsKLSAgICB4ZnJl ZShtY19hbWQpOworCisgICAgaWYgKCBzYXZlZCApCisgICAgeworICAgICAgICBtY19hbWQtPm1w YiA9IHNhdmVkOworICAgICAgICBtY19hbWQtPm1wYl9zaXplID0gc2F2ZWRfc2l6ZTsKKyAgICAg ICAgcGF0Y2ggPSB4bWFsbG9jKHN0cnVjdCBtaWNyb2NvZGVfcGF0Y2gpOworICAgICAgICBpZiAo IHBhdGNoICkKKyAgICAgICAgICAgIHBhdGNoLT5tY19hbWQgPSBtY19hbWQ7CisgICAgICAgIGVs c2UKKyAgICAgICAgeworICAgICAgICAgICAgZnJlZV9wYXRjaChtY19hbWQpOworICAgICAgICAg ICAgZXJyb3IgPSAtRU5PTUVNOworICAgICAgICB9CisgICAgfQorICAgIGVsc2UKKyAgICB7Cisg ICAgICAgIG1jX2FtZC0+bXBiID0gTlVMTDsKKyAgICAgICAgZnJlZV9wYXRjaChtY19hbWQpOwor ICAgIH0KIAogICBvdXQ6CiAgICAgaWYgKCBlcnJvciAmJiAhcGF0Y2ggKQpkaWZmIC0tZ2l0IGEv eGVuL2FyY2gveDg2L21pY3JvY29kZV9pbnRlbC5jIGIveGVuL2FyY2gveDg2L21pY3JvY29kZV9p bnRlbC5jCmluZGV4IDk2YjM4ZjguLmFlNTc1OWYgMTAwNjQ0Ci0tLSBhL3hlbi9hcmNoL3g4Ni9t aWNyb2NvZGVfaW50ZWwuYworKysgYi94ZW4vYXJjaC94ODYvbWljcm9jb2RlX2ludGVsLmMKQEAg LTI4MiwyNSArMjgyLDYgQEAgc3RhdGljIGVudW0gbWljcm9jb2RlX21hdGNoX3Jlc3VsdCBjb21w YXJlX3BhdGNoKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIE9MRF9VQ09ERTsKIH0KIAotc3RhdGljIHN0cnVjdCBtaWNyb2Nv ZGVfcGF0Y2ggKmFsbG9jX21pY3JvY29kZV9wYXRjaCgKLSAgICBjb25zdCBzdHJ1Y3QgbWljcm9j b2RlX2hlYWRlcl9pbnRlbCAqbWNfaGVhZGVyKQotewotICAgIHVuc2lnbmVkIGxvbmcgdG90YWxf c2l6ZSA9IGdldF90b3RhbHNpemUobWNfaGVhZGVyKTsKLSAgICB2b2lkICpuZXdfbWMgPSB4bWFs bG9jX2J5dGVzKHRvdGFsX3NpemUpOwotICAgIHN0cnVjdCBtaWNyb2NvZGVfcGF0Y2ggKm5ld19w YXRjaCA9IHhtYWxsb2Moc3RydWN0IG1pY3JvY29kZV9wYXRjaCk7Ci0KLSAgICBpZiAoICFuZXdf cGF0Y2ggfHwgIW5ld19tYyApCi0gICAgewotICAgICAgICB4ZnJlZShuZXdfcGF0Y2gpOwotICAg ICAgICB4ZnJlZShuZXdfbWMpOwotICAgICAgICByZXR1cm4gRVJSX1BUUigtRU5PTUVNKTsKLSAg ICB9Ci0gICAgbWVtY3B5KG5ld19tYywgbWNfaGVhZGVyLCB0b3RhbF9zaXplKTsKLSAgICBuZXdf cGF0Y2gtPm1jX2ludGVsID0gbmV3X21jOwotCi0gICAgcmV0dXJuIG5ld19wYXRjaDsKLX0KLQog c3RhdGljIGludCBhcHBseV9taWNyb2NvZGUoY29uc3Qgc3RydWN0IG1pY3JvY29kZV9wYXRjaCAq cGF0Y2gpCiB7CiAgICAgdW5zaWduZWQgbG9uZyBmbGFnczsKQEAgLTM3OSw0NyArMzYwLDQ3IEBA IHN0YXRpYyBzdHJ1Y3QgbWljcm9jb2RlX3BhdGNoICpjcHVfcmVxdWVzdF9taWNyb2NvZGUoY29u c3Qgdm9pZCAqYnVmLAogewogICAgIGxvbmcgb2Zmc2V0ID0gMDsKICAgICBpbnQgZXJyb3IgPSAw OwotICAgIHZvaWQgKm1jOworICAgIHN0cnVjdCBtaWNyb2NvZGVfaW50ZWwgKm1jLCAqc2F2ZWQg PSBOVUxMOwogICAgIHN0cnVjdCBtaWNyb2NvZGVfcGF0Y2ggKnBhdGNoID0gTlVMTDsKIAotICAg IHdoaWxlICggKG9mZnNldCA9IGdldF9uZXh0X3Vjb2RlX2Zyb21fYnVmZmVyKCZtYywgYnVmLCBz aXplLCBvZmZzZXQpKSA+IDAgKQorICAgIHdoaWxlICggKG9mZnNldCA9IGdldF9uZXh0X3Vjb2Rl X2Zyb21fYnVmZmVyKCh2b2lkICoqKSZtYywgYnVmLAorICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIHNpemUsIG9mZnNldCkpID4gMCApCiAgICAgewotICAg ICAgICBzdHJ1Y3QgbWljcm9jb2RlX3BhdGNoICpuZXdfcGF0Y2g7Ci0KICAgICAgICAgZXJyb3Ig PSBtaWNyb2NvZGVfc2FuaXR5X2NoZWNrKG1jKTsKICAgICAgICAgaWYgKCBlcnJvciApCi0gICAg ICAgICAgICBicmVhazsKLQotICAgICAgICBuZXdfcGF0Y2ggPSBhbGxvY19taWNyb2NvZGVfcGF0 Y2gobWMpOwotICAgICAgICBpZiAoIElTX0VSUihuZXdfcGF0Y2gpICkKICAgICAgICAgewotICAg ICAgICAgICAgZXJyb3IgPSBQVFJfRVJSKG5ld19wYXRjaCk7CisgICAgICAgICAgICB4ZnJlZSht Yyk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogCiAgICAgICAgIC8qCi0gICAgICAg ICAqIElmIHRoZSBuZXcgcGF0Y2ggY292ZXJzIGN1cnJlbnQgQ1BVLCBjb21wYXJlIHBhdGNoZXMg YW5kIHN0b3JlIHRoZQorICAgICAgICAgKiBJZiB0aGUgbmV3IHVwZGF0ZSBjb3ZlcnMgY3VycmVu dCBDUFUsIGNvbXBhcmUgdXBkYXRlcyBhbmQgc3RvcmUgdGhlCiAgICAgICAgICAqIG9uZSB3aXRo IGhpZ2hlciByZXZpc2lvbi4KICAgICAgICAgICovCi0gICAgICAgIGlmICggKG1pY3JvY29kZV91 cGRhdGVfbWF0Y2goJm5ld19wYXRjaC0+bWNfaW50ZWwtPmhkcikgIT0gTUlTX1VDT0RFKSAmJgot ICAgICAgICAgICAgICghcGF0Y2ggfHwgKGNvbXBhcmVfcGF0Y2gobmV3X3BhdGNoLCBwYXRjaCkg PT0gTkVXX1VDT0RFKSkgKQorICAgICAgICBpZiAoIChtaWNyb2NvZGVfdXBkYXRlX21hdGNoKCZt Yy0+aGRyKSAhPSBNSVNfVUNPREUpICYmCisgICAgICAgICAgICAgKCFzYXZlZCB8fCAobWMtPmhk ci5yZXYgPiBzYXZlZC0+aGRyLnJldikpICkKICAgICAgICAgewotICAgICAgICAgICAgc3RydWN0 IG1pY3JvY29kZV9wYXRjaCAqdG1wID0gcGF0Y2g7Ci0KLSAgICAgICAgICAgIHBhdGNoID0gbmV3 X3BhdGNoOwotICAgICAgICAgICAgbmV3X3BhdGNoID0gdG1wOworICAgICAgICAgICAgeGZyZWUo c2F2ZWQpOworICAgICAgICAgICAgc2F2ZWQgPSBtYzsKICAgICAgICAgfQotCi0gICAgICAgIGlm ICggbmV3X3BhdGNoICkKLSAgICAgICAgICAgIG1pY3JvY29kZV9mcmVlX3BhdGNoKG5ld19wYXRj aCk7Ci0KLSAgICAgICAgeGZyZWUobWMpOworICAgICAgICBlbHNlCisgICAgICAgICAgICB4ZnJl ZShtYyk7CiAgICAgfQotICAgIGlmICggb2Zmc2V0ID4gMCApCi0gICAgICAgIHhmcmVlKG1jKTsK ICAgICBpZiAoIG9mZnNldCA8IDAgKQogICAgICAgICBlcnJvciA9IG9mZnNldDsKIAorICAgIGlm ICggc2F2ZWQgKQorICAgIHsKKyAgICAgICAgcGF0Y2ggPSB4bWFsbG9jKHN0cnVjdCBtaWNyb2Nv ZGVfcGF0Y2gpOworICAgICAgICBpZiAoIHBhdGNoICkKKyAgICAgICAgICAgIHBhdGNoLT5tY19p bnRlbCA9IHNhdmVkOworICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIHhmcmVl KHNhdmVkKTsKKyAgICAgICAgICAgIGVycm9yID0gLUVOT01FTTsKKyAgICAgICAgfQorICAgIH0K KwogICAgIGlmICggZXJyb3IgJiYgIXBhdGNoICkKICAgICAgICAgcGF0Y2ggPSBFUlJfUFRSKGVy cm9yKTsKIAotLSAKMS44LjMuMQoKCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fClhlbi1kZXZlbCBtYWlsaW5nIGxpc3QKWGVuLWRldmVsQGxpc3RzLnhlbnBy b2plY3Qub3JnCmh0dHBzOi8vbGlzdHMueGVucHJvamVjdC5vcmcvbWFpbG1hbi9saXN0aW5mby94 ZW4tZGV2ZWw=