From owner-freebsd-hackers@freebsd.org Sun Nov 27 04:18:14 2016 Return-Path: Delivered-To: freebsd-hackers@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 573EEC5857D for ; Sun, 27 Nov 2016 04:18:14 +0000 (UTC) (envelope-from tris_vern@hotmail.com) Received: from COL004-OMC3S16.hotmail.com (col004-omc3s16.hotmail.com [65.55.34.154]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-SHA384 (256/256 bits)) (Client CN "*.outlook.com", Issuer "Microsoft IT SSL SHA2" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 0E363874 for ; Sun, 27 Nov 2016 04:18:13 +0000 (UTC) (envelope-from tris_vern@hotmail.com) Received: from AUS01-ME1-obe.outbound.protection.outlook.com ([65.55.34.135]) by COL004-OMC3S16.hotmail.com over TLS secured channel with Microsoft SMTPSVC(7.5.7601.23008); Sat, 26 Nov 2016 20:17:07 -0800 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=hotmail.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version; bh=U/HcDXxUdlsK22fqZyyVBebgRSLLXQi2Rc6sEOhyO2k=; b=kjIqhnHE3kUaBMGeZ+JCzevtmTs0j1YeyiPbyBSy3XdjgeSEpCh0whrCFnF2kSX8P0PF2L6cDga+fa8LqDgh0qM7A4YqfJU56HfZsA60YQjS2UCqFlmOjfqfG5y0mx2t2z5UTYTlS7Mm7AXU2Bbm9RoZsYLl29DRFcPesOQ0bH/xPkVZXE7dQHpLo9LNo5/b6s+N6uR8rDs16bVZZtBcCeESNHR/ayFo/NVh0cbYZkpbIXUBtLCji37LmoZg6fZ1/6+AOpwN1tksMdfg7e4ttcwCVQ3onpgkZ0Xy9D/aO9YgBZdaQKxE1fFxrIhWkPeg9zWf31zzDhoT9AOekRaAjA== Received: from ME1AUS01FT008.eop-AUS01.prod.protection.outlook.com (10.152.232.57) by ME1AUS01HT009.eop-AUS01.prod.protection.outlook.com (10.152.232.92) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384_P384) id 15.1.734.4; Sun, 27 Nov 2016 04:17:03 +0000 Received: from ME1PR01MB0546.ausprd01.prod.outlook.com (10.152.232.58) by ME1AUS01FT008.mail.protection.outlook.com (10.152.232.117) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384_P384) id 15.1.734.4 via Frontend Transport; Sun, 27 Nov 2016 04:17:03 +0000 Received: from ME1PR01MB0546.ausprd01.prod.outlook.com ([10.162.68.22]) by ME1PR01MB0546.ausprd01.prod.outlook.com ([10.162.68.22]) with mapi id 15.01.0734.014; Sun, 27 Nov 2016 04:17:03 +0000 From: Tristan Verniquet To: Mehmet Erol Sanliturk , =?Windows-1252?Q?Arne_Dag_Fidjest=F8l?= CC: Hans Petter Selasky , freebsd hackers Subject: Re: qsort switching to insertsort Thread-Topic: qsort switching to insertsort Thread-Index: AQHSR8zfjghRy3NqhkaB3zSchVE3aKDrFm4AgAAXcRqAACdOgIAALDUAgAAr+4CAAIhjtQ== Date: Sun, 27 Nov 2016 04:17:02 +0000 Message-ID: References: <0bfb49b0-5d24-2766-6982-b4e49b0d5e81@selasky.org> , In-Reply-To: Accept-Language: en-AU, en-US Content-Language: en-AU X-MS-Has-Attach: X-MS-TNEF-Correlator: authentication-results: gmail.com; dkim=none (message not signed) header.d=none;gmail.com; dmarc=none action=none header.from=hotmail.com; x-incomingtopheadermarker: OriginalChecksum:; UpperCasedChecksum:; SizeAsReceived:7938; Count:40 x-ms-exchange-messagesentrepresentingtype: 1 x-tmn: [kY4N+mw+7UvRm7rvdgraOqg33M/yLZQw] x-incomingheadercount: 40 x-eopattributedmessage: 0 x-microsoft-exchange-diagnostics: 1; ME1AUS01HT009; 5:M7xHpnja/UGqgOsq5YqMnFnn7xc0oU/zqKxOUNJinzXXhijRSp7bnGvd1z09Ne09bfcl3YlCPn+au9sflPDWYML2S3ow6j3DMzNxbB8Bn6y3ayE4ScK5Pml2NUl4hb/9GPwdV5ZOlgJ9KhNAD41TxhbVY3w6OkgyFwXk5C1qC+U=; 24:omenyLVCTnGHSKJzo20GkpDp8/cUnxaEdVbJmfoaINqnCFoXQ6Wfh1bmWAakCk8EQB6Wtl4P4U1TXFE3JwSSMDwdBOYuHC5mSts2v9hv2lE=; 7:0HGKQn4yx2HQg69DgpWMr3qqmwZKzjwB6aJqtmCK9LPUKic8BWN6FXO/Z5pKUNA5prScE6QRtmShuzDQd9LH32WS64tMIL5tWu6TgOmq1oz/RzCBvSBrTpH/zkg4XYENxyjtPTW2zSIXdXYQ1aGQb/1BMVpTqCCAgdi+pavVFRYJLDo71q37D1u/mAKHGGFwqcarv75dwT5gmyhqjHBPzrvhrlExOXaX2en2UMPtsQyDs8itb4uUzXFjUYGwvTtXIncq4Rxw+JFDdWeQwqi88bbBNWukX4R4MAs6w3BVHTi72eNbVfGgDj+sxwe1xdYigyCzOf0o7Zm41NtprHMOEpcoNOTwGY4sJ4urAdl3P7A= x-forefront-antispam-report: EFV:NLI; SFV:NSPM; SFS:(10019020)(98900003); DIR:OUT; SFP:1102; SCL:1; SRVR:ME1AUS01HT009; H:ME1PR01MB0546.ausprd01.prod.outlook.com; FPR:; SPF:None; LANG:en; x-ms-office365-filtering-correlation-id: 24938fd6-753c-4951-84f1-08d4167c3dc3 x-microsoft-antispam: UriScan:; BCL:0; PCL:0; RULEID:(22001)(1601124038)(1603103113)(1603101340)(1601125047); SRVR:ME1AUS01HT009; x-exchange-antispam-report-cfa-test: BCL:0; PCL:0; RULEID:(432015012)(82015046); SRVR:ME1AUS01HT009; BCL:0; PCL:0; RULEID:; SRVR:ME1AUS01HT009; x-forefront-prvs: 0139052FDB spamdiagnosticoutput: 1:99 spamdiagnosticmetadata: NSPM MIME-Version: 1.0 X-OriginatorOrg: hotmail.com X-MS-Exchange-CrossTenant-originalarrivaltime: 27 Nov 2016 04:17:02.6105 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Internet X-MS-Exchange-CrossTenant-id: 84df9e7f-e9f6-40af-b435-aaaaaaaaaaaa X-MS-Exchange-Transport-CrossTenantHeadersStamped: ME1AUS01HT009 X-OriginalArrivalTime: 27 Nov 2016 04:17:07.0019 (UTC) FILETIME=[1D73C9B0:01D24865] Content-Type: text/plain; charset="Windows-1252" Content-Transfer-Encoding: quoted-printable X-Content-Filtered-By: Mailman/MimeDel 2.1.23 X-BeenThere: freebsd-hackers@freebsd.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: Technical Discussions relating to FreeBSD List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sun, 27 Nov 2016 04:18:14 -0000 From: Mehmet Erol Sanliturk Sent: Sunday, 27 November 2016 5:51 AM To: Arne Dag Fidjest=F8l Cc: Tristan Verniquet; Hans Petter Selasky; freebsd hackers Subject: Re: qsort switching to insertsort On Sat, Nov 26, 2016 at 9:14 AM, Arne Dag Fidjest=F8l wro= te: > On 26 Nov 2016, at 15:35, Mehmet Erol Sanliturk = wrote: > > In quick sort , it is necessary to check worst case and switch to another > sort method if it is detected . > When this is not done , end result is stack overflow , etc . , but not > success . > Therefore , it is not possible to eliminate an alternative sort method . I you sort the smaller partition recursively first, and then sort the large= r partition either by tail recursion or iteration, you will only consume O(= log n) of stack, so stack overflow needn=92t be an issue, regardless of the= input. -adf Important problem is caused by almost sorted values . Myself , I am countin= g the sorted elements first , if they exceed a large percentage of number o= f all elements , then I am switching to an alternative sort , otherwise a q= uick sort is used . This is for a simple application . In an operating system , more complex algorithms may be more useful . Mehmet Erol Sanliturk --- It can still trigger with completely unsorted data in the top and bottom ha= lf, as long as it chooses the middle value for the pivot. The main reason n= early sorted data is vulnerable is that it is more likely to match these co= nditions, and more likely to happen in real life situations. But this is why i don't really consider it an "edge" case, there would be a= whole class of situations (like the one we had) where it would be very lik= ely to trigger with very bad side effects. Maybe, does anyone continue to use FreeBSD qsort while being aware of this = implementation detail? Under what conditions/assurances? Does anyone use FreeBSDs qsort because of this feature? Tristan ________________________________ From: Mehmet Erol Sanliturk Sent: Sunday, 27 November 2016 5:51:31 AM To: Arne Dag Fidjest=F8l Cc: Tristan Verniquet; Hans Petter Selasky; freebsd hackers Subject: Re: qsort switching to insertsort On Sat, Nov 26, 2016 at 9:14 AM, Arne Dag Fidjest=F8l > wrote: > On 26 Nov 2016, at 15:35, Mehmet Erol Sanliturk > wrote: > > In quick sort , it is necessary to check worst case and switch to another > sort method if it is detected . > When this is not done , end result is stack overflow , etc . , but not > success . > Therefore , it is not possible to eliminate an alternative sort method . I you sort the smaller partition recursively first, and then sort the large= r partition either by tail recursion or iteration, you will only consume O(= log n) of stack, so stack overflow needn=92t be an issue, regardless of the= input. -adf Important problem is caused by almost sorted values . Myself , I am countin= g the sorted elements first , if they exceed a large percentage of number o= f all elements , then I am switching to an alternative sort , otherwise a q= uick sort is used . This is for a simple application . In an operating system , more complex algorithms may be more useful . Mehmet Erol Sanliturk From owner-freebsd-hackers@freebsd.org Sun Nov 27 06:40:22 2016 Return-Path: Delivered-To: freebsd-hackers@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 03D34C55A2A for ; Sun, 27 Nov 2016 06:40:22 +0000 (UTC) (envelope-from alfred@freebsd.org) Received: from elvis.mu.org (elvis.mu.org [IPv6:2001:470:1f05:b76::196]) by mx1.freebsd.org (Postfix) with ESMTP id D958CE4 for ; Sun, 27 Nov 2016 06:40:21 +0000 (UTC) (envelope-from alfred@freebsd.org) Received: from Alfreds-MacBook-Pro-2.local (unknown [IPv6:2601:645:8003:a4d6:197f:17c3:f3:a4ad]) by elvis.mu.org (Postfix) with ESMTPSA id 2CC7A346DDF5; Sat, 26 Nov 2016 22:40:21 -0800 (PST) Subject: Re: qsort switching to insertsort To: Tristan Verniquet , Mehmet Erol Sanliturk , =?UTF-8?Q?Arne_Dag_Fidjest=c3=b8l?= References: <0bfb49b0-5d24-2766-6982-b4e49b0d5e81@selasky.org> Cc: Hans Petter Selasky , freebsd hackers From: Alfred Perlstein Organization: FreeBSD Message-ID: <8b0bd8e7-a77d-85d8-18e7-e1e33fed78f5@freebsd.org> Date: Sat, 26 Nov 2016 22:40:20 -0800 User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.12; rv:45.0) Gecko/20100101 Thunderbird/45.5.0 MIME-Version: 1.0 In-Reply-To: Content-Type: text/plain; charset=windows-1252; format=flowed Content-Transfer-Encoding: 8bit X-BeenThere: freebsd-hackers@freebsd.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: Technical Discussions relating to FreeBSD List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sun, 27 Nov 2016 06:40:22 -0000 A couple notes: 1) It's interesting to me that it's based on a simple heuristic as opposed to also checking the depth of the recursion within the qsort itself. 2) Wondering if upon detection of this situation it might even be faster to perform some randomization (shuffle) of the data and then retry. 3) Wondering if there could be a way to return an error and indicate the data is unsorted if the corner case is hit allowing the caller to make a choice at that point. Obviously the API would need to be changed. I haven't thought too hard on this. One thing to keep in mind: Using qsort in a codepath has "deadlines" or other deterministic needs is not going to work out well. It's better to use a sort with a known complexity with an upper bound than something that can be defeated by a pathological input data set. -Alfred On 11/26/16 8:17 PM, Tristan Verniquet wrote: > From: Mehmet Erol Sanliturk > Sent: Sunday, 27 November 2016 5:51 AM > To: Arne Dag Fidjestøl > Cc: Tristan Verniquet; Hans Petter Selasky; freebsd hackers > Subject: Re: qsort switching to insertsort > > > > On Sat, Nov 26, 2016 at 9:14 AM, Arne Dag Fidjestøl wrote: > >> On 26 Nov 2016, at 15:35, Mehmet Erol Sanliturk wrote: >> >> In quick sort , it is necessary to check worst case and switch to another >> sort method if it is detected . >> When this is not done , end result is stack overflow , etc . , but not >> success . >> Therefore , it is not possible to eliminate an alternative sort method . > I you sort the smaller partition recursively first, and then sort the larger partition either by tail recursion or iteration, you will only consume O(log n) of stack, so stack overflow needn’t be an issue, regardless of the input. > > -adf > > > > Important problem is caused by almost sorted values . Myself , I am counting the sorted elements first , if they exceed a large percentage of number of all elements , then I am switching to an alternative sort , otherwise a quick sort is used . This is for a simple application . > > In an operating system , more complex algorithms may be more useful . > > > Mehmet Erol Sanliturk > > --- > > It can still trigger with completely unsorted data in the top and bottom half, as long as it chooses the middle value for the pivot. The main reason nearly sorted data is vulnerable is that it is more likely to match these conditions, and more likely to happen in real life situations. > > But this is why i don't really consider it an "edge" case, there would be a whole class of situations (like the one we had) where it would be very likely to trigger with very bad side effects. > > Maybe, does anyone continue to use FreeBSD qsort while being aware of this implementation detail? Under what conditions/assurances? > > Does anyone use FreeBSDs qsort because of this feature? > > Tristan > ________________________________ > From: Mehmet Erol Sanliturk > Sent: Sunday, 27 November 2016 5:51:31 AM > To: Arne Dag Fidjestøl > Cc: Tristan Verniquet; Hans Petter Selasky; freebsd hackers > Subject: Re: qsort switching to insertsort > > > > On Sat, Nov 26, 2016 at 9:14 AM, Arne Dag Fidjestøl > wrote: > >> On 26 Nov 2016, at 15:35, Mehmet Erol Sanliturk > wrote: >> >> In quick sort , it is necessary to check worst case and switch to another >> sort method if it is detected . >> When this is not done , end result is stack overflow , etc . , but not >> success . >> Therefore , it is not possible to eliminate an alternative sort method . > I you sort the smaller partition recursively first, and then sort the larger partition either by tail recursion or iteration, you will only consume O(log n) of stack, so stack overflow needn’t be an issue, regardless of the input. > > -adf > > > > Important problem is caused by almost sorted values . Myself , I am counting the sorted elements first , if they exceed a large percentage of number of all elements , then I am switching to an alternative sort , otherwise a quick sort is used . This is for a simple application . > > In an operating system , more complex algorithms may be more useful . > > > Mehmet Erol Sanliturk > > > > _______________________________________________ > freebsd-hackers@freebsd.org mailing list > https://lists.freebsd.org/mailman/listinfo/freebsd-hackers > To unsubscribe, send any mail to "freebsd-hackers-unsubscribe@freebsd.org" > From owner-freebsd-hackers@freebsd.org Sun Nov 27 12:47:47 2016 Return-Path: Delivered-To: freebsd-hackers@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 22739C540AD for ; Sun, 27 Nov 2016 12:47:47 +0000 (UTC) (envelope-from mitchell@wyatt672earp.force9.co.uk) Received: from avasout02.plus.net (avasout02.plus.net [212.159.14.17]) (using TLSv1 with cipher DHE-RSA-AES128-SHA (128/128 bits)) (Client CN "Bizanga Labs SMTP Client Certificate", Issuer "Bizanga Labs CA" (not verified)) by mx1.freebsd.org (Postfix) with ESMTPS id B91D41044 for ; Sun, 27 Nov 2016 12:47:46 +0000 (UTC) (envelope-from mitchell@wyatt672earp.force9.co.uk) Received: from daa860.localnet ([146.90.200.236]) by avasout02 with smtp id D0kX1u00856XT2i010kYbW; Sun, 27 Nov 2016 12:44:32 +0000 X-CM-Score: 0.00 X-CNFS-Analysis: v=2.2 cv=G/5eKJs5 c=1 sm=1 tr=0 a=X4HkhBxjgj1rt5EbMA0B3g==:117 a=X4HkhBxjgj1rt5EbMA0B3g==:17 a=IkcTkHD0fZMA:10 a=MKtGQD3n3ToA:10 a=dik7HMQjudEA:10 a=ZZnuYtJkoWoA:10 a=pGLkceISAAAA:8 a=6I5d2MoRAAAA:8 a=pVDYhNIf0EFrnJ2VQR4A:9 a=GxsDny6wD0BKfkrr:21 a=FzMToYfDCPDZsbqE:21 a=QEXdDO2ut3YA:10 a=6kGIvZw6iX1k4Y-7sg4_:22 a=IjZwj45LgO3ly-622nXo:22 From: Mitchell To: freebsd-hackers@freebsd.org Subject: Re: qsort switching to insertsort Date: Sun, 27 Nov 2016 12:38:56 +0000 Message-ID: <2066156.rDbTD5n9LR@daa860> User-Agent: KMail/4.14.1 (Linux/3.16.0-4-amd64; KDE/4.14.2; x86_64; ; ) In-Reply-To: References: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" X-BeenThere: freebsd-hackers@freebsd.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: Technical Discussions relating to FreeBSD List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sun, 27 Nov 2016 12:47:47 -0000 In "Numerical Recipes" (Press, Teukolsky, Vetterling & Flannery) the=20= Partitioning Element chosen is the median of the First, Middle & Last. = They=20 mention other techniques too. On Sunday 27 November 2016 04:17:02 Tristan Verniquet wrote: > From: Mehmet Erol Sanliturk > Sent: Sunday, 27 November 2016 5:51 AM > To: Arne Dag Fidjest=C3=B8l > Cc: Tristan Verniquet; Hans Petter Selasky; freebsd hackers > Subject: Re: qsort switching to insertsort >=20 >=20 >=20 > On Sat, Nov 26, 2016 at 9:14 AM, Arne Dag Fidjest=C3=B8l wrote: >=20 > > On 26 Nov 2016, at 15:35, Mehmet Erol Sanliturk =20 wrote: > > > > In quick sort , it is necessary to check worst case and switch to a= nother > > sort method if it is detected . > > When this is not done , end result is stack overflow , etc . , but = not > > success . > > Therefore , it is not possible to eliminate an alternative sort met= hod . >=20 > I you sort the smaller partition recursively first, and then sort the= larger=20 partition either by tail recursion or iteration, you will only consume = O(log=20 n) of stack, so stack overflow needn=E2=80=99t be an issue, regardless = of the input. >=20 > -adf >=20 >=20 >=20 > Important problem is caused by almost sorted values . Myself , I am c= ounting=20 the sorted elements first , if they exceed a large percentage of number= of all=20 elements , then I am switching to an alternative sort , otherwise a qui= ck sort=20 is used . This is for a simple application . >=20 > In an operating system , more complex algorithms may be more useful .= >=20 >=20 > Mehmet Erol Sanliturk >=20 > --- >=20 > It can still trigger with completely unsorted data in the top and bot= tom=20 half, as long as it chooses the middle value for the pivot. The main re= ason=20 nearly sorted data is vulnerable is that it is more likely to match the= se=20 conditions, and more likely to happen in real life situations. >=20 > But this is why i don't really consider it an "edge" case, there woul= d be a=20 whole class of situations (like the one we had) where it would be very = likely=20 to trigger with very bad side effects. >=20 > Maybe, does anyone continue to use FreeBSD qsort while being aware of= this=20 implementation detail? Under what conditions/assurances? >=20 > Does anyone use FreeBSDs qsort because of this feature? >=20 > Tristan > ________________________________ > From: Mehmet Erol Sanliturk > Sent: Sunday, 27 November 2016 5:51:31 AM > To: Arne Dag Fidjest=C3=B8l > Cc: Tristan Verniquet; Hans Petter Selasky; freebsd hackers > Subject: Re: qsort switching to insertsort >=20 >=20 >=20 > On Sat, Nov 26, 2016 at 9:14 AM, Arne Dag Fidjest=C3=B8l=20 > wrote: >=20 > > On 26 Nov 2016, at 15:35, Mehmet Erol Sanliturk=20 > wrote: > > > > In quick sort , it is necessary to check worst case and switch to a= nother > > sort method if it is detected . > > When this is not done , end result is stack overflow , etc . , but = not > > success . > > Therefore , it is not possible to eliminate an alternative sort met= hod . >=20 > I you sort the smaller partition recursively first, and then sort the= larger=20 partition either by tail recursion or iteration, you will only consume = O(log=20 n) of stack, so stack overflow needn=E2=80=99t be an issue, regardless = of the input. >=20 > -adf >=20 >=20 >=20 > Important problem is caused by almost sorted values . Myself , I am c= ounting=20 the sorted elements first , if they exceed a large percentage of number= of all=20 elements , then I am switching to an alternative sort , otherwise a qui= ck sort=20 is used . This is for a simple application . >=20 > In an operating system , more complex algorithms may be more useful .= >=20 >=20 > Mehmet Erol Sanliturk >=20 >=20 >=20 > _______________________________________________ > freebsd-hackers@freebsd.org mailing list > https://lists.freebsd.org/mailman/listinfo/freebsd-hackers > To unsubscribe, send any mail to "freebsd-hackers-unsubscribe@freebsd= .org" From owner-freebsd-hackers@freebsd.org Sun Nov 27 12:51:19 2016 Return-Path: Delivered-To: freebsd-hackers@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 BFEA0C5431F for ; Sun, 27 Nov 2016 12:51:19 +0000 (UTC) (envelope-from tris_vern@hotmail.com) Received: from SNT004-OMC4S31.hotmail.com (snt004-omc4s31.hotmail.com [65.55.90.234]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-SHA384 (256/256 bits)) (Client CN "*.outlook.com", Issuer "Microsoft IT SSL SHA2" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 6FADB12BE; Sun, 27 Nov 2016 12:51:19 +0000 (UTC) (envelope-from tris_vern@hotmail.com) Received: from AUS01-ME1-obe.outbound.protection.outlook.com ([65.55.90.201]) by SNT004-OMC4S31.hotmail.com over TLS secured channel with Microsoft SMTPSVC(7.5.7601.23008); Sun, 27 Nov 2016 04:50:12 -0800 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=hotmail.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version; bh=Drar9Kf3sOsdv4ohZhsto+kMAfGOx3HIFCaY/GL7Y5A=; b=OXE/T7aVJ43hiswrn0anaWL33pkLk2UiS9Bt5gqTu6m3RQg1HwPC+CujdYKA+5rxf3XF7chBvvRyAm7xl4UqC+gYSQUWuKZ+FscRH9thwLHbYZHQKFCGNhLrVEawikCNYzdFNf9baq3vPOvUPVIg53i0anDY5qidt6+HAn26C4EAiVx7mM5DZAdLsTLF9wCAH3G9JB2yCXBDHm2NLbI1JkArwt2LMtok514kL7hOxiQUDIIwgKNJ76rdhHKsLdnGhtNT9Q8udjpQMnT+yRfukr07M9rGrzDogBMfCzZyNBlv0KBWTj4y8ckbDLOvG+SqmjNT0kGj6RDS2h9ZfY3Mbw== Received: from ME1AUS01FT008.eop-AUS01.prod.protection.outlook.com (10.152.232.55) by ME1AUS01HT004.eop-AUS01.prod.protection.outlook.com (10.152.232.123) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384_P384) id 15.1.734.4; Sun, 27 Nov 2016 12:50:05 +0000 Received: from ME1PR01MB0546.ausprd01.prod.outlook.com (10.152.232.52) by ME1AUS01FT008.mail.protection.outlook.com (10.152.232.117) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384_P384) id 15.1.734.4 via Frontend Transport; Sun, 27 Nov 2016 12:50:05 +0000 Received: from ME1PR01MB0546.ausprd01.prod.outlook.com ([10.162.68.22]) by ME1PR01MB0546.ausprd01.prod.outlook.com ([10.162.68.22]) with mapi id 15.01.0734.014; Sun, 27 Nov 2016 12:50:05 +0000 From: Tristan Verniquet To: Alfred Perlstein , Mehmet Erol Sanliturk , =?iso-8859-1?Q?Arne_Dag_Fidjest=F8l?= CC: Hans Petter Selasky , freebsd hackers Subject: Re: qsort switching to insertsort Thread-Topic: qsort switching to insertsort Thread-Index: AQHSR8zfjghRy3NqhkaB3zSchVE3aKDrFm4AgAAXcRqAACdOgIAALDUAgAAr+4CAAIhjtYAALOQAgAAUvEo= Date: Sun, 27 Nov 2016 12:50:05 +0000 Message-ID: References: <0bfb49b0-5d24-2766-6982-b4e49b0d5e81@selasky.org> , <8b0bd8e7-a77d-85d8-18e7-e1e33fed78f5@freebsd.org> In-Reply-To: <8b0bd8e7-a77d-85d8-18e7-e1e33fed78f5@freebsd.org> Accept-Language: en-AU, en-US Content-Language: en-AU X-MS-Has-Attach: X-MS-TNEF-Correlator: authentication-results: selasky.org; dkim=none (message not signed) header.d=none;selasky.org; dmarc=none action=none header.from=hotmail.com; x-incomingtopheadermarker: OriginalChecksum:; UpperCasedChecksum:; SizeAsReceived:8111; Count:40 x-ms-exchange-messagesentrepresentingtype: 1 x-tmn: [fBRa4UV4kLllTw8QbURECjL+8AhCHwYn] x-incomingheadercount: 40 x-eopattributedmessage: 0 x-microsoft-exchange-diagnostics: 1; ME1AUS01HT004; 5:rPcOO/kdygKM2/QfrrgNQg92DL7AVOitcMe8DMpbB5eJ4LmOl3to3saF8H74UmU68iyYlpJKL+sYH7GGSauvj5yVJCOjJk8gVVSrWVb/HCbHO6chBJogYAhUMnbJCBvi46Rm5b1JYvjrp783tYem2qE6J1iJZ8JQEaT8ppQ6KE4=; 24:5qw7bGvuKk2hnFCZqZ+kS88obQiXbV4pkPOByRbFoRQNTbOyrNbM3s8C7P04fYheZsQlhH6f36+7WbKou8aUpAvMA0FoMpNgdVW69WK/nyk=; 7:kl38JezTMrMNGyIfJFZlD7pY0H/jMnd3X4STPw02RWrBxMfR9s0vqdo/SzwCfEvim/Y/y9hbspg8b4HHEOpSURg0hd6IDOSpoKWG0C/dd5txtvawDuIwv0evRaca6qaLBwHrMYMXrAaWuN1/LIC4xvTQJ9I3awMlzSdTeBqklXvn+m8XN0BGKcLVHbIodLSIqxl5Vv78tyeZTDArh2JHo0q3E7nN0mpGN8i6NDonG2eNv2FY2d+dSaZ7ohJ97sUtcCG63jBNzhhh1nSMvxVFs0pdMIJQH7GF1sGpYF/1BEzspJqNDW3zwzbQAUXU90JqcNHp6WhMiIrLNBfZ2NUVUCOKLYCFyZcSf3FozmHcC3c= x-forefront-antispam-report: EFV:NLI; SFV:NSPM; SFS:(10019020)(98900003); DIR:OUT; SFP:1102; SCL:1; SRVR:ME1AUS01HT004; H:ME1PR01MB0546.ausprd01.prod.outlook.com; FPR:; SPF:None; LANG:en; x-ms-office365-filtering-correlation-id: 3fc25413-ef43-4fbf-f779-08d416c3e97a x-microsoft-antispam: UriScan:; BCL:0; PCL:0; RULEID:(22001)(1601124038)(1603103113)(1603101340)(1601125047); SRVR:ME1AUS01HT004; x-exchange-antispam-report-cfa-test: BCL:0; PCL:0; RULEID:(432015012)(82015046); SRVR:ME1AUS01HT004; BCL:0; PCL:0; RULEID:; SRVR:ME1AUS01HT004; x-forefront-prvs: 0139052FDB spamdiagnosticoutput: 1:99 spamdiagnosticmetadata: NSPM Content-Type: text/plain; charset="iso-8859-1" Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 X-OriginatorOrg: hotmail.com X-MS-Exchange-CrossTenant-originalarrivaltime: 27 Nov 2016 12:50:05.5414 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Internet X-MS-Exchange-CrossTenant-id: 84df9e7f-e9f6-40af-b435-aaaaaaaaaaaa X-MS-Exchange-Transport-CrossTenantHeadersStamped: ME1AUS01HT004 X-OriginalArrivalTime: 27 Nov 2016 12:50:12.0840 (UTC) FILETIME=[CB3B4680:01D248AC] X-BeenThere: freebsd-hackers@freebsd.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: Technical Discussions relating to FreeBSD List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sun, 27 Nov 2016 12:51:19 -0000 > From: Alfred Perlstein > Sent: Sunday, 27 November 2016 4:40 PM > To: Tristan Verniquet; Mehmet Erol Sanliturk; Arne Dag Fidjest=F8l > Cc: Hans Petter Selasky; freebsd hackers > Subject: Re: qsort switching to insertsort > =A0 =20 > A couple notes: >=20 > 1) It's interesting to me that it's based on a simple heuristic as=20 > opposed to also checking the depth of the recursion within the qsort=20 > itself. >=20 > 2) Wondering if upon detection of this situation it might even be faster= =20 > to perform some randomization (shuffle) of the data and then retry. >=20 > 3) Wondering if there could be a way to return an error and indicate the= =20 > data is unsorted if the corner case is hit allowing the caller to make a= =20 > choice at that point.=A0 Obviously the API would need to be changed. >=20 > I haven't thought too hard on this. Note that the functionalilty in question is a special-case test which has b= een bolted on to the side. Nothing much is really lost by removing it, whic= h according to my first link is what NetBSD has done. I don't think we'll g= et far discussing how to "fix" it as tempting as that is - probably better = left for a very in depth studious well tested effort.. The qsort.c file is only 200 odd lines long. I highly recommend reading it = to see what I mean (ie the case if swap_cnt =3D=3D 0). (The special-case is to turn sorting sorted data from O(nlogn) to O(n), but= exposes a whole new set of average-case O(n^2) cases) > > One thing to keep in mind: Using qsort in a codepath has "deadlines" or=20 > other deterministic needs is not going to work out well.=A0 It's better t= o=20 > use a sort with a known complexity with an upper bound than something=20 > that can be defeated by a pathological input data set. >=20 > -Alfred I guess I have the same comment/question as I do for Hans Petter Selasky's = response. In the cases where qsort would actually be used, don't you think the much h= igher likelyhood of triggering the insertsort worst case especially with so= me types of data makes a big difference? Maybe, I see the insertsort case as similar (though obviously not as likely= to be hit) as the "choose the last element" pivot selection which sorts O(= n^2) on sorted data. If users need to expect O(n^2) anyway, why not keep th= e last element pivot selection? Instead, a pretty good effort has been made= to make sure bad pivots won't be chosen with normal data. That is undermin= ed slightly with the insertsort switch imho. Tristan = From owner-freebsd-hackers@freebsd.org Sun Nov 27 13:00:27 2016 Return-Path: Delivered-To: freebsd-hackers@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 A88EEC54AA9 for ; Sun, 27 Nov 2016 13:00:27 +0000 (UTC) (envelope-from tris_vern@hotmail.com) Received: from COL004-OMC3S2.hotmail.com (col004-omc3s2.hotmail.com [65.55.34.140]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-SHA384 (256/256 bits)) (Client CN "*.outlook.com", Issuer "Microsoft IT SSL SHA2" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 6F3D41A38 for ; Sun, 27 Nov 2016 13:00:27 +0000 (UTC) (envelope-from tris_vern@hotmail.com) Received: from AUS01-SY3-obe.outbound.protection.outlook.com ([65.55.34.136]) by COL004-OMC3S2.hotmail.com over TLS secured channel with Microsoft SMTPSVC(7.5.7601.23008); Sun, 27 Nov 2016 04:59:21 -0800 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=hotmail.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version; bh=5GxVU7tT5LHfXVHZAfvTclxYBuRaS62GAkELDxSz0iw=; b=QqxUVdBT1OYX9mjcYFAwrwGNLr1jgAoiw0EzkTtRIFnDanVKUJfx7fzLyydKfZY/i77Z2dqYzK/FylIgeL2umCkRzCbUIPSYeNwyndBRJHSqv8SF7ZmLLx4R5ydJuqg9wZGUQSHt7gYPRWY6/otUimQAYuxa3C0phiWLPpmLa1vdskM/7H2fOEPSktb8NL4Pm/xwQIWGByi7dUH/eAEYcXGaUjB6nTSYU/U/XlvCuXtxlS0x1VukVXQqr5Sq2bXLmxhg9dXx4TkLq69VaazguVMimMb01CSRa16EQl1IOvczKNoAMYrdFiK24DFaSNzDKBFFGcD31GErjn9lsqC3dg== Received: from SY3AUS01FT007.eop-AUS01.prod.protection.outlook.com (10.152.234.53) by SY3AUS01HT008.eop-AUS01.prod.protection.outlook.com (10.152.234.106) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384_P384) id 15.1.734.4; Sun, 27 Nov 2016 12:59:18 +0000 Received: from ME1PR01MB0546.ausprd01.prod.outlook.com (10.152.234.55) by SY3AUS01FT007.mail.protection.outlook.com (10.152.234.63) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384_P384) id 15.1.734.4 via Frontend Transport; Sun, 27 Nov 2016 12:59:17 +0000 Received: from ME1PR01MB0546.ausprd01.prod.outlook.com ([10.162.68.22]) by ME1PR01MB0546.ausprd01.prod.outlook.com ([10.162.68.22]) with mapi id 15.01.0734.014; Sun, 27 Nov 2016 12:59:17 +0000 From: Tristan Verniquet To: Mitchell , "freebsd-hackers@freebsd.org" Subject: Re: qsort switching to insertsort Thread-Topic: qsort switching to insertsort Thread-Index: AQHSR8zfjghRy3NqhkaB3zSchVE3aKDrFm4AgAAXcRqAACdOgIAALDUAgAAr+4CAAIhjtYAAkRUAgAADM7s= Date: Sun, 27 Nov 2016 12:59:17 +0000 Message-ID: References: , <2066156.rDbTD5n9LR@daa860> In-Reply-To: <2066156.rDbTD5n9LR@daa860> Accept-Language: en-AU, en-US Content-Language: en-AU X-MS-Has-Attach: X-MS-TNEF-Correlator: authentication-results: wyatt672earp.force9.co.uk; dkim=none (message not signed) header.d=none;wyatt672earp.force9.co.uk; dmarc=none action=none header.from=hotmail.com; x-incomingtopheadermarker: OriginalChecksum:; UpperCasedChecksum:; SizeAsReceived:7673; Count:39 x-ms-exchange-messagesentrepresentingtype: 1 x-tmn: [+J0qG/f7UT46Xos8hjvdUNvdJOLzPDxE] x-incomingheadercount: 39 x-eopattributedmessage: 0 x-microsoft-exchange-diagnostics: 1; SY3AUS01HT008; 5:Rzr1d0Q5lJ70gId8bnH6jd0FHqRUNgUg8neWndraWfgr8BkfXfbydcum/Ln86/V2oLtW2awDcCygI7VXWxHNylKfOGWd/YvsAvy12MArLO3ODmQduiRdGSBwCv8W2ISzfhlDvmAmK2MAx5lpGUYWgDoeaPtfkKiXQYzMLaZGlo8=; 24:sUenJ21msZ7Z9SQqKIn1W7al8AM3z0l7HENw0yf9DPF/Ye9RM+utketP0zGlMhRNdWqOueJnO1o1EAmzrKVrcLTQxYEEK2LvBFe7RW/nPLQ=; 7:SxVdgL0tvNfmee35BwFVfuy5hIo9gZJwqbO7rZfiObBI0YWz7z7kB44DAfblmK8ZrtYKwgddL6sOEsvzHbLRWMXEZI44AnC2tPPxVZHlthlhCxU3vckdFYRw12nATPGbgUdXZpDsg4SZqRyxF4qpvZksXFylS5M5xphFAe/oGB/e3XlRY05KMINmHxA1Syc23BMQ/O1YMzYAIEODGR0y4xfSrK0sm7fwk4Gh/NC6P3X2kGGYva6Fde17ZHEHEsFifbAV/WUZOp9MTh4znzXDTbej0KzVpw6mEOIMH335UGAw+QwZ3Z2cX9akZK2/y/FVXQkJUihXobj0UtNL2V105p+8JX0f8rj6rsT7zIo/pfw= x-forefront-antispam-report: EFV:NLI; SFV:NSPM; SFS:(10019020)(98900003); DIR:OUT; SFP:1102; SCL:1; SRVR:SY3AUS01HT008; H:ME1PR01MB0546.ausprd01.prod.outlook.com; FPR:; SPF:None; LANG:en; x-ms-office365-filtering-correlation-id: fcb29d4a-1cdd-42f5-ecf3-08d416c5328e x-microsoft-antispam: UriScan:; BCL:0; PCL:0; RULEID:(22001)(1601124038)(1603103113)(1603101340)(1601125047); SRVR:SY3AUS01HT008; x-exchange-antispam-report-cfa-test: BCL:0; PCL:0; RULEID:(432015012)(82015046); SRVR:SY3AUS01HT008; BCL:0; PCL:0; RULEID:; SRVR:SY3AUS01HT008; x-forefront-prvs: 0139052FDB spamdiagnosticoutput: 1:99 spamdiagnosticmetadata: NSPM Content-Type: text/plain; charset="iso-8859-1" Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 X-OriginatorOrg: hotmail.com X-MS-Exchange-CrossTenant-originalarrivaltime: 27 Nov 2016 12:59:17.7077 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Internet X-MS-Exchange-CrossTenant-id: 84df9e7f-e9f6-40af-b435-aaaaaaaaaaaa X-MS-Exchange-Transport-CrossTenantHeadersStamped: SY3AUS01HT008 X-OriginalArrivalTime: 27 Nov 2016 12:59:21.0557 (UTC) FILETIME=[124AD850:01D248AE] X-BeenThere: freebsd-hackers@freebsd.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: Technical Discussions relating to FreeBSD List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sun, 27 Nov 2016 13:00:27 -0000 > From: owner-freebsd-hackers@freebsd.org on behalf of Mitchell > Sent: Sunday, 27 November 2016 10:38 PM > To: freebsd-hackers@freebsd.org > Subject: Re: qsort switching to insertsort > =A0 >=A0 > In "Numerical Recipes" (Press, Teukolsky, Vetterling & Flannery) the=A0 > Partitioning Element chosen is the median of the First, Middle & Last. Th= ey=A0 > mention other techniques too. The method used in FreeBSD qsort is the ninther approach. Ie the med3 of 3 = med3's from the start, middle and end of the partition. pm =3D (char *)a + (n / 2) * es; if (n > 7) { =A0 =A0 =A0 =A0pl =3D a; =A0 =A0 =A0 =A0pn =3D (char *)a + (n - 1) * es; =A0 =A0 =A0 =A0if (n > 40) { =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0d =3D (n / 8) * es; =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0pl =3D med3(pl, pl + d, pl + 2 * d, cmp, thu= nk); =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0pm =3D med3(pm - d, pm, pm + d, cmp, thunk); =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0pn =3D med3(pn - 2 * d, pn - d, pn, cmp, thu= nk); =A0 =A0 =A0 =A0} =A0 =A0 =A0 =A0pm =3D med3(pl, pm, pn, cmp, thunk); } swap(a, pm); https://en.wikipedia.org/wiki/Median#Ninther So it is very hard to hit a bad pivot case with everyday data, but not that= unrealistic to hit the insertsort (swap_cnt =3D=3D 0) case with certain se= ts of data. Tristan = From owner-freebsd-hackers@freebsd.org Sun Nov 27 19:59:46 2016 Return-Path: Delivered-To: freebsd-hackers@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 035CAC59E18 for ; Sun, 27 Nov 2016 19:59:46 +0000 (UTC) (envelope-from dcrosstech@gmail.com) Received: from mail-yw0-x231.google.com (mail-yw0-x231.google.com [IPv6:2607:f8b0:4002:c05::231]) (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 BFB3A942 for ; Sun, 27 Nov 2016 19:59:45 +0000 (UTC) (envelope-from dcrosstech@gmail.com) Received: by mail-yw0-x231.google.com with SMTP id t125so99688203ywc.1 for ; Sun, 27 Nov 2016 11:59:45 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=mime-version:from:date:message-id:subject:to; bh=U3y3I53NtS4TA8IEGJTlyCyEvTG2MqbphTK1xOHmyyk=; b=NgrVIAUjnRiA7aMJloqnDr0Cf2OjUuLBbNjIpzewaeGLItST6VQgPdcvGw5hsGQlIh jlGF5xfhF2gKxRHtcoynsqu2irjTXXhlvsfcflaWTnNddGuG7pVbCVrTPChDqpQJ7AUM ppHs1mMLEfR0taCL15Qq6mZggoFkvWANZtfGrs8I+x9LIxtVMPmplisLvGQOf/KnMHN3 hgrpC1+hpCvIsT3Uw/ipWAIz/5SL7nlTFk7jX0RyVr+Bfyz5uS/98/xY6ASkjOs5Ygnk WsB8MMZxDF+2YRa2vhLt/p+S50vGc47JFRaf4/n7v63hM0lKMhQMrZZ1ctve4tsjhO9W ODwA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20130820; h=x-gm-message-state:mime-version:from:date:message-id:subject:to; bh=U3y3I53NtS4TA8IEGJTlyCyEvTG2MqbphTK1xOHmyyk=; b=c0CO7zIMbcsvCEnLLajh7btBCFMpwIUEsh5Er5h7tiTzbuvPrKEW/06zr28vLdhz86 AzhVUwsH1/J1sYD0wioYUOPg4nET5X17CDRU1j7xfiPBveMzozz6ZvOAxDrStsnKNSQE zbuW7EViiTIErUuYML3oldXBZweRFkfhr8U0HAj0kI0UOGZD5G9hM5mI5WYDUplfNd2S DhKc51rEGreCAv98+WH65jMCT0YyUWgDoF7ctOtG/MbDHmQJZSz8U5so6R+oY1RYtob8 yqwsOu1IQtXBiDBycQGOnujJwBSevpZgB5MaWcK4n5PGVSJMvEjASEOICkgDZ9V0cpIc 4YKg== X-Gm-Message-State: AKaTC01+OMCnfQk5/UorBZk216bnyL86wpW/B00r0GeT2im/CevRA79qoJPH0TvtD7yPPjXujwZh7i0n0xR2FQ== X-Received: by 10.13.227.3 with SMTP id m3mr21404115ywe.272.1480276784852; Sun, 27 Nov 2016 11:59:44 -0800 (PST) MIME-Version: 1.0 Received: by 10.37.201.197 with HTTP; Sun, 27 Nov 2016 11:59:44 -0800 (PST) From: David Cross Date: Sun, 27 Nov 2016 14:59:44 -0500 Message-ID: Subject: Re: FreeBSD 11 sparc64 instability To: freebsd-hackers@freebsd.org Content-Type: text/plain; charset=UTF-8 X-Content-Filtered-By: Mailman/MimeDel 2.1.23 X-BeenThere: freebsd-hackers@freebsd.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: Technical Discussions relating to FreeBSD List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sun, 27 Nov 2016 19:59:46 -0000 On 2016-11-21 22:11:45, Allan Jude wrote: > Try running: uname -K and uname -U > > This will print the API versions of your kernel and userland. If they do > not match, this is definitely the source of your issues. Given at this point I was running GENERIC from install images pulled down from ftp.freebsd.org, I would certainly hope they were in sync, nevertheless, here's the output: uname -K 1100122 uname -U 1100122 It seems this should be *trivial* for anyone to reproduce who has a sparc64 machine. Boot machine, load ipfw (standard caveats apply here, you want console access), ipfw -a list, get error message. If you still have a 10.3 ipfw use that next. the fsck test is a bit more involved to test, but I feel here people are playing with fire... their systems will work perfectly until they get a crash, and then their FS is toast. From owner-freebsd-hackers@freebsd.org Sun Nov 27 20:17:14 2016 Return-Path: Delivered-To: freebsd-hackers@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 C8456C59263 for ; Sun, 27 Nov 2016 20:17:14 +0000 (UTC) (envelope-from dcrosstech@gmail.com) Received: from mail-yw0-x234.google.com (mail-yw0-x234.google.com [IPv6:2607:f8b0:4002:c05::234]) (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 8987C1222 for ; Sun, 27 Nov 2016 20:17:14 +0000 (UTC) (envelope-from dcrosstech@gmail.com) Received: by mail-yw0-x234.google.com with SMTP id a10so99895602ywa.3 for ; Sun, 27 Nov 2016 12:17:14 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=mime-version:from:date:message-id:subject:to; bh=6xyN7d4cviGvY2tIDs4L0Ctgu3WJn0nawIKvSvLq5ho=; b=LZWoIZh6ASUTTQBTKD+Mhcij0kWHkFgt1s+AIEo58ZibeEquoF4haZQUFy5ggpkCcJ 5UUvJLOkxwS4PWMjS/VCGRMHrxL+Tkrk0iaR3LlKkcjcaSu7XXMxYcTAjSSQ8xdK9oQG x/p066mIlmiFeUagQX+zOJliQtqieLmPbraaKI8tGuE1RdbLuc5IEe8yuWKZUcra/i6j WhBq2oMaDHTuUpikbFGXEREKDi0MdG244CoWKibFl3vMbly4dDEzKSPKDh4QOH7/bYYo SBsaRkjlnXxRlRPVwzZrlBGiFGMCNVoX/SpcLATonvbkJV41VplR7y4V17z0N5XRzOpE +XrQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20130820; h=x-gm-message-state:mime-version:from:date:message-id:subject:to; bh=6xyN7d4cviGvY2tIDs4L0Ctgu3WJn0nawIKvSvLq5ho=; b=koowLUXriG1BcXAxOf7owWLmwpxl61rXBhs4inSV1egMiF8787fZCzLppJ9rp7Di8t YKntgdzy2Ujrsvc3BBukdXDCOwh1RCNvTO/fnyCJE8uXrH/KOBRFPAa+MjvtXE/QECQg 3UvtKLzUpu3FGVY1vxVp0HNCkpsNMU3ZmHmZvNS1H+y+9siXk8EMjopeLYiQuXBZoz7p fvtE9TyTaMUj9kkxr0dcGiDulfp0+HsDsdlnL/hXORdEsJ/sSW5Yp3SmXU8KRgiilNPf mzcY0Y84pubtgtbU0opbXodbt5OIarYtefAk8Q9tOaQqdAB4C6cY6QkyXn9xdG1tiugK CWxQ== X-Gm-Message-State: AKaTC01dEnF0WmR2MesRaP3VHgBazzYgkueFQdxMN6cLREQB9aL8T8kCuxLC8+pyKCt5JcW+L8nua4ClsbSAvA== X-Received: by 10.13.227.3 with SMTP id m3mr21490094ywe.272.1480277833372; Sun, 27 Nov 2016 12:17:13 -0800 (PST) MIME-Version: 1.0 Received: by 10.37.201.197 with HTTP; Sun, 27 Nov 2016 12:17:13 -0800 (PST) From: David Cross Date: Sun, 27 Nov 2016 15:17:13 -0500 Message-ID: Subject: Re: FreeBSD 11 i386 disk deadlock (I think) (now with reproduction steps!) To: freebsd-hackers@freebsd.org Content-Type: text/plain; charset=UTF-8 X-Content-Filtered-By: Mailman/MimeDel 2.1.23 X-BeenThere: freebsd-hackers@freebsd.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: Technical Discussions relating to FreeBSD List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sun, 27 Nov 2016 20:17:14 -0000 So, narrowing this down, I think it has something to do with geli swap (since I can easily reproduce it with geli swap, but have yet to reproduce it without).. and I have a bit of a convoluted way almost anyone can reproduce it with bhyve. (Note, I haven't been able to get a crashdump, since apparently the VM system being locked up prevents that, but with watchdogd, I have been able to get into DDB) Anyway, my reproduction steps, I used the 11.0 Retail DVD, but I fully suspect the 11.0-RELEASE image will be fine to install an i386 image into bhyve; I install to vtbd disks (even though my 'real' case is to an ada device, that this can be repro-ed across such wide "hardware" really reduces the likelyhood of a device driver issue) After its installed, I start my VM with the following (dropping memory to the floor, well below my "real" machine, but the emulated machine is much faster and I suspsect this is a race condition somewhere), note the options to the virtio-blk device to pin it to "real" and not hit the host vmcache, again speed seems to be key here, and slowing things down makes it more likely to happen. bhyveload -m 64M -d /usr/bhyve/11.0.1-i386.img fbsd11-i386 bhyve -u -A -c 1 -H -m 64M -C -s 0,hostbridge -s 1,lpc -s 2,virtio-net,tap0 -s 3,virtio-blk,/usr/bhyve/11.0.1-i386.img,nocache,direct -l com1,/dev/nmdm0A fbsd11-i386 At this point: Log into the VM cd /usr/src /usr/bin/make buildkernel For me this has hung 99% of the time at: objcopy --strip-debug kernel Once you've gotten here once, I have been able to just skip the rest of the compile, cd /usr/obj/usr/src/sys/GENERIC run that command directly and trigger the condition. What I have at this point is the following DDB ps list: db> ps pid ppid pgrp uid state wmesg wchan cmd 645 633 633 0 DV pfault 0xc1c4f6d8 watchdogd 641 621 641 0 D+ pfault 0xc1c4f6d8 objcopy 633 1 633 0 Ds ppwait 0xc37f9994 watchdogd 621 620 621 0 SW+ pause 0xc3cb03a8 csh 620 1 620 0 SWs+ wait 0xc3cb0688 login 619 1 619 0 Ss+ ttyin 0xc35d0470 getty 618 1 618 0 Ss+ ttyin 0xc35d0670 getty 617 1 617 0 Ss+ ttyin 0xc35d0870 getty 616 1 616 0 Ss+ ttyin 0xc35d0a70 getty 615 1 615 0 Ss+ ttyin 0xc35d0c70 getty 614 1 614 0 Ss+ ttyin 0xc35d0e70 getty 613 1 613 0 Ss+ ttyin 0xc35d1c70 getty 612 1 612 0 Ss+ ttyin 0xc35d1a70 getty 567 1 567 0 Ss nanslp 0xc1bcd248 cron 563 1 563 25 SWs pause 0xc3a9ba30 sendmail 560 1 560 0 Ss select 0xc37e1124 sendmail 557 1 557 0 Ss select 0xc3728ca4 sshd 363 1 363 0 Ss select 0xc37e0f24 syslogd 290 1 290 0 Ds pfault 0xc1c4f6d8 devd 50 0 0 0 DL vmwait 0xc1c4f6d8 [g_eli[0] vtbd0p3] 21 0 0 0 DL vlruwt 0xc37f7688 [vnlru] 20 0 0 0 DL syncer 0xc1bee444 [syncer] 19 0 0 0 DL - 0xc1bede7c [bufspacedaemon] 18 0 0 0 DL (threaded) [bufdaemon] 100046 D psleep 0xc1bed284 [bufdaemon] 100056 D sdflush 0xc398f484 [/ worker] 100060 D sdflush 0xc398f084 [/usr worker] 100061 D sdflush 0xc398ec84 [/var worker] 17 0 0 0 DL pgzero 0xc1bf3a28 [pagezero] 16 0 0 0 DL psleep 0xc1bf38a4 [vmdaemon] 15 0 0 0 DL (threaded) [pagedaemon] 100043 D wswbuf0 0xc1bf30d4 [pagedaemon] 100050 D umarcl 0xc1bf34a0 [uma] 14 0 0 0 DL - 0xc1becd1c [soaiod4] 9 0 0 0 DL - 0xc1becd1c [soaiod3] 8 0 0 0 DL - 0xc1becd1c [soaiod2] 7 0 0 0 DL - 0xc1becd1c [soaiod1] 6 0 0 0 DL - 0xc1aa6eec [rand_harvestq] 5 0 0 0 DL waiting_ 0xc1c4c540 [sctp_iterator] 4 0 0 0 DL (threaded) [cam] 100019 D - 0xc19f2f80 [doneq0] 100038 D - 0xc19f2e2c [scanner] 3 0 0 0 DL crypto_r 0xc1bf27d8 [crypto returns] 2 0 0 0 DL crypto_w 0xc1bf2718 [crypto] 13 0 0 0 DL (threaded) [geom] 100013 D - 0xc1c47660 [g_event] 100014 D - 0xc1c47664 [g_up] 100015 D - 0xc1c47668 [g_down] 12 0 0 0 WL (threaded) [intr] 100004 I [swi4: clock (0)] 100005 I [swi3: vm] 100006 I [swi1: netisr 0] 100007 I [swi6: Giant taskq] 100010 I [swi5: fast taskq] 100012 I [swi6: task queue] 100023 I [irq264: virtio_pci0] 100024 I [irq265: virtio_pci0] 100025 I [irq266: virtio_pci0] 100028 I [irq267: virtio_pci1] 100029 I [irq268: virtio_pci1] 100030 I [irq1: atkbd0] 100031 I [irq12: psm0] 100032 I [swi0: uart uart] 100033 I [irq14: ata0] 100034 I [irq15: ata1] 11 0 0 0 RL CPU 0 [idle: cpu0] 1 0 1 0 SLs wait 0xc35ee9cc [init] 10 0 0 0 DL audit_wo 0xc1c4f430 [audit] 0 0 0 0 DLs (threaded) [kernel] 100000 D vmwait 0xc1c4f6d8 [swapper] 100008 D - 0xc35f4f00 [aiod_kick taskq] 100009 D - 0xc35f4e80 [thread taskq] 100011 D - 0xc35f4d00 [kqueue_ctx taskq] 100016 D - 0xc35f4380 [firmware taskq] 100020 D - 0xc35f3680 [acpi_task_0] 100021 D - 0xc35f3680 [acpi_task_1] 100022 D - 0xc35f3680 [acpi_task_2] 100026 D - 0xc35f6d00 [vtnet0 rxq 0] 100027 D - 0xc35f6c80 [vtnet0 txq 0] 100037 D - 0xc35f3a00 [CAM taskq] I note that the swapper and that geli are both in vmwait, and a bunch of other processes are in pfault, and the "crypto" drivers are in disk wait?? I am not sure what else to do here. I also started bhyve with -C, so I can control-\ and get a process dump that includes guestvm.. but i am likewise unsure where else to proceed. I am happy to provide core dumps/etc to people, this is a dedicated VM with nothing in it. From owner-freebsd-hackers@freebsd.org Sun Nov 27 21:33:43 2016 Return-Path: Delivered-To: freebsd-hackers@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 0AF7AC59299 for ; Sun, 27 Nov 2016 21:33:43 +0000 (UTC) (envelope-from m.e.sanliturk@gmail.com) Received: from mail-yw0-x22c.google.com (mail-yw0-x22c.google.com [IPv6:2607:f8b0:4002:c05::22c]) (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 B856D2492; Sun, 27 Nov 2016 21:33:42 +0000 (UTC) (envelope-from m.e.sanliturk@gmail.com) Received: by mail-yw0-x22c.google.com with SMTP id i145so101146515ywg.2; Sun, 27 Nov 2016 13:33:42 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=mime-version:in-reply-to:references:from:date:message-id:subject:to :cc; bh=zGmkeISk8EfnG3h3aYUNUXFMTbtkVyvp04luX+8bCmM=; b=iUwTzILveMRqL5C2KTcrKnnnbq6QbNVyCZ1c20KQ98FU9kQ+nCo8j7MOORoiDvrrwY iQ45NVqUu2AB7Wx4bx0VOAiuc546RCrY2eGtSK3h8WsR6EN53GY7+MIGywnjuwkaoSEF nq4s24FkWXTmStUt6Pgm2LFb9IAIuA70enFwTz0OlY0mNKTYvAz81ilgTt5ZNo2yg0Dc z2wEQ41MBTwupWwT2pHw/b/QmN/5II2+L3rl6Sir1HBqyCuVvVHvhcJTdvRJYMQF9zah i8byVxBAdM53/F32fqqd3oCK3u5PH672kXzpUnEsZFzeKFKcRzWcaeEslIdWwDSYeMm9 QgRg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20130820; h=x-gm-message-state:mime-version:in-reply-to:references:from:date :message-id:subject:to:cc; bh=zGmkeISk8EfnG3h3aYUNUXFMTbtkVyvp04luX+8bCmM=; b=XyF7DNKRMez++hdl8E0S1jPV5tDXUHqjRauNueQhc8l3WcRp5idXJXZyuPoc/RtTxR OXLL5VcZoYla9D5a2scpDLbzixCPIfslA5rucqV3FJ7w0lvGRfWxYnSAPGnNUMvfoqyz 2yxyzfwT0U5wxV3x1kNH7fqW2YFjKVynEOXYRTV9xd0DdMr9xEsZ2Z3PlDvIJNP9GIDV zZ49295/hfNcIYNdrxg40wxIQASvvubWfWnERR5EY5VpNRUuc4XazoMltE99pSDnPTBV 7fzcbNEX3oAs/JzzKVjqXo95CfDj80MhvaiTHtUs5qpaT/Y3Ez4e35jGr3Q/yAadx2VH 86Yg== X-Gm-Message-State: AKaTC02mahAVO6/28MFZrkdnikZVGYDboDx6Zc61fIQGsgRpLRggaKpc6XcsWQ6bj4DMwvqKtVQXkhEPqzyODg== X-Received: by 10.13.202.196 with SMTP id m187mr22127468ywd.11.1480282421607; Sun, 27 Nov 2016 13:33:41 -0800 (PST) MIME-Version: 1.0 Received: by 10.37.170.67 with HTTP; Sun, 27 Nov 2016 13:33:41 -0800 (PST) In-Reply-To: <8b0bd8e7-a77d-85d8-18e7-e1e33fed78f5@freebsd.org> References: <0bfb49b0-5d24-2766-6982-b4e49b0d5e81@selasky.org> <8b0bd8e7-a77d-85d8-18e7-e1e33fed78f5@freebsd.org> From: Mehmet Erol Sanliturk Date: Sun, 27 Nov 2016 13:33:41 -0800 Message-ID: Subject: Re: qsort switching to insertsort To: Alfred Perlstein Cc: Tristan Verniquet , =?UTF-8?Q?Arne_Dag_Fidjest=C3=B8l?= , Hans Petter Selasky , freebsd hackers Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: quoted-printable X-Content-Filtered-By: Mailman/MimeDel 2.1.23 X-BeenThere: freebsd-hackers@freebsd.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: Technical Discussions relating to FreeBSD List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sun, 27 Nov 2016 21:33:43 -0000 On Sat, Nov 26, 2016 at 10:40 PM, Alfred Perlstein wrote: > A couple notes: > > 1) It's interesting to me that it's based on a simple heuristic as oppose= d > to also checking the depth of the recursion within the qsort itself. > > Aim is not to enter into quick sort at the beginning . Number of sorted pairs can be counted on ( input or generation ) of data to sort . Based on this count , the sorting method may be selected as either quick or an alternative sort which will be able to sort the data deterministically . It is possible to implement a robust quick sort if ( time and/or resources ) are sufficient to use . When there is not sufficient resources , a simple method is better than a more optimized ( which will not be attainable at present state ) . > 2) Wondering if upon detection of this situation it might even be faster > to perform some randomization (shuffle) of the data and then retry. > > Instead of ( entering into quick sort , fail , and , search a way to recover ) , I would prefer to use another method will will produce a desired result by using more time . Sometimes , it is very difficult to generate a "universal" algorithm that will be able to cure "all" difficulties . > 3) Wondering if there could be a way to return an error and indicate the > data is unsorted if the corner case is hit allowing the caller to make a > choice at that point. Obviously the API would need to be changed. > > Problem is lying in the complexity of writing a very robust quick sort algorithm . There are many ( at least parts in ) books , papers on these subject . There is also a cost of obtaining / reading / utilizing such resources . When the available resource is only a "data structures" book , the cheapest solution may be the above described method to sort the data without entering into error generation and recover from it . > I haven't thought too hard on this. > > One thing to keep in mind: Using qsort in a codepath has "deadlines" or > other deterministic needs is not going to work out well. It's better to > use a sort with a known complexity with an upper bound than something tha= t > can be defeated by a pathological input data set. > > -Alfred > > > On 11/26/16 8:17 PM, Tristan Verniquet wrote: > >> From: Mehmet Erol Sanliturk >> Sent: Sunday, 27 November 2016 5:51 AM >> To: Arne Dag Fidjest=C3=B8l >> Cc: Tristan Verniquet; Hans Petter Selasky; freebsd hackers >> Subject: Re: qsort switching to insertsort >> >> >> >> On Sat, Nov 26, 2016 at 9:14 AM, Arne Dag Fidjest=C3=B8l >> wrote: >> >> On 26 Nov 2016, at 15:35, Mehmet Erol Sanliturk >>> wrote: >>> >>> In quick sort , it is necessary to check worst case and switch to anoth= er >>> sort method if it is detected . >>> When this is not done , end result is stack overflow , etc . , but not >>> success . >>> Therefore , it is not possible to eliminate an alternative sort method = . >>> >> I you sort the smaller partition recursively first, and then sort the >> larger partition either by tail recursion or iteration, you will only >> consume O(log n) of stack, so stack overflow needn=E2=80=99t be an issue= , >> regardless of the input. >> >> -adf >> >> >> >> Important problem is caused by almost sorted values . Myself , I am >> counting the sorted elements first , if they exceed a large percentage o= f >> number of all elements , then I am switching to an alternative sort , >> otherwise a quick sort is used . This is for a simple application . >> >> In an operating system , more complex algorithms may be more useful . >> >> >> Mehmet Erol Sanliturk >> >> --- >> >> It can still trigger with completely unsorted data in the top and bottom >> half, as long as it chooses the middle value for the pivot. The main rea= son >> nearly sorted data is vulnerable is that it is more likely to match thes= e >> conditions, and more likely to happen in real life situations. >> >> But this is why i don't really consider it an "edge" case, there would b= e >> a whole class of situations (like the one we had) where it would be very >> likely to trigger with very bad side effects. >> >> Maybe, does anyone continue to use FreeBSD qsort while being aware of >> this implementation detail? Under what conditions/assurances? >> >> Does anyone use FreeBSDs qsort because of this feature? >> >> Tristan >> ________________________________ >> From: Mehmet Erol Sanliturk >> Sent: Sunday, 27 November 2016 5:51:31 AM >> To: Arne Dag Fidjest=C3=B8l >> Cc: Tristan Verniquet; Hans Petter Selasky; freebsd hackers >> Subject: Re: qsort switching to insertsort >> >> >> >> On Sat, Nov 26, 2016 at 9:14 AM, Arne Dag Fidjest=C3=B8l > > wrote: >> >> On 26 Nov 2016, at 15:35, Mehmet Erol Sanliturk >> > wrote: >>> >>> In quick sort , it is necessary to check worst case and switch to anoth= er >>> sort method if it is detected . >>> When this is not done , end result is stack overflow , etc . , but not >>> success . >>> Therefore , it is not possible to eliminate an alternative sort method = . >>> >> I you sort the smaller partition recursively first, and then sort the >> larger partition either by tail recursion or iteration, you will only >> consume O(log n) of stack, so stack overflow needn=E2=80=99t be an issue= , >> regardless of the input. >> >> -adf >> >> >> >> Important problem is caused by almost sorted values . Myself , I am >> counting the sorted elements first , if they exceed a large percentage o= f >> number of all elements , then I am switching to an alternative sort , >> otherwise a quick sort is used . This is for a simple application . >> >> In an operating system , more complex algorithms may be more useful . >> >> >> Mehmet Erol Sanliturk >> >> >> >> _______________________________________________ >> >> Mehmet Erol Sanliturk From owner-freebsd-hackers@freebsd.org Mon Nov 28 04:19:26 2016 Return-Path: Delivered-To: freebsd-hackers@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 4C96BC5981C for ; Mon, 28 Nov 2016 04:19:26 +0000 (UTC) (envelope-from markjdb@gmail.com) Received: from mail-io0-x22e.google.com (mail-io0-x22e.google.com [IPv6:2607:f8b0:4001:c06::22e]) (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 08DD7959 for ; Mon, 28 Nov 2016 04:19:26 +0000 (UTC) (envelope-from markjdb@gmail.com) Received: by mail-io0-x22e.google.com with SMTP id a124so210412187ioe.2 for ; Sun, 27 Nov 2016 20:19:26 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=sender:date:from:to:cc:subject:message-id:references:mime-version :content-disposition:in-reply-to:user-agent; bh=CEpghk8GCP55VChF1aTeHJiAyO3qCgA1nD5ZAVit9hk=; b=SRye1B8qhoSTdaHHpHEiYWZTRbPN+tp8XsBHCW668TxZ5x5zSKMU52kwPWFgIBOFJy oiYwltFg2OcxW4XIst0f7laLiiq3432fQlwu1YyqKFLpqvPIC5gJMTy8JOr1nnmLMjHH xTdYSkD1lJiY9bHIX6mpI5ZYANoNCllrSDktti/ondYr+gXvoLOdkRdb0N11LPSY3IhD ZCNWApq2aTilTQsozj6WcdVqS2aD9D3g26juhjoDJhrtZ1eJ6pa0Rr3qmoUe3QEe2K/O Qe6konDMiMEike3AI/a1D9galW82ust5H8kJTJ5UIx+PVZnJJpgnxJT9dOyoQ+oMPrUH enhQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20130820; h=x-gm-message-state:sender:date:from:to:cc:subject:message-id :references:mime-version:content-disposition:in-reply-to:user-agent; bh=CEpghk8GCP55VChF1aTeHJiAyO3qCgA1nD5ZAVit9hk=; b=BZ1lGlt9fwW1bTB3X2KUIABbM1Crt8cN30f49EQqo9fW2ht49XnGxUEZNpB5waV8hK jqfk/rCSIQC0YbPU31vqYJ8+CB6YwxJiF2YwDegr8mtoeJXch6gYoi8PEfT3I84mr7RN biwLPxlLUPVXfX581p4up0mTDMF1dmS9JKt0mq1jUKz6jfINeSSPkvF9Hjac5XPSxHrr Wxpg3uOE8rylIIlk1nbO0fVj6AlKH+ObBa2cqxBaveSeuuF7A/sN/L3N7n0a36N8oOu1 d3T3DN7lCwi5fvIXD+yr42d1MLdijZ01oRGeldzeTFxfXWndG4UkE1Q/Zlxfp7drSEnr LQKw== X-Gm-Message-State: AKaTC00soDW0is2/pK9v69a09k1bdDjCD5bCrlTX/sPs0oIT86Tb/ghFHDlb7ZW/MZCQEA== X-Received: by 10.107.135.219 with SMTP id r88mr16415189ioi.224.1480306765396; Sun, 27 Nov 2016 20:19:25 -0800 (PST) Received: from charmander (toroon0812w-lp140-03-67-70-148-219.dsl.bell.ca. [67.70.148.219]) by smtp.gmail.com with ESMTPSA id v74sm19335937ioi.2.2016.11.27.20.19.24 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Sun, 27 Nov 2016 20:19:24 -0800 (PST) Sender: Mark Johnston Date: Sun, 27 Nov 2016 20:18:47 -0800 From: Mark Johnston To: David Cross Cc: freebsd-hackers@freebsd.org Subject: Re: FreeBSD 11 i386 disk deadlock (I think) (now with reproduction steps!) Message-ID: <20161128041847.GA65249@charmander> References: MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: User-Agent: Mutt/1.7.1 (2016-10-04) X-BeenThere: freebsd-hackers@freebsd.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: Technical Discussions relating to FreeBSD List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 28 Nov 2016 04:19:26 -0000 On Sun, Nov 27, 2016 at 03:17:13PM -0500, David Cross wrote: > So, narrowing this down, I think it has something to do with geli swap > (since I can easily reproduce it with geli swap, but have yet to reproduce > it without).. and I have a bit of a convoluted way almost anyone can > reproduce it with bhyve. (Note, I haven't been able to get a crashdump, > since apparently the VM system being locked up prevents that, but with > watchdogd, I have been able to get into DDB) > > Anyway, my reproduction steps, I used the 11.0 Retail DVD, but I fully > suspect the 11.0-RELEASE image will be fine to install an i386 image into > bhyve; I install to vtbd disks (even though my 'real' case is to an ada > device, that this can be repro-ed across such wide "hardware" really > reduces the likelyhood of a device driver issue) > > After its installed, I start my VM with the following (dropping memory to > the floor, well below my "real" machine, but the emulated machine is much > faster and I suspsect this is a race condition somewhere), note the options > to the virtio-blk device to pin it to "real" and not hit the host vmcache, > again speed seems to be key here, and slowing things down makes it more > likely to happen. > > bhyveload -m 64M -d /usr/bhyve/11.0.1-i386.img fbsd11-i386 > bhyve -u -A -c 1 -H -m 64M -C -s 0,hostbridge -s 1,lpc -s 2,virtio-net,tap0 > -s 3,virtio-blk,/usr/bhyve/11.0.1-i386.img,nocache,direct -l > com1,/dev/nmdm0A fbsd11-i386 > > At this point: > Log into the VM > cd /usr/src > /usr/bin/make buildkernel > > > For me this has hung 99% of the time at: > objcopy --strip-debug kernel > > Once you've gotten here once, I have been able to just skip the rest of the > compile, cd /usr/obj/usr/src/sys/GENERIC run that command directly and > trigger the condition. > > What I have at this point is the following DDB ps list: > > db> ps > pid ppid pgrp uid state wmesg wchan cmd > ... > 50 0 0 0 DL vmwait 0xc1c4f6d8 [g_eli[0] vtbd0p3] > ... > 100043 D wswbuf0 0xc1bf30d4 [pagedaemon] > ... > > I note that the swapper and that geli are both in vmwait, and a bunch of > other processes are in pfault, and the "crypto" drivers are in disk wait?? This is a low memory deadlock: the pagedaemon is attempting to reclaim memory by freeing pages from the inactive queue, and here is waiting for the swap pager to finish writing out a page. However, the GELI thread is blocked waiting for the pagedaemon to free up some pages. Some recent work that's gone into HEAD ought to address this scenario. In particular, with r308474 swapping is performed by a separate thread, so even if that thread blocks waiting for the GELI thread, the pagedaemon is able to continue freeing clean pages or at least kill memory-hogging processes. Could you try your scenario in a VM running a HEAD kernel? From owner-freebsd-hackers@freebsd.org Mon Nov 28 12:00:53 2016 Return-Path: Delivered-To: freebsd-hackers@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 E755CC59D27 for ; Mon, 28 Nov 2016 12:00:53 +0000 (UTC) (envelope-from kostikbel@gmail.com) Received: from kib.kiev.ua (kib.kiev.ua [IPv6:2001:470:d5e7:1::1]) (using TLSv1 with cipher DHE-RSA-CAMELLIA256-SHA (256/256 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id 6FE21125C; Mon, 28 Nov 2016 12:00:53 +0000 (UTC) (envelope-from kostikbel@gmail.com) Received: from tom.home (kib@localhost [127.0.0.1]) by kib.kiev.ua (8.15.2/8.15.2) with ESMTPS id uASC0lXc098753 (version=TLSv1 cipher=DHE-RSA-CAMELLIA256-SHA bits=256 verify=NO); Mon, 28 Nov 2016 14:00:47 +0200 (EET) (envelope-from kostikbel@gmail.com) DKIM-Filter: OpenDKIM Filter v2.10.3 kib.kiev.ua uASC0lXc098753 Received: (from kostik@localhost) by tom.home (8.15.2/8.15.2/Submit) id uASC0lqI098752; Mon, 28 Nov 2016 14:00:47 +0200 (EET) (envelope-from kostikbel@gmail.com) X-Authentication-Warning: tom.home: kostik set sender to kostikbel@gmail.com using -f Date: Mon, 28 Nov 2016 14:00:47 +0200 From: Konstantin Belousov To: Mark Johnston Cc: David Cross , freebsd-hackers@freebsd.org Subject: Re: FreeBSD 11 i386 disk deadlock (I think) (now with reproduction steps!) Message-ID: <20161128120046.GP54029@kib.kiev.ua> References: <20161128041847.GA65249@charmander> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20161128041847.GA65249@charmander> User-Agent: Mutt/1.7.1 (2016-10-04) X-Spam-Status: No, score=-2.0 required=5.0 tests=ALL_TRUSTED,BAYES_00, DKIM_ADSP_CUSTOM_MED,FREEMAIL_FROM,NML_ADSP_CUSTOM_MED autolearn=no autolearn_force=no version=3.4.1 X-Spam-Checker-Version: SpamAssassin 3.4.1 (2015-04-28) on tom.home X-BeenThere: freebsd-hackers@freebsd.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: Technical Discussions relating to FreeBSD List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 28 Nov 2016 12:00:54 -0000 On Sun, Nov 27, 2016 at 08:18:47PM -0800, Mark Johnston wrote: > On Sun, Nov 27, 2016 at 03:17:13PM -0500, David Cross wrote: > > So, narrowing this down, I think it has something to do with geli swap > > (since I can easily reproduce it with geli swap, but have yet to reproduce > > it without).. and I have a bit of a convoluted way almost anyone can > > reproduce it with bhyve. (Note, I haven't been able to get a crashdump, > > since apparently the VM system being locked up prevents that, but with > > watchdogd, I have been able to get into DDB) > > > > Anyway, my reproduction steps, I used the 11.0 Retail DVD, but I fully > > suspect the 11.0-RELEASE image will be fine to install an i386 image into > > bhyve; I install to vtbd disks (even though my 'real' case is to an ada > > device, that this can be repro-ed across such wide "hardware" really > > reduces the likelyhood of a device driver issue) > > > > After its installed, I start my VM with the following (dropping memory to > > the floor, well below my "real" machine, but the emulated machine is much > > faster and I suspsect this is a race condition somewhere), note the options > > to the virtio-blk device to pin it to "real" and not hit the host vmcache, > > again speed seems to be key here, and slowing things down makes it more > > likely to happen. > > > > bhyveload -m 64M -d /usr/bhyve/11.0.1-i386.img fbsd11-i386 > > bhyve -u -A -c 1 -H -m 64M -C -s 0,hostbridge -s 1,lpc -s 2,virtio-net,tap0 > > -s 3,virtio-blk,/usr/bhyve/11.0.1-i386.img,nocache,direct -l > > com1,/dev/nmdm0A fbsd11-i386 > > > > At this point: > > Log into the VM > > cd /usr/src > > /usr/bin/make buildkernel > > > > > > For me this has hung 99% of the time at: > > objcopy --strip-debug kernel > > > > Once you've gotten here once, I have been able to just skip the rest of the > > compile, cd /usr/obj/usr/src/sys/GENERIC run that command directly and > > trigger the condition. > > > > What I have at this point is the following DDB ps list: > > > > db> ps > > pid ppid pgrp uid state wmesg wchan cmd > > ... > > 50 0 0 0 DL vmwait 0xc1c4f6d8 [g_eli[0] vtbd0p3] > > ... > > 100043 D wswbuf0 0xc1bf30d4 [pagedaemon] > > ... > > > > I note that the swapper and that geli are both in vmwait, and a bunch of > > other processes are in pfault, and the "crypto" drivers are in disk wait?? > > This is a low memory deadlock: the pagedaemon is attempting to reclaim > memory by freeing pages from the inactive queue, and here is waiting for > the swap pager to finish writing out a page. However, the GELI thread is > blocked waiting for the pagedaemon to free up some pages. > > Some recent work that's gone into HEAD ought to address this scenario. > In particular, with r308474 swapping is performed by a separate thread, > so even if that thread blocks waiting for the GELI thread, the > pagedaemon is able to continue freeing clean pages or at least kill > memory-hogging processes. Could you try your scenario in a VM running a > HEAD kernel? Neither geli nor zfs vols can be used as swap, exactly because they allocate memory on the write path. In fact, zfs has troubles with the normal pageout of files as well, for this same reason. It is very easy to trigger situation when everything is dirty, and even worse, it is possible to have all dirty pages belong to one vnode. The laundry work is great, but it cannot completely solve the situation where free or clean page producer allocates memory. From owner-freebsd-hackers@freebsd.org Mon Nov 28 12:35:36 2016 Return-Path: Delivered-To: freebsd-hackers@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 DB61FC582DF for ; Mon, 28 Nov 2016 12:35:36 +0000 (UTC) (envelope-from stesin@gmail.com) Received: from mail-lf0-x236.google.com (mail-lf0-x236.google.com [IPv6:2a00:1450:4010:c07::236]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (Client CN "smtp.gmail.com", Issuer "Google Internet Authority G2" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 622751831; Mon, 28 Nov 2016 12:35:36 +0000 (UTC) (envelope-from stesin@gmail.com) Received: by mail-lf0-x236.google.com with SMTP id t196so95200688lff.3; Mon, 28 Nov 2016 04:35:36 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=mime-version:in-reply-to:references:from:date:message-id:subject:to :cc; bh=7/pmw/dOmFHlMetRKbjdW+nkyYjtqeEHZr83ehutl34=; b=eQtW757U/HRR+2Tu8hzz0fACEG7tBiJF/xdBnvt3GHaIZON9p1FE2vn8XS+FrIKyNM ucPmssSemExEM66KgeeFMhGqQKY+h2IH0Y02jtNPvoYJ2J5QFdMrk4KPXdqTiLja5hxr jxWwxPsaPdkVg0QVppc70RJ1ca7f7ZylXHNPc8wV4JUZ+yz4CkpixYVfg7xYzjzNDt59 KscXyphhiNiRTHhexMGNBjb/u4sKcQC6Fc4OcSAYiYzgIyoZUiT9jyz38SsSAK4MAGVg /MiZjtbPfNtX9CGWjJej8VUZt9NkzAQPoyU92l3+g/r/xQFtuUCdc2GSqwycm4+UgEdn 4rYg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20130820; h=x-gm-message-state:mime-version:in-reply-to:references:from:date :message-id:subject:to:cc; bh=7/pmw/dOmFHlMetRKbjdW+nkyYjtqeEHZr83ehutl34=; b=QGf1UA60OaeeaPYIZMrW6ArM8z96ztqkbHd8o/QmnbBp4q1PT3bFlCUFi2VMt7Bfx1 F3xck2OHQ2Uw0itMY+1/NbI2qZ6/BE8iPyrgGaOPcFmB2zVzBHrgzvaC5J8QzKOjd1ty MGWDcvE82XKzMYpwztLSHjPKNUCBc7U6wjo5nV28+77krMCh+KWhssvscrDZaGqqwclC yrYzTAWnZ6LSulgvc+AvnoW5g82JGU06QYi+/tu3BSF5orS9BZ7iZNiWX2mGyim7Rl6x XY7IWIhMDYvEh2v/3eQ3LolG3C/BAt+LrnFafxEqCDXjXJzKzAVwXqDraqFvdiBcKnxI Fvaw== X-Gm-Message-State: AKaTC00tCfGFhKu8QqrxYOfW9trDvQJ/qKQXxLUKagIEgx4aRUhS5ovWeYQ4j7MLnkdS2F/WzAj1BYP5AlUlXg== X-Received: by 10.25.35.6 with SMTP id j6mr7634746lfj.137.1480336534382; Mon, 28 Nov 2016 04:35:34 -0800 (PST) MIME-Version: 1.0 Received: by 10.25.125.67 with HTTP; Mon, 28 Nov 2016 04:35:33 -0800 (PST) In-Reply-To: <20161128120046.GP54029@kib.kiev.ua> References: <20161128041847.GA65249@charmander> <20161128120046.GP54029@kib.kiev.ua> From: Andrii Stesin Date: Mon, 28 Nov 2016 14:35:33 +0200 Message-ID: Subject: Re: FreeBSD 11 i386 disk deadlock (I think) (now with reproduction steps!) To: Konstantin Belousov Cc: Mark Johnston , freebsd-hackers@freebsd.org, David Cross Content-Type: text/plain; charset=UTF-8 X-BeenThere: freebsd-hackers@freebsd.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: Technical Discussions relating to FreeBSD List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 28 Nov 2016 12:35:37 -0000 On Mon, Nov 28, 2016 at 2:00 PM, Konstantin Belousov wrote: > Neither geli nor zfs vols can be used as swap, So, when FreeNAS starts building ZFS volume from vdevs which are physical drives and it asks "how much space to leave for swap on each drive", it really allocates some separate physical swap partition on the drive which has nothing to do with ZFS at all? WBR, Andrii From owner-freebsd-hackers@freebsd.org Mon Nov 28 12:40:47 2016 Return-Path: Delivered-To: freebsd-hackers@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 2457EC58478 for ; Mon, 28 Nov 2016 12:40:47 +0000 (UTC) (envelope-from freebsd-listen@fabiankeil.de) Received: from smtprelay01.ispgateway.de (smtprelay01.ispgateway.de [80.67.31.39]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id E083B1A11 for ; Mon, 28 Nov 2016 12:40:46 +0000 (UTC) (envelope-from freebsd-listen@fabiankeil.de) Received: from [78.35.140.237] (helo=fabiankeil.de) by smtprelay01.ispgateway.de with esmtpsa (TLSv1.2:AES256-GCM-SHA384:256) (Exim 4.84) (envelope-from ) id 1cBLEP-00024O-7Z; Mon, 28 Nov 2016 13:40:25 +0100 Date: Mon, 28 Nov 2016 13:39:36 +0100 From: Fabian Keil To: David Cross Cc: freebsd-hackers@freebsd.org Subject: Re: FreeBSD 11 i386 disk deadlock (I think) (now with reproduction steps!) Message-ID: <20161128133936.7e815c9a@fabiankeil.de> In-Reply-To: References: MIME-Version: 1.0 Content-Type: multipart/signed; micalg=pgp-sha1; boundary="Sig_/xYHUV3eEhaeltR=epYLPg=A"; protocol="application/pgp-signature" X-Df-Sender: Nzc1MDY3 X-BeenThere: freebsd-hackers@freebsd.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: Technical Discussions relating to FreeBSD List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 28 Nov 2016 12:40:47 -0000 --Sig_/xYHUV3eEhaeltR=epYLPg=A Content-Type: text/plain; charset=US-ASCII Content-Transfer-Encoding: quoted-printable David Cross wrote: > So, narrowing this down, I think it has something to do with geli swap > (since I can easily reproduce it with geli swap, but have yet to > reproduce it without).. and I have a bit of a convoluted way almost > anyone can reproduce it with bhyve. (Note, I haven't been able to get a > crashdump, since apparently the VM system being locked up prevents that, > but with watchdogd, I have been able to get into DDB) Sounds familiar: https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=3D209759 Fabian --Sig_/xYHUV3eEhaeltR=epYLPg=A Content-Type: application/pgp-signature Content-Description: OpenPGP digital signature -----BEGIN PGP SIGNATURE----- Version: GnuPG v2 iEYEARECAAYFAlg8JYkACgkQBYqIVf93VJ3tRACgrjWcU4a28tPYulFZUosOZNV8 NZsAoKn+gvbCEbOGPwyZ/Jh48YLh57GQ =rpjT -----END PGP SIGNATURE----- --Sig_/xYHUV3eEhaeltR=epYLPg=A-- From owner-freebsd-hackers@freebsd.org Mon Nov 28 12:47:27 2016 Return-Path: Delivered-To: freebsd-hackers@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 26CC2C587EB for ; Mon, 28 Nov 2016 12:47:27 +0000 (UTC) (envelope-from dcrosstech@gmail.com) Received: from mail-yw0-x22f.google.com (mail-yw0-x22f.google.com [IPv6:2607:f8b0:4002:c05::22f]) (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 BD5001F89; Mon, 28 Nov 2016 12:47:26 +0000 (UTC) (envelope-from dcrosstech@gmail.com) Received: by mail-yw0-x22f.google.com with SMTP id i145so114496451ywg.2; Mon, 28 Nov 2016 04:47:26 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=mime-version:in-reply-to:references:from:date:message-id:subject:to :cc; bh=Sf2SEwRf2WlQwbXHvB6UEMoeDd0EdtaiMITJdCLwr7A=; b=pABhN8vZM+8aVJdsGlebjnOHwQbuSAGNIMexE2VIcWkn/RLUzE50A7AAFPx0FoE+DW KYfAbTR9DiVWz2Q34273F99Lcp26XUn5j+FM/gDRM6rzY+B37N0J9V2jDXPp2MP22f+B 007lfz9PR6t+iXgDuDhwv+QG4qimBPivp5yqSvS2UPgV8PJmJEHgL8aXQtVot7X0OExa SuDEQx3aqnAglyGeVaMGXKbHe5oD1d2KQgrCYUkyPfr+xA9cjmb42OmC/fwUgvAsk/Rj gkn/Tsu376JO8SD/h2xZmrmMs7JgFzvnPSRiHMDUBNyfrXnGxtnfnoNWqZRFIPXv6H1s b7ow== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20130820; h=x-gm-message-state:mime-version:in-reply-to:references:from:date :message-id:subject:to:cc; bh=Sf2SEwRf2WlQwbXHvB6UEMoeDd0EdtaiMITJdCLwr7A=; b=cxk0LZQBftlqTzzrfReoWNmTgMHW5wLKvJn0r7qW+0CPDe3Y73zhGOqn6m5ek2wf0L +DgHM+IbsX2GELFo17OwdlqoXIxOHze09bGKiDhHkVY5lTqbzYQ0DUNpIaDol94qcFGO S1Ii80ICWdzmTIR3oIvzjQUNBJ3lzxrWeY7YTINM9Ra+v+qsxDJA37nX8DHhYfnISyba avyhcB03vhhJGpgJjrM8e89QZXocfh2QlZs/hfiY6OWcPJO64BG7UORJG6utkiXiMhBf jrkk1/2NtwX1YlTbOk8NC7fGSvCTBO4VWMm0DIUow4ih+De3Nx1/7Yhckia7A3PSPWgs BGew== X-Gm-Message-State: AKaTC008FnFWurH+duMA/slqNmBtUUZ+3ZIpc1hwRIAgsCnAI/ANOGayReW+KgBkOCm7IDg6dajBEKfG7VDd4w== X-Received: by 10.129.89.7 with SMTP id n7mr370433ywb.239.1480337245942; Mon, 28 Nov 2016 04:47:25 -0800 (PST) MIME-Version: 1.0 Received: by 10.37.201.197 with HTTP; Mon, 28 Nov 2016 04:47:25 -0800 (PST) In-Reply-To: <20161128120046.GP54029@kib.kiev.ua> References: <20161128041847.GA65249@charmander> <20161128120046.GP54029@kib.kiev.ua> From: David Cross Date: Mon, 28 Nov 2016 07:47:25 -0500 Message-ID: Subject: Re: FreeBSD 11 i386 disk deadlock (I think) (now with reproduction steps!) To: Konstantin Belousov Cc: Mark Johnston , freebsd-hackers@freebsd.org Content-Type: text/plain; charset=UTF-8 X-Content-Filtered-By: Mailman/MimeDel 2.1.23 X-BeenThere: freebsd-hackers@freebsd.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: Technical Discussions relating to FreeBSD List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 28 Nov 2016 12:47:27 -0000 This is certainly new behavior, or a new manifestation. FreeBSD has supported encrypted swap as part of the base since _2004_ on gbde deviced r125388, on geli since 2005 r148765 (prior to 8.0), and I've been using it as such all this time. Recentlyish, 2013 (10.0) the functionality was regarded as so core to swapping it was moved into the C code of 'swapon' itself r252310 On Mon, Nov 28, 2016 at 7:00 AM, Konstantin Belousov wrote: > On Sun, Nov 27, 2016 at 08:18:47PM -0800, Mark Johnston wrote: > > On Sun, Nov 27, 2016 at 03:17:13PM -0500, David Cross wrote: > > > So, narrowing this down, I think it has something to do with geli swap > > > (since I can easily reproduce it with geli swap, but have yet to > reproduce > > > it without).. and I have a bit of a convoluted way almost anyone can > > > reproduce it with bhyve. (Note, I haven't been able to get a > crashdump, > > > since apparently the VM system being locked up prevents that, but with > > > watchdogd, I have been able to get into DDB) > > > > > > Anyway, my reproduction steps, I used the 11.0 Retail DVD, but I fully > > > suspect the 11.0-RELEASE image will be fine to install an i386 image > into > > > bhyve; I install to vtbd disks (even though my 'real' case is to an ada > > > device, that this can be repro-ed across such wide "hardware" really > > > reduces the likelyhood of a device driver issue) > > > > > > After its installed, I start my VM with the following (dropping memory > to > > > the floor, well below my "real" machine, but the emulated machine is > much > > > faster and I suspsect this is a race condition somewhere), note the > options > > > to the virtio-blk device to pin it to "real" and not hit the host > vmcache, > > > again speed seems to be key here, and slowing things down makes it more > > > likely to happen. > > > > > > bhyveload -m 64M -d /usr/bhyve/11.0.1-i386.img fbsd11-i386 > > > bhyve -u -A -c 1 -H -m 64M -C -s 0,hostbridge -s 1,lpc -s > 2,virtio-net,tap0 > > > -s 3,virtio-blk,/usr/bhyve/11.0.1-i386.img,nocache,direct -l > > > com1,/dev/nmdm0A fbsd11-i386 > > > > > > At this point: > > > Log into the VM > > > cd /usr/src > > > /usr/bin/make buildkernel > > > > > > > > > For me this has hung 99% of the time at: > > > objcopy --strip-debug kernel > > > > > > Once you've gotten here once, I have been able to just skip the rest > of the > > > compile, cd /usr/obj/usr/src/sys/GENERIC run that command directly and > > > trigger the condition. > > > > > > What I have at this point is the following DDB ps list: > > > > > > db> ps > > > pid ppid pgrp uid state wmesg wchan cmd > > > ... > > > 50 0 0 0 DL vmwait 0xc1c4f6d8 [g_eli[0] vtbd0p3] > > > ... > > > 100043 D wswbuf0 0xc1bf30d4 [pagedaemon] > > > ... > > > > > > I note that the swapper and that geli are both in vmwait, and a bunch > of > > > other processes are in pfault, and the "crypto" drivers are in disk > wait?? > > > > This is a low memory deadlock: the pagedaemon is attempting to reclaim > > memory by freeing pages from the inactive queue, and here is waiting for > > the swap pager to finish writing out a page. However, the GELI thread is > > blocked waiting for the pagedaemon to free up some pages. > > > > Some recent work that's gone into HEAD ought to address this scenario. > > In particular, with r308474 swapping is performed by a separate thread, > > so even if that thread blocks waiting for the GELI thread, the > > pagedaemon is able to continue freeing clean pages or at least kill > > memory-hogging processes. Could you try your scenario in a VM running a > > HEAD kernel? > > Neither geli nor zfs vols can be used as swap, exactly because they > allocate memory on the write path. In fact, zfs has troubles with the > normal pageout of files as well, for this same reason. > > It is very easy to trigger situation when everything is dirty, and even > worse, it is possible to have all dirty pages belong to one vnode. The > laundry work is great, but it cannot completely solve the situation > where free or clean page producer allocates memory. > From owner-freebsd-hackers@freebsd.org Mon Nov 28 12:49:35 2016 Return-Path: Delivered-To: freebsd-hackers@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 DDD50C58931 for ; Mon, 28 Nov 2016 12:49:35 +0000 (UTC) (envelope-from dcrosstech@gmail.com) Received: from mail-yw0-x234.google.com (mail-yw0-x234.google.com [IPv6:2607:f8b0:4002:c05::234]) (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 9C91911E3 for ; Mon, 28 Nov 2016 12:49:35 +0000 (UTC) (envelope-from dcrosstech@gmail.com) Received: by mail-yw0-x234.google.com with SMTP id a10so114054614ywa.3 for ; Mon, 28 Nov 2016 04:49:35 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=mime-version:in-reply-to:references:from:date:message-id:subject:to :cc; bh=+s/WT34Hfs/3ChU+crVG77Kt2GtfMnBzB2B15X4mWDY=; b=h+gwuFFLcFMgBV0AHKf31jLcDxLw53aByHqDZnYF3Ixfex2EQ9o6az4t7eUE5POCu6 nUwZzy5bnTJMTYAZsUjx+EqODXlGUK08WB16DqesphAQqBMVfnfe06J5mOjbOM+sld3i anLCaDGsKOGCjmnxc4pxe9NOQngRoez82unODQpUJTLmPQhGZWkdKb5BV3fG3sjSB9Af +ZziSramFwB1G4ZncMGD3Yn/U6KazwQ3bRhIlLemmSfsCBPfLLnn6J5pwFmExUZ2EGzt 6SgydRYFQBwpyV9nkvbd9vIslkyHh6kqo438LzvxT+/OpsKcHhpPSKnq5DBgBqzTRtP4 7CSA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20130820; h=x-gm-message-state:mime-version:in-reply-to:references:from:date :message-id:subject:to:cc; bh=+s/WT34Hfs/3ChU+crVG77Kt2GtfMnBzB2B15X4mWDY=; b=N/4LpnG7/Dforh2rJOa06cSGQI9nkNaYs9/V2YUXtHBoG0Noj6EdUV6J76ydHMcqRe 4dnxlanhpl+FeerdQoMmLYEDFnOYnvYkOX0ygc/vnVerjZKWqAKEHi7q6J8l+pKFfBVQ qdJURhqtbuditwSecgb75+l2A0LxIiCWH49tBVbunvbx/dhSCV7QAmhxcOrEsnuSprBG bpOMR/ijWKU0aMID+ZpbOwyY3y5JDZGMzfyLg4e/MUan7wKkO7hWV8QBs4sI3GawHS05 pfCMUdjxNIofJSo8jQO6/CZ2ruCFgYzPJC3IA3AQJE39JhA6pOxbYTe5O8nHyYdI2Mg1 pdVg== X-Gm-Message-State: AKaTC00Ok+B9hWUa9pbG0t1VaUeAUNT+D1fhwh/pq0wMuLbEPGFYfZyuvNTaXJWdM58fqjglSNiGRq/EBW+yZg== X-Received: by 10.13.198.71 with SMTP id i68mr30091485ywd.158.1480337374808; Mon, 28 Nov 2016 04:49:34 -0800 (PST) MIME-Version: 1.0 Received: by 10.37.201.197 with HTTP; Mon, 28 Nov 2016 04:49:34 -0800 (PST) In-Reply-To: <20161128133936.7e815c9a@fabiankeil.de> References: <20161128133936.7e815c9a@fabiankeil.de> From: David Cross Date: Mon, 28 Nov 2016 07:49:34 -0500 Message-ID: Subject: Re: FreeBSD 11 i386 disk deadlock (I think) (now with reproduction steps!) To: Fabian Keil Cc: freebsd-hackers@freebsd.org Content-Type: text/plain; charset=UTF-8 X-Content-Filtered-By: Mailman/MimeDel 2.1.23 X-BeenThere: freebsd-hackers@freebsd.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: Technical Discussions relating to FreeBSD List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 28 Nov 2016 12:49:36 -0000 Indeed... this sounds like it, and exactly the path I was going to look down. On Mon, Nov 28, 2016 at 7:39 AM, Fabian Keil wrote: > David Cross wrote: > > > So, narrowing this down, I think it has something to do with geli swap > > (since I can easily reproduce it with geli swap, but have yet to > > reproduce it without).. and I have a bit of a convoluted way almost > > anyone can reproduce it with bhyve. (Note, I haven't been able to get a > > crashdump, since apparently the VM system being locked up prevents that, > > but with watchdogd, I have been able to get into DDB) > > Sounds familiar: > https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=209759 > > Fabian > From owner-freebsd-hackers@freebsd.org Mon Nov 28 13:47:09 2016 Return-Path: Delivered-To: freebsd-hackers@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 99E35C59E80 for ; Mon, 28 Nov 2016 13:47:09 +0000 (UTC) (envelope-from freebsd-listen@fabiankeil.de) Received: from smtprelay02.ispgateway.de (smtprelay02.ispgateway.de [80.67.18.14]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id 60E1A1556 for ; Mon, 28 Nov 2016 13:47:08 +0000 (UTC) (envelope-from freebsd-listen@fabiankeil.de) Received: from [78.35.140.237] (helo=fabiankeil.de) by smtprelay02.ispgateway.de with esmtpsa (TLSv1.2:AES256-GCM-SHA384:256) (Exim 4.84) (envelope-from ) id 1cBMDR-0002Xr-1R; Mon, 28 Nov 2016 14:43:29 +0100 Date: Mon, 28 Nov 2016 14:43:30 +0100 From: Fabian Keil To: David Cross Cc: freebsd-hackers@freebsd.org Subject: Re: FreeBSD 11 i386 disk deadlock (I think) (now with reproduction steps!) Message-ID: <20161128144135.10f93205@fabiankeil.de> In-Reply-To: References: <20161128041847.GA65249@charmander> <20161128120046.GP54029@kib.kiev.ua> MIME-Version: 1.0 Content-Type: multipart/signed; micalg=pgp-sha1; boundary="Sig_/2LEeej0ZqGu7CWTlbde+Yj5"; protocol="application/pgp-signature" X-Df-Sender: Nzc1MDY3 X-BeenThere: freebsd-hackers@freebsd.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: Technical Discussions relating to FreeBSD List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 28 Nov 2016 13:47:09 -0000 --Sig_/2LEeej0ZqGu7CWTlbde+Yj5 Content-Type: text/plain; charset=US-ASCII Content-Transfer-Encoding: quoted-printable David Cross wrote: > This is certainly new behavior, or a new manifestation. Recently a couple of uma consumers were changed to share uma zones instead of using a dedicated zone. As a result geli competes with more uma consumers and is more likely to deadlock. The bug isn't new, it's just triggered more often now. geli isn't the only uma consumer that is affected: https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=3D209680 Fabian --Sig_/2LEeej0ZqGu7CWTlbde+Yj5 Content-Type: application/pgp-signature Content-Description: OpenPGP digital signature -----BEGIN PGP SIGNATURE----- Version: GnuPG v2 iEYEARECAAYFAlg8NIIACgkQBYqIVf93VJ3H6wCgl8sbR1dCLQdEdiGsQSzyoHzg 6xgAoJpz2NPNvzCRJRWj5+81BgPpdgoP =40sn -----END PGP SIGNATURE----- --Sig_/2LEeej0ZqGu7CWTlbde+Yj5-- From owner-freebsd-hackers@freebsd.org Mon Nov 28 14:03:20 2016 Return-Path: Delivered-To: freebsd-hackers@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 415E8C5948C for ; Mon, 28 Nov 2016 14:03:20 +0000 (UTC) (envelope-from pieter@degoeje.nl) Received: from degoeje.nl (degoeje.nl [81.169.238.128]) by mx1.freebsd.org (Postfix) with ESMTP id 0A1781363 for ; Mon, 28 Nov 2016 14:03:19 +0000 (UTC) (envelope-from pieter@degoeje.nl) Received: from [192.168.1.250] (unknown [188.203.228.182]) by degoeje.nl (Postfix) with ESMTPSA id 3D8C215C013E; Mon, 28 Nov 2016 14:55:37 +0100 (CET) Subject: Re: qsort switching to insertsort To: Hans Petter Selasky , Tristan Verniquet , freebsd hackers References: <0bfb49b0-5d24-2766-6982-b4e49b0d5e81@selasky.org> From: Pieter de Goeje Message-ID: Date: Mon, 28 Nov 2016 14:55:35 +0100 User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64; rv:45.0) Gecko/20100101 Thunderbird/45.5.0 MIME-Version: 1.0 In-Reply-To: <0bfb49b0-5d24-2766-6982-b4e49b0d5e81@selasky.org> Content-Type: text/plain; charset=windows-1252; format=flowed Content-Transfer-Encoding: 7bit X-Spam-Status: No, score=-1.0 required=3.5 tests=ALL_TRUSTED autolearn=ham autolearn_force=no version=3.4.0 X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on degoeje.nl X-BeenThere: freebsd-hackers@freebsd.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: Technical Discussions relating to FreeBSD List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 28 Nov 2016 14:03:20 -0000 Op 2016-11-26 om 11:51 schreef Hans Petter Selasky: > On 11/26/16 11:26, Tristan Verniquet wrote: >> The easiest way forward for us is probably to comment out the >> offending code. >> > > Commenting out the offending code does not help. It simply leaves for > another type of dataset to provide the same behaviour. qsort() is doomed > in this regard. qsort() can easily be fixed to always work O(n log n) worst case time by falling back to heapsort if a pathological case is detected. This is called introsort (introspection sort). See https://en.wikipedia.org/wiki/Introsort for a description. The TL;DR is that quicksort should fall back to heapsort if the recursion depth exceeds 2*log n. -- Pieter de Goeje From owner-freebsd-hackers@freebsd.org Mon Nov 28 16:03:19 2016 Return-Path: Delivered-To: freebsd-hackers@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 8176EC5A72A for ; Mon, 28 Nov 2016 16:03:19 +0000 (UTC) (envelope-from kostikbel@gmail.com) Received: from kib.kiev.ua (kib.kiev.ua [IPv6:2001:470:d5e7:1::1]) (using TLSv1 with cipher DHE-RSA-CAMELLIA256-SHA (256/256 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id 0078F15C6 for ; Mon, 28 Nov 2016 16:03:18 +0000 (UTC) (envelope-from kostikbel@gmail.com) Received: from tom.home (kib@localhost [127.0.0.1]) by kib.kiev.ua (8.15.2/8.15.2) with ESMTPS id uASG3BwN057635 (version=TLSv1 cipher=DHE-RSA-CAMELLIA256-SHA bits=256 verify=NO); Mon, 28 Nov 2016 18:03:12 +0200 (EET) (envelope-from kostikbel@gmail.com) DKIM-Filter: OpenDKIM Filter v2.10.3 kib.kiev.ua uASG3BwN057635 Received: (from kostik@localhost) by tom.home (8.15.2/8.15.2/Submit) id uASG3BbX057634; Mon, 28 Nov 2016 18:03:11 +0200 (EET) (envelope-from kostikbel@gmail.com) X-Authentication-Warning: tom.home: kostik set sender to kostikbel@gmail.com using -f Date: Mon, 28 Nov 2016 18:03:11 +0200 From: Konstantin Belousov To: Fabian Keil Cc: David Cross , freebsd-hackers@freebsd.org Subject: Re: FreeBSD 11 i386 disk deadlock (I think) (now with reproduction steps!) Message-ID: <20161128160311.GQ54029@kib.kiev.ua> References: <20161128041847.GA65249@charmander> <20161128120046.GP54029@kib.kiev.ua> <20161128144135.10f93205@fabiankeil.de> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20161128144135.10f93205@fabiankeil.de> User-Agent: Mutt/1.7.1 (2016-10-04) X-Spam-Status: No, score=-2.0 required=5.0 tests=ALL_TRUSTED,BAYES_00, DKIM_ADSP_CUSTOM_MED,FREEMAIL_FROM,NML_ADSP_CUSTOM_MED autolearn=no autolearn_force=no version=3.4.1 X-Spam-Checker-Version: SpamAssassin 3.4.1 (2015-04-28) on tom.home X-BeenThere: freebsd-hackers@freebsd.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: Technical Discussions relating to FreeBSD List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 28 Nov 2016 16:03:19 -0000 On Mon, Nov 28, 2016 at 02:43:30PM +0100, Fabian Keil wrote: > David Cross wrote: > > > This is certainly new behavior, or a new manifestation. > > Recently a couple of uma consumers were changed to share uma zones > instead of using a dedicated zone. As a result geli competes with > more uma consumers and is more likely to deadlock. The bug isn't > new, it's just triggered more often now. The problem happens on layer much lower than UMA, it is whole reusable page pool which is depleted and cannot be re-filled without allocating more memory. If you think about it, the deadlock is obviously trivial: pagedaemon is the main source of the free pages, but if producing free page requires allocating one, low memory condition is equal to deadlock. It was always there, in the sense that for all versions of freebsd, if file/disk write path requires memory allocation, there is the trouble. For geom, some special unique measures were taken so that bio allocations do not cause the issue in typical situations. > > geli isn't the only uma consumer that is affected: > https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=209680 From owner-freebsd-hackers@freebsd.org Mon Nov 28 16:49:31 2016 Return-Path: Delivered-To: freebsd-hackers@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 29535C59224 for ; Mon, 28 Nov 2016 16:49:31 +0000 (UTC) (envelope-from freebsd-listen@fabiankeil.de) Received: from smtprelay04.ispgateway.de (smtprelay04.ispgateway.de [80.67.31.32]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id E415E1D6D for ; Mon, 28 Nov 2016 16:49:30 +0000 (UTC) (envelope-from freebsd-listen@fabiankeil.de) Received: from [78.35.140.237] (helo=fabiankeil.de) by smtprelay04.ispgateway.de with esmtpsa (TLSv1.2:AES256-GCM-SHA384:256) (Exim 4.84) (envelope-from ) id 1cBOzu-0001JL-LG; Mon, 28 Nov 2016 17:41:42 +0100 Date: Mon, 28 Nov 2016 17:41:40 +0100 From: Fabian Keil To: Konstantin Belousov Cc: freebsd-hackers@freebsd.org Subject: Re: FreeBSD 11 i386 disk deadlock (I think) (now with reproduction steps!) Message-ID: <20161128174140.6635a726@fabiankeil.de> In-Reply-To: <20161128160311.GQ54029@kib.kiev.ua> References: <20161128041847.GA65249@charmander> <20161128120046.GP54029@kib.kiev.ua> <20161128144135.10f93205@fabiankeil.de> <20161128160311.GQ54029@kib.kiev.ua> MIME-Version: 1.0 Content-Type: multipart/signed; micalg=pgp-sha1; boundary="Sig_/R9=vfUUF6L/il=NEp96Z1ks"; protocol="application/pgp-signature" X-Df-Sender: Nzc1MDY3 X-BeenThere: freebsd-hackers@freebsd.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: Technical Discussions relating to FreeBSD List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 28 Nov 2016 16:49:31 -0000 --Sig_/R9=vfUUF6L/il=NEp96Z1ks Content-Type: text/plain; charset=US-ASCII Content-Transfer-Encoding: quoted-printable Konstantin Belousov wrote: > On Mon, Nov 28, 2016 at 02:43:30PM +0100, Fabian Keil wrote: > > David Cross wrote: > > =20 > > > This is certainly new behavior, or a new manifestation. =20 > >=20 > > Recently a couple of uma consumers were changed to share uma zones > > instead of using a dedicated zone. As a result geli competes with > > more uma consumers and is more likely to deadlock. The bug isn't > > new, it's just triggered more often now. =20 > The problem happens on layer much lower than UMA, it is whole reusable > page pool which is depleted and cannot be re-filled without allocating > more memory. If you think about it, the deadlock is obviously trivial: > pagedaemon is the main source of the free pages, but if producing free > page requires allocating one, low memory condition is equal to deadlock. >=20 > It was always there, in the sense that for all versions of freebsd, if > file/disk write path requires memory allocation, there is the trouble. >=20 > For geom, some special unique measures were taken so that bio allocations > do not cause the issue in typical situations. >=20 > > geli isn't the only uma consumer that is affected: > > https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=3D209680 =20 It's been a couple of months since I looked into this and apparently I misremembered. The commits I was thinking of didn't actually modify UMA consumers to use shared zones instead of dedicated zones but removed the UMA_ZONE_NOFREE flag which makes issues like the one reported in the PR above more likely. However, this should not negatively affect UMA consumers that use different zones and should be unrelated to the geli deadlocks. On my systems the patch from #209759 reliably prevents the geli deadlocks when paging, but I do not remember why the issue became more pressing recently. Fabian --Sig_/R9=vfUUF6L/il=NEp96Z1ks Content-Type: application/pgp-signature Content-Description: OpenPGP digital signature -----BEGIN PGP SIGNATURE----- Version: GnuPG v2 iEYEARECAAYFAlg8XkYACgkQBYqIVf93VJ3Z3wCdHWmBsM5SXy1g7XQhU+4H0J8j D7IAn0WsLYYAOAvHz4umN1WTcxOVIabF =RmKu -----END PGP SIGNATURE----- --Sig_/R9=vfUUF6L/il=NEp96Z1ks-- From owner-freebsd-hackers@freebsd.org Mon Nov 28 16:57:24 2016 Return-Path: Delivered-To: freebsd-hackers@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 1DBC4C59575 for ; Mon, 28 Nov 2016 16:57:24 +0000 (UTC) (envelope-from slw@zxy.spb.ru) Received: from zxy.spb.ru (zxy.spb.ru [195.70.199.98]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id D03E91249 for ; Mon, 28 Nov 2016 16:57:23 +0000 (UTC) (envelope-from slw@zxy.spb.ru) Received: from slw by zxy.spb.ru with local (Exim 4.86 (FreeBSD)) (envelope-from ) id 1cBOhU-000B0H-Dv; Mon, 28 Nov 2016 19:22:40 +0300 Date: Mon, 28 Nov 2016 19:22:40 +0300 From: Slawa Olhovchenkov To: Konstantin Belousov Cc: Fabian Keil , freebsd-hackers@freebsd.org, David Cross Subject: Re: FreeBSD 11 i386 disk deadlock (I think) (now with reproduction steps!) Message-ID: <20161128162240.GM99742@zxy.spb.ru> References: <20161128041847.GA65249@charmander> <20161128120046.GP54029@kib.kiev.ua> <20161128144135.10f93205@fabiankeil.de> <20161128160311.GQ54029@kib.kiev.ua> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20161128160311.GQ54029@kib.kiev.ua> User-Agent: Mutt/1.5.24 (2015-08-30) X-SA-Exim-Connect-IP: X-SA-Exim-Mail-From: slw@zxy.spb.ru X-SA-Exim-Scanned: No (on zxy.spb.ru); SAEximRunCond expanded to false X-BeenThere: freebsd-hackers@freebsd.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: Technical Discussions relating to FreeBSD List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 28 Nov 2016 16:57:24 -0000 On Mon, Nov 28, 2016 at 06:03:11PM +0200, Konstantin Belousov wrote: > On Mon, Nov 28, 2016 at 02:43:30PM +0100, Fabian Keil wrote: > > David Cross wrote: > > > > > This is certainly new behavior, or a new manifestation. > > > > Recently a couple of uma consumers were changed to share uma zones > > instead of using a dedicated zone. As a result geli competes with > > more uma consumers and is more likely to deadlock. The bug isn't > > new, it's just triggered more often now. > The problem happens on layer much lower than UMA, it is whole reusable > page pool which is depleted and cannot be re-filled without allocating > more memory. If you think about it, the deadlock is obviously trivial: > pagedaemon is the main source of the free pages, but if producing free > page requires allocating one, low memory condition is equal to deadlock. > > It was always there, in the sense that for all versions of freebsd, if > file/disk write path requires memory allocation, there is the trouble. > > For geom, some special unique measures were taken so that bio allocations > do not cause the issue in typical situations. Typical workaround for this is pre-allocate some memory for this operation. From owner-freebsd-hackers@freebsd.org Mon Nov 28 17:50:58 2016 Return-Path: Delivered-To: freebsd-hackers@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 C03CFC5A7F8 for ; Mon, 28 Nov 2016 17:50:58 +0000 (UTC) (envelope-from dcrosstech@gmail.com) Received: from mail-yw0-x233.google.com (mail-yw0-x233.google.com [IPv6:2607:f8b0:4002:c05::233]) (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 7C5A8145B for ; Mon, 28 Nov 2016 17:50:58 +0000 (UTC) (envelope-from dcrosstech@gmail.com) Received: by mail-yw0-x233.google.com with SMTP id a10so121313748ywa.3 for ; Mon, 28 Nov 2016 09:50:58 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=mime-version:in-reply-to:references:from:date:message-id:subject:to :cc; bh=AQHvmY3P9wdjIO6cxnaA209bXcBsC0TCyQb0xwJAdKE=; b=m86M5m7ncNeKLbWWVidJsoO2JQObfZasFF0kTehWLIB4RQzvPiphadz3f0z4NCUO7K V+jaJBJwZCKP3kdW9imCLFeAIF9/ik7kx3AdBexCbacIEoaWqpd4td8VawvOOIhwf+W4 WETJtGGKknjHkewX364m5GIhyqQDrVb0zqudWj7rVOP2drYUkYLxVo89QmxI3Hf4TiTV DvbVEYRyHezFGIj2CR3AnK48X5ncKn7Ehwd4y1jTs4bU+NqOf6f6iNkWBLOIszgXvXO3 qxs3Mdg56dW8ShqCOMblvBwF7t/L8ToIIZboYK5cCTIvd4OTTax+DBRXNo4VMBod006S lFSA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20130820; h=x-gm-message-state:mime-version:in-reply-to:references:from:date :message-id:subject:to:cc; bh=AQHvmY3P9wdjIO6cxnaA209bXcBsC0TCyQb0xwJAdKE=; b=aZzsXYGwsaqAWuv5yCMRnzZTZaFzoBBIHAH30X2oh1PirCSV7CPlrOFkz06eIOriVH 0th7U65Z/vy7T11x8XUuO1r3Fv5mOBBUe+GcY7r6heQ1IeeVzejbuyfLEviOIFDEZraI ySuce+Ep2XsNzZHMutFFTFRfJt0JXoDHCGPslQrR7bgimWt0rqgAfeboBO2jDl0d82uo ADp4KHJR9W21gzcUUGiD3jErbuDiCjNqPp7TNecnKLaais6+3QoGUH2esJgD/ULjlO49 QNbVtCVdK9ije+113r18H6ZKz+duJNkEaky/sBZCTMEeuUQdJEDs97FWNCG3NZunoPJS M9mQ== X-Gm-Message-State: AKaTC03Leobzxdk+rinLIEHp1Pn6Q+TLQMeyNDm1HegD7RPdPm/pq0J5blHEBLSUc6fY1XLw5IcRX6rA5zjr3Q== X-Received: by 10.129.46.22 with SMTP id u22mr26670997ywu.199.1480355457624; Mon, 28 Nov 2016 09:50:57 -0800 (PST) MIME-Version: 1.0 Received: by 10.37.201.197 with HTTP; Mon, 28 Nov 2016 09:50:57 -0800 (PST) In-Reply-To: <20161128162240.GM99742@zxy.spb.ru> References: <20161128041847.GA65249@charmander> <20161128120046.GP54029@kib.kiev.ua> <20161128144135.10f93205@fabiankeil.de> <20161128160311.GQ54029@kib.kiev.ua> <20161128162240.GM99742@zxy.spb.ru> From: David Cross Date: Mon, 28 Nov 2016 12:50:57 -0500 Message-ID: Subject: Re: FreeBSD 11 i386 disk deadlock (I think) (now with reproduction steps!) To: Slawa Olhovchenkov Cc: Konstantin Belousov , Fabian Keil , freebsd-hackers@freebsd.org Content-Type: text/plain; charset=UTF-8 X-Content-Filtered-By: Mailman/MimeDel 2.1.23 X-BeenThere: freebsd-hackers@freebsd.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: Technical Discussions relating to FreeBSD List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 28 Nov 2016 17:50:58 -0000 I wouldn't call this a 'workaround', but the right answer. Something in the disk io path shouldn't be allocating memory out of the pool that can cause paging (since any of that could be IN the path for paging). It was what I assumed Fabian's proposed patch was. >From looking at the process list on my machine, it seems that geli allocates a process per core per provider, is there a reason to not have each of these on startup allocate themselves a single buffer of sector-size, and just put all operations through that? You're not (realistically) going to get more concurrency than that. I guess another approach would be to pre-allocate a ring buffer of the desired operational depth.. but that seems overkill. On Mon, Nov 28, 2016 at 11:22 AM, Slawa Olhovchenkov wrote: > On Mon, Nov 28, 2016 at 06:03:11PM +0200, Konstantin Belousov wrote: > > > On Mon, Nov 28, 2016 at 02:43:30PM +0100, Fabian Keil wrote: > > > David Cross wrote: > > > > > > > This is certainly new behavior, or a new manifestation. > > > > > > Recently a couple of uma consumers were changed to share uma zones > > > instead of using a dedicated zone. As a result geli competes with > > > more uma consumers and is more likely to deadlock. The bug isn't > > > new, it's just triggered more often now. > > The problem happens on layer much lower than UMA, it is whole reusable > > page pool which is depleted and cannot be re-filled without allocating > > more memory. If you think about it, the deadlock is obviously trivial: > > pagedaemon is the main source of the free pages, but if producing free > > page requires allocating one, low memory condition is equal to deadlock. > > > > It was always there, in the sense that for all versions of freebsd, if > > file/disk write path requires memory allocation, there is the trouble. > > > > For geom, some special unique measures were taken so that bio allocations > > do not cause the issue in typical situations. > > Typical workaround for this is pre-allocate some memory for this > operation. > From owner-freebsd-hackers@freebsd.org Mon Nov 28 18:16:18 2016 Return-Path: Delivered-To: freebsd-hackers@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 4F0B6C591A2 for ; Mon, 28 Nov 2016 18:16:18 +0000 (UTC) (envelope-from george+freebsd@m5p.com) Received: from mailhost.m5p.com (mailhost.m5p.com [IPv6:2001:418:3fd::f7]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (Client CN "m5p.com", Issuer "Let's Encrypt Authority X3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id E7C2F1897 for ; Mon, 28 Nov 2016 18:16:17 +0000 (UTC) (envelope-from george+freebsd@m5p.com) Received: from [10.100.0.31] (haymarket.m5p.com [10.100.0.31]) by mailhost.m5p.com (8.15.2/8.15.2) with ESMTP id uASIGAk4062456 for ; Mon, 28 Nov 2016 13:16:15 -0500 (EST) (envelope-from george+freebsd@m5p.com) To: freebsd-hackers@FreeBSD.org From: George Mitchell Subject: Sendmail and STARTTLS Message-ID: Date: Mon, 28 Nov 2016 13:16:10 -0500 User-Agent: Mozilla/5.0 (X11; FreeBSD amd64; rv:45.0) Gecko/20100101 Thunderbird/45.5.0 MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 7bit X-Spam-Status: No, score=-3.1 required=10.0 tests=ALL_TRUSTED, RP_MATCHES_RCVD, URIBL_SBL,URIBL_SBL_A autolearn=unavailable autolearn_force=no version=3.4.1 X-Spam-Checker-Version: SpamAssassin 3.4.1 (2015-04-28) on mattapan.m5p.com X-Greylist: Sender passed SPF test, not delayed by milter-greylist-4.4.3 (mailhost.m5p.com [10.100.0.247]); Mon, 28 Nov 2016 13:16:16 -0500 (EST) X-BeenThere: freebsd-hackers@freebsd.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: Technical Discussions relating to FreeBSD List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 28 Nov 2016 18:16:18 -0000 I have a shiny new Let's Encrypt certificate. I believe it is properly installed on my mail server, and https://ssl-tools.net/mailservers/ says my certificate is trustworthy and protocol is secure. (I'm not [yet] using DNS-based authentication.) Despite all these encouraging signs, my maillog is filled with STARTTLS VERIFY=NO and VERIFY=FAIL messages. A typical email header entry says: Received: from mx2.freebsd.org (mx2.freebsd.org [8.8.178.116]) by mailhost.m5p.com (8.15.2/8.15.2) with ESMTPS id uARD0t70051256 (version=TLSv1.2 cipher=DHE-RSA-AES256-GCM-SHA384 bits=256 verify=FAIL) for ; Sun, 27 Nov 2016 08:01:01 -0500 (EST) (envelope-from owner-freebsd-hackers@freebsd.org) My sendmail.cf says: O CipherList=ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-DSS-AES128-GCM-SHA256:kEDH+AESGCM:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA:ECDHE-ECDSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-DSS-AES128-SHA256:DHE-RSA-AES256-SHA256:DHE-DSS-AES256-SHA:DHE-RSA-AES256-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA:AES256-SHA:AES:CAMELLIA:DES-CBC3-SHA:!aNULL:!eNULL:!EXPORT:!DES:RC4:!MD5:!PSK:!aECDH:!EDH-DSS-DES-CBC3-SHA:!EDH-RSA-DES-CBC3-SHA:!KRB5-DES-CBC3-SHA O ServerSSLOptions=+SSL_OP_NO_SSLv2 +SSL_OP_NO_SSLv3 +SSL_OP_CIPHER_SERVER_PREFERENCE O ClientSSLOptions=+SSL_OP_NO_SSLv2 +SSL_OP_NO_SSLv3 (When I used the default values, ssl-tools accused me of using a weak protocol, so I started experimenting with values gleaned from around the net, to no avail so far.) What am I doing wrong? How can I enter VERIFY=YES nirvana? -- George From owner-freebsd-hackers@freebsd.org Mon Nov 28 18:39:45 2016 Return-Path: Delivered-To: freebsd-hackers@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 E1262C59AD9 for ; Mon, 28 Nov 2016 18:39:45 +0000 (UTC) (envelope-from gshapiro@freebsd.org) Received: from z.gshapiro.net (z.gshapiro.net [52.4.190.60]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client CN "smtp.gshapiro.net", Issuer "Certificate Authority" (not verified)) by mx1.freebsd.org (Postfix) with ESMTPS id B06241D5A for ; Mon, 28 Nov 2016 18:39:45 +0000 (UTC) (envelope-from gshapiro@freebsd.org) Received: from c02pp3c3fvh8.corp.proofpoint.com (snv-gw.proofpoint.com [208.86.202.10]) (authenticated bits=0) by z.gshapiro.net (8.16.0.16/8.16.0.16) with ESMTPSA id uASIZtfL067399 (version=TLSv1.2 cipher=DHE-RSA-AES256-GCM-SHA384 bits=256 verify=NO); Mon, 28 Nov 2016 18:36:06 GMT Date: Mon, 28 Nov 2016 10:35:55 -0800 From: Gregory Shapiro To: George Mitchell Cc: freebsd-hackers@FreeBSD.org Subject: Re: Sendmail and STARTTLS Message-ID: <20161128183554.GA6716@c02pp3c3fvh8.corp.proofpoint.com> References: MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: User-Agent: Mutt/1.6.0 (2016-04-01) X-BeenThere: freebsd-hackers@freebsd.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: Technical Discussions relating to FreeBSD List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 28 Nov 2016 18:39:46 -0000 > Received: from mx2.freebsd.org (mx2.freebsd.org [8.8.178.116]) > by mailhost.m5p.com (8.15.2/8.15.2) with ESMTPS id uARD0t70051256 > (version=TLSv1.2 cipher=DHE-RSA-AES256-GCM-SHA384 bits=256 verify=FAIL) > for ; Sun, 27 Nov 2016 08:01:01 -0500 (EST) > (envelope-from owner-freebsd-hackers@freebsd.org) > > (When I used the default values, ssl-tools accused me of using a > weak protocol, so I started experimenting with values gleaned from > around the net, to no avail so far.) > > What am I doing wrong? How can I enter VERIFY=YES nirvana? -- George Verification is via these settings. You'll need a populated set of root certificates in the directory you pick. M4 Variable Name Configuration [Default] & Description ================ ============= ======================= confCACERT_PATH CACertPath [undefined] Path to directory with certificates of CAs which must contain their hashes as filenames or links. confCACERT CACertFile [undefined] File containing at least one CA certificate. Finally, review section 6.6.1 of op.me: % gunzip -c /usr/share/doc/smm/08.sendmailop/paper.ascii.gz | less From owner-freebsd-hackers@freebsd.org Mon Nov 28 19:19:17 2016 Return-Path: Delivered-To: freebsd-hackers@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 7AE16C5A765 for ; Mon, 28 Nov 2016 19:19:17 +0000 (UTC) (envelope-from george+freebsd@m5p.com) Received: from mailhost.m5p.com (mailhost.m5p.com [IPv6:2001:418:3fd::f7]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (Client CN "m5p.com", Issuer "Let's Encrypt Authority X3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 1643513E0; Mon, 28 Nov 2016 19:19:16 +0000 (UTC) (envelope-from george+freebsd@m5p.com) Received: from [10.100.0.31] (haymarket.m5p.com [10.100.0.31]) by mailhost.m5p.com (8.15.2/8.15.2) with ESMTP id uASJJ9r5062939; Mon, 28 Nov 2016 14:19:15 -0500 (EST) (envelope-from george+freebsd@m5p.com) Subject: Re: Sendmail and STARTTLS To: Gregory Shapiro References: <20161128183554.GA6716@c02pp3c3fvh8.corp.proofpoint.com> Cc: freebsd-hackers@FreeBSD.org From: George Mitchell Message-ID: <2c7a5fc1-5946-1221-816f-b68079a42078@m5p.com> Date: Mon, 28 Nov 2016 14:19:09 -0500 User-Agent: Mozilla/5.0 (X11; FreeBSD amd64; rv:45.0) Gecko/20100101 Thunderbird/45.5.0 MIME-Version: 1.0 In-Reply-To: <20161128183554.GA6716@c02pp3c3fvh8.corp.proofpoint.com> Content-Type: text/plain; charset=windows-1252 Content-Transfer-Encoding: 7bit X-Spam-Status: No, score=-3.8 required=10.0 tests=ALL_TRUSTED, RP_MATCHES_RCVD autolearn=unavailable autolearn_force=no version=3.4.1 X-Spam-Checker-Version: SpamAssassin 3.4.1 (2015-04-28) on mattapan.m5p.com X-Greylist: Sender passed SPF test, not delayed by milter-greylist-4.4.3 (mailhost.m5p.com [10.100.0.247]); Mon, 28 Nov 2016 14:19:15 -0500 (EST) X-BeenThere: freebsd-hackers@freebsd.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: Technical Discussions relating to FreeBSD List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 28 Nov 2016 19:19:17 -0000 On 11/28/16 13:35, Gregory Shapiro wrote: >> Received: from mx2.freebsd.org (mx2.freebsd.org [8.8.178.116]) >> by mailhost.m5p.com (8.15.2/8.15.2) with ESMTPS id uARD0t70051256 >> (version=TLSv1.2 cipher=DHE-RSA-AES256-GCM-SHA384 bits=256 verify=FAIL) >> for ; Sun, 27 Nov 2016 08:01:01 -0500 (EST) >> (envelope-from owner-freebsd-hackers@freebsd.org) >> >> (When I used the default values, ssl-tools accused me of using a >> weak protocol, so I started experimenting with values gleaned from >> around the net, to no avail so far.) >> >> What am I doing wrong? How can I enter VERIFY=YES nirvana? -- George > > Verification is via these settings. You'll need a populated set of root certificates in the directory you pick. > > M4 Variable Name Configuration [Default] & Description > ================ ============= ======================= > confCACERT_PATH CACertPath [undefined] Path to directory with > certificates of CAs which must contain > their hashes as filenames or links. > confCACERT CACertFile [undefined] File containing at least > one CA certificate. Like this? define(`CERT_DIR', `/usr/local/etc/letsencrypt/live/m5p.com') define(`confCACERT_PATH', `CERT_DIR') define(`confCACERT', `CERT_DIR/chain.pem') define(`confSERVER_CERT', `CERT_DIR/cert.pem') define(`confSERVER_KEY', `CERT_DIR/privkey.pem') define(`confCLIENT_CERT', `CERT_DIR/cert.pem') define(`confCLIENT_KEY', `CERT_DIR/privkey.pem') > > Finally, review section 6.6.1 of op.me: > > % gunzip -c /usr/share/doc/smm/08.sendmailop/paper.ascii.gz | less > [...] Rechecking this now ... -- George From owner-freebsd-hackers@freebsd.org Mon Nov 28 23:19:30 2016 Return-Path: Delivered-To: freebsd-hackers@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 033BCC5AF2A for ; Mon, 28 Nov 2016 23:19:30 +0000 (UTC) (envelope-from wlosh@bsdimp.com) Received: from mail-io0-x244.google.com (mail-io0-x244.google.com [IPv6:2607:f8b0:4001:c06::244]) (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 C4F55105D for ; Mon, 28 Nov 2016 23:19:29 +0000 (UTC) (envelope-from wlosh@bsdimp.com) Received: by mail-io0-x244.google.com with SMTP id j92so25976697ioi.0 for ; Mon, 28 Nov 2016 15:19:29 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=bsdimp-com.20150623.gappssmtp.com; s=20150623; h=mime-version:sender:in-reply-to:references:from:date:message-id :subject:to:cc; bh=w4TAhT9q+8eXu1aUq8K3LuX2mjS8/nZ6eyORi74x5Zo=; b=HB8PGboX/1dN+rUQUYnlrImnYEE3TgoS3HpNAd/3ATleRereNbBXpz6xs2RrDvB09f Ogmi+CStV8RpIh4xTiWYjBUmetlqg6Cn8BCvqo1cF9IltvhH3Lt0sF7qhvXvYrJMG3wv X9sHWSVGx7Sj5f3eHqYin1+2LX1KIlu/LChZywEvtK2fysAA4dOGOc8Lso0JasGz8F6x gCtoRQSfl0RS1NC5e7+4fAzARKvRsMCSk5EPa0AYLwa7j0qeGDCIs/GBCcfaHdotzWJs bHBEG4d9KQIQbojVqFCN0lHkmra8F/B4W98nxE7PoNxQJkFVST7c9ULvL7FBmdGQUlbY HAUg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20130820; h=x-gm-message-state:mime-version:sender:in-reply-to:references:from :date:message-id:subject:to:cc; bh=w4TAhT9q+8eXu1aUq8K3LuX2mjS8/nZ6eyORi74x5Zo=; b=Ftx6h0f6nSzKtc03zINkq8SFqeCbS/9dopLYOU19nXAvVinv+YNNi3el8Jm17QElqL /A8nLJYRcgHJEpUJsQNZJ232Drk/hHcGpxz7MG9CLPCe/2BP15vBxgb7U3+0YZomZlxy kb9WZAVlrtZMjedH43HuUqKLl31EwYorQiaWGzXPQyJ00OQgflWUal/G4GnrDgPwc3BO uj6y0r82S7JXV8lSwaidGkass12vZbe0Gvs9N+GLLZ10788SjUSyYsgISF95FqG0slA0 AoZZl08I07sH4fo7WFX/mXGbdTm2xt6dDG3o+f0JGF8P+QkXi13AfscPu3q2ExNmzo+G zTxQ== X-Gm-Message-State: AKaTC02LCkS3YoxigG/RTAJLqcB3YLmpwTTvAYvwuKOJ1oEg3PNJWey5AvfPCPELPljvGVCwFS/YgLoRALlCoA== X-Received: by 10.107.154.14 with SMTP id c14mr8479306ioe.0.1480375169008; Mon, 28 Nov 2016 15:19:29 -0800 (PST) MIME-Version: 1.0 Sender: wlosh@bsdimp.com Received: by 10.79.68.132 with HTTP; Mon, 28 Nov 2016 15:19:28 -0800 (PST) X-Originating-IP: [50.253.99.174] In-Reply-To: References: <20161128041847.GA65249@charmander> <20161128120046.GP54029@kib.kiev.ua> <20161128144135.10f93205@fabiankeil.de> <20161128160311.GQ54029@kib.kiev.ua> <20161128162240.GM99742@zxy.spb.ru> From: Warner Losh Date: Mon, 28 Nov 2016 16:19:28 -0700 X-Google-Sender-Auth: RPYQSnYQ7JXL5xuuyWlE9HR-YYk Message-ID: Subject: Re: FreeBSD 11 i386 disk deadlock (I think) (now with reproduction steps!) To: David Cross Cc: Slawa Olhovchenkov , Konstantin Belousov , "freebsd-hackers@freebsd.org" , Fabian Keil Content-Type: text/plain; charset=UTF-8 X-BeenThere: freebsd-hackers@freebsd.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: Technical Discussions relating to FreeBSD List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 28 Nov 2016 23:19:30 -0000 On Mon, Nov 28, 2016 at 10:50 AM, David Cross wrote: > I wouldn't call this a 'workaround', but the right answer. Something in > the disk io path shouldn't be allocating memory out of the pool that can > cause paging (since any of that could be IN the path for paging). It was > what I assumed Fabian's proposed patch was. > > From looking at the process list on my machine, it seems that geli > allocates a process per core per provider, is there a reason to not have > each of these on startup allocate themselves a single buffer of > sector-size, and just put all operations through that? You're not > (realistically) going to get more concurrency than that. I guess another > approach would be to pre-allocate a ring buffer of the desired operational > depth.. but that seems overkill. I have some code that helps fix this in the GEOM layer. For the swapper, it will allocate out of a pool of memory that's set aside for that. While it is still a pool, the only time things are allocated out of it is when the swapper is swapping stuff out. So if you hit a resource shortage and have to wait, you know the wait will be bounded unless the disk I/O never completes. This is already weakly done with UMA, but the guarantees aren't strong enough that we'll always make progress. There are other places in the stack that allocate shared resources, but this one bit us at Netflix. I've not yet cleaned up the patches for upstreaming... I want to let the recent vm changes settle before tackling this again as well... Warner > On Mon, Nov 28, 2016 at 11:22 AM, Slawa Olhovchenkov wrote: > >> On Mon, Nov 28, 2016 at 06:03:11PM +0200, Konstantin Belousov wrote: >> >> > On Mon, Nov 28, 2016 at 02:43:30PM +0100, Fabian Keil wrote: >> > > David Cross wrote: >> > > >> > > > This is certainly new behavior, or a new manifestation. >> > > >> > > Recently a couple of uma consumers were changed to share uma zones >> > > instead of using a dedicated zone. As a result geli competes with >> > > more uma consumers and is more likely to deadlock. The bug isn't >> > > new, it's just triggered more often now. >> > The problem happens on layer much lower than UMA, it is whole reusable >> > page pool which is depleted and cannot be re-filled without allocating >> > more memory. If you think about it, the deadlock is obviously trivial: >> > pagedaemon is the main source of the free pages, but if producing free >> > page requires allocating one, low memory condition is equal to deadlock. >> > >> > It was always there, in the sense that for all versions of freebsd, if >> > file/disk write path requires memory allocation, there is the trouble. >> > >> > For geom, some special unique measures were taken so that bio allocations >> > do not cause the issue in typical situations. >> >> Typical workaround for this is pre-allocate some memory for this >> operation. >> > _______________________________________________ > freebsd-hackers@freebsd.org mailing list > https://lists.freebsd.org/mailman/listinfo/freebsd-hackers > To unsubscribe, send any mail to "freebsd-hackers-unsubscribe@freebsd.org" From owner-freebsd-hackers@freebsd.org Tue Nov 29 08:22:05 2016 Return-Path: Delivered-To: freebsd-hackers@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 B3D3AC5C1AC for ; Tue, 29 Nov 2016 08:22:05 +0000 (UTC) (envelope-from gahr@FreeBSD.org) Received: from mailman.ysv.freebsd.org (unknown [127.0.1.3]) by mx1.freebsd.org (Postfix) with ESMTP id 9D3B2129A for ; Tue, 29 Nov 2016 08:22:05 +0000 (UTC) (envelope-from gahr@FreeBSD.org) Received: by mailman.ysv.freebsd.org (Postfix) id 9CA65C5C1AB; Tue, 29 Nov 2016 08:22:05 +0000 (UTC) Delivered-To: hackers@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 9C596C5C1AA for ; Tue, 29 Nov 2016 08:22:05 +0000 (UTC) (envelope-from gahr@FreeBSD.org) Received: from mail.ptrcrt.ch (gahr.cloud.tilaa.com [IPv6:2a02:2770:8:0:21a:4aff:fe7e:c6be]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id 208FD1298 for ; Tue, 29 Nov 2016 08:22:04 +0000 (UTC) (envelope-from gahr@FreeBSD.org) Received: from ptrcrt.ch (mail.ptrcrt.ch [192.168.1.1]) by mail.ptrcrt.ch (OpenSMTPD) with ESMTPSA id 55605b42 TLS version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NO for ; Tue, 29 Nov 2016 08:22:01 +0000 (UTC) Date: Tue, 29 Nov 2016 09:22:01 +0100 From: Pietro Cerutti To: hackers@FreeBSD.org Subject: Positive leap second on 12/31/2016 Message-ID: <20161129082201.w3rqmzh22iump4n5@ptrcrt.ch> Reply-To: Pietro Cerutti MIME-Version: 1.0 Content-Type: multipart/signed; micalg=pgp-sha512; protocol="application/pgp-signature"; boundary="v3zjfaexika2lv5m" Content-Disposition: inline X-PGP-Key: fp="DA6D E106 A5B8 54B8 5DD8 6D49 ADD0 D38E A192 089E"; id="0xA192089E"; get=; get=; get=; get= OpenPGP: id=A192089E; url=https://gahr.ch/pgp/0xADD0D38EA192089E.txt; url=https://keybase.io/gahr/key.asc User-Agent: NeoMutt/20161126 (1.7.1) X-BeenThere: freebsd-hackers@freebsd.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: Technical Discussions relating to FreeBSD List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 29 Nov 2016 08:22:05 -0000 --v3zjfaexika2lv5m Content-Type: text/plain; charset=utf-8 Content-Disposition: inline Content-Transfer-Encoding: quoted-printable Just in case anybody missed it, a leap second is going to be introduced at the end of 12/31/2016. For info: https://hpiers.obspm.fr/iers/bul/bulc/bulletinc.dat --=20 Pietro Cerutti The FreeBSD Project gahr@FreeBSD.org --v3zjfaexika2lv5m Content-Type: application/pgp-signature; name="signature.asc" -----BEGIN PGP SIGNATURE----- iQLCBAABCgCsFiEE2m3hBqW4VLhd2G1JrdDTjqGSCJ4FAlg9OqkuFIAAAAAAFQAQ cGthLWFkZHJlc3NAZ251cGcub3JnZ2FockBGcmVlQlNELm9yZ18UgAAAAAAuAChp c3N1ZXItZnByQG5vdGF0aW9ucy5vcGVucGdwLmZpZnRoaG9yc2VtYW4ubmV0REE2 REUxMDZBNUI4NTRCODVERDg2RDQ5QUREMEQzOEVBMTkyMDg5RQAKCRCt0NOOoZII nq6mD/9yVyUd2nkFjxBcUJCaVhmSjfK/hAhkwjQP8gZxSKq0Xmpii2WAvYllppD3 ufp+oam5Mkavwt3pdCTnBM5S2YwJhv8Q6q4Shvp+GzWCbYVh6e02RyHxPNvPsqvm m3EVlKsSDPbtRGF/P7wqxIr0OrwRHGOXa/MjV9hQRK8BLtyoqz2eD6Ql33KNNJ+j Jv5vdjuXEGnuRnBO2pNHMuuasCYWvvBDDr7a7LPF3mxymXp4nUMC+Zs4FlHp55RX monZIiK2qGCvAIRzEEV3wORVubdHRGj6zvkQ4BAXYqPNqgynGNtw5GIHS+2L0gL+ ukrttIemaGDlef4BWr5p2q0AkUZXYTCkXpIJGNRPSGRfmK9SQVFsmdcGAsIlf7Vq okFRow8ecu8CXgVaZEKRoFLQroNpOGkjNQEHI2w2EwLu70VSweeihopSn6g2nIas mPp4pcPzJQPUUAkjjIUgWJ7YkZYvD7Dqy58cjPnpgw+MhRLCSpA1PTejqhszaQYy 5Pu5FErOYElsZH/r5dJPuSwCvI4bKC/AAg9AvcGs0JGUMjvgZNM1jFhX2vL5FmMT 6fYjnfe/BpKrOHyOA4BdJidAyYrt9wPgmXB7Dr0h8y925ZCrg7xDOaVtv60S6Gpp 4fos8VJHnbCHqvXX/6Y4624gMM4vz/XqSxeSYhM+pzXWSLnAqw== =CB4G -----END PGP SIGNATURE----- --v3zjfaexika2lv5m-- From owner-freebsd-hackers@freebsd.org Tue Nov 29 10:30:35 2016 Return-Path: Delivered-To: freebsd-hackers@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 4B6BDC5C88B for ; Tue, 29 Nov 2016 10:30:35 +0000 (UTC) (envelope-from stephen.hocking@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 2D4E11ED8 for ; Tue, 29 Nov 2016 10:30:35 +0000 (UTC) (envelope-from stephen.hocking@gmail.com) Received: by mailman.ysv.freebsd.org (Postfix) id 2CB35C5C88A; Tue, 29 Nov 2016 10:30:35 +0000 (UTC) Delivered-To: hackers@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 2C5FEC5C889 for ; Tue, 29 Nov 2016 10:30:35 +0000 (UTC) (envelope-from stephen.hocking@gmail.com) Received: from mail-qt0-x22a.google.com (mail-qt0-x22a.google.com [IPv6:2607:f8b0:400d:c0d::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 DEED11ED6 for ; Tue, 29 Nov 2016 10:30:34 +0000 (UTC) (envelope-from stephen.hocking@gmail.com) Received: by mail-qt0-x22a.google.com with SMTP id p16so150133200qta.0 for ; Tue, 29 Nov 2016 02:30:34 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=mime-version:from:date:message-id:subject:to; bh=dlu26SoZdfzbcH0HPQf8fQgT9yaB8CbTlnMzW6WrtSQ=; b=QLCpzjaTusVlyasGXUFA4/zbIEA4887uYN0YdShbmdKqkxdyEwK5bNvhPYXU9VzW0+ eo/v9ccoAUZ8DgT5vWnXZRA5FN23ylQ0OOP1Hyn7FtYbw5+IYEPnltRmpkXySVaO+3xl DZP7Cj2tXftgXhq4+JRwP7oX8ylrVXfUqA4dy+szPX9oE+KE4HXdOuJMs2b9i3bKD9h6 n1zL0JYHi1d2WDhX9pq6I173clSqZMIwUsdndUFN0SvgJibkmmtC2fDNYIfUMM1mk8B0 UPBfRAOLTQDXD4YwzOEM9IwppeCCVo1x/ljZEnG8mnuZXdX20oWQH0FGZXGVylBjhbLR YwdQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20130820; h=x-gm-message-state:mime-version:from:date:message-id:subject:to; bh=dlu26SoZdfzbcH0HPQf8fQgT9yaB8CbTlnMzW6WrtSQ=; b=b9sz7jZ5x2nBFfhK+YDwr2/cKBGZQOuWLJvVeMb/y//gZgDq4IkccEGNx8F0zDV62E 436hxNjABSCWVnYyhTz059gajBDQoLhx1XtF5TAFuCd61nhjl79LjYgti42DMYRYZTqc o0qIBPus+SwLSjVcHAVVSQCPHyAANb9nUvTrXeBC78naisb9nZXfoBUrdebHFcO7cr6x rEmT54d4CSI2GR6VFzOZ/GavmMUXuYXcNpDd/J8yX/SX54maS2OzjIDxg7EFaTm8Kt8/ KtPkEpoWd05IWggvzMeQOIGTxaeF91UGkUwQF9vz+prhWgA+aupanKiWWTBKKHKtKv2o LLNw== X-Gm-Message-State: AKaTC027iHE0lfUmC8SHLbMj9wNE85pptkGpBEA8lW2WmD5Xz3UoNbEWb8WdVur2sKgBGtPdv6xWQ4cax5YEAA== X-Received: by 10.237.37.202 with SMTP id y10mr23215748qtc.211.1480415433914; Tue, 29 Nov 2016 02:30:33 -0800 (PST) MIME-Version: 1.0 Received: by 10.237.49.166 with HTTP; Tue, 29 Nov 2016 02:30:33 -0800 (PST) From: Stephen Hocking Date: Tue, 29 Nov 2016 21:30:33 +1100 Message-ID: Subject: Bhyve backend for OpenStack To: hackers@freebsd.org Content-Type: text/plain; charset=UTF-8 X-Content-Filtered-By: Mailman/MimeDel 2.1.23 X-BeenThere: freebsd-hackers@freebsd.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: Technical Discussions relating to FreeBSD List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 29 Nov 2016 10:30:35 -0000 Hi all, Having just returned from my local OpenStack User's Group meeting, I was wondering if anyone had looked at this? -- "I and the public know what all schoolchildren learn Those to whom evil is done Do evil in return" W.H. Auden, "September 1, 1939" From owner-freebsd-hackers@freebsd.org Tue Nov 29 10:37:32 2016 Return-Path: Delivered-To: freebsd-hackers@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 CC731C5CAE8 for ; Tue, 29 Nov 2016 10:37:32 +0000 (UTC) (envelope-from aryeh.friedman@gmail.com) Received: from mailman.ysv.freebsd.org (unknown [127.0.1.3]) by mx1.freebsd.org (Postfix) with ESMTP id AB7A413CD for ; Tue, 29 Nov 2016 10:37:32 +0000 (UTC) (envelope-from aryeh.friedman@gmail.com) Received: by mailman.ysv.freebsd.org (Postfix) id AACD3C5CAE7; Tue, 29 Nov 2016 10:37:32 +0000 (UTC) Delivered-To: hackers@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 AA706C5CAE6 for ; Tue, 29 Nov 2016 10:37:32 +0000 (UTC) (envelope-from aryeh.friedman@gmail.com) Received: from mail-io0-x231.google.com (mail-io0-x231.google.com [IPv6:2607:f8b0:4001:c06::231]) (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 7ACB513CC for ; Tue, 29 Nov 2016 10:37:32 +0000 (UTC) (envelope-from aryeh.friedman@gmail.com) Received: by mail-io0-x231.google.com with SMTP id j65so282168699iof.0 for ; Tue, 29 Nov 2016 02:37:32 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=mime-version:in-reply-to:references:from:date:message-id:subject:to :cc; bh=//elxL2Yhp1jfQpVUbzEwUYutXfc2lS/ASXR7m/lG/E=; b=bSTNP1m9SKni9ptZkrXKeCbLZ9UlFjAtz/L9XDBBnBd3xaNBZ+VJ99biNx956njxGJ zIasrcrs13rdRahktLgicBiPMRQfBIUoCzis4REEDwm+YTofNVuAeDrE6FsOOvi/Ml5u 7KPoysGD3EydehSVd3HbyZITuEAXh+Iz/pJ7RVOJo13EY7PvMYGr3hY1sSoV439FcdNE /rbQcUxAwRL4kHzpMW30xaMTC3LHG+yzwkzlYKfRUxIWbSWcvbGyp3u3CxxRZVvaIz6U uKpi561RJstPMwADqU9yN/OB80nE+B3QDZ287j2eJXbVdpId2N6HYd8FYbZmY9d9YcQ9 G51g== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20130820; h=x-gm-message-state:mime-version:in-reply-to:references:from:date :message-id:subject:to:cc; bh=//elxL2Yhp1jfQpVUbzEwUYutXfc2lS/ASXR7m/lG/E=; b=Hin2Am2EMPkHZno7uyLKO8HGf5VKcfw3mUYWjsFKDr1+4z38L3PmglnlhPVclV4kWC CZxzKdszEcRo6yBQrmgR70LuNKnJHvvRmr5oaN15aQloU2/RU+dC1HxzsTg3Wy5dcUFS 1jLZ2/QN0gMamdC+vlxstZN+0yZ+H4nGx/SvaALbeWGqGIAx6TVe0uXKQ64HuP8gIzcA T1h1yJwL0MBvtRl+zU8HUAws5ghwyle4NTpaLoPrN4jV0x4Nx8ywlsxwbq7pLgVSnFfa uYWMUn5pbZhxRdMokrACBCuHZiJZ9JKRC0B73MIhx3LcLjauzrSLVCQ0S3UBfMDn46cv GBfA== X-Gm-Message-State: AKaTC01/X1kZwu14+DIN0v3HWjKkFoonyPpYmO1mtod+oY8fhkQPQi+/s76+wKWlg96iLY1B3RWgSZNCHTuXNw== X-Received: by 10.107.172.134 with SMTP id v128mr23688817ioe.49.1480415851844; Tue, 29 Nov 2016 02:37:31 -0800 (PST) MIME-Version: 1.0 Received: by 10.36.57.212 with HTTP; Tue, 29 Nov 2016 02:37:31 -0800 (PST) In-Reply-To: References: From: Aryeh Friedman Date: Tue, 29 Nov 2016 05:37:31 -0500 Message-ID: Subject: Re: Bhyve backend for OpenStack To: Stephen Hocking Cc: hackers@freebsd.org Content-Type: text/plain; charset=UTF-8 X-Content-Filtered-By: Mailman/MimeDel 2.1.23 X-BeenThere: freebsd-hackers@freebsd.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: Technical Discussions relating to FreeBSD List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 29 Nov 2016 10:37:32 -0000 The best option is to run OS inside of bhyve guests running linux... it would take significant work to make nova run on FreeBSD for example... there are a few other possible options for clouding a FreeBSD host... see a forthcoming issue of BSD Magazine for details On Tue, Nov 29, 2016 at 5:30 AM, Stephen Hocking wrote: > Hi all, > > Having just returned from my local OpenStack User's Group meeting, I was > wondering if anyone had looked at this? > > -- > > "I and the public know > what all schoolchildren learn > Those to whom evil is done > Do evil in return" W.H. Auden, "September 1, 1939" > _______________________________________________ > freebsd-hackers@freebsd.org mailing list > https://lists.freebsd.org/mailman/listinfo/freebsd-hackers > To unsubscribe, send any mail to "freebsd-hackers-unsubscribe@freebsd.org" > -- Aryeh M. Friedman, Lead Developer, http://www.PetiteCloud.org From owner-freebsd-hackers@freebsd.org Tue Nov 29 10:44:40 2016 Return-Path: Delivered-To: freebsd-hackers@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 CE75CC5CD69 for ; Tue, 29 Nov 2016 10:44:40 +0000 (UTC) (envelope-from stephen.hocking@gmail.com) Received: from mailman.ysv.freebsd.org (unknown [127.0.1.3]) by mx1.freebsd.org (Postfix) with ESMTP id A620C1A1F for ; Tue, 29 Nov 2016 10:44:40 +0000 (UTC) (envelope-from stephen.hocking@gmail.com) Received: by mailman.ysv.freebsd.org (Postfix) id A282EC5CD68; Tue, 29 Nov 2016 10:44:40 +0000 (UTC) Delivered-To: hackers@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 A2240C5CD67 for ; Tue, 29 Nov 2016 10:44:40 +0000 (UTC) (envelope-from stephen.hocking@gmail.com) Received: from mail-qt0-x229.google.com (mail-qt0-x229.google.com [IPv6:2607:f8b0:400d:c0d::229]) (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 63EDD1A1E for ; Tue, 29 Nov 2016 10:44:40 +0000 (UTC) (envelope-from stephen.hocking@gmail.com) Received: by mail-qt0-x229.google.com with SMTP id w33so150521015qtc.3 for ; Tue, 29 Nov 2016 02:44:40 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=mime-version:in-reply-to:references:from:date:message-id:subject:to :cc; bh=ObDwgarJ502cBFrMTMwB+hUrCo7oPbTbglVFxVrTekA=; b=q1JDzdUqB+3rKMX/CXni8SNwtR/S5E+rpUGkz7OhqcDPDkdFTVqYYGJiWY0syUpqsU c11hb+Y93eP842++e8dc+SZvugJ5nQoL2BpJa5BdXrOkUB+DOPcDza6A7Q4cC2d1iUjY YcJH2m1wf5mpoSeoA9suwAVLBWFgFgwo2aE8Laklic4PbYtz0HG2y0wtocQnIf+dLipx SGrdj5LPYCXVYotTrm4whRVVvAb/3987Bldai+pZD927XEgJBT5X/QAL/3oHT+PRD2Ea CPA3p//kewo4iSaH5tmC4Z4OTikhzM4vec9OHoGQ5M7JdprE9OO3HpIBI1v+ThQgokef 8Ulg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20130820; h=x-gm-message-state:mime-version:in-reply-to:references:from:date :message-id:subject:to:cc; bh=ObDwgarJ502cBFrMTMwB+hUrCo7oPbTbglVFxVrTekA=; b=AqJ4RGRF5K+TXX97GpwEHXgsL1YrHH7qmmDpT5zMP2Ub7LGIpPFZ01AlAbdPQQFcQ1 xNsPM8orZjVLay2SfiV6p1b0/EqixwC/p5RfpvoJF7I8HvU0BHLH86VUtHc3j8NmTU5T GF6dRfAzI18BWQNGPlqY8IgR7auWnqnzCEVqGG7gQgkuyxprWzjxlBlVgVVpKz9T5k83 YBLzvq/UTWtPAX5idarN3DkPlt3892d++WbZ3RbZM7cQqrty95cE892I8oDktTCBOc2g 8DhzxufJRiSSsBYvw1JGHG1AV0lzxedKEscxP/FT3exRIf3TeNjnaRBtRDP6Pz0lPw3J EiwQ== X-Gm-Message-State: AKaTC01fKVjC/s/3Y+tAFGu7A09R5ZxVJpNwsJxJeU5hmQjPqxfeGSJMg4It+0ftQoXbPgCXOiw+ysQBsXmx7g== X-Received: by 10.237.60.101 with SMTP id u34mr26124278qte.53.1480416279573; Tue, 29 Nov 2016 02:44:39 -0800 (PST) MIME-Version: 1.0 Received: by 10.237.49.166 with HTTP; Tue, 29 Nov 2016 02:44:39 -0800 (PST) In-Reply-To: References: From: Stephen Hocking Date: Tue, 29 Nov 2016 21:44:39 +1100 Message-ID: Subject: Re: Bhyve backend for OpenStack To: Aryeh Friedman Cc: hackers@freebsd.org Content-Type: text/plain; charset=UTF-8 X-Content-Filtered-By: Mailman/MimeDel 2.1.23 X-BeenThere: freebsd-hackers@freebsd.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: Technical Discussions relating to FreeBSD List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 29 Nov 2016 10:44:40 -0000 Well, I figure that if IBM's System Z can have a backend, then why can't FreeBSD? On 29 November 2016 at 21:37, Aryeh Friedman wrote: > The best option is to run OS inside of bhyve guests running linux... it > would take significant work to make nova run on FreeBSD for example... > there are a few other possible options for clouding a FreeBSD host... see a > forthcoming issue of BSD Magazine for details > > On Tue, Nov 29, 2016 at 5:30 AM, Stephen Hocking < > stephen.hocking@gmail.com> wrote: > >> Hi all, >> >> Having just returned from my local OpenStack User's Group meeting, I was >> wondering if anyone had looked at this? >> >> -- >> >> "I and the public know >> what all schoolchildren learn >> Those to whom evil is done >> Do evil in return" W.H. Auden, "September 1, 1939" >> _______________________________________________ >> freebsd-hackers@freebsd.org mailing list >> https://lists.freebsd.org/mailman/listinfo/freebsd-hackers >> To unsubscribe, send any mail to "freebsd-hackers-unsubscribe@freebsd.org >> " >> > > > > -- > Aryeh M. Friedman, Lead Developer, http://www.PetiteCloud.org > -- "I and the public know what all schoolchildren learn Those to whom evil is done Do evil in return" W.H. Auden, "September 1, 1939" From owner-freebsd-hackers@freebsd.org Tue Nov 29 10:47:55 2016 Return-Path: Delivered-To: freebsd-hackers@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 53994C5CF22 for ; Tue, 29 Nov 2016 10:47:55 +0000 (UTC) (envelope-from aryeh.friedman@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 3120E1C8E for ; Tue, 29 Nov 2016 10:47:55 +0000 (UTC) (envelope-from aryeh.friedman@gmail.com) Received: by mailman.ysv.freebsd.org (Postfix) id 307F6C5CF20; Tue, 29 Nov 2016 10:47:55 +0000 (UTC) Delivered-To: hackers@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 302DDC5CF1E for ; Tue, 29 Nov 2016 10:47:55 +0000 (UTC) (envelope-from aryeh.friedman@gmail.com) Received: from mail-io0-x22e.google.com (mail-io0-x22e.google.com [IPv6:2607:f8b0:4001:c06::22e]) (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 ED0C61C8D for ; Tue, 29 Nov 2016 10:47:54 +0000 (UTC) (envelope-from aryeh.friedman@gmail.com) Received: by mail-io0-x22e.google.com with SMTP id j65so282537283iof.0 for ; Tue, 29 Nov 2016 02:47:54 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=mime-version:in-reply-to:references:from:date:message-id:subject:to :cc; bh=jIDAsZhgIo9vCjLHPrQf980q78WSN7MLdAIHuPQczvs=; b=Rx2JnawiXTzSISJ8OwfwEsNCoZhFloTXw83edWj/vw7WMFNUoJCozrZKSITWhZbF87 2xzUn2Fl9O9kl4aHCGhe67ae+c2L5KSitrvWSU0y2WUZswlY7nVbHFgPukQlZbMEKZWQ sucETyofef9I2zhowc/g+CHGrLafw6LaZpHEi7MzgYO9lqhPUUR91az9/EP1cEMj2wsa JQFPgUWt2btjjJCq180ASUbBC5VkeckmCQ+eojoEQ2OoWdiD2Ta38J4J0t1+VWr/GAw1 XLKNLxJTVPCq2ilJVMn+9zWQoVVtDA48yHLbExZ5nWm7xQQf6mh+8ZKMmPS/fsXUB8o6 Gg0w== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20130820; h=x-gm-message-state:mime-version:in-reply-to:references:from:date :message-id:subject:to:cc; bh=jIDAsZhgIo9vCjLHPrQf980q78WSN7MLdAIHuPQczvs=; b=eU6x8VWIQFq+iNH/M5HsKnq5W9o9j6D81lH51pUJ1Mn5xUhHebFmg3+4XpjpCxe48w jplASWSg75+u9G8VtVmsq8zw8ofXbdRpsrImIeXRGrHXACbN0gzirN5XhWz2O5Alxdvd jgxvHmLyO4s09uvkchH0cMDfHWBJ0ZNw3gWj1V1qLvxKRtnHegJyT6JWlbhxhwQPcGy4 AmP5OJ2QzNHGCWnzqd7kqeSA/DTDyynKornwOd8bzjODSmMEsdkpG6xkk4EdTZJBF07/ ddX8lxEx8L4Yb7cjUAN7VnS40ALvUD8/fiaSGPfbdP2aXCho5kTR36W/Lw6v8iaCxnhr AHdA== X-Gm-Message-State: AKaTC02+NnM41wAN44cbw2Anwn8S/+vbuex3qxRdxKFcM4brSoxO3mQbJpYtVfwtzihErFxZG40Pj3TYsDbwMA== X-Received: by 10.36.64.75 with SMTP id n72mr22932199ita.105.1480416474056; Tue, 29 Nov 2016 02:47:54 -0800 (PST) MIME-Version: 1.0 Received: by 10.36.57.212 with HTTP; Tue, 29 Nov 2016 02:47:53 -0800 (PST) In-Reply-To: References: From: Aryeh Friedman Date: Tue, 29 Nov 2016 05:47:53 -0500 Message-ID: Subject: Re: Bhyve backend for OpenStack To: Stephen Hocking Cc: hackers@freebsd.org Content-Type: text/plain; charset=UTF-8 X-Content-Filtered-By: Mailman/MimeDel 2.1.23 X-BeenThere: freebsd-hackers@freebsd.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: Technical Discussions relating to FreeBSD List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 29 Nov 2016 10:47:55 -0000 Z series machines run in x86 mode and then use QEMU on top of Linux so there is almost no porting needed. OS is very very closely tied to Linux (and all the advantages and drawbacks of doing stuff that way)... See web site in my signature for more... currently there is no directly downloadable copy but if you want to try it out just ask me and I will tell you where to get it... by the time the mentioned issue of BSD mag is out though the site will be fully up On Tue, Nov 29, 2016 at 5:44 AM, Stephen Hocking wrote: > Well, I figure that if IBM's System Z can have a backend, then why can't > FreeBSD? > > On 29 November 2016 at 21:37, Aryeh Friedman > wrote: > >> The best option is to run OS inside of bhyve guests running linux... it >> would take significant work to make nova run on FreeBSD for example... >> there are a few other possible options for clouding a FreeBSD host... see a >> forthcoming issue of BSD Magazine for details >> >> On Tue, Nov 29, 2016 at 5:30 AM, Stephen Hocking < >> stephen.hocking@gmail.com> wrote: >> >>> Hi all, >>> >>> Having just returned from my local OpenStack User's Group meeting, I was >>> wondering if anyone had looked at this? >>> >>> -- >>> >>> "I and the public know >>> what all schoolchildren learn >>> Those to whom evil is done >>> Do evil in return" W.H. Auden, "September 1, 1939" >>> _______________________________________________ >>> freebsd-hackers@freebsd.org mailing list >>> https://lists.freebsd.org/mailman/listinfo/freebsd-hackers >>> To unsubscribe, send any mail to "freebsd-hackers-unsubscribe@f >>> reebsd.org" >>> >> >> >> >> -- >> Aryeh M. Friedman, Lead Developer, http://www.PetiteCloud.org >> > > > > -- > > "I and the public know > what all schoolchildren learn > Those to whom evil is done > Do evil in return" W.H. Auden, "September 1, 1939" > > > -- Aryeh M. Friedman, Lead Developer, http://www.PetiteCloud.org From owner-freebsd-hackers@freebsd.org Tue Nov 29 12:04:39 2016 Return-Path: Delivered-To: freebsd-hackers@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 25FE0C58B29 for ; Tue, 29 Nov 2016 12:04:39 +0000 (UTC) (envelope-from outbackdingo@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 0405F1D7A for ; Tue, 29 Nov 2016 12:04:39 +0000 (UTC) (envelope-from outbackdingo@gmail.com) Received: by mailman.ysv.freebsd.org (Postfix) id 0047CC58B28; Tue, 29 Nov 2016 12:04:39 +0000 (UTC) Delivered-To: hackers@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 F40C1C58B26 for ; Tue, 29 Nov 2016 12:04:38 +0000 (UTC) (envelope-from outbackdingo@gmail.com) Received: from mail-io0-x22a.google.com (mail-io0-x22a.google.com [IPv6:2607:f8b0:4001:c06::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 BD6AD1D79 for ; Tue, 29 Nov 2016 12:04:38 +0000 (UTC) (envelope-from outbackdingo@gmail.com) Received: by mail-io0-x22a.google.com with SMTP id a124so284933202ioe.2 for ; Tue, 29 Nov 2016 04:04:38 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=mime-version:in-reply-to:references:from:date:message-id:subject:to :cc; bh=MXDdJ/tdPr4KSTaNXl44Rxq3fL7Aj26IZuBH0aXaEeI=; b=uUyVY+jatXhR3vE/peSX+OEWaHp9X8vbjez3ss6j/dzuOzJaU9r5/tC8nLoxg9QTz2 6LrVP3Lj82suVuQDVLULgrYN5zNqYHF0OuiyrokNNhnBHa7sC4sCoX6oW95FwSZUcQmm FCNwURS4y8IkLYhUKKSQ2FWNk7CH8gPs9UvgJOB0rRoPTyCl8SUk772Nn+59VUkL9kj2 Ru4chxUrxClho+m7q6hRSJgBJIimAMmDx/bMq2Km6/pSyeSz/w76Sg3dxYUgX3idqzbP g89b5DsEdkuJgYTCQfAHqY/OcDA9QmoRUvPjjHIIl3k8soXJ2LMf/YByk7tSOUU+7iyJ EPWQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20130820; h=x-gm-message-state:mime-version:in-reply-to:references:from:date :message-id:subject:to:cc; bh=MXDdJ/tdPr4KSTaNXl44Rxq3fL7Aj26IZuBH0aXaEeI=; b=EDX1BaKuM8uKeIydG914SiSUs9ZtmZVbQ+bHQ83Ppb2ftDWotsigMDVbWjbfHs98R/ LM6wgVukKYGbggnooikY5RisdPIluaZ00P/vzr0ekhQ4NTuWroiBx0RVksQH6KdjmAOp r57u3XEvXlYcnzxUtR2ICjvKyUTezNGmDT3euqTC/T1OTT/lPq9qllsPxHmkealDR7om pKXtBN+dTqIOfqd4yQIdCh+1iv1LP17J4KcenLzOyvKm9Q46aQHiLSlAAY7+iysIjE0D mxikGgRh8Or3NTSB+GWSyO3Rvq5J0E3t5Aqke0f22TTsfF/oMUMZOecnCI5rIePg8HBF O8bA== X-Gm-Message-State: AKaTC013/PyMpizuoJGYE1C1kQfsGoDegZEKJYOr/lb4DxDMvfOuGFvSZL5c+CLUmKfZTAzUJpwLxcnJ7oamuQ== X-Received: by 10.107.16.170 with SMTP id 42mr22960599ioq.93.1480421078114; Tue, 29 Nov 2016 04:04:38 -0800 (PST) MIME-Version: 1.0 Received: by 10.36.158.11 with HTTP; Tue, 29 Nov 2016 04:03:57 -0800 (PST) In-Reply-To: References: From: Outback Dingo Date: Tue, 29 Nov 2016 20:03:57 +0800 Message-ID: Subject: Re: Bhyve backend for OpenStack To: Aryeh Friedman Cc: Stephen Hocking , hackers@freebsd.org Content-Type: text/plain; charset=UTF-8 X-BeenThere: freebsd-hackers@freebsd.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: Technical Discussions relating to FreeBSD List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 29 Nov 2016 12:04:39 -0000 On Tue, Nov 29, 2016 at 6:47 PM, Aryeh Friedman wrote: > Z series machines run in x86 mode and then use QEMU on top of Linux so > there is almost no porting needed. OS is very very closely tied to Linux > (and all the advantages and drawbacks of doing stuff that way)... See web > site in my signature for more... currently there is no directly > downloadable copy but if you want to try it out just ask me and I will tell > you where to get it... by the time the mentioned issue of BSD mag is out > though the site will be fully up > > On Tue, Nov 29, 2016 at 5:44 AM, Stephen Hocking > wrote: > >> Well, I figure that if IBM's System Z can have a backend, then why can't >> FreeBSD? >> >> On 29 November 2016 at 21:37, Aryeh Friedman >> wrote: >> >>> The best option is to run OS inside of bhyve guests running linux... it >>> would take significant work to make nova run on FreeBSD for example... >>> there are a few other possible options for clouding a FreeBSD host... see a >>> forthcoming issue of BSD Magazine for details >>> >>> On Tue, Nov 29, 2016 at 5:30 AM, Stephen Hocking < >>> stephen.hocking@gmail.com> wrote: >>> >>>> Hi all, >>>> >>>> Having just returned from my local OpenStack User's Group meeting, I was >>>> wondering if anyone had looked at this? >>>> >>>> -- >>>> >>>> "I and the public know >>>> what all schoolchildren learn >>>> Those to whom evil is done >>>> Do evil in return" W.H. Auden, "September 1, 1939" >>>> _______________________________________________ >>>> freebsd-hackers@freebsd.org mailing list >>>> https://lists.freebsd.org/mailman/listinfo/freebsd-hackers >>>> To unsubscribe, send any mail to "freebsd-hackers-unsubscribe@f >>>> reebsd.org" >>>> >>> >>> aside from this thread there was a push for bhyve support in libvirt in which openstack prefers it be done via the libvirt layer. being which libvirt does now have support for bhyve, as also it is possible to actually run openstack nova compute on FreeBSD, among other openstack services. that being said however nobody has successfully packaged it up into a complete useable "freebsd" based environment. With enough research and googling youll find the remnant of the efforts out there on the web, I think it really should be taken to further the efforts of a native deployment itself. I think there would be some effort to complete it, but it is not unfathomable to accomplish if the right players got involved to follow it through. >>> >>> -- >>> Aryeh M. Friedman, Lead Developer, http://www.PetiteCloud.org >>> >> >> >> >> -- >> >> "I and the public know >> what all schoolchildren learn >> Those to whom evil is done >> Do evil in return" W.H. Auden, "September 1, 1939" >> >> >> > > > -- > Aryeh M. Friedman, Lead Developer, http://www.PetiteCloud.org > _______________________________________________ > freebsd-hackers@freebsd.org mailing list > https://lists.freebsd.org/mailman/listinfo/freebsd-hackers > To unsubscribe, send any mail to "freebsd-hackers-unsubscribe@freebsd.org" From owner-freebsd-hackers@freebsd.org Tue Nov 29 12:33:46 2016 Return-Path: Delivered-To: freebsd-hackers@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 3E7F6C59BDA for ; Tue, 29 Nov 2016 12:33:46 +0000 (UTC) (envelope-from freebsd-listen@fabiankeil.de) Received: from smtprelay01.ispgateway.de (smtprelay01.ispgateway.de [80.67.31.28]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id 0312D1F91 for ; Tue, 29 Nov 2016 12:33:45 +0000 (UTC) (envelope-from freebsd-listen@fabiankeil.de) Received: from [78.35.129.216] (helo=fabiankeil.de) by smtprelay01.ispgateway.de with esmtpsa (TLSv1.2:AES256-GCM-SHA384:256) (Exim 4.84) (envelope-from ) id 1cBhLw-0002pc-Mu; Tue, 29 Nov 2016 13:17:40 +0100 Date: Tue, 29 Nov 2016 13:17:38 +0100 From: Fabian Keil To: David Cross Cc: freebsd-hackers@freebsd.org Subject: Re: FreeBSD 11 i386 disk deadlock (I think) (now with reproduction steps!) Message-ID: <20161129131738.792efbd1@fabiankeil.de> In-Reply-To: References: <20161128041847.GA65249@charmander> <20161128120046.GP54029@kib.kiev.ua> <20161128144135.10f93205@fabiankeil.de> <20161128160311.GQ54029@kib.kiev.ua> <20161128162240.GM99742@zxy.spb.ru> MIME-Version: 1.0 Content-Type: multipart/signed; micalg=pgp-sha1; boundary="Sig_/ybg1f4osQaFWxurSirOYGci"; protocol="application/pgp-signature" X-Df-Sender: Nzc1MDY3 X-BeenThere: freebsd-hackers@freebsd.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: Technical Discussions relating to FreeBSD List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 29 Nov 2016 12:33:46 -0000 --Sig_/ybg1f4osQaFWxurSirOYGci Content-Type: text/plain; charset=US-ASCII Content-Transfer-Encoding: quoted-printable David Cross wrote: > I wouldn't call this a 'workaround', but the right answer. Something in > the disk io path shouldn't be allocating memory out of the pool that can > cause paging (since any of that could be IN the path for paging). It was > what I assumed Fabian's proposed patch was. That's indeed what the patch does (for geli). Fabian --Sig_/ybg1f4osQaFWxurSirOYGci Content-Type: application/pgp-signature Content-Description: OpenPGP digital signature -----BEGIN PGP SIGNATURE----- Version: GnuPG v2 iEYEARECAAYFAlg9ceMACgkQBYqIVf93VJ1m+gCeJBc5TxgeujQCVeP9446GMwmJ XN8AoMD2Bv6VL/mhIPTETKcYz/iFtUCi =r5ed -----END PGP SIGNATURE----- --Sig_/ybg1f4osQaFWxurSirOYGci-- From owner-freebsd-hackers@freebsd.org Tue Nov 29 15:33:26 2016 Return-Path: Delivered-To: freebsd-hackers@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 976AFC5CB91 for ; Tue, 29 Nov 2016 15:33:26 +0000 (UTC) (envelope-from wlosh@bsdimp.com) Received: from mail-oi0-x229.google.com (mail-oi0-x229.google.com [IPv6:2607:f8b0:4003:c06::229]) (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 60E661627 for ; Tue, 29 Nov 2016 15:33:26 +0000 (UTC) (envelope-from wlosh@bsdimp.com) Received: by mail-oi0-x229.google.com with SMTP id w63so194083999oiw.0 for ; Tue, 29 Nov 2016 07:33:26 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=bsdimp-com.20150623.gappssmtp.com; s=20150623; h=mime-version:sender:in-reply-to:references:from:date:message-id :subject:to:cc; bh=CJFkkX53H2QDE/9lcvuHhzr8vrS1+YKme/vVdZX8xXQ=; b=knkNmg6SgaJXQ0am0KVmuegV7xG70d0Bmug7TfG9TFtvAneT1cqR+jQGc1el+AxzLp RR2Q4joDb/+lDqUSbDcQtFkdmxdiKOLyMrsGvu9P587Wh+U1M2EuXKL9PkDOmIh0z8uf YMqSUhGX5W3Urz+iszbPHpPpCNKnvDPw8qedrsfmvxQPFC/m05XZ0AffXU7K2AOLDXa7 Gb/gKCL2IIwncSnFOOeboqwMyZpYQi5kGKtF+Wv0zCywF/0Sx7Wv689h7SHBDmc5dUWZ /GppC7ZvCVH749w9GvTJ3Y925y0RTQ5BA5loKTnko4W4RYHxu5fOopy9QQa1SG3roo1J Xqlw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20130820; h=x-gm-message-state:mime-version:sender:in-reply-to:references:from :date:message-id:subject:to:cc; bh=CJFkkX53H2QDE/9lcvuHhzr8vrS1+YKme/vVdZX8xXQ=; b=mNeCXWajhFN6jNg56JGqnoMvYx9YqHEcjWyyo+zXc1u5QhoMOEAertYRxRIZMNehi6 hc1QqWQyuh6yqKOEKpICxWRMBxuYLN7jK0VK1W6CJibxdEtJPSNlRKHfKX93o+xQ8umL S4Gax4lWACNT/UvO4dZIO1RIy/Ku+WCr6ouxSslJsoQcTRlyL2WXWbL7/a2ITInqd6uv SplI1+5Q8yHT/X72O/5nmJ6vwQDFCAUAZEgmScBGbxL2uv8/ijfHbPTw8AW85pS9/s1a S5iaXgLji2/HHH/bFFh4J2X5c6Nbo3bkBstB0LtKIN5SpOzr5xhelo3u9JuLKFSDiTS2 cKXQ== X-Gm-Message-State: AKaTC00qwDeyug5lzQjbQFfipRuFn6uppfuaUsI+ezi1vfoHJddHqmVqmDrhV8VjT1b5AvKmxa4we7tsb7TK4w== X-Received: by 10.36.41.81 with SMTP id p78mr24767928itp.60.1480433604946; Tue, 29 Nov 2016 07:33:24 -0800 (PST) MIME-Version: 1.0 Sender: wlosh@bsdimp.com Received: by 10.79.31.199 with HTTP; Tue, 29 Nov 2016 07:33:24 -0800 (PST) X-Originating-IP: [50.253.99.174] In-Reply-To: <20161129131738.792efbd1@fabiankeil.de> References: <20161128041847.GA65249@charmander> <20161128120046.GP54029@kib.kiev.ua> <20161128144135.10f93205@fabiankeil.de> <20161128160311.GQ54029@kib.kiev.ua> <20161128162240.GM99742@zxy.spb.ru> <20161129131738.792efbd1@fabiankeil.de> From: Warner Losh Date: Tue, 29 Nov 2016 08:33:24 -0700 X-Google-Sender-Auth: 5sdVCcT0EkLrAXpfeIFUHCLvtwI Message-ID: Subject: Re: FreeBSD 11 i386 disk deadlock (I think) (now with reproduction steps!) To: Fabian Keil Cc: David Cross , "freebsd-hackers@freebsd.org" Content-Type: text/plain; charset=UTF-8 X-BeenThere: freebsd-hackers@freebsd.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: Technical Discussions relating to FreeBSD List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 29 Nov 2016 15:33:26 -0000 On Tue, Nov 29, 2016 at 5:17 AM, Fabian Keil wrote: > David Cross wrote: > >> I wouldn't call this a 'workaround', but the right answer. Something in >> the disk io path shouldn't be allocating memory out of the pool that can >> cause paging (since any of that could be IN the path for paging). It was >> what I assumed Fabian's proposed patch was. > > That's indeed what the patch does (for geli). I took a look at the patch. I think it's the wrong approach in the detail, though the general idea is good. It seems good enough to work around the problem. I think it would be better to have a pre-allocated area for one write of a certain size. We'd normally not use this at all. In the write path, we'd try to allocate what we need, and if that fails, we push down one write with the pre-allocated area. We queue further writes that fail to allocate the area they need. Once the one write that's using the pre-allocated area is done, we push down another one. This allows us to always make progress. Bonus points if you can do this only for the swapper. To do that latter bit requires help from the swapper. I've been working on some back-pressure into the VM layer to replace the current runningbuf limiter. Part of that work assigns a priority to the I/Os that's visible down the stack. That could be used to determine whether to dip into the reserve or not and may produce better results when we're not in a memory starved situation. It would be better to know you need to do this than to guess based on it being a onetime provider. Warner From owner-freebsd-hackers@freebsd.org Tue Nov 29 15:49:53 2016 Return-Path: Delivered-To: freebsd-hackers@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 E76E5C5C10B for ; Tue, 29 Nov 2016 15:49:53 +0000 (UTC) (envelope-from george+freebsd@m5p.com) Received: from mailhost.m5p.com (mailhost.m5p.com [IPv6:2001:418:3fd::f7]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (Client CN "m5p.com", Issuer "Let's Encrypt Authority X3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id A36A11D8E; Tue, 29 Nov 2016 15:49:53 +0000 (UTC) (envelope-from george+freebsd@m5p.com) Received: from [10.100.0.31] (haymarket.m5p.com [10.100.0.31]) by mailhost.m5p.com (8.15.2/8.15.2) with ESMTP id uATFnjKt072610; Tue, 29 Nov 2016 10:49:51 -0500 (EST) (envelope-from george+freebsd@m5p.com) Subject: Re: Sendmail and STARTTLS To: Gregory Shapiro References: <20161128183554.GA6716@c02pp3c3fvh8.corp.proofpoint.com> <2c7a5fc1-5946-1221-816f-b68079a42078@m5p.com> Cc: freebsd-hackers@FreeBSD.org From: George Mitchell Message-ID: <66835790-9aea-c658-cd6b-09cd792edb62@m5p.com> Date: Tue, 29 Nov 2016 10:49:45 -0500 User-Agent: Mozilla/5.0 (X11; FreeBSD amd64; rv:45.0) Gecko/20100101 Thunderbird/45.5.0 MIME-Version: 1.0 In-Reply-To: <2c7a5fc1-5946-1221-816f-b68079a42078@m5p.com> Content-Type: text/plain; charset=windows-1252 Content-Transfer-Encoding: 7bit X-Spam-Status: No, score=-3.8 required=10.0 tests=ALL_TRUSTED, RP_MATCHES_RCVD autolearn=unavailable autolearn_force=no version=3.4.1 X-Spam-Checker-Version: SpamAssassin 3.4.1 (2015-04-28) on mattapan.m5p.com X-Greylist: Sender passed SPF test, not delayed by milter-greylist-4.4.3 (mailhost.m5p.com [10.100.0.247]); Tue, 29 Nov 2016 10:49:51 -0500 (EST) X-BeenThere: freebsd-hackers@freebsd.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: Technical Discussions relating to FreeBSD List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 29 Nov 2016 15:49:54 -0000 On 11/28/16 14:19, George Mitchell wrote: > [...] >>> What am I doing wrong? How can I enter VERIFY=YES nirvana? -- George > [...] Okay, I have convinced myself that I am misinterpreting what my mail log is telling me. I did a packet capture of the last email message I received from mx2.freebsd.org, and even though the STARTTLS entry tells me "VERIFY=FAIL", the headers and content of the email were encrypted anyway. It's just that either mx2.freebsd.org couldn't verify that mailhost.m5p.com is really mailhost.m5p.com, or the other way around. That's annoying, but the main point of the exercise wasto encrypt the data, and that's what is happening. So I'm happier now, though at some point I would like the identify verification to work correctly as well. Baby steps ... -- George From owner-freebsd-hackers@freebsd.org Tue Nov 29 17:42:37 2016 Return-Path: Delivered-To: freebsd-hackers@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 ABFA2C5C0FB for ; Tue, 29 Nov 2016 17:42:37 +0000 (UTC) (envelope-from gshapiro@freebsd.org) Received: from z.gshapiro.net (z.gshapiro.net [52.4.190.60]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client CN "smtp.gshapiro.net", Issuer "Certificate Authority" (not verified)) by mx1.freebsd.org (Postfix) with ESMTPS id 75F0714DA for ; Tue, 29 Nov 2016 17:42:37 +0000 (UTC) (envelope-from gshapiro@freebsd.org) Received: from c02pp3c3fvh8.corp.proofpoint.com (snv-gw.proofpoint.com [208.86.202.10]) (authenticated bits=0) by z.gshapiro.net (8.16.0.16/8.16.0.16) with ESMTPSA id uATHgN7A085162 (version=TLSv1.2 cipher=DHE-RSA-AES256-GCM-SHA384 bits=256 verify=NO); Tue, 29 Nov 2016 17:42:32 GMT Date: Tue, 29 Nov 2016 09:42:22 -0800 From: Gregory Shapiro To: George Mitchell Cc: freebsd-hackers@FreeBSD.org Subject: Re: Sendmail and STARTTLS Message-ID: <20161129174218.GD5956@c02pp3c3fvh8.corp.proofpoint.com> References: <20161128183554.GA6716@c02pp3c3fvh8.corp.proofpoint.com> <2c7a5fc1-5946-1221-816f-b68079a42078@m5p.com> <66835790-9aea-c658-cd6b-09cd792edb62@m5p.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <66835790-9aea-c658-cd6b-09cd792edb62@m5p.com> User-Agent: Mutt/1.6.0 (2016-04-01) X-BeenThere: freebsd-hackers@freebsd.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: Technical Discussions relating to FreeBSD List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 29 Nov 2016 17:42:37 -0000 On Tue, Nov 29, 2016 at 10:49:45AM -0500, George Mitchell wrote: > On 11/28/16 14:19, George Mitchell wrote: > > [...] > >>> What am I doing wrong? How can I enter VERIFY=YES nirvana? -- George > > [...] > > Okay, I have convinced myself that I am misinterpreting what my mail > log is telling me. I did a packet capture of the last email message > I received from mx2.freebsd.org, and even though the STARTTLS entry > tells me "VERIFY=FAIL", the headers and content of the email were > encrypted anyway. It's just that either mx2.freebsd.org couldn't > verify that mailhost.m5p.com is really mailhost.m5p.com, or the other > way around. That's annoying, but the main point of the exercise wasto > encrypt the data, and that's what is happening. So I'm happier now, > though at some point I would like the identify verification to work > correctly as well. Baby steps ... -- George Yes, you were misinterpreting the logs. STARTTLS provides both encryption and authentication. The verify= tells you the result of the authentication portion. When you connect to mx2.freebsd.org, it is telling you whether your MTA can verify it is actually talking to mx2.freebsd.org by verifying the certificate returned by mx2.freebsd.org and comparing it to the list of trusted signers in confCACERT_PATH. Note that has nothing to do with whether mx2.freebsd.org was able to verify your cert unless you see it in a Received header. From owner-freebsd-hackers@freebsd.org Tue Nov 29 18:49:32 2016 Return-Path: Delivered-To: freebsd-hackers@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 839E4C5C292 for ; Tue, 29 Nov 2016 18:49:32 +0000 (UTC) (envelope-from peter@rulingia.com) Received: from vps.rulingia.com (vps.rulingia.com [103.243.244.15]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client CN "mail.rulingia.com", Issuer "Let's Encrypt Authority X3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 1EF1A1B19 for ; Tue, 29 Nov 2016 18:49:31 +0000 (UTC) (envelope-from peter@rulingia.com) Received: from server.rulingia.com (ppp59-167-167-3.static.internode.on.net [59.167.167.3]) by vps.rulingia.com (8.15.2/8.15.2) with ESMTPS id uATInGB2091169 (version=TLSv1.2 cipher=DHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Wed, 30 Nov 2016 05:49:22 +1100 (AEDT) (envelope-from peter@rulingia.com) X-Bogosity: Ham, spamicity=0.000000 Received: from server.rulingia.com (localhost.rulingia.com [127.0.0.1]) by server.rulingia.com (8.15.2/8.15.2) with ESMTPS id uATIn9RK085919 (version=TLSv1.2 cipher=DHE-RSA-AES256-GCM-SHA384 bits=256 verify=NO); Wed, 30 Nov 2016 05:49:09 +1100 (AEDT) (envelope-from peter@server.rulingia.com) Received: (from peter@localhost) by server.rulingia.com (8.15.2/8.15.2/Submit) id uATIn9Ar085918; Wed, 30 Nov 2016 05:49:09 +1100 (AEDT) (envelope-from peter) Date: Wed, 30 Nov 2016 05:49:09 +1100 From: Peter Jeremy To: George Mitchell Cc: freebsd-hackers@FreeBSD.org Subject: Re: Sendmail and STARTTLS Message-ID: <20161129184909.GB61036@server.rulingia.com> References: MIME-Version: 1.0 Content-Type: multipart/signed; micalg=pgp-sha512; protocol="application/pgp-signature"; boundary="/9DWx/yDrRhgMJTb" Content-Disposition: inline In-Reply-To: X-PGP-Key: http://www.rulingia.com/keys/peter.pgp User-Agent: Mutt/1.7.1 (2016-10-04) X-BeenThere: freebsd-hackers@freebsd.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: Technical Discussions relating to FreeBSD List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 29 Nov 2016 18:49:32 -0000 --/9DWx/yDrRhgMJTb Content-Type: text/plain; charset=us-ascii Content-Disposition: inline Content-Transfer-Encoding: quoted-printable Quick overview: On 2016-Nov-28 13:16:10 -0500, George Mitchell wro= te: >Received: from mx2.freebsd.org (mx2.freebsd.org [8.8.178.116]) > by mailhost.m5p.com (8.15.2/8.15.2) with ESMTPS id uARD0t70051256 > (version=3DTLSv1.2 cipher=3DDHE-RSA-AES256-GCM-SHA384 bits=3D256 verify= =3DFAIL) > for ; Sun, 27 Nov 2016 08:01:01 -0500 (EST) > (envelope-from owner-freebsd-hackers@freebsd.org) This means that you are receeiving mail from FreeBSD.org using TLS (the "version=3D... cipher=3D..." means TLS is active) but your sendmail cannot verify that the certificate presented by FreeBSD.org is valid (verify=3DFAIL). You need to install a set of hashed root certificates in the direectory specified by confCACERT_PATH. Received: from mailhost.m5p.com (mailhost.m5p.com [IPv6:2001:418:3fd::f7]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bit= s)) (Client CN "m5p.com", Issuer "Let's Encrypt Authority X3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id E7C2F1897 for ; Mon, 28 Nov 2016 18:16:17 +0000 (UTC) (envelope-from george+freebsd@m5p.com) =09 This says that mx1.freebsd.org received your mail via TLS and has validated your certificate. >What am I doing wrong? How can I enter VERIFY=3DYES nirvana? -- George Note that you want "verify=3DOK", not YES. Have a read of the STARTTLS section of /usr/share/sendmail/cf/README --=20 Peter Jeremy --/9DWx/yDrRhgMJTb Content-Type: application/pgp-signature; name="signature.asc" -----BEGIN PGP SIGNATURE----- Version: GnuPG v2 iQJ8BAEBCgBmBQJYPc2kXxSAAAAAAC4AKGlzc3Vlci1mcHJAbm90YXRpb25zLm9w ZW5wZ3AuZmlmdGhob3JzZW1hbi5uZXRFRUIyOTg2QzMwNjcxRTc0RTY1QzIyN0Ux NkE1OTdBMEU0QTIwQjM0AAoJEBall6Dkogs0AxQP/isVgecNFkM/bBKNE6zIX4ub /MO56rG3iMUwAup5Lq0KHlWm6dCRVwkzLhm20OL8JjJx2BwlOVmaHTmTapqdKfCj /nst6fFimvGDCrdgvOoYfDoFwWo600bUNIzRr4EPVXs0aGPWbHnay200+3IjW7Xq U9APNImGkdTQbUV7DykHtcHbpJEqNsJPFmA7YJCLgbNwZOFOV2Hb/qxvzqbTU5hd 4NluBANZ8W2NpOVwcuF33uMxKaZCkEAXknVGqbc1tB06yK6oJjq7+Wbzmlr59fM+ h5bcGtSPMROxb7YLZbMhJFqYL3cJv5e+DeELFTfwCcnj/xVsBvZpGnSOu0ESVrJ2 R7FrJVrLQdlxnQI7rodIvata430ei/TfX0zItTFZVFCEsx9d4zjDEoXSvnjksxti WP16uT0GylXC2HSzwOx6AJuOHokdTJ05gqAlAxThNnFWUkwVFZ8QLAALuoshgYDK 2mgIVZU3iYkk9M2LkM8btwcPsEDO/YjNk3cBgfEiLv0bPiabcRXtD2TiUJG1pVGC TqqUKCenUx8iU7G8JNU0/4qcEbCSxEIifvkdn+8qdskQVZax7x1mT+ykPt3pWN6w 4XLKutYqDODMsngZ/YQN1UG7wMDJM4nKzXz2ZJjExZ6e43IGyxTwuapr5jZfkQPJ oB4BwHJkjrdrYyctpdFX =GKF5 -----END PGP SIGNATURE----- --/9DWx/yDrRhgMJTb-- From owner-freebsd-hackers@freebsd.org Tue Nov 29 19:37:17 2016 Return-Path: Delivered-To: freebsd-hackers@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 2FA24C5C01A for ; Tue, 29 Nov 2016 19:37:17 +0000 (UTC) (envelope-from george+freebsd@m5p.com) Received: from mailhost.m5p.com (mailhost.m5p.com [IPv6:2001:418:3fd::f7]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (Client CN "m5p.com", Issuer "Let's Encrypt Authority X3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id C6025151F for ; Tue, 29 Nov 2016 19:37:16 +0000 (UTC) (envelope-from george+freebsd@m5p.com) Received: from [10.100.0.31] (haymarket.m5p.com [10.100.0.31]) by mailhost.m5p.com (8.15.2/8.15.2) with ESMTP id uATJb7cn075252; Tue, 29 Nov 2016 14:37:13 -0500 (EST) (envelope-from george+freebsd@m5p.com) Subject: Re: Sendmail and STARTTLS To: Peter Jeremy References: <20161129184909.GB61036@server.rulingia.com> Cc: freebsd-hackers@FreeBSD.org From: George Mitchell Message-ID: <6917a66d-b6c0-1a45-a008-56ac1832c8d7@m5p.com> Date: Tue, 29 Nov 2016 14:37:07 -0500 User-Agent: Mozilla/5.0 (X11; FreeBSD amd64; rv:45.0) Gecko/20100101 Thunderbird/45.5.0 MIME-Version: 1.0 In-Reply-To: <20161129184909.GB61036@server.rulingia.com> Content-Type: text/plain; charset=windows-1252 Content-Transfer-Encoding: 7bit X-Spam-Status: No, score=-3.8 required=10.0 tests=ALL_TRUSTED, RP_MATCHES_RCVD autolearn=unavailable autolearn_force=no version=3.4.1 X-Spam-Checker-Version: SpamAssassin 3.4.1 (2015-04-28) on mattapan.m5p.com X-Greylist: Sender passed SPF test, not delayed by milter-greylist-4.4.3 (mailhost.m5p.com [10.100.0.247]); Tue, 29 Nov 2016 14:37:14 -0500 (EST) X-BeenThere: freebsd-hackers@freebsd.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: Technical Discussions relating to FreeBSD List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 29 Nov 2016 19:37:17 -0000 On 11/29/16 13:49, Peter Jeremy wrote: > Quick overview: > On 2016-Nov-28 13:16:10 -0500, George Mitchell wrote: >> Received: from mx2.freebsd.org (mx2.freebsd.org [8.8.178.116]) >> by mailhost.m5p.com (8.15.2/8.15.2) with ESMTPS id uARD0t70051256 >> (version=TLSv1.2 cipher=DHE-RSA-AES256-GCM-SHA384 bits=256 verify=FAIL) >> for ; Sun, 27 Nov 2016 08:01:01 -0500 (EST) >> (envelope-from owner-freebsd-hackers@freebsd.org) > > This means that you are receeiving mail from FreeBSD.org using TLS > (the "version=... cipher=..." means TLS is active) but your sendmail > cannot verify that the certificate presented by FreeBSD.org is valid > (verify=FAIL). You need to install a set of hashed root certificates > in the direectory specified by confCACERT_PATH. > > Received: from mailhost.m5p.com (mailhost.m5p.com [IPv6:2001:418:3fd::f7]) > (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) > (Client CN "m5p.com", Issuer "Let's Encrypt Authority X3" (verified > OK)) > by mx1.freebsd.org (Postfix) with ESMTPS id E7C2F1897 > for ; Mon, 28 Nov 2016 18:16:17 +0000 > (UTC) > (envelope-from george+freebsd@m5p.com) > > This says that mx1.freebsd.org received your mail via TLS and has validated > your certificate. > >> What am I doing wrong? How can I enter VERIFY=YES nirvana? -- George > > Note that you want "verify=OK", not YES. Have a read of the STARTTLS > section of /usr/share/sendmail/cf/README > Thanks for the help! -- George From owner-freebsd-hackers@freebsd.org Tue Nov 29 21:36:00 2016 Return-Path: Delivered-To: freebsd-hackers@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 548E2C5BD8F; Tue, 29 Nov 2016 21:36:00 +0000 (UTC) (envelope-from julian@freebsd.org) Received: from vps1.elischer.org (vps1.elischer.org [204.109.63.16]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client CN "vps1.elischer.org", Issuer "CA Cert Signing Authority" (not verified)) by mx1.freebsd.org (Postfix) with ESMTPS id 1B58E1214; Tue, 29 Nov 2016 21:35:59 +0000 (UTC) (envelope-from julian@freebsd.org) Received: from Julian-MBP3.local (ppp121-45-230-194.lns20.per1.internode.on.net [121.45.230.194]) (authenticated bits=0) by vps1.elischer.org (8.15.2/8.15.2) with ESMTPSA id uATLZnh6056339 (version=TLSv1.2 cipher=DHE-RSA-AES128-SHA bits=128 verify=NO); Tue, 29 Nov 2016 13:35:52 -0800 (PST) (envelope-from julian@freebsd.org) To: freebsd-java@freebsd.org, freebsd From: Julian Elischer Subject: why does java need /proc? Message-ID: <36b30691-2e1f-bec4-4960-b69826b1b1fc@freebsd.org> Date: Wed, 30 Nov 2016 05:35:43 +0800 User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.11; rv:45.0) Gecko/20100101 Thunderbird/45.5.0 MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8; format=flowed Content-Transfer-Encoding: 7bit X-BeenThere: freebsd-hackers@freebsd.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: Technical Discussions relating to FreeBSD List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 29 Nov 2016 21:36:00 -0000 DOes anyone know Why the port suggests mounting /proc? Seems to work fine without it. (so far) Julian From owner-freebsd-hackers@freebsd.org Tue Nov 29 22:58:20 2016 Return-Path: Delivered-To: freebsd-hackers@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 2ADEEC5CC11; Tue, 29 Nov 2016 22:58:20 +0000 (UTC) (envelope-from jkim@FreeBSD.org) Received: from freefall.freebsd.org (freefall.freebsd.org [IPv6:2610:1c1:1:6074::16:84]) by mx1.freebsd.org (Postfix) with ESMTP id 3AF82106E; Tue, 29 Nov 2016 22:58:19 +0000 (UTC) (envelope-from jkim@FreeBSD.org) From: Jung-uk Kim Subject: Re: why does java need /proc? To: Julian Elischer , freebsd-java@freebsd.org, freebsd References: <36b30691-2e1f-bec4-4960-b69826b1b1fc@freebsd.org> Message-ID: Date: Tue, 29 Nov 2016 17:58:14 -0500 User-Agent: Mozilla/5.0 (X11; FreeBSD amd64; rv:45.0) Gecko/20100101 Thunderbird/45.5.0 MIME-Version: 1.0 In-Reply-To: <36b30691-2e1f-bec4-4960-b69826b1b1fc@freebsd.org> Content-Type: multipart/signed; micalg=pgp-sha256; protocol="application/pgp-signature"; boundary="huQjNCnH4AQFk27sLUoi9eRcLTs3Gbt5h" X-BeenThere: freebsd-hackers@freebsd.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: Technical Discussions relating to FreeBSD List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 29 Nov 2016 22:58:20 -0000 This is an OpenPGP/MIME signed message (RFC 4880 and 3156) --huQjNCnH4AQFk27sLUoi9eRcLTs3Gbt5h Content-Type: multipart/mixed; boundary="6aDTrcgfokeUrwuXA6X276SRx9fs2sFfv"; protected-headers="v1" From: Jung-uk Kim To: Julian Elischer , freebsd-java@freebsd.org, freebsd Message-ID: Subject: Re: why does java need /proc? References: <36b30691-2e1f-bec4-4960-b69826b1b1fc@freebsd.org> In-Reply-To: <36b30691-2e1f-bec4-4960-b69826b1b1fc@freebsd.org> --6aDTrcgfokeUrwuXA6X276SRx9fs2sFfv Content-Type: text/plain; charset=windows-1252 Content-Transfer-Encoding: quoted-printable On 11/29/2016 16:35, Julian Elischer wrote: > DOes anyone know Why the port suggests mounting /proc? >=20 > Seems to work fine without it. (so far) It is not absolutely necessary any more. However, it is still used in few places, e.g., Serviceability Agent. Jung-uk Kim --6aDTrcgfokeUrwuXA6X276SRx9fs2sFfv-- --huQjNCnH4AQFk27sLUoi9eRcLTs3Gbt5h Content-Type: application/pgp-signature; name="signature.asc" Content-Description: OpenPGP digital signature Content-Disposition: attachment; filename="signature.asc" -----BEGIN PGP SIGNATURE----- iQEzBAEBCAAdFiEEl1bqgKaRyqfWXu/CfJ+WJvzb8UYFAlg+CAoACgkQfJ+WJvzb 8Ub3mwgAgqrpTbXuBwqwmsMp/FP4513Zn7Iiq+0LjubVNbTx833PQPss73MnJBmE j3XghYMENKSaZ9tBn2LoqF8bVI0Fgw7mR4ayofwOxW0W8TZ0iID4yCUJDqr/M4p+ jOZWS8toFL1hSt/1vbm1HNlER+vy+VUo8N71ygG7HXVfkxE8nYpMepW+FyJ5OIuS 5kL3W1g8uxcX5uF33UUX9Z+R1v2Emns9MKTnvzci6AIVeHgBlMmeRviu12oFyV9U C6+U+mz1CUGs11FocixcOQ9ht13jnEXIZIMwFkNLrQmaegeDjV7yWCRSMf9rwnjK Dy+MYCeE1YkZdfIyn2g0UUbzprMPHw== =qJB4 -----END PGP SIGNATURE----- --huQjNCnH4AQFk27sLUoi9eRcLTs3Gbt5h-- From owner-freebsd-hackers@freebsd.org Wed Nov 30 16:28:54 2016 Return-Path: Delivered-To: freebsd-hackers@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 CA20CC5DBF4; Wed, 30 Nov 2016 16:28:54 +0000 (UTC) (envelope-from jkim@niksun.com) Received: from APC01-HK2-obe.outbound.protection.outlook.com (mail-hk2apc01on0118.outbound.protection.outlook.com [104.47.124.118]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-SHA384 (256/256 bits)) (Client CN "mail.protection.outlook.com", Issuer "Microsoft IT SSL SHA2" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 1A4881F2E; Wed, 30 Nov 2016 16:28:53 +0000 (UTC) (envelope-from jkim@niksun.com) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=niksunipl.onmicrosoft.com; s=selector1-niksun-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version; bh=R3ZmO8zPWUDVDOKv7y8UMIp7bDRh1psHeMxnsHPtsVs=; b=kb319DqSc+my2iSPqsuRfpjEIACPdmXqqiOeVq4omBcR+DUZup/vjrvYHv4vbx4wKgqW+YhL+FoTLrQkMvaiH6s5D6l4+m1bv+srWSpFInCsfCDzp03I7qKSZZOXlygRFk5DJVp/qA6/cCv+fH6L/kz2jSZSHbQAaOyTpPi4IpA= Authentication-Results: spf=none (sender IP is ) smtp.mailfrom=jkim@niksun.com; Received: from hammer.pct.niksun.com (71.168.218.4) by PS1PR0301MB2012.apcprd03.prod.outlook.com (10.167.50.146) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384_P384) id 15.1.761.5; Tue, 29 Nov 2016 21:50:59 +0000 Subject: Re: why does java need /proc? To: Julian Elischer , , freebsd References: <36b30691-2e1f-bec4-4960-b69826b1b1fc@freebsd.org> From: Jung-uk Kim Organization: NIKSUN, Inc. Message-ID: Date: Tue, 29 Nov 2016 16:50:39 -0500 User-Agent: Mozilla/5.0 (X11; FreeBSD amd64; rv:45.0) Gecko/20100101 Thunderbird/45.5.0 MIME-Version: 1.0 In-Reply-To: <36b30691-2e1f-bec4-4960-b69826b1b1fc@freebsd.org> Content-Type: text/plain; charset="windows-1252" Content-Transfer-Encoding: 7bit X-Originating-IP: [71.168.218.4] X-ClientProxiedBy: DM2PR0801CA0013.namprd08.prod.outlook.com (10.162.18.23) To PS1PR0301MB2012.apcprd03.prod.outlook.com (10.167.50.146) X-MS-Office365-Filtering-Correlation-Id: b8047cc7-fa53-4481-31c3-08d418a1cf3c X-Microsoft-Antispam: UriScan:; BCL:0; PCL:0; RULEID:(22001); SRVR:PS1PR0301MB2012; X-Microsoft-Exchange-Diagnostics: 1; PS1PR0301MB2012; 3:L6VoPH3Mz2YZ9n3RRbPNTl2Dt0ChPxkvuQw3nf6qgF/0RZnTU8YVItbe7Av8HluNpdzmZ8F23FbmVI2qzenx+O0nnESRU2ilbt7Czs+4QG5fDZJKrdpb9wz6dUUAc+TmEaamSHc9w6yNaVOSV0Ahu2zCKF21niNImEAqPLEQGmqxb84YfPYANR9bixBWWNADKdkiwpz2fQjPzKrf4crTuFkOhS3NGfZ+JdVOLsl/3X4J7FUincsgzyqrsHJTKpg726OQi0oD1LKegxFC57MQtg== X-Microsoft-Exchange-Diagnostics: 1; PS1PR0301MB2012; 25:XNzlRjeV228rwTQato2Cr3bDDcc6SZgvzXnPwcqUMlOVI1QRwheBQgfV4iuBjm4hYLkAZ9yjeX/IT9LFYhPLMhHLw+YXTaPLdXnrclyE4YhB+G7cDTMHWbgjS5SVbmuWzNwuA3EvkKu+0qmLhxFkT6SQHNMP78Wz5CUnmbSj1D2aiRare1aUHwl8EoIupoOY9TNB4gMZ8+yvyUFIcZmVCUQKGK3L5uBuXspHHk+loAvXKvDfQF1+N0tK2BpaSf24iNtwQ8k9EZHOLgiMSzc3rMkaqRk4UW4N5VYkjXA0R1jAmQSh9z6ZXweyiPtcRnDEh7b3JLkCmm+BZ81ELmqurFsDmgmug5+Q6toJKU5E3EAYs8mHWcuoTbjgi0swrT3hlDVpmQj1XFH1cnL69AjC5t7QYrNDfxWuGqkrY2J5MDydG53ICxstpSRWjRhOAGtGClCJ8o7n9pU5+qPZ8Rrvx0+SGNgBQSzw2iKyyC024AKqNOorPIF781yIH3LTMK+1zRsVZjVAl5mQdTfFIrLgkhhDPNj8TcgpYrEFMI09BFo/+cEQWNSe1IXAOl5TC3+YnMLAqGHI1qPcnd7Qekq5KoI9puTQGUqc5V9piJmkebLWHYhKFDny8e82W4MQoRbbbWe6RAp3te4t+sPply6FCJZAs87Ak7+ZRq9ZWhnDScUvXi5BuFiAJJzi1oHIb1aEitFzICU+F9O4pR/niAweY3GUgqSLOoSG9ZAR54A1rvxz5r+52TCe9dAHF2SCPAUH X-Microsoft-Exchange-Diagnostics: 1; PS1PR0301MB2012; 31:4zsDwu4kLb6K6G1Mhpfhj8zBpUYB4qwrEyGJ2iZ4CTUV2rNDJ93CtOuFvY04ee8TJ8l+5Y3xdni1cXj7v/UlTwWTcpfrSGV4eIFViqUab+B3Kk+cU7hNx6aZ3ViepToy+bvepntamKuoFtc37c03a+5LwgqP5Hb/TDLntEOIBqmpU7WS84Gw6CkbFwNzFqrFZranEXQD1gDx3c+cpp/3UkJLJ4QykW8CtVnpZwRavsdEQe+WQQY+wN4Oq3FmfVKtBzhqJGEIBXKrRQLhcSKX8Q==; 20:gpWTHrZOY8hVAvm34USWu5DWiOIku9nGOih170jPHvRQJHea+GCB205xw2OTdzdgFvX0Us2vAr2sonJwxUevcP/1wdiV4tXJHMoHUza105vQtsSXFxDtbQhACOP67VmgLLg7MDXkzK81qYDuka9tecMa1++ZhUK4glA682+q2OEPFAkV+CuwlVoIXgYeEnG5lqHUdmqYXy8HJZZJ128kSw3MapCh/Ax+R4Nk7nq/gYSIZ9/240oLswikwZLmKEyD6HKL9qNe+GHdyZAwmxIHyExW1Ms5iCp4D+9Bv7Fqf3sxDkT9hgkh2QyQUe5wObY/Ri3UjdKZruk/zgvllQuxewimc9OH/lT2CLG9VIjjRnoqLYzg+YyIKbbjCWTmkWyBvdPBoCWS1VWaOn0KM2THqEpIjQkaMW63SoYuKcvKcNetBhN9YQH+RZTJb/3uscbGUKtu0ZnJUdWAEy8hdxgNVQuEc04CgSvwnKQt2gpy4iREEC2Pnr8m4EKoqtzD7RQg X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-Test: UriScan:; X-Exchange-Antispam-Report-CFA-Test: BCL:0; PCL:0; RULEID:(601004)(2401047)(5005006)(8121501046)(10201501046)(3002001)(6041248)(20161123560025)(20161123564025)(20161123562025)(20161123555025)(2016111802025)(6043046)(6042181)(6072148); SRVR:PS1PR0301MB2012; BCL:0; PCL:0; RULEID:; SRVR:PS1PR0301MB2012; X-Microsoft-Exchange-Diagnostics: 1; PS1PR0301MB2012; 4:5JyUhw/XVhBd4pbiaHFRey50iAySrHo/CM/eY6lhXWGTr6MAAYUFW8qRFmx4x/SEc7AtEzyqEwx4Wd9KrjpikR1xhGjTzW+gFXulO9FC4iKSsczj5sYxADvhsqEMXLho1VGSM6JkslEP+Lhf1TZh1eSZalEL45nYSJmH3Rme4bn7Y9yPd64ACzpM8XynhS+xWLAkj0QU1q90UpeJEBJAKAlpO1u+qKTk4pjMNB1m/D5p8Tvyh+BbIkmPSU1ihzsMLMxYYWwTuF2GIbH+gDZxAk7IQnCYbXLs0NmKTaTL9rlAixP0kq8kMCweoTMAOxvzkkNZCJnLCBhffXDSxDv097zDtLP+yPypK/JjDyzOJB52ZPdzeWigktPqPBzpBAGrfB9nTsJOOKnXUC88rTSJgrKqRu9xk9TLd5lWle5t7r7ip/JKDrYWf+UxIgnhv4C1EVkyPLwcnkO1IP8tZBW4tPMviJFIqSalPTiVXeX5hHgJGOF7xBVTPi7ltJhp030hnpBfN2gYzuBJV5uFK0V1bdrEcEBofu8wja1sFcK5EvgCp41sMjXDWBdGZ6POnWuVpLSwaA7UStxDGJBJ/incTbC+NqL9IpfNQnU9bsf0tEGofqiQ6ZuLjs/0vwC9LjSS X-Forefront-PRVS: 01415BB535 X-Forefront-Antispam-Report: SFV:NSPM; SFS:(10019020)(4630300001)(6009001)(7916002)(199003)(24454002)(189002)(76176999)(229853002)(4001350100001)(5001770100001)(2950100002)(36756003)(2906002)(7736002)(558084003)(107886002)(189998001)(38730400001)(8676002)(31696002)(230700001)(92566002)(97736004)(3846002)(33646002)(305945005)(6116002)(450100001)(83506001)(65956001)(65806001)(86362001)(66066001)(7846002)(31686004)(105586002)(101416001)(106356001)(65826007)(42186005)(68736007)(733004)(5660300001)(47776003)(50466002)(23746002)(54356999)(50986999)(6486002)(6666003)(81156014)(81166006)(64126003); DIR:OUT; SFP:1102; SCL:1; SRVR:PS1PR0301MB2012; H:hammer.pct.niksun.com; FPR:; SPF:None; PTR:InfoNoRecords; A:1; MX:1; LANG:en; Received-SPF: None (protection.outlook.com: niksun.com does not designate permitted sender hosts) X-Microsoft-Exchange-Diagnostics: =?Windows-1252?Q?1; PS1PR0301MB2012; 23:zZaKx33gcDzXVACwHid3Fd0L2qi2N3eVd09?= =?Windows-1252?Q?oCd6J7tYXeZZIZCQnmVtt1vaOVQTqE43R6/rg9TKqKNDnJ2gmypYFWjR?= =?Windows-1252?Q?WBaiKtMp2dzADtzEdxvm2kgliIhCdRmpG6/U2XF/2ZgmTGuyZ1Vop1Ep?= =?Windows-1252?Q?wgQF/iBv21WOsUm9qppDz1TQh9Ct0M8OxDCdS5aBx1PYx04nVeIRIUAz?= =?Windows-1252?Q?8Im2ryD5lG9tFvz1ePN05Lic+lIVZz02xpzaYEI5mNNGQWxUkeY725UF?= =?Windows-1252?Q?u4TFAK6u4DTrIba+1UqHakGyEmZ3+Sw1oRdwngkplOBy0Y0I06mmEUIk?= =?Windows-1252?Q?VPTE0fcyNeKTXvV/nnB9s7xdtGEwYPH0pQwzTUV6dj8U9GYopKnipv2m?= =?Windows-1252?Q?UHD/Zem6vkRi0i4QuZEuGHW2vTIRN3aVVeQJRRrl1y/D+pmopBSKZN9Z?= =?Windows-1252?Q?EO34tCB20r50lI+PwJxuJLSC8urxRRQ/GyKBUPDvNrcrF4RX74+u31nX?= =?Windows-1252?Q?CYp0adcaZb9i5whhVx9tyfuJRYPPGjS1N3ElYrY7S++a+Sn0IenkoMOf?= =?Windows-1252?Q?uDVikM9sx2gUGEXsFdxY9j95PxirxxPBGJyz/Y/jXQpmvahYj1VPFE48?= =?Windows-1252?Q?Q+x7SA5w17fjxD+CWPWs08xsb41Z6iRRCZxyEXw9aC30kmAuvRtBRdpI?= =?Windows-1252?Q?iNB4ictWw0U6Ez0041s6q4KPsrlMpNKzzlTrRtLTdsT9yF4229TCFGE3?= =?Windows-1252?Q?Bu1AjSlrSfb39h+m7Qo2mVHvqqFjrCvLy2eJxXHj6cl6kLO0/6QJHPCV?= =?Windows-1252?Q?kGAAwE2tuy2Jvv94ElCN21Nt1MOq9x9DHkeIWdRMXTt+67+d/TF616JZ?= =?Windows-1252?Q?XjT7c2tSirmBoYppjjVoHggTTH95qISXNtR3jtaB0NoTImQAoM8abkX6?= =?Windows-1252?Q?sEYC5lhery0AMMUsuGeYOTZq5BFX2pglIWZ5ysUENWk2LNk8LPhM6Zb0?= =?Windows-1252?Q?xrehXSRYnzxy0sTKzTF8b9MaAkFXVM95js0lzkca8RYNwIq07lgEl2a7?= =?Windows-1252?Q?8fR7f5WXvV+N0dFo46wOM7Z9V9R0Urdo7n5eJDf+79ryfLGhFq+tgtf0?= =?Windows-1252?Q?E+7of6/zqPa1WtXkv62w0OpHOjTjQxDLWXXYAo8nwDOLi8PUWz5Lcs/w?= =?Windows-1252?Q?t9Qzjn+uvE2pH+yE/NFSXxvm88yFBQu4EgY6sx3qURqbwVhSeW72PIAv?= =?Windows-1252?Q?PcNPULR6r/5I0PBYykTqjdK/MxmtXve5e0vDET8ylLNxpVIGxltZKcFC?= =?Windows-1252?Q?XOTIRccjXZ5Ew/6pi9ed0dIEWZMUXE79XxLEeEuBPUidWGwxpZVWL/Ed?= =?Windows-1252?Q?cX7TbKIgaBGwhhlbRDYMfZGraEh2as3IeeQ=3D=3D?= X-Microsoft-Exchange-Diagnostics: 1; PS1PR0301MB2012; 6:ihOxeAtnVA05VfKJd7DKZsnTSL6kmZj4dN5O41NwJLsqB31xaSuHVFPNI7tAhzcW8z/L4ULqoJQZEwFeTWpx+kD/Nc+CDW4jGIVEtLE2uYeF+hBsjHEdSQ41SewOCVy1GltCjb94lv0wkfN5CvpYg8SbQ7H7CKv4MISNnr3xBFH1whSCcrwaJFbaZYXSwemcXRbMfpB73pI/Oel+lZdwP19TtgT9gACzYU/jVWj9guFcuw/eaIPx5mBuhOZY/2HRvQzRdbBXNw17tRQgGlmiUv+r/6VCecFYx6FP93IhZt5of0LuTt4HfxDacoFWoExDSmBhW6AJzWjqMLWu7Z5Fw8YNY0y92HS1NY+JaexvPb8b99/WcaDsZl7ibkzJEL5KrX+xxsCYi+QiggsP4zPJ/HacUJt9VQbYnuOguHWAja2LwS1juPiSsSYLPFvtko6HYC+p/zvB2DFaQfHEF541f2v8r2CXnP06Xiyvr4A5nDY=; 5:rkQnsO/9Uo9C/RCRn1qZkXNXDd+VU2Oe0EoClOtcT+0+2DEg11UzGOTJryJVGb7ckiYj9hecNTk7Hq+OFeDm5U9tcI8fwh/AacLiVvAdqp/9nFCOsyA2O6GvWCd+HXHjIP0rZ3VXZp7v6b6RN+3VbY3hxoJcfxo7lCtKx03zUh4=; 24:GWc0eWsKz3v/P8HbFnQ1oiqTdkb34kqhGU+/6UHUHa2dvLR6SfANNKGferyS967eCppw88f1NkeGvic01kgvadqil4EnsBvwrY0Z/Rj+37Y= SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-Microsoft-Exchange-Diagnostics: 1; PS1PR0301MB2012; 7:pXwr8gqkLdCKUvCXbh9JPj68T9TZy0uSXWclImjfuS9pjGtZF1Jx3O1/kY5lhFmAQDSDYFQ2beUE+ji9CincXw6c93PEgm2aNuqe7XES6sER/0ZhKghfp8GIqhIb8ga9carb39pZYQRuApP/7dO+lTbpVg0XIHnjsUriehGzhoHUIpsUwMz3plZtSAflJe+MCqKTiuZLq1M8iN7scLzgjrbKMAPVREaXybBhnwVvyW37ts5DBiefg2X+kH1qfAsATuARC5ms3aqLWmcDaMGiTj/Thf072YdUOmYwkSukynByxA/4MCvLWWdjnG8O2stgMYrewXuPrU+gsTSRxzBaZIK96tr2ZUZ6yy3LZwXMZv4rXEbClGAXUhHayCN2C6WE2ERdkF2640tXLn6TElx61Gmy5hl1ZuWYKcEqrKUoN1u2vedFr+5EMvSgFzvmgMoMdY+purkXADcx5wcw7lilqA== X-OriginatorOrg: niksun.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 29 Nov 2016 21:50:59.9352 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-Transport-CrossTenantHeadersStamped: PS1PR0301MB2012 X-Mailman-Approved-At: Wed, 30 Nov 2016 17:07:51 +0000 X-BeenThere: freebsd-hackers@freebsd.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: Technical Discussions relating to FreeBSD List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 30 Nov 2016 16:28:54 -0000 On 11/29/2016 16:35, Julian Elischer wrote: > DOes anyone know Why the port suggests mounting /proc? > > Seems to work fine without it. (so far) It is not absolutely necessary any more. However, it is still used in few places, e.g., Serviceability Agent. Jung-uk Kim From owner-freebsd-hackers@freebsd.org Thu Dec 1 22:02:35 2016 Return-Path: Delivered-To: freebsd-hackers@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 DD270C61794 for ; Thu, 1 Dec 2016 22:02:35 +0000 (UTC) (envelope-from che@bein.link) Received: from mail.bein.link (bein.link [37.252.124.82]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id A97341583 for ; Thu, 1 Dec 2016 22:02:35 +0000 (UTC) (envelope-from che@bein.link) Received: from mail.bein.link (unknown [172.16.32.33]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by mail.bein.link (Postfix) with ESMTPSA id A955924C485 for ; Thu, 1 Dec 2016 21:55:27 +0000 (UTC) Mime-Version: 1.0 Date: Thu, 01 Dec 2016 21:55:27 +0000 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-ID: <3c3e43918575efb81650d755ea3cfac8@mail.bein.link> X-Mailer: RainLoop/1.10.5.192 From: "Maxim Filimonov" Subject: bsdinstall: add support for "hidden" networks. To: freebsd-hackers@freebsd.org DKIM-Signature: v=1; a=rsa-sha1; c=relaxed/relaxed; d=bein.link; s=mail; t=1480629327; bh=Q3w6RBoa0B2IzlUwJBjK8sDsTzw=; h=Mime-Version:Date:Content-Type:Content-Transfer-Encoding:Message-ID:From:Subject:To; b=CBnwf9ctyZH4TWBe7fGDmTs/Aa5SRVcq9lMDCDdIxAS7jXq0O1GDpcrKuKXIBuhVqmsii6/slfgTVbeqCxFjg7BD/MuLyzCjSrrzZ0xkViDSpUJInaaIGX2DAXQMnPiuCJWII7QO6KQ7ux5Ccdp6SjJRRWbAOVeYl4XV9r2QS1U= X-BeenThere: freebsd-hackers@freebsd.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: Technical Discussions relating to FreeBSD List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 01 Dec 2016 22:02:36 -0000 Hello everyone. =0AI have submitted a bug on bsdinstall as stated in the = subject. You can find the bug there: https://bugs.freebsd.org/bugzilla/sh= ow_bug.cgi?id=3D214933=0A=0ACould anyone look at it, maybe share your tho= ughts, maybe even commit?=0A=0A=0A=0A=0A-----=0Awbr, Maxim V Filimonov From owner-freebsd-hackers@freebsd.org Fri Dec 2 06:58:56 2016 Return-Path: Delivered-To: freebsd-hackers@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 D809AC62AAF for ; Fri, 2 Dec 2016 06:58:56 +0000 (UTC) (envelope-from adrian.chadd@gmail.com) Received: from mail-io0-x232.google.com (mail-io0-x232.google.com [IPv6:2607:f8b0:4001:c06::232]) (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 A34951C4A for ; Fri, 2 Dec 2016 06:58:56 +0000 (UTC) (envelope-from adrian.chadd@gmail.com) Received: by mail-io0-x232.google.com with SMTP id c21so426771574ioj.1 for ; Thu, 01 Dec 2016 22:58:56 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=mime-version:in-reply-to:references:from:date:message-id:subject:to :cc; bh=zqEcuWbti8adWLICutY32lh3b0XGQ7eqkVxqOnyTaZc=; b=x6HuzrGGesJfYdzZ6V0CsZzm8Ke64fZiRwYaKICtrZ/joBTGvf0hFznNNFAk0WFDEq a1A+ECt7r1dJmWwsp/yzhP+94KLHb0thI10+JUpypg47jNSvIdyzqbeg3e7r5rVTobIm gEHub4i5MlwXQ7QE23bHyZXsT6fgTLVJ1XeGMKFmwNfOtmGO6hLATfBgtpWO15eK6DoD phi0MndTTBT67OprADh6NmXq4+1yAAfE9Idn2kA9m6jLhVNOcf+/feVc95rHlYg6Rh/m AegGgtxa02DbKcbI8KGqFLEoE508orJSpguXOSFNNmMTImW4jgHCe3ci+LtTjh2IOi71 2UOw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20130820; h=x-gm-message-state:mime-version:in-reply-to:references:from:date :message-id:subject:to:cc; bh=zqEcuWbti8adWLICutY32lh3b0XGQ7eqkVxqOnyTaZc=; b=QqnVoMDUWE02cO9btvbcWwa7XQUkWlzPW5k+OF/0Vlnr9c+lxkN0kAmp9Yl5QNpKeE gCMSbV1lbvg55NowvPR4TVrO4ZrYk2tUIwRP8Cpd+LRgy5jffArGDomnuaExmJLJFeop KL4MWLqafV2GrlfJoGE6yw8tVJnwxoA9DZCpULdEWJErfxpbfEOcsoWVt/yyu+Zl+GvP JuqhAS0M8MBKSGQJlnYGiJsXzWltZiSdJMTwrM63DyV+x2/Iqs1T5K5TvIneGl0k+ubr 2+3taRCNmYlwchU1s/pGTRBjeP6IuFKAinrDmUKurtDJkoUTtwNnz0ogBnIVJ5TY676x Rciw== X-Gm-Message-State: AKaTC00uUPX160pkh6ZVpGrsxGxh7Fm2qMpQzhBCEpqLRzJWsHDuTHgbMMOUoxK2oThXj1ctoC4QbzJuv6SIvw== X-Received: by 10.107.36.144 with SMTP id k138mr36932442iok.177.1480661936082; Thu, 01 Dec 2016 22:58:56 -0800 (PST) MIME-Version: 1.0 Received: by 10.36.150.129 with HTTP; Thu, 1 Dec 2016 22:58:55 -0800 (PST) In-Reply-To: <3c3e43918575efb81650d755ea3cfac8@mail.bein.link> References: <3c3e43918575efb81650d755ea3cfac8@mail.bein.link> From: Adrian Chadd Date: Thu, 1 Dec 2016 22:58:55 -0800 Message-ID: Subject: Re: bsdinstall: add support for "hidden" networks. To: Maxim Filimonov Cc: "freebsd-hackers@freebsd.org" Content-Type: text/plain; charset=UTF-8 X-Mailman-Approved-At: Fri, 02 Dec 2016 12:17:44 +0000 X-BeenThere: freebsd-hackers@freebsd.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: Technical Discussions relating to FreeBSD List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 02 Dec 2016 06:58:56 -0000 hiya, It looks fine to me. Please do get Devin to look at it, but I'm happy to see this land in -HEAD. Thanks! -adrian (Wifi person) On 1 December 2016 at 13:55, Maxim Filimonov wrote: > Hello everyone. > I have submitted a bug on bsdinstall as stated in the subject. You can find the bug there: https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=214933 > > Could anyone look at it, maybe share your thoughts, maybe even commit? > > > > > ----- > wbr, Maxim V Filimonov > _______________________________________________ > freebsd-hackers@freebsd.org mailing list > https://lists.freebsd.org/mailman/listinfo/freebsd-hackers > To unsubscribe, send any mail to "freebsd-hackers-unsubscribe@freebsd.org" From owner-freebsd-hackers@freebsd.org Fri Dec 2 14:09:01 2016 Return-Path: Delivered-To: freebsd-hackers@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 4CC91C62BA6; Fri, 2 Dec 2016 14:09:01 +0000 (UTC) (envelope-from julian@freebsd.org) Received: from vps1.elischer.org (vps1.elischer.org [204.109.63.16]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client CN "vps1.elischer.org", Issuer "CA Cert Signing Authority" (not verified)) by mx1.freebsd.org (Postfix) with ESMTPS id 126DA1C08; Fri, 2 Dec 2016 14:09:00 +0000 (UTC) (envelope-from julian@freebsd.org) Received: from Julian-MBP3.local (ppp121-45-230-194.lns20.per1.internode.on.net [121.45.230.194]) (authenticated bits=0) by vps1.elischer.org (8.15.2/8.15.2) with ESMTPSA id uB2E8stk071764 (version=TLSv1.2 cipher=DHE-RSA-AES128-SHA bits=128 verify=NO); Fri, 2 Dec 2016 06:08:57 -0800 (PST) (envelope-from julian@freebsd.org) Subject: Re: why does java need /proc? To: Jung-uk Kim , freebsd-java@freebsd.org, freebsd References: <36b30691-2e1f-bec4-4960-b69826b1b1fc@freebsd.org> From: Julian Elischer Message-ID: <52af847e-bc96-e4fe-665b-a305792ba2d6@freebsd.org> Date: Fri, 2 Dec 2016 22:08:48 +0800 User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.11; rv:45.0) Gecko/20100101 Thunderbird/45.5.0 MIME-Version: 1.0 In-Reply-To: Content-Type: text/plain; charset=windows-1252; format=flowed Content-Transfer-Encoding: 7bit X-BeenThere: freebsd-hackers@freebsd.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: Technical Discussions relating to FreeBSD List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 02 Dec 2016 14:09:01 -0000 On 30/11/2016 5:50 AM, Jung-uk Kim wrote: > On 11/29/2016 16:35, Julian Elischer wrote: >> DOes anyone know Why the port suggests mounting /proc? >> >> Seems to work fine without it. (so far) > It is not absolutely necessary any more. However, it is still used in > few places, e.g., Serviceability Agent. > > Jung-uk Kim > thanks From owner-freebsd-hackers@freebsd.org Fri Dec 2 17:03:09 2016 Return-Path: Delivered-To: freebsd-hackers@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 7B01DC6382D; Fri, 2 Dec 2016 17:03:09 +0000 (UTC) (envelope-from eric@metricspace.net) Received: from mail.metricspace.net (mail.metricspace.net [IPv6:2001:470:1f11:617::107]) by mx1.freebsd.org (Postfix) with ESMTP id 0D6EB156A; Fri, 2 Dec 2016 17:03:09 +0000 (UTC) (envelope-from eric@metricspace.net) Received: from [IPv6:2001:470:1f11:617:3210:b3ff:fe77:ca3f] (unknown [IPv6:2001:470:1f11:617:3210:b3ff:fe77:ca3f]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (Client did not present a certificate) (Authenticated sender: eric) by mail.metricspace.net (Postfix) with ESMTPSA id A37AA1D83; Fri, 2 Dec 2016 17:03:01 +0000 (UTC) To: freebsd-hackers@FreeBSD.org, freebsd-amd64@freebsd.org, "current@freebsd.org" From: Eric McCorkle Subject: CFT EFI Boot Refactoring Message-ID: Date: Fri, 2 Dec 2016 12:02:57 -0500 User-Agent: Mozilla/5.0 (X11; FreeBSD amd64; rv:45.0) Gecko/20100101 Thunderbird/45.4.0 MIME-Version: 1.0 Content-Type: multipart/signed; micalg=pgp-sha256; protocol="application/pgp-signature"; boundary="2nIKx7PRAmhO47MXFmT0MDKUV6UMsh1v9" X-BeenThere: freebsd-hackers@freebsd.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: Technical Discussions relating to FreeBSD List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 02 Dec 2016 17:03:09 -0000 This is an OpenPGP/MIME signed message (RFC 4880 and 3156) --2nIKx7PRAmhO47MXFmT0MDKUV6UMsh1v9 Content-Type: multipart/mixed; boundary="7wWD2JXas7wNKFk1Kr7Jd8JHbiuG3wULI"; protected-headers="v1" From: Eric McCorkle To: freebsd-hackers@FreeBSD.org, freebsd-amd64@freebsd.org, "current@freebsd.org" Message-ID: Subject: CFT EFI Boot Refactoring --7wWD2JXas7wNKFk1Kr7Jd8JHbiuG3wULI Content-Type: multipart/mixed; boundary="------------689B5840033FA59B553C984F" This is a multi-part message in MIME format. --------------689B5840033FA59B553C984F Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable Hello everyone, My work to refactor the EFI boot loader has been in review for some time now. This work is a behavior-neutral refactoring which eliminates duplicated code in boot1, provides better integration of boot1 and loader with the EFI API, and moves towards better compliance with the recommendations of the UEFI driver writer's guide. This work also serves as a precursor to more work, such as GELI, hot-plugging, and other things. One of the reviewers was able to trigger a hang on his setup; however, it's not clear whether this is a problem in the refactoring, or whether it's due to a related bug: https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=3D214423 Therefore, I would like to issue a CFT for this changeset. We need people using the boot1/loader EFI boot setup to test their setup using boot1 and loader as built with this patch applied. You can also get the source tree directly from my github (https://github.com/emc2/freebsd.git). Use the efize_new branch to get this changeset. Note that I am maintaining the state of this branch in a single change at this point using rebase -i, so there *will* be forced pushes to this branch. Here are some notes on testing the changeset: * To test it, just do a buildworld, then copy loader.efi in place and copy boot1.efi to /efi/BOOT/BOOTX64.EFI on your ESP. If your system boots, then the test was successful (there are no new features in this changeset). * The output of boot1 is slightly different, so you'll be able to tell if you installed it correctly. * I recommend keeping a copy of the basic boot1 around on your ESP, just in case something goes wrong. On my setup, I have a backup at /efi/BOOT/BOOTX64.BAK (with the main program at /efi/BOOT/BOOTX64.EFI, of course) * I have been using this on a machine with two disks, a ZFS pool spanning both disks, and a dummy UFS filesystem for months now, so it can be considered relatively safe. * This has also been tested on basic setups without incident, so priority is on complex or odd setups. * If something goes wrong, you will most likely get a boot-hang. If this happens, please contact me directly with the details, and I'll coordinate on diagnosis. --------------689B5840033FA59B553C984F Content-Type: text/x-patch; name="efize.diff" Content-Transfer-Encoding: quoted-printable Content-Disposition: attachment; filename="efize.diff" diff --git a/lib/libstand/Makefile b/lib/libstand/Makefile index 0ebcaf1..3b608c5 100644 --- a/lib/libstand/Makefile +++ b/lib/libstand/Makefile @@ -41,7 +41,7 @@ SRCS+=3D ntoh.c .PATH: ${LIBC_SRC}/string SRCS+=3D bcmp.c bcopy.c bzero.c ffs.c fls.c \ memccpy.c memchr.c memcmp.c memcpy.c memmove.c memset.c \ - qdivrem.c strcat.c strchr.c strcmp.c strcpy.c \ + qdivrem.c strcat.c strchr.c strcmp.c strcpy.c stpcpy.c stpncpy.c \ strcspn.c strlcat.c strlcpy.c strlen.c strncat.c strncmp.c strncpy.c \ strpbrk.c strrchr.c strsep.c strspn.c strstr.c strtok.c swab.c .if ${MACHINE_CPUARCH} =3D=3D "arm" diff --git a/lib/libstand/stand.h b/lib/libstand/stand.h index f77a586..066aff0 100644 --- a/lib/libstand/stand.h +++ b/lib/libstand/stand.h @@ -24,7 +24,7 @@ * SUCH DAMAGE. * * $FreeBSD$ - * From $NetBSD: stand.h,v 1.22 1997/06/26 19:17:40 drochner Exp $=09 + * From $NetBSD: stand.h,v 1.22 1997/06/26 19:17:40 drochner Exp $ */ =20 /*- @@ -131,7 +131,7 @@ extern struct fs_ops pkgfs_fsops; #define SEEK_CUR 1 /* set file offset to current plus offset */ #define SEEK_END 2 /* set file offset to EOF plus offset */ =20 -/*=20 +/* * Device switch */ struct devsw { @@ -166,8 +166,9 @@ struct devdesc #define DEVT_NONE 0 #define DEVT_DISK 1 #define DEVT_NET 2 -#define DEVT_CD 3 +#define DEVT_CD 3 #define DEVT_ZFS 4 +#define DEVT_EFI 5 int d_unit; void *d_opendata; }; @@ -279,7 +280,7 @@ extern struct dirent *readdirfd(int); =20 extern void srandom(u_long seed); extern u_long random(void); - =20 + /* imports from stdlib, locally modified */ extern long strtol(const char *, char **, int); extern unsigned long strtoul(const char *, char **, int); @@ -368,9 +369,9 @@ extern int null_stat(struct open_file *f, struct stat= *sb); extern int null_readdir(struct open_file *f, struct dirent *d); =20 =20 -/*=20 - * Machine dependent functions and data, must be provided or stubbed by = - * the consumer=20 +/* + * Machine dependent functions and data, must be provided or stubbed by + * the consumer */ extern int getchar(void); extern int ischar(void); diff --git a/sys/boot/efi/Makefile b/sys/boot/efi/Makefile index 66481f8..00490d0 100644 --- a/sys/boot/efi/Makefile +++ b/sys/boot/efi/Makefile @@ -15,7 +15,7 @@ SUBDIR+=3D fdt .if ${MACHINE_CPUARCH} =3D=3D "aarch64" || \ ${MACHINE_CPUARCH} =3D=3D "amd64" || \ ${MACHINE_CPUARCH} =3D=3D "arm" -SUBDIR+=3D libefi loader boot1 +SUBDIR+=3D libefi drivers loader boot1 .endif =20 .endif # ${COMPILER_TYPE} !=3D "gcc" || ${COMPILER_VERSION} >=3D 40500 diff --git a/sys/boot/efi/boot1/Makefile b/sys/boot/efi/boot1/Makefile index 110a857..7480c9c 100644 --- a/sys/boot/efi/boot1/Makefile +++ b/sys/boot/efi/boot1/Makefile @@ -8,34 +8,50 @@ MK_SSP=3D no =20 PROG=3D boot1.sym INTERNALPROG=3D -WARNS?=3D 6 +WARNS?=3D 3 + +# Include bcache code. +HAVE_BCACHE=3D yes =20 .if ${MK_ZFS} !=3D "no" # Disable warnings that are currently incompatible with the zfs boot cod= e -CWARNFLAGS.zfs_module.c +=3D -Wno-array-bounds -CWARNFLAGS.zfs_module.c +=3D -Wno-cast-align -CWARNFLAGS.zfs_module.c +=3D -Wno-cast-qual -CWARNFLAGS.zfs_module.c +=3D -Wno-missing-prototypes -CWARNFLAGS.zfs_module.c +=3D -Wno-sign-compare -CWARNFLAGS.zfs_module.c +=3D -Wno-unused-parameter -CWARNFLAGS.zfs_module.c +=3D -Wno-unused-function +CWARNFLAGS.boot1.c +=3D -Wno-missing-variable-declarations +CWARNFLAGS.zfs.c +=3D -Wno-incompatible-pointer-types-discards-qualifier= s +CWARNFLAGS.zfs.c +=3D -Wno-missing-variable-declarations +CWARNFLAGS.zfs.c +=3D -Wno-array-bounds +CWARNFLAGS.zfs.c +=3D -Wno-cast-align +CWARNFLAGS.zfs.c +=3D -Wno-cast-qual +CWARNFLAGS.zfs.c +=3D -Wno-missing-prototypes +CWARNFLAGS.zfs.c +=3D -Wno-sign-compare +CWARNFLAGS.zfs.c +=3D -Wno-unused-parameter +CWARNFLAGS.zfs.c +=3D -Wno-unused-function CWARNFLAGS.skein.c +=3D -Wno-cast-align CWARNFLAGS.skein.c +=3D -Wno-missing-variable-declarations .endif =20 + # architecture-specific loader code -SRCS=3D boot1.c self_reloc.c start.S ufs_module.c +SRCS=3D boot1.c self_reloc.c start.S .if ${MK_ZFS} !=3D "no" -SRCS+=3D zfs_module.c +.PATH: ${.CURDIR}/../../../crypto/skein SRCS+=3D skein.c skein_block.c # Do not unroll skein loops, reduce code size CFLAGS+=3D -DSKEIN_LOOP=3D111 -.PATH: ${.CURDIR}/../../../crypto/skein +.PATH: ${.CURDIR}/../../zfs +SRCS+=3D zfs.c .endif =20 +# Always add MI sources +.PATH: ${.CURDIR}/../../common +.include "${.CURDIR}/../../common/Makefile.inc" +CFLAGS+=3D -I${.CURDIR}/../../common + +.PATH: ${.CURDIR}/arch/${MACHINE} + CFLAGS+=3D -I. CFLAGS+=3D -I${.CURDIR}/../include CFLAGS+=3D -I${.CURDIR}/../include/${MACHINE} +CFLAGS+=3D -I${.CURDIR}/../drivers/ CFLAGS+=3D -I${.CURDIR}/../../../contrib/dev/acpica/include CFLAGS+=3D -I${.CURDIR}/../../.. CFLAGS+=3D -DEFI_UFS_BOOT @@ -56,6 +72,20 @@ CFLAGS+=3D -DEFI_ZFS_BOOT .PATH: ${.CURDIR}/../../common CFLAGS+=3D -I${.CURDIR}/../../common =20 +# make buildenv doesn't set DESTDIR, this means LIBSTAND +# will be wrong when crossbuilding. +.if exists(${.OBJDIR}/../../../../lib/libstand/libstand.a) +LIBSTAND=3D ${.OBJDIR}/../../../../lib/libstand/libstand.a +.endif + +# Add libefi +.PATH: ${.CURDIR}/../libefi +LIBEFI=3D ${.OBJDIR}/../libefi/libefi.a + +.PATH: ${.CURDIR}/../drivers +LIBEFI_DRIVERS=3D ${.OBJDIR}/../drivers/libefi_drivers.a + + FILES=3D boot1.efi boot1.efifat FILESMODE_boot1.efi=3D ${BINMODE} =20 @@ -75,8 +105,8 @@ LDFLAGS+=3D -Wl,-znocombreloc # __aeabi_* (arm) or __divdi3 (i386). # as well as required string and memory functions for all platforms. # -DPADD+=3D ${LIBSTAND} -LDADD+=3D -lstand +DPADD+=3D ${LIBEFI_DRIVERS} ${LIBEFI} ${LIBSTAND} +LDADD+=3D ${LIBEFI_DRIVERS} ${LIBEFI} ${LIBSTAND} =20 DPADD+=3D ${LDSCRIPT} =20 @@ -102,7 +132,7 @@ boot1.efi: ${PROG} SOURCE_DATE_EPOCH=3D${SOURCE_DATE_EPOCH} \ ${OBJCOPY} -j .peheader -j .text -j .sdata -j .data \ -j .dynamic -j .dynsym -j .rel.dyn \ - -j .rela.dyn -j .reloc -j .eh_frame \ + -j .rela.dyn -j .reloc -j .eh_frame -j set_Xcommand_set \ --output-target=3D${EFI_TARGET} ${.ALLSRC} ${.TARGET} =20 boot1.o: ${.CURDIR}/../../common/ufsread.c @@ -111,7 +141,7 @@ boot1.o: ${.CURDIR}/../../common/ufsread.c # created by generate-fat.sh =20 .include "${.CURDIR}/Makefile.fat" -BOOT1_MAXSIZE?=3D 131072 +BOOT1_MAXSIZE?=3D 524288 =20 boot1.efifat: boot1.efi @set -- `ls -l boot1.efi`; \ diff --git a/sys/boot/efi/boot1/Makefile.fat b/sys/boot/efi/boot1/Makefil= e.fat index c86a7c3..e2cda1c 100644 --- a/sys/boot/efi/boot1/Makefile.fat +++ b/sys/boot/efi/boot1/Makefile.fat @@ -1,4 +1,4 @@ # This file autogenerated by generate-fat.sh - DO NOT EDIT # $FreeBSD$ BOOT1_OFFSET=3D0x2d -BOOT1_MAXSIZE=3D131072 +BOOT1_MAXSIZE=3D524288 diff --git a/sys/boot/efi/boot1/boot1.c b/sys/boot/efi/boot1/boot1.c index 80b1895..9e02bfa 100644 --- a/sys/boot/efi/boot1/boot1.c +++ b/sys/boot/efi/boot1/boot1.c @@ -26,62 +26,118 @@ __FBSDID("$FreeBSD$"); #include #include #include +#include =20 #include +#include +#include #include +#ifdef EFI_ZFS_BOOT +#include +#endif + +#include =20 -#include "boot_module.h" +#include "efi_drivers.h" #include "paths.h" =20 -static const boot_module_t *boot_modules[] =3D -{ -#ifdef EFI_ZFS_BOOT - &zfs_module, -#endif -#ifdef EFI_UFS_BOOT - &ufs_module +#ifdef EFI_DEBUG +#define DPRINTF(fmt, args...) printf(fmt, ##args) +#define DSTALL(d) bs->Stall(d) +#else +#define DPRINTF(fmt, ...) {} +#define DSTALL(d) {} #endif + +struct arch_switch archsw; /* MI/MD interface boundary */ + +static const efi_driver_t *efi_drivers[] =3D { + &fs_driver, + NULL }; =20 -#define NUM_BOOT_MODULES nitems(boot_modules) -/* The initial number of handles used to query EFI for partitions. */ -#define NUM_HANDLES_INIT 24 +extern struct console efi_console; +#if defined(__amd64__) || defined(__i386__) +extern struct console comconsole; +extern struct console nullconsole; +#endif =20 -void putchar(int c); -EFI_STATUS efi_main(EFI_HANDLE Ximage, EFI_SYSTEM_TABLE* Xsystab); +struct fs_ops *file_system[] =3D { + &dosfs_fsops, + &ufs_fsops, + &cd9660_fsops, + &nfs_fsops, + &gzipfs_fsops, + &bzipfs_fsops, + NULL +}; =20 -EFI_SYSTEM_TABLE *systab; -EFI_BOOT_SERVICES *bs; -static EFI_HANDLE *image; +struct devsw *devsw[] =3D { + &efipart_dev, +#ifdef EFI_ZFS_BOOT + &zfs_dev, +#endif + NULL +}; =20 -static EFI_GUID BlockIoProtocolGUID =3D BLOCK_IO_PROTOCOL; -static EFI_GUID DevicePathGUID =3D DEVICE_PATH_PROTOCOL; -static EFI_GUID LoadedImageGUID =3D LOADED_IMAGE_PROTOCOL; -static EFI_GUID ConsoleControlGUID =3D EFI_CONSOLE_CONTROL_PROTOCOL_GUID= ; +struct console *consoles[] =3D { + &efi_console, + NULL +}; =20 -/* - * Provide Malloc / Free backed by EFIs AllocatePool / FreePool which en= sures - * memory is correctly aligned avoiding EFI_INVALID_PARAMETER returns fr= om - * EFI methods. +/* Definitions we don't actually need for boot, but we need to define + * to make the linker happy. */ -void * -Malloc(size_t len, const char *file __unused, int line __unused) +struct file_format *file_formats[] =3D { NULL }; + +struct netif_driver *netif_drivers[] =3D { NULL }; + +static int +efi_autoload(void) { - void *out; + printf("******** Boot block should not call autoload\n"); + return (-1); +} =20 - if (bs->AllocatePool(EfiLoaderData, len, &out) =3D=3D EFI_SUCCESS) - return (out); +static int efi_getdev(void **vdev __unused, const char *devspec __unused= , + const char **path __unused) +{ + printf("******** Boot block should not call getdev\n"); + return (-1); +} =20 - return (NULL); +static ssize_t +efi_copyin(const void *src __unused, vm_offset_t dest __unused, + const size_t len __unused) +{ + printf("******** Boot block should not call copyin\n"); + return (-1); } =20 -void -Free(void *buf, const char *file __unused, int line __unused) +static ssize_t +efi_copyout(vm_offset_t src __unused, void *dest __unused, + const size_t len __unused) { - if (buf !=3D NULL) - (void)bs->FreePool(buf); + printf("******** Boot block should not call copyout\n"); + return (-1); +} + +static ssize_t +efi_readin(int fd __unused, vm_offset_t dest __unused, + const size_t len __unused) +{ + printf("******** Boot block should not call readin\n"); + return (-1); } =20 +/* The initial number of handles used to query EFI for partitions. */ +#define NUM_HANDLES_INIT 24 + +static EFI_GUID DevicePathGUID =3D DEVICE_PATH_PROTOCOL; +static EFI_GUID LoadedImageGUID =3D LOADED_IMAGE_PROTOCOL; +static EFI_GUID SimpleFileSystemProtocolGUID =3D SIMPLE_FILE_SYSTEM_PROT= OCOL; +static EFI_GUID FileInfoGUID =3D EFI_FILE_INFO_ID;; + /* * nodes_match returns TRUE if the imgpath isn't NULL and the nodes matc= h, * FALSE otherwise. @@ -142,6 +198,7 @@ devpath_last(EFI_DEVICE_PATH *devpath) return (devpath); } =20 +#ifdef EFI_DEBUG /* * devpath_node_str is a basic output method for a devpath node which * only understands a subset of the available sub types. @@ -273,7 +330,7 @@ devpath_node_str(char *buf, size_t size, EFI_DEVICE_P= ATH *devpath) * devpath_strlcat appends a text description of devpath to buf but not = more * than size - 1 characters followed by NUL-terminator. */ -int +static int devpath_strlcat(char *buf, size_t size, EFI_DEVICE_PATH *devpath) { size_t len, used; @@ -304,48 +361,207 @@ devpath_strlcat(char *buf, size_t size, EFI_DEVICE= _PATH *devpath) * devpath_str is convenience method which returns the text description = of * devpath using a static buffer, so it isn't thread safe! */ -char * +static char * devpath_str(EFI_DEVICE_PATH *devpath) { static char buf[256]; =20 devpath_strlcat(buf, sizeof(buf), devpath); =20 - return buf; + return (buf); +} +#endif + +static EFI_STATUS +efi_load(EFI_HANDLE dev, const char *filepath, void **bufp, size_t *bufs= ize) +{ + UINTN infosize =3D sizeof(EFI_FILE_INFO) + + ((strlen(filepath) + 1) * sizeof(CHAR16)); + EFI_FILE_INFO *finfo; + EFI_STATUS status; + EFI_FILE_IO_INTERFACE *iface; + EFI_FILE_HANDLE root; + EFI_FILE_HANDLE target; + CHAR16 path16[strlen(filepath) + 1]; + void *buf; + + finfo =3D malloc(infosize); + + if (finfo =3D=3D NULL) { + return (EFI_OUT_OF_RESOURCES); + } + + status =3D BS->OpenProtocol(dev, &SimpleFileSystemProtocolGUID, + (void **)&iface, IH, NULL, EFI_OPEN_PROTOCOL_GET_PROTOCOL); + + if (status !=3D EFI_SUCCESS) { + free(finfo); + printf("Open protocol failed! %ld\n", EFI_ERROR_CODE(sta= tus)); + return (status); + } + + status =3D iface->OpenVolume(iface, &root); + + if (status !=3D EFI_SUCCESS) { + BS->CloseProtocol(dev, &SimpleFileSystemProtocolGUID, IH= , NULL); + free(finfo); + printf("Open volume failed! %ld\n", EFI_ERROR_CODE(statu= s)); + return (status); + } + + strcpy_to_16(path16, filepath); + status =3D root->Open(root, &target, path16, EFI_FILE_MODE_READ,= 0); + + if (status !=3D EFI_SUCCESS) { + BS->CloseProtocol(dev, &SimpleFileSystemProtocolGUID, IH= , NULL); + free(finfo); + + return (status); + } + + *bufsize =3D infosize; + status =3D target->GetInfo(target, &FileInfoGUID, bufsize, finfo= ); + + if (status !=3D EFI_SUCCESS) { + BS->CloseProtocol(dev, &SimpleFileSystemProtocolGUID, IH= , NULL); + free(finfo); + printf("Get info failed! %ld\n", EFI_ERROR_CODE(status))= ; + return (status); + } + + *bufsize =3D finfo->FileSize; + + if ((buf =3D malloc(finfo->FileSize)) =3D=3D NULL) { + BS->CloseProtocol(dev, &SimpleFileSystemProtocolGUID, IH= , NULL); + free(finfo); + printf("Failed to allocate load buffer %zd for '%s' " + "(%lu)\n", finfo->FileSize, filepath, EFI_ERROR_C= ODE(status)); + return (EFI_OUT_OF_RESOURCES); + } + + *bufp =3D buf; + status =3D target->Read(target, bufsize, buf); + BS->CloseProtocol(dev, &SimpleFileSystemProtocolGUID, IH, NULL);= + free(finfo); + + if (status !=3D EFI_SUCCESS) { + printf("Read failed! %ld\n", EFI_ERROR_CODE(status)); + return (status); + } + + return (EFI_SUCCESS); } =20 /* * load_loader attempts to load the loader image data. * - * It tries each module and its respective devices, identified by mod->p= robe, - * in order until a successful load occurs at which point it returns EFI= _SUCCESS - * and EFI_NOT_FOUND otherwise. + * This tries all handles which support the EFI_SIMPLE_FILE_SYSTEM inter= face. + * It is expected that the drivers will have installed this interface on= every + * handle representing a device containing a supported file system. + * + * Note: In the future, this may be altered to use the EFI_LOAD_FILE int= erface, + * which should work transparently with network booting. * * Only devices which have preferred matching the preferred parameter ar= e tried. */ static EFI_STATUS -load_loader(const boot_module_t **modp, dev_info_t **devinfop, void **bu= fp, - size_t *bufsize, BOOLEAN preferred) +load_loader(EFI_HANDLE *handlep, void **bufp, size_t *bufsize) { - UINTN i; - dev_info_t *dev; - const boot_module_t *mod; - - for (i =3D 0; i < NUM_BOOT_MODULES; i++) { - mod =3D boot_modules[i]; - for (dev =3D mod->devices(); dev !=3D NULL; dev =3D dev->next) { - if (dev->preferred !=3D preferred) - continue; - - if (mod->load(PATH_LOADER_EFI, dev, bufp, bufsize) =3D=3D - EFI_SUCCESS) { - *devinfop =3D dev; - *modp =3D mod; - return (EFI_SUCCESS); - } + EFI_DEVICE_PATH *imgpath; + EFI_DEVICE_PATH *devpath; + EFI_LOADED_IMAGE *boot_image; + EFI_HANDLE *boot_handle; + EFI_HANDLE *preferred; + EFI_HANDLE *handles; + EFI_STATUS status; + UINTN i, hsize, nhandles, npreferred; + + if ((status =3D BS->OpenProtocol(IH, &LoadedImageGUID, + (VOID**)&boot_image, IH, NULL, + EFI_OPEN_PROTOCOL_GET_PROTOCOL)) !=3D EFI_SUCCESS) { + panic("Failed to query LoadedImage (%lu)\n", + EFI_ERROR_CODE(status)); + } + + boot_handle =3D boot_image->DeviceHandle; + + if ((status =3D BS->OpenProtocol(boot_handle, &DevicePathGUID, + (void **)&imgpath, IH, NULL, EFI_OPEN_PROTOCOL_GET_PROTOCOL)= )) { + panic("Failed to get image DevicePath (%lu)\n", + EFI_ERROR_CODE(status)); + } + DPRINTF("boot1 imagepath: %s\n", devpath_str(imgpath)); + + /* Allocate space for the handles */ + hsize =3D (UINTN)NUM_HANDLES_INIT * sizeof(EFI_HANDLE); + if ((handles =3D malloc(hsize)) =3D=3D NULL) + panic("Failed to allocate %d handles (%lu)", NUM_HANDLES_INIT, + EFI_ERROR_CODE(status)); + + status =3D BS->LocateHandle(ByProtocol, &SimpleFileSystemProtocolGUID, = NULL, + &hsize, handles); + + switch (status) { + case EFI_SUCCESS: + break; + case EFI_BUFFER_TOO_SMALL: + (void)BS->FreePool(handles); + if ((handles =3D malloc(hsize)) =3D=3D NULL) { + panic("Failed to allocate %zu handles (%lu)", hsize / + sizeof(*handles), EFI_ERROR_CODE(status)); } + status =3D BS->LocateHandle(ByProtocol, + &SimpleFileSystemProtocolGUID, NULL, &hsize, handles= ); + if (status !=3D EFI_SUCCESS) + panic("Failed to get device handles (%lu)\n", + EFI_ERROR_CODE(status)); + break; + default: + panic("Failed to get device handles (%lu)", + EFI_ERROR_CODE(status)); } =20 + if ((preferred =3D malloc(hsize)) =3D=3D NULL) + panic("Failed to allocate %d handles (%lu)", NUM_HANDLES_INIT, + EFI_ERROR_CODE(status)); + + npreferred =3D 0; + nhandles =3D hsize / sizeof(*handles); + + /* Figure out which handles are preferred */ + for (i =3D 0; i < nhandles; i++) { + if (BS->OpenProtocol(handles[i], &DevicePathGUID, + (void **)&devpath, IH, NULL, EFI_OPEN_PROTOCOL_GET_P= ROTOCOL) =3D=3D + EFI_SUCCESS) { + if (device_paths_match(imgpath, devpath)) { + preferred[npreferred] =3D handles[i]; + npreferred++; + } + BS->CloseProtocol(handles[i], &DevicePathGUID, I= H, NULL); + } + } + + BS->CloseProtocol(boot_handle, &DevicePathGUID, IH, NULL); + + /* Try the preferred handles first, then all the handles */ + for (i =3D 0; i < npreferred; i++) { + if (efi_load(preferred[i], PATH_LOADER_EFI, bufp, bufsiz= e) =3D=3D + EFI_SUCCESS) { + *handlep =3D preferred[i]; + return (EFI_SUCCESS); + } + } + + for (i =3D 0; i < nhandles; i++) { + if (efi_load(handles[i], PATH_LOADER_EFI, bufp, bufsize)= =3D=3D + EFI_SUCCESS) { + *handlep =3D handles[i]; + return (EFI_SUCCESS); + } + } + + printf("Failed to load %s from any device!\n", PATH_LOADER_EFI);= + return (EFI_NOT_FOUND); } =20 @@ -359,20 +575,27 @@ try_boot(void) size_t bufsize, loadersize, cmdsize; void *buf, *loaderbuf; char *cmd; - dev_info_t *dev; - const boot_module_t *mod; + EFI_HANDLE fshandle; EFI_HANDLE loaderhandle; EFI_LOADED_IMAGE *loaded_image; EFI_STATUS status; + EFI_DEVICE_PATH *fspath; + + status =3D load_loader(&fshandle, &loaderbuf, &loadersize); =20 - status =3D load_loader(&mod, &dev, &loaderbuf, &loadersize, TRUE); - if (status !=3D EFI_SUCCESS) { - status =3D load_loader(&mod, &dev, &loaderbuf, &loadersize, - FALSE); + if (status !=3D EFI_SUCCESS) { + return (status); + } + + fspath =3D NULL; + if (status =3D=3D EFI_SUCCESS) { + status =3D BS->OpenProtocol(fshandle, &DevicePathGUID, + (void **)&fspath, IH, NULL, EFI_OPEN_PROTOCOL_GET_PR= OTOCOL); if (status !=3D EFI_SUCCESS) { - printf("Failed to load '%s'\n", PATH_LOADER_EFI); - return (status); - } + DPRINTF("Failed to get image DevicePath (%lu)\n", + EFI_ERROR_CODE(status)); + } + DPRINTF("filesystem device path: %s\n", devpath_str(fspath)); } =20 /* @@ -387,9 +610,9 @@ try_boot(void) */ cmd =3D NULL; cmdsize =3D 0; - status =3D mod->load(PATH_DOTCONFIG, dev, &buf, &bufsize); + status =3D efi_load(fshandle, PATH_DOTCONFIG, &buf, &bufsize); if (status =3D=3D EFI_NOT_FOUND) - status =3D mod->load(PATH_CONFIG, dev, &buf, &bufsize); + status =3D efi_load(fshandle, PATH_CONFIG, &buf, &bufsize); if (status =3D=3D EFI_SUCCESS) { cmdsize =3D bufsize + 1; cmd =3D malloc(cmdsize); @@ -401,24 +624,25 @@ try_boot(void) buf =3D NULL; } =20 - if ((status =3D bs->LoadImage(TRUE, image, devpath_last(dev->devpath), + if ((status =3D BS->LoadImage(TRUE, IH, devpath_last(fspath), loaderbuf, loadersize, &loaderhandle)) !=3D EFI_SUCCESS) { - printf("Failed to load image provided by %s, size: %zu, (%lu)\n", - mod->name, loadersize, EFI_ERROR_CODE(status)); + printf("Failed to load image, size: %zu, (%lu)\n", + loadersize, EFI_ERROR_CODE(status)); goto errout; } =20 - if ((status =3D bs->HandleProtocol(loaderhandle, &LoadedImageGUID, - (VOID**)&loaded_image)) !=3D EFI_SUCCESS) { - printf("Failed to query LoadedImage provided by %s (%lu)\n", - mod->name, EFI_ERROR_CODE(status)); + if ((status =3D BS->OpenProtocol(loaderhandle, &LoadedImageGUID, + (VOID**)&loaded_image, IH, NULL, + EFI_OPEN_PROTOCOL_GET_PROTOCOL)) !=3D EFI_SUCCESS) { + printf("Failed to query LoadedImage (%lu)\n", + EFI_ERROR_CODE(status)); goto errout; } =20 if (cmd !=3D NULL) printf(" command args: %s\n", cmd); =20 - loaded_image->DeviceHandle =3D dev->devhandle; + loaded_image->DeviceHandle =3D fshandle; loaded_image->LoadOptionsSize =3D cmdsize; loaded_image->LoadOptions =3D cmd; =20 @@ -434,10 +658,10 @@ try_boot(void) DSTALL(1000000); DPRINTF(".\n"); =20 - if ((status =3D bs->StartImage(loaderhandle, NULL, NULL)) !=3D + if ((status =3D BS->StartImage(loaderhandle, NULL, NULL)) !=3D EFI_SUCCESS) { - printf("Failed to start image provided by %s (%lu)\n", - mod->name, EFI_ERROR_CODE(status)); + printf("Failed to start image (%lu)\n", + EFI_ERROR_CODE(status)); loaded_image->LoadOptionsSize =3D 0; loaded_image->LoadOptions =3D NULL; } @@ -453,134 +677,19 @@ errout: return (status); } =20 -/* - * probe_handle determines if the passed handle represents a logical par= tition - * if it does it uses each module in order to probe it and if successful= it - * returns EFI_SUCCESS. - */ -static EFI_STATUS -probe_handle(EFI_HANDLE h, EFI_DEVICE_PATH *imgpath, BOOLEAN *preferred)= -{ - dev_info_t *devinfo; - EFI_BLOCK_IO *blkio; - EFI_DEVICE_PATH *devpath; - EFI_STATUS status; - UINTN i; - - /* Figure out if we're dealing with an actual partition. */ - status =3D bs->HandleProtocol(h, &DevicePathGUID, (void **)&devpath); - if (status =3D=3D EFI_UNSUPPORTED) - return (status); - - if (status !=3D EFI_SUCCESS) { - DPRINTF("\nFailed to query DevicePath (%lu)\n", - EFI_ERROR_CODE(status)); - return (status); - } - - DPRINTF("probing: %s\n", devpath_str(devpath)); - - status =3D bs->HandleProtocol(h, &BlockIoProtocolGUID, (void **)&blkio)= ; - if (status =3D=3D EFI_UNSUPPORTED) - return (status); - - if (status !=3D EFI_SUCCESS) { - DPRINTF("\nFailed to query BlockIoProtocol (%lu)\n", - EFI_ERROR_CODE(status)); - return (status); - } - - if (!blkio->Media->LogicalPartition) - return (EFI_UNSUPPORTED); - - *preferred =3D device_paths_match(imgpath, devpath); - - /* Run through each module, see if it can load this partition */ - for (i =3D 0; i < NUM_BOOT_MODULES; i++) { - if ((status =3D bs->AllocatePool(EfiLoaderData, - sizeof(*devinfo), (void **)&devinfo)) !=3D - EFI_SUCCESS) { - DPRINTF("\nFailed to allocate devinfo (%lu)\n", - EFI_ERROR_CODE(status)); - continue; - } - devinfo->dev =3D blkio; - devinfo->devpath =3D devpath; - devinfo->devhandle =3D h; - devinfo->devdata =3D NULL; - devinfo->preferred =3D *preferred; - devinfo->next =3D NULL; - - status =3D boot_modules[i]->probe(devinfo); - if (status =3D=3D EFI_SUCCESS) - return (EFI_SUCCESS); - (void)bs->FreePool(devinfo); - } - - return (EFI_UNSUPPORTED); -} - -/* - * probe_handle_status calls probe_handle and outputs the returned statu= s - * of the call. - */ -static void -probe_handle_status(EFI_HANDLE h, EFI_DEVICE_PATH *imgpath) -{ - EFI_STATUS status; - BOOLEAN preferred; - - status =3D probe_handle(h, imgpath, &preferred); -=09 - DPRINTF("probe: "); - switch (status) { - case EFI_UNSUPPORTED: - printf("."); - DPRINTF(" not supported\n"); - break; - case EFI_SUCCESS: - if (preferred) { - printf("%c", '*'); - DPRINTF(" supported (preferred)\n"); - } else { - printf("%c", '+'); - DPRINTF(" supported\n"); - } - break; - default: - printf("x"); - DPRINTF(" error (%lu)\n", EFI_ERROR_CODE(status)); - break; - } - DSTALL(500000); -} - EFI_STATUS -efi_main(EFI_HANDLE Ximage, EFI_SYSTEM_TABLE *Xsystab) +main(int argc __unused, CHAR16 *argv[] __unused) { - EFI_HANDLE *handles; - EFI_LOADED_IMAGE *img; - EFI_DEVICE_PATH *imgpath; EFI_STATUS status; - EFI_CONSOLE_CONTROL_PROTOCOL *ConsoleControl =3D NULL; SIMPLE_TEXT_OUTPUT_INTERFACE *conout =3D NULL; - UINTN i, max_dim, best_mode, cols, rows, hsize, nhandles; - - /* Basic initialization*/ - systab =3D Xsystab; - image =3D Ximage; - bs =3D Xsystab->BootServices; - - /* Set up the console, so printf works. */ - status =3D bs->LocateProtocol(&ConsoleControlGUID, NULL, - (VOID **)&ConsoleControl); - if (status =3D=3D EFI_SUCCESS) - (void)ConsoleControl->SetMode(ConsoleControl, - EfiConsoleControlScreenText); + UINTN i, max_dim, best_mode, cols, rows; + + cons_probe(); + /* * Reset the console and find the best text mode. */ - conout =3D systab->ConOut; + conout =3D ST->ConOut; conout->Reset(conout, TRUE); max_dim =3D best_mode =3D 0; for (i =3D 0; ; i++) { @@ -597,123 +706,31 @@ efi_main(EFI_HANDLE Ximage, EFI_SYSTEM_TABLE *Xsys= tab) conout->EnableCursor(conout, TRUE); conout->ClearScreen(conout); =20 - printf("\n>> FreeBSD EFI boot block\n"); - printf(" Loader path: %s\n\n", PATH_LOADER_EFI); - printf(" Initializing modules:"); - for (i =3D 0; i < NUM_BOOT_MODULES; i++) { - printf(" %s", boot_modules[i]->name); - if (boot_modules[i]->init !=3D NULL) - boot_modules[i]->init(); - } - putchar('\n'); - - /* Get all the device handles */ - hsize =3D (UINTN)NUM_HANDLES_INIT * sizeof(EFI_HANDLE); - if ((status =3D bs->AllocatePool(EfiLoaderData, hsize, (void **)&handle= s)) - !=3D EFI_SUCCESS) - panic("Failed to allocate %d handles (%lu)", NUM_HANDLES_INIT, - EFI_ERROR_CODE(status)); - - status =3D bs->LocateHandle(ByProtocol, &BlockIoProtocolGUID, NULL, - &hsize, handles); - switch (status) { - case EFI_SUCCESS: - break; - case EFI_BUFFER_TOO_SMALL: - (void)bs->FreePool(handles); - if ((status =3D bs->AllocatePool(EfiLoaderData, hsize, - (void **)&handles)) !=3D EFI_SUCCESS) { - panic("Failed to allocate %zu handles (%lu)", hsize / - sizeof(*handles), EFI_ERROR_CODE(status)); - } - status =3D bs->LocateHandle(ByProtocol, &BlockIoProtocolGUID, - NULL, &hsize, handles); - if (status !=3D EFI_SUCCESS) - panic("Failed to get device handles (%lu)\n", - EFI_ERROR_CODE(status)); - break; - default: - panic("Failed to get device handles (%lu)", - EFI_ERROR_CODE(status)); - } + /* + * Initialise the block cache. Set the upper limit. + */ + bcache_init(32768, 512); =20 - /* Scan all partitions, probing with all modules. */ - nhandles =3D hsize / sizeof(*handles); - printf(" Probing %zu block devices...", nhandles); - DPRINTF("\n"); + printf("\n>> FreeBSD EFI boot block\n"); =20 - /* Determine the devpath of our image so we can prefer it. */ - status =3D bs->HandleProtocol(image, &LoadedImageGUID, (VOID**)&img); - imgpath =3D NULL; - if (status =3D=3D EFI_SUCCESS) { - status =3D bs->HandleProtocol(img->DeviceHandle, &DevicePathGUID, - (void **)&imgpath); - if (status !=3D EFI_SUCCESS) - DPRINTF("Failed to get image DevicePath (%lu)\n", - EFI_ERROR_CODE(status)); - DPRINTF("boot1 imagepath: %s\n", devpath_str(imgpath)); - } + archsw.arch_autoload =3D efi_autoload; + archsw.arch_getdev =3D efi_getdev; + archsw.arch_copyin =3D efi_copyin; + archsw.arch_copyout =3D efi_copyout; + archsw.arch_readin =3D efi_readin; =20 - for (i =3D 0; i < nhandles; i++) - probe_handle_status(handles[i], imgpath); - printf(" done\n"); + printf(" Loader path: %s\n\n", PATH_LOADER_EFI); + printf(" Initializing modules:"); =20 - /* Status summary. */ - for (i =3D 0; i < NUM_BOOT_MODULES; i++) { - printf(" "); - boot_modules[i]->status(); + for (i =3D 0; efi_drivers[i] !=3D NULL; i++) { + printf(" %s", efi_drivers[i]->name); + if (efi_drivers[i]->init !=3D NULL) + efi_drivers[i]->init(); } + putchar('\n'); =20 try_boot(); =20 /* If we get here, we're out of luck... */ panic("No bootable partitions found!"); } - -/* - * add_device adds a device to the passed devinfo list. - */ -void -add_device(dev_info_t **devinfop, dev_info_t *devinfo) -{ - dev_info_t *dev; - - if (*devinfop =3D=3D NULL) { - *devinfop =3D devinfo; - return; - } - - for (dev =3D *devinfop; dev->next !=3D NULL; dev =3D dev->next) - ; - - dev->next =3D devinfo; -} - -void -panic(const char *fmt, ...) -{ - va_list ap; - - printf("panic: "); - va_start(ap, fmt); - vprintf(fmt, ap); - va_end(ap); - printf("\n"); - - while (1) {} -} - -void -putchar(int c) -{ - CHAR16 buf[2]; - - if (c =3D=3D '\n') { - buf[0] =3D '\r'; - buf[1] =3D 0; - systab->ConOut->OutputString(systab->ConOut, buf); - } - buf[0] =3D c; - buf[1] =3D 0; - systab->ConOut->OutputString(systab->ConOut, buf); -} diff --git a/sys/boot/efi/boot1/boot_module.h b/sys/boot/efi/boot1/boot_m= odule.h deleted file mode 100644 index 296d5a6..0000000 --- a/sys/boot/efi/boot1/boot_module.h +++ /dev/null @@ -1,117 +0,0 @@ -/*- - * Copyright (c) 2015 Eric McCorkle - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in th= e - * documentation and/or other materials provided with the distributio= n. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AN= D - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE= - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PU= RPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIAB= LE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUE= NTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOO= DS - * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)= - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, S= TRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY= WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY O= F - * SUCH DAMAGE. - * - * $FreeBSD$ - */ - -#ifndef _BOOT_MODULE_H_ -#define _BOOT_MODULE_H_ - -#include - -#include -#include -#include - -#ifdef EFI_DEBUG -#define DPRINTF(fmt, args...) printf(fmt, ##args) -#define DSTALL(d) bs->Stall(d) -#else -#define DPRINTF(fmt, ...) {} -#define DSTALL(d) {} -#endif - -/* EFI device info */ -typedef struct dev_info -{ - EFI_BLOCK_IO *dev; - EFI_DEVICE_PATH *devpath; - EFI_HANDLE *devhandle; - void *devdata; - BOOLEAN preferred; - struct dev_info *next; -} dev_info_t; - -/* - * A boot loader module. - * - * This is a standard interface for filesystem modules in the EFI system= =2E - */ -typedef struct boot_module_t -{ - const char *name; - - /* init is the optional initialiser for the module. */ - void (*init)(); - - /* - * probe checks to see if the module can handle dev. - * - * Return codes: - * EFI_SUCCESS =3D The module can handle the device. - * EFI_NOT_FOUND =3D The module can not handle the device. - * Other =3D The module encountered an error. - */ - EFI_STATUS (*probe)(dev_info_t* dev); - - /* - * load should select the best out of a set of devices that probe - * indicated were loadable and load the specified file. - * - * Return codes: - * EFI_SUCCESS =3D The module can handle the device. - * EFI_NOT_FOUND =3D The module can not handle the device. - * Other =3D The module encountered an error. - */ - EFI_STATUS (*load)(const char *filepath, dev_info_t *devinfo, - void **buf, size_t *bufsize); - - /* status outputs information about the probed devices. */ - void (*status)(); - - /* valid devices as found by probe. */ - dev_info_t *(*devices)(); -} boot_module_t; - -/* Standard boot modules. */ -#ifdef EFI_UFS_BOOT -extern const boot_module_t ufs_module; -#endif -#ifdef EFI_ZFS_BOOT -extern const boot_module_t zfs_module; -#endif - -/* Functions available to modules. */ -extern void add_device(dev_info_t **devinfop, dev_info_t *devinfo); -extern void panic(const char *fmt, ...) __dead2; -extern int printf(const char *fmt, ...); -extern int vsnprintf(char *str, size_t sz, const char *fmt, va_list ap);= - -extern EFI_SYSTEM_TABLE *systab; -extern EFI_BOOT_SERVICES *bs; - -extern int devpath_strlcat(char *buf, size_t size, EFI_DEVICE_PATH *devp= ath); -extern char *devpath_str(EFI_DEVICE_PATH *devpath); -#endif diff --git a/sys/boot/efi/boot1/fat-amd64.tmpl.bz2.uu b/sys/boot/efi/boot= 1/fat-amd64.tmpl.bz2.uu index a3ec32d..c7308a4 100644 --- a/sys/boot/efi/boot1/fat-amd64.tmpl.bz2.uu +++ b/sys/boot/efi/boot1/fat-amd64.tmpl.bz2.uu @@ -2,25 +2,50 @@ FAT template boot filesystem created by generate-fat.sh= DO NOT EDIT $FreeBSD$ begin 644 fat-amd64.tmpl.bz2 -M0EIH.3%!62936?$)3$,`&U9_____Z^KJZ_^N_^O^Z_^[ON_NK^JJ^KZNKNNJ -MZNKNZOJ^P`+\#$!0$#1D-,@#)DT#1B&AIDQ,AD:#1HTR`-#)D80Q!D:,)D`` -M#1@F30```&@`$JJ9!_HU4:",3!,F0&C(83`F30T`T!B&!,F`(P3`"#0,@`/2 -M::`#0!D`,C1`T9#3(`R9-`T8AH:9,3(9&@T:-,@#0R9&$,09&C"9```T8)DT -M```!H``JBD@_2B:FF9)IHQ/1#:@-`:`R#(T`&@:-`!H8FAH:::'J::-`9&1Z -MFF!'HAB8U/1/*8---3EV+*PZ5:L^\19>>T2K3OA>TUS8M>VJ_;9P7"8;&7&8R51N>F -M1E%A#6+F9*H@$(9J%%%%%%%$>!!!!!!!!! -M!!!!!!!#76C@OM;-N%^W[!<=3DH[<-1 -MRR"SVLL>LG*Z1G+K%N;);>IIYL-7L*D[Q-SH;5D;RU_+ZK.+TEMX%K(QQ813V:GS1ZT;"R\!H$K/Z:=3D%386M -MPJL..`X;BN0SS2,I;U*I;;.]O5ZMI9CMV -MY(;8*\CXX-SPW(^Z5WIWPW0V@?7DLGZ@QJQHC6!J-\U[>@T$2F)3"7UM2V+: -M+YMFW;MO6^<-@L)R7+XU0JB(L,KI:F[OD%ZUC=3D-0WB\7C? -M."P'%83CL1BM$RLHD):&7,DOSLY1=3D2Y,H_EOG`<%YS0,!Q&$XS]')8CXEXP_ -MFX2-7*,#%P;!Q]V)E#BO"83#?\V3C..Y#E,1?L5S&,NC%DQI>;+`DS>NQL5? -?+6IF915V$0"$)@`M+"Q)@(_9+!?^+N2*<*$AXA*8A@`` +M0EIH.3%!629363$"%&\`'YA______________^O^Z_^[_N[^J^NK^KZOKONJ +MZNK^ZN[^X`C_%-``HH`%41"1(*)`BJ!H:```?M5```#0````````-`:-#0`` +M`````````````555$_2@!O_U2J/_TJA_JJ>4!H````T``````&@`````:``` +M!H``>H`&@!HR`0,F3(!DR``TP0T`:``#0Q#30#(``-`-`R&@&@!D!H&FC$&C +M0``&@`#0@9,F0#)D`!I@AH`T``&AB&F@&0``:`:!D-`-`#(#0--&(-&@``-` +M`&A`R9,@&3(`#3!#0!H``-#$--`,@``T`T#(:`:`&0&@::,0:-```:``-`55 +M(_23]"13-3TIZJ?[*D:$_]5-3TVBFU-J;1&3)A'H0\F2/4Q&GJ!ZF`3U#U'E +M/031B8U#$9'J!ZAM(\*#R#0,4S4_5,U/0VJ>$\B*9O7.9HQ&K@F!RV88885S +M,&#####&POFPP!@?ILGJGM'9/CNX=3D\= \1]7S2JJJJJJJ7IE7 +M7(9UEEEEEDI2E*4I2LJLAG6666662E*4I2E*RJR&=3D999999?K++++++++)9* +MLD,ZRRRRRS*JJJJJJJJ5U5W@=3D3BHR9,F3)DY555555554M*K2AG6666662E* +M4I2E*RJR&=3D999999*RJR&=3D999999M]ST6EDR8Z75L[4S8=3DBSC1D=3DPZ]J#RWA +M*>XSS+OI9+,OP:!G,`[#(RG-'!93*8`$4]KF#`!H][S_R?Y_E]3FG`P`>;;6UBVMK0VMK:VMK:VMK:VMK +M:VMK:VMK:Z^ZZZZZZZZZZZZZZZZZZZZZZZ[+MSB;FU1#B/J/_7C^C55555552ZG]E9V3I_)YDL6IJ:FIJ:DI2E*4I2TJM+G^S^# +MFT,6EI:6EI:4I2E*4I2TJM+^;^[%1DR9,F3)*4I2E*4LE62&=3D999999*4I2E +M*4K*K(9UEEEEEDI2E*4I2LJL^[1"ZZZZZZ4I2E*4I7570SK+++++/R*KK+H9 +MUUUUUUUE55G3M,9UIK<&G/7:>^5EGWHT*,&#!$1$1$<#@<#@=3D(_=3D',TM+2TO\J***,:***(0A"$(0O1C,9C,3$Q,3,,'G/3> +MP]YDOJ9]^;^6Z(B(B(B(B(B(Y=3DWCP6;9%EEEEEEEEEEEEEEEFEQ$1$:0B(B( +MB(LLLXG%111WF+U'JX['EU555=3DUW6+%BQ<_U&K0T-#0M1111^K^EBQ8L7*Z' +MJNBLU,.M?M.S=3DNIP]AGYSL.W_;U+ZLF3)DA"$.D]GIK*4I0A"'*HHH +MHA"$(0A#_-W+NW>N^>`^L^RYKQ7CORG#PN%PN%PL&#!@P8,&#!@P>,\UY3/* +M4I2E*4I2E*4I2(B(B(B(B(B*4IL=3D_XF+%BQ0A"$(0A"$(0A"'F>UQ8L6+O>X +M=3DL_D=3DVA"$(0A#]BBBBB$(0A"$(0A#F^%\(9\,,-#0T-"$(0^$^>Z5TKZSPV? +M?D_1H&B?XB(B(B(B(B(CC6=3D?"R5*4I2E*4I2E*;/99@P8,&#!@X7"X7"X7"X +M7`X'$XG$XD(0A"$(0A"'6T444>51111"$(?]._?2?30A"'K****/-!1111"$ +M(;J***/O44440A"$(0A]=3DX3JWV'-?;>,[I]YSGQ'H'B]MK:VMK:VMK:VMK:V +MMK:VMK>"\-]ET[8V-C8V-C8V-C8V-C8V*4B(B(B(B(B(BE*4Q,3$A\&BBBB$ +M(0A"$/^_(_3T-#0T(0A#[G?O$>Q0\EY;@<#@1$1$1$1$1F6A=3D*T2E*4I2E*4I2E*4B(B(B(B +M(B(BFQL;'@T4440A"'E4444>BHHHH\.BBBB$(0ZCKO*YSG.+%B +MQ=3D;11113L;YQY+#P?@66666KA@888#-AA@`>5H:&AH:****(?:4440>6S/_G ++WQ=3DR13A0D#$"%&\` ` end diff --git a/sys/boot/efi/boot1/fat-arm.tmpl.bz2.uu b/sys/boot/efi/boot1/= fat-arm.tmpl.bz2.uu index 23e063e..ee2ee99 100644 --- a/sys/boot/efi/boot1/fat-arm.tmpl.bz2.uu +++ b/sys/boot/efi/boot1/fat-arm.tmpl.bz2.uu @@ -2,25 +2,50 @@ FAT template boot filesystem created by generate-fat.sh= DO NOT EDIT $FreeBSD$ begin 644 fat-arm.tmpl.bz2 -M0EIH.3%!62936>#67)H`&U9_____Z^KJZ_ZN_^O^J_^[OJ[NK^JJ^KZNKNNJ -MZNKNZOJ^P`+\```"``:`T::-`:8@P@&1D-!H:808)B:#0`T``,$T#!,@PC09 -M#33"9,0`T(`!H#1IHT!IB#"`9&0T&AIA!@F)H-`#0``P30,$R#"-!D--,)DQ -M`#0@`&@-&FC0&F(,(!D9#0:&F$&"8F@T`-``#!-`P3(,(T&0TTPF3$`-`522 -M$_(H2-DT0T:8C(T!H!ZC30R-&@-`,@&C1H:`:#1M3(T,@:::/1#331FII@)@ -M)Z:)RK5N6<7,O<%[)S4ZD(ODD1"*2"(B(+E99)"P2A$"$.#(((0Z^BHO)97* -MKNTS2;//!6_,:)5IVI>LPGUM8_)MV&_QO'$Y;`J/TETR.=3D50:\2B`0AF9 -M<_.ME;:;0N<9%D%\Q['*&6B4*U:JM6K5JUQ12I)1111116K45I*TJU:M6K<: -MZ424444448Y-1)111111[F<_6R+%BQ8L6+$X3333333333333333=3D7Z\E2M6 -MK5JU:M--------->R44444447N#[%BQ8L6+%BQ-M)*******,!0HHHHHHHY[ -M-RR5757;.MS?HE)GL[:M-Q)&/TG09Q6MZ%)XJ4>^]M6W8C@..T=3D -MV&HOX\@T$`%JWHY$`-/ZV!A?)K>YEEZ1`#*,&#,]G484F/7/RDR%Y4Q?U[J:^S$]EPK -MD81)^D"%H^>2OU:FLC31KK??,_$ES74S%+)U7JU5D:VQD)R-2U3"7[FWW -M-DPVV;ANV^9-R&"T;G,A>6EJ3:=3DEVE6ENKC#PZG.]=3D9:75*G=3D>-4N\OA]'=3D- -M`L[RN\MM/>Z'8:6Q.RAWU+=3DHOHDCZ6H?8_!^+:-JVS^6Z;UP'#>T*HB+3GM+4VVS(NQ)&K?`_9IW\,PS#$;QOG"<-QV*QFB8^2)!)H). -M7(_@P9(R$G)DCMYF,_-.ITH]0;4 +M`#0-&@VIZFFF:FC0:>IHVH>H!IHWHIH>2::#U/4]3#4]&3:FD[$4T=3DT[;+$: +MN:8'3:!AAA70P8,,,,,;"^A@#`N-'Q-`PPPP'K:M)GVO:LZ/HDN[1WS1^6_` +M:?U'@N_>Z>(\)[YX[_!_T\EYCYC5@>EXZ7BZ.V8;VEA@PPP'IM'5[.SK*.LZ +MRKK.L[UP<'!P<'!P<'!P<'!P<'!U'9MCN7.VGI<-#>T-[>EO;U6].]O;V]O; +MV]O;V]O;V]O;W,VNC:AM;5&UM;6UM;6UM;6UM;6UM;6UM;6UO;&]SM[M*-[0 +MHT;'3:W*U/-R5:%555557!J5:FA?#0NNNNNN]K]=3DXU\+KKKKKKIXS>M??OTGN7]#X#RWP_2*J +MJJJJJI>L5=3DZAI6666662E*4I2E*RJS5R#PV';_R52Y7*Y7*Y7*E*4I2E*7*J +MY4-*RRRRRSFJJJJJJJJE=3D5=3DWE$+KKKKKLZJJJJJJJI9JLWP:(777777=3DUTK+ +M++++++)X]59]#/KOP:)G,`]MV>'L#N\,,`"*?E:`P +M`>T]KU?=3D^%[SNM$X&`#M'S;[=3DQ6<7%Q<7%Q<7%Q<7%Q<7%Q<7%Q<70[YL?-- +MS5555 +M55552S59H:5EEEEEDI2E*4I2LJLAI666666>[JJJJJJJJE=3D5=3DZ9RUT/G>TJE +MJ:FI5J:DM2K4AI6666662]@]H_??S/?OA/BO/^H55555552[K\A9W[U/R^WE +MBU-34U-34E*4I2E*7(JY'5]QBHS9LV;-FE*4I2E*6:K-#2LLLLLLE*4I2E*5 +ME5D-*RRRRRR4I2E*4I6560TK+++++)2E*4I2E959\FB%UUUUUTI2E*4I2NJN +MAI666666?3U7670TKKKKKKK,LRS+NK:QL;&QL;&QL;&QL;&QL;& +MQO;V]OWY'(Y'(_LHHHHA"$(0A"$(0O1111"$ +M(=3DDUOZGO77?Y/@O^7E/C/.?4N9S.9$1$1$1$1'-N^>(\EJM[++++++++++++ +M+++,O$1$1IB(B(B(CH=3D#H=3D#HHHH\7%]5];'LNG5555U^OBQ8L75]5JR9,F2V +M>+%BQ?@^OQ8L6+E[7[/YRS[AX3]5XC7^+S=3D.4I2\#G_&\3V6I?5FS9LT(0A] +M]G.3)DR0A"&VBBBB$(0A"$/>O?/%>,_T?ZO]WE/_7F//>N:];6UM;!@P8,&# +M!@P8,&#RG7/-9Y2E*4I2E*4I2E*1$1$1$1$1$12G.YWD>7BQ8L4(0A"$(0A" +M$(0AV3#J^!DR9,F3X'];W3P7C(0A"$(0A"$/PJ***(0A"$(0Y^CVXTX889,F +M3)"$(>W>.S;-OG?4^UH7Y-$T;_$1$1$1$1$1$<>]YGV@4I2E*4I2E*4IDS3- +M,&#!@UM;6UM;6UM;6UN9S-C8V-B$(0A"$(0A#[:BBBCT:***(0A#_-X[X3X: +M$(0]=3D1111"$(>D"BBBC?\C%BQ8O.HHHHA"$(0A#R7_;[5_X^*^.\U[%YSY3W +M#U+_[W/2=3D)TG2=3D)BQ8L6+%BQ8L6+['W-"VQ2E*4I2E*4I2E*1$1$1$1$1$12 +ME.=3D"$(>VHHHHA"$.%%%%'E]CU^3)DR0A"'7\A\1WKXR$(0A"$(0A"E%%%$(0 +MA"$(0A"$(0AUWF/Z7FOD/DO/?*>.[#Y;_D1$1$1$1$1$7:-T[^E*4I2E*4I2 +ME*4I$1$1$1$1',YG,YW.YW.\FBBBB$(0]&BBBCK4444>51111"$(>J^[]'T' +MH/0>@A"$/[GI\6+%B[RBBBBGL<6+%BICA@888#1AA@`>CDR9,F5%%%$/CJ** +1(/F-#S7_XNY(IPH2!C]4XX`` ` end diff --git a/sys/boot/efi/boot1/fat-arm64.tmpl.bz2.uu b/sys/boot/efi/boot= 1/fat-arm64.tmpl.bz2.uu index 1101deb..1fa4138 100644 --- a/sys/boot/efi/boot1/fat-arm64.tmpl.bz2.uu +++ b/sys/boot/efi/boot1/fat-arm64.tmpl.bz2.uu @@ -2,25 +2,49 @@ FAT template boot filesystem created by generate-fat.sh= DO NOT EDIT $FreeBSD$ begin 644 fat-arm64.tmpl.bz2 -M0EIH.3%!629364C65#T`&U;_____Z^KJZ_^N_^O^J_^[OJ[NK^JJ^KZNKNNJ -MZNKNZOJ^P`+\#0``0`#0#)D&@TR8AD`,0!D--&`@:!H&@`!B#)IHR:--#(9, -MAA`8F@Q,0,#52`_U4?J@`&AH```:`:``````T-`T&@R&@T``````````$``T -M`R9!H-,F(9`#$`9#31@(&@:!H``8@R::,FC30R&3(80&)H,3$#`521(]I1I) -MF*:8C1Z`F0:`TR,@:&C30:`R!HTT,$!DTT-J:&@R&C)IA,:F33(S4]-3`--$ -MZ--B6=3D6F1M!<28FJA"+E)$0B<@B(B"TK+:2%L)0B!"'(D$$(9F:@LRO+Q;TL -MNJ9YY2QZK1*-0US5+UM6R;E?-T_QQG*=3D-<9#J:#>R[!&-40;(2B`0AE9=3D956 -MO+"IH&,8M=3DKEBF(3,A$H5JU%:M6K5K1-.A)------6K35I*TJU:M6K[LK*RLK*RLK*INY)IIIIIIL6F3333 -M333=3D7VLL91VEN[UP[M$I,5X--+@R1:XKTL?G%LL>,D\Y*-*DU+6MB^YMF\7S -MB,!S6CMPUEU'H'B0`4V-'(@!JKN]^?Z<]*UB`&/9J#*9N@O9.H6FYDN5AT,L -MS-UAW-A;:O3J61R=3D".=3D)EY-(TK3M8US8NM;1N&\<%Q%^Y3"9%=3D8Z-AUMYA;W -MPYKK)5;?@6D;$DWL"J0LE*.Q]RA>Q[,;.QH%VDM/KGE)[.JBX4T=3D56_.0JD: -MUL&Q73$OR;=3DNF^?PXKCL%SF=3D:1FKO&W%A1)O,YWU&FM;1N]W0QW=3D6U*UDS]Q -M0M\CN\G:L^KT%O2U%G0;335JJYFAG8I,5$D?:UC\'Z/U;QO7`<)_3CL!R7/=3D -M%B=3DL<+`H+J1;6??%$1%*H8[34M_N$+V0O6O;YJ7!95E7%<9?L%R7-83#:)BY -M(D$F?DZ4B^,W)%W)SY(X;B/[<9?L\P'_-*YCPGRLLY=3D[?HU\D?[A\BDOL -MP)20P6A]5```````````````````` +M``````````*JJDT`&G_^J2I_^I4_RJGJ``!H``-````````&@-`````````& +M@#0`&AH!`:!H!H`:#30R`&FA@F@T-!IB!H#(#3$``9```:`#",`@`,@:```` +M0&@:`:`&@TT,@!IH8)H-#0:8@:`R`TQ``&0``&@`PC`(`#(&@```$!H&@&@! +MH--#(`::&":#0T&F(&@,@-,0`!D``!H`,(P"``R!H````*JD?I'H1*;293/% +M*FVJ;?JJ?JFGM2&F0VB`/4'J`>2&@R:#0#1H-'H3)IY0'J'I`T:&@TTT_1(T +MVIFH'I-I/334]&3)E/-BFK[5U\L1LVS`Z+4,,,*ZF#!AAAAC87U88`P+CQM8 +MPPPP';U:S/K=3D9G1]*EW*/6M7YKUS7^J[U[-W[^I_$]^\)V'B/BO(>>V8':L. +MF[3K4>#JPPP888`5#1,2SH&`V!@,!X#`8(,$"!`@0($"!`@0($"=3DFZ;LW.[A +MS-QZ'#4X-3@X)<'!5P3P<'!P<'!P<'!P<'!P<'!R-SLMR&YN4;FYN;FYN;FY +MN;FYN;FYN;FYN;G!SN#F<':4<&I1JYW1;70;'DY*M2JJJJJKLVQ5L:E\-2ZZ +MZZZ[]?[#X%\+KKKKKKI:*M$8:UEEEEEDI2E*4I2LJLZ_L]3%1FS9LV;-*4I2 +ME*4LU6:&M999999R\GU'MLPP];FS9LV;-FS2V*MB&M99 +M9999*RJR&M999999U/8=3DKHS9L=3D'=3D,NS#1,MG'.,NCMG7,CR7@*>V]-F7T,\N +M^]H'/8!V'4P_+.YPPP`(I^9J#`![;J>Y_A_D^TU98&`#T+M'WM[>WM[>WM[>WM[>WM[*93*7777 +M777777777777777777=3D-TW9-[G;V]1#G=3D%M=3D!HS2E*4I2E*ZJZ&M999999.$ +MI2E*4I656>DHA=3D=3D=3D=3D=3D=3DZJJJJJJJJJ6:K-#6LLLLLLE*4I2E*5E5D-:RRRRR= S +MW-55555554KJKNLZ%=3D3T2631HT2T:):*M$-:RRRRRR7Y3VCOG\[L/]WR'E^I +M55555552[C\A9W;TOS>O+%L;&QL;&Q*4I2E*4M%6CJ=3DYVV3%KT:-&C1H]3AA +M99555555+8JV+^C^BR8M&C1HT:)2E*4I2EHJT0UK+++++)2E*4I2E959#6LL +MLLLLE*4I2E*5E5GRZ(7777772E*4I2E*ZJZ&M999999LJNLNAK7777776556 +M>R7?OLW;-'OVQX;H/CN1Y;D;6UM4^LNZN+%BQ=3D#K?;^BL[IW[NWN +MW)Z_ER9,F3N^CZ_W?L=3D%],V;-FA"$/P,YR9,F2$(0Z=3D%%%$(0A"$(?WO?/`> +M"_U>&_Z>*\9Y#RWV3;M;6#!@P8,&#!@P8,&#!XSJGD/54I2E*4I2E*4I2D1$ +M1$1$1$1$%_[BQ8L4(0A"$(0A"$(0A\Y[3%BQ8O@>\=3D\[QX"$(0A"$ +M/>T444?XT4440A"$(0AS=3DEWHUX889,F3)"$(=3DZ^$Z[8GS,^^U^+\V@:%_B(B +M(B(B(B(B.-9E\#/*4I2E*4I2E*4V;%BP8,&#:VMK:VMK:VMK:Y'(YW.YW.A" +M$(0A"$(0^ZHHHH\ZBBBB$(0_T?"?#>&A"$/L:***(0A#JA1111PHHHH\JBBB +MCQZ***(0A#_M\5]P^,\9\EY+L/*?,?N/3/([[E+YOX.3)DR0 +MA"'RO"=3D5]Z^0A"$(0A"$(0I1111"$(0A"$(0A"$(?)>0\%Y+Y3Y;RWS'A/-? +M->>B(B(B(B(B(B[0ND?TI2E*4I2E*4I2E(B(B(B(B(CD(;UG$,HJ0@""#-QRL -MK%;U%@U#)LDM5=3D:+-(N(1@I4IJ5*E2I54DID4DDDDDE*E)2BI1I4J5*EU;!) -M%))))))CE"2*222222VAMLQPP,#`P,#`P(X"!`@0($"!`@0($"!"A0[?7Q3* -M5*E2I4J5"A0H4*%"A04*%"A0H4+.ST&QK*RLK*RLK*RA>Q22222226J1)))) -M)))E.[CDIL[6:1_=3D=3D<1)HM-I)YW&BA1::S+:)65-0B]%&'M(M0NH;>IIW;(JNVEFI;>C')YXV5+]XBB)\ -M[ZEVKL@W3>-^_IQW*(%VV;@O/<5F69*8X9GXH9&+#BAR'^.4Y;FM,Y[HL!@OY8;$?8S;J7G.0^F*'/Q;^A`$$ -7$8`%A.GB7Z'$1=3D)_XNY(IPH2`GA(C"`` +M0EIH.3%!62936=3DSO#C@`'YC______________^O^J_^[OJ[^J^NK^KZOKONJ +MZNK^ZN[^X`C_*``&B@`4"0D2(B0&I*````````#0```````#(-``R``````` +M```````"JJE'ZH`:?_ZDJG_ZJ>JG_JJ````````````````#0``T```````# +M0:&AZ@$!H&@&@!H--#(`::&":#0T&F(&@,@-,0`!D``!H`,(P"``R!H```!` +M:!H!H`:#30R`&FA@F@T-!IB!H#(#3$``9```:`#",`@`,@:````0&@:`:`&@ +MTT,@!IH8)H-#0:8@:`R`TQ``&0``&@`PC`(`#(&@````JJ1^E'Z:22>E-/U3 +MU*?_I2GM2)_ZJF3TVJ>H>IH:,C0,T@:;4'J&@:#U--`:`9`>H!ZC30:`>H`> +MU3U&3TCU--&AZ3T33#4]J:3M1;5],[S;L'-SS`ZK4,LLKZF3)EEEELH8U99` +MR/+U#+++(9CZ.Z#/T/H6=3DGI$O6OLUGWK[5KIA8"H%V,<7HTANC4'..@>0_@A +MKX(FK!2V=3D#7*(0A"$(`%PKSW6IUUG7=3D=3DAUW7>"Z72Z72Z72Z72Z72Z72Z72Z +M7K=3DN^0//Y:G%J<7%+BXKN*>+BXN+BXN+BXN+BXN+BXM[O]'1HLT:+-& +MC1HT:-&C1HT:-&C1HT:-'6<'6=3DNXN5G%J6:N#JN=3DU',^%M7:EUUUUUW=3D.9=3DS +M-3#4PPPPPP_-]37^&K+######"6Y=3DN1EK4I2E*2E*4I2E*EU.Q^3J;%F;-FS +M9LTI2E*4I2S79H:U*4I2G;;_3^TS9LV;-FS9IY>^?Z]TNNNNNNNEZA=3DX*&M2E*4I*4I2E*4 +MJ74AK4I2E*2E*4I2E*EU(:U*4I2F/JZ4I2E*4EFNS0UJ4I2E,[KKKKKKKI87 +M8>3S>KVMCM:W,U9>R>P:"CMW8,'DLXI[;TV+Z7QKOP9]SE@S>HY7-G +M"965E`$6]AJ#(!^7UO;>U_<[_5MR,@'H'R+ZIR4Y.3DY.3DY.3DY.3DY.3DY +M.3DY.X>N<'=3D-&C8T:-K1HT:-&C1HT:-&C1HT:-&CN7O]M2E*4I2DLUV;T3??4[ +MNTMK[>_>9Z5=3D=3D=3D=3D=3D=3D=3D+O_"4_&?,= ?&[ +M$MCFF960PPPPPPNNPIA#6PPPG###"E-(=3D.TEWK2FVLT]9FGRM+9U'\HLLL +MB(B(C>WM[>WNP]DZKNWT'7>)T.AT.AT.AT.AT.AT.AT.AT.AZ#L=3DKQ_6<'!P +M<'!P<'!P<'!P<'!P<'6=3D9UG6=3D3O=3D.UJE*4H]J:EEEG^60K4.N=3D,I2E"$(0A" +M'T7X>QL;&QWV7L*_H>,]P_S?[O*?`?%>H;V]O;V]$1$1$1$\ +M>4\M\%YCU3GYW.YW.YW.LLLLLLLLLL\5YCR'J*4I2E*4I2E*4I2(B(B(B(B( +MB*4I3R/?;&QL;$(0A"$(0A"$(0AY[VFQL;&QX_BO$>&[*$(0A"$*LLLLA"$( +M0A"$(0\OWOZ`UY99;6UM;4(0A[%[IWCO'O'_#RGY,\S[,?XB(B(B(B(B(CC6 +M;?"^12E*4I2E*4I2FS9;+66666666<[G<[G<[G;V]P<'!P0A"$(0A"$(>!99 +M99YUEEED(0A[AY#R7NT(0AZJRRRSN@LLLLA"$.-EEEGQ;+++(0A"$,C(^I]C +M@WW/Q9Y^SUW\,QW+!^G>8,&#!@P8,&#!@P8,&#!];[6=3D;.I2E*4I2E*4I2E( +MB(B(B(B(B(I2E,C(R,CP[+++(0A"$(0_Z[7KMK:VMJ$(0^'Y#_MX+WZ$(0A" +M$(0A"UEEED(0A"$(0A"$(0A_X^"\=3D\)\-\1YC_Y[IVGQGQV]O;V]$1$1$1$1 +M=3DF.F?TI2E*4I2E*4I2E(B(B(B(B(B(I3MW;O>V6660A"'G6666=3D]9999_S99 +M99"$(>D^N\[S7FO->:A"$/['H]C8V-CP+++++?@[&QL;%MF61EED-6660!YV +A<#S[+FVTI2&VRRRR'P%EED'QVI_Z__%W)%.%"0W.\..` ` end diff --git a/sys/boot/efi/boot1/generate-fat.sh b/sys/boot/efi/boot1/gene= rate-fat.sh index d9dfb27..7c46e92 100755 --- a/sys/boot/efi/boot1/generate-fat.sh +++ b/sys/boot/efi/boot1/generate-fat.sh @@ -13,7 +13,7 @@ =20 FAT_SIZE=3D1600 #Size in 512-byte blocks of the produced image =20 -BOOT1_SIZE=3D128k +BOOT1_SIZE=3D512k =20 # # Known filenames diff --git a/sys/boot/efi/boot1/ufs_module.c b/sys/boot/efi/boot1/ufs_mod= ule.c deleted file mode 100644 index 0860a86..0000000 --- a/sys/boot/efi/boot1/ufs_module.c +++ /dev/null @@ -1,180 +0,0 @@ -/*- - * Copyright (c) 1998 Robert Nordier - * All rights reserved. - * Copyright (c) 2001 Robert Drehmel - * All rights reserved. - * Copyright (c) 2014 Nathan Whitehorn - * All rights reserved. - * Copyright (c) 2015 Eric McCorkle - * All rights reverved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in th= e - * documentation and/or other materials provided with the distributio= n. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AN= D - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE= - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PU= RPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIAB= LE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUE= NTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOO= DS - * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)= - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, S= TRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY= WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY O= F - * SUCH DAMAGE. - * - * $FreeBSD$ - */ - -#include -#include -#include -#include -#include - -#include "boot_module.h" - -static dev_info_t *devinfo; -static dev_info_t *devices; - -static int -dskread(void *buf, u_int64_t lba, int nblk) -{ - int size; - EFI_STATUS status; - - lba =3D lba / (devinfo->dev->Media->BlockSize / DEV_BSIZE); - size =3D nblk * DEV_BSIZE; - - status =3D devinfo->dev->ReadBlocks(devinfo->dev, - devinfo->dev->Media->MediaId, lba, size, buf); - - if (status !=3D EFI_SUCCESS) { - DPRINTF("dskread: failed dev: %p, id: %u, lba: %ju, size: %d, " - "status: %lu\n", devinfo->dev, - devinfo->dev->Media->MediaId, (uintmax_t)lba, size, - EFI_ERROR_CODE(status)); - return (-1); - } - - return (0); -} - -#include "ufsread.c" - -static struct dmadat __dmadat; - -static int -init_dev(dev_info_t* dev) -{ - - devinfo =3D dev; - dmadat =3D &__dmadat; - - return fsread(0, NULL, 0); -} - -static EFI_STATUS -probe(dev_info_t* dev) -{ - - if (init_dev(dev) < 0) - return (EFI_UNSUPPORTED); - - add_device(&devices, dev); - - return (EFI_SUCCESS); -} - -static EFI_STATUS -load(const char *filepath, dev_info_t *dev, void **bufp, size_t *bufsize= ) -{ - ufs_ino_t ino; - EFI_STATUS status; - size_t size; - ssize_t read; - void *buf; - - DPRINTF("Loading '%s' from %s\n", filepath, devpath_str(dev->devpath));= - - if (init_dev(dev) < 0) { - DPRINTF("Failed to init device\n"); - return (EFI_UNSUPPORTED); - } - - if ((ino =3D lookup(filepath)) =3D=3D 0) { - DPRINTF("Failed to lookup '%s' (file not found?)\n", filepath); - return (EFI_NOT_FOUND); - } - - if (fsread_size(ino, NULL, 0, &size) < 0 || size <=3D 0) { - printf("Failed to read size of '%s' ino: %d\n", filepath, ino); - return (EFI_INVALID_PARAMETER); - } - - if ((status =3D bs->AllocatePool(EfiLoaderData, size, &buf)) !=3D - EFI_SUCCESS) { - printf("Failed to allocate read buffer %zu for '%s' (%lu)\n", - size, filepath, EFI_ERROR_CODE(status)); - return (status); - } - - read =3D fsread(ino, buf, size); - if ((size_t)read !=3D size) { - printf("Failed to read '%s' (%zd !=3D %zu)\n", filepath, read, - size); - (void)bs->FreePool(buf); - return (EFI_INVALID_PARAMETER); - } - - DPRINTF("Load complete\n"); - - *bufp =3D buf; - *bufsize =3D size; - - return (EFI_SUCCESS); -} - -static void -status(void) -{ - int i; - dev_info_t *dev; - - for (dev =3D devices, i =3D 0; dev !=3D NULL; dev =3D dev->next, i++) - ; - - printf("%s found ", ufs_module.name); - switch (i) { - case 0: - printf("no partitions\n"); - break; - case 1: - printf("%d partition\n", i); - break; - default: - printf("%d partitions\n", i); - } -} - -static dev_info_t * -_devices(void) -{ - - return (devices); -} - -const boot_module_t ufs_module =3D -{ - .name =3D "UFS", - .probe =3D probe, - .load =3D load, - .status =3D status, - .devices =3D _devices -}; diff --git a/sys/boot/efi/boot1/zfs_module.c b/sys/boot/efi/boot1/zfs_mod= ule.c deleted file mode 100644 index 1926a33..0000000 --- a/sys/boot/efi/boot1/zfs_module.c +++ /dev/null @@ -1,196 +0,0 @@ -/*- - * Copyright (c) 2015 Eric McCorkle - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in th= e - * documentation and/or other materials provided with the distributio= n. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AN= D - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE= - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PU= RPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIAB= LE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUE= NTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOO= DS - * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)= - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, S= TRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY= WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY O= F - * SUCH DAMAGE. - * - * $FreeBSD$ - */ -#include -#include -#include -#include -#include -#include -#include - -#include "boot_module.h" - -#include "libzfs.h" -#include "zfsimpl.c" - -static dev_info_t *devices; - -static int -vdev_read(vdev_t *vdev, void *priv, off_t off, void *buf, size_t bytes) -{ - dev_info_t *devinfo; - off_t lba; - EFI_STATUS status; - - devinfo =3D (dev_info_t *)priv; - lba =3D off / devinfo->dev->Media->BlockSize; - - status =3D devinfo->dev->ReadBlocks(devinfo->dev, - devinfo->dev->Media->MediaId, lba, bytes, buf); - if (status !=3D EFI_SUCCESS) { - DPRINTF("vdev_read: failed dev: %p, id: %u, lba: %jd, size: %zu," - " status: %lu\n", devinfo->dev, - devinfo->dev->Media->MediaId, (intmax_t)lba, bytes, - EFI_ERROR_CODE(status)); - return (-1); - } - - return (0); -} - -static EFI_STATUS -probe(dev_info_t *dev) -{ - spa_t *spa; - dev_info_t *tdev; - EFI_STATUS status; - - /* ZFS consumes the dev on success so we need a copy. */ - if ((status =3D bs->AllocatePool(EfiLoaderData, sizeof(*dev), - (void**)&tdev)) !=3D EFI_SUCCESS) { - DPRINTF("Failed to allocate tdev (%lu)\n", - EFI_ERROR_CODE(status)); - return (status); - } - memcpy(tdev, dev, sizeof(*dev)); - - if (vdev_probe(vdev_read, tdev, &spa) !=3D 0) { - (void)bs->FreePool(tdev); - return (EFI_UNSUPPORTED); - } - - dev->devdata =3D spa; - add_device(&devices, dev); - - return (EFI_SUCCESS); -} - -static EFI_STATUS -load(const char *filepath, dev_info_t *devinfo, void **bufp, size_t *buf= size) -{ - spa_t *spa; - struct zfsmount zfsmount; - dnode_phys_t dn; - struct stat st; - int err; - void *buf; - EFI_STATUS status; - - spa =3D devinfo->devdata; - - DPRINTF("load: '%s' spa: '%s', devpath: %s\n", filepath, spa->spa_name,= - devpath_str(devinfo->devpath)); - - if ((err =3D zfs_spa_init(spa)) !=3D 0) { - DPRINTF("Failed to load pool '%s' (%d)\n", spa->spa_name, err); - return (EFI_NOT_FOUND); - } - - if ((err =3D zfs_mount(spa, 0, &zfsmount)) !=3D 0) { - DPRINTF("Failed to mount pool '%s' (%d)\n", spa->spa_name, err); - return (EFI_NOT_FOUND); - } - - if ((err =3D zfs_lookup(&zfsmount, filepath, &dn)) !=3D 0) { - if (err =3D=3D ENOENT) { - DPRINTF("Failed to find '%s' on pool '%s' (%d)\n", - filepath, spa->spa_name, err); - return (EFI_NOT_FOUND); - } - printf("Failed to lookup '%s' on pool '%s' (%d)\n", filepath, - spa->spa_name, err); - return (EFI_INVALID_PARAMETER); - } - - if ((err =3D zfs_dnode_stat(spa, &dn, &st)) !=3D 0) { - printf("Failed to stat '%s' on pool '%s' (%d)\n", filepath, - spa->spa_name, err); - return (EFI_INVALID_PARAMETER); - } - - if ((status =3D bs->AllocatePool(EfiLoaderData, (UINTN)st.st_size, &buf= )) - !=3D EFI_SUCCESS) { - printf("Failed to allocate load buffer %zd for pool '%s' for '%s' " - "(%lu)\n", st.st_size, spa->spa_name, filepath, EFI_ERROR_CODE(sta= tus)); - return (EFI_INVALID_PARAMETER); - } - - if ((err =3D dnode_read(spa, &dn, 0, buf, st.st_size)) !=3D 0) { - printf("Failed to read node from %s (%d)\n", spa->spa_name, - err); - (void)bs->FreePool(buf); - return (EFI_INVALID_PARAMETER); - } - - *bufsize =3D st.st_size; - *bufp =3D buf; - - return (EFI_SUCCESS); -} - -static void -status(void) -{ - spa_t *spa; - - spa =3D STAILQ_FIRST(&zfs_pools); - if (spa =3D=3D NULL) { - printf("%s found no pools\n", zfs_module.name); - return; - } - - printf("%s found the following pools:", zfs_module.name); - STAILQ_FOREACH(spa, &zfs_pools, spa_link) - printf(" %s", spa->spa_name); - - printf("\n"); -} - -static void -init(void) -{ - - zfs_init(); -} - -static dev_info_t * -_devices(void) -{ - - return (devices); -} - -const boot_module_t zfs_module =3D -{ - .name =3D "ZFS", - .init =3D init, - .probe =3D probe, - .load =3D load, - .status =3D status, - .devices =3D _devices -}; diff --git a/sys/boot/efi/drivers/Makefile b/sys/boot/efi/drivers/Makefil= e new file mode 100644 index 0000000..5e1f18b --- /dev/null +++ b/sys/boot/efi/drivers/Makefile @@ -0,0 +1,34 @@ +# $FreeBSD$ + +.include + +LIB=3D efi_drivers +INTERNALLIB=3D +WARNS?=3D 2 + +SRCS=3D efipart.c fs_driver.c + +.if ${MACHINE_CPUARCH} =3D=3D "aarch64" +CFLAGS+=3D -msoft-float -mgeneral-regs-only +.endif +.if ${MACHINE_ARCH} =3D=3D "amd64" +CFLAGS+=3D -fPIC -mno-red-zone +.endif +.if ${MK_ZFS} !=3D "no" +CFLAGS+=3D -I${.CURDIR}/../../zfs +CFLAGS+=3D -I${.CURDIR}/../../../cddl/boot/zfs +CFLAGS+=3D -DEFI_ZFS_BOOT +.endif + +CFLAGS+=3D -I${.CURDIR}/../include +CFLAGS+=3D -I${.CURDIR}/../include/${MACHINE} +CFLAGS+=3D -I${.CURDIR}/../../../../lib/libstand + +# Pick up the bootstrap header for some interface items +CFLAGS+=3D -I${.CURDIR}/../../common + +# Handle FreeBSD specific %b and %D printf format specifiers +CFLAGS+=3D ${FORMAT_EXTENSIONS} +CFLAGS+=3D -DTERM_EMU + +.include diff --git a/sys/boot/efi/drivers/efi_drivers.h b/sys/boot/efi/drivers/ef= i_drivers.h new file mode 100644 index 0000000..0c599d1 --- /dev/null +++ b/sys/boot/efi/drivers/efi_drivers.h @@ -0,0 +1,42 @@ +/*- + * Copyright (c) 2016 Eric McCorkle + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in th= e + * documentation and/or other materials provided with the distributio= n. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AN= D + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE= + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PU= RPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIAB= LE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUE= NTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOO= DS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)= + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, S= TRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY= WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY O= F + * SUCH DAMAGE. + * + * $FreeBSD$ + */ + +#ifndef _EFI_DRIVERS_H_ +#define _EFI_DRIVERS_H_ + +typedef struct efi_driver_t { + const char *name; + void (*init)(void); +} efi_driver_t; + +extern struct devsw efipart_dev; + +/* EFI drivers. */ +extern const efi_driver_t fs_driver; + +#endif diff --git a/sys/boot/efi/libefi/efipart.c b/sys/boot/efi/drivers/efipart= =2Ec similarity index 75% rename from sys/boot/efi/libefi/efipart.c rename to sys/boot/efi/drivers/efipart.c index 5a99381..3e3a9c0 100644 --- a/sys/boot/efi/libefi/efipart.c +++ b/sys/boot/efi/drivers/efipart.c @@ -74,90 +74,109 @@ static int npdinfo =3D 0; =20 #define PD(dev) (pdinfo[(dev)->d_unit]) =20 +static EFI_STATUS +efipart_supported(EFI_DRIVER_BINDING *This, EFI_HANDLE handle, + EFI_DEVICE_PATH *RemainingDevicePath __unused) +{ + return BS->OpenProtocol(handle, &blkio_guid, + NULL, IH, handle, + EFI_OPEN_PROTOCOL_TEST_PROTOCOL); +} + +static EFI_STATUS +efipart_start(EFI_DRIVER_BINDING *This, EFI_HANDLE handle, + EFI_DEVICE_PATH *RemainingDevicePath __unused, + u_int* ndisk, uint* nrdisk) +{ + EFI_BLOCK_IO *blkio; + EFI_DEVICE_PATH *devpath, *devpathcpy, *tmpdevpath, *node; + EFI_STATUS status; + EFI_HANDLE alias; + + devpath =3D efi_lookup_devpath(handle); + + if (devpath =3D=3D NULL) { + return (EFI_DEVICE_ERROR); + } + + status =3D BS->HandleProtocol(handle, &blkio_guid, + (void**)&blkio); + if (EFI_ERROR(status)) + return (status); + + if (!blkio->Media->LogicalPartition) { + *nrdisk++; + return (EFI_UNSUPPORTED); + } + + /* + * If we come across a logical partition of subtype CDROM + * it doesn't refer to the CD filesystem itself, but rather + * to any usable El Torito boot image on it. In this case + * we try to find the parent device and add that instead as + * that will be the CD filesystem. + */ + node =3D efi_devpath_last_node(devpath); + if (DevicePathType(node) =3D=3D MEDIA_DEVICE_PATH && + DevicePathSubType(node) =3D=3D MEDIA_CDROM_DP) { + devpathcpy =3D efi_devpath_trim(devpath); + tmpdevpath =3D devpathcpy; + status =3D BS->LocateDevicePath(&blkio_guid, &tmpdevpath= , + &alias); + free(devpathcpy); + + if (EFI_ERROR(status)) + return (status); + + efi_register_handle(&efipart_dev, handle, alias); + } else + efi_register_handle(&efipart_dev, handle, NULL); + + pdinfo[npdinfo].pd_open =3D 0; + pdinfo[npdinfo].pd_bcache =3D NULL; + pdinfo[npdinfo].pd_unit =3D npdinfo; + npdinfo++; + *ndisk++; + + return (EFI_SUCCESS); +} + static int -efipart_init(void)=20 +efipart_init(void) { - EFI_BLOCK_IO *blkio; - EFI_DEVICE_PATH *devpath, *devpathcpy, *tmpdevpath, *node; - EFI_HANDLE *hin, *hout, *aliases, handle; + EFI_HANDLE *handles; EFI_STATUS status; UINTN sz; - u_int n, nin, nout, nrdisk; + u_int n, nin, ndisk, nrdisk; int err; =20 sz =3D 0; - hin =3D NULL; + handles =3D NULL; status =3D BS->LocateHandle(ByProtocol, &blkio_guid, 0, &sz, 0); if (status =3D=3D EFI_BUFFER_TOO_SMALL) { - hin =3D (EFI_HANDLE *)malloc(sz * 3); + handles =3D (EFI_HANDLE *)malloc(sz); status =3D BS->LocateHandle(ByProtocol, &blkio_guid, 0, &sz, - hin); + handles); if (EFI_ERROR(status)) - free(hin); + free(handles); } if (EFI_ERROR(status)) return (efi_status_to_errno(status)); =20 /* Filter handles to only include FreeBSD partitions. */ nin =3D sz / sizeof(EFI_HANDLE); - hout =3D hin + nin; - aliases =3D hout + nin; - nout =3D 0; - nrdisk =3D 0; - - bzero(aliases, nin * sizeof(EFI_HANDLE)); pdinfo =3D malloc(nin * sizeof(*pdinfo)); - if (pdinfo =3D=3D NULL) - return (ENOMEM); + ndisk =3D 0; + nrdisk =3D 0; =20 for (n =3D 0; n < nin; n++) { - devpath =3D efi_lookup_devpath(hin[n]); - if (devpath =3D=3D NULL) { - continue; - } - - status =3D BS->HandleProtocol(hin[n], &blkio_guid, - (void**)&blkio); - if (EFI_ERROR(status)) - continue; - if (!blkio->Media->LogicalPartition) { - nrdisk++; - continue; - } - - /* - * If we come across a logical partition of subtype CDROM - * it doesn't refer to the CD filesystem itself, but rather - * to any usable El Torito boot image on it. In this case - * we try to find the parent device and add that instead as - * that will be the CD filesystem. - */ - node =3D efi_devpath_last_node(devpath); - if (DevicePathType(node) =3D=3D MEDIA_DEVICE_PATH && - DevicePathSubType(node) =3D=3D MEDIA_CDROM_DP) { - devpathcpy =3D efi_devpath_trim(devpath); - tmpdevpath =3D devpathcpy; - status =3D BS->LocateDevicePath(&blkio_guid, &tmpdevpath, - &handle); - free(devpathcpy); - if (EFI_ERROR(status)) - continue; - hout[nout] =3D handle; - aliases[nout] =3D hin[n]; - } else - hout[nout] =3D hin[n]; - nout++; - pdinfo[npdinfo].pd_open =3D 0; - pdinfo[npdinfo].pd_bcache =3D NULL; - pdinfo[npdinfo].pd_unit =3D npdinfo; - npdinfo++; + efipart_start(NULL, handles[n], NULL, &ndisk, &nrdisk); } =20 bcache_add_dev(npdinfo); - err =3D efi_register_handles(&efipart_dev, hout, aliases, nout); - free(hin); + free(handles); =20 - if (nout =3D=3D 0 && nrdisk > 0) + if (ndisk =3D=3D 0 && nrdisk > 0) printf("Found %d disk(s) but no logical partition\n", nrdisk); return (err); } diff --git a/sys/boot/efi/drivers/fs_driver.c b/sys/boot/efi/drivers/fs_d= river.c new file mode 100644 index 0000000..b9c8536 --- /dev/null +++ b/sys/boot/efi/drivers/fs_driver.c @@ -0,0 +1,853 @@ +/*- + * Copyright (c) 2016 Eric McCorkle + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in th= e + * documentation and/or other materials provided with the distributio= n. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AN= D + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE= + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PU= RPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIAB= LE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUE= NTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOO= DS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)= + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, S= TRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY= WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY O= F + * SUCH DAMAGE. + * + * $FreeBSD$ + */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#ifdef EFI_ZFS_BOOT +#include +#endif +#include + +#include "efi_drivers.h" + +static EFI_GUID SimpleFileSystemProtocolGUID =3D SIMPLE_FILE_SYSTEM_PROT= OCOL; + +static struct fs_ops *backend_file_system[] =3D { + &dosfs_fsops, + &ufs_fsops, + &cd9660_fsops, + &tftp_fsops, + &nfs_fsops, + &gzipfs_fsops, + &bzipfs_fsops, + NULL +}; + +static struct devsw *backend_devsw[] =3D { + &efipart_dev, +#ifdef EFI_ZFS_BOOT + &zfs_dev, +#endif + NULL +}; + +typedef struct volinfo_t { + struct fs_ops *fsops; + struct devdesc *dev; +} volinfo_t; + +typedef struct fileinfo_t { + const volinfo_t* vinfo; + struct open_file fdata; + char path[]; +} fileinfo_t; + +static EFI_GUID FileInfoGUID =3D EFI_FILE_INFO_ID;; + +static EFIAPI EFI_STATUS +file_open_impl(EFI_FILE_HANDLE File, EFI_FILE_HANDLE *NewHandle, + CHAR16 *FileName, UINT64 OpenMode, UINT64 Attributes); + +static EFIAPI EFI_STATUS +file_close_impl(EFI_FILE_HANDLE File); + +static EFIAPI EFI_STATUS +file_delete_impl(EFI_FILE_HANDLE File); + +static EFIAPI EFI_STATUS +dir_read_impl(EFI_FILE_HANDLE File, UINTN *BufferSize, VOID *Buffer); + +static EFIAPI EFI_STATUS +dir_write_impl(EFI_FILE_HANDLE File, UINTN *BufferSize, + VOID *Buffer); + +static EFIAPI EFI_STATUS +file_read_impl(EFI_FILE_HANDLE File, UINTN *BufferSize, VOID *Buffer); + +static EFIAPI EFI_STATUS +file_write_impl(EFI_FILE_HANDLE File, UINTN *BufferSize, + VOID *Buffer); + +static EFIAPI EFI_STATUS +file_set_position_impl(EFI_FILE_HANDLE File, UINT64 Position); + +static EFIAPI EFI_STATUS +file_get_position_impl(EFI_FILE_HANDLE File, UINT64 *Position); + +static EFIAPI EFI_STATUS +file_get_info_impl(EFI_FILE_HANDLE File, EFI_GUID *InformationType, + UINTN *BufferSize, VOID *Buffer); + +static EFIAPI EFI_STATUS +file_set_info_impl(EFI_FILE_HANDLE File, EFI_GUID *InformationType, + UINTN BufferSize, VOID *Buffer); + +static EFIAPI EFI_STATUS +file_flush_impl(EFI_FILE_HANDLE File); + +static struct devdesc* +clone_devdesc(struct devdesc *dev) +{ + struct devdesc *out; + + switch(dev->d_dev->dv_type) { + case DEVT_ZFS: + out =3D malloc(sizeof(struct zfs_devdesc)); + + if (out =3D=3D NULL) { + return NULL; + } + + memcpy(out, dev, sizeof(struct zfs_devdesc)); + + return out; + + default: + out =3D malloc(sizeof(struct devdesc)); + + if (out =3D=3D NULL) { + return NULL; + } + + memcpy(out, dev, sizeof(struct devdesc)); + + return out; + } +} + +static EFI_STATUS +do_file_open(const volinfo_t *vinfo, const char filepath[], + int mode, EFI_FILE_HANDLE *out) +{ + EFI_FILE_HANDLE fhandle; + fileinfo_t *finfo; + struct stat st; + struct devdesc *tmpdev; + int err; + + memset(&st, 0, sizeof(struct stat)); + fhandle =3D malloc(sizeof(EFI_FILE) + sizeof(fileinfo_t) + + strlen(filepath) + 1); + + if (fhandle =3D=3D NULL) { + return (EFI_OUT_OF_RESOURCES); + } + + tmpdev =3D clone_devdesc(vinfo->dev); + + if (tmpdev =3D=3D NULL) { + free(fhandle); + return (EFI_OUT_OF_RESOURCES); + } + + finfo =3D (fileinfo_t*)(fhandle + 1); + finfo->fdata.f_flags =3D mode + 1; + finfo->fdata.f_dev =3D NULL; + finfo->fdata.f_ops =3D NULL; + finfo->fdata.f_offset =3D 0; + finfo->fdata.f_devdata =3D NULL; + + if ((err =3D vinfo->dev->d_dev->dv_open(&(finfo->fdata), tmpdev)= ) !=3D 0) { + free(fhandle); + return (errno_to_efi_status(err)); + } + + finfo->fdata.f_dev =3D vinfo->dev->d_dev; + + if ((err =3D vinfo->fsops->fo_open(filepath, &(finfo->fdata))) != =3D 0) { + free(fhandle); + return (errno_to_efi_status(err)); + } + + finfo->fdata.f_ops =3D vinfo->fsops; + + if ((err =3D vinfo->fsops->fo_stat(&(finfo->fdata), &st)) !=3D 0= ) { + free(fhandle); + return (errno_to_efi_status(err)); + } + + strcpy(finfo->path, filepath); + finfo->vinfo =3D vinfo; + fhandle->Revision =3D EFI_FILE_HANDLE_REVISION; + fhandle->Open =3D file_open_impl; + fhandle->Close =3D file_close_impl; + fhandle->Delete =3D file_delete_impl; + fhandle->SetPosition =3D file_set_position_impl; + fhandle->GetPosition =3D file_get_position_impl; + fhandle->GetInfo =3D file_get_info_impl; + fhandle->SetInfo =3D file_set_info_impl; + fhandle->Flush =3D file_flush_impl; + + if (S_ISDIR(st.st_mode)) { + fhandle->Read =3D dir_read_impl; + fhandle->Write =3D dir_write_impl; + } else { + fhandle->Read =3D file_read_impl; + fhandle->Write =3D file_write_impl; + } + + *out =3D fhandle; + + return (EFI_SUCCESS); +} + +static int +mode_from_efi(UINT64 efi_mode) +{ + int mode =3D 0; + + if (efi_mode & EFI_FILE_MODE_WRITE) { + mode |=3D O_WRONLY; + } else if (efi_mode & EFI_FILE_MODE_READ) { + mode |=3D O_RDONLY; + } else if (efi_mode & EFI_FILE_MODE_READ && + efi_mode & EFI_FILE_MODE_WRITE) { + mode |=3D O_RDWR; + } + + return mode; +} + +static UINT64 +mode_to_efi(int mode) +{ + UINT64 efi_mode =3D 0; + + if (mode & O_WRONLY) { + efi_mode |=3D EFI_FILE_MODE_WRITE; + } else if (mode & O_RDONLY) { + efi_mode |=3D EFI_FILE_MODE_READ; + } else if (mode & O_RDWR) { + efi_mode |=3D EFI_FILE_MODE_READ; + efi_mode |=3D EFI_FILE_MODE_WRITE; + } + + return (efi_mode); +} + +static EFIAPI EFI_STATUS +file_open_impl(EFI_FILE_HANDLE File, EFI_FILE_HANDLE *NewHandle, + CHAR16 *FileName, UINT64 OpenMode, UINT64 Attributes) +{ + fileinfo_t *finfo =3D (fileinfo_t*)(File + 1); + char buf[strlen(finfo->path) + strlen16(FileName) + 1]; + + strcpy_from_16(stpcpy(buf, finfo->path), FileName); + + return do_file_open(finfo->vinfo, buf, + mode_from_efi(OpenMode), NewHandle); +} + +static EFIAPI EFI_STATUS +file_close_impl(EFI_FILE_HANDLE File) +{ + fileinfo_t *finfo =3D (fileinfo_t*)(File + 1); + int res; + + if ((res =3D finfo->fdata.f_ops->fo_close(&(finfo->fdata))) !=3D= 0) { + return (errno_to_efi_status(res)); + } + + if ((res =3D finfo->vinfo->dev->d_dev->dv_close(&(finfo->fdata))= ) !=3D 0) { + return (errno_to_efi_status(res)); + } + + free(File); + return (EFI_SUCCESS); +} + +static EFIAPI EFI_STATUS +file_delete_impl(EFI_FILE_HANDLE File) +{ + file_close_impl(File); + + return (EFI_WARN_DELETE_FAILURE); +} + +static EFIAPI EFI_STATUS +dir_read_impl(EFI_FILE_HANDLE File, UINTN *BufferSize, VOID *Buffer) +{ + fileinfo_t *finfo =3D (fileinfo_t*)(File + 1); + fileinfo_t *entinfo; + struct dirent d; + struct stat st; + int err; + UINTN currsize =3D *BufferSize; + UINTN reqsize; + EFI_FILE_INFO *out =3D (EFI_FILE_INFO*)Buffer; + EFI_FILE_HANDLE enthandle; + EFI_STATUS status; + off_t currpos; + + /* Record teh current position so we can rewind if we have to */= + if ((currpos =3D finfo->fdata.f_ops->fo_seek(&(finfo->fdata), + 0, SEEK_CUR)) < 0) { + return (errno_to_efi_status(errno)); + } + + if ((err =3D finfo->fdata.f_ops->fo_readdir(&(finfo->fdata), &d)) !=3D = 0) { + return (errno_to_efi_status(errno)); + } + + reqsize =3D sizeof(EFI_FILE_INFO) + + ((strlen(d.d_name) + 1) * sizeof(CHAR16)); + + if (Buffer =3D=3D NULL || currsize < reqsize) { + finfo->fdata.f_ops->fo_seek(&(finfo->fdata), currpos, SE= EK_SET); + *BufferSize =3D reqsize; + + return (EFI_BUFFER_TOO_SMALL); + } + + // We have to actually open the file, since EFI directory + // reads are supposed to return stat information. + CHAR16 buf[d.d_namlen]; + strcpy_to_16(buf, d.d_name); + status =3D file_open_impl(File, &enthandle, buf, EFI_FILE_READ_O= NLY, 0); + + if (EFI_ERROR(status)) { + finfo->fdata.f_ops->fo_seek(&(finfo->fdata), currpos, SE= EK_SET); + return (status); + } + + entinfo =3D (fileinfo_t*)(enthandle + 1); + + if ((err =3D finfo->fdata.f_ops->fo_stat(&(entinfo->fdata), &st)= ) !=3D 0) { + finfo->fdata.f_ops->fo_seek(&(finfo->fdata), currpos, SE= EK_SET); + return (errno_to_efi_status(errno)); + } + + status =3D file_close_impl(enthandle); + + if (EFI_ERROR(status)) { + finfo->fdata.f_ops->fo_seek(&(finfo->fdata), currpos, SE= EK_SET); + return (status); + } + + // We're good at this point, copy everything into place. + out->Size =3D reqsize; + out->FileSize =3D st.st_size; + out->PhysicalSize =3D st.st_blocks * st.st_blksize; + out->Attribute =3D mode_to_efi(st.st_mode); + to_efi_time(&(out->LastAccessTime), st.st_atime); + to_efi_time(&(out->ModificationTime), st.st_mtime); + to_efi_time(&(out->CreateTime), st.st_ctime); + + if (S_ISDIR(st.st_mode)) { + out->Attribute |=3D EFI_FILE_DIRECTORY; + } + + strcpy_to_16(out->FileName, d.d_name); + *BufferSize =3D reqsize; + + return (EFI_SUCCESS); +} + +static EFIAPI EFI_STATUS +dir_write_impl(EFI_FILE_HANDLE File __unused, UINTN *BufferSize __unused= , + VOID *Buffer __unused) +{ + // EFI API doesn't allow writing to directories + return (EFI_UNSUPPORTED); +} + +static EFIAPI EFI_STATUS +file_read_impl(EFI_FILE_HANDLE File, UINTN *BufferSize, VOID *Buffer) +{ + fileinfo_t *finfo =3D (fileinfo_t*)(File + 1); + size_t readsize =3D *BufferSize; + size_t resid; + int err; + + if ((err =3D finfo->fdata.f_ops->fo_read(&(finfo->fdata), Buffer, + readsize, &resid)) !=3D 0= ) { + return (errno_to_efi_status(errno)); + } + + *BufferSize =3D readsize - resid; + + return (EFI_SUCCESS); +} + +static EFIAPI EFI_STATUS +file_write_impl(EFI_FILE_HANDLE File, UINTN *BufferSize, VOID *Buffer) +{ + fileinfo_t *finfo =3D (fileinfo_t*)(File + 1); + size_t writesize =3D *BufferSize; + size_t resid; + int err; + + if ((err =3D finfo->fdata.f_ops->fo_write(&(finfo->fdata), Buffer, + writesize, &resid)) !=3D= 0) { + return (errno_to_efi_status(errno)); + } + + *BufferSize =3D writesize - resid; + + return (EFI_SUCCESS); +} + +static EFIAPI EFI_STATUS +file_set_position_impl(EFI_FILE_HANDLE File, UINT64 Position) +{ + fileinfo_t *finfo =3D (fileinfo_t*)(File + 1); + int res; + + if (Position !=3D 0xffffffffffffffffLL) { + res =3D finfo->fdata.f_ops->fo_seek(&(finfo->fdata), + Position, SEEK_SET); + } else { + res =3D finfo->fdata.f_ops->fo_seek(&(finfo->fdata), + 0, SEEK_END); + } + + if (res > 0) { + return (EFI_SUCCESS); + } else { + return (errno_to_efi_status(res)); + } +} + + +static EFIAPI EFI_STATUS +file_get_position_impl(EFI_FILE_HANDLE File, UINT64 *Position) +{ + fileinfo_t *finfo =3D (fileinfo_t*)(File + 1); + off_t res; + + res =3D finfo->fdata.f_ops->fo_seek(&(finfo->fdata), 0, SEEK_CUR= ); + + if (res > 0) { + *Position =3D res; + + return (EFI_SUCCESS); + } else { + return (errno_to_efi_status(errno)); + } +} + +static EFIAPI EFI_STATUS +file_get_info_impl(EFI_FILE_HANDLE File, EFI_GUID *InformationType, + UINTN *BufferSize, VOID *Buffer) +{ + fileinfo_t *finfo =3D (fileinfo_t*)(File + 1); + + if (!memcmp(InformationType, &FileInfoGUID, sizeof(EFI_GUID))) {= + EFI_FILE_INFO *out =3D (EFI_FILE_INFO*)Buffer; + UINTN str16len =3D(strlen(finfo->path) + 1) * sizeof(CHA= R16); + UINTN currsize =3D *BufferSize; + UINTN reqsize =3D sizeof(EFI_FILE_INFO) + str16len; + struct stat st; + int err; + + memset(&st, 0, sizeof(struct stat)); + *BufferSize =3D reqsize; + + if (Buffer =3D=3D NULL || + currsize < sizeof(EFI_FILE_INFO) + str16len) { + *BufferSize =3D sizeof(EFI_FILE_INFO) + str16len= ; + return (EFI_BUFFER_TOO_SMALL); + } + + if ((err =3D finfo->fdata.f_ops->fo_stat(&(finfo->fdata)= , + &st)) !=3D 0) { + return (errno_to_efi_status(errno)); + } + + out->Size =3D sizeof(EFI_FILE_INFO) + str16len; + out->FileSize =3D st.st_size; + out->PhysicalSize =3D st.st_blocks * st.st_blksize; + to_efi_time(&(out->LastAccessTime), st.st_atime); + to_efi_time(&(out->ModificationTime), st.st_mtime); + to_efi_time(&(out->CreateTime), st.st_ctime); + out->Attribute =3D mode_to_efi(st.st_mode); + + if (S_ISDIR(st.st_mode)) { + out->Attribute |=3D EFI_FILE_DIRECTORY; + } + + strcpy_to_16(out->FileName, finfo->path); + } else { + return (EFI_UNSUPPORTED); + } + + return (EFI_SUCCESS); +} + +static EFIAPI EFI_STATUS +file_set_info_impl(EFI_FILE_HANDLE File __unused, + EFI_GUID *InformationType __unused, + UINTN BufferSize __unused, VOID *Buffer __unused) +{ + return (EFI_WRITE_PROTECTED); +} + +static EFIAPI EFI_STATUS +file_flush_impl(EFI_FILE_HANDLE File __unused) +{ + return (EFI_SUCCESS); +} + +static EFIAPI EFI_STATUS +open_volume_impl(EFI_FILE_IO_INTERFACE *This, EFI_FILE_HANDLE *Root) +{ + volinfo_t *vinfo =3D (volinfo_t*)(This + 1); + + return do_file_open(vinfo, "", O_RDONLY, Root); +} + +static struct fs_ops* +fs_probe(struct devdesc *dev) +{ + struct open_file f; + int err, i; + + f.f_flags =3D O_RDONLY + 1; + f.f_dev =3D (struct devsw *)0; + f.f_ops =3D (struct fs_ops *)0; + f.f_offset =3D 0; + f.f_devdata =3D dev; + + if ((err =3D dev->d_dev->dv_open(&f, dev)) !=3D 0) { + return NULL; + } + + for (i =3D 0; backend_file_system[i] !=3D NULL; i++) { + f.f_ops =3D backend_file_system[i]; + + if ((err =3D f.f_ops->fo_open("/", &f)) =3D=3D 0) { + return backend_file_system[i]; + } + } + + return NULL; +} + +static EFI_STATUS +make_fs_file_io_iface(struct devdesc *dev, EFI_FILE_IO_INTERFACE **out) +{ + static struct fs_ops* fsops; + EFI_FILE_IO_INTERFACE* fiface; + volinfo_t *vinfo; + + switch (dev->d_type) { +#ifdef EFI_ZFS_BOOT + case DEVT_ZFS: + fsops =3D &zfs_fsops; + break; +#endif + default: + fsops =3D fs_probe(dev); + break; + } + + if (fsops =3D=3D NULL) { + return (EFI_UNSUPPORTED); + } + + fiface =3D malloc(sizeof(EFI_FILE_IO_INTERFACE) + sizeof(volinfo= _t)); + + if (fiface =3D=3D NULL) { + return (EFI_OUT_OF_RESOURCES); + } + + vinfo =3D (volinfo_t*)(fiface + 1); + + fiface->Revision =3D EFI_FILE_IO_INTERFACE_REVISION; + fiface->OpenVolume =3D open_volume_impl; + vinfo->dev =3D dev; + vinfo->fsops =3D fsops; + + *out =3D fiface; + + return (EFI_SUCCESS); +} + +static EFIAPI EFI_STATUS +bind_iface(EFI_HANDLE handle, struct devdesc *dev) +{ + EFI_STATUS status; + EFI_FILE_IO_INTERFACE *iface; + + // Check if there is already a filesystem interface + status =3D BS->OpenProtocol(handle, &SimpleFileSystemProtocolGUI= D, + NULL, IH, handle, EFI_OPEN_PROTOCOL_TEST_PROTOCOL); + + if (!EFI_ERROR(status)) { + return (EFI_ACCESS_DENIED); + } else if (status !=3D EFI_UNSUPPORTED) { + return (status); + } + + status =3D make_fs_file_io_iface(dev, &iface); + + if (EFI_ERROR(status)) { + return (status); + } + + status =3D BS->InstallMultipleProtocolInterfaces(&handle, + &SimpleFileSystemProtocolGUID, iface, NULL); + + if (EFI_ERROR(status)) { + free(iface); + + return (status); + } + + return (status); +} + +static EFIAPI EFI_STATUS +stop_impl(EFI_DRIVER_BINDING *This __unused, EFI_HANDLE ControllerHandle= __unused, + UINTN NumberOfChildren __unused, EFI_HANDLE *ChildHandleBuffer= __unused) +{ + // Get the protocol inteface, uninstall it, and free it + return (EFI_SUCCESS); +} + +#ifdef EFI_ZFS_BOOT +static void +efi_zfs_probe(void) +{ + EFI_HANDLE h; + u_int unit; + int i; + char dname[SPECNAMELEN + 1]; + uint64_t guid; + + unit =3D 0; + h =3D efi_find_handle(&efipart_dev, 0); + for (i =3D 0; h !=3D NULL; h =3D efi_find_handle(&efipart_dev, ++i)) { + snprintf(dname, sizeof(dname), "%s%d:", efipart_dev.dv_name, i); + if (zfs_probe_dev(dname, &guid) =3D=3D 0) { + (void)efi_handle_update_dev(h, &zfs_dev, unit++, guid); + } + } +} +#endif + +static int +backend_parsedev(struct devdesc **dev, const char *devspec, const char *= *path) +{ + struct devdesc *idev; + struct devsw *dv; + char *cp; + const char *np; + int i; + + /* minimum length check */ + if (strlen(devspec) < 2) + return (EINVAL); + + /* look for a device that matches */ + for (i =3D 0; backend_devsw[i] !=3D NULL; i++) { + dv =3D backend_devsw[i]; + if (!strncmp(devspec, dv->dv_name, strlen(dv->dv_name))) + break; + } + if (backend_devsw[i] =3D=3D NULL) { + return (ENOENT); + } + + np =3D devspec + strlen(dv->dv_name); + +#ifdef EFI_ZFS_BOOT + if (dv->dv_type =3D=3D DEVT_ZFS) { + int err; + + idev =3D malloc(sizeof(struct zfs_devdesc)); + if (idev =3D=3D NULL) + return (ENOMEM); + + err =3D zfs_parsedev((struct zfs_devdesc*)idev, np, path); + if (err !=3D 0) { + free(idev); + return (err); + } + *dev =3D idev; + cp =3D strchr(np + 1, ':'); + } else +#endif + { + idev =3D malloc(sizeof(struct devdesc)); + if (idev =3D=3D NULL) + return (ENOMEM); + + idev->d_dev =3D dv; + idev->d_type =3D dv->dv_type; + idev->d_unit =3D -1; + if (*np !=3D '\0' && *np !=3D ':') { + idev->d_unit =3D strtol(np, &cp, 0); + if (cp =3D=3D np) { + idev->d_unit =3D -1; + free(idev); + return (EUNIT); + } + } + } + + if (*cp !=3D '\0' && *cp !=3D ':') { + free(idev); + return (EINVAL); + } + + if (path !=3D NULL) + *path =3D (*cp =3D=3D 0) ? cp : cp + 1; + if (dev !=3D NULL) + *dev =3D idev; + else + free(idev); + return (0); +} + +static int +backend_getdev(void **vdev, const char *devspec, const char **path) +{ + struct devdesc **dev =3D (struct devdesc **)vdev; + int rv; + + /* + * If it looks like this is just a path and no device, then + * use the current device instead. + */ + if (devspec =3D=3D NULL || *devspec =3D=3D '/' || !strchr(devspec, ':')= ) { + rv =3D backend_parsedev(dev, getenv("currdev"), NULL); + if (rv =3D=3D 0 && path !=3D NULL) + *path =3D devspec; + return (rv); + } + + /* Parse the device name off the beginning of the devspec. */ + return (backend_parsedev(dev, devspec, path)); +} + +static void +init(void) +{ + EFI_HANDLE h; + EFI_STATUS status; + u_int unit; + int i; + struct devsw *dev; + uint64_t pool_guid; + int (*old_getdev)(void **, const char *, const char **) =3D + archsw.arch_getdev; + + archsw.arch_getdev =3D backend_getdev; +#ifdef EFI_ZFS_BOOT + /* Note this needs to be set before ZFS init. */ + archsw.arch_zfs_probe =3D efi_zfs_probe; +#endif + + /* Initialize all the backend drivers */ + for (i =3D 0; backend_devsw[i] !=3D NULL; i++) { + if (backend_devsw[i]->dv_init !=3D NULL) + (backend_devsw[i]->dv_init)(); + } + + /* Attach SIMPLE_FILE_SYSTEM interfaces to all efipart devices *= / + unit =3D 0; + h =3D efi_find_handle(&efipart_dev, 0); + for (i =3D 0; h !=3D NULL; h =3D efi_find_handle(&efipart_dev, ++i)) { + struct devdesc *currdev; + + currdev =3D malloc(sizeof(struct devdesc)); + + if (currdev =3D=3D NULL) { + continue; + } + + if (efi_handle_lookup(h, &dev, &unit, &pool_guid) !=3D 0= ) { + free(currdev); + continue; + } + + currdev->d_dev =3D dev; + currdev->d_unit =3D unit; + currdev->d_opendata =3D NULL; + currdev->d_type =3D currdev->d_dev->dv_type; + + status =3D bind_iface(h, currdev); + + if (EFI_ERROR(status) && status !=3D EFI_UNSUPPORTED && + status !=3D EFI_ACCESS_DENIED) { + printf("Failed to attach filesystem interface t= o efipart%u (%ld)\n", + unit, EFI_ERROR_CODE(status)); + free(currdev); + } + } + + /* Attach SIMPLE_FILE_SYSTEM interface to all ZFS devices */ +#ifdef EFI_ZFS_BOOT + unit =3D 0; + h =3D efi_find_handle(&zfs_dev, 0); + for (i =3D 0; h !=3D NULL; h =3D efi_find_handle(&zfs_dev, ++i)) { + struct zfs_devdesc *currdev; + + currdev =3D malloc(sizeof(struct zfs_devdesc)); + + if (currdev =3D=3D NULL) { + continue; + } + + if (efi_handle_lookup(h, &dev, &unit, &pool_guid) !=3D 0= ) { + free(currdev); + continue; + } + + currdev->d_dev =3D dev; + currdev->d_unit =3D unit; + currdev->d_opendata =3D NULL; + currdev->d_type =3D currdev->d_dev->dv_type; + currdev->pool_guid =3D pool_guid; + currdev->root_guid =3D 0; + + status =3D bind_iface(h, (struct devdesc*)currdev); + + if (EFI_ERROR(status)) { + printf("Failed to attach filesystem interface to zfs%u= (%ld)\n", + unit, EFI_ERROR_CODE(status)); + } + } +#endif + archsw.arch_getdev =3D old_getdev; +} + +const efi_driver_t fs_driver =3D +{ + .name =3D "FS Backend", + .init =3D init, +}; diff --git a/sys/boot/efi/include/efilib.h b/sys/boot/efi/include/efilib.= h index 09ccc2f..15d4b48 100644 --- a/sys/boot/efi/include/efilib.h +++ b/sys/boot/efi/include/efilib.h @@ -31,22 +31,26 @@ #define _LOADER_EFILIB_H =20 #include +#include =20 extern EFI_HANDLE IH; -extern EFI_SYSTEM_TABLE *ST; +extern EFI_SYSTEM_TABLE *ST; extern EFI_BOOT_SERVICES *BS; extern EFI_RUNTIME_SERVICES *RS; =20 -extern struct devsw efipart_dev; +extern struct devsw efifs_dev; extern struct devsw efinet_dev; +extern struct fs_ops efifs_fsops; extern struct netif_driver efinetif; =20 void *efi_get_table(EFI_GUID *tbl); =20 int efi_register_handles(struct devsw *, EFI_HANDLE *, EFI_HANDLE *, int= ); +int efi_register_handle(struct devsw *, EFI_HANDLE, EFI_HANDLE); EFI_HANDLE efi_find_handle(struct devsw *, int); int efi_handle_lookup(EFI_HANDLE, struct devsw **, int *, uint64_t *); int efi_handle_update_dev(EFI_HANDLE, struct devsw *, int, uint64_t); +int efi_handle_remove_dev(EFI_HANDLE); =20 EFI_DEVICE_PATH *efi_lookup_image_devpath(EFI_HANDLE); EFI_DEVICE_PATH *efi_lookup_devpath(EFI_HANDLE); @@ -57,6 +61,7 @@ CHAR16 *efi_devpath_name(EFI_DEVICE_PATH *); void efi_free_devpath_name(CHAR16 *); =20 int efi_status_to_errno(EFI_STATUS); +EFI_STATUS errno_to_efi_status(int errno); =20 void efi_time_init(void); void efi_time_fini(void); @@ -65,4 +70,7 @@ EFI_STATUS main(int argc, CHAR16 *argv[]); void exit(EFI_STATUS status); void delay(int usecs); =20 +time_t from_efi_time(EFI_TIME *efi_time); +void to_efi_time(EFI_TIME *efi_time, time_t time); + #endif /* _LOADER_EFILIB_H */ diff --git a/sys/boot/efi/include/efiprot.h b/sys/boot/efi/include/efipro= t.h index 28cec59..2221577 100644 --- a/sys/boot/efi/include/efiprot.h +++ b/sys/boot/efi/include/efiprot.h @@ -27,6 +27,8 @@ Revision History =20 --*/ =20 +#include + // // Device Path protocol // @@ -307,9 +309,9 @@ typedef struct { // // The FileName field of the EFI_FILE_INFO data structure is variable le= ngth. // Whenever code needs to know the size of the EFI_FILE_INFO data struct= ure, it needs to -// be the size of the data structure without the FileName field. The fo= llowing macro=20 +// be the size of the data structure without the FileName field. The fo= llowing macro // computes this size correctly no matter how big the FileName array is = declared. -// This is required to make the EFI_FILE_INFO data structure ANSI compil= ant.=20 +// This is required to make the EFI_FILE_INFO data structure ANSI compil= ant. // =20 #define SIZE_OF_EFI_FILE_INFO EFI_FIELD_OFFSET(EFI_FILE_INFO,FileName) @@ -329,9 +331,9 @@ typedef struct { // // The VolumeLabel field of the EFI_FILE_SYSTEM_INFO data structure is v= ariable length. // Whenever code needs to know the size of the EFI_FILE_SYSTEM_INFO data= structure, it needs -// to be the size of the data structure without the VolumeLable field. = The following macro=20 +// to be the size of the data structure without the VolumeLable field. = The following macro // computes this size correctly no matter how big the VolumeLable array = is declared. -// This is required to make the EFI_FILE_SYSTEM_INFO data structure ANSI= compilant.=20 +// This is required to make the EFI_FILE_SYSTEM_INFO data structure ANSI= compilant. // =20 #define SIZE_OF_EFI_FILE_SYSTEM_INFO EFI_FIELD_OFFSET(EFI_FILE_SYSTEM_IN= FO,VolumeLabel) @@ -411,7 +413,7 @@ typedef struct { EFI_DEVICE_IO Write; } EFI_IO_ACCESS; =20 -typedef=20 +typedef EFI_STATUS (EFIAPI *EFI_PCI_DEVICE_PATH) ( IN struct _EFI_DEVICE_IO_INTERFACE *This, @@ -555,4 +557,47 @@ typedef struct _EFI_UNICODE_COLLATION_INTERFACE { CHAR8 *SupportedLanguages; } EFI_UNICODE_COLLATION_INTERFACE; =20 +// +// Driver Binding protocol +// + +#define DRIVER_BINDING_PROTOCOL \ + { 0x18a031ab, 0xb443, 0x4d1a, {0xa5, 0xc0, 0x0c, 0x09, 0x26, 0x1e, 0x9= f, 0x71} } + +INTERFACE_DECL(_EFI_DRIVER_BINDING); + +typedef +EFI_STATUS +(EFIAPI *EFI_DRIVER_BINDING_SUPPORTED) ( + IN struct _EFI_DRIVER_BINDING *This, + IN EFI_HANDLE ControllerHandle, + IN EFI_DEVICE_PATH *RemainingPath + ); + +typedef +EFI_STATUS +(EFIAPI *EFI_DRIVER_BINDING_START) ( + IN struct _EFI_DRIVER_BINDING *This, + IN EFI_HANDLE ControllerHandle, + IN EFI_DEVICE_PATH *RemainingPath + ); + +typedef +EFI_STATUS +(EFIAPI *EFI_DRIVER_BINDING_STOP) ( + IN struct _EFI_DRIVER_BINDING *This, + IN EFI_HANDLE ControllerHandle, + IN UINTN NumberOfChildren, + IN EFI_HANDLE *ChildHandleBuffer + ); + +typedef struct _EFI_DRIVER_BINDING { + EFI_DRIVER_BINDING_SUPPORTED Supported; + EFI_DRIVER_BINDING_START Start; + EFI_DRIVER_BINDING_STOP Stop; + UINT32 Version; + EFI_HANDLE ImageHandle; + EFI_HANDLE DriverBindingHandle; +} EFI_DRIVER_BINDING; + #endif diff --git a/sys/boot/efi/include/string16.h b/sys/boot/efi/include/strin= g16.h new file mode 100644 index 0000000..5e4f9c1 --- /dev/null +++ b/sys/boot/efi/include/string16.h @@ -0,0 +1,45 @@ +/*- + * Copyright (c) 2016 Eric McCorkle + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in th= e + * documentation and/or other materials provided with the distributio= n. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AN= D + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE= + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PU= RPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIAB= LE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUE= NTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOO= DS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)= + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, S= TRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY= WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY O= F + * SUCH DAMAGE. + * + * $FreeBSD$ + */ + +#ifndef _STRING16_H_ +#define _STRING16_H_ + +#include +#include + +/* + * These are 16-bit variants of string,h functions for use with EFI code= =2E + */ + +extern size_t strlen16(const CHAR16 *str); +extern CHAR16* strcpy16(CHAR16 *dst, const CHAR16 *src); +extern CHAR16* stpcpy16(CHAR16 *dst, const CHAR16 *src); +extern CHAR16* strcpy_to_16(CHAR16 *dst, const char *src); +extern char* strcpy_from_16(char *dst, const CHAR16 *src); + +#endif diff --git a/sys/boot/efi/libefi/Makefile b/sys/boot/efi/libefi/Makefile index d9619be..8684403 100644 --- a/sys/boot/efi/libefi/Makefile +++ b/sys/boot/efi/libefi/Makefile @@ -10,8 +10,8 @@ LIB=3D efi INTERNALLIB=3D WARNS?=3D 2 =20 -SRCS=3D delay.c devpath.c efi_console.c efinet.c efipart.c errno.c \ - handles.c libefi.c +SRCS=3D delay.c devpath.c efi_console.c efifs.c efinet.c env.c errno.c \= + handles.c libefi.c string16.c =20 .if ${MACHINE_CPUARCH} =3D=3D "amd64" || ${MACHINE_CPUARCH} =3D=3D "i386= " SRCS+=3D time.c diff --git a/sys/boot/efi/libefi/efifs.c b/sys/boot/efi/libefi/efifs.c new file mode 100644 index 0000000..dd9fb0f --- /dev/null +++ b/sys/boot/efi/libefi/efifs.c @@ -0,0 +1,464 @@ +/*- + * Copyright (c) 2016 Eric McCorkle + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in th= e + * documentation and/or other materials provided with the distributio= n. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AN= D + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE= + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PU= RPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIAB= LE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUE= NTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOO= DS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)= + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, S= TRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY= WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY O= F + * SUCH DAMAGE. + * + * $FreeBSD$ + */ + +#include +#include +#include +#include +#include +#include +#include + +static EFI_GUID FileInfoGUID =3D EFI_FILE_INFO_ID;; +static EFI_GUID SimpleFileSystemProtocolGUID =3D SIMPLE_FILE_SYSTEM_PROT= OCOL; +static EFI_GUID BlockIoProtocolGUID =3D BLOCK_IO_PROTOCOL; +static EFI_GUID DevicePathGUID =3D DEVICE_PATH_PROTOCOL; + +static int efifs_open(const char *path, struct open_file *f); +static int efifs_write(struct open_file *f, void *buf, size_t size, size= _t *resid); +static int efifs_close(struct open_file *f); +static int efifs_read(struct open_file *f, void *buf, size_t size, size_= t *resid); +static off_t efifs_seek(struct open_file *f, off_t offset, int where); +static int efifs_stat(struct open_file *f, struct stat *sb); +static int efifs_readdir(struct open_file *f, struct dirent *d); + +static int efifs_dev_init(void); +static int efifs_dev_strategy(void *, int, daddr_t, size_t, size_t, char= *, size_t *); +static int efifs_dev_open(struct open_file *, ...); +static int efifs_dev_close(struct open_file *); +static int efifs_dev_print(int); + +struct devsw efifs_dev =3D { + .dv_name =3D "EFI", + .dv_type =3D DEVT_EFI, + .dv_init =3D efifs_dev_init, + .dv_strategy =3D efifs_dev_strategy, + .dv_open =3D efifs_dev_open, + .dv_close =3D efifs_dev_close, + .dv_ioctl =3D noioctl, + .dv_print =3D efifs_dev_print, + .dv_cleanup =3D NULL +}; + +struct fs_ops efifs_fsops =3D { + "EFI", + efifs_open, + efifs_close, + efifs_read, + efifs_write, + efifs_seek, + efifs_stat, + efifs_readdir +}; + +static int +efifs_dev_init(void) +{ + EFI_HANDLE *hin; + EFI_STATUS status; + UINTN sz; + u_int n, nin, unit; + int err; + + sz =3D 0; + hin =3D NULL; + status =3D BS->LocateHandle(ByProtocol, &SimpleFileSystemProtocolGUID, + 0, &sz, 0); + if (status =3D=3D EFI_BUFFER_TOO_SMALL) { + hin =3D (EFI_HANDLE *)malloc(sz); + status =3D BS->LocateHandle(ByProtocol, + &SimpleFileSystemProtocolGUID, 0, &sz, hin); + if (EFI_ERROR(status)) + free(hin); + } + if (EFI_ERROR(status)) + return (efi_status_to_errno(status)); + + /* Filter handles to only include FreeBSD partitions. */ + nin =3D sz / sizeof(EFI_HANDLE); + unit =3D 0; + + for (n =3D 0; n < nin; n++) { + status =3D BS->OpenProtocol(hin[n], &SimpleFileSystemProtocolGUID, + NULL, IH, NULL, + EFI_OPEN_PROTOCOL_TEST_PROTOCO= L); + if (EFI_ERROR(status)) + continue; + + efi_handle_update_dev(hin[n], &efifs_dev, unit++, 0); + } + + free(hin); + return (err); +} + + +static int +efifs_dev_print(int verbose) +{ + char line[80]; + EFI_DEVICE_PATH *devpath; + EFI_BLOCK_IO *blkio; + EFI_HANDLE h, *hin; + EFI_STATUS status; + u_int unit, n; + + for (unit =3D 0, h =3D efi_find_handle(&efifs_dev, 0); + h !=3D NULL; h =3D efi_find_handle(&efifs_dev, ++unit)) { + sprintf(line, " %s%d:", efifs_dev.dv_name, unit); + pager_output(line); + pager_output(" EFI(SIMPLE_FILE_SYSTEM"); + + status =3D BS->HandleProtocol(hin[n], &DevicePathGUID, + (void **)&devpath); + if (!EFI_ERROR(status)) { + pager_output(", DEVICE_PATH"); + } + + status =3D BS->HandleProtocol(hin[n], &BlockIoProtocolGUID, + (void **)&blkio); + if (!EFI_ERROR(status)) { + pager_output(", BLOCK_IO"); + } + pager_output(")\n"); + } + return (0); +} + +static int +efifs_dev_open(struct open_file *f, ...) +{ + va_list args; + struct devdesc *dev; + EFI_FILE_IO_INTERFACE *fsiface; + EFI_HANDLE h; + EFI_STATUS status; + + va_start(args, f); + dev =3D va_arg(args, struct devdesc*); + va_end(args); + + h =3D efi_find_handle(&efifs_dev, dev->d_unit); + + if (h =3D=3D NULL) + return (EINVAL); + + status =3D BS->OpenProtocol(h, &SimpleFileSystemProtocolGUID, + (void**)&fsiface, IH, NULL, EFI_OPEN_PROTOCOL_GET_PROTOCOL);= + + if (EFI_ERROR(status)) { + return (efi_status_to_errno(status)); + } + + dev->d_opendata =3D fsiface; + return (0); +} + +static int +efifs_dev_close(struct open_file *f) +{ + struct devdesc *dev; + EFI_HANDLE h; + EFI_STATUS status; + + dev =3D (struct devdesc *)(f->f_devdata); + h =3D efi_find_handle(&efifs_dev, dev->d_unit); + + if (h =3D=3D NULL) + return (EINVAL); + + if (dev->d_opendata =3D=3D NULL) + return (EINVAL); + + status =3D BS->CloseProtocol(h, &SimpleFileSystemProtocolGUID, I= H, NULL); + + if (EFI_ERROR(status)) + return (efi_status_to_errno(status)); + + dev->d_opendata =3D NULL; + return (0); +} + + +/* Raw I/O isn't supported on EFI FS devices, as they talk through + * SIMPLE_FILE_SYSTEM_INTERFACE. + */ +static int +efifs_dev_strategy(void *devdata __unused, int rw __unused, daddr_t blk = __unused, + size_t offset, size_t size __unused, char *buf __unus= ed, + size_t *rsize __unused) +{ + printf("Raw I/O not supported on EFI FS interface\n"); + return ENOTSUP; +} + +/* + * Open a file. + */ +static int +efifs_open(const char *upath, struct open_file *f) +{ + struct devdesc *dev; + EFI_FILE_IO_INTERFACE *fsiface; + EFI_FILE_HANDLE root; + EFI_STATUS status; + CHAR16 path[strlen(upath) + 1]; + + dev =3D (struct devdesc *)(f->f_devdata); + fsiface =3D dev->d_opendata; + + if (!strcmp(upath, "") || !strcmp(upath, "/")) { + return (fsiface->OpenVolume(fsiface, + (EFI_FILE_HANDLE*)&(f->f_fsd= ata))); + } else { + status =3D fsiface->OpenVolume(fsiface, &root); + + if (EFI_ERROR(status)) { + return (efi_status_to_errno(status)); + } + + strcpy_to_16(path, upath); + status =3D root->Open(root, (EFI_FILE_HANDLE*)&(f->f_fsd= ata), path, + EFI_FILE_MODE_READ, 0); + + root->Close(root); + + if (EFI_ERROR(status)) { + return (efi_status_to_errno(status)); + } + + return 0; + } +} + +static int +efifs_close(struct open_file *f) +{ + EFI_FILE_HANDLE file =3D (EFI_FILE_HANDLE)f->f_fsdata; + EFI_STATUS status; + + status =3D file->Close(file); + + if (EFI_ERROR(status)) + return (efi_status_to_errno(status)); + + return (0); +} + +static int +efifs_read(struct open_file *f, void *start, size_t size, size_t *resid = /* out */) +{ + EFI_FILE_HANDLE file =3D (EFI_FILE_HANDLE)f->f_fsdata; + UINTN readsize =3D size; + EFI_STATUS status; + + status =3D file->Read(file, &readsize, start); + + if (EFI_ERROR(status)) + return (efi_status_to_errno(status)); + + if (resid) + *resid =3D size - readsize; + + return (0); +} + +static int +efifs_write(struct open_file *f, void *start, size_t size, + size_t *resid /* out */) +{ + EFI_FILE_HANDLE file =3D (EFI_FILE_HANDLE)f->f_fsdata; + UINTN writesize =3D size; + EFI_STATUS status; + + status =3D file->Write(file, &writesize, start); + + if (EFI_ERROR(status)) + return (efi_status_to_errno(status)); + + if (resid) + *resid =3D size - writesize; + + return (0); +} + +static off_t +efifs_seek(struct open_file *f, off_t offset, int where) +{ + EFI_FILE_HANDLE file =3D (EFI_FILE_HANDLE)f->f_fsdata; + UINT64 pos; + EFI_STATUS status; + + switch (where) { + case SEEK_SET: + status =3D file->SetPosition(file, offset); + + if (status !=3D EFI_SUCCESS) { + errno =3D (efi_status_to_errno(status)); + return -1; + } + + break; + case SEEK_CUR: + status =3D file->GetPosition(file, &pos); + + if (status !=3D EFI_SUCCESS) { + errno =3D (efi_status_to_errno(status)); + return -1; + } + + status =3D file->SetPosition(file, pos + offset); + + if (status !=3D EFI_SUCCESS) { + errno =3D (efi_status_to_errno(status)); + return -1; + } + + break; + case SEEK_END: + status =3D file->SetPosition(file, 0xffffffffffffffff); + + if (status !=3D EFI_SUCCESS) { + errno =3D (efi_status_to_errno(status)); + return -1; + } + default: + errno =3D EINVAL; + return (-1); + } + + status =3D file->GetPosition(file, &pos); + + if (status !=3D EFI_SUCCESS) { + errno =3D (efi_status_to_errno(status)); + return -1; + } + + return (pos); +} + +/* SIMPLE_FILE_SYSTEM_PROTOCOL is geared towards FAT, so we can't + * reproduce stat with absolute fidelity. + */ +static int +efifs_stat(struct open_file *f, struct stat *sb) +{ + EFI_FILE_HANDLE file; + UINTN size =3D 0; + EFI_FILE_INFO *finfo;; + EFI_STATUS status; + + file =3D (EFI_FILE_HANDLE)f->f_fsdata; + status =3D file->GetInfo(file, &FileInfoGUID, &size, NULL); + + if (status !=3D EFI_BUFFER_TOO_SMALL) { + errno =3D (efi_status_to_errno(status)); + return -1; + } + + finfo =3D malloc(size); + status =3D file->GetInfo(file, &FileInfoGUID, &size, finfo); + + if (status !=3D EFI_SUCCESS) { + errno =3D (efi_status_to_errno(status)); + return -1; + } + + /* We can't properly fill these in... */ + sb->st_ino =3D 0; + sb->st_nlink =3D 0; + sb->st_uid =3D 0; + sb->st_gid =3D 0; + sb->st_blksize =3D 512; + /* Build the mode field */ + if (finfo->Attribute & EFI_FILE_DIRECTORY) { + sb->st_mode =3D S_IFDIR; + } else { + sb->st_mode =3D S_IFREG; + } + + if (finfo->Attribute & EFI_FILE_MODE_READ) { + sb->st_mode =3D S_IRUSR | S_IXUSR | S_IRGRP | + S_IXGRP | S_IROTH | S_IXOTH; + } + + if (finfo->Attribute & EFI_FILE_MODE_READ) { + sb->st_mode =3D S_IWUSR | S_IWGRP | S_IWOTH; + } + /* This may or may not be supported, depending on the FS driver = */ + sb->st_blocks =3D finfo->PhysicalSize / 512; + /* These fields we can get right */ + sb->st_size =3D finfo->FileSize; + sb->st_atime =3D from_efi_time(&(finfo->LastAccessTime)); + sb->st_mtime =3D from_efi_time(&(finfo->ModificationTime)); + sb->st_ctime =3D from_efi_time(&(finfo->CreateTime)); + + free(finfo); + + return (0); +} + +static int +efifs_readdir(struct open_file *f, struct dirent *d) +{ + EFI_FILE_HANDLE file; + UINTN size =3D 0; + EFI_FILE_INFO *finfo;; + EFI_STATUS status; + + file =3D (EFI_FILE_HANDLE)f->f_fsdata; + status =3D file->Read(file, &size, NULL); + + if (status !=3D EFI_BUFFER_TOO_SMALL) { + errno =3D (efi_status_to_errno(status)); + return -1; + } + + if (size =3D=3D 0) { + return (ENOENT); + } + + finfo =3D malloc(size); + status =3D file->Read(file, &size, finfo); + + if (status !=3D EFI_SUCCESS) { + errno =3D (efi_status_to_errno(status)); + return -1; + } + + strcpy_from_16(d->d_name, finfo->FileName); + d->d_namlen =3D strlen(d->d_name); + d->d_reclen =3D sizeof(struct dirent); + /* We can't faithfully reproduce this due to the limitations + * of the SIMPLE_FILE_SYSTEM interface */ + d->d_fileno =3D 0; + + free(finfo); + + return (0); +} diff --git a/sys/boot/efi/libefi/errno.c b/sys/boot/efi/libefi/errno.c index fac903f..0f354c3 100644 --- a/sys/boot/efi/libefi/errno.c +++ b/sys/boot/efi/libefi/errno.c @@ -30,6 +30,69 @@ __FBSDID("$FreeBSD$"); #include #include =20 +EFI_STATUS +errno_to_efi_status(int errno) +{ + EFI_STATUS status; + + switch (errno) { + case EPERM: + status =3D EFI_ACCESS_DENIED; + break; + + case EOVERFLOW: + status =3D EFI_BUFFER_TOO_SMALL; + break; + + case EIO: + status =3D EFI_DEVICE_ERROR; + break; + + case EINVAL: + status =3D EFI_INVALID_PARAMETER; + break; + + case ESTALE: + status =3D EFI_MEDIA_CHANGED; + break; + + case ENXIO: + status =3D EFI_NO_MEDIA; + break; + + case ENOENT: + status =3D EFI_NOT_FOUND; + break; + + case ENOMEM: + status =3D EFI_OUT_OF_RESOURCES; + break; + + case ENOTSUP: + case ENODEV: + status =3D EFI_UNSUPPORTED; + break; + + case ENOSPC: + status =3D EFI_VOLUME_FULL; + break; + + case EACCES: + status =3D EFI_WRITE_PROTECTED; + break; + + case 0: + status =3D EFI_SUCCESS; + break; + + default: + status =3D EFI_DEVICE_ERROR; + break; + } + + return (status); +} + int efi_status_to_errno(EFI_STATUS status) { diff --git a/sys/boot/efi/libefi/handles.c b/sys/boot/efi/libefi/handles.= c index 1e4ef6f..c118085 100644 --- a/sys/boot/efi/libefi/handles.c +++ b/sys/boot/efi/libefi/handles.c @@ -41,21 +41,36 @@ struct entry { struct entry *entry; int nentries; =20 +static int +get_next_unit(struct devsw *sw) +{ + int i, idx; + + for (i =3D 0, idx =3D 0; i < nentries; i++) { + if (entry[i].dev =3D=3D sw) { + idx++; + } + } + + return (idx); +} + int efi_register_handles(struct devsw *sw, EFI_HANDLE *handles, EFI_HANDLE *aliases, int count) { size_t sz; - int idx, unit; + int idx, unit, i; =20 idx =3D nentries; nentries +=3D count; sz =3D nentries * sizeof(struct entry); + unit =3D get_next_unit(sw); entry =3D (entry =3D=3D NULL) ? malloc(sz) : realloc(entry, sz); - for (unit =3D 0; idx < nentries; idx++, unit++) { - entry[idx].handle =3D handles[unit]; + for (i =3D 0; idx < nentries; idx++, unit++, i++) { + entry[idx].handle =3D handles[i]; if (aliases !=3D NULL) - entry[idx].alias =3D aliases[unit]; + entry[idx].alias =3D aliases[i]; else entry[idx].alias =3D NULL; entry[idx].dev =3D sw; @@ -64,6 +79,16 @@ efi_register_handles(struct devsw *sw, EFI_HANDLE *han= dles, return (0); } =20 +int +efi_register_handle(struct devsw *sw, EFI_HANDLE handle, EFI_HANDLE alia= s) +{ + if (alias =3D=3D NULL) { + return efi_register_handles(sw, &handle, NULL, 1); + } else { + return efi_register_handles(sw, &handle, &alias, 1); + } +} + EFI_HANDLE efi_find_handle(struct devsw *dev, int unit) { @@ -116,3 +141,29 @@ efi_handle_update_dev(EFI_HANDLE h, struct devsw *de= v, int unit, =20 return (ENOENT); } + +int +efi_handle_remove_dev(EFI_HANDLE h) +{ + int idx; + + /* Find the entry */ + for (idx =3D 0; idx < nentries; idx++) { + if (entry[idx].handle !=3D h) + continue; + } + + if (idx >=3D nentries) + return (ENOENT); + else if (idx =3D=3D nentries - 1) { + nentries--; + entry =3D realloc(entry, nentries * sizeof(struct entry)= ); + } else { + memcpy(entry + idx, entry + idx + 1, + sizeof(struct entry) * (nentries - (idx + 1))); + nentries--; + entry =3D realloc(entry, nentries * sizeof(struct entry)= ); + } + + return (0); +} diff --git a/sys/boot/efi/libefi/string16.c b/sys/boot/efi/libefi/string1= 6.c new file mode 100644 index 0000000..299d72d --- /dev/null +++ b/sys/boot/efi/libefi/string16.c @@ -0,0 +1,88 @@ +/*- + * Copyright (c) 2016 Eric McCorkle + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in th= e + * documentation and/or other materials provided with the distributio= n. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AN= D + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE= + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PU= RPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIAB= LE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUE= NTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOO= DS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)= + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, S= TRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY= WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY O= F + * SUCH DAMAGE. + * + * $FreeBSD$ + */ + +#include "string16.h" +#include + +size_t +strlen16(const CHAR16 *str) +{ + size_t i; + + for (i =3D 0; str[i] !=3D 0; i++); + + return i; +} + +CHAR16 * +strcpy16(CHAR16 *dst, const CHAR16 *src) +{ + stpcpy16(dst, src); + + return (dst); +} + +CHAR16 * +stpcpy16(CHAR16 *dst, const CHAR16 *src) +{ + for (; *src !=3D 0; src++, dst++) { + *dst =3D *src; + } + + *dst =3D *src; + + return dst; +} + +char * +strcpy_from_16(char *dst, const CHAR16 *src) +{ + int i; + + for (i =3D 0; src[i] !=3D 0; i++) { + dst[i] =3D src[i]; + } + + dst[i] =3D 0; + + return (dst); +} + +CHAR16 * +strcpy_to_16(CHAR16 *dst, const char *src) +{ + int i; + + for (i =3D 0; src[i] !=3D 0; i++) { + dst[i] =3D src[i]; + } + + dst[i] =3D 0; + + return (dst); +} diff --git a/sys/boot/efi/libefi/time.c b/sys/boot/efi/libefi/time.c index 99831e1..2df466e 100644 --- a/sys/boot/efi/libefi/time.c +++ b/sys/boot/efi/libefi/time.c @@ -2,28 +2,28 @@ * Copyright (c) 1999, 2000 * Intel Corporation. * All rights reserved. - *=20 + * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: - *=20 + * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. - *=20 + * * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in th= e * documentation and/or other materials provided with the distributio= n. - *=20 + * * 3. All advertising materials mentioning features or use of this softw= are * must display the following acknowledgement: - *=20 + * * This product includes software developed by Intel Corporation and * its contributors. - *=20 + * * 4. Neither the name of Intel Corporation or its contributors may be * used to endorse or promote products derived from this software * without specific prior written permission. - *=20 + * * THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION AND CONTRIBUTORS ``AS = IS'' * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,= THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PU= RPOSE @@ -35,7 +35,7 @@ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWIS= E) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED O= F * THE POSSIBILITY OF SUCH DAMAGE. - *=20 + * */ =20 #include @@ -58,6 +58,41 @@ __FBSDID("$FreeBSD$"); #define SECSPERHOUR ( 60*60 ) #define SECSPERDAY (24 * SECSPERHOUR) =20 +/* +// These arrays give the cumulative number of days up to the first of t= he +// month number used as the index (1 -> 12) for regular and leap years.= +// The value at index 13 is for the whole year. +*/ +static const time_t CumulativeDays[2][14] =3D { + {0, + 0, + 31, + 31 + 28, + 31 + 28 + 31, + 31 + 28 + 31 + 30, + 31 + 28 + 31 + 30 + 31, + 31 + 28 + 31 + 30 + 31 + 30, + 31 + 28 + 31 + 30 + 31 + 30 + 31, + 31 + 28 + 31 + 30 + 31 + 30 + 31 + 31, + 31 + 28 + 31 + 30 + 31 + 30 + 31 + 31 + 30, + 31 + 28 + 31 + 30 + 31 + 30 + 31 + 31 + 30 + 31, + 31 + 28 + 31 + 30 + 31 + 30 + 31 + 31 + 30 + 31 + 30, + 31 + 28 + 31 + 30 + 31 + 30 + 31 + 31 + 30 + 31 + 30 + 31 }, + {0, + 0, + 31, + 31 + 29, + 31 + 29 + 31, + 31 + 29 + 31 + 30, + 31 + 29 + 31 + 30 + 31, + 31 + 29 + 31 + 30 + 31 + 30, + 31 + 29 + 31 + 30 + 31 + 30 + 31, + 31 + 29 + 31 + 30 + 31 + 30 + 31 + 31, + 31 + 29 + 31 + 30 + 31 + 30 + 31 + 31 + 30, + 31 + 29 + 31 + 30 + 31 + 30 + 31 + 31 + 30 + 31, + 31 + 29 + 31 + 30 + 31 + 30 + 31 + 31 + 30 + 31 + 30, + 31 + 29 + 31 + 30 + 31 + 30 + 31 + 31 + 30 + 31 + 30 + 31 }}; + void efi_time_init(void) { @@ -68,45 +103,46 @@ efi_time_fini(void) { } =20 -static time_t -efi_time(EFI_TIME *ETime) +void +to_efi_time(EFI_TIME *efi_time, time_t time) { - /* - // These arrays give the cumulative number of days up to the first = of the - // month number used as the index (1 -> 12) for regular and leap ye= ars. - // The value at index 13 is for the whole year. - */ - static time_t CumulativeDays[2][14] =3D { - {0, - 0, - 31, - 31 + 28, - 31 + 28 + 31, - 31 + 28 + 31 + 30, - 31 + 28 + 31 + 30 + 31, - 31 + 28 + 31 + 30 + 31 + 30, - 31 + 28 + 31 + 30 + 31 + 30 + 31, - 31 + 28 + 31 + 30 + 31 + 30 + 31 + 31, - 31 + 28 + 31 + 30 + 31 + 30 + 31 + 31 + 30, - 31 + 28 + 31 + 30 + 31 + 30 + 31 + 31 + 30 + 31, - 31 + 28 + 31 + 30 + 31 + 30 + 31 + 31 + 30 + 31 + 30, - 31 + 28 + 31 + 30 + 31 + 30 + 31 + 31 + 30 + 31 + 30 + 31 }, - {0, - 0, - 31, - 31 + 29, - 31 + 29 + 31, - 31 + 29 + 31 + 30, - 31 + 29 + 31 + 30 + 31, - 31 + 29 + 31 + 30 + 31 + 30, - 31 + 29 + 31 + 30 + 31 + 30 + 31, - 31 + 29 + 31 + 30 + 31 + 30 + 31 + 31, - 31 + 29 + 31 + 30 + 31 + 30 + 31 + 31 + 30, - 31 + 29 + 31 + 30 + 31 + 30 + 31 + 31 + 30 + 31, - 31 + 29 + 31 + 30 + 31 + 30 + 31 + 31 + 30 + 31 + 30, - 31 + 29 + 31 + 30 + 31 + 30 + 31 + 31 + 30 + 31 + 30 + 31 }}; - - time_t UTime;=20 + if (time >=3D 0) { + for (efi_time->Year =3D 1970; + time > CumulativeDays[isleap(efi_time->Year)][13] * = SECSPERDAY; + time -=3D CumulativeDays[isleap(efi_time->Year)][13]= * SECSPERDAY, + efi_time->Year++); + + for (efi_time->Month =3D 0; + time > CumulativeDays[isleap(efi_time->Year)][efi_ti= me->Month] * + SECSPERDAY; + efi_time->Month++); + + time -=3D CumulativeDays[isleap(efi_time->Year)][efi_tim= e->Month - 1] * + SECSPERDAY; + + for (efi_time->Day =3D 0; time > SECSPERDAY; + time -=3D SECSPERDAY, efi_time->Day++); + + for (efi_time->Hour =3D 0; time > SECSPERHOUR; + time -=3D SECSPERHOUR, efi_time->Hour++); + + for (efi_time->Minute =3D 0; time > 60; + time -=3D 60, efi_time->Minute++); + + efi_time->Second =3D time; + efi_time->Nanosecond =3D 0; + efi_time->TimeZone =3D 0; + efi_time->Daylight =3D 0; + } else { + memset(efi_time, 0, sizeof(EFI_TIME)); + } +} + +time_t +from_efi_time(EFI_TIME *ETime) +{ + + time_t UTime; int Year; =20 /* @@ -134,7 +170,7 @@ efi_time(EFI_TIME *ETime) /* // UTime should now be set to 00:00:00 on Jan 1 of the file's year. // - // Months =20 + // Months */ UTime +=3D (CumulativeDays[isleap(ETime->Year)][ETime->Month] * SECS= PERDAY); =20 @@ -170,7 +206,7 @@ efi_time(EFI_TIME *ETime) */ UTime +=3D (ETime->TimeZone * 60); } - =20 + return UTime; } =20 @@ -196,7 +232,7 @@ EFI_GetTimeOfDay( // Convert to UNIX time (ie seconds since the epoch */ =20 - tp->tv_sec =3D efi_time( &EfiTime ); + tp->tv_sec =3D from_efi_time( &EfiTime ); tp->tv_usec =3D 0; /* EfiTime.Nanosecond * 1000; */ =20 /* @@ -221,7 +257,7 @@ time(time_t *tloc) { struct timeval tv; EFI_GetTimeOfDay(&tv, 0); -=09 + if (tloc) *tloc =3D tv.tv_sec; return tv.tv_sec; diff --git a/sys/boot/efi/loader/Makefile b/sys/boot/efi/loader/Makefile index d9d3532..300c65b 100644 --- a/sys/boot/efi/loader/Makefile +++ b/sys/boot/efi/loader/Makefile @@ -50,6 +50,7 @@ CWARNFLAGS.main.c+=3D -Wno-format CFLAGS+=3D -I${.CURDIR} CFLAGS+=3D -I${.CURDIR}/arch/${MACHINE} CFLAGS+=3D -I${.CURDIR}/../include +CFLAGS+=3D -I${.CURDIR}/../drivers CFLAGS+=3D -I${.CURDIR}/../include/${MACHINE} CFLAGS+=3D -I${.CURDIR}/../../../contrib/dev/acpica/include CFLAGS+=3D -I${.CURDIR}/../../.. @@ -68,6 +69,8 @@ CFLAGS+=3D -DNO_PCI -DEFI LIBSTAND=3D ${.OBJDIR}/../../../../lib/libstand/libstand.a .endif =20 +LIBEFI_DRIVERS=3D ${.OBJDIR}/../drivers/libefi_drivers.a + .if !defined(BOOT_HIDE_SERIAL_NUMBERS) # Export serial numbers, UUID, and asset tag from loader. CFLAGS+=3D -DSMBIOS_SERIAL_NUMBERS @@ -150,9 +153,10 @@ loader.efi: ${PROG} =20 LIBEFI=3D ${.OBJDIR}/../libefi/libefi.a =20 -DPADD=3D ${LIBFICL} ${LIBEFI} ${LIBFDT} ${LIBEFI_FDT} ${LIBSTAND} \ - ${LDSCRIPT} -LDADD=3D ${LIBFICL} ${LIBEFI} ${LIBFDT} ${LIBEFI_FDT} ${LIBSTAND} +DPADD=3D ${LIBFICL} ${LIBEFI} ${LIBEFI_DRIVERS} ${LIBFDT} ${LIBEFI_FDT}= \ + ${LIBSTAND} ${LDSCRIPT} +LDADD=3D ${LIBFICL} ${LIBEFI} ${LIBEFI_DRIVERS} ${LIBFDT} ${LIBEFI_FDT}= \ + ${LIBSTAND} =20 .include =20 diff --git a/sys/boot/efi/loader/conf.c b/sys/boot/efi/loader/conf.c index 3596a63..56733ff 100644 --- a/sys/boot/efi/loader/conf.c +++ b/sys/boot/efi/loader/conf.c @@ -31,30 +31,22 @@ __FBSDID("$FreeBSD$"); #include #include #include -#ifdef EFI_ZFS_BOOT -#include -#endif + +#include "efi_drivers.h" + +const efi_driver_t *efi_drivers[] =3D { + &fs_driver, + NULL +}; =20 struct devsw *devsw[] =3D { - &efipart_dev, + &efifs_dev, &efinet_dev, -#ifdef EFI_ZFS_BOOT - &zfs_dev, -#endif NULL }; =20 struct fs_ops *file_system[] =3D { -#ifdef EFI_ZFS_BOOT - &zfs_fsops, -#endif - &dosfs_fsops, - &ufs_fsops, - &cd9660_fsops, - &tftp_fsops, - &nfs_fsops, - &gzipfs_fsops, - &bzipfs_fsops, + &efifs_fsops, NULL }; =20 diff --git a/sys/boot/efi/loader/loader_efi.h b/sys/boot/efi/loader/loade= r_efi.h index ee7c4bb..dbd36bf 100644 --- a/sys/boot/efi/loader/loader_efi.h +++ b/sys/boot/efi/loader/loader_efi.h @@ -33,6 +33,10 @@ =20 #include =20 +#include "efi_drivers.h" + +extern const efi_driver_t *efi_drivers[]; + int efi_autoload(void); =20 int efi_getdev(void **vdev, const char *devspec, const char **path); diff --git a/sys/boot/efi/loader/main.c b/sys/boot/efi/loader/main.c index b97f2af..42e3ebe1 100644 --- a/sys/boot/efi/loader/main.c +++ b/sys/boot/efi/loader/main.c @@ -87,10 +87,6 @@ EFI_GUID debugimg =3D DEBUG_IMAGE_INFO_TABLE_GUID; EFI_GUID fdtdtb =3D FDT_TABLE_GUID; EFI_GUID inputid =3D SIMPLE_TEXT_INPUT_PROTOCOL; =20 -#ifdef EFI_ZFS_BOOT -static void efi_zfs_probe(void); -#endif - /* * cpy8to16 copies a traditional C string into a CHAR16 string and * 0 terminates it. len is the size of *dst in bytes. @@ -125,7 +121,7 @@ has_keyboard(void) EFI_HANDLE *hin, *hin_end, *walker; UINTN sz; int retval =3D 0; -=09 + /* * Find all the handles that support the SIMPLE_TEXT_INPUT_PROTOCOL and= * do the typical dance to get the right sized buffer. @@ -182,7 +178,7 @@ has_keyboard(void) } else if (DevicePathType(path) =3D=3D MESSAGING_DEVICE_PATH && DevicePathSubType(path) =3D=3D MSG_USB_CLASS_DP) { USB_CLASS_DEVICE_PATH *usb; - =20 + usb =3D (USB_CLASS_DEVICE_PATH *)(void *)path; if (usb->DeviceClass =3D=3D 3 && /* HID */ usb->DeviceSubClass =3D=3D 1 && /* Boot devices */ @@ -263,10 +259,6 @@ main(int argc, CHAR16 *argv[]) archsw.arch_copyin =3D efi_copyin; archsw.arch_copyout =3D efi_copyout; archsw.arch_readin =3D efi_readin; -#ifdef EFI_ZFS_BOOT - /* Note this needs to be set before ZFS init. */ - archsw.arch_zfs_probe =3D efi_zfs_probe; -#endif =20 /* Init the time source */ efi_time_init(); @@ -391,6 +383,10 @@ main(int argc, CHAR16 *argv[]) /* * March through the device switch probing for things. */ + for (i =3D 0; efi_drivers[i] !=3D NULL; i++) + if (efi_drivers[i]->init !=3D NULL) + (efi_drivers[i]->init)(); + for (i =3D 0; devsw[i] !=3D NULL; i++) if (devsw[i]->dv_init !=3D NULL) (devsw[i]->dv_init)(); @@ -427,6 +423,7 @@ main(int argc, CHAR16 *argv[]) if (find_currdev(img, &dev, &unit, &pool_guid) !=3D 0) return (EFI_NOT_FOUND); =20 + printf("Found efi device under %s\n", dev->dv_name); switch (dev->dv_type) { #ifdef EFI_ZFS_BOOT case DEVT_ZFS: { @@ -1093,23 +1090,3 @@ command_fdt(int argc, char *argv[]) =20 COMMAND_SET(fdt, "fdt", "flattened device tree handling", command_fdt); #endif - -#ifdef EFI_ZFS_BOOT -static void -efi_zfs_probe(void) -{ - EFI_HANDLE h; - u_int unit; - int i; - char dname[SPECNAMELEN + 1]; - uint64_t guid; - - unit =3D 0; - h =3D efi_find_handle(&efipart_dev, 0); - for (i =3D 0; h !=3D NULL; h =3D efi_find_handle(&efipart_dev, ++i)) { - snprintf(dname, sizeof(dname), "%s%d:", efipart_dev.dv_name, i); - if (zfs_probe_dev(dname, &guid) =3D=3D 0) - (void)efi_handle_update_dev(h, &zfs_dev, unit++, guid); - } -} -#endif --------------689B5840033FA59B553C984F-- --7wWD2JXas7wNKFk1Kr7Jd8JHbiuG3wULI-- --2nIKx7PRAmhO47MXFmT0MDKUV6UMsh1v9 Content-Type: application/pgp-signature; name="signature.asc" Content-Description: OpenPGP digital signature Content-Disposition: attachment; filename="signature.asc" -----BEGIN PGP SIGNATURE----- iF4EARYIAAYFAlhBqUEACgkQVsKIQKqABI0NwwD+O1MDmogaR5FqsK+h8rSwmZNi dwlYfTF2UPTht+5a2o4A/jhsOjEJ94T0YMrmbe2ly2cq708HCkidkkRtMjE/CbwM =gnu+ -----END PGP SIGNATURE----- --2nIKx7PRAmhO47MXFmT0MDKUV6UMsh1v9-- From owner-freebsd-hackers@freebsd.org Sat Dec 3 11:34:44 2016 Return-Path: Delivered-To: freebsd-hackers@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 73ABDC64A7D for ; Sat, 3 Dec 2016 11:34:44 +0000 (UTC) (envelope-from j.deboynepollard-newsgroups@ntlworld.com) Received: from know-smtprelay-omc-3.server.virginmedia.net (know-smtprelay-omc-3.server.virginmedia.net [80.0.253.67]) by mx1.freebsd.org (Postfix) with ESMTP id D14CE18AA for ; Sat, 3 Dec 2016 11:34:43 +0000 (UTC) (envelope-from j.deboynepollard-newsgroups@ntlworld.com) Received: from [192.168.1.100] ([86.10.211.13]) by know-smtprelay-3-imp with bizsmtp id FPZY1u0040HtmFq01PZYp3; Sat, 03 Dec 2016 11:33:32 +0000 X-Originating-IP: [86.10.211.13] X-Spam: 0 X-Authority: v=2.1 cv=AtwTp7JP c=1 sm=1 tr=0 a=SB7hr1IvJSWWr45F2gQiKw==:117 a=SB7hr1IvJSWWr45F2gQiKw==:17 a=L9H7d07YOLsA:10 a=9cW_t1CCXrUA:10 a=s5jvgZ67dGcA:10 a=IkcTkHD0fZMA:10 a=2rVjqWD_AAAA:8 a=6I5d2MoRAAAA:8 a=itly7gIdAAAA:8 a=cLfLSEwX_6fwLP09GKYA:9 a=QEXdDO2ut3YA:10 a=ZUGwP7LCt9cA:10 a=FSu5OgGmP5kA:10 a=-FEs8UIgK8oA:10 a=NWVoK91CQyQA:10 a=ULaUcM2Ibn9MdPUUwucP:22 a=IjZwj45LgO3ly-622nXo:22 a=1RpNR2E4bTkVPcsa2RFZ:22 Subject: nosh version 1.29 To: FreeBSD Hackers , "supervision@list.skarnet.org" , Debian users References: <54430B41.3010301@NTLWorld.com> <554E53EF.4080600@NTLWorld.com> <554E93AF.3070709@NTLWorld.com> <556BA130.50708@NTLWorld.com> <55902328.8080602@NTLWorld.com> <55D5CFA2.5010402@NTLWorld.com> <55D8B9AC.6010209@NTLWorld.com> <56089268.6080007@NTLWorld.com> <56120D11.4080506@NTLWorld.com> <5636C75B.70000@NTLWorld.com> <5672BD8C.50303@NTLWorld.com> <569617F3.8000101@NTLWorld.com> <56AEAED5.4010606@NTLWorld.com> <572D266D.6080807@NTLWorld.com> <7fa206eb-9b34-de45-4474-11c04007326b@NTLWorld.com> <0c339dcb-d09b-f234-d37f-9521d97146b1@NTLWorld.com> <159edb67-0288-a07e-c2cb-76574d0d2b98@NTLWorld.com> <5769980e-cdc3-b802-b704-fdb8d0ce3f8f@NTLWorld.com> From: Jonathan de Boyne Pollard Message-ID: Date: Sat, 3 Dec 2016 11:33:27 +0000 User-Agent: Mozilla/5.0 (Windows NT 6.0; rv:45.0) Gecko/20100101 Thunderbird/45.1.1 MIME-Version: 1.0 In-Reply-To: Content-Type: text/plain; charset=utf-8; format=flowed Content-Transfer-Encoding: 7bit X-BeenThere: freebsd-hackers@freebsd.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: Technical Discussions relating to FreeBSD List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sat, 03 Dec 2016 11:34:44 -0000 The nosh package is now up to version 1.29. * http://jdebp.eu./Softwares/nosh/ * https://www.freebsd.org/news/status/report-2015-07-2015-09.html#The-nosh-Project * http://jdebp.info./Softwares/nosh/ There's been a lot going on since version 1.28 . 2016 leap second ---------------- The TAI to UTC conversions know about the forthcoming leap second. service bundles --------------- As usual, there are several new service bundles, from powerd++ through zfsd to fwknopd. The new fs-servers target allows one to order the initialization of NFS servers before loop-to-self NFS mounts. The new multi-user-pre target is another ordering target that allows services such as the motd file updater to be ordered before TTY login services. The instantiated kdm@tty7 and kdm@ttyv6 services have been replaced with a single kdm service, with a view to dealing with display managers better in the future. I have some plans in this area. The Samba service names have been fixed. Debian calls them nmb, smb, and winbind; but the Samba doco and most places on the WWW call them nmbd, smbd, and winbindd. The latter names are used in the service bundles package, with aliases pointing to them from the Debian names. doco ---- The doco has been improved and kept up-to-date in various places, including correct descriptions of set-service-env and print-service-env after one confused user got in touch. PC-BSD is now named as TrueOS where the reference is not historical. code review ----------- As a result of some code review that was offered, std::auto_ptr is now gone and a rare memory corruption bug in safe_execvp() has been fixed. Building from scratch when one doesn't have a prior daemontools or freedt toolset installed also no longer hits a bug. configuration import improvements --------------------------------- In an effort to clear those last few remaining items on the nosh roadmap, a whole load of configuration import (pppd, sppp, rfcomm_ppp, dhclient, wpa_supplicant, natd, and hostapd) has been consolidated under the umbrella of static-networking. I plan to expand this further in 1.31, given how much is already in 1.30. Linux kernel VTs ---------------- Management of Linux kernel virtual terminals has some improvements, including setting UTF-8 canonical mode editing and keyboard composition modes, and emitting the control sequences that set up the screen saver. tai64nlocal changes ------------------- tai64nlocal has adopted a minor but important change from the BSD and GNU C libraries: before reading the start of a line it flushes its output. This came from trying to use it as a co-process in GNU awk. To prevent deadlocks, GNU awk co-processes need to be in what is effectively line buffered output mode even though their standard inputs and outputs are not terminal devices. This is now the case for tai64nlocal and it can be used to convert TAI64N timestamps as a GNU awk co-process. FreeBSD and TrueOS packaging ---------------------------- The largest change, however, is in the FreeBSD/TrueOS and OpenBSD packaging. This is a change that is going to happen in the Debian packaging in a later version. It's partly to simplify the package maintenance, and partly a step towards having OpenBSD packages that work. A single package description is fed to both the new pkg tool that exists on FreeBSD/TrueOS and the old pkg tool that exists on OpenBSD. It's not perfect, as there are things that are easy with the new pkg tool that are hard with the old one; and the OpenBSD packages are still not fully functional. But things are better than they were. The OpenBSD service bundles package now almost properly sets up per-service user accounts and log directories, for example. ======================================================================= =========== IMPORTANT UPGRADE NOTE FOR FreeBSD/TrueOS: =============== ======================================================================= An important consequence of the aforementioned is that the semantics of the nosh-bundles package have changed. In earlier versions, the various nosh-run-* packages were how one set services running, except for a small rump set of services that were set up by the nosh-bundles package. This is now no longer the case. The nosh-bundles package now presets and starts no services at all. *All* running of services must be achieved with the nosh-run-* packages or some other sets of scripts and presets. To this end, there are now two new packages, nosh-run-freebsd-desktop-base and nosh-run-freebsd-server-base. These parallel the already existing nosh-run-trueos-desktop-base and nosh-run-trueos-server-base packages; except that they do not start any of the services that exist in TrueOS but do not exist in FreeBSD, such as the various pc-* services. You must install, for a working fully-nosh-managed system, exactly one of these four packages. If you are running nosh service management under Mewburn rc, you can of course run as many or as few services under the nosh service manager as you care to switch over from Mewburn rc. But if you are running a fully-nosh-managed system these packages will arrange to run the various fundamentals that one pretty much cannot do without, such as mounting/unmounting volumes, running devd and ldconfig, and initializing the PRNG. From owner-freebsd-hackers@freebsd.org Sat Dec 3 11:41:12 2016 Return-Path: Delivered-To: freebsd-hackers@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 0D1DBC64F8B for ; Sat, 3 Dec 2016 11:41:12 +0000 (UTC) (envelope-from j.deboynepollard-newsgroups@ntlworld.com) Received: from know-smtprelay-omc-3.server.virginmedia.net (know-smtprelay-omc-3.server.virginmedia.net [80.0.253.67]) by mx1.freebsd.org (Postfix) with ESMTP id 6ACC31C0C for ; Sat, 3 Dec 2016 11:41:10 +0000 (UTC) (envelope-from j.deboynepollard-newsgroups@ntlworld.com) Received: from [192.168.1.100] ([86.10.211.13]) by know-smtprelay-3-imp with bizsmtp id FPh91u00F0HtmFq01Ph91N; Sat, 03 Dec 2016 11:41:10 +0000 X-Originating-IP: [86.10.211.13] X-Spam: 0 X-Authority: v=2.1 cv=AtwTp7JP c=1 sm=1 tr=0 a=SB7hr1IvJSWWr45F2gQiKw==:117 a=SB7hr1IvJSWWr45F2gQiKw==:17 a=L9H7d07YOLsA:10 a=9cW_t1CCXrUA:10 a=s5jvgZ67dGcA:10 a=IkcTkHD0fZMA:10 a=2rVjqWD_AAAA:8 a=6I5d2MoRAAAA:8 a=itly7gIdAAAA:8 a=szJU8jGZiIcdBJspU8gA:9 a=QEXdDO2ut3YA:10 a=ZUGwP7LCt9cA:10 a=FSu5OgGmP5kA:10 a=-FEs8UIgK8oA:10 a=NWVoK91CQyQA:10 a=ULaUcM2Ibn9MdPUUwucP:22 a=IjZwj45LgO3ly-622nXo:22 a=1RpNR2E4bTkVPcsa2RFZ:22 Subject: Re: nosh version 1.29 To: FreeBSD Hackers , "supervision@list.skarnet.org" , Debian users References: <54430B41.3010301@NTLWorld.com> <556BA130.50708@NTLWorld.com> <55902328.8080602@NTLWorld.com> <55D5CFA2.5010402@NTLWorld.com> <55D8B9AC.6010209@NTLWorld.com> <56089268.6080007@NTLWorld.com> <56120D11.4080506@NTLWorld.com> <5636C75B.70000@NTLWorld.com> <5672BD8C.50303@NTLWorld.com> <569617F3.8000101@NTLWorld.com> <56AEAED5.4010606@NTLWorld.com> <572D266D.6080807@NTLWorld.com> <7fa206eb-9b34-de45-4474-11c04007326b@NTLWorld.com> <0c339dcb-d09b-f234-d37f-9521d97146b1@NTLWorld.com> <159edb67-0288-a07e-c2cb-76574d0d2b98@NTLWorld.com> <5769980e-cdc3-b802-b704-fdb8d0ce3f8f@NTLWorld.com> From: Jonathan de Boyne Pollard Message-ID: Date: Sat, 3 Dec 2016 11:41:04 +0000 User-Agent: Mozilla/5.0 (Windows NT 6.0; rv:45.0) Gecko/20100101 Thunderbird/45.1.1 MIME-Version: 1.0 In-Reply-To: Content-Type: text/plain; charset=utf-8; format=flowed Content-Transfer-Encoding: 7bit X-BeenThere: freebsd-hackers@freebsd.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: Technical Discussions relating to FreeBSD List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sat, 03 Dec 2016 11:41:12 -0000 Bloody Thunderbird! Here's that again, I hope without the surprise reformatting after pressing "send" this time: The nosh package is now up to version 1.29. * http://jdebp.eu./Softwares/nosh/ * https://www.freebsd.org/news/status/report-2015-07-2015-09.html#The-nosh-Project * http://jdebp.info./Softwares/nosh/ There's been a lot going on since version 1.28 . 2016 leap second ---------------- The TAI to UTC conversions know about the forthcoming leap second. service bundles --------------- As usual, there are several new service bundles, from powerd++ through zfsd to fwknopd. The new fs-servers target allows one to order the initialization of NFS servers before loop-to-self NFS mounts. The new multi-user-pre target is another ordering target that allows services such as the motd file updater to be ordered before TTY login services. The instantiated kdm@tty7 and kdm@ttyv6 services have been replaced with a single kdm service, with a view to dealing with display managers better in the future. I have some plans in this area. The Samba service names have been fixed. Debian calls them nmb, smb, and winbind; but the Samba doco and most places on the WWW call them nmbd, smbd, and winbindd. The latter names are used in the service bundles package, with aliases pointing to them from the Debian names. doco ---- The doco has been improved and kept up-to-date in various places, including correct descriptions of set-service-env and print-service-env after one confused user got in touch. PC-BSD is now named as TrueOS where the reference is not historical. code review ----------- As a result of some code review that was offered, std::auto_ptr is now gone and a rare memory corruption bug in safe_execvp() has been fixed. Building from scratch when one doesn't have a prior daemontools or freedt toolset installed also no longer hits a bug. configuration import improvements --------------------------------- In an effort to clear those last few remaining items on the nosh roadmap, a whole load of configuration import (pppd, sppp, rfcomm_ppp, dhclient, wpa_supplicant, natd, and hostapd) has been consolidated under the umbrella of static-networking. I plan to expand this further in 1.31, given how much is already in 1.30. Linux kernel VTs ---------------- Management of Linux kernel virtual terminals has some improvements, including setting UTF-8 canonical mode editing and keyboard composition modes, and emitting the control sequences that set up the screen saver. tai64nlocal changes ------------------- tai64nlocal has adopted a minor but important change from the BSD and GNU C libraries: before reading the start of a line it flushes its output. This came from trying to use it as a co-process in GNU awk. To prevent deadlocks, GNU awk co-processes need to be in what is effectively line buffered output mode even though their standard inputs and outputs are not terminal devices. This is now the case for tai64nlocal and it can be used to convert TAI64N timestamps as a GNU awk co-process. FreeBSD and TrueOS packaging ---------------------------- The largest change, however, is in the FreeBSD/TrueOS and OpenBSD packaging. This is a change that is going to happen in the Debian packaging in a later version. It's partly to simplify the package maintenance, and partly a step towards having OpenBSD packages that work. A single package description is fed to both the new pkg tool that exists on FreeBSD/TrueOS and the old pkg tool that exists on OpenBSD. It's not perfect, as there are things that are easy with the new pkg tool that are hard with the old one; and the OpenBSD packages are still not fully functional. But things are better than they were. The OpenBSD service bundles package now almost properly sets up per-service user accounts and log directories, for example. ======================================================================= =========== IMPORTANT UPGRADE NOTE FOR FreeBSD/TrueOS: =============== ======================================================================= An important consequence of the aforementioned is that the semantics of the nosh-bundles package have changed. In earlier versions, the various nosh-run-* packages were how one set services running, except for a small rump set of services that were set up by the nosh-bundles package. This is now no longer the case. The nosh-bundles package now presets and starts no services at all. *All* running of services must be achieved with the nosh-run-* packages or some other sets of scripts and presets. To this end, there are now two new packages, nosh-run-freebsd-desktop-base and nosh-run-freebsd-server-base. These parallel the already existing nosh-run-trueos-desktop-base and nosh-run-trueos-server-base packages; except that they do not start any of the services that exist in TrueOS but do not exist in FreeBSD, such as the various pc-* services. You must install, for a working fully-nosh-managed system, exactly one of these four packages. If you are running nosh service management under Mewburn rc, you can of course run as many or as few services under the nosh service manager as you care to switch over from Mewburn rc. But if you are running a fully-nosh-managed system these packages will arrange to run the various fundamentals that one pretty much cannot do without, such as mounting/unmounting volumes, running devd and ldconfig, and initializing the PRNG. From owner-freebsd-hackers@freebsd.org Sat Dec 3 06:40:19 2016 Return-Path: Delivered-To: freebsd-hackers@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 DA271C629C3; Sat, 3 Dec 2016 06:40:19 +0000 (UTC) (envelope-from woodsb02@gmail.com) Received: from mail-io0-x233.google.com (mail-io0-x233.google.com [IPv6:2607:f8b0:4001:c06::233]) (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 8CBF6184; Sat, 3 Dec 2016 06:40:19 +0000 (UTC) (envelope-from woodsb02@gmail.com) Received: by mail-io0-x233.google.com with SMTP id c21so474941161ioj.1; Fri, 02 Dec 2016 22:40:19 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=mime-version:in-reply-to:references:from:date:message-id:subject:to :cc; bh=tK09wVe1HF9xICJ3AS7r1B3PbABBZSB4Ok8lnXl3r6w=; b=gxaqePDSlRcZcTXwZdrUtRvz3nVh3kkgR4S59Q3Ki2dR9QP1okzGbM5udvK9XEauGi ydoIOLMNzut223PCYjeq1455PnWH7d6S/Em8YvoBPZszo0fZkpg5sH7MEP8fa5Q5Gtv+ ZyaXU2rGm3JThhCiEXA1hfWyY8i+f3H9phzSEjx890MQwev2LKHpQ/79dCyn5qIVoN5f qCnqMXx9KV5/SM5fIIfnDLZL6iUhrn3cel6F8O2rZUQIykdzJQgiONxf6sAwLrTcnrxc ZuUik9wW3rfAViZsHvSqgYRYuQMBTDuZB8aINffGNDijUDgBDWzCNxbZmqAVREn/R2fp tQrg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20130820; h=x-gm-message-state:mime-version:in-reply-to:references:from:date :message-id:subject:to:cc; bh=tK09wVe1HF9xICJ3AS7r1B3PbABBZSB4Ok8lnXl3r6w=; b=aSQHnnigGnn6t6OanN9Ver+uq9mk1DIOJykdbwRLYmhAmCZQywkh500MUt7cVQRbIW KS3wy0XTjyrhREykBvT7V0Pw52jzONV+ta1W3R32hQx3vstQbYwUNBOFf8AkMg5HHPa+ RVHzuR6KziDMnT7zX3wC2qbA729VWw2QTPFQ1Iw+yyiFwXEXSjetAfAay/1vPJ7ve+W1 FFc4sydlbuOTm1eZ+6ufFapGdBbZNxT0t3C7g9OmbDC+iOsj0j7DJXy6FCCYpcp1qs2O nI2FhCIAOgDIhI9ltJCfXwhHvsY0qpPHiiPEoJHHdGag2Ng5U/lmtQ5gWKyvw0YAQ+1I TG/A== X-Gm-Message-State: AKaTC00wBlN0atB1csbrBspMvrF1KTA2Llw83V9DkDvaS01sLNMkraaYHmghuD0NEqyxzao+nGqqDh8EQlMi/g== X-Received: by 10.36.192.84 with SMTP id u81mr708837itf.51.1480747218893; Fri, 02 Dec 2016 22:40:18 -0800 (PST) MIME-Version: 1.0 Received: by 10.79.136.197 with HTTP; Fri, 2 Dec 2016 22:40:18 -0800 (PST) In-Reply-To: References: From: Ben Woods Date: Sat, 3 Dec 2016 14:40:18 +0800 Message-ID: Subject: Re: CFT EFI Boot Refactoring To: Eric McCorkle Cc: freebsd-hackers@freebsd.org, freebsd-amd64@freebsd.org, "current@freebsd.org" Content-Type: multipart/mixed; boundary=94eb2c058ce8fc2ff60542bb5373 X-Mailman-Approved-At: Sat, 03 Dec 2016 13:10:37 +0000 X-Content-Filtered-By: Mailman/MimeDel 2.1.23 X-BeenThere: freebsd-hackers@freebsd.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: Technical Discussions relating to FreeBSD List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sat, 03 Dec 2016 06:40:20 -0000 --94eb2c058ce8fc2ff60542bb5373 Content-Type: text/plain; charset=UTF-8 Hi Eric, Thanks for your work on this. I just applied your diff to my subversion repository, and tried to buildworld, but the build failed with the following error: make[6]: make[6]: don't know how to make efipart.c. Stop make[6]: stopped in /usr/src/sys/boot/efi/drivers *** [all_subdir_sys/boot/efi/drivers] Error code 2 Does it build ok for you? Because I use subversion, and I wanted to build it from my main tree, I had to regenerate your patch using "git diff --no-prefix master..origin/efize_new > /tmp/efize_new.diff". I could then apply this cleanly with "svn patch /tmp/efize_new.diff". I checked the difference between your diff and the diff I generated, and the only differences were in the file headers. Therefore I don't think the patch change should make any difference. I have attached my version of the patch for reference. For example: diff --git a/lib/libstand/Makefile b/lib/libstand/Makefile index 0ebcaf1..3b608c5 100644 --- a/lib/libstand/Makefile +++ b/lib/libstand/Makefile Became: diff --git lib/libstand/Makefile lib/libstand/Makefile index 0ebcaf1ccfd..3b608c5bc92 100644 --- lib/libstand/Makefile +++ lib/libstand/Makefile To show the differences with your patch applied: $ svn status M lib/libstand/Makefile M lib/libstand/stand.h M sys/boot/efi/Makefile M sys/boot/efi/boot1/Makefile M sys/boot/efi/boot1/Makefile.fat M sys/boot/efi/boot1/boot1.c D sys/boot/efi/boot1/boot_module.h M sys/boot/efi/boot1/fat-amd64.tmpl.bz2.uu M sys/boot/efi/boot1/fat-arm.tmpl.bz2.uu M sys/boot/efi/boot1/fat-arm64.tmpl.bz2.uu M sys/boot/efi/boot1/fat-i386.tmpl.bz2.uu M sys/boot/efi/boot1/generate-fat.sh D sys/boot/efi/boot1/ufs_module.c D sys/boot/efi/boot1/zfs_module.c A sys/boot/efi/drivers A sys/boot/efi/drivers/Makefile A sys/boot/efi/drivers/efi_drivers.h A sys/boot/efi/drivers/fs_driver.c M sys/boot/efi/include/efilib.h M sys/boot/efi/include/efiprot.h A sys/boot/efi/include/string16.h M sys/boot/efi/libefi/Makefile A sys/boot/efi/libefi/efifs.c M sys/boot/efi/libefi/efipart.c M sys/boot/efi/libefi/errno.c M sys/boot/efi/libefi/handles.c A sys/boot/efi/libefi/string16.c M sys/boot/efi/libefi/time.c M sys/boot/efi/loader/Makefile M sys/boot/efi/loader/conf.c M sys/boot/efi/loader/loader_efi.h M sys/boot/efi/loader/main.c Regards, Ben -- From: Benjamin Woods woodsb02@gmail.com On 3 December 2016 at 01:02, Eric McCorkle wrote: > Hello everyone, > > My work to refactor the EFI boot loader has been in review for some time > now. This work is a behavior-neutral refactoring which eliminates > duplicated code in boot1, provides better integration of boot1 and > loader with the EFI API, and moves towards better compliance with the > recommendations of the UEFI driver writer's guide. This work also > serves as a precursor to more work, such as GELI, hot-plugging, and > other things. > > One of the reviewers was able to trigger a hang on his setup; however, > it's not clear whether this is a problem in the refactoring, or whether > it's due to a related bug: > > https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=214423 > > Therefore, I would like to issue a CFT for this changeset. We need > people using the boot1/loader EFI boot setup to test their setup using > boot1 and loader as built with this patch applied. > > You can also get the source tree directly from my github > (https://github.com/emc2/freebsd.git). Use the efize_new branch to get > this changeset. Note that I am maintaining the state of this branch in > a single change at this point using rebase -i, so there *will* be forced > pushes to this branch. > > > Here are some notes on testing the changeset: > > * To test it, just do a buildworld, then copy loader.efi in place and > copy boot1.efi to /efi/BOOT/BOOTX64.EFI on your ESP. If your system > boots, then the test was successful (there are no new features in this > changeset). > > * The output of boot1 is slightly different, so you'll be able to tell > if you installed it correctly. > > * I recommend keeping a copy of the basic boot1 around on your ESP, just > in case something goes wrong. On my setup, I have a backup at > /efi/BOOT/BOOTX64.BAK (with the main program at /efi/BOOT/BOOTX64.EFI, > of course) > > * I have been using this on a machine with two disks, a ZFS pool > spanning both disks, and a dummy UFS filesystem for months now, so it > can be considered relatively safe. > > * This has also been tested on basic setups without incident, so > priority is on complex or odd setups. > > * If something goes wrong, you will most likely get a boot-hang. If > this happens, please contact me directly with the details, and I'll > coordinate on diagnosis. > --94eb2c058ce8fc2ff60542bb5373 Content-Type: text/plain; charset=US-ASCII; name="efize_new.diff" Content-Disposition: attachment; filename="efize_new.diff" Content-Transfer-Encoding: base64 X-Attachment-Id: f_iw8unfrw2 ZGlmZiAtLWdpdCBsaWIvbGlic3RhbmQvTWFrZWZpbGUgbGliL2xpYnN0YW5kL01ha2VmaWxlCmlu ZGV4IDBlYmNhZjFjY2ZkLi4zYjYwOGM1YmM5MiAxMDA2NDQKLS0tIGxpYi9saWJzdGFuZC9NYWtl ZmlsZQorKysgbGliL2xpYnN0YW5kL01ha2VmaWxlCkBAIC00MSw3ICs0MSw3IEBAIFNSQ1MrPSBu dG9oLmMKIC5QQVRIOiAke0xJQkNfU1JDfS9zdHJpbmcKIFNSQ1MrPQliY21wLmMgYmNvcHkuYyBi emVyby5jIGZmcy5jIGZscy5jIFwKIAltZW1jY3B5LmMgbWVtY2hyLmMgbWVtY21wLmMgbWVtY3B5 LmMgbWVtbW92ZS5jIG1lbXNldC5jIFwKLQlxZGl2cmVtLmMgc3RyY2F0LmMgc3RyY2hyLmMgc3Ry Y21wLmMgc3RyY3B5LmMgXAorCXFkaXZyZW0uYyBzdHJjYXQuYyBzdHJjaHIuYyBzdHJjbXAuYyBz dHJjcHkuYyBzdHBjcHkuYyBzdHBuY3B5LmMgXAogCXN0cmNzcG4uYyBzdHJsY2F0LmMgc3RybGNw eS5jIHN0cmxlbi5jIHN0cm5jYXQuYyBzdHJuY21wLmMgc3RybmNweS5jIFwKIAlzdHJwYnJrLmMg c3RycmNoci5jIHN0cnNlcC5jIHN0cnNwbi5jIHN0cnN0ci5jIHN0cnRvay5jIHN3YWIuYwogLmlm ICR7TUFDSElORV9DUFVBUkNIfSA9PSAiYXJtIgpkaWZmIC0tZ2l0IGxpYi9saWJzdGFuZC9zdGFu ZC5oIGxpYi9saWJzdGFuZC9zdGFuZC5oCmluZGV4IGY3N2E1ODZmYjA2Li4wNjZhZmYwNWQ2NSAx MDA2NDQKLS0tIGxpYi9saWJzdGFuZC9zdGFuZC5oCisrKyBsaWIvbGlic3RhbmQvc3RhbmQuaApA QCAtMjQsNyArMjQsNyBAQAogICogU1VDSCBEQU1BR0UuCiAgKgogICogJEZyZWVCU0QkCi0gKiBG cm9tCSROZXRCU0Q6IHN0YW5kLmgsdiAxLjIyIDE5OTcvMDYvMjYgMTk6MTc6NDAgZHJvY2huZXIg RXhwICQJCisgKiBGcm9tCSROZXRCU0Q6IHN0YW5kLmgsdiAxLjIyIDE5OTcvMDYvMjYgMTk6MTc6 NDAgZHJvY2huZXIgRXhwICQKICAqLwogCiAvKi0KQEAgLTEzMSw3ICsxMzEsNyBAQCBleHRlcm4g c3RydWN0IGZzX29wcyBwa2dmc19mc29wczsKICNkZWZpbmUJU0VFS19DVVIJMQkvKiBzZXQgZmls ZSBvZmZzZXQgdG8gY3VycmVudCBwbHVzIG9mZnNldCAqLwogI2RlZmluZQlTRUVLX0VORAkyCS8q IHNldCBmaWxlIG9mZnNldCB0byBFT0YgcGx1cyBvZmZzZXQgKi8KIAotLyogCisvKgogICogRGV2 aWNlIHN3aXRjaAogICovCiBzdHJ1Y3QgZGV2c3cgewpAQCAtMTY2LDggKzE2Niw5IEBAIHN0cnVj dCBkZXZkZXNjCiAjZGVmaW5lIERFVlRfTk9ORQkwCiAjZGVmaW5lIERFVlRfRElTSwkxCiAjZGVm aW5lIERFVlRfTkVUCTIKLSNkZWZpbmUgREVWVF9DRAkJMworI2RlZmluZSBERVZUX0NECTMKICNk ZWZpbmUgREVWVF9aRlMJNAorI2RlZmluZSBERVZUX0VGSQk1CiAgICAgaW50CQkJZF91bml0Owog ICAgIHZvaWQJCSpkX29wZW5kYXRhOwogfTsKQEAgLTI3OSw3ICsyODAsNyBAQCBleHRlcm4gc3Ry dWN0CWRpcmVudCAqcmVhZGRpcmZkKGludCk7CiAKIGV4dGVybiB2b2lkCXNyYW5kb20odV9sb25n IHNlZWQpOwogZXh0ZXJuIHVfbG9uZwlyYW5kb20odm9pZCk7Ci0gICAgCisKIC8qIGltcG9ydHMg ZnJvbSBzdGRsaWIsIGxvY2FsbHkgbW9kaWZpZWQgKi8KIGV4dGVybiBsb25nCXN0cnRvbChjb25z dCBjaGFyICosIGNoYXIgKiosIGludCk7CiBleHRlcm4gdW5zaWduZWQgbG9uZwlzdHJ0b3VsKGNv bnN0IGNoYXIgKiwgY2hhciAqKiwgaW50KTsKQEAgLTM2OCw5ICszNjksOSBAQCBleHRlcm4gaW50 CW51bGxfc3RhdChzdHJ1Y3Qgb3Blbl9maWxlICpmLCBzdHJ1Y3Qgc3RhdCAqc2IpOwogZXh0ZXJu IGludAludWxsX3JlYWRkaXIoc3RydWN0IG9wZW5fZmlsZSAqZiwgc3RydWN0IGRpcmVudCAqZCk7 CiAKIAotLyogCi0gKiBNYWNoaW5lIGRlcGVuZGVudCBmdW5jdGlvbnMgYW5kIGRhdGEsIG11c3Qg YmUgcHJvdmlkZWQgb3Igc3R1YmJlZCBieSAKLSAqIHRoZSBjb25zdW1lciAKKy8qCisgKiBNYWNo aW5lIGRlcGVuZGVudCBmdW5jdGlvbnMgYW5kIGRhdGEsIG11c3QgYmUgcHJvdmlkZWQgb3Igc3R1 YmJlZCBieQorICogdGhlIGNvbnN1bWVyCiAgKi8KIGV4dGVybiBpbnQJCWdldGNoYXIodm9pZCk7 CiBleHRlcm4gaW50CQlpc2NoYXIodm9pZCk7CmRpZmYgLS1naXQgc3lzL2Jvb3QvZWZpL01ha2Vm aWxlIHN5cy9ib290L2VmaS9NYWtlZmlsZQppbmRleCA2NjQ4MWY4NTEzZi4uMDA0OTBkMGU5NDMg MTAwNjQ0Ci0tLSBzeXMvYm9vdC9lZmkvTWFrZWZpbGUKKysrIHN5cy9ib290L2VmaS9NYWtlZmls ZQpAQCAtMTUsNyArMTUsNyBAQCBTVUJESVIrPQlmZHQKIC5pZiAke01BQ0hJTkVfQ1BVQVJDSH0g PT0gImFhcmNoNjQiIHx8IFwKICAgICAke01BQ0hJTkVfQ1BVQVJDSH0gPT0gImFtZDY0IiB8fCBc CiAgICAgJHtNQUNISU5FX0NQVUFSQ0h9ID09ICJhcm0iCi1TVUJESVIrPQlsaWJlZmkgbG9hZGVy IGJvb3QxCitTVUJESVIrPQlsaWJlZmkgZHJpdmVycyBsb2FkZXIgYm9vdDEKIC5lbmRpZgogCiAu ZW5kaWYgIyAke0NPTVBJTEVSX1RZUEV9ICE9ICJnY2MiIHx8ICR7Q09NUElMRVJfVkVSU0lPTn0g Pj0gNDA1MDAKZGlmZiAtLWdpdCBzeXMvYm9vdC9lZmkvYm9vdDEvTWFrZWZpbGUgc3lzL2Jvb3Qv ZWZpL2Jvb3QxL01ha2VmaWxlCmluZGV4IDExMGE4NTc3NDkxLi43NDgwYzljM2VjYSAxMDA2NDQK LS0tIHN5cy9ib290L2VmaS9ib290MS9NYWtlZmlsZQorKysgc3lzL2Jvb3QvZWZpL2Jvb3QxL01h a2VmaWxlCkBAIC04LDM0ICs4LDUwIEBAIE1LX1NTUD0JCW5vCiAKIFBST0c9CQlib290MS5zeW0K IElOVEVSTkFMUFJPRz0KLVdBUk5TPz0JCTYKK1dBUk5TPz0JCTMKKworIyBJbmNsdWRlIGJjYWNo ZSBjb2RlLgorSEFWRV9CQ0FDSEU9ICAgIHllcwogCiAuaWYgJHtNS19aRlN9ICE9ICJubyIKICMg RGlzYWJsZSB3YXJuaW5ncyB0aGF0IGFyZSBjdXJyZW50bHkgaW5jb21wYXRpYmxlIHdpdGggdGhl IHpmcyBib290IGNvZGUKLUNXQVJORkxBR1MuemZzX21vZHVsZS5jICs9IC1Xbm8tYXJyYXktYm91 bmRzCi1DV0FSTkZMQUdTLnpmc19tb2R1bGUuYyArPSAtV25vLWNhc3QtYWxpZ24KLUNXQVJORkxB R1MuemZzX21vZHVsZS5jICs9IC1Xbm8tY2FzdC1xdWFsCi1DV0FSTkZMQUdTLnpmc19tb2R1bGUu YyArPSAtV25vLW1pc3NpbmctcHJvdG90eXBlcwotQ1dBUk5GTEFHUy56ZnNfbW9kdWxlLmMgKz0g LVduby1zaWduLWNvbXBhcmUKLUNXQVJORkxBR1MuemZzX21vZHVsZS5jICs9IC1Xbm8tdW51c2Vk LXBhcmFtZXRlcgotQ1dBUk5GTEFHUy56ZnNfbW9kdWxlLmMgKz0gLVduby11bnVzZWQtZnVuY3Rp b24KK0NXQVJORkxBR1MuYm9vdDEuYyArPSAtV25vLW1pc3NpbmctdmFyaWFibGUtZGVjbGFyYXRp b25zCitDV0FSTkZMQUdTLnpmcy5jICs9IC1Xbm8taW5jb21wYXRpYmxlLXBvaW50ZXItdHlwZXMt ZGlzY2FyZHMtcXVhbGlmaWVycworQ1dBUk5GTEFHUy56ZnMuYyArPSAtV25vLW1pc3NpbmctdmFy aWFibGUtZGVjbGFyYXRpb25zCitDV0FSTkZMQUdTLnpmcy5jICs9IC1Xbm8tYXJyYXktYm91bmRz CitDV0FSTkZMQUdTLnpmcy5jICs9IC1Xbm8tY2FzdC1hbGlnbgorQ1dBUk5GTEFHUy56ZnMuYyAr PSAtV25vLWNhc3QtcXVhbAorQ1dBUk5GTEFHUy56ZnMuYyArPSAtV25vLW1pc3NpbmctcHJvdG90 eXBlcworQ1dBUk5GTEFHUy56ZnMuYyArPSAtV25vLXNpZ24tY29tcGFyZQorQ1dBUk5GTEFHUy56 ZnMuYyArPSAtV25vLXVudXNlZC1wYXJhbWV0ZXIKK0NXQVJORkxBR1MuemZzLmMgKz0gLVduby11 bnVzZWQtZnVuY3Rpb24KIENXQVJORkxBR1Muc2tlaW4uYyArPSAtV25vLWNhc3QtYWxpZ24KIENX QVJORkxBR1Muc2tlaW4uYyArPSAtV25vLW1pc3NpbmctdmFyaWFibGUtZGVjbGFyYXRpb25zCiAu ZW5kaWYKIAorCiAjIGFyY2hpdGVjdHVyZS1zcGVjaWZpYyBsb2FkZXIgY29kZQotU1JDUz0JYm9v dDEuYyBzZWxmX3JlbG9jLmMgc3RhcnQuUyB1ZnNfbW9kdWxlLmMKK1NSQ1M9CWJvb3QxLmMgc2Vs Zl9yZWxvYy5jIHN0YXJ0LlMKIC5pZiAke01LX1pGU30gIT0gIm5vIgotU1JDUys9CQl6ZnNfbW9k dWxlLmMKKy5QQVRIOgkJJHsuQ1VSRElSfS8uLi8uLi8uLi9jcnlwdG8vc2tlaW4KIFNSQ1MrPQkJ c2tlaW4uYyBza2Vpbl9ibG9jay5jCiAjIERvIG5vdCB1bnJvbGwgc2tlaW4gbG9vcHMsIHJlZHVj ZSBjb2RlIHNpemUKIENGTEFHUys9CS1EU0tFSU5fTE9PUD0xMTEKLS5QQVRIOgkJJHsuQ1VSRElS fS8uLi8uLi8uLi9jcnlwdG8vc2tlaW4KKy5QQVRIOgkJJHsuQ1VSRElSfS8uLi8uLi96ZnMKK1NS Q1MrPQkJemZzLmMKIC5lbmRpZgogCisjIEFsd2F5cyBhZGQgTUkgc291cmNlcworLlBBVEg6CQkk ey5DVVJESVJ9Ly4uLy4uL2NvbW1vbgorLmluY2x1ZGUJIiR7LkNVUkRJUn0vLi4vLi4vY29tbW9u L01ha2VmaWxlLmluYyIKK0NGTEFHUys9CS1JJHsuQ1VSRElSfS8uLi8uLi9jb21tb24KKworLlBB VEg6ICR7LkNVUkRJUn0vYXJjaC8ke01BQ0hJTkV9CisKIENGTEFHUys9CS1JLgogQ0ZMQUdTKz0J LUkkey5DVVJESVJ9Ly4uL2luY2x1ZGUKIENGTEFHUys9CS1JJHsuQ1VSRElSfS8uLi9pbmNsdWRl LyR7TUFDSElORX0KK0NGTEFHUys9CS1JJHsuQ1VSRElSfS8uLi9kcml2ZXJzLwogQ0ZMQUdTKz0J LUkkey5DVVJESVJ9Ly4uLy4uLy4uL2NvbnRyaWIvZGV2L2FjcGljYS9pbmNsdWRlCiBDRkxBR1Mr PQktSSR7LkNVUkRJUn0vLi4vLi4vLi4KIENGTEFHUys9CS1ERUZJX1VGU19CT09UCkBAIC01Niw2 ICs3MiwyMCBAQCBDRkxBR1MrPQktREVGSV9aRlNfQk9PVAogLlBBVEg6CQkkey5DVVJESVJ9Ly4u Ly4uL2NvbW1vbgogQ0ZMQUdTKz0JLUkkey5DVVJESVJ9Ly4uLy4uL2NvbW1vbgogCisjIG1ha2Ug YnVpbGRlbnYgZG9lc24ndCBzZXQgREVTVERJUiwgdGhpcyBtZWFucyBMSUJTVEFORAorIyB3aWxs IGJlIHdyb25nIHdoZW4gY3Jvc3NidWlsZGluZy4KKy5pZiBleGlzdHMoJHsuT0JKRElSfS8uLi8u Li8uLi8uLi9saWIvbGlic3RhbmQvbGlic3RhbmQuYSkKK0xJQlNUQU5EPQkkey5PQkpESVJ9Ly4u Ly4uLy4uLy4uL2xpYi9saWJzdGFuZC9saWJzdGFuZC5hCisuZW5kaWYKKworIyBBZGQgbGliZWZp CisuUEFUSDoJCSR7LkNVUkRJUn0vLi4vbGliZWZpCitMSUJFRkk9CQkkey5PQkpESVJ9Ly4uL2xp YmVmaS9saWJlZmkuYQorCisuUEFUSDoJCSR7LkNVUkRJUn0vLi4vZHJpdmVycworTElCRUZJX0RS SVZFUlM9CSR7Lk9CSkRJUn0vLi4vZHJpdmVycy9saWJlZmlfZHJpdmVycy5hCisKKwogRklMRVM9 CWJvb3QxLmVmaSBib290MS5lZmlmYXQKIEZJTEVTTU9ERV9ib290MS5lZmk9CSR7QklOTU9ERX0K IApAQCAtNzUsOCArMTA1LDggQEAgTERGTEFHUys9CS1XbCwtem5vY29tYnJlbG9jCiAjIF9fYWVh YmlfKiAoYXJtKSBvciBfX2RpdmRpMyAoaTM4NikuCiAjIGFzIHdlbGwgYXMgcmVxdWlyZWQgc3Ry aW5nIGFuZCBtZW1vcnkgZnVuY3Rpb25zIGZvciBhbGwgcGxhdGZvcm1zLgogIwotRFBBREQrPQkJ JHtMSUJTVEFORH0KLUxEQUREKz0JCS1sc3RhbmQKK0RQQUREKz0JCSR7TElCRUZJX0RSSVZFUlN9 ICR7TElCRUZJfSAke0xJQlNUQU5EfQorTERBREQrPQkJJHtMSUJFRklfRFJJVkVSU30gJHtMSUJF Rkl9ICR7TElCU1RBTkR9CiAKIERQQUREKz0JCSR7TERTQ1JJUFR9CiAKQEAgLTEwMiw3ICsxMzIs NyBAQCBib290MS5lZmk6ICR7UFJPR30KIAlTT1VSQ0VfREFURV9FUE9DSD0ke1NPVVJDRV9EQVRF X0VQT0NIfSBcCiAJJHtPQkpDT1BZfSAtaiAucGVoZWFkZXIgLWogLnRleHQgLWogLnNkYXRhIC1q IC5kYXRhIFwKIAkJLWogLmR5bmFtaWMgLWogLmR5bnN5bSAtaiAucmVsLmR5biBcCi0JCS1qIC5y ZWxhLmR5biAtaiAucmVsb2MgLWogLmVoX2ZyYW1lIFwKKwkJLWogLnJlbGEuZHluIC1qIC5yZWxv YyAtaiAuZWhfZnJhbWUgLWogc2V0X1hjb21tYW5kX3NldCBcCiAJCS0tb3V0cHV0LXRhcmdldD0k e0VGSV9UQVJHRVR9ICR7LkFMTFNSQ30gJHsuVEFSR0VUfQogCiBib290MS5vOiAkey5DVVJESVJ9 Ly4uLy4uL2NvbW1vbi91ZnNyZWFkLmMKQEAgLTExMSw3ICsxNDEsNyBAQCBib290MS5vOiAkey5D VVJESVJ9Ly4uLy4uL2NvbW1vbi91ZnNyZWFkLmMKICMgY3JlYXRlZCBieSBnZW5lcmF0ZS1mYXQu c2gKIAogLmluY2x1ZGUgIiR7LkNVUkRJUn0vTWFrZWZpbGUuZmF0IgotQk9PVDFfTUFYU0laRT89 CTEzMTA3MgorQk9PVDFfTUFYU0laRT89CTUyNDI4OAogCiBib290MS5lZmlmYXQ6IGJvb3QxLmVm aQogCUBzZXQgLS0gYGxzIC1sIGJvb3QxLmVmaWA7IFwKZGlmZiAtLWdpdCBzeXMvYm9vdC9lZmkv Ym9vdDEvTWFrZWZpbGUuZmF0IHN5cy9ib290L2VmaS9ib290MS9NYWtlZmlsZS5mYXQKaW5kZXgg Yzg2YTdjM2Y1ODUuLmUyY2RhMWNlYjc5IDEwMDY0NAotLS0gc3lzL2Jvb3QvZWZpL2Jvb3QxL01h a2VmaWxlLmZhdAorKysgc3lzL2Jvb3QvZWZpL2Jvb3QxL01ha2VmaWxlLmZhdApAQCAtMSw0ICsx LDQgQEAKICMgVGhpcyBmaWxlIGF1dG9nZW5lcmF0ZWQgYnkgZ2VuZXJhdGUtZmF0LnNoIC0gRE8g Tk9UIEVESVQKICMgJEZyZWVCU0QkCiBCT09UMV9PRkZTRVQ9MHgyZAotQk9PVDFfTUFYU0laRT0x MzEwNzIKK0JPT1QxX01BWFNJWkU9NTI0Mjg4CmRpZmYgLS1naXQgc3lzL2Jvb3QvZWZpL2Jvb3Qx L2Jvb3QxLmMgc3lzL2Jvb3QvZWZpL2Jvb3QxL2Jvb3QxLmMKaW5kZXggODBiMTg5NWQ0YjIuLjll MDJiZmEzODQ5IDEwMDY0NAotLS0gc3lzL2Jvb3QvZWZpL2Jvb3QxL2Jvb3QxLmMKKysrIHN5cy9i b290L2VmaS9ib290MS9ib290MS5jCkBAIC0yNiw2MiArMjYsMTE4IEBAIF9fRkJTRElEKCIkRnJl ZUJTRCQiKTsKICNpbmNsdWRlIDxtYWNoaW5lL2VsZi5oPgogI2luY2x1ZGUgPG1hY2hpbmUvc3Rk YXJnLmg+CiAjaW5jbHVkZSA8c3RhbmQuaD4KKyNpbmNsdWRlIDxzdHJpbmcxNi5oPgogCiAjaW5j bHVkZSA8ZWZpLmg+CisjaW5jbHVkZSA8ZWZpbGliLmg+CisjaW5jbHVkZSA8ZWZpcHJvdC5oPgog I2luY2x1ZGUgPGVmaWNvbnNjdGwuaD4KKyNpZmRlZiBFRklfWkZTX0JPT1QKKyNpbmNsdWRlIDxs aWJ6ZnMuaD4KKyNlbmRpZgorCisjaW5jbHVkZSA8Ym9vdHN0cmFwLmg+CiAKLSNpbmNsdWRlICJi b290X21vZHVsZS5oIgorI2luY2x1ZGUgImVmaV9kcml2ZXJzLmgiCiAjaW5jbHVkZSAicGF0aHMu aCIKIAotc3RhdGljIGNvbnN0IGJvb3RfbW9kdWxlX3QgKmJvb3RfbW9kdWxlc1tdID0KLXsKLSNp ZmRlZiBFRklfWkZTX0JPT1QKLQkmemZzX21vZHVsZSwKLSNlbmRpZgotI2lmZGVmIEVGSV9VRlNf Qk9PVAotCSZ1ZnNfbW9kdWxlCisjaWZkZWYgRUZJX0RFQlVHCisjZGVmaW5lIERQUklOVEYoZm10 LCBhcmdzLi4uKSBwcmludGYoZm10LCAjI2FyZ3MpCisjZGVmaW5lIERTVEFMTChkKSBicy0+U3Rh bGwoZCkKKyNlbHNlCisjZGVmaW5lIERQUklOVEYoZm10LCAuLi4pIHt9CisjZGVmaW5lIERTVEFM TChkKSB7fQogI2VuZGlmCisKK3N0cnVjdCBhcmNoX3N3aXRjaCBhcmNoc3c7CS8qIE1JL01EIGlu dGVyZmFjZSBib3VuZGFyeSAqLworCitzdGF0aWMgY29uc3QgZWZpX2RyaXZlcl90ICplZmlfZHJp dmVyc1tdID0geworICAgICAgICAmZnNfZHJpdmVyLAorICAgICAgICBOVUxMCiB9OwogCi0jZGVm aW5lCU5VTV9CT09UX01PRFVMRVMJbml0ZW1zKGJvb3RfbW9kdWxlcykKLS8qIFRoZSBpbml0aWFs IG51bWJlciBvZiBoYW5kbGVzIHVzZWQgdG8gcXVlcnkgRUZJIGZvciBwYXJ0aXRpb25zLiAqLwot I2RlZmluZSBOVU1fSEFORExFU19JTklUCTI0CitleHRlcm4gc3RydWN0IGNvbnNvbGUgZWZpX2Nv bnNvbGU7CisjaWYgZGVmaW5lZChfX2FtZDY0X18pIHx8IGRlZmluZWQoX19pMzg2X18pCitleHRl cm4gc3RydWN0IGNvbnNvbGUgY29tY29uc29sZTsKK2V4dGVybiBzdHJ1Y3QgY29uc29sZSBudWxs Y29uc29sZTsKKyNlbmRpZgogCi12b2lkIHB1dGNoYXIoaW50IGMpOwotRUZJX1NUQVRVUyBlZmlf bWFpbihFRklfSEFORExFIFhpbWFnZSwgRUZJX1NZU1RFTV9UQUJMRSogWHN5c3RhYik7CitzdHJ1 Y3QgZnNfb3BzICpmaWxlX3N5c3RlbVtdID0geworCSZkb3Nmc19mc29wcywKKwkmdWZzX2Zzb3Bz LAorCSZjZDk2NjBfZnNvcHMsCisJJm5mc19mc29wcywKKwkmZ3ppcGZzX2Zzb3BzLAorCSZiemlw ZnNfZnNvcHMsCisJTlVMTAorfTsKIAotRUZJX1NZU1RFTV9UQUJMRSAqc3lzdGFiOwotRUZJX0JP T1RfU0VSVklDRVMgKmJzOwotc3RhdGljIEVGSV9IQU5ETEUgKmltYWdlOworc3RydWN0IGRldnN3 ICpkZXZzd1tdID0geworCSZlZmlwYXJ0X2RldiwKKyNpZmRlZiBFRklfWkZTX0JPT1QKKwkmemZz X2RldiwKKyNlbmRpZgorCU5VTEwKK307CiAKLXN0YXRpYyBFRklfR1VJRCBCbG9ja0lvUHJvdG9j b2xHVUlEID0gQkxPQ0tfSU9fUFJPVE9DT0w7Ci1zdGF0aWMgRUZJX0dVSUQgRGV2aWNlUGF0aEdV SUQgPSBERVZJQ0VfUEFUSF9QUk9UT0NPTDsKLXN0YXRpYyBFRklfR1VJRCBMb2FkZWRJbWFnZUdV SUQgPSBMT0FERURfSU1BR0VfUFJPVE9DT0w7Ci1zdGF0aWMgRUZJX0dVSUQgQ29uc29sZUNvbnRy b2xHVUlEID0gRUZJX0NPTlNPTEVfQ09OVFJPTF9QUk9UT0NPTF9HVUlEOworc3RydWN0IGNvbnNv bGUgKmNvbnNvbGVzW10gPSB7CisJJmVmaV9jb25zb2xlLAorCU5VTEwKK307CiAKLS8qCi0gKiBQ cm92aWRlIE1hbGxvYyAvIEZyZWUgYmFja2VkIGJ5IEVGSXMgQWxsb2NhdGVQb29sIC8gRnJlZVBv b2wgd2hpY2ggZW5zdXJlcwotICogbWVtb3J5IGlzIGNvcnJlY3RseSBhbGlnbmVkIGF2b2lkaW5n IEVGSV9JTlZBTElEX1BBUkFNRVRFUiByZXR1cm5zIGZyb20KLSAqIEVGSSBtZXRob2RzLgorLyog RGVmaW5pdGlvbnMgd2UgZG9uJ3QgYWN0dWFsbHkgbmVlZCBmb3IgYm9vdCwgYnV0IHdlIG5lZWQg dG8gZGVmaW5lCisgKiB0byBtYWtlIHRoZSBsaW5rZXIgaGFwcHkuCiAgKi8KLXZvaWQgKgotTWFs bG9jKHNpemVfdCBsZW4sIGNvbnN0IGNoYXIgKmZpbGUgX191bnVzZWQsIGludCBsaW5lIF9fdW51 c2VkKQorc3RydWN0IGZpbGVfZm9ybWF0ICpmaWxlX2Zvcm1hdHNbXSA9IHsgTlVMTCB9OworCitz dHJ1Y3QgbmV0aWZfZHJpdmVyICpuZXRpZl9kcml2ZXJzW10gPSB7IE5VTEwgfTsKKworc3RhdGlj IGludAorZWZpX2F1dG9sb2FkKHZvaWQpCiB7Ci0Jdm9pZCAqb3V0OworICBwcmludGYoIioqKioq KioqIEJvb3QgYmxvY2sgc2hvdWxkIG5vdCBjYWxsIGF1dG9sb2FkXG4iKTsKKyAgcmV0dXJuICgt MSk7Cit9CiAKLQlpZiAoYnMtPkFsbG9jYXRlUG9vbChFZmlMb2FkZXJEYXRhLCBsZW4sICZvdXQp ID09IEVGSV9TVUNDRVNTKQotCQlyZXR1cm4gKG91dCk7CitzdGF0aWMgaW50IGVmaV9nZXRkZXYo dm9pZCAqKnZkZXYgX191bnVzZWQsIGNvbnN0IGNoYXIgKmRldnNwZWMgX191bnVzZWQsCisgICAg Y29uc3QgY2hhciAqKnBhdGggX191bnVzZWQpCit7CisgIHByaW50ZigiKioqKioqKiogQm9vdCBi bG9jayBzaG91bGQgbm90IGNhbGwgZ2V0ZGV2XG4iKTsKKyAgcmV0dXJuICgtMSk7Cit9CiAKLQly ZXR1cm4gKE5VTEwpOworc3RhdGljIHNzaXplX3QKK2VmaV9jb3B5aW4oY29uc3Qgdm9pZCAqc3Jj IF9fdW51c2VkLCB2bV9vZmZzZXRfdCBkZXN0IF9fdW51c2VkLAorICAgIGNvbnN0IHNpemVfdCBs ZW4gX191bnVzZWQpCit7CisgIHByaW50ZigiKioqKioqKiogQm9vdCBibG9jayBzaG91bGQgbm90 IGNhbGwgY29weWluXG4iKTsKKyAgcmV0dXJuICgtMSk7CiB9CiAKLXZvaWQKLUZyZWUodm9pZCAq YnVmLCBjb25zdCBjaGFyICpmaWxlIF9fdW51c2VkLCBpbnQgbGluZSBfX3VudXNlZCkKK3N0YXRp YyBzc2l6ZV90CitlZmlfY29weW91dCh2bV9vZmZzZXRfdCBzcmMgX191bnVzZWQsIHZvaWQgKmRl c3QgX191bnVzZWQsCisgICAgY29uc3Qgc2l6ZV90IGxlbiBfX3VudXNlZCkKIHsKLQlpZiAoYnVm ICE9IE5VTEwpCi0JCSh2b2lkKWJzLT5GcmVlUG9vbChidWYpOworICBwcmludGYoIioqKioqKioq IEJvb3QgYmxvY2sgc2hvdWxkIG5vdCBjYWxsIGNvcHlvdXRcbiIpOworICByZXR1cm4gKC0xKTsK K30KKworc3RhdGljIHNzaXplX3QKK2VmaV9yZWFkaW4oaW50IGZkIF9fdW51c2VkLCB2bV9vZmZz ZXRfdCBkZXN0IF9fdW51c2VkLAorICAgIGNvbnN0IHNpemVfdCBsZW4gX191bnVzZWQpCit7Cisg IHByaW50ZigiKioqKioqKiogQm9vdCBibG9jayBzaG91bGQgbm90IGNhbGwgcmVhZGluXG4iKTsK KyAgcmV0dXJuICgtMSk7CiB9CiAKKy8qIFRoZSBpbml0aWFsIG51bWJlciBvZiBoYW5kbGVzIHVz ZWQgdG8gcXVlcnkgRUZJIGZvciBwYXJ0aXRpb25zLiAqLworI2RlZmluZSBOVU1fSEFORExFU19J TklUCTI0CisKK3N0YXRpYyBFRklfR1VJRCBEZXZpY2VQYXRoR1VJRCA9IERFVklDRV9QQVRIX1BS T1RPQ09MOworc3RhdGljIEVGSV9HVUlEIExvYWRlZEltYWdlR1VJRCA9IExPQURFRF9JTUFHRV9Q Uk9UT0NPTDsKK3N0YXRpYyBFRklfR1VJRCBTaW1wbGVGaWxlU3lzdGVtUHJvdG9jb2xHVUlEID0g U0lNUExFX0ZJTEVfU1lTVEVNX1BST1RPQ09MOworc3RhdGljIEVGSV9HVUlEIEZpbGVJbmZvR1VJ RCA9IEVGSV9GSUxFX0lORk9fSUQ7OworCiAvKgogICogbm9kZXNfbWF0Y2ggcmV0dXJucyBUUlVF IGlmIHRoZSBpbWdwYXRoIGlzbid0IE5VTEwgYW5kIHRoZSBub2RlcyBtYXRjaCwKICAqIEZBTFNF IG90aGVyd2lzZS4KQEAgLTE0Miw2ICsxOTgsNyBAQCBkZXZwYXRoX2xhc3QoRUZJX0RFVklDRV9Q QVRIICpkZXZwYXRoKQogCXJldHVybiAoZGV2cGF0aCk7CiB9CiAKKyNpZmRlZiBFRklfREVCVUcK IC8qCiAgKiBkZXZwYXRoX25vZGVfc3RyIGlzIGEgYmFzaWMgb3V0cHV0IG1ldGhvZCBmb3IgYSBk ZXZwYXRoIG5vZGUgd2hpY2gKICAqIG9ubHkgdW5kZXJzdGFuZHMgYSBzdWJzZXQgb2YgdGhlIGF2 YWlsYWJsZSBzdWIgdHlwZXMuCkBAIC0yNzMsNyArMzMwLDcgQEAgZGV2cGF0aF9ub2RlX3N0cihj aGFyICpidWYsIHNpemVfdCBzaXplLCBFRklfREVWSUNFX1BBVEggKmRldnBhdGgpCiAgKiBkZXZw YXRoX3N0cmxjYXQgYXBwZW5kcyBhIHRleHQgZGVzY3JpcHRpb24gb2YgZGV2cGF0aCB0byBidWYg YnV0IG5vdCBtb3JlCiAgKiB0aGFuIHNpemUgLSAxIGNoYXJhY3RlcnMgZm9sbG93ZWQgYnkgTlVM LXRlcm1pbmF0b3IuCiAgKi8KLWludAorc3RhdGljIGludAogZGV2cGF0aF9zdHJsY2F0KGNoYXIg KmJ1Ziwgc2l6ZV90IHNpemUsIEVGSV9ERVZJQ0VfUEFUSCAqZGV2cGF0aCkKIHsKIAlzaXplX3Qg bGVuLCB1c2VkOwpAQCAtMzA0LDQ4ICszNjEsMjA3IEBAIGRldnBhdGhfc3RybGNhdChjaGFyICpi dWYsIHNpemVfdCBzaXplLCBFRklfREVWSUNFX1BBVEggKmRldnBhdGgpCiAgKiBkZXZwYXRoX3N0 ciBpcyBjb252ZW5pZW5jZSBtZXRob2Qgd2hpY2ggcmV0dXJucyB0aGUgdGV4dCBkZXNjcmlwdGlv biBvZgogICogZGV2cGF0aCB1c2luZyBhIHN0YXRpYyBidWZmZXIsIHNvIGl0IGlzbid0IHRocmVh ZCBzYWZlIQogICovCi1jaGFyICoKK3N0YXRpYyBjaGFyICoKIGRldnBhdGhfc3RyKEVGSV9ERVZJ Q0VfUEFUSCAqZGV2cGF0aCkKIHsKIAlzdGF0aWMgY2hhciBidWZbMjU2XTsKIAogCWRldnBhdGhf c3RybGNhdChidWYsIHNpemVvZihidWYpLCBkZXZwYXRoKTsKIAotCXJldHVybiBidWY7CisJcmV0 dXJuIChidWYpOworfQorI2VuZGlmCisKK3N0YXRpYyBFRklfU1RBVFVTCitlZmlfbG9hZChFRklf SEFORExFIGRldiwgY29uc3QgY2hhciAqZmlsZXBhdGgsIHZvaWQgKipidWZwLCBzaXplX3QgKmJ1 ZnNpemUpCit7CisgICAgICAgIFVJTlROIGluZm9zaXplID0gc2l6ZW9mKEVGSV9GSUxFX0lORk8p ICsKKyAgICAgICAgICAoKHN0cmxlbihmaWxlcGF0aCkgKyAxKSAqIHNpemVvZihDSEFSMTYpKTsK KyAgICAgICAgRUZJX0ZJTEVfSU5GTyAqZmluZm87CisJRUZJX1NUQVRVUyBzdGF0dXM7CisgICAg ICAgIEVGSV9GSUxFX0lPX0lOVEVSRkFDRSAqaWZhY2U7CisgICAgICAgIEVGSV9GSUxFX0hBTkRM RSByb290OworICAgICAgICBFRklfRklMRV9IQU5ETEUgdGFyZ2V0OworICAgICAgICBDSEFSMTYg cGF0aDE2W3N0cmxlbihmaWxlcGF0aCkgKyAxXTsKKwl2b2lkICpidWY7CisKKyAgICAgICAgZmlu Zm8gPSBtYWxsb2MoaW5mb3NpemUpOworCisgICAgICAgIGlmIChmaW5mbyA9PSBOVUxMKSB7Cisg ICAgICAgICAgICAgICAgcmV0dXJuIChFRklfT1VUX09GX1JFU09VUkNFUyk7CisgICAgICAgIH0K KworCXN0YXR1cyA9IEJTLT5PcGVuUHJvdG9jb2woZGV2LCAmU2ltcGxlRmlsZVN5c3RlbVByb3Rv Y29sR1VJRCwKKyAgICAgICAgICAgICh2b2lkICoqKSZpZmFjZSwgSUgsIE5VTEwsIEVGSV9PUEVO X1BST1RPQ09MX0dFVF9QUk9UT0NPTCk7CisKKyAgICAgICAgaWYgKHN0YXR1cyAhPSBFRklfU1VD Q0VTUykgeworICAgICAgICAgICAgICAgIGZyZWUoZmluZm8pOworICAgICAgICAgICAgICAgIHBy aW50ZigiT3BlbiBwcm90b2NvbCBmYWlsZWQhICVsZFxuIiwgRUZJX0VSUk9SX0NPREUoc3RhdHVz KSk7CisgICAgICAgICAgICAgICAgcmV0dXJuIChzdGF0dXMpOworICAgICAgICB9CisKKyAgICAg ICAgc3RhdHVzID0gaWZhY2UtPk9wZW5Wb2x1bWUoaWZhY2UsICZyb290KTsKKworICAgICAgICBp ZiAoc3RhdHVzICE9IEVGSV9TVUNDRVNTKSB7CisgICAgICAgICAgICAgICAgQlMtPkNsb3NlUHJv dG9jb2woZGV2LCAmU2ltcGxlRmlsZVN5c3RlbVByb3RvY29sR1VJRCwgSUgsIE5VTEwpOworICAg ICAgICAgICAgICAgIGZyZWUoZmluZm8pOworICAgICAgICAgICAgICAgIHByaW50ZigiT3BlbiB2 b2x1bWUgZmFpbGVkISAlbGRcbiIsIEVGSV9FUlJPUl9DT0RFKHN0YXR1cykpOworICAgICAgICAg ICAgICAgIHJldHVybiAoc3RhdHVzKTsKKyAgICAgICAgfQorCisgICAgICAgIHN0cmNweV90b18x NihwYXRoMTYsIGZpbGVwYXRoKTsKKyAgICAgICAgc3RhdHVzID0gcm9vdC0+T3Blbihyb290LCAm dGFyZ2V0LCBwYXRoMTYsIEVGSV9GSUxFX01PREVfUkVBRCwgMCk7CisKKyAgICAgICAgaWYgKHN0 YXR1cyAhPSBFRklfU1VDQ0VTUykgeworICAgICAgICAgICAgICAgIEJTLT5DbG9zZVByb3RvY29s KGRldiwgJlNpbXBsZUZpbGVTeXN0ZW1Qcm90b2NvbEdVSUQsIElILCBOVUxMKTsKKyAgICAgICAg ICAgICAgICBmcmVlKGZpbmZvKTsKKworICAgICAgICAgICAgICAgIHJldHVybiAoc3RhdHVzKTsK KyAgICAgICAgfQorCisgICAgICAgICpidWZzaXplID0gaW5mb3NpemU7CisgICAgICAgIHN0YXR1 cyA9IHRhcmdldC0+R2V0SW5mbyh0YXJnZXQsICZGaWxlSW5mb0dVSUQsIGJ1ZnNpemUsIGZpbmZv KTsKKworICAgICAgICBpZiAoc3RhdHVzICE9IEVGSV9TVUNDRVNTKSB7CisgICAgICAgICAgICAg ICAgQlMtPkNsb3NlUHJvdG9jb2woZGV2LCAmU2ltcGxlRmlsZVN5c3RlbVByb3RvY29sR1VJRCwg SUgsIE5VTEwpOworICAgICAgICAgICAgICAgIGZyZWUoZmluZm8pOworICAgICAgICAgICAgICAg IHByaW50ZigiR2V0IGluZm8gZmFpbGVkISAlbGRcbiIsIEVGSV9FUlJPUl9DT0RFKHN0YXR1cykp OworICAgICAgICAgICAgICAgIHJldHVybiAoc3RhdHVzKTsKKyAgICAgICAgfQorCisgICAgICAg ICpidWZzaXplID0gZmluZm8tPkZpbGVTaXplOworCisgICAgICAgIGlmICgoYnVmID0gbWFsbG9j KGZpbmZvLT5GaWxlU2l6ZSkpID09IE5VTEwpIHsKKyAgICAgICAgICAgICAgICBCUy0+Q2xvc2VQ cm90b2NvbChkZXYsICZTaW1wbGVGaWxlU3lzdGVtUHJvdG9jb2xHVUlELCBJSCwgTlVMTCk7Cisg ICAgICAgICAgICAgICAgZnJlZShmaW5mbyk7CisgICAgICAgICAgICAgICAgcHJpbnRmKCJGYWls ZWQgdG8gYWxsb2NhdGUgbG9hZCBidWZmZXIgJXpkIGZvciAnJXMnICIKKyAgICAgICAgICAgICAg ICAgICAgICAgIiglbHUpXG4iLCBmaW5mby0+RmlsZVNpemUsIGZpbGVwYXRoLCBFRklfRVJST1Jf Q09ERShzdGF0dXMpKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gKEVGSV9PVVRfT0ZfUkVTT1VS Q0VTKTsKKyAgICAgICAgfQorCisgICAgICAgICpidWZwID0gYnVmOworICAgICAgICBzdGF0dXMg PSB0YXJnZXQtPlJlYWQodGFyZ2V0LCBidWZzaXplLCBidWYpOworICAgICAgICBCUy0+Q2xvc2VQ cm90b2NvbChkZXYsICZTaW1wbGVGaWxlU3lzdGVtUHJvdG9jb2xHVUlELCBJSCwgTlVMTCk7Cisg ICAgICAgIGZyZWUoZmluZm8pOworCisgICAgICAgIGlmIChzdGF0dXMgIT0gRUZJX1NVQ0NFU1Mp IHsKKyAgICAgICAgICAgICAgICBwcmludGYoIlJlYWQgZmFpbGVkISAlbGRcbiIsIEVGSV9FUlJP Ul9DT0RFKHN0YXR1cykpOworICAgICAgICAgICAgICAgIHJldHVybiAoc3RhdHVzKTsKKyAgICAg ICAgfQorCisgICAgICAgIHJldHVybiAoRUZJX1NVQ0NFU1MpOwogfQogCiAvKgogICogbG9hZF9s b2FkZXIgYXR0ZW1wdHMgdG8gbG9hZCB0aGUgbG9hZGVyIGltYWdlIGRhdGEuCiAgKgotICogSXQg dHJpZXMgZWFjaCBtb2R1bGUgYW5kIGl0cyByZXNwZWN0aXZlIGRldmljZXMsIGlkZW50aWZpZWQg YnkgbW9kLT5wcm9iZSwKLSAqIGluIG9yZGVyIHVudGlsIGEgc3VjY2Vzc2Z1bCBsb2FkIG9jY3Vy cyBhdCB3aGljaCBwb2ludCBpdCByZXR1cm5zIEVGSV9TVUNDRVNTCi0gKiBhbmQgRUZJX05PVF9G T1VORCBvdGhlcndpc2UuCisgKiBUaGlzIHRyaWVzIGFsbCBoYW5kbGVzIHdoaWNoIHN1cHBvcnQg dGhlIEVGSV9TSU1QTEVfRklMRV9TWVNURU0gaW50ZXJmYWNlLgorICogSXQgaXMgZXhwZWN0ZWQg dGhhdCB0aGUgZHJpdmVycyB3aWxsIGhhdmUgaW5zdGFsbGVkIHRoaXMgaW50ZXJmYWNlIG9uIGV2 ZXJ5CisgKiBoYW5kbGUgcmVwcmVzZW50aW5nIGEgZGV2aWNlIGNvbnRhaW5pbmcgYSBzdXBwb3J0 ZWQgZmlsZSBzeXN0ZW0uCisgKgorICogTm90ZTogSW4gdGhlIGZ1dHVyZSwgdGhpcyBtYXkgYmUg YWx0ZXJlZCB0byB1c2UgdGhlIEVGSV9MT0FEX0ZJTEUgaW50ZXJmYWNlLAorICogd2hpY2ggc2hv dWxkIHdvcmsgdHJhbnNwYXJlbnRseSB3aXRoIG5ldHdvcmsgYm9vdGluZy4KICAqCiAgKiBPbmx5 IGRldmljZXMgd2hpY2ggaGF2ZSBwcmVmZXJyZWQgbWF0Y2hpbmcgdGhlIHByZWZlcnJlZCBwYXJh bWV0ZXIgYXJlIHRyaWVkLgogICovCiBzdGF0aWMgRUZJX1NUQVRVUwotbG9hZF9sb2FkZXIoY29u c3QgYm9vdF9tb2R1bGVfdCAqKm1vZHAsIGRldl9pbmZvX3QgKipkZXZpbmZvcCwgdm9pZCAqKmJ1 ZnAsCi0gICAgc2l6ZV90ICpidWZzaXplLCBCT09MRUFOIHByZWZlcnJlZCkKK2xvYWRfbG9hZGVy KEVGSV9IQU5ETEUgKmhhbmRsZXAsIHZvaWQgKipidWZwLCBzaXplX3QgKmJ1ZnNpemUpCiB7Ci0J VUlOVE4gaTsKLQlkZXZfaW5mb190ICpkZXY7Ci0JY29uc3QgYm9vdF9tb2R1bGVfdCAqbW9kOwot Ci0JZm9yIChpID0gMDsgaSA8IE5VTV9CT09UX01PRFVMRVM7IGkrKykgewotCQltb2QgPSBib290 X21vZHVsZXNbaV07Ci0JCWZvciAoZGV2ID0gbW9kLT5kZXZpY2VzKCk7IGRldiAhPSBOVUxMOyBk ZXYgPSBkZXYtPm5leHQpIHsKLQkJCWlmIChkZXYtPnByZWZlcnJlZCAhPSBwcmVmZXJyZWQpCi0J CQkJY29udGludWU7Ci0KLQkJCWlmIChtb2QtPmxvYWQoUEFUSF9MT0FERVJfRUZJLCBkZXYsIGJ1 ZnAsIGJ1ZnNpemUpID09Ci0JCQkgICAgRUZJX1NVQ0NFU1MpIHsKLQkJCQkqZGV2aW5mb3AgPSBk ZXY7Ci0JCQkJKm1vZHAgPSBtb2Q7Ci0JCQkJcmV0dXJuIChFRklfU1VDQ0VTUyk7Ci0JCQl9CisJ RUZJX0RFVklDRV9QQVRIICppbWdwYXRoOworCUVGSV9ERVZJQ0VfUEFUSCAqZGV2cGF0aDsKKwlF RklfTE9BREVEX0lNQUdFICpib290X2ltYWdlOworICAgICAgICBFRklfSEFORExFICpib290X2hh bmRsZTsKKwlFRklfSEFORExFICpwcmVmZXJyZWQ7CisJRUZJX0hBTkRMRSAqaGFuZGxlczsKKyAg ICAgICAgRUZJX1NUQVRVUyBzdGF0dXM7CisJVUlOVE4gaSwgaHNpemUsIG5oYW5kbGVzLCBucHJl ZmVycmVkOworCisJaWYgKChzdGF0dXMgPSBCUy0+T3BlblByb3RvY29sKElILCAmTG9hZGVkSW1h Z2VHVUlELAorICAgICAgICAgICAgKFZPSUQqKikmYm9vdF9pbWFnZSwgSUgsIE5VTEwsCisgICAg ICAgICAgICBFRklfT1BFTl9QUk9UT0NPTF9HRVRfUFJPVE9DT0wpKSAhPSBFRklfU1VDQ0VTUykg eworCQlwYW5pYygiRmFpbGVkIHRvIHF1ZXJ5IExvYWRlZEltYWdlICglbHUpXG4iLAorCQkgICAg RUZJX0VSUk9SX0NPREUoc3RhdHVzKSk7CisJfQorCisgICAgICAgIGJvb3RfaGFuZGxlID0gYm9v dF9pbWFnZS0+RGV2aWNlSGFuZGxlOworCisJaWYgKChzdGF0dXMgPSBCUy0+T3BlblByb3RvY29s KGJvb3RfaGFuZGxlLCAmRGV2aWNlUGF0aEdVSUQsCisgICAgICAgICAgICAodm9pZCAqKikmaW1n cGF0aCwgSUgsIE5VTEwsIEVGSV9PUEVOX1BST1RPQ09MX0dFVF9QUk9UT0NPTCkpKSB7CisgICAg ICAgICAgICAgICAgcGFuaWMoIkZhaWxlZCB0byBnZXQgaW1hZ2UgRGV2aWNlUGF0aCAoJWx1KVxu IiwKKyAgICAgICAgICAgICAgICAgICAgRUZJX0VSUk9SX0NPREUoc3RhdHVzKSk7CisgICAgICAg IH0KKyAgICAgICAgRFBSSU5URigiYm9vdDEgaW1hZ2VwYXRoOiAlc1xuIiwgZGV2cGF0aF9zdHIo aW1ncGF0aCkpOworCisgICAgICAgIC8qIEFsbG9jYXRlIHNwYWNlIGZvciB0aGUgaGFuZGxlcyAq LworCWhzaXplID0gKFVJTlROKU5VTV9IQU5ETEVTX0lOSVQgKiBzaXplb2YoRUZJX0hBTkRMRSk7 CisJaWYgKChoYW5kbGVzID0gbWFsbG9jKGhzaXplKSkgPT0gTlVMTCkKKwkJcGFuaWMoIkZhaWxl ZCB0byBhbGxvY2F0ZSAlZCBoYW5kbGVzICglbHUpIiwgTlVNX0hBTkRMRVNfSU5JVCwKKwkJICAg IEVGSV9FUlJPUl9DT0RFKHN0YXR1cykpOworCisJc3RhdHVzID0gQlMtPkxvY2F0ZUhhbmRsZShC eVByb3RvY29sLCAmU2ltcGxlRmlsZVN5c3RlbVByb3RvY29sR1VJRCwgTlVMTCwKKwkgICAgJmhz aXplLCBoYW5kbGVzKTsKKworCXN3aXRjaCAoc3RhdHVzKSB7CisJY2FzZSBFRklfU1VDQ0VTUzoK KwkJYnJlYWs7CisJY2FzZSBFRklfQlVGRkVSX1RPT19TTUFMTDoKKwkJKHZvaWQpQlMtPkZyZWVQ b29sKGhhbmRsZXMpOworCQlpZiAoKGhhbmRsZXMgPSBtYWxsb2MoaHNpemUpKSA9PSBOVUxMKSB7 CisJCQlwYW5pYygiRmFpbGVkIHRvIGFsbG9jYXRlICV6dSBoYW5kbGVzICglbHUpIiwgaHNpemUg LworCQkJICAgIHNpemVvZigqaGFuZGxlcyksIEVGSV9FUlJPUl9DT0RFKHN0YXR1cykpOwogCQl9 CisJCXN0YXR1cyA9IEJTLT5Mb2NhdGVIYW5kbGUoQnlQcm90b2NvbCwKKyAgICAgICAgICAgICAg ICAgICAgJlNpbXBsZUZpbGVTeXN0ZW1Qcm90b2NvbEdVSUQsIE5VTEwsICZoc2l6ZSwgaGFuZGxl cyk7CisJCWlmIChzdGF0dXMgIT0gRUZJX1NVQ0NFU1MpCisJCQlwYW5pYygiRmFpbGVkIHRvIGdl dCBkZXZpY2UgaGFuZGxlcyAoJWx1KVxuIiwKKwkJCSAgICBFRklfRVJST1JfQ09ERShzdGF0dXMp KTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcGFuaWMoIkZhaWxlZCB0byBnZXQgZGV2aWNlIGhh bmRsZXMgKCVsdSkiLAorCQkgICAgRUZJX0VSUk9SX0NPREUoc3RhdHVzKSk7CiAJfQogCisJaWYg KChwcmVmZXJyZWQgPSBtYWxsb2MoaHNpemUpKSA9PSBOVUxMKQorCQlwYW5pYygiRmFpbGVkIHRv IGFsbG9jYXRlICVkIGhhbmRsZXMgKCVsdSkiLCBOVU1fSEFORExFU19JTklULAorCQkgICAgRUZJ X0VSUk9SX0NPREUoc3RhdHVzKSk7CisKKyAgICAgICAgbnByZWZlcnJlZCA9IDA7CisJbmhhbmRs ZXMgPSBoc2l6ZSAvIHNpemVvZigqaGFuZGxlcyk7CisKKyAgICAgICAgLyogRmlndXJlIG91dCB3 aGljaCBoYW5kbGVzIGFyZSBwcmVmZXJyZWQgKi8KKyAgICAgICAgZm9yIChpID0gMDsgaSA8IG5o YW5kbGVzOyBpKyspIHsKKyAgICAgICAgICAgICAgICBpZiAoQlMtPk9wZW5Qcm90b2NvbChoYW5k bGVzW2ldLCAmRGV2aWNlUGF0aEdVSUQsCisgICAgICAgICAgICAgICAgICAgICh2b2lkICoqKSZk ZXZwYXRoLCBJSCwgTlVMTCwgRUZJX09QRU5fUFJPVE9DT0xfR0VUX1BST1RPQ09MKSA9PQorICAg ICAgICAgICAgICAgICAgICBFRklfU1VDQ0VTUykgeworICAgICAgICAgICAgICAgICAgICAgICAg aWYgKGRldmljZV9wYXRoc19tYXRjaChpbWdwYXRoLCBkZXZwYXRoKSkgeworICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBwcmVmZXJyZWRbbnByZWZlcnJlZF0gPSBoYW5kbGVzW2ldOwor ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBucHJlZmVycmVkKys7CisgICAgICAgICAg ICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICBCUy0+Q2xvc2VQcm90b2Nv bChoYW5kbGVzW2ldLCAmRGV2aWNlUGF0aEdVSUQsIElILCBOVUxMKTsKKyAgICAgICAgICAgICAg ICB9CisgICAgICAgIH0KKworICAgICAgICBCUy0+Q2xvc2VQcm90b2NvbChib290X2hhbmRsZSwg JkRldmljZVBhdGhHVUlELCBJSCwgTlVMTCk7CisKKyAgICAgICAgLyogVHJ5IHRoZSBwcmVmZXJy ZWQgaGFuZGxlcyBmaXJzdCwgdGhlbiBhbGwgdGhlIGhhbmRsZXMgKi8KKyAgICAgICAgZm9yIChp ID0gMDsgaSA8IG5wcmVmZXJyZWQ7IGkrKykgeworICAgICAgICAgICAgICAgIGlmIChlZmlfbG9h ZChwcmVmZXJyZWRbaV0sIFBBVEhfTE9BREVSX0VGSSwgYnVmcCwgYnVmc2l6ZSkgPT0KKyAgICAg ICAgICAgICAgICAgICBFRklfU1VDQ0VTUykgeworICAgICAgICAgICAgICAgICAgICAgICAgKmhh bmRsZXAgPSBwcmVmZXJyZWRbaV07CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gKEVG SV9TVUNDRVNTKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBmb3Ig KGkgPSAwOyBpIDwgbmhhbmRsZXM7IGkrKykgeworICAgICAgICAgICAgICAgIGlmIChlZmlfbG9h ZChoYW5kbGVzW2ldLCBQQVRIX0xPQURFUl9FRkksIGJ1ZnAsIGJ1ZnNpemUpID09CisgICAgICAg ICAgICAgICAgICAgRUZJX1NVQ0NFU1MpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICpoYW5k bGVwID0gaGFuZGxlc1tpXTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAoRUZJX1NV Q0NFU1MpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIHByaW50Zigi RmFpbGVkIHRvIGxvYWQgJXMgZnJvbSBhbnkgZGV2aWNlIVxuIiwgUEFUSF9MT0FERVJfRUZJKTsK KwogCXJldHVybiAoRUZJX05PVF9GT1VORCk7CiB9CiAKQEAgLTM1OSwyMCArNTc1LDI3IEBAIHRy eV9ib290KHZvaWQpCiAJc2l6ZV90IGJ1ZnNpemUsIGxvYWRlcnNpemUsIGNtZHNpemU7CiAJdm9p ZCAqYnVmLCAqbG9hZGVyYnVmOwogCWNoYXIgKmNtZDsKLQlkZXZfaW5mb190ICpkZXY7Ci0JY29u c3QgYm9vdF9tb2R1bGVfdCAqbW9kOworICAgICAgICBFRklfSEFORExFIGZzaGFuZGxlOwogCUVG SV9IQU5ETEUgbG9hZGVyaGFuZGxlOwogCUVGSV9MT0FERURfSU1BR0UgKmxvYWRlZF9pbWFnZTsK IAlFRklfU1RBVFVTIHN0YXR1czsKKyAgICAgICAgRUZJX0RFVklDRV9QQVRIICpmc3BhdGg7CisK KwlzdGF0dXMgPSBsb2FkX2xvYWRlcigmZnNoYW5kbGUsICZsb2FkZXJidWYsICZsb2FkZXJzaXpl KTsKIAotCXN0YXR1cyA9IGxvYWRfbG9hZGVyKCZtb2QsICZkZXYsICZsb2FkZXJidWYsICZsb2Fk ZXJzaXplLCBUUlVFKTsKLQlpZiAoc3RhdHVzICE9IEVGSV9TVUNDRVNTKSB7Ci0JCXN0YXR1cyA9 IGxvYWRfbG9hZGVyKCZtb2QsICZkZXYsICZsb2FkZXJidWYsICZsb2FkZXJzaXplLAotCQkgICAg RkFMU0UpOworICAgICAgICBpZiAoc3RhdHVzICE9IEVGSV9TVUNDRVNTKSB7CisgICAgICAgICAg ICAgICAgcmV0dXJuIChzdGF0dXMpOworICAgICAgICB9CisKKwlmc3BhdGggPSBOVUxMOworCWlm IChzdGF0dXMgPT0gRUZJX1NVQ0NFU1MpIHsKKwkJc3RhdHVzID0gQlMtPk9wZW5Qcm90b2NvbChm c2hhbmRsZSwgJkRldmljZVBhdGhHVUlELAorICAgICAgICAgICAgICAgICAgICAodm9pZCAqKikm ZnNwYXRoLCBJSCwgTlVMTCwgRUZJX09QRU5fUFJPVE9DT0xfR0VUX1BST1RPQ09MKTsKIAkJaWYg KHN0YXR1cyAhPSBFRklfU1VDQ0VTUykgewotCQkJcHJpbnRmKCJGYWlsZWQgdG8gbG9hZCAnJXMn XG4iLCBQQVRIX0xPQURFUl9FRkkpOwotCQkJcmV0dXJuIChzdGF0dXMpOwotCQl9CisJCQlEUFJJ TlRGKCJGYWlsZWQgdG8gZ2V0IGltYWdlIERldmljZVBhdGggKCVsdSlcbiIsCisJCQkgICAgRUZJ X0VSUk9SX0NPREUoc3RhdHVzKSk7CisgICAgICAgICAgICAgICAgfQorCQlEUFJJTlRGKCJmaWxl c3lzdGVtIGRldmljZSBwYXRoOiAlc1xuIiwgZGV2cGF0aF9zdHIoZnNwYXRoKSk7CiAJfQogCiAJ LyoKQEAgLTM4Nyw5ICs2MTAsOSBAQCB0cnlfYm9vdCh2b2lkKQogCSAqLwogCWNtZCA9IE5VTEw7 CiAJY21kc2l6ZSA9IDA7Ci0Jc3RhdHVzID0gbW9kLT5sb2FkKFBBVEhfRE9UQ09ORklHLCBkZXYs ICZidWYsICZidWZzaXplKTsKKwlzdGF0dXMgPSBlZmlfbG9hZChmc2hhbmRsZSwgUEFUSF9ET1RD T05GSUcsICZidWYsICZidWZzaXplKTsKIAlpZiAoc3RhdHVzID09IEVGSV9OT1RfRk9VTkQpCi0J CXN0YXR1cyA9IG1vZC0+bG9hZChQQVRIX0NPTkZJRywgZGV2LCAmYnVmLCAmYnVmc2l6ZSk7CisJ CXN0YXR1cyA9IGVmaV9sb2FkKGZzaGFuZGxlLCBQQVRIX0NPTkZJRywgJmJ1ZiwgJmJ1ZnNpemUp OwogCWlmIChzdGF0dXMgPT0gRUZJX1NVQ0NFU1MpIHsKIAkJY21kc2l6ZSA9IGJ1ZnNpemUgKyAx OwogCQljbWQgPSBtYWxsb2MoY21kc2l6ZSk7CkBAIC00MDEsMjQgKzYyNCwyNSBAQCB0cnlfYm9v dCh2b2lkKQogCQlidWYgPSBOVUxMOwogCX0KIAotCWlmICgoc3RhdHVzID0gYnMtPkxvYWRJbWFn ZShUUlVFLCBpbWFnZSwgZGV2cGF0aF9sYXN0KGRldi0+ZGV2cGF0aCksCisJaWYgKChzdGF0dXMg PSBCUy0+TG9hZEltYWdlKFRSVUUsIElILCBkZXZwYXRoX2xhc3QoZnNwYXRoKSwKIAkgICAgbG9h ZGVyYnVmLCBsb2FkZXJzaXplLCAmbG9hZGVyaGFuZGxlKSkgIT0gRUZJX1NVQ0NFU1MpIHsKLQkJ cHJpbnRmKCJGYWlsZWQgdG8gbG9hZCBpbWFnZSBwcm92aWRlZCBieSAlcywgc2l6ZTogJXp1LCAo JWx1KVxuIiwKLQkJICAgICBtb2QtPm5hbWUsIGxvYWRlcnNpemUsIEVGSV9FUlJPUl9DT0RFKHN0 YXR1cykpOworCQlwcmludGYoIkZhaWxlZCB0byBsb2FkIGltYWdlLCBzaXplOiAlenUsICglbHUp XG4iLAorCQkgICAgIGxvYWRlcnNpemUsIEVGSV9FUlJPUl9DT0RFKHN0YXR1cykpOwogCQlnb3Rv IGVycm91dDsKIAl9CiAKLQlpZiAoKHN0YXR1cyA9IGJzLT5IYW5kbGVQcm90b2NvbChsb2FkZXJo YW5kbGUsICZMb2FkZWRJbWFnZUdVSUQsCi0JICAgIChWT0lEKiopJmxvYWRlZF9pbWFnZSkpICE9 IEVGSV9TVUNDRVNTKSB7Ci0JCXByaW50ZigiRmFpbGVkIHRvIHF1ZXJ5IExvYWRlZEltYWdlIHBy b3ZpZGVkIGJ5ICVzICglbHUpXG4iLAotCQkgICAgbW9kLT5uYW1lLCBFRklfRVJST1JfQ09ERShz dGF0dXMpKTsKKwlpZiAoKHN0YXR1cyA9IEJTLT5PcGVuUHJvdG9jb2wobG9hZGVyaGFuZGxlLCAm TG9hZGVkSW1hZ2VHVUlELAorICAgICAgICAgICAgKFZPSUQqKikmbG9hZGVkX2ltYWdlLCBJSCwg TlVMTCwKKyAgICAgICAgICAgIEVGSV9PUEVOX1BST1RPQ09MX0dFVF9QUk9UT0NPTCkpICE9IEVG SV9TVUNDRVNTKSB7CisJCXByaW50ZigiRmFpbGVkIHRvIHF1ZXJ5IExvYWRlZEltYWdlICglbHUp XG4iLAorCQkgICAgRUZJX0VSUk9SX0NPREUoc3RhdHVzKSk7CiAJCWdvdG8gZXJyb3V0OwogCX0K IAogCWlmIChjbWQgIT0gTlVMTCkKIAkJcHJpbnRmKCIgICAgY29tbWFuZCBhcmdzOiAlc1xuIiwg Y21kKTsKIAotCWxvYWRlZF9pbWFnZS0+RGV2aWNlSGFuZGxlID0gZGV2LT5kZXZoYW5kbGU7CisJ bG9hZGVkX2ltYWdlLT5EZXZpY2VIYW5kbGUgPSBmc2hhbmRsZTsKIAlsb2FkZWRfaW1hZ2UtPkxv YWRPcHRpb25zU2l6ZSA9IGNtZHNpemU7CiAJbG9hZGVkX2ltYWdlLT5Mb2FkT3B0aW9ucyA9IGNt ZDsKIApAQCAtNDM0LDEwICs2NTgsMTAgQEAgdHJ5X2Jvb3Qodm9pZCkKIAlEU1RBTEwoMTAwMDAw MCk7CiAJRFBSSU5URigiLlxuIik7CiAKLQlpZiAoKHN0YXR1cyA9IGJzLT5TdGFydEltYWdlKGxv YWRlcmhhbmRsZSwgTlVMTCwgTlVMTCkpICE9CisJaWYgKChzdGF0dXMgPSBCUy0+U3RhcnRJbWFn ZShsb2FkZXJoYW5kbGUsIE5VTEwsIE5VTEwpKSAhPQogCSAgICBFRklfU1VDQ0VTUykgewotCQlw cmludGYoIkZhaWxlZCB0byBzdGFydCBpbWFnZSBwcm92aWRlZCBieSAlcyAoJWx1KVxuIiwKLQkJ ICAgIG1vZC0+bmFtZSwgRUZJX0VSUk9SX0NPREUoc3RhdHVzKSk7CisJCXByaW50ZigiRmFpbGVk IHRvIHN0YXJ0IGltYWdlICglbHUpXG4iLAorCQkgICAgRUZJX0VSUk9SX0NPREUoc3RhdHVzKSk7 CiAJCWxvYWRlZF9pbWFnZS0+TG9hZE9wdGlvbnNTaXplID0gMDsKIAkJbG9hZGVkX2ltYWdlLT5M b2FkT3B0aW9ucyA9IE5VTEw7CiAJfQpAQCAtNDUzLDEzNCArNjc3LDE5IEBAIGVycm91dDoKIAly ZXR1cm4gKHN0YXR1cyk7CiB9CiAKLS8qCi0gKiBwcm9iZV9oYW5kbGUgZGV0ZXJtaW5lcyBpZiB0 aGUgcGFzc2VkIGhhbmRsZSByZXByZXNlbnRzIGEgbG9naWNhbCBwYXJ0aXRpb24KLSAqIGlmIGl0 IGRvZXMgaXQgdXNlcyBlYWNoIG1vZHVsZSBpbiBvcmRlciB0byBwcm9iZSBpdCBhbmQgaWYgc3Vj Y2Vzc2Z1bCBpdAotICogcmV0dXJucyBFRklfU1VDQ0VTUy4KLSAqLwotc3RhdGljIEVGSV9TVEFU VVMKLXByb2JlX2hhbmRsZShFRklfSEFORExFIGgsIEVGSV9ERVZJQ0VfUEFUSCAqaW1ncGF0aCwg Qk9PTEVBTiAqcHJlZmVycmVkKQotewotCWRldl9pbmZvX3QgKmRldmluZm87Ci0JRUZJX0JMT0NL X0lPICpibGtpbzsKLQlFRklfREVWSUNFX1BBVEggKmRldnBhdGg7Ci0JRUZJX1NUQVRVUyBzdGF0 dXM7Ci0JVUlOVE4gaTsKLQotCS8qIEZpZ3VyZSBvdXQgaWYgd2UncmUgZGVhbGluZyB3aXRoIGFu IGFjdHVhbCBwYXJ0aXRpb24uICovCi0Jc3RhdHVzID0gYnMtPkhhbmRsZVByb3RvY29sKGgsICZE ZXZpY2VQYXRoR1VJRCwgKHZvaWQgKiopJmRldnBhdGgpOwotCWlmIChzdGF0dXMgPT0gRUZJX1VO U1VQUE9SVEVEKQotCQlyZXR1cm4gKHN0YXR1cyk7Ci0KLQlpZiAoc3RhdHVzICE9IEVGSV9TVUND RVNTKSB7Ci0JCURQUklOVEYoIlxuRmFpbGVkIHRvIHF1ZXJ5IERldmljZVBhdGggKCVsdSlcbiIs Ci0JCSAgICBFRklfRVJST1JfQ09ERShzdGF0dXMpKTsKLQkJcmV0dXJuIChzdGF0dXMpOwotCX0K LQotCURQUklOVEYoInByb2Jpbmc6ICVzXG4iLCBkZXZwYXRoX3N0cihkZXZwYXRoKSk7Ci0KLQlz dGF0dXMgPSBicy0+SGFuZGxlUHJvdG9jb2woaCwgJkJsb2NrSW9Qcm90b2NvbEdVSUQsICh2b2lk ICoqKSZibGtpbyk7Ci0JaWYgKHN0YXR1cyA9PSBFRklfVU5TVVBQT1JURUQpCi0JCXJldHVybiAo c3RhdHVzKTsKLQotCWlmIChzdGF0dXMgIT0gRUZJX1NVQ0NFU1MpIHsKLQkJRFBSSU5URigiXG5G YWlsZWQgdG8gcXVlcnkgQmxvY2tJb1Byb3RvY29sICglbHUpXG4iLAotCQkgICAgRUZJX0VSUk9S X0NPREUoc3RhdHVzKSk7Ci0JCXJldHVybiAoc3RhdHVzKTsKLQl9Ci0KLQlpZiAoIWJsa2lvLT5N ZWRpYS0+TG9naWNhbFBhcnRpdGlvbikKLQkJcmV0dXJuIChFRklfVU5TVVBQT1JURUQpOwotCi0J KnByZWZlcnJlZCA9IGRldmljZV9wYXRoc19tYXRjaChpbWdwYXRoLCBkZXZwYXRoKTsKLQotCS8q IFJ1biB0aHJvdWdoIGVhY2ggbW9kdWxlLCBzZWUgaWYgaXQgY2FuIGxvYWQgdGhpcyBwYXJ0aXRp b24gKi8KLQlmb3IgKGkgPSAwOyBpIDwgTlVNX0JPT1RfTU9EVUxFUzsgaSsrKSB7Ci0JCWlmICgo c3RhdHVzID0gYnMtPkFsbG9jYXRlUG9vbChFZmlMb2FkZXJEYXRhLAotCQkgICAgc2l6ZW9mKCpk ZXZpbmZvKSwgKHZvaWQgKiopJmRldmluZm8pKSAhPQotCQkgICAgRUZJX1NVQ0NFU1MpIHsKLQkJ CURQUklOVEYoIlxuRmFpbGVkIHRvIGFsbG9jYXRlIGRldmluZm8gKCVsdSlcbiIsCi0JCQkgICAg RUZJX0VSUk9SX0NPREUoc3RhdHVzKSk7Ci0JCQljb250aW51ZTsKLQkJfQotCQlkZXZpbmZvLT5k ZXYgPSBibGtpbzsKLQkJZGV2aW5mby0+ZGV2cGF0aCA9IGRldnBhdGg7Ci0JCWRldmluZm8tPmRl dmhhbmRsZSA9IGg7Ci0JCWRldmluZm8tPmRldmRhdGEgPSBOVUxMOwotCQlkZXZpbmZvLT5wcmVm ZXJyZWQgPSAqcHJlZmVycmVkOwotCQlkZXZpbmZvLT5uZXh0ID0gTlVMTDsKLQotCQlzdGF0dXMg PSBib290X21vZHVsZXNbaV0tPnByb2JlKGRldmluZm8pOwotCQlpZiAoc3RhdHVzID09IEVGSV9T VUNDRVNTKQotCQkJcmV0dXJuIChFRklfU1VDQ0VTUyk7Ci0JCSh2b2lkKWJzLT5GcmVlUG9vbChk ZXZpbmZvKTsKLQl9Ci0KLQlyZXR1cm4gKEVGSV9VTlNVUFBPUlRFRCk7Ci19Ci0KLS8qCi0gKiBw cm9iZV9oYW5kbGVfc3RhdHVzIGNhbGxzIHByb2JlX2hhbmRsZSBhbmQgb3V0cHV0cyB0aGUgcmV0 dXJuZWQgc3RhdHVzCi0gKiBvZiB0aGUgY2FsbC4KLSAqLwotc3RhdGljIHZvaWQKLXByb2JlX2hh bmRsZV9zdGF0dXMoRUZJX0hBTkRMRSBoLCBFRklfREVWSUNFX1BBVEggKmltZ3BhdGgpCi17Ci0J RUZJX1NUQVRVUyBzdGF0dXM7Ci0JQk9PTEVBTiBwcmVmZXJyZWQ7Ci0KLQlzdGF0dXMgPSBwcm9i ZV9oYW5kbGUoaCwgaW1ncGF0aCwgJnByZWZlcnJlZCk7Ci0JCi0JRFBSSU5URigicHJvYmU6ICIp OwotCXN3aXRjaCAoc3RhdHVzKSB7Ci0JY2FzZSBFRklfVU5TVVBQT1JURUQ6Ci0JCXByaW50Zigi LiIpOwotCQlEUFJJTlRGKCIgbm90IHN1cHBvcnRlZFxuIik7Ci0JCWJyZWFrOwotCWNhc2UgRUZJ X1NVQ0NFU1M6Ci0JCWlmIChwcmVmZXJyZWQpIHsKLQkJCXByaW50ZigiJWMiLCAnKicpOwotCQkJ RFBSSU5URigiIHN1cHBvcnRlZCAocHJlZmVycmVkKVxuIik7Ci0JCX0gZWxzZSB7Ci0JCQlwcmlu dGYoIiVjIiwgJysnKTsKLQkJCURQUklOVEYoIiBzdXBwb3J0ZWRcbiIpOwotCQl9Ci0JCWJyZWFr OwotCWRlZmF1bHQ6Ci0JCXByaW50ZigieCIpOwotCQlEUFJJTlRGKCIgZXJyb3IgKCVsdSlcbiIs IEVGSV9FUlJPUl9DT0RFKHN0YXR1cykpOwotCQlicmVhazsKLQl9Ci0JRFNUQUxMKDUwMDAwMCk7 Ci19Ci0KIEVGSV9TVEFUVVMKLWVmaV9tYWluKEVGSV9IQU5ETEUgWGltYWdlLCBFRklfU1lTVEVN X1RBQkxFICpYc3lzdGFiKQorbWFpbihpbnQgYXJnYyBfX3VudXNlZCwgQ0hBUjE2ICphcmd2W10g X191bnVzZWQpCiB7Ci0JRUZJX0hBTkRMRSAqaGFuZGxlczsKLQlFRklfTE9BREVEX0lNQUdFICpp bWc7Ci0JRUZJX0RFVklDRV9QQVRIICppbWdwYXRoOwogCUVGSV9TVEFUVVMgc3RhdHVzOwotCUVG SV9DT05TT0xFX0NPTlRST0xfUFJPVE9DT0wgKkNvbnNvbGVDb250cm9sID0gTlVMTDsKIAlTSU1Q TEVfVEVYVF9PVVRQVVRfSU5URVJGQUNFICpjb25vdXQgPSBOVUxMOwotCVVJTlROIGksIG1heF9k aW0sIGJlc3RfbW9kZSwgY29scywgcm93cywgaHNpemUsIG5oYW5kbGVzOwotCi0JLyogQmFzaWMg aW5pdGlhbGl6YXRpb24qLwotCXN5c3RhYiA9IFhzeXN0YWI7Ci0JaW1hZ2UgPSBYaW1hZ2U7Ci0J YnMgPSBYc3lzdGFiLT5Cb290U2VydmljZXM7Ci0KLQkvKiBTZXQgdXAgdGhlIGNvbnNvbGUsIHNv IHByaW50ZiB3b3Jrcy4gKi8KLQlzdGF0dXMgPSBicy0+TG9jYXRlUHJvdG9jb2woJkNvbnNvbGVD b250cm9sR1VJRCwgTlVMTCwKLQkgICAgKFZPSUQgKiopJkNvbnNvbGVDb250cm9sKTsKLQlpZiAo c3RhdHVzID09IEVGSV9TVUNDRVNTKQotCQkodm9pZClDb25zb2xlQ29udHJvbC0+U2V0TW9kZShD b25zb2xlQ29udHJvbCwKLQkJICAgIEVmaUNvbnNvbGVDb250cm9sU2NyZWVuVGV4dCk7CisJVUlO VE4gaSwgbWF4X2RpbSwgYmVzdF9tb2RlLCBjb2xzLCByb3dzOworCisJY29uc19wcm9iZSgpOwor CiAJLyoKIAkgKiBSZXNldCB0aGUgY29uc29sZSBhbmQgZmluZCB0aGUgYmVzdCB0ZXh0IG1vZGUu CiAJICovCi0JY29ub3V0ID0gc3lzdGFiLT5Db25PdXQ7CisJY29ub3V0ID0gU1QtPkNvbk91dDsK IAljb25vdXQtPlJlc2V0KGNvbm91dCwgVFJVRSk7CiAJbWF4X2RpbSA9IGJlc3RfbW9kZSA9IDA7 CiAJZm9yIChpID0gMDsgOyBpKyspIHsKQEAgLTU5NywxMjMgKzcwNiwzMSBAQCBlZmlfbWFpbihF RklfSEFORExFIFhpbWFnZSwgRUZJX1NZU1RFTV9UQUJMRSAqWHN5c3RhYikKIAljb25vdXQtPkVu YWJsZUN1cnNvcihjb25vdXQsIFRSVUUpOwogCWNvbm91dC0+Q2xlYXJTY3JlZW4oY29ub3V0KTsK IAotCXByaW50ZigiXG4+PiBGcmVlQlNEIEVGSSBib290IGJsb2NrXG4iKTsKLQlwcmludGYoIiAg IExvYWRlciBwYXRoOiAlc1xuXG4iLCBQQVRIX0xPQURFUl9FRkkpOwotCXByaW50ZigiICAgSW5p dGlhbGl6aW5nIG1vZHVsZXM6Iik7Ci0JZm9yIChpID0gMDsgaSA8IE5VTV9CT09UX01PRFVMRVM7 IGkrKykgewotCQlwcmludGYoIiAlcyIsIGJvb3RfbW9kdWxlc1tpXS0+bmFtZSk7Ci0JCWlmIChi b290X21vZHVsZXNbaV0tPmluaXQgIT0gTlVMTCkKLQkJCWJvb3RfbW9kdWxlc1tpXS0+aW5pdCgp OwotCX0KLQlwdXRjaGFyKCdcbicpOwotCi0JLyogR2V0IGFsbCB0aGUgZGV2aWNlIGhhbmRsZXMg Ki8KLQloc2l6ZSA9IChVSU5UTilOVU1fSEFORExFU19JTklUICogc2l6ZW9mKEVGSV9IQU5ETEUp OwotCWlmICgoc3RhdHVzID0gYnMtPkFsbG9jYXRlUG9vbChFZmlMb2FkZXJEYXRhLCBoc2l6ZSwg KHZvaWQgKiopJmhhbmRsZXMpKQotCSAgICAhPSBFRklfU1VDQ0VTUykKLQkJcGFuaWMoIkZhaWxl ZCB0byBhbGxvY2F0ZSAlZCBoYW5kbGVzICglbHUpIiwgTlVNX0hBTkRMRVNfSU5JVCwKLQkJICAg IEVGSV9FUlJPUl9DT0RFKHN0YXR1cykpOwotCi0Jc3RhdHVzID0gYnMtPkxvY2F0ZUhhbmRsZShC eVByb3RvY29sLCAmQmxvY2tJb1Byb3RvY29sR1VJRCwgTlVMTCwKLQkgICAgJmhzaXplLCBoYW5k bGVzKTsKLQlzd2l0Y2ggKHN0YXR1cykgewotCWNhc2UgRUZJX1NVQ0NFU1M6Ci0JCWJyZWFrOwot CWNhc2UgRUZJX0JVRkZFUl9UT09fU01BTEw6Ci0JCSh2b2lkKWJzLT5GcmVlUG9vbChoYW5kbGVz KTsKLQkJaWYgKChzdGF0dXMgPSBicy0+QWxsb2NhdGVQb29sKEVmaUxvYWRlckRhdGEsIGhzaXpl LAotCQkgICAgKHZvaWQgKiopJmhhbmRsZXMpKSAhPSBFRklfU1VDQ0VTUykgewotCQkJcGFuaWMo IkZhaWxlZCB0byBhbGxvY2F0ZSAlenUgaGFuZGxlcyAoJWx1KSIsIGhzaXplIC8KLQkJCSAgICBz aXplb2YoKmhhbmRsZXMpLCBFRklfRVJST1JfQ09ERShzdGF0dXMpKTsKLQkJfQotCQlzdGF0dXMg PSBicy0+TG9jYXRlSGFuZGxlKEJ5UHJvdG9jb2wsICZCbG9ja0lvUHJvdG9jb2xHVUlELAotCQkg ICAgTlVMTCwgJmhzaXplLCBoYW5kbGVzKTsKLQkJaWYgKHN0YXR1cyAhPSBFRklfU1VDQ0VTUykK LQkJCXBhbmljKCJGYWlsZWQgdG8gZ2V0IGRldmljZSBoYW5kbGVzICglbHUpXG4iLAotCQkJICAg IEVGSV9FUlJPUl9DT0RFKHN0YXR1cykpOwotCQlicmVhazsKLQlkZWZhdWx0OgotCQlwYW5pYygi RmFpbGVkIHRvIGdldCBkZXZpY2UgaGFuZGxlcyAoJWx1KSIsCi0JCSAgICBFRklfRVJST1JfQ09E RShzdGF0dXMpKTsKLQl9CisJLyoKKwkgKiBJbml0aWFsaXNlIHRoZSBibG9jayBjYWNoZS4gU2V0 IHRoZSB1cHBlciBsaW1pdC4KKwkgKi8KKwliY2FjaGVfaW5pdCgzMjc2OCwgNTEyKTsKIAotCS8q IFNjYW4gYWxsIHBhcnRpdGlvbnMsIHByb2Jpbmcgd2l0aCBhbGwgbW9kdWxlcy4gKi8KLQluaGFu ZGxlcyA9IGhzaXplIC8gc2l6ZW9mKCpoYW5kbGVzKTsKLQlwcmludGYoIiAgIFByb2JpbmcgJXp1 IGJsb2NrIGRldmljZXMuLi4iLCBuaGFuZGxlcyk7Ci0JRFBSSU5URigiXG4iKTsKKwlwcmludGYo IlxuPj4gRnJlZUJTRCBFRkkgYm9vdCBibG9ja1xuIik7CiAKLQkvKiBEZXRlcm1pbmUgdGhlIGRl dnBhdGggb2Ygb3VyIGltYWdlIHNvIHdlIGNhbiBwcmVmZXIgaXQuICovCi0Jc3RhdHVzID0gYnMt PkhhbmRsZVByb3RvY29sKGltYWdlLCAmTG9hZGVkSW1hZ2VHVUlELCAoVk9JRCoqKSZpbWcpOwot CWltZ3BhdGggPSBOVUxMOwotCWlmIChzdGF0dXMgPT0gRUZJX1NVQ0NFU1MpIHsKLQkJc3RhdHVz ID0gYnMtPkhhbmRsZVByb3RvY29sKGltZy0+RGV2aWNlSGFuZGxlLCAmRGV2aWNlUGF0aEdVSUQs Ci0JCSAgICAodm9pZCAqKikmaW1ncGF0aCk7Ci0JCWlmIChzdGF0dXMgIT0gRUZJX1NVQ0NFU1Mp Ci0JCQlEUFJJTlRGKCJGYWlsZWQgdG8gZ2V0IGltYWdlIERldmljZVBhdGggKCVsdSlcbiIsCi0J CQkgICAgRUZJX0VSUk9SX0NPREUoc3RhdHVzKSk7Ci0JCURQUklOVEYoImJvb3QxIGltYWdlcGF0 aDogJXNcbiIsIGRldnBhdGhfc3RyKGltZ3BhdGgpKTsKLQl9CisJYXJjaHN3LmFyY2hfYXV0b2xv YWQgPSBlZmlfYXV0b2xvYWQ7CisJYXJjaHN3LmFyY2hfZ2V0ZGV2ID0gZWZpX2dldGRldjsKKwlh cmNoc3cuYXJjaF9jb3B5aW4gPSBlZmlfY29weWluOworCWFyY2hzdy5hcmNoX2NvcHlvdXQgPSBl ZmlfY29weW91dDsKKwlhcmNoc3cuYXJjaF9yZWFkaW4gPSBlZmlfcmVhZGluOwogCi0JZm9yIChp ID0gMDsgaSA8IG5oYW5kbGVzOyBpKyspCi0JCXByb2JlX2hhbmRsZV9zdGF0dXMoaGFuZGxlc1tp XSwgaW1ncGF0aCk7Ci0JcHJpbnRmKCIgZG9uZVxuIik7CisJcHJpbnRmKCIgICBMb2FkZXIgcGF0 aDogJXNcblxuIiwgUEFUSF9MT0FERVJfRUZJKTsKKwlwcmludGYoIiAgIEluaXRpYWxpemluZyBt b2R1bGVzOiIpOwogCi0JLyogU3RhdHVzIHN1bW1hcnkuICovCi0JZm9yIChpID0gMDsgaSA8IE5V TV9CT09UX01PRFVMRVM7IGkrKykgewotCQlwcmludGYoIiAgICAiKTsKLQkJYm9vdF9tb2R1bGVz W2ldLT5zdGF0dXMoKTsKKwlmb3IgKGkgPSAwOyBlZmlfZHJpdmVyc1tpXSAhPSBOVUxMOyBpKysp IHsKKwkJcHJpbnRmKCIgJXMiLCBlZmlfZHJpdmVyc1tpXS0+bmFtZSk7CisJCWlmIChlZmlfZHJp dmVyc1tpXS0+aW5pdCAhPSBOVUxMKQorCQkJZWZpX2RyaXZlcnNbaV0tPmluaXQoKTsKIAl9CisJ cHV0Y2hhcignXG4nKTsKIAogCXRyeV9ib290KCk7CiAKIAkvKiBJZiB3ZSBnZXQgaGVyZSwgd2Un cmUgb3V0IG9mIGx1Y2suLi4gKi8KIAlwYW5pYygiTm8gYm9vdGFibGUgcGFydGl0aW9ucyBmb3Vu ZCEiKTsKIH0KLQotLyoKLSAqIGFkZF9kZXZpY2UgYWRkcyBhIGRldmljZSB0byB0aGUgcGFzc2Vk IGRldmluZm8gbGlzdC4KLSAqLwotdm9pZAotYWRkX2RldmljZShkZXZfaW5mb190ICoqZGV2aW5m b3AsIGRldl9pbmZvX3QgKmRldmluZm8pCi17Ci0JZGV2X2luZm9fdCAqZGV2OwotCi0JaWYgKCpk ZXZpbmZvcCA9PSBOVUxMKSB7Ci0JCSpkZXZpbmZvcCA9IGRldmluZm87Ci0JCXJldHVybjsKLQl9 Ci0KLQlmb3IgKGRldiA9ICpkZXZpbmZvcDsgZGV2LT5uZXh0ICE9IE5VTEw7IGRldiA9IGRldi0+ bmV4dCkKLQkJOwotCi0JZGV2LT5uZXh0ID0gZGV2aW5mbzsKLX0KLQotdm9pZAotcGFuaWMoY29u c3QgY2hhciAqZm10LCAuLi4pCi17Ci0JdmFfbGlzdCBhcDsKLQotCXByaW50ZigicGFuaWM6ICIp OwotCXZhX3N0YXJ0KGFwLCBmbXQpOwotCXZwcmludGYoZm10LCBhcCk7Ci0JdmFfZW5kKGFwKTsK LQlwcmludGYoIlxuIik7Ci0KLQl3aGlsZSAoMSkge30KLX0KLQotdm9pZAotcHV0Y2hhcihpbnQg YykKLXsKLQlDSEFSMTYgYnVmWzJdOwotCi0JaWYgKGMgPT0gJ1xuJykgewotCQlidWZbMF0gPSAn XHInOwotCQlidWZbMV0gPSAwOwotCQlzeXN0YWItPkNvbk91dC0+T3V0cHV0U3RyaW5nKHN5c3Rh Yi0+Q29uT3V0LCBidWYpOwotCX0KLQlidWZbMF0gPSBjOwotCWJ1ZlsxXSA9IDA7Ci0Jc3lzdGFi LT5Db25PdXQtPk91dHB1dFN0cmluZyhzeXN0YWItPkNvbk91dCwgYnVmKTsKLX0KZGlmZiAtLWdp dCBzeXMvYm9vdC9lZmkvYm9vdDEvYm9vdF9tb2R1bGUuaCBzeXMvYm9vdC9lZmkvYm9vdDEvYm9v dF9tb2R1bGUuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjk2ZDVhNjdhMTAuLjAw MDAwMDAwMDAwCi0tLSBzeXMvYm9vdC9lZmkvYm9vdDEvYm9vdF9tb2R1bGUuaAorKysgL2Rldi9u dWxsCkBAIC0xLDExNyArMCwwIEBACi0vKi0KLSAqIENvcHlyaWdodCAoYykgMjAxNSBFcmljIE1j Q29ya2xlCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFu ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9k aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k aXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0 IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlz dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp Z2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93 aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09G VFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIEFVVEhPUiBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMn JyBBTkQKLSAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC VVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKLSAqIEFSRSBESVND TEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBPUiBDT05UUklCVVRPUlMgQkUg TElBQkxFCi0gKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAotICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg Tk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKLSAqIE9SIFNF UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS VVBUSU9OKQotICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZ LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKLSAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5D TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKLSAqIE9V VCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T U0lCSUxJVFkgT0YKLSAqIFNVQ0ggREFNQUdFLgotICoKLSAqICRGcmVlQlNEJAotICovCi0KLSNp Zm5kZWYgX0JPT1RfTU9EVUxFX0hfCi0jZGVmaW5lIF9CT09UX01PRFVMRV9IXwotCi0jaW5jbHVk ZSA8c3RkYm9vbC5oPgotCi0jaW5jbHVkZSA8ZWZpLmg+Ci0jaW5jbHVkZSA8ZWZpbGliLmg+Ci0j aW5jbHVkZSA8ZWZpY29uc2N0bC5oPgotCi0jaWZkZWYgRUZJX0RFQlVHCi0jZGVmaW5lIERQUklO VEYoZm10LCBhcmdzLi4uKSBwcmludGYoZm10LCAjI2FyZ3MpCi0jZGVmaW5lIERTVEFMTChkKSBi cy0+U3RhbGwoZCkKLSNlbHNlCi0jZGVmaW5lIERQUklOVEYoZm10LCAuLi4pIHt9Ci0jZGVmaW5l IERTVEFMTChkKSB7fQotI2VuZGlmCi0KLS8qIEVGSSBkZXZpY2UgaW5mbyAqLwotdHlwZWRlZiBz dHJ1Y3QgZGV2X2luZm8KLXsKLQlFRklfQkxPQ0tfSU8gKmRldjsKLQlFRklfREVWSUNFX1BBVEgg KmRldnBhdGg7Ci0JRUZJX0hBTkRMRSAqZGV2aGFuZGxlOwotCXZvaWQgKmRldmRhdGE7Ci0JQk9P TEVBTiBwcmVmZXJyZWQ7Ci0Jc3RydWN0IGRldl9pbmZvICpuZXh0OwotfSBkZXZfaW5mb190Owot Ci0vKgotICogQSBib290IGxvYWRlciBtb2R1bGUuCi0gKgotICogVGhpcyBpcyBhIHN0YW5kYXJk IGludGVyZmFjZSBmb3IgZmlsZXN5c3RlbSBtb2R1bGVzIGluIHRoZSBFRkkgc3lzdGVtLgotICov Ci10eXBlZGVmIHN0cnVjdCBib290X21vZHVsZV90Ci17Ci0JY29uc3QgY2hhciAqbmFtZTsKLQot CS8qIGluaXQgaXMgdGhlIG9wdGlvbmFsIGluaXRpYWxpc2VyIGZvciB0aGUgbW9kdWxlLiAqLwot CXZvaWQgKCppbml0KSgpOwotCi0JLyoKLQkgKiBwcm9iZSBjaGVja3MgdG8gc2VlIGlmIHRoZSBt b2R1bGUgY2FuIGhhbmRsZSBkZXYuCi0JICoKLQkgKiBSZXR1cm4gY29kZXM6Ci0JICogRUZJX1NV Q0NFU1MgPSBUaGUgbW9kdWxlIGNhbiBoYW5kbGUgdGhlIGRldmljZS4KLQkgKiBFRklfTk9UX0ZP VU5EID0gVGhlIG1vZHVsZSBjYW4gbm90IGhhbmRsZSB0aGUgZGV2aWNlLgotCSAqIE90aGVyID0g VGhlIG1vZHVsZSBlbmNvdW50ZXJlZCBhbiBlcnJvci4KLQkgKi8KLQlFRklfU1RBVFVTICgqcHJv YmUpKGRldl9pbmZvX3QqIGRldik7Ci0KLQkvKgotCSAqIGxvYWQgc2hvdWxkIHNlbGVjdCB0aGUg YmVzdCBvdXQgb2YgYSBzZXQgb2YgZGV2aWNlcyB0aGF0IHByb2JlCi0JICogaW5kaWNhdGVkIHdl cmUgbG9hZGFibGUgYW5kIGxvYWQgdGhlIHNwZWNpZmllZCBmaWxlLgotCSAqCi0JICogUmV0dXJu IGNvZGVzOgotCSAqIEVGSV9TVUNDRVNTID0gVGhlIG1vZHVsZSBjYW4gaGFuZGxlIHRoZSBkZXZp Y2UuCi0JICogRUZJX05PVF9GT1VORCA9IFRoZSBtb2R1bGUgY2FuIG5vdCBoYW5kbGUgdGhlIGRl dmljZS4KLQkgKiBPdGhlciA9IFRoZSBtb2R1bGUgZW5jb3VudGVyZWQgYW4gZXJyb3IuCi0JICov Ci0JRUZJX1NUQVRVUyAoKmxvYWQpKGNvbnN0IGNoYXIgKmZpbGVwYXRoLCBkZXZfaW5mb190ICpk ZXZpbmZvLAotCSAgICB2b2lkICoqYnVmLCBzaXplX3QgKmJ1ZnNpemUpOwotCi0JLyogc3RhdHVz IG91dHB1dHMgaW5mb3JtYXRpb24gYWJvdXQgdGhlIHByb2JlZCBkZXZpY2VzLiAqLwotCXZvaWQg KCpzdGF0dXMpKCk7Ci0KLQkvKiB2YWxpZCBkZXZpY2VzIGFzIGZvdW5kIGJ5IHByb2JlLiAqLwot CWRldl9pbmZvX3QgKigqZGV2aWNlcykoKTsKLX0gYm9vdF9tb2R1bGVfdDsKLQotLyogU3RhbmRh cmQgYm9vdCBtb2R1bGVzLiAqLwotI2lmZGVmIEVGSV9VRlNfQk9PVAotZXh0ZXJuIGNvbnN0IGJv b3RfbW9kdWxlX3QgdWZzX21vZHVsZTsKLSNlbmRpZgotI2lmZGVmIEVGSV9aRlNfQk9PVAotZXh0 ZXJuIGNvbnN0IGJvb3RfbW9kdWxlX3QgemZzX21vZHVsZTsKLSNlbmRpZgotCi0vKiBGdW5jdGlv bnMgYXZhaWxhYmxlIHRvIG1vZHVsZXMuICovCi1leHRlcm4gdm9pZCBhZGRfZGV2aWNlKGRldl9p bmZvX3QgKipkZXZpbmZvcCwgZGV2X2luZm9fdCAqZGV2aW5mbyk7Ci1leHRlcm4gdm9pZCBwYW5p Yyhjb25zdCBjaGFyICpmbXQsIC4uLikgX19kZWFkMjsKLWV4dGVybiBpbnQgcHJpbnRmKGNvbnN0 IGNoYXIgKmZtdCwgLi4uKTsKLWV4dGVybiBpbnQgdnNucHJpbnRmKGNoYXIgKnN0ciwgc2l6ZV90 IHN6LCBjb25zdCBjaGFyICpmbXQsIHZhX2xpc3QgYXApOwotCi1leHRlcm4gRUZJX1NZU1RFTV9U QUJMRSAqc3lzdGFiOwotZXh0ZXJuIEVGSV9CT09UX1NFUlZJQ0VTICpiczsKLQotZXh0ZXJuIGlu dCBkZXZwYXRoX3N0cmxjYXQoY2hhciAqYnVmLCBzaXplX3Qgc2l6ZSwgRUZJX0RFVklDRV9QQVRI ICpkZXZwYXRoKTsKLWV4dGVybiBjaGFyICpkZXZwYXRoX3N0cihFRklfREVWSUNFX1BBVEggKmRl dnBhdGgpOwotI2VuZGlmCmRpZmYgLS1naXQgc3lzL2Jvb3QvZWZpL2Jvb3QxL2ZhdC1hbWQ2NC50 bXBsLmJ6Mi51dSBzeXMvYm9vdC9lZmkvYm9vdDEvZmF0LWFtZDY0LnRtcGwuYnoyLnV1CmluZGV4 IGEzZWMzMmQxNDUxLi5jNzMwOGE0Nzk4NSAxMDA2NDQKLS0tIHN5cy9ib290L2VmaS9ib290MS9m YXQtYW1kNjQudG1wbC5iejIudXUKKysrIHN5cy9ib290L2VmaS9ib290MS9mYXQtYW1kNjQudG1w bC5iejIudXUKQEAgLTIsMjUgKzIsNTAgQEAgRkFUIHRlbXBsYXRlIGJvb3QgZmlsZXN5c3RlbSBj cmVhdGVkIGJ5IGdlbmVyYXRlLWZhdC5zaAogRE8gTk9UIEVESVQKICRGcmVlQlNEJAogYmVnaW4g NjQ0IGZhdC1hbWQ2NC50bXBsLmJ6MgotTTBFSUguMyUhNjI5MzY/JCkzJCxgJlU5X19fX19aXktK Wl9eTl9eT15aX15bT05fTkteSkpeS1pOS05OSgotTVpOS05aT0peUGArXCMkITAkIzFELSxAIylE VCMxQiZBSURRLEFEOiMxSFRSYC0jKUQ4MFEhRDosKURgYAotTSMxQEYzMGBgYCZAYCRKSjkhX0hV NDoiLDMhLEYwJkMoODNgRjMwVGBUIUImISxGYChQM2AiIzAsQGAvMgotTTo6YCMwIURgLEMxYFQ5 IzMoYFI5LWBUOEFIOjksMyg5JkBUOi0sQCMwUjkmJCwwOSZDIjlgYGBUOClEVAotTWBgYCFIYGBK QkRAXzJCOkZGOSlJSFEvMSM6QC1gOmBSIyhUYCZAOi1gIUg4RkFIOjo6J0o6Oi1gOSYxWgotTUZG ISdIQUI4VS8xLyo4LS0tM0VWKyo8WkxcUzlCWEVDWzZJIixCRSQwQkRBJDEkJUc2NlRINlBGJDAo MAotTVhEQSEiJjxISiw9LVc9Sz5QWjU6TF5cMTk+PlQySzNPQT5UVVM4TT5WSl87OVA3Ijg7Jjcm OFI1MU4+RgotTTFFJUEjNitGOSpIQCQoOUo8SzJWNz1ESFtZU0spTERONjE4XTBTJDMiTTZKSzVK VTpNOUoqNSk0NDQ0NAotTTQ1SlUlOjU6OlU6TTZLPDpUNDJISEhISEhZSTpKKTQ0NDQ0LCtCO1I1 PiUlJSUlJSUkPiEhISEhISEhIQotTSEhISEhISEjNzZDQDxDMUhUOi0mQzEhISEhISEhISFUWCYj IUBQOCwmI0o4WSpCQkJCQkJCQidAPCMhQAotTVA4LCYjIiQ0KioqKioqKi4/Wk8pVTU5Tlc5WV81 UkI5PVNHSyVBTzkxRC8sUlc6SlVFV0o3Q0lDVCRNLAotTV1dPk9NOy1OJV5XWyE8PUhbPC0xPFFZ KVc8YCVCUlQ8RGArMzM3NVtcRk9TXFlCRDBgUlNMOCxVVjUxPgotTVJSIlNWTEw+TEcqWjFHK0sl TjspOz5JSVlMLTdMKkQ8QjVVKzIvMjo1SjZLN0srT043UzwtWldbYDg7JAotTTlFU1M2WT5bUS1T SDs1RDtSVV8rWksuK1RFTVglSyhRUTgxM1Y6R1MxWlQ7IlJcIUgkSy9aOj0lMzg2TQotTVBKTC48 Sz9DKko2QERJKVwjNktVPSxAVjM6LUpXMz4uYFg7Qk4wU1MyLEk7VSpJOzsuXU81Wk1JOUNNVgot TVkoOzgqXENYWC1TUFcoXlo1V0lXUFcwVkA/N0RMR1pAUUpRSEM2IUotXFVbPkBUJDJGKTMiN1VN MlYrOgotTStZTUZXO01PNl48LUBMKVI3KzxXTFZKRU8sJkhOSSs+WFUwSkIoTCxLSTpGW09EJVpV Qz0tMFdCXDdDPwotTS4iUCclODNDTDFCTSRSTEhEKTomNyxET1NMWTE9MlksSF9FT0dgPCVZUzAs IVEmJFhTXScpOENYRVhQXwotTUZYMi03KiwjJVA7IVFdVilFI0JPIjgzIz9cVjNDLi5ZI0UsMT9M NVMmLE5DJURRST47K2BEUz5OUUw1PwotPys2SUY5MTVWJDAiJClAYE0rIlEpQChfOSshP14rTjIq PCokQVhBKjhBQGBgCitNMEVJSC4zJSE2MjkzNjMkIiUmXGAnWUFfX19fX19fX19fX19fX15PXlpf XltfTlteSl5OS15LWk9LT05KCitNWk5LXlpOW15YYENfJS1gYEhIYCU0MSIxKCopYEJKIUg6YGBg P001YGBgIzBgYGBgYGBgYC1gOi0jMGBgCitNYGBgYGBgYGBgYGBgYDU1NSRfMkAhT19VMkovX1RK QV9KSj40IUhgYGBgVGBgYGBgYCZAYGBgYGA6YGBgCitNIUhgYD5IYCZAIUhSYDAsRjMoIURSYGBU UDBUYDpgYCMwUSMzMCMoYGAtYC1gUiZAJkAhRCFIJkZDJCZDCitNMGBgJkBgIzBAOSxGMCMpRGAh SUBBSGBUYGAmQUImRkAmMGBgOmA6IUQtYC1gIygjMC0tJigtJkBgYC1gCitNYCZBYFI5LEAmMyhg IzMhIzAhSGBgLSMkLS1gLEBgYFRgVCMoOmA6YCYwJkA6OiwwOi1gYGA6YGAtYDU1CitNKF8yM10i MTMtM1RJWko/WypEOiRfXTUtM1RWQkZVLUo7MSYzKUEnSDBcRjIvNFEmR0ohWkZgM1UjVSdFCitN LzAzMUI4VSMkOSdKIVpBTShcKiNSIzAsNFM0XzUsVS8wVko+JFxCKjlPNy45SFEmS0BGIVJWODg4 ODVTCitNLCYjIyMjIyZQT0ZQUCFAPFctQFImOyNgUFBQJ0pKTFlFVC8wTEovUTRPN086Ki88Tk85 XlQ/Iz1KXjJfCitNUD9UTlo/MD1YXClYO1E3RU03Ry8uWVcxTC1LX0IsLCwsLCwsYCVAVzQkXEoh YC5AKCFgKkAwIiEjYCgiCitNYEAoImBAKCJgQCgiYEAoIlohXmBcUFhHSyZRUidGXCxTPFMtUzxF TjtFNlkuWU47RllOO0ZZTjtGWU47CitNRllOO0dgWScvPEInKFklJyhZJyhZJyhZJyhZJVVVVVVV VVVVVVVWLkxRVSw9Rkw5Q0xKUUY1TFUlQFJTCitNNFw7MEpTKkpKSkpKTkA6RTZJRjc5RVVVVVVV V1w3Sls/XFlMK0tLS0tLS0k6NTZFJiY9OTk5OTk5KjRJCitNMkUqNEsqSy5GWzMsUTQ5LEYzKURS MkUqNEkyRSspNURVVDBOTk5OTk5YLzI9Sz09PT09PT09KzRKVS5cCitNSEE9PT09PT1RSkxFRjIm PT09PT09PVMvMDlNPj9JTEdKR00nOS9DTlg9XFwxXTdTMkpKSkpKSko3SUU3CitNNyg5VUVFRUVF REkyRSo0STJMSkxBRzY2NjY2NjJFKjRJMkUqUkpSJj05OTk5OTk/SysrKysrKysrKTkqCitNTEQs WlJSUlJSUypKSkpKSkpKSjVVNVdAPTNCSFI5LEYzKURZNTU1NTU1NTU0TSpLMkFHNjY2NjY2MkUq CitNNEkyRSpSSlImPTk5OTk5OSpSSlImPTk5OTk5OU1dU1Q2RURSOFo3NUxbNFM4PUJTQzFEPVBa XUojUldBCitNKj5YU1MrT0k5KyxPUDohRyxgWyMoUkctJyE5Myo4YCQ0XUtGI2AhSF1bU19SP1lf RV0zRkdgUGA+PD9ACitNTko7VUZdTztWXU87Vl1PO1ZdTztWXU87Vl1PO1ZdU1NWM0I+Ozs2VUJW TUswVk1LOlZNSzpWTUs6Vk1LCitNOlZNSzpWTUs6Wl5aWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlsr TVNCO0ZVMSNCPE1QTjRUTERJMkUqNEkyCitNTkpOQUc2NjY2NjYzQSo0STJFKjVFNUdHWig3Nzc3 Nzc9OTU1NTU1NTU1Kyk1REFHNjY2NjY2MkUqNEkyCitNRSpSSlImPTk5OTk5OVxCSkpKSkpKSko1 VTVXMS41NyxaJSswVE0rMkVJOjRNKksyQUc2NjY2NjYyWyFWCitNQ1hbTVc+L0ovXzdDXkM1NTU1 NTU1MlpHXUU5VjNJXylZREw2SUo6RklKOkRJMkUqNEkyVEpNK0deU14jCitNRlQsNkVJOjZFSTo0 STJFKjRJMlRKTSteO15bJTFEUjksRjMpKjRJMkUqNExFNjImPTk5OTk5OSo0STJFCitNKjRLKkso OVVFRUVFRURJMkUqNEkyTEpMXlsxIlpaWlpaWjRJMkUqNEk3NTcwU0srKysrKy9SKktLK0g5CitN VVVVVVVVVUU1NUczTSw5VUlLPCZHLzc6Pl41RUdXSFQqLCYjISQxJDEkPCNAPCNAPShfPTxNVDtI TkA9CitNTVFOLVFOLVFOLVFOLVFOLVFOLVFOLVFMUFM2UF9XWz8iVjY2NjY2NjY2NjY2NjY2Njkj KDkjKDk7PT0yCitNXENUXTU1NTQ/VCY5MTExXSdgN1MjSCMwVC0jMEEiJCgwQSMrXVslQlE4TkdQ XVVBXFI/U1c6T1hXUTZNCitNMTExMTdZPypZRjdTK1smPicsVE0rMlRPXEoqKiosOioqKigwQSIk KDBPMUMsOUMsMyRRLDMsLCdHLzM+CitNUF1ZRE9KOV1eO142WihCKEIoQihCKEIoWT1XQ1A2Ozkl RUVFRUVFRUVFRUVFRUVFRkVRJDEkOjBCKEIoCitNQihMTExYRyUxMTFXRitVJ0pYWydFVTU1NT1V VzYrJUJRPF9VJkswVC0jME0xMTExXkteRUJROEw3KlonCitNSk5CTFUsLk0/TS5TPU5JUF1BR1k8 STJFVj5TTC5XXztVK1pMRjMpREEiJC5EXUdJSyo0STBBIicqSEhICitNSEEiJCgwQSNfLVcrTlc+ Tl4+YF5MXlJZS1E3Q09SRyNQTiVQTiVQTCYjIUBQOCwmIyFAUD4sXFVZMy8qCitNNEkyRSo0STJF KjRJMihCKEIoQihCKEIqNElMPV9YRislQlEwQSIkKDBBIiQoMEEiJ0Y+VVE4TDYrTz5YCitNPUxf RD1WQSIkKDBBI11CQkJCQiQoMEEiJCgwQSNGXiVcKDlcLCwtIzBULSIkKDBeJF4+WjVUS1pTUFY/ CitNP0RfMUgmQj9YQihCKEIoQihCKENDNj0/IlI1KjRJMkUqNEkyRSo7Lzk5QFA4LCYjIUBYNyJY NyJYNyJYCitNN2BYJyRYRyRYRCgwQSIkKDBBIic2VDQ0ND41MTExMSIkKD9dLl8/Mj8zMEEiJ0sq KioqLy0hMTExMSIkCitNKDtKKioqL080NDQ0MEEiJCgwQV09WDNKV1YnLT87PixbSV1ZU0dRJ0gn Ql1NSzpWTUs6Vk1LOlZNSzpWCitNTUs6Vk1LPiJcLV1FVFs4Vi1DOFYtQzhWLUM4Vi1DOFYqNEIo QihCKEIoQihCRSo0USwzJEFcJkJCQkIkCitNKDBBIiQvXl8oXzNULSMwVCgwQSNbRz9PJD5RPFUi JCgwQSIkKDBBMkJCQkIkKDBBIiQoMEEiJCgwXlReCitNVltVWFNbQ1tLUVcuPy8+MFxFWTtAPCNA MSQxJDEkMSQxRjZBPSpUMkUqNEkyRSo0STJFKjRCKEIoQihCCitNKEIoQkZRTDsnQFQ0NDQwQSIn RTQ0NDQ+QkhISEhcLkJCQkIkKDBaQ0tPKllTRy48WVIkKDBbRVQ+KyVCCitNUT07MTExMTNMO1lR WSsjUD9ANjY2NjZLQUA4ODgjLUFBQGA+NUg6JkFIOioqKiooPzo0NDQwPjZTL19HCisrV1E9UjEz QTBEIyQiJSZcYAogYAogZW5kCmRpZmYgLS1naXQgc3lzL2Jvb3QvZWZpL2Jvb3QxL2ZhdC1hcm0u dG1wbC5iejIudXUgc3lzL2Jvb3QvZWZpL2Jvb3QxL2ZhdC1hcm0udG1wbC5iejIudXUKaW5kZXgg MjNlMDYzZWUyM2QuLmVlMmVlOTk1NGY1IDEwMDY0NAotLS0gc3lzL2Jvb3QvZWZpL2Jvb3QxL2Zh dC1hcm0udG1wbC5iejIudXUKKysrIHN5cy9ib290L2VmaS9ib290MS9mYXQtYXJtLnRtcGwuYnoy LnV1CkBAIC0yLDI1ICsyLDUwIEBAIEZBVCB0ZW1wbGF0ZSBib290IGZpbGVzeXN0ZW0gY3JlYXRl ZCBieSBnZW5lcmF0ZS1mYXQuc2gKIERPIE5PVCBFRElUCiAkRnJlZUJTRCQKIGJlZ2luIDY0NCBm YXQtYXJtLnRtcGwuYnoyCi1NMEVJSC4zJSE2MjkzNj4jNjcpSGAmVTlfX19fX1peS0paX1pOX15P XkpfXltPSltOS15KSl5LWk5LTk5KCi1NWk5LTlpPSl5QYCtcYGBgImBgOmBUOjotYDo4QFBAJjFE LSFIOjgwOClCOiMwYFRgYCwkVCMhLEBQQzA5Ci1NIzMzIjksMGBUKGAhSCMxSUhUIUlCIyJgOSYw VCZBSUEhQEYpSC1gIzBgYFAzMCwkUiMiLSFELS0sKURRCi1NYCMwQGAmQC0mRkMwJkYoLCghRDkj MDomRiQmIjhGQFRgLWBgIyEtYFAzKCwoVCYwVFRQRjMkYC1gNTIyCi1NJF8oSDItRFQwVDo4QyhU IUghWkMzMFItJkAtYCxAJkMxSDpgOiMxTTMoVCxAOjo6LzEjMzMxRklJQClACi1NKVo6KVJLNU42 PDcsTzwlWylTNFpEKE9ERDEiKjIiKEIoK0U5OSkiUDJBJCIkLiMoKCgwWl5CSE8pOTcqCi1NS05U UzI7Ly8hNl8sOik1SVZJPkxQR1VNOF8pTVYmX1FPJyQ8UT5ZO2BKL1RFVFIuPTUwOlwyQmAwQUY5 Ci1NPF8uTUU7OjswTjw5JUQlXFFbJyomNkI0KlU6Sk02SzVKVVExMkkpMTExMTExNks0NUkqVEpV Ok02Szw6Ci1NWjQyNDQ0NDQ0OFktMSkxMTExMTFbRjxfNlIrJUJROEw2KyRYMzMzMzMzMzMzMzMz MzMzMz03WlxFMk02Ci1NSzVKVTpNLS0tLS0tLS0tPlI0NDQ0NDQ0N04jWyVCUThMNislQlEtTSkq KioqKioqLCEwSEhISEhISFlbCi1NLVJSNTc1NzsuTVM/SEUpR0xbOk0tUSkmL1RHMDlRNk1aJSlY SjQ+PERdNVtTNU0+Xl1NNlc4Q0AuLlQ9Ci1NViZIT1hcQFQkYCVKV0hZJGAtL1pWIUE/KUs+WUVF WjFgIyosJiMsXUc0ODRGLzcvUkRSJVk8P11GRzhYCi1NJi0/VlVXSipBUikrWjMyLy86OVsjNE02 Ujs4LUZWSzwsMU9HJDhLKkxFJkpSPjRRP1VbSjpeUyRdRVBLCi1NRDgxKV5EIjxBPiVIXj4yT1U6 RkxDMzFLSz8/LF8kRVM3NFMlKylVN0pVNUQ6VlFEKVItMlUzIjdbRldXCi1NLURQVlY7QU5WXjkt UiYiVDtHLEE+NkVKMzo9RVZFNkVOS0MjUFpHLl09OTo3NSpHPT4tNE5cT0FdJz0tCi1NYExbUk5c TU0vPlonODo2US5SQVdVKz1IT0hEQ1o2SD84XyFeKzotSlZTXjZaO1VQJyM8RVJHLVskVydgCi1N SiteMTk+PlQqSEIrM0dNKzRWVlMoTlEpJks/YF85SVdcLFBTIyQ7UU9HIjwtUVYqUUZCOF4yKSEp SCkuCi1NNyhfQFA5KFIkRylEQzxMMU5WXDtVR1ZfPClRJyY/RlkrJT8kWjFRP0RXUi8/RENAOFci TScoXzxSVEJKCi1NMicjPV5YSzguLFVbQ04wUSdfLDVNVixZO0YsYFFJJyxEVzdFVS1fKFM+TVlG LF8tLklUPEQ1OCwwIiQpCi02MGA3NUk6RDtdJlYyPCVfWE5ZKElQSDInIUsrRFRgYGAKK00wRUlI LjMlITYyOTM2MydaSVFQYCdaI19fX19fX19fX19fX19fXk9eSl9eW09KW15KXkpLXktaTktPTloK K01aTkteWk5bXlhgQ19gYGA6KmAhKCkiMSgyKSEhSCZAJjA5IUgmQDosMyhUIzBgOEBgVCMiJkMw LWBgYGAKK00tYDkmQzBgYGBgIzFEOSxGKUghRFQ4JTU1MjohRDkvX100NTNfXTUzXzU0X101M100 YGAtYGBgYGBgYGAKK01gYCZAYGBgYCFIYGBgJkBgVDpgYFQhSDpgMDohSCFEJjA6IUgmQyRSLWBU YCYoYC1gUEFIVCMwYGBgIzAKK00mMUhUYGBgYGBUOSYzKUI6YDktJigtYFRgUiMoLWBUIzFCOSZA OmAjJGAmQDgwVDohSGBgYCFIIyhUOmAKK01gYGBgOixDKURRLWAsRkMkJkA6YDkhRCZAOiFIUSxD MC1gIUJgIzAsKDotYFRgYGBgVCFEOi1gYGBgYC0KK00mMURSOEZAJjMxQDU1KF8yLzBFLSZIVkUt WEo5WkozOkdfSkRDOTBdMyg6JkMwOi0vNF0wLzQ+SF0wOzQKK01gIzAtJkBWSVpGRkY6RkMwOj5J SFZIPkghSUhXSElIPjI6OiNVLzRdMyM0XSYzOkZEWyQ0VD1UWzsrJDoKK01OOjgnMzohQUFBNzBQ OCwsLCwsOyJeQUAjYE4tJ1EtYFBQUFAnSzpNKUdWTzpMWi9IRE5bMVdTMV42X2AKK006P1UnQE5f Plo+KFwpW1lYW18hX1RcRVlDWUM1QD5FWFo3QlouVjg7VkVBQFBQUCdJTSc1Wy5TSyouTFoKK01S S0suTFtVUDwnIVA8JyFQPCchUDwnIVA8JyFVJzlNQ043LlZHSTwtIz5ULVs+RU87VTZdLl1PO1Zd TzsKK01WXU87Vl1PO1ZdTztXLFZOQzpBTTs1JlVNOzZVTTs2VU07NlVNOzZVTTs2VU07NlVPOyZd U01bTSotWzAKK01IVDsnMzpXKlUvLVI1OiU1NTU1NTchSjU6RkE/IzBOTk5OTk5dS109WFVcK0tL S0tLS0k8QktEMUFJNjYKK002NjY2MkUqNEkyRSpSSlNOLl9ULDUmOy1GUzlMVEkyRSo0STJTNTlO RTEiWlpaWlpbRl03WCVVVVVVVVUKK01VVE0ySzRdXzEiWlpaWlpbTEU2OlMtIzJOTk5OTk5bO1Um Q0k6PlhTPk0/P09UR043XSNYI1JXUF8yKkoKK01KSkpKSkk+TDU9WkFJNjY2NjY2MkUqNEkyRSpS SlM1UiNQVic7X1I1Mlk3Klk3Klk3KkUqNEkyRSo3KkoKK01ZNC0qUlJSUlJTRkpKSkpKSkpKRT01 PVdFJCtLS0tLS0xaSkpKSkpKSkk5SkxXUDooNzc3Nzc3PVVUSysKK00rKysrKyspPEJLRDBUSysr KysrKTJFKjRJMkU5NTkjMkxMTExMTEU5NTkjMkxMTExMTFpPWVc7PEMtRlEKK01TI0I2NTlFSSY0 WkVHJjUxV0NNJitTJ0JKPlhdNTldIy9LT1A6KUcsYF1NVj4nTCNOXCwsYCIqP0U6YFAKK01gPlRd S1U/PV4lW1NOTSRYJmAjTSdTO1s9UTY8NyVRPDclUTw3JVE8NyVRPDclUTw3JVE8NzBbWUw/LS0K K01TPFE7RllEVy1TPFctUzxXLVM8Vy1TPFcsQyhSLEMoTk5OTk5OTk5OTk5OTk5OTk5OTk5aQ0ou SFpDSDsKK01GUU47RSQtQ0lNO0U8Qy0qNEkyRSo0S0pLSDo1RUVFRUVEWDJFKjRJMkU5NTlaQkIl VVVVVVVXPjU1NTUKK001NTU1MlM1OUg6NUVFRUVFREkyRSo0STJMSkxBSTY2NjY2Nj5bSkpKSkpK SkpFPTU9WjlSVVQvRz5USkUKK01KOkZJNUo6RE0ySzRBSTY2NjY2NjJdQF1IXz8/Uy8/T0EvQk8v Xkg1NTU1NTU1MltLXEE5V1tVL1JeV0UKK01CVS0zNFUtMzRFKjRJMkUqNyhKWSc1XVFCSFM5TFY7 LUZFKjRJMkUqNjpLLSMyTExMTExMRSo0STJFKjUKK01FNUQtKlJSUlJSUjRJMkUqNEk2NTYwVEsr KysrKykyRSo0STJFOTU5XEZCJVVVVVVVVEkyRSo0STJOSk4KK01BSTY2NjY2Nj8zVTc2NzBUS0tL S0tLSyxMUlMrTks6PFNLM1ZXTFBTUyxNYFUhXVovWTFAUDgoQihCKEIKK00oQixWWkFKKzg2Sjkz LlY2NjY2NjY2NjY2NjY9I0g9I0FaP0w9U1c+UUw7JlFMOyZRTDsmUUw7JlFMOyYKK01RTztWXU88 T0stVzhbWkpKSkovIi0iQkJDUiwhPzAuIURSOSxEKDBBW1JCQkJDRF8xUThMNitOLC9TLC8KK00j R1tJWCNQN1tDTjwqKioqKl4nUl1PR0tPSVlUOj5XWScoWScoX0xISEhIQSIkKDBBIiQoME8xMTEx IiQKK00oPURVT1pHTzc3P1kvQE9eN0UvQy8uPzROOVMuOSQxJDEkMSQxJy1OXj4oXEVKTVsrKysr KysrKysrKysKK00rKyssTyQxJDFJQihCKEIoQ0g9I0g9I0hISEhcNyVdNV07J0xORzU1NTVVXk9C UThMNzVdNUpSOSxGMlYKK00+KyVCUT9AXk9ROEw2K0VbN1svWVJTW0FYM101WEM3XitTPS40STJc I0dfJlwzVjZJPzVGUzlMVCgwQV0KK01dRy4zKURSMEEiJlZCQkJCJCgwQSIkLz5PPy8lPixfVD9a T11XRS9fN0YvLz5OOl07NlVNOyFAUDgsJiMKK00hQFA4LCYjUkc3Ly05WTJFKjRJMkUqNEkyRSox JDEkMSQxJDEkMTJHLllXRD43QlE4TDQoMEEiJCgwQSIKK00kKDBBVjMjSl4hRFI5LEYzWCddO1cz UDdDKDBBIiQoMEEiJC9QSioqKigwQSIkKDBZXkNWWFRYODg5LEYKK00zKSIkKD5XPi5TOy1PRz80 XlVIN1ktJFQ7XyQxJDEkMSQxJDEkPD5dWUdWQDRJMkUqNEkyRSo0SURTMy0KK00sJiMhQFVNOzZV TTs2VU07NlVOOVMtQzhWLUIkKDBBIiQoMEEjWzpCQkJDVDoqKiooMEEjXy1YW1gzWDoKK00kKDBd PTExMTEiJCg+RCJCQkJDP1xDJUJROE8uSEhISEEiJCgwQSNSN187WzVfWF4qXi5cVVslWVNZM1cK K00jVStfW1cvMj0pVEcyPSlCUThMNislQlE4TDYrWydXLSJWUTJFKjRJMkUqNEkyRSoxJDEkMSQx JDEkMTIKK01FLj0iJCg+VkhISEhBIiQuJSUlJSdFXUNVXjMpRFIwQSInN1xBXDFXS1hSJCgwQSIk KDBBIkUlJSUkKDAKK01BIiQoMEEiJCgwQVVXRi9aN0ZPRC9ETy8/Kj4uWyNZO19EMSQxJDEkMSQx JDc6LVRbXkUqNEkyRSo0STIKK01FKjRJJDEkMSQxJDEnLFlHLFlXLllXLlxGQkJCQiQoMF0mQkJC Q0s0NDQ0PjUxMTExIiQoPkpeW10nVCcKK01ILzA+QEEiJC9bR0lcNislQltSQkJCQkdMPDYrJUJJ Q0FAODg4IzFBQUBgPkNEUjksRjUlJSUkL0NKKioKKzEoL0YtI1M3X1hOWShJUEgyIUNdNFhYYGAK IGAKIGVuZApkaWZmIC0tZ2l0IHN5cy9ib290L2VmaS9ib290MS9mYXQtYXJtNjQudG1wbC5iejIu dXUgc3lzL2Jvb3QvZWZpL2Jvb3QxL2ZhdC1hcm02NC50bXBsLmJ6Mi51dQppbmRleCAxMTAxZGVi MDIyNy4uMWZhNDEzODA1NDIgMTAwNjQ0Ci0tLSBzeXMvYm9vdC9lZmkvYm9vdDEvZmF0LWFybTY0 LnRtcGwuYnoyLnV1CisrKyBzeXMvYm9vdC9lZmkvYm9vdDEvZmF0LWFybTY0LnRtcGwuYnoyLnV1 CkBAIC0yLDI1ICsyLDQ5IEBAIEZBVCB0ZW1wbGF0ZSBib290IGZpbGVzeXN0ZW0gY3JlYXRlZCBi eSBnZW5lcmF0ZS1mYXQuc2gKIERPIE5PVCBFRElUCiAkRnJlZUJTRCQKIGJlZ2luIDY0NCBmYXQt YXJtNjQudG1wbC5iejIKLU0wRUlILjMlITYyOTM2NEM2NSNUYCZVO19fX19fWl5LSlpfXk5fXk9e Sl9eW09KW05LXkpKXktaTktOTkoKLU1aTktOWk9KXlBgK1wjMGBgMGAjMCMpRCZAVFI4QURgLDAh RC0tJmBAOiFIJkBgIUIjKUlIUjotLSMoOSwKLU1BQWA4RkBRLDAsIzUyYF9VND9KQGAmQUhgYGA6 YDpgYGBgYGBULWBUJkBSJkBUYGBgYGBgYGBgYCRgYFQKLU1gUjkhSC0sRig5YCMkYDkjMzFAKCZA OiFIYGA4QFI6OixGQzMwUiYzKDgwJilILDMkI2A1MjEoXUkxSSkKLU1GKjo4QzFaYEYwOmBUUixA OiZDMzA6YFIhSFRULCQhRFRULUo6JkBSJkMpSUEsOkYzMyhTNF0tM2AtLSQKLU1aLS1CNj02RjFN ITwyOEZKQSIrRSkkMEI8QEIoQiJUSys6MiVMKTBCISInKEQkJCg5RjpATFJPK1E7VEwKLU1OSjlZ WTJRWksxKi0wVVM1K1VNNlI7RT8tVF9RUUcqPS08OSNKOiM+UlshJi00MDsoMkJgMEFFOT05NTYK LU1PKyJJSCYsOE09S0VCRigzLEEkSDVKVSU6TTZLNUsxLS5BKS0tLS0tLTZLMzVJKlRKVTpNNks8 UlUzMjMKLU0zMzMzMzhBNEZERkZGRkZGTVg7Oyw8LCNgUCwjYFAsIi5gQDAoJCIhYEAwKCQiIWBA MEo1LE9KWSolOk0KLU02SzVKVTpJNEo1KkUySTRKKkUySTRKNSpFUTw5T1c+W0xLKlJMSypSTEsq SU5ZKUlJSUlJSUw2RjMzMzMKLU0zMzM9N1ZMTDkxVkVOW1VQW00kSSw1WC0tK0BSMTpYS1RMP0cl TEw+LERcWSotKkRVKzZNQl5ZTUZcN1MKLU1CLCFTNkNNUFVFVSdIJ0IwYDRWLScoQCFKS05dXj9a PF0qVUJgJi85SiMqOU5ATzkuSDZGWURONUFULEwKLU1TLVVBVy1BOzpPM0o2MVI9Ii49KUVZLShU SzNNOFVTOE5NOzFOJlw8JVElXlkzIjklPThaLUFVTVlBO1cKLU1QWUtLKTU7P0A2RDskRFdMIkow TEUqLlFdUkE+UVssOy5RSCVWRE0vS0dFKVsuSkJYNFQ9NTZfLjBKRDoKLU1VTCZRNzMkT1I7PU5G Xj9QWEtDTCVTRj06MUZLTyZXJUExKU8sWVdVJkZNOzFOXVcwUVc9NlUqVURTXVEKLU0wTVxDTlxH OkxeS1QlTzJVJUcwOzMzNUpKWUZBRzhJLDUkRD86VUNcJ1ovVTtRTzdgPClfM0NMIVI3Lz0KLU0l Qj1MPCtgSCtKMTs2Pz8lJDElKkg4WzM0TV9OJCtWME82TztZSjchOTVFNyU8OT9MJVI3LTgzIzop QlkKLU0oRCRGP0RaNEJeLFcpJVcpU1koWDtCL1s8OT9MXFAnXy0qWUM8Tj5QR1JMTFk9Wz9IVVxE P1tBXEJET0wKLU1QKTIwUDZBPEVSRys7NVMnLTxZVCYkT0YmWjNJS0xQWSczRFBJLCIxRi1FVFwt XlNVWiYyREJDLTFgKDAKLTZFYCE6VEo5JmBDP0ksJV9YTlkoSVBIMiIxSypBWmBgYAorTTBFSUgu MyUhNjI5MzY2TSskVlBgJ1olX19fX19fX19fX19fX19eT15KX15bT0pbXkpeTkteS1pOS19OSgor TVpOS15aTlteWGBDXyVgYCZCQGApIjBEMiRCMCZKSjo4RmBGYGA+XTVgYGBgYGBgYGBgYGBgYGBg YGBgYAorTWBgYGBgYGBgYGAqSkpEVGAmR19eSjJJX15JNF9SSkdKYGAhSGBgLWBgYGBgYGBgJkAt YGBgYGBgYGBgJgorTUAjMGAmQUghYDohSCFIYDojMzBSYCZGQUBGQFQtIUlCIUgjKCMzJGBgOWBg YDpgIyIsYEBgLEA6YGBgYAorTTAmQDpgOmAmQFRULEAhSUg4KUgtIzA6OEA6YFJgVFFgYCYwYGAm QGBQQ2AoYCMoJkBgYGAkIUgmQCZAIQorTUgtLSMoYDo6JiI6IzBUJkYoJkAsQC0sMGAhRGBgIUhg LChQImBgUiFIYGBgYCpKRD9JJ0gxKjsyOTMvJQorTSpGVko7P0pKP0pGR00yJkYwVkJgLzQnSmA+ MiZAUjojMCMxSC0nSDMpSVkwJ0onSWBUOiZAVFRUXzEoVAorTVZJRkgnSS1JLzMzNF0mMylFLy1C RktbNVVcTDFMVlNgWis0LCwsKlpGIyFBQUFBQzg3VTg4YFArQ1FNOAorTVBQUFAnO1U6Uy9LPTlH MV0qRVcqLzZNN1lLVVM3XkpbVVstV1teSV8kXV5cKVYnQi9CTyg+PlY4JzpMLgorTUZbM0s0PiNK UFBQODg4YDUjMSwyU0gmYFYhQCwhWCNgOCgsJCIhYEAwKCQiIWBAMCgkIj1GWjtMVy5bQQorTVMt UVonIzRYLTNAWCk8JyE1UDNQPCchUDwnIVA8JyFQPCchUDwnIVItU0xNUiZZTjQ7RllOO0ZZTjtG WQorTU47RllOO0ZZTjtGWU47RyFTTiNGPCc6NDwmSTFKWVcxOzcwOydEWSpNMkpKSkpKS0xWUTVM OkVcLTJaWgorTVpaWltdP1sjWCVcK0tLS0tLS0k6Kk0kODpVRUVFRUVESTJFKjRJMkxKTFpfTF0z JTFGUzlMVjstKjRJMgorTUUqNExVNjomTTk5OTk5OVJcR1UnTTxWOy1GUzlMVjo2UTVMPUJCJVVV VVVVVzI1OUssVC06WlpaWlpbSworTV8yOk43N1ozLVZbXClbKV5aXVheIl4uX1haSkpKSkpKSko3 VTpLVTomTTk5OTk5OSo0STJFKjRLKksoOgorTVVFRUVFRURJMkUqNEkyTEpMQUs2NjY2NjY3SkpK SkpKSkpFPTU9VzUkK0tLS0tLTFpKSkpKSkpKSTlKTAorTVdRLUc8OSw2QzFIVDotJEkyRSo0STJU NTooOlVFRUVFRUZXMD5MUFBdO0ZTOUxWOy1GUzJWKk1CJk05OQorTTk5OTkqUkpSJk05OTk5OTlV Lzg9S0hTOUw9Jz0sTlMjMSxNRycuLE5DTUc3LENSN0AqPlZdLUY3VCxcTgorTV5dSCcvOCFWJzRQ XysuWVBQUGAoSV45SiNgIVs7Sj5ZX0FfRF5UVTk4JmAjVCtNJzxOKlNCWE4rQlhOKworTUJYTitC WE4rQlhOK0JYTitCWylaUVNOSldNWyVPO1YzPldNWz5XTVs+V01bPldNWz5XTVsqOTMqNzc3Nwor TTc3Nzc3Nzc3Nzc3Nzc3Nzc3Nz0tVFc5LVtHO1ZdMSNHPSVNPSFIUzJFKjRJMkUqWkpaJk05OTk5 OTkuJAorTUkyRSo0STY1Nj5ESEE9PT09PT1aSkpKSkpKSkpKNjpLLSM2TExMTExMRSo0STJFKjVF NUQtOlJSUlJSUworTVctNTU1NTU1NTRLSktOTFolPTNUMjYzMUhUMlQ6KToqTSQtOlJSUlJSUjdZ M1ZDT0dcW0wvXVdSJ0VeSQorTTU1NTU1NTUyW0NcQTlXO1RPUz5PKyVMOyZRTDsmUSo0STJFKjRN JTZDSj1ZVlYzJUtUOi0mQzFIXTNBQQorTTk5NTU1NTU1KzhKViteQ15CUjhNJkMxSFQ6KTJFKjRJ MkVISlQwVUsrKysrKykyRSo0STJFOTU5IzZMTAorTUxMTExFKjRJMkUqNUU1R1JaKDc3Nzc3NzJF KjRJMkUqWkpaJk05OTk5OTlMSk5MTkFLNzc3Nzc3NjU1NgorTT5SNz9PTFc7LSdPVlFYO0gvQ04x WTtEOzZVTTxDRDxCKEIoQihDLSxYVSFMKlZKWTtOWysrKysrKysrKworTSsrKysrKy05UzddXlVQ RislQlE4TDYrJUJROEw2KyVCUTpGWkNKLkhaJks9WU9RSTJFRENPUzRISEheJworTUArOkFaYFI5 LEYyJCgwQSIkL0tfVFw2KyVCXStBWyMjVzRfPU86Tl09Ul5ANDQ0NDVfRlonN1NdVT83UworTShV XkNUOi0mQ15aQkJCQiQoMEEiJCgwQSJdJSUlJCgwQVRGVV84XVpbI1grWENRJ0JPJz40Xkw8QihC KAorTUIoQihCKENERz0vITlNRltaSTk5OTk5OTk5OTk5OTk5OTlJPDEkMSZEKEIoQi4xUi4xVEcy PSlURy8xMQorTTFYJitaV01YXUNUOkpKSk5RViw2KyVCXSFWVlMpRFI5KzQ0NDQ+TlpOKyVCUT0j Sz87XkJMW0lXW05XTgorTVcpWl9FUjksRjNOXkNaX1c/TD0lXSxWOy1GQSIkL1AsWVI5LEYyJCgw Wj0lJSUkKDBBIiQoP1dPPy9gPgorTSJfVT4mX1o+Klw5WSNSV1YzO007NiMhQFA4LCYjIUBQOCwm IyFYU0pHRC81NEkyRSo0STJFKjRJMkQxJAorTTEkMSQxJDEkPFNGPFNGPiVfW0JROEw0KDBBIiQo MEEiJCgwQVxZWzMlQlE4T0A+XD1cW1FYIiQoMEEiJAorTS8+VDQ0ND9YVDQ0NDBBIiQoMEFTPUVX SFVYODg5LEYzKSIkKD1aXiRaWzhHUyxeXlVeK1xWQDolX0IoQgorTShCKEIoQihCLi05RVwjLyo0 STJFKjRJMkUqNFY7JUJQOCwmIzpWTUs6Vk1LOlZNSzpZJyhZVy5ZVy5BIgorTSQoMEEiJCgwXlpI SEhIXFpCQkJCJCgwX1Q/Ij8jPiZBIiQvTDoqKiooMEEjSkExMTExUEhISEhcSkJCQgorTUNRWioq KigwQSNfTVw1XVBeLFw5XEVZK0wvKj8sP04vMy8oW1tFPEtFPEtFPEsoUixDKFIsQyhSLEMoUwor TVtbJ1ctSjRJMkUqNEkyRSo0STJEMSQxJDEkMSQxJDRJMkQoMEFXRSUlJSQoMEEiJCg+K1lPWC4z KURSMAorTUEiJ1JPIj01XVpeMEEiJCgwQSIkKDBJMTExMSIkKDBBIiQoMEEiJCg/KT4wXCVZK1kz WTtSV1MnQS8tPworTS0+PkIoQihCKEIoQihCWzBORD9USTJFKjRJMkUqNEkyRShCKEIoQihCKENE PENGPFNGPFNRKioqKigwQQorTSNTSioqKi8zNDQ0ND9eNDQ0NDBBIidUV0pfLlxRWUNTJ0YoMEEj V1NNPDYrJUJdNTExMTEzXF8lQlE4SgorRzhYOCYmJmBVODg4YCdHOSxGMylFMTExMSNRVSUlJCdH TTNfWV9eK04yKjwqJEBVSThGVmAKIGAKIGVuZApkaWZmIC0tZ2l0IHN5cy9ib290L2VmaS9ib290 MS9mYXQtaTM4Ni50bXBsLmJ6Mi51dSBzeXMvYm9vdC9lZmkvYm9vdDEvZmF0LWkzODYudG1wbC5i ejIudXUKaW5kZXggNzRjNzM0ZDJkMzcuLmMwNDQwY2FlNDIxIDEwMDY0NAotLS0gc3lzL2Jvb3Qv ZWZpL2Jvb3QxL2ZhdC1pMzg2LnRtcGwuYnoyLnV1CisrKyBzeXMvYm9vdC9lZmkvYm9vdDEvZmF0 LWkzODYudG1wbC5iejIudXUKQEAgLTIsMjUgKzIsNDkgQEAgRkFUIHRlbXBsYXRlIGJvb3QgZmls ZXN5c3RlbSBjcmVhdGVkIGJ5IGdlbmVyYXRlLWZhdC5zaAogRE8gTk9UIEVESVQKICRGcmVlQlNE JAogYmVnaW4gNjQ0IGZhdC1pMzg2LnRtcGwuYnoyCi1NMEVJSC4zJSE2MjkzNjEvIjEmJGAmVTtf X19fX1peS0paX1pOX15PXkpfXltPSltOS15KSl5LWk5LTk5KCi1NWk5LTlpPSl5QYCtcIzBgYDBg IzAmQzMxSCMzJCYkYFIsQUgtIzMiIyEsMzA6YCZAYCFARkA4KUQmJDojCi1NKDo6ODMpQmAmQDpK MDo/WkovVTMwYCxAYGBgLWAsRkBgYGBgYGBSLWBgYFJgYGBgYGBgYGBgJGBgVCFICi1NVFQ6YFRR IUFgLEMoOiMwVFBAUDMkVCZAIUhgYDgpSCYiOSFBJkBSJkZGJFI4QCFIIkpCKEdNKjooM1ZJCi1N Sjo7MjktREYpWkMxSCMpSUEmMCxDMUhgUmBWSCMzJCMoI1IoUiMoVDhGRlIkUChSOCZBSFEzVFRV Lk0vCi1NNENINTZYSkJTQlIlJFIiJUhCQSIiJEhBIiQoMCpNKThRMDYoQyEiYEBAT1hBYEBAW14y OExIWT8rSlRaCi1NWTQtKlxRNF09SkRXUC1EVVJcO0VNNl48MU9XKzxRQCw5OVZdSyw8IiojPig7 VUckLEhKMEAiIiMtUVJMCi1NSyU7VSVAVSMpTERNNT06Ky0oTigxQEk0SUo1KkUySTU0RElENERE RERERSpFKTJCSTFJNEo1KkVVOyEpCi1NJSkpKSkpKUNFIjIqMjIyMjIyVkFNTFFQUCwjYFAsI2BQ KFgiIWBAMCgkIiFgQDAoJCIhIkEwWz83UTMqCi1NNSpFMkk0SjUiQTBINColIkEwNColIkEwSDQr LlNUJlFLKlJMSypSTEsqUkE+UTIyMjIyMjI2SjEpKSkpCi1NKSkpRS5bQ0RJTFs2OjFfPT08MSlI TS1JKVlXJkJBMTo6Uys6KTY1LTBCXSUmJ00oTTxWMlw7QU5VXFhDCi1NRE5AUDZLSyFMKlwvNC8o QGAzVS03JEBgXisoWzJbXl9ROFYkKGAsSlwmIUZNISw7MisnSk5fQk0sPzU/Ci1NXTxMXTdROl1U TVxRMFFWT0YmJSU8UTpRWzpFTCZTN0MrLVJXU0BOLFkrRywhQitBPFZTWlxNO1hHIlw6Ci1NMk9G Ki1bWDU2JVYxPCJgSEIrKExaQiY8XV45PjBOSDs+SUlXOyhKTlZFRkk7PkMnKVlYVjUrXVhCQilc Ci1NW1pFVktMQFczPi1eX0lRVyo8VVQ2JFQzVTdOOS5SRzMxN1ZBXC46WkwqSl1NS1Y9OzleTS5I QlReRUY2Ci1NNjhPPFM4LS5JXE5NLktWN0U7QzZUSio5JklFNEcuUEElI1w2Tz9IVzteJVxYI0FO MFkzRk5AWjsjPTlECi1NL1YuL005Qk8kTDsrOEI6JCgzSzpaRjwrPiglVlY7QE8vPDVGNjk8RVMn Lz0lVFYiUSYqVTMqMTBCJDdDCi1NUTMoPT4qOFg5R1hIOSYrI0JBUideLjRZO0ZNLFlbSEwhQE9Z ODskPzhTO0o3Ry4wXkYqJy9RO148V1YlCi1NUFEmKiNJLTJQJzQ9NU5GIlBGJl9VQi4qUTc3OFJV LDYpQzE4RDVfJFNOVlFMNT8tOyxbNiokVj5BYCQkCi03JDhgJUEuR0I3WickMT0pX1hOWShJUEgy YEdBKEMiYGAKK00wRUlILjMlITYyOTM2PVNPI0NAYCdZQ19fX19fX19fX19fX19fXk9eSl9eW09K W15KXk5LXktaT0tPTkoKK01aTkteWk5bXlhgQ18qYGAmQkBgNCIwRDIoQjAmSSpgYGBgYGBgYCMw YGBgYGBgYCMoLWBgUmBgYGBgYGAKK01gYGBgYGBgIkpKRSdaSGA6P19aREpHX1pKPkpHX0pKYGBg YGBgYGBgYGBgYGBgYCMwYGBUYGBgYGBgYCMKK00wOiZBWkAkIUgmQCZAIUgtLSMoYDo6JiI6IzBU JkYoJkAsQC0sMGAhRGBgIUhgLChQImBgUiFIYGBgIWAKK006IUghSGA6IzMwUmAmRkFARkBULSFJ QiFIIygjMyRgYDlgYGA6YCMiLGBAYCxAOmBgYGAwJkA6YDpgJkAKK01UVCxAIUlIOClILSMwOjhA OmBSYFRRYGAmMGBgJkBgUENgKGAjKCZAYGBgYEpKMV5FJ1o6MjI+RS0vVTMKK01VKj9fSTJHTTIp X1pKRjNUVko+SD5JSDosQzAsVEA6OzQnSiZAOiNVLS1gOmA5YD5IIVpDMzA6YD5IYD4KK01VM1Um M1RDVS0tJkFaM1QzMyM0XUo6M00xOzVdLFtTO0wnLVNTYFpLNCxMTEtaRjMpRUVFRUxIOFU5OWAK K01SLytVIysrKyg5Q1ouWiMvVC9INj1HSSRPNk9MVUdXS1s1S0lBOCJIJVYsPDdIVEFOQzQnLi5A PjBfQEEKK01LWChGSyEyVj0jNyooMEEiJChgJVBLU1c2SVVVRzc9PUFVVzc+Ilo3Mlo3Mlo3Mlo3 Mlo3Mlo3Mlo3MloKK003PE5FUD5LPU5eMC8vWTpHJUo8NyUrQlhLTio+K0JYTitCWE4rQlhOK0JY TitCWE1bT10nMUhMVDorLSYKK01DMUhUOi0mQzFIVDotJkMxSFQ6LSc2PCc2PU5YTjVHJUo2Ok4j Sk49VScsXiVNNzpFVVVVVVVXPS45PVMKK00tMyM0UFBQUFBQXy1dMzdeJksrIyMjIyMjIjZZPU4x RUs0STJFKjJFKjRJMkUqRVUuUV4zSjslRjstRlMKK005TFRJMkUqNEkyUzc5SDpVKjRJMkc7O18z XlRTOUxWOy1GUzlJPFJbRj1GUiYmJiYmJicwTlM0UzBVTCwKK00sLCwsLlFXVktNTT9SXjtaMV1I XyU/Sk8lPlk+Xj9aXVROTk5OTk5ORVpBPVgqJk0yRSo0SSo0STJFKjQKK01KNzRBSzRJMkUqMkUq NEkyRSpFVSg6VSo0STJGL0paNEkyRSo0RUZOUzBVSjRJMkUsW0tLS0tLS0tJODcKK004PjNTPktW TUM8Vy1TPFctUjRJMkUqNEk7RVZZIzZJMkUqNEUqNEkyRSo1K0owVUo0STJFKTROSSM2STIKK01F KjRUXl5eM1csVjs5Tj5NOlcsVTk+Uj5QOiJDTVc4LCdETFhJWztUVitaN1FLT1A5XVNFQFM+SFk3 LUcKK00iOTY1RWAkNl1BSiMoIV43VU87PlVfPFtfNU1SLEAnSCdSK1pJUjRZLjNEWS4zRFkuM0RZ LjNEWS4zRFkKK00uM0RZLlg+TjwnPS0mQzhUOi1LMUhUOi0mQzFIVDotJkMxSFQ6LSZDTjc8S0tL S0tLS0tLS0tLS0tLS0sKK01LS0tLS0w2R0xNSFQ2MFguSllXNDtGOjRJMkUqNEk4NzgwVUo0STJF KVJFKjRJMkUqRVUuXUxBQUFBQUEKK01BWCVVVVVVVVVVVExVVjomTTJFKjRJKjRJMkUqNEo3NEFL NEkyRSo+T11NMkUqNEkyRExVVjtUMz8/NFsKK01OVE1LPFctUls8Vyk7RVUoOlUqNEkyRE9OV0xX Qi9XVzk+Wz5fPjlaNT09PT09PT0rT18iNF8mPyw/JlsKK00kTUNGPFNGPFNGOFlGSltUPzhQUFBQ UFBQSVUlVjtLXidMNjlMVjstRlMyRSo0STJFKy09RkFLNEkyRSoKK00yRSo0STJFKkVVKDpVKjRJ MkRJMkUqNEkyST0yJk0yRSo0SSo0STJFKjRKNzReKTkjIyMjIyMiNEkyRSoKK000STg3OD5GOTYw UFBQUFBQTk5QSUEjNlBQUEcjIyMiRS0oPS5URVdLMkZWTFRdOUZHUk0rOVUnXEhMTEwKK01CKEIo Qz5XTVs+V05QXURaS05XVCc3PilULkFULkFULkFULkFULkFULkFULkFULkFaI0w9S1FfNjwnIVAK K008JyFQPCchUDwnIVA8JyFQPCc2PTlVRzY9M089LlVKRSo0SF1KOkVFRUdeNjBLNC5OPSxJMkUi JCgwQSIKK00nVDdYPlFMOyZRV1Y3TDxPO1NYI1Y7XF1eRltVOTk5OT9dV0o9Qy9WXi4iKFU9NzxX LVM8X0ZMTExMQSIKK00kKDBBIiQoMFE5OTk5IiQoPSNHPipfSD4sXVBfUz9bTyo/YD8lPkg7Vl1P O1ZdJDEkMSQxJDxKW01HJ0IKK00uRVUrJUJROEw2KyVCUThMNislQlE4TSdCKEIoVDEkMSQxJDFC W0FXI04nIlJSU0xbJ1QvSjhfIlpNVVUKK01VV0M9P1FNSzpWTUtLXkVaRlVNOzZVQlJSUlNVXz9b JlFMOyZfVDdLLltJXThcKV4uX0A7XyJbOzpWTUsKK006W09KXz0/Sj9AO0YtVjstRlMwQSInVi48 WzZVTTs0KDBBVy1FRUVEKDBBIiQoP1NPWkc5P1cvPE8pPlwKK00+NFxNXCVZQ1UzR1lXLllXLllX LkxMTExMTExMTExcNVlDUidKKjRJMkUqNEkyRSo0STIoQihCKEIoQigKK01CKjRJM1IvPzsmUUw7 JCgwQSIkKDBBIiQoMEFZW1ZGUUw7JlFYX0JPJD4mWyokKDBBIiQqTExMTEEiJCgKK00wQSIkKDBc T1dPWmBVWTk5OzZVTTs0KDBBWyVbSVdDTydPJ18jUkdZLFxTWyw/WEIoQihCKEIoQihDQzYKK007 PyJeMTJFKjRJMkUqNEkyRlM5Oys2NjY2NjY2NjxbRzxbRzxbRztWXVA8JyFQMEEiJCgwQSIkKD4h OTkKK005OVlVRUVFRCgwQVtBWSNSN05UKDBBWkpSUlJTTkBMTExMQSIkLi1FRUVHUTsrKysoMEEi JCxDKF5JXUMKK01AV1cvUTlZXlNVV1wsUVcrIV5HPjgsJiMhQFA4LCYjIUBQOCwmIyFdO1s2PTsu STJFKjRJMkUqNEkyRSgKK01CKEIoQihCKEIoSTJFLEMoUixDUFsrKysoMEEiJCgwX1pbN0tNSzpW TUokKDBeJ1kjX01YK1daJCgwQSIKK00kKDBBIlVFRUVEKDBBIiQoMEEiJCgwQV9YXiJcPVwpXC1c MVlDX1lbSVZHUUdRVl1PO1ZdJDEkMSQxJDEKK009Ri5GP1RJMkUqNEkyRSo0STJFKEIoQihCKEIo QihJM01XO08+VjY2NjBBIidHNjY2Nj1dOTk5OV9TOTkKK005OSIkKD5EXk5cW1M3Rk8tPjpBIiQv WydIXUM4Vi1DUCsrKysrP0BbJlFMOyVNRjYxRUVELTY2NjAhWVYKK0E8I1NbK0ZWVEkyJlZSUlJS J1AlRUVEJ1FWSV9aX18lVyklLiUiMFcuXC4uYAogYAogZW5kCmRpZmYgLS1naXQgc3lzL2Jvb3Qv ZWZpL2Jvb3QxL2dlbmVyYXRlLWZhdC5zaCBzeXMvYm9vdC9lZmkvYm9vdDEvZ2VuZXJhdGUtZmF0 LnNoCmluZGV4IGQ5ZGZiMjdkZTI1Li43YzQ2ZTkyNmY2MCAxMDA3NTUKLS0tIHN5cy9ib290L2Vm aS9ib290MS9nZW5lcmF0ZS1mYXQuc2gKKysrIHN5cy9ib290L2VmaS9ib290MS9nZW5lcmF0ZS1m YXQuc2gKQEAgLTEzLDcgKzEzLDcgQEAKIAogRkFUX1NJWkU9MTYwMCAJCQkjU2l6ZSBpbiA1MTIt Ynl0ZSBibG9ja3Mgb2YgdGhlIHByb2R1Y2VkIGltYWdlCiAKLUJPT1QxX1NJWkU9MTI4aworQk9P VDFfU0laRT01MTJrCiAKICMKICMgS25vd24gZmlsZW5hbWVzCmRpZmYgLS1naXQgc3lzL2Jvb3Qv ZWZpL2Jvb3QxL3Vmc19tb2R1bGUuYyBzeXMvYm9vdC9lZmkvYm9vdDEvdWZzX21vZHVsZS5jCmRl bGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwODYwYTg2MGZkZi4uMDAwMDAwMDAwMDAKLS0t IHN5cy9ib290L2VmaS9ib290MS91ZnNfbW9kdWxlLmMKKysrIC9kZXYvbnVsbApAQCAtMSwxODAg KzAsMCBAQAotLyotCi0gKiBDb3B5cmlnaHQgKGMpIDE5OTggUm9iZXJ0IE5vcmRpZXIKLSAqIEFs bCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEgUm9iZXJ0IERyZWhtZWwK LSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKGMpIDIwMTQgTmF0aGFuIFdo aXRlaG9ybgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoYykgMjAxNSBF cmljIE1jQ29ya2xlCi0gKiBBbGwgcmlnaHRzIHJldmVydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0 aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAot ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu ZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhp cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIu IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg Y29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRI SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIEFVVEhPUiBBTkQgQ09OVFJJQlVUT1JTIGBg QVMgSVMnJyBBTkQKLSAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKLSAqIEFS RSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBPUiBDT05UUklCVVRP UlMgQkUgTElBQkxFCi0gKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ RUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAotICogREFNQUdFUyAoSU5DTFVESU5H LCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKLSAq IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1Mg SU5URVJSVVBUSU9OKQotICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElB QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKLSAqIExJQUJJTElUWSwgT1IgVE9S VCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkK LSAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU SEUgUE9TU0lCSUxJVFkgT0YKLSAqIFNVQ0ggREFNQUdFLgotICoKLSAqICRGcmVlQlNEJAotICov Ci0KLSNpbmNsdWRlIDxzdGRhcmcuaD4KLSNpbmNsdWRlIDxzdGRib29sLmg+Ci0jaW5jbHVkZSA8 c3lzL2NkZWZzLmg+Ci0jaW5jbHVkZSA8c3lzL3BhcmFtLmg+Ci0jaW5jbHVkZSA8ZWZpLmg+Ci0K LSNpbmNsdWRlICJib290X21vZHVsZS5oIgotCi1zdGF0aWMgZGV2X2luZm9fdCAqZGV2aW5mbzsK LXN0YXRpYyBkZXZfaW5mb190ICpkZXZpY2VzOwotCi1zdGF0aWMgaW50Ci1kc2tyZWFkKHZvaWQg KmJ1ZiwgdV9pbnQ2NF90IGxiYSwgaW50IG5ibGspCi17Ci0JaW50IHNpemU7Ci0JRUZJX1NUQVRV UyBzdGF0dXM7Ci0KLQlsYmEgPSBsYmEgLyAoZGV2aW5mby0+ZGV2LT5NZWRpYS0+QmxvY2tTaXpl IC8gREVWX0JTSVpFKTsKLQlzaXplID0gbmJsayAqIERFVl9CU0laRTsKLQotCXN0YXR1cyA9IGRl dmluZm8tPmRldi0+UmVhZEJsb2NrcyhkZXZpbmZvLT5kZXYsCi0JICAgIGRldmluZm8tPmRldi0+ TWVkaWEtPk1lZGlhSWQsIGxiYSwgc2l6ZSwgYnVmKTsKLQotCWlmIChzdGF0dXMgIT0gRUZJX1NV Q0NFU1MpIHsKLQkJRFBSSU5URigiZHNrcmVhZDogZmFpbGVkIGRldjogJXAsIGlkOiAldSwgbGJh OiAlanUsIHNpemU6ICVkLCAiCi0JCSAgICAic3RhdHVzOiAlbHVcbiIsIGRldmluZm8tPmRldiwK LQkJICAgIGRldmluZm8tPmRldi0+TWVkaWEtPk1lZGlhSWQsICh1aW50bWF4X3QpbGJhLCBzaXpl LAotCQkgICAgRUZJX0VSUk9SX0NPREUoc3RhdHVzKSk7Ci0JCXJldHVybiAoLTEpOwotCX0KLQot CXJldHVybiAoMCk7Ci19Ci0KLSNpbmNsdWRlICJ1ZnNyZWFkLmMiCi0KLXN0YXRpYyBzdHJ1Y3Qg ZG1hZGF0IF9fZG1hZGF0OwotCi1zdGF0aWMgaW50Ci1pbml0X2RldihkZXZfaW5mb190KiBkZXYp Ci17Ci0KLQlkZXZpbmZvID0gZGV2OwotCWRtYWRhdCA9ICZfX2RtYWRhdDsKLQotCXJldHVybiBm c3JlYWQoMCwgTlVMTCwgMCk7Ci19Ci0KLXN0YXRpYyBFRklfU1RBVFVTCi1wcm9iZShkZXZfaW5m b190KiBkZXYpCi17Ci0KLQlpZiAoaW5pdF9kZXYoZGV2KSA8IDApCi0JCXJldHVybiAoRUZJX1VO U1VQUE9SVEVEKTsKLQotCWFkZF9kZXZpY2UoJmRldmljZXMsIGRldik7Ci0KLQlyZXR1cm4gKEVG SV9TVUNDRVNTKTsKLX0KLQotc3RhdGljIEVGSV9TVEFUVVMKLWxvYWQoY29uc3QgY2hhciAqZmls ZXBhdGgsIGRldl9pbmZvX3QgKmRldiwgdm9pZCAqKmJ1ZnAsIHNpemVfdCAqYnVmc2l6ZSkKLXsK LQl1ZnNfaW5vX3QgaW5vOwotCUVGSV9TVEFUVVMgc3RhdHVzOwotCXNpemVfdCBzaXplOwotCXNz aXplX3QgcmVhZDsKLQl2b2lkICpidWY7Ci0KLQlEUFJJTlRGKCJMb2FkaW5nICclcycgZnJvbSAl c1xuIiwgZmlsZXBhdGgsIGRldnBhdGhfc3RyKGRldi0+ZGV2cGF0aCkpOwotCi0JaWYgKGluaXRf ZGV2KGRldikgPCAwKSB7Ci0JCURQUklOVEYoIkZhaWxlZCB0byBpbml0IGRldmljZVxuIik7Ci0J CXJldHVybiAoRUZJX1VOU1VQUE9SVEVEKTsKLQl9Ci0KLQlpZiAoKGlubyA9IGxvb2t1cChmaWxl cGF0aCkpID09IDApIHsKLQkJRFBSSU5URigiRmFpbGVkIHRvIGxvb2t1cCAnJXMnIChmaWxlIG5v dCBmb3VuZD8pXG4iLCBmaWxlcGF0aCk7Ci0JCXJldHVybiAoRUZJX05PVF9GT1VORCk7Ci0JfQot Ci0JaWYgKGZzcmVhZF9zaXplKGlubywgTlVMTCwgMCwgJnNpemUpIDwgMCB8fCBzaXplIDw9IDAp IHsKLQkJcHJpbnRmKCJGYWlsZWQgdG8gcmVhZCBzaXplIG9mICclcycgaW5vOiAlZFxuIiwgZmls ZXBhdGgsIGlubyk7Ci0JCXJldHVybiAoRUZJX0lOVkFMSURfUEFSQU1FVEVSKTsKLQl9Ci0KLQlp ZiAoKHN0YXR1cyA9IGJzLT5BbGxvY2F0ZVBvb2woRWZpTG9hZGVyRGF0YSwgc2l6ZSwgJmJ1Zikp ICE9Ci0JICAgIEVGSV9TVUNDRVNTKSB7Ci0JCXByaW50ZigiRmFpbGVkIHRvIGFsbG9jYXRlIHJl YWQgYnVmZmVyICV6dSBmb3IgJyVzJyAoJWx1KVxuIiwKLQkJICAgIHNpemUsIGZpbGVwYXRoLCBF RklfRVJST1JfQ09ERShzdGF0dXMpKTsKLQkJcmV0dXJuIChzdGF0dXMpOwotCX0KLQotCXJlYWQg PSBmc3JlYWQoaW5vLCBidWYsIHNpemUpOwotCWlmICgoc2l6ZV90KXJlYWQgIT0gc2l6ZSkgewot CQlwcmludGYoIkZhaWxlZCB0byByZWFkICclcycgKCV6ZCAhPSAlenUpXG4iLCBmaWxlcGF0aCwg cmVhZCwKLQkJICAgIHNpemUpOwotCQkodm9pZClicy0+RnJlZVBvb2woYnVmKTsKLQkJcmV0dXJu IChFRklfSU5WQUxJRF9QQVJBTUVURVIpOwotCX0KLQotCURQUklOVEYoIkxvYWQgY29tcGxldGVc biIpOwotCi0JKmJ1ZnAgPSBidWY7Ci0JKmJ1ZnNpemUgPSBzaXplOwotCi0JcmV0dXJuIChFRklf U1VDQ0VTUyk7Ci19Ci0KLXN0YXRpYyB2b2lkCi1zdGF0dXModm9pZCkKLXsKLQlpbnQgaTsKLQlk ZXZfaW5mb190ICpkZXY7Ci0KLQlmb3IgKGRldiA9IGRldmljZXMsIGkgPSAwOyBkZXYgIT0gTlVM TDsgZGV2ID0gZGV2LT5uZXh0LCBpKyspCi0JCTsKLQotCXByaW50ZigiJXMgZm91bmQgIiwgdWZz X21vZHVsZS5uYW1lKTsKLQlzd2l0Y2ggKGkpIHsKLQljYXNlIDA6Ci0JCXByaW50Zigibm8gcGFy dGl0aW9uc1xuIik7Ci0JCWJyZWFrOwotCWNhc2UgMToKLQkJcHJpbnRmKCIlZCBwYXJ0aXRpb25c biIsIGkpOwotCQlicmVhazsKLQlkZWZhdWx0OgotCQlwcmludGYoIiVkIHBhcnRpdGlvbnNcbiIs IGkpOwotCX0KLX0KLQotc3RhdGljIGRldl9pbmZvX3QgKgotX2RldmljZXModm9pZCkKLXsKLQot CXJldHVybiAoZGV2aWNlcyk7Ci19Ci0KLWNvbnN0IGJvb3RfbW9kdWxlX3QgdWZzX21vZHVsZSA9 Ci17Ci0JLm5hbWUgPSAiVUZTIiwKLQkucHJvYmUgPSBwcm9iZSwKLQkubG9hZCA9IGxvYWQsCi0J LnN0YXR1cyA9IHN0YXR1cywKLQkuZGV2aWNlcyA9IF9kZXZpY2VzCi19OwpkaWZmIC0tZ2l0IHN5 cy9ib290L2VmaS9ib290MS96ZnNfbW9kdWxlLmMgc3lzL2Jvb3QvZWZpL2Jvb3QxL3pmc19tb2R1 bGUuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTkyNmEzMzAxMGQuLjAwMDAwMDAw MDAwCi0tLSBzeXMvYm9vdC9lZmkvYm9vdDEvemZzX21vZHVsZS5jCisrKyAvZGV2L251bGwKQEAg LTEsMTk2ICswLDAgQEAKLS8qLQotICogQ29weXJpZ2h0IChjKSAyMDE1IEVyaWMgTWNDb3JrbGUK LSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRp b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK LSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRp b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAq ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz Y2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJ UyBQUk9WSURFRCBCWSBUSEUgQVVUSE9SIEFORCBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAot ICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg TElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQotICogQVJFIERJU0NMQUlNRUQu ICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUK LSAqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBM QVJZLCBPUiBDT05TRVFVRU5USUFMCi0gKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUwotICogT1IgU0VSVklDRVM7 IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p Ci0gKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI RVIgSU4gQ09OVFJBQ1QsIFNUUklDVAotICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcg TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQotICogT1VUIE9GIFRI RSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU WSBPRgotICogU1VDSCBEQU1BR0UuCi0gKgotICogJEZyZWVCU0QkCi0gKi8KLSNpbmNsdWRlIDxz dGRkZWYuaD4KLSNpbmNsdWRlIDxzdGRhcmcuaD4KLSNpbmNsdWRlIDxzdGRib29sLmg+Ci0jaW5j bHVkZSA8c3lzL2NkZWZzLmg+Ci0jaW5jbHVkZSA8c3lzL3BhcmFtLmg+Ci0jaW5jbHVkZSA8c3lz L3F1ZXVlLmg+Ci0jaW5jbHVkZSA8ZWZpLmg+Ci0KLSNpbmNsdWRlICJib290X21vZHVsZS5oIgot Ci0jaW5jbHVkZSAibGliemZzLmgiCi0jaW5jbHVkZSAiemZzaW1wbC5jIgotCi1zdGF0aWMgZGV2 X2luZm9fdCAqZGV2aWNlczsKLQotc3RhdGljIGludAotdmRldl9yZWFkKHZkZXZfdCAqdmRldiwg dm9pZCAqcHJpdiwgb2ZmX3Qgb2ZmLCB2b2lkICpidWYsIHNpemVfdCBieXRlcykKLXsKLQlkZXZf aW5mb190ICpkZXZpbmZvOwotCW9mZl90IGxiYTsKLQlFRklfU1RBVFVTIHN0YXR1czsKLQotCWRl dmluZm8gPSAoZGV2X2luZm9fdCAqKXByaXY7Ci0JbGJhID0gb2ZmIC8gZGV2aW5mby0+ZGV2LT5N ZWRpYS0+QmxvY2tTaXplOwotCi0Jc3RhdHVzID0gZGV2aW5mby0+ZGV2LT5SZWFkQmxvY2tzKGRl dmluZm8tPmRldiwKLQkgICAgZGV2aW5mby0+ZGV2LT5NZWRpYS0+TWVkaWFJZCwgbGJhLCBieXRl cywgYnVmKTsKLQlpZiAoc3RhdHVzICE9IEVGSV9TVUNDRVNTKSB7Ci0JCURQUklOVEYoInZkZXZf cmVhZDogZmFpbGVkIGRldjogJXAsIGlkOiAldSwgbGJhOiAlamQsIHNpemU6ICV6dSwiCi0JCSAg ICAiIHN0YXR1czogJWx1XG4iLCBkZXZpbmZvLT5kZXYsCi0JCSAgICBkZXZpbmZvLT5kZXYtPk1l ZGlhLT5NZWRpYUlkLCAoaW50bWF4X3QpbGJhLCBieXRlcywKLQkJICAgIEVGSV9FUlJPUl9DT0RF KHN0YXR1cykpOwotCQlyZXR1cm4gKC0xKTsKLQl9Ci0KLQlyZXR1cm4gKDApOwotfQotCi1zdGF0 aWMgRUZJX1NUQVRVUwotcHJvYmUoZGV2X2luZm9fdCAqZGV2KQotewotCXNwYV90ICpzcGE7Ci0J ZGV2X2luZm9fdCAqdGRldjsKLQlFRklfU1RBVFVTIHN0YXR1czsKLQotCS8qIFpGUyBjb25zdW1l cyB0aGUgZGV2IG9uIHN1Y2Nlc3Mgc28gd2UgbmVlZCBhIGNvcHkuICovCi0JaWYgKChzdGF0dXMg PSBicy0+QWxsb2NhdGVQb29sKEVmaUxvYWRlckRhdGEsIHNpemVvZigqZGV2KSwKLQkgICAgKHZv aWQqKikmdGRldikpICE9IEVGSV9TVUNDRVNTKSB7Ci0JCURQUklOVEYoIkZhaWxlZCB0byBhbGxv Y2F0ZSB0ZGV2ICglbHUpXG4iLAotCQkgICAgRUZJX0VSUk9SX0NPREUoc3RhdHVzKSk7Ci0JCXJl dHVybiAoc3RhdHVzKTsKLQl9Ci0JbWVtY3B5KHRkZXYsIGRldiwgc2l6ZW9mKCpkZXYpKTsKLQot CWlmICh2ZGV2X3Byb2JlKHZkZXZfcmVhZCwgdGRldiwgJnNwYSkgIT0gMCkgewotCQkodm9pZCli cy0+RnJlZVBvb2wodGRldik7Ci0JCXJldHVybiAoRUZJX1VOU1VQUE9SVEVEKTsKLQl9Ci0KLQlk ZXYtPmRldmRhdGEgPSBzcGE7Ci0JYWRkX2RldmljZSgmZGV2aWNlcywgZGV2KTsKLQotCXJldHVy biAoRUZJX1NVQ0NFU1MpOwotfQotCi1zdGF0aWMgRUZJX1NUQVRVUwotbG9hZChjb25zdCBjaGFy ICpmaWxlcGF0aCwgZGV2X2luZm9fdCAqZGV2aW5mbywgdm9pZCAqKmJ1ZnAsIHNpemVfdCAqYnVm c2l6ZSkKLXsKLQlzcGFfdCAqc3BhOwotCXN0cnVjdCB6ZnNtb3VudCB6ZnNtb3VudDsKLQlkbm9k ZV9waHlzX3QgZG47Ci0Jc3RydWN0IHN0YXQgc3Q7Ci0JaW50IGVycjsKLQl2b2lkICpidWY7Ci0J RUZJX1NUQVRVUyBzdGF0dXM7Ci0KLQlzcGEgPSBkZXZpbmZvLT5kZXZkYXRhOwotCi0JRFBSSU5U RigibG9hZDogJyVzJyBzcGE6ICclcycsIGRldnBhdGg6ICVzXG4iLCBmaWxlcGF0aCwgc3BhLT5z cGFfbmFtZSwKLQkgICAgZGV2cGF0aF9zdHIoZGV2aW5mby0+ZGV2cGF0aCkpOwotCi0JaWYgKChl cnIgPSB6ZnNfc3BhX2luaXQoc3BhKSkgIT0gMCkgewotCQlEUFJJTlRGKCJGYWlsZWQgdG8gbG9h ZCBwb29sICclcycgKCVkKVxuIiwgc3BhLT5zcGFfbmFtZSwgZXJyKTsKLQkJcmV0dXJuIChFRklf Tk9UX0ZPVU5EKTsKLQl9Ci0KLQlpZiAoKGVyciA9IHpmc19tb3VudChzcGEsIDAsICZ6ZnNtb3Vu dCkpICE9IDApIHsKLQkJRFBSSU5URigiRmFpbGVkIHRvIG1vdW50IHBvb2wgJyVzJyAoJWQpXG4i LCBzcGEtPnNwYV9uYW1lLCBlcnIpOwotCQlyZXR1cm4gKEVGSV9OT1RfRk9VTkQpOwotCX0KLQot CWlmICgoZXJyID0gemZzX2xvb2t1cCgmemZzbW91bnQsIGZpbGVwYXRoLCAmZG4pKSAhPSAwKSB7 Ci0JCWlmIChlcnIgPT0gRU5PRU5UKSB7Ci0JCQlEUFJJTlRGKCJGYWlsZWQgdG8gZmluZCAnJXMn IG9uIHBvb2wgJyVzJyAoJWQpXG4iLAotCQkJICAgIGZpbGVwYXRoLCBzcGEtPnNwYV9uYW1lLCBl cnIpOwotCQkJcmV0dXJuIChFRklfTk9UX0ZPVU5EKTsKLQkJfQotCQlwcmludGYoIkZhaWxlZCB0 byBsb29rdXAgJyVzJyBvbiBwb29sICclcycgKCVkKVxuIiwgZmlsZXBhdGgsCi0JCSAgICBzcGEt PnNwYV9uYW1lLCBlcnIpOwotCQlyZXR1cm4gKEVGSV9JTlZBTElEX1BBUkFNRVRFUik7Ci0JfQot Ci0JaWYgKChlcnIgPSB6ZnNfZG5vZGVfc3RhdChzcGEsICZkbiwgJnN0KSkgIT0gMCkgewotCQlw cmludGYoIkZhaWxlZCB0byBzdGF0ICclcycgb24gcG9vbCAnJXMnICglZClcbiIsIGZpbGVwYXRo LAotCQkgICAgc3BhLT5zcGFfbmFtZSwgZXJyKTsKLQkJcmV0dXJuIChFRklfSU5WQUxJRF9QQVJB TUVURVIpOwotCX0KLQotCWlmICgoc3RhdHVzID0gYnMtPkFsbG9jYXRlUG9vbChFZmlMb2FkZXJE YXRhLCAoVUlOVE4pc3Quc3Rfc2l6ZSwgJmJ1ZikpCi0JICAgICE9IEVGSV9TVUNDRVNTKSB7Ci0J CXByaW50ZigiRmFpbGVkIHRvIGFsbG9jYXRlIGxvYWQgYnVmZmVyICV6ZCBmb3IgcG9vbCAnJXMn IGZvciAnJXMnICIKLQkJICAgICIoJWx1KVxuIiwgc3Quc3Rfc2l6ZSwgc3BhLT5zcGFfbmFtZSwg ZmlsZXBhdGgsIEVGSV9FUlJPUl9DT0RFKHN0YXR1cykpOwotCQlyZXR1cm4gKEVGSV9JTlZBTElE X1BBUkFNRVRFUik7Ci0JfQotCi0JaWYgKChlcnIgPSBkbm9kZV9yZWFkKHNwYSwgJmRuLCAwLCBi dWYsIHN0LnN0X3NpemUpKSAhPSAwKSB7Ci0JCXByaW50ZigiRmFpbGVkIHRvIHJlYWQgbm9kZSBm cm9tICVzICglZClcbiIsIHNwYS0+c3BhX25hbWUsCi0JCSAgICBlcnIpOwotCQkodm9pZClicy0+ RnJlZVBvb2woYnVmKTsKLQkJcmV0dXJuIChFRklfSU5WQUxJRF9QQVJBTUVURVIpOwotCX0KLQot CSpidWZzaXplID0gc3Quc3Rfc2l6ZTsKLQkqYnVmcCA9IGJ1ZjsKLQotCXJldHVybiAoRUZJX1NV Q0NFU1MpOwotfQotCi1zdGF0aWMgdm9pZAotc3RhdHVzKHZvaWQpCi17Ci0Jc3BhX3QgKnNwYTsK LQotCXNwYSA9IFNUQUlMUV9GSVJTVCgmemZzX3Bvb2xzKTsKLQlpZiAoc3BhID09IE5VTEwpIHsK LQkJcHJpbnRmKCIlcyBmb3VuZCBubyBwb29sc1xuIiwgemZzX21vZHVsZS5uYW1lKTsKLQkJcmV0 dXJuOwotCX0KLQotCXByaW50ZigiJXMgZm91bmQgdGhlIGZvbGxvd2luZyBwb29sczoiLCB6ZnNf bW9kdWxlLm5hbWUpOwotCVNUQUlMUV9GT1JFQUNIKHNwYSwgJnpmc19wb29scywgc3BhX2xpbmsp Ci0JCXByaW50ZigiICVzIiwgc3BhLT5zcGFfbmFtZSk7Ci0KLQlwcmludGYoIlxuIik7Ci19Ci0K LXN0YXRpYyB2b2lkCi1pbml0KHZvaWQpCi17Ci0KLQl6ZnNfaW5pdCgpOwotfQotCi1zdGF0aWMg ZGV2X2luZm9fdCAqCi1fZGV2aWNlcyh2b2lkKQotewotCi0JcmV0dXJuIChkZXZpY2VzKTsKLX0K LQotY29uc3QgYm9vdF9tb2R1bGVfdCB6ZnNfbW9kdWxlID0KLXsKLQkubmFtZSA9ICJaRlMiLAot CS5pbml0ID0gaW5pdCwKLQkucHJvYmUgPSBwcm9iZSwKLQkubG9hZCA9IGxvYWQsCi0JLnN0YXR1 cyA9IHN0YXR1cywKLQkuZGV2aWNlcyA9IF9kZXZpY2VzCi19OwpkaWZmIC0tZ2l0IHN5cy9ib290 L2VmaS9kcml2ZXJzL01ha2VmaWxlIHN5cy9ib290L2VmaS9kcml2ZXJzL01ha2VmaWxlCm5ldyBm aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi41ZTFmMThiZTI1MgotLS0gL2Rldi9u dWxsCisrKyBzeXMvYm9vdC9lZmkvZHJpdmVycy9NYWtlZmlsZQpAQCAtMCwwICsxLDM0IEBACisj ICRGcmVlQlNEJAorCisuaW5jbHVkZSA8c3JjLm9wdHMubWs+CisKK0xJQj0JZWZpX2RyaXZlcnMK K0lOVEVSTkFMTElCPQorV0FSTlM/PQkyCisKK1NSQ1M9CWVmaXBhcnQuYyBmc19kcml2ZXIuYwor CisuaWYgJHtNQUNISU5FX0NQVUFSQ0h9ID09ICJhYXJjaDY0IgorQ0ZMQUdTKz0JLW1zb2Z0LWZs b2F0IC1tZ2VuZXJhbC1yZWdzLW9ubHkKKy5lbmRpZgorLmlmICR7TUFDSElORV9BUkNIfSA9PSAi YW1kNjQiCitDRkxBR1MrPSAtZlBJQyAtbW5vLXJlZC16b25lCisuZW5kaWYKKy5pZiAke01LX1pG U30gIT0gIm5vIgorQ0ZMQUdTKz0JLUkkey5DVVJESVJ9Ly4uLy4uL3pmcworQ0ZMQUdTKz0JLUkk ey5DVVJESVJ9Ly4uLy4uLy4uL2NkZGwvYm9vdC96ZnMKK0NGTEFHUys9CS1ERUZJX1pGU19CT09U CisuZW5kaWYKKworQ0ZMQUdTKz0gLUkkey5DVVJESVJ9Ly4uL2luY2x1ZGUKK0NGTEFHUys9IC1J JHsuQ1VSRElSfS8uLi9pbmNsdWRlLyR7TUFDSElORX0KK0NGTEFHUys9IC1JJHsuQ1VSRElSfS8u Li8uLi8uLi8uLi9saWIvbGlic3RhbmQKKworIyBQaWNrIHVwIHRoZSBib290c3RyYXAgaGVhZGVy IGZvciBzb21lIGludGVyZmFjZSBpdGVtcworQ0ZMQUdTKz0gLUkkey5DVVJESVJ9Ly4uLy4uL2Nv bW1vbgorCisjIEhhbmRsZSBGcmVlQlNEIHNwZWNpZmljICViIGFuZCAlRCBwcmludGYgZm9ybWF0 IHNwZWNpZmllcnMKK0NGTEFHUys9ICR7Rk9STUFUX0VYVEVOU0lPTlN9CitDRkxBR1MrPSAtRFRF Uk1fRU1VCisKKy5pbmNsdWRlIDxic2QubGliLm1rPgpkaWZmIC0tZ2l0IHN5cy9ib290L2VmaS9k cml2ZXJzL2VmaV9kcml2ZXJzLmggc3lzL2Jvb3QvZWZpL2RyaXZlcnMvZWZpX2RyaXZlcnMuaApu ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uMGM1OTlkMTdhZjkKLS0tIC9k ZXYvbnVsbAorKysgc3lzL2Jvb3QvZWZpL2RyaXZlcnMvZWZpX2RyaXZlcnMuaApAQCAtMCwwICsx LDQyIEBACisvKi0KKyAqIENvcHlyaWdodCAoYykgMjAxNiBFcmljIE1jQ29ya2xlCisgKiBBbGwg cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE RUQgQlkgVEhFIEFVVEhPUiBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKKyAqIEFOWSBF WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg VE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU TkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqIEFSRSBESVNDTEFJTUVELiAgSU4gTk8g RVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCisgKiBGT1Ig QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1Ig Q09OU0VRVUVOVElBTAorICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKKyAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9G IFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorICogSE9X RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP TlRSQUNULCBTVFJJQ1QKKyAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VO Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKKyAqIE9VVCBPRiBUSEUgVVNFIE9G IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAq IFNVQ0ggREFNQUdFLgorICoKKyAqICRGcmVlQlNEJAorICovCisKKyNpZm5kZWYgX0VGSV9EUklW RVJTX0hfCisjZGVmaW5lIF9FRklfRFJJVkVSU19IXworCit0eXBlZGVmIHN0cnVjdCBlZmlfZHJp dmVyX3QgeworICAgICAgICBjb25zdCBjaGFyICpuYW1lOworICAgICAgICB2b2lkICgqaW5pdCko dm9pZCk7Cit9IGVmaV9kcml2ZXJfdDsKKworZXh0ZXJuIHN0cnVjdCBkZXZzdyBlZmlwYXJ0X2Rl djsKKworLyogRUZJIGRyaXZlcnMuICovCitleHRlcm4gY29uc3QgZWZpX2RyaXZlcl90IGZzX2Ry aXZlcjsKKworI2VuZGlmCmRpZmYgLS1naXQgc3lzL2Jvb3QvZWZpL2xpYmVmaS9lZmlwYXJ0LmMg c3lzL2Jvb3QvZWZpL2RyaXZlcnMvZWZpcGFydC5jCnNpbWlsYXJpdHkgaW5kZXggNzUlCnJlbmFt ZSBmcm9tIHN5cy9ib290L2VmaS9saWJlZmkvZWZpcGFydC5jCnJlbmFtZSB0byBzeXMvYm9vdC9l ZmkvZHJpdmVycy9lZmlwYXJ0LmMKaW5kZXggNWE5OTM4MTJiY2UuLjNlM2E5YzA0YTE3IDEwMDY0 NAotLS0gc3lzL2Jvb3QvZWZpL2xpYmVmaS9lZmlwYXJ0LmMKKysrIHN5cy9ib290L2VmaS9kcml2 ZXJzL2VmaXBhcnQuYwpAQCAtNzQsOTAgKzc0LDEwOSBAQCBzdGF0aWMgaW50IG5wZGluZm8gPSAw OwogCiAjZGVmaW5lIFBEKGRldikgICAgICAgICAocGRpbmZvWyhkZXYpLT5kX3VuaXRdKQogCitz dGF0aWMgRUZJX1NUQVRVUworZWZpcGFydF9zdXBwb3J0ZWQoRUZJX0RSSVZFUl9CSU5ESU5HICpU aGlzLCBFRklfSEFORExFIGhhbmRsZSwKKyAgICAgICAgICAgICAgICAgIEVGSV9ERVZJQ0VfUEFU SCAqUmVtYWluaW5nRGV2aWNlUGF0aCBfX3VudXNlZCkKK3sKKyAgICAgICAgcmV0dXJuIEJTLT5P cGVuUHJvdG9jb2woaGFuZGxlLCAmYmxraW9fZ3VpZCwKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgTlVMTCwgSUgsIGhhbmRsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgRUZJX09QRU5fUFJPVE9DT0xfVEVTVF9QUk9UT0NPTCk7Cit9CisKK3N0YXRpYyBFRklfU1RB VFVTCitlZmlwYXJ0X3N0YXJ0KEVGSV9EUklWRVJfQklORElORyAqVGhpcywgRUZJX0hBTkRMRSBo YW5kbGUsCisgICAgICAgICAgICAgIEVGSV9ERVZJQ0VfUEFUSCAqUmVtYWluaW5nRGV2aWNlUGF0 aCBfX3VudXNlZCwKKyAgICAgICAgICAgICAgdV9pbnQqIG5kaXNrLCB1aW50KiBucmRpc2spCit7 CisgICAgICAgIEVGSV9CTE9DS19JTyAqYmxraW87CisgICAgICAgIEVGSV9ERVZJQ0VfUEFUSCAq ZGV2cGF0aCwgKmRldnBhdGhjcHksICp0bXBkZXZwYXRoLCAqbm9kZTsKKwlFRklfU1RBVFVTIHN0 YXR1czsKKyAgICAgICAgRUZJX0hBTkRMRSBhbGlhczsKKworICAgICAgICBkZXZwYXRoID0gZWZp X2xvb2t1cF9kZXZwYXRoKGhhbmRsZSk7CisKKyAgICAgICAgaWYgKGRldnBhdGggPT0gTlVMTCkg eworICAgICAgICAgICAgICAgIHJldHVybiAoRUZJX0RFVklDRV9FUlJPUik7CisgICAgICAgIH0K KworICAgICAgICBzdGF0dXMgPSBCUy0+SGFuZGxlUHJvdG9jb2woaGFuZGxlLCAmYmxraW9fZ3Vp ZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2b2lkKiopJmJsa2lvKTsK KyAgICAgICAgaWYgKEVGSV9FUlJPUihzdGF0dXMpKQorICAgICAgICAgICAgICAgIHJldHVybiAo c3RhdHVzKTsKKworICAgICAgICBpZiAoIWJsa2lvLT5NZWRpYS0+TG9naWNhbFBhcnRpdGlvbikg eworICAgICAgICAgICAgICAgICpucmRpc2srKzsKKyAgICAgICAgICAgICAgICByZXR1cm4gKEVG SV9VTlNVUFBPUlRFRCk7CisgICAgICAgIH0KKworICAgICAgICAvKgorICAgICAgICAgKiBJZiB3 ZSBjb21lIGFjcm9zcyBhIGxvZ2ljYWwgcGFydGl0aW9uIG9mIHN1YnR5cGUgQ0RST00KKyAgICAg ICAgICogaXQgZG9lc24ndCByZWZlciB0byB0aGUgQ0QgZmlsZXN5c3RlbSBpdHNlbGYsIGJ1dCBy YXRoZXIKKyAgICAgICAgICogdG8gYW55IHVzYWJsZSBFbCBUb3JpdG8gYm9vdCBpbWFnZSBvbiBp dC4gSW4gdGhpcyBjYXNlCisgICAgICAgICAqIHdlIHRyeSB0byBmaW5kIHRoZSBwYXJlbnQgZGV2 aWNlIGFuZCBhZGQgdGhhdCBpbnN0ZWFkIGFzCisgICAgICAgICAqIHRoYXQgd2lsbCBiZSB0aGUg Q0QgZmlsZXN5c3RlbS4KKyAgICAgICAgICovCisgICAgICAgIG5vZGUgPSBlZmlfZGV2cGF0aF9s YXN0X25vZGUoZGV2cGF0aCk7CisgICAgICAgIGlmIChEZXZpY2VQYXRoVHlwZShub2RlKSA9PSBN RURJQV9ERVZJQ0VfUEFUSCAmJgorICAgICAgICAgICAgRGV2aWNlUGF0aFN1YlR5cGUobm9kZSkg PT0gTUVESUFfQ0RST01fRFApIHsKKyAgICAgICAgICAgICAgICBkZXZwYXRoY3B5ID0gZWZpX2Rl dnBhdGhfdHJpbShkZXZwYXRoKTsKKyAgICAgICAgICAgICAgICB0bXBkZXZwYXRoID0gZGV2cGF0 aGNweTsKKyAgICAgICAgICAgICAgICBzdGF0dXMgPSBCUy0+TG9jYXRlRGV2aWNlUGF0aCgmYmxr aW9fZ3VpZCwgJnRtcGRldnBhdGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgJmFsaWFzKTsKKyAgICAgICAgICAgICAgICBmcmVlKGRldnBhdGhjcHkpOwor CisgICAgICAgICAgICAgICAgaWYgKEVGSV9FUlJPUihzdGF0dXMpKQorICAgICAgICAgICAgICAg ICAgICAgICAgcmV0dXJuIChzdGF0dXMpOworCisgICAgICAgICAgICAgICAgZWZpX3JlZ2lzdGVy X2hhbmRsZSgmZWZpcGFydF9kZXYsIGhhbmRsZSwgYWxpYXMpOworICAgICAgICB9IGVsc2UKKyAg ICAgICAgICAgICAgICBlZmlfcmVnaXN0ZXJfaGFuZGxlKCZlZmlwYXJ0X2RldiwgaGFuZGxlLCBO VUxMKTsKKworICAgICAgICBwZGluZm9bbnBkaW5mb10ucGRfb3BlbiA9IDA7CisgICAgICAgIHBk aW5mb1tucGRpbmZvXS5wZF9iY2FjaGUgPSBOVUxMOworICAgICAgICBwZGluZm9bbnBkaW5mb10u cGRfdW5pdCA9IG5wZGluZm87CisgICAgICAgIG5wZGluZm8rKzsKKyAgICAgICAgKm5kaXNrKys7 CisKKyAgICAgICAgcmV0dXJuIChFRklfU1VDQ0VTUyk7Cit9CisKIHN0YXRpYyBpbnQKLWVmaXBh cnRfaW5pdCh2b2lkKSAKK2VmaXBhcnRfaW5pdCh2b2lkKQogewotCUVGSV9CTE9DS19JTyAqYmxr aW87Ci0JRUZJX0RFVklDRV9QQVRIICpkZXZwYXRoLCAqZGV2cGF0aGNweSwgKnRtcGRldnBhdGgs ICpub2RlOwotCUVGSV9IQU5ETEUgKmhpbiwgKmhvdXQsICphbGlhc2VzLCBoYW5kbGU7CisJRUZJ X0hBTkRMRSAqaGFuZGxlczsKIAlFRklfU1RBVFVTIHN0YXR1czsKIAlVSU5UTiBzejsKLQl1X2lu dCBuLCBuaW4sIG5vdXQsIG5yZGlzazsKKyAgICAgICAgdV9pbnQgbiwgbmluLCBuZGlzaywgbnJk aXNrOwogCWludCBlcnI7CiAKIAlzeiA9IDA7Ci0JaGluID0gTlVMTDsKKwloYW5kbGVzID0gTlVM TDsKIAlzdGF0dXMgPSBCUy0+TG9jYXRlSGFuZGxlKEJ5UHJvdG9jb2wsICZibGtpb19ndWlkLCAw LCAmc3osIDApOwogCWlmIChzdGF0dXMgPT0gRUZJX0JVRkZFUl9UT09fU01BTEwpIHsKLQkJaGlu ID0gKEVGSV9IQU5ETEUgKiltYWxsb2Moc3ogKiAzKTsKKwkJaGFuZGxlcyA9IChFRklfSEFORExF ICopbWFsbG9jKHN6KTsKIAkJc3RhdHVzID0gQlMtPkxvY2F0ZUhhbmRsZShCeVByb3RvY29sLCAm YmxraW9fZ3VpZCwgMCwgJnN6LAotCQkgICAgaGluKTsKKwkJICAgIGhhbmRsZXMpOwogCQlpZiAo RUZJX0VSUk9SKHN0YXR1cykpCi0JCQlmcmVlKGhpbik7CisJCQlmcmVlKGhhbmRsZXMpOwogCX0K IAlpZiAoRUZJX0VSUk9SKHN0YXR1cykpCiAJCXJldHVybiAoZWZpX3N0YXR1c190b19lcnJubyhz dGF0dXMpKTsKIAogCS8qIEZpbHRlciBoYW5kbGVzIHRvIG9ubHkgaW5jbHVkZSBGcmVlQlNEIHBh cnRpdGlvbnMuICovCiAJbmluID0gc3ogLyBzaXplb2YoRUZJX0hBTkRMRSk7Ci0JaG91dCA9IGhp biArIG5pbjsKLQlhbGlhc2VzID0gaG91dCArIG5pbjsKLQlub3V0ID0gMDsKLQlucmRpc2sgPSAw OwotCi0JYnplcm8oYWxpYXNlcywgbmluICogc2l6ZW9mKEVGSV9IQU5ETEUpKTsKIAlwZGluZm8g PSBtYWxsb2MobmluICogc2l6ZW9mKCpwZGluZm8pKTsKLQlpZiAocGRpbmZvID09IE5VTEwpCi0J CXJldHVybiAoRU5PTUVNKTsKKyAgICAgICAgbmRpc2sgPSAwOworICAgICAgICBucmRpc2sgPSAw OwogCiAJZm9yIChuID0gMDsgbiA8IG5pbjsgbisrKSB7Ci0JCWRldnBhdGggPSBlZmlfbG9va3Vw X2RldnBhdGgoaGluW25dKTsKLQkJaWYgKGRldnBhdGggPT0gTlVMTCkgewotCQkJY29udGludWU7 Ci0JCX0KLQotCQlzdGF0dXMgPSBCUy0+SGFuZGxlUHJvdG9jb2woaGluW25dLCAmYmxraW9fZ3Vp ZCwKLQkJICAgICh2b2lkKiopJmJsa2lvKTsKLQkJaWYgKEVGSV9FUlJPUihzdGF0dXMpKQotCQkJ Y29udGludWU7Ci0JCWlmICghYmxraW8tPk1lZGlhLT5Mb2dpY2FsUGFydGl0aW9uKSB7Ci0JCQlu cmRpc2srKzsKLQkJCWNvbnRpbnVlOwotCQl9Ci0KLQkJLyoKLQkJICogSWYgd2UgY29tZSBhY3Jv c3MgYSBsb2dpY2FsIHBhcnRpdGlvbiBvZiBzdWJ0eXBlIENEUk9NCi0JCSAqIGl0IGRvZXNuJ3Qg cmVmZXIgdG8gdGhlIENEIGZpbGVzeXN0ZW0gaXRzZWxmLCBidXQgcmF0aGVyCi0JCSAqIHRvIGFu eSB1c2FibGUgRWwgVG9yaXRvIGJvb3QgaW1hZ2Ugb24gaXQuIEluIHRoaXMgY2FzZQotCQkgKiB3 ZSB0cnkgdG8gZmluZCB0aGUgcGFyZW50IGRldmljZSBhbmQgYWRkIHRoYXQgaW5zdGVhZCBhcwot CQkgKiB0aGF0IHdpbGwgYmUgdGhlIENEIGZpbGVzeXN0ZW0uCi0JCSAqLwotCQlub2RlID0gZWZp X2RldnBhdGhfbGFzdF9ub2RlKGRldnBhdGgpOwotCQlpZiAoRGV2aWNlUGF0aFR5cGUobm9kZSkg PT0gTUVESUFfREVWSUNFX1BBVEggJiYKLQkJICAgIERldmljZVBhdGhTdWJUeXBlKG5vZGUpID09 IE1FRElBX0NEUk9NX0RQKSB7Ci0JCQlkZXZwYXRoY3B5ID0gZWZpX2RldnBhdGhfdHJpbShkZXZw YXRoKTsKLQkJCXRtcGRldnBhdGggPSBkZXZwYXRoY3B5OwotCQkJc3RhdHVzID0gQlMtPkxvY2F0 ZURldmljZVBhdGgoJmJsa2lvX2d1aWQsICZ0bXBkZXZwYXRoLAotCQkJICAgICZoYW5kbGUpOwot CQkJZnJlZShkZXZwYXRoY3B5KTsKLQkJCWlmIChFRklfRVJST1Ioc3RhdHVzKSkKLQkJCQljb250 aW51ZTsKLQkJCWhvdXRbbm91dF0gPSBoYW5kbGU7Ci0JCQlhbGlhc2VzW25vdXRdID0gaGluW25d OwotCQl9IGVsc2UKLQkJCWhvdXRbbm91dF0gPSBoaW5bbl07Ci0JCW5vdXQrKzsKLQkJcGRpbmZv W25wZGluZm9dLnBkX29wZW4gPSAwOwotCQlwZGluZm9bbnBkaW5mb10ucGRfYmNhY2hlID0gTlVM TDsKLQkJcGRpbmZvW25wZGluZm9dLnBkX3VuaXQgPSBucGRpbmZvOwotCQlucGRpbmZvKys7Cisg ICAgICAgICAgICAgICAgZWZpcGFydF9zdGFydChOVUxMLCBoYW5kbGVzW25dLCBOVUxMLCAmbmRp c2ssICZucmRpc2spOwogCX0KIAogCWJjYWNoZV9hZGRfZGV2KG5wZGluZm8pOwotCWVyciA9IGVm aV9yZWdpc3Rlcl9oYW5kbGVzKCZlZmlwYXJ0X2RldiwgaG91dCwgYWxpYXNlcywgbm91dCk7Ci0J ZnJlZShoaW4pOworCWZyZWUoaGFuZGxlcyk7CiAKLQlpZiAobm91dCA9PSAwICYmIG5yZGlzayA+ IDApCisJaWYgKG5kaXNrID09IDAgJiYgbnJkaXNrID4gMCkKIAkJcHJpbnRmKCJGb3VuZCAlZCBk aXNrKHMpIGJ1dCBubyBsb2dpY2FsIHBhcnRpdGlvblxuIiwgbnJkaXNrKTsKIAlyZXR1cm4gKGVy cik7CiB9CmRpZmYgLS1naXQgc3lzL2Jvb3QvZWZpL2RyaXZlcnMvZnNfZHJpdmVyLmMgc3lzL2Jv b3QvZWZpL2RyaXZlcnMvZnNfZHJpdmVyLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw MDAwMDAwMDAuLmI5Yzg1MzYyYTcxCi0tLSAvZGV2L251bGwKKysrIHN5cy9ib290L2VmaS9kcml2 ZXJzL2ZzX2RyaXZlci5jCkBAIC0wLDAgKzEsODUzIEBACisvKi0KKyAqIENvcHlyaWdodCAoYykg MjAxNiBFcmljIE1jQ29ya2xlCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0 aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9m IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K KyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFu ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIEFVVEhPUiBBTkQgQ09OVFJJQlVU T1JTIGBgQVMgSVMnJyBBTkQKKyAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVT IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UK KyAqIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBPUiBDT05U UklCVVRPUlMgQkUgTElBQkxFCisgKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U QUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorICogREFNQUdFUyAoSU5D TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P RFMKKyAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT SU5FU1MgSU5URVJSVVBUSU9OKQorICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkg T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKKyAqIExJQUJJTElUWSwg T1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO WSBXQVkKKyAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICoKKyAqICRGcmVlQlNE JAorICovCisKKyNpbmNsdWRlIDxzdGRkZWYuaD4KKyNpbmNsdWRlIDxzdGRhcmcuaD4KKyNpbmNs dWRlIDxzdGRib29sLmg+CisjaW5jbHVkZSA8c3lzL2NkZWZzLmg+CisjaW5jbHVkZSA8c3lzL3Bh cmFtLmg+CisjaW5jbHVkZSA8c3lzL3F1ZXVlLmg+CisjaW5jbHVkZSA8ZWZpLmg+CisjaW5jbHVk ZSA8ZWZpbGliLmg+CisjaW5jbHVkZSA8ZWZpcHJvdC5oPgorI2luY2x1ZGUgPHN0cmluZzE2Lmg+ CisjaWZkZWYgRUZJX1pGU19CT09UCisjaW5jbHVkZSA8bGliemZzLmg+CisjZW5kaWYKKyNpbmNs dWRlIDxib290c3RyYXAuaD4KKworI2luY2x1ZGUgImVmaV9kcml2ZXJzLmgiCisKK3N0YXRpYyBF RklfR1VJRCBTaW1wbGVGaWxlU3lzdGVtUHJvdG9jb2xHVUlEID0gU0lNUExFX0ZJTEVfU1lTVEVN X1BST1RPQ09MOworCitzdGF0aWMgc3RydWN0IGZzX29wcyAqYmFja2VuZF9maWxlX3N5c3RlbVtd ID0geworCSZkb3Nmc19mc29wcywKKwkmdWZzX2Zzb3BzLAorCSZjZDk2NjBfZnNvcHMsCisJJnRm dHBfZnNvcHMsCisJJm5mc19mc29wcywKKwkmZ3ppcGZzX2Zzb3BzLAorCSZiemlwZnNfZnNvcHMs CisJTlVMTAorfTsKKworc3RhdGljIHN0cnVjdCBkZXZzdyAqYmFja2VuZF9kZXZzd1tdID0gewor CSZlZmlwYXJ0X2RldiwKKyNpZmRlZiBFRklfWkZTX0JPT1QKKwkmemZzX2RldiwKKyNlbmRpZgor CU5VTEwKK307CisKK3R5cGVkZWYgc3RydWN0IHZvbGluZm9fdCB7CisgICAgICAgIHN0cnVjdCBm c19vcHMgKmZzb3BzOworICAgICAgICBzdHJ1Y3QgZGV2ZGVzYyAqZGV2OworfSB2b2xpbmZvX3Q7 CisKK3R5cGVkZWYgc3RydWN0IGZpbGVpbmZvX3QgeworICAgICAgICBjb25zdCB2b2xpbmZvX3Qq IHZpbmZvOworICAgICAgICBzdHJ1Y3Qgb3Blbl9maWxlIGZkYXRhOworICAgICAgICBjaGFyIHBh dGhbXTsKK30gZmlsZWluZm9fdDsKKworc3RhdGljIEVGSV9HVUlEIEZpbGVJbmZvR1VJRCA9IEVG SV9GSUxFX0lORk9fSUQ7OworCitzdGF0aWMgRUZJQVBJIEVGSV9TVEFUVVMKK2ZpbGVfb3Blbl9p bXBsKEVGSV9GSUxFX0hBTkRMRSBGaWxlLCBFRklfRklMRV9IQU5ETEUgKk5ld0hhbmRsZSwKKyAg ICAgICAgICAgICAgIENIQVIxNiAqRmlsZU5hbWUsIFVJTlQ2NCBPcGVuTW9kZSwgVUlOVDY0IEF0 dHJpYnV0ZXMpOworCitzdGF0aWMgRUZJQVBJIEVGSV9TVEFUVVMKK2ZpbGVfY2xvc2VfaW1wbChF RklfRklMRV9IQU5ETEUgRmlsZSk7CisKK3N0YXRpYyBFRklBUEkgRUZJX1NUQVRVUworZmlsZV9k ZWxldGVfaW1wbChFRklfRklMRV9IQU5ETEUgRmlsZSk7CisKK3N0YXRpYyBFRklBUEkgRUZJX1NU QVRVUworZGlyX3JlYWRfaW1wbChFRklfRklMRV9IQU5ETEUgRmlsZSwgVUlOVE4gKkJ1ZmZlclNp emUsIFZPSUQgKkJ1ZmZlcik7CisKK3N0YXRpYyBFRklBUEkgRUZJX1NUQVRVUworZGlyX3dyaXRl X2ltcGwoRUZJX0ZJTEVfSEFORExFIEZpbGUsIFVJTlROICpCdWZmZXJTaXplLAorICAgICAgICAg ICAgICAgVk9JRCAqQnVmZmVyKTsKKworc3RhdGljIEVGSUFQSSBFRklfU1RBVFVTCitmaWxlX3Jl YWRfaW1wbChFRklfRklMRV9IQU5ETEUgRmlsZSwgVUlOVE4gKkJ1ZmZlclNpemUsIFZPSUQgKkJ1 ZmZlcik7CisKK3N0YXRpYyBFRklBUEkgRUZJX1NUQVRVUworZmlsZV93cml0ZV9pbXBsKEVGSV9G SUxFX0hBTkRMRSBGaWxlLCBVSU5UTiAqQnVmZmVyU2l6ZSwKKyAgICAgICAgICAgICAgICBWT0lE ICpCdWZmZXIpOworCitzdGF0aWMgRUZJQVBJIEVGSV9TVEFUVVMKK2ZpbGVfc2V0X3Bvc2l0aW9u X2ltcGwoRUZJX0ZJTEVfSEFORExFIEZpbGUsIFVJTlQ2NCBQb3NpdGlvbik7CisKK3N0YXRpYyBF RklBUEkgRUZJX1NUQVRVUworZmlsZV9nZXRfcG9zaXRpb25faW1wbChFRklfRklMRV9IQU5ETEUg RmlsZSwgVUlOVDY0ICpQb3NpdGlvbik7CisKK3N0YXRpYyBFRklBUEkgRUZJX1NUQVRVUworZmls ZV9nZXRfaW5mb19pbXBsKEVGSV9GSUxFX0hBTkRMRSBGaWxlLCBFRklfR1VJRCAqSW5mb3JtYXRp b25UeXBlLAorICAgICAgICAgICAgICAgICAgIFVJTlROICpCdWZmZXJTaXplLCBWT0lEICpCdWZm ZXIpOworCitzdGF0aWMgRUZJQVBJIEVGSV9TVEFUVVMKK2ZpbGVfc2V0X2luZm9faW1wbChFRklf RklMRV9IQU5ETEUgRmlsZSwgRUZJX0dVSUQgKkluZm9ybWF0aW9uVHlwZSwKKyAgICAgICAgICAg ICAgICAgICBVSU5UTiBCdWZmZXJTaXplLCBWT0lEICpCdWZmZXIpOworCitzdGF0aWMgRUZJQVBJ IEVGSV9TVEFUVVMKK2ZpbGVfZmx1c2hfaW1wbChFRklfRklMRV9IQU5ETEUgRmlsZSk7CisKK3N0 YXRpYyBzdHJ1Y3QgZGV2ZGVzYyoKK2Nsb25lX2RldmRlc2Moc3RydWN0IGRldmRlc2MgKmRldikK K3sKKyAgICAgICAgc3RydWN0IGRldmRlc2MgKm91dDsKKworICAgICAgICBzd2l0Y2goZGV2LT5k X2Rldi0+ZHZfdHlwZSkgeworICAgICAgICBjYXNlIERFVlRfWkZTOgorICAgICAgICAgICAgICAg IG91dCA9IG1hbGxvYyhzaXplb2Yoc3RydWN0IHpmc19kZXZkZXNjKSk7CisKKyAgICAgICAgICAg ICAgICBpZiAob3V0ID09IE5VTEwpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBO VUxMOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIG1lbWNweShvdXQsIGRl diwgc2l6ZW9mKHN0cnVjdCB6ZnNfZGV2ZGVzYykpOworCisgICAgICAgICAgICAgICAgcmV0dXJu IG91dDsKKworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIG91dCA9IG1hbGxvYyhz aXplb2Yoc3RydWN0IGRldmRlc2MpKTsKKworICAgICAgICAgICAgICAgIGlmIChvdXQgPT0gTlVM TCkgeworICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgICAgICAg ICAgfQorCisgICAgICAgICAgICAgICAgbWVtY3B5KG91dCwgZGV2LCBzaXplb2Yoc3RydWN0IGRl dmRlc2MpKTsKKworICAgICAgICAgICAgICAgIHJldHVybiBvdXQ7CisgICAgICAgIH0KK30KKwor c3RhdGljIEVGSV9TVEFUVVMKK2RvX2ZpbGVfb3Blbihjb25zdCB2b2xpbmZvX3QgKnZpbmZvLCBj b25zdCBjaGFyIGZpbGVwYXRoW10sCisgICAgICAgICAgICAgaW50IG1vZGUsIEVGSV9GSUxFX0hB TkRMRSAqb3V0KQoreworICAgICAgICBFRklfRklMRV9IQU5ETEUgZmhhbmRsZTsKKyAgICAgICAg ZmlsZWluZm9fdCAqZmluZm87CisgICAgICAgIHN0cnVjdCBzdGF0IHN0OworICAgICAgICBzdHJ1 Y3QgZGV2ZGVzYyAqdG1wZGV2OworCWludCBlcnI7CisKKyAgICAgICAgbWVtc2V0KCZzdCwgMCwg c2l6ZW9mKHN0cnVjdCBzdGF0KSk7CisgICAgICAgIGZoYW5kbGUgPSBtYWxsb2Moc2l6ZW9mKEVG SV9GSUxFKSArIHNpemVvZihmaWxlaW5mb190KSArCisgICAgICAgICAgICAgICAgICAgICAgICAg c3RybGVuKGZpbGVwYXRoKSArIDEpOworCisgICAgICAgIGlmIChmaGFuZGxlID09IE5VTEwpIHsK KyAgICAgICAgICAgICAgICByZXR1cm4gKEVGSV9PVVRfT0ZfUkVTT1VSQ0VTKTsKKyAgICAgICAg fQorCisgICAgICAgIHRtcGRldiA9IGNsb25lX2RldmRlc2ModmluZm8tPmRldik7CisKKyAgICAg ICAgaWYgKHRtcGRldiA9PSBOVUxMKSB7CisgICAgICAgICAgICAgICAgZnJlZShmaGFuZGxlKTsK KyAgICAgICAgICAgICAgICByZXR1cm4gKEVGSV9PVVRfT0ZfUkVTT1VSQ0VTKTsKKyAgICAgICAg fQorCisgICAgICAgIGZpbmZvID0gKGZpbGVpbmZvX3QqKShmaGFuZGxlICsgMSk7CisgICAgICAg IGZpbmZvLT5mZGF0YS5mX2ZsYWdzID0gbW9kZSArIDE7CisgICAgICAgIGZpbmZvLT5mZGF0YS5m X2RldiA9IE5VTEw7CisgICAgICAgIGZpbmZvLT5mZGF0YS5mX29wcyA9IE5VTEw7CisgICAgICAg IGZpbmZvLT5mZGF0YS5mX29mZnNldCA9IDA7CisgICAgICAgIGZpbmZvLT5mZGF0YS5mX2RldmRh dGEgPSBOVUxMOworCisgICAgICAgIGlmICgoZXJyID0gdmluZm8tPmRldi0+ZF9kZXYtPmR2X29w ZW4oJihmaW5mby0+ZmRhdGEpLCB0bXBkZXYpKSAhPSAwKSB7CisgICAgICAgICAgICAgICAgZnJl ZShmaGFuZGxlKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gKGVycm5vX3RvX2VmaV9zdGF0dXMo ZXJyKSk7CisgICAgICAgIH0KKworICAgICAgICBmaW5mby0+ZmRhdGEuZl9kZXYgPSB2aW5mby0+ ZGV2LT5kX2RldjsKKworICAgICAgICBpZiAoKGVyciA9IHZpbmZvLT5mc29wcy0+Zm9fb3Blbihm aWxlcGF0aCwgJihmaW5mby0+ZmRhdGEpKSkgIT0gMCkgeworICAgICAgICAgICAgICAgIGZyZWUo ZmhhbmRsZSk7CisgICAgICAgICAgICAgICAgcmV0dXJuIChlcnJub190b19lZmlfc3RhdHVzKGVy cikpOworICAgICAgICB9CisKKyAgICAgICAgZmluZm8tPmZkYXRhLmZfb3BzID0gdmluZm8tPmZz b3BzOworCisgICAgICAgIGlmICgoZXJyID0gdmluZm8tPmZzb3BzLT5mb19zdGF0KCYoZmluZm8t PmZkYXRhKSwgJnN0KSkgIT0gMCkgeworICAgICAgICAgICAgICAgIGZyZWUoZmhhbmRsZSk7Cisg ICAgICAgICAgICAgICAgcmV0dXJuIChlcnJub190b19lZmlfc3RhdHVzKGVycikpOworICAgICAg ICB9CisKKyAgICAgICAgc3RyY3B5KGZpbmZvLT5wYXRoLCBmaWxlcGF0aCk7CisgICAgICAgIGZp bmZvLT52aW5mbyA9IHZpbmZvOworICAgICAgICBmaGFuZGxlLT5SZXZpc2lvbiA9IEVGSV9GSUxF X0hBTkRMRV9SRVZJU0lPTjsKKyAgICAgICAgZmhhbmRsZS0+T3BlbiA9IGZpbGVfb3Blbl9pbXBs OworICAgICAgICBmaGFuZGxlLT5DbG9zZSA9IGZpbGVfY2xvc2VfaW1wbDsKKyAgICAgICAgZmhh bmRsZS0+RGVsZXRlID0gZmlsZV9kZWxldGVfaW1wbDsKKyAgICAgICAgZmhhbmRsZS0+U2V0UG9z aXRpb24gPSBmaWxlX3NldF9wb3NpdGlvbl9pbXBsOworICAgICAgICBmaGFuZGxlLT5HZXRQb3Np dGlvbiA9IGZpbGVfZ2V0X3Bvc2l0aW9uX2ltcGw7CisgICAgICAgIGZoYW5kbGUtPkdldEluZm8g PSBmaWxlX2dldF9pbmZvX2ltcGw7CisgICAgICAgIGZoYW5kbGUtPlNldEluZm8gPSBmaWxlX3Nl dF9pbmZvX2ltcGw7CisgICAgICAgIGZoYW5kbGUtPkZsdXNoID0gZmlsZV9mbHVzaF9pbXBsOwor CisgICAgICAgIGlmIChTX0lTRElSKHN0LnN0X21vZGUpKSB7CisgICAgICAgICAgICAgICAgZmhh bmRsZS0+UmVhZCA9IGRpcl9yZWFkX2ltcGw7CisgICAgICAgICAgICAgICAgZmhhbmRsZS0+V3Jp dGUgPSBkaXJfd3JpdGVfaW1wbDsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBm aGFuZGxlLT5SZWFkID0gZmlsZV9yZWFkX2ltcGw7CisgICAgICAgICAgICAgICAgZmhhbmRsZS0+ V3JpdGUgPSBmaWxlX3dyaXRlX2ltcGw7CisgICAgICAgIH0KKworICAgICAgICAqb3V0ID0gZmhh bmRsZTsKKworICAgICAgICByZXR1cm4gKEVGSV9TVUNDRVNTKTsKK30KKworc3RhdGljIGludAor bW9kZV9mcm9tX2VmaShVSU5UNjQgZWZpX21vZGUpCit7CisgICAgICAgIGludCBtb2RlID0gMDsK KworICAgICAgICBpZiAoZWZpX21vZGUgJiBFRklfRklMRV9NT0RFX1dSSVRFKSB7CisgICAgICAg ICAgICAgICAgbW9kZSB8PSBPX1dST05MWTsKKyAgICAgICAgfSBlbHNlIGlmIChlZmlfbW9kZSAm IEVGSV9GSUxFX01PREVfUkVBRCkgeworICAgICAgICAgICAgICAgIG1vZGUgfD0gT19SRE9OTFk7 CisgICAgICAgIH0gZWxzZSBpZiAoZWZpX21vZGUgJiBFRklfRklMRV9NT0RFX1JFQUQgJiYKKyAg ICAgICAgICAgICAgICAgICBlZmlfbW9kZSAmIEVGSV9GSUxFX01PREVfV1JJVEUpIHsKKyAgICAg ICAgICAgICAgICBtb2RlIHw9IE9fUkRXUjsKKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiBt b2RlOworfQorCitzdGF0aWMgVUlOVDY0Cittb2RlX3RvX2VmaShpbnQgbW9kZSkKK3sKKyAgICAg ICAgVUlOVDY0IGVmaV9tb2RlID0gMDsKKworICAgICAgICBpZiAobW9kZSAmIE9fV1JPTkxZKSB7 CisgICAgICAgICAgICAgICAgZWZpX21vZGUgfD0gRUZJX0ZJTEVfTU9ERV9XUklURTsKKyAgICAg ICAgfSBlbHNlIGlmIChtb2RlICYgT19SRE9OTFkpIHsKKyAgICAgICAgICAgICAgICBlZmlfbW9k ZSB8PSBFRklfRklMRV9NT0RFX1JFQUQ7CisgICAgICAgIH0gZWxzZSBpZiAobW9kZSAmIE9fUkRX UikgeworICAgICAgICAgICAgICAgIGVmaV9tb2RlIHw9IEVGSV9GSUxFX01PREVfUkVBRDsKKyAg ICAgICAgICAgICAgICBlZmlfbW9kZSB8PSBFRklfRklMRV9NT0RFX1dSSVRFOworICAgICAgICB9 CisKKyAgICAgICAgcmV0dXJuIChlZmlfbW9kZSk7Cit9CisKK3N0YXRpYyBFRklBUEkgRUZJX1NU QVRVUworZmlsZV9vcGVuX2ltcGwoRUZJX0ZJTEVfSEFORExFIEZpbGUsIEVGSV9GSUxFX0hBTkRM RSAqTmV3SGFuZGxlLAorICAgICAgICAgICAgICAgQ0hBUjE2ICpGaWxlTmFtZSwgVUlOVDY0IE9w ZW5Nb2RlLCBVSU5UNjQgQXR0cmlidXRlcykKK3sKKyAgICAgICAgZmlsZWluZm9fdCAqZmluZm8g PSAoZmlsZWluZm9fdCopKEZpbGUgKyAxKTsKKyAgICAgICAgY2hhciBidWZbc3RybGVuKGZpbmZv LT5wYXRoKSArIHN0cmxlbjE2KEZpbGVOYW1lKSArIDFdOworCisgICAgICAgIHN0cmNweV9mcm9t XzE2KHN0cGNweShidWYsIGZpbmZvLT5wYXRoKSwgRmlsZU5hbWUpOworCisgICAgICAgIHJldHVy biBkb19maWxlX29wZW4oZmluZm8tPnZpbmZvLCBidWYsCisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgbW9kZV9mcm9tX2VmaShPcGVuTW9kZSksIE5ld0hhbmRsZSk7Cit9CisKK3N0YXRpYyBF RklBUEkgRUZJX1NUQVRVUworZmlsZV9jbG9zZV9pbXBsKEVGSV9GSUxFX0hBTkRMRSBGaWxlKQor eworICAgICAgICBmaWxlaW5mb190ICpmaW5mbyA9IChmaWxlaW5mb190KikoRmlsZSArIDEpOwor ICAgICAgICBpbnQgcmVzOworCisgICAgICAgIGlmICgocmVzID0gZmluZm8tPmZkYXRhLmZfb3Bz LT5mb19jbG9zZSgmKGZpbmZvLT5mZGF0YSkpKSAhPSAwKSB7CisgICAgICAgICAgICAgICAgcmV0 dXJuIChlcnJub190b19lZmlfc3RhdHVzKHJlcykpOworICAgICAgICB9CisKKyAgICAgICAgaWYg KChyZXMgPSBmaW5mby0+dmluZm8tPmRldi0+ZF9kZXYtPmR2X2Nsb3NlKCYoZmluZm8tPmZkYXRh KSkpICE9IDApIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gKGVycm5vX3RvX2VmaV9zdGF0dXMo cmVzKSk7CisgICAgICAgIH0KKworICAgICAgICBmcmVlKEZpbGUpOworICAgICAgICByZXR1cm4g KEVGSV9TVUNDRVNTKTsKK30KKworc3RhdGljIEVGSUFQSSBFRklfU1RBVFVTCitmaWxlX2RlbGV0 ZV9pbXBsKEVGSV9GSUxFX0hBTkRMRSBGaWxlKQoreworICAgICAgICBmaWxlX2Nsb3NlX2ltcGwo RmlsZSk7CisKKyAgICAgICAgcmV0dXJuIChFRklfV0FSTl9ERUxFVEVfRkFJTFVSRSk7Cit9CisK K3N0YXRpYyBFRklBUEkgRUZJX1NUQVRVUworZGlyX3JlYWRfaW1wbChFRklfRklMRV9IQU5ETEUg RmlsZSwgVUlOVE4gKkJ1ZmZlclNpemUsIFZPSUQgKkJ1ZmZlcikKK3sKKyAgICAgICAgZmlsZWlu Zm9fdCAqZmluZm8gPSAoZmlsZWluZm9fdCopKEZpbGUgKyAxKTsKKyAgICAgICAgZmlsZWluZm9f dCAqZW50aW5mbzsKKyAgICAgICAgc3RydWN0IGRpcmVudCBkOworICAgICAgICBzdHJ1Y3Qgc3Rh dCBzdDsKKyAgICAgICAgaW50IGVycjsKKyAgICAgICAgVUlOVE4gY3VycnNpemUgPSAqQnVmZmVy U2l6ZTsKKyAgICAgICAgVUlOVE4gcmVxc2l6ZTsKKyAgICAgICAgRUZJX0ZJTEVfSU5GTyAqb3V0 ID0gKEVGSV9GSUxFX0lORk8qKUJ1ZmZlcjsKKyAgICAgICAgRUZJX0ZJTEVfSEFORExFIGVudGhh bmRsZTsKKyAgICAgICAgRUZJX1NUQVRVUyBzdGF0dXM7CisgICAgICAgIG9mZl90IGN1cnJwb3M7 CisKKyAgICAgICAgLyogUmVjb3JkIHRlaCBjdXJyZW50IHBvc2l0aW9uIHNvIHdlIGNhbiByZXdp bmQgaWYgd2UgaGF2ZSB0byAqLworICAgICAgICBpZiAoKGN1cnJwb3MgPSBmaW5mby0+ZmRhdGEu Zl9vcHMtPmZvX3NlZWsoJihmaW5mby0+ZmRhdGEpLAorICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAwLCBTRUVLX0NVUikpIDwgMCkgeworICAgICAgICAg ICAgICAgIHJldHVybiAoZXJybm9fdG9fZWZpX3N0YXR1cyhlcnJubykpOworICAgICAgICB9CisK KwlpZiAoKGVyciA9IGZpbmZvLT5mZGF0YS5mX29wcy0+Zm9fcmVhZGRpcigmKGZpbmZvLT5mZGF0 YSksICZkKSkgIT0gMCkgeworCQlyZXR1cm4gKGVycm5vX3RvX2VmaV9zdGF0dXMoZXJybm8pKTsK Kwl9CisKKyAgICAgICAgcmVxc2l6ZSA9IHNpemVvZihFRklfRklMRV9JTkZPKSArCisgICAgICAg ICAgKChzdHJsZW4oZC5kX25hbWUpICsgMSkgKiBzaXplb2YoQ0hBUjE2KSk7CisKKyAgICAgICAg aWYgKEJ1ZmZlciA9PSBOVUxMIHx8IGN1cnJzaXplIDwgcmVxc2l6ZSkgeworICAgICAgICAgICAg ICAgIGZpbmZvLT5mZGF0YS5mX29wcy0+Zm9fc2VlaygmKGZpbmZvLT5mZGF0YSksIGN1cnJwb3Ms IFNFRUtfU0VUKTsKKyAgICAgICAgICAgICAgICAqQnVmZmVyU2l6ZSA9IHJlcXNpemU7CisKKyAg ICAgICAgICAgICAgICByZXR1cm4gKEVGSV9CVUZGRVJfVE9PX1NNQUxMKTsKKyAgICAgICAgfQor CisgICAgICAgIC8vIFdlIGhhdmUgdG8gYWN0dWFsbHkgb3BlbiB0aGUgZmlsZSwgc2luY2UgRUZJ IGRpcmVjdG9yeQorICAgICAgICAvLyByZWFkcyBhcmUgc3VwcG9zZWQgdG8gcmV0dXJuIHN0YXQg aW5mb3JtYXRpb24uCisgICAgICAgIENIQVIxNiBidWZbZC5kX25hbWxlbl07CisgICAgICAgIHN0 cmNweV90b18xNihidWYsIGQuZF9uYW1lKTsKKyAgICAgICAgc3RhdHVzID0gZmlsZV9vcGVuX2lt cGwoRmlsZSwgJmVudGhhbmRsZSwgYnVmLCBFRklfRklMRV9SRUFEX09OTFksIDApOworCisgICAg ICAgIGlmIChFRklfRVJST1Ioc3RhdHVzKSkgeworICAgICAgICAgICAgICAgIGZpbmZvLT5mZGF0 YS5mX29wcy0+Zm9fc2VlaygmKGZpbmZvLT5mZGF0YSksIGN1cnJwb3MsIFNFRUtfU0VUKTsKKyAg ICAgICAgICAgICAgICByZXR1cm4gKHN0YXR1cyk7CisgICAgICAgIH0KKworICAgICAgICBlbnRp bmZvID0gKGZpbGVpbmZvX3QqKShlbnRoYW5kbGUgKyAxKTsKKworICAgICAgICBpZiAoKGVyciA9 IGZpbmZvLT5mZGF0YS5mX29wcy0+Zm9fc3RhdCgmKGVudGluZm8tPmZkYXRhKSwgJnN0KSkgIT0g MCkgeworICAgICAgICAgICAgICAgIGZpbmZvLT5mZGF0YS5mX29wcy0+Zm9fc2VlaygmKGZpbmZv LT5mZGF0YSksIGN1cnJwb3MsIFNFRUtfU0VUKTsKKwkJcmV0dXJuIChlcnJub190b19lZmlfc3Rh dHVzKGVycm5vKSk7CisgICAgICAgIH0KKworICAgICAgICBzdGF0dXMgPSBmaWxlX2Nsb3NlX2lt cGwoZW50aGFuZGxlKTsKKworICAgICAgICBpZiAoRUZJX0VSUk9SKHN0YXR1cykpIHsKKyAgICAg ICAgICAgICAgICBmaW5mby0+ZmRhdGEuZl9vcHMtPmZvX3NlZWsoJihmaW5mby0+ZmRhdGEpLCBj dXJycG9zLCBTRUVLX1NFVCk7CisgICAgICAgICAgICAgICAgcmV0dXJuIChzdGF0dXMpOworICAg ICAgICB9CisKKyAgICAgICAgLy8gV2UncmUgZ29vZCBhdCB0aGlzIHBvaW50LCBjb3B5IGV2ZXJ5 dGhpbmcgaW50byBwbGFjZS4KKyAgICAgICAgb3V0LT5TaXplID0gcmVxc2l6ZTsKKyAgICAgICAg b3V0LT5GaWxlU2l6ZSA9IHN0LnN0X3NpemU7CisgICAgICAgIG91dC0+UGh5c2ljYWxTaXplID0g c3Quc3RfYmxvY2tzICogc3Quc3RfYmxrc2l6ZTsKKyAgICAgICAgb3V0LT5BdHRyaWJ1dGUgPSBt b2RlX3RvX2VmaShzdC5zdF9tb2RlKTsKKyAgICAgICAgdG9fZWZpX3RpbWUoJihvdXQtPkxhc3RB Y2Nlc3NUaW1lKSwgc3Quc3RfYXRpbWUpOworICAgICAgICB0b19lZmlfdGltZSgmKG91dC0+TW9k aWZpY2F0aW9uVGltZSksIHN0LnN0X210aW1lKTsKKyAgICAgICAgdG9fZWZpX3RpbWUoJihvdXQt PkNyZWF0ZVRpbWUpLCBzdC5zdF9jdGltZSk7CisKKyAgICAgICAgaWYgKFNfSVNESVIoc3Quc3Rf bW9kZSkpIHsKKyAgICAgICAgICAgICAgICBvdXQtPkF0dHJpYnV0ZSB8PSBFRklfRklMRV9ESVJF Q1RPUlk7CisgICAgICAgIH0KKworICAgICAgICBzdHJjcHlfdG9fMTYob3V0LT5GaWxlTmFtZSwg ZC5kX25hbWUpOworICAgICAgICAqQnVmZmVyU2l6ZSA9IHJlcXNpemU7CisKKyAgICAgICAgcmV0 dXJuIChFRklfU1VDQ0VTUyk7Cit9CisKK3N0YXRpYyBFRklBUEkgRUZJX1NUQVRVUworZGlyX3dy aXRlX2ltcGwoRUZJX0ZJTEVfSEFORExFIEZpbGUgX191bnVzZWQsIFVJTlROICpCdWZmZXJTaXpl IF9fdW51c2VkLAorICAgICAgICAgICAgICAgVk9JRCAqQnVmZmVyIF9fdW51c2VkKQoreworICAg ICAgICAvLyBFRkkgQVBJIGRvZXNuJ3QgYWxsb3cgd3JpdGluZyB0byBkaXJlY3RvcmllcworICAg ICAgICByZXR1cm4gKEVGSV9VTlNVUFBPUlRFRCk7Cit9CisKK3N0YXRpYyBFRklBUEkgRUZJX1NU QVRVUworZmlsZV9yZWFkX2ltcGwoRUZJX0ZJTEVfSEFORExFIEZpbGUsIFVJTlROICpCdWZmZXJT aXplLCBWT0lEICpCdWZmZXIpCit7CisgICAgICAgIGZpbGVpbmZvX3QgKmZpbmZvID0gKGZpbGVp bmZvX3QqKShGaWxlICsgMSk7CisgICAgICAgIHNpemVfdCByZWFkc2l6ZSA9ICpCdWZmZXJTaXpl OworICAgICAgICBzaXplX3QgcmVzaWQ7CisgICAgICAgIGludCBlcnI7CisKKwlpZiAoKGVyciA9 IGZpbmZvLT5mZGF0YS5mX29wcy0+Zm9fcmVhZCgmKGZpbmZvLT5mZGF0YSksIEJ1ZmZlciwKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVhZHNpemUsICZy ZXNpZCkpICE9IDApIHsKKwkJcmV0dXJuIChlcnJub190b19lZmlfc3RhdHVzKGVycm5vKSk7CisJ fQorCisgICAgICAgICpCdWZmZXJTaXplID0gcmVhZHNpemUgLSByZXNpZDsKKworICAgICAgICBy ZXR1cm4gKEVGSV9TVUNDRVNTKTsKK30KKworc3RhdGljIEVGSUFQSSBFRklfU1RBVFVTCitmaWxl X3dyaXRlX2ltcGwoRUZJX0ZJTEVfSEFORExFIEZpbGUsIFVJTlROICpCdWZmZXJTaXplLCBWT0lE ICpCdWZmZXIpCit7CisgICAgICAgIGZpbGVpbmZvX3QgKmZpbmZvID0gKGZpbGVpbmZvX3QqKShG aWxlICsgMSk7CisgICAgICAgIHNpemVfdCB3cml0ZXNpemUgPSAqQnVmZmVyU2l6ZTsKKyAgICAg ICAgc2l6ZV90IHJlc2lkOworICAgICAgICBpbnQgZXJyOworCisJaWYgKChlcnIgPSBmaW5mby0+ ZmRhdGEuZl9vcHMtPmZvX3dyaXRlKCYoZmluZm8tPmZkYXRhKSwgQnVmZmVyLAorICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd3JpdGVzaXplLCAmcmVzaWQp KSAhPSAwKSB7CisJCXJldHVybiAoZXJybm9fdG9fZWZpX3N0YXR1cyhlcnJubykpOworCX0KKwor ICAgICAgICAqQnVmZmVyU2l6ZSA9IHdyaXRlc2l6ZSAtIHJlc2lkOworCisgICAgICAgIHJldHVy biAoRUZJX1NVQ0NFU1MpOworfQorCitzdGF0aWMgRUZJQVBJIEVGSV9TVEFUVVMKK2ZpbGVfc2V0 X3Bvc2l0aW9uX2ltcGwoRUZJX0ZJTEVfSEFORExFIEZpbGUsIFVJTlQ2NCBQb3NpdGlvbikKK3sK KyAgICAgICAgZmlsZWluZm9fdCAqZmluZm8gPSAoZmlsZWluZm9fdCopKEZpbGUgKyAxKTsKKyAg ICAgICAgaW50IHJlczsKKworICAgICAgICBpZiAoUG9zaXRpb24gIT0gMHhmZmZmZmZmZmZmZmZm ZmZmTEwpIHsKKyAgICAgICAgICAgICAgICByZXMgPSBmaW5mby0+ZmRhdGEuZl9vcHMtPmZvX3Nl ZWsoJihmaW5mby0+ZmRhdGEpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBQb3NpdGlvbiwgU0VFS19TRVQpOworICAgICAgICB9IGVsc2UgeworICAg ICAgICAgICAgICAgIHJlcyA9IGZpbmZvLT5mZGF0YS5mX29wcy0+Zm9fc2VlaygmKGZpbmZvLT5m ZGF0YSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IDAsIFNFRUtfRU5EKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChyZXMgPiAwKSB7CisgICAg ICAgICAgICAgICAgcmV0dXJuIChFRklfU1VDQ0VTUyk7CisgICAgICAgIH0gZWxzZSB7CisgICAg ICAgICAgICAgICAgcmV0dXJuIChlcnJub190b19lZmlfc3RhdHVzKHJlcykpOworICAgICAgICB9 Cit9CisKKworc3RhdGljIEVGSUFQSSBFRklfU1RBVFVTCitmaWxlX2dldF9wb3NpdGlvbl9pbXBs KEVGSV9GSUxFX0hBTkRMRSBGaWxlLCBVSU5UNjQgKlBvc2l0aW9uKQoreworICAgICAgICBmaWxl aW5mb190ICpmaW5mbyA9IChmaWxlaW5mb190KikoRmlsZSArIDEpOworICAgICAgICBvZmZfdCBy ZXM7CisKKyAgICAgICAgcmVzID0gZmluZm8tPmZkYXRhLmZfb3BzLT5mb19zZWVrKCYoZmluZm8t PmZkYXRhKSwgMCwgU0VFS19DVVIpOworCisgICAgICAgIGlmIChyZXMgPiAwKSB7CisgICAgICAg ICAgICAgICAgKlBvc2l0aW9uID0gcmVzOworCisgICAgICAgICAgICAgICAgcmV0dXJuIChFRklf U1VDQ0VTUyk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIChlcnJu b190b19lZmlfc3RhdHVzKGVycm5vKSk7CisgICAgICAgIH0KK30KKworc3RhdGljIEVGSUFQSSBF RklfU1RBVFVTCitmaWxlX2dldF9pbmZvX2ltcGwoRUZJX0ZJTEVfSEFORExFIEZpbGUsIEVGSV9H VUlEICpJbmZvcm1hdGlvblR5cGUsCisgICAgICAgICAgICAgICAgICAgVUlOVE4gKkJ1ZmZlclNp emUsIFZPSUQgKkJ1ZmZlcikKK3sKKyAgICAgICAgZmlsZWluZm9fdCAqZmluZm8gPSAoZmlsZWlu Zm9fdCopKEZpbGUgKyAxKTsKKworICAgICAgICBpZiAoIW1lbWNtcChJbmZvcm1hdGlvblR5cGUs ICZGaWxlSW5mb0dVSUQsIHNpemVvZihFRklfR1VJRCkpKSB7CisgICAgICAgICAgICAgICAgRUZJ X0ZJTEVfSU5GTyAqb3V0ID0gKEVGSV9GSUxFX0lORk8qKUJ1ZmZlcjsKKyAgICAgICAgICAgICAg ICBVSU5UTiBzdHIxNmxlbiA9KHN0cmxlbihmaW5mby0+cGF0aCkgKyAxKSAqIHNpemVvZihDSEFS MTYpOworICAgICAgICAgICAgICAgIFVJTlROIGN1cnJzaXplID0gKkJ1ZmZlclNpemU7CisgICAg ICAgICAgICAgICAgVUlOVE4gcmVxc2l6ZSA9IHNpemVvZihFRklfRklMRV9JTkZPKSArIHN0cjE2 bGVuOworICAgICAgICAgICAgICAgIHN0cnVjdCBzdGF0IHN0OworICAgICAgICAgICAgICAgIGlu dCBlcnI7CisKKyAgICAgICAgICAgICAgICBtZW1zZXQoJnN0LCAwLCBzaXplb2Yoc3RydWN0IHN0 YXQpKTsKKyAgICAgICAgICAgICAgICAqQnVmZmVyU2l6ZSA9IHJlcXNpemU7CisKKyAgICAgICAg ICAgICAgICBpZiAoQnVmZmVyID09IE5VTEwgfHwKKyAgICAgICAgICAgICAgICAgICAgICAgY3Vy cnNpemUgPCBzaXplb2YoRUZJX0ZJTEVfSU5GTykgKyBzdHIxNmxlbikgeworICAgICAgICAgICAg ICAgICAgICAgICAgKkJ1ZmZlclNpemUgPSBzaXplb2YoRUZJX0ZJTEVfSU5GTykgKyBzdHIxNmxl bjsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAoRUZJX0JVRkZFUl9UT09fU01BTEwp OworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIGlmICgoZXJyID0gZmluZm8t PmZkYXRhLmZfb3BzLT5mb19zdGF0KCYoZmluZm8tPmZkYXRhKSwKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZzdCkpICE9IDApIHsKKyAgICAg ICAJCXJldHVybiAoZXJybm9fdG9fZWZpX3N0YXR1cyhlcnJubykpOworICAgICAgICAgICAgICAg IH0KKworICAgICAgICAgICAgICAgIG91dC0+U2l6ZSA9IHNpemVvZihFRklfRklMRV9JTkZPKSAr IHN0cjE2bGVuOworICAgICAgICAgICAgICAgIG91dC0+RmlsZVNpemUgPSBzdC5zdF9zaXplOwor ICAgICAgICAgICAgICAgIG91dC0+UGh5c2ljYWxTaXplID0gc3Quc3RfYmxvY2tzICogc3Quc3Rf Ymxrc2l6ZTsKKyAgICAgICAgICAgICAgICB0b19lZmlfdGltZSgmKG91dC0+TGFzdEFjY2Vzc1Rp bWUpLCBzdC5zdF9hdGltZSk7CisgICAgICAgICAgICAgICAgdG9fZWZpX3RpbWUoJihvdXQtPk1v ZGlmaWNhdGlvblRpbWUpLCBzdC5zdF9tdGltZSk7CisgICAgICAgICAgICAgICAgdG9fZWZpX3Rp bWUoJihvdXQtPkNyZWF0ZVRpbWUpLCBzdC5zdF9jdGltZSk7CisgICAgICAgICAgICAgICAgb3V0 LT5BdHRyaWJ1dGUgPSBtb2RlX3RvX2VmaShzdC5zdF9tb2RlKTsKKworICAgICAgICAgICAgICAg IGlmIChTX0lTRElSKHN0LnN0X21vZGUpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBvdXQt PkF0dHJpYnV0ZSB8PSBFRklfRklMRV9ESVJFQ1RPUlk7CisgICAgICAgICAgICAgICAgfQorCisg ICAgICAgICAgICAgICAgc3RyY3B5X3RvXzE2KG91dC0+RmlsZU5hbWUsIGZpbmZvLT5wYXRoKTsK KyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gKEVGSV9VTlNVUFBPUlRF RCk7CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4gKEVGSV9TVUNDRVNTKTsKK30KKworc3Rh dGljIEVGSUFQSSBFRklfU1RBVFVTCitmaWxlX3NldF9pbmZvX2ltcGwoRUZJX0ZJTEVfSEFORExF IEZpbGUgX191bnVzZWQsCisgICAgICAgICAgICAgICAgICAgRUZJX0dVSUQgKkluZm9ybWF0aW9u VHlwZSBfX3VudXNlZCwKKyAgICAgICAgICAgICAgICAgICBVSU5UTiBCdWZmZXJTaXplIF9fdW51 c2VkLCBWT0lEICpCdWZmZXIgX191bnVzZWQpCit7CisgICAgICAgIHJldHVybiAoRUZJX1dSSVRF X1BST1RFQ1RFRCk7Cit9CisKK3N0YXRpYyBFRklBUEkgRUZJX1NUQVRVUworZmlsZV9mbHVzaF9p bXBsKEVGSV9GSUxFX0hBTkRMRSBGaWxlIF9fdW51c2VkKQoreworICAgICAgICByZXR1cm4gKEVG SV9TVUNDRVNTKTsKK30KKworc3RhdGljIEVGSUFQSSBFRklfU1RBVFVTCitvcGVuX3ZvbHVtZV9p bXBsKEVGSV9GSUxFX0lPX0lOVEVSRkFDRSAqVGhpcywgRUZJX0ZJTEVfSEFORExFICpSb290KQor eworICAgICAgICB2b2xpbmZvX3QgKnZpbmZvID0gKHZvbGluZm9fdCopKFRoaXMgKyAxKTsKKwor ICAgICAgICByZXR1cm4gZG9fZmlsZV9vcGVuKHZpbmZvLCAiIiwgT19SRE9OTFksIFJvb3QpOwor fQorCitzdGF0aWMgc3RydWN0IGZzX29wcyoKK2ZzX3Byb2JlKHN0cnVjdCBkZXZkZXNjICpkZXYp Cit7CisgICAgICAgIHN0cnVjdCBvcGVuX2ZpbGUgZjsKKwlpbnQgZXJyLCBpOworCisgICAgICAg IGYuZl9mbGFncyA9IE9fUkRPTkxZICsgMTsKKyAgICAgICAgZi5mX2RldiA9IChzdHJ1Y3QgZGV2 c3cgKikwOworICAgICAgICBmLmZfb3BzID0gKHN0cnVjdCBmc19vcHMgKikwOworICAgICAgICBm LmZfb2Zmc2V0ID0gMDsKKyAgICAgICAgZi5mX2RldmRhdGEgPSBkZXY7CisKKyAgICAgICAgaWYg KChlcnIgPSBkZXYtPmRfZGV2LT5kdl9vcGVuKCZmLCBkZXYpKSAhPSAwKSB7CisgICAgICAgICAg ICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgIH0KKworICAgICAgICBmb3IgKGkgPSAwOyBiYWNr ZW5kX2ZpbGVfc3lzdGVtW2ldICE9IE5VTEw7IGkrKykgeworICAgICAgICAgICAgICAgIGYuZl9v cHMgPSBiYWNrZW5kX2ZpbGVfc3lzdGVtW2ldOworCisgICAgICAgICAgICAgICAgaWYgKChlcnIg PSBmLmZfb3BzLT5mb19vcGVuKCIvIiwgJmYpKSA9PSAwKSB7CisgICAgICAgICAgICAgICAgICAg ICAgICByZXR1cm4gYmFja2VuZF9maWxlX3N5c3RlbVtpXTsKKyAgICAgICAgICAgICAgICB9Cisg ICAgICAgIH0KKworICAgICAgICByZXR1cm4gTlVMTDsKK30KKworc3RhdGljIEVGSV9TVEFUVVMK K21ha2VfZnNfZmlsZV9pb19pZmFjZShzdHJ1Y3QgZGV2ZGVzYyAqZGV2LCBFRklfRklMRV9JT19J TlRFUkZBQ0UgKipvdXQpCit7CisgICAgICAgIHN0YXRpYyBzdHJ1Y3QgZnNfb3BzKiBmc29wczsK KyAgICAgICAgRUZJX0ZJTEVfSU9fSU5URVJGQUNFKiBmaWZhY2U7CisgICAgICAgIHZvbGluZm9f dCAqdmluZm87CisKKyAgICAgICAgc3dpdGNoIChkZXYtPmRfdHlwZSkgeworI2lmZGVmIEVGSV9a RlNfQk9PVAorCWNhc2UgREVWVF9aRlM6CisgICAgICAgICAgICAgICAgZnNvcHMgPSAmemZzX2Zz b3BzOworICAgICAgICAgICAgICAgIGJyZWFrOworI2VuZGlmCisgICAgICAgIGRlZmF1bHQ6Cisg ICAgICAgICAgICAgICAgZnNvcHMgPSBmc19wcm9iZShkZXYpOworICAgICAgICAgICAgICAgIGJy ZWFrOworICAgICAgICB9CisKKyAgICAgICAgaWYgKGZzb3BzID09IE5VTEwpIHsKKyAgICAgICAg ICAgICAgICByZXR1cm4gKEVGSV9VTlNVUFBPUlRFRCk7CisgICAgICAgIH0KKworICAgICAgICBm aWZhY2UgPSBtYWxsb2Moc2l6ZW9mKEVGSV9GSUxFX0lPX0lOVEVSRkFDRSkgKyBzaXplb2Yodm9s aW5mb190KSk7CisKKyAgICAgICAgaWYgKGZpZmFjZSA9PSBOVUxMKSB7CisgICAgICAgICAgICAg ICAgcmV0dXJuIChFRklfT1VUX09GX1JFU09VUkNFUyk7CisgICAgICAgIH0KKworICAgICAgICB2 aW5mbyA9ICh2b2xpbmZvX3QqKShmaWZhY2UgKyAxKTsKKworICAgICAgICBmaWZhY2UtPlJldmlz aW9uID0gRUZJX0ZJTEVfSU9fSU5URVJGQUNFX1JFVklTSU9OOworICAgICAgICBmaWZhY2UtPk9w ZW5Wb2x1bWUgPSBvcGVuX3ZvbHVtZV9pbXBsOworICAgICAgICB2aW5mby0+ZGV2ID0gZGV2Owor ICAgICAgICB2aW5mby0+ZnNvcHMgPSBmc29wczsKKworICAgICAgICAqb3V0ID0gZmlmYWNlOwor CisgICAgICAgIHJldHVybiAoRUZJX1NVQ0NFU1MpOworfQorCitzdGF0aWMgRUZJQVBJIEVGSV9T VEFUVVMKK2JpbmRfaWZhY2UoRUZJX0hBTkRMRSBoYW5kbGUsIHN0cnVjdCBkZXZkZXNjICpkZXYp Cit7CisgICAgICAgIEVGSV9TVEFUVVMgc3RhdHVzOworICAgICAgICBFRklfRklMRV9JT19JTlRF UkZBQ0UgKmlmYWNlOworCisgICAgICAgIC8vIENoZWNrIGlmIHRoZXJlIGlzIGFscmVhZHkgYSBm aWxlc3lzdGVtIGludGVyZmFjZQorICAgICAgICBzdGF0dXMgPSBCUy0+T3BlblByb3RvY29sKGhh bmRsZSwgJlNpbXBsZUZpbGVTeXN0ZW1Qcm90b2NvbEdVSUQsCisgICAgICAgICAgICBOVUxMLCBJ SCwgaGFuZGxlLCBFRklfT1BFTl9QUk9UT0NPTF9URVNUX1BST1RPQ09MKTsKKworICAgICAgICBp ZiAoIUVGSV9FUlJPUihzdGF0dXMpKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIChFRklfQUND RVNTX0RFTklFRCk7CisgICAgICAgIH0gZWxzZSBpZiAoc3RhdHVzICE9IEVGSV9VTlNVUFBPUlRF RCkgeworICAgICAgICAgICAgICAgIHJldHVybiAoc3RhdHVzKTsKKyAgICAgICAgfQorCisgICAg ICAgIHN0YXR1cyA9IG1ha2VfZnNfZmlsZV9pb19pZmFjZShkZXYsICZpZmFjZSk7CisKKyAgICAg ICAgaWYgKEVGSV9FUlJPUihzdGF0dXMpKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIChzdGF0 dXMpOworICAgICAgICB9CisKKyAgICAgICAgc3RhdHVzID0gQlMtPkluc3RhbGxNdWx0aXBsZVBy b3RvY29sSW50ZXJmYWNlcygmaGFuZGxlLAorICAgICAgICAgICAgJlNpbXBsZUZpbGVTeXN0ZW1Q cm90b2NvbEdVSUQsIGlmYWNlLCBOVUxMKTsKKworICAgICAgICBpZiAoRUZJX0VSUk9SKHN0YXR1 cykpIHsKKyAgICAgICAgICAgICAgICBmcmVlKGlmYWNlKTsKKworICAgICAgICAgICAgICAgIHJl dHVybiAoc3RhdHVzKTsKKyAgICAgICAgfQorCisJcmV0dXJuIChzdGF0dXMpOworfQorCitzdGF0 aWMgRUZJQVBJIEVGSV9TVEFUVVMKK3N0b3BfaW1wbChFRklfRFJJVkVSX0JJTkRJTkcgKlRoaXMg X191bnVzZWQsIEVGSV9IQU5ETEUgQ29udHJvbGxlckhhbmRsZSBfX3VudXNlZCwKKyAgICAgICAg ICBVSU5UTiBOdW1iZXJPZkNoaWxkcmVuIF9fdW51c2VkLCBFRklfSEFORExFICpDaGlsZEhhbmRs ZUJ1ZmZlciBfX3VudXNlZCkKK3sKKyAgICAgICAgLy8gR2V0IHRoZSBwcm90b2NvbCBpbnRlZmFj ZSwgdW5pbnN0YWxsIGl0LCBhbmQgZnJlZSBpdAorICAgICAgICByZXR1cm4gKEVGSV9TVUNDRVNT KTsKK30KKworI2lmZGVmIEVGSV9aRlNfQk9PVAorc3RhdGljIHZvaWQKK2VmaV96ZnNfcHJvYmUo dm9pZCkKK3sKKwlFRklfSEFORExFIGg7CisJdV9pbnQgdW5pdDsKKwlpbnQgaTsKKwljaGFyIGRu YW1lW1NQRUNOQU1FTEVOICsgMV07CisJdWludDY0X3QgZ3VpZDsKKworCXVuaXQgPSAwOworCWgg PSBlZmlfZmluZF9oYW5kbGUoJmVmaXBhcnRfZGV2LCAwKTsKKwlmb3IgKGkgPSAwOyBoICE9IE5V TEw7IGggPSBlZmlfZmluZF9oYW5kbGUoJmVmaXBhcnRfZGV2LCArK2kpKSB7CisJCXNucHJpbnRm KGRuYW1lLCBzaXplb2YoZG5hbWUpLCAiJXMlZDoiLCBlZmlwYXJ0X2Rldi5kdl9uYW1lLCBpKTsK KwkJaWYgKHpmc19wcm9iZV9kZXYoZG5hbWUsICZndWlkKSA9PSAwKSB7CisJCQkodm9pZCllZmlf aGFuZGxlX3VwZGF0ZV9kZXYoaCwgJnpmc19kZXYsIHVuaXQrKywgZ3VpZCk7CisgICAgICAgICAg ICAgICAgfQorCX0KK30KKyNlbmRpZgorCitzdGF0aWMgaW50CitiYWNrZW5kX3BhcnNlZGV2KHN0 cnVjdCBkZXZkZXNjICoqZGV2LCBjb25zdCBjaGFyICpkZXZzcGVjLCBjb25zdCBjaGFyICoqcGF0 aCkKK3sKKwlzdHJ1Y3QgZGV2ZGVzYyAqaWRldjsKKwlzdHJ1Y3QgZGV2c3cgKmR2OworCWNoYXIg KmNwOworCWNvbnN0IGNoYXIgKm5wOworCWludCBpOworCisJLyogbWluaW11bSBsZW5ndGggY2hl Y2sgKi8KKwlpZiAoc3RybGVuKGRldnNwZWMpIDwgMikKKwkJcmV0dXJuIChFSU5WQUwpOworCisJ LyogbG9vayBmb3IgYSBkZXZpY2UgdGhhdCBtYXRjaGVzICovCisJZm9yIChpID0gMDsgYmFja2Vu ZF9kZXZzd1tpXSAhPSBOVUxMOyBpKyspIHsKKwkJZHYgPSBiYWNrZW5kX2RldnN3W2ldOworCQlp ZiAoIXN0cm5jbXAoZGV2c3BlYywgZHYtPmR2X25hbWUsIHN0cmxlbihkdi0+ZHZfbmFtZSkpKQor CQkJYnJlYWs7CisJfQorCWlmIChiYWNrZW5kX2RldnN3W2ldID09IE5VTEwpIHsKKwkJcmV0dXJu IChFTk9FTlQpOworICAgICAgICB9CisKKwlucCA9IGRldnNwZWMgKyBzdHJsZW4oZHYtPmR2X25h bWUpOworCisjaWZkZWYgRUZJX1pGU19CT09UCisJaWYgKGR2LT5kdl90eXBlID09IERFVlRfWkZT KSB7CisJCWludCBlcnI7CisKKwkJaWRldiA9IG1hbGxvYyhzaXplb2Yoc3RydWN0IHpmc19kZXZk ZXNjKSk7CisJCWlmIChpZGV2ID09IE5VTEwpCisJCQlyZXR1cm4gKEVOT01FTSk7CisKKwkJZXJy ID0gemZzX3BhcnNlZGV2KChzdHJ1Y3QgemZzX2RldmRlc2MqKWlkZXYsIG5wLCBwYXRoKTsKKwkJ aWYgKGVyciAhPSAwKSB7CisJCQlmcmVlKGlkZXYpOworCQkJcmV0dXJuIChlcnIpOworCQl9CisJ CSpkZXYgPSBpZGV2OworCQljcCA9IHN0cmNocihucCArIDEsICc6Jyk7CisJfSBlbHNlCisjZW5k aWYKKwl7CisJCWlkZXYgPSBtYWxsb2Moc2l6ZW9mKHN0cnVjdCBkZXZkZXNjKSk7CisJCWlmIChp ZGV2ID09IE5VTEwpCisJCQlyZXR1cm4gKEVOT01FTSk7CisKKwkJaWRldi0+ZF9kZXYgPSBkdjsK KwkJaWRldi0+ZF90eXBlID0gZHYtPmR2X3R5cGU7CisJCWlkZXYtPmRfdW5pdCA9IC0xOworCQlp ZiAoKm5wICE9ICdcMCcgJiYgKm5wICE9ICc6JykgeworCQkJaWRldi0+ZF91bml0ID0gc3RydG9s KG5wLCAmY3AsIDApOworCQkJaWYgKGNwID09IG5wKSB7CisJCQkJaWRldi0+ZF91bml0ID0gLTE7 CisJCQkJZnJlZShpZGV2KTsKKwkJCQlyZXR1cm4gKEVVTklUKTsKKwkJCX0KKwkJfQorCX0KKwor CWlmICgqY3AgIT0gJ1wwJyAmJiAqY3AgIT0gJzonKSB7CisJCWZyZWUoaWRldik7CisJCXJldHVy biAoRUlOVkFMKTsKKwl9CisKKwlpZiAocGF0aCAhPSBOVUxMKQorCQkqcGF0aCA9ICgqY3AgPT0g MCkgPyBjcCA6IGNwICsgMTsKKwlpZiAoZGV2ICE9IE5VTEwpCisJCSpkZXYgPSBpZGV2OworCWVs c2UKKwkJZnJlZShpZGV2KTsKKwlyZXR1cm4gKDApOworfQorCitzdGF0aWMgaW50CitiYWNrZW5k X2dldGRldih2b2lkICoqdmRldiwgY29uc3QgY2hhciAqZGV2c3BlYywgY29uc3QgY2hhciAqKnBh dGgpCit7CisJc3RydWN0IGRldmRlc2MgKipkZXYgPSAoc3RydWN0IGRldmRlc2MgKiopdmRldjsK KwlpbnQgcnY7CisKKwkvKgorCSAqIElmIGl0IGxvb2tzIGxpa2UgdGhpcyBpcyBqdXN0IGEgcGF0 aCBhbmQgbm8gZGV2aWNlLCB0aGVuCisJICogdXNlIHRoZSBjdXJyZW50IGRldmljZSBpbnN0ZWFk LgorCSAqLworCWlmIChkZXZzcGVjID09IE5VTEwgfHwgKmRldnNwZWMgPT0gJy8nIHx8ICFzdHJj aHIoZGV2c3BlYywgJzonKSkgeworCQlydiA9IGJhY2tlbmRfcGFyc2VkZXYoZGV2LCBnZXRlbnYo ImN1cnJkZXYiKSwgTlVMTCk7CisJCWlmIChydiA9PSAwICYmIHBhdGggIT0gTlVMTCkKKwkJCSpw YXRoID0gZGV2c3BlYzsKKwkJcmV0dXJuIChydik7CisJfQorCisJLyogUGFyc2UgdGhlIGRldmlj ZSBuYW1lIG9mZiB0aGUgYmVnaW5uaW5nIG9mIHRoZSBkZXZzcGVjLiAqLworCXJldHVybiAoYmFj a2VuZF9wYXJzZWRldihkZXYsIGRldnNwZWMsIHBhdGgpKTsKK30KKworc3RhdGljIHZvaWQKK2lu aXQodm9pZCkKK3sKKwlFRklfSEFORExFIGg7CisgICAgICAgIEVGSV9TVEFUVVMgc3RhdHVzOwor CXVfaW50IHVuaXQ7CisgICAgICAgIGludCBpOworCXN0cnVjdCBkZXZzdyAqZGV2OworCXVpbnQ2 NF90IHBvb2xfZ3VpZDsKKyAgICAgICAgaW50ICgqb2xkX2dldGRldikodm9pZCAqKiwgY29uc3Qg Y2hhciAqLCBjb25zdCBjaGFyICoqKSA9CisgICAgICAgICAgYXJjaHN3LmFyY2hfZ2V0ZGV2Owor CisJYXJjaHN3LmFyY2hfZ2V0ZGV2ID0gYmFja2VuZF9nZXRkZXY7CisjaWZkZWYgRUZJX1pGU19C T09UCisJLyogTm90ZSB0aGlzIG5lZWRzIHRvIGJlIHNldCBiZWZvcmUgWkZTIGluaXQuICovCisJ YXJjaHN3LmFyY2hfemZzX3Byb2JlID0gZWZpX3pmc19wcm9iZTsKKyNlbmRpZgorCisgICAgICAg IC8qIEluaXRpYWxpemUgYWxsIHRoZSBiYWNrZW5kIGRyaXZlcnMgKi8KKwlmb3IgKGkgPSAwOyBi YWNrZW5kX2RldnN3W2ldICE9IE5VTEw7IGkrKykgeworCQlpZiAoYmFja2VuZF9kZXZzd1tpXS0+ ZHZfaW5pdCAhPSBOVUxMKQorCQkJKGJhY2tlbmRfZGV2c3dbaV0tPmR2X2luaXQpKCk7CisgICAg ICAgIH0KKworICAgICAgICAvKiBBdHRhY2ggU0lNUExFX0ZJTEVfU1lTVEVNIGludGVyZmFjZXMg dG8gYWxsIGVmaXBhcnQgZGV2aWNlcyAqLworCXVuaXQgPSAwOworCWggPSBlZmlfZmluZF9oYW5k bGUoJmVmaXBhcnRfZGV2LCAwKTsKKwlmb3IgKGkgPSAwOyBoICE9IE5VTEw7IGggPSBlZmlfZmlu ZF9oYW5kbGUoJmVmaXBhcnRfZGV2LCArK2kpKSB7CisJCXN0cnVjdCBkZXZkZXNjICpjdXJyZGV2 OworCisgICAgICAgICAgICAgICAgY3VycmRldiA9IG1hbGxvYyhzaXplb2Yoc3RydWN0IGRldmRl c2MpKTsKKworICAgICAgICAgICAgICAgIGlmIChjdXJyZGV2ID09IE5VTEwpIHsKKyAgICAgICAg ICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAg ICAgICAgIGlmIChlZmlfaGFuZGxlX2xvb2t1cChoLCAmZGV2LCAmdW5pdCwgJnBvb2xfZ3VpZCkg IT0gMCkgeworICAgICAgICAgICAgICAgICAgICAgICAgZnJlZShjdXJyZGV2KTsKKyAgICAgICAg ICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgIH0KKworCQljdXJyZGV2 LT5kX2RldiA9IGRldjsKKwkJY3VycmRldi0+ZF91bml0ID0gdW5pdDsKKwkJY3VycmRldi0+ZF9v cGVuZGF0YSA9IE5VTEw7CisJCWN1cnJkZXYtPmRfdHlwZSA9IGN1cnJkZXYtPmRfZGV2LT5kdl90 eXBlOworCisgICAgICAgICAgICAgICAgc3RhdHVzID0gYmluZF9pZmFjZShoLCBjdXJyZGV2KTsK KworICAgICAgICAgICAgICAgIGlmIChFRklfRVJST1Ioc3RhdHVzKSAmJiBzdGF0dXMgIT0gRUZJ X1VOU1VQUE9SVEVEICYmCisgICAgICAgICAgICAgICAgICAgc3RhdHVzICE9IEVGSV9BQ0NFU1Nf REVOSUVEKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnRmKCJGYWlsZWQgdG8gYXR0 YWNoIGZpbGVzeXN0ZW0gaW50ZXJmYWNlIHRvIGVmaXBhcnQldSAoJWxkKVxuIiwKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgdW5pdCwgRUZJX0VSUk9SX0NPREUoc3RhdHVzKSk7Cisg ICAgICAgICAgICAgICAgICAgICAgICAgZnJlZShjdXJyZGV2KTsKKyAgICAgICAgICAgICAgICB9 CisgICAgICAgIH0KKworICAgICAgICAvKiBBdHRhY2ggU0lNUExFX0ZJTEVfU1lTVEVNIGludGVy ZmFjZSB0byBhbGwgWkZTIGRldmljZXMgKi8KKyNpZmRlZiBFRklfWkZTX0JPT1QKKwl1bml0ID0g MDsKKwloID0gZWZpX2ZpbmRfaGFuZGxlKCZ6ZnNfZGV2LCAwKTsKKwlmb3IgKGkgPSAwOyBoICE9 IE5VTEw7IGggPSBlZmlfZmluZF9oYW5kbGUoJnpmc19kZXYsICsraSkpIHsKKwkJc3RydWN0IHpm c19kZXZkZXNjICpjdXJyZGV2OworCisgICAgICAgICAgICAgICAgY3VycmRldiA9IG1hbGxvYyhz aXplb2Yoc3RydWN0IHpmc19kZXZkZXNjKSk7CisKKyAgICAgICAgICAgICAgICBpZiAoY3VycmRl diA9PSBOVUxMKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAg ICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBpZiAoZWZpX2hhbmRsZV9sb29rdXAoaCwgJmRl diwgJnVuaXQsICZwb29sX2d1aWQpICE9IDApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGZy ZWUoY3VycmRldik7CisgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAg ICAgICAgICB9CisKKwkJY3VycmRldi0+ZF9kZXYgPSBkZXY7CisJCWN1cnJkZXYtPmRfdW5pdCA9 IHVuaXQ7CisJCWN1cnJkZXYtPmRfb3BlbmRhdGEgPSBOVUxMOworCQljdXJyZGV2LT5kX3R5cGUg PSBjdXJyZGV2LT5kX2Rldi0+ZHZfdHlwZTsKKyAgICAgICAgICAgICAgICBjdXJyZGV2LT5wb29s X2d1aWQgPSBwb29sX2d1aWQ7CisgICAgICAgICAgICAgICAgY3VycmRldi0+cm9vdF9ndWlkID0g MDsKKworICAgICAgICAgICAgICAgIHN0YXR1cyA9IGJpbmRfaWZhY2UoaCwgKHN0cnVjdCBkZXZk ZXNjKiljdXJyZGV2KTsKKworICAgICAgICAgICAgICAgIGlmIChFRklfRVJST1Ioc3RhdHVzKSkg eworICAgICAgICAgICAgICAgICAgcHJpbnRmKCJGYWlsZWQgdG8gYXR0YWNoIGZpbGVzeXN0ZW0g aW50ZXJmYWNlIHRvIHpmcyV1ICglbGQpXG4iLAorICAgICAgICAgICAgICAgICAgICAgICAgIHVu aXQsIEVGSV9FUlJPUl9DT0RFKHN0YXR1cykpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAg fQorI2VuZGlmCisgICAgICAgIGFyY2hzdy5hcmNoX2dldGRldiA9IG9sZF9nZXRkZXY7Cit9CisK K2NvbnN0IGVmaV9kcml2ZXJfdCBmc19kcml2ZXIgPQoreworCS5uYW1lID0gIkZTIEJhY2tlbmQi LAorCS5pbml0ID0gaW5pdCwKK307CmRpZmYgLS1naXQgc3lzL2Jvb3QvZWZpL2luY2x1ZGUvZWZp bGliLmggc3lzL2Jvb3QvZWZpL2luY2x1ZGUvZWZpbGliLmgKaW5kZXggMDljY2MyZjM2NDcuLjE1 ZDRiNDg3ZDQwIDEwMDY0NAotLS0gc3lzL2Jvb3QvZWZpL2luY2x1ZGUvZWZpbGliLmgKKysrIHN5 cy9ib290L2VmaS9pbmNsdWRlL2VmaWxpYi5oCkBAIC0zMSwyMiArMzEsMjYgQEAKICNkZWZpbmUJ X0xPQURFUl9FRklMSUJfSAogCiAjaW5jbHVkZSA8c3RhbmQuaD4KKyNpbmNsdWRlIDx0aW1lLmg+ CiAKIGV4dGVybiBFRklfSEFORExFCQlJSDsKLWV4dGVybiBFRklfU1lTVEVNX1RBQkxFCQkqU1Q7 CitleHRlcm4gRUZJX1NZU1RFTV9UQUJMRQkqU1Q7CiBleHRlcm4gRUZJX0JPT1RfU0VSVklDRVMJ KkJTOwogZXh0ZXJuIEVGSV9SVU5USU1FX1NFUlZJQ0VTCSpSUzsKIAotZXh0ZXJuIHN0cnVjdCBk ZXZzdyBlZmlwYXJ0X2RldjsKK2V4dGVybiBzdHJ1Y3QgZGV2c3cgZWZpZnNfZGV2OwogZXh0ZXJu IHN0cnVjdCBkZXZzdyBlZmluZXRfZGV2OworZXh0ZXJuIHN0cnVjdCBmc19vcHMgZWZpZnNfZnNv cHM7CiBleHRlcm4gc3RydWN0IG5ldGlmX2RyaXZlciBlZmluZXRpZjsKIAogdm9pZCAqZWZpX2dl dF90YWJsZShFRklfR1VJRCAqdGJsKTsKIAogaW50IGVmaV9yZWdpc3Rlcl9oYW5kbGVzKHN0cnVj dCBkZXZzdyAqLCBFRklfSEFORExFICosIEVGSV9IQU5ETEUgKiwgaW50KTsKK2ludCBlZmlfcmVn aXN0ZXJfaGFuZGxlKHN0cnVjdCBkZXZzdyAqLCBFRklfSEFORExFLCBFRklfSEFORExFKTsKIEVG SV9IQU5ETEUgZWZpX2ZpbmRfaGFuZGxlKHN0cnVjdCBkZXZzdyAqLCBpbnQpOwogaW50IGVmaV9o YW5kbGVfbG9va3VwKEVGSV9IQU5ETEUsIHN0cnVjdCBkZXZzdyAqKiwgaW50ICosICB1aW50NjRf dCAqKTsKIGludCBlZmlfaGFuZGxlX3VwZGF0ZV9kZXYoRUZJX0hBTkRMRSwgc3RydWN0IGRldnN3 ICosIGludCwgdWludDY0X3QpOworaW50IGVmaV9oYW5kbGVfcmVtb3ZlX2RldihFRklfSEFORExF KTsKIAogRUZJX0RFVklDRV9QQVRIICplZmlfbG9va3VwX2ltYWdlX2RldnBhdGgoRUZJX0hBTkRM RSk7CiBFRklfREVWSUNFX1BBVEggKmVmaV9sb29rdXBfZGV2cGF0aChFRklfSEFORExFKTsKQEAg LTU3LDYgKzYxLDcgQEAgQ0hBUjE2ICplZmlfZGV2cGF0aF9uYW1lKEVGSV9ERVZJQ0VfUEFUSCAq KTsKIHZvaWQgZWZpX2ZyZWVfZGV2cGF0aF9uYW1lKENIQVIxNiAqKTsKIAogaW50IGVmaV9zdGF0 dXNfdG9fZXJybm8oRUZJX1NUQVRVUyk7CitFRklfU1RBVFVTIGVycm5vX3RvX2VmaV9zdGF0dXMo aW50IGVycm5vKTsKIAogdm9pZCBlZmlfdGltZV9pbml0KHZvaWQpOwogdm9pZCBlZmlfdGltZV9m aW5pKHZvaWQpOwpAQCAtNjUsNCArNzAsNyBAQCBFRklfU1RBVFVTIG1haW4oaW50IGFyZ2MsIENI QVIxNiAqYXJndltdKTsKIHZvaWQgZXhpdChFRklfU1RBVFVTIHN0YXR1cyk7CiB2b2lkIGRlbGF5 KGludCB1c2Vjcyk7CiAKK3RpbWVfdCBmcm9tX2VmaV90aW1lKEVGSV9USU1FICplZmlfdGltZSk7 Cit2b2lkIHRvX2VmaV90aW1lKEVGSV9USU1FICplZmlfdGltZSwgdGltZV90IHRpbWUpOworCiAj ZW5kaWYJLyogX0xPQURFUl9FRklMSUJfSCAqLwpkaWZmIC0tZ2l0IHN5cy9ib290L2VmaS9pbmNs dWRlL2VmaXByb3QuaCBzeXMvYm9vdC9lZmkvaW5jbHVkZS9lZmlwcm90LmgKaW5kZXggMjhjZWM1 OTkxZTMuLjIyMjE1Nzc3Y2FiIDEwMDY0NAotLS0gc3lzL2Jvb3QvZWZpL2luY2x1ZGUvZWZpcHJv dC5oCisrKyBzeXMvYm9vdC9lZmkvaW5jbHVkZS9lZmlwcm90LmgKQEAgLTI3LDYgKzI3LDggQEAg UmV2aXNpb24gSGlzdG9yeQogCiAtLSovCiAKKyNpbmNsdWRlIDxlZmlkZWYuaD4KKwogLy8KIC8v IERldmljZSBQYXRoIHByb3RvY29sCiAvLwpAQCAtMzA3LDkgKzMwOSw5IEBAIHR5cGVkZWYgc3Ry dWN0IHsKIC8vCiAvLyBUaGUgRmlsZU5hbWUgZmllbGQgb2YgdGhlIEVGSV9GSUxFX0lORk8gZGF0 YSBzdHJ1Y3R1cmUgaXMgdmFyaWFibGUgbGVuZ3RoLgogLy8gV2hlbmV2ZXIgY29kZSBuZWVkcyB0 byBrbm93IHRoZSBzaXplIG9mIHRoZSBFRklfRklMRV9JTkZPIGRhdGEgc3RydWN0dXJlLCBpdCBu ZWVkcyB0bwotLy8gYmUgdGhlIHNpemUgb2YgdGhlIGRhdGEgc3RydWN0dXJlIHdpdGhvdXQgdGhl IEZpbGVOYW1lIGZpZWxkLiAgVGhlIGZvbGxvd2luZyBtYWNybyAKKy8vIGJlIHRoZSBzaXplIG9m IHRoZSBkYXRhIHN0cnVjdHVyZSB3aXRob3V0IHRoZSBGaWxlTmFtZSBmaWVsZC4gIFRoZSBmb2xs b3dpbmcgbWFjcm8KIC8vIGNvbXB1dGVzIHRoaXMgc2l6ZSBjb3JyZWN0bHkgbm8gbWF0dGVyIGhv dyBiaWcgdGhlIEZpbGVOYW1lIGFycmF5IGlzIGRlY2xhcmVkLgotLy8gVGhpcyBpcyByZXF1aXJl ZCB0byBtYWtlIHRoZSBFRklfRklMRV9JTkZPIGRhdGEgc3RydWN0dXJlIEFOU0kgY29tcGlsYW50 LiAKKy8vIFRoaXMgaXMgcmVxdWlyZWQgdG8gbWFrZSB0aGUgRUZJX0ZJTEVfSU5GTyBkYXRhIHN0 cnVjdHVyZSBBTlNJIGNvbXBpbGFudC4KIC8vCiAKICNkZWZpbmUgU0laRV9PRl9FRklfRklMRV9J TkZPIEVGSV9GSUVMRF9PRkZTRVQoRUZJX0ZJTEVfSU5GTyxGaWxlTmFtZSkKQEAgLTMyOSw5ICsz MzEsOSBAQCB0eXBlZGVmIHN0cnVjdCB7CiAvLwogLy8gVGhlIFZvbHVtZUxhYmVsIGZpZWxkIG9m IHRoZSBFRklfRklMRV9TWVNURU1fSU5GTyBkYXRhIHN0cnVjdHVyZSBpcyB2YXJpYWJsZSBsZW5n dGguCiAvLyBXaGVuZXZlciBjb2RlIG5lZWRzIHRvIGtub3cgdGhlIHNpemUgb2YgdGhlIEVGSV9G SUxFX1NZU1RFTV9JTkZPIGRhdGEgc3RydWN0dXJlLCBpdCBuZWVkcwotLy8gdG8gYmUgdGhlIHNp emUgb2YgdGhlIGRhdGEgc3RydWN0dXJlIHdpdGhvdXQgdGhlIFZvbHVtZUxhYmxlIGZpZWxkLiAg VGhlIGZvbGxvd2luZyBtYWNybyAKKy8vIHRvIGJlIHRoZSBzaXplIG9mIHRoZSBkYXRhIHN0cnVj dHVyZSB3aXRob3V0IHRoZSBWb2x1bWVMYWJsZSBmaWVsZC4gIFRoZSBmb2xsb3dpbmcgbWFjcm8K IC8vIGNvbXB1dGVzIHRoaXMgc2l6ZSBjb3JyZWN0bHkgbm8gbWF0dGVyIGhvdyBiaWcgdGhlIFZv bHVtZUxhYmxlIGFycmF5IGlzIGRlY2xhcmVkLgotLy8gVGhpcyBpcyByZXF1aXJlZCB0byBtYWtl IHRoZSBFRklfRklMRV9TWVNURU1fSU5GTyBkYXRhIHN0cnVjdHVyZSBBTlNJIGNvbXBpbGFudC4g CisvLyBUaGlzIGlzIHJlcXVpcmVkIHRvIG1ha2UgdGhlIEVGSV9GSUxFX1NZU1RFTV9JTkZPIGRh dGEgc3RydWN0dXJlIEFOU0kgY29tcGlsYW50LgogLy8KIAogI2RlZmluZSBTSVpFX09GX0VGSV9G SUxFX1NZU1RFTV9JTkZPIEVGSV9GSUVMRF9PRkZTRVQoRUZJX0ZJTEVfU1lTVEVNX0lORk8sVm9s dW1lTGFiZWwpCkBAIC00MTEsNyArNDEzLDcgQEAgdHlwZWRlZiBzdHJ1Y3QgewogICAgIEVGSV9E RVZJQ0VfSU8gICAgICAgICAgICAgICAgICAgV3JpdGU7CiB9IEVGSV9JT19BQ0NFU1M7CiAKLXR5 cGVkZWYgCit0eXBlZGVmCiBFRklfU1RBVFVTCiAoRUZJQVBJICpFRklfUENJX0RFVklDRV9QQVRI KSAoCiAgICAgSU4gc3RydWN0IF9FRklfREVWSUNFX0lPX0lOVEVSRkFDRSAgKlRoaXMsCkBAIC01 NTUsNCArNTU3LDQ3IEBAIHR5cGVkZWYgc3RydWN0IF9FRklfVU5JQ09ERV9DT0xMQVRJT05fSU5U RVJGQUNFIHsKICAgICBDSEFSOCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqU3VwcG9y dGVkTGFuZ3VhZ2VzOwogfSBFRklfVU5JQ09ERV9DT0xMQVRJT05fSU5URVJGQUNFOwogCisvLwor Ly8gRHJpdmVyIEJpbmRpbmcgcHJvdG9jb2wKKy8vCisKKyNkZWZpbmUgRFJJVkVSX0JJTkRJTkdf UFJPVE9DT0wgXAorICB7IDB4MThhMDMxYWIsIDB4YjQ0MywgMHg0ZDFhLCB7MHhhNSwgMHhjMCwg MHgwYywgMHgwOSwgMHgyNiwgMHgxZSwgMHg5ZiwgMHg3MX0gfQorCitJTlRFUkZBQ0VfREVDTChf RUZJX0RSSVZFUl9CSU5ESU5HKTsKKwordHlwZWRlZgorRUZJX1NUQVRVUworKEVGSUFQSSAqRUZJ X0RSSVZFUl9CSU5ESU5HX1NVUFBPUlRFRCkgKAorICAgIElOIHN0cnVjdCBfRUZJX0RSSVZFUl9C SU5ESU5HICpUaGlzLAorICAgIElOIEVGSV9IQU5ETEUgQ29udHJvbGxlckhhbmRsZSwKKyAgICBJ TiBFRklfREVWSUNFX1BBVEggKlJlbWFpbmluZ1BhdGgKKyAgICApOworCit0eXBlZGVmCitFRklf U1RBVFVTCisoRUZJQVBJICpFRklfRFJJVkVSX0JJTkRJTkdfU1RBUlQpICgKKyAgICBJTiBzdHJ1 Y3QgX0VGSV9EUklWRVJfQklORElORyAqVGhpcywKKyAgICBJTiBFRklfSEFORExFIENvbnRyb2xs ZXJIYW5kbGUsCisgICAgSU4gRUZJX0RFVklDRV9QQVRIICpSZW1haW5pbmdQYXRoCisgICAgKTsK KwordHlwZWRlZgorRUZJX1NUQVRVUworKEVGSUFQSSAqRUZJX0RSSVZFUl9CSU5ESU5HX1NUT1Ap ICgKKyAgICBJTiBzdHJ1Y3QgX0VGSV9EUklWRVJfQklORElORyAqVGhpcywKKyAgICBJTiBFRklf SEFORExFIENvbnRyb2xsZXJIYW5kbGUsCisgICAgSU4gVUlOVE4gTnVtYmVyT2ZDaGlsZHJlbiwK KyAgICBJTiBFRklfSEFORExFICpDaGlsZEhhbmRsZUJ1ZmZlcgorICAgICk7CisKK3R5cGVkZWYg c3RydWN0IF9FRklfRFJJVkVSX0JJTkRJTkcgeworICBFRklfRFJJVkVSX0JJTkRJTkdfU1VQUE9S VEVEIFN1cHBvcnRlZDsKKyAgRUZJX0RSSVZFUl9CSU5ESU5HX1NUQVJUIFN0YXJ0OworICBFRklf RFJJVkVSX0JJTkRJTkdfU1RPUCBTdG9wOworICBVSU5UMzIgVmVyc2lvbjsKKyAgRUZJX0hBTkRM RSBJbWFnZUhhbmRsZTsKKyAgRUZJX0hBTkRMRSBEcml2ZXJCaW5kaW5nSGFuZGxlOworfSBFRklf RFJJVkVSX0JJTkRJTkc7CisKICNlbmRpZgpkaWZmIC0tZ2l0IHN5cy9ib290L2VmaS9pbmNsdWRl L3N0cmluZzE2Lmggc3lzL2Jvb3QvZWZpL2luY2x1ZGUvc3RyaW5nMTYuaApuZXcgZmlsZSBtb2Rl IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uNWU0ZjljMWVmMWEKLS0tIC9kZXYvbnVsbAorKysg c3lzL2Jvb3QvZWZpL2luY2x1ZGUvc3RyaW5nMTYuaApAQCAtMCwwICsxLDQ1IEBACisvKi0KKyAq IENvcHlyaWdodCAoYykgMjAxNiBFcmljIE1jQ29ya2xlCisgKiBBbGwgcmlnaHRzIHJlc2VydmVk LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0 IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIEFVVEhP UiBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKKyAqIEFOWSBFWFBSRVNTIE9SIElNUExJ RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1Q TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU SUNVTEFSIFBVUlBPU0UKKyAqIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhF IEFVVEhPUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCisgKiBGT1IgQU5ZIERJUkVDVCwgSU5E SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAor ICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G IFNVQlNUSVRVVEUgR09PRFMKKyAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1Ig UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorICogSE9XRVZFUiBDQVVTRUQgQU5E IE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QK KyAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF KSBBUklTSU5HIElOIEFOWSBXQVkKKyAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUs IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgor ICoKKyAqICRGcmVlQlNEJAorICovCisKKyNpZm5kZWYgX1NUUklORzE2X0hfCisjZGVmaW5lIF9T VFJJTkcxNl9IXworCisjaW5jbHVkZSA8ZWZpLmg+CisjaW5jbHVkZSA8c3RkZGVmLmg+CisKKy8q CisgKiBUaGVzZSBhcmUgMTYtYml0IHZhcmlhbnRzIG9mIHN0cmluZyxoIGZ1bmN0aW9ucyBmb3Ig dXNlIHdpdGggRUZJIGNvZGUuCisgKi8KKworZXh0ZXJuIHNpemVfdCBzdHJsZW4xNihjb25zdCBD SEFSMTYgKnN0cik7CitleHRlcm4gQ0hBUjE2KiBzdHJjcHkxNihDSEFSMTYgKmRzdCwgY29uc3Qg Q0hBUjE2ICpzcmMpOworZXh0ZXJuIENIQVIxNiogc3RwY3B5MTYoQ0hBUjE2ICpkc3QsIGNvbnN0 IENIQVIxNiAqc3JjKTsKK2V4dGVybiBDSEFSMTYqIHN0cmNweV90b18xNihDSEFSMTYgKmRzdCwg Y29uc3QgY2hhciAqc3JjKTsKK2V4dGVybiBjaGFyKiBzdHJjcHlfZnJvbV8xNihjaGFyICpkc3Qs IGNvbnN0IENIQVIxNiAqc3JjKTsKKworI2VuZGlmCmRpZmYgLS1naXQgc3lzL2Jvb3QvZWZpL2xp YmVmaS9NYWtlZmlsZSBzeXMvYm9vdC9lZmkvbGliZWZpL01ha2VmaWxlCmluZGV4IGQ5NjE5YmVm ODlkLi44Njg0NDAzY2QxMSAxMDA2NDQKLS0tIHN5cy9ib290L2VmaS9saWJlZmkvTWFrZWZpbGUK KysrIHN5cy9ib290L2VmaS9saWJlZmkvTWFrZWZpbGUKQEAgLTEwLDggKzEwLDggQEAgTElCPQll ZmkKIElOVEVSTkFMTElCPQogV0FSTlM/PQkyCiAKLVNSQ1M9CWRlbGF5LmMgZGV2cGF0aC5jIGVm aV9jb25zb2xlLmMgZWZpbmV0LmMgZWZpcGFydC5jIGVycm5vLmMgXAotCWhhbmRsZXMuYyBsaWJl ZmkuYworU1JDUz0JZGVsYXkuYyBkZXZwYXRoLmMgZWZpX2NvbnNvbGUuYyBlZmlmcy5jIGVmaW5l dC5jIGVudi5jIGVycm5vLmMgXAorCWhhbmRsZXMuYyBsaWJlZmkuYyBzdHJpbmcxNi5jCiAKIC5p ZiAke01BQ0hJTkVfQ1BVQVJDSH0gPT0gImFtZDY0IiB8fCAke01BQ0hJTkVfQ1BVQVJDSH0gPT0g ImkzODYiCiBTUkNTKz0JdGltZS5jCmRpZmYgLS1naXQgc3lzL2Jvb3QvZWZpL2xpYmVmaS9lZmlm cy5jIHN5cy9ib290L2VmaS9saWJlZmkvZWZpZnMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl eCAwMDAwMDAwMDAwMC4uZGQ5ZmIwZjBiNDEKLS0tIC9kZXYvbnVsbAorKysgc3lzL2Jvb3QvZWZp L2xpYmVmaS9lZmlmcy5jCkBAIC0wLDAgKzEsNDY0IEBACisvKi0KKyAqIENvcHlyaWdodCAoYykg MjAxNiBFcmljIE1jQ29ya2xlCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0 aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9m IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K KyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFu ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIEFVVEhPUiBBTkQgQ09OVFJJQlVU T1JTIGBgQVMgSVMnJyBBTkQKKyAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVT IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UK KyAqIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBPUiBDT05U UklCVVRPUlMgQkUgTElBQkxFCisgKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U QUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorICogREFNQUdFUyAoSU5D TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P RFMKKyAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT SU5FU1MgSU5URVJSVVBUSU9OKQorICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkg T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKKyAqIExJQUJJTElUWSwg T1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO WSBXQVkKKyAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICoKKyAqICRGcmVlQlNE JAorICovCisKKyNpbmNsdWRlIDxlZmkuaD4KKyNpbmNsdWRlIDxlZmlsaWIuaD4KKyNpbmNsdWRl IDxlZmlwcm90Lmg+CisjaW5jbHVkZSA8c3RhbmQuaD4KKyNpbmNsdWRlIDxzdGRhcmcuaD4KKyNp bmNsdWRlIDxib290c3RyYXAuaD4KKyNpbmNsdWRlIDxzdHJpbmcxNi5oPgorCitzdGF0aWMgRUZJ X0dVSUQgRmlsZUluZm9HVUlEID0gRUZJX0ZJTEVfSU5GT19JRDs7CitzdGF0aWMgRUZJX0dVSUQg U2ltcGxlRmlsZVN5c3RlbVByb3RvY29sR1VJRCA9IFNJTVBMRV9GSUxFX1NZU1RFTV9QUk9UT0NP TDsKK3N0YXRpYyBFRklfR1VJRCBCbG9ja0lvUHJvdG9jb2xHVUlEID0gQkxPQ0tfSU9fUFJPVE9D T0w7CitzdGF0aWMgRUZJX0dVSUQgRGV2aWNlUGF0aEdVSUQgPSBERVZJQ0VfUEFUSF9QUk9UT0NP TDsKKworc3RhdGljIGludCBlZmlmc19vcGVuKGNvbnN0IGNoYXIgKnBhdGgsIHN0cnVjdCBvcGVu X2ZpbGUgKmYpOworc3RhdGljIGludCBlZmlmc193cml0ZShzdHJ1Y3Qgb3Blbl9maWxlICpmLCB2 b2lkICpidWYsIHNpemVfdCBzaXplLCBzaXplX3QgKnJlc2lkKTsKK3N0YXRpYyBpbnQgZWZpZnNf Y2xvc2Uoc3RydWN0IG9wZW5fZmlsZSAqZik7CitzdGF0aWMgaW50IGVmaWZzX3JlYWQoc3RydWN0 IG9wZW5fZmlsZSAqZiwgdm9pZCAqYnVmLCBzaXplX3Qgc2l6ZSwgc2l6ZV90ICpyZXNpZCk7Citz dGF0aWMgb2ZmX3QgZWZpZnNfc2VlayhzdHJ1Y3Qgb3Blbl9maWxlICpmLCBvZmZfdCBvZmZzZXQs IGludCB3aGVyZSk7CitzdGF0aWMgaW50IGVmaWZzX3N0YXQoc3RydWN0IG9wZW5fZmlsZSAqZiwg c3RydWN0IHN0YXQgKnNiKTsKK3N0YXRpYyBpbnQgZWZpZnNfcmVhZGRpcihzdHJ1Y3Qgb3Blbl9m aWxlICpmLCBzdHJ1Y3QgZGlyZW50ICpkKTsKKworc3RhdGljIGludCBlZmlmc19kZXZfaW5pdCh2 b2lkKTsKK3N0YXRpYyBpbnQgZWZpZnNfZGV2X3N0cmF0ZWd5KHZvaWQgKiwgaW50LCBkYWRkcl90 LCBzaXplX3QsIHNpemVfdCwgY2hhciAqLCBzaXplX3QgKik7CitzdGF0aWMgaW50IGVmaWZzX2Rl dl9vcGVuKHN0cnVjdCBvcGVuX2ZpbGUgKiwgLi4uKTsKK3N0YXRpYyBpbnQgZWZpZnNfZGV2X2Ns b3NlKHN0cnVjdCBvcGVuX2ZpbGUgKik7CitzdGF0aWMgaW50IGVmaWZzX2Rldl9wcmludChpbnQp OworCitzdHJ1Y3QgZGV2c3cgZWZpZnNfZGV2ID0geworCS5kdl9uYW1lID0gIkVGSSIsCisJLmR2 X3R5cGUgPSBERVZUX0VGSSwKKwkuZHZfaW5pdCA9IGVmaWZzX2Rldl9pbml0LAorCS5kdl9zdHJh dGVneSA9IGVmaWZzX2Rldl9zdHJhdGVneSwKKwkuZHZfb3BlbiA9IGVmaWZzX2Rldl9vcGVuLAor CS5kdl9jbG9zZSA9IGVmaWZzX2Rldl9jbG9zZSwKKwkuZHZfaW9jdGwgPSBub2lvY3RsLAorCS5k dl9wcmludCA9IGVmaWZzX2Rldl9wcmludCwKKwkuZHZfY2xlYW51cCA9IE5VTEwKK307CisKK3N0 cnVjdCBmc19vcHMgZWZpZnNfZnNvcHMgPSB7CisJIkVGSSIsCisJZWZpZnNfb3BlbiwKKwllZmlm c19jbG9zZSwKKwllZmlmc19yZWFkLAorCWVmaWZzX3dyaXRlLAorCWVmaWZzX3NlZWssCisJZWZp ZnNfc3RhdCwKKwllZmlmc19yZWFkZGlyCit9OworCitzdGF0aWMgaW50CitlZmlmc19kZXZfaW5p dCh2b2lkKQoreworCUVGSV9IQU5ETEUgKmhpbjsKKwlFRklfU1RBVFVTIHN0YXR1czsKKwlVSU5U TiBzejsKKwl1X2ludCBuLCBuaW4sIHVuaXQ7CisJaW50IGVycjsKKworCXN6ID0gMDsKKwloaW4g PSBOVUxMOworCXN0YXR1cyA9IEJTLT5Mb2NhdGVIYW5kbGUoQnlQcm90b2NvbCwgJlNpbXBsZUZp bGVTeXN0ZW1Qcm90b2NvbEdVSUQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg MCwgJnN6LCAwKTsKKwlpZiAoc3RhdHVzID09IEVGSV9CVUZGRVJfVE9PX1NNQUxMKSB7CisJCWhp biA9IChFRklfSEFORExFICopbWFsbG9jKHN6KTsKKwkJc3RhdHVzID0gQlMtPkxvY2F0ZUhhbmRs ZShCeVByb3RvY29sLAorICAgICAgICAgICAgICAgICAgICAmU2ltcGxlRmlsZVN5c3RlbVByb3Rv Y29sR1VJRCwgMCwgJnN6LCBoaW4pOworCQlpZiAoRUZJX0VSUk9SKHN0YXR1cykpCisJCQlmcmVl KGhpbik7CisJfQorCWlmIChFRklfRVJST1Ioc3RhdHVzKSkKKwkJcmV0dXJuIChlZmlfc3RhdHVz X3RvX2Vycm5vKHN0YXR1cykpOworCisJLyogRmlsdGVyIGhhbmRsZXMgdG8gb25seSBpbmNsdWRl IEZyZWVCU0QgcGFydGl0aW9ucy4gKi8KKwluaW4gPSBzeiAvIHNpemVvZihFRklfSEFORExFKTsK Kwl1bml0ID0gMDsKKworCWZvciAobiA9IDA7IG4gPCBuaW47IG4rKykgeworCQlzdGF0dXMgPSBC Uy0+T3BlblByb3RvY29sKGhpbltuXSwgJlNpbXBsZUZpbGVTeXN0ZW1Qcm90b2NvbEdVSUQsCisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOVUxMLCBJSCwgTlVMTCwK KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVGSV9PUEVOX1BST1RP Q09MX1RFU1RfUFJPVE9DT0wpOworCQlpZiAoRUZJX0VSUk9SKHN0YXR1cykpCisJCQljb250aW51 ZTsKKworICAgICAgICAgICAgICAgIGVmaV9oYW5kbGVfdXBkYXRlX2RldihoaW5bbl0sICZlZmlm c19kZXYsIHVuaXQrKywgMCk7CisJfQorCisJZnJlZShoaW4pOworCXJldHVybiAoZXJyKTsKK30K KworCitzdGF0aWMgaW50CitlZmlmc19kZXZfcHJpbnQoaW50IHZlcmJvc2UpCit7CisJY2hhciBs aW5lWzgwXTsKKyAgICAgICAgRUZJX0RFVklDRV9QQVRIICpkZXZwYXRoOworICAgICAgICBFRklf QkxPQ0tfSU8gKmJsa2lvOworCUVGSV9IQU5ETEUgaCwgKmhpbjsKKwlFRklfU1RBVFVTIHN0YXR1 czsKKwl1X2ludCB1bml0LCBuOworCisJZm9yICh1bml0ID0gMCwgaCA9IGVmaV9maW5kX2hhbmRs ZSgmZWZpZnNfZGV2LCAwKTsKKwkgICAgaCAhPSBOVUxMOyBoID0gZWZpX2ZpbmRfaGFuZGxlKCZl Zmlmc19kZXYsICsrdW5pdCkpIHsKKwkJc3ByaW50ZihsaW5lLCAiICAgICVzJWQ6IiwgZWZpZnNf ZGV2LmR2X25hbWUsIHVuaXQpOworCQlwYWdlcl9vdXRwdXQobGluZSk7CisgICAgICAgICAgICAg ICAgcGFnZXJfb3V0cHV0KCIgICAgRUZJKFNJTVBMRV9GSUxFX1NZU1RFTSIpOworCisJCXN0YXR1 cyA9IEJTLT5IYW5kbGVQcm90b2NvbChoaW5bbl0sICZEZXZpY2VQYXRoR1VJRCwKKwkJICAgICh2 b2lkICoqKSZkZXZwYXRoKTsKKwkJaWYgKCFFRklfRVJST1Ioc3RhdHVzKSkgeworICAgICAgICAg ICAgICAgICAgICAgICAgcGFnZXJfb3V0cHV0KCIsIERFVklDRV9QQVRIIik7CisJCX0KKworCQlz dGF0dXMgPSBCUy0+SGFuZGxlUHJvdG9jb2woaGluW25dLCAmQmxvY2tJb1Byb3RvY29sR1VJRCwK KwkJICAgICh2b2lkICoqKSZibGtpbyk7CisJCWlmICghRUZJX0VSUk9SKHN0YXR1cykpIHsKKyAg ICAgICAgICAgICAgICAgICAgICAgIHBhZ2VyX291dHB1dCgiLCBCTE9DS19JTyIpOworCQl9CisJ CXBhZ2VyX291dHB1dCgiKVxuIik7CisJfQorICAgICAgICByZXR1cm4gKDApOworfQorCitzdGF0 aWMgaW50CitlZmlmc19kZXZfb3BlbihzdHJ1Y3Qgb3Blbl9maWxlICpmLCAuLi4pCit7CisJdmFf bGlzdCBhcmdzOworCXN0cnVjdCBkZXZkZXNjICpkZXY7CisJRUZJX0ZJTEVfSU9fSU5URVJGQUNF ICpmc2lmYWNlOworCUVGSV9IQU5ETEUgaDsKKwlFRklfU1RBVFVTIHN0YXR1czsKKworCXZhX3N0 YXJ0KGFyZ3MsIGYpOworCWRldiA9IHZhX2FyZyhhcmdzLCBzdHJ1Y3QgZGV2ZGVzYyopOworCXZh X2VuZChhcmdzKTsKKworCWggPSBlZmlfZmluZF9oYW5kbGUoJmVmaWZzX2RldiwgZGV2LT5kX3Vu aXQpOworCisJaWYgKGggPT0gTlVMTCkKKwkJcmV0dXJuIChFSU5WQUwpOworCisgICAgICAgIHN0 YXR1cyA9IEJTLT5PcGVuUHJvdG9jb2woaCwgJlNpbXBsZUZpbGVTeXN0ZW1Qcm90b2NvbEdVSUQs CisgICAgICAgICAgICAodm9pZCoqKSZmc2lmYWNlLCBJSCwgTlVMTCwgRUZJX09QRU5fUFJPVE9D T0xfR0VUX1BST1RPQ09MKTsKKworICAgICAgICBpZiAoRUZJX0VSUk9SKHN0YXR1cykpIHsKKwkJ cmV0dXJuIChlZmlfc3RhdHVzX3RvX2Vycm5vKHN0YXR1cykpOworICAgICAgICB9CisKKyAgICAg ICAgZGV2LT5kX29wZW5kYXRhID0gZnNpZmFjZTsKKwlyZXR1cm4gKDApOworfQorCitzdGF0aWMg aW50CitlZmlmc19kZXZfY2xvc2Uoc3RydWN0IG9wZW5fZmlsZSAqZikKK3sKKwlzdHJ1Y3QgZGV2 ZGVzYyAqZGV2OworCUVGSV9IQU5ETEUgaDsKKyAgICAgICAgRUZJX1NUQVRVUyBzdGF0dXM7CisK KwlkZXYgPSAoc3RydWN0IGRldmRlc2MgKikoZi0+Zl9kZXZkYXRhKTsKKwloID0gZWZpX2ZpbmRf aGFuZGxlKCZlZmlmc19kZXYsIGRldi0+ZF91bml0KTsKKworCWlmIChoID09IE5VTEwpCisJCXJl dHVybiAoRUlOVkFMKTsKKworCWlmIChkZXYtPmRfb3BlbmRhdGEgPT0gTlVMTCkKKwkJcmV0dXJu IChFSU5WQUwpOworCisgICAgICAgIHN0YXR1cyA9IEJTLT5DbG9zZVByb3RvY29sKGgsICZTaW1w bGVGaWxlU3lzdGVtUHJvdG9jb2xHVUlELCBJSCwgTlVMTCk7CisKKyAgICAgICAgaWYgKEVGSV9F UlJPUihzdGF0dXMpKQorCQlyZXR1cm4gKGVmaV9zdGF0dXNfdG9fZXJybm8oc3RhdHVzKSk7CisK KwlkZXYtPmRfb3BlbmRhdGEgPSBOVUxMOworCXJldHVybiAoMCk7Cit9CisKKworLyogUmF3IEkv TyBpc24ndCBzdXBwb3J0ZWQgb24gRUZJIEZTIGRldmljZXMsIGFzIHRoZXkgdGFsayB0aHJvdWdo CisgKiBTSU1QTEVfRklMRV9TWVNURU1fSU5URVJGQUNFLgorICovCitzdGF0aWMgaW50CitlZmlm c19kZXZfc3RyYXRlZ3kodm9pZCAqZGV2ZGF0YSBfX3VudXNlZCwgaW50IHJ3IF9fdW51c2VkLCBk YWRkcl90IGJsayBfX3VudXNlZCwKKyAgICAgICAgICAgICAgICAgICBzaXplX3Qgb2Zmc2V0LCBz aXplX3Qgc2l6ZSBfX3VudXNlZCwgY2hhciAqYnVmIF9fdW51c2VkLAorICAgICAgICAgICAgICAg ICAgIHNpemVfdCAqcnNpemUgX191bnVzZWQpCit7CisgICAgICAgIHByaW50ZigiUmF3IEkvTyBu b3Qgc3VwcG9ydGVkIG9uIEVGSSBGUyBpbnRlcmZhY2VcbiIpOworCXJldHVybiBFTk9UU1VQOwor fQorCisvKgorICogT3BlbiBhIGZpbGUuCisgKi8KK3N0YXRpYyBpbnQKK2VmaWZzX29wZW4oY29u c3QgY2hhciAqdXBhdGgsIHN0cnVjdCBvcGVuX2ZpbGUgKmYpCit7CisJc3RydWN0IGRldmRlc2Mg KmRldjsKKwlFRklfRklMRV9JT19JTlRFUkZBQ0UgKmZzaWZhY2U7CisJRUZJX0ZJTEVfSEFORExF IHJvb3Q7CisgICAgICAgIEVGSV9TVEFUVVMgc3RhdHVzOworICAgICAgICBDSEFSMTYgcGF0aFtz dHJsZW4odXBhdGgpICsgMV07CisKKwlkZXYgPSAoc3RydWN0IGRldmRlc2MgKikoZi0+Zl9kZXZk YXRhKTsKKyAgICAgICAgZnNpZmFjZSA9IGRldi0+ZF9vcGVuZGF0YTsKKworICAgICAgICBpZiAo IXN0cmNtcCh1cGF0aCwgIiIpIHx8ICFzdHJjbXAodXBhdGgsICIvIikpIHsKKyAgICAgICAgICAg ICAgICByZXR1cm4gKGZzaWZhY2UtPk9wZW5Wb2x1bWUoZnNpZmFjZSwKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKEVGSV9GSUxFX0hBTkRMRSopJihmLT5mX2Zz ZGF0YSkpKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBzdGF0dXMgPSBmc2lm YWNlLT5PcGVuVm9sdW1lKGZzaWZhY2UsICZyb290KTsKKworICAgICAgICAgICAgICAgIGlmIChF RklfRVJST1Ioc3RhdHVzKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIChlZmlf c3RhdHVzX3RvX2Vycm5vKHN0YXR1cykpOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAg ICAgICAgIHN0cmNweV90b18xNihwYXRoLCB1cGF0aCk7CisgICAgICAgICAgICAgICAgc3RhdHVz ID0gcm9vdC0+T3Blbihyb290LCAoRUZJX0ZJTEVfSEFORExFKikmKGYtPmZfZnNkYXRhKSwgcGF0 aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVGSV9GSUxFX01PREVfUkVB RCwgMCk7CisKKyAgICAgICAgICAgICAgICByb290LT5DbG9zZShyb290KTsKKworICAgICAgICAg ICAgICAgIGlmIChFRklfRVJST1Ioc3RhdHVzKSkgeworICAgICAgICAgICAgICAgICAgICAgICAg cmV0dXJuIChlZmlfc3RhdHVzX3RvX2Vycm5vKHN0YXR1cykpOworICAgICAgICAgICAgICAgIH0K KworICAgICAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICB9Cit9CisKK3N0YXRpYyBpbnQK K2VmaWZzX2Nsb3NlKHN0cnVjdCBvcGVuX2ZpbGUgKmYpCit7CisgICAgICAgIEVGSV9GSUxFX0hB TkRMRSBmaWxlID0gKEVGSV9GSUxFX0hBTkRMRSlmLT5mX2ZzZGF0YTsKKyAgICAgICAgRUZJX1NU QVRVUyBzdGF0dXM7CisKKyAgICAgICAgc3RhdHVzID0gZmlsZS0+Q2xvc2UoZmlsZSk7CisKKyAg ICAgICAgaWYgKEVGSV9FUlJPUihzdGF0dXMpKQorCQlyZXR1cm4gKGVmaV9zdGF0dXNfdG9fZXJy bm8oc3RhdHVzKSk7CisKKyAgICAgICAgcmV0dXJuICgwKTsKK30KKworc3RhdGljIGludAorZWZp ZnNfcmVhZChzdHJ1Y3Qgb3Blbl9maWxlICpmLCB2b2lkICpzdGFydCwgc2l6ZV90IHNpemUsIHNp emVfdCAqcmVzaWQgLyogb3V0ICovKQoreworICAgICAgICBFRklfRklMRV9IQU5ETEUgZmlsZSA9 IChFRklfRklMRV9IQU5ETEUpZi0+Zl9mc2RhdGE7CisgICAgICAgIFVJTlROIHJlYWRzaXplID0g c2l6ZTsKKyAgICAgICAgRUZJX1NUQVRVUyBzdGF0dXM7CisKKyAgICAgICAgc3RhdHVzID0gZmls ZS0+UmVhZChmaWxlLCAmcmVhZHNpemUsIHN0YXJ0KTsKKworICAgICAgICBpZiAoRUZJX0VSUk9S KHN0YXR1cykpCisJCXJldHVybiAoZWZpX3N0YXR1c190b19lcnJubyhzdGF0dXMpKTsKKworCWlm IChyZXNpZCkKKwkJKnJlc2lkID0gc2l6ZSAtIHJlYWRzaXplOworCisJcmV0dXJuICgwKTsKK30K Kworc3RhdGljIGludAorZWZpZnNfd3JpdGUoc3RydWN0IG9wZW5fZmlsZSAqZiwgdm9pZCAqc3Rh cnQsIHNpemVfdCBzaXplLAorICAgICAgICAgICAgc2l6ZV90ICpyZXNpZCAvKiBvdXQgKi8pCit7 CisgICAgICAgIEVGSV9GSUxFX0hBTkRMRSBmaWxlID0gKEVGSV9GSUxFX0hBTkRMRSlmLT5mX2Zz ZGF0YTsKKyAgICAgICAgVUlOVE4gd3JpdGVzaXplID0gc2l6ZTsKKyAgICAgICAgRUZJX1NUQVRV UyBzdGF0dXM7CisKKyAgICAgICAgc3RhdHVzID0gZmlsZS0+V3JpdGUoZmlsZSwgJndyaXRlc2l6 ZSwgc3RhcnQpOworCisgICAgICAgIGlmIChFRklfRVJST1Ioc3RhdHVzKSkKKwkJcmV0dXJuIChl Zmlfc3RhdHVzX3RvX2Vycm5vKHN0YXR1cykpOworCisJaWYgKHJlc2lkKQorCQkqcmVzaWQgPSBz aXplIC0gd3JpdGVzaXplOworCisJcmV0dXJuICgwKTsKK30KKworc3RhdGljIG9mZl90CitlZmlm c19zZWVrKHN0cnVjdCBvcGVuX2ZpbGUgKmYsIG9mZl90IG9mZnNldCwgaW50IHdoZXJlKQorewor ICAgICAgICBFRklfRklMRV9IQU5ETEUgZmlsZSA9IChFRklfRklMRV9IQU5ETEUpZi0+Zl9mc2Rh dGE7CisgICAgICAgIFVJTlQ2NCBwb3M7CisgICAgICAgIEVGSV9TVEFUVVMgc3RhdHVzOworCisJ c3dpdGNoICh3aGVyZSkgeworCWNhc2UgU0VFS19TRVQ6CisgICAgICAgICAgICAgICAgc3RhdHVz ID0gZmlsZS0+U2V0UG9zaXRpb24oZmlsZSwgb2Zmc2V0KTsKKworICAgICAgICAgICAgICAgIGlm IChzdGF0dXMgIT0gRUZJX1NVQ0NFU1MpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGVycm5v ID0gKGVmaV9zdGF0dXNfdG9fZXJybm8oc3RhdHVzKSk7CisgICAgICAgICAgICAgICAgICAgICAg ICByZXR1cm4gLTE7CisgICAgICAgICAgICAgICAgfQorCisJCWJyZWFrOworCWNhc2UgU0VFS19D VVI6CisgICAgICAgICAgICAgICAgc3RhdHVzID0gZmlsZS0+R2V0UG9zaXRpb24oZmlsZSwgJnBv cyk7CisKKyAgICAgICAgICAgICAgICBpZiAoc3RhdHVzICE9IEVGSV9TVUNDRVNTKSB7CisgICAg ICAgICAgICAgICAgICAgICAgICBlcnJubyA9IChlZmlfc3RhdHVzX3RvX2Vycm5vKHN0YXR1cykp OworICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICAgICAgICAgIH0K KworICAgICAgICAgICAgICAgIHN0YXR1cyA9IGZpbGUtPlNldFBvc2l0aW9uKGZpbGUsIHBvcyAr IG9mZnNldCk7CisKKyAgICAgICAgICAgICAgICBpZiAoc3RhdHVzICE9IEVGSV9TVUNDRVNTKSB7 CisgICAgICAgICAgICAgICAgICAgICAgICBlcnJubyA9IChlZmlfc3RhdHVzX3RvX2Vycm5vKHN0 YXR1cykpOworICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICAgICAg ICAgIH0KKworCQlicmVhazsKKwljYXNlIFNFRUtfRU5EOgorICAgICAgICAgICAgICAgIHN0YXR1 cyA9IGZpbGUtPlNldFBvc2l0aW9uKGZpbGUsIDB4ZmZmZmZmZmZmZmZmZmZmZik7CisKKyAgICAg ICAgICAgICAgICBpZiAoc3RhdHVzICE9IEVGSV9TVUNDRVNTKSB7CisgICAgICAgICAgICAgICAg ICAgICAgICBlcnJubyA9IChlZmlfc3RhdHVzX3RvX2Vycm5vKHN0YXR1cykpOworICAgICAgICAg ICAgICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICAgICAgICAgIH0KKwlkZWZhdWx0Ogor CQllcnJubyA9IEVJTlZBTDsKKwkJcmV0dXJuICgtMSk7CisJfQorCisgICAgICAgIHN0YXR1cyA9 IGZpbGUtPkdldFBvc2l0aW9uKGZpbGUsICZwb3MpOworCisgICAgICAgIGlmIChzdGF0dXMgIT0g RUZJX1NVQ0NFU1MpIHsKKyAgICAgICAgICAgICAgICBlcnJubyA9IChlZmlfc3RhdHVzX3RvX2Vy cm5vKHN0YXR1cykpOworICAgICAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgfQorCisJ cmV0dXJuIChwb3MpOworfQorCisvKiBTSU1QTEVfRklMRV9TWVNURU1fUFJPVE9DT0wgaXMgZ2Vh cmVkIHRvd2FyZHMgRkFULCBzbyB3ZSBjYW4ndAorICogcmVwcm9kdWNlIHN0YXQgd2l0aCBhYnNv bHV0ZSBmaWRlbGl0eS4KKyAqLworc3RhdGljIGludAorZWZpZnNfc3RhdChzdHJ1Y3Qgb3Blbl9m aWxlICpmLCBzdHJ1Y3Qgc3RhdCAqc2IpCit7CisgICAgICAgIEVGSV9GSUxFX0hBTkRMRSBmaWxl OworICAgICAgICBVSU5UTiBzaXplID0gMDsKKyAgICAgICAgRUZJX0ZJTEVfSU5GTyAqZmluZm87 OworICAgICAgICBFRklfU1RBVFVTIHN0YXR1czsKKworICAgICAgICBmaWxlID0gKEVGSV9GSUxF X0hBTkRMRSlmLT5mX2ZzZGF0YTsKKyAgICAgICAgc3RhdHVzID0gZmlsZS0+R2V0SW5mbyhmaWxl LCAmRmlsZUluZm9HVUlELCAmc2l6ZSwgTlVMTCk7CisKKyAgICAgICAgaWYgKHN0YXR1cyAhPSBF RklfQlVGRkVSX1RPT19TTUFMTCkgeworICAgICAgICAgICAgICAgIGVycm5vID0gKGVmaV9zdGF0 dXNfdG9fZXJybm8oc3RhdHVzKSk7CisgICAgICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAg ICB9CisKKyAgICAgICAgZmluZm8gPSBtYWxsb2Moc2l6ZSk7CisgICAgICAgIHN0YXR1cyA9IGZp bGUtPkdldEluZm8oZmlsZSwgJkZpbGVJbmZvR1VJRCwgJnNpemUsIGZpbmZvKTsKKworICAgICAg ICBpZiAoc3RhdHVzICE9IEVGSV9TVUNDRVNTKSB7CisgICAgICAgICAgICAgICAgZXJybm8gPSAo ZWZpX3N0YXR1c190b19lcnJubyhzdGF0dXMpKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gLTE7 CisgICAgICAgIH0KKworICAgICAgICAvKiBXZSBjYW4ndCBwcm9wZXJseSBmaWxsIHRoZXNlIGlu Li4uICovCisgICAgICAgIHNiLT5zdF9pbm8gPSAwOworICAgICAgICBzYi0+c3RfbmxpbmsgPSAw OworICAgICAgICBzYi0+c3RfdWlkID0gMDsKKyAgICAgICAgc2ItPnN0X2dpZCA9IDA7CisgICAg ICAgIHNiLT5zdF9ibGtzaXplID0gNTEyOworICAgICAgICAvKiBCdWlsZCB0aGUgbW9kZSBmaWVs ZCAqLworICAgICAgICBpZiAoZmluZm8tPkF0dHJpYnV0ZSAmIEVGSV9GSUxFX0RJUkVDVE9SWSkg eworICAgICAgICAgICAgICAgIHNiLT5zdF9tb2RlID0gU19JRkRJUjsKKyAgICAgICAgfSBlbHNl IHsKKyAgICAgICAgICAgICAgICBzYi0+c3RfbW9kZSA9IFNfSUZSRUc7CisgICAgICAgIH0KKwor ICAgICAgICBpZiAoZmluZm8tPkF0dHJpYnV0ZSAmIEVGSV9GSUxFX01PREVfUkVBRCkgeworICAg ICAgICAgIHNiLT5zdF9tb2RlID0gU19JUlVTUiB8IFNfSVhVU1IgfCBTX0lSR1JQIHwKKyAgICAg ICAgICAgIFNfSVhHUlAgfCBTX0lST1RIIHwgU19JWE9USDsKKyAgICAgICAgfQorCisgICAgICAg IGlmIChmaW5mby0+QXR0cmlidXRlICYgRUZJX0ZJTEVfTU9ERV9SRUFEKSB7CisgICAgICAgICAg c2ItPnN0X21vZGUgPSBTX0lXVVNSIHwgU19JV0dSUCB8IFNfSVdPVEg7CisgICAgICAgIH0KKyAg ICAgICAgLyogVGhpcyBtYXkgb3IgbWF5IG5vdCBiZSBzdXBwb3J0ZWQsIGRlcGVuZGluZyBvbiB0 aGUgRlMgZHJpdmVyICovCisgICAgICAgIHNiLT5zdF9ibG9ja3MgPSBmaW5mby0+UGh5c2ljYWxT aXplIC8gNTEyOworICAgICAgICAvKiBUaGVzZSBmaWVsZHMgd2UgY2FuIGdldCByaWdodCAqLwor ICAgICAgICBzYi0+c3Rfc2l6ZSA9IGZpbmZvLT5GaWxlU2l6ZTsKKyAgICAgICAgc2ItPnN0X2F0 aW1lID0gZnJvbV9lZmlfdGltZSgmKGZpbmZvLT5MYXN0QWNjZXNzVGltZSkpOworICAgICAgICBz Yi0+c3RfbXRpbWUgPSBmcm9tX2VmaV90aW1lKCYoZmluZm8tPk1vZGlmaWNhdGlvblRpbWUpKTsK KyAgICAgICAgc2ItPnN0X2N0aW1lID0gZnJvbV9lZmlfdGltZSgmKGZpbmZvLT5DcmVhdGVUaW1l KSk7CisKKyAgICAgICAgZnJlZShmaW5mbyk7CisKKyAgICAgICAgcmV0dXJuICgwKTsKK30KKwor c3RhdGljIGludAorZWZpZnNfcmVhZGRpcihzdHJ1Y3Qgb3Blbl9maWxlICpmLCBzdHJ1Y3QgZGly ZW50ICpkKQoreworICAgICAgICBFRklfRklMRV9IQU5ETEUgZmlsZTsKKyAgICAgICAgVUlOVE4g c2l6ZSA9IDA7CisgICAgICAgIEVGSV9GSUxFX0lORk8gKmZpbmZvOzsKKyAgICAgICAgRUZJX1NU QVRVUyBzdGF0dXM7CisKKyAgICAgICAgZmlsZSA9IChFRklfRklMRV9IQU5ETEUpZi0+Zl9mc2Rh dGE7CisgICAgICAgIHN0YXR1cyA9IGZpbGUtPlJlYWQoZmlsZSwgJnNpemUsIE5VTEwpOworCisg ICAgICAgIGlmIChzdGF0dXMgIT0gRUZJX0JVRkZFUl9UT09fU01BTEwpIHsKKyAgICAgICAgICAg ICAgICBlcnJubyA9IChlZmlfc3RhdHVzX3RvX2Vycm5vKHN0YXR1cykpOworICAgICAgICAgICAg ICAgIHJldHVybiAtMTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChzaXplID09IDApIHsKKyAg ICAgICAgICAgICAgICByZXR1cm4gKEVOT0VOVCk7CisgICAgICAgIH0KKworICAgICAgICBmaW5m byA9IG1hbGxvYyhzaXplKTsKKyAgICAgICAgc3RhdHVzID0gZmlsZS0+UmVhZChmaWxlLCAmc2l6 ZSwgZmluZm8pOworCisgICAgICAgIGlmIChzdGF0dXMgIT0gRUZJX1NVQ0NFU1MpIHsKKyAgICAg ICAgICAgICAgICBlcnJubyA9IChlZmlfc3RhdHVzX3RvX2Vycm5vKHN0YXR1cykpOworICAgICAg ICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgfQorCisgICAgICAgIHN0cmNweV9mcm9tXzE2 KGQtPmRfbmFtZSwgZmluZm8tPkZpbGVOYW1lKTsKKyAgICAgICAgZC0+ZF9uYW1sZW4gPSBzdHJs ZW4oZC0+ZF9uYW1lKTsKKyAgICAgICAgZC0+ZF9yZWNsZW4gPSBzaXplb2Yoc3RydWN0IGRpcmVu dCk7CisgICAgICAgIC8qIFdlIGNhbid0IGZhaXRoZnVsbHkgcmVwcm9kdWNlIHRoaXMgZHVlIHRv IHRoZSBsaW1pdGF0aW9ucworICAgICAgICAgKiBvZiB0aGUgU0lNUExFX0ZJTEVfU1lTVEVNIGlu dGVyZmFjZSAqLworICAgICAgICBkLT5kX2ZpbGVubyA9IDA7CisKKyAgICAgICAgZnJlZShmaW5m byk7CisKKyAgICAgICAgcmV0dXJuICgwKTsKK30KZGlmZiAtLWdpdCBzeXMvYm9vdC9lZmkvbGli ZWZpL2Vycm5vLmMgc3lzL2Jvb3QvZWZpL2xpYmVmaS9lcnJuby5jCmluZGV4IGZhYzkwM2ZhZjI3 Li4wZjM1NGMzZjNjOCAxMDA2NDQKLS0tIHN5cy9ib290L2VmaS9saWJlZmkvZXJybm8uYworKysg c3lzL2Jvb3QvZWZpL2xpYmVmaS9lcnJuby5jCkBAIC0zMCw2ICszMCw2OSBAQCBfX0ZCU0RJRCgi JEZyZWVCU0QkIik7CiAjaW5jbHVkZSA8ZWZpLmg+CiAjaW5jbHVkZSA8ZWZpbGliLmg+CiAKK0VG SV9TVEFUVVMKK2Vycm5vX3RvX2VmaV9zdGF0dXMoaW50IGVycm5vKQoreworICAgICAgICBFRklf U1RBVFVTIHN0YXR1czsKKworICAgICAgICBzd2l0Y2ggKGVycm5vKSB7CisgICAgICAgIGNhc2Ug RVBFUk06CisgICAgICAgICAgICAgICAgc3RhdHVzID0gRUZJX0FDQ0VTU19ERU5JRUQ7CisgICAg ICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBFT1ZFUkZMT1c6CisgICAgICAgICAg ICAgICAgc3RhdHVzID0gRUZJX0JVRkZFUl9UT09fU01BTEw7CisgICAgICAgICAgICAgICAgYnJl YWs7CisKKyAgICAgICAgY2FzZSBFSU86CisgICAgICAgICAgICAgICAgc3RhdHVzID0gRUZJX0RF VklDRV9FUlJPUjsKKyAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIEVJTlZB TDoKKyAgICAgICAgICAgICAgICBzdGF0dXMgPSBFRklfSU5WQUxJRF9QQVJBTUVURVI7CisgICAg ICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBFU1RBTEU6CisgICAgICAgICAgICAg ICAgc3RhdHVzID0gRUZJX01FRElBX0NIQU5HRUQ7CisgICAgICAgICAgICAgICAgYnJlYWs7CisK KyAgICAgICAgY2FzZSBFTlhJTzoKKyAgICAgICAgICAgICAgICBzdGF0dXMgPSBFRklfTk9fTUVE SUE7CisgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBFTk9FTlQ6CisgICAg ICAgICAgICAgICAgc3RhdHVzID0gRUZJX05PVF9GT1VORDsKKyAgICAgICAgICAgICAgICBicmVh azsKKworICAgICAgICBjYXNlIEVOT01FTToKKyAgICAgICAgICAgICAgICBzdGF0dXMgPSBFRklf T1VUX09GX1JFU09VUkNFUzsKKyAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNl IEVOT1RTVVA6CisgICAgICAgIGNhc2UgRU5PREVWOgorICAgICAgICAgICAgICAgIHN0YXR1cyA9 IEVGSV9VTlNVUFBPUlRFRDsKKyAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNl IEVOT1NQQzoKKyAgICAgICAgICAgICAgICBzdGF0dXMgPSBFRklfVk9MVU1FX0ZVTEw7CisgICAg ICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBFQUNDRVM6CisgICAgICAgICAgICAg ICAgc3RhdHVzID0gRUZJX1dSSVRFX1BST1RFQ1RFRDsKKyAgICAgICAgICAgICAgICBicmVhazsK KworICAgICAgICBjYXNlIDA6CisgICAgICAgICAgICAgICAgc3RhdHVzID0gRUZJX1NVQ0NFU1M7 CisgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAg ICAgICBzdGF0dXMgPSBFRklfREVWSUNFX0VSUk9SOworICAgICAgICAgICAgICAgIGJyZWFrOwor ICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIChzdGF0dXMpOworfQorCiBpbnQKIGVmaV9zdGF0 dXNfdG9fZXJybm8oRUZJX1NUQVRVUyBzdGF0dXMpCiB7CmRpZmYgLS1naXQgc3lzL2Jvb3QvZWZp L2xpYmVmaS9oYW5kbGVzLmMgc3lzL2Jvb3QvZWZpL2xpYmVmaS9oYW5kbGVzLmMKaW5kZXggMWU0 ZWY2ZmZiZDUuLmMxMTgwODVjMWM5IDEwMDY0NAotLS0gc3lzL2Jvb3QvZWZpL2xpYmVmaS9oYW5k bGVzLmMKKysrIHN5cy9ib290L2VmaS9saWJlZmkvaGFuZGxlcy5jCkBAIC00MSwyMSArNDEsMzYg QEAgc3RydWN0IGVudHJ5IHsKIHN0cnVjdCBlbnRyeSAqZW50cnk7CiBpbnQgbmVudHJpZXM7CiAK K3N0YXRpYyBpbnQKK2dldF9uZXh0X3VuaXQoc3RydWN0IGRldnN3ICpzdykKK3sKKyAgICAgICAg aW50IGksIGlkeDsKKworICAgICAgICBmb3IgKGkgPSAwLCBpZHggPSAwOyBpIDwgbmVudHJpZXM7 IGkrKykgeworICAgICAgICAgICAgICAgIGlmIChlbnRyeVtpXS5kZXYgPT0gc3cpIHsKKyAgICAg ICAgICAgICAgICAgICAgICAgIGlkeCsrOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgfQor CisgICAgICAgIHJldHVybiAoaWR4KTsKK30KKwogaW50CiBlZmlfcmVnaXN0ZXJfaGFuZGxlcyhz dHJ1Y3QgZGV2c3cgKnN3LCBFRklfSEFORExFICpoYW5kbGVzLAogICAgIEVGSV9IQU5ETEUgKmFs aWFzZXMsIGludCBjb3VudCkKIHsKIAlzaXplX3Qgc3o7Ci0JaW50IGlkeCwgdW5pdDsKKwlpbnQg aWR4LCB1bml0LCBpOwogCiAJaWR4ID0gbmVudHJpZXM7CiAJbmVudHJpZXMgKz0gY291bnQ7CiAJ c3ogPSBuZW50cmllcyAqIHNpemVvZihzdHJ1Y3QgZW50cnkpOworICAgICAgICB1bml0ID0gZ2V0 X25leHRfdW5pdChzdyk7CiAJZW50cnkgPSAoZW50cnkgPT0gTlVMTCkgPyBtYWxsb2Moc3opIDog cmVhbGxvYyhlbnRyeSwgc3opOwotCWZvciAodW5pdCA9IDA7IGlkeCA8IG5lbnRyaWVzOyBpZHgr KywgdW5pdCsrKSB7Ci0JCWVudHJ5W2lkeF0uaGFuZGxlID0gaGFuZGxlc1t1bml0XTsKKwlmb3Ig KGkgPSAwOyBpZHggPCBuZW50cmllczsgaWR4KyssIHVuaXQrKywgaSsrKSB7CisJCWVudHJ5W2lk eF0uaGFuZGxlID0gaGFuZGxlc1tpXTsKIAkJaWYgKGFsaWFzZXMgIT0gTlVMTCkKLQkJCWVudHJ5 W2lkeF0uYWxpYXMgPSBhbGlhc2VzW3VuaXRdOworCQkJZW50cnlbaWR4XS5hbGlhcyA9IGFsaWFz ZXNbaV07CiAJCWVsc2UKIAkJCWVudHJ5W2lkeF0uYWxpYXMgPSBOVUxMOwogCQllbnRyeVtpZHhd LmRldiA9IHN3OwpAQCAtNjQsNiArNzksMTYgQEAgZWZpX3JlZ2lzdGVyX2hhbmRsZXMoc3RydWN0 IGRldnN3ICpzdywgRUZJX0hBTkRMRSAqaGFuZGxlcywKIAlyZXR1cm4gKDApOwogfQogCitpbnQK K2VmaV9yZWdpc3Rlcl9oYW5kbGUoc3RydWN0IGRldnN3ICpzdywgRUZJX0hBTkRMRSBoYW5kbGUs IEVGSV9IQU5ETEUgYWxpYXMpCit7CisgICAgICAgIGlmIChhbGlhcyA9PSBOVUxMKSB7CisgICAg ICAgICAgICAgICAgcmV0dXJuIGVmaV9yZWdpc3Rlcl9oYW5kbGVzKHN3LCAmaGFuZGxlLCBOVUxM LCAxKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZWZpX3JlZ2lz dGVyX2hhbmRsZXMoc3csICZoYW5kbGUsICZhbGlhcywgMSk7CisgICAgICAgIH0KK30KKwogRUZJ X0hBTkRMRQogZWZpX2ZpbmRfaGFuZGxlKHN0cnVjdCBkZXZzdyAqZGV2LCBpbnQgdW5pdCkKIHsK QEAgLTExNiwzICsxNDEsMjkgQEAgZWZpX2hhbmRsZV91cGRhdGVfZGV2KEVGSV9IQU5ETEUgaCwg c3RydWN0IGRldnN3ICpkZXYsIGludCB1bml0LAogCiAJcmV0dXJuIChFTk9FTlQpOwogfQorCitp bnQKK2VmaV9oYW5kbGVfcmVtb3ZlX2RldihFRklfSEFORExFIGgpCit7CisJaW50IGlkeDsKKwor ICAgICAgICAvKiBGaW5kIHRoZSBlbnRyeSAqLworCWZvciAoaWR4ID0gMDsgaWR4IDwgbmVudHJp ZXM7IGlkeCsrKSB7CisJCWlmIChlbnRyeVtpZHhdLmhhbmRsZSAhPSBoKQorCQkJY29udGludWU7 CisJfQorCisgICAgICAgIGlmIChpZHggPj0gbmVudHJpZXMpCisgICAgICAgICAgICAgICAgcmV0 dXJuIChFTk9FTlQpOworICAgICAgICBlbHNlIGlmIChpZHggPT0gbmVudHJpZXMgLSAxKSB7Cisg ICAgICAgICAgICAgICAgbmVudHJpZXMtLTsKKyAgICAgICAgICAgICAgICBlbnRyeSA9IHJlYWxs b2MoZW50cnksIG5lbnRyaWVzICogc2l6ZW9mKHN0cnVjdCBlbnRyeSkpOworICAgICAgICB9IGVs c2UgeworICAgICAgICAgICAgICAgIG1lbWNweShlbnRyeSArIGlkeCwgZW50cnkgKyBpZHggKyAx LAorICAgICAgICAgICAgICAgICAgICAgICBzaXplb2Yoc3RydWN0IGVudHJ5KSAqIChuZW50cmll cyAtIChpZHggKyAxKSkpOworICAgICAgICAgICAgICAgIG5lbnRyaWVzLS07CisgICAgICAgICAg ICAgICAgZW50cnkgPSByZWFsbG9jKGVudHJ5LCBuZW50cmllcyAqIHNpemVvZihzdHJ1Y3QgZW50 cnkpKTsKKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiAoMCk7Cit9CmRpZmYgLS1naXQgc3lz L2Jvb3QvZWZpL2xpYmVmaS9zdHJpbmcxNi5jIHN5cy9ib290L2VmaS9saWJlZmkvc3RyaW5nMTYu YwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uMjk5ZDcyZGQwZjAKLS0t IC9kZXYvbnVsbAorKysgc3lzL2Jvb3QvZWZpL2xpYmVmaS9zdHJpbmcxNi5jCkBAIC0wLDAgKzEs ODggQEAKKy8qLQorICogQ29weXJpZ2h0IChjKSAyMDE2IEVyaWMgTWNDb3JrbGUKKyAqIEFsbCBy aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt ZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp biB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF RCBCWSBUSEUgQVVUSE9SIEFORCBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAorICogQU5ZIEVY UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU TywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO RVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogQVJFIERJU0NMQUlNRUQuICBJTiBOTyBF VkVOVCBTSEFMTCBUSEUgQVVUSE9SIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKKyAqIEZPUiBB TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBD T05TRVFVRU5USUFMCisgKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUworICogT1IgU0VSVklDRVM7IExPU1MgT0Yg VVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCisgKiBIT1dF VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O VFJBQ1QsIFNUUklDVAorICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5D RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQorICogT1VUIE9GIFRIRSBVU0UgT0Yg VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICog U1VDSCBEQU1BR0UuCisgKgorICogJEZyZWVCU0QkCisgKi8KKworI2luY2x1ZGUgInN0cmluZzE2 LmgiCisjaW5jbHVkZSA8c3RkZGVmLmg+CisKK3NpemVfdAorc3RybGVuMTYoY29uc3QgQ0hBUjE2 ICpzdHIpCit7CisgICAgICAgIHNpemVfdCBpOworCisgICAgICAgIGZvciAoaSA9IDA7IHN0cltp XSAhPSAwOyBpKyspOworCisgICAgICAgIHJldHVybiBpOworfQorCitDSEFSMTYgKgorc3RyY3B5 MTYoQ0hBUjE2ICpkc3QsIGNvbnN0IENIQVIxNiAqc3JjKQoreworICAgICAgICBzdHBjcHkxNihk c3QsIHNyYyk7CisKKyAgICAgICAgcmV0dXJuIChkc3QpOworfQorCitDSEFSMTYgKgorc3RwY3B5 MTYoQ0hBUjE2ICpkc3QsIGNvbnN0IENIQVIxNiAqc3JjKQoreworICAgICAgICBmb3IgKDsgKnNy YyAhPSAwOyBzcmMrKywgZHN0KyspIHsKKyAgICAgICAgICAgICAgICAqZHN0ID0gKnNyYzsKKyAg ICAgICAgfQorCisgICAgICAgICpkc3QgPSAqc3JjOworCisgICAgICAgIHJldHVybiBkc3Q7Cit9 CisKK2NoYXIgKgorc3RyY3B5X2Zyb21fMTYoY2hhciAqZHN0LCBjb25zdCBDSEFSMTYgKnNyYykK K3sKKyAgICAgICAgaW50IGk7CisKKyAgICAgICAgZm9yIChpID0gMDsgc3JjW2ldICE9IDA7IGkr KykgeworICAgICAgICAgICAgICAgIGRzdFtpXSA9IHNyY1tpXTsKKyAgICAgICAgfQorCisgICAg ICAgIGRzdFtpXSA9IDA7CisKKyAgICAgICAgcmV0dXJuIChkc3QpOworfQorCitDSEFSMTYgKgor c3RyY3B5X3RvXzE2KENIQVIxNiAqZHN0LCBjb25zdCBjaGFyICpzcmMpCit7CisgICAgICAgIGlu dCBpOworCisgICAgICAgIGZvciAoaSA9IDA7IHNyY1tpXSAhPSAwOyBpKyspIHsKKyAgICAgICAg ICAgICAgICBkc3RbaV0gPSBzcmNbaV07CisgICAgICAgIH0KKworICAgICAgICBkc3RbaV0gPSAw OworCisgICAgICAgIHJldHVybiAoZHN0KTsKK30KZGlmZiAtLWdpdCBzeXMvYm9vdC9lZmkvbGli ZWZpL3RpbWUuYyBzeXMvYm9vdC9lZmkvbGliZWZpL3RpbWUuYwppbmRleCA5OTgzMWUxY2YxYS4u MmRmNDY2ZTU3YjcgMTAwNjQ0Ci0tLSBzeXMvYm9vdC9lZmkvbGliZWZpL3RpbWUuYworKysgc3lz L2Jvb3QvZWZpL2xpYmVmaS90aW1lLmMKQEAgLTIsMjggKzIsMjggQEAKICAqIENvcHlyaWdodCAo YykgMTk5OSwgMjAwMAogICogSW50ZWwgQ29ycG9yYXRpb24uCiAgKiBBbGwgcmlnaHRzIHJlc2Vy dmVkLgotICogCisgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0 ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKICAqIGFyZSBtZXQ6Ci0g KiAKKyAqCiAgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g dGhlIGFib3ZlIGNvcHlyaWdodAogICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogCisgKgogICogMi4gUmVkaXN0cmli dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK ICAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg ZGlzY2xhaW1lciBpbiB0aGUKICAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKiAKKyAqCiAgKiAzLiBBbGwg YWR2ZXJ0aXNpbmcgbWF0ZXJpYWxzIG1lbnRpb25pbmcgZmVhdHVyZXMgb3IgdXNlIG9mIHRoaXMg c29mdHdhcmUKICAqICAgIG11c3QgZGlzcGxheSB0aGUgZm9sbG93aW5nIGFja25vd2xlZGdlbWVu dDoKLSAqIAorICoKICAqICAgIFRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9w ZWQgYnkgSW50ZWwgQ29ycG9yYXRpb24gYW5kCiAgKiAgICBpdHMgY29udHJpYnV0b3JzLgotICog CisgKgogICogNC4gTmVpdGhlciB0aGUgbmFtZSBvZiBJbnRlbCBDb3Jwb3JhdGlvbiBvciBpdHMg Y29udHJpYnV0b3JzIG1heSBiZQogICogICAgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJv ZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUKICAqICAgIHdpdGhvdXQgc3BlY2lmaWMg cHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotICogCisgKgogICogVEhJUyBTT0ZUV0FSRSBJUyBQ Uk9WSURFRCBCWSBJTlRFTCBDT1JQT1JBVElPTiBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwog ICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg Tk9UIExJTUlURUQgVE8sIFRIRQogICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKQEAgLTM1LDcgKzM1LDcg QEAKICAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVH TElHRU5DRSBPUiBPVEhFUldJU0UpCiAgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV U0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCiAgKiBUSEUgUE9TU0lCSUxJ VFkgT0YgU1VDSCBEQU1BR0UuCi0gKiAKKyAqCiAgKi8KIAogI2luY2x1ZGUgPHN5cy9jZGVmcy5o PgpAQCAtNTgsNiArNTgsNDEgQEAgX19GQlNESUQoIiRGcmVlQlNEJCIpOwogI2RlZmluZSBTRUNT UEVSSE9VUiAoIDYwKjYwICkKICNkZWZpbmUgU0VDU1BFUkRBWQkoMjQgKiBTRUNTUEVSSE9VUikK IAorLyoKKy8vICBUaGVzZSBhcnJheXMgZ2l2ZSB0aGUgY3VtdWxhdGl2ZSBudW1iZXIgb2YgZGF5 cyB1cCB0byB0aGUgZmlyc3Qgb2YgdGhlCisvLyAgbW9udGggbnVtYmVyIHVzZWQgYXMgdGhlIGlu ZGV4ICgxIC0+IDEyKSBmb3IgcmVndWxhciBhbmQgbGVhcCB5ZWFycy4KKy8vICBUaGUgdmFsdWUg YXQgaW5kZXggMTMgaXMgZm9yIHRoZSB3aG9sZSB5ZWFyLgorKi8KK3N0YXRpYyBjb25zdCB0aW1l X3QgQ3VtdWxhdGl2ZURheXNbMl1bMTRdID0geworICB7MCwKKyAgIDAsCisgICAzMSwKKyAgIDMx ICsgMjgsCisgICAzMSArIDI4ICsgMzEsCisgICAzMSArIDI4ICsgMzEgKyAzMCwKKyAgIDMxICsg MjggKyAzMSArIDMwICsgMzEsCisgICAzMSArIDI4ICsgMzEgKyAzMCArIDMxICsgMzAsCisgICAz MSArIDI4ICsgMzEgKyAzMCArIDMxICsgMzAgKyAzMSwKKyAgIDMxICsgMjggKyAzMSArIDMwICsg MzEgKyAzMCArIDMxICsgMzEsCisgICAzMSArIDI4ICsgMzEgKyAzMCArIDMxICsgMzAgKyAzMSAr IDMxICsgMzAsCisgICAzMSArIDI4ICsgMzEgKyAzMCArIDMxICsgMzAgKyAzMSArIDMxICsgMzAg KyAzMSwKKyAgIDMxICsgMjggKyAzMSArIDMwICsgMzEgKyAzMCArIDMxICsgMzEgKyAzMCArIDMx ICsgMzAsCisgICAzMSArIDI4ICsgMzEgKyAzMCArIDMxICsgMzAgKyAzMSArIDMxICsgMzAgKyAz MSArIDMwICsgMzEgfSwKKyAgezAsCisgICAwLAorICAgMzEsCisgICAzMSArIDI5LAorICAgMzEg KyAyOSArIDMxLAorICAgMzEgKyAyOSArIDMxICsgMzAsCisgICAzMSArIDI5ICsgMzEgKyAzMCAr IDMxLAorICAgMzEgKyAyOSArIDMxICsgMzAgKyAzMSArIDMwLAorICAgMzEgKyAyOSArIDMxICsg MzAgKyAzMSArIDMwICsgMzEsCisgICAzMSArIDI5ICsgMzEgKyAzMCArIDMxICsgMzAgKyAzMSAr IDMxLAorICAgMzEgKyAyOSArIDMxICsgMzAgKyAzMSArIDMwICsgMzEgKyAzMSArIDMwLAorICAg MzEgKyAyOSArIDMxICsgMzAgKyAzMSArIDMwICsgMzEgKyAzMSArIDMwICsgMzEsCisgICAzMSAr IDI5ICsgMzEgKyAzMCArIDMxICsgMzAgKyAzMSArIDMxICsgMzAgKyAzMSArIDMwLAorICAgMzEg KyAyOSArIDMxICsgMzAgKyAzMSArIDMwICsgMzEgKyAzMSArIDMwICsgMzEgKyAzMCArIDMxIH19 OworCiB2b2lkCiBlZmlfdGltZV9pbml0KHZvaWQpCiB7CkBAIC02OCw0NSArMTAzLDQ2IEBAIGVm aV90aW1lX2Zpbmkodm9pZCkKIHsKIH0KIAotc3RhdGljIHRpbWVfdAotZWZpX3RpbWUoRUZJX1RJ TUUgKkVUaW1lKQordm9pZAordG9fZWZpX3RpbWUoRUZJX1RJTUUgKmVmaV90aW1lLCB0aW1lX3Qg dGltZSkKIHsKLSAgICAvKgotICAgIC8vICBUaGVzZSBhcnJheXMgZ2l2ZSB0aGUgY3VtdWxhdGl2 ZSBudW1iZXIgb2YgZGF5cyB1cCB0byB0aGUgZmlyc3Qgb2YgdGhlCi0gICAgLy8gIG1vbnRoIG51 bWJlciB1c2VkIGFzIHRoZSBpbmRleCAoMSAtPiAxMikgZm9yIHJlZ3VsYXIgYW5kIGxlYXAgeWVh cnMuCi0gICAgLy8gIFRoZSB2YWx1ZSBhdCBpbmRleCAxMyBpcyBmb3IgdGhlIHdob2xlIHllYXIu Ci0gICAgKi8KLSAgICBzdGF0aWMgdGltZV90IEN1bXVsYXRpdmVEYXlzWzJdWzE0XSA9IHsKLSAg ICB7MCwKLSAgICAgMCwKLSAgICAgMzEsCi0gICAgIDMxICsgMjgsCi0gICAgIDMxICsgMjggKyAz MSwKLSAgICAgMzEgKyAyOCArIDMxICsgMzAsCi0gICAgIDMxICsgMjggKyAzMSArIDMwICsgMzEs Ci0gICAgIDMxICsgMjggKyAzMSArIDMwICsgMzEgKyAzMCwKLSAgICAgMzEgKyAyOCArIDMxICsg MzAgKyAzMSArIDMwICsgMzEsCi0gICAgIDMxICsgMjggKyAzMSArIDMwICsgMzEgKyAzMCArIDMx ICsgMzEsCi0gICAgIDMxICsgMjggKyAzMSArIDMwICsgMzEgKyAzMCArIDMxICsgMzEgKyAzMCwK LSAgICAgMzEgKyAyOCArIDMxICsgMzAgKyAzMSArIDMwICsgMzEgKyAzMSArIDMwICsgMzEsCi0g ICAgIDMxICsgMjggKyAzMSArIDMwICsgMzEgKyAzMCArIDMxICsgMzEgKyAzMCArIDMxICsgMzAs Ci0gICAgIDMxICsgMjggKyAzMSArIDMwICsgMzEgKyAzMCArIDMxICsgMzEgKyAzMCArIDMxICsg MzAgKyAzMSB9LAotICAgIHswLAotICAgICAwLAotICAgICAzMSwKLSAgICAgMzEgKyAyOSwKLSAg ICAgMzEgKyAyOSArIDMxLAotICAgICAzMSArIDI5ICsgMzEgKyAzMCwKLSAgICAgMzEgKyAyOSAr IDMxICsgMzAgKyAzMSwKLSAgICAgMzEgKyAyOSArIDMxICsgMzAgKyAzMSArIDMwLAotICAgICAz MSArIDI5ICsgMzEgKyAzMCArIDMxICsgMzAgKyAzMSwKLSAgICAgMzEgKyAyOSArIDMxICsgMzAg KyAzMSArIDMwICsgMzEgKyAzMSwKLSAgICAgMzEgKyAyOSArIDMxICsgMzAgKyAzMSArIDMwICsg MzEgKyAzMSArIDMwLAotICAgICAzMSArIDI5ICsgMzEgKyAzMCArIDMxICsgMzAgKyAzMSArIDMx ICsgMzAgKyAzMSwKLSAgICAgMzEgKyAyOSArIDMxICsgMzAgKyAzMSArIDMwICsgMzEgKyAzMSAr IDMwICsgMzEgKyAzMCwKLSAgICAgMzEgKyAyOSArIDMxICsgMzAgKyAzMSArIDMwICsgMzEgKyAz MSArIDMwICsgMzEgKyAzMCArIDMxIH19OwotCi0gICAgdGltZV90ICBVVGltZTsgCisgICAgICAg IGlmICh0aW1lID49IDApIHsKKyAgICAgICAgICAgICAgICBmb3IgKGVmaV90aW1lLT5ZZWFyID0g MTk3MDsKKyAgICAgICAgICAgICAgICAgICAgdGltZSA+IEN1bXVsYXRpdmVEYXlzW2lzbGVhcChl ZmlfdGltZS0+WWVhcildWzEzXSAqIFNFQ1NQRVJEQVk7CisgICAgICAgICAgICAgICAgICAgIHRp bWUgLT0gQ3VtdWxhdGl2ZURheXNbaXNsZWFwKGVmaV90aW1lLT5ZZWFyKV1bMTNdICogU0VDU1BF UkRBWSwKKyAgICAgICAgICAgICAgICAgICAgZWZpX3RpbWUtPlllYXIrKyk7CisKKyAgICAgICAg ICAgICAgICBmb3IgKGVmaV90aW1lLT5Nb250aCA9IDA7CisgICAgICAgICAgICAgICAgICAgIHRp bWUgPiBDdW11bGF0aXZlRGF5c1tpc2xlYXAoZWZpX3RpbWUtPlllYXIpXVtlZmlfdGltZS0+TW9u dGhdICoKKyAgICAgICAgICAgICAgICAgICAgICBTRUNTUEVSREFZOworICAgICAgICAgICAgICAg ICAgICBlZmlfdGltZS0+TW9udGgrKyk7CisKKyAgICAgICAgICAgICAgICB0aW1lIC09IEN1bXVs YXRpdmVEYXlzW2lzbGVhcChlZmlfdGltZS0+WWVhcildW2VmaV90aW1lLT5Nb250aCAtIDFdICoK KyAgICAgICAgICAgICAgICAgICAgU0VDU1BFUkRBWTsKKworICAgICAgICAgICAgICAgIGZvciAo ZWZpX3RpbWUtPkRheSA9IDA7IHRpbWUgPiBTRUNTUEVSREFZOworICAgICAgICAgICAgICAgICAg ICB0aW1lIC09IFNFQ1NQRVJEQVksIGVmaV90aW1lLT5EYXkrKyk7CisKKyAgICAgICAgICAgICAg ICBmb3IgKGVmaV90aW1lLT5Ib3VyID0gMDsgdGltZSA+IFNFQ1NQRVJIT1VSOworICAgICAgICAg ICAgICAgICAgICB0aW1lIC09IFNFQ1NQRVJIT1VSLCBlZmlfdGltZS0+SG91cisrKTsKKworICAg ICAgICAgICAgICAgIGZvciAoZWZpX3RpbWUtPk1pbnV0ZSA9IDA7IHRpbWUgPiA2MDsKKyAgICAg ICAgICAgICAgICAgICAgdGltZSAtPSA2MCwgZWZpX3RpbWUtPk1pbnV0ZSsrKTsKKworICAgICAg ICAgICAgICAgIGVmaV90aW1lLT5TZWNvbmQgPSB0aW1lOworICAgICAgICAgICAgICAgIGVmaV90 aW1lLT5OYW5vc2Vjb25kID0gMDsKKyAgICAgICAgICAgICAgICBlZmlfdGltZS0+VGltZVpvbmUg PSAwOworICAgICAgICAgICAgICAgIGVmaV90aW1lLT5EYXlsaWdodCA9IDA7CisgICAgICAgIH0g ZWxzZSB7CisgICAgICAgICAgICAgICAgbWVtc2V0KGVmaV90aW1lLCAwLCBzaXplb2YoRUZJX1RJ TUUpKTsKKyAgICAgICAgfQorfQorCit0aW1lX3QKK2Zyb21fZWZpX3RpbWUoRUZJX1RJTUUgKkVU aW1lKQoreworCisgICAgdGltZV90ICBVVGltZTsKICAgICBpbnQgICAgIFllYXI7CiAKICAgICAv KgpAQCAtMTM0LDcgKzE3MCw3IEBAIGVmaV90aW1lKEVGSV9USU1FICpFVGltZSkKICAgICAvKgog ICAgIC8vIFVUaW1lIHNob3VsZCBub3cgYmUgc2V0IHRvIDAwOjAwOjAwIG9uIEphbiAxIG9mIHRo ZSBmaWxlJ3MgeWVhci4KICAgICAvLwotICAgIC8vIE1vbnRocyAgCisgICAgLy8gTW9udGhzCiAg ICAgKi8KICAgICBVVGltZSArPSAoQ3VtdWxhdGl2ZURheXNbaXNsZWFwKEVUaW1lLT5ZZWFyKV1b RVRpbWUtPk1vbnRoXSAqIFNFQ1NQRVJEQVkpOwogCkBAIC0xNzAsNyArMjA2LDcgQEAgZWZpX3Rp bWUoRUZJX1RJTUUgKkVUaW1lKQogICAgIAkqLwogICAgIAlVVGltZSArPSAoRVRpbWUtPlRpbWVa b25lICogNjApOwogICAgIH0KLSAgICAKKwogICAgIHJldHVybiBVVGltZTsKIH0KIApAQCAtMTk2 LDcgKzIzMiw3IEBAIEVGSV9HZXRUaW1lT2ZEYXkoCiAJLy8gIENvbnZlcnQgdG8gVU5JWCB0aW1l IChpZSBzZWNvbmRzIHNpbmNlIHRoZSBlcG9jaAogCSovCiAKLQl0cC0+dHZfc2VjICA9IGVmaV90 aW1lKCAmRWZpVGltZSApOworCXRwLT50dl9zZWMgID0gZnJvbV9lZmlfdGltZSggJkVmaVRpbWUg KTsKIAl0cC0+dHZfdXNlYyA9IDA7IC8qIEVmaVRpbWUuTmFub3NlY29uZCAqIDEwMDA7ICovCiAK IAkvKgpAQCAtMjIxLDcgKzI1Nyw3IEBAIHRpbWUodGltZV90ICp0bG9jKQogewogCXN0cnVjdCB0 aW1ldmFsIHR2OwogCUVGSV9HZXRUaW1lT2ZEYXkoJnR2LCAwKTsKLQkKKwogCWlmICh0bG9jKQog CQkqdGxvYyA9IHR2LnR2X3NlYzsKIAlyZXR1cm4gdHYudHZfc2VjOwpkaWZmIC0tZ2l0IHN5cy9i b290L2VmaS9sb2FkZXIvTWFrZWZpbGUgc3lzL2Jvb3QvZWZpL2xvYWRlci9NYWtlZmlsZQppbmRl eCBkOWQzNTMyMDE0Zi4uMzAwYzY1YjEwZDkgMTAwNjQ0Ci0tLSBzeXMvYm9vdC9lZmkvbG9hZGVy L01ha2VmaWxlCisrKyBzeXMvYm9vdC9lZmkvbG9hZGVyL01ha2VmaWxlCkBAIC01MCw2ICs1MCw3 IEBAIENXQVJORkxBR1MubWFpbi5jKz0JLVduby1mb3JtYXQKIENGTEFHUys9CS1JJHsuQ1VSRElS fQogQ0ZMQUdTKz0JLUkkey5DVVJESVJ9L2FyY2gvJHtNQUNISU5FfQogQ0ZMQUdTKz0JLUkkey5D VVJESVJ9Ly4uL2luY2x1ZGUKK0NGTEFHUys9CS1JJHsuQ1VSRElSfS8uLi9kcml2ZXJzCiBDRkxB R1MrPQktSSR7LkNVUkRJUn0vLi4vaW5jbHVkZS8ke01BQ0hJTkV9CiBDRkxBR1MrPQktSSR7LkNV UkRJUn0vLi4vLi4vLi4vY29udHJpYi9kZXYvYWNwaWNhL2luY2x1ZGUKIENGTEFHUys9CS1JJHsu Q1VSRElSfS8uLi8uLi8uLgpAQCAtNjgsNiArNjksOCBAQCBDRkxBR1MrPQktRE5PX1BDSSAtREVG SQogTElCU1RBTkQ9CSR7Lk9CSkRJUn0vLi4vLi4vLi4vLi4vbGliL2xpYnN0YW5kL2xpYnN0YW5k LmEKIC5lbmRpZgogCitMSUJFRklfRFJJVkVSUz0JJHsuT0JKRElSfS8uLi9kcml2ZXJzL2xpYmVm aV9kcml2ZXJzLmEKKwogLmlmICFkZWZpbmVkKEJPT1RfSElERV9TRVJJQUxfTlVNQkVSUykKICMg RXhwb3J0IHNlcmlhbCBudW1iZXJzLCBVVUlELCBhbmQgYXNzZXQgdGFnIGZyb20gbG9hZGVyLgog Q0ZMQUdTKz0gLURTTUJJT1NfU0VSSUFMX05VTUJFUlMKQEAgLTE1MCw5ICsxNTMsMTAgQEAgbG9h ZGVyLmVmaTogJHtQUk9HfQogCiBMSUJFRkk9CQkkey5PQkpESVJ9Ly4uL2xpYmVmaS9saWJlZmku YQogCi1EUEFERD0JCSR7TElCRklDTH0gJHtMSUJFRkl9ICR7TElCRkRUfSAke0xJQkVGSV9GRFR9 ICR7TElCU1RBTkR9IFwKLQkJJHtMRFNDUklQVH0KLUxEQUREPQkJJHtMSUJGSUNMfSAke0xJQkVG SX0gJHtMSUJGRFR9ICR7TElCRUZJX0ZEVH0gJHtMSUJTVEFORH0KK0RQQUREPQkJJHtMSUJGSUNM fSAke0xJQkVGSX0gJHtMSUJFRklfRFJJVkVSU30gJHtMSUJGRFR9ICR7TElCRUZJX0ZEVH0gXAor CQkke0xJQlNUQU5EfSAke0xEU0NSSVBUfQorTERBREQ9CQkke0xJQkZJQ0x9ICR7TElCRUZJfSAk e0xJQkVGSV9EUklWRVJTfSAke0xJQkZEVH0gJHtMSUJFRklfRkRUfSBcCisJCSR7TElCU1RBTkR9 CiAKIC5pbmNsdWRlIDxic2QucHJvZy5taz4KIApkaWZmIC0tZ2l0IHN5cy9ib290L2VmaS9sb2Fk ZXIvY29uZi5jIHN5cy9ib290L2VmaS9sb2FkZXIvY29uZi5jCmluZGV4IDM1OTZhNjM2MGMzLi41 NjczM2ZmYTg5OSAxMDA2NDQKLS0tIHN5cy9ib290L2VmaS9sb2FkZXIvY29uZi5jCisrKyBzeXMv Ym9vdC9lZmkvbG9hZGVyL2NvbmYuYwpAQCAtMzEsMzAgKzMxLDIyIEBAIF9fRkJTRElEKCIkRnJl ZUJTRCQiKTsKICNpbmNsdWRlIDxib290c3RyYXAuaD4KICNpbmNsdWRlIDxlZmkuaD4KICNpbmNs dWRlIDxlZmlsaWIuaD4KLSNpZmRlZiBFRklfWkZTX0JPT1QKLSNpbmNsdWRlIDxsaWJ6ZnMuaD4K LSNlbmRpZgorCisjaW5jbHVkZSAiZWZpX2RyaXZlcnMuaCIKKworY29uc3QgZWZpX2RyaXZlcl90 ICplZmlfZHJpdmVyc1tdID0geworICAgICAgICAmZnNfZHJpdmVyLAorICAgICAgICBOVUxMCit9 OwogCiBzdHJ1Y3QgZGV2c3cgKmRldnN3W10gPSB7Ci0JJmVmaXBhcnRfZGV2LAorICAgICAgICAm ZWZpZnNfZGV2LAogCSZlZmluZXRfZGV2LAotI2lmZGVmIEVGSV9aRlNfQk9PVAotCSZ6ZnNfZGV2 LAotI2VuZGlmCiAJTlVMTAogfTsKIAogc3RydWN0IGZzX29wcyAqZmlsZV9zeXN0ZW1bXSA9IHsK LSNpZmRlZiBFRklfWkZTX0JPT1QKLQkmemZzX2Zzb3BzLAotI2VuZGlmCi0JJmRvc2ZzX2Zzb3Bz LAotCSZ1ZnNfZnNvcHMsCi0JJmNkOTY2MF9mc29wcywKLQkmdGZ0cF9mc29wcywKLQkmbmZzX2Zz b3BzLAotCSZnemlwZnNfZnNvcHMsCi0JJmJ6aXBmc19mc29wcywKKyAgICAgICAgJmVmaWZzX2Zz b3BzLAogCU5VTEwKIH07CiAKZGlmZiAtLWdpdCBzeXMvYm9vdC9lZmkvbG9hZGVyL2xvYWRlcl9l ZmkuaCBzeXMvYm9vdC9lZmkvbG9hZGVyL2xvYWRlcl9lZmkuaAppbmRleCBlZTdjNGJiNzJlYi4u ZGJkMzZiZmI0Y2EgMTAwNjQ0Ci0tLSBzeXMvYm9vdC9lZmkvbG9hZGVyL2xvYWRlcl9lZmkuaAor Kysgc3lzL2Jvb3QvZWZpL2xvYWRlci9sb2FkZXJfZWZpLmgKQEAgLTMzLDYgKzMzLDEwIEBACiAK ICNpbmNsdWRlIDxzdGFuZC5oPgogCisjaW5jbHVkZSAiZWZpX2RyaXZlcnMuaCIKKworZXh0ZXJu IGNvbnN0IGVmaV9kcml2ZXJfdCAqZWZpX2RyaXZlcnNbXTsKKwogaW50CWVmaV9hdXRvbG9hZCh2 b2lkKTsKIAogaW50CWVmaV9nZXRkZXYodm9pZCAqKnZkZXYsIGNvbnN0IGNoYXIgKmRldnNwZWMs IGNvbnN0IGNoYXIgKipwYXRoKTsKZGlmZiAtLWdpdCBzeXMvYm9vdC9lZmkvbG9hZGVyL21haW4u YyBzeXMvYm9vdC9lZmkvbG9hZGVyL21haW4uYwppbmRleCBiOTdmMmFmYjg1MS4uNDJlM2ViZTE4 MzAgMTAwNjQ0Ci0tLSBzeXMvYm9vdC9lZmkvbG9hZGVyL21haW4uYworKysgc3lzL2Jvb3QvZWZp L2xvYWRlci9tYWluLmMKQEAgLTg3LDEwICs4Nyw2IEBAIEVGSV9HVUlEIGRlYnVnaW1nID0gREVC VUdfSU1BR0VfSU5GT19UQUJMRV9HVUlEOwogRUZJX0dVSUQgZmR0ZHRiID0gRkRUX1RBQkxFX0dV SUQ7CiBFRklfR1VJRCBpbnB1dGlkID0gU0lNUExFX1RFWFRfSU5QVVRfUFJPVE9DT0w7CiAKLSNp ZmRlZiBFRklfWkZTX0JPT1QKLXN0YXRpYyB2b2lkIGVmaV96ZnNfcHJvYmUodm9pZCk7Ci0jZW5k aWYKLQogLyoKICAqIGNweTh0bzE2IGNvcGllcyBhIHRyYWRpdGlvbmFsIEMgc3RyaW5nIGludG8g YSBDSEFSMTYgc3RyaW5nIGFuZAogICogMCB0ZXJtaW5hdGVzIGl0LiBsZW4gaXMgdGhlIHNpemUg b2YgKmRzdCBpbiBieXRlcy4KQEAgLTEyNSw3ICsxMjEsNyBAQCBoYXNfa2V5Ym9hcmQodm9pZCkK IAlFRklfSEFORExFICpoaW4sICpoaW5fZW5kLCAqd2Fsa2VyOwogCVVJTlROIHN6OwogCWludCBy ZXR2YWwgPSAwOwotCQorCiAJLyoKIAkgKiBGaW5kIGFsbCB0aGUgaGFuZGxlcyB0aGF0IHN1cHBv cnQgdGhlIFNJTVBMRV9URVhUX0lOUFVUX1BST1RPQ09MIGFuZAogCSAqIGRvIHRoZSB0eXBpY2Fs IGRhbmNlIHRvIGdldCB0aGUgcmlnaHQgc2l6ZWQgYnVmZmVyLgpAQCAtMTgyLDcgKzE3OCw3IEBA IGhhc19rZXlib2FyZCh2b2lkKQogCQkJfSBlbHNlIGlmIChEZXZpY2VQYXRoVHlwZShwYXRoKSA9 PSBNRVNTQUdJTkdfREVWSUNFX1BBVEggJiYKIAkJCSAgICBEZXZpY2VQYXRoU3ViVHlwZShwYXRo KSA9PSBNU0dfVVNCX0NMQVNTX0RQKSB7CiAJCQkJVVNCX0NMQVNTX0RFVklDRV9QQVRIICp1c2I7 Ci0JCQkgICAgICAgCisKIAkJCQl1c2IgPSAoVVNCX0NMQVNTX0RFVklDRV9QQVRIICopKHZvaWQg KilwYXRoOwogCQkJCWlmICh1c2ItPkRldmljZUNsYXNzID09IDMgJiYgLyogSElEICovCiAJCQkJ ICAgIHVzYi0+RGV2aWNlU3ViQ2xhc3MgPT0gMSAmJiAvKiBCb290IGRldmljZXMgKi8KQEAgLTI2 MywxMCArMjU5LDYgQEAgbWFpbihpbnQgYXJnYywgQ0hBUjE2ICphcmd2W10pCiAJYXJjaHN3LmFy Y2hfY29weWluID0gZWZpX2NvcHlpbjsKIAlhcmNoc3cuYXJjaF9jb3B5b3V0ID0gZWZpX2NvcHlv dXQ7CiAJYXJjaHN3LmFyY2hfcmVhZGluID0gZWZpX3JlYWRpbjsKLSNpZmRlZiBFRklfWkZTX0JP T1QKLQkvKiBOb3RlIHRoaXMgbmVlZHMgdG8gYmUgc2V0IGJlZm9yZSBaRlMgaW5pdC4gKi8KLQlh cmNoc3cuYXJjaF96ZnNfcHJvYmUgPSBlZmlfemZzX3Byb2JlOwotI2VuZGlmCiAKIAkvKiBJbml0 IHRoZSB0aW1lIHNvdXJjZSAqLwogCWVmaV90aW1lX2luaXQoKTsKQEAgLTM5MSw2ICszODMsMTAg QEAgbWFpbihpbnQgYXJnYywgQ0hBUjE2ICphcmd2W10pCiAJLyoKIAkgKiBNYXJjaCB0aHJvdWdo IHRoZSBkZXZpY2Ugc3dpdGNoIHByb2JpbmcgZm9yIHRoaW5ncy4KIAkgKi8KKwlmb3IgKGkgPSAw OyBlZmlfZHJpdmVyc1tpXSAhPSBOVUxMOyBpKyspCisJCWlmIChlZmlfZHJpdmVyc1tpXS0+aW5p dCAhPSBOVUxMKQorCQkJKGVmaV9kcml2ZXJzW2ldLT5pbml0KSgpOworCiAJZm9yIChpID0gMDsg ZGV2c3dbaV0gIT0gTlVMTDsgaSsrKQogCQlpZiAoZGV2c3dbaV0tPmR2X2luaXQgIT0gTlVMTCkK IAkJCShkZXZzd1tpXS0+ZHZfaW5pdCkoKTsKQEAgLTQyNyw2ICs0MjMsNyBAQCBtYWluKGludCBh cmdjLCBDSEFSMTYgKmFyZ3ZbXSkKIAlpZiAoZmluZF9jdXJyZGV2KGltZywgJmRldiwgJnVuaXQs ICZwb29sX2d1aWQpICE9IDApCiAJCXJldHVybiAoRUZJX05PVF9GT1VORCk7CiAKKyAgICAgICAg cHJpbnRmKCJGb3VuZCBlZmkgZGV2aWNlIHVuZGVyICVzXG4iLCBkZXYtPmR2X25hbWUpOwogCXN3 aXRjaCAoZGV2LT5kdl90eXBlKSB7CiAjaWZkZWYgRUZJX1pGU19CT09UCiAJY2FzZSBERVZUX1pG UzogewpAQCAtMTA5MywyMyArMTA5MCwzIEBAIGNvbW1hbmRfZmR0KGludCBhcmdjLCBjaGFyICph cmd2W10pCiAKIENPTU1BTkRfU0VUKGZkdCwgImZkdCIsICJmbGF0dGVuZWQgZGV2aWNlIHRyZWUg aGFuZGxpbmciLCBjb21tYW5kX2ZkdCk7CiAjZW5kaWYKLQotI2lmZGVmIEVGSV9aRlNfQk9PVAot c3RhdGljIHZvaWQKLWVmaV96ZnNfcHJvYmUodm9pZCkKLXsKLQlFRklfSEFORExFIGg7Ci0JdV9p bnQgdW5pdDsKLQlpbnQgaTsKLQljaGFyIGRuYW1lW1NQRUNOQU1FTEVOICsgMV07Ci0JdWludDY0 X3QgZ3VpZDsKLQotCXVuaXQgPSAwOwotCWggPSBlZmlfZmluZF9oYW5kbGUoJmVmaXBhcnRfZGV2 LCAwKTsKLQlmb3IgKGkgPSAwOyBoICE9IE5VTEw7IGggPSBlZmlfZmluZF9oYW5kbGUoJmVmaXBh cnRfZGV2LCArK2kpKSB7Ci0JCXNucHJpbnRmKGRuYW1lLCBzaXplb2YoZG5hbWUpLCAiJXMlZDoi LCBlZmlwYXJ0X2Rldi5kdl9uYW1lLCBpKTsKLQkJaWYgKHpmc19wcm9iZV9kZXYoZG5hbWUsICZn dWlkKSA9PSAwKQotCQkJKHZvaWQpZWZpX2hhbmRsZV91cGRhdGVfZGV2KGgsICZ6ZnNfZGV2LCB1 bml0KyssIGd1aWQpOwotCX0KLX0KLSNlbmRpZgo= --94eb2c058ce8fc2ff60542bb5373-- From owner-freebsd-hackers@freebsd.org Sat Dec 3 06:57:25 2016 Return-Path: Delivered-To: freebsd-hackers@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 494FDC64121; Sat, 3 Dec 2016 06:57:25 +0000 (UTC) (envelope-from woodsb02@gmail.com) Received: from mail-io0-x22d.google.com (mail-io0-x22d.google.com [IPv6:2607:f8b0:4001:c06::22d]) (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 0FFD4BD0; Sat, 3 Dec 2016 06:57:25 +0000 (UTC) (envelope-from woodsb02@gmail.com) Received: by mail-io0-x22d.google.com with SMTP id m5so381506783ioe.3; Fri, 02 Dec 2016 22:57:25 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=mime-version:in-reply-to:references:from:date:message-id:subject:to :cc; bh=9QzwDbl5calEjqEEMAErKeGN1StJQ2YCBxcA/wkjhIM=; b=Jg+2k/ALQxpqJAAkplNaat7C03yV8zY7nqOo09NTDFXDyRcmEPo4fWqCjt25W4/8Ex n9dlDfsKjCCXZ+FfQf6u3g6DrotPamAGrrzfMAU7O5shsR9pJFyPJo44g5uz5OL32qFv baV3pruYn54b2vxeynIEtke7CBtoq5c+oUUvZ2Reg9AzFZ/Cn+9PJz9CDg2yPsGH/q6o pDgtMNXx3qM/F0Ty3Xs6NOo/EGQ0S2CWoKvENGZzKg5N8WcdllMKM3ZN59cvqS1zI74c 6MI5ioYbt/JShCXrSg/FHiVp4uaWcmaudGjOkN+m2DYMEm2QIxVG3kejlxKXLudCLZ3q ig/g== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20130820; h=x-gm-message-state:mime-version:in-reply-to:references:from:date :message-id:subject:to:cc; bh=9QzwDbl5calEjqEEMAErKeGN1StJQ2YCBxcA/wkjhIM=; b=LP+Xpx+BVtfUyGe7G15XD6mC/iZODju5Ad50vbWhM/DH3JzcdvmnwvEhgEAcSHBZZy 5zhK5EsiHIAkhcq6zDza6d+u8VeWomwskfWNiThS0sqn05C8ZWJkuoz1IUKdl7iPIW4M vXOxmnFd0dDgw6LJgbTbHFQ/9JVA8WZBCSaencYqvtt/+PPjYm+ajwcqtSJhknd1pacV fsK/+c+qeWsRNzO+P/rLW54hN387Pdvhwb926DcmEIrecFxJhs6mnMyqMZtEX3OE5uNi e3muLSfOunMcwi7S7rzkFqUqY4sfdlHKm3dBb75lbYp5eoCogfVbpEczWq3JIxAVoQr+ If+g== X-Gm-Message-State: AKaTC02rJIKJu5Jklwkhio/CBko2O3QVnS4lqnSagtfkOAdz7BF63l7NLMuabrS10FZbNoaMyF34pV2zY81i2w== X-Received: by 10.36.58.85 with SMTP id m82mr754844itm.29.1480748244476; Fri, 02 Dec 2016 22:57:24 -0800 (PST) MIME-Version: 1.0 Received: by 10.79.136.197 with HTTP; Fri, 2 Dec 2016 22:57:24 -0800 (PST) In-Reply-To: References: From: Ben Woods Date: Sat, 3 Dec 2016 14:57:24 +0800 Message-ID: Subject: Re: CFT EFI Boot Refactoring To: Eric McCorkle Cc: freebsd-hackers@freebsd.org, freebsd-amd64@freebsd.org, "current@freebsd.org" X-Mailman-Approved-At: Sat, 03 Dec 2016 13:11:16 +0000 Content-Type: text/plain; charset=UTF-8 X-Content-Filtered-By: Mailman/MimeDel 2.1.23 X-BeenThere: freebsd-hackers@freebsd.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: Technical Discussions relating to FreeBSD List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sat, 03 Dec 2016 06:57:25 -0000 On 3 December 2016 at 14:40, Ben Woods wrote: > I just applied your diff to my subversion repository, and tried to > buildworld, but the build failed with the following error: > > make[6]: make[6]: don't know how to make efipart.c. Stop > > make[6]: stopped in /usr/src/sys/boot/efi/drivers > *** [all_subdir_sys/boot/efi/drivers] Error code 2 > > > Does it build ok for you? > > Because I use subversion, and I wanted to build it from my main tree, I > had to regenerate your patch using "git diff --no-prefix > master..origin/efize_new > /tmp/efize_new.diff". > I could then apply this cleanly with "svn patch /tmp/efize_new.diff". > > Never mind, I have realised that efipart.c was moved from boot/efi/libefi/ to boot/efi/drivers/ in your git patch, but subversion did not interpret this change and simply patched the file in place. I have fixed this with: $ svn mv boot/efi/libefi/efipart.c boot/efi/drivers/efipart.c Sorry for the noise (and the previous top post). Regards, Ben -- From: Benjamin Woods woodsb02@gmail.com From owner-freebsd-hackers@freebsd.org Sat Dec 3 10:10:41 2016 Return-Path: Delivered-To: freebsd-hackers@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 8B88BC62BB0; Sat, 3 Dec 2016 10:10:41 +0000 (UTC) (envelope-from woodsb02@gmail.com) Received: from mail-io0-x234.google.com (mail-io0-x234.google.com [IPv6:2607:f8b0:4001:c06::234]) (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 55AF1108D; Sat, 3 Dec 2016 10:10:41 +0000 (UTC) (envelope-from woodsb02@gmail.com) Received: by mail-io0-x234.google.com with SMTP id c21so479273463ioj.1; Sat, 03 Dec 2016 02:10:41 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=mime-version:in-reply-to:references:from:date:message-id:subject:to :cc; bh=tWbfHRFQVRNY2LVfb8yomegI84LMbuo8S184Y7nGdQs=; b=LSD5HbZIQMZFglefnW6cOrZZQDXp723wfiqgYPHTSbT5BUV2fvJ+mQbyAlGFo/PFY/ +fDvjVBe4nZKpuV9Q4gEPNNSD3m/N2hsxfYAqTv2HYzzgZCO2Xtjm4ecMLMIzg7N8B+t dzQQtdhRecqdyXNGtToqCDx9W4L3uGeYaUsln7icvFrpGU98h6Al4Qo5dwBfadUp8Rsg 0y4oYO1BCgBGrC9P6UP435ppq8aDR4GbCggNz/KS64aIlgxbpTI0NkCFMkKI4ug10hRa Dru1fa7VmU2diviHwwSsFI1Mf5erWUAyK0hvBH0iLo+cu85OLObZmr+ma/Cc7W3knB38 NRhQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20130820; h=x-gm-message-state:mime-version:in-reply-to:references:from:date :message-id:subject:to:cc; bh=tWbfHRFQVRNY2LVfb8yomegI84LMbuo8S184Y7nGdQs=; b=FBqNrEVuBJlXqEByyHhjejliOVfFsqdnGCkPuYPCMTr52lBZPWhLZIdP+eiCbg17OT zlnRq86a9mK+x38t/EafQGKF70rMA+tkH5vTBuY4ZXQztt4gJ8zwQ5zh4T02GGbCROAs Rjzr/oWx/TGyQUXGQli/vX3vPB7QDFfIrosjWGfUoFYMykqf4wEF+eX9wnurnln2zo9c i8hLAjwJqIlpHmNeaN3GelbFFhCJYHGjnMLQ+z907Z0dawEZgaQFYUIDhhREy8U72KRc v0tYix85cCi2awhtLnoavNFImCn6839cPACDRFqRuCX+re4JsucQB8VWQXAMOLw2odDR +t1Q== X-Gm-Message-State: AKaTC02YA/ivyXeyXK2l6/aFPiHV2oT0z0g55H3CFqWRB5gP0fqiIoq1+I4SUkSdRMX6vhq3EBPHoehqJo8olg== X-Received: by 10.36.43.193 with SMTP id h184mr1154910ita.29.1480759840445; Sat, 03 Dec 2016 02:10:40 -0800 (PST) MIME-Version: 1.0 Received: by 10.79.136.197 with HTTP; Sat, 3 Dec 2016 02:10:39 -0800 (PST) In-Reply-To: References: From: Ben Woods Date: Sat, 3 Dec 2016 18:10:39 +0800 Message-ID: Subject: Re: CFT EFI Boot Refactoring To: Eric McCorkle Cc: freebsd-hackers@freebsd.org, freebsd-amd64@freebsd.org, "current@freebsd.org" X-Mailman-Approved-At: Sat, 03 Dec 2016 13:14:44 +0000 Content-Type: text/plain; charset=UTF-8 X-Content-Filtered-By: Mailman/MimeDel 2.1.23 X-BeenThere: freebsd-hackers@freebsd.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: Technical Discussions relating to FreeBSD List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sat, 03 Dec 2016 10:10:41 -0000 On 3 December 2016 at 01:02, Eric McCorkle wrote: > Therefore, I would like to issue a CFT for this changeset. We need > people using the boot1/loader EFI boot setup to test their setup using > boot1 and loader as built with this patch applied. > After I got this to build, I managed to install the new world, and copy the new boot1.efi to /EFI/BOOT/BOOTX64.EFI. Upon reboot, my machine hung at the loader, with the following text on the screen: >> FreeBSD EFI boot block Loader path: /boot/loader.efi Initializing modules: FS Backend| Unfortunately it stopped there and didn't continue. I was able to recover my system by moving my BOOTX64.BAK to BOOTX64.EFI, and changing back to my old loader.efi. Any thoughts of how we can debug this? Regards, Ben -- From: Benjamin Woods woodsb02@gmail.com