From owner-freebsd-net@freebsd.org Fri Jan 15 11:53:16 2016 Return-Path: Delivered-To: freebsd-net@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id C0D11A833FA for ; Fri, 15 Jan 2016 11:53:16 +0000 (UTC) (envelope-from boris.astardzhiev@gmail.com) Received: from mail-wm0-x236.google.com (mail-wm0-x236.google.com [IPv6:2a00:1450:400c:c09::236]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (Client CN "smtp.gmail.com", Issuer "Google Internet Authority G2" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 4D02C1DDB for ; Fri, 15 Jan 2016 11:53:16 +0000 (UTC) (envelope-from boris.astardzhiev@gmail.com) Received: by mail-wm0-x236.google.com with SMTP id f206so20871893wmf.0 for ; Fri, 15 Jan 2016 03:53:16 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=mime-version:in-reply-to:references:date:message-id:subject:from:to :cc:content-type; bh=YVV3UxMhAJ2E3sKvUvYid8rKjwABzYMLZEgPhpKJQ2U=; b=cPijprkkvG6cZX1dmugtX2GZKnoRFB/F+ssRymqX+URw47TECK0niTpQq5U8Zlt2pw CaoKzKTn6X8QD9YhfkqCnbRbPoibwwYKEp/NnJu+WZX+C0PNPm8OGAAKfXHvOlAg/QVS 47B75WW7RPGrO7drTVqMBYMQIrjqiCgJqaXaWqF0svyfASQ3h5lnR8cEdk9WwgN46FnR 8Ui2kH2kGypPZpsUflho0aUgX0swfrIbli9L92RRhH0457lx3yuuTZq4d6slcRc2RIy9 H8dkT3Yw7MULkC2NdxzXQJN0x1XEdI3fxxU3sGCOVvuGaMGIj7gWN1yIRk+o6oBpGaek 9qNw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20130820; h=x-gm-message-state:mime-version:in-reply-to:references:date :message-id:subject:from:to:cc:content-type; bh=YVV3UxMhAJ2E3sKvUvYid8rKjwABzYMLZEgPhpKJQ2U=; b=dNYzosEGaMTBUeGQ4UxbO8Kil5e4Pu0QcNcZLT2ramSoELGk/3iWtSxeGQK0j/wP3E z5AORlNZecsHelXPS4omG50YIOiGfWgsX4e0SRBsEftkvkduah7MPdMukzucTXFySTQ7 Pf84AZAPgCfEs276TXhk6aNTR5uQOrS8HGgXH+iZ44CWnYoHy1hhxVOs4oVuxVjeFuR5 WeG6wWaT7p08aRmkCPrUePABJ+5l6Kn7hUBqCwestdDvVCJD1tQ8PHT1V+UB9SvR4uj+ Z3k29FBcSeh/6JqemxDYC3zjzwV2+MIVkPmr4jRJfvQXxxhqbpHKZ8/D74n8fAZZKaeO MOnw== X-Gm-Message-State: AG10YOTlcHKmU71WrwCK6FBYAT9AwR3djsd1YrA30zMeg7jNb1FXfyTkBRKwikuRxaU3lvR4ZGYhgS1YO0dzlQ== MIME-Version: 1.0 X-Received: by 10.28.1.23 with SMTP id 23mr2805645wmb.37.1452858794808; Fri, 15 Jan 2016 03:53:14 -0800 (PST) Received: by 10.28.136.148 with HTTP; Fri, 15 Jan 2016 03:53:14 -0800 (PST) In-Reply-To: <20160113080349.GC72455@kib.kiev.ua> References: <20160107161213.GZ3625@kib.kiev.ua> <20160107192840.GF3625@kib.kiev.ua> <20160108172323.W1815@besplex.bde.org> <20160108075815.3243.qmail@f5-external.bushwire.net> <20160108204606.G2420@besplex.bde.org> <20160113080349.GC72455@kib.kiev.ua> Date: Fri, 15 Jan 2016 13:53:14 +0200 Message-ID: Subject: Re: Does FreeBSD have sendmmsg or recvmmsg system calls? From: Boris Astardzhiev To: Konstantin Belousov Cc: Adrian Chadd , Mark Delany , FreeBSD Net Content-Type: multipart/mixed; boundary=001a113d7c3e5fb30605295e0c90 X-Content-Filtered-By: Mailman/MimeDel 2.1.20 X-BeenThere: freebsd-net@freebsd.org X-Mailman-Version: 2.1.20 Precedence: list List-Id: Networking and TCP/IP with FreeBSD List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 15 Jan 2016 11:53:16 -0000 --001a113d7c3e5fb30605295e0c90 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: quoted-printable Hello, Thanks for the insightful comments. kb>Please find below. kb> kb> This implementation has some strangeness, like NOASM and PSEUDO in makefile, kb> which I cannot find a purpose for. I removed it but initially I thought it was necessary. kb>Big issue with the implementation is the interposing stuff, why do you kb> need it at all ? Is it to correctly handle cancellation, to not fall kb> into sleepable syscall when previous loop step was cancelled ? Yes. I initially thought it was better to use the interposing table. kb> If yes, you _can_ use pthread_testcancel(3) etc in libc. Libc provides kb> stubs for them with trivial implementation, which is reset to the real kb> one if libthr is loaded. Then you can simplify your patch significantly, kb> avoiding the need for interposing and writing the loops both in libc an= d kb> libthr. Got it. See patch. I think I removed the interposing stuff as suggested. I didn't know about the stubs. But how for instance pthread_testcancel() will cope with sleeping recvmmsg for example? I'm not sure about the cancellation stuff here. Probably my approach is not correct? I looked through lib/ for an example and only stumbled on lib/libc/gen/sem.c where pthread_testcancel() is used but again I'm not sure if I'm tackling it correctly in the calls. kb> BTW, do you have tests for the cancellation of the new functions ? Unfortunately no. Ideas and guidelines how to stress test the calls regarding functionality and especially cancellation? kb> Again, the patch lacks man page updates. I'll try to write some soon. Best regards, Boris Astardzhiev =E2=80=8B --001a113d7c3e5fb30605295e0c90 Content-Type: text/plain; charset=US-ASCII; name="sendrecvmmsg-libconly2.diff" Content-Disposition: attachment; filename="sendrecvmmsg-libconly2.diff" Content-Transfer-Encoding: base64 X-Attachment-Id: f_ijfm701z0 ZGlmZiAtLWdpdCBhL2xpYi9saWJjL2luY2x1ZGUvbmFtZXNwYWNlLmggYi9saWIvbGliYy9pbmNs dWRlL25hbWVzcGFjZS5oCmluZGV4IDczOWQ3YjEuLmM5NTgyOWUgMTAwNjQ0Ci0tLSBhL2xpYi9s aWJjL2luY2x1ZGUvbmFtZXNwYWNlLmgKKysrIGIvbGliL2xpYmMvaW5jbHVkZS9uYW1lc3BhY2Uu aApAQCAtMjA4LDYgKzIwOCw3IEBACiAjZGVmaW5lCQlyZWFkdgkJCQlfcmVhZHYKICNkZWZpbmUJ CXJlY3Zmcm9tCQkJX3JlY3Zmcm9tCiAjZGVmaW5lCQlyZWN2bXNnCQkJCV9yZWN2bXNnCisjZGVm aW5lCQlyZWN2bW1zZwkJCV9yZWN2bW1zZwogI2RlZmluZQkJc2VsZWN0CQkJCV9zZWxlY3QKICNk ZWZpbmUJCXNlbV9jbG9zZQkJCV9zZW1fY2xvc2UKICNkZWZpbmUJCXNlbV9kZXN0cm95CQkJX3Nl bV9kZXN0cm95CkBAIC0yMjAsNiArMjIxLDcgQEAKICNkZWZpbmUJCXNlbV91bmxpbmsJCQlfc2Vt X3VubGluawogI2RlZmluZQkJc2VtX3dhaXQJCQlfc2VtX3dhaXQKICNkZWZpbmUJCXNlbmRtc2cJ CQkJX3NlbmRtc2cKKyNkZWZpbmUJCXNlbmRtbXNnCQkJX3NlbmRtbXNnCiAjZGVmaW5lCQlzZW5k dG8JCQkJX3NlbmR0bwogI2RlZmluZQkJc2V0c29ja29wdAkJCV9zZXRzb2Nrb3B0CiAvKiNkZWZp bmUJCXNpZ2FjdGlvbgkJCV9zaWdhY3Rpb24qLwpkaWZmIC0tZ2l0IGEvbGliL2xpYmMvaW5jbHVk ZS91bi1uYW1lc3BhY2UuaCBiL2xpYi9saWJjL2luY2x1ZGUvdW4tbmFtZXNwYWNlLmgKaW5kZXgg ZjMxZmE3YS4uMDIzMzM0OCAxMDA2NDQKLS0tIGEvbGliL2xpYmMvaW5jbHVkZS91bi1uYW1lc3Bh Y2UuaAorKysgYi9saWIvbGliYy9pbmNsdWRlL3VuLW5hbWVzcGFjZS5oCkBAIC0xODksNiArMTg5 LDcgQEAKICN1bmRlZgkJcmVhZHYKICN1bmRlZgkJcmVjdmZyb20KICN1bmRlZgkJcmVjdm1zZwor I3VuZGVmCQlyZWN2bW1zZwogI3VuZGVmCQlzZWxlY3QKICN1bmRlZgkJc2VtX2Nsb3NlCiAjdW5k ZWYJCXNlbV9kZXN0cm95CkBAIC0yMDEsNiArMjAyLDcgQEAKICN1bmRlZgkJc2VtX3VubGluawog I3VuZGVmCQlzZW1fd2FpdAogI3VuZGVmCQlzZW5kbXNnCisjdW5kZWYJCXNlbmRtbXNnCiAjdW5k ZWYJCXNlbmR0bwogI3VuZGVmCQlzZXRzb2Nrb3B0CiAjdW5kZWYJCXNpZ2FjdGlvbgpkaWZmIC0t Z2l0IGEvbGliL2xpYmMvc3lzL01ha2VmaWxlLmluYyBiL2xpYi9saWJjL3N5cy9NYWtlZmlsZS5p bmMKaW5kZXggZTRmZTFiMi4uNWY4YjY5OSAxMDA2NDQKLS0tIGEvbGliL2xpYmMvc3lzL01ha2Vm aWxlLmluYworKysgYi9saWIvbGliYy9zeXMvTWFrZWZpbGUuaW5jCkBAIC0yOCw2ICsyOCw4IEBA IFNSQ1MrPSBmdXRpbWVucy5jIHV0aW1lbnNhdC5jCiBOT0FTTSs9IGZ1dGltZW5zLm8gdXRpbWVu c2F0Lm8KIFBTRVVETys9IF9mdXRpbWVucy5vIF91dGltZW5zYXQubwogCitTUkNTKz0gcmVjdm1t c2cuYyBzZW5kbW1zZy5jCisKIElOVEVSUE9TRUQgPSBcCiAJYWNjZXB0IFwKIAlhY2NlcHQ0IFwK ZGlmZiAtLWdpdCBhL2xpYi9saWJjL3N5cy9TeW1ib2wubWFwIGIvbGliL2xpYmMvc3lzL1N5bWJv bC5tYXAKaW5kZXggN2IzMjU3Yy4uNzI0ZTFiNCAxMDA2NDQKLS0tIGEvbGliL2xpYmMvc3lzL1N5 bWJvbC5tYXAKKysrIGIvbGliL2xpYmMvc3lzL1N5bWJvbC5tYXAKQEAgLTM5OSw2ICszOTksOCBA QCBGQlNEXzEuNCB7CiAJdXRpbWVuc2F0OwogCW51bWFfc2V0YWZmaW5pdHk7CiAJbnVtYV9nZXRh ZmZpbml0eTsKKwlzZW5kbW1zZzsKKwlyZWN2bW1zZzsKIH07CiAKIEZCU0Rwcml2YXRlXzEuMCB7 CkBAIC0xMDUxLDQgKzEwNTMsNiBAQCBGQlNEcHJpdmF0ZV8xLjAgewogCWdzc2Rfc3lzY2FsbDsK IAlfX2xpYmNfaW50ZXJwb3Npbmdfc2xvdDsKIAlfX2xpYmNfc2lnd2FpdDsKKwlfc2VuZG1tc2c7 CisJX3JlY3ZtbXNnOwogfTsKZGlmZiAtLWdpdCBhL2xpYi9saWJjL3N5cy9yZWN2bW1zZy5jIGIv bGliL2xpYmMvc3lzL3JlY3ZtbXNnLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw MC4uNzYzOTMwYwotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9saWJjL3N5cy9yZWN2bW1zZy5jCkBA IC0wLDAgKzEsNzcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMTYgQm9yaXMgQXN0YXJkemhp ZXYsIFNtYXJ0Y29tLUJ1bGdhcmlhIEFECisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg IG5vdGljZShzKSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz Y2xhaW1lciBhcworICogICAgdGhlIGZpcnN0IGxpbmVzIG9mIHRoaXMgZmlsZSB1bm1vZGlmaWVk IG90aGVyIHRoYW4gdGhlIHBvc3NpYmxlCisgKiAgICBhZGRpdGlvbiBvZiBvbmUgb3IgbW9yZSBj b3B5cmlnaHQgbm90aWNlcy4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UocyksIHRoaXMg bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KKyAqICAg IHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0 aGUKKyAqICAgIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE IEJZIFRIRSBDT1BZUklHSFQgSE9MREVSKFMpIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNT IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI RQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQg U0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIoUykgQkUKKyAqIExJQUJMRSBGT1IgQU5ZIERJUkVD VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNF UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVN RU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU QSwgT1IgUFJPRklUUzsgT1IKKyAqIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT RUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLAorICogV0hFVEhFUiBJTiBDT05UUkFD VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UKKyAqIE9S IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09G VFdBUkUsCisgKiBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN QUdFLgorICovCisKKyNpbmNsdWRlIDxzeXMvY2RlZnMuaD4KK19fRkJTRElEKCIkRnJlZUJTRCQi KTsKKworI2luY2x1ZGUgPGVycm5vLmg+CisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjaW5jbHVk ZSA8c3lzL3N5c2NhbGwuaD4KKyNpbmNsdWRlIDxzeXMvc29ja2V0Lmg+CisjaW5jbHVkZSA8cHRo cmVhZC5oPgorI2luY2x1ZGUgImxpYmNfcHJpdmF0ZS5oIgorCisjZGVmaW5lIFZMRU5fTUFYIDEw MjQKKworaW50CityZWN2bW1zZyhpbnQgcywgc3RydWN0IG1tc2doZHIgKm1zZ3ZlYywgdW5zaWdu ZWQgaW50IHZsZW4sIGludCBmbGFncykKK3sKKwlpbnQgaSwgcmV0LCByY3ZkOworCisJaWYgKHZs ZW4gPiBWTEVOX01BWCkKKwkJdmxlbiA9IFZMRU5fTUFYOworCisJcHRocmVhZF90ZXN0Y2FuY2Vs KCk7CisJcmN2ZCA9IDA7CisJZm9yIChpID0gMDsgaSA8IHZsZW47IGkrKykgeworCQllcnJubyA9 IDA7CisJCXJldCA9ICgoKGludCAoKikoaW50LCBjb25zdCBzdHJ1Y3QgbXNnaGRyICosIGludCkp CisJCSAgICBfX2xpYmNfaW50ZXJwb3NpbmdbSU5URVJQT1NfcmVjdm1zZ10pKHMsCisJCSAgICAg ICAgJm1zZ3ZlY1tpXS5tc2dfaGRyLCBmbGFncykpOworCQlpZiAocmV0IDwgMCB8fCBlcnJubyAh PSAwKSB7CisJCQlpZiAocmN2ZCAhPSAwKSB7CisJCQkJLyogV2UndmUgcmVjZWl2ZWQgbWVzc2Fn ZXMuIExldCBjYWxsZXIga25vdy4gKi8KKwkJCQllcnJubyA9IDA7CisJCQkJcHRocmVhZF90ZXN0 Y2FuY2VsKCk7CisJCQkJcmV0dXJuIChyY3ZkKTsKKwkJCX0KKwkJCXB0aHJlYWRfdGVzdGNhbmNl bCgpOworCQkJcmV0dXJuICgtMSk7CisJCX0KKworCQkvKiBTYXZlIHJlY2VpdmVkIGJ5dGVzICov CisJCW1zZ3ZlY1tpXS5tc2dfbGVuID0gcmV0OworCisJCXJjdmQrKzsKKwl9CisKKwlyZXR1cm4g KHJjdmQpOworfQorCisjdW5kZWYgVkxFTl9NQVgKZGlmZiAtLWdpdCBhL2xpYi9saWJjL3N5cy9z ZW5kbW1zZy5jIGIvbGliL2xpYmMvc3lzL3NlbmRtbXNnLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQK aW5kZXggMDAwMDAwMC4uYmFmYTliYwotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9saWJjL3N5cy9z ZW5kbW1zZy5jCkBAIC0wLDAgKzEsNzggQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMTYgQm9y aXMgQXN0YXJkemhpZXYsIFNtYXJ0Y29tLUJ1bGdhcmlhIEFECisgKiBBbGwgcmlnaHRzIHJlc2Vy dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5 cmlnaHQKKyAqICAgIG5vdGljZShzKSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm b2xsb3dpbmcgZGlzY2xhaW1lciBhcworICogICAgdGhlIGZpcnN0IGxpbmVzIG9mIHRoaXMgZmls ZSB1bm1vZGlmaWVkIG90aGVyIHRoYW4gdGhlIHBvc3NpYmxlCisgKiAgICBhZGRpdGlvbiBvZiBv bmUgb3IgbW9yZSBjb3B5cmlnaHQgbm90aWNlcy4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp Y2UocyksIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt ZXIgaW4KKyAqICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv dmlkZWQgd2l0aCB0aGUKKyAqICAgIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF IElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSKFMpIGBgQVMgSVMnJyBBTkQgQU5Z CisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ TUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAg SU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIoUykgQkUKKyAqIExJQUJMRSBG T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwg T1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg VE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT IE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IKKyAqIEJVU0lORVNTIElOVEVSUlVQVElPTikg SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLAorICogV0hFVEhF UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJ R0VOQ0UKKyAqIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF IE9GIFRISVMgU09GVFdBUkUsCisgKiBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ IE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlIDxzeXMvY2RlZnMuaD4KK19fRkJTRElE KCIkRnJlZUJTRCQiKTsKKworI2luY2x1ZGUgPGVycm5vLmg+CisjaW5jbHVkZSA8c3lzL3R5cGVz Lmg+CisjaW5jbHVkZSA8c3lzL3N5c2NhbGwuaD4KKyNpbmNsdWRlIDxzeXMvc29ja2V0Lmg+Cisj aW5jbHVkZSA8cHRocmVhZC5oPgorI2luY2x1ZGUgImxpYmNfcHJpdmF0ZS5oIgorCisjZGVmaW5l IFZMRU5fTUFYIDEwMjQKKworaW50CitzZW5kbW1zZyhpbnQgcywgc3RydWN0IG1tc2doZHIgKm1z Z3ZlYywgdW5zaWduZWQgaW50IHZsZW4sIGludCBmbGFncykKK3sKKwlpbnQgaSwgcmV0LCBzZW50 OworCisJaWYgKHZsZW4gPiBWTEVOX01BWCkKKwkJdmxlbiA9IFZMRU5fTUFYOworCisJcHRocmVh ZF90ZXN0Y2FuY2VsKCk7CisJc2VudCA9IDA7CisJZm9yIChpID0gMDsgaSA8IHZsZW47IGkrKykg eworCQllcnJubyA9IDA7CisJCXJldCA9ICgoKGludCAoKikoaW50LCBjb25zdCBzdHJ1Y3QgbXNn aGRyICosIGludCkpCisJCSAgICBfX2xpYmNfaW50ZXJwb3NpbmdbSU5URVJQT1Nfc2VuZG1zZ10p KHMsCisJCSAgICAgICAgJm1zZ3ZlY1tpXS5tc2dfaGRyLCBmbGFncykpOworCisJCWlmIChyZXQg PCAwIHx8IGVycm5vICE9IDApIHsKKwkJCWlmIChzZW50ICE9IDApIHsKKwkJCQkvKiBXZSBoYXZl IHNlbnQgbWVzc2FnZXMuIExldCBjYWxsZXIga25vdy4gKi8KKwkJCQllcnJubyA9IDA7CisJCQkJ cHRocmVhZF90ZXN0Y2FuY2VsKCk7CisJCQkJcmV0dXJuIChzZW50KTsKKwkJCX0KKwkJCXB0aHJl YWRfdGVzdGNhbmNlbCgpOworCQkJcmV0dXJuICgtMSk7CisJCX0KKworCQkvKiBTYXZlIHNlbnQg Ynl0ZXMgKi8KKwkJbXNndmVjW2ldLm1zZ19sZW4gPSByZXQ7CisKKwkJc2VudCsrOworCX0KKwor CXJldHVybiAoc2VudCk7Cit9CisKKyN1bmRlZiBWTEVOX01BWApkaWZmIC0tZ2l0IGEvc3lzL3N5 cy9zb2NrZXQuaCBiL3N5cy9zeXMvc29ja2V0LmgKaW5kZXggMThlMmRlMS4uNTA0MzEzZSAxMDA2 NDQKLS0tIGEvc3lzL3N5cy9zb2NrZXQuaAorKysgYi9zeXMvc3lzL3NvY2tldC5oCkBAIC01OTUs NiArNTk1LDE4IEBAIHN0cnVjdCBzZl9oZHRyIHsKICNlbmRpZiAvKiBfS0VSTkVMICovCiAjZW5k aWYgLyogX19CU0RfVklTSUJMRSAqLwogCisjaWZuZGVmIF9LRVJORUwKKyNpZmRlZiBfX0JTRF9W SVNJQkxFCisvKgorICogU2VuZC9yZWN2bW1zZyBzcGVjaWZpYyBzdHJ1Y3R1cmUocykKKyAqLwor c3RydWN0IG1tc2doZHIgeworCXN0cnVjdCBtc2doZHIJbXNnX2hkcjsJCS8qIG1lc3NhZ2UgaGVh ZGVyICovCisJdW5zaWduZWQgaW50CW1zZ19sZW47CQkvKiBtZXNzYWdlIGxlbmd0aCAgKi8KK307 CisjZW5kaWYgLyogX19CU0RfVklTSUJMRSAqLworI2VuZGlmIC8qICFfS0VSTkVMICovCisKICNp Zm5kZWYJX0tFUk5FTAogCiAjaW5jbHVkZSA8c3lzL2NkZWZzLmg+CkBAIC02MTUsMTEgKzYyNywx NyBAQCBpbnQJbGlzdGVuKGludCwgaW50KTsKIHNzaXplX3QJcmVjdihpbnQsIHZvaWQgKiwgc2l6 ZV90LCBpbnQpOwogc3NpemVfdAlyZWN2ZnJvbShpbnQsIHZvaWQgKiwgc2l6ZV90LCBpbnQsIHN0 cnVjdCBzb2NrYWRkciAqIF9fcmVzdHJpY3QsIHNvY2tsZW5fdCAqIF9fcmVzdHJpY3QpOwogc3Np emVfdAlyZWN2bXNnKGludCwgc3RydWN0IG1zZ2hkciAqLCBpbnQpOworI2lmIF9fQlNEX1ZJU0lC TEUKK2ludAlyZWN2bW1zZyhpbnQsIHN0cnVjdCBtbXNnaGRyICosIHVuc2lnbmVkIGludCwgaW50 KTsKKyNlbmRpZgogc3NpemVfdAlzZW5kKGludCwgY29uc3Qgdm9pZCAqLCBzaXplX3QsIGludCk7 CiBzc2l6ZV90CXNlbmR0byhpbnQsIGNvbnN0IHZvaWQgKiwKIAkgICAgc2l6ZV90LCBpbnQsIGNv bnN0IHN0cnVjdCBzb2NrYWRkciAqLCBzb2NrbGVuX3QpOwogc3NpemVfdAlzZW5kbXNnKGludCwg Y29uc3Qgc3RydWN0IG1zZ2hkciAqLCBpbnQpOwogI2lmIF9fQlNEX1ZJU0lCTEUKK2ludAlzZW5k bW1zZyhpbnQsIHN0cnVjdCBtbXNnaGRyICosIHVuc2lnbmVkIGludCwgaW50KTsKKyNlbmRpZgor I2lmIF9fQlNEX1ZJU0lCTEUKIGludAlzZW5kZmlsZShpbnQsIGludCwgb2ZmX3QsIHNpemVfdCwg c3RydWN0IHNmX2hkdHIgKiwgb2ZmX3QgKiwgaW50KTsKIGludAlzZXRmaWIoaW50KTsKICNlbmRp Zgo= --001a113d7c3e5fb30605295e0c90--