From owner-freebsd-transport@freebsd.org Tue Feb 2 00:59:32 2016 Return-Path: Delivered-To: freebsd-transport@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 83193A9775D for ; Tue, 2 Feb 2016 00:59:32 +0000 (UTC) (envelope-from yongmincho82@gmail.com) Received: from mailman.ysv.freebsd.org (mailman.ysv.freebsd.org [IPv6:2001:1900:2254:206a::50:5]) by mx1.freebsd.org (Postfix) with ESMTP id 645EF994 for ; Tue, 2 Feb 2016 00:59:32 +0000 (UTC) (envelope-from yongmincho82@gmail.com) Received: by mailman.ysv.freebsd.org (Postfix) id 6048FA9775C; Tue, 2 Feb 2016 00:59:32 +0000 (UTC) Delivered-To: transport@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 5FD57A9775B for ; Tue, 2 Feb 2016 00:59:32 +0000 (UTC) (envelope-from yongmincho82@gmail.com) Received: from mail-pf0-x22a.google.com (mail-pf0-x22a.google.com [IPv6:2607:f8b0:400e:c00::22a]) (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 33660993 for ; Tue, 2 Feb 2016 00:59:32 +0000 (UTC) (envelope-from yongmincho82@gmail.com) Received: by mail-pf0-x22a.google.com with SMTP id 65so92902287pfd.2 for ; Mon, 01 Feb 2016 16:59:32 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=date:from:to:cc:subject:message-id:references:mime-version :content-type:content-disposition:in-reply-to:user-agent; bh=pq8o1onQMiyA9bqqBGx5STwaAj1WTt6dGDLROQovjRc=; b=TpuVvAHmB1SRCotj4+K9EtknROZxqMRJTZ89B9ssWQ0Q8fnPyDP9GCPl9wvLsJhFD1 yZqUNM00BWYw2IdRBqQXwvdXPehoMK7252R9Sn5Zq/SrIVvufGar60n6uTYgITW4g+cG RmV6rETPzJa6S3E9bRk45vJUI2m0PXEnhJyFsw+IIpN4DuCWw7ezgEuVdbiS5FoSMycT Z9ZCBB/3Vo61jSxJC8qWB3iFFeYKQ4uZsoX9ogpXBwZpcLVrnYTIfSOYQRwAD3gWFgnf hCaNMGvoNFGqaJ5N2GJ3R0d6t18WVNgHXCuobgk1NXQfpYlHT9rJk54tY0NwTE7LLIJp dqiw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20130820; h=x-gm-message-state:date:from:to:cc:subject:message-id:references :mime-version:content-type:content-disposition:in-reply-to :user-agent; bh=pq8o1onQMiyA9bqqBGx5STwaAj1WTt6dGDLROQovjRc=; b=mbklEuLdTPyCHSDwnMHJWfWESzS3qnoYgWCFvjXzYM6APH6A1rAyCS2cwud1PV12vv EjQER/HfRls66xuJIZy3P5yJSAsSWP8zZwBKjYfH3Etvqj7zzteMFagJTBKMWS6NMv/q 1zCRnfJd9aWp6AM8Yq5Khl2FFezLLWH95jNt/4FUnshhKrMTOODuYEjIaMWbuW5f7jL2 WynzBwka9guPFxdWSsuzQcHTA6tBPdtUIWckfuJY3FJj2IBlWdeLQWSA37aJB/HhSjDL BUdQA0FUPpOGKb/uxy+POM+ATXPqgHDUwUONeZqZ5evMAuCDAvl8X9hG5gao3xjfzgWG E7qg== X-Gm-Message-State: AG10YOSwUWagpErWYXK/B5mb8WBGDDARuYGmSqC0pLWMa4kyUlS/uEMWF85XLK2CbHfDfQ== X-Received: by 10.98.12.133 with SMTP id 5mr16498485pfm.20.1454374771693; Mon, 01 Feb 2016 16:59:31 -0800 (PST) Received: from yongmincho-All-Series ([106.247.248.2]) by smtp.gmail.com with ESMTPSA id 68sm45856015pfa.78.2016.02.01.16.59.30 (version=TLS1_2 cipher=AES128-SHA bits=128/128); Mon, 01 Feb 2016 16:59:31 -0800 (PST) Date: Tue, 2 Feb 2016 09:59:40 +0900 From: Yongmin Cho To: hiren panchasara Cc: transport@freebsd.org Subject: Re: Restarting Idle Connections Message-ID: <20160202005939.GA27558@yongmincho-All-Series> References: <20160129043817.GA9865@yongmincho-All-Series> <20160129215121.GJ33155@strugglingcoder.info> <20160129215850.GK33155@strugglingcoder.info> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20160129215850.GK33155@strugglingcoder.info> User-Agent: Mutt/1.5.21 (2010-09-15) X-BeenThere: freebsd-transport@freebsd.org X-Mailman-Version: 2.1.20 Precedence: list List-Id: Discussions of transport level network protocols in FreeBSD List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 02 Feb 2016 00:59:32 -0000 I think, This implementation is right. Thank you for the quick reply. :-) On Fri, Jan 29, 2016 at 01:58:50PM -0800, hiren panchasara wrote: > On 01/29/16 at 01:51P, hiren panchasara wrote: > > On 01/29/16 at 01:38P, Yongmin Cho wrote: > > > Hi, all. > > > > > > I have an opinion about net.inet.tcp.initcwnd_segments. > > > You know, snd_cwnd is restarted transmission after a long idle > > > period(Current RTO). > > > And, All of congestion control algorithm is using newreno_after_idle > > > function after a long idle period. > > > But, The newreno_after_idle function is not using initcwnd_segments. > > > I think, The initcwnd_segments should be used in newreno_after_idle > > > function, If the newreno_after_idle is called. > > > I referred to rfc6928. > > > > > > Please check my opinion. > > > > You are absolutely right. We (FreeBSD) adopted initcwnd to be 10 > > segments but never bothered to update newreno_after_idle() function to > > reflect that in calculating cwnd after idle period. Though the comments > > in that function clearly says: > > "The restart window is the initial window or the last CWND, whichever is > > smaller." > > > > I think we should make following change to accommodate it: > > > > diff --git a/sys/netinet/cc/cc_newreno.c b/sys/netinet/cc/cc_newreno.c > > index 97ec35f..5210a45 100644 > > --- a/sys/netinet/cc/cc_newreno.c > > +++ b/sys/netinet/cc/cc_newreno.c > > @@ -166,6 +166,10 @@ newreno_after_idle(struct cc_var *ccv) > > * > > * See RFC5681 Section 4.1. "Restarting Idle Connections". > > */ > > + if (V_tcp_initcwnd_segments) > > + rw = min(V_tcp_initcwnd_segments * CCV(ccv, t_maxseg), > > + max(2 * CCV(ccv, t_maxseg), > > + V_tcp_initcwnd_segments * 1460)); > - if (V_tcp_do_rfc3390) > + else if (V_tcp_do_rfc3390) > > But you get the idea. :-) > > Cheers, > Hiren > > rw = min(4 * CCV(ccv, t_maxseg), > > max(2 * CCV(ccv, t_maxseg), 4380)); > > > > Any inputs? > > > > Cheers, > > Hiren > > > -----BEGIN PGP SIGNATURE----- > > Version: GnuPG v2 > > > > iQF8BAABCgBmBQJWq97WXxSAAAAAAC4AKGlzc3Vlci1mcHJAbm90YXRpb25zLm9w > > ZW5wZ3AuZmlmdGhob3JzZW1hbi5uZXRBNEUyMEZBMUQ4Nzg4RjNGMTdFNjZGMDI4 > > QjkyNTBFMTU2M0VERkU1AAoJEIuSUOFWPt/lf38H/2mwyoYYc0ag1MVE1uzhZ0rL > > K2KTnjZnXFuAw6FLgmUtgNw1ykWD2IjhTmNmzTw03KPmQuKj+FyZUHg78hu4kA/l > > CbaiIO+1EHw9+aT+2yzZgK5yZLdTIF873sBoCdPWUP826WLjhPuxVox0CPOWzhw1 > > XuoSOLYZjsTGysdoMA3AyLOB+ESEC4V1Blf5SocdJPDF0y1Cpes3E6HuXxfix3ee > > kj9bKCZL9jU8DAGZHdT9WwF8qfxqRjzhlOUtzY+3pBxglzXPzlhaxS0mGX/W23Jr > > MHS9NleAh6M0Ot5M8X8WlXxvwqQdfssKAB3m9JIoTxldbqPRjKOhKALcoG8pqHo= > > =TCcb > > -----END PGP SIGNATURE----- > From owner-freebsd-transport@freebsd.org Tue Feb 2 19:35:02 2016 Return-Path: Delivered-To: freebsd-transport@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 D05E5A992EE for ; Tue, 2 Feb 2016 19:35:02 +0000 (UTC) (envelope-from hiren@strugglingcoder.info) Received: from mailman.ysv.freebsd.org (mailman.ysv.freebsd.org [IPv6:2001:1900:2254:206a::50:5]) by mx1.freebsd.org (Postfix) with ESMTP id BCEBE1AE5 for ; Tue, 2 Feb 2016 19:35:02 +0000 (UTC) (envelope-from hiren@strugglingcoder.info) Received: by mailman.ysv.freebsd.org (Postfix) id BA8A3A992ED; Tue, 2 Feb 2016 19:35:02 +0000 (UTC) Delivered-To: transport@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 BA13CA992EB for ; Tue, 2 Feb 2016 19:35:02 +0000 (UTC) (envelope-from hiren@strugglingcoder.info) Received: from mail.strugglingcoder.info (strugglingcoder.info [65.19.130.35]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client CN "mail.strugglingcoder.info", Issuer "mail.strugglingcoder.info" (not verified)) by mx1.freebsd.org (Postfix) with ESMTPS id AB3BF1AE4 for ; Tue, 2 Feb 2016 19:35:02 +0000 (UTC) (envelope-from hiren@strugglingcoder.info) Received: from localhost (unknown [10.1.1.3]) (Authenticated sender: hiren@strugglingcoder.info) by mail.strugglingcoder.info (Postfix) with ESMTPA id 97C0BB165; Tue, 2 Feb 2016 11:34:56 -0800 (PST) Date: Tue, 2 Feb 2016 11:34:56 -0800 From: hiren panchasara To: Yongmin Cho Cc: transport@freebsd.org Subject: Re: Restarting Idle Connections Message-ID: <20160202193456.GN33155@strugglingcoder.info> References: <20160129043817.GA9865@yongmincho-All-Series> <20160129215121.GJ33155@strugglingcoder.info> <20160129215850.GK33155@strugglingcoder.info> <20160202005939.GA27558@yongmincho-All-Series> MIME-Version: 1.0 Content-Type: multipart/signed; micalg=pgp-sha512; protocol="application/pgp-signature"; boundary="jdM5ZcN/ZcXXVwZs" Content-Disposition: inline In-Reply-To: <20160202005939.GA27558@yongmincho-All-Series> User-Agent: Mutt/1.5.23 (2014-03-12) X-BeenThere: freebsd-transport@freebsd.org X-Mailman-Version: 2.1.20 Precedence: list List-Id: Discussions of transport level network protocols in FreeBSD List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 02 Feb 2016 19:35:02 -0000 --jdM5ZcN/ZcXXVwZs Content-Type: text/plain; charset=us-ascii Content-Disposition: inline On 02/02/16 at 09:59P, Yongmin Cho wrote: > I think, This implementation is right. > Thank you for the quick reply. :-) Yeah but we need to fix initcwnd the right way. https://reviews.freebsd.org/D5124 I am about to start another thread on this mailing list about it. Cheers, Hiren --jdM5ZcN/ZcXXVwZs Content-Type: application/pgp-signature -----BEGIN PGP SIGNATURE----- Version: GnuPG v2 iQF8BAABCgBmBQJWsQTdXxSAAAAAAC4AKGlzc3Vlci1mcHJAbm90YXRpb25zLm9w ZW5wZ3AuZmlmdGhob3JzZW1hbi5uZXRBNEUyMEZBMUQ4Nzg4RjNGMTdFNjZGMDI4 QjkyNTBFMTU2M0VERkU1AAoJEIuSUOFWPt/lZZUH/2LIjUy/IqrOnDY6Y43k5gGg BEr99k7y1NgEqkCxgfRFAg8wfgHP63T4IASpQnH41Dq0UBxzSUW0u+YhgfDX9N9J yaKGEmMA80fvagoOgid3JBSAr3p4FB49LVmngj3DWP9g1lA5hJvh1qTSJ/Lsouzn ve7em+nFkIhIEJhQCu/XGvFx+diQJTmXRCdCJidzE0S07zIWmp4rdzqBQ13tSCLM kW+M78fm0f/SmWCKWZFcEa09oprvHcn70fByTDIRa40y72yfJiILKnsMLzs/FYzf 19D0glZT+M/WujR9we7ZdPEbMpODjVyRFT49csznMg7dZQNvhhjPt3WwwplB7V0= =xSBi -----END PGP SIGNATURE----- --jdM5ZcN/ZcXXVwZs-- From owner-freebsd-transport@freebsd.org Tue Feb 2 23:12:08 2016 Return-Path: Delivered-To: freebsd-transport@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 1E07FA99F97 for ; Tue, 2 Feb 2016 23:12:08 +0000 (UTC) (envelope-from hiren@strugglingcoder.info) Received: from mailman.ysv.freebsd.org (mailman.ysv.freebsd.org [IPv6:2001:1900:2254:206a::50:5]) by mx1.freebsd.org (Postfix) with ESMTP id 0E72CB23 for ; Tue, 2 Feb 2016 23:12:08 +0000 (UTC) (envelope-from hiren@strugglingcoder.info) Received: by mailman.ysv.freebsd.org (Postfix) id 0BF64A99F96; Tue, 2 Feb 2016 23:12:08 +0000 (UTC) Delivered-To: transport@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 0B8C8A99F95 for ; Tue, 2 Feb 2016 23:12:08 +0000 (UTC) (envelope-from hiren@strugglingcoder.info) Received: from mail.strugglingcoder.info (strugglingcoder.info [65.19.130.35]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client CN "mail.strugglingcoder.info", Issuer "mail.strugglingcoder.info" (not verified)) by mx1.freebsd.org (Postfix) with ESMTPS id 012EAB21 for ; Tue, 2 Feb 2016 23:12:07 +0000 (UTC) (envelope-from hiren@strugglingcoder.info) Received: from localhost (unknown [10.1.1.3]) (Authenticated sender: hiren@strugglingcoder.info) by mail.strugglingcoder.info (Postfix) with ESMTPA id 088A3BEC4 for ; Tue, 2 Feb 2016 15:12:07 -0800 (PST) Date: Tue, 2 Feb 2016 15:12:06 -0800 From: hiren panchasara To: transport@FreeBSD.org Subject: Rework initial congestion window calculation Message-ID: <20160202231206.GO33155@strugglingcoder.info> MIME-Version: 1.0 Content-Type: multipart/signed; micalg=pgp-sha512; protocol="application/pgp-signature"; boundary="rQ7Ovc9/RBrrr0/1" Content-Disposition: inline User-Agent: Mutt/1.5.23 (2014-03-12) X-BeenThere: freebsd-transport@freebsd.org X-Mailman-Version: 2.1.20 Precedence: list List-Id: Discussions of transport level network protocols in FreeBSD List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 02 Feb 2016 23:12:08 -0000 --rQ7Ovc9/RBrrr0/1 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline https://reviews.freebsd.org/D5173 Please take a look at this. I'd like to discuss this in upcoming hangout. Cheers, Hiren --rQ7Ovc9/RBrrr0/1 Content-Type: application/pgp-signature -----BEGIN PGP SIGNATURE----- Version: GnuPG v2 iQF8BAABCgBmBQJWsTfEXxSAAAAAAC4AKGlzc3Vlci1mcHJAbm90YXRpb25zLm9w ZW5wZ3AuZmlmdGhob3JzZW1hbi5uZXRBNEUyMEZBMUQ4Nzg4RjNGMTdFNjZGMDI4 QjkyNTBFMTU2M0VERkU1AAoJEIuSUOFWPt/lW68IAIflRlVh8461KABHCIA1dEL8 z7D3/gexLvnQu/S7zJDqGEl6DrPOb0142Yvr5wwMTpEujf2R9+7LrmIV5ef82ap8 g5fDlKXT0KbmZo4NwOMNzWYnpt1/U+nNiy9Qrny07hmal4b66/jJmWPlVh7oFyz7 DCIG5Unje4NzYWyj0kcKEoH24WMCTi+FyDL/omh99gBNK+eb2RSFyjaQiycNy5Az vsZoPmKbnrRgQ1ePJQM1ByPVH93S2/mP/i+kCrjiCW9KHNeI2RBjLhlEgls/KImh 7t70XoYcfrGrsv27gR2asNUWVl1XekTe1Y+jm9fqVIH9mZFDhAOOs8Eu2+o9tDU= =Fcmn -----END PGP SIGNATURE----- --rQ7Ovc9/RBrrr0/1-- From owner-freebsd-transport@freebsd.org Wed Feb 3 16:02:55 2016 Return-Path: Delivered-To: freebsd-transport@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 11FCAA9AAED for ; Wed, 3 Feb 2016 16:02:55 +0000 (UTC) (envelope-from daemon-user@freebsd.org) Received: from mailman.ysv.freebsd.org (mailman.ysv.freebsd.org [IPv6:2001:1900:2254:206a::50:5]) by mx1.freebsd.org (Postfix) with ESMTP id F00D31148 for ; Wed, 3 Feb 2016 16:02:54 +0000 (UTC) (envelope-from daemon-user@freebsd.org) Received: by mailman.ysv.freebsd.org (Postfix) id E4BC3A9AAEC; Wed, 3 Feb 2016 16:02:54 +0000 (UTC) Delivered-To: transport@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 E4588A9AAEB for ; Wed, 3 Feb 2016 16:02:54 +0000 (UTC) (envelope-from daemon-user@freebsd.org) Received: from phabric-backend.rbsd.freebsd.org (unknown [IPv6:2607:fc50:2000:101::1bb:73]) by mx1.freebsd.org (Postfix) with ESMTP id D25CF113E for ; Wed, 3 Feb 2016 16:02:54 +0000 (UTC) (envelope-from daemon-user@freebsd.org) Received: by phabric-backend.rbsd.freebsd.org (Postfix, from userid 1346) id C96951064DA; Wed, 3 Feb 2016 16:02:54 +0000 (UTC) Date: Wed, 3 Feb 2016 16:02:54 +0000 To: transport@freebsd.org From: "hiren (hiren panchasara)" Reply-to: D5173+526+09ddc7091802360d@reviews.freebsd.org Subject: [Differential] [Request, 103 lines] D5173: Rework initial congestion window calculation. Message-ID: X-Priority: 3 X-Phabricator-Sent-This-Message: Yes X-Mail-Transport-Agent: MetaMTA X-Auto-Response-Suppress: All X-Phabricator-Mail-Tags: , , , Thread-Topic: D5173: Rework initial congestion window calculation. X-Herald-Rules: <28>, <64> X-Phabricator-To: X-Phabricator-To: X-Phabricator-To: X-Phabricator-Cc: X-Phabricator-Cc: Precedence: bulk Thread-Index: YWQwN2E0Nzk2MTNkZDRjNWQ2NmI4MWY2NDBk MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="b1_091477204b4256e1a1e0967da5332176" X-Mailman-Approved-At: Wed, 03 Feb 2016 16:19:56 +0000 X-BeenThere: freebsd-transport@freebsd.org X-Mailman-Version: 2.1.20 List-Id: Discussions of transport level network protocols in FreeBSD List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 03 Feb 2016 16:02:55 -0000 --b1_091477204b4256e1a1e0967da5332176 Content-Type: text/plain; charset = "utf-8" Content-Transfer-Encoding: 8bit hiren created this revision. hiren added a reviewer: lstewart. hiren added a subscriber: transport. Herald added a subscriber: imp. Herald added a reviewer: transport. REVISION SUMMARY Rework initial congestion window calculation. The patch is my first (barely compiling) attempt at: 1. add ability to specify initcwnd in number of bytes 2. move entire calculation into a separate function 3. add a new sysctl to enable RFC6928 which is ON by default 4. https://reviews.freebsd.org/D5124's fix included. Approach here is, user can specify initcwnd of choice in number of segments or bytes. If none is present, we default to RFC6928 and have initcwnd as 10 segments. AFAIK, this is not changing the default behavior of what we have in FreeBSD-head right now. OR at least, that is the plan. This change also makes enabling RFC3390 (to get initcwnd at 4 segments) more obvious/easier. (You just have to disable RFC6928.) Suggestions? (I need to remember to do any manpage updates with this.) TEST PLAN I'll work on it once we have a general consensus on the approach. REPOSITORY rS FreeBSD src repository BRANCH rework_initcwnd REVISION DETAIL https://reviews.freebsd.org/D5173 AFFECTED FILES sys/netinet/cc/cc_newreno.c sys/netinet/tcp_input.c sys/netinet/tcp_var.h EMAIL PREFERENCES https://reviews.freebsd.org/settings/panel/emailpreferences/ To: hiren, lstewart, transport Cc: imp, transport --b1_091477204b4256e1a1e0967da5332176 Content-Type: text/x-patch; charset=utf-8; name="D5173.12966.patch" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="D5173.12966.patch" ZGlmZiAtLWdpdCBhL3N5cy9uZXRpbmV0L3RjcF92YXIuaCBiL3N5cy9uZXRpbmV0L3RjcF92YXIu aAotLS0gYS9zeXMvbmV0aW5ldC90Y3BfdmFyLmgKKysrIGIvc3lzL25ldGluZXQvdGNwX3Zhci5o CkBAIC02OTMsNyArNjkzLDkgQEAKIFZORVRfREVDTEFSRShpbnQsIHRjcF9taW5tc3MpOwogVk5F VF9ERUNMQVJFKGludCwgdGNwX2RlbGFja19lbmFibGVkKTsKIFZORVRfREVDTEFSRShpbnQsIHRj cF9kb19yZmMzMzkwKTsKK1ZORVRfREVDTEFSRShpbnQsIHRjcF9kb19yZmM2OTI4KTsKIFZORVRf REVDTEFSRShpbnQsIHRjcF9pbml0Y3duZF9zZWdtZW50cyk7CitWTkVUX0RFQ0xBUkUoaW50LCB0 Y3BfaW5pdGN3bmRfYnl0ZXMpOwogVk5FVF9ERUNMQVJFKGludCwgdGNwX3NlbmRzcGFjZSk7CiBW TkVUX0RFQ0xBUkUoaW50LCB0Y3BfcmVjdnNwYWNlKTsKIFZORVRfREVDTEFSRShpbnQsIHBhdGhf bXR1X2Rpc2NvdmVyeSk7CkBAIC03MDUsNyArNzA3LDkgQEAKICNkZWZpbmUJVl90Y3BfbWlubXNz CQlWTkVUKHRjcF9taW5tc3MpCiAjZGVmaW5lCVZfdGNwX2RlbGFja19lbmFibGVkCVZORVQodGNw X2RlbGFja19lbmFibGVkKQogI2RlZmluZQlWX3RjcF9kb19yZmMzMzkwCVZORVQodGNwX2RvX3Jm YzMzOTApCisjZGVmaW5lCVZfdGNwX2RvX3JmYzY5MjgJVk5FVCh0Y3BfZG9fcmZjNjkyOCkKICNk ZWZpbmUJVl90Y3BfaW5pdGN3bmRfc2VnbWVudHMJVk5FVCh0Y3BfaW5pdGN3bmRfc2VnbWVudHMp CisjZGVmaW5lCVZfdGNwX2luaXRjd25kX2J5dGVzCVZORVQodGNwX2luaXRjd25kX2J5dGVzKQog I2RlZmluZQlWX3RjcF9zZW5kc3BhY2UJCVZORVQodGNwX3NlbmRzcGFjZSkKICNkZWZpbmUJVl90 Y3BfcmVjdnNwYWNlCQlWTkVUKHRjcF9yZWN2c3BhY2UpCiAjZGVmaW5lCVZfcGF0aF9tdHVfZGlz Y292ZXJ5CVZORVQocGF0aF9tdHVfZGlzY292ZXJ5KQpAQCAtODQ1LDYgKzg0OSw3IEBACiBpbnQJ IHRjcF9uZXdyZW5vKHN0cnVjdCB0Y3BjYiAqLCBzdHJ1Y3QgdGNwaGRyICopOwogdV9sb25nCSB0 Y3Bfc2VxX3N1YnRyYWN0KHVfbG9uZywgdV9sb25nICk7CiBpbnQJIHRjcF9jb21wdXRlX3BpcGUo c3RydWN0IHRjcGNiICopOwordV9sb25nCSB0Y3BfaW5pdGN3bmQoc3RydWN0IHRjcGNiICosIHVf aW50KTsKIAogc3RhdGljIGlubGluZSB2b2lkCiB0Y3BfZmllbGRzX3RvX2hvc3Qoc3RydWN0IHRj cGhkciAqdGgpCmRpZmYgLS1naXQgYS9zeXMvbmV0aW5ldC90Y3BfaW5wdXQuYyBiL3N5cy9uZXRp bmV0L3RjcF9pbnB1dC5jCi0tLSBhL3N5cy9uZXRpbmV0L3RjcF9pbnB1dC5jCisrKyBiL3N5cy9u ZXRpbmV0L3RjcF9pbnB1dC5jCkBAIC0xNjgsMTEgKzE2OCwyMSBAQAogICAgICZWTkVUX05BTUUo dGNwX2RvX3JmYzMzOTApLCAwLAogICAgICJFbmFibGUgUkZDIDMzOTAgKEluY3JlYXNpbmcgVENQ J3MgSW5pdGlhbCBDb25nZXN0aW9uIFdpbmRvdykiKTsKIAotVk5FVF9ERUZJTkUoaW50LCB0Y3Bf aW5pdGN3bmRfc2VnbWVudHMpID0gMTA7CitWTkVUX0RFRklORShpbnQsIHRjcF9kb19yZmM2OTI4 KSA9IDE7CitTWVNDVExfSU5UKF9uZXRfaW5ldF90Y3AsIE9JRF9BVVRPLCByZmM2OTI4LCBDVExG TEFHX1ZORVQgfCBDVExGTEFHX1JXLAorICAgICZWTkVUX05BTUUodGNwX2RvX3JmYzY5MjgpLCAw LAorICAgICJFbmFibGUgUkZDIDY5MjggKEluY3JlYXNpbmcgVENQJ3MgSW5pdGlhbCBDb25nZXN0 aW9uIFdpbmRvdykiKTsKKworVk5FVF9ERUZJTkUoaW50LCB0Y3BfaW5pdGN3bmRfc2VnbWVudHMp ID0gMDsKIFNZU0NUTF9JTlQoX25ldF9pbmV0X3RjcCwgT0lEX0FVVE8sIGluaXRjd25kX3NlZ21l bnRzLAogICAgIENUTEZMQUdfVk5FVCB8IENUTEZMQUdfUlcsICZWTkVUX05BTUUodGNwX2luaXRj d25kX3NlZ21lbnRzKSwgMCwKICAgICAiU2xvdy1zdGFydCBmbGlnaHQgc2l6ZSAoaW5pdGlhbCBj b25nZXN0aW9uIHdpbmRvdykgaW4gbnVtYmVyIG9mIHNlZ21lbnRzIik7CiAKK1ZORVRfREVGSU5F KGludCwgdGNwX2luaXRjd25kX2J5dGVzKSA9IDA7CitTWVNDVExfSU5UKF9uZXRfaW5ldF90Y3As IE9JRF9BVVRPLCBpbml0Y3duZF9ieXRlcywKKyAgICBDVExGTEFHX1ZORVQgfCBDVExGTEFHX1JX LCAmVk5FVF9OQU1FKHRjcF9pbml0Y3duZF9ieXRlcyksIDAsCisgICAgIlNsb3ctc3RhcnQgZmxp Z2h0IHNpemUgKGluaXRpYWwgY29uZ2VzdGlvbiB3aW5kb3cpIGluIG51bWJlciBvZiBieXRlcyIp OworCiBWTkVUX0RFRklORShpbnQsIHRjcF9kb19yZmMzNDY1KSA9IDE7CiBTWVNDVExfSU5UKF9u ZXRfaW5ldF90Y3AsIE9JRF9BVVRPLCByZmMzNDY1LCBDVExGTEFHX1ZORVQgfCBDVExGTEFHX1JX LAogICAgICZWTkVUX05BTUUodGNwX2RvX3JmYzM0NjUpLCAwLApAQCAtMzQ5LDM0ICszNTksOCBA QAogCQlUQ1BTVEFUX0lOQyh0Y3BzX3VzZWRzc3RocmVzaCk7CiAJfQogCi0JLyoKLQkgKiBTZXQg dGhlIGluaXRpYWwgc2xvdy1zdGFydCBmbGlnaHQgc2l6ZS4KLQkgKgotCSAqIFJGQzU2ODEgU2Vj dGlvbiAzLjEgc3BlY2lmaWVzIHRoZSBkZWZhdWx0IGNvbnNlcnZhdGl2ZSB2YWx1ZXMuCi0JICog UkZDMzM5MCBzcGVjaWZpZXMgc2xpZ2h0bHkgbW9yZSBhZ2dyZXNzaXZlIHZhbHVlcy4KLQkgKiBS RkM2OTI4IGluY3JlYXNlcyBpdCB0byB0ZW4gc2VnbWVudHMuCi0JICogU3VwcG9ydCBmb3IgdXNl ciBzcGVjaWZpZWQgdmFsdWUgZm9yIGluaXRpYWwgZmxpZ2h0IHNpemUuCi0JICoKLQkgKiBJZiBh IFNZTiBvciBTWU4vQUNLIHdhcyBsb3N0IGFuZCByZXRyYW5zbWl0dGVkLCB3ZSBoYXZlIHRvCi0J ICogcmVkdWNlIHRoZSBpbml0aWFsIENXTkQgdG8gb25lIHNlZ21lbnQgYXMgY29uZ2VzdGlvbiBp cyBsaWtlbHkKLQkgKiByZXF1aXJpbmcgdXMgdG8gYmUgY2F1dGlvdXMuCi0JICovCi0JaWYgKHRw LT5zbmRfY3duZCA9PSAxKQotCQl0cC0+c25kX2N3bmQgPSBtYXhzZWc7CQkvKiBTWU4oLUFDSykg bG9zdCAqLwotCWVsc2UgaWYgKFZfdGNwX2luaXRjd25kX3NlZ21lbnRzKQotCQl0cC0+c25kX2N3 bmQgPSBtaW4oVl90Y3BfaW5pdGN3bmRfc2VnbWVudHMgKiBtYXhzZWcsCi0JCSAgICBtYXgoMiAq IG1heHNlZywgVl90Y3BfaW5pdGN3bmRfc2VnbWVudHMgKiAxNDYwKSk7Ci0JZWxzZSBpZiAoVl90 Y3BfZG9fcmZjMzM5MCkKLQkJdHAtPnNuZF9jd25kID0gbWluKDQgKiBtYXhzZWcsIG1heCgyICog bWF4c2VnLCA0MzgwKSk7Ci0JZWxzZSB7Ci0JCS8qIFBlciBSRkM1NjgxIFNlY3Rpb24gMy4xICov Ci0JCWlmIChtYXhzZWcgPiAyMTkwKQotCQkJdHAtPnNuZF9jd25kID0gMiAqIG1heHNlZzsKLQkJ ZWxzZSBpZiAobWF4c2VnID4gMTA5NSkKLQkJCXRwLT5zbmRfY3duZCA9IDMgKiBtYXhzZWc7Ci0J CWVsc2UKLQkJCXRwLT5zbmRfY3duZCA9IDQgKiBtYXhzZWc7Ci0JfQorCS8qIERldGVybWluZSB0 aGUgaW5pdGlhbCBjb25nZXN0aW9uIHdpbmRvdyAqLworCXRwLT5zbmRfY3duZCA9IHRjcF9pbml0 Y3duZCh0cCwgbWF4c2VnKTsKIAogCWlmIChDQ19BTEdPKHRwKS0+Y29ubl9pbml0ICE9IE5VTEwp CiAJCUNDX0FMR08odHApLT5jb25uX2luaXQodHAtPmNjdik7CkBAIC0zODI2LDMgKzM4MTAsNTEg QEAKIAkJdHAtPnNhY2toaW50LnNhY2tfYnl0ZXNfcmV4bWl0IC0KIAkJdHAtPnNhY2toaW50LnNh Y2tlZF9ieXRlcyk7CiB9CisKKy8qCisgKiBTZXQgdGhlIGluaXRpYWwgc2xvdy1zdGFydCBmbGln aHQgc2l6ZS4KKyAqCisgKiBTdXBwb3J0IGZvciB1c2VyIHNwZWNpZmllZCB2YWx1ZSBmb3IgaW5p dGlhbCBmbGlnaHQgc2l6ZS4KKyAqIFJGQzY5MjggaW5jcmVhc2VzIGl0IHRvIHRlbiBzZWdtZW50 cy4KKyAqIFJGQzMzOTAgc3BlY2lmaWVzIHNsaWdodGx5IG1vcmUgYWdncmVzc2l2ZSB2YWx1ZXMu CisgKiBSRkM1NjgxIFNlY3Rpb24gMy4xIHNwZWNpZmllcyB0aGUgZGVmYXVsdCBjb25zZXJ2YXRp dmUgdmFsdWVzLgorICoKKyAqIElmIGEgU1lOIG9yIFNZTi9BQ0sgd2FzIGxvc3QgYW5kIHJldHJh bnNtaXR0ZWQsIHdlIGhhdmUgdG8KKyAqIHJlZHVjZSB0aGUgaW5pdGlhbCBDV05EIHRvIG9uZSBz ZWdtZW50IGFzIGNvbmdlc3Rpb24gaXMgbGlrZWx5CisgKiByZXF1aXJpbmcgdXMgdG8gYmUgY2F1 dGlvdXMuCisgKgorICogTm90ZTogVGhlICJtYWdpYyIgbnVtYmVycyBiZWxvdyBhcmUgZGlyZWN0 bHkgZGVyaXZlZCBmcm9tIHRoZQorICogcmVmZXJlbmNlZCBSRkNzIGFuZCBhcmUga2VwdCBhcyBz dWNoIGZvciBiZXR0ZXIgcmVhZGFiaWxpdHkuCisgKi8KK3VfbG9uZwordGNwX2luaXRjd25kKHN0 cnVjdCB0Y3BjYiAqdHAsIHVfaW50IG1heHNlZykKK3sKKwl1X2xvbmcgaW5pdGN3bmQ7CisJaWYg KHRwLT5zbmRfY3duZCA9PSAxKQorCQlpbml0Y3duZCA9IG1heHNlZzsJCS8qIFNZTigtQUNLKSBs b3N0ICovCisJZWxzZSBpZiAoVl90Y3BfaW5pdGN3bmRfc2VnbWVudHMgJiYgVl90Y3BfaW5pdGN3 bmRfYnl0ZXMpCisJCWluaXRjd25kID0gbWF4KFZfdGNwX2luaXRjd25kX2J5dGVzLAorCQkgICAg bWluKFZfdGNwX2luaXRjd25kX3NlZ21lbnRzICogbWF4c2VnLAorCQkgICAgbWF4KDIgKiBtYXhz ZWcsIFZfdGNwX2luaXRjd25kX3NlZ21lbnRzICogMTQ2MCkpKTsKKwllbHNlIGlmIChWX3RjcF9p bml0Y3duZF9zZWdtZW50cyAmJiAhVl90Y3BfaW5pdGN3bmRfYnl0ZXMpCisJCWluaXRjd25kID0g bWluKFZfdGNwX2luaXRjd25kX3NlZ21lbnRzICogbWF4c2VnLAorCQkgICAgbWF4KDIgKiBtYXhz ZWcsIFZfdGNwX2luaXRjd25kX3NlZ21lbnRzICogMTQ2MCkpOworCWVsc2UgaWYgKFZfdGNwX2lu aXRjd25kX2J5dGVzLCAhVl90Y3BfaW5pdGN3bmRfc2VnbWVudHMpCisJCWluaXRjd25kID0gbWlu KFZfdGNwX2luaXRjd25kX2J5dGVzLAorCQkgICAgbWF4KDIgKiBtYXhzZWcsIFZfdGNwX2luaXRj d25kX2J5dGVzKSk7CisJZWxzZSBpZiAoVl90Y3BfZG9fcmZjNjkyOCkKKwkJaW5pdGN3bmQgPSBt aW4oMTAgKiBtYXhzZWcsIG1heCgyICogbWF4c2VnLCAxNDYwMCkpOworCWVsc2UgaWYgKFZfdGNw X2RvX3JmYzMzOTApCisJCWluaXRjd25kID0gbWluKDQgKiBtYXhzZWcsIG1heCgyICogbWF4c2Vn LCA0MzgwKSk7CisJZWxzZSB7CisJCS8qIFBlciBSRkM1NjgxIFNlY3Rpb24gMy4xICovCisJCWlm IChtYXhzZWcgPiAyMTkwKQorCQkJaW5pdGN3bmQgPSAyICogbWF4c2VnOworCQllbHNlIGlmICht YXhzZWcgPiAxMDk1KQorCQkJaW5pdGN3bmQgPSAzICogbWF4c2VnOworCQllbHNlCisJCQlpbml0 Y3duZCA9IDQgKiBtYXhzZWc7CisJfQorCisJcmV0dXJuIChpbml0Y3duZCk7Cit9CmRpZmYgLS1n aXQgYS9zeXMvbmV0aW5ldC9jYy9jY19uZXdyZW5vLmMgYi9zeXMvbmV0aW5ldC9jYy9jY19uZXdy ZW5vLmMKLS0tIGEvc3lzL25ldGluZXQvY2MvY2NfbmV3cmVuby5jCisrKyBiL3N5cy9uZXRpbmV0 L2NjL2NjX25ld3Jlbm8uYwpAQCAtMTUxLDcgKzE1MSw3IEBACiBzdGF0aWMgdm9pZAogbmV3cmVu b19hZnRlcl9pZGxlKHN0cnVjdCBjY192YXIgKmNjdikKIHsKLQlpbnQgcnc7CisJdV9sb25nIHJ3 OwogCiAJLyoKIAkgKiBJZiB3ZSd2ZSBiZWVuIGlkbGUgZm9yIG1vcmUgdGhhbiBvbmUgcmV0cmFu c21pdCB0aW1lb3V0IHRoZSBvbGQKQEAgLTE2NiwxMSArMTY2LDcgQEAKIAkgKgogCSAqIFNlZSBS RkM1NjgxIFNlY3Rpb24gNC4xLiAiUmVzdGFydGluZyBJZGxlIENvbm5lY3Rpb25zIi4KIAkgKi8K LQlpZiAoVl90Y3BfZG9fcmZjMzM5MCkKLQkJcncgPSBtaW4oNCAqIENDVihjY3YsIHRfbWF4c2Vn KSwKLQkJICAgIG1heCgyICogQ0NWKGNjdiwgdF9tYXhzZWcpLCA0MzgwKSk7Ci0JZWxzZQotCQly dyA9IENDVihjY3YsIHRfbWF4c2VnKSAqIDI7CisJcncgPSB0Y3BfaW5pdGN3bmQoY2N2LT5jY3Zj LnRjcCwgQ0NWKGNjdiwgdF9tYXhzZWcpKTsKIAogCUNDVihjY3YsIHNuZF9jd25kKSA9IG1pbihy dywgQ0NWKGNjdiwgc25kX2N3bmQpKTsKIH0KCg== --b1_091477204b4256e1a1e0967da5332176-- From owner-freebsd-transport@freebsd.org Wed Feb 3 22:52:24 2016 Return-Path: Delivered-To: freebsd-transport@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 68E60A9B39E for ; Wed, 3 Feb 2016 22:52:24 +0000 (UTC) (envelope-from daemon-user@freebsd.org) Received: from mailman.ysv.freebsd.org (mailman.ysv.freebsd.org [IPv6:2001:1900:2254:206a::50:5]) by mx1.freebsd.org (Postfix) with ESMTP id 4FE2AE6D for ; Wed, 3 Feb 2016 22:52:24 +0000 (UTC) (envelope-from daemon-user@freebsd.org) Received: by mailman.ysv.freebsd.org (Postfix) id 50106A9B39D; Wed, 3 Feb 2016 22:52:24 +0000 (UTC) Delivered-To: transport@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 4E8D9A9B39C for ; Wed, 3 Feb 2016 22:52:24 +0000 (UTC) (envelope-from daemon-user@freebsd.org) Received: from phabric-backend.rbsd.freebsd.org (unknown [IPv6:2607:fc50:2000:101::1bb:73]) by mx1.freebsd.org (Postfix) with ESMTP id 37DC7E69 for ; Wed, 3 Feb 2016 22:52:24 +0000 (UTC) (envelope-from daemon-user@freebsd.org) Received: by phabric-backend.rbsd.freebsd.org (Postfix, from userid 1346) id 2FAE91064DA; Wed, 3 Feb 2016 22:52:24 +0000 (UTC) Date: Wed, 3 Feb 2016 22:52:24 +0000 To: transport@freebsd.org From: "glebius (Gleb Smirnoff)" Reply-to: D5180+526+70ef64b2cb137638@reviews.freebsd.org Subject: [Differential] [Request, 1, 067 lines] D5180: Gather all mbuf(9) allocation APIs in one place Message-ID: X-Priority: 3 X-Phabricator-Sent-This-Message: Yes X-Mail-Transport-Agent: MetaMTA X-Auto-Response-Suppress: All X-Phabricator-Mail-Tags: , , , Thread-Topic: D5180: Gather all mbuf(9) allocation APIs in one place X-Herald-Rules: <28>, <64> X-Phabricator-To: X-Phabricator-To: X-Phabricator-To: X-Phabricator-Cc: Precedence: bulk Thread-Index: YjMyZWM5ZDlkYTlhMDBiMjNhNTU5YTY4ZWU1 MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="b1_75bea7beb39ccff30d15b27f6a127c4f" X-Mailman-Approved-At: Wed, 03 Feb 2016 22:58:23 +0000 X-BeenThere: freebsd-transport@freebsd.org X-Mailman-Version: 2.1.20 List-Id: Discussions of transport level network protocols in FreeBSD List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 03 Feb 2016 22:52:24 -0000 --b1_75bea7beb39ccff30d15b27f6a127c4f Content-Type: text/plain; charset = "utf-8" Content-Transfer-Encoding: 8bit glebius created this revision. glebius added a reviewer: gnn. Herald added a subscriber: imp. Herald added a reviewer: transport. REVISION SUMMARY Before upcoming changes to mbuf(9) gather all allocation APIs into kern_mbuf.c, and declare them in sys/mbuf.h The uipc_mbuf.c now will have only mbuf manipulation routines. sys/mbuf.h has only declaration and doesn't diclose internal allocator structures. TEST PLAN Since inlining level has reduced, benchmarking is required. REPOSITORY rS FreeBSD src repository BRANCH /head REVISION DETAIL https://reviews.freebsd.org/D5180 AFFECTED FILES sys/dev/cxgb/cxgb_adapter.h sys/dev/cxgb/cxgb_sge.c sys/dev/cxgbe/t4_netmap.c sys/dev/cxgbe/t4_sge.c sys/dev/netmap/netmap_generic.c sys/kern/kern_mbuf.c sys/kern/uipc_mbuf.c sys/netinet/tcp_pcap.c sys/sys/mbuf.h EMAIL PREFERENCES https://reviews.freebsd.org/settings/panel/emailpreferences/ To: glebius, transport, gnn Cc: imp --b1_75bea7beb39ccff30d15b27f6a127c4f Content-Type: text/x-patch; charset=utf-8; name="D5180.12984.patch" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="D5180.12984.patch" ZGlmZiAtLWdpdCBhL3N5cy9zeXMvbWJ1Zi5oIGIvc3lzL3N5cy9tYnVmLmgKLS0tIGEvc3lzL3N5 cy9tYnVmLmgKKysrIGIvc3lzL3N5cy9tYnVmLmgKQEAgLTM4LDcgKzM4LDYgQEAKICNpbmNsdWRl IDxzeXMvcXVldWUuaD4KICNpZmRlZiBfS0VSTkVMCiAjaW5jbHVkZSA8c3lzL3N5c3RtLmg+Ci0j aW5jbHVkZSA8dm0vdW1hLmg+CiAjaWZkZWYgV0lUTkVTUwogI2luY2x1ZGUgPHN5cy9sb2NrLmg+ CiAjZW5kaWYKQEAgLTgxLDE1ICs4MCw2IEBACiAgKi8KICNkZWZpbmUJbXRvZChtLCB0KQkoKHQp KChtKS0+bV9kYXRhKSkKICNkZWZpbmUJbXRvZG8obSwgbykJKCh2b2lkICopKCgobSktPm1fZGF0 YSkgKyAobykpKQotCi0vKgotICogQXJndW1lbnQgc3RydWN0dXJlIHBhc3NlZCB0byBVTUEgcm91 dGluZXMgZHVyaW5nIG1idWYgYW5kIHBhY2tldAotICogYWxsb2NhdGlvbnMuCi0gKi8KLXN0cnVj dCBtYl9hcmdzIHsKLQlpbnQJZmxhZ3M7CS8qIEZsYWdzIGZvciBtYnVmIGJlaW5nIGFsbG9jYXRl ZCAqLwotCXNob3J0CXR5cGU7CS8qIFR5cGUgb2YgbWJ1ZiBiZWluZyBhbGxvY2F0ZWQgKi8KLX07 CiAjZW5kaWYgLyogX0tFUk5FTCAqLwogCiAvKgpAQCAtNTEzLDIzICs1MDMsNiBAQAogI2RlZmlu ZQlNQlVGX0NIRUNLU0xFRVAoaG93KQogI2VuZGlmCiAKLS8qCi0gKiBOZXR3b3JrIGJ1ZmZlciBh bGxvY2F0aW9uIEFQSQotICoKLSAqIFRoZSByZXN0IG9mIGl0IGlzIGRlZmluZWQgaW4ga2Vybi9r ZXJuX21idWYuYwotICovCi1leHRlcm4gdW1hX3pvbmVfdAl6b25lX21idWY7Ci1leHRlcm4gdW1h X3pvbmVfdAl6b25lX2NsdXN0OwotZXh0ZXJuIHVtYV96b25lX3QJem9uZV9wYWNrOwotZXh0ZXJu IHVtYV96b25lX3QJem9uZV9qdW1ib3A7Ci1leHRlcm4gdW1hX3pvbmVfdAl6b25lX2p1bWJvOTsK LWV4dGVybiB1bWFfem9uZV90CXpvbmVfanVtYm8xNjsKLWV4dGVybiB1bWFfem9uZV90CXpvbmVf ZXh0X3JlZmNudDsKLQotdm9pZAkJIG1iX2R1cGNsKHN0cnVjdCBtYnVmICosIGNvbnN0IHN0cnVj dCBtYnVmICopOwotdm9pZAkJIG1iX2ZyZWVfZXh0KHN0cnVjdCBtYnVmICopOwotaW50CQkgbV9w a3RoZHJfaW5pdChzdHJ1Y3QgbWJ1ZiAqLCBpbnQpOwotCiBzdGF0aWMgX19pbmxpbmUgaW50CiBt X2dldHR5cGUoaW50IHNpemUpCiB7CkBAIC01ODMsMTg4ICs1NTYsNiBAQAogCW0tPm1fZXh0LmV4 dF9mbGFncyA9IDA7CiB9CiAKLXN0YXRpYyBfX2lubGluZSB1bWFfem9uZV90Ci1tX2dldHpvbmUo aW50IHNpemUpCi17Ci0JdW1hX3pvbmVfdCB6b25lOwotCi0Jc3dpdGNoIChzaXplKSB7Ci0JY2Fz ZSBNQ0xCWVRFUzoKLQkJem9uZSA9IHpvbmVfY2x1c3Q7Ci0JCWJyZWFrOwotI2lmIE1KVU1QQUdF U0laRSAhPSBNQ0xCWVRFUwotCWNhc2UgTUpVTVBBR0VTSVpFOgotCQl6b25lID0gem9uZV9qdW1i b3A7Ci0JCWJyZWFrOwotI2VuZGlmCi0JY2FzZSBNSlVNOUJZVEVTOgotCQl6b25lID0gem9uZV9q dW1ibzk7Ci0JCWJyZWFrOwotCWNhc2UgTUpVTTE2QllURVM6Ci0JCXpvbmUgPSB6b25lX2p1bWJv MTY7Ci0JCWJyZWFrOwotCWRlZmF1bHQ6Ci0JCXBhbmljKCIlczogaW52YWxpZCBjbHVzdGVyIHNp emUgJWQiLCBfX2Z1bmNfXywgc2l6ZSk7Ci0JfQotCi0JcmV0dXJuICh6b25lKTsKLX0KLQotLyoK LSAqIEluaXRpYWxpemUgYW4gbWJ1ZiB3aXRoIGxpbmVhciBzdG9yYWdlLgotICoKLSAqIElubGlu ZSBiZWNhdXNlIHRoZSBjb25zdW1lciB0ZXh0IG92ZXJoZWFkIHdpbGwgYmUgcm91Z2hseSB0aGUg c2FtZSB0bwotICogaW5pdGlhbGl6ZSBvciBjYWxsIGEgZnVuY3Rpb24gd2l0aCB0aGlzIG1hbnkg cGFyYW1ldGVycyBhbmQgTV9QS1RIRFIKLSAqIHNob3VsZCBnbyBhd2F5IHdpdGggY29uc3RhbnQg cHJvcGFnYXRpb24gZm9yICFNR0VUSERSLgotICovCi1zdGF0aWMgX19pbmxpbmUgaW50Ci1tX2lu aXQoc3RydWN0IG1idWYgKm0sIHVtYV96b25lX3Qgem9uZSBfX3VudXNlZCwgaW50IHNpemUgX191 bnVzZWQsIGludCBob3csCi0gICAgc2hvcnQgdHlwZSwgaW50IGZsYWdzKQotewotCWludCBlcnJv cjsKLQotCW0tPm1fbmV4dCA9IE5VTEw7Ci0JbS0+bV9uZXh0cGt0ID0gTlVMTDsKLQltLT5tX2Rh dGEgPSBtLT5tX2RhdDsKLQltLT5tX2xlbiA9IDA7Ci0JbS0+bV9mbGFncyA9IGZsYWdzOwotCW0t Pm1fdHlwZSA9IHR5cGU7Ci0JaWYgKGZsYWdzICYgTV9QS1RIRFIpIHsKLQkJaWYgKChlcnJvciA9 IG1fcGt0aGRyX2luaXQobSwgaG93KSkgIT0gMCkKLQkJCXJldHVybiAoZXJyb3IpOwotCX0KLQot CXJldHVybiAoMCk7Ci19Ci0KLXN0YXRpYyBfX2lubGluZSBzdHJ1Y3QgbWJ1ZiAqCi1tX2dldChp bnQgaG93LCBzaG9ydCB0eXBlKQotewotCXN0cnVjdCBtYl9hcmdzIGFyZ3M7Ci0KLQlhcmdzLmZs YWdzID0gMDsKLQlhcmdzLnR5cGUgPSB0eXBlOwotCXJldHVybiAodW1hX3phbGxvY19hcmcoem9u ZV9tYnVmLCAmYXJncywgaG93KSk7Ci19Ci0KLS8qCi0gKiBYWFggVGhpcyBzaG91bGQgYmUgZGVw cmVjYXRlZCwgdmVyeSBsaXR0bGUgdXNlLgotICovCi1zdGF0aWMgX19pbmxpbmUgc3RydWN0IG1i dWYgKgotbV9nZXRjbHIoaW50IGhvdywgc2hvcnQgdHlwZSkKLXsKLQlzdHJ1Y3QgbWJ1ZiAqbTsK LQlzdHJ1Y3QgbWJfYXJncyBhcmdzOwotCi0JYXJncy5mbGFncyA9IDA7Ci0JYXJncy50eXBlID0g dHlwZTsKLQltID0gdW1hX3phbGxvY19hcmcoem9uZV9tYnVmLCAmYXJncywgaG93KTsKLQlpZiAo bSAhPSBOVUxMKQotCQliemVybyhtLT5tX2RhdGEsIE1MRU4pOwotCXJldHVybiAobSk7Ci19Ci0K LXN0YXRpYyBfX2lubGluZSBzdHJ1Y3QgbWJ1ZiAqCi1tX2dldGhkcihpbnQgaG93LCBzaG9ydCB0 eXBlKQotewotCXN0cnVjdCBtYl9hcmdzIGFyZ3M7Ci0KLQlhcmdzLmZsYWdzID0gTV9QS1RIRFI7 Ci0JYXJncy50eXBlID0gdHlwZTsKLQlyZXR1cm4gKHVtYV96YWxsb2NfYXJnKHpvbmVfbWJ1Ziwg JmFyZ3MsIGhvdykpOwotfQotCi1zdGF0aWMgX19pbmxpbmUgc3RydWN0IG1idWYgKgotbV9nZXRj bChpbnQgaG93LCBzaG9ydCB0eXBlLCBpbnQgZmxhZ3MpCi17Ci0Jc3RydWN0IG1iX2FyZ3MgYXJn czsKLQotCWFyZ3MuZmxhZ3MgPSBmbGFnczsKLQlhcmdzLnR5cGUgPSB0eXBlOwotCXJldHVybiAo dW1hX3phbGxvY19hcmcoem9uZV9wYWNrLCAmYXJncywgaG93KSk7Ci19Ci0KLXN0YXRpYyBfX2lu bGluZSBpbnQKLW1fY2xnZXQoc3RydWN0IG1idWYgKm0sIGludCBob3cpCi17Ci0KLQlLQVNTRVJU KChtLT5tX2ZsYWdzICYgTV9FWFQpID09IDAsICgiJXM6IG1idWYgJXAgaGFzIE1fRVhUIiwKLQkg ICAgX19mdW5jX18sIG0pKTsKLQltLT5tX2V4dC5leHRfYnVmID0gKGNoYXIgKilOVUxMOwotCXVt YV96YWxsb2NfYXJnKHpvbmVfY2x1c3QsIG0sIGhvdyk7Ci0JLyoKLQkgKiBPbiBhIGNsdXN0ZXIg YWxsb2NhdGlvbiBmYWlsdXJlLCBkcmFpbiB0aGUgcGFja2V0IHpvbmUgYW5kIHJldHJ5LAotCSAq IHdlIG1pZ2h0IGJlIGFibGUgdG8gbG9vc2VuIGEgZmV3IGNsdXN0ZXJzIHVwIG9uIHRoZSBkcmFp bi4KLQkgKi8KLQlpZiAoKGhvdyAmIE1fTk9XQUlUKSAmJiAobS0+bV9leHQuZXh0X2J1ZiA9PSBO VUxMKSkgewotCQl6b25lX2RyYWluKHpvbmVfcGFjayk7Ci0JCXVtYV96YWxsb2NfYXJnKHpvbmVf Y2x1c3QsIG0sIGhvdyk7Ci0JfQotCXJldHVybiAobS0+bV9mbGFncyAmIE1fRVhUKTsKLX0KLQot LyoKLSAqIG1fY2xqZ2V0KCkgaXMgZGlmZmVyZW50IGZyb20gbV9jbGdldCgpIGFzIGl0IGNhbiBh bGxvY2F0ZSBjbHVzdGVycyB3aXRob3V0Ci0gKiBhdHRhY2hpbmcgdGhlbSB0byBhbiBtYnVmLiAg SW4gdGhhdCBjYXNlIHRoZSByZXR1cm4gdmFsdWUgaXMgdGhlIHBvaW50ZXIKLSAqIHRvIHRoZSBj bHVzdGVyIG9mIHRoZSByZXF1ZXN0ZWQgc2l6ZS4gIElmIGFuIG1idWYgd2FzIHNwZWNpZmllZCwg aXQgZ2V0cwotICogdGhlIGNsdXN0ZXIgYXR0YWNoZWQgdG8gaXQgYW5kIHRoZSByZXR1cm4gdmFs dWUgY2FuIGJlIHNhZmVseSBpZ25vcmVkLgotICogRm9yIHNpemUgaXQgdGFrZXMgTUNMQllURVMs IE1KVU1QQUdFU0laRSwgTUpVTTlCWVRFUywgTUpVTTE2QllURVMuCi0gKi8KLXN0YXRpYyBfX2lu bGluZSB2b2lkICoKLW1fY2xqZ2V0KHN0cnVjdCBtYnVmICptLCBpbnQgaG93LCBpbnQgc2l6ZSkK LXsKLQl1bWFfem9uZV90IHpvbmU7Ci0KLQlpZiAobSAhPSBOVUxMKSB7Ci0JCUtBU1NFUlQoKG0t Pm1fZmxhZ3MgJiBNX0VYVCkgPT0gMCwgKCIlczogbWJ1ZiAlcCBoYXMgTV9FWFQiLAotCQkgICAg X19mdW5jX18sIG0pKTsKLQkJbS0+bV9leHQuZXh0X2J1ZiA9IE5VTEw7Ci0JfQotCi0Jem9uZSA9 IG1fZ2V0em9uZShzaXplKTsKLQlyZXR1cm4gKHVtYV96YWxsb2NfYXJnKHpvbmUsIG0sIGhvdykp OwotfQotCi1zdGF0aWMgX19pbmxpbmUgdm9pZAotbV9jbGpzZXQoc3RydWN0IG1idWYgKm0sIHZv aWQgKmNsLCBpbnQgdHlwZSkKLXsKLQl1bWFfem9uZV90IHpvbmU7Ci0JaW50IHNpemU7Ci0KLQlz d2l0Y2ggKHR5cGUpIHsKLQljYXNlIEVYVF9DTFVTVEVSOgotCQlzaXplID0gTUNMQllURVM7Ci0J CXpvbmUgPSB6b25lX2NsdXN0OwotCQlicmVhazsKLSNpZiBNSlVNUEFHRVNJWkUgIT0gTUNMQllU RVMKLQljYXNlIEVYVF9KVU1CT1A6Ci0JCXNpemUgPSBNSlVNUEFHRVNJWkU7Ci0JCXpvbmUgPSB6 b25lX2p1bWJvcDsKLQkJYnJlYWs7Ci0jZW5kaWYKLQljYXNlIEVYVF9KVU1CTzk6Ci0JCXNpemUg PSBNSlVNOUJZVEVTOwotCQl6b25lID0gem9uZV9qdW1ibzk7Ci0JCWJyZWFrOwotCWNhc2UgRVhU X0pVTUJPMTY6Ci0JCXNpemUgPSBNSlVNMTZCWVRFUzsKLQkJem9uZSA9IHpvbmVfanVtYm8xNjsK LQkJYnJlYWs7Ci0JZGVmYXVsdDoKLQkJcGFuaWMoIiVzOiB1bmtub3duIGNsdXN0ZXIgdHlwZSAl ZCIsIF9fZnVuY19fLCB0eXBlKTsKLQkJYnJlYWs7Ci0JfQotCi0JbS0+bV9kYXRhID0gbS0+bV9l eHQuZXh0X2J1ZiA9IGNsOwotCW0tPm1fZXh0LmV4dF9mcmVlID0gbS0+bV9leHQuZXh0X2FyZzEg PSBtLT5tX2V4dC5leHRfYXJnMiA9IE5VTEw7Ci0JbS0+bV9leHQuZXh0X3NpemUgPSBzaXplOwot CW0tPm1fZXh0LmV4dF90eXBlID0gdHlwZTsKLQltLT5tX2V4dC5leHRfZmxhZ3MgPSAwOwotCW0t Pm1fZXh0LmV4dF9jbnQgPSB1bWFfZmluZF9yZWZjbnQoem9uZSwgY2wpOwotCW0tPm1fZmxhZ3Mg fD0gTV9FWFQ7Ci0KLX0KLQogc3RhdGljIF9faW5saW5lIHZvaWQKIG1fY2h0eXBlKHN0cnVjdCBt YnVmICptLCBzaG9ydCBuZXdfdHlwZSkKIHsKQEAgLTk0NCwxNSArNzM1LDE1IEBACiAKIHN0cnVj dCB1aW87CiAKK3ZvaWQJCSBtYl9kdXBjbChzdHJ1Y3QgbWJ1ZiAqLCBjb25zdCBzdHJ1Y3QgbWJ1 ZiAqKTsKIHZvaWQJCSBtX2FkaihzdHJ1Y3QgbWJ1ZiAqLCBpbnQpOwogaW50CQkgbV9hcHBseShz dHJ1Y3QgbWJ1ZiAqLCBpbnQsIGludCwKIAkJICAgIGludCAoKikodm9pZCAqLCB2b2lkICosIHVf aW50KSwgdm9pZCAqKTsKIGludAkJIG1fYXBwZW5kKHN0cnVjdCBtYnVmICosIGludCwgY19jYWRk cl90KTsKIHZvaWQJCSBtX2NhdChzdHJ1Y3QgbWJ1ZiAqLCBzdHJ1Y3QgbWJ1ZiAqKTsKIHZvaWQJ CSBtX2NhdHBrdChzdHJ1Y3QgbWJ1ZiAqLCBzdHJ1Y3QgbWJ1ZiAqKTsKLWludAkJIG1fZXh0YWRk KHN0cnVjdCBtYnVmICosIGNhZGRyX3QsIHVfaW50LAotCQkgICAgdm9pZCAoKikoc3RydWN0IG1i dWYgKiwgdm9pZCAqLCB2b2lkICopLCB2b2lkICosIHZvaWQgKiwKLQkJICAgIGludCwgaW50LCBp bnQpOworaW50CQkgbV9jbGdldChzdHJ1Y3QgbWJ1ZiAqbSwgaW50IGhvdyk7Cit2b2lkIAkJKm1f Y2xqZ2V0KHN0cnVjdCBtYnVmICptLCBpbnQgaG93LCBpbnQgc2l6ZSk7CiBzdHJ1Y3QgbWJ1Zgkq bV9jb2xsYXBzZShzdHJ1Y3QgbWJ1ZiAqLCBpbnQsIGludCk7CiB2b2lkCQkgbV9jb3B5YmFjayhz dHJ1Y3QgbWJ1ZiAqLCBpbnQsIGludCwgY19jYWRkcl90KTsKIHZvaWQJCSBtX2NvcHlkYXRhKGNv bnN0IHN0cnVjdCBtYnVmICosIGludCwgaW50LCBjYWRkcl90KTsKQEAgLTk2NywxMyArNzU4LDIx IEBACiAJCSAgICB2b2lkICgqKShjaGFyICosIGNhZGRyX3QsIHVfaW50KSk7CiBzdHJ1Y3QgbWJ1 ZgkqbV9kdXAoY29uc3Qgc3RydWN0IG1idWYgKiwgaW50KTsKIGludAkJIG1fZHVwX3BrdGhkcihz dHJ1Y3QgbWJ1ZiAqLCBjb25zdCBzdHJ1Y3QgbWJ1ZiAqLCBpbnQpOworaW50CQkgbV9leHRhZGQo c3RydWN0IG1idWYgKiwgY2FkZHJfdCwgdV9pbnQsCisJCSAgICB2b2lkICgqKShzdHJ1Y3QgbWJ1 ZiAqLCB2b2lkICosIHZvaWQgKiksIHZvaWQgKiwgdm9pZCAqLAorCQkgICAgaW50LCBpbnQsIGlu dCk7CiB1X2ludAkJIG1fZml4aGRyKHN0cnVjdCBtYnVmICopOwogc3RydWN0IG1idWYJKm1fZnJh Z21lbnQoc3RydWN0IG1idWYgKiwgaW50LCBpbnQpOworc3RydWN0IG1idWYJKm1fZnJlZShzdHJ1 Y3QgbWJ1ZiAqKTsKIHZvaWQJCSBtX2ZyZWVtKHN0cnVjdCBtYnVmICopOwogc3RydWN0IG1idWYJ Km1fZ2V0MihpbnQsIGludCwgc2hvcnQsIGludCk7CiBzdHJ1Y3QgbWJ1ZgkqbV9nZXRqY2woaW50 LCBzaG9ydCwgaW50LCBpbnQpOwogc3RydWN0IG1idWYJKm1fZ2V0bTIoc3RydWN0IG1idWYgKiwg aW50LCBpbnQsIHNob3J0LCBpbnQpOwogc3RydWN0IG1idWYJKm1fZ2V0cHRyKHN0cnVjdCBtYnVm ICosIGludCwgaW50ICopOworc3RydWN0IG1idWYgCSptX2dldChpbnQgaG93LCBzaG9ydCB0eXBl KTsKK3N0cnVjdCBtYnVmIAkqbV9nZXRjbChpbnQgaG93LCBzaG9ydCB0eXBlLCBpbnQgZmxhZ3Mp Oworc3RydWN0IG1idWYgCSptX2dldGhkcihpbnQgaG93LCBzaG9ydCB0eXBlKTsKK2ludAkJIG1f aW5pdChzdHJ1Y3QgbWJ1ZiAqbSwgaW50IGhvdywgc2hvcnQgdHlwZSwgaW50IGZsYWdzKTsKIHVf aW50CQkgbV9sZW5ndGgoc3RydWN0IG1idWYgKiwgc3RydWN0IG1idWYgKiopOwogaW50CQkgbV9t YnVmdG91aW8oc3RydWN0IHVpbyAqLCBzdHJ1Y3QgbWJ1ZiAqLCBpbnQpOwogdm9pZAkJIG1fbW92 ZV9wa3RoZHIoc3RydWN0IG1idWYgKiwgc3RydWN0IG1idWYgKik7CkBAIC0xMTY3LDIwICs5NjYs NiBAQAogCSAgICBtX3RhZ19sb2NhdGUobSwgTVRBR19BQklfQ09NUEFULCB0eXBlLCBzdGFydCkp OwogfQogCi1zdGF0aWMgX19pbmxpbmUgc3RydWN0IG1idWYgKgotbV9mcmVlKHN0cnVjdCBtYnVm ICptKQotewotCXN0cnVjdCBtYnVmICpuID0gbS0+bV9uZXh0OwotCi0JaWYgKChtLT5tX2ZsYWdz ICYgKE1fUEtUSERSfE1fTk9GUkVFKSkgPT0gKE1fUEtUSERSfE1fTk9GUkVFKSkKLQkJbV90YWdf ZGVsZXRlX2NoYWluKG0sIE5VTEwpOwotCWlmIChtLT5tX2ZsYWdzICYgTV9FWFQpCi0JCW1iX2Zy ZWVfZXh0KG0pOwotCWVsc2UgaWYgKChtLT5tX2ZsYWdzICYgTV9OT0ZSRUUpID09IDApCi0JCXVt YV96ZnJlZSh6b25lX21idWYsIG0pOwotCXJldHVybiAobik7Ci19Ci0KIHN0YXRpYyBfX2lubGlu ZSBpbnQKIHJ0X21fZ2V0ZmliKHN0cnVjdCBtYnVmICptKQogewpkaWZmIC0tZ2l0IGEvc3lzL25l dGluZXQvdGNwX3BjYXAuYyBiL3N5cy9uZXRpbmV0L3RjcF9wY2FwLmMKLS0tIGEvc3lzL25ldGlu ZXQvdGNwX3BjYXAuYworKysgYi9zeXMvbmV0aW5ldC90Y3BfcGNhcC5jCkBAIC0zNDEsNyArMzQx LDEwIEBACiAKIAkJCW4gPSBtaGVhZDsKIAkJCXRjcF9wY2FwX21fZnJlZW0obi0+bV9uZXh0KTsK LQkJCW1faW5pdChuLCBOVUxMLCAwLCBNX05PV0FJVCwgTVRfREFUQSwgMCk7CisJCQltLT5tX25l eHQgPSBOVUxMOworCQkJbS0+bV9uZXh0cGt0ID0gTlVMTDsKKwkJCW0tPm1fbGVuID0gMDsKKwkJ CW0tPm1fZmxhZ3MgPSAwOwogCQl9CiAJfQogCmRpZmYgLS1naXQgYS9zeXMva2Vybi91aXBjX21i dWYuYyBiL3N5cy9rZXJuL3VpcGNfbWJ1Zi5jCi0tLSBhL3N5cy9rZXJuL3VpcGNfbWJ1Zi5jCisr KyBiL3N5cy9rZXJuL3VpcGNfbWJ1Zi5jCkBAIC00OCw2ICs0OCw4IEBACiAjaW5jbHVkZSA8c3lz L3Byb3Rvc3cuaD4KICNpbmNsdWRlIDxzeXMvdWlvLmg+CiAKKyNpbmNsdWRlIDxzZWN1cml0eS9t YWMvbWFjX2ZyYW1ld29yay5oPgorCiBpbnQJbWF4X2xpbmtoZHI7CiBpbnQJbWF4X3Byb3RvaGRy OwogaW50CW1heF9oZHI7CkBAIC0xMzIsMjY2ICsxMzQsMzIgQEAKICNlbmRpZgogCiAvKgotICog bV9nZXQyKCkgYWxsb2NhdGVzIG1pbmltdW0gbWJ1ZiB0aGF0IHdvdWxkIGZpdCAic2l6ZSIgYXJn dW1lbnQuCi0gKi8KLXN0cnVjdCBtYnVmICoKLW1fZ2V0MihpbnQgc2l6ZSwgaW50IGhvdywgc2hv cnQgdHlwZSwgaW50IGZsYWdzKQotewotCXN0cnVjdCBtYl9hcmdzIGFyZ3M7Ci0Jc3RydWN0IG1i dWYgKm0sICpuOwotCi0JYXJncy5mbGFncyA9IGZsYWdzOwotCWFyZ3MudHlwZSA9IHR5cGU7Ci0K LQlpZiAoc2l6ZSA8PSBNSExFTiB8fCAoc2l6ZSA8PSBNTEVOICYmIChmbGFncyAmIE1fUEtUSERS KSA9PSAwKSkKLQkJcmV0dXJuICh1bWFfemFsbG9jX2FyZyh6b25lX21idWYsICZhcmdzLCBob3cp KTsKLQlpZiAoc2l6ZSA8PSBNQ0xCWVRFUykKLQkJcmV0dXJuICh1bWFfemFsbG9jX2FyZyh6b25l X3BhY2ssICZhcmdzLCBob3cpKTsKLQotCWlmIChzaXplID4gTUpVTVBBR0VTSVpFKQotCQlyZXR1 cm4gKE5VTEwpOwotCi0JbSA9IHVtYV96YWxsb2NfYXJnKHpvbmVfbWJ1ZiwgJmFyZ3MsIGhvdyk7 Ci0JaWYgKG0gPT0gTlVMTCkKLQkJcmV0dXJuIChOVUxMKTsKLQotCW4gPSB1bWFfemFsbG9jX2Fy Zyh6b25lX2p1bWJvcCwgbSwgaG93KTsKLQlpZiAobiA9PSBOVUxMKSB7Ci0JCXVtYV96ZnJlZSh6 b25lX21idWYsIG0pOwotCQlyZXR1cm4gKE5VTEwpOwotCX0KLQotCXJldHVybiAobSk7Ci19Ci0K LS8qCi0gKiBtX2dldGpjbCgpIHJldHVybnMgYW4gbWJ1ZiB3aXRoIGEgY2x1c3RlciBvZiB0aGUg c3BlY2lmaWVkIHNpemUgYXR0YWNoZWQuCi0gKiBGb3Igc2l6ZSBpdCB0YWtlcyBNQ0xCWVRFUywg TUpVTVBBR0VTSVpFLCBNSlVNOUJZVEVTLCBNSlVNMTZCWVRFUy4KLSAqLwotc3RydWN0IG1idWYg KgotbV9nZXRqY2woaW50IGhvdywgc2hvcnQgdHlwZSwgaW50IGZsYWdzLCBpbnQgc2l6ZSkKLXsK LQlzdHJ1Y3QgbWJfYXJncyBhcmdzOwotCXN0cnVjdCBtYnVmICptLCAqbjsKLQl1bWFfem9uZV90 IHpvbmU7Ci0KLQlpZiAoc2l6ZSA9PSBNQ0xCWVRFUykKLQkJcmV0dXJuIG1fZ2V0Y2woaG93LCB0 eXBlLCBmbGFncyk7Ci0KLQlhcmdzLmZsYWdzID0gZmxhZ3M7Ci0JYXJncy50eXBlID0gdHlwZTsK LQotCW0gPSB1bWFfemFsbG9jX2FyZyh6b25lX21idWYsICZhcmdzLCBob3cpOwotCWlmIChtID09 IE5VTEwpCi0JCXJldHVybiAoTlVMTCk7Ci0KLQl6b25lID0gbV9nZXR6b25lKHNpemUpOwotCW4g PSB1bWFfemFsbG9jX2FyZyh6b25lLCBtLCBob3cpOwotCWlmIChuID09IE5VTEwpIHsKLQkJdW1h X3pmcmVlKHpvbmVfbWJ1ZiwgbSk7Ci0JCXJldHVybiAoTlVMTCk7Ci0JfQotCXJldHVybiAobSk7 Ci19Ci0KLS8qCi0gKiBBbGxvY2F0ZSBhIGdpdmVuIGxlbmd0aCB3b3J0aCBvZiBtYnVmcyBhbmQv b3IgY2x1c3RlcnMgKHdoYXRldmVyIGZpdHMKLSAqIGJlc3QpIGFuZCByZXR1cm4gYSBwb2ludGVy IHRvIHRoZSB0b3Agb2YgdGhlIGFsbG9jYXRlZCBjaGFpbi4gIElmIGFuCi0gKiBleGlzdGluZyBt YnVmIGNoYWluIGlzIHByb3ZpZGVkLCB0aGVuIHdlIHdpbGwgYXBwZW5kIHRoZSBuZXcgY2hhaW4K LSAqIHRvIHRoZSBleGlzdGluZyBvbmUgYnV0IHN0aWxsIHJldHVybiB0aGUgdG9wIG9mIHRoZSBu ZXdseSBhbGxvY2F0ZWQKLSAqIGNoYWluLgotICovCi1zdHJ1Y3QgbWJ1ZiAqCi1tX2dldG0yKHN0 cnVjdCBtYnVmICptLCBpbnQgbGVuLCBpbnQgaG93LCBzaG9ydCB0eXBlLCBpbnQgZmxhZ3MpCi17 Ci0Jc3RydWN0IG1idWYgKm1iLCAqbm0gPSBOVUxMLCAqbXRhaWwgPSBOVUxMOwotCi0JS0FTU0VS VChsZW4gPj0gMCwgKCIlczogbGVuIGlzIDwgMCIsIF9fZnVuY19fKSk7Ci0KLQkvKiBWYWxpZGF0 ZSBmbGFncy4gKi8KLQlmbGFncyAmPSAoTV9QS1RIRFIgfCBNX0VPUik7Ci0KLQkvKiBQYWNrZXQg aGVhZGVyIG1idWYgbXVzdCBiZSBmaXJzdCBpbiBjaGFpbi4gKi8KLQlpZiAoKGZsYWdzICYgTV9Q S1RIRFIpICYmIG0gIT0gTlVMTCkKLQkJZmxhZ3MgJj0gfk1fUEtUSERSOwotCi0JLyogTG9vcCBh bmQgYXBwZW5kIG1heGltdW0gc2l6ZWQgbWJ1ZnMgdG8gdGhlIGNoYWluIHRhaWwuICovCi0Jd2hp bGUgKGxlbiA+IDApIHsKLQkJaWYgKGxlbiA+IE1DTEJZVEVTKQotCQkJbWIgPSBtX2dldGpjbCho b3csIHR5cGUsIChmbGFncyAmIE1fUEtUSERSKSwKLQkJCSAgICBNSlVNUEFHRVNJWkUpOwotCQll bHNlIGlmIChsZW4gPj0gTUlOQ0xTSVpFKQotCQkJbWIgPSBtX2dldGNsKGhvdywgdHlwZSwgKGZs YWdzICYgTV9QS1RIRFIpKTsKLQkJZWxzZSBpZiAoZmxhZ3MgJiBNX1BLVEhEUikKLQkJCW1iID0g bV9nZXRoZHIoaG93LCB0eXBlKTsKLQkJZWxzZQotCQkJbWIgPSBtX2dldChob3csIHR5cGUpOwot Ci0JCS8qIEZhaWwgdGhlIHdob2xlIG9wZXJhdGlvbiBpZiBvbmUgbWJ1ZiBjYW4ndCBiZSBhbGxv Y2F0ZWQuICovCi0JCWlmIChtYiA9PSBOVUxMKSB7Ci0JCQlpZiAobm0gIT0gTlVMTCkKLQkJCQlt X2ZyZWVtKG5tKTsKLQkJCXJldHVybiAoTlVMTCk7Ci0JCX0KLQotCQkvKiBCb29rIGtlZXBpbmcu ICovCi0JCWxlbiAtPSBNX1NJWkUobWIpOwotCQlpZiAobXRhaWwgIT0gTlVMTCkKLQkJCW10YWls LT5tX25leHQgPSBtYjsKLQkJZWxzZQotCQkJbm0gPSBtYjsKLQkJbXRhaWwgPSBtYjsKLQkJZmxh Z3MgJj0gfk1fUEtUSERSOwkvKiBPbmx5IHZhbGlkIG9uIHRoZSBmaXJzdCBtYnVmLiAqLwotCX0K LQlpZiAoZmxhZ3MgJiBNX0VPUikKLQkJbXRhaWwtPm1fZmxhZ3MgfD0gTV9FT1I7ICAvKiBPbmx5 IHZhbGlkIG9uIHRoZSBsYXN0IG1idWYuICovCi0KLQkvKiBJZiBtYnVmIHdhcyBzdXBwbGllZCwg YXBwZW5kIG5ldyBjaGFpbiB0byB0aGUgZW5kIG9mIGl0LiAqLwotCWlmIChtICE9IE5VTEwpIHsK LQkJZm9yIChtdGFpbCA9IG07IG10YWlsLT5tX25leHQgIT0gTlVMTDsgbXRhaWwgPSBtdGFpbC0+ bV9uZXh0KQotCQkJOwotCQltdGFpbC0+bV9uZXh0ID0gbm07Ci0JCW10YWlsLT5tX2ZsYWdzICY9 IH5NX0VPUjsKLQl9IGVsc2UKLQkJbSA9IG5tOwotCi0JcmV0dXJuIChtKTsKLX0KLQotLyoKLSAq IEZyZWUgYW4gZW50aXJlIGNoYWluIG9mIG1idWZzIGFuZCBhc3NvY2lhdGVkIGV4dGVybmFsIGJ1 ZmZlcnMsIGlmCi0gKiBhcHBsaWNhYmxlLgotICovCi12b2lkCi1tX2ZyZWVtKHN0cnVjdCBtYnVm ICptYikKLXsKLQotCXdoaWxlIChtYiAhPSBOVUxMKQotCQltYiA9IG1fZnJlZShtYik7Ci19Ci0K LS8qLQotICogQ29uZmlndXJlIGEgcHJvdmlkZWQgbWJ1ZiB0byByZWZlciB0byB0aGUgcHJvdmlk ZWQgZXh0ZXJuYWwgc3RvcmFnZQotICogYnVmZmVyIGFuZCBzZXR1cCBhIHJlZmVyZW5jZSBjb3Vu dCBmb3Igc2FpZCBidWZmZXIuICBJZiB0aGUgc2V0dGluZwotICogdXAgb2YgdGhlIHJlZmVyZW5j ZSBjb3VudCBmYWlscywgdGhlIE1fRVhUIGJpdCB3aWxsIG5vdCBiZSBzZXQuICBJZgotICogc3Vj Y2Vzc2Z1bGwsIHRoZSBNX0VYVCBiaXQgaXMgc2V0IGluIHRoZSBtYnVmJ3MgZmxhZ3MuCi0gKgot ICogQXJndW1lbnRzOgotICogICAgbWIgICAgIFRoZSBleGlzdGluZyBtYnVmIHRvIHdoaWNoIHRv IGF0dGFjaCB0aGUgcHJvdmlkZWQgYnVmZmVyLgotICogICAgYnVmICAgIFRoZSBhZGRyZXNzIG9m IHRoZSBwcm92aWRlZCBleHRlcm5hbCBzdG9yYWdlIGJ1ZmZlci4KLSAqICAgIHNpemUgICBUaGUg c2l6ZSBvZiB0aGUgcHJvdmlkZWQgYnVmZmVyLgotICogICAgZnJlZWYgIEEgcG9pbnRlciB0byBh IHJvdXRpbmUgdGhhdCBpcyByZXNwb25zaWJsZSBmb3IgZnJlZWluZyB0aGUKLSAqICAgICAgICAg ICBwcm92aWRlZCBleHRlcm5hbCBzdG9yYWdlIGJ1ZmZlci4KLSAqICAgIGFyZ3MgICBBIHBvaW50 ZXIgdG8gYW4gYXJndW1lbnQgc3RydWN0dXJlIChvZiBhbnkgdHlwZSkgdG8gYmUgcGFzc2VkCi0g KiAgICAgICAgICAgdG8gdGhlIHByb3ZpZGVkIGZyZWVmIHJvdXRpbmUgKG1heSBiZSBOVUxMKS4K LSAqICAgIGZsYWdzICBBbnkgb3RoZXIgZmxhZ3MgdG8gYmUgcGFzc2VkIHRvIHRoZSBwcm92aWRl ZCBtYnVmLgotICogICAgdHlwZSAgIFRoZSB0eXBlIHRoYXQgdGhlIGV4dGVybmFsIHN0b3JhZ2Ug YnVmZmVyIHNob3VsZCBiZQotICogICAgICAgICAgIGxhYmVsZWQgd2l0aC4KLSAqCi0gKiBSZXR1 cm5zOgotICogICAgTm90aGluZy4KKyAqIEluaXRpYWxpemUgYW4gbWJ1ZiB3aXRoIGxpbmVhciBz dG9yYWdlLgogICovCiBpbnQKLW1fZXh0YWRkKHN0cnVjdCBtYnVmICptYiwgY2FkZHJfdCBidWYs IHVfaW50IHNpemUsCi0gICAgdm9pZCAoKmZyZWVmKShzdHJ1Y3QgbWJ1ZiAqLCB2b2lkICosIHZv aWQgKiksIHZvaWQgKmFyZzEsIHZvaWQgKmFyZzIsCi0gICAgaW50IGZsYWdzLCBpbnQgdHlwZSwg aW50IHdhaXQpCi17Ci0JS0FTU0VSVCh0eXBlICE9IEVYVF9DTFVTVEVSLCAoIiVzOiBFWFRfQ0xV U1RFUiBub3QgYWxsb3dlZCIsIF9fZnVuY19fKSk7Ci0KLQlpZiAodHlwZSAhPSBFWFRfRVhUUkVG KQotCQltYi0+bV9leHQuZXh0X2NudCA9IHVtYV96YWxsb2Moem9uZV9leHRfcmVmY250LCB3YWl0 KTsKLQotCWlmIChtYi0+bV9leHQuZXh0X2NudCA9PSBOVUxMKQotCQlyZXR1cm4gKEVOT01FTSk7 Ci0KLQkqKG1iLT5tX2V4dC5leHRfY250KSA9IDE7Ci0JbWItPm1fZmxhZ3MgfD0gKE1fRVhUIHwg ZmxhZ3MpOwotCW1iLT5tX2V4dC5leHRfYnVmID0gYnVmOwotCW1iLT5tX2RhdGEgPSBtYi0+bV9l eHQuZXh0X2J1ZjsKLQltYi0+bV9leHQuZXh0X3NpemUgPSBzaXplOwotCW1iLT5tX2V4dC5leHRf ZnJlZSA9IGZyZWVmOwotCW1iLT5tX2V4dC5leHRfYXJnMSA9IGFyZzE7Ci0JbWItPm1fZXh0LmV4 dF9hcmcyID0gYXJnMjsKLQltYi0+bV9leHQuZXh0X3R5cGUgPSB0eXBlOwotCW1iLT5tX2V4dC5l eHRfZmxhZ3MgPSAwOwotCi0JcmV0dXJuICgwKTsKLX0KLQotLyoKLSAqIE5vbi1kaXJlY3RseS1l eHBvcnRlZCBmdW5jdGlvbiB0byBjbGVhbiB1cCBhZnRlciBtYnVmcyB3aXRoIE1fRVhUCi0gKiBz dG9yYWdlIGF0dGFjaGVkIHRvIHRoZW0gaWYgdGhlIHJlZmVyZW5jZSBjb3VudCBoaXRzIDEuCi0g Ki8KLXZvaWQKLW1iX2ZyZWVfZXh0KHN0cnVjdCBtYnVmICptKQorbV9pbml0KHN0cnVjdCBtYnVm ICptLCBpbnQgaG93LCBzaG9ydCB0eXBlLCBpbnQgZmxhZ3MpCiB7Ci0JaW50IGZyZWVtYnVmOwot Ci0JS0FTU0VSVChtLT5tX2ZsYWdzICYgTV9FWFQsICgiJXM6IE1fRVhUIG5vdCBzZXQgb24gJXAi LCBfX2Z1bmNfXywgbSkpOwogCi0JLyoKLQkgKiBDaGVjayBpZiB0aGUgaGVhZGVyIGlzIGVtYmVk ZGVkIGluIHRoZSBjbHVzdGVyLgotCSAqLwotCWZyZWVtYnVmID0gKG0tPm1fZmxhZ3MgJiBNX05P RlJFRSkgPyAwIDogMTsKLQotCXN3aXRjaCAobS0+bV9leHQuZXh0X3R5cGUpIHsKLQljYXNlIEVY VF9TRkJVRjoKLQkJc2ZfZXh0X2ZyZWUobS0+bV9leHQuZXh0X2FyZzEsIG0tPm1fZXh0LmV4dF9h cmcyKTsKLQkJYnJlYWs7Ci0JY2FzZSBFWFRfU0ZCVUZfTk9DQUNIRToKLQkJc2ZfZXh0X2ZyZWVf bm9jYWNoZShtLT5tX2V4dC5leHRfYXJnMSwgbS0+bV9leHQuZXh0X2FyZzIpOwotCQlicmVhazsK LQlkZWZhdWx0OgotCQlLQVNTRVJUKG0tPm1fZXh0LmV4dF9jbnQgIT0gTlVMTCwKLQkJICAgICgi JXM6IG5vIHJlZmNvdW50aW5nIHBvaW50ZXIgb24gJXAiLCBfX2Z1bmNfXywgbSkpOwotCQkvKiAK LQkJICogRnJlZSBhdHRhY2hlZCBzdG9yYWdlIGlmIHRoaXMgbWJ1ZiBpcyB0aGUgb25seQotCQkg KiByZWZlcmVuY2UgdG8gaXQuCi0JCSAqLwotCQlpZiAoKihtLT5tX2V4dC5leHRfY250KSAhPSAx KSB7Ci0JCQlpZiAoYXRvbWljX2ZldGNoYWRkX2ludChtLT5tX2V4dC5leHRfY250LCAtMSkgIT0g MSkKLQkJCQlicmVhazsKLQkJfQorCW0tPm1fbmV4dCA9IE5VTEw7CisJbS0+bV9uZXh0cGt0ID0g TlVMTDsKKwltLT5tX2RhdGEgPSBtLT5tX2RhdDsKKwltLT5tX2xlbiA9IDA7CisJbS0+bV9mbGFn cyA9IGZsYWdzOworCW0tPm1fdHlwZSA9IHR5cGU7CisJaWYgKGZsYWdzICYgTV9QS1RIRFIpIHsK KwkJaW50IGVycm9yOwogCi0JCXN3aXRjaCAobS0+bV9leHQuZXh0X3R5cGUpIHsKLQkJY2FzZSBF WFRfUEFDS0VUOgkvKiBUaGUgcGFja2V0IHpvbmUgaXMgc3BlY2lhbC4gKi8KLQkJCWlmICgqKG0t Pm1fZXh0LmV4dF9jbnQpID09IDApCi0JCQkJKihtLT5tX2V4dC5leHRfY250KSA9IDE7Ci0JCQl1 bWFfemZyZWUoem9uZV9wYWNrLCBtKTsKLQkJCXJldHVybjsJCS8qIEpvYiBkb25lLiAqLwotCQlj YXNlIEVYVF9DTFVTVEVSOgotCQkJdW1hX3pmcmVlKHpvbmVfY2x1c3QsIG0tPm1fZXh0LmV4dF9i dWYpOwotCQkJYnJlYWs7Ci0JCWNhc2UgRVhUX0pVTUJPUDoKLQkJCXVtYV96ZnJlZSh6b25lX2p1 bWJvcCwgbS0+bV9leHQuZXh0X2J1Zik7Ci0JCQlicmVhazsKLQkJY2FzZSBFWFRfSlVNQk85Ogot CQkJdW1hX3pmcmVlKHpvbmVfanVtYm85LCBtLT5tX2V4dC5leHRfYnVmKTsKLQkJCWJyZWFrOwot CQljYXNlIEVYVF9KVU1CTzE2OgotCQkJdW1hX3pmcmVlKHpvbmVfanVtYm8xNiwgbS0+bV9leHQu ZXh0X2J1Zik7Ci0JCQlicmVhazsKLQkJY2FzZSBFWFRfTkVUX0RSVjoKLQkJY2FzZSBFWFRfTU9E X1RZUEU6Ci0JCWNhc2UgRVhUX0RJU1BPU0FCTEU6Ci0JCQkqKG0tPm1fZXh0LmV4dF9jbnQpID0g MDsKLQkJCXVtYV96ZnJlZSh6b25lX2V4dF9yZWZjbnQsIF9fREVWT0xBVElMRSh1X2ludCAqLAot CQkJCW0tPm1fZXh0LmV4dF9jbnQpKTsKLQkJCS8qIEZBTExUSFJPVUdIICovCi0JCWNhc2UgRVhU X0VYVFJFRjoKLQkJCUtBU1NFUlQobS0+bV9leHQuZXh0X2ZyZWUgIT0gTlVMTCwKLQkJCQkoIiVz OiBleHRfZnJlZSBub3Qgc2V0IiwgX19mdW5jX18pKTsKLQkJCSgqKG0tPm1fZXh0LmV4dF9mcmVl KSkobSwgbS0+bV9leHQuZXh0X2FyZzEsCi0JCQkgICAgbS0+bV9leHQuZXh0X2FyZzIpOwotCQkJ YnJlYWs7Ci0JCWRlZmF1bHQ6Ci0JCQlLQVNTRVJUKG0tPm1fZXh0LmV4dF90eXBlID09IDAsCi0J CQkJKCIlczogdW5rbm93biBleHRfdHlwZSIsIF9fZnVuY19fKSk7Ci0JCX0KKwkJbS0+bV9kYXRh ID0gbS0+bV9wa3RkYXQ7CisJCWJ6ZXJvKCZtLT5tX3BrdGhkciwgc2l6ZW9mKG0tPm1fcGt0aGRy KSk7CisjaWZkZWYgTUFDCisJCS8qIElmIHRoZSBsYWJlbCBpbml0IGZhaWxzLCBmYWlsIHRoZSBh bGxvYyAqLworCQllcnJvciA9IG1hY19tYnVmX2luaXQobSwgaG93KTsKKwkJaWYgKGVycm9yKQor CQkJcmV0dXJuIChlcnJvcik7CisjZW5kaWYKIAl9CiAKLQlpZiAoZnJlZW1idWYpCi0JCXVtYV96 ZnJlZSh6b25lX21idWYsIG0pOworCXJldHVybiAoMCk7CiB9CiAKIC8qCmRpZmYgLS1naXQgYS9z eXMva2Vybi9rZXJuX21idWYuYyBiL3N5cy9rZXJuL2tlcm5fbWJ1Zi5jCi0tLSBhL3N5cy9rZXJu L2tlcm5fbWJ1Zi5jCisrKyBiL3N5cy9rZXJuL2tlcm5fbWJ1Zi5jCkBAIC00NCw4ICs0NCw2IEBA CiAjaW5jbHVkZSA8c3lzL3NtcC5oPgogI2luY2x1ZGUgPHN5cy9zeXNjdGwuaD4KIAotI2luY2x1 ZGUgPHNlY3VyaXR5L21hYy9tYWNfZnJhbWV3b3JrLmg+Ci0KICNpbmNsdWRlIDx2bS92bS5oPgog I2luY2x1ZGUgPHZtL3ZtX2V4dGVybi5oPgogI2luY2x1ZGUgPHZtL3ZtX2tlcm4uaD4KQEAgLTk5 LDYgKzk3LDE3IEBACiAgKgogICovCiAKKy8qCisgKiBab25lcyBmcm9tIHdoaWNoIHdlIGFsbG9j YXRlLgorICovCitzdGF0aWMgdW1hX3pvbmVfdAl6b25lX21idWY7CitzdGF0aWMgdW1hX3pvbmVf dAl6b25lX2NsdXN0Oworc3RhdGljIHVtYV96b25lX3QJem9uZV9wYWNrOworc3RhdGljIHVtYV96 b25lX3QJem9uZV9qdW1ib3A7CitzdGF0aWMgdW1hX3pvbmVfdAl6b25lX2p1bWJvOTsKK3N0YXRp YyB1bWFfem9uZV90CXpvbmVfanVtYm8xNjsKK3N0YXRpYyB1bWFfem9uZV90CXpvbmVfZXh0X3Jl ZmNudDsKKwogaW50IG5tYnVmczsJCQkvKiBsaW1pdHMgbnVtYmVyIG9mIG1idWZzICovCiBpbnQg bm1iY2x1c3RlcnM7CQkvKiBsaW1pdHMgbnVtYmVyIG9mIG1idWYgY2x1c3RlcnMgKi8KIGludCBu bWJqdW1ib3A7CQkJLyogbGltaXRzIG51bWJlciBvZiBwYWdlIHNpemUganVtYm8gY2x1c3RlcnMg Ki8KQEAgLTExMSw2ICsxMjAsMTUgQEAKICAgICAiTWF4aW11bSByZWFsIG1lbW9yeSBhbGxvY2F0 YWJsZSB0byB2YXJpb3VzIG1idWYgdHlwZXMiKTsKIAogLyoKKyAqIEFyZ3VtZW50IHN0cnVjdHVy ZSBwYXNzZWQgdG8gVU1BIHJvdXRpbmVzIGR1cmluZyBtYnVmIGFuZCBwYWNrZXQKKyAqIGFsbG9j YXRpb25zLgorICovCitzdHJ1Y3QgbWJfYXJncyB7CisJaW50CWZsYWdzOwkvKiBGbGFncyBmb3Ig bWJ1ZiBiZWluZyBhbGxvY2F0ZWQgKi8KKwlzaG9ydAl0eXBlOwkvKiBUeXBlIG9mIG1idWYgYmVp bmcgYWxsb2NhdGVkICovCit9OworCisvKgogICogdHVuYWJsZV9tYmluaXQoKSBoYXMgdG8gYmUg cnVuIGJlZm9yZSBhbnkgbWJ1ZiBhbGxvY2F0aW9ucyBhcmUgZG9uZS4KICAqLwogc3RhdGljIHZv aWQKQEAgLTI2MywzNCArMjgxLDI1IEBACiAgICAgIk1heGltdW0gbnVtYmVyIG9mIG1idWZzIGFs bG93ZWQiKTsKIAogLyoKLSAqIFpvbmVzIGZyb20gd2hpY2ggd2UgYWxsb2NhdGUuCi0gKi8KLXVt YV96b25lX3QJem9uZV9tYnVmOwotdW1hX3pvbmVfdAl6b25lX2NsdXN0OwotdW1hX3pvbmVfdAl6 b25lX3BhY2s7Ci11bWFfem9uZV90CXpvbmVfanVtYm9wOwotdW1hX3pvbmVfdAl6b25lX2p1bWJv OTsKLXVtYV96b25lX3QJem9uZV9qdW1ibzE2OwotdW1hX3pvbmVfdAl6b25lX2V4dF9yZWZjbnQ7 Ci0KLS8qCiAgKiBDYWxsb3V0IHRvIGFzc2lzdCB1cyBpbiBmcmVlaW5nIG1idWZzLgogICovCiBz dGF0aWMgc3RydWN0IGNhbGxvdXQJbWJfcmVjbGFpbV9jYWxsb3V0Owogc3RhdGljIHN0cnVjdCBt dHgJbWJfcmVjbGFpbV9jYWxsb3V0X210eDsKIAogLyoKICAqIExvY2FsIHByb3RvdHlwZXMuCisg KiBYWFg6IHR3byBhcmUgZXhwb3J0ZWQgZm9yIHNha2Ugb2YgY3hnYmUoNCkKICAqLwordW1hX3pv bmVfdAltX2dldHpvbmUoaW50KTsKK3ZvaWQJCW1fY2xqc2V0KHN0cnVjdCBtYnVmICosIHZvaWQg KiwgaW50KTsKIHN0YXRpYyBpbnQJbWJfY3Rvcl9tYnVmKHZvaWQgKiwgaW50LCB2b2lkICosIGlu dCk7CiBzdGF0aWMgaW50CW1iX2N0b3JfY2x1c3Qodm9pZCAqLCBpbnQsIHZvaWQgKiwgaW50KTsK IHN0YXRpYyBpbnQJbWJfY3Rvcl9wYWNrKHZvaWQgKiwgaW50LCB2b2lkICosIGludCk7CiBzdGF0 aWMgdm9pZAltYl9kdG9yX21idWYodm9pZCAqLCBpbnQsIHZvaWQgKik7CiBzdGF0aWMgdm9pZAlt Yl9kdG9yX2NsdXN0KHZvaWQgKiwgaW50LCB2b2lkICopOwogc3RhdGljIHZvaWQJbWJfZHRvcl9w YWNrKHZvaWQgKiwgaW50LCB2b2lkICopOwogc3RhdGljIGludAltYl96aW5pdF9wYWNrKHZvaWQg KiwgaW50LCBpbnQpOwogc3RhdGljIHZvaWQJbWJfemZpbmlfcGFjayh2b2lkICosIGludCk7Ci0K IHN0YXRpYyB2b2lkCW1iX3JlY2xhaW0odm9pZCAqKTsKIHN0YXRpYyB2b2lkICAgICptYnVmX2p1 bWJvX2FsbG9jKHVtYV96b25lX3QsIHZtX3NpemVfdCwgdWludDhfdCAqLCBpbnQpOwogc3RhdGlj IHZvaWQJbWJfbWF4YWN0aW9uKHVtYV96b25lX3QpOwpAQCAtNDQ5LDcgKzQ1OCw3IEBACiAJbSA9 IChzdHJ1Y3QgbWJ1ZiAqKW1lbTsKIAlmbGFncyA9IGFyZ3MtPmZsYWdzOwogCi0JZXJyb3IgPSBt X2luaXQobSwgTlVMTCwgc2l6ZSwgaG93LCB0eXBlLCBmbGFncyk7CisJZXJyb3IgPSBtX2luaXQo bSwgaG93LCB0eXBlLCBmbGFncyk7CiAKIAlyZXR1cm4gKGVycm9yKTsKIH0KQEAgLTY0OSwzMyAr NjU4LDE1IEBACiAJdHJhc2hfY3RvcihtLT5tX2V4dC5leHRfYnVmLCBNQ0xCWVRFUywgYXJnLCBo b3cpOwogI2VuZGlmCiAKLQllcnJvciA9IG1faW5pdChtLCBOVUxMLCBzaXplLCBob3csIHR5cGUs IGZsYWdzKTsKKwllcnJvciA9IG1faW5pdChtLCBob3csIHR5cGUsIGZsYWdzKTsKIAogCS8qIG1f ZXh0IGlzIGFscmVhZHkgaW5pdGlhbGl6ZWQuICovCiAJbS0+bV9kYXRhID0gbS0+bV9leHQuZXh0 X2J1ZjsKICAJbS0+bV9mbGFncyA9IChmbGFncyB8IE1fRVhUKTsKIAogCXJldHVybiAoZXJyb3Ip OwogfQogCi1pbnQKLW1fcGt0aGRyX2luaXQoc3RydWN0IG1idWYgKm0sIGludCBob3cpCi17Ci0j aWZkZWYgTUFDCi0JaW50IGVycm9yOwotI2VuZGlmCi0JbS0+bV9kYXRhID0gbS0+bV9wa3RkYXQ7 Ci0JYnplcm8oJm0tPm1fcGt0aGRyLCBzaXplb2YobS0+bV9wa3RoZHIpKTsKLSNpZmRlZiBNQUMK LQkvKiBJZiB0aGUgbGFiZWwgaW5pdCBmYWlscywgZmFpbCB0aGUgYWxsb2MgKi8KLQllcnJvciA9 IG1hY19tYnVmX2luaXQobSwgaG93KTsKLQlpZiAoZXJyb3IpCi0JCXJldHVybiAoZXJyb3IpOwot I2VuZGlmCi0KLQlyZXR1cm4gKDApOwotfQotCiAvKgogICogVGhpcyBpcyB0aGUgcHJvdG9jb2wg ZHJhaW4gcm91dGluZS4KICAqCkBAIC03NTUsMyArNzQ2LDQzNyBAQAogCiAJbXR4X3VubG9jaygm bWJfcmVjbGFpbV9jYWxsb3V0X210eCk7CiB9CisKKy8qCisgKiBTZWxlY3Qgem9uZSBieSBzaXpl LgorICovCit1bWFfem9uZV90CittX2dldHpvbmUoaW50IHNpemUpCit7CisJdW1hX3pvbmVfdCB6 b25lOworCisJc3dpdGNoIChzaXplKSB7CisJY2FzZSBNQ0xCWVRFUzoKKwkJem9uZSA9IHpvbmVf Y2x1c3Q7CisJCWJyZWFrOworI2lmIE1KVU1QQUdFU0laRSAhPSBNQ0xCWVRFUworCWNhc2UgTUpV TVBBR0VTSVpFOgorCQl6b25lID0gem9uZV9qdW1ib3A7CisJCWJyZWFrOworI2VuZGlmCisJY2Fz ZSBNSlVNOUJZVEVTOgorCQl6b25lID0gem9uZV9qdW1ibzk7CisJCWJyZWFrOworCWNhc2UgTUpV TTE2QllURVM6CisJCXpvbmUgPSB6b25lX2p1bWJvMTY7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJ CXBhbmljKCIlczogaW52YWxpZCBjbHVzdGVyIHNpemUgJWQiLCBfX2Z1bmNfXywgc2l6ZSk7CisJ fQorCisJcmV0dXJuICh6b25lKTsKK30KKworLyoKKyAqIENsZWFuIHVwIGFmdGVyIG1idWZzIHdp dGggTV9FWFQgc3RvcmFnZSBhdHRhY2hlZCB0byB0aGVtIGlmIHRoZQorICogcmVmZXJlbmNlIGNv dW50IGhpdHMgMS4KKyAqLworc3RhdGljIHZvaWQKK21iX2ZyZWVfZXh0KHN0cnVjdCBtYnVmICpt KQoreworCWludCBmcmVlbWJ1ZjsKKworCUtBU1NFUlQobS0+bV9mbGFncyAmIE1fRVhULCAoIiVz OiBNX0VYVCBub3Qgc2V0IG9uICVwIiwgX19mdW5jX18sIG0pKTsKKworCS8qCisJICogQ2hlY2sg aWYgdGhlIGhlYWRlciBpcyBlbWJlZGRlZCBpbiB0aGUgY2x1c3Rlci4KKwkgKi8KKwlmcmVlbWJ1 ZiA9IChtLT5tX2ZsYWdzICYgTV9OT0ZSRUUpID8gMCA6IDE7CisKKwlzd2l0Y2ggKG0tPm1fZXh0 LmV4dF90eXBlKSB7CisJY2FzZSBFWFRfU0ZCVUY6CisJCXNmX2V4dF9mcmVlKG0tPm1fZXh0LmV4 dF9hcmcxLCBtLT5tX2V4dC5leHRfYXJnMik7CisJCWJyZWFrOworCWNhc2UgRVhUX1NGQlVGX05P Q0FDSEU6CisJCXNmX2V4dF9mcmVlX25vY2FjaGUobS0+bV9leHQuZXh0X2FyZzEsIG0tPm1fZXh0 LmV4dF9hcmcyKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJS0FTU0VSVChtLT5tX2V4dC5leHRf Y250ICE9IE5VTEwsCisJCSAgICAoIiVzOiBubyByZWZjb3VudGluZyBwb2ludGVyIG9uICVwIiwg X19mdW5jX18sIG0pKTsKKwkJLyogCisJCSAqIEZyZWUgYXR0YWNoZWQgc3RvcmFnZSBpZiB0aGlz IG1idWYgaXMgdGhlIG9ubHkKKwkJICogcmVmZXJlbmNlIHRvIGl0LgorCQkgKi8KKwkJaWYgKCoo bS0+bV9leHQuZXh0X2NudCkgIT0gMSkgeworCQkJaWYgKGF0b21pY19mZXRjaGFkZF9pbnQobS0+ bV9leHQuZXh0X2NudCwgLTEpICE9IDEpCisJCQkJYnJlYWs7CisJCX0KKworCQlzd2l0Y2ggKG0t Pm1fZXh0LmV4dF90eXBlKSB7CisJCWNhc2UgRVhUX1BBQ0tFVDoJLyogVGhlIHBhY2tldCB6b25l IGlzIHNwZWNpYWwuICovCisJCQlpZiAoKihtLT5tX2V4dC5leHRfY250KSA9PSAwKQorCQkJCSoo bS0+bV9leHQuZXh0X2NudCkgPSAxOworCQkJdW1hX3pmcmVlKHpvbmVfcGFjaywgbSk7CisJCQly ZXR1cm47CQkvKiBKb2IgZG9uZS4gKi8KKwkJY2FzZSBFWFRfQ0xVU1RFUjoKKwkJCXVtYV96ZnJl ZSh6b25lX2NsdXN0LCBtLT5tX2V4dC5leHRfYnVmKTsKKwkJCWJyZWFrOworCQljYXNlIEVYVF9K VU1CT1A6CisJCQl1bWFfemZyZWUoem9uZV9qdW1ib3AsIG0tPm1fZXh0LmV4dF9idWYpOworCQkJ YnJlYWs7CisJCWNhc2UgRVhUX0pVTUJPOToKKwkJCXVtYV96ZnJlZSh6b25lX2p1bWJvOSwgbS0+ bV9leHQuZXh0X2J1Zik7CisJCQlicmVhazsKKwkJY2FzZSBFWFRfSlVNQk8xNjoKKwkJCXVtYV96 ZnJlZSh6b25lX2p1bWJvMTYsIG0tPm1fZXh0LmV4dF9idWYpOworCQkJYnJlYWs7CisJCWNhc2Ug RVhUX05FVF9EUlY6CisJCWNhc2UgRVhUX01PRF9UWVBFOgorCQljYXNlIEVYVF9ESVNQT1NBQkxF OgorCQkJKihtLT5tX2V4dC5leHRfY250KSA9IDA7CisJCQl1bWFfemZyZWUoem9uZV9leHRfcmVm Y250LCBfX0RFVk9MQVRJTEUodV9pbnQgKiwKKwkJCQltLT5tX2V4dC5leHRfY250KSk7CisJCQkv KiBGQUxMVEhST1VHSCAqLworCQljYXNlIEVYVF9FWFRSRUY6CisJCQlLQVNTRVJUKG0tPm1fZXh0 LmV4dF9mcmVlICE9IE5VTEwsCisJCQkJKCIlczogZXh0X2ZyZWUgbm90IHNldCIsIF9fZnVuY19f KSk7CisJCQkoKihtLT5tX2V4dC5leHRfZnJlZSkpKG0sIG0tPm1fZXh0LmV4dF9hcmcxLAorCQkJ ICAgIG0tPm1fZXh0LmV4dF9hcmcyKTsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJS0FTU0VS VChtLT5tX2V4dC5leHRfdHlwZSA9PSAwLAorCQkJCSgiJXM6IHVua25vd24gZXh0X3R5cGUiLCBf X2Z1bmNfXykpOworCQl9CisJfQorCisJaWYgKGZyZWVtYnVmKQorCQl1bWFfemZyZWUoem9uZV9t YnVmLCBtKTsKK30KKworLyoKKyAqIE9mZmljaWFsIG1idWYoOSkgYWxsb2NhdGlvbiBLUEkgZm9y IHN0YWNrIGFuZCBkcml2ZXJzOgorICoKKyAqIG1fZ2V0KCkJLSBhIHNpbmdsZSBtYnVmIHdpdGhv dXQgYW55IGF0dGFjaG1lbnRzLgorICogbV9nZXRoZHIoKQktIGEgc2luZ2xlIG1idWYgaW5pdGlh bGl6ZWQgYXMgTV9QS1RIRFIuCisgKiBtX2dldGNsKCkJLSBhbiBtYnVmICsgMmsgY2x1c3Rlci4K KyAqIG1fY2xnZXQoKQktIGF0dGFjaCBjbHVzdGVyIHRvIGFscmVhZHkgYWxsb2NhdGVkIG1idWYu CisgKiBtX2NsamdldCgpCS0gYXR0YWNoIGp1bWJvIGNsdXN0ZXIgdG8gYWxyZWFkeSBhbGxvY2F0 ZWQgbWJ1Zi4KKyAqIG1fZ2V0MigpCS0gYWxsb2NhdGUgbWluaW11bSBtYnVmIHRoYXQgd291bGQg Zml0IHNpemUgYXJndW1lbnQuCisgKiBtX2dldG0yKCkJLSBhbGxvY2F0ZSBhIGNoYWluIG9mIG1i dWZzL2NsdXN0ZXJzLgorICogbV9leHRhZGQoKQktIGF0dGFjaCBleHRlcm5hbCBjbHVzdGVyIHRv IG1idWYuCisgKgorICogbV9mcmVlKCkJLSBmcmVlIHNpbmdsZSBtYnVmIHdpdGggaXRzIHRhZ3Mg YW5kIGV4dCwgcmV0dXJucyBuZXh0IG1idWYuCisgKiBtX2ZyZWVtKCkJLSBmcmVlIGNoYWluIG9m IG1idWZzLgorICovCisKK3N0cnVjdCBtYnVmICoKK21fZ2V0KGludCBob3csIHNob3J0IHR5cGUp Cit7CisJc3RydWN0IG1iX2FyZ3MgYXJnczsKKworCWFyZ3MuZmxhZ3MgPSAwOworCWFyZ3MudHlw ZSA9IHR5cGU7CisJcmV0dXJuICh1bWFfemFsbG9jX2FyZyh6b25lX21idWYsICZhcmdzLCBob3cp KTsKK30KKworc3RydWN0IG1idWYgKgorbV9nZXRoZHIoaW50IGhvdywgc2hvcnQgdHlwZSkKK3sK KwlzdHJ1Y3QgbWJfYXJncyBhcmdzOworCisJYXJncy5mbGFncyA9IE1fUEtUSERSOworCWFyZ3Mu dHlwZSA9IHR5cGU7CisJcmV0dXJuICh1bWFfemFsbG9jX2FyZyh6b25lX21idWYsICZhcmdzLCBo b3cpKTsKK30KKworc3RydWN0IG1idWYgKgorbV9nZXRjbChpbnQgaG93LCBzaG9ydCB0eXBlLCBp bnQgZmxhZ3MpCit7CisJc3RydWN0IG1iX2FyZ3MgYXJnczsKKworCWFyZ3MuZmxhZ3MgPSBmbGFn czsKKwlhcmdzLnR5cGUgPSB0eXBlOworCXJldHVybiAodW1hX3phbGxvY19hcmcoem9uZV9wYWNr LCAmYXJncywgaG93KSk7Cit9CisKK2ludAorbV9jbGdldChzdHJ1Y3QgbWJ1ZiAqbSwgaW50IGhv dykKK3sKKworCUtBU1NFUlQoKG0tPm1fZmxhZ3MgJiBNX0VYVCkgPT0gMCwgKCIlczogbWJ1ZiAl cCBoYXMgTV9FWFQiLAorCSAgICBfX2Z1bmNfXywgbSkpOworCW0tPm1fZXh0LmV4dF9idWYgPSAo Y2hhciAqKU5VTEw7CisJdW1hX3phbGxvY19hcmcoem9uZV9jbHVzdCwgbSwgaG93KTsKKwkvKgor CSAqIE9uIGEgY2x1c3RlciBhbGxvY2F0aW9uIGZhaWx1cmUsIGRyYWluIHRoZSBwYWNrZXQgem9u ZSBhbmQgcmV0cnksCisJICogd2UgbWlnaHQgYmUgYWJsZSB0byBsb29zZW4gYSBmZXcgY2x1c3Rl cnMgdXAgb24gdGhlIGRyYWluLgorCSAqLworCWlmICgoaG93ICYgTV9OT1dBSVQpICYmIChtLT5t X2V4dC5leHRfYnVmID09IE5VTEwpKSB7CisJCXpvbmVfZHJhaW4oem9uZV9wYWNrKTsKKwkJdW1h X3phbGxvY19hcmcoem9uZV9jbHVzdCwgbSwgaG93KTsKKwl9CisJcmV0dXJuIChtLT5tX2ZsYWdz ICYgTV9FWFQpOworfQorCisvKgorICogbV9jbGpnZXQoKSBpcyBkaWZmZXJlbnQgZnJvbSBtX2Ns Z2V0KCkgYXMgaXQgY2FuIGFsbG9jYXRlIGNsdXN0ZXJzIHdpdGhvdXQKKyAqIGF0dGFjaGluZyB0 aGVtIHRvIGFuIG1idWYuICBJbiB0aGF0IGNhc2UgdGhlIHJldHVybiB2YWx1ZSBpcyB0aGUgcG9p bnRlcgorICogdG8gdGhlIGNsdXN0ZXIgb2YgdGhlIHJlcXVlc3RlZCBzaXplLiAgSWYgYW4gbWJ1 ZiB3YXMgc3BlY2lmaWVkLCBpdCBnZXRzCisgKiB0aGUgY2x1c3RlciBhdHRhY2hlZCB0byBpdCBh bmQgdGhlIHJldHVybiB2YWx1ZSBjYW4gYmUgc2FmZWx5IGlnbm9yZWQuCisgKiBGb3Igc2l6ZSBp dCB0YWtlcyBNQ0xCWVRFUywgTUpVTVBBR0VTSVpFLCBNSlVNOUJZVEVTLCBNSlVNMTZCWVRFUy4K KyAqLwordm9pZCAqCittX2NsamdldChzdHJ1Y3QgbWJ1ZiAqbSwgaW50IGhvdywgaW50IHNpemUp Cit7CisJdW1hX3pvbmVfdCB6b25lOworCisJaWYgKG0gIT0gTlVMTCkgeworCQlLQVNTRVJUKCht LT5tX2ZsYWdzICYgTV9FWFQpID09IDAsICgiJXM6IG1idWYgJXAgaGFzIE1fRVhUIiwKKwkJICAg IF9fZnVuY19fLCBtKSk7CisJCW0tPm1fZXh0LmV4dF9idWYgPSBOVUxMOworCX0KKworCXpvbmUg PSBtX2dldHpvbmUoc2l6ZSk7CisJcmV0dXJuICh1bWFfemFsbG9jX2FyZyh6b25lLCBtLCBob3cp KTsKK30KKwordm9pZAorbV9jbGpzZXQoc3RydWN0IG1idWYgKm0sIHZvaWQgKmNsLCBpbnQgdHlw ZSkKK3sKKwl1bWFfem9uZV90IHpvbmU7CisJaW50IHNpemU7CisKKwlzd2l0Y2ggKHR5cGUpIHsK KwljYXNlIEVYVF9DTFVTVEVSOgorCQlzaXplID0gTUNMQllURVM7CisJCXpvbmUgPSB6b25lX2Ns dXN0OworCQlicmVhazsKKyNpZiBNSlVNUEFHRVNJWkUgIT0gTUNMQllURVMKKwljYXNlIEVYVF9K VU1CT1A6CisJCXNpemUgPSBNSlVNUEFHRVNJWkU7CisJCXpvbmUgPSB6b25lX2p1bWJvcDsKKwkJ YnJlYWs7CisjZW5kaWYKKwljYXNlIEVYVF9KVU1CTzk6CisJCXNpemUgPSBNSlVNOUJZVEVTOwor CQl6b25lID0gem9uZV9qdW1ibzk7CisJCWJyZWFrOworCWNhc2UgRVhUX0pVTUJPMTY6CisJCXNp emUgPSBNSlVNMTZCWVRFUzsKKwkJem9uZSA9IHpvbmVfanVtYm8xNjsKKwkJYnJlYWs7CisJZGVm YXVsdDoKKwkJcGFuaWMoIiVzOiB1bmtub3duIGNsdXN0ZXIgdHlwZSAlZCIsIF9fZnVuY19fLCB0 eXBlKTsKKwkJYnJlYWs7CisJfQorCisJbS0+bV9kYXRhID0gbS0+bV9leHQuZXh0X2J1ZiA9IGNs OworCW0tPm1fZXh0LmV4dF9mcmVlID0gbS0+bV9leHQuZXh0X2FyZzEgPSBtLT5tX2V4dC5leHRf YXJnMiA9IE5VTEw7CisJbS0+bV9leHQuZXh0X3NpemUgPSBzaXplOworCW0tPm1fZXh0LmV4dF90 eXBlID0gdHlwZTsKKwltLT5tX2V4dC5leHRfZmxhZ3MgPSAwOworCW0tPm1fZXh0LmV4dF9jbnQg PSB1bWFfZmluZF9yZWZjbnQoem9uZSwgY2wpOworCW0tPm1fZmxhZ3MgfD0gTV9FWFQ7CisKK30K KworLyoKKyAqIG1fZ2V0MigpIGFsbG9jYXRlcyBtaW5pbXVtIG1idWYgdGhhdCB3b3VsZCBmaXQg InNpemUiIGFyZ3VtZW50LgorICovCitzdHJ1Y3QgbWJ1ZiAqCittX2dldDIoaW50IHNpemUsIGlu dCBob3csIHNob3J0IHR5cGUsIGludCBmbGFncykKK3sKKwlzdHJ1Y3QgbWJfYXJncyBhcmdzOwor CXN0cnVjdCBtYnVmICptLCAqbjsKKworCWFyZ3MuZmxhZ3MgPSBmbGFnczsKKwlhcmdzLnR5cGUg PSB0eXBlOworCisJaWYgKHNpemUgPD0gTUhMRU4gfHwgKHNpemUgPD0gTUxFTiAmJiAoZmxhZ3Mg JiBNX1BLVEhEUikgPT0gMCkpCisJCXJldHVybiAodW1hX3phbGxvY19hcmcoem9uZV9tYnVmLCAm YXJncywgaG93KSk7CisJaWYgKHNpemUgPD0gTUNMQllURVMpCisJCXJldHVybiAodW1hX3phbGxv Y19hcmcoem9uZV9wYWNrLCAmYXJncywgaG93KSk7CisKKwlpZiAoc2l6ZSA+IE1KVU1QQUdFU0la RSkKKwkJcmV0dXJuIChOVUxMKTsKKworCW0gPSB1bWFfemFsbG9jX2FyZyh6b25lX21idWYsICZh cmdzLCBob3cpOworCWlmIChtID09IE5VTEwpCisJCXJldHVybiAoTlVMTCk7CisKKwluID0gdW1h X3phbGxvY19hcmcoem9uZV9qdW1ib3AsIG0sIGhvdyk7CisJaWYgKG4gPT0gTlVMTCkgeworCQl1 bWFfemZyZWUoem9uZV9tYnVmLCBtKTsKKwkJcmV0dXJuIChOVUxMKTsKKwl9CisKKwlyZXR1cm4g KG0pOworfQorCisvKgorICogbV9nZXRqY2woKSByZXR1cm5zIGFuIG1idWYgd2l0aCBhIGNsdXN0 ZXIgb2YgdGhlIHNwZWNpZmllZCBzaXplIGF0dGFjaGVkLgorICogRm9yIHNpemUgaXQgdGFrZXMg TUNMQllURVMsIE1KVU1QQUdFU0laRSwgTUpVTTlCWVRFUywgTUpVTTE2QllURVMuCisgKi8KK3N0 cnVjdCBtYnVmICoKK21fZ2V0amNsKGludCBob3csIHNob3J0IHR5cGUsIGludCBmbGFncywgaW50 IHNpemUpCit7CisJc3RydWN0IG1iX2FyZ3MgYXJnczsKKwlzdHJ1Y3QgbWJ1ZiAqbSwgKm47CisJ dW1hX3pvbmVfdCB6b25lOworCisJaWYgKHNpemUgPT0gTUNMQllURVMpCisJCXJldHVybiBtX2dl dGNsKGhvdywgdHlwZSwgZmxhZ3MpOworCisJYXJncy5mbGFncyA9IGZsYWdzOworCWFyZ3MudHlw ZSA9IHR5cGU7CisKKwltID0gdW1hX3phbGxvY19hcmcoem9uZV9tYnVmLCAmYXJncywgaG93KTsK KwlpZiAobSA9PSBOVUxMKQorCQlyZXR1cm4gKE5VTEwpOworCisJem9uZSA9IG1fZ2V0em9uZShz aXplKTsKKwluID0gdW1hX3phbGxvY19hcmcoem9uZSwgbSwgaG93KTsKKwlpZiAobiA9PSBOVUxM KSB7CisJCXVtYV96ZnJlZSh6b25lX21idWYsIG0pOworCQlyZXR1cm4gKE5VTEwpOworCX0KKwly ZXR1cm4gKG0pOworfQorCisvKgorICogQWxsb2NhdGUgYSBnaXZlbiBsZW5ndGggd29ydGggb2Yg bWJ1ZnMgYW5kL29yIGNsdXN0ZXJzICh3aGF0ZXZlciBmaXRzCisgKiBiZXN0KSBhbmQgcmV0dXJu IGEgcG9pbnRlciB0byB0aGUgdG9wIG9mIHRoZSBhbGxvY2F0ZWQgY2hhaW4uICBJZiBhbgorICog ZXhpc3RpbmcgbWJ1ZiBjaGFpbiBpcyBwcm92aWRlZCwgdGhlbiB3ZSB3aWxsIGFwcGVuZCB0aGUg bmV3IGNoYWluCisgKiB0byB0aGUgZXhpc3Rpbmcgb25lIGJ1dCBzdGlsbCByZXR1cm4gdGhlIHRv cCBvZiB0aGUgbmV3bHkgYWxsb2NhdGVkCisgKiBjaGFpbi4KKyAqLworc3RydWN0IG1idWYgKgor bV9nZXRtMihzdHJ1Y3QgbWJ1ZiAqbSwgaW50IGxlbiwgaW50IGhvdywgc2hvcnQgdHlwZSwgaW50 IGZsYWdzKQoreworCXN0cnVjdCBtYnVmICptYiwgKm5tID0gTlVMTCwgKm10YWlsID0gTlVMTDsK KworCUtBU1NFUlQobGVuID49IDAsICgiJXM6IGxlbiBpcyA8IDAiLCBfX2Z1bmNfXykpOworCisJ LyogVmFsaWRhdGUgZmxhZ3MuICovCisJZmxhZ3MgJj0gKE1fUEtUSERSIHwgTV9FT1IpOworCisJ LyogUGFja2V0IGhlYWRlciBtYnVmIG11c3QgYmUgZmlyc3QgaW4gY2hhaW4uICovCisJaWYgKChm bGFncyAmIE1fUEtUSERSKSAmJiBtICE9IE5VTEwpCisJCWZsYWdzICY9IH5NX1BLVEhEUjsKKwor CS8qIExvb3AgYW5kIGFwcGVuZCBtYXhpbXVtIHNpemVkIG1idWZzIHRvIHRoZSBjaGFpbiB0YWls LiAqLworCXdoaWxlIChsZW4gPiAwKSB7CisJCWlmIChsZW4gPiBNQ0xCWVRFUykKKwkJCW1iID0g bV9nZXRqY2woaG93LCB0eXBlLCAoZmxhZ3MgJiBNX1BLVEhEUiksCisJCQkgICAgTUpVTVBBR0VT SVpFKTsKKwkJZWxzZSBpZiAobGVuID49IE1JTkNMU0laRSkKKwkJCW1iID0gbV9nZXRjbChob3cs IHR5cGUsIChmbGFncyAmIE1fUEtUSERSKSk7CisJCWVsc2UgaWYgKGZsYWdzICYgTV9QS1RIRFIp CisJCQltYiA9IG1fZ2V0aGRyKGhvdywgdHlwZSk7CisJCWVsc2UKKwkJCW1iID0gbV9nZXQoaG93 LCB0eXBlKTsKKworCQkvKiBGYWlsIHRoZSB3aG9sZSBvcGVyYXRpb24gaWYgb25lIG1idWYgY2Fu J3QgYmUgYWxsb2NhdGVkLiAqLworCQlpZiAobWIgPT0gTlVMTCkgeworCQkJaWYgKG5tICE9IE5V TEwpCisJCQkJbV9mcmVlbShubSk7CisJCQlyZXR1cm4gKE5VTEwpOworCQl9CisKKwkJLyogQm9v ayBrZWVwaW5nLiAqLworCQlsZW4gLT0gTV9TSVpFKG1iKTsKKwkJaWYgKG10YWlsICE9IE5VTEwp CisJCQltdGFpbC0+bV9uZXh0ID0gbWI7CisJCWVsc2UKKwkJCW5tID0gbWI7CisJCW10YWlsID0g bWI7CisJCWZsYWdzICY9IH5NX1BLVEhEUjsJLyogT25seSB2YWxpZCBvbiB0aGUgZmlyc3QgbWJ1 Zi4gKi8KKwl9CisJaWYgKGZsYWdzICYgTV9FT1IpCisJCW10YWlsLT5tX2ZsYWdzIHw9IE1fRU9S OyAgLyogT25seSB2YWxpZCBvbiB0aGUgbGFzdCBtYnVmLiAqLworCisJLyogSWYgbWJ1ZiB3YXMg c3VwcGxpZWQsIGFwcGVuZCBuZXcgY2hhaW4gdG8gdGhlIGVuZCBvZiBpdC4gKi8KKwlpZiAobSAh PSBOVUxMKSB7CisJCWZvciAobXRhaWwgPSBtOyBtdGFpbC0+bV9uZXh0ICE9IE5VTEw7IG10YWls ID0gbXRhaWwtPm1fbmV4dCkKKwkJCTsKKwkJbXRhaWwtPm1fbmV4dCA9IG5tOworCQltdGFpbC0+ bV9mbGFncyAmPSB+TV9FT1I7CisJfSBlbHNlCisJCW0gPSBubTsKKworCXJldHVybiAobSk7Cit9 CisKKy8qLQorICogQ29uZmlndXJlIGEgcHJvdmlkZWQgbWJ1ZiB0byByZWZlciB0byB0aGUgcHJv dmlkZWQgZXh0ZXJuYWwgc3RvcmFnZQorICogYnVmZmVyIGFuZCBzZXR1cCBhIHJlZmVyZW5jZSBj b3VudCBmb3Igc2FpZCBidWZmZXIuICBJZiB0aGUgc2V0dGluZworICogdXAgb2YgdGhlIHJlZmVy ZW5jZSBjb3VudCBmYWlscywgdGhlIE1fRVhUIGJpdCB3aWxsIG5vdCBiZSBzZXQuICBJZgorICog c3VjY2Vzc2Z1bGwsIHRoZSBNX0VYVCBiaXQgaXMgc2V0IGluIHRoZSBtYnVmJ3MgZmxhZ3MuCisg KgorICogQXJndW1lbnRzOgorICogICAgbWIgICAgIFRoZSBleGlzdGluZyBtYnVmIHRvIHdoaWNo IHRvIGF0dGFjaCB0aGUgcHJvdmlkZWQgYnVmZmVyLgorICogICAgYnVmICAgIFRoZSBhZGRyZXNz IG9mIHRoZSBwcm92aWRlZCBleHRlcm5hbCBzdG9yYWdlIGJ1ZmZlci4KKyAqICAgIHNpemUgICBU aGUgc2l6ZSBvZiB0aGUgcHJvdmlkZWQgYnVmZmVyLgorICogICAgZnJlZWYgIEEgcG9pbnRlciB0 byBhIHJvdXRpbmUgdGhhdCBpcyByZXNwb25zaWJsZSBmb3IgZnJlZWluZyB0aGUKKyAqICAgICAg ICAgICBwcm92aWRlZCBleHRlcm5hbCBzdG9yYWdlIGJ1ZmZlci4KKyAqICAgIGFyZ3MgICBBIHBv aW50ZXIgdG8gYW4gYXJndW1lbnQgc3RydWN0dXJlIChvZiBhbnkgdHlwZSkgdG8gYmUgcGFzc2Vk CisgKiAgICAgICAgICAgdG8gdGhlIHByb3ZpZGVkIGZyZWVmIHJvdXRpbmUgKG1heSBiZSBOVUxM KS4KKyAqICAgIGZsYWdzICBBbnkgb3RoZXIgZmxhZ3MgdG8gYmUgcGFzc2VkIHRvIHRoZSBwcm92 aWRlZCBtYnVmLgorICogICAgdHlwZSAgIFRoZSB0eXBlIHRoYXQgdGhlIGV4dGVybmFsIHN0b3Jh Z2UgYnVmZmVyIHNob3VsZCBiZQorICogICAgICAgICAgIGxhYmVsZWQgd2l0aC4KKyAqCisgKiBS ZXR1cm5zOgorICogICAgTm90aGluZy4KKyAqLworaW50CittX2V4dGFkZChzdHJ1Y3QgbWJ1ZiAq bWIsIGNhZGRyX3QgYnVmLCB1X2ludCBzaXplLAorICAgIHZvaWQgKCpmcmVlZikoc3RydWN0IG1i dWYgKiwgdm9pZCAqLCB2b2lkICopLCB2b2lkICphcmcxLCB2b2lkICphcmcyLAorICAgIGludCBm bGFncywgaW50IHR5cGUsIGludCB3YWl0KQoreworCUtBU1NFUlQodHlwZSAhPSBFWFRfQ0xVU1RF UiwgKCIlczogRVhUX0NMVVNURVIgbm90IGFsbG93ZWQiLCBfX2Z1bmNfXykpOworCisJaWYgKHR5 cGUgIT0gRVhUX0VYVFJFRikKKwkJbWItPm1fZXh0LmV4dF9jbnQgPSB1bWFfemFsbG9jKHpvbmVf ZXh0X3JlZmNudCwgd2FpdCk7CisKKwlpZiAobWItPm1fZXh0LmV4dF9jbnQgPT0gTlVMTCkKKwkJ cmV0dXJuIChFTk9NRU0pOworCisJKihtYi0+bV9leHQuZXh0X2NudCkgPSAxOworCW1iLT5tX2Zs YWdzIHw9IChNX0VYVCB8IGZsYWdzKTsKKwltYi0+bV9leHQuZXh0X2J1ZiA9IGJ1ZjsKKwltYi0+ bV9kYXRhID0gbWItPm1fZXh0LmV4dF9idWY7CisJbWItPm1fZXh0LmV4dF9zaXplID0gc2l6ZTsK KwltYi0+bV9leHQuZXh0X2ZyZWUgPSBmcmVlZjsKKwltYi0+bV9leHQuZXh0X2FyZzEgPSBhcmcx OworCW1iLT5tX2V4dC5leHRfYXJnMiA9IGFyZzI7CisJbWItPm1fZXh0LmV4dF90eXBlID0gdHlw ZTsKKwltYi0+bV9leHQuZXh0X2ZsYWdzID0gMDsKKworCXJldHVybiAoMCk7Cit9CisKK3N0cnVj dCBtYnVmICoKK21fZnJlZShzdHJ1Y3QgbWJ1ZiAqbSkKK3sKKwlzdHJ1Y3QgbWJ1ZiAqbiA9IG0t Pm1fbmV4dDsKKworCWlmICgobS0+bV9mbGFncyAmIChNX1BLVEhEUnxNX05PRlJFRSkpID09IChN X1BLVEhEUnxNX05PRlJFRSkpCisJCW1fdGFnX2RlbGV0ZV9jaGFpbihtLCBOVUxMKTsKKwlpZiAo bS0+bV9mbGFncyAmIE1fRVhUKQorCQltYl9mcmVlX2V4dChtKTsKKwllbHNlIGlmICgobS0+bV9m bGFncyAmIE1fTk9GUkVFKSA9PSAwKQorCQl1bWFfemZyZWUoem9uZV9tYnVmLCBtKTsKKwlyZXR1 cm4gKG4pOworfQorCisvKgorICogRnJlZSBhbiBlbnRpcmUgY2hhaW4gb2YgbWJ1ZnMgYW5kIGFz c29jaWF0ZWQgZXh0ZXJuYWwgYnVmZmVycywgaWYKKyAqIGFwcGxpY2FibGUuCisgKi8KK3ZvaWQK K21fZnJlZW0oc3RydWN0IG1idWYgKm1iKQoreworCisJd2hpbGUgKG1iICE9IE5VTEwpCisJCW1i ID0gbV9mcmVlKG1iKTsKK30KZGlmZiAtLWdpdCBhL3N5cy9kZXYvbmV0bWFwL25ldG1hcF9nZW5l cmljLmMgYi9zeXMvZGV2L25ldG1hcC9uZXRtYXBfZ2VuZXJpYy5jCi0tLSBhL3N5cy9kZXYvbmV0 bWFwL25ldG1hcF9nZW5lcmljLmMKKysrIGIvc3lzL2Rldi9uZXRtYXAvbmV0bWFwX2dlbmVyaWMu YwpAQCAtMTIyLDcgKzEyMiw3IEBACiAJbS0+bV9leHQuZXh0X2ZyZWUgPSBOVUxMOwogCWlmIChH RVRfTUJVRl9SRUZDTlQobSkgPT0gMCkKIAkJU0VUX01CVUZfUkVGQ05UKG0sIDEpOwotCXVtYV96 ZnJlZSh6b25lX3BhY2ssIG0pOworCW1fZnJlZShtKTsKIH0KIAogc3RhdGljIGlubGluZSBzdHJ1 Y3QgbWJ1ZiAqCmRpZmYgLS1naXQgYS9zeXMvZGV2L2N4Z2JlL3Q0X3NnZS5jIGIvc3lzL2Rldi9j eGdiZS90NF9zZ2UuYwotLS0gYS9zeXMvZGV2L2N4Z2JlL3Q0X3NnZS5jCisrKyBiL3N5cy9kZXYv Y3hnYmUvdDRfc2dlLmMKQEAgLTcwLDYgKzcwLDEyIEBACiAjaW5jbHVkZSAiY29tbW9uL3Q0X21z Zy5oIgogI2luY2x1ZGUgInQ0X21wX3JpbmcuaCIKIAorLyoKKyAqIEludGVybmFsIG1idWYoOSkg a25vd2xlZGdlLgorICovCit1bWFfem9uZV90ICAgICAgbV9nZXR6b25lKGludCk7Cit2b2lkCQlt X2NsanNldChzdHJ1Y3QgbWJ1ZiAqbSwgdm9pZCAqY2wsIGludCB0eXBlKTsKKwogI2lmZGVmIFQ0 X1BLVF9USU1FU1RBTVAKICNkZWZpbmUgUlhfQ09QWV9USFJFU0hPTEQgKE1JTkNMU0laRSAtIDgp CiAjZWxzZQpAQCAtMTU3MCw3ICsxNTc2LDcgQEAKIAkJTVBBU1MoY2xtICE9IE5VTEwpOwogCQlt ID0gKHN0cnVjdCBtYnVmICopKHNkLT5jbCArIHNkLT5ubWJ1ZiAqIE1TSVpFKTsKIAkJLyogTm8g Ynplcm8gcmVxdWlyZWQgKi8KLQkJaWYgKG1faW5pdChtLCBOVUxMLCAwLCBNX05PV0FJVCwgTVRf REFUQSwKKwkJaWYgKG1faW5pdChtLCBNX05PV0FJVCwgTVRfREFUQSwKIAkJICAgIGZyX29mZnNl dCA9PSAwID8gTV9QS1RIRFIgfCBNX05PRlJFRSA6IE1fTk9GUkVFKSkKIAkJCXJldHVybiAoTlVM TCk7CiAJCWZsLT5tYnVmX2lubGluZWQrKzsKZGlmZiAtLWdpdCBhL3N5cy9kZXYvY3hnYmUvdDRf bmV0bWFwLmMgYi9zeXMvZGV2L2N4Z2JlL3Q0X25ldG1hcC5jCi0tLSBhL3N5cy9kZXYvY3hnYmUv dDRfbmV0bWFwLmMKKysrIGIvc3lzL2Rldi9jeGdiZS90NF9uZXRtYXAuYwpAQCAtMzYsNiArMzYs NyBAQAogI2luY2x1ZGUgPHN5cy9idXMuaD4KICNpbmNsdWRlIDxzeXMvZXZlbnRoYW5kbGVyLmg+ CiAjaW5jbHVkZSA8c3lzL2xvY2suaD4KKyNpbmNsdWRlIDxzeXMvbWFsbG9jLmg+CiAjaW5jbHVk ZSA8c3lzL21idWYuaD4KICNpbmNsdWRlIDxzeXMvbW9kdWxlLmg+CiAjaW5jbHVkZSA8c3lzL3Nl bGluZm8uaD4KZGlmZiAtLWdpdCBhL3N5cy9kZXYvY3hnYi9jeGdiX3NnZS5jIGIvc3lzL2Rldi9j eGdiL2N4Z2Jfc2dlLmMKLS0tIGEvc3lzL2Rldi9jeGdiL2N4Z2Jfc2dlLmMKKysrIGIvc3lzL2Rl di9jeGdiL2N4Z2Jfc2dlLmMKQEAgLTc3LDYgKzc3LDEyIEBACiAjaW5jbHVkZSA8Y3hnYl9pbmNs dWRlLmg+CiAjaW5jbHVkZSA8c3lzL212ZWMuaD4KIAorLyoKKyAqIEludGVybmFsIG1idWYoOSkg a25vd2xlZGdlLgorICovCit1bWFfem9uZV90CW1fZ2V0em9uZShpbnQpOwordm9pZAkJbV9jbGpz ZXQoc3RydWN0IG1idWYgKm0sIHZvaWQgKmNsLCBpbnQgdHlwZSk7CisKIGludAl0eHFfZmlsbHMg PSAwOwogaW50CW11bHRpcV90eF9lbmFibGUgPSAxOwogCkBAIC03MTMsNyArNzE5LDcgQEAKIAkJ ICogV2UgYWxsb2NhdGUgYW4gdW5pbml0aWFsaXplZCBtYnVmICsgY2x1c3RlciwgbWJ1ZiBpcwog CQkgKiBpbml0aWFsaXplZCBhZnRlciByeC4KIAkJICovCi0JCWlmIChxLT56b25lID09IHpvbmVf cGFjaykgeworCQlpZiAocS0+dHlwZSA9PSBFWFRfQ0xVU1RFUikgewogCQkJaWYgKChtID0gbV9n ZXRjbChNX05PV0FJVCwgTVRfTk9JTklULCBNX1BLVEhEUikpID09IE5VTEwpCiAJCQkJYnJlYWs7 CiAJCQljbCA9IG0tPm1fZXh0LmV4dF9idWY7CQkJCkBAIC03MzgsNyArNzQ0LDcgQEAKIAkJICAg IGNsLCBxLT5idWZfc2l6ZSwgcmVmaWxsX2ZsX2NiLCAmY2JfYXJnLCAwKTsKIAkJCiAJCWlmIChl cnIgIT0gMCB8fCBjYl9hcmcuZXJyb3IpIHsKLQkJCWlmIChxLT56b25lICE9IHpvbmVfcGFjaykK KwkJCWlmIChxLT50eXBlICE9IEVYVF9DTFVTVEVSKQogCQkJCXVtYV96ZnJlZShxLT56b25lLCBj bCk7CiAJCQltX2ZyZWUobSk7CiAJCQlnb3RvIGRvbmU7CkBAIC03OTQsMTQgKzgwMCwxMiBAQAog CQlpZiAoZC0+ZmxhZ3MgJiBSWF9TV19ERVNDX0lOVVNFKSB7CiAJCQlidXNfZG1hbWFwX3VubG9h ZChxLT5lbnRyeV90YWcsIGQtPm1hcCk7CiAJCQlidXNfZG1hbWFwX2Rlc3Ryb3kocS0+ZW50cnlf dGFnLCBkLT5tYXApOwotCQkJaWYgKHEtPnpvbmUgPT0gem9uZV9wYWNrKSB7Ci0JCQkJbV9pbml0 KGQtPm0sIHpvbmVfcGFjaywgTUNMQllURVMsCi0JCQkJICAgIE1fTk9XQUlULCBNVF9EQVRBLCBN X0VYVCk7Ci0JCQkJdW1hX3pmcmVlKHpvbmVfcGFjaywgZC0+bSk7CisJCQlpZiAocS0+dHlwZSA9 PSBFWFRfQ0xVU1RFUikgeworCQkJCW1faW5pdChkLT5tLCBNX05PV0FJVCwgTVRfREFUQSwgTV9F WFQpOworCQkJCXVtYV96ZnJlZShxLT56b25lLCBkLT5tKTsKIAkJCX0gZWxzZSB7Ci0JCQkJbV9p bml0KGQtPm0sIHpvbmVfbWJ1ZiwgTUxFTiwKLQkJCQkgICAgTV9OT1dBSVQsIE1UX0RBVEEsIDAp OwotCQkJCXVtYV96ZnJlZSh6b25lX21idWYsIGQtPm0pOworCQkJCW1faW5pdChkLT5tLCBNX05P V0FJVCwgTVRfREFUQSwgMCk7CisJCQkJbV9mcmVlKGQtPm0pOwogCQkJCXVtYV96ZnJlZShxLT56 b25lLCBkLT5yeHNkX2NsKTsKIAkJCX0JCQkKIAkJfQpAQCAtMjUxMCwyNCArMjUxNCwxMiBAQAog CSAgICBmbGl0c190b19kZXNjKHNnbF9sZW4oVFhfTUFYX1NFR1MgKyAxKSArIDMpOwogCiAJcS0+ ZmxbMF0uYnVmX3NpemUgPSBNQ0xCWVRFUzsKLQlxLT5mbFswXS56b25lID0gem9uZV9wYWNrOwot CXEtPmZsWzBdLnR5cGUgPSBFWFRfUEFDS0VUOworCXEtPmZsWzBdLnpvbmUgPSBtX2dldHpvbmUo cS0+ZmxbMF0uYnVmX3NpemUpOworCXEtPmZsWzBdLnR5cGUgPSBtX2dldHR5cGUocS0+ZmxbMF0u YnVmX3NpemUpOwogCi0JaWYgKHAtPmp1bWJvX2J1Zl9zaXplID09ICBNSlVNMTZCWVRFUykgewot CQlxLT5mbFsxXS56b25lID0gem9uZV9qdW1ibzE2OwotCQlxLT5mbFsxXS50eXBlID0gRVhUX0pV TUJPMTY7Ci0JfSBlbHNlIGlmIChwLT5qdW1ib19idWZfc2l6ZSA9PSAgTUpVTTlCWVRFUykgewot CQlxLT5mbFsxXS56b25lID0gem9uZV9qdW1ibzk7Ci0JCXEtPmZsWzFdLnR5cGUgPSBFWFRfSlVN Qk85OwkJCi0JfSBlbHNlIGlmIChwLT5qdW1ib19idWZfc2l6ZSA9PSAgTUpVTVBBR0VTSVpFKSB7 Ci0JCXEtPmZsWzFdLnpvbmUgPSB6b25lX2p1bWJvcDsKLQkJcS0+ZmxbMV0udHlwZSA9IEVYVF9K VU1CT1A7Ci0JfSBlbHNlIHsKLQkJS0FTU0VSVCgwLCAoImNhbid0IGRlYWwgd2l0aCBqdW1ib19i dWZfc2l6ZSAlZC4iLCBwLT5qdW1ib19idWZfc2l6ZSkpOwotCQlyZXQgPSBFRE9PRlVTOwotCQln b3RvIGVycjsKLQl9CiAJcS0+ZmxbMV0uYnVmX3NpemUgPSBwLT5qdW1ib19idWZfc2l6ZTsKKwlx LT5mbFsxXS56b25lID0gbV9nZXR6b25lKHEtPmZsWzFdLmJ1Zl9zaXplKTsKKwlxLT5mbFsxXS50 eXBlID0gbV9nZXR0eXBlKHEtPmZsWzFdLmJ1Zl9zaXplKTsKIAogCS8qIEFsbG9jYXRlIGFuZCBz ZXR1cCB0aGUgbHJvX2N0cmwgc3RydWN0dXJlICovCiAJcS0+bHJvLmVuYWJsZWQgPSAhIShwaS0+ aWZwLT5pZl9jYXBlbmFibGUgJiBJRkNBUF9MUk8pOwpAQCAtMjcyNSw4ICsyNzE3LDggQEAKIAkJ aWYgKChzb3Blb3AgPT0gUlNQUV9TT1BfRU9QKSB8fAogCQkgICAgKHNvcGVvcCA9PSBSU1BRX1NP UCkpCiAJCQlmbGFncyB8PSBNX1BLVEhEUjsKLQkJbV9pbml0KG0sIGZsLT56b25lLCBmbC0+YnVm X3NpemUsIE1fTk9XQUlULCBNVF9EQVRBLCBmbGFncyk7Ci0JCWlmIChmbC0+em9uZSA9PSB6b25l X3BhY2spIHsKKwkJbV9pbml0KG0sIE1fTk9XQUlULCBNVF9EQVRBLCBmbGFncyk7CisJCWlmIChm bC0+dHlwZSA9PSBFWFRfQ0xVU1RFUikgewogCQkJLyoKIAkJCSAqIHJlc3RvcmUgY2xvYmJlcmVk IGRhdGEgcG9pbnRlcgogCQkJICovCmRpZmYgLS1naXQgYS9zeXMvZGV2L2N4Z2IvY3hnYl9hZGFw dGVyLmggYi9zeXMvZGV2L2N4Z2IvY3hnYl9hZGFwdGVyLmgKLS0tIGEvc3lzL2Rldi9jeGdiL2N4 Z2JfYWRhcHRlci5oCisrKyBiL3N5cy9kZXYvY3hnYi9jeGdiX2FkYXB0ZXIuaApAQCAtNDIsNiAr NDIsNyBAQAogI2luY2x1ZGUgPHN5cy9jb25kdmFyLmg+CiAjaW5jbHVkZSA8c3lzL2J1Zl9yaW5n Lmg+CiAjaW5jbHVkZSA8c3lzL3Rhc2txdWV1ZS5oPgorI2luY2x1ZGUgPHZtL3VtYS5oPgogCiAj aW5jbHVkZSA8bmV0L2V0aGVybmV0Lmg+CiAjaW5jbHVkZSA8bmV0L2lmLmg+Cgo= --b1_75bea7beb39ccff30d15b27f6a127c4f-- From owner-freebsd-transport@freebsd.org Thu Feb 4 08:44:09 2016 Return-Path: Delivered-To: freebsd-transport@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 BA227A9B1AA for ; Thu, 4 Feb 2016 08:44:09 +0000 (UTC) (envelope-from daemon-user@freebsd.org) Received: from mailman.ysv.freebsd.org (mailman.ysv.freebsd.org [IPv6:2001:1900:2254:206a::50:5]) by mx1.freebsd.org (Postfix) with ESMTP id 9F91C1432 for ; Thu, 4 Feb 2016 08:44:09 +0000 (UTC) (envelope-from daemon-user@freebsd.org) Received: by mailman.ysv.freebsd.org (Postfix) id 9D1B7A9B1A9; Thu, 4 Feb 2016 08:44:09 +0000 (UTC) Delivered-To: transport@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 9C9CCA9B1A7 for ; Thu, 4 Feb 2016 08:44:09 +0000 (UTC) (envelope-from daemon-user@freebsd.org) Received: from phabric-backend.rbsd.freebsd.org (unknown [IPv6:2607:fc50:2000:101::1bb:73]) by mx1.freebsd.org (Postfix) with ESMTP id 861BD13E6 for ; Thu, 4 Feb 2016 08:44:09 +0000 (UTC) (envelope-from daemon-user@freebsd.org) Received: by phabric-backend.rbsd.freebsd.org (Postfix, from userid 1346) id 7EBFF10753B; Thu, 4 Feb 2016 08:44:09 +0000 (UTC) Date: Thu, 4 Feb 2016 08:44:09 +0000 To: transport@freebsd.org From: "sepherosa_gmail.com (Sepherosa Ziehau)" Reply-to: D5185+526+d46e813aa3f55f8a@reviews.freebsd.org Subject: [Differential] [Request, 117 lines] D5185: tcp/lro: Allow network drivers to set the limit for TCP ACK/data segment aggregation limit Message-ID: X-Priority: 3 X-Phabricator-Sent-This-Message: Yes X-Mail-Transport-Agent: MetaMTA X-Auto-Response-Suppress: All X-Phabricator-Mail-Tags: , , , Thread-Topic: D5185: tcp/lro: Allow network drivers to set the limit for TCP ACK/data segment aggregation limit X-Herald-Rules: <64> X-Phabricator-To: X-Phabricator-To: X-Phabricator-To: X-Phabricator-To: X-Phabricator-To: X-Phabricator-To: X-Phabricator-To: X-Phabricator-To: X-Phabricator-To: X-Phabricator-To: X-Phabricator-To: X-Phabricator-To: X-Phabricator-Cc: X-Phabricator-Cc: Precedence: bulk Thread-Index: NTU0NmM0Mjk2NjdmNzVhNmM3MzlkMWQyNTdm MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="b1_84ef8838ea5ed79409ebccb21cf6d33e" X-Mailman-Approved-At: Thu, 04 Feb 2016 12:17:45 +0000 X-BeenThere: freebsd-transport@freebsd.org X-Mailman-Version: 2.1.20 List-Id: Discussions of transport level network protocols in FreeBSD List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 04 Feb 2016 08:44:09 -0000 --b1_84ef8838ea5ed79409ebccb21cf6d33e Content-Type: text/plain; charset = "utf-8" Content-Transfer-Encoding: 8bit sepherosa_gmail.com created this revision. sepherosa_gmail.com added reviewers: network, adrian, delphij, royger, decui_microsoft.com, honzhan_microsoft.com, howard0su_gmail.com, gallatin, hselasky, np. sepherosa_gmail.com added subscribers: freebsd-net-list, freebsd-virtualization-list. Herald added a reviewer: transport. REVISION SUMMARY It's append_cnt based. Unless the network driver sets these two limits, its an NO-OP. For hn(4): - Set TCP ACK append limit to 1, i.e. aggregate 2 ACKs at most. Aggregate anything more than 2 hurts TCP sending performance in hyperv. This significantly improves the TCP sending performance when the number of concurrent connetion is low (2~8). And greatly stabilize the TCP sending performance in other cases. - Set TCP data segments append limit to 25. Without this limitation, hn(4) could aggregate ~45 TCP data segments for each connection (even at 64 or more connections) before dispatching them to socket code; large aggregation slows down ACK sending and eventually hurts/destabilizes TCP reception performance. This setting stabilizes and improves TCP reception performance for >4 concurrent connections significantly. Make them sysctls so they could be adjusted. REVISION DETAIL https://reviews.freebsd.org/D5185 AFFECTED FILES sys/dev/hyperv/netvsc/hv_net_vsc.h sys/dev/hyperv/netvsc/hv_netvsc_drv_freebsd.c sys/netinet/tcp_lro.c sys/netinet/tcp_lro.h EMAIL PREFERENCES https://reviews.freebsd.org/settings/panel/emailpreferences/ To: sepherosa_gmail.com, network, transport, adrian, delphij, royger, decui_microsoft.com, honzhan_microsoft.com, howard0su_gmail.com, gallatin, hselasky, np Cc: freebsd-virtualization-list, freebsd-net-list --b1_84ef8838ea5ed79409ebccb21cf6d33e Content-Type: text/x-patch; charset=utf-8; name="D5185.12995.patch" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="D5185.12995.patch" ZGlmZiAtLWdpdCBhL3N5cy9uZXRpbmV0L3RjcF9scm8uaCBiL3N5cy9uZXRpbmV0L3RjcF9scm8u aAotLS0gYS9zeXMvbmV0aW5ldC90Y3BfbHJvLmgKKysrIGIvc3lzL25ldGluZXQvdGNwX2xyby5o CkBAIC05MSw2ICs5MSw4IEBACiAJdW5zaWduZWQJbHJvX2NudDsKIAl1bnNpZ25lZAlscm9fbWJ1 Zl9jb3VudDsKIAl1bnNpZ25lZAlscm9fbWJ1Zl9tYXg7CisJdW5zaWduZWQgc2hvcnQJbHJvX2Fj a19hcHBlbmRfbGltOworCXVuc2lnbmVkIHNob3J0CWxyb19kYXRhX2FwcGVuZF9saW07CiAKIAlz dHJ1Y3QgbHJvX2hlYWQJbHJvX2FjdGl2ZTsKIAlzdHJ1Y3QgbHJvX2hlYWQJbHJvX2ZyZWU7CmRp ZmYgLS1naXQgYS9zeXMvbmV0aW5ldC90Y3BfbHJvLmMgYi9zeXMvbmV0aW5ldC90Y3BfbHJvLmMK LS0tIGEvc3lzL25ldGluZXQvdGNwX2xyby5jCisrKyBiL3N5cy9uZXRpbmV0L3RjcF9scm8uYwpA QCAtODgsNiArODgsOCBAQAogCWxjLT5scm9fbWJ1Zl9tYXggPSBscm9fbWJ1ZnM7CiAJbGMtPmxy b19jbnQgPSBscm9fZW50cmllczsKIAlsYy0+aWZwID0gaWZwOworCWxjLT5scm9fYWNrX2FwcGVu ZF9saW0gPSAwOworCWxjLT5scm9fZGF0YV9hcHBlbmRfbGltID0gMDsKIAlTTElTVF9JTklUKCZs Yy0+bHJvX2ZyZWUpOwogCVNMSVNUX0lOSVQoJmxjLT5scm9fYWN0aXZlKTsKIApAQCAtNjQ2LDYg KzY0OCwxNiBAQAogCiAJCWlmICh0Y3BfZGF0YV9sZW4gPT0gMCkgewogCQkJbV9mcmVlbShtKTsK KwkJCS8qCisJCQkgKiBGbHVzaCB0aGlzIExSTyBlbnRyeSwgaWYgdGhpcyBBQ0sgc2hvdWxkCisJ CQkgKiBub3QgYmUgZnVydGhlciBkZWxheWVkLgorCQkJICovCisJCQlpZiAobGMtPmxyb19hY2tf YXBwZW5kX2xpbSAmJgorCQkJICAgIGxlLT5hcHBlbmRfY250ID49IGxjLT5scm9fYWNrX2FwcGVu ZF9saW0pIHsKKwkJCQlTTElTVF9SRU1PVkUoJmxjLT5scm9fYWN0aXZlLCBsZSwgbHJvX2VudHJ5 LAorCQkJCSAgICBuZXh0KTsKKwkJCQl0Y3BfbHJvX2ZsdXNoKGxjLCBsZSk7CisJCQl9CiAJCQly ZXR1cm4gKDApOwogCQl9CiAKQEAgLTY2NCw5ICs2NzYsMTIgQEAKIAogCQkvKgogCQkgKiBJZiBh IHBvc3NpYmxlIG5leHQgZnVsbCBsZW5ndGggcGFja2V0IHdvdWxkIGNhdXNlIGFuCi0JCSAqIG92 ZXJmbG93LCBwcm8tYWN0aXZlbHkgZmx1c2ggbm93LgorCQkgKiBvdmVyZmxvdywgcHJvLWFjdGl2 ZWx5IGZsdXNoIG5vdy4gIEFuZCBpZiB3ZSBhcmUgYXNrZWQKKwkJICogdG8gbGltaXQgdGhlIGRh dGEgYWdncmVnYXRlLCBmbHVzaCB0aGlzIExSTyBlbnRyeSBub3cuCiAJCSAqLwotCQlpZiAobGUt PnBfbGVuID4gKDY1NTM1IC0gbGMtPmlmcC0+aWZfbXR1KSkgeworCQlpZiAobGUtPnBfbGVuID4g KDY1NTM1IC0gbGMtPmlmcC0+aWZfbXR1KSB8fAorCQkgICAgKGxjLT5scm9fZGF0YV9hcHBlbmRf bGltICYmCisJCSAgICAgbGUtPmFwcGVuZF9jbnQgPj0gbGMtPmxyb19kYXRhX2FwcGVuZF9saW0p KSB7CiAJCQlTTElTVF9SRU1PVkUoJmxjLT5scm9fYWN0aXZlLCBsZSwgbHJvX2VudHJ5LCBuZXh0 KTsKIAkJCXRjcF9scm9fZmx1c2gobGMsIGxlKTsKIAkJfSBlbHNlCmRpZmYgLS1naXQgYS9zeXMv ZGV2L2h5cGVydi9uZXR2c2MvaHZfbmV0dnNjX2Rydl9mcmVlYnNkLmMgYi9zeXMvZGV2L2h5cGVy di9uZXR2c2MvaHZfbmV0dnNjX2Rydl9mcmVlYnNkLmMKLS0tIGEvc3lzL2Rldi9oeXBlcnYvbmV0 dnNjL2h2X25ldHZzY19kcnZfZnJlZWJzZC5jCisrKyBiL3N5cy9kZXYvaHlwZXJ2L25ldHZzYy9o dl9uZXR2c2NfZHJ2X2ZyZWVic2QuYwpAQCAtMTc2LDE0ICsxNzYsOCBAQAogI2RlZmluZSBITl9D U1VNX0FTU0lTVF9XSU44CShDU1VNX1RDUCkKICNkZWZpbmUgSE5fQ1NVTV9BU1NJU1QJCShDU1VN X0lQIHwgQ1NVTV9VRFAgfCBDU1VNX1RDUCkKIAotLyogWFhYIG1vdmUgdG8gbmV0aW5ldC90Y3Bf bHJvLmggKi8KLSNkZWZpbmUgSE5fTFJPX0hJV0FUX01BWAkJCQk2NTUzNQotI2RlZmluZSBITl9M Uk9fSElXQVRfREVGCQkJCUhOX0xST19ISVdBVF9NQVgKLS8qIFlZWSAyKk1UVSBpcyBhIGJpdCBy b3VnaCwgYnV0IHNob3VsZCBiZSBnb29kIGVub3VnaC4gKi8KLSNkZWZpbmUgSE5fTFJPX0hJV0FU X01UVUxJTShpZnApCQkJKDIgKiAoaWZwKS0+aWZfbXR1KQotI2RlZmluZSBITl9MUk9fSElXQVRf SVNWQUxJRChzYywgaGl3YXQpCQkJXAotICAgICgoaGl3YXQpID49IEhOX0xST19ISVdBVF9NVFVM SU0oKHNjKS0+aG5faWZwKSB8fAlcCi0gICAgIChoaXdhdCkgPD0gSE5fTFJPX0hJV0FUX01BWCkK KyNkZWZpbmUgSE5fTFJPX0FDS19BUFBFTkRfTElNCTEKKyNkZWZpbmUgSE5fTFJPX0RBVEFfQVBQ RU5EX0xJTQkyNQogCiAvKgogICogQmUgYXdhcmUgdGhhdCB0aGlzIHNsZWVwYWJsZSBtdXRleCB3 aWxsIGV4aGliaXQgV0lUTkVTUyBlcnJvcnMgd2hlbgpAQCAtMjUzLDI3ICsyNDcsMTYgQEAKIHN0 YXRpYyB2b2lkIGhuX3N0YXJ0X3R4ZW9mKHN0cnVjdCBpZm5ldCAqaWZwKTsKIHN0YXRpYyBpbnQg aG5faWZtZWRpYV91cGQoc3RydWN0IGlmbmV0ICppZnApOwogc3RhdGljIHZvaWQgaG5faWZtZWRp YV9zdHMoc3RydWN0IGlmbmV0ICppZnAsIHN0cnVjdCBpZm1lZGlhcmVxICppZm1yKTsKLSNpZmRl ZiBITl9MUk9fSElXQVQKLXN0YXRpYyBpbnQgaG5fbHJvX2hpd2F0X3N5c2N0bChTWVNDVExfSEFO RExFUl9BUkdTKTsKLSNlbmRpZgogc3RhdGljIGludCBobl90cnVzdF9oY3N1bV9zeXNjdGwoU1lT Q1RMX0hBTkRMRVJfQVJHUyk7CiBzdGF0aWMgaW50IGhuX3R4X2NoaW1uZXlfc2l6ZV9zeXNjdGwo U1lTQ1RMX0hBTkRMRVJfQVJHUyk7CitzdGF0aWMgaW50IGhuX2xyb19hcHBlbmRfbGltX3N5c2N0 bChTWVNDVExfSEFORExFUl9BUkdTKTsKIHN0YXRpYyBpbnQgaG5fY2hlY2tfaXBsZW4oY29uc3Qg c3RydWN0IG1idWYgKiwgaW50KTsKIHN0YXRpYyBpbnQgaG5fY3JlYXRlX3R4X3Jpbmcoc3RydWN0 IGhuX3NvZnRjICpzYyk7CiBzdGF0aWMgdm9pZCBobl9kZXN0cm95X3R4X3Jpbmcoc3RydWN0IGhu X3NvZnRjICpzYyk7CiBzdGF0aWMgdm9pZCBobl9zdGFydF90YXNrZnVuYyh2b2lkICp4c2MsIGlu dCBwZW5kaW5nKTsKIHN0YXRpYyB2b2lkIGhuX3R4ZW9mX3Rhc2tmdW5jKHZvaWQgKnhzYywgaW50 IHBlbmRpbmcpOwogc3RhdGljIGludCBobl9lbmNhcChzdHJ1Y3QgaG5fc29mdGMgKiwgc3RydWN0 IGhuX3R4ZGVzYyAqLCBzdHJ1Y3QgbWJ1ZiAqKik7CiAKLXN0YXRpYyBfX2lubGluZSB2b2lkCi1o bl9zZXRfbHJvX2hpd2F0KHN0cnVjdCBobl9zb2Z0YyAqc2MsIGludCBoaXdhdCkKLXsKLQlzYy0+ aG5fbHJvX2hpd2F0ID0gaGl3YXQ7Ci0jaWZkZWYgSE5fTFJPX0hJV0FUCi0Jc2MtPmhuX2xyby5s cm9faGl3YXQgPSBzYy0+aG5fbHJvX2hpd2F0OwotI2VuZGlmCi19Ci0KIHN0YXRpYyBpbnQKIGhu X2lmbWVkaWFfdXBkKHN0cnVjdCBpZm5ldCAqaWZwIF9fdW51c2VkKQogewpAQCAtMzU4LDcgKzM0 MSw2IEBACiAJYnplcm8oc2MsIHNpemVvZihobl9zb2Z0Y190KSk7CiAJc2MtPmhuX3VuaXQgPSB1 bml0OwogCXNjLT5obl9kZXYgPSBkZXY7Ci0Jc2MtPmhuX2xyb19oaXdhdCA9IEhOX0xST19ISVdB VF9ERUY7CiAJc2MtPmhuX2RpcmVjdF90eF9zaXplID0gaG5fZGlyZWN0X3R4X3NpemU7CiAJaWYg KGhuX3RydXN0X2hvc3R0Y3ApCiAJCXNjLT5obl90cnVzdF9oY3N1bSB8PSBITl9UUlVTVF9IQ1NV TV9UQ1A7CkBAIC00NDIsOSArNDI0LDggQEAKIAkvKiBEcml2ZXIgcHJpdmF0ZSBMUk8gc2V0dGlu Z3MgKi8KIAlzYy0+aG5fbHJvLmlmcCA9IGlmcDsKICNlbmRpZgotI2lmZGVmIEhOX0xST19ISVdB VAotCXNjLT5obl9scm8ubHJvX2hpd2F0ID0gc2MtPmhuX2xyb19oaXdhdDsKLSNlbmRpZgorCXNj LT5obl9scm8ubHJvX2Fja19hcHBlbmRfbGltID0gSE5fTFJPX0FDS19BUFBFTkRfTElNOworCXNj LT5obl9scm8ubHJvX2RhdGFfYXBwZW5kX2xpbSA9IEhOX0xST19EQVRBX0FQUEVORF9MSU07CiAj ZW5kaWYJLyogSU5FVCB8fCBJTkVUNiAqLwogCiAjaWYgX19GcmVlQlNEX3ZlcnNpb24gPj0gMTEw MDA0NQpAQCAtNDcxLDYgKzQ1MiwxMyBAQAogCSAgICBobl90eF9jaGltbmV5X3NpemUgPCBzYy0+ aG5fdHhfY2hpbW5leV9tYXgpCiAJCXNjLT5obl90eF9jaGltbmV5X3NpemUgPSBobl90eF9jaGlt bmV5X3NpemU7CiAKKwkvKgorCSAqIEFsd2F5cyBzY2hlZHVsZSB0cmFuc21pc3Npb24gaW5zdGVh ZCBvZiB0cnlpbmcKKwkgKiB0byBkbyBkaXJlY3QgdHJhbnNtaXNzaW9uLiAgVGhpcyBvbmUgZ2l2 ZXMgdGhlCisJICogYmVzdCBwZXJmb3JtYW5jZSBzbyBmYXIuCisJICovCisJc2MtPmhuX3NjaGVk X3R4ID0gMTsKKwogCWN0eCA9IGRldmljZV9nZXRfc3lzY3RsX2N0eChkZXYpOwogCWNoaWxkID0g U1lTQ1RMX0NISUxEUkVOKGRldmljZV9nZXRfc3lzY3RsX3RyZWUoZGV2KSk7CiAKQEAgLTQ4MCwx MSArNDY4LDYgQEAKIAkgICAgQ1RMRkxBR19SVywgJnNjLT5obl9scm8ubHJvX2ZsdXNoZWQsIDAs ICJMUk8gZmx1c2hlZCIpOwogCVNZU0NUTF9BRERfVUxPTkcoY3R4LCBjaGlsZCwgT0lEX0FVVE8s ICJscm9fdHJpZWQiLAogCSAgICBDVExGTEFHX1JXLCAmc2MtPmhuX2xyb190cmllZCwgIiMgb2Yg TFJPIHRyaWVzIik7Ci0jaWZkZWYgSE5fTFJPX0hJV0FUCi0JU1lTQ1RMX0FERF9QUk9DKGN0eCwg Y2hpbGQsIE9JRF9BVVRPLCAibHJvX2hpd2F0IiwKLQkgICAgQ1RMVFlQRV9JTlQgfCBDVExGTEFH X1JXLCBzYywgMCwgaG5fbHJvX2hpd2F0X3N5c2N0bCwKLQkgICAgIkkiLCAiTFJPIGhpZ2ggd2F0 ZXJtYXJrIik7Ci0jZW5kaWYKIAlTWVNDVExfQUREX1BST0MoY3R4LCBjaGlsZCwgT0lEX0FVVE8s ICJ0cnVzdF9ob3N0dGNwIiwKIAkgICAgQ1RMVFlQRV9JTlQgfCBDVExGTEFHX1JXLCBzYywgSE5f VFJVU1RfSENTVU1fVENQLAogCSAgICBobl90cnVzdF9oY3N1bV9zeXNjdGwsICJJIiwKQEAgLTUz OCw2ICs1MjEsMTQgQEAKIAkgICAgQ1RMRkxBR19SVywgJnNjLT5obl9zY2hlZF90eCwgMCwKIAkg ICAgIkFsd2F5cyBzY2hlZHVsZSB0cmFuc21pc3Npb24gIgogCSAgICAiaW5zdGVhZCBvZiBkb2lu ZyBkaXJlY3QgdHJhbnNtaXNzaW9uIik7CisJU1lTQ1RMX0FERF9QUk9DKGN0eCwgY2hpbGQsIE9J RF9BVVRPLCAibHJvX2Fja19hcHBlbmRfbGltIiwKKwkgICAgQ1RMVFlQRV9JTlQgfCBDVExGTEFH X1JXLCAmc2MtPmhuX2xyby5scm9fYWNrX2FwcGVuZF9saW0sCisJICAgIDAsIGhuX2xyb19hcHBl bmRfbGltX3N5c2N0bCwKKwkgICAgIkkiLCAiTFJPIEFDSyBhcHBlbmRpbmcgbGltaXRhdGlvbiIp OworCVNZU0NUTF9BRERfUFJPQyhjdHgsIGNoaWxkLCBPSURfQVVUTywgImxyb19kYXRhX2FwcGVu ZF9saW0iLAorCSAgICBDVExUWVBFX0lOVCB8IENUTEZMQUdfUlcsICZzYy0+aG5fbHJvLmxyb19k YXRhX2FwcGVuZF9saW0sCisJICAgIDAsIGhuX2xyb19hcHBlbmRfbGltX3N5c2N0bCwKKwkgICAg IkkiLCAiTFJPIGRhdGEgc2VnbWVudHMgYXBwZW5kaW5nIGxpbWl0YXRpb24iKTsKIAogCWlmICh1 bml0ID09IDApIHsKIAkJc3RydWN0IHN5c2N0bF9jdHhfbGlzdCAqZGNfY3R4OwpAQCAtMTQxMCwx MyArMTQwMSw2IEBACiAKIAkJLyogT2J0YWluIGFuZCByZWNvcmQgcmVxdWVzdGVkIE1UVSAqLwog CQlpZnAtPmlmX210dSA9IGlmci0+aWZyX210dTsKLQkJLyoKLQkJICogTWFrZSBzdXJlIHRoYXQg TFJPIGhpZ2ggd2F0ZXJtYXJrIGlzIHN0aWxsIHZhbGlkLAotCQkgKiBhZnRlciBNVFUgY2hhbmdl ICh0aGUgMipNVFUgbGltaXQpLgotCQkgKi8KLQkJaWYgKCFITl9MUk9fSElXQVRfSVNWQUxJRChz Yywgc2MtPmhuX2xyb19oaXdhdCkpCi0JCQlobl9zZXRfbHJvX2hpd2F0KHNjLCBITl9MUk9fSElX QVRfTVRVTElNKGlmcCkpOwotCiAJCWRvIHsKIAkJCU5WX0xPQ0soc2MpOwogCQkJaWYgKCFzYy0+ dGVtcF91bnVzYWJsZSkgewpAQCAtMTcyMiwyNyArMTcwNiw2IEBACiB9CiAjZW5kaWYKIAotI2lm ZGVmIEhOX0xST19ISVdBVAotc3RhdGljIGludAotaG5fbHJvX2hpd2F0X3N5c2N0bChTWVNDVExf SEFORExFUl9BUkdTKQotewotCXN0cnVjdCBobl9zb2Z0YyAqc2MgPSBhcmcxOwotCWludCBoaXdh dCwgZXJyb3I7Ci0KLQloaXdhdCA9IHNjLT5obl9scm9faGl3YXQ7Ci0JZXJyb3IgPSBzeXNjdGxf aGFuZGxlX2ludChvaWRwLCAmaGl3YXQsIDAsIHJlcSk7Ci0JaWYgKGVycm9yIHx8IHJlcS0+bmV3 cHRyID09IE5VTEwpCi0JCXJldHVybiBlcnJvcjsKLQotCWlmICghSE5fTFJPX0hJV0FUX0lTVkFM SUQoc2MsIGhpd2F0KSkKLQkJcmV0dXJuIEVJTlZBTDsKLQotCWlmIChzYy0+aG5fbHJvX2hpd2F0 ICE9IGhpd2F0KQotCQlobl9zZXRfbHJvX2hpd2F0KHNjLCBoaXdhdCk7Ci0JcmV0dXJuIDA7Ci19 Ci0jZW5kaWYJLyogSE5fTFJPX0hJV0FUICovCi0KIHN0YXRpYyBpbnQKIGhuX3RydXN0X2hjc3Vt X3N5c2N0bChTWVNDVExfSEFORExFUl9BUkdTKQogewpAQCAtMTc4Nyw2ICsxNzUwLDI0IEBACiB9 CiAKIHN0YXRpYyBpbnQKK2huX2xyb19hcHBlbmRfbGltX3N5c2N0bChTWVNDVExfSEFORExFUl9B UkdTKQoreworCXVuc2lnbmVkIHNob3J0ICpscm9fbGltID0gYXJnMTsKKwlpbnQgbGltLCBlcnJv cjsKKworCWxpbSA9ICpscm9fbGltOworCWVycm9yID0gc3lzY3RsX2hhbmRsZV9pbnQob2lkcCwg JmxpbSwgMCwgcmVxKTsKKwlpZiAoZXJyb3IgfHwgcmVxLT5uZXdwdHIgPT0gTlVMTCkKKwkJcmV0 dXJuIGVycm9yOworCisJaWYgKGxpbSA8IDAgfHwgbGltID4gNjU1MzUpCisJCXJldHVybiBFSU5W QUw7CisKKwkqbHJvX2xpbSA9IGxpbTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludAogaG5f Y2hlY2tfaXBsZW4oY29uc3Qgc3RydWN0IG1idWYgKm0sIGludCBob2ZmKQogewogCWNvbnN0IHN0 cnVjdCBpcCAqaXA7CmRpZmYgLS1naXQgYS9zeXMvZGV2L2h5cGVydi9uZXR2c2MvaHZfbmV0X3Zz Yy5oIGIvc3lzL2Rldi9oeXBlcnYvbmV0dnNjL2h2X25ldF92c2MuaAotLS0gYS9zeXMvZGV2L2h5 cGVydi9uZXR2c2MvaHZfbmV0X3ZzYy5oCisrKyBiL3N5cy9kZXYvaHlwZXJ2L25ldHZzYy9odl9u ZXRfdnNjLmgKQEAgLTEwMzAsNyArMTAzMCw2IEBACiAJc3RydWN0IHRhc2sJaG5fdHhlb2ZfdGFz azsKIAogCXN0cnVjdCBscm9fY3RybAlobl9scm87Ci0JaW50CQlobl9scm9faGl3YXQ7CiAKIAkv KiBUcnVzdCBjc3VtIHZlcmlmaWNhdGlvbiBvbiBob3N0IHNpZGUgKi8KIAlpbnQJCWhuX3RydXN0 X2hjc3VtOwkvKiBITl9UUlVTVF9IQ1NVTV8gKi8KCg== --b1_84ef8838ea5ed79409ebccb21cf6d33e-- From owner-freebsd-transport@freebsd.org Thu Feb 4 11:39:54 2016 Return-Path: Delivered-To: freebsd-transport@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 87E7CA9B70D for ; Thu, 4 Feb 2016 11:39:54 +0000 (UTC) (envelope-from daemon-user@freebsd.org) Received: from mailman.ysv.freebsd.org (mailman.ysv.freebsd.org [IPv6:2001:1900:2254:206a::50:5]) by mx1.freebsd.org (Postfix) with ESMTP id 7458C3D7 for ; Thu, 4 Feb 2016 11:39:54 +0000 (UTC) (envelope-from daemon-user@freebsd.org) Received: by mailman.ysv.freebsd.org (Postfix) id 6FB37A9B70C; Thu, 4 Feb 2016 11:39:54 +0000 (UTC) Delivered-To: transport@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 6F3EEA9B70B for ; Thu, 4 Feb 2016 11:39:54 +0000 (UTC) (envelope-from daemon-user@freebsd.org) Received: from phabric-backend.rbsd.freebsd.org (unknown [IPv6:2607:fc50:2000:101::1bb:73]) by mx1.freebsd.org (Postfix) with ESMTP id 5F42E3D2 for ; Thu, 4 Feb 2016 11:39:54 +0000 (UTC) (envelope-from daemon-user@freebsd.org) Received: by phabric-backend.rbsd.freebsd.org (Postfix, from userid 1346) id 5591C107909; Thu, 4 Feb 2016 11:39:54 +0000 (UTC) Date: Thu, 4 Feb 2016 11:39:54 +0000 To: transport@freebsd.org From: "rrs (Randall Stewart)" Reply-to: D5189+526+dd14e5f3a0b779f6@reviews.freebsd.org Subject: [Differential] [Request, 19 lines] D5189: TCP stacks loading issue Message-ID: X-Priority: 3 X-Phabricator-Sent-This-Message: Yes X-Mail-Transport-Agent: MetaMTA X-Auto-Response-Suppress: All X-Phabricator-Mail-Tags: , , , Thread-Topic: D5189: TCP stacks loading issue X-Herald-Rules: none X-Phabricator-To: X-Phabricator-To: X-Phabricator-Cc: Precedence: bulk Thread-Index: MmIwYjJjNjUwYzUxNDI0ODc1NDU1NjVkNGJk MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="b1_b881844935197bbeb03190bd4573426b" X-Mailman-Approved-At: Thu, 04 Feb 2016 12:17:52 +0000 X-BeenThere: freebsd-transport@freebsd.org X-Mailman-Version: 2.1.20 List-Id: Discussions of transport level network protocols in FreeBSD List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 04 Feb 2016 11:39:54 -0000 --b1_b881844935197bbeb03190bd4573426b Content-Type: text/plain; charset = "utf-8" Content-Transfer-Encoding: 8bit rrs created this revision. rrs added a reviewer: hiren. rrs added a subscriber: transport. REVISION SUMMARY The fast path.c code had the wrong module dependency (which is fixed in this revision too) but it points out a weakness in the initialization, i.e. one must have the register function either validate that initialization and error, or just do the initialization at that point. I choose the later since it does no harm. TEST PLAN load the old module without changing its order and make sure we don't crash :-) REVISION DETAIL https://reviews.freebsd.org/D5189 AFFECTED FILES netinet/tcp_stacks/fastpath.c netinet/tcp_subr.c CHANGE DETAILS diff --git a/netinet/tcp_subr.c b/netinet/tcp_subr.c --- a/netinet/tcp_subr.c +++ b/netinet/tcp_subr.c @@ -263,9 +263,20 @@ 0 }; +int t_functions_inited = 0; struct tcp_funchead t_functions; static struct tcp_function_block *tcp_func_set_ptr = &tcp_def_funcblk; +static void +init_tcp_functions() +{ + if (t_functions_inited == 0) { + TAILQ_INIT(&t_functions); + rw_init_flags(&tcp_function_lock, "tcp_func_lock" , 0); + t_functions_inited = 1; + } +} + static struct tcp_function_block * find_tcp_functions_locked(struct tcp_function_set *fs) { @@ -503,6 +514,9 @@ struct tcp_function *n; struct tcp_function_set fs; + if (t_functions_inited == 0) { + init_tcp_functions(); + } if ((blk->tfb_tcp_output == NULL) || (blk->tfb_tcp_do_segment == NULL) || (blk->tfb_tcp_ctloutput == NULL) || @@ -681,8 +695,7 @@ tcp_finwait2_timeout = TCPTV_FINWAIT2_TIMEOUT; tcp_tcbhashsize = hashsize; /* Setup the tcp function block list */ - TAILQ_INIT(&t_functions); - rw_init_flags(&tcp_function_lock, "tcp_func_lock" , 0); + init_tcp_functions(); register_tcp_functions(&tcp_def_funcblk, M_WAITOK); if (tcp_soreceive_stream) { diff --git a/netinet/tcp_stacks/fastpath.c b/netinet/tcp_stacks/fastpath.c --- a/netinet/tcp_stacks/fastpath.c +++ b/netinet/tcp_stacks/fastpath.c @@ -2453,4 +2453,4 @@ }; MODULE_VERSION(kern_tcpfastpaths, 1); -DECLARE_MODULE(kern_tcpfastpaths, new_tcp_fastpaths, SI_SUB_PSEUDO, SI_ORDER_ANY); +DECLARE_MODULE(kern_tcpfastpaths, new_tcp_fastpaths, SI_SUB_PROTO_DOMAIN, SI_ORDER_ANY); EMAIL PREFERENCES https://reviews.freebsd.org/settings/panel/emailpreferences/ To: rrs, hiren Cc: transport --b1_b881844935197bbeb03190bd4573426b Content-Type: text/x-patch; charset=utf-8; name="D5189.13003.patch" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="D5189.13003.patch" ZGlmZiAtLWdpdCBhL25ldGluZXQvdGNwX3N1YnIuYyBiL25ldGluZXQvdGNwX3N1YnIuYwotLS0g YS9uZXRpbmV0L3RjcF9zdWJyLmMKKysrIGIvbmV0aW5ldC90Y3Bfc3Vici5jCkBAIC0yNjMsOSAr MjYzLDIwIEBACiAJMAogfTsKIAoraW50IHRfZnVuY3Rpb25zX2luaXRlZCA9IDA7CiBzdHJ1Y3Qg dGNwX2Z1bmNoZWFkIHRfZnVuY3Rpb25zOwogc3RhdGljIHN0cnVjdCB0Y3BfZnVuY3Rpb25fYmxv Y2sgKnRjcF9mdW5jX3NldF9wdHIgPSAmdGNwX2RlZl9mdW5jYmxrOwogCitzdGF0aWMgdm9pZAor aW5pdF90Y3BfZnVuY3Rpb25zKCkKK3sKKwlpZiAodF9mdW5jdGlvbnNfaW5pdGVkID09IDApIHsK KwkJVEFJTFFfSU5JVCgmdF9mdW5jdGlvbnMpOworCQlyd19pbml0X2ZsYWdzKCZ0Y3BfZnVuY3Rp b25fbG9jaywgInRjcF9mdW5jX2xvY2siICwgMCk7CisJCXRfZnVuY3Rpb25zX2luaXRlZCA9IDE7 CisJfQorfQorCiBzdGF0aWMgc3RydWN0IHRjcF9mdW5jdGlvbl9ibG9jayAqCiBmaW5kX3RjcF9m dW5jdGlvbnNfbG9ja2VkKHN0cnVjdCB0Y3BfZnVuY3Rpb25fc2V0ICpmcykKIHsKQEAgLTUwMyw2 ICs1MTQsOSBAQAogCXN0cnVjdCB0Y3BfZnVuY3Rpb24gKm47CiAJc3RydWN0IHRjcF9mdW5jdGlv bl9zZXQgZnM7CiAKKwlpZiAodF9mdW5jdGlvbnNfaW5pdGVkID09IDApIHsKKwkJaW5pdF90Y3Bf ZnVuY3Rpb25zKCk7CisJfQogCWlmICgoYmxrLT50ZmJfdGNwX291dHB1dCA9PSBOVUxMKSB8fAog CSAgICAoYmxrLT50ZmJfdGNwX2RvX3NlZ21lbnQgPT0gTlVMTCkgfHwKIAkgICAgKGJsay0+dGZi X3RjcF9jdGxvdXRwdXQgPT0gTlVMTCkgfHwKQEAgLTY4MSw4ICs2OTUsNyBAQAogCXRjcF9maW53 YWl0Ml90aW1lb3V0ID0gVENQVFZfRklOV0FJVDJfVElNRU9VVDsKIAl0Y3BfdGNiaGFzaHNpemUg PSBoYXNoc2l6ZTsKIAkvKiBTZXR1cCB0aGUgdGNwIGZ1bmN0aW9uIGJsb2NrIGxpc3QgKi8KLQlU QUlMUV9JTklUKCZ0X2Z1bmN0aW9ucyk7Ci0JcndfaW5pdF9mbGFncygmdGNwX2Z1bmN0aW9uX2xv Y2ssICJ0Y3BfZnVuY19sb2NrIiAsIDApOworCWluaXRfdGNwX2Z1bmN0aW9ucygpOwogCXJlZ2lz dGVyX3RjcF9mdW5jdGlvbnMoJnRjcF9kZWZfZnVuY2JsaywgTV9XQUlUT0spOwogCiAJaWYgKHRj cF9zb3JlY2VpdmVfc3RyZWFtKSB7CmRpZmYgLS1naXQgYS9uZXRpbmV0L3RjcF9zdGFja3MvZmFz dHBhdGguYyBiL25ldGluZXQvdGNwX3N0YWNrcy9mYXN0cGF0aC5jCi0tLSBhL25ldGluZXQvdGNw X3N0YWNrcy9mYXN0cGF0aC5jCisrKyBiL25ldGluZXQvdGNwX3N0YWNrcy9mYXN0cGF0aC5jCkBA IC0yNDUzLDQgKzI0NTMsNCBAQAogfTsKIAogTU9EVUxFX1ZFUlNJT04oa2Vybl90Y3BmYXN0cGF0 aHMsIDEpOwotREVDTEFSRV9NT0RVTEUoa2Vybl90Y3BmYXN0cGF0aHMsIG5ld190Y3BfZmFzdHBh dGhzLCBTSV9TVUJfUFNFVURPLCBTSV9PUkRFUl9BTlkpOworREVDTEFSRV9NT0RVTEUoa2Vybl90 Y3BmYXN0cGF0aHMsIG5ld190Y3BfZmFzdHBhdGhzLCBTSV9TVUJfUFJPVE9fRE9NQUlOLCBTSV9P UkRFUl9BTlkpOwoK --b1_b881844935197bbeb03190bd4573426b-- From owner-freebsd-transport@freebsd.org Sat Feb 6 18:12:53 2016 Return-Path: Delivered-To: freebsd-transport@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 08B41AA0F85 for ; Sat, 6 Feb 2016 18:12:53 +0000 (UTC) (envelope-from mmacy@nextbsd.org) Received: from mailman.ysv.freebsd.org (mailman.ysv.freebsd.org [IPv6:2001:1900:2254:206a::50:5]) by mx1.freebsd.org (Postfix) with ESMTP id EDC9F11E5 for ; Sat, 6 Feb 2016 18:12:52 +0000 (UTC) (envelope-from mmacy@nextbsd.org) Received: by mailman.ysv.freebsd.org (Postfix) id EB8AFAA0F84; Sat, 6 Feb 2016 18:12:52 +0000 (UTC) Delivered-To: transport@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 EB218AA0F83 for ; Sat, 6 Feb 2016 18:12:52 +0000 (UTC) (envelope-from mmacy@nextbsd.org) Received: from sender163-mail.zoho.com (sender163-mail.zoho.com [74.201.84.163]) (using TLSv1 with cipher ECDHE-RSA-AES128-SHA (128/128 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id C66C711E4 for ; Sat, 6 Feb 2016 18:12:51 +0000 (UTC) (envelope-from mmacy@nextbsd.org) Received: from mail.zoho.com by mx.zohomail.com with SMTP id 1454782363380722.349251352471; Sat, 6 Feb 2016 10:12:43 -0800 (PST) Date: Sat, 06 Feb 2016 10:12:43 -0800 From: Matthew Macy To: "" Message-ID: <152b7c936bb.bef8b18a29223.1567513931859400735@nextbsd.org> Subject: iflib proposed merge D5211 MIME-Version: 1.0 Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: 7bit X-Priority: Medium User-Agent: Zoho Mail X-Mailer: Zoho Mail X-Zoho-Virus-Status: 1 X-BeenThere: freebsd-transport@freebsd.org X-Mailman-Version: 2.1.20 Precedence: list List-Id: Discussions of transport level network protocols in FreeBSD List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sat, 06 Feb 2016 18:12:53 -0000 https://reviews.freebsd.org/D5211 Documentation of varying degrees of completeness and out-of-dateness can be found at: https://github.com/NextBSD/NextBSD/wiki/Introduction-to-the-Iflib-Draft-API https://github.com/NextBSD/NextBSD/wiki/DD-packet-transmit-and-receive-functions I intend to at least have complete online documentation in the next week. Proper man pages are TBD. -M