From owner-svn-src-user@FreeBSD.ORG Sun Nov 22 09:27:14 2009 Return-Path: Delivered-To: svn-src-user@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id E6C8A106566C; Sun, 22 Nov 2009 09:27:13 +0000 (UTC) (envelope-from ed@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id D32728FC16; Sun, 22 Nov 2009 09:27:13 +0000 (UTC) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.3/8.14.3) with ESMTP id nAM9RDIe012380; Sun, 22 Nov 2009 09:27:13 GMT (envelope-from ed@svn.freebsd.org) Received: (from ed@localhost) by svn.freebsd.org (8.14.3/8.14.3/Submit) id nAM9RDER012378; Sun, 22 Nov 2009 09:27:13 GMT (envelope-from ed@svn.freebsd.org) Message-Id: <200911220927.nAM9RDER012378@svn.freebsd.org> From: Ed Schouten Date: Sun, 22 Nov 2009 09:27:13 +0000 (UTC) To: src-committers@freebsd.org, svn-src-user@freebsd.org X-SVN-Group: user MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r199643 - in user/ed/newcons/sys/dev/vt: font tools/fontcvt tools/mkkfont X-BeenThere: svn-src-user@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "SVN commit messages for the experimental " user" src tree" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sun, 22 Nov 2009 09:27:14 -0000 Author: ed Date: Sun Nov 22 09:27:13 2009 New Revision: 199643 URL: http://svn.freebsd.org/changeset/base/199643 Log: Import Terminus 4.30. Modified: user/ed/newcons/sys/dev/vt/font/font_default.c user/ed/newcons/sys/dev/vt/tools/fontcvt/terminus.sh user/ed/newcons/sys/dev/vt/tools/mkkfont/terminus.sh Modified: user/ed/newcons/sys/dev/vt/font/font_default.c ============================================================================== --- user/ed/newcons/sys/dev/vt/font/font_default.c Sun Nov 22 05:17:22 2009 (r199642) +++ user/ed/newcons/sys/dev/vt/font/font_default.c Sun Nov 22 09:27:13 2009 (r199643) @@ -31,7 +31,7 @@ __FBSDID("$FreeBSD$"); #include -static uint8_t font_bytes[1383 * 16] = { +static uint8_t font_bytes[1410 * 16] = { 0x00, 0x00, 0x7e, 0x42, 0x42, 0x42, 0x42, 0x42, 0x42, 0x42, 0x42, 0x7e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x10, @@ -220,7 +220,7 @@ static uint8_t font_bytes[1383 * 16] = { 0x00, 0x00, 0x00, 0x00, 0x20, 0x10, 0x00, 0x38, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x38, 0x00, 0x00, 0x00, 0x00, 0x08, 0x10, 0x00, 0x38, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x38, 0x00, 0x00, 0x00, 0x00, - 0x30, 0x48, 0x00, 0x38, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x38, + 0x18, 0x24, 0x00, 0x38, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x38, 0x00, 0x00, 0x00, 0x00, 0x44, 0x44, 0x00, 0x38, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x38, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x78, 0x44, 0x42, 0x42, 0xf2, 0x42, 0x42, 0x42, 0x44, 0x78, 0x00, 0x00, 0x00, 0x00, @@ -341,7 +341,7 @@ static uint8_t font_bytes[1383 * 16] = { 0x10, 0x10, 0x10, 0x38, 0x00, 0x00, 0x00, 0x00, 0x7c, 0x00, 0x38, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x38, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x78, 0x00, 0x30, 0x10, 0x10, 0x10, 0x10, 0x10, 0x38, - 0x00, 0x00, 0x00, 0x00, 0x48, 0x30, 0x00, 0x38, 0x10, 0x10, 0x10, 0x10, + 0x00, 0x00, 0x00, 0x00, 0x24, 0x18, 0x00, 0x38, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x38, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x48, 0x30, 0x00, 0x30, 0x10, 0x10, 0x10, 0x10, 0x10, 0x38, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x38, @@ -437,8 +437,8 @@ static uint8_t font_bytes[1383 * 16] = { 0x42, 0x42, 0x42, 0x3e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x42, 0x42, 0x42, 0x42, 0x42, 0x42, 0x42, 0x42, 0x42, 0x3c, 0x08, 0x10, 0x0c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x42, 0x42, 0x42, 0x42, 0x42, 0x42, 0x3e, - 0x02, 0x04, 0x03, 0x00, 0x30, 0x48, 0x00, 0x82, 0x82, 0x82, 0x82, 0x82, - 0x92, 0xaa, 0xc6, 0x82, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x48, + 0x02, 0x04, 0x03, 0x00, 0x18, 0x24, 0x00, 0x82, 0x82, 0x82, 0x82, 0x82, + 0x92, 0xaa, 0xc6, 0x82, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x24, 0x00, 0x82, 0x82, 0x92, 0x92, 0x92, 0x92, 0x7c, 0x00, 0x00, 0x00, 0x00, 0x44, 0x44, 0x00, 0x82, 0x82, 0x44, 0x44, 0x28, 0x10, 0x10, 0x10, 0x10, 0x00, 0x00, 0x00, 0x00, 0x08, 0x10, 0x00, 0x7e, 0x02, 0x04, 0x08, 0x10, @@ -449,335 +449,339 @@ static uint8_t font_bytes[1383 * 16] = { 0x10, 0x20, 0x40, 0x7e, 0x00, 0x00, 0x00, 0x00, 0x24, 0x18, 0x00, 0x7e, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x40, 0x7e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x24, 0x18, 0x00, 0x7e, 0x04, 0x08, 0x10, 0x20, 0x40, 0x7e, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x42, 0x42, 0x02, 0x02, 0x02, - 0x02, 0x42, 0x42, 0x3c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7e, 0x02, - 0x02, 0x02, 0x1e, 0x02, 0x02, 0x02, 0x02, 0x7e, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x3c, 0x42, 0x02, 0x02, 0x7e, 0x42, 0x42, 0x42, 0x42, 0x3c, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x42, 0x42, 0x40, 0x38, 0x40, - 0x40, 0x42, 0x42, 0x3c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0c, 0x12, - 0x10, 0x10, 0x7c, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x90, 0x60, 0x00, - 0x00, 0x00, 0x42, 0x42, 0x42, 0x62, 0x52, 0x4a, 0x46, 0x42, 0x42, 0x42, - 0x40, 0x40, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7c, 0x42, 0x42, - 0x42, 0x42, 0x42, 0x42, 0x02, 0x02, 0x02, 0x00, 0x00, 0x00, 0x7e, 0x02, - 0x04, 0x08, 0x1c, 0x02, 0x02, 0x42, 0x42, 0x3c, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x3c, 0x42, 0x40, 0x40, 0x3c, 0x02, 0x02, 0x42, 0x42, 0x3c, - 0x00, 0x10, 0x10, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3e, 0x40, 0x40, - 0x3c, 0x02, 0x02, 0x7c, 0x00, 0x10, 0x10, 0x20, 0x00, 0x00, 0xfe, 0x10, - 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x00, 0x10, 0x10, 0x20, - 0x00, 0x00, 0x10, 0x10, 0x10, 0x7c, 0x10, 0x10, 0x10, 0x10, 0x10, 0x0e, - 0x00, 0x04, 0x04, 0x08, 0x7c, 0x00, 0x82, 0x82, 0x44, 0x44, 0x28, 0x10, - 0x10, 0x10, 0x10, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, - 0x00, 0x42, 0x42, 0x42, 0x42, 0x42, 0x42, 0x3e, 0x02, 0x02, 0x3c, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x0c, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, - 0x44, 0x44, 0x38, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x42, 0x02, - 0x02, 0x02, 0x42, 0x3c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x3c, 0x42, 0x42, 0x7e, 0x02, 0x02, 0x3c, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x02, 0x02, 0x7e, 0x42, 0x42, 0x3c, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x42, 0x40, - 0x38, 0x40, 0x42, 0x3c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x7c, 0x42, 0x42, 0x42, 0x42, 0x42, 0x42, 0x40, 0x40, 0x80, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x7e, 0x02, 0x04, 0x08, 0x1c, 0x02, 0x02, - 0x42, 0x42, 0x3c, 0x00, 0x08, 0x10, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x08, 0x10, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x10, 0x10, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x18, 0x24, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x24, 0x18, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x10, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0e, 0x10, 0x10, 0x10, 0x10, 0x10, + 0x10, 0x10, 0x10, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x42, + 0x42, 0x02, 0x02, 0x02, 0x02, 0x42, 0x42, 0x3c, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x7e, 0x02, 0x02, 0x02, 0x1e, 0x02, 0x02, 0x02, 0x02, 0x7e, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x42, 0x02, 0x02, 0x7e, 0x42, + 0x42, 0x42, 0x42, 0x3c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x42, + 0x42, 0x40, 0x38, 0x40, 0x40, 0x42, 0x42, 0x3c, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x0c, 0x12, 0x10, 0x10, 0x7c, 0x10, 0x10, 0x10, 0x10, 0x10, + 0x10, 0x90, 0x60, 0x00, 0x00, 0x00, 0x42, 0x42, 0x42, 0x62, 0x52, 0x4a, + 0x46, 0x42, 0x42, 0x42, 0x40, 0x40, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x7c, 0x42, 0x42, 0x42, 0x42, 0x42, 0x42, 0x02, 0x02, 0x02, 0x00, + 0x00, 0x00, 0x7e, 0x02, 0x04, 0x08, 0x1c, 0x02, 0x02, 0x42, 0x42, 0x3c, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x42, 0x40, 0x40, 0x3c, 0x02, + 0x02, 0x42, 0x42, 0x3c, 0x00, 0x10, 0x10, 0x20, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x3e, 0x40, 0x40, 0x3c, 0x02, 0x02, 0x7c, 0x00, 0x10, 0x10, 0x20, + 0x00, 0x00, 0xfe, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, + 0x00, 0x10, 0x10, 0x20, 0x00, 0x00, 0x10, 0x10, 0x10, 0x7c, 0x10, 0x10, + 0x10, 0x10, 0x10, 0x0e, 0x00, 0x04, 0x04, 0x08, 0x7c, 0x00, 0x82, 0x82, + 0x44, 0x44, 0x28, 0x10, 0x10, 0x10, 0x10, 0x10, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x3c, 0x00, 0x42, 0x42, 0x42, 0x42, 0x42, 0x42, 0x3e, + 0x02, 0x02, 0x3c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0c, 0x04, 0x04, + 0x04, 0x04, 0x04, 0x04, 0x44, 0x44, 0x38, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x3c, 0x42, 0x02, 0x02, 0x02, 0x42, 0x3c, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x42, 0x42, 0x7e, 0x02, 0x02, 0x3c, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x02, 0x02, + 0x7e, 0x42, 0x42, 0x3c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x3c, 0x42, 0x40, 0x38, 0x40, 0x42, 0x3c, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x7c, 0x42, 0x42, 0x42, 0x42, 0x42, 0x42, + 0x40, 0x40, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7e, 0x02, 0x04, + 0x08, 0x1c, 0x02, 0x02, 0x42, 0x42, 0x3c, 0x00, 0x08, 0x10, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x02, 0x04, 0x03, 0x00, 0x32, 0x4c, 0x00, 0x00, + 0x08, 0x08, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x10, 0x10, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x24, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x12, 0x24, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x24, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x10, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x10, 0x00, 0x40, 0x80, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x04, 0x03, 0x00, + 0x32, 0x4c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x12, 0x24, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x08, 0x10, 0x00, 0x24, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x40, 0x80, 0x3c, 0x42, 0x42, 0x42, 0x42, 0x7e, - 0x42, 0x42, 0x42, 0x42, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x10, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x40, 0x80, 0x7e, 0x40, 0x40, 0x40, 0x78, 0x40, 0x40, 0x40, 0x40, 0x7e, - 0x00, 0x00, 0x00, 0x00, 0x40, 0x80, 0x42, 0x42, 0x42, 0x42, 0x7e, 0x42, - 0x42, 0x42, 0x42, 0x42, 0x00, 0x00, 0x00, 0x00, 0x40, 0x80, 0x38, 0x10, - 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x38, 0x00, 0x00, 0x00, 0x00, - 0x40, 0x80, 0x3c, 0x42, 0x42, 0x42, 0x42, 0x42, 0x42, 0x42, 0x42, 0x3c, - 0x00, 0x00, 0x00, 0x00, 0x40, 0x80, 0x00, 0x82, 0x82, 0x44, 0x44, 0x28, - 0x10, 0x10, 0x10, 0x10, 0x00, 0x00, 0x00, 0x00, 0x40, 0x80, 0x3c, 0x42, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x10, 0x00, + 0x40, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x08, 0x10, 0x00, 0x24, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x80, 0x3c, 0x42, + 0x42, 0x42, 0x42, 0x7e, 0x42, 0x42, 0x42, 0x42, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x40, 0x80, 0x7e, 0x40, 0x40, 0x40, 0x78, 0x40, + 0x40, 0x40, 0x40, 0x7e, 0x00, 0x00, 0x00, 0x00, 0x40, 0x80, 0x42, 0x42, + 0x42, 0x42, 0x7e, 0x42, 0x42, 0x42, 0x42, 0x42, 0x00, 0x00, 0x00, 0x00, + 0x40, 0x80, 0x38, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x38, + 0x00, 0x00, 0x00, 0x00, 0x40, 0x80, 0x3c, 0x42, 0x42, 0x42, 0x42, 0x42, + 0x42, 0x42, 0x42, 0x3c, 0x00, 0x00, 0x00, 0x00, 0x40, 0x80, 0x00, 0x82, + 0x82, 0x44, 0x44, 0x28, 0x10, 0x10, 0x10, 0x10, 0x00, 0x00, 0x00, 0x00, + 0x40, 0x80, 0x3c, 0x42, 0x42, 0x42, 0x42, 0x42, 0x42, 0x24, 0x24, 0x66, + 0x00, 0x00, 0x00, 0x00, 0x08, 0x10, 0x48, 0x48, 0x00, 0x30, 0x10, 0x10, + 0x10, 0x10, 0x10, 0x0c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7e, 0x40, + 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x10, 0x10, 0x28, 0x28, 0x44, 0x44, 0x44, 0x82, 0x82, 0xfe, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x42, 0x42, 0x42, 0x5a, 0x42, + 0x42, 0x42, 0x42, 0x3c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x10, + 0x28, 0x28, 0x44, 0x44, 0x44, 0x82, 0x82, 0x82, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x7e, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x00, 0x00, 0x00, 0x7e, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7e, 0x42, 0x42, 0x42, 0x42, 0x42, + 0x42, 0x42, 0x42, 0x42, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7e, 0x40, + 0x20, 0x10, 0x08, 0x08, 0x10, 0x20, 0x40, 0x7e, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x10, 0x7c, 0x92, 0x92, 0x92, 0x92, 0x92, 0x92, 0x7c, 0x10, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x92, 0x92, 0x92, 0x92, 0x92, 0x92, + 0x92, 0x7c, 0x10, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x42, 0x42, 0x42, 0x42, 0x42, 0x42, 0x24, 0x24, 0x66, 0x00, 0x00, 0x00, 0x00, - 0x08, 0x10, 0x48, 0x48, 0x00, 0x30, 0x10, 0x10, 0x10, 0x10, 0x10, 0x0c, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7e, 0x40, 0x40, 0x40, 0x40, 0x40, - 0x40, 0x40, 0x40, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x10, - 0x28, 0x28, 0x44, 0x44, 0x44, 0x82, 0x82, 0xfe, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x3c, 0x42, 0x42, 0x42, 0x5a, 0x42, 0x42, 0x42, 0x42, 0x3c, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x10, 0x28, 0x28, 0x44, 0x44, - 0x44, 0x82, 0x82, 0x82, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7e, 0x00, - 0x00, 0x00, 0x3c, 0x00, 0x00, 0x00, 0x00, 0x7e, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x7e, 0x42, 0x42, 0x42, 0x42, 0x42, 0x42, 0x42, 0x42, 0x42, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7e, 0x40, 0x20, 0x10, 0x08, 0x08, - 0x10, 0x20, 0x40, 0x7e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x7c, - 0x92, 0x92, 0x92, 0x92, 0x92, 0x92, 0x7c, 0x10, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x92, 0x92, 0x92, 0x92, 0x92, 0x92, 0x92, 0x7c, 0x10, 0x10, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x42, 0x42, 0x42, 0x42, 0x42, - 0x42, 0x24, 0x24, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x10, + 0x00, 0x00, 0x08, 0x10, 0x00, 0x3a, 0x46, 0x44, 0x44, 0x44, 0x46, 0x3a, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x10, 0x00, 0x3c, 0x42, 0x40, + 0x38, 0x40, 0x42, 0x3c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x10, + 0x00, 0x7c, 0x42, 0x42, 0x42, 0x42, 0x42, 0x42, 0x02, 0x02, 0x02, 0x00, + 0x00, 0x00, 0x08, 0x10, 0x00, 0x30, 0x10, 0x10, 0x10, 0x10, 0x10, 0x0c, + 0x00, 0x00, 0x00, 0x00, 0x08, 0x10, 0x00, 0x24, 0x00, 0x42, 0x42, 0x42, + 0x42, 0x42, 0x42, 0x3c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3a, 0x46, 0x44, 0x44, 0x44, 0x46, 0x3a, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x08, 0x10, 0x00, 0x3c, 0x42, 0x40, 0x38, 0x40, 0x42, 0x3c, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x10, 0x00, 0x7c, 0x42, 0x42, - 0x42, 0x42, 0x42, 0x42, 0x02, 0x02, 0x02, 0x00, 0x00, 0x00, 0x08, 0x10, - 0x00, 0x30, 0x10, 0x10, 0x10, 0x10, 0x10, 0x0c, 0x00, 0x00, 0x00, 0x00, - 0x08, 0x10, 0x00, 0x24, 0x00, 0x42, 0x42, 0x42, 0x42, 0x42, 0x42, 0x3c, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3a, 0x46, 0x44, - 0x44, 0x44, 0x46, 0x3a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x44, - 0x44, 0x48, 0x7c, 0x42, 0x42, 0x42, 0x42, 0x7c, 0x40, 0x40, 0x40, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x82, 0x82, 0x44, 0x44, 0x28, 0x28, 0x10, - 0x10, 0x10, 0x10, 0x00, 0x00, 0x00, 0x3e, 0x10, 0x08, 0x3c, 0x42, 0x42, - 0x42, 0x42, 0x42, 0x3c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7e, 0x04, - 0x08, 0x10, 0x20, 0x40, 0x40, 0x40, 0x40, 0x3c, 0x02, 0x02, 0x04, 0x00, - 0x00, 0x00, 0x38, 0x44, 0x44, 0x44, 0x7c, 0x44, 0x44, 0x44, 0x44, 0x38, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x10, 0x10, - 0x10, 0x10, 0x10, 0x0c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x20, - 0x10, 0x10, 0x28, 0x28, 0x44, 0x44, 0x82, 0x82, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x3e, 0x40, 0x40, 0x40, 0x3c, 0x40, 0x40, 0x40, 0x40, 0x3c, - 0x02, 0x02, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7e, 0x42, 0x42, - 0x42, 0x42, 0x42, 0x42, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x3c, 0x42, 0x42, 0x42, 0x42, 0x42, 0x7c, 0x40, 0x40, 0x40, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x42, 0x40, 0x40, 0x40, 0x40, 0x3c, - 0x02, 0x02, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3e, 0x44, 0x44, + 0x00, 0x00, 0x38, 0x44, 0x44, 0x48, 0x7c, 0x42, 0x42, 0x42, 0x42, 0x7c, + 0x40, 0x40, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x82, 0x82, 0x44, + 0x44, 0x28, 0x28, 0x10, 0x10, 0x10, 0x10, 0x00, 0x00, 0x00, 0x3e, 0x10, + 0x08, 0x3c, 0x42, 0x42, 0x42, 0x42, 0x42, 0x3c, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x7e, 0x04, 0x08, 0x10, 0x20, 0x40, 0x40, 0x40, 0x40, 0x3c, + 0x02, 0x02, 0x04, 0x00, 0x00, 0x00, 0x38, 0x44, 0x44, 0x44, 0x7c, 0x44, 0x44, 0x44, 0x44, 0x38, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0xfe, 0x10, 0x10, 0x10, 0x10, 0x10, 0x0c, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x42, 0x42, 0x42, 0x42, 0x42, 0x42, 0x3c, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x4c, 0x92, 0x92, - 0x92, 0x92, 0x92, 0x7c, 0x10, 0x10, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x42, 0x42, 0x24, 0x24, 0x18, 0x18, 0x24, 0x24, 0x42, 0x42, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x92, 0x92, 0x92, 0x92, 0x92, 0x92, 0x7c, - 0x10, 0x10, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x44, 0x82, 0x92, - 0x92, 0x92, 0x92, 0x6c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x48, 0x48, 0x00, 0x30, 0x10, 0x10, 0x10, 0x10, 0x10, 0x0c, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x24, 0x24, 0x00, 0x42, 0x42, 0x42, 0x42, 0x42, 0x42, 0x3c, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x10, 0x00, 0x42, 0x42, 0x42, - 0x42, 0x42, 0x42, 0x3c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x10, + 0x00, 0x00, 0x20, 0x20, 0x10, 0x10, 0x28, 0x28, 0x44, 0x44, 0x82, 0x82, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3e, 0x40, 0x40, 0x40, 0x3c, 0x40, + 0x40, 0x40, 0x40, 0x3c, 0x02, 0x02, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x7e, 0x42, 0x42, 0x42, 0x42, 0x42, 0x42, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x42, 0x42, 0x42, 0x42, 0x42, 0x7c, + 0x40, 0x40, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x42, 0x40, + 0x40, 0x40, 0x40, 0x3c, 0x02, 0x02, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x3e, 0x44, 0x44, 0x44, 0x44, 0x44, 0x38, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0xfe, 0x10, 0x10, 0x10, 0x10, 0x10, 0x0c, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x42, 0x42, 0x42, + 0x42, 0x42, 0x42, 0x3c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x4c, 0x92, 0x92, 0x92, 0x92, 0x92, 0x7c, 0x10, 0x10, 0x10, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x42, 0x42, 0x24, 0x24, 0x18, 0x18, 0x24, + 0x24, 0x42, 0x42, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x92, 0x92, 0x92, + 0x92, 0x92, 0x92, 0x7c, 0x10, 0x10, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x44, 0x82, 0x92, 0x92, 0x92, 0x92, 0x6c, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x3c, 0x42, 0x42, 0x42, 0x7e, 0x42, 0x42, 0x42, 0x42, 0x3c, + 0x00, 0x00, 0x48, 0x48, 0x00, 0x30, 0x10, 0x10, 0x10, 0x10, 0x10, 0x0c, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x24, 0x24, 0x00, 0x42, 0x42, 0x42, + 0x42, 0x42, 0x42, 0x3c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x10, + 0x00, 0x42, 0x42, 0x42, 0x42, 0x42, 0x42, 0x3c, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x08, 0x10, 0x00, 0x44, 0x82, 0x92, 0x92, 0x92, 0x92, 0x6c, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x42, 0x42, 0x42, 0x7e, 0x42, + 0x42, 0x42, 0x42, 0x3c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf8, 0x20, + 0x20, 0x3c, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x02, 0x04, 0x00, 0x00, + 0x08, 0x10, 0x00, 0x7e, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x42, 0x40, 0x40, 0x78, 0x40, + 0x40, 0x40, 0x42, 0x3c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x50, + 0x90, 0x9c, 0x92, 0x92, 0x92, 0x92, 0x92, 0x9c, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x90, 0x90, 0x90, 0x9c, 0xf2, 0x92, 0x92, 0x92, 0x92, 0x9c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf8, 0x20, 0x20, 0x3c, 0x22, 0x22, - 0x22, 0x22, 0x22, 0x22, 0x02, 0x04, 0x00, 0x00, 0x08, 0x10, 0x00, 0x7e, - 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x3c, 0x42, 0x40, 0x40, 0x78, 0x40, 0x40, 0x40, 0x42, 0x3c, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x50, 0x90, 0x9c, 0x92, 0x92, - 0x92, 0x92, 0x92, 0x9c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x90, 0x90, - 0x90, 0x9c, 0xf2, 0x92, 0x92, 0x92, 0x92, 0x9c, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0xf8, 0x20, 0x20, 0x3c, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, - 0x00, 0x00, 0x00, 0x00, 0x08, 0x10, 0x42, 0x44, 0x48, 0x50, 0x60, 0x60, - 0x50, 0x48, 0x44, 0x42, 0x00, 0x00, 0x00, 0x00, 0x10, 0x08, 0x42, 0x42, - 0x42, 0x46, 0x4a, 0x52, 0x62, 0x42, 0x42, 0x42, 0x00, 0x00, 0x00, 0x00, - 0x24, 0x18, 0x42, 0x42, 0x42, 0x42, 0x42, 0x3e, 0x02, 0x02, 0x02, 0x3c, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x42, 0x42, 0x42, 0x42, 0x42, 0x42, - 0x42, 0x42, 0x42, 0x7e, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00, 0x7c, 0x40, - 0x40, 0x7c, 0x42, 0x42, 0x42, 0x42, 0x42, 0x7c, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x3c, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0xfe, - 0x82, 0x00, 0x00, 0x00, 0x00, 0x00, 0x92, 0x92, 0x92, 0x54, 0x38, 0x54, - 0x92, 0x92, 0x92, 0x92, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x42, 0x42, - 0x42, 0x46, 0x4a, 0x52, 0x62, 0x42, 0x42, 0x42, 0x00, 0x00, 0x00, 0x00, - 0x24, 0x18, 0x42, 0x42, 0x42, 0x46, 0x4a, 0x52, 0x62, 0x42, 0x42, 0x42, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0e, 0x12, 0x22, 0x22, 0x22, 0x22, - 0x22, 0x22, 0x22, 0x42, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x42, 0x42, - 0x42, 0x42, 0x42, 0x3e, 0x02, 0x02, 0x02, 0x3c, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x10, 0x7c, 0x92, 0x92, 0x92, 0x92, 0x92, 0x92, 0x92, 0x92, 0x7c, - 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x42, 0x42, 0x42, 0x42, 0x42, 0x42, - 0x42, 0x42, 0x42, 0x3f, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x42, 0x42, - 0x42, 0x42, 0x42, 0x3e, 0x02, 0x02, 0x02, 0x02, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x92, 0x92, 0x92, 0x92, 0x92, 0x92, 0x92, 0x92, 0x92, 0x7e, + 0x22, 0x22, 0x22, 0x22, 0x00, 0x00, 0x00, 0x00, 0x08, 0x10, 0x42, 0x44, + 0x48, 0x50, 0x60, 0x60, 0x50, 0x48, 0x44, 0x42, 0x00, 0x00, 0x00, 0x00, + 0x10, 0x08, 0x42, 0x42, 0x42, 0x46, 0x4a, 0x52, 0x62, 0x42, 0x42, 0x42, + 0x00, 0x00, 0x00, 0x00, 0x24, 0x18, 0x42, 0x42, 0x42, 0x42, 0x42, 0x3e, + 0x02, 0x02, 0x02, 0x3c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x42, 0x42, + 0x42, 0x42, 0x42, 0x42, 0x42, 0x42, 0x42, 0x7e, 0x18, 0x18, 0x00, 0x00, + 0x00, 0x00, 0x7c, 0x40, 0x40, 0x7c, 0x42, 0x42, 0x42, 0x42, 0x42, 0x7c, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x44, 0x44, 0x44, 0x44, 0x44, + 0x44, 0x44, 0x44, 0xfe, 0x82, 0x00, 0x00, 0x00, 0x00, 0x00, 0x92, 0x92, + 0x92, 0x54, 0x38, 0x54, 0x92, 0x92, 0x92, 0x92, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x42, 0x42, 0x42, 0x46, 0x4a, 0x52, 0x62, 0x42, 0x42, 0x42, + 0x00, 0x00, 0x00, 0x00, 0x24, 0x18, 0x42, 0x42, 0x42, 0x46, 0x4a, 0x52, + 0x62, 0x42, 0x42, 0x42, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0e, 0x12, + 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x42, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x42, 0x42, 0x42, 0x42, 0x42, 0x3e, 0x02, 0x02, 0x02, 0x3c, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x7c, 0x92, 0x92, 0x92, 0x92, 0x92, + 0x92, 0x92, 0x92, 0x7c, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x42, 0x42, + 0x42, 0x42, 0x42, 0x42, 0x42, 0x42, 0x42, 0x3f, 0x01, 0x01, 0x00, 0x00, + 0x00, 0x00, 0x42, 0x42, 0x42, 0x42, 0x42, 0x3e, 0x02, 0x02, 0x02, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x92, 0x92, 0x92, 0x92, 0x92, 0x92, - 0x92, 0x92, 0x92, 0x7f, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0xc0, 0x40, + 0x92, 0x92, 0x92, 0x7e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x92, 0x92, + 0x92, 0x92, 0x92, 0x92, 0x92, 0x92, 0x92, 0x7f, 0x01, 0x01, 0x00, 0x00, + 0x00, 0x00, 0xc0, 0x40, 0x40, 0x7c, 0x42, 0x42, 0x42, 0x42, 0x42, 0x7c, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x82, 0x82, 0x82, 0xf2, 0x8a, 0x8a, + 0x8a, 0x8a, 0x8a, 0xf2, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x42, + 0x02, 0x02, 0x1e, 0x02, 0x02, 0x02, 0x42, 0x3c, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x8c, 0x92, 0x92, 0x92, 0x92, 0xf2, 0x92, 0x92, 0x92, 0x8c, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3e, 0x42, 0x42, 0x42, 0x42, 0x3e, + 0x0a, 0x12, 0x22, 0x42, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x40, 0x40, 0x7c, 0x42, 0x42, 0x42, 0x42, 0x42, 0x7c, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x82, 0x82, 0x82, 0xf2, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0xf2, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x42, 0x02, 0x02, 0x1e, 0x02, - 0x02, 0x02, 0x42, 0x3c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x8c, 0x92, - 0x92, 0x92, 0x92, 0xf2, 0x92, 0x92, 0x92, 0x8c, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x3e, 0x42, 0x42, 0x42, 0x42, 0x3e, 0x0a, 0x12, 0x22, 0x42, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x40, 0x40, 0x7c, 0x42, 0x42, - 0x42, 0x42, 0x42, 0x7c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x44, - 0x44, 0x48, 0x7c, 0x42, 0x42, 0x42, 0x42, 0x7c, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x02, 0x02, 0x3c, 0x40, 0x40, 0x3c, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x92, 0x92, 0x54, - 0x38, 0x54, 0x92, 0x92, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x3c, 0x42, 0x02, 0x1c, 0x02, 0x42, 0x3c, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x1e, 0x22, 0x22, 0x22, 0x22, 0x22, 0x42, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x82, 0xc6, 0xaa, - 0x92, 0x82, 0x82, 0x82, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x42, 0x42, 0x42, 0x7e, 0x42, 0x42, 0x42, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0xfe, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x7c, 0x92, 0x92, - 0x92, 0x92, 0x92, 0x7c, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x42, 0x42, 0x42, 0x42, 0x42, 0x42, 0x3f, 0x01, 0x01, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x42, 0x42, 0x42, 0x3e, 0x02, 0x02, 0x02, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x92, 0x92, 0x92, - 0x92, 0x92, 0x92, 0x7e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x92, 0x92, 0x92, 0x92, 0x92, 0x92, 0x7f, 0x01, 0x01, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x60, 0x20, 0x3c, 0x22, 0x22, 0x22, 0x3c, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x82, 0x82, 0xf2, - 0x8a, 0x8a, 0x8a, 0xf2, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x40, 0x40, 0x78, 0x44, 0x44, 0x44, 0x78, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x42, 0x02, 0x1e, 0x02, 0x42, 0x3c, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x8c, 0x92, 0x92, - 0xf2, 0x92, 0x92, 0x8c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x3e, 0x42, 0x42, 0x3e, 0x12, 0x22, 0x42, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x40, 0xf8, 0x40, 0x7c, 0x42, 0x42, 0x42, 0x42, 0x42, 0x42, - 0x02, 0x04, 0x00, 0x00, 0x00, 0x00, 0x08, 0x10, 0x00, 0x3c, 0x02, 0x02, + 0x00, 0x00, 0x38, 0x44, 0x44, 0x48, 0x7c, 0x42, 0x42, 0x42, 0x42, 0x7c, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x02, 0x02, 0x3c, 0x40, 0x40, 0x3c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x3c, 0x42, 0x40, 0x78, 0x40, 0x42, 0x3c, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x70, 0x90, 0x9c, 0x92, 0x92, 0x92, 0x9c, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x90, 0x90, 0x9c, - 0xf2, 0x92, 0x92, 0x9c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x10, - 0x00, 0x42, 0x44, 0x48, 0x70, 0x48, 0x44, 0x42, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x24, 0x18, 0x00, 0x42, 0x42, 0x42, 0x42, 0x42, 0x42, 0x3e, - 0x02, 0x02, 0x3c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x42, 0x42, 0x42, - 0x42, 0x42, 0x42, 0x7e, 0x18, 0x18, 0x00, 0x00, 0x02, 0x02, 0x7e, 0x40, - 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x20, 0x20, 0x3c, 0x02, 0x02, 0x3c, 0x40, 0x40, 0x3c, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7e, 0x40, 0x40, 0x40, 0x40, 0xf8, - 0x40, 0x40, 0x40, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x7e, 0x40, 0x40, 0xf8, 0x40, 0x40, 0x40, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x7e, 0x40, 0x40, 0x40, 0x40, 0x7c, 0x42, 0x42, 0x42, 0x42, - 0x02, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7e, 0x40, 0x40, - 0x78, 0x44, 0x44, 0x44, 0x04, 0x08, 0x00, 0x00, 0x00, 0x00, 0x92, 0x92, - 0x92, 0x54, 0x38, 0x54, 0x92, 0x92, 0x92, 0x93, 0x01, 0x01, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x92, 0x92, 0x54, 0x38, 0x54, 0x92, 0x93, - 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x42, 0x42, 0x02, 0x1c, 0x02, - 0x02, 0x42, 0x42, 0x3c, 0x10, 0x10, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x3c, 0x42, 0x02, 0x1c, 0x02, 0x42, 0x3c, 0x10, 0x10, 0x10, 0x00, - 0x00, 0x00, 0x42, 0x44, 0x48, 0x50, 0x60, 0x60, 0x50, 0x48, 0x44, 0x43, - 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x42, 0x44, 0x48, - 0x70, 0x48, 0x44, 0x43, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x42, 0x42, - 0x54, 0x58, 0x70, 0x70, 0x58, 0x54, 0x42, 0x42, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x42, 0x54, 0x58, 0x70, 0x58, 0x54, 0x42, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc2, 0x44, 0x48, 0x50, 0x60, 0x60, - 0x50, 0x48, 0x44, 0x42, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0xc2, 0x44, 0x48, 0x70, 0x48, 0x44, 0x42, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x42, 0x42, 0x42, 0x42, 0x7e, 0x42, 0x42, 0x42, 0x42, 0x43, + 0x00, 0x92, 0x92, 0x54, 0x38, 0x54, 0x92, 0x92, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x42, 0x02, 0x1c, 0x02, 0x42, 0x3c, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1e, 0x22, 0x22, + 0x22, 0x22, 0x22, 0x42, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x82, 0xc6, 0xaa, 0x92, 0x82, 0x82, 0x82, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x42, 0x42, 0x42, 0x7e, 0x42, 0x42, 0x42, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfe, 0x10, 0x10, + 0x10, 0x10, 0x10, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x10, 0x7c, 0x92, 0x92, 0x92, 0x92, 0x92, 0x7c, 0x10, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x42, 0x42, 0x42, 0x42, 0x42, 0x42, 0x3f, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x42, 0x42, 0x42, - 0x7e, 0x42, 0x42, 0x43, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x8e, 0x88, - 0x88, 0x88, 0xf8, 0x88, 0x88, 0x88, 0x88, 0x88, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x8e, 0x88, 0x88, 0xf8, 0x88, 0x88, 0x88, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x42, 0x42, 0x40, 0x40, 0x40, - 0x40, 0x42, 0x42, 0x3c, 0x10, 0x10, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x3c, 0x42, 0x40, 0x40, 0x40, 0x42, 0x3c, 0x10, 0x10, 0x10, 0x00, - 0x00, 0x00, 0x82, 0x82, 0x44, 0x44, 0x28, 0x10, 0x7c, 0x10, 0x10, 0x10, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x82, 0x82, 0x44, - 0x44, 0x28, 0x28, 0x10, 0x7c, 0x10, 0x10, 0x00, 0x00, 0x00, 0x42, 0x42, - 0x24, 0x24, 0x18, 0x18, 0x24, 0x24, 0x42, 0x43, 0x01, 0x01, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x42, 0x42, 0x24, 0x18, 0x24, 0x42, 0x43, - 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x42, 0x42, 0x42, 0x42, 0x42, 0x3e, - 0x02, 0x02, 0x02, 0x03, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x42, 0x42, 0x42, 0x3e, 0x02, 0x02, 0x03, 0x01, 0x01, 0x00, 0x00, - 0x00, 0x00, 0x42, 0x42, 0x42, 0x52, 0x52, 0x3e, 0x12, 0x12, 0x02, 0x02, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x42, 0x42, 0x52, - 0x3e, 0x12, 0x02, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x40, - 0x40, 0x40, 0x7c, 0x42, 0x42, 0x42, 0x42, 0x42, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x40, 0x7c, 0x42, 0x42, 0x42, 0x42, - 0x00, 0x00, 0x00, 0x00, 0x24, 0x24, 0x00, 0x3c, 0x42, 0x02, 0x02, 0x7e, - 0x42, 0x42, 0x42, 0x3c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x24, 0x24, - 0x00, 0x3c, 0x02, 0x02, 0x7e, 0x42, 0x42, 0x3c, 0x00, 0x00, 0x00, 0x00, - 0x44, 0x44, 0x00, 0x92, 0x92, 0x92, 0x54, 0x38, 0x54, 0x92, 0x92, 0x92, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x44, 0x44, 0x00, 0x92, 0x92, 0x54, - 0x38, 0x54, 0x92, 0x92, 0x00, 0x00, 0x00, 0x00, 0x24, 0x24, 0x00, 0x3c, - 0x42, 0x42, 0x02, 0x1c, 0x02, 0x42, 0x42, 0x3c, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x24, 0x24, 0x00, 0x3c, 0x42, 0x02, 0x1c, 0x02, 0x42, 0x3c, - 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x42, 0x42, 0x42, 0x46, 0x4a, 0x52, - 0x62, 0x42, 0x42, 0x42, 0x00, 0x00, 0x00, 0x00, 0x24, 0x24, 0x00, 0x42, - 0x42, 0x42, 0x46, 0x4a, 0x52, 0x62, 0x42, 0x42, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x42, 0x42, 0x7e, 0x42, 0x42, 0x3c, - 0x00, 0x00, 0x00, 0x00, 0x24, 0x24, 0x00, 0x3c, 0x42, 0x42, 0x42, 0x7e, - 0x42, 0x42, 0x42, 0x3c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x24, 0x24, - 0x00, 0x3c, 0x42, 0x42, 0x7e, 0x42, 0x42, 0x3c, 0x00, 0x00, 0x00, 0x00, - 0x24, 0x24, 0x00, 0x3c, 0x42, 0x02, 0x02, 0x1e, 0x02, 0x02, 0x42, 0x3c, + 0x3e, 0x02, 0x02, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x92, 0x92, 0x92, 0x92, 0x92, 0x92, 0x7e, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x92, 0x92, 0x92, 0x92, 0x92, 0x92, 0x7f, + 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x60, 0x20, 0x3c, + 0x22, 0x22, 0x22, 0x3c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x82, 0x82, 0xf2, 0x8a, 0x8a, 0x8a, 0xf2, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x40, 0x78, 0x44, 0x44, 0x44, 0x78, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x42, 0x02, + 0x1e, 0x02, 0x42, 0x3c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x8c, 0x92, 0x92, 0xf2, 0x92, 0x92, 0x8c, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x3e, 0x42, 0x42, 0x3e, 0x12, 0x22, 0x42, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0xf8, 0x40, 0x7c, 0x42, 0x42, + 0x42, 0x42, 0x42, 0x42, 0x02, 0x04, 0x00, 0x00, 0x00, 0x00, 0x08, 0x10, + 0x00, 0x3c, 0x02, 0x02, 0x3c, 0x40, 0x40, 0x3c, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x42, 0x40, 0x78, 0x40, 0x42, 0x3c, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x70, 0x90, 0x9c, + 0x92, 0x92, 0x92, 0x9c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x90, 0x90, 0x9c, 0xf2, 0x92, 0x92, 0x9c, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x08, 0x10, 0x00, 0x42, 0x44, 0x48, 0x70, 0x48, 0x44, 0x42, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x24, 0x18, 0x00, 0x42, 0x42, 0x42, + 0x42, 0x42, 0x42, 0x3e, 0x02, 0x02, 0x3c, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x42, 0x42, 0x42, 0x42, 0x42, 0x42, 0x7e, 0x18, 0x18, 0x00, 0x00, + 0x02, 0x02, 0x7e, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x20, 0x3c, 0x02, 0x02, + 0x3c, 0x40, 0x40, 0x3c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7e, 0x40, + 0x40, 0x40, 0x40, 0xf8, 0x40, 0x40, 0x40, 0x40, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x7e, 0x40, 0x40, 0xf8, 0x40, 0x40, 0x40, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7e, 0x40, 0x40, 0x40, 0x40, 0x7c, + 0x42, 0x42, 0x42, 0x42, 0x02, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x7e, 0x40, 0x40, 0x78, 0x44, 0x44, 0x44, 0x04, 0x08, 0x00, 0x00, + 0x00, 0x00, 0x92, 0x92, 0x92, 0x54, 0x38, 0x54, 0x92, 0x92, 0x92, 0x93, + 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x92, 0x92, 0x54, + 0x38, 0x54, 0x92, 0x93, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x42, + 0x42, 0x02, 0x1c, 0x02, 0x02, 0x42, 0x42, 0x3c, 0x10, 0x10, 0x10, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x42, 0x02, 0x1c, 0x02, 0x42, 0x3c, + 0x10, 0x10, 0x10, 0x00, 0x00, 0x00, 0x42, 0x44, 0x48, 0x50, 0x60, 0x60, + 0x50, 0x48, 0x44, 0x43, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x42, 0x44, 0x48, 0x70, 0x48, 0x44, 0x43, 0x01, 0x01, 0x00, 0x00, + 0x00, 0x00, 0x42, 0x42, 0x54, 0x58, 0x70, 0x70, 0x58, 0x54, 0x42, 0x42, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x42, 0x54, 0x58, + 0x70, 0x58, 0x54, 0x42, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc2, 0x44, + 0x48, 0x50, 0x60, 0x60, 0x50, 0x48, 0x44, 0x42, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0xc2, 0x44, 0x48, 0x70, 0x48, 0x44, 0x42, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x42, 0x42, 0x42, 0x42, 0x7e, 0x42, + 0x42, 0x42, 0x42, 0x43, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x42, 0x42, 0x42, 0x7e, 0x42, 0x42, 0x43, 0x01, 0x01, 0x00, 0x00, + 0x00, 0x00, 0x47, 0x44, 0x44, 0x44, 0x7c, 0x44, 0x44, 0x44, 0x44, 0x44, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x47, 0x44, 0x44, + 0x7c, 0x44, 0x44, 0x44, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x42, + 0x42, 0x40, 0x40, 0x40, 0x40, 0x42, 0x42, 0x3c, 0x10, 0x10, 0x10, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x42, 0x40, 0x40, 0x40, 0x42, 0x3c, + 0x10, 0x10, 0x10, 0x00, 0x00, 0x00, 0x82, 0x82, 0x44, 0x44, 0x28, 0x10, + 0x7c, 0x10, 0x10, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x82, 0x82, 0x44, 0x44, 0x28, 0x28, 0x10, 0x7c, 0x10, 0x10, 0x00, + 0x00, 0x00, 0x42, 0x42, 0x24, 0x24, 0x18, 0x18, 0x24, 0x24, 0x42, 0x43, + 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x42, 0x42, 0x24, + 0x18, 0x24, 0x42, 0x43, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x42, 0x42, + 0x42, 0x42, 0x42, 0x3e, 0x02, 0x02, 0x02, 0x03, 0x01, 0x01, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x42, 0x42, 0x42, 0x3e, 0x02, 0x02, 0x03, + 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x42, 0x42, 0x42, 0x52, 0x52, 0x3e, + 0x12, 0x12, 0x02, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x42, 0x42, 0x52, 0x3e, 0x12, 0x02, 0x02, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x40, 0x40, 0x40, 0x40, 0x7c, 0x42, 0x42, 0x42, 0x42, 0x42, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x40, 0x7c, + 0x42, 0x42, 0x42, 0x42, 0x00, 0x00, 0x00, 0x00, 0x24, 0x24, 0x00, 0x3c, + 0x42, 0x02, 0x02, 0x7e, 0x42, 0x42, 0x42, 0x3c, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x24, 0x24, 0x00, 0x3c, 0x02, 0x02, 0x7e, 0x42, 0x42, 0x3c, + 0x00, 0x00, 0x00, 0x00, 0x44, 0x44, 0x00, 0x92, 0x92, 0x92, 0x54, 0x38, + 0x54, 0x92, 0x92, 0x92, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x44, 0x44, + 0x00, 0x92, 0x92, 0x54, 0x38, 0x54, 0x92, 0x92, 0x00, 0x00, 0x00, 0x00, + 0x24, 0x24, 0x00, 0x3c, 0x42, 0x42, 0x02, 0x1c, 0x02, 0x42, 0x42, 0x3c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x24, 0x24, 0x00, 0x3c, 0x42, 0x02, - 0x1e, 0x02, 0x42, 0x3c, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x42, 0x42, + 0x1c, 0x02, 0x42, 0x3c, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x42, 0x42, + 0x42, 0x46, 0x4a, 0x52, 0x62, 0x42, 0x42, 0x42, 0x00, 0x00, 0x00, 0x00, + 0x24, 0x24, 0x00, 0x42, 0x42, 0x42, 0x46, 0x4a, 0x52, 0x62, 0x42, 0x42, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x42, 0x42, + 0x7e, 0x42, 0x42, 0x3c, 0x00, 0x00, 0x00, 0x00, 0x24, 0x24, 0x00, 0x3c, + 0x42, 0x42, 0x42, 0x7e, 0x42, 0x42, 0x42, 0x3c, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x24, 0x24, 0x00, 0x3c, 0x42, 0x42, 0x7e, 0x42, 0x42, 0x3c, + 0x00, 0x00, 0x00, 0x00, 0x24, 0x24, 0x00, 0x3c, 0x42, 0x02, 0x02, 0x1e, + 0x02, 0x02, 0x42, 0x3c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x24, 0x24, + 0x00, 0x3c, 0x42, 0x02, 0x1e, 0x02, 0x42, 0x3c, 0x00, 0x00, 0x00, 0x00, + 0x3c, 0x00, 0x42, 0x42, 0x42, 0x42, 0x42, 0x3e, 0x02, 0x02, 0x02, 0x3c, + 0x00, 0x00, 0x00, 0x00, 0x24, 0x24, 0x00, 0x42, 0x42, 0x42, 0x42, 0x3e, + 0x02, 0x02, 0x02, 0x3c, 0x00, 0x00, 0x00, 0x00, 0x12, 0x24, 0x00, 0x42, 0x42, 0x42, 0x42, 0x3e, 0x02, 0x02, 0x02, 0x3c, 0x00, 0x00, 0x00, 0x00, - 0x24, 0x24, 0x00, 0x42, 0x42, 0x42, 0x42, 0x3e, 0x02, 0x02, 0x02, 0x3c, - 0x00, 0x00, 0x00, 0x00, 0x12, 0x24, 0x00, 0x42, 0x42, 0x42, 0x42, 0x3e, - 0x02, 0x02, 0x02, 0x3c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x12, 0x24, + 0x00, 0x00, 0x12, 0x24, 0x00, 0x42, 0x42, 0x42, 0x42, 0x42, 0x42, 0x3e, + 0x02, 0x02, 0x3c, 0x00, 0x24, 0x24, 0x00, 0x42, 0x42, 0x42, 0x42, 0x3e, + 0x02, 0x02, 0x02, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x24, 0x24, + 0x00, 0x42, 0x42, 0x42, 0x3e, 0x02, 0x02, 0x02, 0x00, 0x00, 0x00, 0x00, + 0x48, 0x48, 0x00, 0x82, 0x82, 0x82, 0xf2, 0x8a, 0x8a, 0x8a, 0x8a, 0xf2, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x48, 0x48, 0x00, 0x82, 0x82, 0xf2, + 0x8a, 0x8a, 0x8a, 0xf2, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x42, 0x44, + 0x48, 0x50, 0x60, 0x60, 0x50, 0x48, 0x44, 0x42, 0x00, 0x3c, 0x00, 0x00, + 0x00, 0x00, 0x40, 0x40, 0x40, 0x42, 0x44, 0x48, 0x70, 0x48, 0x44, 0x42, + 0x00, 0x3c, 0x00, 0x00, 0x00, 0x00, 0x7e, 0x40, 0x40, 0x40, 0x78, 0x40, + 0x40, 0x40, 0x40, 0x7e, 0x00, 0x10, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x3c, 0x42, 0x42, 0x7e, 0x40, 0x40, 0x3c, 0x00, 0x10, 0x10, 0x00, + 0x32, 0x4c, 0x00, 0x7e, 0x40, 0x40, 0x40, 0x78, 0x40, 0x40, 0x40, 0x7e, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x32, 0x4c, 0x00, 0x3c, 0x42, 0x42, + 0x7e, 0x40, 0x40, 0x3c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x42, + 0x42, 0x42, 0x42, 0x42, 0x42, 0x42, 0x42, 0x3c, 0x00, 0x10, 0x10, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x42, 0x42, 0x42, 0x42, 0x42, 0x3c, + 0x00, 0x10, 0x10, 0x00, 0x64, 0x98, 0x00, 0x82, 0x82, 0x44, 0x44, 0x28, + 0x10, 0x10, 0x10, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x32, 0x4c, 0x00, 0x42, 0x42, 0x42, 0x42, 0x42, 0x42, 0x3e, 0x02, 0x02, 0x3c, 0x00, - 0x24, 0x24, 0x00, 0x42, 0x42, 0x42, 0x42, 0x3e, 0x02, 0x02, 0x02, 0x02, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x24, 0x24, 0x00, 0x42, 0x42, 0x42, - 0x3e, 0x02, 0x02, 0x02, 0x00, 0x00, 0x00, 0x00, 0x48, 0x48, 0x00, 0x82, - 0x82, 0x82, 0xf2, 0x8a, 0x8a, 0x8a, 0x8a, 0xf2, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x48, 0x48, 0x00, 0x82, 0x82, 0xf2, 0x8a, 0x8a, 0x8a, 0xf2, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x42, 0x44, 0x48, 0x50, 0x60, 0x60, - 0x50, 0x48, 0x44, 0x42, 0x00, 0x3c, 0x00, 0x00, 0x00, 0x00, 0x40, 0x40, - 0x40, 0x42, 0x44, 0x48, 0x70, 0x48, 0x44, 0x42, 0x00, 0x3c, 0x00, 0x00, - 0x00, 0x00, 0x7e, 0x40, 0x40, 0x40, 0x78, 0x40, 0x40, 0x40, 0x40, 0x7e, - 0x00, 0x10, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x42, 0x42, - 0x7e, 0x40, 0x40, 0x3c, 0x00, 0x10, 0x10, 0x00, 0x32, 0x4c, 0x00, 0x7e, - 0x40, 0x40, 0x40, 0x78, 0x40, 0x40, 0x40, 0x7e, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x32, 0x4c, 0x00, 0x3c, 0x42, 0x42, 0x7e, 0x40, 0x40, 0x3c, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x42, 0x42, 0x42, 0x42, 0x42, - 0x42, 0x42, 0x42, 0x3c, 0x00, 0x10, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x3c, 0x42, 0x42, 0x42, 0x42, 0x42, 0x3c, 0x00, 0x10, 0x10, 0x00, - 0x64, 0x98, 0x00, 0x82, 0x82, 0x44, 0x44, 0x28, 0x10, 0x10, 0x10, 0x10, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x32, 0x4c, 0x00, 0x42, 0x42, 0x42, - 0x42, 0x42, 0x42, 0x3e, 0x02, 0x02, 0x3c, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0xfe, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x28, 0x28, 0x28, 0x28, 0x28, 0x28, 0x28, 0x28, 0x28, 0x28, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x7e, 0x00, 0x7e, 0x00, 0x08, 0x10, 0x10, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x08, 0x08, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x08, 0x08, 0x10, 0x00, 0x00, 0x00, 0x00, 0x12, 0x24, 0x24, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x12, 0x12, 0x24, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x24, 0x24, 0x48, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x10, - 0x7c, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x10, 0x10, 0x7c, 0x10, 0x10, 0x10, 0x10, 0x7c, 0x10, 0x10, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x3c, - 0x3c, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x92, 0x92, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x48, 0xa8, 0x50, 0x10, 0x20, 0x20, 0x40, 0x54, 0xaa, 0x94, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x10, 0x10, 0x10, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x24, 0x24, 0x24, - 0x24, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x08, 0x10, 0x20, 0x10, 0x08, 0x04, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x10, 0x08, - 0x04, 0x08, 0x10, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x24, 0x24, - 0x24, 0x24, 0x24, 0x24, 0x24, 0x00, 0x24, 0x24, 0x00, 0x00, 0x00, 0x00, - 0x7e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x24, 0x24, 0x24, 0x24, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf0, 0x88, - 0x88, 0x88, 0xf4, 0x84, 0x8e, 0x84, 0x84, 0x82, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x1c, 0x22, 0x40, 0xf8, 0x40, 0xf8, 0x40, 0x22, 0x1c, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfe, 0x10, 0x10, 0x1c, 0x70, 0x1c, - 0x70, 0x10, 0x10, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x96, 0x96, - 0x96, 0xd0, 0xf0, 0xf0, 0xb0, 0x96, 0x90, 0x96, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0xfb, 0x55, 0x55, 0x51, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x40, 0xfe, - 0x40, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x38, - 0x54, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x04, 0xfe, 0x04, 0x08, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, - 0x10, 0x54, 0x38, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x24, 0x42, 0xff, 0x42, 0x24, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x10, 0x38, 0x54, 0x10, 0x10, 0x10, 0x10, 0x54, 0x38, 0x10, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x38, 0x54, 0x10, 0x10, 0x10, - 0x54, 0x38, 0x10, 0x7c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x02, - 0x02, 0x02, 0x02, 0x22, 0x42, 0xfe, 0x40, 0x20, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x7e, 0xc0, 0x7e, 0x20, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x38, 0x6c, 0x28, 0x28, 0x28, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfe, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x28, 0x28, 0x28, 0x28, 0x28, 0x28, 0x28, 0x28, 0x28, 0x28, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x08, 0xfc, 0x06, 0xfc, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x28, 0x28, 0x28, 0x28, 0x28, 0x28, 0x28, 0x6c, 0x38, 0x10, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x24, 0x7e, 0xc3, - 0x7e, 0x24, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x38, - 0x6c, 0x28, 0x28, 0x28, 0x28, 0x6c, 0x38, 0x10, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x02, 0x04, 0x7c, 0x8a, 0x92, 0x92, 0xa2, 0x7c, 0x40, 0x80, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1e, 0x20, 0x40, - 0x78, 0x40, 0x20, 0x1e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7e, 0x00, 0x7e, + 0x00, 0x08, 0x10, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x08, 0x10, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x08, 0x10, 0x00, 0x00, 0x00, + 0x00, 0x12, 0x24, 0x24, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x12, 0x12, 0x24, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x24, 0x24, 0x48, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x10, 0x10, 0x7c, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x10, 0x7c, 0x10, 0x10, 0x10, + 0x10, 0x7c, 0x10, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x18, 0x3c, 0x3c, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x92, 0x92, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x48, 0xa8, 0x50, 0x10, 0x20, 0x20, + 0x40, 0x54, 0xaa, 0x94, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x10, 0x10, + 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x24, 0x24, 0x24, 0x24, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x08, 0x10, + 0x20, 0x10, 0x08, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x20, 0x10, 0x08, 0x04, 0x08, 0x10, 0x20, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x24, 0x24, 0x24, 0x24, 0x24, 0x24, 0x24, 0x00, 0x24, 0x24, + 0x00, 0x00, 0x00, 0x00, 0x7e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x24, 0x24, + 0x24, 0x24, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0xf0, 0x88, 0x88, 0x88, 0xf4, 0x84, 0x8e, 0x84, 0x84, 0x82, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1c, 0x22, 0x40, 0xf8, 0x40, + 0xf8, 0x40, 0x22, 0x1c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfe, 0x10, + 0x10, 0x1c, 0x70, 0x1c, 0x70, 0x10, 0x10, 0x10, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x96, 0x96, 0x96, 0xd0, 0xf0, 0xf0, 0xb0, 0x96, 0x90, 0x96, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfb, 0x55, 0x55, 0x51, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x20, 0x40, 0xfe, 0x40, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x10, 0x38, 0x54, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x04, 0xfe, + 0x04, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x10, + 0x10, 0x10, 0x10, 0x10, 0x10, 0x54, 0x38, 0x10, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x24, 0x42, 0xff, 0x42, 0x24, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x38, 0x54, 0x10, 0x10, 0x10, + 0x10, 0x54, 0x38, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x38, + 0x54, 0x10, 0x10, 0x10, 0x54, 0x38, 0x10, 0x7c, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x02, 0x02, 0x02, 0x02, 0x02, 0x22, 0x42, 0xfe, 0x40, 0x20, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x7e, 0xc0, + 0x7e, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x38, + 0x6c, 0x28, 0x28, 0x28, 0x28, 0x28, 0x28, 0x28, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0xfc, 0x06, 0xfc, 0x08, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x28, 0x28, 0x28, 0x28, 0x28, 0x28, + 0x28, 0x6c, 0x38, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x24, 0x7e, 0xc3, 0x7e, 0x24, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x10, 0x38, 0x6c, 0x28, 0x28, 0x28, 0x28, 0x6c, 0x38, 0x10, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7e, 0x02, 0x02, 0x02, 0x7e, + 0x02, 0x02, 0x02, 0x7e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x04, + 0x7c, 0x8a, 0x92, 0x92, 0xa2, 0x7c, 0x40, 0x80, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x1e, 0x20, 0x40, 0x40, 0x7e, 0x40, 0x40, 0x20, 0x1e, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1e, 0x20, 0x40, 0x7e, + 0x40, 0x20, 0x1e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x04, 0x04, 0x04, 0x04, 0x44, 0x44, 0x44, 0x24, 0x14, 0x0c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x6c, 0x92, 0x92, 0x92, 0x6c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x40, 0x40, 0x40, 0x40, 0x7e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x10, 0x28, 0x28, 0x28, 0x44, 0x44, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x44, 0x44, 0x28, + 0x00, 0x00, 0x00, 0x00, 0x10, 0x10, 0x28, 0x28, 0x44, 0x44, 0x82, 0x82, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x82, 0x82, 0x44, 0x44, 0x28, 0x28, 0x10, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x42, 0x42, 0x42, 0x42, 0x42, 0x42, 0x42, 0x42, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x42, 0x42, 0x42, 0x42, 0x42, 0x42, 0x42, 0x42, 0x3c, @@ -812,579 +816,607 @@ static uint8_t font_bytes[1383 * 16] = { 0x00, 0x00, 0x00, 0x00, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1f, 0x10, 0x10, 0x10, 0x10, - 0x10, 0x10, 0x10, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1f, - 0x1f, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x1f, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1f, 0x1f, 0x18, 0x18, 0x18, - 0x18, 0x18, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf0, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, + 0xaa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x10, 0x10, 0x00, + 0x10, 0x10, 0x10, 0x00, 0x10, 0x10, 0x10, 0x00, 0x10, 0x10, 0x10, 0x00, + 0x18, 0x18, 0x18, 0x00, 0x18, 0x18, 0x18, 0x00, 0x18, 0x18, 0x18, 0x00, + 0x18, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1f, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0xf0, 0xf0, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf8, 0x18, 0x18, 0x18, 0x18, - 0x18, 0x18, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf8, - 0xf8, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x10, 0x10, 0x10, 0x10, - 0x10, 0x10, 0x10, 0x1f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x1f, 0x1f, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x1f, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x18, 0x18, 0x18, - 0x18, 0x18, 0x18, 0x1f, 0x1f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0xf0, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0xf0, - 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x18, 0x18, 0x18, - 0x18, 0x18, 0x18, 0xf8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0xf8, 0xf8, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x1f, 0x1f, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1f, 0x18, 0x18, 0x18, 0x18, + 0x18, 0x18, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1f, + 0x1f, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0xf0, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf0, 0xf0, 0x10, 0x10, 0x10, + 0x10, 0x10, 0x10, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf8, + 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0xf8, 0xf8, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, + 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x1f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x1f, + 0x1f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x18, 0x18, 0x18, + 0x18, 0x18, 0x18, 0x1f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x1f, 0x1f, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0xf0, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x10, 0x10, 0x10, + 0x10, 0x10, 0x10, 0xf0, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0xf8, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0xf8, + 0xf8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x10, 0x10, 0x10, + 0x10, 0x10, 0x10, 0x1f, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, + 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x1f, 0x1f, 0x10, 0x10, 0x10, + 0x10, 0x10, 0x10, 0x10, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x1f, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, - 0x10, 0x10, 0x10, 0x1f, 0x1f, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, - 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x1f, 0x10, 0x10, 0x10, 0x10, - 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x1f, - 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, - 0x18, 0x18, 0x18, 0x1f, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, - 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x1f, 0x1f, 0x10, 0x10, 0x10, - 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x1f, - 0x1f, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, - 0x18, 0x18, 0x18, 0x1f, 0x1f, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, - 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0xf0, 0x10, 0x10, 0x10, 0x10, - 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0xf0, - 0xf0, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x18, 0x18, 0x18, 0x18, - 0x18, 0x18, 0x18, 0xf8, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, - 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0xf8, 0x18, 0x18, 0x18, 0x18, - 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0xf8, + 0x10, 0x10, 0x10, 0x1f, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, + 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x1f, 0x18, 0x18, 0x18, 0x18, + 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x1f, + 0x1f, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, + 0x10, 0x10, 0x10, 0x1f, 0x1f, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, + 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x1f, 0x1f, 0x18, 0x18, 0x18, + 0x18, 0x18, 0x18, 0x18, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0xf0, + 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, + 0x10, 0x10, 0x10, 0xf0, 0xf0, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, + 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0xf8, 0x10, 0x10, 0x10, 0x10, + 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0xf8, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, - 0x18, 0x18, 0x18, 0xf8, 0xf8, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, - 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0xf8, 0xf8, 0x18, 0x18, 0x18, - 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0xf8, - 0xf8, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0xff, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xf0, 0x10, 0x10, 0x10, + 0x18, 0x18, 0x18, 0xf8, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, + 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0xf8, 0xf8, 0x10, 0x10, 0x10, + 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0xf8, + 0xf8, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, + 0x18, 0x18, 0x18, 0xf8, 0xf8, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, - 0x1f, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0xff, 0xff, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0x18, 0x18, 0x18, 0x18, + 0xf0, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0xff, 0x1f, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0x10, 0x10, 0x10, + 0x10, 0x10, 0x10, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, + 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0xff, 0xf8, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0x1f, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, - 0xf8, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0xff, 0x1f, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0x18, 0x18, 0x18, - 0x18, 0x18, 0x18, 0x18, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0xff, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x10, 0x10, 0x10, - 0x10, 0x10, 0x10, 0xff, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0xff, 0x1f, 0x00, 0x00, 0x00, + 0xff, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x10, 0x10, 0x10, 0x10, + 0x10, 0x10, 0x10, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0xff, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0xff, - 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x18, 0x18, 0x18, - 0x18, 0x18, 0x18, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0xff, 0xf8, 0x00, 0x00, 0x00, + 0x1f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x10, 0x10, 0x10, + 0x10, 0x10, 0x10, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0xff, - 0x1f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x18, 0x18, 0x18, - 0x18, 0x18, 0x18, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0xff, 0x10, 0x10, 0x10, 0x10, - 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0xff, - 0xf0, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, - 0x10, 0x10, 0x10, 0xff, 0x1f, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, - 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0xff, 0xff, 0x10, 0x10, 0x10, - 0x10, 0x10, 0x10, 0x10, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0xff, + 0xf8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x18, 0x18, 0x18, + 0x18, 0x18, 0x18, 0xff, 0x1f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0xff, 0xff, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0xff, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, - 0x10, 0x10, 0x10, 0xff, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, - 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0xff, 0x18, 0x18, 0x18, 0x18, + 0x10, 0x10, 0x10, 0xff, 0xf0, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, + 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0xff, 0x1f, 0x10, 0x10, 0x10, + 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0xff, + 0xff, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x18, 0x18, 0x18, 0x18, + 0x18, 0x18, 0x18, 0xff, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, + 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0xff, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0xff, - 0xf0, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x18, 0x18, 0x18, 0x18, - 0x18, 0x18, 0x18, 0xff, 0x1f, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, - 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0xff, 0xf8, 0x18, 0x18, 0x18, - 0x18, 0x18, 0x18, 0x18, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0xff, - 0x1f, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, - 0x18, 0x18, 0x18, 0xff, 0xff, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, - 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0xff, 0xff, 0x18, 0x18, 0x18, + 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, + 0x18, 0x18, 0x18, 0xff, 0xf0, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, + 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0xff, 0x1f, 0x10, 0x10, 0x10, + 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0xff, + 0xf8, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x10, 0x10, 0x10, 0x10, + 0x10, 0x10, 0x10, 0xff, 0x1f, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, + 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0xff, 0xff, 0x10, 0x10, 0x10, + 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0xff, + 0xff, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, + 0x18, 0x18, 0x18, 0xff, 0xf8, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, + 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0xff, 0x1f, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0xff, - 0xf8, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, - 0x18, 0x18, 0x18, 0xff, 0x1f, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, - 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0xff, 0xff, 0x18, 0x18, 0x18, - 0x18, 0x18, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0x00, - 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x28, 0x28, 0x28, 0x28, - 0x28, 0x28, 0x28, 0x28, 0x28, 0x28, 0x28, 0x28, 0x28, 0x28, 0x28, 0x28, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1f, 0x10, 0x1f, 0x10, 0x10, 0x10, - 0x10, 0x10, 0x10, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3f, - 0x28, 0x28, 0x28, 0x28, 0x28, 0x28, 0x28, 0x28, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x3f, 0x20, 0x2f, 0x28, 0x28, 0x28, 0x28, 0x28, 0x28, 0x28, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf0, 0x10, 0xf0, 0x10, 0x10, 0x10, - 0x10, 0x10, 0x10, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf8, - 0x28, 0x28, 0x28, 0x28, 0x28, 0x28, 0x28, 0x28, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0xf8, 0x08, 0xe8, 0x28, 0x28, 0x28, 0x28, 0x28, 0x28, 0x28, - 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x1f, 0x10, 0x1f, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x28, 0x28, 0x28, 0x28, 0x28, 0x28, 0x28, 0x3f, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x28, 0x28, 0x28, 0x28, - 0x28, 0x28, 0x2f, 0x20, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0xf0, 0x10, 0xf0, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x28, 0x28, 0x28, 0x28, 0x28, 0x28, 0x28, 0xf8, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x28, 0x28, 0x28, 0x28, - 0x28, 0x28, 0xe8, 0x08, 0xf8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x1f, 0x10, 0x1f, 0x10, 0x10, 0x10, - 0x10, 0x10, 0x10, 0x10, 0x28, 0x28, 0x28, 0x28, 0x28, 0x28, 0x28, 0x2f, - 0x28, 0x28, 0x28, 0x28, 0x28, 0x28, 0x28, 0x28, 0x28, 0x28, 0x28, 0x28, - 0x28, 0x28, 0x2f, 0x20, 0x2f, 0x28, 0x28, 0x28, 0x28, 0x28, 0x28, 0x28, - 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0xf0, 0x10, 0xf0, 0x10, 0x10, 0x10, - 0x10, 0x10, 0x10, 0x10, 0x28, 0x28, 0x28, 0x28, 0x28, 0x28, 0x28, 0xe8, - 0x28, 0x28, 0x28, 0x28, 0x28, 0x28, 0x28, 0x28, 0x28, 0x28, 0x28, 0x28, - 0x28, 0x28, 0xe8, 0x08, 0xe8, 0x28, 0x28, 0x28, 0x28, 0x28, 0x28, 0x28, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0x00, 0xff, 0x10, 0x10, 0x10, - 0x10, 0x10, 0x10, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, - 0x28, 0x28, 0x28, 0x28, 0x28, 0x28, 0x28, 0x28, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0xff, 0x00, 0xef, 0x28, 0x28, 0x28, 0x28, 0x28, 0x28, 0x28, - 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0xff, 0x00, 0xff, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x28, 0x28, 0x28, 0x28, 0x28, 0x28, 0x28, 0xff, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x28, 0x28, 0x28, 0x28, - 0x28, 0x28, 0xef, 0x00, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0xff, 0x10, 0xff, 0x10, 0x10, 0x10, - 0x10, 0x10, 0x10, 0x10, 0x28, 0x28, 0x28, 0x28, 0x28, 0x28, 0x28, 0xff, + 0xff, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0xff, 0x00, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x28, 0x28, 0x28, 0x28, 0x28, 0x28, 0x28, 0x28, 0x28, 0x28, 0x28, 0x28, - 0x28, 0x28, 0xef, 0x00, 0xef, 0x28, 0x28, 0x28, 0x28, 0x28, 0x28, 0x28, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x28, 0x28, 0x28, 0x28, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1f, 0x10, + 0x1f, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x3f, 0x28, 0x28, 0x28, 0x28, 0x28, 0x28, 0x28, 0x28, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3f, 0x20, 0x2f, 0x28, 0x28, 0x28, + 0x28, 0x28, 0x28, 0x28, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf0, 0x10, + 0xf0, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0xf8, 0x28, 0x28, 0x28, 0x28, 0x28, 0x28, 0x28, 0x28, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf8, 0x08, 0xe8, 0x28, 0x28, 0x28, + 0x28, 0x28, 0x28, 0x28, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x1f, 0x10, + 0x1f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x28, 0x28, 0x28, 0x28, + 0x28, 0x28, 0x28, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x28, 0x28, 0x28, 0x28, 0x28, 0x28, 0x2f, 0x20, 0x3f, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0xf0, 0x10, + 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x28, 0x28, 0x28, 0x28, + 0x28, 0x28, 0x28, 0xf8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x28, 0x28, 0x28, 0x28, 0x28, 0x28, 0xe8, 0x08, 0xf8, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x1f, 0x10, + 0x1f, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x28, 0x28, 0x28, 0x28, + 0x28, 0x28, 0x28, 0x2f, 0x28, 0x28, 0x28, 0x28, 0x28, 0x28, 0x28, 0x28, + 0x28, 0x28, 0x28, 0x28, 0x28, 0x28, 0x2f, 0x20, 0x2f, 0x28, 0x28, 0x28, + 0x28, 0x28, 0x28, 0x28, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0xf0, 0x10, + 0xf0, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x28, 0x28, 0x28, 0x28, + 0x28, 0x28, 0x28, 0xe8, 0x28, 0x28, 0x28, 0x28, 0x28, 0x28, 0x28, 0x28, + 0x28, 0x28, 0x28, 0x28, 0x28, 0x28, 0xe8, 0x08, 0xe8, 0x28, 0x28, 0x28, + 0x28, 0x28, 0x28, 0x28, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0x00, + 0xff, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0xff, 0x28, 0x28, 0x28, 0x28, 0x28, 0x28, 0x28, 0x28, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0x00, 0xef, 0x28, 0x28, 0x28, + 0x28, 0x28, 0x28, 0x28, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0xff, 0x00, + 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x28, 0x28, 0x28, 0x28, + 0x28, 0x28, 0x28, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x28, 0x28, 0x28, 0x28, 0x28, 0x28, 0xef, 0x00, 0xff, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0xff, 0x10, + 0xff, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x28, 0x28, 0x28, 0x28, + 0x28, 0x28, 0x28, 0xff, 0x28, 0x28, 0x28, 0x28, 0x28, 0x28, 0x28, 0x28, + 0x28, 0x28, 0x28, 0x28, 0x28, 0x28, 0xef, 0x00, 0xef, 0x28, 0x28, 0x28, + 0x28, 0x28, 0x28, 0x28, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, - 0xf0, 0xf0, 0xf0, 0xf0, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, - 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x88, 0x22, 0x88, 0x22, + 0xff, 0xff, 0xff, 0xff, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, + 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0x0f, 0x0f, 0x0f, 0x0f, + 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x88, 0x22, 0x88, 0x22, 0x88, 0x22, 0x88, 0x22, 0x88, 0x22, 0x88, 0x22, - 0xaa, 0x55, 0xaa, 0x55, 0xaa, 0x55, 0xaa, 0x55, 0xaa, 0x55, 0xaa, 0x55, - 0xaa, 0x55, 0xaa, 0x55, 0xee, 0xbb, 0xee, 0xbb, 0xee, 0xbb, 0xee, 0xbb, - 0xee, 0xbb, 0xee, 0xbb, 0xee, 0xbb, 0xee, 0xbb, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x3c, 0x3c, 0x3c, 0x3c, 0x3c, 0x3c, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7e, 0x7e, 0x7e, 0x7e, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7e, 0x7e, 0x7e, 0x7e, 0x7e, 0x7e, - 0x7e, 0x7e, 0x7e, 0x7e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x10, 0x10, 0x38, 0x38, 0x7c, 0x7c, 0xfe, 0xfe, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0xc0, 0xf0, 0xfc, 0xff, 0xfc, 0xf0, 0xc0, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfe, 0xfe, 0x7c, 0x7c, - 0x38, 0x38, 0x10, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x03, 0x0f, 0x3f, 0xff, 0x3f, 0x0f, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x10, 0x38, 0x7c, 0xfe, 0x7c, 0x38, 0x10, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x28, 0x44, 0x82, - 0x44, 0x28, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x18, 0x24, 0x24, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xe7, 0xc3, 0xc3, 0xe7, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xe7, 0xdb, - 0xdb, 0xe7, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x7c, 0x82, - 0xaa, 0x82, 0x82, 0xba, 0x92, 0x82, 0x82, 0x7c, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x7c, 0xfe, 0xd6, 0xfe, 0xfe, 0xc6, 0xee, 0xfe, 0xfe, 0x7c, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x10, 0xd6, 0x38, 0xee, - 0x38, 0xd6, 0x10, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x44, - 0x44, 0x44, 0x44, 0x38, 0x10, 0x7c, 0x10, 0x10, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x1e, 0x06, 0x0a, 0x12, 0x38, 0x44, 0x44, 0x44, 0x44, 0x38, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x10, 0x38, 0x7c, 0xfe, 0xfe, - 0x7c, 0x10, 0x10, 0x38, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x38, - 0x38, 0x10, 0x54, 0xfe, 0xfe, 0x54, 0x10, 0x38, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x6c, 0xfe, 0xfe, 0xfe, 0xfe, 0x7c, 0x38, 0x10, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3e, 0x22, 0x3e, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7e, 0x42, - 0x7e, 0x42, 0x42, 0x42, 0x42, 0x42, 0x42, 0x44, 0x80, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x00, 0x18, 0x18, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x66, 0x66, 0x66, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x6c, 0x6c, - 0x6c, 0xfe, 0x6c, 0x6c, 0xfe, 0x6c, 0x6c, 0x6c, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x10, 0x10, 0x7c, 0xd6, 0xd0, 0xd0, 0x7c, 0x16, 0x16, 0xd6, 0x7c, - 0x10, 0x10, 0x00, 0x00, 0x00, 0x00, 0x66, 0xd6, 0x6c, 0x0c, 0x18, 0x18, - 0x30, 0x36, 0x6b, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x6c, - 0x6c, 0x38, 0x76, 0xdc, 0xcc, 0xcc, 0xdc, 0x76, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x18, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0c, 0x18, 0x30, 0x30, 0x30, 0x30, - 0x30, 0x30, 0x18, 0x0c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x18, - 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x18, 0x30, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x6c, 0x38, 0xfe, 0x38, 0x6c, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x18, 0x7e, - 0x18, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x18, 0x30, 0x00, 0x00, 0x00, *** DIFF OUTPUT TRUNCATED AT 1000 LINES *** From owner-svn-src-user@FreeBSD.ORG Sun Nov 22 21:58:07 2009 Return-Path: Delivered-To: svn-src-user@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 4842E1065696; Sun, 22 Nov 2009 21:58:07 +0000 (UTC) (envelope-from dougb@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id 388DC8FC15; Sun, 22 Nov 2009 21:58:07 +0000 (UTC) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.3/8.14.3) with ESMTP id nAMLw7pl031156; Sun, 22 Nov 2009 21:58:07 GMT (envelope-from dougb@svn.freebsd.org) Received: (from dougb@localhost) by svn.freebsd.org (8.14.3/8.14.3/Submit) id nAMLw7tk031154; Sun, 22 Nov 2009 21:58:07 GMT (envelope-from dougb@svn.freebsd.org) Message-Id: <200911222158.nAMLw7tk031154@svn.freebsd.org> From: Doug Barton Date: Sun, 22 Nov 2009 21:58:07 +0000 (UTC) To: src-committers@freebsd.org, svn-src-user@freebsd.org X-SVN-Group: user MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r199681 - user/dougb/portmaster X-BeenThere: svn-src-user@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "SVN commit messages for the experimental " user" src tree" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sun, 22 Nov 2009 21:58:07 -0000 Author: dougb Date: Sun Nov 22 21:58:06 2009 New Revision: 199681 URL: http://svn.freebsd.org/changeset/base/199681 Log: In safe_exit() when deleting build-only packages add a cd before running pkg_delete to avoid it not being able to find its working directory. Remove unneeded spaces from rundeps In the package fetching code only set $packages if it's not already set Modified: user/dougb/portmaster/portmaster Modified: user/dougb/portmaster/portmaster ============================================================================== --- user/dougb/portmaster/portmaster Sun Nov 22 21:53:09 2009 (r199680) +++ user/dougb/portmaster/portmaster Sun Nov 22 21:58:06 2009 (r199681) @@ -196,6 +196,7 @@ safe_exit () { if [ -n "$build_deps_il" ]; then echo "===>>> Deleting installed build-only dependencies" + cd for f in $build_deps_il; do [ -n "$PM_VERBOSE" ] && echo " $f" pkg_delete -f $f @@ -1678,7 +1679,6 @@ dependency_check () { if [ -z "$RECURSE_THOROUGH" ]; then rundeps=`pm_make run-depends-list | sort -u` - rundeps=" $rundeps " for dep in $d_port_list; do case "$rundeps" in @@ -2575,7 +2575,8 @@ else # XXX fetch # Duplicated from pkg_init() - packages=`pm_make -f/usr/share/mk/bsd.port.mk -V PACKAGES` + [ -z "$packages" ] && + packages=`pm_make -f/usr/share/mk/bsd.port.mk -V PACKAGES` [ -n "$packages" ] || fail 'The value of PACKAGES cannot be empty' ppd=$packages/portmaster-download From owner-svn-src-user@FreeBSD.ORG Mon Nov 23 01:53:27 2009 Return-Path: Delivered-To: svn-src-user@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id CBD3F1065672; Mon, 23 Nov 2009 01:53:27 +0000 (UTC) (envelope-from kmacy@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id B50BD8FC1B; Mon, 23 Nov 2009 01:53:27 +0000 (UTC) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.3/8.14.3) with ESMTP id nAN1rRbt036058; Mon, 23 Nov 2009 01:53:27 GMT (envelope-from kmacy@svn.freebsd.org) Received: (from kmacy@localhost) by svn.freebsd.org (8.14.3/8.14.3/Submit) id nAN1rRtm036056; Mon, 23 Nov 2009 01:53:27 GMT (envelope-from kmacy@svn.freebsd.org) Message-Id: <200911230153.nAN1rRtm036056@svn.freebsd.org> From: Kip Macy Date: Mon, 23 Nov 2009 01:53:27 +0000 (UTC) To: src-committers@freebsd.org, svn-src-user@freebsd.org X-SVN-Group: user MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r199686 - user/kmacy/releng_8_fcs_buf/sys/cddl/contrib/opensolaris/uts/common/fs/zfs X-BeenThere: svn-src-user@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "SVN commit messages for the experimental " user" src tree" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 23 Nov 2009 01:53:27 -0000 Author: kmacy Date: Mon Nov 23 01:53:27 2009 New Revision: 199686 URL: http://svn.freebsd.org/changeset/base/199686 Log: set vnode type so that vm object creation will succeed Modified: user/kmacy/releng_8_fcs_buf/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/vdev.c Modified: user/kmacy/releng_8_fcs_buf/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/vdev.c ============================================================================== --- user/kmacy/releng_8_fcs_buf/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/vdev.c Mon Nov 23 01:23:03 2009 (r199685) +++ user/kmacy/releng_8_fcs_buf/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/vdev.c Mon Nov 23 01:53:27 2009 (r199686) @@ -1070,13 +1070,17 @@ vdev_open(vdev_t *vd) struct vnode *vp; error = getnewvnode("zpool" , NULL, &dead_vnodeops, &vp); + KASSERT(error == 0, ("unhandled error in vdev_open")); if (error != 0) return (error); vn_lock(vp, LK_EXCLUSIVE | LK_RETRY); + vp->v_type = VREG; vnode_create_vobject(vp, 512, curthread); vd->vdev_vnode = vp; VOP_UNLOCK(vp, 0); + KASSERT(vp->v_object != NULL, ("vnode_create_vobject failed")); + } /* * If a leaf vdev has a DTL, and seems healthy, then kick off a From owner-svn-src-user@FreeBSD.ORG Mon Nov 23 01:59:13 2009 Return-Path: Delivered-To: svn-src-user@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 090CC106566B; Mon, 23 Nov 2009 01:59:13 +0000 (UTC) (envelope-from kmacy@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id EA6B38FC12; Mon, 23 Nov 2009 01:59:12 +0000 (UTC) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.3/8.14.3) with ESMTP id nAN1xCUS036196; Mon, 23 Nov 2009 01:59:12 GMT (envelope-from kmacy@svn.freebsd.org) Received: (from kmacy@localhost) by svn.freebsd.org (8.14.3/8.14.3/Submit) id nAN1xCoK036193; Mon, 23 Nov 2009 01:59:12 GMT (envelope-from kmacy@svn.freebsd.org) Message-Id: <200911230159.nAN1xCoK036193@svn.freebsd.org> From: Kip Macy Date: Mon, 23 Nov 2009 01:59:12 +0000 (UTC) To: src-committers@freebsd.org, svn-src-user@freebsd.org X-SVN-Group: user MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r199687 - in user/kmacy/releng_8_fcs_buf/sys/cddl/contrib/opensolaris/uts/common/fs/zfs: . sys X-BeenThere: svn-src-user@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "SVN commit messages for the experimental " user" src tree" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 23 Nov 2009 01:59:13 -0000 Author: kmacy Date: Mon Nov 23 01:59:12 2009 New Revision: 199687 URL: http://svn.freebsd.org/changeset/base/199687 Log: - extend arc_binval to invalidate pages in the vm object - change arc_bgetvp to arc_bcache to cache freed buffers and their pages in the vm object - close race between getblk and brelvp by passing GB_LOCK_NOWAIT to getblk Modified: user/kmacy/releng_8_fcs_buf/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/arc.c user/kmacy/releng_8_fcs_buf/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/arc.h Modified: user/kmacy/releng_8_fcs_buf/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/arc.c ============================================================================== --- user/kmacy/releng_8_fcs_buf/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/arc.c Mon Nov 23 01:53:27 2009 (r199686) +++ user/kmacy/releng_8_fcs_buf/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/arc.c Mon Nov 23 01:59:12 2009 (r199687) @@ -1300,12 +1300,16 @@ arc_buf_add_ref(arc_buf_t *buf, void* ta } void -arc_binval(spa_t *spa, dva_t *dva) +arc_binval(spa_t *spa, dva_t *dva, uint64_t size) { uint64_t blkno; struct vnode *vp; struct bufobj *bo; struct buf *bp; + vm_pindex_t start, end; + vm_object_t object; + vm_page_t m; + int i; if (zfs_page_cache_disable) return; @@ -1328,18 +1332,57 @@ arc_binval(spa_t *spa, dva_t *dva) bp->b_flags |= B_INVAL; bp->b_birth = 0; brelse(bp); - } else + } else { BO_UNLOCK(bo); + start = OFF_TO_IDX((blkno << 9)); + end = start + OFF_TO_IDX(size); + object = vp->v_object; + + if (size == 0) + return; + VM_OBJECT_LOCK(object); + vm_page_cache_free(object, start, end); + for (i = 0; i < OFF_TO_IDX(size); i++) { + if ((m = vm_page_lookup(object, start + i)) != NULL) + vm_page_free(m); + } + VM_OBJECT_UNLOCK(object); + } } static void -arc_bgetvp(arc_buf_t *buf) +arc_pcache(struct vnode *vp, struct buf *bp, uint64_t blkno) +{ + vm_pindex_t start = OFF_TO_IDX((blkno << 9)); + vm_object_t object = vp->v_object; + struct bufobj *bo = &vp->v_bufobj; + vm_page_t m; + int i; + + VM_OBJECT_LOCK(object); + vm_page_cache_free(object, start, start + bp->b_npages); + for (i = 0; i < bp->b_npages; i++) { + if ((m = vm_page_lookup(object, start + i)) != NULL) + vm_page_free(m); + m = bp->b_pages[i]; + vm_page_insert(m, object, start + i); + } + VM_OBJECT_UNLOCK(object); + BO_LOCK(bo); + bgetvp(vp, bp); + BO_UNLOCK(bo); + bp->b_flags |= B_VMIO; +} + +static void +arc_bcache(arc_buf_t *buf) { uint64_t blkno = buf->b_hdr->b_dva.dva_word[1] & ~(1UL<<63); struct buf *newbp, *bp = buf->b_bp; struct vnode *vp = spa_get_vnode(buf->b_hdr->b_spa); struct bufobj *bo = &vp->v_bufobj; arc_buf_hdr_t *hdr = buf->b_hdr; + int cachebuf; if (zfs_page_cache_disable) return; @@ -1348,17 +1391,19 @@ arc_bgetvp(arc_buf_t *buf) return; newbp = buf->b_bp; - newbp->b_offset = newbp->b_birth = hdr->b_birth; + newbp->b_birth = hdr->b_birth; newbp->b_blkno = newbp->b_lblkno = blkno; + newbp->b_offset = (blkno << 9); + cachebuf = ((hdr->b_datacnt == 1) && + !(hdr->b_flags & ARC_IO_ERROR) && + ((newbp->b_flags & (B_INVAL|B_CACHE)) == B_CACHE)); BO_LOCK(bo); bp = gbincore(bo, blkno); if (bp != NULL) { - /* - * XXX we have a race with getblk here - */ BUF_LOCK(bp, LK_EXCLUSIVE | LK_INTERLOCK, BO_MTX(bo)); bremfree(bp); + /* * buffer is not valid or is older */ @@ -1368,20 +1413,11 @@ arc_bgetvp(arc_buf_t *buf) bp->b_birth = 0; } brelse(bp); - - if ((hdr->b_datacnt == 1) && - !(hdr->b_flags & ARC_IO_ERROR) && - (newbp->b_flags & (B_INVAL|B_CACHE)) == B_CACHE) { - BO_LOCK(bo); - bgetvp(vp, newbp); - BO_UNLOCK(bo); - } - } else if ((hdr->b_datacnt == 1) && - !(hdr->b_flags & ARC_IO_ERROR) && - (newbp->b_flags & (B_INVAL|B_CACHE)) == B_CACHE) { - bgetvp(vp, newbp); - BO_UNLOCK(bo); - } else + if (cachebuf) + arc_pcache(vp, newbp, blkno); + } else if (cachebuf) + arc_pcache(vp, newbp, blkno); + else BO_UNLOCK(bo); } @@ -1397,7 +1433,9 @@ arc_getblk(arc_buf_t *buf) arc_buf_t *tbuf; struct vnode *vp; struct bufobj *bo; - int flags = 0; + int i, flags = 0; + vm_pindex_t start, end; + vm_object_t object; if (type == ARC_BUFC_METADATA) { arc_space_consume(size); @@ -1419,11 +1457,26 @@ arc_getblk(arc_buf_t *buf) data = newbp->b_data; buf->b_hdr->b_flags &= ~ARC_BUF_CLONING; } else { - newbp = getblk(vp, blkno, size, 0, 0, flags | GB_NOCREAT); + newbp = getblk(vp, blkno, size, 0, 0, flags | GB_LOCK_NOWAIT); if (newbp == NULL) newbp = geteblk(size, flags); - else + else { + vm_object_t object = vp->v_object; + vm_page_t m; + + /* + * Strip the buffers pages from the object + */ + VM_OBJECT_LOCK(object); + vm_page_lock_queues(); + for (i = 0; i < newbp->b_npages; i++){ + m = newbp->b_pages[i]; + vm_page_remove(m); + } + vm_page_unlock_queues(); + VM_OBJECT_UNLOCK(object); brelvp(newbp); + } data = newbp->b_data; } @@ -1453,11 +1506,20 @@ arc_brelse(arc_buf_t *buf, void *data, s return; } - arc_bgetvp(buf); - CTR4(KTR_SPARE2, "arc_brelse() bp=%p flags %X" - " size %ld blkno=%ld", - bp, bp->b_flags, size, bp->b_blkno); + arc_bcache(buf); + + if (bp->b_vp == NULL) + KASSERT((bp->b_flags & B_VMIO) == 0, ("no vp but VMIO set!")); + else + CTR4(KTR_SPARE2, "arc_brelse() bp=%p flags %X" + " size %ld blkno=%ld", + bp, bp->b_flags, size, bp->b_blkno); + + /* + * need to log path through here to determine why we're not ending up on the inactive queue + * + */ brelse(bp); } Modified: user/kmacy/releng_8_fcs_buf/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/arc.h ============================================================================== --- user/kmacy/releng_8_fcs_buf/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/arc.h Mon Nov 23 01:53:27 2009 (r199686) +++ user/kmacy/releng_8_fcs_buf/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/arc.h Mon Nov 23 01:59:12 2009 (r199687) @@ -112,7 +112,7 @@ int arc_tryread(spa_t *spa, blkptr_t *bp void arc_set_callback(arc_buf_t *buf, arc_evict_func_t *func, void *private); int arc_buf_evict(arc_buf_t *buf); -void arc_binval(spa_t *spa, dva_t *dva); +void arc_binval(spa_t *spa, dva_t *dva, uint64_t size); void arc_flush(spa_t *spa); void arc_tempreserve_clear(uint64_t reserve); int arc_tempreserve_space(uint64_t reserve, uint64_t txg); From owner-svn-src-user@FreeBSD.ORG Mon Nov 23 03:44:26 2009 Return-Path: Delivered-To: svn-src-user@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id F38C9106568B; Mon, 23 Nov 2009 03:44:25 +0000 (UTC) (envelope-from kmacy@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id E2BE78FC12; Mon, 23 Nov 2009 03:44:25 +0000 (UTC) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.3/8.14.3) with ESMTP id nAN3iPtN039359; Mon, 23 Nov 2009 03:44:25 GMT (envelope-from kmacy@svn.freebsd.org) Received: (from kmacy@localhost) by svn.freebsd.org (8.14.3/8.14.3/Submit) id nAN3iP13039358; Mon, 23 Nov 2009 03:44:25 GMT (envelope-from kmacy@svn.freebsd.org) Message-Id: <200911230344.nAN3iP13039358@svn.freebsd.org> From: Kip Macy Date: Mon, 23 Nov 2009 03:44:25 +0000 (UTC) To: src-committers@freebsd.org, svn-src-user@freebsd.org X-SVN-Group: user MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r199688 - user/kmacy/releng_8_fcs_buf/sys/cddl/contrib/opensolaris/uts/common/fs/zfs X-BeenThere: svn-src-user@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "SVN commit messages for the experimental " user" src tree" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 23 Nov 2009 03:44:26 -0000 Author: kmacy Date: Mon Nov 23 03:44:25 2009 New Revision: 199688 URL: http://svn.freebsd.org/changeset/base/199688 Log: don't recursively lock bufobj Modified: user/kmacy/releng_8_fcs_buf/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/arc.c Modified: user/kmacy/releng_8_fcs_buf/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/arc.c ============================================================================== --- user/kmacy/releng_8_fcs_buf/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/arc.c Mon Nov 23 01:59:12 2009 (r199687) +++ user/kmacy/releng_8_fcs_buf/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/arc.c Mon Nov 23 03:44:25 2009 (r199688) @@ -1351,7 +1351,7 @@ arc_binval(spa_t *spa, dva_t *dva, uint6 } static void -arc_pcache(struct vnode *vp, struct buf *bp, uint64_t blkno) +arc_pcache(struct vnode *vp, struct buf *bp, uint64_t blkno, int lockneeded) { vm_pindex_t start = OFF_TO_IDX((blkno << 9)); vm_object_t object = vp->v_object; @@ -1368,7 +1368,8 @@ arc_pcache(struct vnode *vp, struct buf vm_page_insert(m, object, start + i); } VM_OBJECT_UNLOCK(object); - BO_LOCK(bo); + if (lockneeded) + BO_LOCK(bo); bgetvp(vp, bp); BO_UNLOCK(bo); bp->b_flags |= B_VMIO; @@ -1414,9 +1415,9 @@ arc_bcache(arc_buf_t *buf) } brelse(bp); if (cachebuf) - arc_pcache(vp, newbp, blkno); + arc_pcache(vp, newbp, blkno, TRUE); } else if (cachebuf) - arc_pcache(vp, newbp, blkno); + arc_pcache(vp, newbp, blkno, FALSE); else BO_UNLOCK(bo); } From owner-svn-src-user@FreeBSD.ORG Mon Nov 23 04:36:55 2009 Return-Path: Delivered-To: svn-src-user@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id EC06F106566C; Mon, 23 Nov 2009 04:36:55 +0000 (UTC) (envelope-from kmacy@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id DB5DD8FC0A; Mon, 23 Nov 2009 04:36:55 +0000 (UTC) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.3/8.14.3) with ESMTP id nAN4ashL040366; Mon, 23 Nov 2009 04:36:54 GMT (envelope-from kmacy@svn.freebsd.org) Received: (from kmacy@localhost) by svn.freebsd.org (8.14.3/8.14.3/Submit) id nAN4asSZ040364; Mon, 23 Nov 2009 04:36:54 GMT (envelope-from kmacy@svn.freebsd.org) Message-Id: <200911230436.nAN4asSZ040364@svn.freebsd.org> From: Kip Macy Date: Mon, 23 Nov 2009 04:36:54 +0000 (UTC) To: src-committers@freebsd.org, svn-src-user@freebsd.org X-SVN-Group: user MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r199689 - user/kmacy/releng_8_fcs_buf/sys/cddl/contrib/opensolaris/uts/common/fs/zfs X-BeenThere: svn-src-user@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "SVN commit messages for the experimental " user" src tree" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 23 Nov 2009 04:36:56 -0000 Author: kmacy Date: Mon Nov 23 04:36:54 2009 New Revision: 199689 URL: http://svn.freebsd.org/changeset/base/199689 Log: - use vm_object_page_remove to remove a range of pages - clear vmio on getblk'd buffer Modified: user/kmacy/releng_8_fcs_buf/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/arc.c Modified: user/kmacy/releng_8_fcs_buf/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/arc.c ============================================================================== --- user/kmacy/releng_8_fcs_buf/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/arc.c Mon Nov 23 03:44:25 2009 (r199688) +++ user/kmacy/releng_8_fcs_buf/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/arc.c Mon Nov 23 04:36:54 2009 (r199689) @@ -1342,10 +1342,7 @@ arc_binval(spa_t *spa, dva_t *dva, uint6 return; VM_OBJECT_LOCK(object); vm_page_cache_free(object, start, end); - for (i = 0; i < OFF_TO_IDX(size); i++) { - if ((m = vm_page_lookup(object, start + i)) != NULL) - vm_page_free(m); - } + vm_object_page_remove(object, start, end, FALSE); VM_OBJECT_UNLOCK(object); } } @@ -1361,9 +1358,8 @@ arc_pcache(struct vnode *vp, struct buf VM_OBJECT_LOCK(object); vm_page_cache_free(object, start, start + bp->b_npages); + vm_object_page_remove(object, start, start + bp->b_npages, FALSE); for (i = 0; i < bp->b_npages; i++) { - if ((m = vm_page_lookup(object, start + i)) != NULL) - vm_page_free(m); m = bp->b_pages[i]; vm_page_insert(m, object, start + i); } @@ -1477,6 +1473,7 @@ arc_getblk(arc_buf_t *buf) vm_page_unlock_queues(); VM_OBJECT_UNLOCK(object); brelvp(newbp); + newbp->b_flags &= ~B_VMIO; } data = newbp->b_data; } From owner-svn-src-user@FreeBSD.ORG Mon Nov 23 05:16:36 2009 Return-Path: Delivered-To: svn-src-user@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id F284E106566B; Mon, 23 Nov 2009 05:16:35 +0000 (UTC) (envelope-from kmacy@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id E1BB88FC08; Mon, 23 Nov 2009 05:16:35 +0000 (UTC) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.3/8.14.3) with ESMTP id nAN5GZ2w041179; Mon, 23 Nov 2009 05:16:35 GMT (envelope-from kmacy@svn.freebsd.org) Received: (from kmacy@localhost) by svn.freebsd.org (8.14.3/8.14.3/Submit) id nAN5GZ1a041177; Mon, 23 Nov 2009 05:16:35 GMT (envelope-from kmacy@svn.freebsd.org) Message-Id: <200911230516.nAN5GZ1a041177@svn.freebsd.org> From: Kip Macy Date: Mon, 23 Nov 2009 05:16:35 +0000 (UTC) To: src-committers@freebsd.org, svn-src-user@freebsd.org X-SVN-Group: user MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r199690 - user/kmacy/releng_8_fcs_buf/sys/cddl/contrib/opensolaris/uts/common/fs/zfs X-BeenThere: svn-src-user@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "SVN commit messages for the experimental " user" src tree" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 23 Nov 2009 05:16:36 -0000 Author: kmacy Date: Mon Nov 23 05:16:35 2009 New Revision: 199690 URL: http://svn.freebsd.org/changeset/base/199690 Log: - move bgetvp to start of arc_pcache - don't getblk on 0 - assert that newbp's pages have been removed from vp's object Modified: user/kmacy/releng_8_fcs_buf/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/arc.c Modified: user/kmacy/releng_8_fcs_buf/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/arc.c ============================================================================== --- user/kmacy/releng_8_fcs_buf/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/arc.c Mon Nov 23 04:36:54 2009 (r199689) +++ user/kmacy/releng_8_fcs_buf/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/arc.c Mon Nov 23 05:16:35 2009 (r199690) @@ -1356,6 +1356,11 @@ arc_pcache(struct vnode *vp, struct buf vm_page_t m; int i; + if (lockneeded) + BO_LOCK(bo); + bgetvp(vp, bp); + BO_UNLOCK(bo); + VM_OBJECT_LOCK(object); vm_page_cache_free(object, start, start + bp->b_npages); vm_object_page_remove(object, start, start + bp->b_npages, FALSE); @@ -1364,10 +1369,6 @@ arc_pcache(struct vnode *vp, struct buf vm_page_insert(m, object, start + i); } VM_OBJECT_UNLOCK(object); - if (lockneeded) - BO_LOCK(bo); - bgetvp(vp, bp); - BO_UNLOCK(bo); bp->b_flags |= B_VMIO; } @@ -1449,7 +1450,8 @@ arc_getblk(arc_buf_t *buf) if (size < PAGE_SIZE) { data = zio_buf_alloc(size); } else if ((buf->b_hdr->b_flags & ARC_BUF_CLONING) || - BUF_EMPTY(buf->b_hdr)) { + BUF_EMPTY(buf->b_hdr) || + (blkno == 0)) { newbp = geteblk(size, flags); data = newbp->b_data; buf->b_hdr->b_flags &= ~ARC_BUF_CLONING; @@ -1487,8 +1489,11 @@ arc_getblk(arc_buf_t *buf) newbp, newbp->b_flags); #endif - if (newbp != NULL) + if (newbp != NULL) { BUF_KERNPROC(newbp); + KASSERT(newbp->b_pages[0]->object == NULL, + "newbp page not removed"); + } buf->b_bp = newbp; buf->b_data = data; } From owner-svn-src-user@FreeBSD.ORG Mon Nov 23 05:47:54 2009 Return-Path: Delivered-To: svn-src-user@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 769BE1065679; Mon, 23 Nov 2009 05:47:54 +0000 (UTC) (envelope-from kmacy@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id 4C98B8FC17; Mon, 23 Nov 2009 05:47:54 +0000 (UTC) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.3/8.14.3) with ESMTP id nAN5lreI041819; Mon, 23 Nov 2009 05:47:53 GMT (envelope-from kmacy@svn.freebsd.org) Received: (from kmacy@localhost) by svn.freebsd.org (8.14.3/8.14.3/Submit) id nAN5lrfP041818; Mon, 23 Nov 2009 05:47:53 GMT (envelope-from kmacy@svn.freebsd.org) Message-Id: <200911230547.nAN5lrfP041818@svn.freebsd.org> From: Kip Macy Date: Mon, 23 Nov 2009 05:47:53 +0000 (UTC) To: src-committers@freebsd.org, svn-src-user@freebsd.org X-SVN-Group: user MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r199691 - user/kmacy/releng_8_fcs_buf/sys/cddl/contrib/opensolaris/uts/common/fs/zfs X-BeenThere: svn-src-user@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "SVN commit messages for the experimental " user" src tree" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 23 Nov 2009 05:47:54 -0000 Author: kmacy Date: Mon Nov 23 05:47:53 2009 New Revision: 199691 URL: http://svn.freebsd.org/changeset/base/199691 Log: assert that a buffers pages are not attached to the object Modified: user/kmacy/releng_8_fcs_buf/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/arc.c Modified: user/kmacy/releng_8_fcs_buf/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/arc.c ============================================================================== --- user/kmacy/releng_8_fcs_buf/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/arc.c Mon Nov 23 05:16:35 2009 (r199690) +++ user/kmacy/releng_8_fcs_buf/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/arc.c Mon Nov 23 05:47:53 2009 (r199691) @@ -1491,24 +1491,37 @@ arc_getblk(arc_buf_t *buf) if (newbp != NULL) { BUF_KERNPROC(newbp); - KASSERT(newbp->b_pages[0]->object == NULL, - "newbp page not removed"); +#ifdef INVARIANTS + for (i = 0; i < newbp->b_npages; i++) + KASSERT(newbp->b_pages[i]->object == NULL, + "newbp page not removed"); +#endif } buf->b_bp = newbp; buf->b_data = data; } -static void +void +arc_brelse(arc_buf_t *buf, void *data, size_t size); + +void arc_brelse(arc_buf_t *buf, void *data, size_t size) { struct buf *bp = buf->b_bp; arc_buf_hdr_t *hdr = buf->b_hdr; - +#ifdef INVARIANTS + int i; +#endif + if (bp == NULL) { zio_buf_free(buf->b_data, size); return; } - +#ifdef INVARIANTS + for (i = 0; i < bp->b_npages; i++) + KASSERT(bp->b_pages[i]->object == NULL, + "newbp page not removed"); +#endif arc_bcache(buf); @@ -1519,10 +1532,6 @@ arc_brelse(arc_buf_t *buf, void *data, s " size %ld blkno=%ld", bp, bp->b_flags, size, bp->b_blkno); - /* - * need to log path through here to determine why we're not ending up on the inactive queue - * - */ brelse(bp); } @@ -2805,6 +2814,12 @@ arc_read_done(zio_t *zio) buf_hash_remove(hdr); freeable = refcount_is_zero(&hdr->b_refcnt); } else if (buf->b_bp != NULL) { +#ifdef INVARIANTS + int i; + for (i = 0; i < buf->b_bp->b_npages; i++) + KASSERT(buf->b_bp->b_pages[i]->object == NULL, + "bp page not removed"); +#endif buf->b_bp->b_flags |= B_CACHE; buf->b_bp->b_flags &= ~B_INVAL; } From owner-svn-src-user@FreeBSD.ORG Mon Nov 23 06:48:56 2009 Return-Path: Delivered-To: svn-src-user@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 140871065670; Mon, 23 Nov 2009 06:48:56 +0000 (UTC) (envelope-from kmacy@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id DDE548FC1D; Mon, 23 Nov 2009 06:48:55 +0000 (UTC) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.3/8.14.3) with ESMTP id nAN6msRE043120; Mon, 23 Nov 2009 06:48:54 GMT (envelope-from kmacy@svn.freebsd.org) Received: (from kmacy@localhost) by svn.freebsd.org (8.14.3/8.14.3/Submit) id nAN6msJI043119; Mon, 23 Nov 2009 06:48:54 GMT (envelope-from kmacy@svn.freebsd.org) Message-Id: <200911230648.nAN6msJI043119@svn.freebsd.org> From: Kip Macy Date: Mon, 23 Nov 2009 06:48:54 +0000 (UTC) To: src-committers@freebsd.org, svn-src-user@freebsd.org X-SVN-Group: user MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r199692 - user/kmacy/releng_8_fcs_buf/sys/cddl/contrib/opensolaris/uts/common/fs/zfs X-BeenThere: svn-src-user@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "SVN commit messages for the experimental " user" src tree" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 23 Nov 2009 06:48:56 -0000 Author: kmacy Date: Mon Nov 23 06:48:54 2009 New Revision: 199692 URL: http://svn.freebsd.org/changeset/base/199692 Log: - always release pages on invalidate - assert that they've been released Modified: user/kmacy/releng_8_fcs_buf/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/arc.c Modified: user/kmacy/releng_8_fcs_buf/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/arc.c ============================================================================== --- user/kmacy/releng_8_fcs_buf/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/arc.c Mon Nov 23 05:47:53 2009 (r199691) +++ user/kmacy/releng_8_fcs_buf/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/arc.c Mon Nov 23 06:48:54 2009 (r199692) @@ -1332,19 +1332,25 @@ arc_binval(spa_t *spa, dva_t *dva, uint6 bp->b_flags |= B_INVAL; bp->b_birth = 0; brelse(bp); - } else { + } else BO_UNLOCK(bo); - start = OFF_TO_IDX((blkno << 9)); - end = start + OFF_TO_IDX(size); - object = vp->v_object; - if (size == 0) - return; - VM_OBJECT_LOCK(object); - vm_page_cache_free(object, start, end); - vm_object_page_remove(object, start, end, FALSE); - VM_OBJECT_UNLOCK(object); + start = OFF_TO_IDX((blkno << 9)); + end = start + OFF_TO_IDX(size); + object = vp->v_object; + + if (size == 0) + return; + VM_OBJECT_LOCK(object); + vm_page_cache_free(object, start, end); + vm_object_page_remove(object, start, end, FALSE); +#ifdef INVARIANTS + for (i = 0; i < OFF_TO_IDX(size); i++) { + KASSERT(vm_page_lookup(object, start + i) == NULL, + ("found page at %ld", start + i)); } +#endif + VM_OBJECT_UNLOCK(object); } static void @@ -1363,13 +1369,11 @@ arc_pcache(struct vnode *vp, struct buf VM_OBJECT_LOCK(object); vm_page_cache_free(object, start, start + bp->b_npages); - vm_object_page_remove(object, start, start + bp->b_npages, FALSE); for (i = 0; i < bp->b_npages; i++) { m = bp->b_pages[i]; vm_page_insert(m, object, start + i); } VM_OBJECT_UNLOCK(object); - bp->b_flags |= B_VMIO; } static void @@ -1417,6 +1421,7 @@ arc_bcache(arc_buf_t *buf) arc_pcache(vp, newbp, blkno, FALSE); else BO_UNLOCK(bo); + } static void @@ -1494,7 +1499,7 @@ arc_getblk(arc_buf_t *buf) #ifdef INVARIANTS for (i = 0; i < newbp->b_npages; i++) KASSERT(newbp->b_pages[i]->object == NULL, - "newbp page not removed"); + ("newbp page not removed")); #endif } buf->b_bp = newbp; @@ -1520,7 +1525,7 @@ arc_brelse(arc_buf_t *buf, void *data, s #ifdef INVARIANTS for (i = 0; i < bp->b_npages; i++) KASSERT(bp->b_pages[i]->object == NULL, - "newbp page not removed"); + ("newbp page not removed")); #endif arc_bcache(buf); @@ -2818,7 +2823,7 @@ arc_read_done(zio_t *zio) int i; for (i = 0; i < buf->b_bp->b_npages; i++) KASSERT(buf->b_bp->b_pages[i]->object == NULL, - "bp page not removed"); + ("bp page not removed")); #endif buf->b_bp->b_flags |= B_CACHE; buf->b_bp->b_flags &= ~B_INVAL; From owner-svn-src-user@FreeBSD.ORG Mon Nov 23 23:28:25 2009 Return-Path: Delivered-To: svn-src-user@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id DEAB21065670; Mon, 23 Nov 2009 23:28:25 +0000 (UTC) (envelope-from kmacy@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id CE8B78FC19; Mon, 23 Nov 2009 23:28:25 +0000 (UTC) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.3/8.14.3) with ESMTP id nANNSPD4084693; Mon, 23 Nov 2009 23:28:25 GMT (envelope-from kmacy@svn.freebsd.org) Received: (from kmacy@localhost) by svn.freebsd.org (8.14.3/8.14.3/Submit) id nANNSPkW084691; Mon, 23 Nov 2009 23:28:25 GMT (envelope-from kmacy@svn.freebsd.org) Message-Id: <200911232328.nANNSPkW084691@svn.freebsd.org> From: Kip Macy Date: Mon, 23 Nov 2009 23:28:25 +0000 (UTC) To: src-committers@freebsd.org, svn-src-user@freebsd.org X-SVN-Group: user MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r199724 - user/kmacy/releng_8_fcs_buf/sys/sys X-BeenThere: svn-src-user@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "SVN commit messages for the experimental " user" src tree" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 23 Nov 2009 23:28:26 -0000 Author: kmacy Date: Mon Nov 23 23:28:25 2009 New Revision: 199724 URL: http://svn.freebsd.org/changeset/base/199724 Log: add flag for marking ZFS buffers to help with logging Modified: user/kmacy/releng_8_fcs_buf/sys/sys/buf.h Modified: user/kmacy/releng_8_fcs_buf/sys/sys/buf.h ============================================================================== --- user/kmacy/releng_8_fcs_buf/sys/sys/buf.h Mon Nov 23 23:23:05 2009 (r199723) +++ user/kmacy/releng_8_fcs_buf/sys/sys/buf.h Mon Nov 23 23:28:25 2009 (r199724) @@ -225,6 +225,8 @@ struct buf { #define B_CLUSTER 0x40000000 /* pagein op, so swap() can count it */ #define B_REMFREE 0x80000000 /* Delayed bremfree */ +#define B_ZFS B_01000000 /* is a ZFS buffer */ + #define PRINT_BUF_FLAGS "\20\40remfree\37cluster\36vmio\35ram\34b27" \ "\33paging\32b25\31b24\30b23\27relbuf\26dirty\25b20" \ "\24b19\23b18\22clusterok\21malloc\20nocache\17b14\16inval" \ From owner-svn-src-user@FreeBSD.ORG Mon Nov 23 23:43:48 2009 Return-Path: Delivered-To: svn-src-user@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 105F3106566B; Mon, 23 Nov 2009 23:43:48 +0000 (UTC) (envelope-from kmacy@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id E8FAA8FC0C; Mon, 23 Nov 2009 23:43:47 +0000 (UTC) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.3/8.14.3) with ESMTP id nANNhlBr085099; Mon, 23 Nov 2009 23:43:47 GMT (envelope-from kmacy@svn.freebsd.org) Received: (from kmacy@localhost) by svn.freebsd.org (8.14.3/8.14.3/Submit) id nANNhlDf085097; Mon, 23 Nov 2009 23:43:47 GMT (envelope-from kmacy@svn.freebsd.org) Message-Id: <200911232343.nANNhlDf085097@svn.freebsd.org> From: Kip Macy Date: Mon, 23 Nov 2009 23:43:47 +0000 (UTC) To: src-committers@freebsd.org, svn-src-user@freebsd.org X-SVN-Group: user MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r199725 - user/kmacy/releng_8_fcs_buf/sys/cddl/contrib/opensolaris/uts/common/fs/zfs X-BeenThere: svn-src-user@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "SVN commit messages for the experimental " user" src tree" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 23 Nov 2009 23:43:48 -0000 Author: kmacy Date: Mon Nov 23 23:43:47 2009 New Revision: 199725 URL: http://svn.freebsd.org/changeset/base/199725 Log: - simplify buffer invalidation - mark buffers for logging purposes Modified: user/kmacy/releng_8_fcs_buf/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/arc.c Modified: user/kmacy/releng_8_fcs_buf/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/arc.c ============================================================================== --- user/kmacy/releng_8_fcs_buf/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/arc.c Mon Nov 23 23:28:25 2009 (r199724) +++ user/kmacy/releng_8_fcs_buf/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/arc.c Mon Nov 23 23:43:47 2009 (r199725) @@ -1314,7 +1314,7 @@ arc_binval(spa_t *spa, dva_t *dva, uint6 if (zfs_page_cache_disable) return; - if (dva == NULL || spa == NULL || blkno == 0) + if (dva == NULL || spa == NULL || blkno == 0 || size == 0) return; blkno = dva->dva_word[1] & ~(1UL<<63); @@ -1324,9 +1324,6 @@ arc_binval(spa_t *spa, dva_t *dva, uint6 BO_LOCK(bo); bp = gbincore(bo, blkno); if (bp != NULL) { - /* - * XXX we have a race with getblk here - */ BUF_LOCK(bp, LK_EXCLUSIVE | LK_INTERLOCK, BO_MTX(bo)); bremfree(bp); bp->b_flags |= B_INVAL; @@ -1339,8 +1336,6 @@ arc_binval(spa_t *spa, dva_t *dva, uint6 end = start + OFF_TO_IDX(size); object = vp->v_object; - if (size == 0) - return; VM_OBJECT_LOCK(object); vm_page_cache_free(object, start, end); vm_object_page_remove(object, start, end, FALSE); @@ -1354,7 +1349,7 @@ arc_binval(spa_t *spa, dva_t *dva, uint6 } static void -arc_pcache(struct vnode *vp, struct buf *bp, uint64_t blkno, int lockneeded) +arc_pcache(struct vnode *vp, struct buf *bp, uint64_t blkno) { vm_pindex_t start = OFF_TO_IDX((blkno << 9)); vm_object_t object = vp->v_object; @@ -1362,18 +1357,17 @@ arc_pcache(struct vnode *vp, struct buf vm_page_t m; int i; - if (lockneeded) - BO_LOCK(bo); + BO_LOCK(bo); bgetvp(vp, bp); BO_UNLOCK(bo); VM_OBJECT_LOCK(object); - vm_page_cache_free(object, start, start + bp->b_npages); for (i = 0; i < bp->b_npages; i++) { m = bp->b_pages[i]; vm_page_insert(m, object, start + i); } VM_OBJECT_UNLOCK(object); + bp->b_flags |= B_VMIO; } static void @@ -1400,27 +1394,9 @@ arc_bcache(arc_buf_t *buf) !(hdr->b_flags & ARC_IO_ERROR) && ((newbp->b_flags & (B_INVAL|B_CACHE)) == B_CACHE)); - BO_LOCK(bo); - bp = gbincore(bo, blkno); - if (bp != NULL) { - BUF_LOCK(bp, LK_EXCLUSIVE | LK_INTERLOCK, BO_MTX(bo)); - bremfree(bp); - - /* - * buffer is not valid or is older - */ - if (((bp->b_flags & (B_CACHE|B_INVAL)) != B_CACHE) || - (bp->b_birth <= hdr->b_birth)) { - bp->b_flags |= B_INVAL; - bp->b_birth = 0; - } - brelse(bp); - if (cachebuf) - arc_pcache(vp, newbp, blkno, TRUE); - } else if (cachebuf) - arc_pcache(vp, newbp, blkno, FALSE); - else - BO_UNLOCK(bo); + arc_binval(hdr->b_spa, &hdr->b_dva, hdr->b_size); + if (cachebuf) + arc_pcache(vp, newbp, blkno); } @@ -1537,6 +1513,7 @@ arc_brelse(arc_buf_t *buf, void *data, s " size %ld blkno=%ld", bp, bp->b_flags, size, bp->b_blkno); + bp->b_flags |= B_ZFS; brelse(bp); } From owner-svn-src-user@FreeBSD.ORG Mon Nov 23 23:45:27 2009 Return-Path: Delivered-To: svn-src-user@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 1D22A106566B; Mon, 23 Nov 2009 23:45:27 +0000 (UTC) (envelope-from kmacy@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id 0CD1C8FC16; Mon, 23 Nov 2009 23:45:27 +0000 (UTC) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.3/8.14.3) with ESMTP id nANNjQ6Y085182; Mon, 23 Nov 2009 23:45:26 GMT (envelope-from kmacy@svn.freebsd.org) Received: (from kmacy@localhost) by svn.freebsd.org (8.14.3/8.14.3/Submit) id nANNjQ4H085180; Mon, 23 Nov 2009 23:45:26 GMT (envelope-from kmacy@svn.freebsd.org) Message-Id: <200911232345.nANNjQ4H085180@svn.freebsd.org> From: Kip Macy Date: Mon, 23 Nov 2009 23:45:26 +0000 (UTC) To: src-committers@freebsd.org, svn-src-user@freebsd.org X-SVN-Group: user MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r199726 - user/kmacy/releng_8_fcs_buf/sys/kern X-BeenThere: svn-src-user@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "SVN commit messages for the experimental " user" src tree" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 23 Nov 2009 23:45:27 -0000 Author: kmacy Date: Mon Nov 23 23:45:26 2009 New Revision: 199726 URL: http://svn.freebsd.org/changeset/base/199726 Log: - clear B_ZFS before finishing brelse Modified: user/kmacy/releng_8_fcs_buf/sys/kern/vfs_bio.c Modified: user/kmacy/releng_8_fcs_buf/sys/kern/vfs_bio.c ============================================================================== --- user/kmacy/releng_8_fcs_buf/sys/kern/vfs_bio.c Mon Nov 23 23:43:47 2009 (r199725) +++ user/kmacy/releng_8_fcs_buf/sys/kern/vfs_bio.c Mon Nov 23 23:45:26 2009 (r199726) @@ -1446,6 +1446,7 @@ brelse(struct buf *bp) bp->b_flags &= ~(B_ASYNC | B_NOCACHE | B_AGE | B_RELBUF | B_DIRECT); if ((bp->b_flags & B_DELWRI) == 0 && (bp->b_xflags & BX_VNDIRTY)) panic("brelse: not dirty"); + bp->b_flags &= ~B_ZFS; /* unlock */ BUF_UNLOCK(bp); } From owner-svn-src-user@FreeBSD.ORG Tue Nov 24 01:44:12 2009 Return-Path: Delivered-To: svn-src-user@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id CCF4F1065676; Tue, 24 Nov 2009 01:44:12 +0000 (UTC) (envelope-from kmacy@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id BD0F08FC13; Tue, 24 Nov 2009 01:44:12 +0000 (UTC) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.3/8.14.3) with ESMTP id nAO1iBTw087694; Tue, 24 Nov 2009 01:44:11 GMT (envelope-from kmacy@svn.freebsd.org) Received: (from kmacy@localhost) by svn.freebsd.org (8.14.3/8.14.3/Submit) id nAO1iB68087692; Tue, 24 Nov 2009 01:44:11 GMT (envelope-from kmacy@svn.freebsd.org) Message-Id: <200911240144.nAO1iB68087692@svn.freebsd.org> From: Kip Macy Date: Tue, 24 Nov 2009 01:44:11 +0000 (UTC) To: src-committers@freebsd.org, svn-src-user@freebsd.org X-SVN-Group: user MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r199728 - user/kmacy/releng_8_fcs_buf/sys/cddl/contrib/opensolaris/uts/common/fs/zfs X-BeenThere: svn-src-user@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "SVN commit messages for the experimental " user" src tree" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 24 Nov 2009 01:44:12 -0000 Author: kmacy Date: Tue Nov 24 01:44:11 2009 New Revision: 199728 URL: http://svn.freebsd.org/changeset/base/199728 Log: don't cache buffers that are not page aligned account for sub-page sizes in invalidation Modified: user/kmacy/releng_8_fcs_buf/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/arc.c Modified: user/kmacy/releng_8_fcs_buf/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/arc.c ============================================================================== --- user/kmacy/releng_8_fcs_buf/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/arc.c Tue Nov 24 01:35:21 2009 (r199727) +++ user/kmacy/releng_8_fcs_buf/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/arc.c Tue Nov 24 01:44:11 2009 (r199728) @@ -1333,7 +1333,7 @@ arc_binval(spa_t *spa, dva_t *dva, uint6 BO_UNLOCK(bo); start = OFF_TO_IDX((blkno << 9)); - end = start + OFF_TO_IDX(size); + end = start + OFF_TO_IDX(size + PAGE_MASK); object = vp->v_object; VM_OBJECT_LOCK(object); @@ -1392,7 +1392,8 @@ arc_bcache(arc_buf_t *buf) newbp->b_offset = (blkno << 9); cachebuf = ((hdr->b_datacnt == 1) && !(hdr->b_flags & ARC_IO_ERROR) && - ((newbp->b_flags & (B_INVAL|B_CACHE)) == B_CACHE)); + ((newbp->b_flags & (B_INVAL|B_CACHE)) == B_CACHE) && + (blkno & 0x7) == 0); arc_binval(hdr->b_spa, &hdr->b_dva, hdr->b_size); if (cachebuf) From owner-svn-src-user@FreeBSD.ORG Tue Nov 24 22:37:04 2009 Return-Path: Delivered-To: svn-src-user@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id B0A0210656A9; Tue, 24 Nov 2009 22:37:04 +0000 (UTC) (envelope-from kmacy@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id 739738FC16; Tue, 24 Nov 2009 22:37:04 +0000 (UTC) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.3/8.14.3) with ESMTP id nAOMb4lt031633; Tue, 24 Nov 2009 22:37:04 GMT (envelope-from kmacy@svn.freebsd.org) Received: (from kmacy@localhost) by svn.freebsd.org (8.14.3/8.14.3/Submit) id nAOMb4S9031631; Tue, 24 Nov 2009 22:37:04 GMT (envelope-from kmacy@svn.freebsd.org) Message-Id: <200911242237.nAOMb4S9031631@svn.freebsd.org> From: Kip Macy Date: Tue, 24 Nov 2009 22:37:04 +0000 (UTC) To: src-committers@freebsd.org, svn-src-user@freebsd.org X-SVN-Group: user MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r199769 - user/kmacy/releng_8_fcs_buf/sys/cddl/contrib/opensolaris/uts/common/fs/zfs X-BeenThere: svn-src-user@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "SVN commit messages for the experimental " user" src tree" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 24 Nov 2009 22:37:04 -0000 Author: kmacy Date: Tue Nov 24 22:37:04 2009 New Revision: 199769 URL: http://svn.freebsd.org/changeset/base/199769 Log: when invalidating - try buffer lookup again if unaligned lookup fails Modified: user/kmacy/releng_8_fcs_buf/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/arc.c Modified: user/kmacy/releng_8_fcs_buf/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/arc.c ============================================================================== --- user/kmacy/releng_8_fcs_buf/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/arc.c Tue Nov 24 22:13:06 2009 (r199768) +++ user/kmacy/releng_8_fcs_buf/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/arc.c Tue Nov 24 22:37:04 2009 (r199769) @@ -1302,7 +1302,7 @@ arc_buf_add_ref(arc_buf_t *buf, void* ta void arc_binval(spa_t *spa, dva_t *dva, uint64_t size) { - uint64_t blkno; + uint64_t blkno, blkno_lookup; struct vnode *vp; struct bufobj *bo; struct buf *bp; @@ -1317,22 +1317,26 @@ arc_binval(spa_t *spa, dva_t *dva, uint6 if (dva == NULL || spa == NULL || blkno == 0 || size == 0) return; - blkno = dva->dva_word[1] & ~(1UL<<63); + blkno_lookup = blkno = dva->dva_word[1] & ~(1UL<<63); vp = spa_get_vnode(spa); bo = &vp->v_bufobj; BO_LOCK(bo); - bp = gbincore(bo, blkno); +retry: + bp = gbincore(bo, blkno_lookup); if (bp != NULL) { BUF_LOCK(bp, LK_EXCLUSIVE | LK_INTERLOCK, BO_MTX(bo)); bremfree(bp); bp->b_flags |= B_INVAL; bp->b_birth = 0; brelse(bp); + } else if (blkno_lookup & 0x7) { + blkno_lookup &= ~0x7; + goto retry; } else BO_UNLOCK(bo); - start = OFF_TO_IDX((blkno << 9)); + start = OFF_TO_IDX((blkno_lookup << 9)); end = start + OFF_TO_IDX(size + PAGE_MASK); object = vp->v_object; @@ -1342,7 +1346,8 @@ arc_binval(spa_t *spa, dva_t *dva, uint6 #ifdef INVARIANTS for (i = 0; i < OFF_TO_IDX(size); i++) { KASSERT(vm_page_lookup(object, start + i) == NULL, - ("found page at %ld", start + i)); + ("found page at %ld blkno %ld blkno_lookup %ld", + start + i, blkno, blkno_lookup)); } #endif VM_OBJECT_UNLOCK(object); From owner-svn-src-user@FreeBSD.ORG Wed Nov 25 02:00:10 2009 Return-Path: Delivered-To: svn-src-user@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 314EE106566C; Wed, 25 Nov 2009 02:00:10 +0000 (UTC) (envelope-from kmacy@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id 077218FC1F; Wed, 25 Nov 2009 02:00:10 +0000 (UTC) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.3/8.14.3) with ESMTP id nAP209Pm035887; Wed, 25 Nov 2009 02:00:09 GMT (envelope-from kmacy@svn.freebsd.org) Received: (from kmacy@localhost) by svn.freebsd.org (8.14.3/8.14.3/Submit) id nAP209Xd035870; Wed, 25 Nov 2009 02:00:09 GMT (envelope-from kmacy@svn.freebsd.org) Message-Id: <200911250200.nAP209Xd035870@svn.freebsd.org> From: Kip Macy Date: Wed, 25 Nov 2009 02:00:09 +0000 (UTC) To: src-committers@freebsd.org, svn-src-user@freebsd.org X-SVN-Group: user MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r199775 - user/kmacy/releng_8_fcs_buf_xen X-BeenThere: svn-src-user@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "SVN commit messages for the experimental " user" src tree" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 25 Nov 2009 02:00:10 -0000 Author: kmacy Date: Wed Nov 25 02:00:09 2009 New Revision: 199775 URL: http://svn.freebsd.org/changeset/base/199775 Log: create update 8 branch for debugging ZFS on Xen Added: - copied from r199774, stable/8/ Directory Properties: user/kmacy/releng_8_fcs_buf_xen/ (props changed) From owner-svn-src-user@FreeBSD.ORG Wed Nov 25 02:10:07 2009 Return-Path: Delivered-To: svn-src-user@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id CBA5C1065670; Wed, 25 Nov 2009 02:10:07 +0000 (UTC) (envelope-from kmacy@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id B7CD78FC13; Wed, 25 Nov 2009 02:10:07 +0000 (UTC) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.3/8.14.3) with ESMTP id nAP2A7bI036139; Wed, 25 Nov 2009 02:10:07 GMT (envelope-from kmacy@svn.freebsd.org) Received: (from kmacy@localhost) by svn.freebsd.org (8.14.3/8.14.3/Submit) id nAP2A7Ld036126; Wed, 25 Nov 2009 02:10:07 GMT (envelope-from kmacy@svn.freebsd.org) Message-Id: <200911250210.nAP2A7Ld036126@svn.freebsd.org> From: Kip Macy Date: Wed, 25 Nov 2009 02:10:07 +0000 (UTC) To: src-committers@freebsd.org, svn-src-user@freebsd.org X-SVN-Group: user MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r199776 - in user/kmacy/releng_8_fcs_buf_xen: cddl/contrib/opensolaris/cmd/ztest cddl/contrib/opensolaris/lib/libzpool/common/sys sys/amd64/amd64 sys/amd64/include sys/cddl/compat/opens... X-BeenThere: svn-src-user@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "SVN commit messages for the experimental " user" src tree" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 25 Nov 2009 02:10:08 -0000 Author: kmacy Date: Wed Nov 25 02:10:07 2009 New Revision: 199776 URL: http://svn.freebsd.org/changeset/base/199776 Log: merge releng_8_fcs changes Modified: user/kmacy/releng_8_fcs_buf_xen/cddl/contrib/opensolaris/cmd/ztest/ztest.c user/kmacy/releng_8_fcs_buf_xen/cddl/contrib/opensolaris/lib/libzpool/common/sys/zfs_context.h user/kmacy/releng_8_fcs_buf_xen/sys/amd64/amd64/minidump_machdep.c user/kmacy/releng_8_fcs_buf_xen/sys/amd64/amd64/pmap.c user/kmacy/releng_8_fcs_buf_xen/sys/amd64/amd64/uma_machdep.c user/kmacy/releng_8_fcs_buf_xen/sys/amd64/include/md_var.h user/kmacy/releng_8_fcs_buf_xen/sys/amd64/include/vmparam.h user/kmacy/releng_8_fcs_buf_xen/sys/cddl/compat/opensolaris/sys/kmem.h user/kmacy/releng_8_fcs_buf_xen/sys/cddl/compat/opensolaris/sys/mutex.h user/kmacy/releng_8_fcs_buf_xen/sys/cddl/compat/opensolaris/sys/rwlock.h user/kmacy/releng_8_fcs_buf_xen/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/arc.c user/kmacy/releng_8_fcs_buf_xen/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/dmu.c user/kmacy/releng_8_fcs_buf_xen/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/dmu_zfetch.c user/kmacy/releng_8_fcs_buf_xen/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/spa.c user/kmacy/releng_8_fcs_buf_xen/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/arc.h user/kmacy/releng_8_fcs_buf_xen/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/dmu.h user/kmacy/releng_8_fcs_buf_xen/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/spa.h user/kmacy/releng_8_fcs_buf_xen/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/vdev_impl.h user/kmacy/releng_8_fcs_buf_xen/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/zfs_vfsops.h user/kmacy/releng_8_fcs_buf_xen/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/zil.h user/kmacy/releng_8_fcs_buf_xen/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/zil_impl.h user/kmacy/releng_8_fcs_buf_xen/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/vdev.c user/kmacy/releng_8_fcs_buf_xen/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zfs_acl.c user/kmacy/releng_8_fcs_buf_xen/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zfs_dir.c user/kmacy/releng_8_fcs_buf_xen/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zfs_fuid.c user/kmacy/releng_8_fcs_buf_xen/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zfs_log.c user/kmacy/releng_8_fcs_buf_xen/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zfs_vfsops.c user/kmacy/releng_8_fcs_buf_xen/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zfs_vnops.c user/kmacy/releng_8_fcs_buf_xen/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zfs_znode.c user/kmacy/releng_8_fcs_buf_xen/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zil.c user/kmacy/releng_8_fcs_buf_xen/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zio.c user/kmacy/releng_8_fcs_buf_xen/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zvol.c user/kmacy/releng_8_fcs_buf_xen/sys/compat/freebsd32/freebsd32_misc.c user/kmacy/releng_8_fcs_buf_xen/sys/conf/files user/kmacy/releng_8_fcs_buf_xen/sys/conf/files.amd64 user/kmacy/releng_8_fcs_buf_xen/sys/conf/files.i386 user/kmacy/releng_8_fcs_buf_xen/sys/conf/kern.pre.mk user/kmacy/releng_8_fcs_buf_xen/sys/conf/options user/kmacy/releng_8_fcs_buf_xen/sys/kern/kern_resource.c user/kmacy/releng_8_fcs_buf_xen/sys/kern/subr_witness.c user/kmacy/releng_8_fcs_buf_xen/sys/kern/uipc_sockbuf.c user/kmacy/releng_8_fcs_buf_xen/sys/kern/uipc_socket.c user/kmacy/releng_8_fcs_buf_xen/sys/kern/uipc_syscalls.c user/kmacy/releng_8_fcs_buf_xen/sys/kern/vfs_bio.c user/kmacy/releng_8_fcs_buf_xen/sys/kern/vfs_subr.c user/kmacy/releng_8_fcs_buf_xen/sys/modules/zfs/Makefile user/kmacy/releng_8_fcs_buf_xen/sys/netinet/in_pcb.c user/kmacy/releng_8_fcs_buf_xen/sys/netinet/in_pcb.h user/kmacy/releng_8_fcs_buf_xen/sys/netinet/ip_output.c user/kmacy/releng_8_fcs_buf_xen/sys/netinet/tcp_input.c user/kmacy/releng_8_fcs_buf_xen/sys/netinet/tcp_usrreq.c user/kmacy/releng_8_fcs_buf_xen/sys/sys/buf.h user/kmacy/releng_8_fcs_buf_xen/sys/sys/file.h user/kmacy/releng_8_fcs_buf_xen/sys/sys/malloc.h user/kmacy/releng_8_fcs_buf_xen/sys/sys/param.h user/kmacy/releng_8_fcs_buf_xen/sys/sys/sockbuf.h user/kmacy/releng_8_fcs_buf_xen/sys/sys/socket.h user/kmacy/releng_8_fcs_buf_xen/sys/sys/socketvar.h user/kmacy/releng_8_fcs_buf_xen/sys/sys/sockstate.h user/kmacy/releng_8_fcs_buf_xen/sys/sys/syscallsubr.h user/kmacy/releng_8_fcs_buf_xen/sys/vm/pmap.h user/kmacy/releng_8_fcs_buf_xen/sys/vm/uma.h user/kmacy/releng_8_fcs_buf_xen/sys/vm/uma_core.c user/kmacy/releng_8_fcs_buf_xen/sys/vm/vm.h user/kmacy/releng_8_fcs_buf_xen/sys/vm/vm_contig.c user/kmacy/releng_8_fcs_buf_xen/sys/vm/vm_glue.c user/kmacy/releng_8_fcs_buf_xen/sys/vm/vm_kern.c user/kmacy/releng_8_fcs_buf_xen/sys/vm/vm_page.c user/kmacy/releng_8_fcs_buf_xen/sys/vm/vnode_pager.c Modified: user/kmacy/releng_8_fcs_buf_xen/cddl/contrib/opensolaris/cmd/ztest/ztest.c ============================================================================== --- user/kmacy/releng_8_fcs_buf_xen/cddl/contrib/opensolaris/cmd/ztest/ztest.c Wed Nov 25 02:00:09 2009 (r199775) +++ user/kmacy/releng_8_fcs_buf_xen/cddl/contrib/opensolaris/cmd/ztest/ztest.c Wed Nov 25 02:10:07 2009 (r199776) @@ -1304,7 +1304,7 @@ ztest_dmu_objset_create_destroy(ztest_ar if (ztest_random(2) == 0 && dmu_objset_open(name, DMU_OST_OTHER, DS_MODE_OWNER, &os) == 0) { zr.zr_os = os; - zil_replay(os, &zr, &zr.zr_assign, ztest_replay_vector, NULL); + zil_replay(os, &zr, ztest_replay_vector); dmu_objset_close(os); } @@ -3321,8 +3321,7 @@ ztest_run(char *pool) if (test_future) ztest_dmu_check_future_leak(&za[t]); zr.zr_os = za[d].za_os; - zil_replay(zr.zr_os, &zr, &zr.zr_assign, - ztest_replay_vector, NULL); + zil_replay(zr.zr_os, &zr, ztest_replay_vector); za[d].za_zilog = zil_open(za[d].za_os, NULL); } Modified: user/kmacy/releng_8_fcs_buf_xen/cddl/contrib/opensolaris/lib/libzpool/common/sys/zfs_context.h ============================================================================== --- user/kmacy/releng_8_fcs_buf_xen/cddl/contrib/opensolaris/lib/libzpool/common/sys/zfs_context.h Wed Nov 25 02:00:09 2009 (r199775) +++ user/kmacy/releng_8_fcs_buf_xen/cddl/contrib/opensolaris/lib/libzpool/common/sys/zfs_context.h Wed Nov 25 02:10:07 2009 (r199776) @@ -305,6 +305,8 @@ extern void cv_broadcast(kcondvar_t *cv) #define KM_PUSHPAGE KM_SLEEP #define KM_NOSLEEP UMEM_DEFAULT #define KMC_NODEBUG UMC_NODEBUG +#define KM_NODEBUG KMC_NODEBUG + #define kmem_alloc(_s, _f) umem_alloc(_s, _f) #define kmem_zalloc(_s, _f) umem_zalloc(_s, _f) #define kmem_free(_b, _s) umem_free(_b, _s) Modified: user/kmacy/releng_8_fcs_buf_xen/sys/amd64/amd64/minidump_machdep.c ============================================================================== --- user/kmacy/releng_8_fcs_buf_xen/sys/amd64/amd64/minidump_machdep.c Wed Nov 25 02:00:09 2009 (r199775) +++ user/kmacy/releng_8_fcs_buf_xen/sys/amd64/amd64/minidump_machdep.c Wed Nov 25 02:10:07 2009 (r199776) @@ -56,6 +56,7 @@ CTASSERT(sizeof(struct kerneldumpheader) extern uint64_t KPDPphys; uint64_t *vm_page_dump; +uint64_t *vm_page_dump_exclude; int vm_page_dump_size; static struct kerneldumpheader kdh; @@ -71,10 +72,16 @@ CTASSERT(sizeof(*vm_page_dump) == 8); static int is_dumpable(vm_paddr_t pa) { - int i; + int i, idx, bit, isdata; + uint64_t pfn = pa; + + pfn >>= PAGE_SHIFT; + idx = pfn >> 6; /* 2^6 = 64 */ + bit = pfn & 63; + isdata = ((vm_page_dump_exclude[idx] & (1ul << bit)) == 0); for (i = 0; dump_avail[i] != 0 || dump_avail[i + 1] != 0; i += 2) { - if (pa >= dump_avail[i] && pa < dump_avail[i + 1]) + if (pa >= dump_avail[i] && pa < dump_avail[i + 1] && isdata) return (1); } return (0); @@ -226,6 +233,7 @@ minidumpsys(struct dumperinfo *di) dumpsize = ptesize; dumpsize += round_page(msgbufp->msg_size); dumpsize += round_page(vm_page_dump_size); + printf("dumpsize: "); for (i = 0; i < vm_page_dump_size / sizeof(*vm_page_dump); i++) { bits = vm_page_dump[i]; while (bits) { @@ -238,10 +246,13 @@ minidumpsys(struct dumperinfo *di) dump_drop_page(pa); } bits &= ~(1ul << bit); + if ((dumpsize % (1<<29)) == 0) + printf("%ldMB ", (dumpsize>>20)); } } dumpsize += PAGE_SIZE; + printf("\n"); /* Determine dump offset on device. */ if (di->mediasize < SIZEOF_METADATA + dumpsize + sizeof(kdh) * 2) { error = ENOSPC; @@ -273,6 +284,7 @@ minidumpsys(struct dumperinfo *di) goto fail; dumplo += sizeof(kdh); + printf("write header\n"); /* Dump my header */ bzero(&fakept, sizeof(fakept)); bcopy(&mdhdr, &fakept, sizeof(mdhdr)); @@ -280,16 +292,19 @@ minidumpsys(struct dumperinfo *di) if (error) goto fail; + printf("write msgbuf\n"); /* Dump msgbuf up front */ error = blk_write(di, (char *)msgbufp->msg_ptr, 0, round_page(msgbufp->msg_size)); if (error) goto fail; + printf("write bitmap\n"); /* Dump bitmap */ error = blk_write(di, (char *)vm_page_dump, 0, round_page(vm_page_dump_size)); if (error) goto fail; + printf("\nDump kernel page table pages\n"); /* Dump kernel page table pages */ pdp = (uint64_t *)PHYS_TO_DMAP(KPDPphys); for (va = VM_MIN_KERNEL_ADDRESS; va < MAX(KERNBASE + NKPT * NBPDR, @@ -343,8 +358,10 @@ minidumpsys(struct dumperinfo *di) /* Dump memory chunks */ /* XXX cluster it up and use blk_dump() */ - for (i = 0; i < vm_page_dump_size / sizeof(*vm_page_dump); i++) { - bits = vm_page_dump[i]; + printf("\nclustering memory chunks\n"); + for (i = 0; + i < vm_page_dump_size / sizeof(*vm_page_dump); i++) { + bits = vm_page_dump[i] & ~(vm_page_dump_exclude[i]); while (bits) { bit = bsfq(bits); pa = (((uint64_t)i * sizeof(*vm_page_dump) * NBBY) + bit) * PAGE_SIZE; @@ -354,7 +371,6 @@ minidumpsys(struct dumperinfo *di) bits &= ~(1ul << bit); } } - error = blk_flush(di); if (error) goto fail; @@ -365,6 +381,7 @@ minidumpsys(struct dumperinfo *di) goto fail; dumplo += sizeof(kdh); + printf("\nstarting dump\n"); /* Signal completion, signoff and exit stage left. */ dump_write(di, NULL, 0, 0, 0); printf("\nDump complete\n"); @@ -403,3 +420,25 @@ dump_drop_page(vm_paddr_t pa) bit = pa & 63; atomic_clear_long(&vm_page_dump[idx], 1ul << bit); } + +void +dump_exclude_page(vm_paddr_t pa) +{ + int idx, bit; + + pa >>= PAGE_SHIFT; + idx = pa >> 6; /* 2^6 = 64 */ + bit = pa & 63; + atomic_set_long(&vm_page_dump_exclude[idx], 1ul << bit); +} + +void +dump_unexclude_page(vm_paddr_t pa) +{ + int idx, bit; + + pa >>= PAGE_SHIFT; + idx = pa >> 6; /* 2^6 = 64 */ + bit = pa & 63; + atomic_clear_long(&vm_page_dump_exclude[idx], 1ul << bit); +} Modified: user/kmacy/releng_8_fcs_buf_xen/sys/amd64/amd64/pmap.c ============================================================================== --- user/kmacy/releng_8_fcs_buf_xen/sys/amd64/amd64/pmap.c Wed Nov 25 02:00:09 2009 (r199775) +++ user/kmacy/releng_8_fcs_buf_xen/sys/amd64/amd64/pmap.c Wed Nov 25 02:10:07 2009 (r199776) @@ -1137,10 +1137,16 @@ pmap_map(vm_offset_t *virt, vm_paddr_t s * Note: SMP coherent. Uses a ranged shootdown IPI. */ void -pmap_qenter(vm_offset_t sva, vm_page_t *ma, int count) +pmap_qenter_prot(vm_offset_t sva, vm_page_t *ma, int count, vm_prot_t prot) { pt_entry_t *endpte, oldpte, *pte; + uint64_t flags = PG_V; + if (prot & VM_PROT_WRITE) + flags |= PG_RW; + if ((prot & VM_PROT_EXECUTE) == 0) + flags |= PG_NX; + oldpte = 0; pte = vtopte(sva); endpte = pte + count; @@ -1148,6 +1154,9 @@ pmap_qenter(vm_offset_t sva, vm_page_t * oldpte |= *pte; pte_store(pte, VM_PAGE_TO_PHYS(*ma) | PG_G | pmap_cache_bits((*ma)->md.pat_mode, 0) | PG_RW | PG_V); + pte_store(pte, VM_PAGE_TO_PHYS(*ma) | PG_G | flags); + if (prot & VM_PROT_EXCLUDE) + dump_exclude_page(VM_PAGE_TO_PHYS(*ma)); pte++; ma++; } @@ -1156,6 +1165,16 @@ pmap_qenter(vm_offset_t sva, vm_page_t * PAGE_SIZE); } +void +pmap_qenter(vm_offset_t sva, vm_page_t *ma, int count) +{ + + pmap_qenter_prot(sva, ma, count, + VM_PROT_READ|VM_PROT_WRITE|VM_PROT_EXECUTE); + +} + + /* * This routine tears out page mappings from the * kernel -- it is meant only for temporary mappings. @@ -1168,6 +1187,7 @@ pmap_qremove(vm_offset_t sva, int count) va = sva; while (count-- > 0) { + dump_unexclude_page(pmap_kextract(va)); pmap_kremove(va); va += PAGE_SIZE; } Modified: user/kmacy/releng_8_fcs_buf_xen/sys/amd64/amd64/uma_machdep.c ============================================================================== --- user/kmacy/releng_8_fcs_buf_xen/sys/amd64/amd64/uma_machdep.c Wed Nov 25 02:00:09 2009 (r199775) +++ user/kmacy/releng_8_fcs_buf_xen/sys/amd64/amd64/uma_machdep.c Wed Nov 25 02:10:07 2009 (r199776) @@ -66,7 +66,8 @@ uma_small_alloc(uma_zone_t zone, int byt break; } pa = m->phys_addr; - dump_add_page(pa); + if ((wait & M_NODUMP) == 0) + dump_add_page(pa); va = (void *)PHYS_TO_DMAP(pa); if ((wait & M_ZERO) && (m->flags & PG_ZERO) == 0) pagezero(va); Modified: user/kmacy/releng_8_fcs_buf_xen/sys/amd64/include/md_var.h ============================================================================== --- user/kmacy/releng_8_fcs_buf_xen/sys/amd64/include/md_var.h Wed Nov 25 02:00:09 2009 (r199775) +++ user/kmacy/releng_8_fcs_buf_xen/sys/amd64/include/md_var.h Wed Nov 25 02:10:07 2009 (r199776) @@ -60,6 +60,7 @@ extern char kstack[]; extern char sigcode[]; extern int szsigcode; extern uint64_t *vm_page_dump; +extern uint64_t *vm_page_dump_exclude; extern int vm_page_dump_size; extern int _udatasel; extern int _ucodesel; @@ -88,6 +89,8 @@ void fs_load_fault(void) __asm(__STRING( void gs_load_fault(void) __asm(__STRING(gs_load_fault)); void dump_add_page(vm_paddr_t); void dump_drop_page(vm_paddr_t); +void dump_exclude_page(vm_paddr_t); +void dump_unexclude_page(vm_paddr_t); void initializecpu(void); void initializecpucache(void); void fillw(int /*u_short*/ pat, void *base, size_t cnt); Modified: user/kmacy/releng_8_fcs_buf_xen/sys/amd64/include/vmparam.h ============================================================================== --- user/kmacy/releng_8_fcs_buf_xen/sys/amd64/include/vmparam.h Wed Nov 25 02:00:09 2009 (r199775) +++ user/kmacy/releng_8_fcs_buf_xen/sys/amd64/include/vmparam.h Wed Nov 25 02:10:07 2009 (r199776) @@ -88,6 +88,11 @@ #define UMA_MD_SMALL_ALLOC /* + * We machine specific sparse kernel dump + */ +#define VM_MD_MINIDUMP + +/* * The physical address space is densely populated. */ #define VM_PHYSSEG_DENSE Modified: user/kmacy/releng_8_fcs_buf_xen/sys/cddl/compat/opensolaris/sys/kmem.h ============================================================================== --- user/kmacy/releng_8_fcs_buf_xen/sys/cddl/compat/opensolaris/sys/kmem.h Wed Nov 25 02:00:09 2009 (r199775) +++ user/kmacy/releng_8_fcs_buf_xen/sys/cddl/compat/opensolaris/sys/kmem.h Wed Nov 25 02:10:07 2009 (r199776) @@ -40,7 +40,8 @@ #define KM_SLEEP M_WAITOK #define KM_PUSHPAGE M_WAITOK #define KM_NOSLEEP M_NOWAIT -#define KMC_NODEBUG 0 +#define KMC_NODEBUG UMA_ZONE_NODUMP +#define KM_NODEBUG M_NODUMP typedef struct kmem_cache { char kc_name[32]; Modified: user/kmacy/releng_8_fcs_buf_xen/sys/cddl/compat/opensolaris/sys/mutex.h ============================================================================== --- user/kmacy/releng_8_fcs_buf_xen/sys/cddl/compat/opensolaris/sys/mutex.h Wed Nov 25 02:00:09 2009 (r199775) +++ user/kmacy/releng_8_fcs_buf_xen/sys/cddl/compat/opensolaris/sys/mutex.h Wed Nov 25 02:10:07 2009 (r199776) @@ -46,11 +46,7 @@ typedef enum { typedef struct sx kmutex_t; -#ifndef DEBUG -#define MUTEX_FLAGS (SX_DUPOK | SX_NOWITNESS) -#else #define MUTEX_FLAGS (SX_DUPOK) -#endif #define mutex_init(lock, desc, type, arg) do { \ const char *_name; \ Modified: user/kmacy/releng_8_fcs_buf_xen/sys/cddl/compat/opensolaris/sys/rwlock.h ============================================================================== --- user/kmacy/releng_8_fcs_buf_xen/sys/cddl/compat/opensolaris/sys/rwlock.h Wed Nov 25 02:00:09 2009 (r199775) +++ user/kmacy/releng_8_fcs_buf_xen/sys/cddl/compat/opensolaris/sys/rwlock.h Wed Nov 25 02:10:07 2009 (r199776) @@ -48,11 +48,7 @@ typedef enum { typedef struct sx krwlock_t; -#ifndef DEBUG -#define RW_FLAGS (SX_DUPOK | SX_NOWITNESS) -#else #define RW_FLAGS (SX_DUPOK) -#endif #define RW_READ_HELD(x) (rw_read_held((x))) #define RW_WRITE_HELD(x) (rw_write_held((x))) Modified: user/kmacy/releng_8_fcs_buf_xen/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/arc.c ============================================================================== --- user/kmacy/releng_8_fcs_buf_xen/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/arc.c Wed Nov 25 02:00:09 2009 (r199775) +++ user/kmacy/releng_8_fcs_buf_xen/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/arc.c Wed Nov 25 02:10:07 2009 (r199776) @@ -127,6 +127,7 @@ #ifdef _KERNEL #include #endif +#include #include #include #include @@ -186,6 +187,16 @@ SYSCTL_QUAD(_vfs_zfs, OID_AUTO, arc_min, SYSCTL_INT(_vfs_zfs, OID_AUTO, mdcomp_disable, CTLFLAG_RDTUN, &zfs_mdcomp_disable, 0, "Disable metadata compression"); +static int zfs_page_cache_disable = 0; +TUNABLE_INT("vfs.zfs.page_cache_disable", &zfs_page_cache_disable); +SYSCTL_INT(_vfs_zfs, OID_AUTO, page_cache_disable, CTLFLAG_RDTUN, + &zfs_page_cache_disable, 0, "Disable backing ARC with page cache "); + +#ifdef ZIO_USE_UMA +extern kmem_cache_t *zio_buf_cache[]; +extern kmem_cache_t *zio_data_buf_cache[]; +#endif + /* * Note that buffers can be in one of 6 states: * ARC_anon - anonymous (discussed below) @@ -218,13 +229,31 @@ SYSCTL_INT(_vfs_zfs, OID_AUTO, mdcomp_di * second level ARC benefit from these fast lookups. */ +#define ARCS_LOCK_PAD 128 +struct arcs_lock { + kmutex_t arcs_lock; +#ifdef _KERNEL + unsigned char pad[(ARCS_LOCK_PAD - sizeof (kmutex_t))]; +#endif +}; + +/* + * must be power of two for mask use to work + * + */ +#define ARC_BUFC_NUMDATALISTS 16 +#define ARC_BUFC_NUMMETADATALISTS 16 +#define ARC_BUFC_NUMLISTS (ARC_BUFC_NUMMETADATALISTS+ARC_BUFC_NUMDATALISTS) + typedef struct arc_state { - list_t arcs_list[ARC_BUFC_NUMTYPES]; /* list of evictable buffers */ uint64_t arcs_lsize[ARC_BUFC_NUMTYPES]; /* amount of evictable data */ uint64_t arcs_size; /* total amount of data in this state */ - kmutex_t arcs_mtx; + list_t arcs_lists[ARC_BUFC_NUMLISTS]; /* list of evictable buffers */ + struct arcs_lock arcs_locks[ARC_BUFC_NUMLISTS] __aligned(128); } arc_state_t; +#define ARCS_LOCK(s, i) &((s)->arcs_locks[(i)].arcs_lock) + /* The 6 states: */ static arc_state_t ARC_anon; static arc_state_t ARC_mru; @@ -235,6 +264,7 @@ static arc_state_t ARC_l2c_only; typedef struct arc_stats { kstat_named_t arcstat_hits; + kstat_named_t arcstat_page_cache_hits; kstat_named_t arcstat_misses; kstat_named_t arcstat_demand_data_hits; kstat_named_t arcstat_demand_data_misses; @@ -284,6 +314,7 @@ typedef struct arc_stats { static arc_stats_t arc_stats = { { "hits", KSTAT_DATA_UINT64 }, + { "page_cache_hits", KSTAT_DATA_UINT64 }, { "misses", KSTAT_DATA_UINT64 }, { "demand_data_hits", KSTAT_DATA_UINT64 }, { "demand_data_misses", KSTAT_DATA_UINT64 }, @@ -489,6 +520,7 @@ static void arc_evict_ghost(arc_state_t #define ARC_L2_EVICTED (1 << 17) /* evicted during I/O */ #define ARC_L2_WRITE_HEAD (1 << 18) /* head of write list */ #define ARC_STORED (1 << 19) /* has been store()d to */ +#define ARC_BUF_CLONING (1 << 21) /* is being cloned */ #define HDR_IN_HASH_TABLE(hdr) ((hdr)->b_flags & ARC_IN_HASH_TABLE) #define HDR_IO_IN_PROGRESS(hdr) ((hdr)->b_flags & ARC_IO_IN_PROGRESS) @@ -609,9 +641,10 @@ struct l2arc_buf_hdr { typedef struct l2arc_data_free { /* protected by l2arc_free_on_write_mtx */ + arc_buf_t *l2df_buf; void *l2df_data; size_t l2df_size; - void (*l2df_func)(void *, size_t); + void (*l2df_func)(arc_buf_t *, void *, size_t); list_node_t l2df_list_node; } l2arc_data_free_t; @@ -953,20 +986,42 @@ arc_buf_freeze(arc_buf_t *buf) } static void +get_buf_info(arc_buf_hdr_t *ab, arc_state_t *state, list_t **list, kmutex_t **lock) +{ + uint64_t buf_hashid = buf_hash(ab->b_spa, &ab->b_dva, ab->b_birth); + + if (ab->b_type == ARC_BUFC_METADATA) + buf_hashid &= (ARC_BUFC_NUMMETADATALISTS-1); + else { + buf_hashid &= (ARC_BUFC_NUMDATALISTS-1); + buf_hashid += ARC_BUFC_NUMMETADATALISTS; + } + + *list = &state->arcs_lists[buf_hashid]; + *lock = ARCS_LOCK(state, buf_hashid); +} + + +static void add_reference(arc_buf_hdr_t *ab, kmutex_t *hash_lock, void *tag) { + ASSERT(MUTEX_HELD(hash_lock)); if ((refcount_add(&ab->b_refcnt, tag) == 1) && (ab->b_state != arc_anon)) { + list_t *list; + kmutex_t *lock; uint64_t delta = ab->b_size * ab->b_datacnt; - list_t *list = &ab->b_state->arcs_list[ab->b_type]; uint64_t *size = &ab->b_state->arcs_lsize[ab->b_type]; - ASSERT(!MUTEX_HELD(&ab->b_state->arcs_mtx)); - mutex_enter(&ab->b_state->arcs_mtx); + get_buf_info(ab, ab->b_state, &list, &lock); + ASSERT(!MUTEX_HELD(lock)); + mutex_enter(lock); ASSERT(list_link_active(&ab->b_arc_node)); list_remove(list, ab); + mutex_exit(lock); + if (GHOST_STATE(ab->b_state)) { ASSERT3U(ab->b_datacnt, ==, 0); ASSERT3P(ab->b_buf, ==, NULL); @@ -975,7 +1030,6 @@ add_reference(arc_buf_hdr_t *ab, kmutex_ ASSERT(delta > 0); ASSERT3U(*size, >=, delta); atomic_add_64(size, -delta); - mutex_exit(&ab->b_state->arcs_mtx); /* remove the prefetch flag if we get a reference */ if (ab->b_flags & ARC_PREFETCH) ab->b_flags &= ~ARC_PREFETCH; @@ -994,14 +1048,19 @@ remove_reference(arc_buf_hdr_t *ab, kmut if (((cnt = refcount_remove(&ab->b_refcnt, tag)) == 0) && (state != arc_anon)) { uint64_t *size = &state->arcs_lsize[ab->b_type]; + list_t *list; + kmutex_t *lock; - ASSERT(!MUTEX_HELD(&state->arcs_mtx)); - mutex_enter(&state->arcs_mtx); + get_buf_info(ab, state, &list, &lock); + + ASSERT(!MUTEX_HELD(lock)); + mutex_enter(lock); ASSERT(!list_link_active(&ab->b_arc_node)); - list_insert_head(&state->arcs_list[ab->b_type], ab); + list_insert_head(list, ab); + mutex_exit(lock); + ASSERT(ab->b_datacnt > 0); atomic_add_64(size, ab->b_size * ab->b_datacnt); - mutex_exit(&state->arcs_mtx); } return (cnt); } @@ -1016,6 +1075,8 @@ arc_change_state(arc_state_t *new_state, arc_state_t *old_state = ab->b_state; int64_t refcnt = refcount_count(&ab->b_refcnt); uint64_t from_delta, to_delta; + list_t *list; + kmutex_t *lock; ASSERT(MUTEX_HELD(hash_lock)); ASSERT(new_state != old_state); @@ -1030,14 +1091,17 @@ arc_change_state(arc_state_t *new_state, */ if (refcnt == 0) { if (old_state != arc_anon) { - int use_mutex = !MUTEX_HELD(&old_state->arcs_mtx); + int use_mutex; uint64_t *size = &old_state->arcs_lsize[ab->b_type]; + get_buf_info(ab, old_state, &list, &lock); + use_mutex = !MUTEX_HELD(lock); + if (use_mutex) - mutex_enter(&old_state->arcs_mtx); + mutex_enter(lock); ASSERT(list_link_active(&ab->b_arc_node)); - list_remove(&old_state->arcs_list[ab->b_type], ab); + list_remove(list, ab); /* * If prefetching out of the ghost cache, @@ -1052,16 +1116,20 @@ arc_change_state(arc_state_t *new_state, atomic_add_64(size, -from_delta); if (use_mutex) - mutex_exit(&old_state->arcs_mtx); + mutex_exit(lock); } if (new_state != arc_anon) { - int use_mutex = !MUTEX_HELD(&new_state->arcs_mtx); + int use_mutex; uint64_t *size = &new_state->arcs_lsize[ab->b_type]; + get_buf_info(ab, new_state, &list, &lock); + use_mutex = !MUTEX_HELD(lock); + + if (use_mutex) - mutex_enter(&new_state->arcs_mtx); + mutex_enter(lock); - list_insert_head(&new_state->arcs_list[ab->b_type], ab); + list_insert_head(list, ab); /* ghost elements have a ghost size */ if (GHOST_STATE(new_state)) { @@ -1072,7 +1140,7 @@ arc_change_state(arc_state_t *new_state, atomic_add_64(size, to_delta); if (use_mutex) - mutex_exit(&new_state->arcs_mtx); + mutex_exit(lock); } } @@ -1132,8 +1200,9 @@ arc_data_buf_free(void *buf, uint64_t si atomic_add_64(&arc_size, -size); } -arc_buf_t * -arc_buf_alloc(spa_t *spa, int size, void *tag, arc_buf_contents_t type) +static arc_buf_t * +_arc_buf_alloc(spa_t *spa, int size, void *tag, arc_buf_contents_t type, + blkptr_t *bp) { arc_buf_hdr_t *hdr; arc_buf_t *buf; @@ -1143,6 +1212,14 @@ arc_buf_alloc(spa_t *spa, int size, void ASSERT(BUF_EMPTY(hdr)); hdr->b_size = size; hdr->b_type = type; + if (bp != NULL) { + hdr->b_dva = *BP_IDENTITY(bp); + hdr->b_birth = bp->blk_birth; + } else { + hdr->b_dva.dva_word[0] = 0; + hdr->b_dva.dva_word[1] = 0; + hdr->b_birth = 0; + } hdr->b_spa = spa; hdr->b_state = arc_anon; hdr->b_arc_access = 0; @@ -1162,6 +1239,13 @@ arc_buf_alloc(spa_t *spa, int size, void return (buf); } +arc_buf_t * +arc_buf_alloc(spa_t *spa, int size, void *tag, arc_buf_contents_t type) +{ + + return (_arc_buf_alloc(spa, size, tag, type, NULL)); +} + static arc_buf_t * arc_buf_clone(arc_buf_t *from) { @@ -1176,6 +1260,7 @@ arc_buf_clone(arc_buf_t *from) buf->b_private = NULL; buf->b_next = hdr->b_buf; hdr->b_buf = buf; + hdr->b_flags |= ARC_BUF_CLONING; arc_get_data_buf(buf); bcopy(from->b_data, buf->b_data, size); hdr->b_datacnt += 1; @@ -1214,17 +1299,242 @@ arc_buf_add_ref(arc_buf_t *buf, void* ta data, metadata, hits); } +void +arc_binval(spa_t *spa, dva_t *dva, uint64_t size) +{ + uint64_t blkno, blkno_lookup; + struct vnode *vp; + struct bufobj *bo; + struct buf *bp; + vm_pindex_t start, end; + vm_object_t object; + vm_page_t m; + int i; + + if (zfs_page_cache_disable) + return; + + if (dva == NULL || spa == NULL || blkno == 0 || size == 0) + return; + + blkno_lookup = blkno = dva->dva_word[1] & ~(1UL<<63); + vp = spa_get_vnode(spa); + bo = &vp->v_bufobj; + + BO_LOCK(bo); +retry: + bp = gbincore(bo, blkno_lookup); + if (bp != NULL) { + BUF_LOCK(bp, LK_EXCLUSIVE | LK_INTERLOCK, BO_MTX(bo)); + bremfree(bp); + bp->b_flags |= B_INVAL; + bp->b_birth = 0; + brelse(bp); + } else if (blkno_lookup & 0x7) { + blkno_lookup &= ~0x7; + goto retry; + } else + BO_UNLOCK(bo); + + start = OFF_TO_IDX((blkno_lookup << 9)); + end = start + OFF_TO_IDX(size + PAGE_MASK); + object = vp->v_object; + + VM_OBJECT_LOCK(object); + vm_page_cache_free(object, start, end); + vm_object_page_remove(object, start, end, FALSE); +#ifdef INVARIANTS + for (i = 0; i < OFF_TO_IDX(size); i++) { + KASSERT(vm_page_lookup(object, start + i) == NULL, + ("found page at %ld blkno %ld blkno_lookup %ld", + start + i, blkno, blkno_lookup)); + } +#endif + VM_OBJECT_UNLOCK(object); +} + +static void +arc_pcache(struct vnode *vp, struct buf *bp, uint64_t blkno) +{ + vm_pindex_t start = OFF_TO_IDX((blkno << 9)); + vm_object_t object = vp->v_object; + struct bufobj *bo = &vp->v_bufobj; + vm_page_t m; + int i; + + BO_LOCK(bo); + bgetvp(vp, bp); + BO_UNLOCK(bo); + + VM_OBJECT_LOCK(object); + for (i = 0; i < bp->b_npages; i++) { + m = bp->b_pages[i]; + vm_page_insert(m, object, start + i); + } + VM_OBJECT_UNLOCK(object); + bp->b_flags |= B_VMIO; +} + +static void +arc_bcache(arc_buf_t *buf) +{ + uint64_t blkno = buf->b_hdr->b_dva.dva_word[1] & ~(1UL<<63); + struct buf *newbp, *bp = buf->b_bp; + struct vnode *vp = spa_get_vnode(buf->b_hdr->b_spa); + struct bufobj *bo = &vp->v_bufobj; + arc_buf_hdr_t *hdr = buf->b_hdr; + int cachebuf; + + if (zfs_page_cache_disable) + return; + + if (blkno == 0 || hdr->b_birth == 0) + return; + + newbp = buf->b_bp; + newbp->b_birth = hdr->b_birth; + newbp->b_blkno = newbp->b_lblkno = blkno; + newbp->b_offset = (blkno << 9); + cachebuf = ((hdr->b_datacnt == 1) && + !(hdr->b_flags & ARC_IO_ERROR) && + ((newbp->b_flags & (B_INVAL|B_CACHE)) == B_CACHE) && + (blkno & 0x7) == 0); + + arc_binval(hdr->b_spa, &hdr->b_dva, hdr->b_size); + if (cachebuf) + arc_pcache(vp, newbp, blkno); + +} + +static void +arc_getblk(arc_buf_t *buf) +{ + uint64_t size = buf->b_hdr->b_size; + arc_buf_contents_t type = buf->b_hdr->b_type; + spa_t *spa = buf->b_hdr->b_spa; + uint64_t blkno = buf->b_hdr->b_dva.dva_word[1] & ~(1UL<<63); + void *data; + struct buf *newbp, *bp; + arc_buf_t *tbuf; + struct vnode *vp; + struct bufobj *bo; + int i, flags = 0; + vm_pindex_t start, end; + vm_object_t object; + + if (type == ARC_BUFC_METADATA) { + arc_space_consume(size); + } else { + ASSERT(type == ARC_BUFC_DATA); + flags = GB_NODUMP; + atomic_add_64(&arc_size, size); + } + + vp = spa_get_vnode(spa); + bo = &vp->v_bufobj; + newbp = NULL; + + if (size < PAGE_SIZE) { + data = zio_buf_alloc(size); + } else if ((buf->b_hdr->b_flags & ARC_BUF_CLONING) || + BUF_EMPTY(buf->b_hdr) || + (blkno == 0)) { + newbp = geteblk(size, flags); + data = newbp->b_data; + buf->b_hdr->b_flags &= ~ARC_BUF_CLONING; + } else { + newbp = getblk(vp, blkno, size, 0, 0, flags | GB_LOCK_NOWAIT); + if (newbp == NULL) + newbp = geteblk(size, flags); + else { + vm_object_t object = vp->v_object; + vm_page_t m; + + /* + * Strip the buffers pages from the object + */ + VM_OBJECT_LOCK(object); + vm_page_lock_queues(); + for (i = 0; i < newbp->b_npages; i++){ + m = newbp->b_pages[i]; + vm_page_remove(m); + } + vm_page_unlock_queues(); + VM_OBJECT_UNLOCK(object); + brelvp(newbp); + newbp->b_flags &= ~B_VMIO; + } + data = newbp->b_data; + } + +#ifdef LOGALL + /* + * not useful for tracking down collisions + * + */ + CTR2(KTR_SPARE2, "arc_getblk() bp=%p flags %X", + newbp, newbp->b_flags); +#endif + + if (newbp != NULL) { + BUF_KERNPROC(newbp); +#ifdef INVARIANTS + for (i = 0; i < newbp->b_npages; i++) + KASSERT(newbp->b_pages[i]->object == NULL, + ("newbp page not removed")); +#endif + } + buf->b_bp = newbp; + buf->b_data = data; +} + +void +arc_brelse(arc_buf_t *buf, void *data, size_t size); + +void +arc_brelse(arc_buf_t *buf, void *data, size_t size) +{ + struct buf *bp = buf->b_bp; + arc_buf_hdr_t *hdr = buf->b_hdr; +#ifdef INVARIANTS + int i; +#endif + + if (bp == NULL) { + zio_buf_free(buf->b_data, size); + return; + } +#ifdef INVARIANTS + for (i = 0; i < bp->b_npages; i++) + KASSERT(bp->b_pages[i]->object == NULL, + ("newbp page not removed")); +#endif + arc_bcache(buf); + + + if (bp->b_vp == NULL) + KASSERT((bp->b_flags & B_VMIO) == 0, ("no vp but VMIO set!")); + else + CTR4(KTR_SPARE2, "arc_brelse() bp=%p flags %X" + " size %ld blkno=%ld", + bp, bp->b_flags, size, bp->b_blkno); + + bp->b_flags |= B_ZFS; + brelse(bp); +} + /* * Free the arc data buffer. If it is an l2arc write in progress, * the buffer is placed on l2arc_free_on_write to be freed later. */ static void -arc_buf_data_free(arc_buf_hdr_t *hdr, void (*free_func)(void *, size_t), - void *data, size_t size) +arc_buf_data_free(arc_buf_hdr_t *hdr, void (*free_func)(arc_buf_t *, void *, size_t), + arc_buf_t *buf, void *data, size_t size) { if (HDR_L2_WRITING(hdr)) { l2arc_data_free_t *df; df = kmem_alloc(sizeof (l2arc_data_free_t), KM_SLEEP); + df->l2df_buf = buf; df->l2df_data = data; df->l2df_size = size; df->l2df_func = free_func; @@ -1233,7 +1543,7 @@ arc_buf_data_free(arc_buf_hdr_t *hdr, vo mutex_exit(&l2arc_free_on_write_mtx); ARCSTAT_BUMP(arcstat_l2_free_on_write); } else { - free_func(data, size); + free_func(buf, data, size); } } @@ -1251,13 +1561,13 @@ arc_buf_destroy(arc_buf_t *buf, boolean_ arc_cksum_verify(buf); if (!recycle) { if (type == ARC_BUFC_METADATA) { - arc_buf_data_free(buf->b_hdr, zio_buf_free, - buf->b_data, size); + arc_buf_data_free(buf->b_hdr, arc_brelse, + buf, buf->b_data, size); arc_space_return(size); } else { ASSERT(type == ARC_BUFC_DATA); - arc_buf_data_free(buf->b_hdr, - zio_data_buf_free, buf->b_data, size); + arc_buf_data_free(buf->b_hdr, arc_brelse, + buf, buf->b_data, size); atomic_add_64(&arc_size, -size); } } @@ -1462,21 +1772,57 @@ arc_evict(arc_state_t *state, spa_t *spa { arc_state_t *evicted_state; uint64_t bytes_evicted = 0, skipped = 0, missed = 0; + int64_t bytes_remaining; arc_buf_hdr_t *ab, *ab_prev = NULL; - list_t *list = &state->arcs_list[type]; + list_t *evicted_list, *list, *evicted_list_start, *list_start; + kmutex_t *lock, *evicted_lock; kmutex_t *hash_lock; boolean_t have_lock; void *stolen = NULL; + static int evict_metadata_offset, evict_data_offset; + int i, idx, offset, list_count, count; ASSERT(state == arc_mru || state == arc_mfu); evicted_state = (state == arc_mru) ? arc_mru_ghost : arc_mfu_ghost; - mutex_enter(&state->arcs_mtx); - mutex_enter(&evicted_state->arcs_mtx); + /* + * don't recycle page cache bufs + * + */ + if (recycle && (bytes >= PAGE_SIZE)) + recycle = FALSE; + if (type == ARC_BUFC_METADATA) { + offset = 0; + list_count = ARC_BUFC_NUMMETADATALISTS; + list_start = &state->arcs_lists[0]; + evicted_list_start = &evicted_state->arcs_lists[0]; + idx = evict_metadata_offset; + } else { + offset = ARC_BUFC_NUMMETADATALISTS; + + list_start = &state->arcs_lists[offset]; + evicted_list_start = &evicted_state->arcs_lists[offset]; + list_count = ARC_BUFC_NUMDATALISTS; + idx = evict_data_offset; + } + for (bytes_remaining = 0, i = 0; i < list_count; i++) + bytes_remaining += evicted_state->arcs_lsize[i + offset]; + + count = 0; + +evict_start: + list = &list_start[idx]; + evicted_list = &evicted_list_start[idx]; + lock = ARCS_LOCK(state, (offset + idx)); + evicted_lock = ARCS_LOCK(evicted_state, (offset + idx)); + + mutex_enter(lock); + mutex_enter(evicted_lock); for (ab = list_tail(list); ab; ab = ab_prev) { ab_prev = list_prev(list, ab); + bytes_remaining -= (ab->b_size * ab->b_datacnt); /* prefetch buffers have a minimum lifespan */ if (HDR_IO_IN_PROGRESS(ab) || (spa && ab->b_spa != spa) || @@ -1536,18 +1882,36 @@ arc_evict(arc_state_t *state, spa_t *spa mutex_exit(hash_lock); if (bytes >= 0 && bytes_evicted >= bytes) break; + if (bytes_remaining > 0) { + mutex_exit(evicted_lock); + mutex_exit(lock); + idx = ((idx + 1)&(list_count-1)); + count++; + goto evict_start; + } } else { missed += 1; } } - mutex_exit(&evicted_state->arcs_mtx); - mutex_exit(&state->arcs_mtx); - - if (bytes_evicted < bytes) - dprintf("only evicted %lld bytes from %x", - (longlong_t)bytes_evicted, state); + mutex_exit(evicted_lock); + mutex_exit(lock); + + idx = ((idx + 1)&(list_count-1)); + count++; + if (bytes_evicted < bytes) { + if (count < list_count) + goto evict_start; + else + dprintf("only evicted %lld bytes from %x", + (longlong_t)bytes_evicted, state); + } + if (type == ARC_BUFC_METADATA) + evict_metadata_offset = idx; + else + evict_data_offset = idx; + if (skipped) ARCSTAT_INCR(arcstat_evict_skip, skipped); @@ -1586,14 +1950,28 @@ static void arc_evict_ghost(arc_state_t *state, spa_t *spa, int64_t bytes) { arc_buf_hdr_t *ab, *ab_prev; - list_t *list = &state->arcs_list[ARC_BUFC_DATA]; - kmutex_t *hash_lock; + list_t *list, *list_start; + kmutex_t *hash_lock, *lock; uint64_t bytes_deleted = 0; uint64_t bufs_skipped = 0; + static int evict_offset; + int list_count, idx = evict_offset; + int offset, count = 0; ASSERT(GHOST_STATE(state)); -top: - mutex_enter(&state->arcs_mtx); + + /* + * data lists come after metadata lists + */ + list_start = &state->arcs_lists[ARC_BUFC_NUMMETADATALISTS]; + list_count = ARC_BUFC_NUMDATALISTS; + offset = ARC_BUFC_NUMMETADATALISTS; + +evict_start: + list = &list_start[idx]; + lock = ARCS_LOCK(state, idx + offset); + + mutex_enter(lock); *** DIFF OUTPUT TRUNCATED AT 1000 LINES *** From owner-svn-src-user@FreeBSD.ORG Wed Nov 25 02:13:45 2009 Return-Path: Delivered-To: svn-src-user@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 1A44D106566C; Wed, 25 Nov 2009 02:13:45 +0000 (UTC) (envelope-from kmacy@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id E451F8FC15; Wed, 25 Nov 2009 02:13:44 +0000 (UTC) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.3/8.14.3) with ESMTP id nAP2Diqn036260; Wed, 25 Nov 2009 02:13:44 GMT (envelope-from kmacy@svn.freebsd.org) Received: (from kmacy@localhost) by svn.freebsd.org (8.14.3/8.14.3/Submit) id nAP2Di4Z036258; Wed, 25 Nov 2009 02:13:44 GMT (envelope-from kmacy@svn.freebsd.org) Message-Id: <200911250213.nAP2Di4Z036258@svn.freebsd.org> From: Kip Macy Date: Wed, 25 Nov 2009 02:13:44 +0000 (UTC) To: src-committers@freebsd.org, svn-src-user@freebsd.org X-SVN-Group: user MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r199777 - user/kmacy/releng_8_fcs_buf_xen/sys/cddl/contrib/opensolaris/uts/common/fs/zfs X-BeenThere: svn-src-user@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "SVN commit messages for the experimental " user" src tree" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 25 Nov 2009 02:13:45 -0000 Author: kmacy Date: Wed Nov 25 02:13:44 2009 New Revision: 199777 URL: http://svn.freebsd.org/changeset/base/199777 Log: improve logging for buffer state changes Modified: user/kmacy/releng_8_fcs_buf_xen/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/arc.c Modified: user/kmacy/releng_8_fcs_buf_xen/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/arc.c ============================================================================== --- user/kmacy/releng_8_fcs_buf_xen/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/arc.c Wed Nov 25 02:10:07 2009 (r199776) +++ user/kmacy/releng_8_fcs_buf_xen/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/arc.c Wed Nov 25 02:13:44 2009 (r199777) @@ -1326,16 +1326,21 @@ retry: bp = gbincore(bo, blkno_lookup); if (bp != NULL) { BUF_LOCK(bp, LK_EXCLUSIVE | LK_INTERLOCK, BO_MTX(bo)); + CTR3(KTR_SPARE2, "arc_binval() bp=%p blkno %ld npages %d", + bp, blkno, bp->b_npages); bremfree(bp); + KASSERT(bp->b_flags & B_VMIO, ("buf found, VMIO not set")); bp->b_flags |= B_INVAL; bp->b_birth = 0; brelse(bp); } else if (blkno_lookup & 0x7) { blkno_lookup &= ~0x7; goto retry; - } else + } else { + CTR2(KTR_SPARE2, "arc_binval() blkno %ld npages %d", + blkno, OFF_TO_IDX(size)); BO_UNLOCK(bo); - + } start = OFF_TO_IDX((blkno_lookup << 9)); end = start + OFF_TO_IDX(size + PAGE_MASK); object = vp->v_object; @@ -1366,6 +1371,8 @@ arc_pcache(struct vnode *vp, struct buf bgetvp(vp, bp); BO_UNLOCK(bo); + CTR3(KTR_SPARE2, "arc_pcache() bp=%p blkno %ld npages %d", + bp, blkno, bp->b_npages); VM_OBJECT_LOCK(object); for (i = 0; i < bp->b_npages; i++) { m = bp->b_pages[i]; @@ -1400,10 +1407,9 @@ arc_bcache(arc_buf_t *buf) ((newbp->b_flags & (B_INVAL|B_CACHE)) == B_CACHE) && (blkno & 0x7) == 0); - arc_binval(hdr->b_spa, &hdr->b_dva, hdr->b_size); + arc_binval(hdr->b_spa, &hdr->b_dva, hdr->b_size); if (cachebuf) - arc_pcache(vp, newbp, blkno); - + arc_pcache(vp, newbp, blkno); } static void @@ -1467,17 +1473,11 @@ arc_getblk(arc_buf_t *buf) data = newbp->b_data; } -#ifdef LOGALL - /* - * not useful for tracking down collisions - * - */ - CTR2(KTR_SPARE2, "arc_getblk() bp=%p flags %X", - newbp, newbp->b_flags); -#endif - if (newbp != NULL) { BUF_KERNPROC(newbp); + + CTR4(KTR_SPARE2, "arc_getblk() bp=%p flags %X blkno %ld npages %d", + newbp, newbp->b_flags, blkno, newbp->b_npages); #ifdef INVARIANTS for (i = 0; i < newbp->b_npages; i++) KASSERT(newbp->b_pages[i]->object == NULL, @@ -1514,10 +1514,12 @@ arc_brelse(arc_buf_t *buf, void *data, s if (bp->b_vp == NULL) KASSERT((bp->b_flags & B_VMIO) == 0, ("no vp but VMIO set!")); - else + else { + KASSERT((bp->b_flags & B_VMIO), ("vp but VMIO not set!")); CTR4(KTR_SPARE2, "arc_brelse() bp=%p flags %X" " size %ld blkno=%ld", bp, bp->b_flags, size, bp->b_blkno); + } bp->b_flags |= B_ZFS; brelse(bp); From owner-svn-src-user@FreeBSD.ORG Wed Nov 25 02:38:20 2009 Return-Path: Delivered-To: svn-src-user@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 6F6B31065670; Wed, 25 Nov 2009 02:38:20 +0000 (UTC) (envelope-from kmacy@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id 5F5E88FC18; Wed, 25 Nov 2009 02:38:20 +0000 (UTC) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.3/8.14.3) with ESMTP id nAP2cK9t036772; Wed, 25 Nov 2009 02:38:20 GMT (envelope-from kmacy@svn.freebsd.org) Received: (from kmacy@localhost) by svn.freebsd.org (8.14.3/8.14.3/Submit) id nAP2cKNW036769; Wed, 25 Nov 2009 02:38:20 GMT (envelope-from kmacy@svn.freebsd.org) Message-Id: <200911250238.nAP2cKNW036769@svn.freebsd.org> From: Kip Macy Date: Wed, 25 Nov 2009 02:38:20 +0000 (UTC) To: src-committers@freebsd.org, svn-src-user@freebsd.org X-SVN-Group: user MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r199778 - user/kmacy/releng_8_fcs_buf_xen/sys/kern X-BeenThere: svn-src-user@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "SVN commit messages for the experimental " user" src tree" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 25 Nov 2009 02:38:20 -0000 Author: kmacy Date: Wed Nov 25 02:38:20 2009 New Revision: 199778 URL: http://svn.freebsd.org/changeset/base/199778 Log: fix printf for printing 64-bit values on 32-bit Modified: user/kmacy/releng_8_fcs_buf_xen/sys/kern/vfs_subr.c Modified: user/kmacy/releng_8_fcs_buf_xen/sys/kern/vfs_subr.c ============================================================================== --- user/kmacy/releng_8_fcs_buf_xen/sys/kern/vfs_subr.c Wed Nov 25 02:13:44 2009 (r199777) +++ user/kmacy/releng_8_fcs_buf_xen/sys/kern/vfs_subr.c Wed Nov 25 02:38:20 2009 (r199778) @@ -1455,7 +1455,7 @@ buf_vlist_remove(struct buf *bp) if (bp != bv->bv_root) { root = buf_splay(bp->b_lblkno, bp->b_xflags, bv->bv_root); - KASSERT(root == bp, ("splay lookup failed in remove bp=%p lblkno=%ld blkno=%ld", bp, bp->b_lblkno, bp->b_blkno)); + KASSERT(root == bp, ("splay lookup failed in remove bp=%p lblkno=%ju blkno=%ju", bp, bp->b_lblkno, bp->b_blkno)); } if (bp->b_left == NULL) { root = bp->b_right; From owner-svn-src-user@FreeBSD.ORG Wed Nov 25 02:39:12 2009 Return-Path: Delivered-To: svn-src-user@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 643D5106566B; Wed, 25 Nov 2009 02:39:12 +0000 (UTC) (envelope-from kmacy@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id 5370E8FC0C; Wed, 25 Nov 2009 02:39:12 +0000 (UTC) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.3/8.14.3) with ESMTP id nAP2dCiX036825; Wed, 25 Nov 2009 02:39:12 GMT (envelope-from kmacy@svn.freebsd.org) Received: (from kmacy@localhost) by svn.freebsd.org (8.14.3/8.14.3/Submit) id nAP2dCW7036820; Wed, 25 Nov 2009 02:39:12 GMT (envelope-from kmacy@svn.freebsd.org) Message-Id: <200911250239.nAP2dCW7036820@svn.freebsd.org> From: Kip Macy Date: Wed, 25 Nov 2009 02:39:12 +0000 (UTC) To: src-committers@freebsd.org, svn-src-user@freebsd.org X-SVN-Group: user MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r199779 - in user/kmacy/releng_8_fcs_buf_xen/sys/i386: i386 include xen X-BeenThere: svn-src-user@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "SVN commit messages for the experimental " user" src tree" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 25 Nov 2009 02:39:12 -0000 Author: kmacy Date: Wed Nov 25 02:39:11 2009 New Revision: 199779 URL: http://svn.freebsd.org/changeset/base/199779 Log: fix compile for i386 and i386-xen builds Modified: user/kmacy/releng_8_fcs_buf_xen/sys/i386/i386/minidump_machdep.c user/kmacy/releng_8_fcs_buf_xen/sys/i386/i386/pmap.c user/kmacy/releng_8_fcs_buf_xen/sys/i386/include/md_var.h user/kmacy/releng_8_fcs_buf_xen/sys/i386/xen/pmap.c Modified: user/kmacy/releng_8_fcs_buf_xen/sys/i386/i386/minidump_machdep.c ============================================================================== --- user/kmacy/releng_8_fcs_buf_xen/sys/i386/i386/minidump_machdep.c Wed Nov 25 02:38:20 2009 (r199778) +++ user/kmacy/releng_8_fcs_buf_xen/sys/i386/i386/minidump_machdep.c Wed Nov 25 02:39:11 2009 (r199779) @@ -54,6 +54,7 @@ CTASSERT(sizeof(struct kerneldumpheader) #define DEV_ALIGN(x) (((off_t)(x) + (DEV_BSIZE-1)) & ~(DEV_BSIZE-1)) uint32_t *vm_page_dump; +uint32_t *vm_page_dump_exclude; int vm_page_dump_size; static struct kerneldumpheader kdh; Modified: user/kmacy/releng_8_fcs_buf_xen/sys/i386/i386/pmap.c ============================================================================== --- user/kmacy/releng_8_fcs_buf_xen/sys/i386/i386/pmap.c Wed Nov 25 02:38:20 2009 (r199778) +++ user/kmacy/releng_8_fcs_buf_xen/sys/i386/i386/pmap.c Wed Nov 25 02:39:11 2009 (r199779) @@ -1245,17 +1245,25 @@ pmap_map(vm_offset_t *virt, vm_paddr_t s * Note: SMP coherent. Uses a ranged shootdown IPI. */ void -pmap_qenter(vm_offset_t sva, vm_page_t *ma, int count) +pmap_qenter_prot(vm_offset_t sva, vm_page_t *ma, int count, vm_prot_t prot) { pt_entry_t *endpte, oldpte, *pte; + uint64_t flags = PG_V; + if (prot & VM_PROT_WRITE) + flags |= PG_RW; + if ((prot & VM_PROT_EXECUTE) == 0) + flags |= PG_NX; + oldpte = 0; pte = vtopte(sva); endpte = pte + count; while (pte < endpte) { oldpte |= *pte; pte_store(pte, VM_PAGE_TO_PHYS(*ma) | pgeflag | - pmap_cache_bits((*ma)->md.pat_mode, 0) | PG_RW | PG_V); + pmap_cache_bits((*ma)->md.pat_mode, 0) | flags | PG_V); + if (prot & VM_PROT_EXCLUDE) + dump_exclude_page(VM_PAGE_TO_PHYS(*ma)); pte++; ma++; } @@ -1264,6 +1272,16 @@ pmap_qenter(vm_offset_t sva, vm_page_t * PAGE_SIZE); } + +void +pmap_qenter(vm_offset_t sva, vm_page_t *ma, int count) +{ + + pmap_qenter_prot(sva, ma, count, + VM_PROT_READ|VM_PROT_WRITE|VM_PROT_EXECUTE); + +} + /* * This routine tears out page mappings from the * kernel -- it is meant only for temporary mappings. Modified: user/kmacy/releng_8_fcs_buf_xen/sys/i386/include/md_var.h ============================================================================== --- user/kmacy/releng_8_fcs_buf_xen/sys/i386/include/md_var.h Wed Nov 25 02:38:20 2009 (r199778) +++ user/kmacy/releng_8_fcs_buf_xen/sys/i386/include/md_var.h Wed Nov 25 02:39:11 2009 (r199779) @@ -72,6 +72,7 @@ extern int szfreebsd4_sigcode; extern int szosigcode; #endif extern uint32_t *vm_page_dump; +extern uint32_t *vm_page_dump_exclude; extern int vm_page_dump_size; typedef void alias_for_inthand_t(u_int cs, u_int ef, u_int esp, u_int ss); Modified: user/kmacy/releng_8_fcs_buf_xen/sys/i386/xen/pmap.c ============================================================================== --- user/kmacy/releng_8_fcs_buf_xen/sys/i386/xen/pmap.c Wed Nov 25 02:38:20 2009 (r199778) +++ user/kmacy/releng_8_fcs_buf_xen/sys/i386/xen/pmap.c Wed Nov 25 02:39:11 2009 (r199779) @@ -1323,7 +1323,7 @@ pmap_map(vm_offset_t *virt, vm_paddr_t s * Note: SMP coherent. Uses a ranged shootdown IPI. */ void -pmap_qenter(vm_offset_t sva, vm_page_t *ma, int count) +pmap_qenter_prot(vm_offset_t sva, vm_page_t *ma, int count, vm_prot_t prot) { pt_entry_t *endpte, *pte; vm_paddr_t pa; @@ -1332,12 +1332,22 @@ pmap_qenter(vm_offset_t sva, vm_page_t * multicall_entry_t mcl[16]; multicall_entry_t *mclp = mcl; int error; +#ifdef PAE + uint64_t flags = PG_V; + if ((prot & VM_PROT_EXECUTE) == 0) + flags |= PG_NX; +#else + uint32_t flags = 0; +#endif + + if (prot & VM_PROT_WRITE) + flags |= PG_RW; CTR2(KTR_PMAP, "pmap_qenter:sva=0x%x count=%d", va, count); pte = vtopte(sva); endpte = pte + count; while (pte < endpte) { - pa = xpmap_ptom(VM_PAGE_TO_PHYS(*ma)) | pgeflag | PG_RW | PG_V | PG_M | PG_A; + pa = xpmap_ptom(VM_PAGE_TO_PHYS(*ma)) | pgeflag | flags | PG_V | PG_M | PG_A; mclp->op = __HYPERVISOR_update_va_mapping; mclp->args[0] = va; @@ -1368,6 +1378,14 @@ pmap_qenter(vm_offset_t sva, vm_page_t * #endif } +void +pmap_qenter(vm_offset_t sva, vm_page_t *ma, int count) +{ + + pmap_qenter_prot(sva, ma, count, + VM_PROT_READ|VM_PROT_WRITE|VM_PROT_EXECUTE); + +} /* * This routine tears out page mappings from the From owner-svn-src-user@FreeBSD.ORG Wed Nov 25 02:39:33 2009 Return-Path: Delivered-To: svn-src-user@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id A5D131065679; Wed, 25 Nov 2009 02:39:33 +0000 (UTC) (envelope-from kmacy@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id 95C8B8FC18; Wed, 25 Nov 2009 02:39:33 +0000 (UTC) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.3/8.14.3) with ESMTP id nAP2dXEc036868; Wed, 25 Nov 2009 02:39:33 GMT (envelope-from kmacy@svn.freebsd.org) Received: (from kmacy@localhost) by svn.freebsd.org (8.14.3/8.14.3/Submit) id nAP2dXHQ036866; Wed, 25 Nov 2009 02:39:33 GMT (envelope-from kmacy@svn.freebsd.org) Message-Id: <200911250239.nAP2dXHQ036866@svn.freebsd.org> From: Kip Macy Date: Wed, 25 Nov 2009 02:39:33 +0000 (UTC) To: src-committers@freebsd.org, svn-src-user@freebsd.org X-SVN-Group: user MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r199780 - user/kmacy/releng_8_fcs_buf_xen/sys/amd64/amd64 X-BeenThere: svn-src-user@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "SVN commit messages for the experimental " user" src tree" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 25 Nov 2009 02:39:33 -0000 Author: kmacy Date: Wed Nov 25 02:39:33 2009 New Revision: 199780 URL: http://svn.freebsd.org/changeset/base/199780 Log: fix mismerge Modified: user/kmacy/releng_8_fcs_buf_xen/sys/amd64/amd64/pmap.c Modified: user/kmacy/releng_8_fcs_buf_xen/sys/amd64/amd64/pmap.c ============================================================================== --- user/kmacy/releng_8_fcs_buf_xen/sys/amd64/amd64/pmap.c Wed Nov 25 02:39:11 2009 (r199779) +++ user/kmacy/releng_8_fcs_buf_xen/sys/amd64/amd64/pmap.c Wed Nov 25 02:39:33 2009 (r199780) @@ -1153,8 +1153,7 @@ pmap_qenter_prot(vm_offset_t sva, vm_pag while (pte < endpte) { oldpte |= *pte; pte_store(pte, VM_PAGE_TO_PHYS(*ma) | PG_G | - pmap_cache_bits((*ma)->md.pat_mode, 0) | PG_RW | PG_V); - pte_store(pte, VM_PAGE_TO_PHYS(*ma) | PG_G | flags); + pmap_cache_bits((*ma)->md.pat_mode, 0) | flags | PG_V); if (prot & VM_PROT_EXCLUDE) dump_exclude_page(VM_PAGE_TO_PHYS(*ma)); pte++; @@ -1174,7 +1173,6 @@ pmap_qenter(vm_offset_t sva, vm_page_t * } - /* * This routine tears out page mappings from the * kernel -- it is meant only for temporary mappings. From owner-svn-src-user@FreeBSD.ORG Wed Nov 25 04:55:51 2009 Return-Path: Delivered-To: svn-src-user@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 4CFF0106568B; Wed, 25 Nov 2009 04:55:51 +0000 (UTC) (envelope-from kmacy@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id 3BF708FC0A; Wed, 25 Nov 2009 04:55:51 +0000 (UTC) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.3/8.14.3) with ESMTP id nAP4toaO039869; Wed, 25 Nov 2009 04:55:50 GMT (envelope-from kmacy@svn.freebsd.org) Received: (from kmacy@localhost) by svn.freebsd.org (8.14.3/8.14.3/Submit) id nAP4toPF039866; Wed, 25 Nov 2009 04:55:50 GMT (envelope-from kmacy@svn.freebsd.org) Message-Id: <200911250455.nAP4toPF039866@svn.freebsd.org> From: Kip Macy Date: Wed, 25 Nov 2009 04:55:50 +0000 (UTC) To: src-committers@freebsd.org, svn-src-user@freebsd.org X-SVN-Group: user MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r199788 - user/kmacy/releng_8_fcs_buf_xen/sys/cddl/contrib/opensolaris/uts/common/fs/zfs X-BeenThere: svn-src-user@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "SVN commit messages for the experimental " user" src tree" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 25 Nov 2009 04:55:51 -0000 Author: kmacy Date: Wed Nov 25 04:55:50 2009 New Revision: 199788 URL: http://svn.freebsd.org/changeset/base/199788 Log: fix user tool build by hiding buf manipulation Modified: user/kmacy/releng_8_fcs_buf_xen/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/arc.c user/kmacy/releng_8_fcs_buf_xen/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/vdev.c Modified: user/kmacy/releng_8_fcs_buf_xen/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/arc.c ============================================================================== --- user/kmacy/releng_8_fcs_buf_xen/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/arc.c Wed Nov 25 04:53:38 2009 (r199787) +++ user/kmacy/releng_8_fcs_buf_xen/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/arc.c Wed Nov 25 04:55:50 2009 (r199788) @@ -1299,6 +1299,7 @@ arc_buf_add_ref(arc_buf_t *buf, void* ta data, metadata, hits); } +#ifdef _KERNEL void arc_binval(spa_t *spa, dva_t *dva, uint64_t size) { @@ -1317,7 +1318,7 @@ arc_binval(spa_t *spa, dva_t *dva, uint6 if (dva == NULL || spa == NULL || blkno == 0 || size == 0) return; - blkno_lookup = blkno = dva->dva_word[1] & ~(1UL<<63); + blkno_lookup = blkno = dva->dva_word[1] & ~(1ULL<<63); vp = spa_get_vnode(spa); bo = &vp->v_bufobj; @@ -1385,7 +1386,7 @@ arc_pcache(struct vnode *vp, struct buf static void arc_bcache(arc_buf_t *buf) { - uint64_t blkno = buf->b_hdr->b_dva.dva_word[1] & ~(1UL<<63); + uint64_t blkno = buf->b_hdr->b_dva.dva_word[1] & ~(1ULL<<63); struct buf *newbp, *bp = buf->b_bp; struct vnode *vp = spa_get_vnode(buf->b_hdr->b_spa); struct bufobj *bo = &vp->v_bufobj; @@ -1411,6 +1412,13 @@ arc_bcache(arc_buf_t *buf) if (cachebuf) arc_pcache(vp, newbp, blkno); } +#else +void +arc_binval(spa_t *spa, dva_t *dva, uint64_t size) +{ +} +#endif + static void arc_getblk(arc_buf_t *buf) @@ -1418,31 +1426,37 @@ arc_getblk(arc_buf_t *buf) uint64_t size = buf->b_hdr->b_size; arc_buf_contents_t type = buf->b_hdr->b_type; spa_t *spa = buf->b_hdr->b_spa; - uint64_t blkno = buf->b_hdr->b_dva.dva_word[1] & ~(1UL<<63); + uint64_t blkno = buf->b_hdr->b_dva.dva_word[1] & ~(1ULL<<63); void *data; - struct buf *newbp, *bp; arc_buf_t *tbuf; struct vnode *vp; - struct bufobj *bo; int i, flags = 0; +#ifdef _KERNEL + struct buf *newbp, *bp; + struct bufobj *bo; vm_pindex_t start, end; vm_object_t object; - +#endif if (type == ARC_BUFC_METADATA) { arc_space_consume(size); } else { ASSERT(type == ARC_BUFC_DATA); +#ifdef _KERNEL flags = GB_NODUMP; +#endif atomic_add_64(&arc_size, size); } +#ifdef _KERNEL vp = spa_get_vnode(spa); bo = &vp->v_bufobj; newbp = NULL; - +#endif if (size < PAGE_SIZE) { data = zio_buf_alloc(size); - } else if ((buf->b_hdr->b_flags & ARC_BUF_CLONING) || + } +#ifdef _KERNEL + else if ((buf->b_hdr->b_flags & ARC_BUF_CLONING) || BUF_EMPTY(buf->b_hdr) || (blkno == 0)) { newbp = geteblk(size, flags); @@ -1485,13 +1499,11 @@ arc_getblk(arc_buf_t *buf) #endif } buf->b_bp = newbp; +#endif buf->b_data = data; } -void -arc_brelse(arc_buf_t *buf, void *data, size_t size); - -void +static void arc_brelse(arc_buf_t *buf, void *data, size_t size) { struct buf *bp = buf->b_bp; @@ -1504,6 +1516,7 @@ arc_brelse(arc_buf_t *buf, void *data, s zio_buf_free(buf->b_data, size); return; } +#ifdef _KERNEL #ifdef INVARIANTS for (i = 0; i < bp->b_npages; i++) KASSERT(bp->b_pages[i]->object == NULL, @@ -1523,6 +1536,7 @@ arc_brelse(arc_buf_t *buf, void *data, s bp->b_flags |= B_ZFS; brelse(bp); +#endif } /* @@ -2803,7 +2817,9 @@ arc_read_done(zio_t *zio) if (HDR_IN_HASH_TABLE(hdr)) buf_hash_remove(hdr); freeable = refcount_is_zero(&hdr->b_refcnt); - } else if (buf->b_bp != NULL) { + } +#ifdef _KERNEL + else if (buf->b_bp != NULL) { #ifdef INVARIANTS int i; for (i = 0; i < buf->b_bp->b_npages; i++) @@ -2813,7 +2829,7 @@ arc_read_done(zio_t *zio) buf->b_bp->b_flags |= B_CACHE; buf->b_bp->b_flags &= ~B_INVAL; } - +#endif /* * Broadcast before we drop the hash_lock to avoid the possibility * that the hdr (and hence the cv) might be freed before we get to @@ -3147,6 +3163,7 @@ top: * We hit in the page cache - can bypass the I/O stages * */ +#ifdef _KERNEL if ((buf->b_bp != NULL) && ((buf->b_bp->b_flags & (B_CACHE|B_INVAL)) == B_CACHE)) { /* @@ -3156,7 +3173,7 @@ top: ARCSTAT_BUMP(arcstat_page_cache_hits); rzio->io_pipeline = ZIO_INTERLOCK_STAGES; } - +#endif if (*arc_flags & ARC_WAIT) return (zio_wait(rzio)); @@ -3517,10 +3534,13 @@ arc_write_done(zio_t *zio) arc_hdr_destroy(exists); exists = buf_hash_insert(hdr, &hash_lock); ASSERT3P(exists, ==, NULL); - } else if (buf->b_bp != NULL) { + } +#ifdef _KERNEL + else if (buf->b_bp != NULL) { buf->b_bp->b_flags |= B_CACHE; buf->b_bp->b_flags &= ~B_INVAL; } +#endif hdr->b_flags &= ~ARC_IO_IN_PROGRESS; /* if it's not anon, we are doing a scrub */ if (hdr->b_state == arc_anon) Modified: user/kmacy/releng_8_fcs_buf_xen/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/vdev.c ============================================================================== --- user/kmacy/releng_8_fcs_buf_xen/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/vdev.c Wed Nov 25 04:53:38 2009 (r199787) +++ user/kmacy/releng_8_fcs_buf_xen/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/vdev.c Wed Nov 25 04:55:50 2009 (r199788) @@ -1066,6 +1066,7 @@ vdev_open(vdev_t *vd) (vdev_psize_to_asize(vd, 1<<17) >> SPA_MINBLOCKSHIFT); } +#ifdef _KERNEL if (vd->vdev_parent == NULL) { struct vnode *vp; @@ -1082,6 +1083,7 @@ vdev_open(vdev_t *vd) KASSERT(vp->v_object != NULL, ("vnode_create_vobject failed")); } +#endif /* * If a leaf vdev has a DTL, and seems healthy, then kick off a * resilver. But don't do this if we are doing a reopen for a @@ -1210,8 +1212,9 @@ vdev_close(vdev_t *vd) else vd->vdev_state = VDEV_STATE_CLOSED; vd->vdev_stat.vs_aux = VDEV_AUX_NONE; - +#ifdef _KERNEL vn_free(vd->vdev_vnode); +#endif } void From owner-svn-src-user@FreeBSD.ORG Wed Nov 25 05:42:54 2009 Return-Path: Delivered-To: svn-src-user@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 8E86A106566C; Wed, 25 Nov 2009 05:42:54 +0000 (UTC) (envelope-from kmacy@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id 7E6128FC0A; Wed, 25 Nov 2009 05:42:54 +0000 (UTC) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.3/8.14.3) with ESMTP id nAP5gs7i040689; Wed, 25 Nov 2009 05:42:54 GMT (envelope-from kmacy@svn.freebsd.org) Received: (from kmacy@localhost) by svn.freebsd.org (8.14.3/8.14.3/Submit) id nAP5gskV040687; Wed, 25 Nov 2009 05:42:54 GMT (envelope-from kmacy@svn.freebsd.org) Message-Id: <200911250542.nAP5gskV040687@svn.freebsd.org> From: Kip Macy Date: Wed, 25 Nov 2009 05:42:54 +0000 (UTC) To: src-committers@freebsd.org, svn-src-user@freebsd.org X-SVN-Group: user MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r199789 - user/kmacy/releng_8_fcs_buf_xen/sys/conf X-BeenThere: svn-src-user@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "SVN commit messages for the experimental " user" src tree" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 25 Nov 2009 05:42:54 -0000 Author: kmacy Date: Wed Nov 25 05:42:54 2009 New Revision: 199789 URL: http://svn.freebsd.org/changeset/base/199789 Log: make static ZFS compile on 32-bit Modified: user/kmacy/releng_8_fcs_buf_xen/sys/conf/kern.pre.mk Modified: user/kmacy/releng_8_fcs_buf_xen/sys/conf/kern.pre.mk ============================================================================== --- user/kmacy/releng_8_fcs_buf_xen/sys/conf/kern.pre.mk Wed Nov 25 04:55:50 2009 (r199788) +++ user/kmacy/releng_8_fcs_buf_xen/sys/conf/kern.pre.mk Wed Nov 25 05:42:54 2009 (r199789) @@ -127,9 +127,13 @@ CFLAGS+= ${INCLUDES} -D_KERNEL -DHAVE_KE ZFS_CFLAGS= -DFREEBSD_NAMECACHE -DBUILDING_ZFS -D_KERNEL ZFS_CFLAGS+=-DHAVE_KERNEL_OPTION_HEADERS -nostdinc -ZFS_CFLAGS+=-mcmodel=kernel -mno-red-zone -mfpmath=387 -mno-sse -mno-sse2 -mno-sse3 -mno-mmx -mno-3dnow -msoft-float -fno-asynchronous-unwind-tables -ffreestanding +ZFS_CFLAGS+= -mno-red-zone -mfpmath=387 -mno-sse -mno-sse2 -mno-sse3 -mno-mmx -mno-3dnow -msoft-float -fno-asynchronous-unwind-tables -ffreestanding ZFS_CFLAGS+=${COPTFLAGS} ${ZFS_C_DIALECT} ${DEBUG} ${CWARNFLAGS} ZFS_CFLAGS+=${ZFS_CWARNFLAGS} -include opt_global.h -I${.CURDIR} +.if ${MACHINE_ARCH} == "amd64" +ZFS_CFLAGS+=-mcmodel=kernel +.endif + .if ${CC} != "icc" CFLAGS+= -fno-common -finline-limit=${INLINE_LIMIT} From owner-svn-src-user@FreeBSD.ORG Wed Nov 25 10:43:03 2009 Return-Path: Delivered-To: svn-src-user@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id A9E95106568B; Wed, 25 Nov 2009 10:43:03 +0000 (UTC) (envelope-from ed@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id 98DBD8FC19; Wed, 25 Nov 2009 10:43:03 +0000 (UTC) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.3/8.14.3) with ESMTP id nAPAh3RY046463; Wed, 25 Nov 2009 10:43:03 GMT (envelope-from ed@svn.freebsd.org) Received: (from ed@localhost) by svn.freebsd.org (8.14.3/8.14.3/Submit) id nAPAh3g6046462; Wed, 25 Nov 2009 10:43:03 GMT (envelope-from ed@svn.freebsd.org) Message-Id: <200911251043.nAPAh3g6046462@svn.freebsd.org> From: Ed Schouten Date: Wed, 25 Nov 2009 10:43:03 +0000 (UTC) To: src-committers@freebsd.org, svn-src-user@freebsd.org X-SVN-Group: user MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r199790 - user/ed/newcons/sys/dev/vt X-BeenThere: svn-src-user@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "SVN commit messages for the experimental " user" src tree" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 25 Nov 2009 10:43:03 -0000 Author: ed Date: Wed Nov 25 10:43:03 2009 New Revision: 199790 URL: http://svn.freebsd.org/changeset/base/199790 Log: Use atomic increments for vt_unit. It's not likely that multiple allocations of vt devices will ever occur at the same time, but if it would happen, the results are very scary. Modified: user/ed/newcons/sys/dev/vt/vt_core.c Modified: user/ed/newcons/sys/dev/vt/vt_core.c ============================================================================== --- user/ed/newcons/sys/dev/vt/vt_core.c Wed Nov 25 05:42:54 2009 (r199789) +++ user/ed/newcons/sys/dev/vt/vt_core.c Wed Nov 25 10:43:03 2009 (r199790) @@ -599,7 +599,7 @@ vtterm_cnprobe(struct terminal *tm, stru return; } - vd->vd_unit = vt_unit++; + vd->vd_unit = atomic_fetchadd_int(&vt_unit, 1); sprintf(cp->cn_name, "ttyv%r", VT_UNIT(vw)); if (!(vd->vd_flags & VDF_TEXTMODE)) @@ -1032,7 +1032,7 @@ vt_allocate(struct vt_driver *drv, void vd = malloc(sizeof *vd, M_VT, M_WAITOK|M_ZERO); vd->vd_driver = drv; vd->vd_softc = softc; - vd->vd_unit = vt_unit++; + vd->vd_unit = atomic_fetchadd_int(&vt_unit, 1); vd->vd_flags = VDF_INVALID; vd->vd_driver->vd_init(vd); From owner-svn-src-user@FreeBSD.ORG Wed Nov 25 10:52:41 2009 Return-Path: Delivered-To: svn-src-user@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 9091A1065698; Wed, 25 Nov 2009 10:52:41 +0000 (UTC) (envelope-from ed@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id 80A118FC14; Wed, 25 Nov 2009 10:52:41 +0000 (UTC) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.3/8.14.3) with ESMTP id nAPAqfjo046754; Wed, 25 Nov 2009 10:52:41 GMT (envelope-from ed@svn.freebsd.org) Received: (from ed@localhost) by svn.freebsd.org (8.14.3/8.14.3/Submit) id nAPAqfHN046752; Wed, 25 Nov 2009 10:52:41 GMT (envelope-from ed@svn.freebsd.org) Message-Id: <200911251052.nAPAqfHN046752@svn.freebsd.org> From: Ed Schouten Date: Wed, 25 Nov 2009 10:52:41 +0000 (UTC) To: src-committers@freebsd.org, svn-src-user@freebsd.org X-SVN-Group: user MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r199792 - user/ed/newcons/sys/kern X-BeenThere: svn-src-user@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "SVN commit messages for the experimental " user" src tree" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 25 Nov 2009 10:52:41 -0000 Author: ed Date: Wed Nov 25 10:52:41 2009 New Revision: 199792 URL: http://svn.freebsd.org/changeset/base/199792 Log: Remove unneeded initializer. Modified: user/ed/newcons/sys/kern/subr_terminal.c Modified: user/ed/newcons/sys/kern/subr_terminal.c ============================================================================== --- user/ed/newcons/sys/kern/subr_terminal.c Wed Nov 25 10:52:07 2009 (r199791) +++ user/ed/newcons/sys/kern/subr_terminal.c Wed Nov 25 10:52:41 2009 (r199792) @@ -292,7 +292,7 @@ void terminal_input_special(struct terminal *tm, unsigned int k) { struct tty *tp; - const char *str = NULL; + const char *str; tp = tm->tm_tty; if (tp == NULL) From owner-svn-src-user@FreeBSD.ORG Wed Nov 25 10:56:51 2009 Return-Path: Delivered-To: svn-src-user@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 4A0D9106568D; Wed, 25 Nov 2009 10:56:51 +0000 (UTC) (envelope-from ed@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id 1FC998FC19; Wed, 25 Nov 2009 10:56:51 +0000 (UTC) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.3/8.14.3) with ESMTP id nAPAuovV046884; Wed, 25 Nov 2009 10:56:50 GMT (envelope-from ed@svn.freebsd.org) Received: (from ed@localhost) by svn.freebsd.org (8.14.3/8.14.3/Submit) id nAPAuoLN046882; Wed, 25 Nov 2009 10:56:50 GMT (envelope-from ed@svn.freebsd.org) Message-Id: <200911251056.nAPAuoLN046882@svn.freebsd.org> From: Ed Schouten Date: Wed, 25 Nov 2009 10:56:50 +0000 (UTC) To: src-committers@freebsd.org, svn-src-user@freebsd.org X-SVN-Group: user MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r199793 - user/ed/newcons/sys/kern X-BeenThere: svn-src-user@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "SVN commit messages for the experimental " user" src tree" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 25 Nov 2009 10:56:51 -0000 Author: ed Date: Wed Nov 25 10:56:50 2009 New Revision: 199793 URL: http://svn.freebsd.org/changeset/base/199793 Log: Tidy up this code by moving the TTY == NULL checks to the top. Modified: user/ed/newcons/sys/kern/subr_terminal.c Modified: user/ed/newcons/sys/kern/subr_terminal.c ============================================================================== --- user/ed/newcons/sys/kern/subr_terminal.c Wed Nov 25 10:52:41 2009 (r199792) +++ user/ed/newcons/sys/kern/subr_terminal.c Wed Nov 25 10:56:50 2009 (r199793) @@ -233,45 +233,46 @@ terminal_input_char(struct terminal *tm, { struct tty *tp; + tp = tm->tm_tty; + if (tp == NULL) + return; + /* Strip off any attributes. */ c = TCHAR_CHARACTER(c); - tp = tm->tm_tty; - if (tp != NULL) { - tty_lock(tp); - /* - * Conversion to UTF-8. - */ - if (c < 0x80) { - ttydisc_rint(tp, c, 0); - } else if (c < 0x800) { - char str[2] = { - 0xc0 | (c >> 6), - 0x80 | (c & 0x3f) - }; - - ttydisc_rint_simple(tp, str, sizeof str); - } else if (c < 0x10000) { - char str[3] = { - 0xe0 | (c >> 12), - 0x80 | ((c >> 6) & 0x3f), - 0x80 | (c & 0x3f) - }; - - ttydisc_rint_simple(tp, str, sizeof str); - } else { - char str[4] = { - 0xf0 | (c >> 18), - 0x80 | ((c >> 12) & 0x3f), - 0x80 | ((c >> 6) & 0x3f), - 0x80 | (c & 0x3f) - }; + tty_lock(tp); + /* + * Conversion to UTF-8. + */ + if (c < 0x80) { + ttydisc_rint(tp, c, 0); + } else if (c < 0x800) { + char str[2] = { + 0xc0 | (c >> 6), + 0x80 | (c & 0x3f) + }; + + ttydisc_rint_simple(tp, str, sizeof str); + } else if (c < 0x10000) { + char str[3] = { + 0xe0 | (c >> 12), + 0x80 | ((c >> 6) & 0x3f), + 0x80 | (c & 0x3f) + }; + + ttydisc_rint_simple(tp, str, sizeof str); + } else { + char str[4] = { + 0xf0 | (c >> 18), + 0x80 | ((c >> 12) & 0x3f), + 0x80 | ((c >> 6) & 0x3f), + 0x80 | (c & 0x3f) + }; - ttydisc_rint_simple(tp, str, sizeof str); - } - ttydisc_rint_done(tp); - tty_unlock(tp); + ttydisc_rint_simple(tp, str, sizeof str); } + ttydisc_rint_done(tp); + tty_unlock(tp); } void @@ -280,12 +281,13 @@ terminal_input_raw(struct terminal *tm, struct tty *tp; tp = tm->tm_tty; - if (tp != NULL) { - tty_lock(tp); - ttydisc_rint(tp, c, 0); - ttydisc_rint_done(tp); - tty_unlock(tp); - } + if (tp == NULL) + return; + + tty_lock(tp); + ttydisc_rint(tp, c, 0); + ttydisc_rint_done(tp); + tty_unlock(tp); } void @@ -533,9 +535,10 @@ termteken_respond(void *softc, const voi * input. */ tp = tm->tm_tty; - if (tp != NULL) { - ttydisc_rint_simple(tp, buf, len); - ttydisc_rint_done(tp); - } + if (tp == NULL) + return; + + ttydisc_rint_simple(tp, buf, len); + ttydisc_rint_done(tp); #endif } From owner-svn-src-user@FreeBSD.ORG Thu Nov 26 19:01:21 2009 Return-Path: Delivered-To: svn-src-user@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 0036A1065672; Thu, 26 Nov 2009 19:01:20 +0000 (UTC) (envelope-from ed@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id DD9EE8FC12; Thu, 26 Nov 2009 19:01:20 +0000 (UTC) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.3/8.14.3) with ESMTP id nAQJ1KFx090439; Thu, 26 Nov 2009 19:01:20 GMT (envelope-from ed@svn.freebsd.org) Received: (from ed@localhost) by svn.freebsd.org (8.14.3/8.14.3/Submit) id nAQJ1K1W090411; Thu, 26 Nov 2009 19:01:20 GMT (envelope-from ed@svn.freebsd.org) Message-Id: <200911261901.nAQJ1K1W090411@svn.freebsd.org> From: Ed Schouten Date: Thu, 26 Nov 2009 19:01:20 +0000 (UTC) To: src-committers@freebsd.org, svn-src-user@freebsd.org X-SVN-Group: user MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r199841 - in user/ed/newcons: . bin bin/ps bin/pwait bin/sh contrib/ipfilter/man crypto/openssh games/factor include lib/libc/compat-43 lib/libc/gen lib/libc/include lib/libc/locale lib... X-BeenThere: svn-src-user@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "SVN commit messages for the experimental " user" src tree" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 26 Nov 2009 19:01:21 -0000 Author: ed Date: Thu Nov 26 19:01:19 2009 New Revision: 199841 URL: http://svn.freebsd.org/changeset/base/199841 Log: MFC this branch, so I can run this on my MacBook. This means I can finally hack while on the road... Added: user/ed/newcons/bin/pwait/ - copied from r199839, head/bin/pwait/ user/ed/newcons/lib/libc/gen/_once_stub.c - copied unchanged from r199839, head/lib/libc/gen/_once_stub.c user/ed/newcons/share/man/man4/ada.4 - copied unchanged from r199839, head/share/man/man4/ada.4 user/ed/newcons/share/man/man4/atp.4 - copied unchanged from r199839, head/share/man/man4/atp.4 user/ed/newcons/sys/boot/i386/zfsloader/ - copied from r199839, head/sys/boot/i386/zfsloader/ user/ed/newcons/sys/contrib/dev/acpica/namespace/nsrepair2.c - copied unchanged from r199839, head/sys/contrib/dev/acpica/namespace/nsrepair2.c user/ed/newcons/tools/regression/bin/sh/builtins/cd2.0 - copied unchanged from r199839, head/tools/regression/bin/sh/builtins/cd2.0 user/ed/newcons/tools/regression/bin/sh/builtins/fc1.0 - copied unchanged from r199839, head/tools/regression/bin/sh/builtins/fc1.0 user/ed/newcons/tools/regression/bin/sh/builtins/trap3.0 - copied unchanged from r199839, head/tools/regression/bin/sh/builtins/trap3.0 user/ed/newcons/tools/regression/bin/sh/parser/for1.0 - copied unchanged from r199839, head/tools/regression/bin/sh/parser/for1.0 user/ed/newcons/tools/regression/bpf/bpf_filter/tests/test0084.h - copied unchanged from r199839, head/tools/regression/bpf/bpf_filter/tests/test0084.h user/ed/newcons/tools/tools/nanobsd/pcengines/ - copied from r199839, head/tools/tools/nanobsd/pcengines/ Deleted: user/ed/newcons/sys/dev/ata/ata-usb.c user/ed/newcons/sys/modules/ata/atausb/ Modified: user/ed/newcons/ObsoleteFiles.inc user/ed/newcons/UPDATING user/ed/newcons/bin/Makefile user/ed/newcons/bin/ps/keyword.c user/ed/newcons/bin/sh/cd.c user/ed/newcons/bin/sh/error.c user/ed/newcons/bin/sh/error.h user/ed/newcons/bin/sh/eval.c user/ed/newcons/bin/sh/histedit.c user/ed/newcons/bin/sh/input.c user/ed/newcons/bin/sh/input.h user/ed/newcons/bin/sh/jobs.c user/ed/newcons/bin/sh/main.c user/ed/newcons/bin/sh/output.c user/ed/newcons/bin/sh/output.h user/ed/newcons/bin/sh/parser.c user/ed/newcons/bin/sh/redir.c user/ed/newcons/bin/sh/trap.c user/ed/newcons/bin/sh/var.c user/ed/newcons/contrib/ipfilter/man/ipf.8 user/ed/newcons/crypto/openssh/sshd.c user/ed/newcons/games/factor/factor.c user/ed/newcons/include/signal.h user/ed/newcons/lib/libc/compat-43/Makefile.inc user/ed/newcons/lib/libc/compat-43/Symbol.map user/ed/newcons/lib/libc/compat-43/sigcompat.c user/ed/newcons/lib/libc/compat-43/sigpause.2 user/ed/newcons/lib/libc/gen/Makefile.inc user/ed/newcons/lib/libc/gen/getcap.c user/ed/newcons/lib/libc/gen/getusershell.c user/ed/newcons/lib/libc/gen/tzset.3 user/ed/newcons/lib/libc/gen/wordexp.c user/ed/newcons/lib/libc/include/libc_private.h user/ed/newcons/lib/libc/locale/nl_langinfo.3 user/ed/newcons/lib/libc/nls/hu_HU.ISO8859-2.msg user/ed/newcons/lib/libc/nls/ko_KR.UTF-8.msg (contents, props changed) user/ed/newcons/lib/libc/nls/ko_KR.eucKR.msg (contents, props changed) user/ed/newcons/lib/libc/posix1e/acl_from_text.c user/ed/newcons/lib/libc/rpc/clnt_raw.c user/ed/newcons/lib/libc/rpc/getnetconfig.c user/ed/newcons/lib/libc/rpc/getrpcent.c user/ed/newcons/lib/libc/rpc/key_call.c user/ed/newcons/lib/libc/rpc/svc_raw.c user/ed/newcons/lib/libc/stdio/fgetws.c user/ed/newcons/lib/libc/stdio/fvwrite.c user/ed/newcons/lib/libc/stdio/vfwprintf.c user/ed/newcons/lib/libc/stdio/xprintf_time.c user/ed/newcons/lib/libc/stdlib/malloc.c user/ed/newcons/lib/libc/stdtime/localtime.c user/ed/newcons/lib/libc/sys/vfork.2 user/ed/newcons/lib/libc/yp/yplib.c user/ed/newcons/lib/libdevinfo/devinfo.h user/ed/newcons/lib/libfetch/ftp.c user/ed/newcons/lib/librt/Makefile user/ed/newcons/lib/librt/mq.c user/ed/newcons/lib/librt/sigev_thread.c user/ed/newcons/lib/libtacplus/taclib.c user/ed/newcons/lib/libthr/Makefile user/ed/newcons/lib/libusb/libusb10.c user/ed/newcons/lib/libusb/libusb10.h user/ed/newcons/lib/libusb/libusb20.3 user/ed/newcons/lib/libusb/libusb20.c user/ed/newcons/lib/libusb/libusb20.h user/ed/newcons/lib/libutil/pw_util.c user/ed/newcons/libexec/rtld-elf/rtld.c user/ed/newcons/libexec/rtld-elf/rtld.h user/ed/newcons/sbin/atacontrol/atacontrol.c user/ed/newcons/sbin/camcontrol/camcontrol.8 user/ed/newcons/sbin/camcontrol/camcontrol.c user/ed/newcons/sbin/fsck/fsck.c user/ed/newcons/sbin/ifconfig/ifconfig.c user/ed/newcons/sbin/ipfw/dummynet.c user/ed/newcons/sbin/mount_cd9660/mount_cd9660.c user/ed/newcons/share/man/man3/queue.3 user/ed/newcons/share/man/man4/Makefile user/ed/newcons/share/man/man4/ata.4 user/ed/newcons/share/man/man4/mfi.4 user/ed/newcons/share/man/man4/wi.4 user/ed/newcons/share/man/man5/rc.conf.5 user/ed/newcons/share/man/man8/Makefile user/ed/newcons/share/man/man8/rc.8 user/ed/newcons/share/misc/committers-ports.dot user/ed/newcons/share/timedef/ja_JP.SJIS.src user/ed/newcons/share/timedef/ja_JP.UTF-8.src user/ed/newcons/share/timedef/ja_JP.eucJP.src user/ed/newcons/share/zoneinfo/antarctica user/ed/newcons/share/zoneinfo/australasia user/ed/newcons/share/zoneinfo/etcetera user/ed/newcons/sys/amd64/amd64/bpf_jit_machdep.c user/ed/newcons/sys/amd64/amd64/bpf_jit_machdep.h user/ed/newcons/sys/amd64/include/param.h user/ed/newcons/sys/arm/at91/if_ate.c user/ed/newcons/sys/boot/Makefile user/ed/newcons/sys/boot/i386/Makefile user/ed/newcons/sys/boot/i386/libi386/elf32_freebsd.c user/ed/newcons/sys/boot/i386/libi386/elf64_freebsd.c user/ed/newcons/sys/boot/i386/loader/Makefile user/ed/newcons/sys/boot/i386/zfsboot/zfsboot.c user/ed/newcons/sys/boot/i386/zfsboot/zfsldr.S user/ed/newcons/sys/boot/uboot/common/metadata.c user/ed/newcons/sys/cam/ata/ata_all.c user/ed/newcons/sys/cam/ata/ata_all.h user/ed/newcons/sys/cam/ata/ata_pmp.c user/ed/newcons/sys/cam/ata/ata_xpt.c user/ed/newcons/sys/cam/cam_ccb.h user/ed/newcons/sys/cam/cam_periph.c user/ed/newcons/sys/cam/cam_queue.c user/ed/newcons/sys/cam/cam_queue.h user/ed/newcons/sys/cam/cam_xpt.c user/ed/newcons/sys/cam/scsi/scsi_cd.c user/ed/newcons/sys/cam/scsi/scsi_ch.c user/ed/newcons/sys/conf/files user/ed/newcons/sys/contrib/dev/acpica/changes.txt user/ed/newcons/sys/contrib/dev/acpica/compiler/aslcompile.c user/ed/newcons/sys/contrib/dev/acpica/compiler/aslerror.c user/ed/newcons/sys/contrib/dev/acpica/compiler/asllookup.c user/ed/newcons/sys/contrib/dev/acpica/compiler/asloperands.c user/ed/newcons/sys/contrib/dev/acpica/compiler/asltransform.c user/ed/newcons/sys/contrib/dev/acpica/compiler/asltypes.h user/ed/newcons/sys/contrib/dev/acpica/debugger/dbcmds.c user/ed/newcons/sys/contrib/dev/acpica/debugger/dbexec.c user/ed/newcons/sys/contrib/dev/acpica/debugger/dbstats.c user/ed/newcons/sys/contrib/dev/acpica/dispatcher/dsinit.c user/ed/newcons/sys/contrib/dev/acpica/dispatcher/dsmthdat.c user/ed/newcons/sys/contrib/dev/acpica/dispatcher/dsobject.c user/ed/newcons/sys/contrib/dev/acpica/events/evgpeblk.c user/ed/newcons/sys/contrib/dev/acpica/events/evregion.c user/ed/newcons/sys/contrib/dev/acpica/executer/exconfig.c user/ed/newcons/sys/contrib/dev/acpica/executer/exconvrt.c user/ed/newcons/sys/contrib/dev/acpica/executer/exfield.c user/ed/newcons/sys/contrib/dev/acpica/executer/exoparg1.c user/ed/newcons/sys/contrib/dev/acpica/executer/exoparg6.c user/ed/newcons/sys/contrib/dev/acpica/executer/exregion.c user/ed/newcons/sys/contrib/dev/acpica/include/acconfig.h user/ed/newcons/sys/contrib/dev/acpica/include/acmacros.h user/ed/newcons/sys/contrib/dev/acpica/include/acnamesp.h user/ed/newcons/sys/contrib/dev/acpica/include/acpixf.h user/ed/newcons/sys/contrib/dev/acpica/include/acutils.h user/ed/newcons/sys/contrib/dev/acpica/namespace/nsdump.c user/ed/newcons/sys/contrib/dev/acpica/namespace/nsdumpdv.c user/ed/newcons/sys/contrib/dev/acpica/namespace/nseval.c user/ed/newcons/sys/contrib/dev/acpica/namespace/nsinit.c user/ed/newcons/sys/contrib/dev/acpica/namespace/nspredef.c user/ed/newcons/sys/contrib/dev/acpica/namespace/nsrepair.c user/ed/newcons/sys/contrib/dev/acpica/namespace/nswalk.c user/ed/newcons/sys/contrib/dev/acpica/namespace/nsxfeval.c user/ed/newcons/sys/contrib/dev/acpica/parser/psloop.c user/ed/newcons/sys/contrib/dev/acpica/parser/psparse.c user/ed/newcons/sys/contrib/dev/acpica/parser/psxface.c user/ed/newcons/sys/contrib/dev/acpica/utilities/utmisc.c user/ed/newcons/sys/contrib/dev/acpica/utilities/utobject.c user/ed/newcons/sys/ddb/db_command.c user/ed/newcons/sys/dev/acpica/acpi.c user/ed/newcons/sys/dev/acpica/acpi_dock.c user/ed/newcons/sys/dev/acpica/acpi_pci.c user/ed/newcons/sys/dev/acpica/acpi_video.c user/ed/newcons/sys/dev/ahci/ahci.c user/ed/newcons/sys/dev/ahci/ahci.h user/ed/newcons/sys/dev/aic7xxx/ahd_pci.c user/ed/newcons/sys/dev/aic7xxx/aic79xx.c user/ed/newcons/sys/dev/aic7xxx/aic79xx.h user/ed/newcons/sys/dev/aic7xxx/aic79xx_osm.c user/ed/newcons/sys/dev/aic7xxx/aic79xx_osm.h user/ed/newcons/sys/dev/an/if_an.c user/ed/newcons/sys/dev/an/if_an_isa.c user/ed/newcons/sys/dev/an/if_an_pccard.c user/ed/newcons/sys/dev/an/if_an_pci.c user/ed/newcons/sys/dev/an/if_anreg.h user/ed/newcons/sys/dev/ata/ata-all.c user/ed/newcons/sys/dev/ata/ata-disk.c user/ed/newcons/sys/dev/ata/ata-pci.c user/ed/newcons/sys/dev/ata/ata-pci.h user/ed/newcons/sys/dev/ata/chipsets/ata-ahci.c user/ed/newcons/sys/dev/ata/chipsets/ata-intel.c user/ed/newcons/sys/dev/ata/chipsets/ata-jmicron.c user/ed/newcons/sys/dev/ata/chipsets/ata-marvell.c user/ed/newcons/sys/dev/ath/ath_hal/ah_regdomain.c user/ed/newcons/sys/dev/bge/if_bge.c user/ed/newcons/sys/dev/bge/if_bgereg.h user/ed/newcons/sys/dev/ce/if_ce.c user/ed/newcons/sys/dev/cm/smc90cx6.c user/ed/newcons/sys/dev/cm/smc90cx6var.h user/ed/newcons/sys/dev/cp/if_cp.c user/ed/newcons/sys/dev/ctau/if_ct.c user/ed/newcons/sys/dev/cx/if_cx.c user/ed/newcons/sys/dev/de/if_de.c user/ed/newcons/sys/dev/de/if_devar.h user/ed/newcons/sys/dev/ed/if_ed.c user/ed/newcons/sys/dev/ed/if_ed_pccard.c user/ed/newcons/sys/dev/ed/if_edvar.h user/ed/newcons/sys/dev/ep/if_ep.c user/ed/newcons/sys/dev/ep/if_epvar.h user/ed/newcons/sys/dev/et/if_et.c user/ed/newcons/sys/dev/et/if_etreg.h user/ed/newcons/sys/dev/et/if_etvar.h user/ed/newcons/sys/dev/fatm/if_fatm.c user/ed/newcons/sys/dev/fatm/if_fatmvar.h user/ed/newcons/sys/dev/fe/if_fe_pccard.c user/ed/newcons/sys/dev/hwpmc/hwpmc_logging.c user/ed/newcons/sys/dev/ixgb/if_ixgb.c user/ed/newcons/sys/dev/ixgb/if_ixgb.h user/ed/newcons/sys/dev/lge/if_lge.c user/ed/newcons/sys/dev/lge/if_lgereg.h user/ed/newcons/sys/dev/lmc/if_lmc.c user/ed/newcons/sys/dev/lmc/if_lmc.h user/ed/newcons/sys/dev/malo/if_malo.c user/ed/newcons/sys/dev/malo/if_malo.h user/ed/newcons/sys/dev/msk/if_msk.c user/ed/newcons/sys/dev/mwl/if_mwl.c user/ed/newcons/sys/dev/mwl/if_mwlvar.h user/ed/newcons/sys/dev/my/if_my.c user/ed/newcons/sys/dev/my/if_myreg.h user/ed/newcons/sys/dev/nve/if_nve.c user/ed/newcons/sys/dev/nve/if_nvereg.h user/ed/newcons/sys/dev/nxge/if_nxge.c user/ed/newcons/sys/dev/pci/pci.c user/ed/newcons/sys/dev/pcn/if_pcn.c user/ed/newcons/sys/dev/pcn/if_pcnreg.h user/ed/newcons/sys/dev/pdq/if_fea.c user/ed/newcons/sys/dev/pdq/if_fpa.c user/ed/newcons/sys/dev/pdq/pdq_freebsd.h user/ed/newcons/sys/dev/pdq/pdq_ifsubr.c user/ed/newcons/sys/dev/re/if_re.c user/ed/newcons/sys/dev/siis/siis.c user/ed/newcons/sys/dev/siis/siis.h user/ed/newcons/sys/dev/sn/if_sn.c user/ed/newcons/sys/dev/sn/if_sn_pccard.c user/ed/newcons/sys/dev/sn/if_snvar.h user/ed/newcons/sys/dev/sound/pci/hda/hdac.c user/ed/newcons/sys/dev/sound/usb/uaudio.c user/ed/newcons/sys/dev/ste/if_ste.c user/ed/newcons/sys/dev/ste/if_stereg.h user/ed/newcons/sys/dev/syscons/scvidctl.c user/ed/newcons/sys/dev/ti/if_ti.c user/ed/newcons/sys/dev/ti/if_tireg.h user/ed/newcons/sys/dev/tl/if_tl.c user/ed/newcons/sys/dev/tl/if_tlreg.h user/ed/newcons/sys/dev/tsec/if_tsec.c user/ed/newcons/sys/dev/usb/controller/at91dci.c user/ed/newcons/sys/dev/usb/controller/atmegadci.c user/ed/newcons/sys/dev/usb/controller/avr32dci.c user/ed/newcons/sys/dev/usb/controller/ehci.c user/ed/newcons/sys/dev/usb/controller/musb_otg.c user/ed/newcons/sys/dev/usb/controller/musb_otg.h user/ed/newcons/sys/dev/usb/controller/ohci.c user/ed/newcons/sys/dev/usb/controller/uhci.c user/ed/newcons/sys/dev/usb/controller/uhci_pci.c user/ed/newcons/sys/dev/usb/controller/uhcireg.h user/ed/newcons/sys/dev/usb/controller/usb_controller.c user/ed/newcons/sys/dev/usb/controller/uss820dci.c user/ed/newcons/sys/dev/usb/input/atp.c user/ed/newcons/sys/dev/usb/input/ukbd.c user/ed/newcons/sys/dev/usb/net/if_aue.c user/ed/newcons/sys/dev/usb/net/if_axe.c user/ed/newcons/sys/dev/usb/net/if_cdce.c user/ed/newcons/sys/dev/usb/net/if_cue.c user/ed/newcons/sys/dev/usb/net/if_kue.c user/ed/newcons/sys/dev/usb/net/if_rue.c user/ed/newcons/sys/dev/usb/net/if_udav.c user/ed/newcons/sys/dev/usb/serial/u3g.c user/ed/newcons/sys/dev/usb/serial/uark.c user/ed/newcons/sys/dev/usb/serial/ubser.c user/ed/newcons/sys/dev/usb/serial/ucycom.c user/ed/newcons/sys/dev/usb/serial/ufoma.c user/ed/newcons/sys/dev/usb/serial/uftdi.c user/ed/newcons/sys/dev/usb/serial/ugensa.c user/ed/newcons/sys/dev/usb/serial/umct.c user/ed/newcons/sys/dev/usb/serial/umodem.c user/ed/newcons/sys/dev/usb/serial/uplcom.c user/ed/newcons/sys/dev/usb/storage/umass.c user/ed/newcons/sys/dev/usb/template/usb_template.c user/ed/newcons/sys/dev/usb/usb_busdma.c user/ed/newcons/sys/dev/usb/usb_core.h user/ed/newcons/sys/dev/usb/usb_debug.c user/ed/newcons/sys/dev/usb/usb_debug.h user/ed/newcons/sys/dev/usb/usb_dev.c user/ed/newcons/sys/dev/usb/usb_device.c user/ed/newcons/sys/dev/usb/usb_generic.c user/ed/newcons/sys/dev/usb/usb_hid.c user/ed/newcons/sys/dev/usb/usb_hub.c user/ed/newcons/sys/dev/usb/usb_hub.h user/ed/newcons/sys/dev/usb/usb_msctest.c user/ed/newcons/sys/dev/usb/usb_process.c user/ed/newcons/sys/dev/usb/usb_request.c user/ed/newcons/sys/dev/usb/usb_transfer.c user/ed/newcons/sys/dev/usb/usbdevs user/ed/newcons/sys/dev/usb/usbdi.h user/ed/newcons/sys/dev/usb/wlan/if_upgt.c user/ed/newcons/sys/dev/vge/if_vge.c user/ed/newcons/sys/dev/vge/if_vgevar.h user/ed/newcons/sys/dev/vx/if_vx.c user/ed/newcons/sys/dev/vx/if_vxvar.h user/ed/newcons/sys/dev/wb/if_wb.c user/ed/newcons/sys/dev/wb/if_wbreg.h user/ed/newcons/sys/dev/wl/if_wl.c user/ed/newcons/sys/dev/xen/blkfront/blkfront.c user/ed/newcons/sys/dev/xen/console/console.c user/ed/newcons/sys/dev/xen/netfront/netfront.c user/ed/newcons/sys/fs/nfs/nfs_var.h user/ed/newcons/sys/fs/nfsserver/nfs_nfsdport.c user/ed/newcons/sys/fs/nfsserver/nfs_nfsdserv.c user/ed/newcons/sys/i386/cpufreq/est.c user/ed/newcons/sys/i386/i386/bpf_jit_machdep.c user/ed/newcons/sys/i386/i386/bpf_jit_machdep.h user/ed/newcons/sys/i386/xen/pmap.c user/ed/newcons/sys/ia64/ia64/db_machdep.c user/ed/newcons/sys/ia64/ia64/exception.S user/ed/newcons/sys/ia64/ia64/interrupt.c user/ed/newcons/sys/ia64/ia64/trap.c user/ed/newcons/sys/ia64/include/param.h user/ed/newcons/sys/kern/kern_descrip.c user/ed/newcons/sys/kern/kern_linker.c user/ed/newcons/sys/kern/kern_sig.c user/ed/newcons/sys/kern/sched_ule.c user/ed/newcons/sys/kern/sys_process.c user/ed/newcons/sys/kern/tty.c user/ed/newcons/sys/kern/vfs_subr.c user/ed/newcons/sys/mips/adm5120/if_admsw.c user/ed/newcons/sys/mips/adm5120/if_admswvar.h user/ed/newcons/sys/modules/acpi/acpi/Makefile user/ed/newcons/sys/net/bpf_jitter.c user/ed/newcons/sys/net/bpf_jitter.h user/ed/newcons/sys/net/route.c user/ed/newcons/sys/netinet/in_mcast.c user/ed/newcons/sys/netinet/raw_ip.c user/ed/newcons/sys/netinet/sctp_asconf.c user/ed/newcons/sys/netinet/sctp_auth.c user/ed/newcons/sys/netinet/sctp_constants.h user/ed/newcons/sys/netinet/sctp_input.c user/ed/newcons/sys/netinet/sctp_os_bsd.h user/ed/newcons/sys/netinet/sctp_output.c user/ed/newcons/sys/netinet/sctp_pcb.c user/ed/newcons/sys/netinet/sctp_structs.h user/ed/newcons/sys/netinet/sctp_usrreq.c user/ed/newcons/sys/netinet/sctputil.c user/ed/newcons/sys/netinet6/in6_mcast.c user/ed/newcons/sys/netinet6/raw_ip6.c user/ed/newcons/sys/netipsec/key.c user/ed/newcons/sys/nfsserver/nfs_fha.c user/ed/newcons/sys/pc98/conf/NOTES user/ed/newcons/sys/powerpc/aim/trap.c user/ed/newcons/sys/powerpc/mpc85xx/pci_ocp.c user/ed/newcons/sys/powerpc/powerpc/cpu.c user/ed/newcons/sys/sparc64/sparc64/machdep.c user/ed/newcons/sys/sys/ata.h user/ed/newcons/sys/sys/elf_common.h user/ed/newcons/sys/sys/param.h user/ed/newcons/sys/sys/signal.h user/ed/newcons/sys/sys/signalvar.h user/ed/newcons/sys/vm/vm.h user/ed/newcons/sys/vm/vm_extern.h user/ed/newcons/sys/vm/vm_fault.c user/ed/newcons/sys/vm/vm_map.c user/ed/newcons/sys/vm/vm_map.h user/ed/newcons/tools/regression/bin/sh/builtins/cd1.0 user/ed/newcons/tools/regression/bpf/bpf_filter/Makefile user/ed/newcons/tools/regression/bpf/bpf_filter/bpf_test.c user/ed/newcons/tools/regression/bpf/bpf_filter/tests/test0075.h user/ed/newcons/tools/regression/bpf/bpf_filter/tests/test0076.h user/ed/newcons/tools/regression/bpf/bpf_filter/tests/test0077.h user/ed/newcons/tools/regression/bpf/bpf_filter/tests/test0078.h user/ed/newcons/tools/regression/bpf/bpf_filter/tests/test0080.h user/ed/newcons/tools/tools/ncpus/acpi.c user/ed/newcons/tools/tools/tinybsd/tinybsd user/ed/newcons/usr.bin/gcore/Makefile user/ed/newcons/usr.bin/gcore/elfcore.c user/ed/newcons/usr.bin/gcore/gcore.1 user/ed/newcons/usr.bin/gcore/gcore.c user/ed/newcons/usr.bin/gzip/unbzip2.c user/ed/newcons/usr.bin/kdump/kdump.c user/ed/newcons/usr.bin/make/arch.c user/ed/newcons/usr.bin/make/dir.c user/ed/newcons/usr.bin/make/job.c user/ed/newcons/usr.bin/netstat/if.c user/ed/newcons/usr.bin/perror/perror.c user/ed/newcons/usr.bin/unifdef/unifdef.1 user/ed/newcons/usr.bin/unifdef/unifdef.c user/ed/newcons/usr.bin/unifdef/unifdefall.sh user/ed/newcons/usr.bin/w/w.c user/ed/newcons/usr.sbin/acpi/acpidb/Makefile user/ed/newcons/usr.sbin/bsnmpd/modules/snmp_hostres/hostres_device_tbl.c user/ed/newcons/usr.sbin/cron/cron/cron.c user/ed/newcons/usr.sbin/devinfo/devinfo.c user/ed/newcons/usr.sbin/fifolog/fifolog_writer/fifolog_writer.c user/ed/newcons/usr.sbin/inetd/inetd.c user/ed/newcons/usr.sbin/jail/jail.8 user/ed/newcons/usr.sbin/syslogd/syslogd.c Directory Properties: user/ed/newcons/ (props changed) user/ed/newcons/share/zoneinfo/ (props changed) user/ed/newcons/sys/contrib/dev/acpica/ (props changed) Modified: user/ed/newcons/ObsoleteFiles.inc ============================================================================== --- user/ed/newcons/ObsoleteFiles.inc Thu Nov 26 18:14:03 2009 (r199840) +++ user/ed/newcons/ObsoleteFiles.inc Thu Nov 26 19:01:19 2009 (r199841) @@ -14,6 +14,8 @@ # The file is partitioned: OLD_FILES first, then OLD_LIBS and OLD_DIRS last. # +# 20091117: removal of rc.early(8) link +OLD_FILES+=usr/share/man/man8/rc.early.8.gz # 20091027: pselect.3 implemented as syscall OLD_FILES+=usr/share/man/man3/pselect.3.gz # 20091005: fusword.9 and susword.9 removed Modified: user/ed/newcons/UPDATING ============================================================================== --- user/ed/newcons/UPDATING Thu Nov 26 18:14:03 2009 (r199840) +++ user/ed/newcons/UPDATING Thu Nov 26 19:01:19 2009 (r199841) @@ -42,6 +42,10 @@ NOTE TO PEOPLE WHO THINK THAT FreeBSD 9. Applications that require wireless scan results (e.g. ifconfig(8)) from net80211 need to be recompiled. + Applications such as wpa_supplicant(8) may require a full world + build without using NO_CLEAN in order to get synchronized with the + new structure. + 20091025: The iwn(4) driver has been updated to support the 5000 and 5150 series. There's one kernel module for each firmware. Adding "device iwnfw" Modified: user/ed/newcons/bin/Makefile ============================================================================== --- user/ed/newcons/bin/Makefile Thu Nov 26 18:14:03 2009 (r199840) +++ user/ed/newcons/bin/Makefile Thu Nov 26 19:01:19 2009 (r199841) @@ -27,6 +27,7 @@ SUBDIR= cat \ pax \ pkill \ ps \ + pwait \ pwd \ ${_rcp} \ realpath \ Modified: user/ed/newcons/bin/ps/keyword.c ============================================================================== --- user/ed/newcons/bin/ps/keyword.c Thu Nov 26 18:14:03 2009 (r199840) +++ user/ed/newcons/bin/ps/keyword.c Thu Nov 26 19:01:19 2009 (r199841) @@ -330,6 +330,7 @@ findvar(char *p, int user, char **header errx(1, "malloc failed"); snprintf(realfmt, rflen, "%s=%s", v->alias, hp); parsefmt(realfmt, user); + free(realfmt); } return ((VAR *)NULL); } Modified: user/ed/newcons/bin/sh/cd.c ============================================================================== --- user/ed/newcons/bin/sh/cd.c Thu Nov 26 18:14:03 2009 (r199840) +++ user/ed/newcons/bin/sh/cd.c Thu Nov 26 19:01:19 2009 (r199841) @@ -70,7 +70,7 @@ STATIC int docd(char *, int, int); STATIC char *getcomponent(void); STATIC char *findcwd(char *); STATIC void updatepwd(char *); -STATIC char *getpwd2(char *, size_t); +STATIC char *getpwd2(void); STATIC char *curdir = NULL; /* current working directory */ STATIC char *prevdir; /* previous working directory */ @@ -263,10 +263,8 @@ findcwd(char *dir) * any more because we traversed a symbolic link or something * we couldn't stat(). */ - if (dir == NULL || curdir == NULL) { - p = stalloc(PATH_MAX); - return getpwd2(p, PATH_MAX); - } + if (dir == NULL || curdir == NULL) + return getpwd2(); cdcomppath = stalloc(strlen(dir) + 1); scopy(dir, cdcomppath); STARTSTACKSTR(new); @@ -313,7 +311,7 @@ updatepwd(char *dir) int pwdcmd(int argc, char **argv) { - char buf[PATH_MAX]; + char *p; int ch, phys; optreset = 1; optind = 1; opterr = 0; /* initialize getopt */ @@ -341,9 +339,9 @@ pwdcmd(int argc, char **argv) out1str(curdir); out1c('\n'); } else { - if (getcwd(buf, sizeof(buf)) == NULL) + if ((p = getpwd2()) == NULL) error(".: %s", strerror(errno)); - out1str(buf); + out1str(p); out1c('\n'); } @@ -356,36 +354,45 @@ pwdcmd(int argc, char **argv) char * getpwd(void) { - char buf[PATH_MAX]; char *p; if (curdir) return curdir; - p = getpwd2(buf, sizeof(buf)); + p = getpwd2(); if (p != NULL) curdir = savestr(p); return curdir; } +#define MAXPWD 256 + /* * Return the current directory. */ STATIC char * -getpwd2(char *buf, size_t size) +getpwd2(void) { - if (getcwd(buf, size) == NULL) { - char *pwd = getenv("PWD"); - struct stat stdot, stpwd; - - if (pwd && *pwd == '/' && stat(".", &stdot) != -1 && - stat(pwd, &stpwd) != -1 && - stdot.st_dev == stpwd.st_dev && - stdot.st_ino == stpwd.st_ino) { + struct stat stdot, stpwd; + char *pwd; + int i; + + for (i = MAXPWD;; i *= 2) { + pwd = stalloc(i); + if (getcwd(pwd, i) != NULL) return pwd; - } - return NULL; + stunalloc(pwd); + if (errno != ERANGE) + break; + } + + pwd = getenv("PWD"); + if (pwd && *pwd == '/' && stat(".", &stdot) != -1 && + stat(pwd, &stpwd) != -1 && + stdot.st_dev == stpwd.st_dev && + stdot.st_ino == stpwd.st_ino) { + return pwd; } - return buf; + return NULL; } Modified: user/ed/newcons/bin/sh/error.c ============================================================================== --- user/ed/newcons/bin/sh/error.c Thu Nov 26 18:14:03 2009 (r199840) +++ user/ed/newcons/bin/sh/error.c Thu Nov 26 19:01:19 2009 (r199841) @@ -73,11 +73,15 @@ static void exverror(int, const char *, * Called to raise an exception. Since C doesn't include exceptions, we * just do a longjmp to the exception handler. The type of exception is * stored in the global variable "exception". + * + * Interrupts are disabled; they should be reenabled when the exception is + * caught. */ void exraise(int e) { + INTOFF; if (handler == NULL) abort(); exception = e; @@ -138,8 +142,15 @@ onint(void) static void exverror(int cond, const char *msg, va_list ap) { - CLEAR_PENDING_INT; - INTOFF; + /* + * An interrupt trumps an error. Certain places catch error + * exceptions or transform them to a plain nonzero exit code + * in child processes, and if an error exception can be handled, + * an interrupt can be handled as well. + * + * exraise() will disable interrupts for the exception handler. + */ + FORCEINTON; #ifdef DEBUG if (msg) Modified: user/ed/newcons/bin/sh/error.h ============================================================================== --- user/ed/newcons/bin/sh/error.h Thu Nov 26 18:14:03 2009 (r199840) +++ user/ed/newcons/bin/sh/error.h Thu Nov 26 19:01:19 2009 (r199841) @@ -72,6 +72,8 @@ extern volatile sig_atomic_t intpending; #define INTOFF suppressint++ #define INTON { if (--suppressint == 0 && intpending) onint(); } +#define is_int_on() suppressint +#define SETINTON(s) suppressint = (s) #define FORCEINTON {suppressint = 0; if (intpending) onint();} #define CLEAR_PENDING_INT intpending = 0 #define int_pending() intpending Modified: user/ed/newcons/bin/sh/eval.c ============================================================================== --- user/ed/newcons/bin/sh/eval.c Thu Nov 26 18:14:03 2009 (r199840) +++ user/ed/newcons/bin/sh/eval.c Thu Nov 26 19:01:19 2009 (r199841) @@ -593,6 +593,7 @@ evalcommand(union node *cmd, int flags, char *savecmdname; struct shparam saveparam; struct localvar *savelocalvars; + struct parsefile *savetopfile; volatile int e; char *lastarg; int realstatus; @@ -781,7 +782,6 @@ evalcommand(union node *cmd, int flags, savelocalvars = localvars; localvars = NULL; reffunc(cmdentry.u.func); - INTON; savehandler = handler; if (setjmp(jmploc.loc)) { if (exception == EXSHELLPROC) @@ -797,6 +797,7 @@ evalcommand(union node *cmd, int flags, longjmp(handler->loc, 1); } handler = &jmploc; + INTON; for (sp = varlist.list ; sp ; sp = sp->next) mklocal(sp->text); funcnest++; @@ -833,6 +834,7 @@ evalcommand(union node *cmd, int flags, mode |= REDIR_BACKQ; } savecmdname = commandname; + savetopfile = getcurrentfile(); cmdenviron = varlist.list; e = -1; savehandler = handler; @@ -867,6 +869,7 @@ cmddone: if ((e != EXERROR && e != EXEXEC) || cmdentry.special) exraise(e); + popfilesupto(savetopfile); FORCEINTON; } if (cmdentry.u.index != EXECCMD) Modified: user/ed/newcons/bin/sh/histedit.c ============================================================================== --- user/ed/newcons/bin/sh/histedit.c Thu Nov 26 18:14:03 2009 (r199840) +++ user/ed/newcons/bin/sh/histedit.c Thu Nov 26 19:01:19 2009 (r199841) @@ -92,7 +92,7 @@ histedit(void) if (hist != NULL) sethistsize(histsizeval()); else - out2str("sh: can't initialize history\n"); + out2fmt_flush("sh: can't initialize history\n"); } if (editing && !el && isatty(0)) { /* && isatty(2) ??? */ /* @@ -114,7 +114,7 @@ histedit(void) el_set(el, EL_PROMPT, getprompt); } else { bad: - out2str("sh: can't initialize editing\n"); + out2fmt_flush("sh: can't initialize editing\n"); } INTON; } else if (!editing && el) { @@ -336,6 +336,7 @@ histcmd(int argc, char **argv) if (sflg) { if (displayhist) { out2str(s); + flushout(out2); } evalstring(s, 0); if (displayhist && hist) { Modified: user/ed/newcons/bin/sh/input.c ============================================================================== --- user/ed/newcons/bin/sh/input.c Thu Nov 26 18:14:03 2009 (r199840) +++ user/ed/newcons/bin/sh/input.c Thu Nov 26 19:01:19 2009 (r199841) @@ -215,7 +215,7 @@ retry: if (flags >= 0 && flags & O_NONBLOCK) { flags &=~ O_NONBLOCK; if (fcntl(0, F_SETFL, flags) >= 0) { - out2str("sh: turning off NDELAY mode\n"); + out2fmt_flush("sh: turning off NDELAY mode\n"); goto retry; } } @@ -359,7 +359,7 @@ pushstring(char *s, int len, void *ap) struct strpush *sp; INTOFF; -/*dprintf("*** calling pushstring: %s, %d\n", s, len);*/ +/*out2fmt_flush("*** calling pushstring: %s, %d\n", s, len);*/ if (parsefile->strpush) { sp = ckmalloc(sizeof (struct strpush)); sp->prev = parsefile->strpush; @@ -386,7 +386,7 @@ popstring(void) parsenextc = sp->prevstring; parsenleft = sp->prevnleft; parselleft = sp->prevlleft; -/*dprintf("*** calling popstring: restoring to '%s'\n", parsenextc);*/ +/*out2fmt_flush("*** calling popstring: restoring to '%s'\n", parsenextc);*/ if (sp->ap) sp->ap->flag &= ~ALIASINUSE; parsefile->strpush = sp->prev; @@ -509,6 +509,32 @@ popfile(void) /* + * Return current file (to go back to it later using popfilesupto()). + */ + +struct parsefile * +getcurrentfile(void) +{ + return parsefile; +} + + +/* + * Pop files until the given file is on top again. Useful for regular + * builtins that read shell commands from files or strings. + * If the given file is not an active file, an error is raised. + */ + +void +popfilesupto(struct parsefile *file) +{ + while (parsefile != file && parsefile != &basepf) + popfile(); + if (parsefile != file) + error("popfilesupto() misused"); +} + +/* * Return to top level. */ Modified: user/ed/newcons/bin/sh/input.h ============================================================================== --- user/ed/newcons/bin/sh/input.h Thu Nov 26 18:14:03 2009 (r199840) +++ user/ed/newcons/bin/sh/input.h Thu Nov 26 19:01:19 2009 (r199841) @@ -45,6 +45,8 @@ extern int parsenleft; /* number of cha extern char *parsenextc; /* next character in input buffer */ extern int init_editline; /* 0 == not setup, 1 == OK, -1 == failed */ +struct parsefile; + char *pfgets(char *, int); int pgetc(void); int preadbuffer(void); @@ -56,6 +58,8 @@ void setinputfile(char *, int); void setinputfd(int, int); void setinputstring(char *, int); void popfile(void); +struct parsefile *getcurrentfile(void); +void popfilesupto(struct parsefile *); void popallfiles(void); void closescript(void); Modified: user/ed/newcons/bin/sh/jobs.c ============================================================================== --- user/ed/newcons/bin/sh/jobs.c Thu Nov 26 18:14:03 2009 (r199840) +++ user/ed/newcons/bin/sh/jobs.c Thu Nov 26 19:01:19 2009 (r199841) @@ -146,7 +146,7 @@ setjobctl(int on) do { /* while we are in the background */ initialpgrp = tcgetpgrp(ttyfd); if (initialpgrp < 0) { -out: out2str("sh: can't access tty; job control turned off\n"); +out: out2fmt_flush("sh: can't access tty; job control turned off\n"); mflag = 0; return; } @@ -1046,7 +1046,7 @@ stoppedjobs(void) if (jp->used == 0) continue; if (jp->state == JOBSTOPPED) { - out2str("You have stopped jobs.\n"); + out2fmt_flush("You have stopped jobs.\n"); job_warning = 2; return (1); } Modified: user/ed/newcons/bin/sh/main.c ============================================================================== --- user/ed/newcons/bin/sh/main.c Thu Nov 26 18:14:03 2009 (r199840) +++ user/ed/newcons/bin/sh/main.c Thu Nov 26 19:01:19 2009 (r199841) @@ -154,7 +154,7 @@ main(int argc, char *argv[]) setstackmark(&smark); procargs(argc, argv); if (getpwd() == NULL && iflag) - out2str("sh: cannot determine working directory\n"); + out2fmt_flush("sh: cannot determine working directory\n"); if (getpwd() != NULL) setvar ("PWD", getpwd(), VEXPORT); if (argv[0] && argv[0][0] == '-') { @@ -223,7 +223,7 @@ cmdloop(int top) if (!stoppedjobs()) { if (!Iflag) break; - out2str("\nUse \"exit\" to leave shell.\n"); + out2fmt_flush("\nUse \"exit\" to leave shell.\n"); } numeof++; } else if (n != NULL && nflag == 0) { Modified: user/ed/newcons/bin/sh/output.c ============================================================================== --- user/ed/newcons/bin/sh/output.c Thu Nov 26 18:14:03 2009 (r199840) +++ user/ed/newcons/bin/sh/output.c Thu Nov 26 19:01:19 2009 (r199841) @@ -71,7 +71,7 @@ __FBSDID("$FreeBSD$"); static int doformat_wr(void *, const char *, int); struct output output = {NULL, 0, NULL, OUTBUFSIZ, 1, 0}; -struct output errout = {NULL, 0, NULL, 100, 2, 0}; +struct output errout = {NULL, 0, NULL, 256, 2, 0}; struct output memout = {NULL, 0, NULL, 0, MEM_OUT, 0}; struct output *out1 = &output; struct output *out2 = &errout; @@ -124,8 +124,6 @@ outstr(const char *p, struct output *fil { while (*p) outc(*p++, file); - if (file == out2) - flushout(file); } /* Like outstr(), but quote for re-input into the shell. */ @@ -255,7 +253,7 @@ out1fmt(const char *fmt, ...) } void -dprintf(const char *fmt, ...) +out2fmt_flush(const char *fmt, ...) { va_list ap; Modified: user/ed/newcons/bin/sh/output.h ============================================================================== --- user/ed/newcons/bin/sh/output.h Thu Nov 26 18:14:03 2009 (r199840) +++ user/ed/newcons/bin/sh/output.h Thu Nov 26 19:01:19 2009 (r199841) @@ -65,7 +65,7 @@ void flushout(struct output *); void freestdout(void); void outfmt(struct output *, const char *, ...) __printflike(2, 3); void out1fmt(const char *, ...) __printflike(1, 2); -void dprintf(const char *, ...) __printflike(1, 2); +void out2fmt_flush(const char *, ...) __printflike(1, 2); void fmtstr(char *, int, const char *, ...) __printflike(3, 4); void doformat(struct output *, const char *, va_list) __printflike(2, 0); int xwrite(int, char *, int); Modified: user/ed/newcons/bin/sh/parser.c ============================================================================== --- user/ed/newcons/bin/sh/parser.c Thu Nov 26 18:14:03 2009 (r199840) +++ user/ed/newcons/bin/sh/parser.c Thu Nov 26 19:01:19 2009 (r199841) @@ -364,7 +364,9 @@ TRACE(("expecting DO got %s %s\n", tokna n1 = (union node *)stalloc(sizeof (struct nfor)); n1->type = NFOR; n1->nfor.var = wordtext; - if (readtoken() == TWORD && ! quoteflag && equal(wordtext, "in")) { + while (readtoken() == TNL) + ; + if (lasttoken == TWORD && ! quoteflag && equal(wordtext, "in")) { app = ≈ while (readtoken() == TWORD) { n2 = (union node *)stalloc(sizeof (struct narg)); @@ -1310,6 +1312,7 @@ parsebackq: { int saveprompt; const int bq_startlinno = plinno; + str = NULL; if (setjmp(jmploc.loc)) { if (str) ckfree(str); @@ -1321,7 +1324,6 @@ parsebackq: { longjmp(handler->loc, 1); } INTOFF; - str = NULL; savelen = out - stackblock(); if (savelen > 0) { str = ckmalloc(savelen); @@ -1561,7 +1563,10 @@ setprompt(int which) #ifndef NO_HISTORY if (!el) #endif + { out2str(getprompt(NULL)); + flushout(out2); + } } /* Modified: user/ed/newcons/bin/sh/redir.c ============================================================================== --- user/ed/newcons/bin/sh/redir.c Thu Nov 26 18:14:03 2009 (r199840) +++ user/ed/newcons/bin/sh/redir.c Thu Nov 26 19:01:19 2009 (r199841) @@ -166,8 +166,11 @@ openredirect(union node *redir, char mem /* * We suppress interrupts so that we won't leave open file - * descriptors around. This may not be such a good idea because - * an open of a device or a fifo can block indefinitely. + * descriptors around. Because the signal handler remains + * installed and we do not use system call restart, interrupts + * will still abort blocking opens such as fifos (they will fail + * with EINTR). There is, however, a race condition if an interrupt + * arrives after INTOFF and before open blocks. */ INTOFF; memory[fd] = 0; Modified: user/ed/newcons/bin/sh/trap.c ============================================================================== --- user/ed/newcons/bin/sh/trap.c Thu Nov 26 18:14:03 2009 (r199840) +++ user/ed/newcons/bin/sh/trap.c Thu Nov 26 19:01:19 2009 (r199841) @@ -149,6 +149,7 @@ trapcmd(int argc, char **argv) { char *action; int signo; + int errors = 0; if (argc <= 1) { for (signo = 0 ; signo < sys_nsig ; signo++) { @@ -183,8 +184,10 @@ trapcmd(int argc, char **argv) } } while (*argv) { - if ((signo = sigstring_to_signum(*argv)) == -1) - error("bad signal %s", *argv); + if ((signo = sigstring_to_signum(*argv)) == -1) { + out2fmt_flush("trap: bad signal %s\n", *argv); + errors = 1; + } INTOFF; if (action) action = savestr(action); @@ -196,7 +199,7 @@ trapcmd(int argc, char **argv) INTON; argv++; } - return 0; + return errors; } Modified: user/ed/newcons/bin/sh/var.c ============================================================================== --- user/ed/newcons/bin/sh/var.c Thu Nov 26 18:14:03 2009 (r199840) +++ user/ed/newcons/bin/sh/var.c Thu Nov 26 19:01:19 2009 (r199841) @@ -195,7 +195,9 @@ setvarsafe(char *name, char *val, int fl struct jmploc jmploc; struct jmploc *const savehandler = handler; int err = 0; + int inton; + inton = is_int_on(); if (setjmp(jmploc.loc)) err = 1; else { @@ -203,6 +205,7 @@ setvarsafe(char *name, char *val, int fl setvar(name, val, flags); } handler = savehandler; + SETINTON(inton); return err; } Modified: user/ed/newcons/contrib/ipfilter/man/ipf.8 ============================================================================== --- user/ed/newcons/contrib/ipfilter/man/ipf.8 Thu Nov 26 18:14:03 2009 (r199840) +++ user/ed/newcons/contrib/ipfilter/man/ipf.8 Thu Nov 26 19:01:19 2009 (r199841) @@ -46,7 +46,7 @@ supports \fBlanguage\fI. At present, th \fBC\fB (-cc) for which two files - \fBip_rules.c\fP and \fBip_rules.h\fP are generated in the \fBCURRENT DIRECTORY\fP when \fBipf\fP is being run. These files can be used with the -\fBIPFILTER_COMPILED\fP kernel option to build filter rules staticly into +\fBIPFILTER_COMPILED\fP kernel option to build filter rules staticlly into the kernel. .TP .B \-d Modified: user/ed/newcons/crypto/openssh/sshd.c ============================================================================== --- user/ed/newcons/crypto/openssh/sshd.c Thu Nov 26 18:14:03 2009 (r199840) +++ user/ed/newcons/crypto/openssh/sshd.c Thu Nov 26 19:01:19 2009 (r199841) @@ -47,6 +47,7 @@ __RCSID("$FreeBSD$"); #include #include +#include #include #ifdef HAVE_SYS_STAT_H # include @@ -1293,6 +1294,10 @@ main(int ac, char **av) /* Initialize configuration options to their default values. */ initialize_server_options(&options); + /* Avoid killing the process in high-pressure swapping environments. */ + if (madvise(NULL, 0, MADV_PROTECT) != 0) + debug("madvise(): %.200s", strerror(errno)); + /* Parse command-line arguments. */ while ((opt = getopt(ac, av, "f:p:b:k:h:g:u:o:C:dDeiqrtQRT46")) != -1) { switch (opt) { Modified: user/ed/newcons/games/factor/factor.c ============================================================================== --- user/ed/newcons/games/factor/factor.c Thu Nov 26 18:14:03 2009 (r199840) +++ user/ed/newcons/games/factor/factor.c Thu Nov 26 19:01:19 2009 (r199841) @@ -13,11 +13,7 @@ * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. - * 3. All advertising materials mentioning features or use of this software - * must display the following acknowledgement: - * This product includes software developed by the University of - * California, Berkeley and its contributors. - * 4. Neither the name of the University nor the names of its contributors + * 3. Neither the name of the University nor the names of its contributors * may be used to endorse or promote products derived from this software * without specific prior written permission. * @@ -35,18 +31,20 @@ */ #ifndef lint -static const char copyright[] = -"@(#) Copyright (c) 1989, 1993\n\ - The Regents of the University of California. All rights reserved.\n"; -#endif /* not lint */ - -#ifndef lint -#if 0 -static char sccsid[] = "@(#)factor.c 8.4 (Berkeley) 5/4/95"; -__RCSID("$NetBSD: factor.c,v 1.13 2002/06/18 23:07:36 simonb Exp $"); +#include +#ifdef __COPYRIGHT +__COPYRIGHT("@(#) Copyright (c) 1989, 1993\ + The Regents of the University of California. All rights reserved."); +#endif +#ifdef __SCCSID +__SCCSID("@(#)factor.c 8.4 (Berkeley) 5/4/95"); +#endif +#ifdef __RCSID +__RCSID("$NetBSD: factor.c,v 1.19 2009/08/12 05:54:31 dholland Exp $"); +#endif +#ifdef __FBSDID +__FBSDID("$FreeBSD$"); #endif -static const char rcsid[] = - "$FreeBSD$"; #endif /* not lint */ /* @@ -63,7 +61,7 @@ static const char rcsid[] = * * number: factor1 factor1 factor2 factor3 factor3 factor3 ... * - * where factor1 < factor2 < factor3 < ... + * where factor1 <= factor2 <= factor3 <= ... * * If no args are given, the list of numbers are read from stdin. */ @@ -214,7 +212,9 @@ pr_fact(BIGNUM *val) bnfact = BN_new(); BN_set_word(bnfact, *(fact - 1)); BN_sqr(bnfact, bnfact, ctx); - if (BN_cmp(bnfact, val) > 0) + if (BN_cmp(bnfact, val) > 0 || + BN_is_prime(val, PRIME_CHECKS, + NULL, NULL, NULL) == 1) pr_print(val); else pollard_pminus1(val); @@ -257,22 +257,28 @@ usage(void) #ifdef HAVE_OPENSSL -/* pollard rho, algorithm from Jim Gillogly, May 2000 */ +/* pollard p-1, algorithm from Jim Gillogly, May 2000 */ static void pollard_pminus1(BIGNUM *val) { - BIGNUM *base, *num, *i, *x; + BIGNUM *base, *rbase, *num, *i, *x; base = BN_new(); + rbase = BN_new(); num = BN_new(); i = BN_new(); x = BN_new(); + BN_set_word(rbase, 1); +newbase: + BN_add_word(rbase, 1); BN_set_word(i, 2); - BN_set_word(base, 2); + BN_copy(base, rbase); for (;;) { BN_mod_exp(base, base, i, val, ctx); + if (BN_is_one(base)) + goto newbase; BN_copy(x, base); BN_sub_word(x, 1); Modified: user/ed/newcons/include/signal.h ============================================================================== --- user/ed/newcons/include/signal.h Thu Nov 26 18:14:03 2009 (r199840) +++ user/ed/newcons/include/signal.h Thu Nov 26 19:01:19 2009 (r199841) @@ -99,7 +99,12 @@ int sigwaitinfo(const sigset_t * __restr #if __XSI_VISIBLE int killpg(__pid_t, int); int sigaltstack(const stack_t * __restrict, stack_t * __restrict); -int sigpause(int); +int sighold(int sig); +int sigignore(int sig); +int sigpause(int sigmask); +int sigrelse(int sig); +void (*sigset(int sig, void (*disp)(int)))(int); +int xsi_sigpause(int sig); #endif #if __XSI_VISIBLE >= 600 Modified: user/ed/newcons/lib/libc/compat-43/Makefile.inc ============================================================================== --- user/ed/newcons/lib/libc/compat-43/Makefile.inc Thu Nov 26 18:14:03 2009 (r199840) +++ user/ed/newcons/lib/libc/compat-43/Makefile.inc Thu Nov 26 19:01:19 2009 (r199841) @@ -13,6 +13,11 @@ MAN+= creat.2 killpg.2 sigpause.2 sigset MAN+= gethostid.3 setruid.3 MLINKS+=gethostid.3 sethostid.3 +MLINKS+=sigpause.2 sighold.2 +MLINKS+=sigpause.2 sigignore.2 +MLINKS+=sigpause.2 sigrelse.2 +MLINKS+=sigpause.2 sigset.2 +MLINKS+=sigpause.2 xsi_sigpause.2 MLINKS+=setruid.3 setrgid.3 MLINKS+=sigsetmask.2 sigblock.2 Modified: user/ed/newcons/lib/libc/compat-43/Symbol.map ============================================================================== --- user/ed/newcons/lib/libc/compat-43/Symbol.map Thu Nov 26 18:14:03 2009 (r199840) +++ user/ed/newcons/lib/libc/compat-43/Symbol.map Thu Nov 26 19:01:19 2009 (r199841) @@ -17,6 +17,14 @@ FBSD_1.0 { sigvec; }; +FBSD_1.2 { + sighold; + sigignore; + sigrelse; + sigset; + xsi_sigpause; +}; + FBSDprivate_1.0 { __creat; _creat; Modified: user/ed/newcons/lib/libc/compat-43/sigcompat.c ============================================================================== --- user/ed/newcons/lib/libc/compat-43/sigcompat.c Thu Nov 26 18:14:03 2009 (r199840) +++ user/ed/newcons/lib/libc/compat-43/sigcompat.c Thu Nov 26 19:01:19 2009 (r199841) @@ -36,6 +36,7 @@ __FBSDID("$FreeBSD$"); #include "namespace.h" #include #include +#include #include "un-namespace.h" #include "libc_private.h" @@ -97,8 +98,7 @@ sigblock(mask) } int -sigpause(mask) - int mask; +sigpause(int mask) { sigset_t set; @@ -106,3 +106,84 @@ sigpause(mask) set.__bits[0] = mask; return (_sigsuspend(&set)); } + +int +xsi_sigpause(int sig) +{ + sigset_t set; + + sigemptyset(&set); + sigaddset(&set, sig); + return (_sigsuspend(&set)); +} + +int +sighold(int sig) +{ + sigset_t set; + + sigemptyset(&set); + sigaddset(&set, sig); + return (_sigprocmask(SIG_BLOCK, &set, NULL)); +} + +int +sigignore(int sig) +{ + struct sigaction sa; + + bzero(&sa, sizeof(sa)); + sa.sa_handler = SIG_IGN; + return (_sigaction(sig, &sa, NULL)); +} + +int +sigrelse(int sig) +{ + sigset_t set; + + sigemptyset(&set); + sigaddset(&set, sig); + return (_sigprocmask(SIG_UNBLOCK, &set, NULL)); +} + +void +(*sigset(int sig, void (*disp)(int)))(int) +{ + sigset_t set, pset; + struct sigaction sa, psa; + int error; + + sigemptyset(&set); + sigaddset(&set, sig); + error = _sigprocmask(SIG_BLOCK, NULL, &pset); + if (error == -1) + return (SIG_ERR); + if ((__sighandler_t *)disp == SIG_HOLD) { + error = _sigprocmask(SIG_BLOCK, &set, &pset); + if (error == -1) + return (SIG_ERR); + if (sigismember(&pset, sig)) + return (SIG_HOLD); + else { + error = _sigaction(sig, NULL, &psa); + if (error == -1) + return (SIG_ERR); + return (psa.sa_handler); + } + } else { + error = _sigprocmask(SIG_UNBLOCK, &set, &pset); + if (error == -1) + return (SIG_ERR); + } + + bzero(&sa, sizeof(sa)); + sa.sa_handler = disp; + error = _sigaction(sig, &sa, &psa); + if (error == -1) + return (SIG_ERR); + if (sigismember(&pset, sig)) + return (SIG_HOLD); + else + return (psa.sa_handler); +} Modified: user/ed/newcons/lib/libc/compat-43/sigpause.2 ============================================================================== --- user/ed/newcons/lib/libc/compat-43/sigpause.2 Thu Nov 26 18:14:03 2009 (r199840) +++ user/ed/newcons/lib/libc/compat-43/sigpause.2 Thu Nov 26 19:01:19 2009 (r199841) @@ -28,21 +28,118 @@ .\" @(#)sigpause.2 8.1 (Berkeley) 6/2/93 .\" $FreeBSD$ .\" +.\" Part of the content of the man page was derived from +.\" The Open Group Base Specifications Issue 7 +.\" IEEE Std 1003.1-2008 +.\" .Dd June 2, 1993 .Dt SIGPAUSE 2 .Os .Sh NAME -.Nm sigpause -.Nd atomically release blocked signals and wait for interrupt +.Nm sighold , +.Nm sigignore , +.Nm sigpause , +.Nm sigrelse , +.Nm sigset +.Nd legacy interface for signal management .Sh LIBRARY .Lb libc .Sh SYNOPSIS .In signal.h .Ft int +.Fn sighold "int sig" +.Ft int +.Fn sigignore "int sig" +.Ft int +.Fn xsi_sigpause "int sigmask" +.Ft int +.Fn sigrelse "int sig" +.Ft void (*)(int) +.Fn sigset "int" "void (*disp)(int)" +.Ft int .Fn sigpause "int sigmask" .Sh DESCRIPTION .Sy This interface is made obsolete by -.Xr sigsuspend 2 . +.Xr sigsuspend 2 +.Sy and +.Xr sigaction 2 +.Pp +The +.Fn sigset +function modifies signal dispositions. +The +.Fa sig +argument specifies the signal, which may be any signal except +.Dv SIGKILL +and +.Dv SIGSTOP . +The +.Fa disp +argument specifies the signal's disposition, +which may be +.Dv SIG_DFL , +.Dv SIG_IGN , +or the address of a signal handler. +If +.Fn sigset +is used, and +.Fa disp +is the address of a signal handler, the +system adds +.Fa sig +to the signal mask of the calling process before executing the signal +handler; when the signal handler returns, the system restores the +signal mask of the calling process to its state prior to the delivery +of the signal. +In addition, if +.Fn sigset +is used, and +.Fa disp +is equal to +.Dv SIG_HOLD , +.Fa sig +is added to the signal +mask of the calling process and +.Fa sig 's +disposition remains unchanged. +If +.Fn sigset +is used, and +.Fa disp +is not equal to +.Dv SIG_HOLD , +.Fa sig +is removed from the signal mask of the calling process. +.Pp +The +.Fn sighold +function adds +.Fa sig +to the signal mask of the calling process. +.Pp +The +.Fn sigrelse +function removes +.Fa sig +from the signal mask of the calling process. +.Pp +The +.Fn sigignore +function sets the disposition of +.Fa sig +to +.Dv SIG_IGN . +.Pp +The +.Fn xsi_sigpause +function removes +.Fa sig +from the signal mask of the calling process and suspend the calling process +until a signal is received. +The +.Fn xsi_sigpause +function restores the signal mask of the process to its original state before +returning. .Pp The .Fn sigpause @@ -57,13 +154,47 @@ The argument is usually 0 to indicate that no signals are to be blocked. +.Sh RETURN VALUES The .Fn sigpause -function -always terminates by being interrupted, returning -1 with +and +.Fn xsi_sigpause +functions +always terminate by being interrupted, returning -1 with .Va errno set to -.Er EINTR +.Er EINTR . +.Pp +Upon successful completion, +.Fn sigset +returns +.Dv SIG_HOLD +if the signal had been blocked and the signal's previous disposition if +it had not been blocked. +Otherwise, +.Dv SIG_ERR is returned and +.Va errno +set to indicate the error. +.Pp +For all other functions, upon successful completion, 0 is returned. +Otherwise, -1 is returned and +.Va errno +is set to indicate the error: +.Bl -tag -width Er +.It Bq Er EINVAL +The +.Fa sig +argument +is not a valid signal number. +.It Bq Er EINVAL +For +.Fn sigset +and +.Fn sigignore +functions, an attempt was made to catch or ignore +.Dv SIGKILL +or +.Dv SIGSTOP . .Sh SEE ALSO .Xr kill 2 , .Xr sigaction 2 , @@ -85,9 +216,26 @@ and was copied from there into the .Pq Tn XSI option of .St -p1003.1-2001 . +.Fx +implements it under the name *** DIFF OUTPUT TRUNCATED AT 1000 LINES *** From owner-svn-src-user@FreeBSD.ORG Thu Nov 26 19:35:20 2009 Return-Path: Delivered-To: svn-src-user@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 693EA1065694; Thu, 26 Nov 2009 19:35:20 +0000 (UTC) (envelope-from ed@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id 2E1438FC13; Thu, 26 Nov 2009 19:35:20 +0000 (UTC) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.3/8.14.3) with ESMTP id nAQJZJRm091274; Thu, 26 Nov 2009 19:35:19 GMT (envelope-from ed@svn.freebsd.org) Received: (from ed@localhost) by svn.freebsd.org (8.14.3/8.14.3/Submit) id nAQJZJ9R091272; Thu, 26 Nov 2009 19:35:19 GMT (envelope-from ed@svn.freebsd.org) Message-Id: <200911261935.nAQJZJ9R091272@svn.freebsd.org> From: Ed Schouten Date: Thu, 26 Nov 2009 19:35:19 +0000 (UTC) To: src-committers@freebsd.org, svn-src-user@freebsd.org X-SVN-Group: user MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r199845 - user/ed/newcons/sys/dev/vt X-BeenThere: svn-src-user@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "SVN commit messages for the experimental " user" src tree" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 26 Nov 2009 19:35:20 -0000 Author: ed Date: Thu Nov 26 19:35:19 2009 New Revision: 199845 URL: http://svn.freebsd.org/changeset/base/199845 Log: Make the cursor a little less bright. Modified: user/ed/newcons/sys/dev/vt/vt_core.c Modified: user/ed/newcons/sys/dev/vt/vt_core.c ============================================================================== --- user/ed/newcons/sys/dev/vt/vt_core.c Thu Nov 26 19:11:44 2009 (r199844) +++ user/ed/newcons/sys/dev/vt/vt_core.c Thu Nov 26 19:35:19 2009 (r199845) @@ -447,7 +447,7 @@ vt_determine_colors(term_char_t c, int c if (cursor) { *fg = *bg; - *bg = TCOLOR_LIGHT(TC_WHITE); + *bg = TC_WHITE; } }