From owner-freebsd-arch@FreeBSD.ORG Sun Aug 30 02:28:42 2009 Return-Path: Delivered-To: freebsd-arch@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 298F6106564A; Sun, 30 Aug 2009 02:28:42 +0000 (UTC) (envelope-from kabaev@gmail.com) Received: from qw-out-2122.google.com (qw-out-2122.google.com [74.125.92.26]) by mx1.freebsd.org (Postfix) with ESMTP id B99048FC0A; Sun, 30 Aug 2009 02:28:41 +0000 (UTC) Received: by qw-out-2122.google.com with SMTP id 3so725329qwe.7 for ; Sat, 29 Aug 2009 19:28:41 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=gamma; h=domainkey-signature:received:received:date:from:to:cc:subject :message-id:in-reply-to:references:x-mailer:mime-version :content-type; bh=UrtPJRZ4JuNHYzynMzQnFUBgLyigdRUb2Mr31xIWW+I=; b=LjIBPnyA5sxd2mVljQAUc9APvclry3gpTESwxf/ijbrlP2/15l+2uKbhAZxIbtEX8M lkbNTn2DmY7UD/e1U1PoIr+RVY5eloC1JYavEeKxuKae/+Qeqnigaig51LGTjJMYsNl1 292gA9NOp0YWjsx95xpvKX5OXjtMJ573JSyQU= DomainKey-Signature: a=rsa-sha1; c=nofws; d=gmail.com; s=gamma; h=date:from:to:cc:subject:message-id:in-reply-to:references:x-mailer :mime-version:content-type; b=SwPh1e4ij+zIw3LdqEOHoT8MDGlWc1knRI+m2aM58uqPpsA1dP2Mq/uE2D+ic98KjL 8eVBJmUyIBMfheJUfTBKuCbuM7XuPF0oxOT7l2d2lSVn2eN+gY9PcpCYezocYFMXI7XS qGaIxOfRj+1TjYEipKOkaEY1NR4LPXyseUZKo= Received: by 10.224.117.12 with SMTP id o12mr2444225qaq.57.1251597953168; Sat, 29 Aug 2009 19:05:53 -0700 (PDT) Received: from kan.dnsalias.net (c-24-91-218-112.hsd1.ma.comcast.net [24.91.218.112]) by mx.google.com with ESMTPS id 20sm1254166qyk.13.2009.08.29.19.05.50 (version=SSLv3 cipher=RC4-MD5); Sat, 29 Aug 2009 19:05:51 -0700 (PDT) Date: Sat, 29 Aug 2009 22:05:32 -0400 From: Alexander Kabaev To: Attilio Rao Message-ID: <20090829220532.47404497@kan.dnsalias.net> In-Reply-To: <3bbf2fe10908281904l6f8119a5l2daa301016eac8ef@mail.gmail.com> References: <3bbf2fe10908281904l6f8119a5l2daa301016eac8ef@mail.gmail.com> X-Mailer: Claws Mail 3.7.2 (GTK+ 2.16.5; amd64-portbld-freebsd8.0) Mime-Version: 1.0 Content-Type: multipart/signed; micalg=PGP-SHA1; boundary="Sig_/ineTFNkCx9THLFR6B3J6I5b"; protocol="application/pgp-signature" Cc: Konstantin Belousov , freebsd-arch@freebsd.org Subject: Re: [PATCH] VFS KPI/API versioning X-BeenThere: freebsd-arch@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: Discussion related to FreeBSD architecture List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sun, 30 Aug 2009 02:28:42 -0000 --Sig_/ineTFNkCx9THLFR6B3J6I5b Content-Type: text/plain; charset=US-ASCII Content-Transfer-Encoding: quoted-printable The patch looks simple enough and I think is a good idea. As for VFS_VERSION, I am yet to see the evidence of it ever being used by anybody. --=20 Alexander Kabaev --Sig_/ineTFNkCx9THLFR6B3J6I5b Content-Type: application/pgp-signature; name=signature.asc Content-Disposition: attachment; filename=signature.asc -----BEGIN PGP SIGNATURE----- Version: GnuPG v2.0.12 (FreeBSD) iD8DBQFKmd5yQ6z1jMm+XZYRAvGdAJ9ZuceWHEGWwH5Az6Fol9YuFDSkiQCgixbh 9XnbuQkq+rmeMn/WI/+iC5s= =fcag -----END PGP SIGNATURE----- --Sig_/ineTFNkCx9THLFR6B3J6I5b-- From owner-freebsd-arch@FreeBSD.ORG Sun Aug 30 18:14:15 2009 Return-Path: Delivered-To: freebsd-arch@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 12CE9106566C for ; Sun, 30 Aug 2009 18:14:15 +0000 (UTC) (envelope-from "") Received: from mx2.cyfra.ua (mx2.cyfra.ua [62.80.160.141]) by mx1.freebsd.org (Postfix) with ESMTP id EAE568FC0C for ; Sun, 30 Aug 2009 18:14:13 +0000 (UTC) Received: from mail.electroservice.kiev.ua (c.6.174.static.cyfra.net [62.80.174.6]) (authenticated bits=0) by mx2.cyfra.ua (8.14.2/8.14.2) with ESMTP id n7UIE96s017541 for ; Sun, 30 Aug 2009 21:14:11 +0300 X-Spam-Checker-Version: SpamAssassin 3.1.8 (2007-02-13) on server.electroservice.kiev.ua X-Spam-Level: X-Spam-Status: No, score=0.0 required=3.0 tests=none autolearn=disabled version=3.1.8 Received: from mail.electroservice.kiev.ua by mail.electroservice.kiev.ua (via RAW) (MDaemon PRO v9.6.6) for ; Sun, 30 Aug 2009 20:43:31 +0300 Date: Sun, 30 Aug 2009 20:43:31 +0300 From: "MDaemon at mail.electroservice.kiev.ua" To: freebsd-arch@freebsd.org X-MDaemon-Deliver-To: freebsd-arch@freebsd.org Message-ID: Mime-Version: 1.0 X-Actual-From: MDaemon@mail.electroservice.kiev.ua X-MDDSN-Message: Yes X-Return-Path: <> Content-Type: multipart/mixed; boundary="0830-2043-31-PART-BREAK" X-Spam-Processed: mail.electroservice.kiev.ua, Sun, 30 Aug 2009 20:43:38 +0300 X-MDAV-Processed: mail.electroservice.kiev.ua, Sun, 30 Aug 2009 20:43:40 +0300 Subject: Permanent Delivery Failure X-BeenThere: freebsd-arch@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list Reply-To: noreply@mail.electroservice.kiev.ua List-Id: Discussion related to FreeBSD architecture List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sun, 30 Aug 2009 18:14:15 -0000 The following data may contain sections which represent BASE64 encoded file attachments. These sections will be unreadable without MIME aware tools. Seek your system administrator if you need help extracting any files which may be embedded within this message. --0830-2043-31-PART-BREAK Content-Type: text/plain; charset=iso-8859-1 Content-Transfer-Encoding: 7bit The attached message had PERMANENT fatal delivery errors! After one or more unsuccessful delivery attempts the attached message has been removed from the mail queue on this server. The number and frequency of delivery attempts are determined by local configuration parameters. YOUR MESSAGE WAS NOT DELIVERED TO ONE OR MORE RECIPIENTS! --- Session Transcript --- Sun 2009-08-30 20:43:30: Parsing message Sun 2009-08-30 20:43:30: * From: freebsd-arch@FreeBSD.org Sun 2009-08-30 20:43:30: * To: vgeaaaaa@electroservice.kiev.ua Sun 2009-08-30 20:43:30: * Subject: [***SPAM*** Score/Req: 7.3/3.0] Затишье в бизнесе - пора обучать персонал "17336" "we" Sun 2009-08-30 20:43:30: * Message-ID: <190961466.20090123211403@FreeBSD.org> Sun 2009-08-30 20:43:30: * Route slip host: ex-srv01.electroservice.kiev.ua Sun 2009-08-30 20:43:30: * Route slip port: 25 Sun 2009-08-30 20:43:30: Attempting SMTP connection to [ex-srv01.electroservice.kiev.ua] Sun 2009-08-30 20:43:30: Resolving MX records for [ex-srv01.electroservice.kiev.ua] (DNS Server: 192.168.100.5)... Sun 2009-08-30 20:43:30: * P=010 S=000 D=ex-srv01.electroservice.kiev.ua TTL=(60) MX=[ex-srv01.electroservice.kiev.ua] {192.168.100.7} Sun 2009-08-30 20:43:30: Attempting SMTP connection to [192.168.100.7:25] Sun 2009-08-30 20:43:30: Waiting for socket connection... Sun 2009-08-30 20:43:30: * Connection established (192.168.100.3:28699 -> 192.168.100.7:25) Sun 2009-08-30 20:43:30: Waiting for protocol to start... Sun 2009-08-30 20:43:30: <-- 220 Ex-Srv01.electroservice.kiev.ua Microsoft ESMTP MAIL Service, Version: 6.0.3790.3959 ready at Sun, 30 Aug 2009 20:43:29 +0300 Sun 2009-08-30 20:43:30: --> EHLO mail.electroservice.kiev.ua Sun 2009-08-30 20:43:30: <-- 250-Ex-Srv01.electroservice.kiev.ua Hello [192.168.100.3] Sun 2009-08-30 20:43:30: <-- 250-TURN Sun 2009-08-30 20:43:30: <-- 250-SIZE Sun 2009-08-30 20:43:30: <-- 250-ETRN Sun 2009-08-30 20:43:30: <-- 250-PIPELINING Sun 2009-08-30 20:43:30: <-- 250-DSN Sun 2009-08-30 20:43:30: <-- 250-ENHANCEDSTATUSCODES Sun 2009-08-30 20:43:30: <-- 250-8bitmime Sun 2009-08-30 20:43:30: <-- 250-BINARYMIME Sun 2009-08-30 20:43:30: <-- 250-CHUNKING Sun 2009-08-30 20:43:30: <-- 250-VRFY Sun 2009-08-30 20:43:30: <-- 250-X-EXPS GSSAPI NTLM Sun 2009-08-30 20:43:30: <-- 250-AUTH GSSAPI NTLM Sun 2009-08-30 20:43:30: <-- 250-X-LINK2STATE Sun 2009-08-30 20:43:30: <-- 250-XEXCH50 Sun 2009-08-30 20:43:30: <-- 250 OK Sun 2009-08-30 20:43:30: --> MAIL From: SIZE=21136 Sun 2009-08-30 20:43:30: <-- 250 2.1.0 freebsd-arch@FreeBSD.org....Sender OK Sun 2009-08-30 20:43:30: --> RCPT To: Sun 2009-08-30 20:43:30: <-- 550 5.1.1 User unknown Sun 2009-08-30 20:43:30: --> QUIT --- End Transcript --- : Message contains [1] file attachments --0830-2043-31-PART-BREAK Content-Type: application/octet-stream; name="md50000027267.eml" Content-Transfer-Encoding: base64 WC1TcGFtLUZsYWc6IFlFUw0KWC1TcGFtLUNoZWNrZXItVmVyc2lvbjogU3Bh bUFzc2Fzc2luIDMuMS44ICgyMDA3LTAyLTEzKSBvbg0KCXNlcnZlci5lbGVj dHJvc2VydmljZS5raWV2LnVhDQpYLVNwYW0tTGV2ZWw6ICoqKioqKioNClgt U3BhbS1TdGF0dXM6IFllcywgc2NvcmU9Ny4zIHJlcXVpcmVkPTMuMCB0ZXN0 cz1GUk9NX0lMTEVHQUxfQ0hBUlMsDQoJSFRNTF9NRVNTQUdFLE1JTUVfSFRN TF9PTkxZLFNVQkpfSEFTX1NQQUNFUyxTVUJKX0lMTEVHQUxfQ0hBUlMNCglh dXRvbGVhcm49ZGlzYWJsZWQgdmVyc2lvbj0zLjEuOA0KWC1TcGFtLVJlcG9y dDogDQoJKiAgMC43IFNVQkpfSEFTX1NQQUNFUyBTdWJqZWN0IGNvbnRhaW5z IGxvdHMgb2Ygd2hpdGUgc3BhY2UNCgkqICAzLjMgRlJPTV9JTExFR0FMX0NI QVJTIEZyb206IGhhcyB0b28gbWFueSByYXcgaWxsZWdhbCBjaGFyYWN0ZXJz DQoJKiAgMy40IFNVQkpfSUxMRUdBTF9DSEFSUyBTdWJqZWN0OiBoYXMgdG9v IG1hbnkgcmF3IGlsbGVnYWwgY2hhcmFjdGVycw0KCSogIDAuMCBIVE1MX01F U1NBR0UgQk9EWTogSFRNTCBpbmNsdWRlZCBpbiBtZXNzYWdlDQoJKiAgMC4w IE1JTUVfSFRNTF9PTkxZIEJPRFk6IE1lc3NhZ2Ugb25seSBoYXMgdGV4dC9o dG1sIE1JTUUgcGFydHMNClJlY2VpdmVkOiBmcm9tIHBvcDMudWF0ZWxlLmNv bSAoWzYyLjgwLjE2MC4xNDFdKQ0KCWJ5IG1haWwuZWxlY3Ryb3NlcnZpY2Uu a2lldi51YSAobWFpbC5lbGVjdHJvc2VydmljZS5raWV2LnVhIFsxMjcuMC4w LjFdKQ0KCShNRGFlbW9uIFBSTyB2OS42LjYpDQoJd2l0aCBEb21haW5QT1Ag aWQgbWQ1MDAwMjI5NjU4MS5tc2cNCglmb3IgPHZnZWFhYWFhQGVsZWN0cm9z ZXJ2aWNlLmtpZXYudWE+OyBTdW4sIDMwIEF1ZyAyMDA5IDIwOjQyOjM0ICsw MzAwDQpYLU1EUmVtb3RlSVA6IDYyLjgwLjE2MC4xNDENClgtRW52ZWxvcGUt RnJvbTogZnJlZWJzZC1hcmNoQEZyZWVCU0Qub3JnDQpSZWNlaXZlZDogZnJv bSBGcmVlQlNELm9yZyAoWzE4Ni4wLjU3LjExMF0pDQoJYnkgbXgyLmN5ZnJh LnVhICg4LjE0LjIvOC4xNC4yKSB3aXRoIFNNVFAgaWQgbjdVSGc5cmowMTE3 NzQNCglmb3IgPHZnZWFhYWFhQGVsZWN0cm9zZXJ2aWNlLmtpZXYudWE+OyBT dW4sIDMwIEF1ZyAyMDA5IDIwOjQyOjEzICswMzAwDQpSZWNlaXZlZDogZnJv bSB5amtqYiAoMjIuMTI0LjIzOC4yMDApDQoJYnkgRnJlZUJTRC5vcmc7IFN1 biwgMzAgQXVnIDIwMDkgMjM6NDI6MjUgKzAzMDANCkRhdGU6IFN1biwgMzAg QXVnIDIwMDkgMjM6NDI6MjUgKzAzMDANCkZyb206ICDe6+jg7SDL4OLw5e3y 6OXi6PcgPGZyZWVic2QtYXJjaEBGcmVlQlNELm9yZz4NClgtTWFpbGVyOiBU aGUgQmF0ISAodjMuNDQuMjQpIFBybw0KUmVwbHktVG86IEZyZWVic2QtYXJj aCA8ZnJlZWJzZC1hcmNoQEZyZWVCU0Qub3JnPg0KWC1Qcmlvcml0eTogNCAo TG93KQ0KTWVzc2FnZS1JRDogPDE5MDk2MTQ2Ni4yMDA5MDEyMzIxMTQwM0BG cmVlQlNELm9yZz4NClRvOiBWZ2VhYWFhYSA8dmdlYWFhYWFAZWxlY3Ryb3Nl cnZpY2Uua2lldi51YT4NClN1YmplY3Q6IFsqKipTUEFNKioqIFNjb3JlL1Jl cTogNy4zLzMuMF0gx+Dy6Pj85SAg4iDh6Oft5fHlIC0g7+7w4CDu4fP34PL8 IO/l8PHu7eDrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIjE3MzM2IiAid2UiDQpNSU1FLVZlcnNpb246IDEuMA0K Q29udGVudC1UeXBlOiBtdWx0aXBhcnQvbWl4ZWQ7DQogYm91bmRhcnk9Ii0t LS0tLS0tLS0yOUM5RTU1N0FDNTBBIg0KU3RhdHVzOiAgIA0KWC1TcGFtLVBy ZXYtU3ViamVjdDogx+Dy6Pj85SAg4iDh6Oft5fHlIC0g7+7w4CDu4fP34PL8 IO/l8PHu7eDrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIjE3MzM2IiAid2UiDQpYLVNwYW0tUHJvY2Vzc2VkOiBt YWlsLmVsZWN0cm9zZXJ2aWNlLmtpZXYudWEsIFN1biwgMzAgQXVnIDIwMDkg MjA6NDI6MzggKzAzMDANClgtTURBVi1Qcm9jZXNzZWQ6IG1haWwuZWxlY3Ry b3NlcnZpY2Uua2lldi51YSwgU3VuLCAzMCBBdWcgMjAwOSAyMDo0MjozOSAr MDMwMA0KWC1SZXR1cm4tUGF0aDogZnJlZWJzZC1hcmNoQEZyZWVCU0Qub3Jn DQpYLU1EYWVtb24tRGVsaXZlci1UbzogdmdlYWFhYWFAZWxlY3Ryb3NlcnZp Y2Uua2lldi51YQ0KDQotLS0tLS0tLS0tLS0yOUM5RTU1N0FDNTBBDQpDb250 ZW50LVR5cGU6IHRleHQvaHRtbDsgY2hhcnNldD13aW5kb3dzLTEyNTENCkNv bnRlbnQtVHJhbnNmZXItRW5jb2Rpbmc6IDhiaXQNCg0KPCFET0NUWVBFIEhU TUwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMDEgVHJhbnNpdGlvbmFs Ly9FTiIgImh0dHA6Ly93d3cudzMub3JnL1RSL2h0bWw0L2xvb3NlLmR0ZCI+ DQo8aHRtbD4NCjxoZWFkPg0KPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1U eXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9d2luZG93cy0xMjUx Ij4NCjx0aXRsZT48L3RpdGxlPg0KPHN0eWxlIHR5cGU9InRleHQvY3NzIj4N CjwhLS0NCmJvZHksdGQsdGggew0KCWZvbnQtZmFtaWx5OiBWZXJkYW5hLCBH ZW5ldmEsIEFyaWFsLCBIZWx2ZXRpY2EsIHNhbnMtc2VyaWY7DQoJZm9udC1z aXplOiAxM3B4Ow0KCWNvbG9yOiAjMDAzMzY2Ow0KfQ0KYm9keSB7DQoJYmFj a2dyb3VuZC1jb2xvcjogI0ZGRkZGRjsNCn0NCnN0eWxlMSB7Zm9udC1zaXpl OiAxNXB4fQ0KLS0+DQo8L3N0eWxlPjwvaGVhZD4NCg0KPGJvZHk+DQo8dGFi bGUgd2lkdGg9Ijk0MyIgYm9yZGVyPSIwIiBhbGlnbj0iY2VudGVyIiBjZWxs c3BhY2luZz0iMCI+DQogIDx0cj4NCiAgICA8dGQgd2lkdGg9Ijk0MSI+PHRh YmxlIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiIGFsaWduPSJjZW50ZXIiIGNl bGxzcGFjaW5nPSIwIj4NCiAgICAgIDx0cj4NCiAgICAgICAgPHRkPjx0YWJs ZSB3aWR0aD0iODAwIiBib3JkZXI9IjAiIGFsaWduPSJjZW50ZXIiIGNlbGxw YWRkaW5nPSI1IiBjZWxsc3BhY2luZz0iMCI+DQogICAgICAgICAgPHRyPg0K ICAgICAgICAgICAgPHRkIHdpZHRoPSIzMjciPjxkaXYgYWxpZ249ImNlbnRl ciI+PGltZyBzcmM9ImNpZDpGQ0VDMTlDRS5GNTY2NkVBQi4zREUyMDE2Qi4w MDAwMDAwMV9jc3NlZGl0b3IiIHdpZHRoPSIyMTEiIGhlaWdodD0iNDgiPjwv ZGl2PjwvdGQ+DQogICAgICAgICAgICA8dGQgd2lkdGg9IjQ1MyI+PHAgYWxp Z249ImNlbnRlciIgY2xhc3M9InN0eWxlMSI+PGZvbnQgY29sb3I9IiMwMDMz NjYiIHN0eWxlPSJmb250LXNpemU6IDE1cHg7Ij48c3Ryb25nPs/LQUgtw1BB 1MhLIE1FUE/PUMjfVMjJPC9zdHJvbmc+PC9mb250Pjxicj4NCiAgICAgICAg ICAgICAgPGZvbnQgY29sb3I9IiMwMDMzNjYiIHN0eWxlPSJmb250LXNpemU6 IDE1cHg7Ij48c3Ryb25nPkhBIENFSFTfwVDcIDIwMDkgw0/EQTwvc3Ryb25n PjwvZm9udD48L3A+PC90ZD4NCiAgICAgICAgICA8L3RyPg0KICAgICAgICA8 L3RhYmxlPjwvdGQ+DQogICAgICA8L3RyPg0KICAgICAgPHRyPg0KICAgICAg ICA8dGQ+PGhyPjx0YWJsZSB3aWR0aD0iOTEwIiBhbGlnbj0iY2VudGVyIiBj ZWxscGFkZGluZz0iNyIgY2VsbHNwYWNpbmc9IjAiPg0KICAgICAgICAgIDx0 cj4NCiAgICAgICAgICAgIDx0ZCB3aWR0aD0iNjkwIj48ZGl2IGFsaWduPSJs ZWZ0Ij48c3Ryb25nPjMgY+Xt8v/hcP88L3N0cm9uZz48YnI+DQogICAgICAg ICAgICAgIDxhIGhyZWY9Imh0dHA6Ly93d3cubmJjLnVhL25iYy9wYWdlcy9z ZXJ2aWNlcy9UcmVuaW5naS1TZW1pbmFyeS9zZW50eWFici9jcm0uaHRtIiBz dHlsZT0iY29sb3I6IzAwMzM2NiI+Q1JNIC0gY+hj8uXs7WH/IHBh4W/yYSBj IOrr6OXt8m/sLjwvYT48L2Rpdj48L3RkPg0KICAgICAgICAgICAgPHRkIHdp ZHRoPSIyMDAiPjxkaXYgYWxpZ249InJpZ2h0Ij48Zm9udCBjb2xvcj0iIzAw MDBGRiIgc3R5bGU9ImZvbnQtc2l6ZTogMTNweDsiPsTl4/L/cOXiYSDNYfJh 6/z/PC9mb250Pjxicj4NCiAgICAgICAgICAgICAg0fJv6OxvY/L8OiA8c3Ry b25nPjc1MC4wMCDjcO0uPC9zdHJvbmc+PC9kaXY+PC90ZD4NCiAgICAgICAg ICA8L3RyPg0KICAgICAgICA8L3RhYmxlPjwvdGQ+DQogICAgICA8L3RyPg0K ICAgICAgPHRyPg0KICAgICAgICA8dGQ+PHRhYmxlIHdpZHRoPSI5MTAiIGFs aWduPSJjZW50ZXIiIGNlbGxwYWRkaW5nPSI3IiBjZWxsc3BhY2luZz0iMCI+ DQogICAgICAgICAgPHRyPg0KICAgICAgICAgICAgPHRkIHdpZHRoPSI2OTAi PjxkaXYgYWxpZ249ImxlZnQiPjxzdHJvbmc+NCBj5e3y/+Fw/zwvc3Ryb25n PiA8YnI+DQogICAgICAgICAgICAgICAgPGEgaHJlZj0iaHR0cDovL3d3dy5u YmMudWEvbmJjL3BhZ2VzL3NlcnZpY2VzL1RyZW5pbmdpLVNlbWluYXJ5L3Nl bnR5YWJyL21hLXByLmh0bSIgc3R5bGU9ImNvbG9yOiMwMDMzNjYiPszA0dLF 0C3P0MXHxc3SwNbIyTo8YnI+DQogICAgICAgICAgICAgIO9w6O326O/7IOgg 73Bh4ujrYSBjb+fkYe3o/yDnYe9v7OjtYf756Hhj/yDvcOXn5e3yYfbo6Twv YT48L2Rpdj48L3RkPg0KICAgICAgICAgICAgPHRkIHdpZHRoPSIyMDAiPjxk aXYgYWxpZ249InJpZ2h0Ij48Zm9udCBjb2xvcj0iIzAwMDBGRiIgc3R5bGU9 ImZvbnQtc2l6ZTogMTNweDsiPsTl4/L/cOXiYSDNYfJh6/z/PC9mb250Pjxi cj4NCiAgICAgICAgICAgICAg0fJv6OxvY/L8OiA8c3Ryb25nPjgwMC4wMCDj cO0uPC9zdHJvbmc+PC9kaXY+PC90ZD4NCiAgICAgICAgICA8L3RyPg0KICAg ICAgICA8L3RhYmxlPjwvdGQ+DQogICAgICA8L3RyPg0KICAgICAgPHRyPg0K ICAgICAgICA8dGQ+PHRhYmxlIHdpZHRoPSI5MTAiIGFsaWduPSJjZW50ZXIi IGNlbGxwYWRkaW5nPSI3IiBjZWxsc3BhY2luZz0iMCI+DQogICAgICAgICAg PHRyPg0KICAgICAgICAgICAgPHRkIHdpZHRoPSI2OTAiPjxkaXYgYWxpZ249 ImxlZnQiPjxzdHJvbmc+OSBj5e3y/+Fw/zwvc3Ryb25nPjxicj4NCiAgICAg ICAgICAgICAgICA8YSBocmVmPSJodHRwOi8vd3d3Lm5iYy51YS9uYmMvcGFn ZXMvc2VydmljZXMvVHJlbmluZ2ktU2VtaW5hcnkvc2VudHlhYnIvb3RfaG9f a192ZV92X3VwX2lfbW9fcGVfc29fb3IuaHRtIiBzdHlsZT0iY29sb3I6IzAw MzM2NiI+zvIgeG9wb/jl428g6iDi5evo6m/s87sg4iDz73Bh4uvl7ejoIOgg 7G/y6OJh9ujoIO/lcGNv7WHrYSBjb+Jw5ezl7e1v6SBvcONh7ejnYfbo6Dwv YT48L2Rpdj48L3RkPg0KICAgICAgICAgICAgPHRkIHdpZHRoPSIyMDAiPjxk aXYgYWxpZ249InJpZ2h0Ij48Zm9udCBjb2xvcj0iIzAwMDBGRiIgc3R5bGU9 ImZvbnQtc2l6ZTogMTNweDsiPsjiYe1v4mEg0i4gwi48L2ZvbnQ+PGJyPg0K ICAgICAgICAgICAgICDR8m/o7G9j8vw6IDxzdHJvbmc+ODUwLjAwIONw7S48 L3N0cm9uZz48L2Rpdj48L3RkPg0KICAgICAgICAgIDwvdHI+DQogICAgICAg IDwvdGFibGU+PC90ZD4NCiAgICAgIDwvdHI+DQogICAgICA8dHI+DQogICAg ICAgIDx0ZD48dGFibGUgd2lkdGg9IjkxMCIgYWxpZ249ImNlbnRlciIgY2Vs bHBhZGRpbmc9IjciIGNlbGxzcGFjaW5nPSIwIj4NCiAgICAgICAgICA8dHI+ DQogICAgICAgICAgICA8dGQgd2lkdGg9IjY5MCI+PGRpdiBhbGlnbj0ibGVm dCI+PHN0cm9uZz4xMCBj5e3y/+Fw/zwvc3Ryb25nPjxicj4NCiAgICAgICAg ICAgICAgPGEgaHJlZj0iaHR0cDovL3d3dy5uYmMudWEvbmJjL3BhZ2VzL3Nl cnZpY2VzL1RyZW5pbmdpLVNlbWluYXJ5L3NlbnR5YWJyL25vcm1pcm92YW5p ZV90cnVkYS5odG0iIHN0eWxlPSJjb2xvcjojMDAzMzY2Ij7Nb3Ds6HBv4mHt 6OUg8nDz5GE6IO9w6O326O/7LCDs5fJv5Psg6CAg6HggIO9wYery6PflY+ph /yBw5WHr6Odh9uj/PC9hPjwvZGl2PjwvdGQ+DQogICAgICAgICAgICA8dGQg d2lkdGg9IjIwMCI+PGRpdiBhbGlnbj0icmlnaHQiPjxmb250IGNvbG9yPSIj MDAwMEZGIiBzdHlsZT0iZm9udC1zaXplOiAxM3B4OyI+y/P3Ye3o7W/iINEu IMIuPC9mb250Pjxicj4NCiAgICAgICAgICAgICAg0fJv6OxvY/L8OiA8c3Ry b25nPjc1MC4wMCDjcO0uPC9zdHJvbmc+PC9kaXY+PC90ZD4NCiAgICAgICAg ICA8L3RyPg0KICAgICAgICA8L3RhYmxlPjwvdGQ+DQogICAgICA8L3RyPg0K ICAgICAgPHRyPg0KICAgICAgICA8dGQ+PHRhYmxlIHdpZHRoPSI5MTAiIGFs aWduPSJjZW50ZXIiIGNlbGxwYWRkaW5nPSI3IiBjZWxsc3BhY2luZz0iMCI+ DQogICAgICAgICAgPHRyPg0KICAgICAgICAgICAgPHRkIHdpZHRoPSI2OTEi PjxkaXYgYWxpZ249ImxlZnQiPjxzdHJvbmc+MTEgY+Xt8v/hcP88L3N0cm9u Zz48YnI+DQogICAgICAgICAgICAgIDxhIGhyZWY9Imh0dHA6Ly93d3cubmJj LnVhL25iYy9wYWdlcy9zZXJ2aWNlcy9UcmVuaW5naS1TZW1pbmFyeS9zZW50 eWFici9maW5hbnNvdmF5YV9kaWFnbm9zdGlrYV9rb21wYW5paS5odG0iIHN0 eWxlPSJjb2xvcjojMDAzMzY2Ij7U6O1h7WNv4mH/IOToYePtb2Py6OphIOpv 7O9h7ejoLjwvYT48L2Rpdj48L3RkPg0KICAgICAgICAgICAgPHRkIHdpZHRo PSIxOTkiPjxkaXYgYWxpZ249InJpZ2h0Ij48Zm9udCBjb2xvcj0iIzAwMDBG RiIgc3R5bGU9ImZvbnQtc2l6ZTogMTNweDsiPtfz4/Ptb+IgyC4gyC48L2Zv bnQ+PGJyPg0KICAgICAgICAgICAgICDR8m/o7G9j8vw6IDxzdHJvbmc+ODUw LjAwIONw7S48L3N0cm9uZz48L2Rpdj48L3RkPg0KICAgICAgICAgIDwvdHI+ DQogICAgICAgIDwvdGFibGU+PC90ZD4NCiAgICAgIDwvdHI+DQogICAgICA8 dHI+DQogICAgICAgIDx0ZD48dGFibGUgd2lkdGg9IjkxMCIgYWxpZ249ImNl bnRlciIgY2VsbHBhZGRpbmc9IjciIGNlbGxzcGFjaW5nPSIwIj4NCiAgICAg ICAgICA8dHI+DQogICAgICAgICAgICA8dGQgd2lkdGg9IjY5MCI+PGRpdiBh bGlnbj0ibGVmdCI+PHN0cm9uZz4xMi0xMyBj5e3y/+Fw/zwvc3Ryb25nPiA8 YnI+DQogICAgICAgICAgICAgIDxhIGhyZWY9Imh0dHA6Ly93d3cubmJjLnVh L25iYy9wYWdlcy9zZXJ2aWNlcy9UcmVuaW5naS1TZW1pbmFyeS9zZW50eWFi ci9ha3RlcnNrb2VfbWFzdGVyc3R2by5odG0iIHN0eWxlPSJjb2xvcjojMDAz MzY2Ij7A6vLlcGPqb+Ug7GFj8uVwY/LibyArIPLleO3o6mEgcOX36C4gzmPt b+L7IPNj7+X47W/jbyDv8+Hr6Pftb+NvIOL7Y/Lz7+vl7ej/LiDMYWPy5XAg 6m/s7PPt6Oph9ujoPC9hPjwvZGl2PjwvdGQ+DQogICAgICAgICAgICA8dGQg d2lkdGg9IjIwMCI+PGRpdiBhbGlnbj0icmlnaHQiPjxmb250IGNvbG9yPSIj MDAwMEZGIiBzdHlsZT0iZm9udC1zaXplOiAxM3B4OyI+PC9mb250Pjxmb250 IGNvbG9yPSIjMDAwMEZGIiBzdHlsZT0iZm9udC1zaXplOiAxM3B4OyI+zWHy Yevo/yDQb+xh7fw8L2ZvbnQ+PGJyPg0KICAgICAgICAgICAgICDR8m/o7G9j 8vw6IDxzdHJvbmc+MTQwMC4wMCDjcO0uPC9zdHJvbmc+PC9kaXY+PC90ZD4N CiAgICAgICAgICA8L3RyPg0KICAgICAgICA8L3RhYmxlPjwvdGQ+DQogICAg ICA8L3RyPg0KICAgICAgPHRyPg0KICAgICAgICA8dGQ+PHRhYmxlIHdpZHRo PSI5MTAiIGFsaWduPSJjZW50ZXIiIGNlbGxwYWRkaW5nPSI3IiBjZWxsc3Bh Y2luZz0iMCI+DQogICAgICAgICAgPHRyPg0KICAgICAgICAgICAgPHRkIHdp ZHRoPSI2OTAiPjxkaXYgYWxpZ249ImxlZnQiPjxzdHJvbmc+MTYgY+Xt8v/h cP88L3N0cm9uZz4gPGJyPg0KICAgICAgICAgICAgICA8YSBocmVmPSJodHRw Oi8vd3d3Lm5iYy51YS9uYmMvcGFnZXMvc2VydmljZXMvVHJlbmluZ2ktU2Vt aW5hcnkvc2VudHlhYnIvcG9zbGVkbmllX2l6bWVuZW5peWFfdl96YWtvbm9k YXRlbHN0dmUuaHRtIiBzdHlsZT0iY29sb3I6IzAwMzM2NiI+z29j6+Xk7ejl IOjn7OXt5e3o/yDiIOdh6m/tb+Rh8uXr/GPy4uUgbyDn5ezr5SwgY/Jwb+jy 5ev8Y/Li5SDoIG/hb3Bv8uUgb+H65eryb+Ig7eXk4ujm6OxvY/LoLiAtIMdh 6m/tICAxMDY2LVZJIG/yIDA1LjAzLjIwMDkg8+blIOJj8vPv6Osg4iBj6Ovz ITwvYT48L2Rpdj48L3RkPg0KICAgICAgICAgICAgPHRkIHdpZHRoPSIyMDAi PjxkaXYgYWxpZ249InJpZ2h0Ij48Zm9udCBjb2xvcj0iIzAwMDBGRiIgc3R5 bGU9ImZvbnQtc2l6ZTogMTNweDsiPsXr5e1hINHz6uxh7W/iYTwvZm9udD48 YnI+DQogICAgICAgICAgICAgIDxmb250IGNvbG9yPSIjMDAwMEZGIiBzdHls ZT0iZm9udC1zaXplOiAxM3B4OyI+0ejs9+j46O1hINIuIM0uPC9mb250Pjxi cj4NCiAgICAgICAgICAgICAgPGZvbnQgY29sb3I9IiMwMDAwRkYiIHN0eWxl PSJmb250LXNpemU6IDEzcHg7Ij7SYfL8/+1hIMJh6+Xt8ujtb+LtYTwvZm9u dD48YnI+DQogICAgICAgICAgICAgINHyb+jsb2Py/DogPHN0cm9uZz45NTAu MDAg43DtLjwvc3Ryb25nPjwvZGl2PjwvdGQ+DQogICAgICAgICAgPC90cj4N CiAgICAgICAgPC90YWJsZT48L3RkPg0KICAgICAgPC90cj4NCiAgICAgIDx0 cj4NCiAgICAgICAgPHRkPjx0YWJsZSB3aWR0aD0iOTEwIiBhbGlnbj0iY2Vu dGVyIiBjZWxscGFkZGluZz0iNyIgY2VsbHNwYWNpbmc9IjAiPg0KICAgICAg ICAgIDx0cj4NCiAgICAgICAgICAgIDx0ZCB3aWR0aD0iNjkwIj48ZGl2IGFs aWduPSJsZWZ0Ij48c3Ryb25nPjE2IGPl7fL/4XD/PC9zdHJvbmc+PGJyPg0K ICAgICAgICAgICAgICA8YSBocmVmPSJodHRwOi8vd3d3Lm5iYy51YS9uYmMv cGFnZXMvc2VydmljZXMvVHJlbmluZ2ktU2VtaW5hcnkvc2VudHlhYnIvbWVy Y2hlbmRhanppbmcuaHRtIiBzdHlsZT0iY29sb3I6IzAwMzM2NiI+0W/icOXs 5e3t++kgIOzlcPfl7eRh6efo7eMgIOIg0+pwYejt5TwvYT48L2Rpdj48L3Rk Pg0KICAgICAgICAgICAgPHRkIHdpZHRoPSIyMDAiPjxkaXYgYWxpZ249InJp Z2h0Ij48Zm9udCBjb2xvcj0iIzAwMDBGRiIgc3R5bGU9ImZvbnQtc2l6ZTog MTNweDsiPjwvZm9udD48Zm9udCBjb2xvcj0iIzAwMDBGRiIgc3R5bGU9ImZv bnQtc2l6ZTogMTNweDsiPsth5Ojj6O0gwC4gyC48L2ZvbnQ+PGJyPg0KICAg ICAgICAgICAgICDR8m/o7G9j8vw6IDxzdHJvbmc+ODAwLjAwIONw7S48L3N0 cm9uZz48L2Rpdj48L3RkPg0KICAgICAgICAgIDwvdHI+DQogICAgICAgIDwv dGFibGU+PC90ZD4NCiAgICAgIDwvdHI+DQogICAgICA8dHI+DQogICAgICAg IDx0ZD48dGFibGUgd2lkdGg9IjkxMCIgYWxpZ249ImNlbnRlciIgY2VsbHBh ZGRpbmc9IjciIGNlbGxzcGFjaW5nPSIwIj4NCiAgICAgICAgICA8dHI+DQog ICAgICAgICAgICA8dGQgd2lkdGg9IjY5MCI+PGRpdiBhbGlnbj0ibGVmdCI+ PHN0cm9uZz4xNyBj5e3y/+Fw/zwvc3Ryb25nPiA8YnI+DQogICAgICAgICAg ICAgICAgPGEgaHJlZj0iaHR0cDovL3d3dy5uYmMudWEvbmJjL3BhZ2VzL3Nl cnZpY2VzL1RyZW5pbmdpLVNlbWluYXJ5L3NlbnR5YWJyL2VmX3J1a19zb3Ry Lmh0bSIgc3R5bGU9ImNvbG9yOiMwMDMzNjYiPt309OXq8uji7W/lIHDz6m/i b+Rj8uJvIGNv8nDz5O3o6mHs6Do8YnI+DQogICAgICAgICAgICAgIOrr/vfl 4vvlIOpv7O/l8uXt9ujoIGNv4nDl7OXt7W/jbyDs5e3l5OblcGEuPC9hPjwv ZGl2PjwvdGQ+DQogICAgICAgICAgICA8dGQgd2lkdGg9IjIwMCI+PGRpdiBh bGlnbj0icmlnaHQiPjxmb250IGNvbG9yPSIjMDAwMEZGIiBzdHlsZT0iZm9u dC1zaXplOiAxM3B4OyI+PC9mb250Pjxmb250IGNvbG9yPSIjMDAwMEZGIiBz dHlsZT0iZm9udC1zaXplOiAxM3B4OyI+w2/rb+Lt5eJhIMguIMIuPC9mb250 Pjxicj4NCiAgICAgICAgICAgICAg0fJv6OxvY/L8OiA8c3Ryb25nPjc1MC4w MCDjcO0uPC9zdHJvbmc+PC9kaXY+PC90ZD4NCiAgICAgICAgICA8L3RyPg0K ICAgICAgICA8L3RhYmxlPjwvdGQ+DQogICAgICA8L3RyPg0KICAgICAgPHRy Pg0KICAgICAgICA8dGQ+PHRhYmxlIHdpZHRoPSI5MTAiIGFsaWduPSJjZW50 ZXIiIGNlbGxwYWRkaW5nPSI3IiBjZWxsc3BhY2luZz0iMCI+DQogICAgICAg ICAgPHRyPg0KICAgICAgICAgICAgPHRkIHdpZHRoPSI2OTAiPjxkaXYgYWxp Z249ImxlZnQiPjxzdHJvbmc+MTcgY+Xt8v/hcP88L3N0cm9uZz4gPGJyPg0K ICAgICAgICAgICAgICAgIDxhIGhyZWY9Imh0dHA6Ly93d3cubmJjLnVhL25i Yy9wYWdlcy9zZXJ2aWNlcy9UcmVuaW5naS1TZW1pbmFyeS9zZW50eWFici9k aV9wZS5odG0iIHN0eWxlPSJjb2xvcjojMDAzMzY2Ij7E6HDl6vJvcCDvbyDv 5XBjb+1h6/M6PGJyPg0KICAgICAgICAgICAgICAgIMph6iBj8mHy/CDyb+8t 7OXt5eTm5XBv7CDoIO9v4vtj6PL8IOftYffo7G9j8vwgY+Jv5eNvIO9v5HBh 5+Tl6+Xt6P88L2E+PC9kaXY+PC90ZD4NCiAgICAgICAgICAgIDx0ZCB3aWR0 aD0iMjAwIj48ZGl2IGFsaWduPSJyaWdodCI+PGZvbnQgY29sb3I9IiMwMDAw RkYiIHN0eWxlPSJmb250LXNpemU6IDEzcHg7Ij48L2ZvbnQ+PGZvbnQgY29s b3I9IiMwMDAwRkYiIHN0eWxlPSJmb250LXNpemU6IDEzcHg7Ij7N5WPy5XBv 4iDULiDCLjwvZm9udD48YnI+DQogICAgICAgICAgICAgINHyb+jsb2Py/Dog PHN0cm9uZz44MDAuMDAg43DtLjwvc3Ryb25nPjwvZGl2PjwvdGQ+DQogICAg ICAgICAgPC90cj4NCiAgICAgICAgPC90YWJsZT48L3RkPg0KICAgICAgPC90 cj4NCiAgICAgIDx0cj4NCiAgICAgICAgPHRkPjx0YWJsZSB3aWR0aD0iOTEw IiBhbGlnbj0iY2VudGVyIiBjZWxscGFkZGluZz0iNyIgY2VsbHNwYWNpbmc9 IjAiPg0KICAgICAgICAgIDx0cj4NCiAgICAgICAgICAgIDx0ZCB3aWR0aD0i NjkwIj48ZGl2IGFsaWduPSJsZWZ0Ij48c3Ryb25nPjE4IGPl7fL/4XD/PC9z dHJvbmc+IDxicj4NCiAgICAgICAgICAgICAgPGEgaHJlZj0iaHR0cDovL3d3 dy5uYmMudWEvbmJjL3BhZ2VzL3NlcnZpY2VzL1RyZW5pbmdpLVNlbWluYXJ5 L3NlbnR5YWJyL29iX2FrY2lvbi5odG0iIHN0eWxlPSJjb2xvcjojMDAzMzY2 Ij7Q5fRvcOzocG/iYe3o5SDqb3Dvb3Bh8uji7W/jbyDz73Bh4uvl7ej/IOIg cGHs6mF4IOJj8vPv6+Xt6P8g4iBj6OvzIMdh6m/tYSDT6nBh6O37ICZxdW90 O87hIGHq9uhv7eVw7ft4IG/h+eVj8uJheCZxdW90OzwvYT48L2Rpdj48L3Rk Pg0KICAgICAgICAgICAgPHRkIHdpZHRoPSIyMDAiPjxkaXYgYWxpZ249InJp Z2h0Ij48Zm9udCBjb2xvcj0iIzAwMDBGRiIgc3R5bGU9ImZvbnQtc2l6ZTog MTNweDsiPtjl4vfz6iDKLsQuPC9mb250Pjxicj4gDQo8Zm9udCBjb2xvcj0i IzAwMDBGRiIgc3R5bGU9ImZvbnQtc2l6ZTogMTNweDsiPszo6/746m8g3S7I LjwvZm9udD48YnI+IA0KPGZvbnQgY29sb3I9IiMwMDAwRkYiIHN0eWxlPSJm b250LXNpemU6IDEzcHg7Ij7L6OFh7W/iIMwuIMAuPC9mb250Pjxicj4NCg0K ICAgICAgICAgICAgICDR8m/o7G9j8vw6IDxzdHJvbmc+ODUwLjAwIONw7S48 L3N0cm9uZz48L2Rpdj48L3RkPg0KICAgICAgICAgIDwvdHI+DQogICAgICAg IDwvdGFibGU+PC90ZD4NCiAgICAgIDwvdHI+DQogICAgICA8dHI+DQogICAg ICAgIDx0ZD48dGFibGUgd2lkdGg9IjkxMCIgYWxpZ249ImNlbnRlciIgY2Vs bHBhZGRpbmc9IjciIGNlbGxzcGFjaW5nPSIwIj4NCiAgICAgICAgICA8dHI+ DQogICAgICAgICAgICA8dGQgd2lkdGg9IjY5MCI+PGRpdiBhbGlnbj0ibGVm dCI+PHN0cm9uZz4yNCBj5e3y/+Fw/zwvc3Ryb25nPiA8YnI+DQogICAgICAg ICAgICAgIDxhIGhyZWY9Imh0dHA6Ly93d3cubmJjLnVhL25iYy9wYWdlcy9z ZXJ2aWNlcy9UcmVuaW5naS1TZW1pbmFyeS9zZW50eWFici9ocl8tX3ByYWt0 aWt1bS5odG0iIHN0eWxlPSJjb2xvcjojMDAzMzY2Ij5IUiAtIO9wYery6Orz 7Dog7OXyYe9wb+NwYezs7W/lIOjt8uVw4vz+IOIg72/k4W9w5SDoIG/25e3q 5SDv5XBjb+1h62EuPC9hPjwvZGl2PjwvdGQ+DQogICAgICAgICAgICA8dGQg d2lkdGg9IjIwMCI+PGRpdiBhbGlnbj0icmlnaHQiPjxmb250IGNvbG9yPSIj MDAwMEZGIiBzdHlsZT0iZm9udC1zaXplOiAxM3B4OyI+xOXj8v9w5eJhIM1h 8mHr/P88L2ZvbnQ+PGJyPg0KICAgICAgICAgICAgICDR8m/o7G9j8vw6IDxz dHJvbmc+ODAwLjAwIONw7S48L3N0cm9uZz48L2Rpdj48L3RkPg0KICAgICAg ICAgIDwvdHI+DQogICAgICAgIDwvdGFibGU+PC90ZD4NCiAgICAgIDwvdHI+ DQogICAgICA8dHI+DQogICAgICAgIDx0ZD48dGFibGUgd2lkdGg9IjkxMCIg YWxpZ249ImNlbnRlciIgY2VsbHBhZGRpbmc9IjciIGNlbGxzcGFjaW5nPSIw Ij4NCiAgICAgICAgICA8dHI+DQogICAgICAgICAgICA8dGQgd2lkdGg9IjY5 MCI+PGRpdiBhbGlnbj0ibGVmdCI+PHN0cm9uZz4yNCBj5e3y/+Fw/zwvc3Ry b25nPiA8YnI+DQogICAgICAgICAgICAgIDxhIGhyZWY9Imh0dHA6Ly93d3cu bmJjLnVhL25iYy9wYWdlcy9zZXJ2aWNlcy9UcmVuaW5naS1TZW1pbmFyeS9h dmd1c3Qvb2Zpcy1tZW4uaHRtIiBzdHlsZT0iY29sb3I6IzAwMzM2NiI+q9Tz 7er26Oggb/ToYy3s5e3l5OblcGEg728gb+HlY+/l9+Xt6P4g6Ozo5OZhIG9w 42Ht6Odh9ujouzwvYT4gPC9kaXY+PC90ZD4NCiAgICAgICAgICAgIDx0ZCB3 aWR0aD0iMjAwIj48ZGl2IGFsaWduPSJyaWdodCI+PGZvbnQgY29sb3I9IiMw MDAwRkYiIHN0eWxlPSJmb250LXNpemU6IDEzcHg7Ij7KYezl7eX26ujpINEu IMIuPC9mb250Pjxicj4NCiAgICAgICAgICAgICAg0fJv6OxvY/L8OiA8c3Ry b25nPjgwMC4wMCDjcO0uPC9zdHJvbmc+PC9kaXY+PC90ZD4NCiAgICAgICAg ICA8L3RyPg0KICAgICAgICA8L3RhYmxlPjwvdGQ+DQogICAgICA8L3RyPg0K ICAgICAgPHRyPg0KICAgICAgICA8dGQ+PHRhYmxlIHdpZHRoPSI5MTAiIGFs aWduPSJjZW50ZXIiIGNlbGxwYWRkaW5nPSI3IiBjZWxsc3BhY2luZz0iMCI+ DQogICAgICAgICAgPHRyPg0KICAgICAgICAgICAgPHRkIHdpZHRoPSI2OTAi PjxkaXYgYWxpZ249ImxlZnQiPjxzdHJvbmc+MjUgY+Xt8v/hcP88L3N0cm9u Zz4gPGJyPg0KICAgICAgICAgICAgICA8YSBocmVmPSJodHRwOi8vd3d3Lm5i Yy51YS9uYmMvcGFnZXMvc2VydmljZXMvVHJlbmluZ2ktU2VtaW5hcnkvc2Vu dHlhYnIvdG9yZ19tYXJrYS5odG0iIHN0eWxlPSJjb2xvcjojMDAzMzY2Ij7S b3Djb+Jh/yDsYXDqYSDoIOpv7OzlcPflY+pv5SDtYejs5e1v4mHt6OUuPC9h PjwvZGl2PjwvdGQ+DQogICAgICAgICAgICA8dGQgd2lkdGg9IjIwMCI+PGRp diBhbGlnbj0icmlnaHQiPjxmb250IGNvbG9yPSIjMDAwMEZGIiBzdHlsZT0i Zm9udC1zaXplOiAxM3B4OyI+PC9mb250Pjxmb250IGNvbG9yPSIjMDAwMEZG IiBzdHlsZT0iZm9udC1zaXplOiAxM3B4OyI+wmHr5e3y6O1hIMpw++btYTwv Zm9udD48YnI+DQogICAgICAgICAgICAgINHyb+jsb2Py/DogPHN0cm9uZz44 NTAuMDAg43DtLjwvc3Ryb25nPjwvZGl2PjwvdGQ+DQogICAgICAgICAgPC90 cj4NCiAgICAgICAgPC90YWJsZT48L3RkPg0KICAgICAgPC90cj4NCiAgICAg IDx0cj4NCiAgICAgICAgPHRkPjx0YWJsZSB3aWR0aD0iOTEwIiBhbGlnbj0i Y2VudGVyIiBjZWxscGFkZGluZz0iNyIgY2VsbHNwYWNpbmc9IjAiPg0KICAg ICAgICAgIDx0cj4NCiAgICAgICAgICAgIDx0ZCB3aWR0aD0iNjkwIj48ZGl2 IGFsaWduPSJsZWZ0Ij48c3Ryb25nPjI1LTI2IGPl7fL/4XD/PC9zdHJvbmc+ IDxicj4NCiAgICAgICAgICAgICAgPGEgaHJlZj0iaHR0cDovL3d3dy5uYmMu dWEvbmJjL3BhZ2VzL3NlcnZpY2VzL1RyZW5pbmdpLVNlbWluYXJ5L3NlbnR5 YWJyL3RlaG5vbG9naXlhX2RpYWdub3N0aWtpLmh0bSIgc3R5bGU9ImNvbG9y OiMwMDMzNjYiPtLleO1v62/j6P8g5Ohh4+1vY/Lo6ugg4m/n7G/m7W9j8uXp IOftYffo8uXr/O1v428g8+Ll6+j35e3o/yDvcG/kYeYg82Pr8+MgKPJv4mFw b+IpPC9hPjwvZGl2PjwvdGQ+DQogICAgICAgICAgICA8dGQgd2lkdGg9IjIw MCI+PGRpdiBhbGlnbj0icmlnaHQiPjxmb250IGNvbG9yPSIjMDAwMEZGIiBz dHlsZT0iZm9udC1zaXplOiAxM3B4OyI+PC9mb250Pjxmb250IGNvbG9yPSIj MDAwMEZGIiBzdHlsZT0iZm9udC1zaXplOiAxM3B4OyI+1/Pj8+1v4iDILiDI LjwvZm9udD48YnI+DQogICAgICAgICAgICAgINHyb+jsb2Py/DogPHN0cm9u Zz4xNjAwLjAwIONw7S48L3N0cm9uZz48L2Rpdj48L3RkPg0KICAgICAgICAg IDwvdHI+DQogICAgICAgIDwvdGFibGU+PC90ZD4NCiAgICAgIDwvdHI+DQog ICAgICA8dHI+DQogICAgICAgIDx0ZD48dGFibGUgd2lkdGg9IjkxMCIgYWxp Z249ImNlbnRlciIgY2VsbHBhZGRpbmc9IjciIGNlbGxzcGFjaW5nPSIwIj4N CiAgICAgICAgICA8dHI+DQogICAgICAgICAgICA8dGQgd2lkdGg9IjY5MCI+ PGRpdiBhbGlnbj0ibGVmdCI+PHN0cm9uZz4yNS0yNiBj5e3y/+Fw/zwvc3Ry b25nPiA8YnI+DQogICAgICAgICAgICAgIDxhIGhyZWY9Imh0dHA6Ly93d3cu bmJjLnVhL25iYy9wYWdlcy9zZXJ2aWNlcy9UcmVuaW5naS1TZW1pbmFyeS9z ZW50eWFici92X3JfYl9uYV91a3Jfci5odG0iIHN0eWxlPSJjb2xvcjojMDAz MzY2Ij7C+3hv5CBwb2Nj6Olj6uh4IOFw5e3kb+Ig7WEg8+pwYejtY+ro6SBw ++1v6i48L2E+PC9kaXY+PC90ZD4NCiAgICAgICAgICAgIDx0ZCB3aWR0aD0i MjAwIj48ZGl2IGFsaWduPSJyaWdodCI+PGZvbnQgY29sb3I9IiMwMDAwRkYi IHN0eWxlPSJmb250LXNpemU6IDEzcHg7Ij7Kb3Dqb/jqbyDRLiDDLjwvZm9u dD48YnI+DQo8Zm9udCBjb2xvcj0iIzAwMDBGRiIgc3R5bGU9ImZvbnQtc2l6 ZTogMTNweDsiPsjiYe1v4mEg0mHy/P/tYTwvZm9udD48YnI+DQo8Zm9udCBj b2xvcj0iIzAwMDBGRiIgc3R5bGU9ImZvbnQtc2l6ZTogMTNweDsiPsXr5e1h INHz6uxh7W/iYTwvZm9udD48YnI+DQogICAgICAgICAgICAgINHyb+jsb2Py /DogPHN0cm9uZz45NTAuMDAg43DtLjwvc3Ryb25nPjwvZGl2PjwvdGQ+DQog ICAgICAgICAgPC90cj4NCiAgICAgICAgPC90YWJsZT48L3RkPg0KICAgICAg PC90cj4NCiAgICAgIDx0cj4NCiAgICAgICAgPHRkPjx0YWJsZSB3aWR0aD0i OTEwIiBhbGlnbj0iY2VudGVyIiBjZWxscGFkZGluZz0iNyIgY2VsbHNwYWNp bmc9IjAiPg0KICAgICAgICAgIDx0cj4NCiAgICAgICAgICAgIDx0ZCB3aWR0 aD0iNjkwIj48ZGl2IGFsaWduPSJsZWZ0Ij48c3Ryb25nPjMwIGPl7fL/4XD/ PC9zdHJvbmc+IDxicj4NCiAgICAgICAgICAgICAgICA8YSBocmVmPSJodHRw Oi8vd3d3Lm5iYy51YS9uYmMvcGFnZXMvc2VydmljZXMvVHJlbmluZ2ktU2Vt aW5hcnkvc2VudHlhYnIva29nZGFfbmV0Lmh0bSIgc3R5bGU9ImNvbG9yOiMw MDMzNjYiPiZxdW90O8pv4+RhIKvNxdK7IO9w5eJwYflh5fJj/yDiIKvEwLs6 PGJyPg0KICAgICAgICAgICAgICAgIOjr6CBwYeFv8mEgYyDib+dwYebl7ej/ 7Ogg6CBjb+zt5e3o/+zoIOrr6OXt8mEmcXVvdDs8L2E+PC9kaXY+PC90ZD4N CiAgICAgICAgICAgIDx0ZCB3aWR0aD0iMjAwIj48ZGl2IGFsaWduPSJyaWdo dCI+PGZvbnQgY29sb3I9IiMwMDAwRkYiIHN0eWxlPSJmb250LXNpemU6IDEz cHg7Ij7I4mHtb+JhINJh8vz/7WE8L2ZvbnQ+PGJyPg0KICAgICAgICAgICAg ICDR8m/o7G9j8vw6IDxzdHJvbmc+ODAwLjAwIONw7S48L3N0cm9uZz48L2Rp dj48L3RkPg0KICAgICAgICAgIDwvdHI+DQogICAgICAgIDwvdGFibGU+PC90 ZD4NCiAgICAgIDwvdHI+DQogICAgPC90YWJsZT48L3RkPg0KICA8L3RyPg0K PC90YWJsZT4NCjwvYm9keT4NCjwvaHRtbD4NCg0KLS0tLS0tLS0tLS0tMjlD OUU1NTdBQzUwQQ0KQ29udGVudC1UeXBlOiBJTUFHRS9KUEVHOyBuYW1lPSI4 ZGcyZjUyLmpwZyINCkNvbnRlbnQtSUQ6IDxGQ0VDMTlDRS5GNTY2NkVBQi4z REUyMDE2Qi4wMDAwMDAwMV9jc3NlZGl0b3I+DQpDb250ZW50LXRyYW5zZmVy LWVuY29kaW5nOiBiYXNlNjQNCg0KLzlqLzRBQVFTa1pKUmdBQkFnQUFaQUJr QUFELzdBQVJSSFZqYTNrQUFRQUVBQUFBTWdBQS8rNEFEa0ZrYjJKbEFHVEFB QUFBQWYvYg0KQUlRQUNBWUdCZ1lHQ0FZR0NBd0lCd2dNRGdvSUNBb09FQTBO RGcwTkVCRU1EZzBORGd3UkR4SVRGQk1TRHhnWUdob1lHQ01pSWlJag0KSnlj bkp5Y25KeWNuSndFSkNBZ0pDZ2tMQ1FrTERnc05DdzRSRGc0T0RoRVREUTBP RFEwVEdCRVBEdzhQRVJnV0Z4UVVGQmNXR2hvWQ0KR0JvYUlTRWdJU0VuSnlj bkp5Y25KeWNuLzhBQUVRZ0FNQURUQXdFaUFBSVJBUU1SQWYvRUFKb0FBQUlD QXdFQkFBQUFBQUFBQUFBQQ0KQUFBSEJRWUNBd1FCQ0FFQUFnTUJBUUFBQUFB QUFBQUFBQUFBQUFFQ0F3UUZCaEFBQWdJQkF3SURCUVlEQndRREFBQUFBUUlE QkFVQQ0KRVFZaEVqRVRCMEZSWVNJeWNZRkNVaFFWb1dJamtiRnlNME1rRm9L eVUyTTBWSVFSQUFFREF3TUJCZ1VGQUFBQUFBQUFBQUVBRVFKQg0KVVJJaE1R TmhnYUd4SWhNRThIR1JNZ1hCOFVKaW92L2FBQXdEQVFBQ0VRTVJBRDhBZitz WGRZMGFTUmdxSUN6TXgyQUE2a2tuUTdwRw0KclBJd1JFQlptWTdBQWRTU1Rw RGVwSHFRK2RlVEI0T1FyaVVQYllzTDBOa2crQS85WC9kOW1sS1FBVVpTRVE1 VzdudnFwZHZXemp1TA0KV1hxMFlHSWt2Ukh0a25ZZmtQaXNZL2pxYzlOL1Ux cjd4NEhrazMrOFk5dE84K3c4MG53aWxQUWQvd0NVKzM3ZkZKNk5VNWwzV2Nj aw0Kc25mc1gySU5lNlV2cHI2bGZyQkR4M2tVMjFyb2xHODUvd0EzMkNLVW44 ZnVQNHZ0OFcxcTRFRU9GcGpJU0RoR3ZOOUIwYUUxeDVMTA0KNHpEUUxaeXR1 S25DN0NOWkptQ2dzUVQyamY3TmNkRGxuRzhwYVNsanNwV3RXWEJLUXhTQm1J VWJrZ0QzRFZCOVVKRXl2SnVOY2FhUg0KRWlMdGJzbVVnUmdFOXE5NTkyeU4v YnFCdzJXZkE1WGtVTHdZMjErMTBKcEV5Mk9nV0h0a2RVV05GZVBvZTUzN1NQ ZU5STXRXb3F6TQ0KaVRVR2liOGZKK1BTMUxGNlBKMW1xVlg4dXhQNWk5aVAr VXQ0Yi9EWE5ZNXJ4U3RYZ3RUNWVzc0ZydjhBMDhuZnVIOHM5cjl1MisvYQ0K VHRwSFNjWUdPOVBCeVBLMkhsZTdJb3hORldJalI1VHMxaHgrSnlrWjIrR3Jk bnFGbkQ4TnAxNmY3TTBWTEhlWGVONEI3Z21sL3FPbA0KY0VIWTd2dUFldStq STJvNlhxU3MyanBteWNsd0VXT2p5OG1TcnJqcFc3STdaa1h5eTNYNWU3MzlQ RFc2M204VlJrcXczTGtVRXQ0aA0KYWNic0EwcE93QVFlMzZocEdMVXIzY1Z3 Ymk5QlpGR1Jua3lGeFo5aVN4Znl1N1pmd2RzYmtmeTZrVEZsWS9VUkU1RGto bFY0NVdseQ0KTHlyR0kwakNSK2NzZmFQY3hUcm96TnJJOVEyc1BxbW5ZNXB4 T3JQSldzWm1wRlBDNWpsamFWUXl1cDdXVWozZzY2c255UEI0Wkk1TQ0KcGtJ S2dsSGRFSlhBWmdmYXEvVVI5MmtueExqc3Vlb0xrWThoalliOXkzTkxMWHV4 cFlzT0FRVkVhT2R4MTd6NGRkVG5wekZoT1VYOA0KdnlIbERRVzhtODRqaHJY Q3BFY0pIeTlzVW55KzN0SFRwdG9FaWUxQW5JdG9OZGszS1Y2cmtha1Y2aktz OVdkZStHWkR1ckw3eHJSVg0KemVKdlMyb2FkeUtlU2lTdHhVY0h5aU53Uko3 dnBPcW8vTE1wUmU5ajYzRjdGTEc0K0d5WWIveXBBRXJvN0l5UnF2Z3hYNVJx ajhWeQ0KbFBHK21lZG5oc3h2bk1oSktyd2Q2K2NUSjJ3cWUwa050c3pOdnA1 ZnFwR2VyZEMvWW0xL3lyanY3ZjhBdTM3blgvYi9BRFBKL1ZlWQ0KUEw4ejhu ZDc5YTR1WThYbmhuc1E1ZXJKRFZVUFlrV1FGWTFadXhTeDltN0hiU2R5VmV2 SHgvZy9GRE5HaTNKVGV5RHM2aU5lK1R0Lw0KcU1EdDhvTEtmczBjbHhGbkdZ dUxGUTNxRjM5L3V3d3hmdGNLUmdMQVNTSGVQZnVJYVZOaHBabXlqNmtyRFFk NmRkbmtHRnAwNitSdA0KWDRZYWRydC9UV0hjQkpPNGR5OWg5dTQxeVQ4MTRu V21rcjJNelVqbWlZcExHMHFncXk5Q3BIdkdsZG1jTm1HNXZ4N2ltUXlRdjBr aw0KUzFCVmpqRWFWNjhaTzBmdExmMDR0dXV1OU1GaDgzNnRXcVNVWVRqY2JY TWx5RUlPeVNkeHVXa0h0UGZML0RSa2FDcko1eW9CdTJxWQ0KVTNOT0tWL0w4 L01WSS9OUlpZKzZVRHVSL3BjZkErelVwUXlOSEtWMXQ0NnpIYXJzU0JOQzRk ZHg0amRmYnBHMDdHTG01RnlETTJNRA0KTG1xS1MvdDJOcFZvZk1SUEtIYWhQ YVBrQVNNQUg0NnYzcFZ4bkk4ZXcxcVhKeG12UGtKdlBXbVR2NVVZSGFvYjNN ZmI5MmdTSktJeg0KSk8ybXF2MmpSbzFOV0kwYU5HaENRL3FkNmh6NWF4WTQ1 aUdhTEhRTzBWeVlkR3NPaDdXVDRScVIvd0JXbGxwb2VwM3AzTmpaN0hKTQ0K T2pTMEozYVc3QUJ1MEx1ZDJrWDNveFBYM2Zacmo0NXgySGpjTU9iemNRbHk4 cWlUR1kyUWJpQUg2Yk5sZnpma1Q3L3NvbVdKTXRBRg0KajU1aUdVK1VzQlh3 WmVZRGkyTndsYVBLY3FxL3JMbGxRMVRETXhRSkdmOEFXc2tkUVQrRmY3ZmhH Y3E0ckJEQS9JZVBLellsbTJ0Vg0KV1BkSlNrUDRXOThUZmhiN2pxYm5ubXN6 UFlzT1pKcFQzU08zVWtuVzZoa0o4ZFA1OEhheXNwam1na0hkSExHMzFSeUw3 Vk9zNDUvTg0KcVBMMy9OY2lQNVNYcSthTGNSMFlEekQrejFQUks3VHc5TGZV S2ZMUEh4bk1zWkx5b1RTdG5xWlVqSGNVbC9uVlJ2djdSOGZHZ2NxNA0KcERE Q2VRY2NWbnhUc0JacWZWTFRsYjhEZTFvaWZvYjdqcGhlbC9wN05obWo1Sm1W S1pDUkNLbFE5UEpSeHNXay9uWUhiYjJENDYwOA0KYnU0MUI4RjJlRTVFU2dY aVE3alloTTkzUkNBekJTM1JkeUJ1ZmhySHpvZGdmTVhaanNwN2gxUHVHbzdM WUt2bHJ1UHVXRzY0NHpTUQ0KcHR1REpLbmxLNS93ZFNQanBWWlRGenhjMHdm RnVQb3RoK09ValpqU1k5cVBaTzgzZkx0NGR6bEcvaHF3bHFMUktSRktzbVJt T0djVA0KenQ4M012UmpzM1dWVTdubGtWaXE3OW9DbzZqK0dzMTRoeFNQR3k0 Rk1kREhTc0ZXbXJJV1JwQ2g3bExzckIyMkk5cDBzY0ZtYmY4QQ0KeS9QY3U1 VDVRbDQ5VmF2SXRZbnl2T0o4bEk0aVNlcmZNUHYxQjBNaGVmbW1BNUpmdkpM a2NuY0JzVTR6dTFhRnlzVWNiajhQZEcvUQ0KZTdVY2hiZFF6anZpTlQzSjMz dU04ZHlOU2xpcjFTT1d0UTdXcDFpN3FFN0IycVFGY0U3RDM3NmpySEFPRTNN alBrcldPaW51U09acA0KMmtrZGdXSjNKWk8vdDIrRzIycXJ3NnhIbCtmOHE1 TGFZTW1OVnExWUU5VmpWbVFzQi9oaC9qcXJWN2swUEIrVjhtbjNXMXlHOEtr TA0KRUVOMk14a2syKzVtSDNhWkkzYS9jZ3lHK0lyL0FKVG0vWU9QakpRWjRW b2x1MW94WHJXUXhDcEdBVUNJb2J5eDBZancxcG00cnhocA0KTWpmbnFJSHlz Zmw1Q2RwSEhteGtnOXBidjJVSHRIMDdhU1diNDFuS3VHNDNqc3JiWVdNaEtJ TWRpWS84dUNKeUMwc20zMVNzMG9KMQ0KYmNaallPZWNyeWVOeWNrbi9IK05o YWRQSEpJeUt6Umt3ZDc5aEIvMG02L1pveW95Qk55Mk9wVjR4WEIrR1l5M0Zs c1Zqb283RVBjWQ0KcktTU09GM0JWaU81Mlh3T3NXNEp3cVRJRE5uSFFpeXNv bjg1WFpVODBOM2QvYXJkbS9kOE5LU3JlR0JwODdpdzg3bkNMdFNwZ3NXVQ0K eXpTR0lGQ2ZFaU1QMTlvMWxubytVNG5pT0k0dzhOZUxGNVR5ZjA1UmliTWsw bmJPL21EZllLSkhBOFBkcFpCdnRTemkzMjdhOXFmcg0KbUY0bTh3cTBMRFp1 NGdxUWVteDM2YkhWV2IwMDRKS3hsT0dpM2Y1dmtlVlY2L2xDU0FBZlpwY2M1 eUtaSm00cFV1eDA4TnhxcjJ6Uw0KTzJ3czNZbzlrcnArWnZsSUE5KzUxdFhr MldtNFJ4YmpHSG5hTEpaZDNxUFlVa09rRVVwaTZFZFJ2djRqMkE2WmtLaDJU TTRra0VPMw0KaW1KWjRGd2F5SUlMR09oWVZZeEJCR1pwQjJKM0YrMEFTRDhU RTY2YXZDK0pWNUtYNldoRXI0cDJscGdTU0h5bmR1OW0yTG5jOXcvRg0KcFhT OFd3Mkc5UThUaWFqU1N4WTJEOXl5dGladTR1MEt0UDNiZUFIeXIwK091YkI1 SGxPTDQ3bCtlWXVTc2d1M21lNGJRTFBJdmNPeA0KWVIwRzNmSzIvWFNjUDlv L1pHUUIxaU5OMjZKenRnc0dtYUhJWks2TGxpbmtyYVoyMzdOdTN0VlMzYjRl NGE4cFlMQjR2SVhMMU91aw0KTi9KSHV0eTk3RjVDU1c4SFk3ZFQrSFNyek9W eVhNK1I4U2hyMTBGeUtsKzZQVWNrUmVld01xQmlmd255bFAySFhIRGxNelk1 WG5PUQ0KY2g4bEx2RzhkTkdGcWttSloyQmhpQ0ZpZXZkS2Z2MDhoYXFNdysx ZC9GT0xCNFRDWUt2TFd3Y0NWNFpKREpLcU16N3VRQnVTN01mQQ0KYWt2TWpE ZVdXSGVlb1hjYjdmWnBENHpLY3E0SncvRlppaWFqVU1qS1pKcTh5bHA1WkpD M2I3dGw4dU1iYmUwNjMzTXViZklPWmNzSQ0KS3JqYUlvVk56OU04NFdzQVBp RDM2TXhaa3h5QUFhTjA2YnB4Mk05aWF0dUNqUGFSYk5qckRIMVBkMTIrcFFW L2pydDgrSHAvVVhxQw0KUjh3NmdlSjE4MzM4SG1zZHdPamF5RnRvYTF1ZGYy dkZSOVBNTW9NaldKOXZFOXFqdEduREh3R25MallLODBoamxURURFQXFBZkxF aA0KNzU1RkovRXg2YUJJbWlJemthVUJWdjhBT2kvT3ZoM2ZVUHAvTjltalVk L3gvRS8vQUZsLytIKzJmL2wvOFgyYU5UVmlsQ04raDhENA0KalM0NXp4Mnls bVhPVjk1WUpOdjFDK0xSa0FMM2Y0ZW4zYVpHc1dWV1Vxd0JERFlnOVFRZllk UTVPTVRqaWV6NXJQN3IyMFBjY1I0NQ0KYVZpUlNTUWVqeE93RzVQUUFhdVhL ZUd6VTVUZXc4TFMxWkQvQUZLeUFzMFpQNVI0bGY3dFMzRU9IL28rektaVk43 WGpCWGIvQUUvNQ0KbS9tL3UxaEhCTXp3WnV0R1huWWZqdmNTNS9RTVdiZWY4 Y2JnMVc3aFBHckdNamt5RjdkWjdLQkJYUDRVMzd0My9tUDhOWERSbzF2aA0K QVFpSWlpOUx3Y0VPRGpqeFEyamZjbXBSdHFCeC9Fc2RqdVFaRGtzY3MwdC9J cjJTK2F5bEVYZGZsakFVRWZRUEVuVTlvMUpsYXcraQ0Kb3JlbFdBZXJQVGt0 WFdpdFd4ZnRieVI3eXlMdjJvNThyNkIzTjArT3BHLzZmY2N2Wk9qbFZnTlN4 UWxFNmlxRWpXVmdWWWVmOGhMYg0KZHZ2R3JUbzBzUlpSeGpaVVMvNlRjYnU1 Q3hrbzdGMmxMYVpwSmtxektpRm5QYzJ3WkdPeFBYYmZiWG85S3NBYU1XT2t0 M3BhOFZvWA0KTnBKVVlzNFVJRWIrbjlHMi9RZTg2dldqUmlMSXdqWlFHVDRs anN0bnNkeUMzSk4rb3hZLzIwQ3NvaDMzTGR6S1ZMRTcvd0EzczFEWg0KUDB0 d1dReWRuS1Eycm1Qa3VrbTNGVGxFYVNGanUrNEtrL043UjRhdkdqUXdzbVl4 TzRWUnVlbkhITFdFcmNmaUUxU2hXbUZrckF5aA0KcFpBQ3ZkTThpdVc2SFhi bWVIWTNONUhHWksxTlBHK0ozTk9HSmtFUWJjRU15c2pFa2RvOXZzMVlkR2ho WkdJdDhCVkNwNmJjWnE0bQ0KemlYaWExK3FhV1I3dG5za3NxOHE5aGVPVHNB Vmg3RHQ0Nnd4bnBwZ2NWZXhkK0NhMUpKaVZaYXFTdWhROTdPNVp3SXdkOTVE NEVhdQ0KV2pSaUxKWXh0c3F0UHdQRldNbG1Nczlpeitxek5kcWxoZzZiUnhN RlVpRCtuOHA3VUE2NzZpS3ZvOXhXdThmblRYYmRlTnU0Vko1eA0KNUpQeFdO RS92MHdOR2pFV1JoR3lyOUxoK0xvY2lzY21pZVZydGlFVnhFeFh5WW8xQ0tG aVJVQkhTTUR4MUdONmFZUnFlV3B0YXVFWg0KcWRMRjZYdmo4d21OMmxWRlBs YkJlNXZkcTU2TkRDeWVNYmZCVkh4ZnBUeGpHMjRManZhdk5WSWF0RmNsRHhS c09vS3hxaURvZlllbQ0KdlQ2WFlGc1RjeEJzM0RGZnRMZHRUZVpINXJ1Z2Ja QzNsYmR1N2IrRysvdDFkOUdqRVdTd2pZS3VaamhlS3paeEF0eVRMRGhtVjZz RQ0KYktFWXAyZHZtaGtZbmJzOW0yckhvMGFiSnNCMm8wYU5HaE5mLzlrPQ0K DQotLS0tLS0tLS0tLS0yOUM5RTU1N0FDNTBBLS0NCg== --0830-2043-31-PART-BREAK-- From owner-freebsd-arch@FreeBSD.ORG Mon Aug 31 11:07:01 2009 Return-Path: Delivered-To: freebsd-arch@FreeBSD.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 6F3B5106566C for ; Mon, 31 Aug 2009 11:07:01 +0000 (UTC) (envelope-from owner-bugmaster@FreeBSD.org) Received: from freefall.freebsd.org (freefall.freebsd.org [IPv6:2001:4f8:fff6::28]) by mx1.freebsd.org (Postfix) with ESMTP id 446B98FC0C for ; Mon, 31 Aug 2009 11:07:01 +0000 (UTC) Received: from freefall.freebsd.org (localhost [127.0.0.1]) by freefall.freebsd.org (8.14.3/8.14.3) with ESMTP id n7VB71fJ070475 for ; Mon, 31 Aug 2009 11:07:01 GMT (envelope-from owner-bugmaster@FreeBSD.org) Received: (from gnats@localhost) by freefall.freebsd.org (8.14.3/8.14.3/Submit) id n7VB70hB070469 for freebsd-arch@FreeBSD.org; Mon, 31 Aug 2009 11:07:00 GMT (envelope-from owner-bugmaster@FreeBSD.org) Date: Mon, 31 Aug 2009 11:07:00 GMT Message-Id: <200908311107.n7VB70hB070469@freefall.freebsd.org> X-Authentication-Warning: freefall.freebsd.org: gnats set sender to owner-bugmaster@FreeBSD.org using -f From: FreeBSD bugmaster To: freebsd-arch@FreeBSD.org Cc: Subject: Current problem reports assigned to freebsd-arch@FreeBSD.org X-BeenThere: freebsd-arch@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: Discussion related to FreeBSD architecture List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 31 Aug 2009 11:07:01 -0000 Note: to view an individual PR, use: http://www.freebsd.org/cgi/query-pr.cgi?pr=(number). The following is a listing of current problems submitted by FreeBSD users. These represent problem reports covering all versions including experimental development code and obsolete releases. S Tracker Resp. Description -------------------------------------------------------------------------------- o kern/120749 arch [request] Suggest upping the default kern.ps_arg_cache 1 problem total. From owner-freebsd-arch@FreeBSD.ORG Mon Aug 31 11:31:53 2009 Return-Path: Delivered-To: freebsd-arch@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id BB7491065672; Mon, 31 Aug 2009 11:31:53 +0000 (UTC) (envelope-from jhb@freebsd.org) Received: from cyrus.watson.org (cyrus.watson.org [65.122.17.42]) by mx1.freebsd.org (Postfix) with ESMTP id 8DC6E8FC15; Mon, 31 Aug 2009 11:31:53 +0000 (UTC) Received: from bigwig.baldwin.cx (66.111.2.69.static.nyinternet.net [66.111.2.69]) by cyrus.watson.org (Postfix) with ESMTPSA id 3F54C46B03; Mon, 31 Aug 2009 07:31:53 -0400 (EDT) Received: from jhbbsd.hudson-trading.com (unknown [209.249.190.8]) by bigwig.baldwin.cx (Postfix) with ESMTPA id B4F1F8A043; Mon, 31 Aug 2009 07:31:52 -0400 (EDT) From: John Baldwin To: freebsd-arch@freebsd.org Date: Mon, 31 Aug 2009 07:31:23 -0400 User-Agent: KMail/1.9.7 References: <3bbf2fe10908281904l6f8119a5l2daa301016eac8ef@mail.gmail.com> In-Reply-To: <3bbf2fe10908281904l6f8119a5l2daa301016eac8ef@mail.gmail.com> MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: 7bit Content-Disposition: inline Message-Id: <200908310731.24021.jhb@freebsd.org> X-Greylist: Sender succeeded SMTP AUTH, not delayed by milter-greylist-4.0.1 (bigwig.baldwin.cx); Mon, 31 Aug 2009 07:31:52 -0400 (EDT) X-Virus-Scanned: clamav-milter 0.95.1 at bigwig.baldwin.cx X-Virus-Status: Clean X-Spam-Status: No, score=-1.3 required=4.2 tests=AWL,BAYES_00,RDNS_NONE autolearn=no version=3.2.5 X-Spam-Checker-Version: SpamAssassin 3.2.5 (2008-06-10) on bigwig.baldwin.cx Cc: Attilio Rao , Konstantin Belousov Subject: Re: [PATCH] VFS KPI/API versioning X-BeenThere: freebsd-arch@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: Discussion related to FreeBSD architecture List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 31 Aug 2009 11:31:53 -0000 On Friday 28 August 2009 10:04:55 pm Attilio Rao wrote: > Often I found as it would have been useful to verify, mostly at > run-time, of a feature of the VFS was supported and I quickly thought > that having a run-time check for VFS versioning would not be a bad > idea. > In order to do that, I made the following patch: > http://www.freebsd.org/~attilio/vfs_modload.diff You don't have to have an actual DECLARE_MODULE() to use MODULE_VERSION(). Given that, you can simplify this patch down to a single line that just adds the MODULE_VERSION(). -- John Baldwin From owner-freebsd-arch@FreeBSD.ORG Mon Aug 31 22:35:46 2009 Return-Path: Delivered-To: freebsd-arch@FreeBSD.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 8FF761065672 for ; Mon, 31 Aug 2009 22:35:46 +0000 (UTC) (envelope-from delphij@delphij.net) Received: from tarsier.delphij.net (delphij-pt.tunnel.tserv2.fmt.ipv6.he.net [IPv6:2001:470:1f03:2c9::2]) by mx1.freebsd.org (Postfix) with ESMTP id 396588FC39 for ; Mon, 31 Aug 2009 22:35:46 +0000 (UTC) Received: from tarsier.geekcn.org (tarsier.geekcn.org [211.166.10.233]) (using TLSv1 with cipher ADH-CAMELLIA256-SHA (256/256 bits)) (No client certificate requested) by tarsier.delphij.net (Postfix) with ESMTPS id 183B65C071 for ; Tue, 1 Sep 2009 06:35:45 +0800 (CST) Received: from localhost (tarsier.geekcn.org [211.166.10.233]) by tarsier.geekcn.org (Postfix) with ESMTP id DE5B355CDD87; Tue, 1 Sep 2009 06:35:44 +0800 (CST) X-Virus-Scanned: amavisd-new at geekcn.org Received: from tarsier.geekcn.org ([211.166.10.233]) by localhost (mail.geekcn.org [211.166.10.233]) (amavisd-new, port 10024) with ESMTP id HqROSmp+0I7n; Tue, 1 Sep 2009 06:34:51 +0800 (CST) Received: from charlie.delphij.net (adsl-76-237-33-62.dsl.pltn13.sbcglobal.net [76.237.33.62]) (using TLSv1 with cipher DHE-RSA-AES256-SHA (256/256 bits)) (No client certificate requested) by tarsier.geekcn.org (Postfix) with ESMTPSA id B083855CDB0E; Tue, 1 Sep 2009 06:34:45 +0800 (CST) DomainKey-Signature: a=rsa-sha1; s=default; d=delphij.net; c=nofws; q=dns; h=message-id:date:from:reply-to:organization:user-agent: mime-version:to:subject:x-enigmail-version:openpgp:content-type:content-transfer-encoding; b=u55yWhwy7Wo+3+lpzj6/ks6iTj0C4tKU2frJ8STOma3S4Fws+TXyK1XimFcwrydE/ E/xJ0AfWO6V9+D3o+7apw== Message-ID: <4A9C4FF4.6030809@delphij.net> Date: Mon, 31 Aug 2009 15:34:28 -0700 From: Xin LI Organization: The FreeBSD Project User-Agent: Thunderbird 2.0.0.22 (X11/20090803) MIME-Version: 1.0 To: freebsd-arch@FreeBSD.org X-Enigmail-Version: 0.96.0 OpenPGP: id=18EDEBA0; url=http://www.delphij.net/delphij.asc Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit Cc: Subject: Import X11/NetBSD/OpenBSD's x86emu? X-BeenThere: freebsd-arch@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list Reply-To: d@delphij.net List-Id: Discussion related to FreeBSD architecture List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 31 Aug 2009 22:35:46 -0000 -----BEGIN PGP SIGNED MESSAGE----- Hash: SHA1 Hi, There is some recent discussion about enabling VESA on amd64, by importing OpenBSD's x86emu (which originates from X11 and then imported into NetBSD, then OpenBSD). The x86emu code implements a virtual machine for 80386's real mode in < 9kLoC, and was ported to FreeBSD. Then, the current code for VESA has been modified to have the VESA code run inside the emulator, thus solved the problem that there is no VM86 support when we are in long mode. I'd like to give this a shoot but if there is any objections, please let me know. The patches can be obtained from: ftp://ftp.lissyara.su/users/Guest/vesa/ Cheers, - -- Xin LI http://www.delphij.net/ FreeBSD - The Power to Serve! -----BEGIN PGP SIGNATURE----- Version: GnuPG v2.0.12 (FreeBSD) iEYEARECAAYFAkqcT/QACgkQi+vbBBjt66B81gCgtyHBodCx9LY5uqfGaeRYTInn w+IAoLIhhKXhIP/CHTf+AsqVZUldolIO =Rqgi -----END PGP SIGNATURE----- From owner-freebsd-arch@FreeBSD.ORG Fri Sep 4 22:19:33 2009 Return-Path: Delivered-To: arch@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id ABCE51065670; Fri, 4 Sep 2009 22:19:33 +0000 (UTC) (envelope-from imp@bsdimp.com) Received: from harmony.bsdimp.com (bsdimp.com [199.45.160.85]) by mx1.freebsd.org (Postfix) with ESMTP id 59EF18FC08; Fri, 4 Sep 2009 22:19:33 +0000 (UTC) Received: from localhost (localhost [127.0.0.1]) by harmony.bsdimp.com (8.14.3/8.14.1) with ESMTP id n84MFEhI006528; Fri, 4 Sep 2009 16:15:14 -0600 (MDT) (envelope-from imp@bsdimp.com) Date: Fri, 04 Sep 2009 16:16:34 -0600 (MDT) Message-Id: <20090904.161634.-217944108.imp@bsdimp.com> To: attilio@freebsd.org From: "M. Warner Losh" In-Reply-To: <3bbf2fe10909041455u552b0dbdm1708ea0a26365149@mail.gmail.com> References: <200909031340.n83Defkv034013@svn.freebsd.org> <20090904.112919.1521002024.imp@bsdimp.com> <3bbf2fe10909041455u552b0dbdm1708ea0a26365149@mail.gmail.com> X-Mailer: Mew version 5.2 on Emacs 21.3 / Mule 5.0 (SAKAKI) Mime-Version: 1.0 Content-Type: Text/Plain; charset=us-ascii Content-Transfer-Encoding: 7bit Cc: arch@freebsd.org Subject: NEWBUS states (was Re: svn commit: r196779 - in head/sys: kern sys) X-BeenThere: freebsd-arch@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: Discussion related to FreeBSD architecture List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 04 Sep 2009 22:19:33 -0000 [[ redirected to arch@ since too much of this discussion has been private ]] In message: <3bbf2fe10909041455u552b0dbdm1708ea0a26365149@mail.gmail.com> Attilio Rao writes: : 2009/9/4 M. Warner Losh : : > In message: <200909031340.n83Defkv034013@svn.freebsd.org> : > Attilio Rao writes: : > : Modified: head/sys/sys/bus.h : > : ============================================================================== : > : --- head/sys/sys/bus.h Thu Sep 3 12:41:00 2009 (r196778) : > : +++ head/sys/sys/bus.h Thu Sep 3 13:40:41 2009 (r196779) : > : @@ -52,8 +52,11 @@ struct u_businfo { : > : typedef enum device_state { : > : DS_NOTPRESENT, /**< @brief not probed or probe failed */ : > : DS_ALIVE, /**< @brief probe succeeded */ : > : + DS_ATTACHING, /**< @brief attaching is in progress */ : > : DS_ATTACHED, /**< @brief attach method called */ : > : - DS_BUSY /**< @brief device is open */ : > : + DS_BUSY, /**< @brief device is open */ : > : + DS_DETACHING /**< @brief detaching is in progress */ : > : + : > : } device_state_t; : > : > device_state_t is exported to userland via devctl. Well, that's not : > entirely true... It isn't used EXACTLY, but there's this in : > devinfo.h: : > : > /* : > * State of the device. : > */ : > /* XXX not sure if I want a copy here, or expose sys/bus.h */ : > typedef enum devinfo_state { : > DIS_NOTPRESENT, /* not probed or probe failed */ : > DIS_ALIVE, /* probe succeeded */ : > DIS_ATTACHED, /* attach method called */ : > DIS_BUSY /* device is open */ : > } devinfo_state_t; : > : > which is why devinfo is broken. : : I think the right fix here is to maintain in sync devinfo.h and bus.h : definition by just having one. I see that the devices states are : redefined in devinfo.h in order to avoid namespace pollution and this : is a good point. What I propose is to add a new header (_bus.h, to be : included in both bus.h and devinfo.h) which just containst the device : states. There's a lot of possible fixes. It is broken right now. Your commit broke it. The problem is that we have multiple names for the same things, and that's a defined API/ABI today.... So having a _bus.h won't solve this problem without introducing name space pollution (well, I suppose you could have __DS_NOTPRESENT, __DS_ALIVE, etc and then have devinfo.h and bus.h map those in, but that still wouldn't totally solve the problem). : > Also, DS_BUSY is used in many drivers to PREVENT detaching. So the : > change is bad from that point of view, since DS_DETACHING is now > : > DS_BUSY. There's really a partial ordering relationship now where : > before there was a total ordering (DS_BUSY is > DS_ATTACHED and : > DS_DETACHING is > DS_ATTACH, but DS_DETACHING isn't > DS_BUSY and : > DS_BUSY isn't > DS_DETACHING). I think that you've destroyed : > information here by unconditionally setting it: : > : > - if ((error = DEVICE_DETACH(dev)) != 0) : > + dev->state = DS_DETACHING; : > + if ((error = DEVICE_DETACH(dev)) != 0) { : > + KASSERT(dev->state == DS_DETACHING, : > + ("%s: %p device state must not been changing", __func__, : > + dev)); : > + dev->state = DS_ATTACHED; : > return (error); : > + } : > + KASSERT(dev->state == DS_DETACHING, : > + ("%s: %p device state must not been changing", __func__, dev)); : > : > And this looks racy between the check earlier and this setting. : > Properly locked, this wouldn't destroy information... : : Sorry, I really don't understand what point are you making here, and : what the scaring words of "destroying", "racy", etc. means. Can you : explain better that part? I think it is a minor concern. There's no locking now to prevent multiple threads doing stuff. I think it would be better to completely omit this stuff than to put it in 1/2 way. Also, it breaks the linear nature of device_state_t. : > At the very least cardbus/cardbus.c and pccard/pccard.c need to be : > looked at since they both have code that looks like: : > : > for (tmp = 0; tmp < numdevs; tmp++) { : > struct cardbus_devinfo *dinfo = device_get_ivars(devlist[tmp]); : > int status = device_get_state(devlist[tmp]); : > : > if (dinfo->pci.cfg.dev != devlist[tmp]) : > device_printf(cbdev, "devinfo dev mismatch\n"); : > if (status == DS_ATTACHED || status == DS_BUSY) : > device_detach(devlist[tmp]); : > cardbus_release_all_resources(cbdev, dinfo); : > cardbus_device_destroy(dinfo); : > device_delete_child(cbdev, devlist[tmp]); : > pci_freecfg((struct pci_devinfo *)dinfo); : > } : > : > which does ignore errors returned by device_detach for the DS_BUSY : > case because there's not currently a good way to tell device_detach : > that it *MUST* detach the device *NOW* without any possibility of veto : > by the driver. The above code also isn't DS_DETACHING aware, and may : > be wrong in the face of this new state. : : How DS_DETACHING can cause problems here? device_detach() simply won't : run if the state is DS_DETACHING as expected (another thread is alredy : detaching and there is no need for it to detach). : Also, please note that in this case, for the state == DS_BUSY he : device_detach() won't do anything. You can't simply skip the return : value and anything else, but the reality is still the operation won't : happen. I explained about partial ordering already. Let me try again. DS_BUSY isn't compatible with this definition. It would be better to merge DS_ATTACHING and DS_DETACHING into one state, say DS_TRANSITION. Then we'd do the attach sequence as DS_ALIVE -> DS_TRANSITION -> DS_ATTACHED (and later DS_BUSY maybe). Then detach would go from DS_ATTACHED -> DS_TRANSITION to tear it down. There's a strong ordering expected in the code, and finding all the subtle places that this extra state beyond DS_BUSY causes problems will be hard. I'm not entirely sure how DS_DETACHING can cause problems here. However, I've not looked at all the possible code paths and such to make sure that there isn't a problem. Given the strong ordering of device_state_t that's present today, I'm not so glib that it would cause no problems. I want strong assurance that it won't. If we use DS_TRANSITION, then I know it won't. It would solve the problems with only one new state, and would preserve the ordering that's implicit in the code and hard to ferret out. This is only one example. : > Of course, grepping the tree does show one or two places where DS_BUSY : > is used inappropriately: : > : > rp.c: : > : > static int : > rp_pcidetach(device_t dev) : > { : > CONTROLLER_t *ctlp; : > : > if (device_get_state(dev) == DS_BUSY) : > return (EBUSY); : > : > is one example. The above check should just be removed (ditto for its : > SHUTDOWN) routine. : > : > So I think we should fix rp.c, but we need to talk through this change : > a little more. I'm surprised I wasn't even pinged about it, since it : > hits code that I maintain and a simple grep would have found... : : Still, I don't see a problem with the codes you mentioned (if not in : the consumers, which were alredy "broken" before this change and which : situation is not worse now), unless the devinfo breakage. Well, the rp.c that I talked about is a minor breakage that can easily be fixed. It is unrelated to your changes, but my grep found the breakage... devinfo breakage, however is a bigger deal, as is the breaking of the linearness of device_state_t. Let's just use one new state. It won't make locking harder, and will also prevent a device from attaching while someone else is detaching it better. In summary: I support adding one new state (and only one new state) to device_state_t that is numerically smaller than DS_ATTACHED. I think we should take this opportunity to make the states sparser as well (since that would allow us to insert them in the future, should a proven need be found). I think that the extra checks that were added to subr_bus.c should be backed out. I think that only the new state enums and their new values should be MFC'd. I further thing that *ALL* future discussions of newbus ABI/API changes go through arch@. In short, I think that http://people.freebsd.org/~imp/newbus-20090904 should be committed and MFC'd. I've not addressed the devinfo breakage yet... Warner From owner-freebsd-arch@FreeBSD.ORG Fri Sep 4 23:18:22 2009 Return-Path: Delivered-To: arch@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id CBF0F1065676 for ; Fri, 4 Sep 2009 23:18:22 +0000 (UTC) (envelope-from asmrookie@gmail.com) Received: from mail-fx0-f210.google.com (mail-fx0-f210.google.com [209.85.220.210]) by mx1.freebsd.org (Postfix) with ESMTP id 53D7A8FC18 for ; Fri, 4 Sep 2009 23:18:22 +0000 (UTC) Received: by fxm6 with SMTP id 6so958524fxm.43 for ; Fri, 04 Sep 2009 16:18:21 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=gamma; h=domainkey-signature:mime-version:sender:received:in-reply-to :references:date:x-google-sender-auth:message-id:subject:from:to:cc :content-type; bh=OTxM9i+C/rbSoCcXVIFN+DvAY6ryOHEQSMDWofrLseA=; b=DvBJ3kZicUUPNLGHTVa7AAYtSK23ogRi/dW8SH/YOSgkeZgZPXGvz4qviFKduWwg8M oTScsuavbZclzIpLEAQHfcyUyNj2SbHGlR/HBp9mGeNVKdiMlyGTMvS6+6bHWGHmct+9 MGmQ4F/oGWjnfB8/hV6ojLvzOClapO/LxAuyE= DomainKey-Signature: a=rsa-sha1; c=nofws; d=gmail.com; s=gamma; h=mime-version:sender:in-reply-to:references:date :x-google-sender-auth:message-id:subject:from:to:cc:content-type; b=L27RHj0m58azaXyPOoMBruNUeyZgQ4p1Mp2AGMWcaLDQOg1VopMxIWmZdKwcINB0nc H2n9f6Wc5BUlQkujRbpkpatUALQrQPx9kV6VXL4xdMw/OsSa9PsqQrjW4659NLc5g+tq T06ZRJUNcAIEs4JXiKfTxUWnYpaTAmudwcNx0= MIME-Version: 1.0 Sender: asmrookie@gmail.com Received: by 10.223.1.18 with SMTP id 18mr4688332fad.90.1252104363704; Fri, 04 Sep 2009 15:46:03 -0700 (PDT) In-Reply-To: <20090904.161634.-217944108.imp@bsdimp.com> References: <200909031340.n83Defkv034013@svn.freebsd.org> <20090904.112919.1521002024.imp@bsdimp.com> <3bbf2fe10909041455u552b0dbdm1708ea0a26365149@mail.gmail.com> <20090904.161634.-217944108.imp@bsdimp.com> Date: Sat, 5 Sep 2009 00:46:03 +0200 X-Google-Sender-Auth: c6f22ce7ce9cbef6 Message-ID: <3bbf2fe10909041546y2b5633e1ue063955568df1a06@mail.gmail.com> From: Attilio Rao To: "M. Warner Losh" Content-Type: text/plain; charset=UTF-8 Cc: arch@freebsd.org Subject: Re: NEWBUS states (was Re: svn commit: r196779 - in head/sys: kern sys) X-BeenThere: freebsd-arch@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: Discussion related to FreeBSD architecture List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 04 Sep 2009 23:18:22 -0000 2009/9/5 M. Warner Losh : > [[ redirected to arch@ since too much of this discussion has been private ]] > > In message: <3bbf2fe10909041455u552b0dbdm1708ea0a26365149@mail.gmail.com> > Attilio Rao writes: > : 2009/9/4 M. Warner Losh : > : > In message: <200909031340.n83Defkv034013@svn.freebsd.org> > : > Attilio Rao writes: > : > : Modified: head/sys/sys/bus.h > : > : ============================================================================== > : > : --- head/sys/sys/bus.h Thu Sep 3 12:41:00 2009 (r196778) > : > : +++ head/sys/sys/bus.h Thu Sep 3 13:40:41 2009 (r196779) > : > : @@ -52,8 +52,11 @@ struct u_businfo { > : > : typedef enum device_state { > : > : DS_NOTPRESENT, /**< @brief not probed or probe failed */ > : > : DS_ALIVE, /**< @brief probe succeeded */ > : > : + DS_ATTACHING, /**< @brief attaching is in progress */ > : > : DS_ATTACHED, /**< @brief attach method called */ > : > : - DS_BUSY /**< @brief device is open */ > : > : + DS_BUSY, /**< @brief device is open */ > : > : + DS_DETACHING /**< @brief detaching is in progress */ > : > : + > : > : } device_state_t; > : > > : > device_state_t is exported to userland via devctl. Well, that's not > : > entirely true... It isn't used EXACTLY, but there's this in > : > devinfo.h: > : > > : > /* > : > * State of the device. > : > */ > : > /* XXX not sure if I want a copy here, or expose sys/bus.h */ > : > typedef enum devinfo_state { > : > DIS_NOTPRESENT, /* not probed or probe failed */ > : > DIS_ALIVE, /* probe succeeded */ > : > DIS_ATTACHED, /* attach method called */ > : > DIS_BUSY /* device is open */ > : > } devinfo_state_t; > : > > : > which is why devinfo is broken. > : > : I think the right fix here is to maintain in sync devinfo.h and bus.h > : definition by just having one. I see that the devices states are > : redefined in devinfo.h in order to avoid namespace pollution and this > : is a good point. What I propose is to add a new header (_bus.h, to be > : included in both bus.h and devinfo.h) which just containst the device > : states. > > There's a lot of possible fixes. It is broken right now. Your commit > broke it. > > The problem is that we have multiple names for the same things, and > that's a defined API/ABI today.... So having a _bus.h won't solve > this problem without introducing name space pollution (well, I suppose > you could have __DS_NOTPRESENT, __DS_ALIVE, etc and then have > devinfo.h and bus.h map those in, but that still wouldn't totally > solve the problem). What I would like to do is simply to typedef the enum I get from the _bus.h. I'm not sure if nothing else is still required. > : > Also, DS_BUSY is used in many drivers to PREVENT detaching. So the > : > change is bad from that point of view, since DS_DETACHING is now > > : > DS_BUSY. There's really a partial ordering relationship now where > : > before there was a total ordering (DS_BUSY is > DS_ATTACHED and > : > DS_DETACHING is > DS_ATTACH, but DS_DETACHING isn't > DS_BUSY and > : > DS_BUSY isn't > DS_DETACHING). I think that you've destroyed > : > information here by unconditionally setting it: > : > > : > - if ((error = DEVICE_DETACH(dev)) != 0) > : > + dev->state = DS_DETACHING; > : > + if ((error = DEVICE_DETACH(dev)) != 0) { > : > + KASSERT(dev->state == DS_DETACHING, > : > + ("%s: %p device state must not been changing", __func__, > : > + dev)); > : > + dev->state = DS_ATTACHED; > : > return (error); > : > + } > : > + KASSERT(dev->state == DS_DETACHING, > : > + ("%s: %p device state must not been changing", __func__, dev)); > : > > : > And this looks racy between the check earlier and this setting. > : > Properly locked, this wouldn't destroy information... > : > : Sorry, I really don't understand what point are you making here, and > : what the scaring words of "destroying", "racy", etc. means. Can you > : explain better that part? > > I think it is a minor concern. There's no locking now to prevent > multiple threads doing stuff. I think it would be better to > completely omit this stuff than to put it in 1/2 way. The point for this change is to add now parts which could introduce, in the future, ABI compatibility breakage so that we can MFC the newbus locking to 8.1. Obviously that is not a finished patch, because it still misses of the full context. > : > At the very least cardbus/cardbus.c and pccard/pccard.c need to be > : > looked at since they both have code that looks like: > : > > : > for (tmp = 0; tmp < numdevs; tmp++) { > : > struct cardbus_devinfo *dinfo = device_get_ivars(devlist[tmp]); > : > int status = device_get_state(devlist[tmp]); > : > > : > if (dinfo->pci.cfg.dev != devlist[tmp]) > : > device_printf(cbdev, "devinfo dev mismatch\n"); > : > if (status == DS_ATTACHED || status == DS_BUSY) > : > device_detach(devlist[tmp]); > : > cardbus_release_all_resources(cbdev, dinfo); > : > cardbus_device_destroy(dinfo); > : > device_delete_child(cbdev, devlist[tmp]); > : > pci_freecfg((struct pci_devinfo *)dinfo); > : > } > : > > : > which does ignore errors returned by device_detach for the DS_BUSY > : > case because there's not currently a good way to tell device_detach > : > that it *MUST* detach the device *NOW* without any possibility of veto > : > by the driver. The above code also isn't DS_DETACHING aware, and may > : > be wrong in the face of this new state. > : > : How DS_DETACHING can cause problems here? device_detach() simply won't > : run if the state is DS_DETACHING as expected (another thread is alredy > : detaching and there is no need for it to detach). > : Also, please note that in this case, for the state == DS_BUSY he > : device_detach() won't do anything. You can't simply skip the return > : value and anything else, but the reality is still the operation won't > : happen. > > I explained about partial ordering already. Let me try again. > > DS_BUSY isn't compatible with this definition. It would be better to > merge DS_ATTACHING and DS_DETACHING into one state, say DS_TRANSITION. > Then we'd do the attach sequence as DS_ALIVE -> DS_TRANSITION -> > DS_ATTACHED (and later DS_BUSY maybe). Then detach would go from > DS_ATTACHED -> DS_TRANSITION to tear it down. There's a strong > ordering expected in the code, and finding all the subtle places that > this extra state beyond DS_BUSY causes problems will be hard. We all agreed the one-state was the better option but it can't be done in this way because of the device_is_attached() used in the detach virtual functions. Using just one transition state will break device_is_attached() in those parts. The right fix, as pointed out in other e-mails, is to not use device_is_attached() in detach virtual functions. The better fix, in my idea would involve: - replace the device_is_attached() usage in detach virtual functions, with a more functional support - use one-state transition But that is just too much job to push in before then 8.0-REL and if that would mean to not commit a patch and make impossible a future MFC, I prefer to go with a lesser-perfect-but-still-working-approach. I'm sorry if these points weren't clear before. > In short, I think that http://people.freebsd.org/~imp/newbus-20090904 > should be committed and MFC'd. I've not addressed the devinfo > breakage yet... 404 Btw, I don't agree about removing the changes within subr_bus.c. They are harmless (KASSERT and further checks) and will help as a reminder. For the moment the only thing I still see to be fixed is devinfo. I will provide a patch before the end of the day. Attilio -- Peace can only be achieved by understanding - A. Einstein From owner-freebsd-arch@FreeBSD.ORG Fri Sep 4 23:25:31 2009 Return-Path: Delivered-To: arch@FreeBSD.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id F0AA8106568B; Fri, 4 Sep 2009 23:25:31 +0000 (UTC) (envelope-from imp@bsdimp.com) Received: from harmony.bsdimp.com (bsdimp.com [199.45.160.85]) by mx1.freebsd.org (Postfix) with ESMTP id 8C31B8FC18; Fri, 4 Sep 2009 23:25:31 +0000 (UTC) Received: from localhost (localhost [127.0.0.1]) by harmony.bsdimp.com (8.14.3/8.14.1) with ESMTP id n84NLodk007159; Fri, 4 Sep 2009 17:21:50 -0600 (MDT) (envelope-from imp@bsdimp.com) Date: Fri, 04 Sep 2009 17:23:10 -0600 (MDT) Message-Id: <20090904.172310.-1939841993.imp@bsdimp.com> To: attilio@FreeBSD.org From: "M. Warner Losh" In-Reply-To: <3bbf2fe10909041546y2b5633e1ue063955568df1a06@mail.gmail.com> References: <3bbf2fe10909041455u552b0dbdm1708ea0a26365149@mail.gmail.com> <20090904.161634.-217944108.imp@bsdimp.com> <3bbf2fe10909041546y2b5633e1ue063955568df1a06@mail.gmail.com> X-Mailer: Mew version 5.2 on Emacs 21.3 / Mule 5.0 (SAKAKI) Mime-Version: 1.0 Content-Type: Text/Plain; charset=us-ascii Content-Transfer-Encoding: 7bit Cc: arch@FreeBSD.org Subject: Re: NEWBUS states X-BeenThere: freebsd-arch@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: Discussion related to FreeBSD architecture List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 04 Sep 2009 23:25:32 -0000 In message: <3bbf2fe10909041546y2b5633e1ue063955568df1a06@mail.gmail.com> Attilio Rao writes: : 2009/9/5 M. Warner Losh : : > [[ redirected to arch@ since too much of this discussion has been private ]] : > : > In message: <3bbf2fe10909041455u552b0dbdm1708ea0a26365149@mail.gmail.com> : > Attilio Rao writes: : > : 2009/9/4 M. Warner Losh : : > : > In message: <200909031340.n83Defkv034013@svn.freebsd.org> : > : > Attilio Rao writes: : > : > : Modified: head/sys/sys/bus.h : > : > : ============================================================================== : > : > : --- head/sys/sys/bus.h Thu Sep 3 12:41:00 2009 (r196778) : > : > : +++ head/sys/sys/bus.h Thu Sep 3 13:40:41 2009 (r196779) : > : > : @@ -52,8 +52,11 @@ struct u_businfo { : > : > : typedef enum device_state { : > : > : DS_NOTPRESENT, /**< @brief not probed or probe failed */ : > : > : DS_ALIVE, /**< @brief probe succeeded */ : > : > : + DS_ATTACHING, /**< @brief attaching is in progress */ : > : > : DS_ATTACHED, /**< @brief attach method called */ : > : > : - DS_BUSY /**< @brief device is open */ : > : > : + DS_BUSY, /**< @brief device is open */ : > : > : + DS_DETACHING /**< @brief detaching is in progress */ : > : > : + : > : > : } device_state_t; : > : > : > : > device_state_t is exported to userland via devctl. Well, that's not : > : > entirely true... It isn't used EXACTLY, but there's this in : > : > devinfo.h: : > : > : > : > /* : > : > * State of the device. : > : > */ : > : > /* XXX not sure if I want a copy here, or expose sys/bus.h */ : > : > typedef enum devinfo_state { : > : > DIS_NOTPRESENT, /* not probed or probe failed */ : > : > DIS_ALIVE, /* probe succeeded */ : > : > DIS_ATTACHED, /* attach method called */ : > : > DIS_BUSY /* device is open */ : > : > } devinfo_state_t; : > : > : > : > which is why devinfo is broken. : > : : > : I think the right fix here is to maintain in sync devinfo.h and bus.h : > : definition by just having one. I see that the devices states are : > : redefined in devinfo.h in order to avoid namespace pollution and this : > : is a good point. What I propose is to add a new header (_bus.h, to be : > : included in both bus.h and devinfo.h) which just containst the device : > : states. : > : > There's a lot of possible fixes. It is broken right now. Your commit : > broke it. : > : > The problem is that we have multiple names for the same things, and : > that's a defined API/ABI today.... So having a _bus.h won't solve : > this problem without introducing name space pollution (well, I suppose : > you could have __DS_NOTPRESENT, __DS_ALIVE, etc and then have : > devinfo.h and bus.h map those in, but that still wouldn't totally : > solve the problem). : : What I would like to do is simply to typedef the enum I get from the : _bus.h. I'm not sure if nothing else is still required. You can't do just that. There's the "DIS_foo vs DS_foo" issue as well, which cannot be solved with typedefs. Some mapping is required.. this is a sill API, one could argue, but it is the one we have today... : > : > Also, DS_BUSY is used in many drivers to PREVENT detaching. So the : > : > change is bad from that point of view, since DS_DETACHING is now > : > : > DS_BUSY. There's really a partial ordering relationship now where : > : > before there was a total ordering (DS_BUSY is > DS_ATTACHED and : > : > DS_DETACHING is > DS_ATTACH, but DS_DETACHING isn't > DS_BUSY and : > : > DS_BUSY isn't > DS_DETACHING). I think that you've destroyed : > : > information here by unconditionally setting it: : > : > : > : > - if ((error = DEVICE_DETACH(dev)) != 0) : > : > + dev->state = DS_DETACHING; : > : > + if ((error = DEVICE_DETACH(dev)) != 0) { : > : > + KASSERT(dev->state == DS_DETACHING, : > : > + ("%s: %p device state must not been changing", __func__, : > : > + dev)); : > : > + dev->state = DS_ATTACHED; : > : > return (error); : > : > + } : > : > + KASSERT(dev->state == DS_DETACHING, : > : > + ("%s: %p device state must not been changing", __func__, dev)); : > : > : > : > And this looks racy between the check earlier and this setting. : > : > Properly locked, this wouldn't destroy information... : > : : > : Sorry, I really don't understand what point are you making here, and : > : what the scaring words of "destroying", "racy", etc. means. Can you : > : explain better that part? : > : > I think it is a minor concern. There's no locking now to prevent : > multiple threads doing stuff. I think it would be better to : > completely omit this stuff than to put it in 1/2 way. : : The point for this change is to add now parts which could introduce, : in the future, ABI compatibility breakage so that we can MFC the : newbus locking to 8.1. Obviously that is not a finished patch, because : it still misses of the full context. Yes. I understand that. I'm specifically suggesting that we only MFC the changes to the ABI today, and MFC the changes to the code when it is complete. : > : > At the very least cardbus/cardbus.c and pccard/pccard.c need to be : > : > looked at since they both have code that looks like: : > : > : > : > for (tmp = 0; tmp < numdevs; tmp++) { : > : > struct cardbus_devinfo *dinfo = device_get_ivars(devlist[tmp]); : > : > int status = device_get_state(devlist[tmp]); : > : > : > : > if (dinfo->pci.cfg.dev != devlist[tmp]) : > : > device_printf(cbdev, "devinfo dev mismatch\n"); : > : > if (status == DS_ATTACHED || status == DS_BUSY) : > : > device_detach(devlist[tmp]); : > : > cardbus_release_all_resources(cbdev, dinfo); : > : > cardbus_device_destroy(dinfo); : > : > device_delete_child(cbdev, devlist[tmp]); : > : > pci_freecfg((struct pci_devinfo *)dinfo); : > : > } : > : > : > : > which does ignore errors returned by device_detach for the DS_BUSY : > : > case because there's not currently a good way to tell device_detach : > : > that it *MUST* detach the device *NOW* without any possibility of veto : > : > by the driver. The above code also isn't DS_DETACHING aware, and may : > : > be wrong in the face of this new state. : > : : > : How DS_DETACHING can cause problems here? device_detach() simply won't : > : run if the state is DS_DETACHING as expected (another thread is alredy : > : detaching and there is no need for it to detach). : > : Also, please note that in this case, for the state == DS_BUSY he : > : device_detach() won't do anything. You can't simply skip the return : > : value and anything else, but the reality is still the operation won't : > : happen. : > : > I explained about partial ordering already. Let me try again. : > : > DS_BUSY isn't compatible with this definition. It would be better to : > merge DS_ATTACHING and DS_DETACHING into one state, say DS_TRANSITION. : > Then we'd do the attach sequence as DS_ALIVE -> DS_TRANSITION -> : > DS_ATTACHED (and later DS_BUSY maybe). Then detach would go from : > DS_ATTACHED -> DS_TRANSITION to tear it down. There's a strong : > ordering expected in the code, and finding all the subtle places that : > this extra state beyond DS_BUSY causes problems will be hard. : : We all agreed the one-state was the better option but it can't be done : in this way because of the device_is_attached() used in the detach : virtual functions. Using just one transition state will break : device_is_attached() in those parts. True. However, this device_is_attached stuff is fundamentally broken as it is today. I took a closer look at the typical usage, and it stands in as a proxy for 'did all the resources get allocated' and even that's just the bus_resouce* stuff... : The right fix, as pointed out in other e-mails, is to not use e-mails that I wasn't cc'd on since this discussion happened in private. I hate to keep harping on this point, but there's been too much of that lately... : device_is_attached() in detach virtual functions. The better fix, in : my idea would involve: : - replace the device_is_attached() usage in detach virtual functions, : with a more functional support This would be transitioning to using a common set of code for release_resources, ala the other most common driver idiom... : - use one-state transition : : But that is just too much job to push in before then 8.0-REL and if : that would mean to not commit a patch and make impossible a future : MFC, I prefer to go with a lesser-perfect-but-still-working-approach. Yes. The problem is that we're trying to guess what the right locking approach will be at the 11th hour, and I'm worried we will guess wrong. : I'm sorry if these points weren't clear before. OK. Let me ponder based on that... It might be better for this round of changes to leverage off the device 'flags' field to indicate that we're attaching/detaching. This would not break the device_is_attached() usage, and would solve the interlock problem nicely. While it isn't as aesthetically pleasing as the new states, it would allow us to easily MFC it without API/ABI breakage. This field surely would be covered by the same set of locks as the state field. I know that there's a good aesthetic argument to be made against this, but on the other hand 'compatibility' hacks can violate one's aesthetics. We can migrate to a more pleasing state-based model in 9 and reduce the risk to other code from changing its semantics at this late date. : > In short, I think that http://people.freebsd.org/~imp/newbus-20090904 : > should be committed and MFC'd. I've not addressed the devinfo : > breakage yet... : : 404 http://people.freebsd.org/~imp/newbus-20090904.diff sorry about that... : Btw, I don't agree about removing the changes within subr_bus.c. They : are harmless (KASSERT and further checks) : and will help as a reminder. Why have them at all? We're just speculating about what the protocol will be, rather than abstracting down from a known-to-be-good implementation. This sort of thing has bit us in the past before. Since at best we're speculating about what the best approach is, I'd prefer to keep the leaps of faith as small as possible. : For the moment the only thing I still see to be fixed is devinfo. I : will provide a patch before the end of the day. Well, and getting agreement on the model that will be used for the state machine... We're not there yet... There may also be some breakage from this change that's hidden, and I need to carefully audit all uses of the state field, as well as functions that expose its state to the rest of the kernel... Warner From owner-freebsd-arch@FreeBSD.ORG Sat Sep 5 08:36:28 2009 Return-Path: Delivered-To: arch@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 59E51106566C; Sat, 5 Sep 2009 08:36:28 +0000 (UTC) (envelope-from imp@bsdimp.com) Received: from harmony.bsdimp.com (bsdimp.com [199.45.160.85]) by mx1.freebsd.org (Postfix) with ESMTP id 198F88FC19; Sat, 5 Sep 2009 08:36:28 +0000 (UTC) Received: from localhost (localhost [127.0.0.1]) by harmony.bsdimp.com (8.14.3/8.14.1) with ESMTP id n858ZE7T011573; Sat, 5 Sep 2009 02:35:14 -0600 (MDT) (envelope-from imp@bsdimp.com) Date: Sat, 05 Sep 2009 02:36:34 -0600 (MDT) Message-Id: <20090905.023634.831786645.imp@bsdimp.com> To: attilio@freebsd.org From: "M. Warner Losh" In-Reply-To: <20090904.172310.-1939841993.imp@bsdimp.com> References: <20090904.161634.-217944108.imp@bsdimp.com> <3bbf2fe10909041546y2b5633e1ue063955568df1a06@mail.gmail.com> <20090904.172310.-1939841993.imp@bsdimp.com> X-Mailer: Mew version 5.2 on Emacs 21.3 / Mule 5.0 (SAKAKI) Mime-Version: 1.0 Content-Type: Text/Plain; charset=us-ascii Content-Transfer-Encoding: 7bit Cc: arch@freebsd.org Subject: Re: NEWBUS states X-BeenThere: freebsd-arch@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: Discussion related to FreeBSD architecture List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sat, 05 Sep 2009 08:36:28 -0000 In message: <20090904.172310.-1939841993.imp@bsdimp.com> "M. Warner Losh" writes: : OK. Let me ponder based on that... It might be better for this round : of changes to leverage off the device 'flags' field to indicate that : we're attaching/detaching. This would not break the : device_is_attached() usage, and would solve the interlock problem : nicely. While it isn't as aesthetically pleasing as the new states, : it would allow us to easily MFC it without API/ABI breakage. This : field surely would be covered by the same set of locks as the state : field. : : I know that there's a good aesthetic argument to be made against this, : but on the other hand 'compatibility' hacks can violate one's : aesthetics. We can migrate to a more pleasing state-based model in 9 : and reduce the risk to other code from changing its semantics at this : late date. For a version of this hack, see http://people.freebsd.org/~imp/newbus-flags.diff This preserves the semantics of the state field as they exist today, while also providing protection against reentrent code. It also restores a check for GIANT_HELD to the attach routine, which seems to have disappeared along the way. While not needed when the locking does arrive, it is needed today, I believe. It also has the advantage that the following could easily be added to catch wayward drivers: int device_is_attached(device_t dev) { if (dev->flags & DF_TRANSITION) printf( "%s called %s while in attach/detach. This is no deprecated.", device_get_nameunit(dev), __func__); return (dev->state >= DS_ATTACHED); } Or make it a KASSERT later in the 9.x release cycle. Hope this make it clear what my proposed alternative would be... Warner P.S. Yes, I'd rate this code as speculative as the code it replaces (see my prior posts for this criticism). This is an example of how it could be done with less impact to the existing code base, a consideration only because we're in the high 50's of minutes in the 11th hour for the 8.0 release... From owner-freebsd-arch@FreeBSD.ORG Sat Sep 5 15:12:19 2009 Return-Path: Delivered-To: arch@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 390E7106566B for ; Sat, 5 Sep 2009 15:12:19 +0000 (UTC) (envelope-from asmrookie@gmail.com) Received: from mail-fx0-f210.google.com (mail-fx0-f210.google.com [209.85.220.210]) by mx1.freebsd.org (Postfix) with ESMTP id 8EC558FC13 for ; Sat, 5 Sep 2009 15:12:18 +0000 (UTC) Received: by fxm6 with SMTP id 6so1175186fxm.43 for ; Sat, 05 Sep 2009 08:12:17 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=gamma; h=domainkey-signature:mime-version:sender:received:in-reply-to :references:date:x-google-sender-auth:message-id:subject:from:to:cc :content-type; bh=2aCL9G56XoAHn6H/PMOCb1Gu/07VaNI3tDhg1REj3i0=; b=bGPgAG+RzTTZibhYXbUo8pFmINL6qqCXiJ7fsCnQZPMcSx17BYHA9wrLcW7EpnxUVj cl7sEMgkfy5ZBcxJRFBSO9Yx7xUXNjfKZFyWpIV8MISAUEYZUMo4kC3imjTTUr0Ru1kJ sggQ9uMbP2jD86GMx3RhKO9cGcIA/4kbDxGN0= DomainKey-Signature: a=rsa-sha1; c=nofws; d=gmail.com; s=gamma; h=mime-version:sender:in-reply-to:references:date :x-google-sender-auth:message-id:subject:from:to:cc:content-type; b=oTNR1JgcN9WTfkqQ9sj6FEvV6nLX4wmTE+g1nykKUI5jZTjWgrSS6k925RuFNx02+I Kl96ADxxr6obynfO/t1WVjHoDMkYMI6qQJvWZ4kEmFT9Cy17fkDvnUBubvkDy4xg2fAy wriR74vN2ClKIRGLSkEenp3KqpDEyCy4zd5rQ= MIME-Version: 1.0 Sender: asmrookie@gmail.com Received: by 10.223.54.15 with SMTP id o15mr4910571fag.96.1252163537532; Sat, 05 Sep 2009 08:12:17 -0700 (PDT) In-Reply-To: <20090904.172310.-1939841993.imp@bsdimp.com> References: <3bbf2fe10909041455u552b0dbdm1708ea0a26365149@mail.gmail.com> <20090904.161634.-217944108.imp@bsdimp.com> <3bbf2fe10909041546y2b5633e1ue063955568df1a06@mail.gmail.com> <20090904.172310.-1939841993.imp@bsdimp.com> Date: Sat, 5 Sep 2009 17:12:17 +0200 X-Google-Sender-Auth: 2c26e0f613746148 Message-ID: <3bbf2fe10909050812l4340f679h6a4d7dae1daa3bf8@mail.gmail.com> From: Attilio Rao To: "M. Warner Losh" Content-Type: text/plain; charset=UTF-8 Cc: arch@freebsd.org Subject: Re: NEWBUS states X-BeenThere: freebsd-arch@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: Discussion related to FreeBSD architecture List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sat, 05 Sep 2009 15:12:19 -0000 2009/9/5 M. Warner Losh : > In message: <3bbf2fe10909041546y2b5633e1ue063955568df1a06@mail.gmail.com> > Attilio Rao writes: > : 2009/9/5 M. Warner Losh : > : > [[ redirected to arch@ since too much of this discussion has been private ]] > : > > : > In message: <3bbf2fe10909041455u552b0dbdm1708ea0a26365149@mail.gmail.com> > : > Attilio Rao writes: > : > : 2009/9/4 M. Warner Losh : > : > : > In message: <200909031340.n83Defkv034013@svn.freebsd.org> > : > : > Attilio Rao writes: > : > : > : Modified: head/sys/sys/bus.h > : > : > : ============================================================================== > : > : > : --- head/sys/sys/bus.h Thu Sep 3 12:41:00 2009 (r196778) > : > : > : +++ head/sys/sys/bus.h Thu Sep 3 13:40:41 2009 (r196779) > : > : > : @@ -52,8 +52,11 @@ struct u_businfo { > : > : > : typedef enum device_state { > : > : > : DS_NOTPRESENT, /**< @brief not probed or probe failed */ > : > : > : DS_ALIVE, /**< @brief probe succeeded */ > : > : > : + DS_ATTACHING, /**< @brief attaching is in progress */ > : > : > : DS_ATTACHED, /**< @brief attach method called */ > : > : > : - DS_BUSY /**< @brief device is open */ > : > : > : + DS_BUSY, /**< @brief device is open */ > : > : > : + DS_DETACHING /**< @brief detaching is in progress */ > : > : > : + > : > : > : } device_state_t; > : > : > > : > : > device_state_t is exported to userland via devctl. Well, that's not > : > : > entirely true... It isn't used EXACTLY, but there's this in > : > : > devinfo.h: > : > : > > : > : > /* > : > : > * State of the device. > : > : > */ > : > : > /* XXX not sure if I want a copy here, or expose sys/bus.h */ > : > : > typedef enum devinfo_state { > : > : > DIS_NOTPRESENT, /* not probed or probe failed */ > : > : > DIS_ALIVE, /* probe succeeded */ > : > : > DIS_ATTACHED, /* attach method called */ > : > : > DIS_BUSY /* device is open */ > : > : > } devinfo_state_t; > : > : > > : > : > which is why devinfo is broken. > : > : > : > : I think the right fix here is to maintain in sync devinfo.h and bus.h > : > : definition by just having one. I see that the devices states are > : > : redefined in devinfo.h in order to avoid namespace pollution and this > : > : is a good point. What I propose is to add a new header (_bus.h, to be > : > : included in both bus.h and devinfo.h) which just containst the device > : > : states. > : > > : > There's a lot of possible fixes. It is broken right now. Your commit > : > broke it. > : > > : > The problem is that we have multiple names for the same things, and > : > that's a defined API/ABI today.... So having a _bus.h won't solve > : > this problem without introducing name space pollution (well, I suppose > : > you could have __DS_NOTPRESENT, __DS_ALIVE, etc and then have > : > devinfo.h and bus.h map those in, but that still wouldn't totally > : > solve the problem). > : > : What I would like to do is simply to typedef the enum I get from the > : _bus.h. I'm not sure if nothing else is still required. > > You can't do just that. There's the "DIS_foo vs DS_foo" issue as > well, which cannot be solved with typedefs. Some mapping is > required.. this is a sill API, one could argue, but it is the one we > have today... Bah, sorry, I kept reading it as DS_ rather than DIS_ . Anyways, what do you think about, for 9.0, just having one interface and remove the DIS_* bloat? > : > : The point for this change is to add now parts which could introduce, > : in the future, ABI compatibility breakage so that we can MFC the > : newbus locking to 8.1. Obviously that is not a finished patch, because > : it still misses of the full context. > > Yes. I understand that. I'm specifically suggesting that we only MFC > the changes to the ABI today, and MFC the changes to the code when it > is complete. Sure, and that's what I did. The small parts in subr_bus.c aren't that much important but they can be used as a reminder. If you feel strongly against it I can also review and eventually drop them. > : We all agreed the one-state was the better option but it can't be done > : in this way because of the device_is_attached() used in the detach > : virtual functions. Using just one transition state will break > : device_is_attached() in those parts. > > True. However, this device_is_attached stuff is fundamentally broken > as it is today. I took a closer look at the typical usage, and it > stands in as a proxy for 'did all the resources get allocated' and > even that's just the bus_resouce* stuff... Of course. Such paradigms are only sane (in particular from the standpoint of the locking) only when you can make some assumptions about a known context, and you should also know the state of your device there. > : The right fix, as pointed out in other e-mails, is to not use > > e-mails that I wasn't cc'd on since this discussion happened in > private. I hate to keep harping on this point, but there's been too > much of that lately... Sorry for that, but in this case I was referring to e-mail sent to public mailing list. My current english and expressive skillset is not that much developed so far though, so it is likely I did express the concept with cryptic/incorrect words as often happens, so I can't blame anyone else than me for that. > : device_is_attached() in detach virtual functions. The better fix, in > : my idea would involve: > : - replace the device_is_attached() usage in detach virtual functions, > : with a more functional support > > This would be transitioning to using a common set of code for > release_resources, ala the other most common driver idiom... I agree. There are various ways to fix this that we can discuss and put in place during 9.0 timelife. > : - use one-state transition > : > : But that is just too much job to push in before then 8.0-REL and if > : that would mean to not commit a patch and make impossible a future > : MFC, I prefer to go with a lesser-perfect-but-still-working-approach. > > Yes. The problem is that we're trying to guess what the right locking > approach will be at the 11th hour, and I'm worried we will guess wrong. > > : I'm sorry if these points weren't clear before. > > OK. Let me ponder based on that... It might be better for this round > of changes to leverage off the device 'flags' field to indicate that > we're attaching/detaching. This would not break the > device_is_attached() usage, and would solve the interlock problem > nicely. While it isn't as aesthetically pleasing as the new states, > it would allow us to easily MFC it without API/ABI breakage. This > field surely would be covered by the same set of locks as the state > field. > > I know that there's a good aesthetic argument to be made against this, > but on the other hand 'compatibility' hacks can violate one's > aesthetics. We can migrate to a more pleasing state-based model in 9 > and reduce the risk to other code from changing its semantics at this > late date. That was exactly the original point of my commit. > : > In short, I think that http://people.freebsd.org/~imp/newbus-20090904 > : > should be committed and MFC'd. I've not addressed the devinfo > : > breakage yet... > : > : 404 > > http://people.freebsd.org/~imp/newbus-20090904.diff > > sorry about that... So I see in this patch you are also implementing the idea to offer rooms in the enum intra-existing-states that kib proposed. That is a good idea to do now. However, the one-state transition can't be implemented in this patch as you accepted few lines above. > : Btw, I don't agree about removing the changes within subr_bus.c. They > : are harmless (KASSERT and further checks) > : and will help as a reminder. > > Why have them at all? We're just speculating about what the protocol > will be, rather than abstracting down from a known-to-be-good > implementation. This sort of thing has bit us in the past before. > Since at best we're speculating about what the best approach is, I'd > prefer to keep the leaps of faith as small as possible. Ok, if you are strongly against it, we can remove them, I just think they will be harmless and a good reminder. Thanks, Attilio -- Peace can only be achieved by understanding - A. Einstein From owner-freebsd-arch@FreeBSD.ORG Sat Sep 5 15:17:57 2009 Return-Path: Delivered-To: arch@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 7FD58106566C for ; Sat, 5 Sep 2009 15:17:57 +0000 (UTC) (envelope-from asmrookie@gmail.com) Received: from mail-fx0-f210.google.com (mail-fx0-f210.google.com [209.85.220.210]) by mx1.freebsd.org (Postfix) with ESMTP id 131398FC1A for ; Sat, 5 Sep 2009 15:17:56 +0000 (UTC) Received: by fxm6 with SMTP id 6so1176948fxm.43 for ; Sat, 05 Sep 2009 08:17:56 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=gamma; h=domainkey-signature:mime-version:sender:received:in-reply-to :references:date:x-google-sender-auth:message-id:subject:from:to:cc :content-type; bh=r2Qkj9I3EWr+/qrXCcmdSKHsRmUQDCNoy/R2aB0Kh5E=; b=j/bpO08X1ZESZo7uq2xhWUmaD1VOgBCJ61ubfno1HTKdGiwBy68e4mT1mkgek5Ws1W yxVhTS4zPNMvD28j90YwPMSFbxkVnH8POOtnUvle+sbmff1Uoj/JcTnmNc+CjP/F3pIo d+qSa0qE+R/F1+jSM4eRz9ZFzBsWs5d9JF2lM= DomainKey-Signature: a=rsa-sha1; c=nofws; d=gmail.com; s=gamma; h=mime-version:sender:in-reply-to:references:date :x-google-sender-auth:message-id:subject:from:to:cc:content-type; b=kiyHWYeqOGaDzKk6ti3yfEVCmjSlA5gQzRu2FmQdgQkouLyPViky4STZ8iSSl5iPun EKOFb1B9jv3PfUA67oRkUFbWQRgIG2PT4DSGjZns7uSeMko+acirZ2j8H4zH1/6ydscv GmgjuNU/o0YkSgBUTZf013WjMrF9STSq5Y2ac= MIME-Version: 1.0 Sender: asmrookie@gmail.com Received: by 10.223.58.139 with SMTP id g11mr5008297fah.43.1252163876246; Sat, 05 Sep 2009 08:17:56 -0700 (PDT) In-Reply-To: <20090905.023634.831786645.imp@bsdimp.com> References: <20090904.161634.-217944108.imp@bsdimp.com> <3bbf2fe10909041546y2b5633e1ue063955568df1a06@mail.gmail.com> <20090904.172310.-1939841993.imp@bsdimp.com> <20090905.023634.831786645.imp@bsdimp.com> Date: Sat, 5 Sep 2009 17:17:56 +0200 X-Google-Sender-Auth: 597020533980486c Message-ID: <3bbf2fe10909050817w4e8da3adxd8e431749b432070@mail.gmail.com> From: Attilio Rao To: "M. Warner Losh" Content-Type: text/plain; charset=UTF-8 Cc: arch@freebsd.org Subject: Re: NEWBUS states X-BeenThere: freebsd-arch@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: Discussion related to FreeBSD architecture List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sat, 05 Sep 2009 15:17:57 -0000 2009/9/5 M. Warner Losh : > In message: <20090904.172310.-1939841993.imp@bsdimp.com> > "M. Warner Losh" writes: > : OK. Let me ponder based on that... It might be better for this round > : of changes to leverage off the device 'flags' field to indicate that > : we're attaching/detaching. This would not break the > : device_is_attached() usage, and would solve the interlock problem > : nicely. While it isn't as aesthetically pleasing as the new states, > : it would allow us to easily MFC it without API/ABI breakage. This > : field surely would be covered by the same set of locks as the state > : field. > : > : I know that there's a good aesthetic argument to be made against this, > : but on the other hand 'compatibility' hacks can violate one's > : aesthetics. We can migrate to a more pleasing state-based model in 9 > : and reduce the risk to other code from changing its semantics at this > : late date. > > For a version of this hack, see > http://people.freebsd.org/~imp/newbus-flags.diff So you propose to offer the transition on the device flags instead than the device states? That is an interesting approach mostly because it won't require an ABI breakage, but let me think about locking implications with it as I want to review some code and came up with a patch/thoughts in some hours. Attilio -- Peace can only be achieved by understanding - A. Einstein From owner-freebsd-arch@FreeBSD.ORG Sat Sep 5 15:30:28 2009 Return-Path: Delivered-To: arch@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 45F7B1065676; Sat, 5 Sep 2009 15:30:28 +0000 (UTC) (envelope-from imp@bsdimp.com) Received: from harmony.bsdimp.com (bsdimp.com [199.45.160.85]) by mx1.freebsd.org (Postfix) with ESMTP id 052278FC22; Sat, 5 Sep 2009 15:30:27 +0000 (UTC) Received: from localhost (localhost [127.0.0.1]) by harmony.bsdimp.com (8.14.3/8.14.1) with ESMTP id n85FTGAR016489; Sat, 5 Sep 2009 09:29:16 -0600 (MDT) (envelope-from imp@bsdimp.com) Date: Sat, 05 Sep 2009 09:30:37 -0600 (MDT) Message-Id: <20090905.093037.1927920092.imp@bsdimp.com> To: attilio@freebsd.org From: "M. Warner Losh" In-Reply-To: <3bbf2fe10909050817w4e8da3adxd8e431749b432070@mail.gmail.com> References: <20090904.172310.-1939841993.imp@bsdimp.com> <20090905.023634.831786645.imp@bsdimp.com> <3bbf2fe10909050817w4e8da3adxd8e431749b432070@mail.gmail.com> X-Mailer: Mew version 5.2 on Emacs 21.3 / Mule 5.0 (SAKAKI) Mime-Version: 1.0 Content-Type: Text/Plain; charset=us-ascii Content-Transfer-Encoding: 7bit Cc: arch@freebsd.org Subject: Re: NEWBUS states X-BeenThere: freebsd-arch@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: Discussion related to FreeBSD architecture List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sat, 05 Sep 2009 15:30:28 -0000 In message: <3bbf2fe10909050817w4e8da3adxd8e431749b432070@mail.gmail.com> Attilio Rao writes: : 2009/9/5 M. Warner Losh : : > In message: <20090904.172310.-1939841993.imp@bsdimp.com> : > "M. Warner Losh" writes: : > : OK. Let me ponder based on that... It might be better for this round : > : of changes to leverage off the device 'flags' field to indicate that : > : we're attaching/detaching. This would not break the : > : device_is_attached() usage, and would solve the interlock problem : > : nicely. While it isn't as aesthetically pleasing as the new states, : > : it would allow us to easily MFC it without API/ABI breakage. This : > : field surely would be covered by the same set of locks as the state : > : field. : > : : > : I know that there's a good aesthetic argument to be made against this, : > : but on the other hand 'compatibility' hacks can violate one's : > : aesthetics. We can migrate to a more pleasing state-based model in 9 : > : and reduce the risk to other code from changing its semantics at this : > : late date. : > : > For a version of this hack, see : > http://people.freebsd.org/~imp/newbus-flags.diff : : So you propose to offer the transition on the device flags instead : than the device states? : That is an interesting approach mostly because it won't require an ABI : breakage, but let me think about locking implications with it as I : want to review some code and came up with a patch/thoughts in some : hours. Please do. I wanted this to provoke thought and experimentation. While not the most beautiful approach, it is one that we can use to get around the API/ABI issues. Please let me know how it works out... The assumption in the patch is that locking requirements for state and flags are identical... Warner From owner-freebsd-arch@FreeBSD.ORG Sat Sep 5 17:15:28 2009 Return-Path: Delivered-To: arch@FreeBSD.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 37574106566C; Sat, 5 Sep 2009 17:15:28 +0000 (UTC) (envelope-from imp@bsdimp.com) Received: from harmony.bsdimp.com (bsdimp.com [199.45.160.85]) by mx1.freebsd.org (Postfix) with ESMTP id ED5028FC08; Sat, 5 Sep 2009 17:15:27 +0000 (UTC) Received: from localhost (localhost [127.0.0.1]) by harmony.bsdimp.com (8.14.3/8.14.1) with ESMTP id n85HDPOc017548; Sat, 5 Sep 2009 11:13:25 -0600 (MDT) (envelope-from imp@bsdimp.com) Date: Sat, 05 Sep 2009 11:14:46 -0600 (MDT) Message-Id: <20090905.111446.500055027.imp@bsdimp.com> To: attilio@FreeBSD.org From: "M. Warner Losh" In-Reply-To: <3bbf2fe10909050812l4340f679h6a4d7dae1daa3bf8@mail.gmail.com> References: <3bbf2fe10909041546y2b5633e1ue063955568df1a06@mail.gmail.com> <20090904.172310.-1939841993.imp@bsdimp.com> <3bbf2fe10909050812l4340f679h6a4d7dae1daa3bf8@mail.gmail.com> X-Mailer: Mew version 5.2 on Emacs 21.3 / Mule 5.0 (SAKAKI) Mime-Version: 1.0 Content-Type: Text/Plain; charset=us-ascii Content-Transfer-Encoding: 7bit Cc: arch@FreeBSD.org Subject: Re: NEWBUS states X-BeenThere: freebsd-arch@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: Discussion related to FreeBSD architecture List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sat, 05 Sep 2009 17:15:28 -0000 Attilio, [[ trimmed ]] Sounds like we're getting closer to closure... In message: <3bbf2fe10909050812l4340f679h6a4d7dae1daa3bf8@mail.gmail.com> Attilio Rao writes: : Bah, sorry, I kept reading it as DS_ rather than DIS_ . : Anyways, what do you think about, for 9.0, just having one interface : and remove the DIS_* bloat? [ disconnect between libdevinfo and kernel types ] I think we should have both for either 8.x or 9.x (depending on what the RE@ will permit), and then drop the DIS_ the next release after that. : Ok, if you are strongly against it, we can remove them, I just think : they will be harmless and a good reminder. [ Have the code there to document/enforce protocol wrt state ] I think I'd prefer not to have it, but could easily allow it if we know that it causes no harm and can be reasonably sure that it is close to what the final protocol will be. Warner