From mboxrd@z Thu Jan 1 00:00:00 1970 From: Konrad Rzeszutek Wilk Subject: [PATCH v4 13/34] libxc: Implementation of XEN_XSPLICE_op in libxc Date: Tue, 15 Mar 2016 13:56:35 -0400 Message-ID: <1458064616-23101-14-git-send-email-konrad.wilk@oracle.com> References: <1458064616-23101-1-git-send-email-konrad.wilk@oracle.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mail6.bemta14.messagelabs.com ([193.109.254.103]) by lists.xenproject.org with esmtp (Exim 4.84_2) (envelope-from ) id 1aftGg-0001Ag-UY for xen-devel@lists.xenproject.org; Tue, 15 Mar 2016 18:00:31 +0000 In-Reply-To: <1458064616-23101-1-git-send-email-konrad.wilk@oracle.com> List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Errors-To: xen-devel-bounces@lists.xen.org Sender: "Xen-devel" To: xen-devel@lists.xenproject.org, ross.lagerwall@citrix.com, konrad@kernel.org, andrew.cooper3@citrix.com, mpohlack@amazon.de, sasha.levin@oracle.com Cc: Wei Liu , Stefano Stabellini , Ian Jackson , Konrad Rzeszutek Wilk List-Id: xen-devel@lists.xenproject.org VGhlIHVuZGVybGF5aW5nIHRvb2xzdGFjayBjb2RlIHRvIGRvIHRoZSBiYXNpYwpvcGVyYXRpb25z IHdoZW4gdXNpbmcgdGhlIFhFTl9YU1BMSUNFX29wIHN5c2NhbGxzOgogLSB1cGxvYWQgdGhlIHBh eWxvYWQsCiAtIGdldCBzdGF0dXMgb2YgYW4gcGF5bG9hZCwKIC0gbGlzdCBhbGwgdGhlIHBheWxv YWRzLAogLSBhcHBseSwgY2hlY2ssIHJlcGxhY2UsIGFuZCByZXZlcnQgdGhlIHBheWxvYWQuCgpT aWduZWQtb2ZmLWJ5OiBLb25yYWQgUnplc3p1dGVrIFdpbGsgPGtvbnJhZC53aWxrQG9yYWNsZS5j b20+ClNpZ25lZC1vZmYtYnk6IFJvc3MgTGFnZXJ3YWxsIDxyb3NzLmxhZ2Vyd2FsbEBjaXRyaXgu Y29tPgoKLS0tCkNjOiBJYW4gSmFja3NvbiA8aWFuLmphY2tzb25AZXUuY2l0cml4LmNvbT4KQ2M6 IFN0ZWZhbm8gU3RhYmVsbGluaSA8c3RlZmFuby5zdGFiZWxsaW5pQGV1LmNpdHJpeC5jb20+CkNj OiBXZWkgTGl1IDx3ZWkubGl1MkBjaXRyaXguY29tPgoKdjI6IEFjdHVhbGx5IHNldCB6ZXJvIGZv ciB0aGUgX3BhZCBlbnRyaWVzLgp2MzogU3BsaXQgc3RhdHVzIGludG8gc3RhdGUgYW5kIGVycm9y IGNvZGUuCiAgICBBZGQgUkVQTEFDRSBhY3Rpb24uCnY0OiBVc2UgdGltZW91dCBhbmQgdXRpbGl6 ZSBwYWRzLgp2NTogVXBkYXRlIHBlciBXZWkncyByZXZpZXcuCnY2OiBVcGRhdGUgcGVyIFdlaSdz IHJldmlldy4Kdjc6IEV4dHJhIHNwYWNlIHNsaXBwZWQgaW4sIHJlbW92ZSBpdAotLS0KIHRvb2xz L2xpYnhjL2luY2x1ZGUveGVuY3RybC5oIHwgIDYyICsrKysrKysrCiB0b29scy9saWJ4Yy94Y19t aXNjLmMgICAgICAgICB8IDMzNyArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysr KysrKysKIDIgZmlsZXMgY2hhbmdlZCwgMzk5IGluc2VydGlvbnMoKykKCmRpZmYgLS1naXQgYS90 b29scy9saWJ4Yy9pbmNsdWRlL3hlbmN0cmwuaCBiL3Rvb2xzL2xpYnhjL2luY2x1ZGUveGVuY3Ry bC5oCmluZGV4IDM3OWRlMzAuLjJiOGEyZDcgMTAwNjQ0Ci0tLSBhL3Rvb2xzL2xpYnhjL2luY2x1 ZGUveGVuY3RybC5oCisrKyBiL3Rvb2xzL2xpYnhjL2luY2x1ZGUveGVuY3RybC5oCkBAIC0yNTUz LDYgKzI1NTMsNjggQEAgaW50IHhjX3Bzcl9jYXRfZ2V0X2wzX2luZm8oeGNfaW50ZXJmYWNlICp4 Y2gsIHVpbnQzMl90IHNvY2tldCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgKmNk cF9lbmFibGVkKTsKICNlbmRpZgogCitpbnQgeGNfeHNwbGljZV91cGxvYWQoeGNfaW50ZXJmYWNl ICp4Y2gsCisgICAgICAgICAgICAgICAgICAgICAgY2hhciAqbmFtZSwgdW5zaWduZWQgY2hhciAq cGF5bG9hZCwgdWludDMyX3Qgc2l6ZSk7CisKK2ludCB4Y194c3BsaWNlX2dldCh4Y19pbnRlcmZh Y2UgKnhjaCwKKyAgICAgICAgICAgICAgICAgICBjaGFyICpuYW1lLAorICAgICAgICAgICAgICAg ICAgIHhlbl94c3BsaWNlX3N0YXR1c190ICpzdGF0dXMpOworCisvKgorICogVGhlIGhlYXJ0IG9m IHRoaXMgZnVuY3Rpb24gaXMgdG8gZ2V0IGFuIGFycmF5IG9mIHhlbl94c3BsaWNlX3N0YXR1c190 LgorICoKKyAqIEhvd2V2ZXIgaXQgaXMgY29tcGxleCBiZWNhdXNlIGl0IGhhcyB0byBkZWFsIHdp dGggdGhlIGh5cGVydmlzb3IKKyAqIHJldHVybmluZyBzb21lIG9mIHRoZSByZXF1ZXN0ZWQgZGF0 YSBvciBkYXRhIGJlaW5nIHN0YWxlCisgKiAoYW5vdGhlciBoeXBlcmNhbGwgbWlnaHQgYWx0ZXIg dGhlIGxpc3QpLgorICoKKyAqIFRoZSBwYXJhbWV0ZXJzIHRoYXQgdGhlIGZ1bmN0aW9uIGV4cGVj dHMgdG8gY29udGFpbiBkYXRhIGZyb20KKyAqIHRoZSBoeXBlcnZpc29yIGFyZTogJ2luZm8nLCAn bmFtZScsIGFuZCAnbGVuJy4gVGhlICdkb25lJyBhbmQKKyAqICdsZWZ0JyBhcmUgYWxzbyB1cGRh dGVkIHdpdGggdGhlIG51bWJlciBvZiBlbnRyaWVzIGZpbGxlZCBvdXQKKyAqIGFuZCByZXNwZWN0 aXZlbHkgdGhlIG51bWJlciBvZiBlbnRyaWVzIGxlZnQgdG8gZ2V0IGZyb20gaHlwZXJ2aXNvci4K KyAqCisgKiBJdCBpcyBleHBlY3RlZCB0aGF0IHRoZSBjYWxsZXIgb2YgdGhpcyBmdW5jdGlvbiB3 aWxsIHRha2UgdGhlCisgKiAnbGVmdCcgYW5kIHVzZSB0aGUgdmFsdWUgZm9yICdzdGFydCcuIFRo aXMgd2F5IHdlIGhhdmUgYW4KKyAqIGN1cnNvciBpbiB0aGUgYXJyYXkuIE5vdGUgdGhhdCB0aGUg J2luZm8nLCduYW1lJywgYW5kICdsZW4nIHdpbGwKKyAqIGJlIHVwZGF0ZWQgYXQgdGhlIHN1YnNl cXVlbnQgY2FsbHMuCisgKgorICogVGhlICdtYXgnIGlzIHRvIGJlIHByb3ZpZGVkIGJ5IHRoZSBj YWxsZXIgd2l0aCB0aGUgbWF4aW11bQorICogbnVtYmVyIG9mIGVudHJpZXMgdGhhdCAnaW5mbycs ICduYW1lJywgYW5kICdsZW4nIGFycmF5cyBjYW4KKyAqIGJlIGZpbGxlZCB1cCB3aXRoLgorICoK KyAqIEVhY2ggZW50cnkgaW4gdGhlICduYW1lJyBhcnJheSBpcyBleHBlY3RlZCB0byBiZSBvZiBY RU5fWFNQTElDRV9OQU1FX1NJWkUKKyAqIGxlbmd0aC4KKyAqCisgKiBFYWNoIGVudHJ5IGluIHRo ZSAnaW5mbycgYXJyYXkgaXMgZXhwZWN0ZWQgdG8gYmUgb2YgeGVuX3hzcGxpY2Vfc3RhdHVzX3QK KyAqIHN0cnVjdHVyZSBzaXplLgorICoKKyAqIEVhY2ggZW50cnkgaW4gdGhlICdsZW4nIGFycmF5 IGlzIGV4cGVjdGVkIHRvIGJlIG9mIHVpbnQzMl90IHNpemUuCisgKgorICogVGhlIHJldHVybiB2 YWx1ZSBpcyB6ZXJvIGlmIHRoZSBoeXBlcmNhbGwgY29tcGxldGVkIHN1Y2Nlc3NmdWxseS4KKyAq IE5vdGUgdGhhdCB0aGUgcmV0dXJuIHZhbHVlIGlzIF9ub3RfIHRoZSBhbW91bnQgb2YgZW50cmll cyBmaWxsZWQKKyAqIG91dCAtIHRoYXQgaXMgc2F2ZWQgaW4gJ2RvbmUnLgorICoKKyAqIElmIHRo ZXJlIHdhcyBhbiBlcnJvciBwZXJmb3JtaW5nIHRoZSBvcGVyYXRpb24sIHRoZSByZXR1cm4gdmFs dWUKKyAqIHdpbGwgY29udGFpbiBhbiBuZWdhdGl2ZSAtRVhYIHR5cGUgdmFsdWUuIFRoZSAnZG9u ZScgYW5kICdsZWZ0JworICogd2lsbCBjb250YWluIHRoZSBudW1iZXIgb2YgZW50cmllcyB0aGF0 IGhhZCBiZWVuIHN1Y2Nlc2Z1bGx5CisgKiByZXRyaWV2ZWQgKGlmIGFueSkuCisgKi8KK2ludCB4 Y194c3BsaWNlX2xpc3QoeGNfaW50ZXJmYWNlICp4Y2gsIHVuc2lnbmVkIGludCBtYXgsIHVuc2ln bmVkIGludCBzdGFydCwKKyAgICAgICAgICAgICAgICAgICAgeGVuX3hzcGxpY2Vfc3RhdHVzX3Qg KmluZm8sIGNoYXIgKm5hbWUsCisgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90ICpsZW4sIHVu c2lnbmVkIGludCAqZG9uZSwKKyAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50ICpsZWZ0 KTsKKworLyoKKyAqIFRoZSBvcGVyYXRpb25zIGFyZSBhc3luY2hyb25vdXMgYW5kIHRoZSBoeXBl cnZpc29yIG1heSB0YWtlIGEgd2hpbGUKKyAqIHRvIGNvbXBsZXRlIHRoZW0uIFRoZSBgdGltZW91 dGAgb2ZmZXJzIGFuIG9wdGlvbiB0byBleHBpcmUgdGhlCisgKiBvcGVyYXRpb24gaWYgaXQgY291 bGQgbm90IGJlIGNvbXBsZXRlZCB3aXRoaW4gdGhlIHNwZWNpZmllZCB0aW1lLgorICogVmFsdWUg b2YgMCBtZWFucyBsZXQgaHlwZXJ2aXNvciBkZWNpZGUgdGhlIGJlc3QgdGltZW91dC4KKyAqLwor aW50IHhjX3hzcGxpY2VfYXBwbHkoeGNfaW50ZXJmYWNlICp4Y2gsIGNoYXIgKm5hbWUsIHVpbnQz Ml90IHRpbWVvdXQpOworaW50IHhjX3hzcGxpY2VfcmV2ZXJ0KHhjX2ludGVyZmFjZSAqeGNoLCBj aGFyICpuYW1lLCB1aW50MzJfdCB0aW1lb3V0KTsKK2ludCB4Y194c3BsaWNlX3VubG9hZCh4Y19p bnRlcmZhY2UgKnhjaCwgY2hhciAqbmFtZSwgdWludDMyX3QgdGltZW91dCk7CitpbnQgeGNfeHNw bGljZV9jaGVjayh4Y19pbnRlcmZhY2UgKnhjaCwgY2hhciAqbmFtZSwgdWludDMyX3QgdGltZW91 dCk7CitpbnQgeGNfeHNwbGljZV9yZXBsYWNlKHhjX2ludGVyZmFjZSAqeGNoLCBjaGFyICpuYW1l LCB1aW50MzJfdCB0aW1lb3V0KTsKKwogLyogQ29tcGF0IHNoaW1zICovCiAjaW5jbHVkZSAieGVu Y3RybF9jb21wYXQuaCIKIApkaWZmIC0tZ2l0IGEvdG9vbHMvbGlieGMveGNfbWlzYy5jIGIvdG9v bHMvbGlieGMveGNfbWlzYy5jCmluZGV4IDEyNDUzN2IuLjNmNjJiYzcgMTAwNjQ0Ci0tLSBhL3Rv b2xzL2xpYnhjL3hjX21pc2MuYworKysgYi90b29scy9saWJ4Yy94Y19taXNjLmMKQEAgLTY5Myw2 ICs2OTMsMzQzIEBAIGludCB4Y19odm1faW5qZWN0X3RyYXAoCiAgICAgcmV0dXJuIHJjOwogfQog CitpbnQgeGNfeHNwbGljZV91cGxvYWQoeGNfaW50ZXJmYWNlICp4Y2gsCisgICAgICAgICAgICAg ICAgICAgICAgY2hhciAqbmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFy ICpwYXlsb2FkLAorICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IHNpemUpCit7CisgICAg aW50IHJjOworICAgIERFQ0xBUkVfU1lTQ1RMOworICAgIERFQ0xBUkVfSFlQRVJDQUxMX0JVRkZF UihjaGFyLCBsb2NhbCk7CisgICAgREVDTEFSRV9IWVBFUkNBTExfQk9VTkNFKG5hbWUsIDAgLyog bGF0ZXIgKi8sIFhDX0hZUEVSQ0FMTF9CVUZGRVJfQk9VTkNFX0lOKTsKKyAgICB4ZW5feHNwbGlj ZV9uYW1lX3QgZGVmX25hbWUgPSB7IC5wYWQgPSB7IDAsIDAsIDAgfSB9OworCisgICAgaWYgKCAh bmFtZSB8fCAhcGF5bG9hZCApCisgICAgICAgIHJldHVybiAtMTsKKworICAgIGRlZl9uYW1lLnNp emUgPSBzdHJsZW4obmFtZSk7CisgICAgaWYgKCBkZWZfbmFtZS5zaXplID4gWEVOX1hTUExJQ0Vf TkFNRV9TSVpFICkKKyAgICAgICAgcmV0dXJuIC0xOworCisgICAgSFlQRVJDQUxMX0JPVU5DRV9T RVRfU0laRShuYW1lLCBkZWZfbmFtZS5zaXplKTsKKworICAgIGlmICggeGNfaHlwZXJjYWxsX2Jv dW5jZV9wcmUoeGNoLCBuYW1lKSApCisgICAgICAgIHJldHVybiAtMTsKKworICAgIGxvY2FsID0g eGNfaHlwZXJjYWxsX2J1ZmZlcl9hbGxvYyh4Y2gsIGxvY2FsLCBzaXplKTsKKyAgICBpZiAoICFs b2NhbCApCisgICAgeworICAgICAgICB4Y19oeXBlcmNhbGxfYm91bmNlX3Bvc3QoeGNoLCBuYW1l KTsKKyAgICAgICAgcmV0dXJuIC0xOworICAgIH0KKyAgICBtZW1jcHkobG9jYWwsIHBheWxvYWQs IHNpemUpOworCisgICAgc3lzY3RsLmNtZCA9IFhFTl9TWVNDVExfeHNwbGljZV9vcDsKKyAgICBz eXNjdGwudS54c3BsaWNlLmNtZCA9IFhFTl9TWVNDVExfWFNQTElDRV9VUExPQUQ7CisgICAgc3lz Y3RsLnUueHNwbGljZS5wYWQgPSAwOworICAgIHN5c2N0bC51LnhzcGxpY2UudS51cGxvYWQuc2l6 ZSA9IHNpemU7CisgICAgc2V0X3hlbl9ndWVzdF9oYW5kbGUoc3lzY3RsLnUueHNwbGljZS51LnVw bG9hZC5wYXlsb2FkLCBsb2NhbCk7CisKKyAgICBzeXNjdGwudS54c3BsaWNlLnUudXBsb2FkLm5h bWUgPSBkZWZfbmFtZTsKKyAgICBzZXRfeGVuX2d1ZXN0X2hhbmRsZShzeXNjdGwudS54c3BsaWNl LnUudXBsb2FkLm5hbWUubmFtZSwgbmFtZSk7CisKKyAgICByYyA9IGRvX3N5c2N0bCh4Y2gsICZz eXNjdGwpOworCisgICAgeGNfaHlwZXJjYWxsX2J1ZmZlcl9mcmVlKHhjaCwgbG9jYWwpOworICAg IHhjX2h5cGVyY2FsbF9ib3VuY2VfcG9zdCh4Y2gsIG5hbWUpOworCisgICAgcmV0dXJuIHJjOwor fQorCitpbnQgeGNfeHNwbGljZV9nZXQoeGNfaW50ZXJmYWNlICp4Y2gsCisgICAgICAgICAgICAg ICAgICAgY2hhciAqbmFtZSwKKyAgICAgICAgICAgICAgICAgICB4ZW5feHNwbGljZV9zdGF0dXNf dCAqc3RhdHVzKQoreworICAgIGludCByYzsKKyAgICBERUNMQVJFX1NZU0NUTDsKKyAgICBERUNM QVJFX0hZUEVSQ0FMTF9CT1VOQ0UobmFtZSwgMCAvKmFkanVzdCBsYXRlciAqLywgWENfSFlQRVJD QUxMX0JVRkZFUl9CT1VOQ0VfSU4pOworICAgIHhlbl94c3BsaWNlX25hbWVfdCBkZWZfbmFtZSA9 IHsgLnBhZCA9IHsgMCwgMCwgMCB9IH07CisKKyAgICBpZiAoICFuYW1lICkKKyAgICAgICAgcmV0 dXJuIC0xOworCisgICAgZGVmX25hbWUuc2l6ZSA9IHN0cmxlbihuYW1lKTsKKyAgICBpZiAoIGRl Zl9uYW1lLnNpemUgPiBYRU5fWFNQTElDRV9OQU1FX1NJWkUgKQorICAgICAgICByZXR1cm4gLTE7 CisKKyAgICBIWVBFUkNBTExfQk9VTkNFX1NFVF9TSVpFKG5hbWUsIGRlZl9uYW1lLnNpemUpOwor CisgICAgaWYgKCB4Y19oeXBlcmNhbGxfYm91bmNlX3ByZSh4Y2gsIG5hbWUpICkKKyAgICAgICAg cmV0dXJuIC0xOworCisgICAgc3lzY3RsLmNtZCA9IFhFTl9TWVNDVExfeHNwbGljZV9vcDsKKyAg ICBzeXNjdGwudS54c3BsaWNlLmNtZCA9IFhFTl9TWVNDVExfWFNQTElDRV9HRVQ7CisgICAgc3lz Y3RsLnUueHNwbGljZS5wYWQgPSAwOworCisgICAgc3lzY3RsLnUueHNwbGljZS51LmdldC5zdGF0 dXMuc3RhdGUgPSAwOworICAgIHN5c2N0bC51LnhzcGxpY2UudS5nZXQuc3RhdHVzLnJjID0gMDsK KworICAgIHN5c2N0bC51LnhzcGxpY2UudS5nZXQubmFtZSA9IGRlZl9uYW1lOworICAgIHNldF94 ZW5fZ3Vlc3RfaGFuZGxlKHN5c2N0bC51LnhzcGxpY2UudS5nZXQubmFtZS5uYW1lLCBuYW1lKTsK KworICAgIHJjID0gZG9fc3lzY3RsKHhjaCwgJnN5c2N0bCk7CisKKyAgICB4Y19oeXBlcmNhbGxf Ym91bmNlX3Bvc3QoeGNoLCBuYW1lKTsKKworICAgIG1lbWNweShzdGF0dXMsICZzeXNjdGwudS54 c3BsaWNlLnUuZ2V0LnN0YXR1cywgc2l6ZW9mKCpzdGF0dXMpKTsKKworICAgIHJldHVybiByYzsK K30KKworLyoKKyAqIFRoZSBoZWFydCBvZiB0aGlzIGZ1bmN0aW9uIGlzIHRvIGdldCBhbiBhcnJh eSBvZiB4ZW5feHNwbGljZV9zdGF0dXNfdC4KKyAqCisgKiBIb3dldmVyIGl0IGlzIGNvbXBsZXgg YmVjYXVzZSBpdCBoYXMgdG8gZGVhbCB3aXRoIHRoZSBoeXBlcnZpc29yCisgKiByZXR1cm5pbmcg c29tZSBvZiB0aGUgcmVxdWVzdGVkIGRhdGEgb3IgZGF0YSBiZWluZyBzdGFsZQorICogKGFub3Ro ZXIgaHlwZXJjYWxsIG1pZ2h0IGFsdGVyIHRoZSBsaXN0KS4KKyAqCisgKiBUaGUgcGFyYW1ldGVy cyB0aGF0IHRoZSBmdW5jdGlvbiBleHBlY3RzIHRvIGNvbnRhaW4gZGF0YSBmcm9tCisgKiB0aGUg aHlwZXJ2aXNvciBhcmU6ICdpbmZvJywgJ25hbWUnLCBhbmQgJ2xlbicuIFRoZSAnZG9uZScgYW5k CisgKiAnbGVmdCcgYXJlIGFsc28gdXBkYXRlZCB3aXRoIHRoZSBudW1iZXIgb2YgZW50cmllcyBm aWxsZWQgb3V0CisgKiBhbmQgcmVzcGVjdGl2ZWx5IHRoZSBudW1iZXIgb2YgZW50cmllcyBsZWZ0 IHRvIGdldCBmcm9tIGh5cGVydmlzb3IuCisgKgorICogSXQgaXMgZXhwZWN0ZWQgdGhhdCB0aGUg Y2FsbGVyIG9mIHRoaXMgZnVuY3Rpb24gd2lsbCB0YWtlIHRoZQorICogJ2xlZnQnIGFuZCB1c2Ug dGhlIHZhbHVlIGZvciAnc3RhcnQnLiBUaGlzIHdheSB3ZSBoYXZlIGFuCisgKiBjdXJzb3IgaW4g dGhlIGFycmF5LiBOb3RlIHRoYXQgdGhlICdpbmZvJywnbmFtZScsIGFuZCAnbGVuJyB3aWxsCisg KiBiZSB1cGRhdGVkIGF0IHRoZSBzdWJzZXF1ZW50IGNhbGxzLgorICoKKyAqIFRoZSAnbWF4JyBp cyB0byBiZSBwcm92aWRlZCBieSB0aGUgY2FsbGVyIHdpdGggdGhlIG1heGltdW0KKyAqIG51bWJl ciBvZiBlbnRyaWVzIHRoYXQgJ2luZm8nLCAnbmFtZScsIGFuZCAnbGVuJyBhcnJheXMgY2FuCisg KiBiZSBmaWxsZWQgdXAgd2l0aC4KKyAqCisgKiBFYWNoIGVudHJ5IGluIHRoZSAnbmFtZScgYXJy YXkgaXMgZXhwZWN0ZWQgdG8gYmUgb2YgWEVOX1hTUExJQ0VfTkFNRV9TSVpFCisgKiBsZW5ndGgu CisgKgorICogRWFjaCBlbnRyeSBpbiB0aGUgJ2luZm8nIGFycmF5IGlzIGV4cGVjdGVkIHRvIGJl IG9mIHhlbl94c3BsaWNlX3N0YXR1c190CisgKiBzdHJ1Y3R1cmUgc2l6ZS4KKyAqCisgKiBFYWNo IGVudHJ5IGluIHRoZSAnbGVuJyBhcnJheSBpcyBleHBlY3RlZCB0byBiZSBvZiB1aW50MzJfdCBz aXplLgorICoKKyAqIFRoZSByZXR1cm4gdmFsdWUgaXMgemVybyBpZiB0aGUgaHlwZXJjYWxsIGNv bXBsZXRlZCBzdWNjZXNzZnVsbHkuCisgKiBOb3RlIHRoYXQgdGhlIHJldHVybiB2YWx1ZSBpcyBf bm90XyB0aGUgYW1vdW50IG9mIGVudHJpZXMgZmlsbGVkCisgKiBvdXQgLSB0aGF0IGlzIHNhdmVk IGluICdkb25lJy4KKyAqCisgKiBJZiB0aGVyZSB3YXMgYW4gZXJyb3IgcGVyZm9ybWluZyB0aGUg b3BlcmF0aW9uLCB0aGUgcmV0dXJuIHZhbHVlCisgKiB3aWxsIGNvbnRhaW4gYW4gbmVnYXRpdmUg LUVYWCB0eXBlIHZhbHVlLiBUaGUgJ2RvbmUnIGFuZCAnbGVmdCcKKyAqIHdpbGwgY29udGFpbiB0 aGUgbnVtYmVyIG9mIGVudHJpZXMgdGhhdCBoYWQgYmVlbiBzdWNjZXNmdWxseQorICogcmV0cmll dmVkIChpZiBhbnkpLgorICovCitpbnQgeGNfeHNwbGljZV9saXN0KHhjX2ludGVyZmFjZSAqeGNo LCB1bnNpZ25lZCBpbnQgbWF4LCB1bnNpZ25lZCBpbnQgc3RhcnQsCisgICAgICAgICAgICAgICAg ICAgIHhlbl94c3BsaWNlX3N0YXR1c190ICppbmZvLAorICAgICAgICAgICAgICAgICAgICBjaGFy ICpuYW1lLCB1aW50MzJfdCAqbGVuLAorICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQg KmRvbmUsCisgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCAqbGVmdCkKK3sKKyAgICBp bnQgcmM7CisgICAgREVDTEFSRV9TWVNDVEw7CisgICAgLyogVGhlIHNpemVzIGFyZSBhZGp1c3Rl ZCBsYXRlciAtIGhlbmNlIHplcm8uICovCisgICAgREVDTEFSRV9IWVBFUkNBTExfQk9VTkNFKGlu Zm8sIDAsIFhDX0hZUEVSQ0FMTF9CVUZGRVJfQk9VTkNFX09VVCk7CisgICAgREVDTEFSRV9IWVBF UkNBTExfQk9VTkNFKG5hbWUsIDAsIFhDX0hZUEVSQ0FMTF9CVUZGRVJfQk9VTkNFX09VVCk7Cisg ICAgREVDTEFSRV9IWVBFUkNBTExfQk9VTkNFKGxlbiwgMCwgWENfSFlQRVJDQUxMX0JVRkZFUl9C T1VOQ0VfT1VUKTsKKyAgICB1aW50MzJfdCBtYXhfYmF0Y2hfc3osIG5yOworICAgIHVpbnQzMl90 IHZlcnNpb24gPSAwLCByZXRyaWVzID0gMDsKKyAgICB1aW50MzJfdCBhZGp1c3QgPSAwOworICAg IHNzaXplX3Qgc3o7CisKKyAgICBpZiAoICFtYXggfHwgIWluZm8gfHwgIW5hbWUgfHwgIWxlbiAp CisgICAgICAgIHJldHVybiAtMTsKKworICAgIHN5c2N0bC5jbWQgPSBYRU5fU1lTQ1RMX3hzcGxp Y2Vfb3A7CisgICAgc3lzY3RsLnUueHNwbGljZS5jbWQgPSBYRU5fU1lTQ1RMX1hTUExJQ0VfTElT VDsKKyAgICBzeXNjdGwudS54c3BsaWNlLnBhZCA9IDA7CisgICAgc3lzY3RsLnUueHNwbGljZS51 Lmxpc3QudmVyc2lvbiA9IDA7CisgICAgc3lzY3RsLnUueHNwbGljZS51Lmxpc3QuaWR4ID0gc3Rh cnQ7CisgICAgc3lzY3RsLnUueHNwbGljZS51Lmxpc3QucGFkID0gMDsKKworICAgIG1heF9iYXRj aF9zeiA9IG1heDsKKyAgICAvKiBDb252aWVuY2UgdmFsdWUuICovCisgICAgc3ogPSBzaXplb2Yo Km5hbWUpICogWEVOX1hTUExJQ0VfTkFNRV9TSVpFOworICAgICpkb25lID0gMDsKKyAgICAqbGVm dCA9IDA7CisgICAgZG8geworICAgICAgICAvKgorICAgICAgICAgKiBUaGUgZmlyc3QgdGltZSB3 ZSBnbyBpbiB0aGlzIGxvb3Agb3VyICdtYXgnIG1heSBiZSBiaWdnZXIKKyAgICAgICAgICogdGhh biB3aGF0IHRoZSBoeXBlcnZpc29yIGlzIGNvbWZvcnRhYmxlIHdpdGggLSBoZW5jZSB0aGUgZmly c3QKKyAgICAgICAgICogY291cGxlIG9mIGxvb3BzIG1heSBhZGp1c3QgdGhlIG51bWJlciBvZiBl bnRyaWVzIHdlIHdpbGwKKyAgICAgICAgICogd2FudCBmaWxsZWQgKHRyYWNrZWQgYnkgJ25yJyku CisgICAgICAgICAqCisgICAgICAgICAqIE4uQi4gVGhpcyBpcyBhIGRvIHsgfSB3aGlsZSBsb29w IGFuZCB0aGUgcmlnaHQgaGFuZCBzaWRlIG9mCisgICAgICAgICAqIHRoZSBjb25kaXRpb25hbCB3 aGVuIGFkanVzdGluZyB3aWxsIGV2YWx1YXRlIHRvIGZhbHNlIChhcworICAgICAgICAgKiAqbGVm dCBpcyBzZXQgdG8gemVybyBiZWZvcmUgdGhlIGxvb3AuIEhlbmNlIHdlIG5lZWQgdGhpcworICAg ICAgICAgKiBhZGp1c3QgLSBldmVuIGlmIHdlIHJlc2V0IGl0IGF0IHRoZSBzdGFydCBvZiB0aGUg bG9vcC4KKyAgICAgICAgICovCisgICAgICAgIGlmICggYWRqdXN0ICkKKyAgICAgICAgICAgIGFk anVzdCA9IDA7IC8qIFVzZWQgd2hlbiBhZGp1c3RpbmcgdGhlICdtYXhfYmF0Y2hfc3onIG9yICdy ZXRyaWVzJy4gKi8KKworICAgICAgICBuciA9IG1pbihtYXggLSAqZG9uZSwgbWF4X2JhdGNoX3N6 KTsKKworICAgICAgICBzeXNjdGwudS54c3BsaWNlLnUubGlzdC5uciA9IG5yOworICAgICAgICAv KiBGaXggdGhlIHNpemUgKG1heSB2YXJ5IGJldHdlZW4gaHlwZXJjYWxscykuICovCisgICAgICAg IEhZUEVSQ0FMTF9CT1VOQ0VfU0VUX1NJWkUoaW5mbywgbnIgKiBzaXplb2YoKmluZm8pKTsKKyAg ICAgICAgSFlQRVJDQUxMX0JPVU5DRV9TRVRfU0laRShuYW1lLCBuciAqIG5yKTsKKyAgICAgICAg SFlQRVJDQUxMX0JPVU5DRV9TRVRfU0laRShsZW4sIG5yICogc2l6ZW9mKCpsZW4pKTsKKyAgICAg ICAgLyogTW92ZSB0aGUgcG9pbnRlciB0byBwcm9wZXIgb2Zmc2V0IGludG8gJ2luZm8nLiAqLwor ICAgICAgICAoSFlQRVJDQUxMX0JVRkZFUihpbmZvKSktPnVidWYgPSBpbmZvICsgKmRvbmU7Cisg ICAgICAgIChIWVBFUkNBTExfQlVGRkVSKG5hbWUpKS0+dWJ1ZiA9IG5hbWUgKyAoc3ogKiAqZG9u ZSk7CisgICAgICAgIChIWVBFUkNBTExfQlVGRkVSKGxlbikpLT51YnVmID0gbGVuICsgKmRvbmU7 CisgICAgICAgIC8qIEFsbG9jYXRlIG1lbW9yeS4gKi8KKyAgICAgICAgcmMgPSB4Y19oeXBlcmNh bGxfYm91bmNlX3ByZSh4Y2gsIGluZm8pOworICAgICAgICBpZiAoIHJjICkKKyAgICAgICAgICAg IGJyZWFrOworCisgICAgICAgIHJjID0geGNfaHlwZXJjYWxsX2JvdW5jZV9wcmUoeGNoLCBuYW1l KTsKKyAgICAgICAgaWYgKCByYyApCisgICAgICAgICAgICBicmVhazsKKworICAgICAgICByYyA9 IHhjX2h5cGVyY2FsbF9ib3VuY2VfcHJlKHhjaCwgbGVuKTsKKyAgICAgICAgaWYgKCByYyApCisg ICAgICAgICAgICBicmVhazsKKworICAgICAgICBzZXRfeGVuX2d1ZXN0X2hhbmRsZShzeXNjdGwu dS54c3BsaWNlLnUubGlzdC5zdGF0dXMsIGluZm8pOworICAgICAgICBzZXRfeGVuX2d1ZXN0X2hh bmRsZShzeXNjdGwudS54c3BsaWNlLnUubGlzdC5uYW1lLCBuYW1lKTsKKyAgICAgICAgc2V0X3hl bl9ndWVzdF9oYW5kbGUoc3lzY3RsLnUueHNwbGljZS51Lmxpc3QubGVuLCBsZW4pOworCisgICAg ICAgIHJjID0gZG9fc3lzY3RsKHhjaCwgJnN5c2N0bCk7CisgICAgICAgIC8qCisgICAgICAgICAq IEZyb20gaGVyZSBvbiB3ZSBNVVNUIGNhbGwgeGNfaHlwZXJjYWxsX2JvdW5jZS4gSWYgcmMgPCAw IHdlCisgICAgICAgICAqIGVuZCB1cCBkb2luZyBpdCAob3V0c2lkZSB0aGUgbG9vcCksIHNvIHVz aW5nIGEgYnJlYWsgaXMgT0suCisgICAgICAgICAqLworICAgICAgICBpZiAoIHJjIDwgMCAmJiBl cnJubyA9PSBFMkJJRyApCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmICggbWF4X2JhdGNoX3N6 IDw9IDEgKQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgbWF4X2JhdGNoX3N6 ID4+PSAxOworICAgICAgICAgICAgYWRqdXN0ID0gMTsgLyogRm9yIHRoZSBsb29wIGNvbmRpdGlv bmFsIHRvIGxldCB1cyBsb29wIGFnYWluLiAqLworICAgICAgICAgICAgLyogTm8gbWVtb3J5IGxl YWtzISAqLworICAgICAgICAgICAgeGNfaHlwZXJjYWxsX2JvdW5jZV9wb3N0KHhjaCwgaW5mbyk7 CisgICAgICAgICAgICB4Y19oeXBlcmNhbGxfYm91bmNlX3Bvc3QoeGNoLCBuYW1lKTsKKyAgICAg ICAgICAgIHhjX2h5cGVyY2FsbF9ib3VuY2VfcG9zdCh4Y2gsIGxlbik7CisgICAgICAgICAgICBj b250aW51ZTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIGlmICggcmMgPCAwICkgLyogRm9yIGFs bCBvdGhlciBlcnJvcnMgd2UgYmFpbCBvdXQuICovCisgICAgICAgICAgICBicmVhazsKKworICAg ICAgICBpZiAoICF2ZXJzaW9uICkKKyAgICAgICAgICAgIHZlcnNpb24gPSBzeXNjdGwudS54c3Bs aWNlLnUubGlzdC52ZXJzaW9uOworCisgICAgICAgIGlmICggc3lzY3RsLnUueHNwbGljZS51Lmxp c3QudmVyc2lvbiAhPSB2ZXJzaW9uICkKKyAgICAgICAgeworICAgICAgICAgICAgLyogV2UgY291 bGQgbWFrZSB0aGlzIGNvbmZpZ3VyYWJsZSBhcyBwYXJhbWV0ZXI/ICovCisgICAgICAgICAgICBp ZiAoIHJldHJpZXMrKyA+IDMgKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJjID0g LTE7CisgICAgICAgICAgICAgICAgZXJybm8gPSBFQlVTWTsKKyAgICAgICAgICAgICAgICBicmVh azsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgICpkb25lID0gMDsgLyogUmV0cnkgZnJvbSBz Y3JhdGNoLiAqLworICAgICAgICAgICAgdmVyc2lvbiA9IHN5c2N0bC51LnhzcGxpY2UudS5saXN0 LnZlcnNpb247CisgICAgICAgICAgICBhZGp1c3QgPSAxOyAvKiBBbmQgbWFrZSBzdXJlIHdlIGNv bnRpbnVlIGluIHRoZSBsb29wLiAqLworICAgICAgICAgICAgLyogTm8gbWVtb3J5IGxlYWtzLiAq LworICAgICAgICAgICAgeGNfaHlwZXJjYWxsX2JvdW5jZV9wb3N0KHhjaCwgaW5mbyk7CisgICAg ICAgICAgICB4Y19oeXBlcmNhbGxfYm91bmNlX3Bvc3QoeGNoLCBuYW1lKTsKKyAgICAgICAgICAg IHhjX2h5cGVyY2FsbF9ib3VuY2VfcG9zdCh4Y2gsIGxlbik7CisgICAgICAgICAgICBjb250aW51 ZTsKKyAgICAgICAgfQorCisgICAgICAgIC8qIFdlIHNob3VsZCBuZXZlciBoaXQgdGhpcywgYnV0 IGp1c3QgaW4gY2FzZS4gKi8KKyAgICAgICAgaWYgKCByYyA+IG5yICkKKyAgICAgICAgeworICAg ICAgICAgICAgZXJybm8gPSBFT1ZFUkZMT1c7IC8qIE92ZXJmbG93ISAqLworICAgICAgICAgICAg cmMgPSAtMTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgICpsZWZ0ID0g c3lzY3RsLnUueHNwbGljZS51Lmxpc3QubnI7IC8qIFRvdGFsIHJlbWFpbmluZyBjb3VudC4gKi8K KyAgICAgICAgLyogQ29weSBvbmx5IHVwICdyYycgb2YgZGF0YScgLSB3ZSBjb3VsZCBhZGQgJ21p bihyYyxucikgaWYgZGVzaXJlZC4gKi8KKyAgICAgICAgSFlQRVJDQUxMX0JPVU5DRV9TRVRfU0la RShpbmZvLCAocmMgKiBzaXplb2YoKmluZm8pKSk7CisgICAgICAgIEhZUEVSQ0FMTF9CT1VOQ0Vf U0VUX1NJWkUobmFtZSwgKHJjICogc3opKTsKKyAgICAgICAgSFlQRVJDQUxMX0JPVU5DRV9TRVRf U0laRShsZW4sIChyYyAqIHNpemVvZigqbGVuKSkpOworICAgICAgICAvKiBCb3VuY2UgdGhlIGRh dGEgYW5kIGZyZWUgdGhlIGJvdW5jZSBidWZmZXIuICovCisgICAgICAgIHhjX2h5cGVyY2FsbF9i b3VuY2VfcG9zdCh4Y2gsIGluZm8pOworICAgICAgICB4Y19oeXBlcmNhbGxfYm91bmNlX3Bvc3Qo eGNoLCBuYW1lKTsKKyAgICAgICAgeGNfaHlwZXJjYWxsX2JvdW5jZV9wb3N0KHhjaCwgbGVuKTsK KyAgICAgICAgLyogQW5kIHVwZGF0ZSBob3cgbWFueSBlbGVtZW50cyBvZiBpbmZvIHdlIGhhdmUg Y29waWVkIGludG8uICovCisgICAgICAgICpkb25lICs9IHJjOworICAgICAgICAvKiBVcGRhdGUg aWR4LiAqLworICAgICAgICBzeXNjdGwudS54c3BsaWNlLnUubGlzdC5pZHggPSAqZG9uZTsKKyAg ICB9IHdoaWxlICggYWRqdXN0IHx8ICgqZG9uZSA8IG1heCAmJiAqbGVmdCAhPSAwKSApOworCisg ICAgaWYgKCByYyA8IDAgKQorICAgIHsKKyAgICAgICAgeGNfaHlwZXJjYWxsX2JvdW5jZV9wb3N0 KHhjaCwgbGVuKTsKKyAgICAgICAgeGNfaHlwZXJjYWxsX2JvdW5jZV9wb3N0KHhjaCwgbmFtZSk7 CisgICAgICAgIHhjX2h5cGVyY2FsbF9ib3VuY2VfcG9zdCh4Y2gsIGluZm8pOworICAgIH0KKwor ICAgIHJldHVybiByYyA+IDAgPyAwIDogcmM7Cit9CisKK3N0YXRpYyBpbnQgX3hjX3hzcGxpY2Vf YWN0aW9uKHhjX2ludGVyZmFjZSAqeGNoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg Y2hhciAqbmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBh Y3Rpb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCB0aW1lb3V0KQor eworICAgIGludCByYzsKKyAgICBERUNMQVJFX1NZU0NUTDsKKyAgICAvKiBUaGUgc2l6ZSBpcyBm aWd1cmVkIG91dCB3aGVuIHdlIHN0cmxlbihuYW1lKSAqLworICAgIERFQ0xBUkVfSFlQRVJDQUxM X0JPVU5DRShuYW1lLCAwLCBYQ19IWVBFUkNBTExfQlVGRkVSX0JPVU5DRV9JTik7CisgICAgeGVu X3hzcGxpY2VfbmFtZV90IGRlZl9uYW1lID0geyAucGFkID0geyAwLCAwLCAwIH0gfTsKKworICAg IGRlZl9uYW1lLnNpemUgPSBzdHJsZW4obmFtZSk7CisKKyAgICBpZiAoIGRlZl9uYW1lLnNpemUg PiBYRU5fWFNQTElDRV9OQU1FX1NJWkUgKQorICAgICAgICByZXR1cm4gLTE7CisKKyAgICBIWVBF UkNBTExfQk9VTkNFX1NFVF9TSVpFKG5hbWUsIGRlZl9uYW1lLnNpemUpOworCisgICAgaWYgKCB4 Y19oeXBlcmNhbGxfYm91bmNlX3ByZSh4Y2gsIG5hbWUpICkKKyAgICAgICAgcmV0dXJuIC0xOwor CisgICAgc3lzY3RsLmNtZCA9IFhFTl9TWVNDVExfeHNwbGljZV9vcDsKKyAgICBzeXNjdGwudS54 c3BsaWNlLmNtZCA9IFhFTl9TWVNDVExfWFNQTElDRV9BQ1RJT047CisgICAgc3lzY3RsLnUueHNw bGljZS5wYWQgPSAwOworICAgIHN5c2N0bC51LnhzcGxpY2UudS5hY3Rpb24uY21kID0gYWN0aW9u OworICAgIHN5c2N0bC51LnhzcGxpY2UudS5hY3Rpb24udGltZW91dCA9IHRpbWVvdXQ7CisKKyAg ICBzeXNjdGwudS54c3BsaWNlLnUuYWN0aW9uLm5hbWUgPSBkZWZfbmFtZTsKKyAgICBzZXRfeGVu X2d1ZXN0X2hhbmRsZShzeXNjdGwudS54c3BsaWNlLnUuYWN0aW9uLm5hbWUubmFtZSwgbmFtZSk7 CisKKyAgICByYyA9IGRvX3N5c2N0bCh4Y2gsICZzeXNjdGwpOworCisgICAgeGNfaHlwZXJjYWxs X2JvdW5jZV9wb3N0KHhjaCwgbmFtZSk7CisKKyAgICByZXR1cm4gcmM7Cit9CisKK2ludCB4Y194 c3BsaWNlX2FwcGx5KHhjX2ludGVyZmFjZSAqeGNoLCBjaGFyICpuYW1lLCB1aW50MzJfdCB0aW1l b3V0KQoreworICAgIHJldHVybiBfeGNfeHNwbGljZV9hY3Rpb24oeGNoLCBuYW1lLCBYU1BMSUNF X0FDVElPTl9BUFBMWSwgdGltZW91dCk7Cit9CisKK2ludCB4Y194c3BsaWNlX3JldmVydCh4Y19p bnRlcmZhY2UgKnhjaCwgY2hhciAqbmFtZSwgdWludDMyX3QgdGltZW91dCkKK3sKKyAgICByZXR1 cm4gX3hjX3hzcGxpY2VfYWN0aW9uKHhjaCwgbmFtZSwgWFNQTElDRV9BQ1RJT05fUkVWRVJULCB0 aW1lb3V0KTsKK30KKworaW50IHhjX3hzcGxpY2VfdW5sb2FkKHhjX2ludGVyZmFjZSAqeGNoLCBj aGFyICpuYW1lLCB1aW50MzJfdCB0aW1lb3V0KQoreworICAgIHJldHVybiBfeGNfeHNwbGljZV9h Y3Rpb24oeGNoLCBuYW1lLCBYU1BMSUNFX0FDVElPTl9VTkxPQUQsIHRpbWVvdXQpOworfQorCitp bnQgeGNfeHNwbGljZV9jaGVjayh4Y19pbnRlcmZhY2UgKnhjaCwgY2hhciAqbmFtZSwgdWludDMy X3QgdGltZW91dCkKK3sKKyAgICByZXR1cm4gX3hjX3hzcGxpY2VfYWN0aW9uKHhjaCwgbmFtZSwg WFNQTElDRV9BQ1RJT05fQ0hFQ0ssIHRpbWVvdXQpOworfQorCitpbnQgeGNfeHNwbGljZV9yZXBs YWNlKHhjX2ludGVyZmFjZSAqeGNoLCBjaGFyICpuYW1lLCB1aW50MzJfdCB0aW1lb3V0KQorewor ICAgIHJldHVybiBfeGNfeHNwbGljZV9hY3Rpb24oeGNoLCBuYW1lLCBYU1BMSUNFX0FDVElPTl9S RVBMQUNFLCB0aW1lb3V0KTsKK30KKwogLyoKICAqIExvY2FsIHZhcmlhYmxlczoKICAqIG1vZGU6 IEMKLS0gCjIuNS4wCgoKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX18KWGVuLWRldmVsIG1haWxpbmcgbGlzdApYZW4tZGV2ZWxAbGlzdHMueGVuLm9yZwpodHRw Oi8vbGlzdHMueGVuLm9yZy94ZW4tZGV2ZWwK