From owner-svn-src-stable@FreeBSD.ORG Sun Oct 20 15:24:45 2013 Return-Path: Delivered-To: svn-src-stable@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [8.8.178.115]) (using TLSv1 with cipher ADH-AES256-SHA (256/256 bits)) (No client certificate requested) by hub.freebsd.org (Postfix) with ESMTP id D3123A3C; Sun, 20 Oct 2013 15:24:45 +0000 (UTC) (envelope-from np@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:1900:2254:2068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mx1.freebsd.org (Postfix) with ESMTPS id BC6242E2C; Sun, 20 Oct 2013 15:24:45 +0000 (UTC) Received: from svn.freebsd.org ([127.0.1.70]) by svn.freebsd.org (8.14.7/8.14.7) with ESMTP id r9KFOj7P088479; Sun, 20 Oct 2013 15:24:45 GMT (envelope-from np@svn.freebsd.org) Received: (from np@localhost) by svn.freebsd.org (8.14.7/8.14.5/Submit) id r9KFOjaL088475; Sun, 20 Oct 2013 15:24:45 GMT (envelope-from np@svn.freebsd.org) Message-Id: <201310201524.r9KFOjaL088475@svn.freebsd.org> From: Navdeep Parhar Date: Sun, 20 Oct 2013 15:24:45 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-stable@freebsd.org, svn-src-stable-10@freebsd.org Subject: svn commit: r256791 - in stable/10/sys: conf dev/cxgbe dev/cxgbe/common dev/cxgbe/firmware dev/cxgbe/tom modules/cxgbe/t4_firmware modules/cxgbe/t5_firmware X-SVN-Group: stable-10 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-stable@freebsd.org X-Mailman-Version: 2.1.14 Precedence: list List-Id: SVN commit messages for all the -stable branches of the src tree List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sun, 20 Oct 2013 15:24:45 -0000 Author: np Date: Sun Oct 20 15:24:44 2013 New Revision: 256791 URL: http://svnweb.freebsd.org/changeset/base/256791 Log: MFC r256459. cxgbe(4): Update T4 and T5 firmwares to 1.9.12.0 Approved by: re (glebius) Added: stable/10/sys/dev/cxgbe/firmware/t4fw-1.9.12.0.bin.uu - copied unchanged from r256459, head/sys/dev/cxgbe/firmware/t4fw-1.9.12.0.bin.uu stable/10/sys/dev/cxgbe/firmware/t5fw-1.9.12.0.bin.uu - copied unchanged from r256459, head/sys/dev/cxgbe/firmware/t5fw-1.9.12.0.bin.uu Deleted: stable/10/sys/dev/cxgbe/firmware/t4fw-1.8.11.0.bin.uu stable/10/sys/dev/cxgbe/firmware/t5fw-1.8.22.0.bin.uu Modified: stable/10/sys/conf/files stable/10/sys/dev/cxgbe/common/common.h stable/10/sys/dev/cxgbe/firmware/t4fw_cfg.txt stable/10/sys/dev/cxgbe/firmware/t4fw_cfg_uwire.txt stable/10/sys/dev/cxgbe/firmware/t4fw_interface.h stable/10/sys/dev/cxgbe/firmware/t5fw_cfg.txt stable/10/sys/dev/cxgbe/firmware/t5fw_cfg_uwire.txt stable/10/sys/dev/cxgbe/t4_main.c stable/10/sys/dev/cxgbe/tom/t4_cpl_io.c stable/10/sys/modules/cxgbe/t4_firmware/Makefile stable/10/sys/modules/cxgbe/t5_firmware/Makefile Directory Properties: stable/10/sys/ (props changed) stable/10/sys/conf/ (props changed) Modified: stable/10/sys/conf/files ============================================================================== --- stable/10/sys/conf/files Sun Oct 20 15:13:32 2013 (r256790) +++ stable/10/sys/conf/files Sun Oct 20 15:24:44 2013 (r256791) @@ -1199,7 +1199,7 @@ t4fw.fwo optional cxgbe \ no-implicit-rule \ clean "t4fw.fwo" t4fw.fw optional cxgbe \ - dependency "$S/dev/cxgbe/firmware/t4fw-1.8.11.0.bin.uu" \ + dependency "$S/dev/cxgbe/firmware/t4fw-1.9.12.0.bin.uu" \ compile-with "${NORMAL_FW}" \ no-obj no-implicit-rule \ clean "t4fw.fw" @@ -1223,7 +1223,7 @@ t5fw.fwo optional cxgbe \ no-implicit-rule \ clean "t5fw.fwo" t5fw.fw optional cxgbe \ - dependency "$S/dev/cxgbe/firmware/t5fw-1.8.22.0.bin.uu" \ + dependency "$S/dev/cxgbe/firmware/t5fw-1.9.12.0.bin.uu" \ compile-with "${NORMAL_FW}" \ no-obj no-implicit-rule \ clean "t5fw.fw" Modified: stable/10/sys/dev/cxgbe/common/common.h ============================================================================== --- stable/10/sys/dev/cxgbe/common/common.h Sun Oct 20 15:13:32 2013 (r256790) +++ stable/10/sys/dev/cxgbe/common/common.h Sun Oct 20 15:24:44 2013 (r256791) @@ -246,7 +246,7 @@ struct pci_params { * Firmware device log. */ struct devlog_params { - u32 memtype; /* which memory (EDC0, EDC1, MC) */ + u32 memtype; /* which memory (FW_MEMTYPE_* ) */ u32 start; /* start of log in firmware memory */ u32 size; /* size of log */ }; Copied: stable/10/sys/dev/cxgbe/firmware/t4fw-1.9.12.0.bin.uu (from r256459, head/sys/dev/cxgbe/firmware/t4fw-1.9.12.0.bin.uu) ============================================================================== --- /dev/null 00:00:00 1970 (empty, because file is newly added) +++ stable/10/sys/dev/cxgbe/firmware/t4fw-1.9.12.0.bin.uu Sun Oct 20 15:24:44 2013 (r256791, copy of r256459, head/sys/dev/cxgbe/firmware/t4fw-1.9.12.0.bin.uu) @@ -0,0 +1,8705 @@ +/*- + * Copyright (c) 2013 Chelsio Communications, Inc. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + */ +begin-base64 644 t4fw +AAADxgEJDAAAAQkBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAA6sDugPBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAENoZWxzaW8gRlcgUlVOTUVNIERFQlVHPTAgKEJ1aWx0IEZyaSBPY3QgMTEgMjM6 +MDY6MDEgUERUIDIwMTMgb24gY2xlb3BhdHJhLmFzaWNkZXNpZ25lcnMuY29tOi9ob21lL2Zpcm13 +YXJlL2N2cy9mdy1yZWxlYXNlKSwgVmVyc2lvbiBUNHh4IDAxLjA5LjBjLjAwAAAAAAAAAJW7pA1g +AMgA4QB78AAQAADhADC4eP///x/84UCAAAAB4QB7cAAAEAAf//vg4QGUcCAAAADhAZwE4QB5AAAC +AEDhAHmAAAYAQAACAAoABgAK4QB5BAAKAACAAAEC4QB7POEAe0ThAHvk4gAAAAABAADhAHuQIAAA +AAAAgADhAHsAAABAAeEAe5wAAEAAREREQuAAAADjAARzREREQOMACAAgAAJcAAAAAB//kYAAAAAA +H/+RhAAAAAAf/5GIAAAAAB//kYwf/8AAAAAAAAAAAADAABL/zRP/zZMgEv/NE//NhCAEMwGTIBH/ +zBL/zJIQEf/MEv/MkhAR/8wB9DER/8siCv+SEADkMQAFMQECABL/yALnMQIWABH/x4EQAQFfwCEC +EQHJERH/xBL/xJIQEf/EEv/EkhBgAA8R/78S/8OSEBH/vxL/wpIQgRAR/8HAIJIREv/AkhLAIJIT +Ev+/khCCEALyUGUv9xH/vccvkhAR/7ySEBL/vBP/vJMgwDKTIRP/u5MigiIS/7oT/7qTICMiIRT/ +uQQzAck4E/+4gzADgxQIMxEU/7akM5MhE/+qkyJgAAjCMJMhE/+nkyIS/7GQIJAhkCKQI5AkkCWQ +JpAnkCiQKZAqkCuQLJAtkC6QLyAmECAmEYIiEv+kwDAtNzAtNzQtNzgtNzwjPQFyM+0AAgAS/6HA +MC83AC83EC83IC83MCM9AXIz7QACABL/l8AwKDcwKDc0KDc4KDc8Iz0BcjPtAwIAEv+UIwoAJzcA +JzcQJzcgJzcwIz0BcjPtAwIAEv+OFf+PFv+PwDDXIAVmAWAAEgQ2BQACANMP0w8FMwxuOxQHRxQH +BEN2MeYENgUFMwxvO+0AAgAS/4MV/4EjCgACJwIHBEMEPgUFMwwHRxRvO/ADAgAS/33JLoMghCGF +IrwidDsOhlC0VZYwtDN0M/Rj/+YAZT/iZV/fEv9xwDIDLgUDAgAS/2jAMCg3QCg3RCg3SCg3TCM9 +AXIz7QMCAAACABL/ay0nAMARAUkxAEgxAQIAwAAU/2cE0jEV/2aUUBT/ZgTTMRX/ZpRQFP9lBNQx +Ff9llFAU/2UE1TEV/2SUUBD/ZAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +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 +AAAAAAAAAAAAAAAAAAAAAIEAAAAAAAAYBQAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAE +AAAAAAAAAoEAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAKABHydxPyd9MPA+YxAQIAFvJ1F/J2d2sG +kGC0Zndj+FQOkFWVFw8UAGP/+QAAAGwQBBjycx3ybisgBxzybiohCPoCAAdxuwEA7tw5DdwCgAAL +qgKcMOPyaBmwBIAACKoCHPJmIzCA+kAIFeANBQCdZexmAiG43QAA+sCGFaR3HQDpfP8t3gKAAOt7 +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 *** DIFF OUTPUT TRUNCATED AT 1000 LINES *** From owner-svn-src-stable@FreeBSD.ORG Sun Oct 20 16:45:02 2013 Return-Path: Delivered-To: svn-src-stable@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [8.8.178.115]) (using TLSv1 with cipher ADH-AES256-SHA (256/256 bits)) (No client certificate requested) by hub.freebsd.org (Postfix) with ESMTP id A3E671BB; Sun, 20 Oct 2013 16:45:02 +0000 (UTC) (envelope-from np@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:1900:2254:2068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mx1.freebsd.org (Postfix) with ESMTPS id 76F5E2229; Sun, 20 Oct 2013 16:45:02 +0000 (UTC) Received: from svn.freebsd.org ([127.0.1.70]) by svn.freebsd.org (8.14.7/8.14.7) with ESMTP id r9KGj2RE031512; Sun, 20 Oct 2013 16:45:02 GMT (envelope-from np@svn.freebsd.org) Received: (from np@localhost) by svn.freebsd.org (8.14.7/8.14.5/Submit) id r9KGj2ZT031509; Sun, 20 Oct 2013 16:45:02 GMT (envelope-from np@svn.freebsd.org) Message-Id: <201310201645.r9KGj2ZT031509@svn.freebsd.org> From: Navdeep Parhar Date: Sun, 20 Oct 2013 16:45:02 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-stable@freebsd.org, svn-src-stable-10@freebsd.org Subject: svn commit: r256794 - stable/10/sys/dev/cxgbe X-SVN-Group: stable-10 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-stable@freebsd.org X-Mailman-Version: 2.1.14 Precedence: list List-Id: SVN commit messages for all the -stable branches of the src tree List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sun, 20 Oct 2013 16:45:02 -0000 Author: np Date: Sun Oct 20 16:45:01 2013 New Revision: 256794 URL: http://svnweb.freebsd.org/changeset/base/256794 Log: MFC r256477: cxgbe(4): Store the log2 of the # of doorbells per BAR2 page for both ingress and egress queues, and for both T4 and T5. These values are used by the T4/T5 iWARP driver. Approved by: re (glebius) Modified: stable/10/sys/dev/cxgbe/adapter.h stable/10/sys/dev/cxgbe/t4_sge.c Directory Properties: stable/10/sys/ (props changed) Modified: stable/10/sys/dev/cxgbe/adapter.h ============================================================================== --- stable/10/sys/dev/cxgbe/adapter.h Sun Oct 20 16:37:03 2013 (r256793) +++ stable/10/sys/dev/cxgbe/adapter.h Sun Oct 20 16:45:01 2013 (r256794) @@ -510,7 +510,8 @@ struct sge { int timer_val[SGE_NTIMERS]; int counter_val[SGE_NCOUNTERS]; int fl_starve_threshold; - int s_qpp; + int eq_s_qpp; + int iq_s_qpp; int nrxq; /* total # of Ethernet rx queues */ int ntxq; /* total # of Ethernet tx tx queues */ Modified: stable/10/sys/dev/cxgbe/t4_sge.c ============================================================================== --- stable/10/sys/dev/cxgbe/t4_sge.c Sun Oct 20 16:37:03 2013 (r256793) +++ stable/10/sys/dev/cxgbe/t4_sge.c Sun Oct 20 16:45:01 2013 (r256794) @@ -569,12 +569,17 @@ t4_read_chip_settings(struct adapter *sc r = t4_read_reg(sc, A_SGE_CONM_CTRL); s->fl_starve_threshold = G_EGRTHRESHOLD(r) * 2 + 1; - if (is_t5(sc)) { - r = t4_read_reg(sc, A_SGE_EGRESS_QUEUES_PER_PAGE_PF); - r >>= S_QUEUESPERPAGEPF0 + - (S_QUEUESPERPAGEPF1 - S_QUEUESPERPAGEPF0) * sc->pf; - s->s_qpp = r & M_QUEUESPERPAGEPF0; - } + /* egress queues: log2 of # of doorbells per BAR2 page */ + r = t4_read_reg(sc, A_SGE_EGRESS_QUEUES_PER_PAGE_PF); + r >>= S_QUEUESPERPAGEPF0 + + (S_QUEUESPERPAGEPF1 - S_QUEUESPERPAGEPF0) * sc->pf; + s->eq_s_qpp = r & M_QUEUESPERPAGEPF0; + + /* ingress queues: log2 of # of doorbells per BAR2 page */ + r = t4_read_reg(sc, A_SGE_INGRESS_QUEUES_PER_PAGE_PF); + r >>= S_QUEUESPERPAGEPF0 + + (S_QUEUESPERPAGEPF1 - S_QUEUESPERPAGEPF0) * sc->pf; + s->iq_s_qpp = r & M_QUEUESPERPAGEPF0; t4_init_tp_params(sc); @@ -2799,7 +2804,7 @@ alloc_eq(struct adapter *sc, struct port if (isset(&eq->doorbells, DOORBELL_UDB) || isset(&eq->doorbells, DOORBELL_UDBWC) || isset(&eq->doorbells, DOORBELL_WCWR)) { - uint32_t s_qpp = sc->sge.s_qpp; + uint32_t s_qpp = sc->sge.eq_s_qpp; uint32_t mask = (1 << s_qpp) - 1; volatile uint8_t *udb; From owner-svn-src-stable@FreeBSD.ORG Sun Oct 20 21:21:51 2013 Return-Path: Delivered-To: svn-src-stable@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) (using TLSv1 with cipher ADH-AES256-SHA (256/256 bits)) (No client certificate requested) by hub.freebsd.org (Postfix) with ESMTP id 323DF931; Sun, 20 Oct 2013 21:21:51 +0000 (UTC) (envelope-from alfred@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:1900:2254:2068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mx1.freebsd.org (Postfix) with ESMTPS id 1DEA320FB; Sun, 20 Oct 2013 21:21:51 +0000 (UTC) Received: from svn.freebsd.org ([127.0.1.70]) by svn.freebsd.org (8.14.7/8.14.7) with ESMTP id r9KLLo8l081938; Sun, 20 Oct 2013 21:21:50 GMT (envelope-from alfred@svn.freebsd.org) Received: (from alfred@localhost) by svn.freebsd.org (8.14.7/8.14.5/Submit) id r9KLLowW081937; Sun, 20 Oct 2013 21:21:50 GMT (envelope-from alfred@svn.freebsd.org) Message-Id: <201310202121.r9KLLowW081937@svn.freebsd.org> From: Alfred Perlstein Date: Sun, 20 Oct 2013 21:21:50 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-stable@freebsd.org, svn-src-stable-10@freebsd.org Subject: svn commit: r256810 - stable/10/sys/ofed/drivers/net/mlx4 X-SVN-Group: stable-10 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-stable@freebsd.org X-Mailman-Version: 2.1.14 Precedence: list List-Id: SVN commit messages for all the -stable branches of the src tree List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sun, 20 Oct 2013 21:21:51 -0000 Author: alfred Date: Sun Oct 20 21:21:50 2013 New Revision: 256810 URL: http://svnweb.freebsd.org/changeset/base/256810 Log: Fix resource free. The order of releasing resources in mlxen was wrong, which caused panic on reload of the module. MFC: 256682 Submitted by: Shahar Klein (shahark at mellanox.com) Approved by: re Modified: stable/10/sys/ofed/drivers/net/mlx4/en_netdev.c Directory Properties: stable/10/sys/ (props changed) Modified: stable/10/sys/ofed/drivers/net/mlx4/en_netdev.c ============================================================================== --- stable/10/sys/ofed/drivers/net/mlx4/en_netdev.c Sun Oct 20 21:21:07 2013 (r256809) +++ stable/10/sys/ofed/drivers/net/mlx4/en_netdev.c Sun Oct 20 21:21:50 2013 (r256810) @@ -927,9 +927,6 @@ void mlx4_en_destroy_netdev(struct net_d if (priv->allocated) mlx4_free_hwq_res(mdev->dev, &priv->res, MLX4_EN_PAGE_SIZE); - if (priv->sysctl) - sysctl_ctx_free(&priv->conf_ctx); - mutex_lock(&mdev->state_lock); mlx4_en_stop_port(dev); mutex_unlock(&mdev->state_lock); @@ -946,6 +943,9 @@ void mlx4_en_destroy_netdev(struct net_d mlx4_en_free_resources(priv); + if (priv->sysctl) + sysctl_ctx_free(&priv->conf_ctx); + mtx_destroy(&priv->stats_lock.m); mtx_destroy(&priv->vlan_lock.m); kfree(priv); From owner-svn-src-stable@FreeBSD.ORG Mon Oct 21 01:10:38 2013 Return-Path: Delivered-To: svn-src-stable@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) (using TLSv1 with cipher ADH-AES256-SHA (256/256 bits)) (No client certificate requested) by hub.freebsd.org (Postfix) with ESMTP id BF196866; Mon, 21 Oct 2013 01:10:38 +0000 (UTC) (envelope-from np@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:1900:2254:2068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mx1.freebsd.org (Postfix) with ESMTPS id 9265F2E67; Mon, 21 Oct 2013 01:10:38 +0000 (UTC) Received: from svn.freebsd.org ([127.0.1.70]) by svn.freebsd.org (8.14.7/8.14.7) with ESMTP id r9L1Acea003957; Mon, 21 Oct 2013 01:10:38 GMT (envelope-from np@svn.freebsd.org) Received: (from np@localhost) by svn.freebsd.org (8.14.7/8.14.5/Submit) id r9L1AcGu003945; Mon, 21 Oct 2013 01:10:38 GMT (envelope-from np@svn.freebsd.org) Message-Id: <201310210110.r9L1AcGu003945@svn.freebsd.org> From: Navdeep Parhar Date: Mon, 21 Oct 2013 01:10:38 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-stable@freebsd.org, svn-src-stable-10@freebsd.org Subject: svn commit: r256819 - in stable/10/sys: dev/cxgbe/iw_cxgbe modules/cxgbe modules/cxgbe/iw_cxgbe X-SVN-Group: stable-10 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-stable@freebsd.org X-Mailman-Version: 2.1.14 Precedence: list List-Id: SVN commit messages for all the -stable branches of the src tree List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 21 Oct 2013 01:10:38 -0000 Author: np Date: Mon Oct 21 01:10:37 2013 New Revision: 256819 URL: http://svnweb.freebsd.org/changeset/base/256819 Log: MFC r256694, r256713, r256714. r256694: iw_cxgbe: iWARP driver for Chelsio T4/T5 chips. This is a straight port of the iw_cxgb4 found in OFED distributions. r256713: iw_cxgbe should have a dependency on t4nex. r256714: Fix typo in previous commit. Approved by: re (hrs) Added: stable/10/sys/dev/cxgbe/iw_cxgbe/ - copied from r256694, head/sys/dev/cxgbe/iw_cxgbe/ stable/10/sys/modules/cxgbe/iw_cxgbe/ - copied from r256694, head/sys/modules/cxgbe/iw_cxgbe/ Modified: stable/10/sys/dev/cxgbe/iw_cxgbe/device.c stable/10/sys/modules/cxgbe/Makefile Directory Properties: stable/10/sys/ (props changed) Modified: stable/10/sys/dev/cxgbe/iw_cxgbe/device.c ============================================================================== --- head/sys/dev/cxgbe/iw_cxgbe/device.c Thu Oct 17 18:37:25 2013 (r256694) +++ stable/10/sys/dev/cxgbe/iw_cxgbe/device.c Mon Oct 21 01:10:37 2013 (r256819) @@ -363,6 +363,7 @@ static moduledata_t c4iw_mod_data = { }; MODULE_VERSION(iw_cxgbe, 1); +MODULE_DEPEND(iw_cxgbe, t4nex, 1, 1, 1); MODULE_DEPEND(iw_cxgbe, t4_tom, 1, 1, 1); MODULE_DEPEND(iw_cxgbe, ibcore, 1, 1, 1); DECLARE_MODULE(iw_cxgbe, c4iw_mod_data, SI_SUB_EXEC, SI_ORDER_ANY); Modified: stable/10/sys/modules/cxgbe/Makefile ============================================================================== --- stable/10/sys/modules/cxgbe/Makefile Mon Oct 21 00:58:35 2013 (r256818) +++ stable/10/sys/modules/cxgbe/Makefile Mon Oct 21 01:10:37 2013 (r256819) @@ -6,9 +6,16 @@ SUBDIR = if_cxgbe SUBDIR+= t4_firmware SUBDIR+= t5_firmware SUBDIR+= ${_tom} +SUBDIR+= ${_iw_cxgbe} -.if ${MACHINE_CPUARCH} == "amd64" || ${MACHINE_CPUARCH} == "i386" +.if ${MACHINE_CPUARCH} == "amd64" _tom= tom +_iw_cxgbe= iw_cxgbe .endif +.if ${MACHINE_CPUARCH} == "i386" +_tom= tom +.endif + + .include From owner-svn-src-stable@FreeBSD.ORG Mon Oct 21 01:15:06 2013 Return-Path: Delivered-To: svn-src-stable@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [8.8.178.115]) (using TLSv1 with cipher ADH-AES256-SHA (256/256 bits)) (No client certificate requested) by hub.freebsd.org (Postfix) with ESMTP id 8988F9F5; Mon, 21 Oct 2013 01:15:06 +0000 (UTC) (envelope-from np@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:1900:2254:2068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mx1.freebsd.org (Postfix) with ESMTPS id 5AEB62EC8; Mon, 21 Oct 2013 01:15:06 +0000 (UTC) Received: from svn.freebsd.org ([127.0.1.70]) by svn.freebsd.org (8.14.7/8.14.7) with ESMTP id r9L1F6PW007012; Mon, 21 Oct 2013 01:15:06 GMT (envelope-from np@svn.freebsd.org) Received: (from np@localhost) by svn.freebsd.org (8.14.7/8.14.5/Submit) id r9L1F6Ir007011; Mon, 21 Oct 2013 01:15:06 GMT (envelope-from np@svn.freebsd.org) Message-Id: <201310210115.r9L1F6Ir007011@svn.freebsd.org> From: Navdeep Parhar Date: Mon, 21 Oct 2013 01:15:06 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-stable@freebsd.org, svn-src-stable-10@freebsd.org Subject: svn commit: r256820 - in stable/10/sys: contrib/rdma modules/rdma modules/rdma/addr modules/rdma/cma modules/rdma/core modules/rdma/iwcm X-SVN-Group: stable-10 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-stable@freebsd.org X-Mailman-Version: 2.1.14 Precedence: list List-Id: SVN commit messages for all the -stable branches of the src tree List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 21 Oct 2013 01:15:06 -0000 Author: np Date: Mon Oct 21 01:15:05 2013 New Revision: 256820 URL: http://svnweb.freebsd.org/changeset/base/256820 Log: MFC r256467: Delete all of the old RDMA code (except krping, which was switched to use sys/ofed some time back). This has been sitting around as dead code in the tree for a very long time. Approved by: re (hrs) Deleted: stable/10/sys/contrib/rdma/core_priv.h stable/10/sys/contrib/rdma/ib_addr.h stable/10/sys/contrib/rdma/ib_cache.h stable/10/sys/contrib/rdma/ib_cm.h stable/10/sys/contrib/rdma/ib_fmr_pool.h stable/10/sys/contrib/rdma/ib_mad.h stable/10/sys/contrib/rdma/ib_marshall.h stable/10/sys/contrib/rdma/ib_pack.h stable/10/sys/contrib/rdma/ib_sa.h stable/10/sys/contrib/rdma/ib_smi.h stable/10/sys/contrib/rdma/ib_umem.h stable/10/sys/contrib/rdma/ib_user_cm.h stable/10/sys/contrib/rdma/ib_user_mad.h stable/10/sys/contrib/rdma/ib_user_sa.h stable/10/sys/contrib/rdma/ib_user_verbs.h stable/10/sys/contrib/rdma/ib_verbs.h stable/10/sys/contrib/rdma/iw_cm.h stable/10/sys/contrib/rdma/rdma_addr.c stable/10/sys/contrib/rdma/rdma_cache.c stable/10/sys/contrib/rdma/rdma_cm.h stable/10/sys/contrib/rdma/rdma_cm_ib.h stable/10/sys/contrib/rdma/rdma_cma.c stable/10/sys/contrib/rdma/rdma_device.c stable/10/sys/contrib/rdma/rdma_iwcm.c stable/10/sys/contrib/rdma/rdma_user_cm.h stable/10/sys/contrib/rdma/rdma_verbs.c stable/10/sys/contrib/rdma/types.h stable/10/sys/modules/rdma/addr/ stable/10/sys/modules/rdma/cma/ stable/10/sys/modules/rdma/core/ stable/10/sys/modules/rdma/iwcm/ Modified: stable/10/sys/modules/rdma/Makefile Directory Properties: stable/10/sys/ (props changed) Modified: stable/10/sys/modules/rdma/Makefile ============================================================================== --- stable/10/sys/modules/rdma/Makefile Mon Oct 21 01:10:37 2013 (r256819) +++ stable/10/sys/modules/rdma/Makefile Mon Oct 21 01:15:05 2013 (r256820) @@ -1,9 +1,5 @@ # $FreeBSD$ -#SUBDIR= addr -#SUBDIR+= cma -#SUBDIR+= iwcm -#SUBDIR+= core SUBDIR+= krping .include From owner-svn-src-stable@FreeBSD.ORG Mon Oct 21 04:00:24 2013 Return-Path: Delivered-To: svn-src-stable@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) (using TLSv1 with cipher ADH-AES256-SHA (256/256 bits)) (No client certificate requested) by hub.freebsd.org (Postfix) with ESMTP id 62957CB1; Mon, 21 Oct 2013 04:00:24 +0000 (UTC) (envelope-from gibbs@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:1900:2254:2068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mx1.freebsd.org (Postfix) with ESMTPS id 500602742; Mon, 21 Oct 2013 04:00:24 +0000 (UTC) Received: from svn.freebsd.org ([127.0.1.70]) by svn.freebsd.org (8.14.7/8.14.7) with ESMTP id r9L40OFe095915; Mon, 21 Oct 2013 04:00:24 GMT (envelope-from gibbs@svn.freebsd.org) Received: (from gibbs@localhost) by svn.freebsd.org (8.14.7/8.14.5/Submit) id r9L40Opv095914; Mon, 21 Oct 2013 04:00:24 GMT (envelope-from gibbs@svn.freebsd.org) Message-Id: <201310210400.r9L40Opv095914@svn.freebsd.org> From: "Justin T. Gibbs" Date: Mon, 21 Oct 2013 04:00:24 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-stable@freebsd.org, svn-src-stable-10@freebsd.org Subject: svn commit: r256821 - stable/10/sys/conf X-SVN-Group: stable-10 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-stable@freebsd.org X-Mailman-Version: 2.1.14 Precedence: list List-Id: SVN commit messages for all the -stable branches of the src tree List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 21 Oct 2013 04:00:24 -0000 Author: gibbs Date: Mon Oct 21 04:00:23 2013 New Revision: 256821 URL: http://svnweb.freebsd.org/changeset/base/256821 Log: MFC 256813: The Xen userland event channel driver isn't complete. Disabled it from the kernel build until it is ready. sys/conf/files: Remove the entry for xen/evtchn/evtchn_dev.c so it is not included in any kernel builds. Noticed by: smh Approved by: re (hrs) ------------------------------------------------------------------------ Modified: stable/10/sys/conf/files Directory Properties: stable/10/sys/ (props changed) stable/10/sys/conf/ (props changed) Modified: stable/10/sys/conf/files ============================================================================== --- stable/10/sys/conf/files Mon Oct 21 01:15:05 2013 (r256820) +++ stable/10/sys/conf/files Mon Oct 21 04:00:23 2013 (r256821) @@ -3845,7 +3845,6 @@ vm/vm_zeroidle.c standard vm/vnode_pager.c standard xen/gnttab.c optional xen | xenhvm xen/features.c optional xen | xenhvm -xen/evtchn/evtchn_dev.c optional xen | xenhvm xen/xenbus/xenbus_if.m optional xen | xenhvm xen/xenbus/xenbus.c optional xen | xenhvm xen/xenbus/xenbusb_if.m optional xen | xenhvm From owner-svn-src-stable@FreeBSD.ORG Mon Oct 21 05:57:37 2013 Return-Path: Delivered-To: svn-src-stable@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) (using TLSv1 with cipher ADH-AES256-SHA (256/256 bits)) (No client certificate requested) by hub.freebsd.org (Postfix) with ESMTP id 8A291D79; Mon, 21 Oct 2013 05:57:37 +0000 (UTC) (envelope-from yongari@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:1900:2254:2068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mx1.freebsd.org (Postfix) with ESMTPS id 755052BFD; Mon, 21 Oct 2013 05:57:37 +0000 (UTC) Received: from svn.freebsd.org ([127.0.1.70]) by svn.freebsd.org (8.14.7/8.14.7) with ESMTP id r9L5vbEf058800; Mon, 21 Oct 2013 05:57:37 GMT (envelope-from yongari@svn.freebsd.org) Received: (from yongari@localhost) by svn.freebsd.org (8.14.7/8.14.5/Submit) id r9L5vbcN058799; Mon, 21 Oct 2013 05:57:37 GMT (envelope-from yongari@svn.freebsd.org) Message-Id: <201310210557.r9L5vbcN058799@svn.freebsd.org> From: Pyun YongHyeon Date: Mon, 21 Oct 2013 05:57:37 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-stable@freebsd.org, svn-src-stable-9@freebsd.org Subject: svn commit: r256825 - stable/9/sys/dev/nfe X-SVN-Group: stable-9 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-stable@freebsd.org X-Mailman-Version: 2.1.14 Precedence: list List-Id: SVN commit messages for all the -stable branches of the src tree List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 21 Oct 2013 05:57:37 -0000 Author: yongari Date: Mon Oct 21 05:57:36 2013 New Revision: 256825 URL: http://svnweb.freebsd.org/changeset/base/256825 Log: MFC r256038: Fix clearing MAC stats registers. Previously it cleared every fourth register. Submitted by: Paul A. Patience Modified: stable/9/sys/dev/nfe/if_nfe.c Directory Properties: stable/9/sys/ (props changed) stable/9/sys/dev/ (props changed) Modified: stable/9/sys/dev/nfe/if_nfe.c ============================================================================== --- stable/9/sys/dev/nfe/if_nfe.c Mon Oct 21 05:14:00 2013 (r256824) +++ stable/9/sys/dev/nfe/if_nfe.c Mon Oct 21 05:57:36 2013 (r256825) @@ -3206,8 +3206,8 @@ nfe_stats_clear(struct nfe_softc *sc) else return; - for (i = 0; i < mib_cnt; i += sizeof(uint32_t)) - NFE_READ(sc, NFE_TX_OCTET + i); + for (i = 0; i < mib_cnt; i++) + NFE_READ(sc, NFE_TX_OCTET + i * sizeof(uint32_t)); if ((sc->nfe_flags & NFE_MIB_V3) != 0) { NFE_READ(sc, NFE_TX_UNICAST); From owner-svn-src-stable@FreeBSD.ORG Mon Oct 21 06:31:57 2013 Return-Path: Delivered-To: svn-src-stable@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [8.8.178.115]) (using TLSv1 with cipher ADH-AES256-SHA (256/256 bits)) (No client certificate requested) by hub.freebsd.org (Postfix) with ESMTP id F2C3E8A0; Mon, 21 Oct 2013 06:31:56 +0000 (UTC) (envelope-from np@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:1900:2254:2068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mx1.freebsd.org (Postfix) with ESMTPS id DF2902DB9; Mon, 21 Oct 2013 06:31:56 +0000 (UTC) Received: from svn.freebsd.org ([127.0.1.70]) by svn.freebsd.org (8.14.7/8.14.7) with ESMTP id r9L6VuAn078677; Mon, 21 Oct 2013 06:31:56 GMT (envelope-from np@svn.freebsd.org) Received: (from np@localhost) by svn.freebsd.org (8.14.7/8.14.5/Submit) id r9L6Vuj7078674; Mon, 21 Oct 2013 06:31:56 GMT (envelope-from np@svn.freebsd.org) Message-Id: <201310210631.r9L6Vuj7078674@svn.freebsd.org> From: Navdeep Parhar Date: Mon, 21 Oct 2013 06:31:56 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-stable@freebsd.org, svn-src-stable-10@freebsd.org Subject: svn commit: r256829 - stable/10/sys/contrib/rdma/krping X-SVN-Group: stable-10 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-stable@freebsd.org X-Mailman-Version: 2.1.14 Precedence: list List-Id: SVN commit messages for all the -stable branches of the src tree List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 21 Oct 2013 06:31:57 -0000 Author: np Date: Mon Oct 21 06:31:56 2013 New Revision: 256829 URL: http://svnweb.freebsd.org/changeset/base/256829 Log: MFC r256470: Update krping to the latest upstream code. Move all the FreeBSD specific parts to krping_dev.c, which leaves the other files as close to their upstream versions as possible. Approved by: re (glebius) Modified: stable/10/sys/contrib/rdma/krping/getopt.c stable/10/sys/contrib/rdma/krping/krping.c stable/10/sys/contrib/rdma/krping/krping.h stable/10/sys/contrib/rdma/krping/krping_dev.c Directory Properties: stable/10/sys/ (props changed) Modified: stable/10/sys/contrib/rdma/krping/getopt.c ============================================================================== --- stable/10/sys/contrib/rdma/krping/getopt.c Mon Oct 21 06:27:20 2013 (r256828) +++ stable/10/sys/contrib/rdma/krping/getopt.c Mon Oct 21 06:31:56 2013 (r256829) @@ -5,9 +5,10 @@ #include __FBSDID("$FreeBSD$"); -#include -#include -#include +#include +#include +#include + #include "getopt.h" /** @@ -49,29 +50,29 @@ int krping_getopt(const char *caller, ch if (opts->has_arg & OPT_NOPARAM) { return opts->val; } - printf("%s: the %s option requires " + printk(KERN_INFO "%s: the %s option requires " "an argument\n", caller, token); return -EINVAL; } if (opts->has_arg & OPT_INT) { char* v; - *value = strtoul(val, &v, 0); + *value = simple_strtoul(val, &v, 0); if (!*v) { return opts->val; } - printf("%s: invalid numeric value " + printk(KERN_INFO "%s: invalid numeric value " "in %s=%s\n", caller, token, val); return -EDOM; } if (opts->has_arg & OPT_STRING) { return opts->val; } - printf("%s: unexpected argument %s to the " + printk(KERN_INFO "%s: unexpected argument %s to the " "%s option\n", caller, val, token); return -EINVAL; } } - printf("%s: Unrecognized option %s\n", caller, token); + printk(KERN_INFO "%s: Unrecognized option %s\n", caller, token); return -EOPNOTSUPP; } Modified: stable/10/sys/contrib/rdma/krping/krping.c ============================================================================== --- stable/10/sys/contrib/rdma/krping/krping.c Mon Oct 21 06:27:20 2013 (r256828) +++ stable/10/sys/contrib/rdma/krping/krping.c Mon Oct 21 06:31:56 2013 (r256829) @@ -1,6 +1,6 @@ /* * Copyright (c) 2005 Ammasso, Inc. All rights reserved. - * Copyright (c) 2006 Open Grid Computing, Inc. All rights reserved. + * Copyright (c) 2006-2009 Open Grid Computing, Inc. All rights reserved. * * This software is available to you under a choice of one of two * licenses. You may choose to be licensed under the terms of the GNU @@ -34,39 +34,52 @@ #include __FBSDID("$FreeBSD$"); -#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#include -#include -#include -#include -#include -#include -#include +#include -#include -#include - -#include +#include #include -#include "getopt.h" #include "krping.h" +#include "getopt.h" -#define PFX "krping: " +extern int krping_debug; +#define DEBUG_LOG(cb, x...) if (krping_debug) krping_printf((cb)->cookie, x) +#define PRINTF(cb, x...) krping_printf((cb)->cookie, x) -static int debug = 0; -#define DEBUG_LOG if (debug) printf +MODULE_AUTHOR("Steve Wise"); +MODULE_DESCRIPTION("RDMA ping client/server"); +MODULE_LICENSE("Dual BSD/GPL"); + +static __inline uint64_t +get_cycles(void) +{ + uint32_t low, high; + __asm __volatile("rdtsc" : "=a" (low), "=d" (high)); + return (low | ((u_int64_t)high << 32)); +} + +typedef uint64_t cycles_t; + +enum mem_type { + DMA = 1, + FASTREG = 2, + MW = 3, + MR = 4 +}; static const struct krping_option krping_opts[] = { {"count", OPT_INT, 'C'}, @@ -77,23 +90,29 @@ static const struct krping_option krping {"validate", OPT_NOPARAM, 'V'}, {"server", OPT_NOPARAM, 's'}, {"client", OPT_NOPARAM, 'c'}, - {"dmamr", OPT_NOPARAM, 'D'}, - {"debug", OPT_NOPARAM, 'd'}, - {"wlat", OPT_NOPARAM, 'l'}, - {"rlat", OPT_NOPARAM, 'L'}, - {"bw", OPT_NOPARAM, 'B'}, - {"tx-depth", OPT_INT, 't'}, - {"poll", OPT_NOPARAM, 'P'}, - {"memlimit", OPT_INT, 'm'}, + {"mem_mode", OPT_STRING, 'm'}, + {"server_inv", OPT_NOPARAM, 'I'}, + {"wlat", OPT_NOPARAM, 'l'}, + {"rlat", OPT_NOPARAM, 'L'}, + {"bw", OPT_NOPARAM, 'B'}, + {"duplex", OPT_NOPARAM, 'd'}, + {"txdepth", OPT_INT, 'T'}, + {"poll", OPT_NOPARAM, 'P'}, + {"local_dma_lkey", OPT_NOPARAM, 'Z'}, + {"read_inv", OPT_NOPARAM, 'R'}, + {"fr", OPT_NOPARAM, 'f'}, {NULL, 0, 0} }; -struct mtx krping_mutex; +#define htonll(x) cpu_to_be64((x)) +#define ntohll(x) cpu_to_be64((x)) + +static struct mutex krping_mutex; /* * List of running krping threads. */ -struct krping_cb_list krping_cbs; +static LIST_HEAD(krping_cbs); /* * krping "ping/pong" loop: @@ -109,24 +128,118 @@ struct krping_cb_list krping_cbs; */ /* + * These states are used to signal events between the completion handler + * and the main client or server thread. + * + * Once CONNECTED, they cycle through RDMA_READ_ADV, RDMA_WRITE_ADV, + * and RDMA_WRITE_COMPLETE for each ping. + */ +enum test_state { + IDLE = 1, + CONNECT_REQUEST, + ADDR_RESOLVED, + ROUTE_RESOLVED, + CONNECTED, + RDMA_READ_ADV, + RDMA_READ_COMPLETE, + RDMA_WRITE_ADV, + RDMA_WRITE_COMPLETE, + ERROR +}; + +struct krping_rdma_info { + uint64_t buf; + uint32_t rkey; + uint32_t size; +}; + +/* * Default max buffer size for IO... */ #define RPING_BUFSIZE 128*1024 -#define RPING_SQ_DEPTH 32 +#define RPING_SQ_DEPTH 64 -static void krping_wait(struct krping_cb *cb, int state) -{ - int rc; - mtx_lock(&cb->lock); - while (cb->state < state) { - rc = msleep(cb, &cb->lock, PCATCH, "krping", 0); - if (rc && rc != ERESTART) { - cb->state = ERROR; - break; - } - } - mtx_unlock(&cb->lock); -} +/* + * Control block struct. + */ +struct krping_cb { + void *cookie; + int server; /* 0 iff client */ + struct ib_cq *cq; + struct ib_pd *pd; + struct ib_qp *qp; + + enum mem_type mem; + struct ib_mr *dma_mr; + + struct ib_fast_reg_page_list *page_list; + int page_list_len; + struct ib_send_wr fastreg_wr; + struct ib_send_wr invalidate_wr; + struct ib_mr *fastreg_mr; + int server_invalidate; + int read_inv; + u8 key; + + struct ib_mw *mw; + struct ib_mw_bind bind_attr; + + struct ib_recv_wr rq_wr; /* recv work request record */ + struct ib_sge recv_sgl; /* recv single SGE */ + struct krping_rdma_info recv_buf;/* malloc'd buffer */ + u64 recv_dma_addr; + DECLARE_PCI_UNMAP_ADDR(recv_mapping) + struct ib_mr *recv_mr; + + struct ib_send_wr sq_wr; /* send work requrest record */ + struct ib_sge send_sgl; + struct krping_rdma_info send_buf;/* single send buf */ + u64 send_dma_addr; + DECLARE_PCI_UNMAP_ADDR(send_mapping) + struct ib_mr *send_mr; + + struct ib_send_wr rdma_sq_wr; /* rdma work request record */ + struct ib_sge rdma_sgl; /* rdma single SGE */ + char *rdma_buf; /* used as rdma sink */ + u64 rdma_dma_addr; + DECLARE_PCI_UNMAP_ADDR(rdma_mapping) + struct ib_mr *rdma_mr; + + uint32_t remote_rkey; /* remote guys RKEY */ + uint64_t remote_addr; /* remote guys TO */ + uint32_t remote_len; /* remote guys LEN */ + + char *start_buf; /* rdma read src */ + u64 start_dma_addr; + DECLARE_PCI_UNMAP_ADDR(start_mapping) + struct ib_mr *start_mr; + + enum test_state state; /* used for cond/signalling */ + wait_queue_head_t sem; + struct krping_stats stats; + + uint16_t port; /* dst port in NBO */ + struct in_addr addr; /* dst addr in NBO */ + char *addr_str; /* dst addr string */ + int verbose; /* verbose logging */ + int count; /* ping count */ + int size; /* ping data size */ + int validate; /* validate ping data */ + int wlat; /* run wlat test */ + int rlat; /* run rlat test */ + int bw; /* run bw test */ + int duplex; /* run bw full duplex test */ + int poll; /* poll or block for rlat test */ + int txdepth; /* SQ depth */ + int local_dma_lkey; /* use 0 for lkey */ + int frtest; /* fastreg test */ + + /* CM stuff */ + struct rdma_cm_id *cm_id; /* connection on client side,*/ + /* listener on server side. */ + struct rdma_cm_id *child_cm_id; /* connection on server side */ + struct list_head list; +}; static int krping_cma_event_handler(struct rdma_cm_id *cma_id, struct rdma_cm_event *event) @@ -134,39 +247,37 @@ static int krping_cma_event_handler(stru int ret; struct krping_cb *cb = cma_id->context; - DEBUG_LOG(PFX "cma_event type %d cma_id %p (%s)\n", event->event, cma_id, - (cma_id == cb->cm_id) ? "parent" : "child"); + DEBUG_LOG(cb, "cma_event type %d cma_id %p (%s)\n", event->event, + cma_id, (cma_id == cb->cm_id) ? "parent" : "child"); - mtx_lock(&cb->lock); switch (event->event) { case RDMA_CM_EVENT_ADDR_RESOLVED: cb->state = ADDR_RESOLVED; ret = rdma_resolve_route(cma_id, 2000); if (ret) { - log(LOG_ERR, "rdma_resolve_route error %d\n", - ret); - wakeup(cb); + PRINTF(cb, "rdma_resolve_route error %d\n", ret); + wake_up_interruptible(&cb->sem); } break; case RDMA_CM_EVENT_ROUTE_RESOLVED: cb->state = ROUTE_RESOLVED; - wakeup(cb); + wake_up_interruptible(&cb->sem); break; case RDMA_CM_EVENT_CONNECT_REQUEST: cb->state = CONNECT_REQUEST; cb->child_cm_id = cma_id; - DEBUG_LOG(PFX "child cma %p\n", cb->child_cm_id); - wakeup(cb); + DEBUG_LOG(cb, "child cma %p\n", cb->child_cm_id); + wake_up_interruptible(&cb->sem); break; case RDMA_CM_EVENT_ESTABLISHED: - DEBUG_LOG(PFX "ESTABLISHED\n"); + DEBUG_LOG(cb, "ESTABLISHED\n"); if (!cb->server) { cb->state = CONNECTED; - wakeup(cb); } + wake_up_interruptible(&cb->sem); break; case RDMA_CM_EVENT_ADDR_ERROR: @@ -174,40 +285,34 @@ static int krping_cma_event_handler(stru case RDMA_CM_EVENT_CONNECT_ERROR: case RDMA_CM_EVENT_UNREACHABLE: case RDMA_CM_EVENT_REJECTED: - log(LOG_ERR, "cma event %d, error %d\n", event->event, + PRINTF(cb, "cma event %d, error %d\n", event->event, event->status); cb->state = ERROR; - wakeup(cb); + wake_up_interruptible(&cb->sem); break; case RDMA_CM_EVENT_DISCONNECTED: - DEBUG_LOG(PFX "DISCONNECT EVENT...\n"); + PRINTF(cb, "DISCONNECT EVENT...\n"); cb->state = ERROR; - wakeup(cb); + wake_up_interruptible(&cb->sem); break; case RDMA_CM_EVENT_DEVICE_REMOVAL: - DEBUG_LOG(PFX "cma detected device removal!!!!\n"); - cb->state = ERROR; - wakeup(cb); - mtx_unlock(&cb->lock); - krping_wait(cb, CLEANUP); - tsleep(cb, 0, "krping", 5000); - return 0; + PRINTF(cb, "cma detected device removal!!!!\n"); + break; default: - log(LOG_ERR, "oof bad type!\n"); - wakeup(cb); + PRINTF(cb, "oof bad type!\n"); + wake_up_interruptible(&cb->sem); break; } - mtx_unlock(&cb->lock); return 0; } static int server_recv(struct krping_cb *cb, struct ib_wc *wc) { if (wc->byte_len != sizeof(cb->recv_buf)) { - log(LOG_ERR, "Received bogus data, size %d\n", + PRINTF(cb, "Received bogus data, size %d\n", wc->byte_len); return -1; } @@ -215,7 +320,7 @@ static int server_recv(struct krping_cb cb->remote_rkey = ntohl(cb->recv_buf.rkey); cb->remote_addr = ntohll(cb->recv_buf.buf); cb->remote_len = ntohl(cb->recv_buf.size); - DEBUG_LOG(PFX "Received rkey %x addr %llx len %d from peer\n", + DEBUG_LOG(cb, "Received rkey %x addr %llx len %d from peer\n", cb->remote_rkey, (unsigned long long)cb->remote_addr, cb->remote_len); @@ -230,7 +335,7 @@ static int server_recv(struct krping_cb static int client_recv(struct krping_cb *cb, struct ib_wc *wc) { if (wc->byte_len != sizeof(cb->recv_buf)) { - log(LOG_ERR, "Received bogus data, size %d\n", + PRINTF(cb, "Received bogus data, size %d\n", wc->byte_len); return -1; } @@ -250,11 +355,13 @@ static void krping_cq_event_handler(stru struct ib_recv_wr *bad_wr; int ret; - mtx_lock(&cb->lock); - KASSERT(cb->cq == cq, ("bad condition")); + BUG_ON(cb->cq != cq); if (cb->state == ERROR) { - log(LOG_ERR, "cq completion in ERROR state\n"); - mtx_unlock(&cb->lock); + PRINTF(cb, "cq completion in ERROR state\n"); + return; + } + if (cb->frtest) { + PRINTF(cb, "cq completion event in frtest!\n"); return; } if (!cb->wlat && !cb->rlat && !cb->bw) @@ -262,76 +369,77 @@ static void krping_cq_event_handler(stru while ((ret = ib_poll_cq(cb->cq, 1, &wc)) == 1) { if (wc.status) { if (wc.status == IB_WC_WR_FLUSH_ERR) { - DEBUG_LOG("cq flushed\n"); + DEBUG_LOG(cb, "cq flushed\n"); continue; } else { - log(LOG_CRIT, "cq completion failed status %d\n", - wc.status); + PRINTF(cb, "cq completion failed with " + "wr_id %Lx status %d opcode %d vender_err %x\n", + wc.wr_id, wc.status, wc.opcode, wc.vendor_err); goto error; } } switch (wc.opcode) { case IB_WC_SEND: - DEBUG_LOG(PFX "send completion\n"); + DEBUG_LOG(cb, "send completion\n"); cb->stats.send_bytes += cb->send_sgl.length; cb->stats.send_msgs++; break; case IB_WC_RDMA_WRITE: - DEBUG_LOG(PFX "rdma write completion\n"); + DEBUG_LOG(cb, "rdma write completion\n"); cb->stats.write_bytes += cb->rdma_sq_wr.sg_list->length; cb->stats.write_msgs++; cb->state = RDMA_WRITE_COMPLETE; - wakeup(cb); + wake_up_interruptible(&cb->sem); break; case IB_WC_RDMA_READ: - DEBUG_LOG(PFX "rdma read completion\n"); + DEBUG_LOG(cb, "rdma read completion\n"); cb->stats.read_bytes += cb->rdma_sq_wr.sg_list->length; cb->stats.read_msgs++; cb->state = RDMA_READ_COMPLETE; - wakeup(cb); + wake_up_interruptible(&cb->sem); break; case IB_WC_RECV: - DEBUG_LOG(PFX "recv completion\n"); + DEBUG_LOG(cb, "recv completion\n"); cb->stats.recv_bytes += sizeof(cb->recv_buf); cb->stats.recv_msgs++; if (cb->wlat || cb->rlat || cb->bw) ret = server_recv(cb, &wc); else ret = cb->server ? server_recv(cb, &wc) : - client_recv(cb, &wc); + client_recv(cb, &wc); if (ret) { - log(LOG_ERR, "recv wc error: %d\n", ret); + PRINTF(cb, "recv wc error: %d\n", ret); goto error; } ret = ib_post_recv(cb->qp, &cb->rq_wr, &bad_wr); if (ret) { - log(LOG_ERR, "post recv error: %d\n", + PRINTF(cb, "post recv error: %d\n", ret); goto error; } - wakeup(cb); + wake_up_interruptible(&cb->sem); break; default: - log(LOG_ERR, "unknown!!!!! completion\n"); + PRINTF(cb, + "%s:%d Unexpected opcode %d, Shutting down\n", + __func__, __LINE__, wc.opcode); goto error; } } if (ret) { - log(LOG_ERR, "poll error %d\n", ret); + PRINTF(cb, "poll error %d\n", ret); goto error; } - mtx_unlock(&cb->lock); return; error: cb->state = ERROR; - wakeup(cb); - mtx_unlock(&cb->lock); + wake_up_interruptible(&cb->sem); } static int krping_accept(struct krping_cb *cb) @@ -339,7 +447,7 @@ static int krping_accept(struct krping_c struct rdma_conn_param conn_param; int ret; - DEBUG_LOG(PFX "accepting client connection request\n"); + DEBUG_LOG(cb, "accepting client connection request\n"); memset(&conn_param, 0, sizeof conn_param); conn_param.responder_resources = 1; @@ -347,14 +455,15 @@ static int krping_accept(struct krping_c ret = rdma_accept(cb->child_cm_id, &conn_param); if (ret) { - log(LOG_ERR, "rdma_accept error: %d\n", ret); + PRINTF(cb, "rdma_accept error: %d\n", ret); return ret; } if (!cb->wlat && !cb->rlat && !cb->bw) { - krping_wait(cb, CONNECTED); + wait_event_interruptible(cb->sem, cb->state >= CONNECTED); if (cb->state == ERROR) { - log(LOG_ERR, "wait for CONNECTED state %d\n", cb->state); + PRINTF(cb, "wait for CONNECTED state %d\n", + cb->state); return -1; } } @@ -363,19 +472,22 @@ static int krping_accept(struct krping_c static void krping_setup_wr(struct krping_cb *cb) { - /* XXX X86 only here... not mapping for dma! */ - cb->recv_sgl.addr = vtophys(&cb->recv_buf); + cb->recv_sgl.addr = cb->recv_dma_addr; cb->recv_sgl.length = sizeof cb->recv_buf; - if (cb->use_dmamr) + if (cb->local_dma_lkey) + cb->recv_sgl.lkey = cb->qp->device->local_dma_lkey; + else if (cb->mem == DMA) cb->recv_sgl.lkey = cb->dma_mr->lkey; else cb->recv_sgl.lkey = cb->recv_mr->lkey; cb->rq_wr.sg_list = &cb->recv_sgl; cb->rq_wr.num_sge = 1; - cb->send_sgl.addr = vtophys(&cb->send_buf); + cb->send_sgl.addr = cb->send_dma_addr; cb->send_sgl.length = sizeof cb->send_buf; - if (cb->use_dmamr) + if (cb->local_dma_lkey) + cb->send_sgl.lkey = cb->qp->device->local_dma_lkey; + else if (cb->mem == DMA) cb->send_sgl.lkey = cb->dma_mr->lkey; else cb->send_sgl.lkey = cb->send_mr->lkey; @@ -385,18 +497,39 @@ static void krping_setup_wr(struct krpin cb->sq_wr.sg_list = &cb->send_sgl; cb->sq_wr.num_sge = 1; - cb->rdma_addr = vtophys(cb->rdma_buf); - cb->rdma_sgl.addr = cb->rdma_addr; - if (cb->use_dmamr) - cb->rdma_sgl.lkey = cb->dma_mr->lkey; - else - cb->rdma_sgl.lkey = cb->rdma_mr->lkey; - cb->rdma_sq_wr.send_flags = IB_SEND_SIGNALED; - cb->rdma_sq_wr.sg_list = &cb->rdma_sgl; - cb->rdma_sq_wr.num_sge = 1; + if (cb->server || cb->wlat || cb->rlat || cb->bw) { + cb->rdma_sgl.addr = cb->rdma_dma_addr; + if (cb->mem == MR) + cb->rdma_sgl.lkey = cb->rdma_mr->lkey; + cb->rdma_sq_wr.send_flags = IB_SEND_SIGNALED; + cb->rdma_sq_wr.sg_list = &cb->rdma_sgl; + cb->rdma_sq_wr.num_sge = 1; + } + + switch(cb->mem) { + case FASTREG: + + /* + * A chain of 2 WRs, INVALDATE_MR + FAST_REG_MR. + * both unsignaled. The client uses them to reregister + * the rdma buffers with a new key each iteration. + */ + cb->fastreg_wr.opcode = IB_WR_FAST_REG_MR; + cb->fastreg_wr.wr.fast_reg.page_shift = PAGE_SHIFT; + cb->fastreg_wr.wr.fast_reg.length = cb->size; + cb->fastreg_wr.wr.fast_reg.page_list = cb->page_list; + cb->fastreg_wr.wr.fast_reg.page_list_len = cb->page_list_len; - if (!cb->server || cb->wlat || cb->rlat || cb->bw) { - cb->start_addr = vtophys(cb->start_buf); + cb->invalidate_wr.next = &cb->fastreg_wr; + cb->invalidate_wr.opcode = IB_WR_LOCAL_INV; + break; + case MW: + cb->bind_attr.wr_id = 0xabbaabba; + cb->bind_attr.send_flags = 0; /* unsignaled */ + cb->bind_attr.length = cb->size; + break; + default: + break; } } @@ -406,134 +539,207 @@ static int krping_setup_buffers(struct k struct ib_phys_buf buf; u64 iovbase; - DEBUG_LOG(PFX "krping_setup_buffers called on cb %p\n", cb); + DEBUG_LOG(cb, "krping_setup_buffers called on cb %p\n", cb); + + cb->recv_dma_addr = dma_map_single(cb->pd->device->dma_device, + &cb->recv_buf, + sizeof(cb->recv_buf), DMA_BIDIRECTIONAL); + pci_unmap_addr_set(cb, recv_mapping, cb->recv_dma_addr); + cb->send_dma_addr = dma_map_single(cb->pd->device->dma_device, + &cb->send_buf, sizeof(cb->send_buf), + DMA_BIDIRECTIONAL); + pci_unmap_addr_set(cb, send_mapping, cb->send_dma_addr); - if (cb->use_dmamr) { + if (cb->mem == DMA) { cb->dma_mr = ib_get_dma_mr(cb->pd, IB_ACCESS_LOCAL_WRITE| IB_ACCESS_REMOTE_READ| IB_ACCESS_REMOTE_WRITE); if (IS_ERR(cb->dma_mr)) { - log(LOG_ERR, "reg_dmamr failed\n"); - return PTR_ERR(cb->dma_mr); + DEBUG_LOG(cb, "reg_dmamr failed\n"); + ret = PTR_ERR(cb->dma_mr); + goto bail; } } else { + if (!cb->local_dma_lkey) { + buf.addr = cb->recv_dma_addr; + buf.size = sizeof cb->recv_buf; + DEBUG_LOG(cb, "recv buf dma_addr %llx size %d\n", buf.addr, + (int)buf.size); + iovbase = cb->recv_dma_addr; + cb->recv_mr = ib_reg_phys_mr(cb->pd, &buf, 1, + IB_ACCESS_LOCAL_WRITE, + &iovbase); + + if (IS_ERR(cb->recv_mr)) { + DEBUG_LOG(cb, "recv_buf reg_mr failed\n"); + ret = PTR_ERR(cb->recv_mr); + goto bail; + } - buf.addr = vtophys(&cb->recv_buf); - buf.size = sizeof cb->recv_buf; - iovbase = vtophys(&cb->recv_buf); - cb->recv_mr = ib_reg_phys_mr(cb->pd, &buf, 1, - IB_ACCESS_LOCAL_WRITE, - &iovbase); - - if (IS_ERR(cb->recv_mr)) { - log(LOG_ERR, "recv_buf reg_mr failed\n"); - return PTR_ERR(cb->recv_mr); - } - - buf.addr = vtophys(&cb->send_buf); - buf.size = sizeof cb->send_buf; - iovbase = vtophys(&cb->send_buf); - cb->send_mr = ib_reg_phys_mr(cb->pd, &buf, 1, - 0, &iovbase); - - if (IS_ERR(cb->send_mr)) { - log(LOG_ERR, "send_buf reg_mr failed\n"); - ib_dereg_mr(cb->recv_mr); - return PTR_ERR(cb->send_mr); + buf.addr = cb->send_dma_addr; + buf.size = sizeof cb->send_buf; + DEBUG_LOG(cb, "send buf dma_addr %llx size %d\n", buf.addr, + (int)buf.size); + iovbase = cb->send_dma_addr; + cb->send_mr = ib_reg_phys_mr(cb->pd, &buf, 1, + 0, &iovbase); + + if (IS_ERR(cb->send_mr)) { + DEBUG_LOG(cb, "send_buf reg_mr failed\n"); + ret = PTR_ERR(cb->send_mr); + goto bail; + } } } - /* RNIC adapters have a limit upto which it can register physical memory - * If DMA-MR memory mode is set then normally driver registers maximum - * supported memory. After that if contigmalloc allocates memory beyond the - * specified RNIC limit then Krping may not work. - */ - if (cb->use_dmamr && cb->memlimit) - cb->rdma_buf = contigmalloc(cb->size, M_DEVBUF, M_WAITOK, 0, cb->memlimit, - PAGE_SIZE, 0); - else - cb->rdma_buf = contigmalloc(cb->size, M_DEVBUF, M_WAITOK, 0, -1UL, - PAGE_SIZE, 0); - + cb->rdma_buf = kmalloc(cb->size, GFP_KERNEL); if (!cb->rdma_buf) { - log(LOG_ERR, "rdma_buf malloc failed\n"); - ret = ENOMEM; - goto err1; - } - if (!cb->use_dmamr) { - - buf.addr = vtophys(cb->rdma_buf); - buf.size = cb->size; - iovbase = vtophys(cb->rdma_buf); - cb->rdma_mr = ib_reg_phys_mr(cb->pd, &buf, 1, + DEBUG_LOG(cb, "rdma_buf malloc failed\n"); + ret = -ENOMEM; + goto bail; + } + + cb->rdma_dma_addr = dma_map_single(cb->pd->device->dma_device, + cb->rdma_buf, cb->size, + DMA_BIDIRECTIONAL); + pci_unmap_addr_set(cb, rdma_mapping, cb->rdma_dma_addr); + if (cb->mem != DMA) { + switch (cb->mem) { + case FASTREG: + cb->page_list_len = (((cb->size - 1) & PAGE_MASK) + + PAGE_SIZE) >> PAGE_SHIFT; + cb->page_list = ib_alloc_fast_reg_page_list( + cb->pd->device, + cb->page_list_len); + if (IS_ERR(cb->page_list)) { + DEBUG_LOG(cb, "recv_buf reg_mr failed\n"); + ret = PTR_ERR(cb->page_list); + goto bail; + } + cb->fastreg_mr = ib_alloc_fast_reg_mr(cb->pd, + cb->page_list->max_page_list_len); + if (IS_ERR(cb->fastreg_mr)) { + DEBUG_LOG(cb, "recv_buf reg_mr failed\n"); + ret = PTR_ERR(cb->fastreg_mr); + goto bail; + } + DEBUG_LOG(cb, "fastreg rkey 0x%x page_list %p" + " page_list_len %u\n", cb->fastreg_mr->rkey, + cb->page_list, cb->page_list_len); + break; + case MW: + cb->mw = ib_alloc_mw(cb->pd); + if (IS_ERR(cb->mw)) { + DEBUG_LOG(cb, "recv_buf alloc_mw failed\n"); + ret = PTR_ERR(cb->mw); + goto bail; + } + DEBUG_LOG(cb, "mw rkey 0x%x\n", cb->mw->rkey); + /*FALLTHROUGH*/ + case MR: + buf.addr = cb->rdma_dma_addr; + buf.size = cb->size; + iovbase = cb->rdma_dma_addr; + cb->rdma_mr = ib_reg_phys_mr(cb->pd, &buf, 1, IB_ACCESS_REMOTE_READ| IB_ACCESS_REMOTE_WRITE, &iovbase); - - if (IS_ERR(cb->rdma_mr)) { - log(LOG_ERR, "rdma_buf reg_mr failed\n"); - ret = PTR_ERR(cb->rdma_mr); - goto err2; + if (IS_ERR(cb->rdma_mr)) { + DEBUG_LOG(cb, "rdma_buf reg_mr failed\n"); + ret = PTR_ERR(cb->rdma_mr); + goto bail; + } + DEBUG_LOG(cb, "rdma buf dma_addr %llx size %d mr rkey 0x%x\n", + buf.addr, (int)buf.size, cb->rdma_mr->rkey); + break; + default: + ret = -EINVAL; + goto bail; + break; } } if (!cb->server || cb->wlat || cb->rlat || cb->bw) { - if (cb->use_dmamr && cb->memlimit) - cb->start_buf = contigmalloc(cb->size, M_DEVBUF, M_WAITOK, - 0, cb->memlimit, PAGE_SIZE, 0); - else - cb->start_buf = contigmalloc(cb->size, M_DEVBUF, M_WAITOK, - 0, -1UL, PAGE_SIZE, 0); + + cb->start_buf = kmalloc(cb->size, GFP_KERNEL); if (!cb->start_buf) { - log(LOG_ERR, "start_buf malloc failed\n"); - ret = ENOMEM; - goto err2; + DEBUG_LOG(cb, "start_buf malloc failed\n"); + ret = -ENOMEM; + goto bail; } - if (!cb->use_dmamr) { + + cb->start_dma_addr = dma_map_single(cb->pd->device->dma_device, + cb->start_buf, cb->size, + DMA_BIDIRECTIONAL); + pci_unmap_addr_set(cb, start_mapping, cb->start_dma_addr); + + if (cb->mem == MR || cb->mem == MW) { unsigned flags = IB_ACCESS_REMOTE_READ; - if (cb->wlat || cb->rlat || cb->bw) + if (cb->wlat || cb->rlat || cb->bw) flags |= IB_ACCESS_REMOTE_WRITE; - buf.addr = vtophys(cb->start_buf); + + buf.addr = cb->start_dma_addr; buf.size = cb->size; - iovbase = vtophys(cb->start_buf); + DEBUG_LOG(cb, "start buf dma_addr %llx size %d\n", + buf.addr, (int)buf.size); + iovbase = cb->start_dma_addr; cb->start_mr = ib_reg_phys_mr(cb->pd, &buf, 1, flags, &iovbase); if (IS_ERR(cb->start_mr)) { - log(LOG_ERR, "start_buf reg_mr failed\n"); + DEBUG_LOG(cb, "start_buf reg_mr failed\n"); ret = PTR_ERR(cb->start_mr); - goto err3; + goto bail; } } } krping_setup_wr(cb); - DEBUG_LOG(PFX "allocated & registered buffers...\n"); + DEBUG_LOG(cb, "allocated & registered buffers...\n"); return 0; -err3: - contigfree(cb->start_buf, cb->size, M_DEVBUF); - - if (!cb->use_dmamr) +bail: + if (cb->fastreg_mr && !IS_ERR(cb->fastreg_mr)) + ib_dereg_mr(cb->fastreg_mr); + if (cb->mw && !IS_ERR(cb->mw)) + ib_dealloc_mw(cb->mw); + if (cb->rdma_mr && !IS_ERR(cb->rdma_mr)) ib_dereg_mr(cb->rdma_mr); -err2: - contigfree(cb->rdma_buf, cb->size, M_DEVBUF); -err1: - if (cb->use_dmamr) + if (cb->page_list && !IS_ERR(cb->page_list)) + ib_free_fast_reg_page_list(cb->page_list); + if (cb->dma_mr && !IS_ERR(cb->dma_mr)) ib_dereg_mr(cb->dma_mr); - else { + if (cb->recv_mr && !IS_ERR(cb->recv_mr)) ib_dereg_mr(cb->recv_mr); + if (cb->send_mr && !IS_ERR(cb->send_mr)) ib_dereg_mr(cb->send_mr); - } + if (cb->rdma_buf) + kfree(cb->rdma_buf); + if (cb->start_buf) + kfree(cb->start_buf); return ret; } static void krping_free_buffers(struct krping_cb *cb) { - DEBUG_LOG(PFX "krping_free_buffers called on cb %p\n", cb); + DEBUG_LOG(cb, "krping_free_buffers called on cb %p\n", cb); -#if 0 + if (cb->dma_mr) + ib_dereg_mr(cb->dma_mr); + if (cb->send_mr) + ib_dereg_mr(cb->send_mr); + if (cb->recv_mr) + ib_dereg_mr(cb->recv_mr); + if (cb->rdma_mr) + ib_dereg_mr(cb->rdma_mr); + if (cb->start_mr) + ib_dereg_mr(cb->start_mr); + if (cb->fastreg_mr) + ib_dereg_mr(cb->fastreg_mr); + if (cb->mw) + ib_dealloc_mw(cb->mw); + dma_unmap_single(cb->pd->device->dma_device, pci_unmap_addr(cb, recv_mapping), sizeof(cb->recv_buf), DMA_BIDIRECTIONAL); @@ -543,24 +749,12 @@ static void krping_free_buffers(struct k dma_unmap_single(cb->pd->device->dma_device, pci_unmap_addr(cb, rdma_mapping), cb->size, DMA_BIDIRECTIONAL); -#endif - contigfree(cb->rdma_buf, cb->size, M_DEVBUF); - if (!cb->server || cb->wlat || cb->rlat || cb->bw) { -#if 0 + kfree(cb->rdma_buf); + if (cb->start_buf) { dma_unmap_single(cb->pd->device->dma_device, pci_unmap_addr(cb, start_mapping), cb->size, DMA_BIDIRECTIONAL); -#endif - contigfree(cb->start_buf, cb->size, M_DEVBUF); - } - if (cb->use_dmamr) - ib_dereg_mr(cb->dma_mr); - else { - ib_dereg_mr(cb->send_mr); - ib_dereg_mr(cb->recv_mr); - ib_dereg_mr(cb->rdma_mr); - if (!cb->server) - ib_dereg_mr(cb->start_mr); + kfree(cb->start_buf); } } @@ -577,6 +771,7 @@ static int krping_create_qp(struct krpin init_attr.qp_type = IB_QPT_RC; init_attr.send_cq = cb->cq; init_attr.recv_cq = cb->cq; + init_attr.sq_sig_type = IB_SIGNAL_REQ_WR; if (cb->server) { ret = rdma_create_qp(cb->child_cm_id, cb->pd, &init_attr); @@ -603,36 +798,36 @@ static int krping_setup_qp(struct krping int ret; cb->pd = ib_alloc_pd(cm_id->device); if (IS_ERR(cb->pd)) { - log(LOG_ERR, "ib_alloc_pd failed\n"); + PRINTF(cb, "ib_alloc_pd failed\n"); return PTR_ERR(cb->pd); } - DEBUG_LOG(PFX "created pd %p\n", cb->pd); + DEBUG_LOG(cb, "created pd %p\n", cb->pd); - strlcpy(cb->name, cb->pd->device->name, sizeof(cb->name)); + strlcpy(cb->stats.name, cb->pd->device->name, sizeof(cb->stats.name)); cb->cq = ib_create_cq(cm_id->device, krping_cq_event_handler, NULL, cb, cb->txdepth * 2, 0); if (IS_ERR(cb->cq)) { - log(LOG_ERR, "ib_create_cq failed\n"); + PRINTF(cb, "ib_create_cq failed\n"); ret = PTR_ERR(cb->cq); goto err1; } - DEBUG_LOG(PFX "created cq %p\n", cb->cq); + DEBUG_LOG(cb, "created cq %p\n", cb->cq); *** DIFF OUTPUT TRUNCATED AT 1000 LINES *** From owner-svn-src-stable@FreeBSD.ORG Mon Oct 21 18:20:22 2013 Return-Path: Delivered-To: svn-src-stable@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [8.8.178.115]) (using TLSv1 with cipher ADH-AES256-SHA (256/256 bits)) (No client certificate requested) by hub.freebsd.org (Postfix) with ESMTP id 0887FB97; Mon, 21 Oct 2013 18:20:22 +0000 (UTC) (envelope-from emaste@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:1900:2254:2068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mx1.freebsd.org (Postfix) with ESMTPS id DB3F32AF4; Mon, 21 Oct 2013 18:20:21 +0000 (UTC) Received: from svn.freebsd.org ([127.0.1.70]) by svn.freebsd.org (8.14.7/8.14.7) with ESMTP id r9LIKLXn063551; Mon, 21 Oct 2013 18:20:21 GMT (envelope-from emaste@svn.freebsd.org) Received: (from emaste@localhost) by svn.freebsd.org (8.14.7/8.14.5/Submit) id r9LIKKNa063541; Mon, 21 Oct 2013 18:20:20 GMT (envelope-from emaste@svn.freebsd.org) Message-Id: <201310211820.r9LIKKNa063541@svn.freebsd.org> From: Ed Maste Date: Mon, 21 Oct 2013 18:20:20 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-stable@freebsd.org, svn-src-stable-9@freebsd.org Subject: svn commit: r256851 - stable/9/contrib/gdb/gdb X-SVN-Group: stable-9 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-stable@freebsd.org X-Mailman-Version: 2.1.14 Precedence: list List-Id: SVN commit messages for all the -stable branches of the src tree List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 21 Oct 2013 18:20:22 -0000 Author: emaste Date: Mon Oct 21 18:20:20 2013 New Revision: 256851 URL: http://svnweb.freebsd.org/changeset/base/256851 Log: MFC r244437: Support restrict qualifier in dwarf debug info Newer clang/llvm emit DW_TAG_restrict_type, which wasn't handled by gdb. Import support from Apple's gdb-1822: | 2009-03-24 Jason Molenda (jmolenda@apple.com) | | * gdbtypes.c (make_cv_type): Rename this function to make_cvr_type to | also handle restrict qualifiers. | (check_typedef): Handle TYPE_RESTRICT. | * gdbtypes.h (TYPE_FLAG_RESTRICT, TYPE_RESTRICT): New. | * hpread.c (hpread_type_lookup): Update to use make_cvr_type. | * stabsread.c (read_type): Pass the restrict qualifiers along. | * parse.c (follow_types): Pass the restrict qualifiers along. | * dwarf2read.c (read_tag_const_type): Call make_cvr_type. | (read_tag_volatile_type): Same. | (read_tag_restrict_type): New function. | (read_type_die): Handle DW_TAG_restrict_type. Obtained from: Apple Modified: stable/9/contrib/gdb/gdb/dwarf2read.c stable/9/contrib/gdb/gdb/gdbtypes.c stable/9/contrib/gdb/gdb/gdbtypes.h stable/9/contrib/gdb/gdb/hpread.c stable/9/contrib/gdb/gdb/parse.c stable/9/contrib/gdb/gdb/stabsread.c Directory Properties: stable/9/contrib/gdb/ (props changed) Modified: stable/9/contrib/gdb/gdb/dwarf2read.c ============================================================================== --- stable/9/contrib/gdb/gdb/dwarf2read.c Mon Oct 21 16:46:12 2013 (r256850) +++ stable/9/contrib/gdb/gdb/dwarf2read.c Mon Oct 21 18:20:20 2013 (r256851) @@ -834,6 +834,8 @@ static void read_tag_const_type (struct static void read_tag_volatile_type (struct die_info *, struct dwarf2_cu *); +static void read_tag_restrict_type (struct die_info *, struct dwarf2_cu *); + static void read_tag_string_type (struct die_info *, struct dwarf2_cu *); static void read_subroutine_type (struct die_info *, struct dwarf2_cu *); @@ -3729,7 +3731,8 @@ read_tag_const_type (struct die_info *di } base_type = die_type (die, cu); - die->type = make_cv_type (1, TYPE_VOLATILE (base_type), base_type, 0); + die->type = make_cvr_type (1, TYPE_VOLATILE (base_type), + TYPE_RESTRICT (base_type), base_type, 0); } static void @@ -3743,7 +3746,23 @@ read_tag_volatile_type (struct die_info } base_type = die_type (die, cu); - die->type = make_cv_type (TYPE_CONST (base_type), 1, base_type, 0); + die->type = make_cvr_type (TYPE_CONST (base_type), 1, + TYPE_RESTRICT (base_type), base_type, 0); +} + +static void +read_tag_restrict_type (struct die_info *die, struct dwarf2_cu *cu) +{ + struct type *base_type; + + if (die->type) + { + return; + } + + base_type = die_type (die, cu); + die->type = make_cvr_type (TYPE_CONST (base_type), TYPE_VOLATILE (base_type), + 1, base_type, 0); } /* Extract all information from a DW_TAG_string_type DIE and add to @@ -6086,6 +6105,9 @@ read_type_die (struct die_info *die, str case DW_TAG_volatile_type: read_tag_volatile_type (die, cu); break; + case DW_TAG_restrict_type: + read_tag_restrict_type (die, cu); + break; case DW_TAG_string_type: read_tag_string_type (die, cu); break; Modified: stable/9/contrib/gdb/gdb/gdbtypes.c ============================================================================== --- stable/9/contrib/gdb/gdb/gdbtypes.c Mon Oct 21 16:46:12 2013 (r256850) +++ stable/9/contrib/gdb/gdb/gdbtypes.c Mon Oct 21 18:20:20 2013 (r256851) @@ -502,7 +502,8 @@ make_type_with_address_space (struct typ We allocate new memory if needed. */ struct type * -make_cv_type (int cnst, int voltl, struct type *type, struct type **typeptr) +make_cvr_type (int cnst, int voltl, int restrct, struct type *type, + struct type **typeptr) { struct type *ntype; /* New type */ struct type *tmp_type = type; /* tmp type */ @@ -517,6 +518,9 @@ make_cv_type (int cnst, int voltl, struc if (voltl) new_flags |= TYPE_FLAG_VOLATILE; + if (restrct) + new_flags |= TYPE_FLAG_RESTRICT; + if (typeptr && *typeptr != NULL) { /* Objfile is per-core-type. This const-qualified type had best @@ -1371,7 +1375,7 @@ struct type * check_typedef (struct type *type) { struct type *orig_type = type; - int is_const, is_volatile; + int is_const, is_volatile, is_restrict; while (TYPE_CODE (type) == TYPE_CODE_TYPEDEF) { @@ -1407,6 +1411,7 @@ check_typedef (struct type *type) is_const = TYPE_CONST (type); is_volatile = TYPE_VOLATILE (type); + is_restrict = TYPE_RESTRICT (type); /* If this is a struct/class/union with no fields, then check whether a full definition exists somewhere else. This is for systems where a @@ -1424,7 +1429,7 @@ check_typedef (struct type *type) } newtype = lookup_transparent_type (name); if (newtype) - make_cv_type (is_const, is_volatile, newtype, &type); + make_cvr_type (is_const, is_volatile, is_restrict, newtype, &type); } /* Otherwise, rely on the stub flag being set for opaque/stubbed types */ else if (TYPE_STUB (type) && !currently_reading_symtab) @@ -1442,7 +1447,8 @@ check_typedef (struct type *type) } sym = lookup_symbol (name, 0, STRUCT_DOMAIN, 0, (struct symtab **) NULL); if (sym) - make_cv_type (is_const, is_volatile, SYMBOL_TYPE (sym), &type); + make_cvr_type (is_const, is_volatile, is_restrict, SYMBOL_TYPE (sym), + &type); } if (TYPE_TARGET_STUB (type)) Modified: stable/9/contrib/gdb/gdb/gdbtypes.h ============================================================================== --- stable/9/contrib/gdb/gdb/gdbtypes.h Mon Oct 21 16:46:12 2013 (r256850) +++ stable/9/contrib/gdb/gdb/gdbtypes.h Mon Oct 21 18:20:20 2013 (r256851) @@ -273,6 +273,13 @@ enum type_code #define TYPE_ADDRESS_CLASS_ALL(t) (TYPE_INSTANCE_FLAGS(t) \ & TYPE_FLAG_ADDRESS_CLASS_ALL) +/* Restrict type. If this is set, the corresponding type has a + * restrict modifier. + */ + +#define TYPE_FLAG_RESTRICT (1 << 17) +#define TYPE_RESTRICT(t) (TYPE_INSTANCE_FLAGS (t) & TYPE_FLAG_RESTRICT) + /* Array bound type. */ enum array_bound_type { @@ -1099,7 +1106,8 @@ extern struct type *lookup_reference_typ extern struct type *make_reference_type (struct type *, struct type **); -extern struct type *make_cv_type (int, int, struct type *, struct type **); +extern struct type *make_cvr_type (int, int, int, struct type *, + struct type **); extern void replace_type (struct type *, struct type *); Modified: stable/9/contrib/gdb/gdb/hpread.c ============================================================================== --- stable/9/contrib/gdb/gdb/hpread.c Mon Oct 21 16:46:12 2013 (r256850) +++ stable/9/contrib/gdb/gdb/hpread.c Mon Oct 21 18:20:20 2013 (r256851) @@ -4939,8 +4939,9 @@ hpread_type_lookup (dnttpointer hp_type, * "m_void" modifiers? Is static_flag really needed here? * (m_static used for methods of classes, elsewhere). */ - tmp_type = make_cv_type (dn_bufp->dmodifier.m_const, + tmp_type = make_cvr_type (dn_bufp->dmodifier.m_const, dn_bufp->dmodifier.m_volatile, + 0, hpread_type_lookup (dn_bufp->dmodifier.type, objfile), 0); return tmp_type; Modified: stable/9/contrib/gdb/gdb/parse.c ============================================================================== --- stable/9/contrib/gdb/gdb/parse.c Mon Oct 21 16:46:12 2013 (r256850) +++ stable/9/contrib/gdb/gdb/parse.c Mon Oct 21 18:20:20 2013 (r256851) @@ -1167,13 +1167,15 @@ follow_types (struct type *follow_type) case tp_end: done = 1; if (make_const) - follow_type = make_cv_type (make_const, - TYPE_VOLATILE (follow_type), - follow_type, 0); + follow_type = make_cvr_type (make_const, + TYPE_VOLATILE (follow_type), + TYPE_RESTRICT (follow_type), + follow_type, 0); if (make_volatile) - follow_type = make_cv_type (TYPE_CONST (follow_type), - make_volatile, - follow_type, 0); + follow_type = make_cvr_type (TYPE_CONST (follow_type), + make_volatile, + TYPE_RESTRICT (follow_type), + follow_type, 0); if (make_addr_space) follow_type = make_type_with_address_space (follow_type, make_addr_space); @@ -1192,13 +1194,15 @@ follow_types (struct type *follow_type) case tp_pointer: follow_type = lookup_pointer_type (follow_type); if (make_const) - follow_type = make_cv_type (make_const, - TYPE_VOLATILE (follow_type), - follow_type, 0); + follow_type = make_cvr_type (make_const, + TYPE_VOLATILE (follow_type), + TYPE_RESTRICT (follow_type), + follow_type, 0); if (make_volatile) - follow_type = make_cv_type (TYPE_CONST (follow_type), - make_volatile, - follow_type, 0); + follow_type = make_cvr_type (TYPE_CONST (follow_type), + make_volatile, + TYPE_RESTRICT (follow_type), + follow_type, 0); if (make_addr_space) follow_type = make_type_with_address_space (follow_type, make_addr_space); @@ -1208,13 +1212,15 @@ follow_types (struct type *follow_type) case tp_reference: follow_type = lookup_reference_type (follow_type); if (make_const) - follow_type = make_cv_type (make_const, - TYPE_VOLATILE (follow_type), - follow_type, 0); + follow_type = make_cvr_type (make_const, + TYPE_VOLATILE (follow_type), + TYPE_RESTRICT (follow_type), + follow_type, 0); if (make_volatile) - follow_type = make_cv_type (TYPE_CONST (follow_type), - make_volatile, - follow_type, 0); + follow_type = make_cvr_type (TYPE_CONST (follow_type), + make_volatile, + TYPE_RESTRICT (follow_type), + follow_type, 0); if (make_addr_space) follow_type = make_type_with_address_space (follow_type, make_addr_space); Modified: stable/9/contrib/gdb/gdb/stabsread.c ============================================================================== --- stable/9/contrib/gdb/gdb/stabsread.c Mon Oct 21 16:46:12 2013 (r256850) +++ stable/9/contrib/gdb/gdb/stabsread.c Mon Oct 21 18:20:20 2013 (r256851) @@ -1750,13 +1750,13 @@ again: case 'k': /* Const qualifier on some type (Sun) */ type = read_type (pp, objfile); - type = make_cv_type (1, TYPE_VOLATILE (type), type, + type = make_cvr_type (1, TYPE_VOLATILE (type), TYPE_RESTRICT(type), type, dbx_lookup_type (typenums)); break; case 'B': /* Volatile qual on some type (Sun) */ type = read_type (pp, objfile); - type = make_cv_type (TYPE_CONST (type), 1, type, + type = make_cvr_type (TYPE_CONST (type), 1, TYPE_RESTRICT(type), type, dbx_lookup_type (typenums)); break; From owner-svn-src-stable@FreeBSD.ORG Mon Oct 21 18:23:17 2013 Return-Path: Delivered-To: svn-src-stable@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) (using TLSv1 with cipher ADH-AES256-SHA (256/256 bits)) (No client certificate requested) by hub.freebsd.org (Postfix) with ESMTP id CF608DA3; Mon, 21 Oct 2013 18:23:17 +0000 (UTC) (envelope-from emaste@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:1900:2254:2068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mx1.freebsd.org (Postfix) with ESMTPS id A2F782B3F; Mon, 21 Oct 2013 18:23:17 +0000 (UTC) Received: from svn.freebsd.org ([127.0.1.70]) by svn.freebsd.org (8.14.7/8.14.7) with ESMTP id r9LINHRe066859; Mon, 21 Oct 2013 18:23:17 GMT (envelope-from emaste@svn.freebsd.org) Received: (from emaste@localhost) by svn.freebsd.org (8.14.7/8.14.5/Submit) id r9LINHRa066840; Mon, 21 Oct 2013 18:23:17 GMT (envelope-from emaste@svn.freebsd.org) Message-Id: <201310211823.r9LINHRa066840@svn.freebsd.org> From: Ed Maste Date: Mon, 21 Oct 2013 18:23:17 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-stable@freebsd.org, svn-src-stable-9@freebsd.org Subject: svn commit: r256852 - in stable/9/contrib: binutils/include/elf gdb/gdb X-SVN-Group: stable-9 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-stable@freebsd.org X-Mailman-Version: 2.1.14 Precedence: list List-Id: SVN commit messages for all the -stable branches of the src tree List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 21 Oct 2013 18:23:17 -0000 Author: emaste Date: Mon Oct 21 18:23:16 2013 New Revision: 256852 URL: http://svnweb.freebsd.org/changeset/base/256852 Log: MFC r251665: Handle DW_TAG_rvalue_reference_type 2012-05-21 Jim Ingham * dwarf2read.c (process_die): Handle DW_TAG_rvalue_reference_type. (read_type_die): Ditto. (dwarf_tag_name): Ditto. * elf/dwarf2.h: Add DW_TAG_rvalue_reference_type. Obtained from: Apple, gdb-1820 Modified: stable/9/contrib/binutils/include/elf/dwarf2.h stable/9/contrib/gdb/gdb/dwarf2read.c Directory Properties: stable/9/contrib/binutils/ (props changed) stable/9/contrib/gdb/ (props changed) Modified: stable/9/contrib/binutils/include/elf/dwarf2.h ============================================================================== --- stable/9/contrib/binutils/include/elf/dwarf2.h Mon Oct 21 18:20:20 2013 (r256851) +++ stable/9/contrib/binutils/include/elf/dwarf2.h Mon Oct 21 18:23:16 2013 (r256852) @@ -189,6 +189,7 @@ enum dwarf_tag DW_TAG_imported_unit = 0x3d, DW_TAG_condition = 0x3f, DW_TAG_shared_type = 0x40, + DW_TAG_rvalue_reference_type = 0x42, /* SGI/MIPS Extensions. */ DW_TAG_MIPS_loop = 0x4081, /* HP extensions. See: ftp://ftp.hp.com/pub/lang/tools/WDB/wdb-4.0.tar.gz . */ Modified: stable/9/contrib/gdb/gdb/dwarf2read.c ============================================================================== --- stable/9/contrib/gdb/gdb/dwarf2read.c Mon Oct 21 18:20:20 2013 (r256851) +++ stable/9/contrib/gdb/gdb/dwarf2read.c Mon Oct 21 18:23:16 2013 (r256852) @@ -1977,6 +1977,7 @@ process_die (struct die_info *die, struc read_tag_ptr_to_member_type (die, cu); break; case DW_TAG_reference_type: + case DW_TAG_rvalue_reference_type: read_tag_reference_type (die, cu); break; case DW_TAG_string_type: @@ -6097,6 +6098,7 @@ read_type_die (struct die_info *die, str read_tag_ptr_to_member_type (die, cu); break; case DW_TAG_reference_type: + case DW_TAG_rvalue_reference_type: read_tag_reference_type (die, cu); break; case DW_TAG_const_type: @@ -6425,6 +6427,8 @@ dwarf_tag_name (unsigned tag) return "DW_TAG_pointer_type"; case DW_TAG_reference_type: return "DW_TAG_reference_type"; + case DW_TAG_rvalue_reference_type: + return "DW_TAG_rvalue_reference_type"; case DW_TAG_compile_unit: return "DW_TAG_compile_unit"; case DW_TAG_string_type: From owner-svn-src-stable@FreeBSD.ORG Mon Oct 21 18:25:36 2013 Return-Path: Delivered-To: svn-src-stable@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [8.8.178.115]) (using TLSv1 with cipher ADH-AES256-SHA (256/256 bits)) (No client certificate requested) by hub.freebsd.org (Postfix) with ESMTP id C3020FEC; Mon, 21 Oct 2013 18:25:36 +0000 (UTC) (envelope-from emaste@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:1900:2254:2068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mx1.freebsd.org (Postfix) with ESMTPS id 948182B62; Mon, 21 Oct 2013 18:25:36 +0000 (UTC) Received: from svn.freebsd.org ([127.0.1.70]) by svn.freebsd.org (8.14.7/8.14.7) with ESMTP id r9LIPaxm067874; Mon, 21 Oct 2013 18:25:36 GMT (envelope-from emaste@svn.freebsd.org) Received: (from emaste@localhost) by svn.freebsd.org (8.14.7/8.14.5/Submit) id r9LIPavK067873; Mon, 21 Oct 2013 18:25:36 GMT (envelope-from emaste@svn.freebsd.org) Message-Id: <201310211825.r9LIPavK067873@svn.freebsd.org> From: Ed Maste Date: Mon, 21 Oct 2013 18:25:36 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-stable@freebsd.org, svn-src-stable-9@freebsd.org Subject: svn commit: r256853 - stable/9/contrib/gdb/gdb X-SVN-Group: stable-9 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-stable@freebsd.org X-Mailman-Version: 2.1.14 Precedence: list List-Id: SVN commit messages for all the -stable branches of the src tree List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 21 Oct 2013 18:25:36 -0000 Author: emaste Date: Mon Oct 21 18:25:36 2013 New Revision: 256853 URL: http://svnweb.freebsd.org/changeset/base/256853 Log: MFC r251667: Handle DW_TAG_unspecified_type 2011-11-14 Jim Ingham * dwarf2read.c (read_type_die): Handle DW_TAG_unspecified_type. (read_tag_unspecified_type): New function, add a type for the DW_TAG_unspecified_type die. Obtained from: Apple, gdb-1752 Modified: stable/9/contrib/gdb/gdb/dwarf2read.c Directory Properties: stable/9/contrib/gdb/ (props changed) Modified: stable/9/contrib/gdb/gdb/dwarf2read.c ============================================================================== --- stable/9/contrib/gdb/gdb/dwarf2read.c Mon Oct 21 18:23:16 2013 (r256852) +++ stable/9/contrib/gdb/gdb/dwarf2read.c Mon Oct 21 18:25:36 2013 (r256853) @@ -825,6 +825,8 @@ static void read_array_type (struct die_ static void read_tag_pointer_type (struct die_info *, struct dwarf2_cu *); +static void read_tag_unspecified_type (struct die_info *, struct dwarf2_cu *); + static void read_tag_ptr_to_member_type (struct die_info *, struct dwarf2_cu *); @@ -3722,6 +3724,27 @@ read_tag_reference_type (struct die_info } static void +read_tag_unspecified_type (struct die_info *die, struct dwarf2_cu *cu) +{ + struct objfile *objfile = cu->objfile; + struct type *type; + struct attribute *attr; + + if (die->type) + { + return; + } + + type = alloc_type (objfile); + TYPE_LENGTH (type) = 0; + attr = dwarf2_attr (die, DW_AT_name, cu); + if (attr && DW_STRING (attr)) + TYPE_NAME (type) = DW_STRING (attr); + + die->type = type; +} + +static void read_tag_const_type (struct die_info *die, struct dwarf2_cu *cu) { struct type *base_type; @@ -6094,6 +6117,9 @@ read_type_die (struct die_info *die, str case DW_TAG_pointer_type: read_tag_pointer_type (die, cu); break; + case DW_TAG_unspecified_type: + read_tag_unspecified_type (die, cu); + break; case DW_TAG_ptr_to_member_type: read_tag_ptr_to_member_type (die, cu); break; From owner-svn-src-stable@FreeBSD.ORG Mon Oct 21 18:26:23 2013 Return-Path: Delivered-To: svn-src-stable@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) (using TLSv1 with cipher ADH-AES256-SHA (256/256 bits)) (No client certificate requested) by hub.freebsd.org (Postfix) with ESMTP id A662C25D; Mon, 21 Oct 2013 18:26:23 +0000 (UTC) (envelope-from emaste@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:1900:2254:2068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mx1.freebsd.org (Postfix) with ESMTPS id 48EAC2B6B; Mon, 21 Oct 2013 18:26:23 +0000 (UTC) Received: from svn.freebsd.org ([127.0.1.70]) by svn.freebsd.org (8.14.7/8.14.7) with ESMTP id r9LIQNfX068244; Mon, 21 Oct 2013 18:26:23 GMT (envelope-from emaste@svn.freebsd.org) Received: (from emaste@localhost) by svn.freebsd.org (8.14.7/8.14.5/Submit) id r9LIQNWi068243; Mon, 21 Oct 2013 18:26:23 GMT (envelope-from emaste@svn.freebsd.org) Message-Id: <201310211826.r9LIQNWi068243@svn.freebsd.org> From: Ed Maste Date: Mon, 21 Oct 2013 18:26:23 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-stable@freebsd.org, svn-src-stable-9@freebsd.org Subject: svn commit: r256854 - stable/9/contrib/gdb/gdb X-SVN-Group: stable-9 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-stable@freebsd.org X-Mailman-Version: 2.1.14 Precedence: list List-Id: SVN commit messages for all the -stable branches of the src tree List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 21 Oct 2013 18:26:23 -0000 Author: emaste Date: Mon Oct 21 18:26:22 2013 New Revision: 256854 URL: http://svnweb.freebsd.org/changeset/base/256854 Log: MFC r251844: Include die tag in error message Modified: stable/9/contrib/gdb/gdb/dwarf2read.c Directory Properties: stable/9/contrib/gdb/ (props changed) Modified: stable/9/contrib/gdb/gdb/dwarf2read.c ============================================================================== --- stable/9/contrib/gdb/gdb/dwarf2read.c Mon Oct 21 18:25:36 2013 (r256853) +++ stable/9/contrib/gdb/gdb/dwarf2read.c Mon Oct 21 18:26:22 2013 (r256854) @@ -6082,8 +6082,8 @@ tag_type_to_type (struct die_info *die, if (!die->type) { dump_die (die); - error ("Dwarf Error: Cannot find type of die [in module %s]", - cu->objfile->name); + error ("Dwarf Error: Cannot find type of die 0x%x [in module %s]", + die->tag, cu->objfile->name); } return die->type; } From owner-svn-src-stable@FreeBSD.ORG Mon Oct 21 19:11:16 2013 Return-Path: Delivered-To: svn-src-stable@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) (using TLSv1 with cipher ADH-AES256-SHA (256/256 bits)) (No client certificate requested) by hub.freebsd.org (Postfix) with ESMTP id 11C3F49A; Mon, 21 Oct 2013 19:11:16 +0000 (UTC) (envelope-from andreast@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:1900:2254:2068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mx1.freebsd.org (Postfix) with ESMTPS id E364C2E49; Mon, 21 Oct 2013 19:11:15 +0000 (UTC) Received: from svn.freebsd.org ([127.0.1.70]) by svn.freebsd.org (8.14.7/8.14.7) with ESMTP id r9LJBFli093142; Mon, 21 Oct 2013 19:11:15 GMT (envelope-from andreast@svn.freebsd.org) Received: (from andreast@localhost) by svn.freebsd.org (8.14.7/8.14.5/Submit) id r9LJBF1I093130; Mon, 21 Oct 2013 19:11:15 GMT (envelope-from andreast@svn.freebsd.org) Message-Id: <201310211911.r9LJBF1I093130@svn.freebsd.org> From: Andreas Tobler Date: Mon, 21 Oct 2013 19:11:15 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-stable@freebsd.org, svn-src-stable-10@freebsd.org Subject: svn commit: r256857 - stable/10/sys/powerpc/powermac X-SVN-Group: stable-10 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-stable@freebsd.org X-Mailman-Version: 2.1.14 Precedence: list List-Id: SVN commit messages for all the -stable branches of the src tree List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 21 Oct 2013 19:11:16 -0000 Author: andreast Date: Mon Oct 21 19:11:15 2013 New Revision: 256857 URL: http://svnweb.freebsd.org/changeset/base/256857 Log: MFC: 256555 Move the resource allocation from the ata_*_probe section to the ata_*_attach section. This prevents a boot crash on nearly all iMacs and PowerMacs/Books. The allocation in the probe section was working before because ata_probe was returning 0 which did not invoke a second DEVICE_PROBE. Now it returns a BUS_PROBE_DEFAULT which can invoke a second DEVICE_PROBE which results in a "failed to reserve resource" exit. PR: powerpc/182978 Approved by: re(gjb) Modified: stable/10/sys/powerpc/powermac/ata_kauai.c stable/10/sys/powerpc/powermac/ata_macio.c Directory Properties: stable/10/sys/ (props changed) Modified: stable/10/sys/powerpc/powermac/ata_kauai.c ============================================================================== --- stable/10/sys/powerpc/powermac/ata_kauai.c Mon Oct 21 18:47:29 2013 (r256856) +++ stable/10/sys/powerpc/powermac/ata_kauai.c Mon Oct 21 19:11:15 2013 (r256857) @@ -194,12 +194,11 @@ static const u_int udma_timing_shasta[] static int ata_kauai_probe(device_t dev) { - struct ata_channel *ch; struct ata_kauai_softc *sc; u_int32_t devid; phandle_t node; const char *compatstring = NULL; - int i, found, rid; + int i, found; found = 0; devid = pci_get_devid(dev); @@ -216,7 +215,6 @@ ata_kauai_probe(device_t dev) node = ofw_bus_get_node(dev); sc = device_get_softc(dev); bzero(sc, sizeof(struct ata_kauai_softc)); - ch = &sc->sc_ch.sc_ch; compatstring = ofw_bus_get_compat(dev); if (compatstring != NULL && strcmp(compatstring,"shasta-ata") == 0) @@ -227,32 +225,6 @@ ata_kauai_probe(device_t dev) (compatstring == NULL || strcmp(compatstring, "K2-UATA") != 0)) bus_set_resource(dev, SYS_RES_IRQ, 0, 39, 1); - rid = PCIR_BARS; - sc->sc_memr = bus_alloc_resource_any(dev, SYS_RES_MEMORY, &rid, - RF_ACTIVE); - if (sc->sc_memr == NULL) { - device_printf(dev, "could not allocate memory\n"); - return (ENXIO); - } - - /* - * Set up the resource vectors - */ - for (i = ATA_DATA; i <= ATA_COMMAND; i++) { - ch->r_io[i].res = sc->sc_memr; - ch->r_io[i].offset = i*ATA_KAUAI_REGGAP + ATA_KAUAI_REGOFFSET; - } - ch->r_io[ATA_CONTROL].res = sc->sc_memr; - ch->r_io[ATA_CONTROL].offset = ATA_KAUAI_ALTOFFSET; - ata_default_registers(dev); - - ch->unit = 0; - ch->flags |= ATA_USE_16BIT; - - /* XXX: ATAPI DMA is unreliable. We should find out why. */ - ch->flags |= ATA_NO_ATAPI_DMA; - ata_generic_hw(dev); - return (ata_probe(dev)); } @@ -272,12 +244,42 @@ static int ata_kauai_attach(device_t dev) { struct ata_kauai_softc *sc = device_get_softc(dev); + struct ata_channel *ch; + int i, rid; #if USE_DBDMA_IRQ int dbdma_irq_rid = 1; struct resource *dbdma_irq; void *cookie; #endif + ch = &sc->sc_ch.sc_ch; + + rid = PCIR_BARS; + sc->sc_memr = bus_alloc_resource_any(dev, SYS_RES_MEMORY, &rid, + RF_ACTIVE); + if (sc->sc_memr == NULL) { + device_printf(dev, "could not allocate memory\n"); + return (ENXIO); + } + + /* + * Set up the resource vectors + */ + for (i = ATA_DATA; i <= ATA_COMMAND; i++) { + ch->r_io[i].res = sc->sc_memr; + ch->r_io[i].offset = i*ATA_KAUAI_REGGAP + ATA_KAUAI_REGOFFSET; + } + ch->r_io[ATA_CONTROL].res = sc->sc_memr; + ch->r_io[ATA_CONTROL].offset = ATA_KAUAI_ALTOFFSET; + ata_default_registers(dev); + + ch->unit = 0; + ch->flags |= ATA_USE_16BIT; + + /* XXX: ATAPI DMA is unreliable. We should find out why. */ + ch->flags |= ATA_NO_ATAPI_DMA; + ata_generic_hw(dev); + pci_enable_busmaster(dev); /* Init DMA engine */ Modified: stable/10/sys/powerpc/powermac/ata_macio.c ============================================================================== --- stable/10/sys/powerpc/powermac/ata_macio.c Mon Oct 21 18:47:29 2013 (r256856) +++ stable/10/sys/powerpc/powermac/ata_macio.c Mon Oct 21 19:11:15 2013 (r256857) @@ -152,8 +152,6 @@ ata_macio_probe(device_t dev) const char *type = ofw_bus_get_type(dev); const char *name = ofw_bus_get_name(dev); struct ata_macio_softc *sc; - struct ata_channel *ch; - int rid, i; if (strcmp(type, "ata") != 0 && strcmp(type, "ide") != 0) @@ -161,7 +159,6 @@ ata_macio_probe(device_t dev) sc = device_get_softc(dev); bzero(sc, sizeof(struct ata_macio_softc)); - ch = &sc->sc_ch.sc_ch; if (strcmp(name,"ata-4") == 0) { device_set_desc(dev,"Apple MacIO Ultra ATA Controller"); @@ -173,7 +170,23 @@ ata_macio_probe(device_t dev) sc->max_mode = ATA_WDMA2; } + return (ata_probe(dev)); +} + +static int +ata_macio_attach(device_t dev) +{ + struct ata_macio_softc *sc = device_get_softc(dev); + uint32_t timingreg; + struct ata_channel *ch; + int rid, i; + + /* + * Allocate resources + */ + rid = 0; + ch = &sc->sc_ch.sc_ch; sc->sc_mem = bus_alloc_resource_any(dev, SYS_RES_MEMORY, &rid, RF_ACTIVE); if (sc->sc_mem == NULL) { @@ -196,15 +209,6 @@ ata_macio_probe(device_t dev) ch->flags |= ATA_USE_16BIT | ATA_NO_ATAPI_DMA; ata_generic_hw(dev); - return (ata_probe(dev)); -} - -static int -ata_macio_attach(device_t dev) -{ - struct ata_macio_softc *sc = device_get_softc(dev); - uint32_t timingreg; - #if USE_DBDMA_IRQ int dbdma_irq_rid = 1; struct resource *dbdma_irq; From owner-svn-src-stable@FreeBSD.ORG Tue Oct 22 00:58:54 2013 Return-Path: Delivered-To: svn-src-stable@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [8.8.178.115]) (using TLSv1 with cipher ADH-AES256-SHA (256/256 bits)) (No client certificate requested) by hub.freebsd.org (Postfix) with ESMTP id 1E645D0D; Tue, 22 Oct 2013 00:58:54 +0000 (UTC) (envelope-from neel@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:1900:2254:2068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mx1.freebsd.org (Postfix) with ESMTPS id 085042307; Tue, 22 Oct 2013 00:58:54 +0000 (UTC) Received: from svn.freebsd.org ([127.0.1.70]) by svn.freebsd.org (8.14.7/8.14.7) with ESMTP id r9M0wrMD080693; Tue, 22 Oct 2013 00:58:53 GMT (envelope-from neel@svn.freebsd.org) Received: (from neel@localhost) by svn.freebsd.org (8.14.7/8.14.5/Submit) id r9M0wppf080682; Tue, 22 Oct 2013 00:58:51 GMT (envelope-from neel@svn.freebsd.org) Message-Id: <201310220058.r9M0wppf080682@svn.freebsd.org> From: Neel Natu Date: Tue, 22 Oct 2013 00:58:51 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-stable@freebsd.org, svn-src-stable-10@freebsd.org Subject: svn commit: r256869 - in stable/10: lib/libvmmapi sys/amd64/amd64 sys/amd64/include sys/amd64/vmm sys/amd64/vmm/intel usr.sbin/bhyve usr.sbin/bhyvectl X-SVN-Group: stable-10 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-stable@freebsd.org X-Mailman-Version: 2.1.14 Precedence: list List-Id: SVN commit messages for all the -stable branches of the src tree List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 22 Oct 2013 00:58:54 -0000 Author: neel Date: Tue Oct 22 00:58:51 2013 New Revision: 256869 URL: http://svnweb.freebsd.org/changeset/base/256869 Log: MFC r256645. Add a new capability, VM_CAP_ENABLE_INVPCID, that can be enabled to expose 'invpcid' instruction to the guest. Currently bhyve will try to enable this capability unconditionally if it is available. Consolidate code in bhyve to set the capabilities so it is no longer duplicated in BSP and AP bringup. Add a sysctl 'vm.pmap.invpcid_works' to display whether the 'invpcid' instruction is available. Approved by: re (hrs) Modified: stable/10/lib/libvmmapi/vmmapi.c stable/10/sys/amd64/amd64/pmap.c stable/10/sys/amd64/include/vmm.h (contents, props changed) stable/10/sys/amd64/vmm/intel/vmx.c stable/10/sys/amd64/vmm/intel/vmx.h stable/10/sys/amd64/vmm/intel/vmx_controls.h stable/10/sys/amd64/vmm/x86.c stable/10/usr.sbin/bhyve/bhyverun.c stable/10/usr.sbin/bhyve/bhyverun.h stable/10/usr.sbin/bhyve/spinup_ap.c stable/10/usr.sbin/bhyvectl/bhyvectl.c Directory Properties: stable/10/lib/libvmmapi/ (props changed) stable/10/sys/ (props changed) stable/10/sys/amd64/vmm/ (props changed) stable/10/usr.sbin/bhyve/ (props changed) stable/10/usr.sbin/bhyvectl/ (props changed) Modified: stable/10/lib/libvmmapi/vmmapi.c ============================================================================== --- stable/10/lib/libvmmapi/vmmapi.c Tue Oct 22 00:50:53 2013 (r256868) +++ stable/10/lib/libvmmapi/vmmapi.c Tue Oct 22 00:58:51 2013 (r256869) @@ -415,6 +415,7 @@ static struct { { "mtrap_exit", VM_CAP_MTRAP_EXIT }, { "pause_exit", VM_CAP_PAUSE_EXIT }, { "unrestricted_guest", VM_CAP_UNRESTRICTED_GUEST }, + { "enable_invpcid", VM_CAP_ENABLE_INVPCID }, { 0 } }; Modified: stable/10/sys/amd64/amd64/pmap.c ============================================================================== --- stable/10/sys/amd64/amd64/pmap.c Tue Oct 22 00:50:53 2013 (r256868) +++ stable/10/sys/amd64/amd64/pmap.c Tue Oct 22 00:58:51 2013 (r256869) @@ -371,6 +371,8 @@ int pmap_pcid_enabled = 1; SYSCTL_INT(_vm_pmap, OID_AUTO, pcid_enabled, CTLFLAG_RDTUN, &pmap_pcid_enabled, 0, "Is TLB Context ID enabled ?"); int invpcid_works = 0; +SYSCTL_INT(_vm_pmap, OID_AUTO, invpcid_works, CTLFLAG_RD, &invpcid_works, 0, + "Is the invpcid instruction available ?"); static int pmap_pcid_save_cnt_proc(SYSCTL_HANDLER_ARGS) Modified: stable/10/sys/amd64/include/vmm.h ============================================================================== --- stable/10/sys/amd64/include/vmm.h Tue Oct 22 00:50:53 2013 (r256868) +++ stable/10/sys/amd64/include/vmm.h Tue Oct 22 00:58:51 2013 (r256869) @@ -223,6 +223,7 @@ enum vm_cap_type { VM_CAP_MTRAP_EXIT, VM_CAP_PAUSE_EXIT, VM_CAP_UNRESTRICTED_GUEST, + VM_CAP_ENABLE_INVPCID, VM_CAP_MAX }; Modified: stable/10/sys/amd64/vmm/intel/vmx.c ============================================================================== --- stable/10/sys/amd64/vmm/intel/vmx.c Tue Oct 22 00:50:53 2013 (r256868) +++ stable/10/sys/amd64/vmm/intel/vmx.c Tue Oct 22 00:58:51 2013 (r256869) @@ -164,6 +164,7 @@ static int cap_halt_exit; static int cap_pause_exit; static int cap_unrestricted_guest; static int cap_monitor_trap; +static int cap_invpcid; static struct unrhdr *vpid_unr; static u_int vpid_alloc_failed; @@ -660,6 +661,11 @@ vmx_init(void) PROCBASED2_UNRESTRICTED_GUEST, 0, &tmp) == 0); + cap_invpcid = (vmx_set_ctlreg(MSR_VMX_PROCBASED_CTLS2, + MSR_VMX_PROCBASED_CTLS2, PROCBASED2_ENABLE_INVPCID, 0, + &tmp) == 0); + + /* Initialize EPT */ error = ept_init(); if (error) { @@ -828,6 +834,7 @@ vmx_vminit(struct vm *vm, pmap_t pmap) vmx->cap[i].set = 0; vmx->cap[i].proc_ctls = procbased_ctls; + vmx->cap[i].proc_ctls2 = procbased_ctls2; vmx->state[i].lastcpu = -1; vmx->state[i].vpid = vpid[i]; @@ -1932,6 +1939,10 @@ vmx_getcap(void *arg, int vcpu, int type if (cap_unrestricted_guest) ret = 0; break; + case VM_CAP_ENABLE_INVPCID: + if (cap_invpcid) + ret = 0; + break; default: break; } @@ -1988,11 +1999,21 @@ vmx_setcap(void *arg, int vcpu, int type case VM_CAP_UNRESTRICTED_GUEST: if (cap_unrestricted_guest) { retval = 0; - baseval = procbased_ctls2; + pptr = &vmx->cap[vcpu].proc_ctls2; + baseval = *pptr; flag = PROCBASED2_UNRESTRICTED_GUEST; reg = VMCS_SEC_PROC_BASED_CTLS; } break; + case VM_CAP_ENABLE_INVPCID: + if (cap_invpcid) { + retval = 0; + pptr = &vmx->cap[vcpu].proc_ctls2; + baseval = *pptr; + flag = PROCBASED2_ENABLE_INVPCID; + reg = VMCS_SEC_PROC_BASED_CTLS; + } + break; default: break; } Modified: stable/10/sys/amd64/vmm/intel/vmx.h ============================================================================== --- stable/10/sys/amd64/vmm/intel/vmx.h Tue Oct 22 00:50:53 2013 (r256868) +++ stable/10/sys/amd64/vmm/intel/vmx.h Tue Oct 22 00:58:51 2013 (r256869) @@ -84,6 +84,7 @@ struct vmxctx { struct vmxcap { int set; uint32_t proc_ctls; + uint32_t proc_ctls2; }; struct vmxstate { Modified: stable/10/sys/amd64/vmm/intel/vmx_controls.h ============================================================================== --- stable/10/sys/amd64/vmm/intel/vmx_controls.h Tue Oct 22 00:50:53 2013 (r256868) +++ stable/10/sys/amd64/vmm/intel/vmx_controls.h Tue Oct 22 00:58:51 2013 (r256869) @@ -68,6 +68,7 @@ #define PROCBASED2_WBINVD_EXITING (1 << 6) #define PROCBASED2_UNRESTRICTED_GUEST (1 << 7) #define PROCBASED2_PAUSE_LOOP_EXITING (1 << 10) +#define PROCBASED2_ENABLE_INVPCID (1 << 12) /* VM Exit Controls */ #define VM_EXIT_SAVE_DEBUG_CONTROLS (1 << 2) Modified: stable/10/sys/amd64/vmm/x86.c ============================================================================== --- stable/10/sys/amd64/vmm/x86.c Tue Oct 22 00:50:53 2013 (r256868) +++ stable/10/sys/amd64/vmm/x86.c Tue Oct 22 00:58:51 2013 (r256869) @@ -53,7 +53,7 @@ int x86_emulate_cpuid(struct vm *vm, int vcpu_id, uint32_t *eax, uint32_t *ebx, uint32_t *ecx, uint32_t *edx) { - int error; + int error, enable_invpcid; unsigned int func, regs[4]; enum x2apic_state x2apic_state; @@ -202,8 +202,22 @@ x86_emulate_cpuid(struct vm *vm, int vcp regs[0] |= 0x04008000; break; - case CPUID_0000_0006: case CPUID_0000_0007: + regs[0] = 0; + regs[1] = 0; + regs[2] = 0; + regs[3] = 0; + + /* leaf 0 */ + if (*ecx == 0) { + error = vm_get_capability(vm, vcpu_id, + VM_CAP_ENABLE_INVPCID, &enable_invpcid); + if (error == 0 && enable_invpcid) + regs[1] |= CPUID_STDEXT_INVPCID; + } + break; + + case CPUID_0000_0006: case CPUID_0000_000A: case CPUID_0000_000D: /* Modified: stable/10/usr.sbin/bhyve/bhyverun.c ============================================================================== --- stable/10/usr.sbin/bhyve/bhyverun.c Tue Oct 22 00:50:53 2013 (r256868) +++ stable/10/usr.sbin/bhyve/bhyverun.c Tue Oct 22 00:58:51 2013 (r256869) @@ -493,10 +493,54 @@ num_vcpus_allowed(struct vmctx *ctx) return (1); } +void +fbsdrun_set_capabilities(struct vmctx *ctx, int cpu) +{ + int err, tmp; + + if (fbsdrun_vmexit_on_hlt()) { + err = vm_get_capability(ctx, cpu, VM_CAP_HALT_EXIT, &tmp); + if (err < 0) { + fprintf(stderr, "VM exit on HLT not supported\n"); + exit(1); + } + vm_set_capability(ctx, cpu, VM_CAP_HALT_EXIT, 1); + if (cpu == BSP) + handler[VM_EXITCODE_HLT] = vmexit_hlt; + } + + if (fbsdrun_vmexit_on_pause()) { + /* + * pause exit support required for this mode + */ + err = vm_get_capability(ctx, cpu, VM_CAP_PAUSE_EXIT, &tmp); + if (err < 0) { + fprintf(stderr, + "SMP mux requested, no pause support\n"); + exit(1); + } + vm_set_capability(ctx, cpu, VM_CAP_PAUSE_EXIT, 1); + if (cpu == BSP) + handler[VM_EXITCODE_PAUSE] = vmexit_pause; + } + + if (fbsdrun_disable_x2apic()) + err = vm_set_x2apic_state(ctx, cpu, X2APIC_DISABLED); + else + err = vm_set_x2apic_state(ctx, cpu, X2APIC_ENABLED); + + if (err) { + fprintf(stderr, "Unable to set x2apic state (%d)\n", err); + exit(1); + } + + vm_set_capability(ctx, cpu, VM_CAP_ENABLE_INVPCID, 1); +} + int main(int argc, char *argv[]) { - int c, error, gdb_port, tmp, err, ioapic, bvmcons; + int c, error, gdb_port, err, ioapic, bvmcons; int max_vcpus; struct vmctx *ctx; uint64_t rip; @@ -586,39 +630,7 @@ main(int argc, char *argv[]) exit(1); } - if (fbsdrun_vmexit_on_hlt()) { - err = vm_get_capability(ctx, BSP, VM_CAP_HALT_EXIT, &tmp); - if (err < 0) { - fprintf(stderr, "VM exit on HLT not supported\n"); - exit(1); - } - vm_set_capability(ctx, BSP, VM_CAP_HALT_EXIT, 1); - handler[VM_EXITCODE_HLT] = vmexit_hlt; - } - - if (fbsdrun_vmexit_on_pause()) { - /* - * pause exit support required for this mode - */ - err = vm_get_capability(ctx, BSP, VM_CAP_PAUSE_EXIT, &tmp); - if (err < 0) { - fprintf(stderr, - "SMP mux requested, no pause support\n"); - exit(1); - } - vm_set_capability(ctx, BSP, VM_CAP_PAUSE_EXIT, 1); - handler[VM_EXITCODE_PAUSE] = vmexit_pause; - } - - if (fbsdrun_disable_x2apic()) - err = vm_set_x2apic_state(ctx, BSP, X2APIC_DISABLED); - else - err = vm_set_x2apic_state(ctx, BSP, X2APIC_ENABLED); - - if (err) { - fprintf(stderr, "Unable to set x2apic state (%d)\n", err); - exit(1); - } + fbsdrun_set_capabilities(ctx, BSP); err = vm_setup_memory(ctx, memsize, VM_MMAP_ALL); if (err) { Modified: stable/10/usr.sbin/bhyve/bhyverun.h ============================================================================== --- stable/10/usr.sbin/bhyve/bhyverun.h Tue Oct 22 00:50:53 2013 (r256868) +++ stable/10/usr.sbin/bhyve/bhyverun.h Tue Oct 22 00:58:51 2013 (r256869) @@ -41,6 +41,7 @@ extern char *vmname; void *paddr_guest2host(struct vmctx *ctx, uintptr_t addr, size_t len); +void fbsdrun_set_capabilities(struct vmctx *ctx, int cpu); void fbsdrun_addcpu(struct vmctx *ctx, int cpu, uint64_t rip); int fbsdrun_muxed(void); int fbsdrun_vmexit_on_hlt(void); Modified: stable/10/usr.sbin/bhyve/spinup_ap.c ============================================================================== --- stable/10/usr.sbin/bhyve/spinup_ap.c Tue Oct 22 00:50:53 2013 (r256868) +++ stable/10/usr.sbin/bhyve/spinup_ap.c Tue Oct 22 00:58:51 2013 (r256869) @@ -85,22 +85,7 @@ spinup_ap(struct vmctx *ctx, int vcpu, i error = vcpu_reset(ctx, newcpu); assert(error == 0); - /* Set up capabilities */ - if (fbsdrun_vmexit_on_hlt()) { - error = vm_set_capability(ctx, newcpu, VM_CAP_HALT_EXIT, 1); - assert(error == 0); - } - - if (fbsdrun_vmexit_on_pause()) { - error = vm_set_capability(ctx, newcpu, VM_CAP_PAUSE_EXIT, 1); - assert(error == 0); - } - - if (fbsdrun_disable_x2apic()) - error = vm_set_x2apic_state(ctx, newcpu, X2APIC_DISABLED); - else - error = vm_set_x2apic_state(ctx, newcpu, X2APIC_ENABLED); - assert(error == 0); + fbsdrun_set_capabilities(ctx, newcpu); /* * Enable the 'unrestricted guest' mode for 'newcpu'. Modified: stable/10/usr.sbin/bhyvectl/bhyvectl.c ============================================================================== --- stable/10/usr.sbin/bhyvectl/bhyvectl.c Tue Oct 22 00:50:53 2013 (r256868) +++ stable/10/usr.sbin/bhyvectl/bhyvectl.c Tue Oct 22 00:58:51 2013 (r256869) @@ -1495,6 +1495,7 @@ main(int argc, char *argv[]) vm_capability_type2name(captype), val ? "set" : "not set", vcpu); } else if (errno == ENOENT) { + error = 0; printf("Capability \"%s\" is not available\n", vm_capability_type2name(captype)); } else { From owner-svn-src-stable@FreeBSD.ORG Tue Oct 22 06:02:41 2013 Return-Path: Delivered-To: svn-src-stable@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) (using TLSv1 with cipher ADH-AES256-SHA (256/256 bits)) (No client certificate requested) by hub.freebsd.org (Postfix) with ESMTP id 4C797464; Tue, 22 Oct 2013 06:02:41 +0000 (UTC) (envelope-from hrs@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:1900:2254:2068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mx1.freebsd.org (Postfix) with ESMTPS id 293242063; Tue, 22 Oct 2013 06:02:41 +0000 (UTC) Received: from svn.freebsd.org ([127.0.1.70]) by svn.freebsd.org (8.14.7/8.14.7) with ESMTP id r9M62f2n056351; Tue, 22 Oct 2013 06:02:41 GMT (envelope-from hrs@svn.freebsd.org) Received: (from hrs@localhost) by svn.freebsd.org (8.14.7/8.14.5/Submit) id r9M62fcj056350; Tue, 22 Oct 2013 06:02:41 GMT (envelope-from hrs@svn.freebsd.org) Message-Id: <201310220602.r9M62fcj056350@svn.freebsd.org> From: Hiroki Sato Date: Tue, 22 Oct 2013 06:02:41 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-stable@freebsd.org, svn-src-stable-10@freebsd.org Subject: svn commit: r256874 - stable/10/etc/rc.d X-SVN-Group: stable-10 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-stable@freebsd.org X-Mailman-Version: 2.1.14 Precedence: list List-Id: SVN commit messages for all the -stable branches of the src tree List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 22 Oct 2013 06:02:41 -0000 Author: hrs Date: Tue Oct 22 06:02:40 2013 New Revision: 256874 URL: http://svnweb.freebsd.org/changeset/base/256874 Log: MFC 256716,256835: - Fix jail_parallel_start="YES". - Fix ip[46].addr when interface parameter is not defined. - Fix a bug which prevented jails from starting when $jail_conf was used and no jail name was specified. - Display error messages when start/stop fails. Approved by: re (glebius) Modified: stable/10/etc/rc.d/jail Directory Properties: stable/10/etc/rc.d/ (props changed) Modified: stable/10/etc/rc.d/jail ============================================================================== --- stable/10/etc/rc.d/jail Tue Oct 22 05:22:46 2013 (r256873) +++ stable/10/etc/rc.d/jail Tue Oct 22 06:02:40 2013 (r256874) @@ -132,7 +132,9 @@ parse_options() # _confwarn=1 if [ -r "$jail_conf" -o -r "$_jconf" ]; then - warn "$_conf is created and used for jail $_j." + if ! checkyesno jail_parallel_start; then + warn "$_conf is created and used for jail $_j." + fi fi /usr/bin/install -m 0644 -o root -g wheel /dev/null $_conf || return 1 @@ -367,10 +369,10 @@ jail_handle_ips_option() # Append address to list of addresses for the jail command. case $_type in inet) - echo " ip4.addr += \"${_iface}|${_addr}${_mask}\";" + echo " ip4.addr += \"${_iface:+${_iface}|}${_addr}${_mask}\";" ;; inet6) - echo " ip6.addr += \"${_iface}|${_addr}${_mask}\";" + echo " ip6.addr += \"${_iface:+${_iface}|}${_addr}${_mask}\";" need_dad_wait=1 ;; esac @@ -418,7 +420,7 @@ jail_status() jail_start() { - local _j _jid _jn + local _j _jid _jn _jl if [ $# = 0 ]; then return @@ -426,47 +428,82 @@ jail_start() echo -n 'Starting jails:' case $1 in _ALL) - echo -n ' ' command=$jail_program rc_flags=$jail_flags command_args="-f $jail_conf -c" - $jail_jls -nq | while read IN; do - _jn=$(echo $IN | tr " " "\n" | grep name=) - _jid=$(echo $IN | tr " " "\n" | grep jid=) - if $command $rc_flags $command_args ${_jn#name=}; then + _tmp=`mktemp -t jail` || exit 3 + if $command $rc_flags $command_args >> $_tmp 2>&1; then + $jail_jls -nq | while read IN; do + _jn=$(echo $IN | tr " " "\n" | grep ^name=) + _jid=$(echo $IN | tr " " "\n" | grep ^jid=) echo -n " ${_jn#name=}" echo "${_jid#jid=}" \ > /var/run/jail_${_jn#name=}.id - fi - done + done + else + tail -1 $_tmp + fi + rm -f $_tmp echo '.' return ;; esac - _tmp=`mktemp -t jail` || exit 3 - for _j in $@; do - _j=$(echo $_j | tr /. _) - parse_options $_j || continue - - eval rc_flags=\${jail_${_j}_flags:-$jail_flags} - eval command=\${jail_${_j}_program:-$jail_program} - if checkyesno jail_parallel_start; then - command_args="-i -f $_conf -c $_j &" - else + if checkyesno jail_parallel_start; then + # + # Start jails in parallel and then check jail id when + # jail_parallel_start is YES. + # + _jl= + for _j in $@; do + _j=$(echo $_j | tr /. _) + parse_options $_j || continue + + _jl="$_jl $_j" + eval rc_flags=\${jail_${_j}_flags:-$jail_flags} + eval command=\${jail_${_j}_program:-$jail_program} command_args="-i -f $_conf -c $_j" - fi - if $command $rc_flags $command_args \ - >> $_tmp 2>&1 /dev/null 2>&1 /var/run/jail_${_j}.id - else - rm -f /var/run/jail_${_j}.id - echo " cannot start jail \"${_hostname:-${_j}}\": " - cat $_tmp - fi - rm -f $_tmp - done + if _jid=$($jail_jls -n -j $_j | tr " " "\n" | \ + grep ^jid=); then + echo "${_jid#jid=}" > /var/run/jail_${_j}.id + else + rm -f /var/run/jail_${_j}.id + echo " cannot start jail " \ + "\"${_hostname:-${_j}}\": " + fi + done + else + # + # Start jails one-by-one when jail_parallel_start is NO. + # + for _j in $@; do + _j=$(echo $_j | tr /. _) + parse_options $_j || continue + + eval rc_flags=\${jail_${_j}_flags:-$jail_flags} + eval command=\${jail_${_j}_program:-$jail_program} + command_args="-i -f $_conf -c $_j" + _tmp=`mktemp -t jail` || exit 3 + if $command $rc_flags $command_args \ + >> $_tmp 2>&1 /var/run/jail_${_j}.id + else + rm -f /var/run/jail_${_j}.id + echo " cannot start jail " \ + "\"${_hostname:-${_j}}\": " + cat $_tmp + fi + rm -f $_tmp + done + fi echo '.' } @@ -480,17 +517,21 @@ jail_stop() echo -n 'Stopping jails:' case $1 in _ALL) - echo -n ' ' command=$jail_program rc_flags=$jail_flags command_args="-f $jail_conf -r" $jail_jls -nq | while read IN; do - _jn=$(echo $IN | tr " " "\n" | grep name=) + _jn=$(echo $IN | tr " " "\n" | grep ^name=) echo -n " ${_jn#name=}" - $command $rc_flags $command_args ${_jn#name=} - if ! $jail_jls -j ${_jn#name=} > /dev/null 2>&1; then + _tmp=`mktemp -t jail` || exit 3 + $command $rc_flags $command_args ${_jn#name=} \ + >> $_tmp 2>&1 + if $jail_jls -j ${_jn#name=} > /dev/null 2>&1; then + tail -1 $_tmp + else rm -f /var/run/jail_${_jn#name=}.id fi + rm -f $_tmp done echo '.' return @@ -504,10 +545,14 @@ jail_stop() fi eval command=\${jail_${_j}_program:-$jail_program} echo -n " ${_hostname:-${_j}}" - $command -q -f $_conf -r $_j - if ! $jail_jls -j $_j > /dev/null 2>&1; then + _tmp=`mktemp -t jail` || exit 3 + $command -q -f $_conf -r $_j >> $_tmp 2>&1 + if $jail_jls -j $_j > /dev/null 2>&1; then + tail -1 $_tmp + else rm -f /var/run/jail_${_j}.id fi + rm -f $_tmp done echo '.' } From owner-svn-src-stable@FreeBSD.ORG Tue Oct 22 09:58:32 2013 Return-Path: Delivered-To: svn-src-stable@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [8.8.178.115]) (using TLSv1 with cipher ADH-AES256-SHA (256/256 bits)) (No client certificate requested) by hub.freebsd.org (Postfix) with ESMTP id 1B6D8A5C; Tue, 22 Oct 2013 09:58:32 +0000 (UTC) (envelope-from glebius@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:1900:2254:2068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mx1.freebsd.org (Postfix) with ESMTPS id ED31A2CCD; Tue, 22 Oct 2013 09:58:31 +0000 (UTC) Received: from svn.freebsd.org ([127.0.1.70]) by svn.freebsd.org (8.14.7/8.14.7) with ESMTP id r9M9wVJo082403; Tue, 22 Oct 2013 09:58:31 GMT (envelope-from glebius@svn.freebsd.org) Received: (from glebius@localhost) by svn.freebsd.org (8.14.7/8.14.5/Submit) id r9M9wVqx082402; Tue, 22 Oct 2013 09:58:31 GMT (envelope-from glebius@svn.freebsd.org) Message-Id: <201310220958.r9M9wVqx082402@svn.freebsd.org> From: Gleb Smirnoff Date: Tue, 22 Oct 2013 09:58:31 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-stable@freebsd.org, svn-src-stable-9@freebsd.org Subject: svn commit: r256882 - stable/9/sys/contrib/pf/net X-SVN-Group: stable-9 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-stable@freebsd.org X-Mailman-Version: 2.1.14 Precedence: list List-Id: SVN commit messages for all the -stable branches of the src tree List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 22 Oct 2013 09:58:32 -0000 Author: glebius Date: Tue Oct 22 09:58:31 2013 New Revision: 256882 URL: http://svnweb.freebsd.org/changeset/base/256882 Log: Merge r255143 from head: Merge 1.12 of pf_lb.c from OpenBSD, with some changes. Original commit: date: 2010/02/04 14:10:12; author: sthen; state: Exp; lines: +24 -19; pf_get_sport() picks a random port from the port range specified in a nat rule. It should check to see if it's in-use (i.e. matches an existing PF state), if it is, it cycles sequentially through other ports until it finds a free one. However the check was being done with the state keys the wrong way round so it was never actually finding the state to be in-use. - switch the keys to correct this, avoiding random state collisions with nat. Fixes PR 6300 and problems reported by robert@ and viq. - check pf_get_sport() return code in pf_test(); if port allocation fails the packet should be dropped rather than sent out untranslated. Help/ok claudio@. Some additional changes to 1.12: - We also need to bzero() the key to zero padding, otherwise key won't match. - Collapse two if blocks into one with ||, since both conditions lead to the same processing. - Only naddr changes in the cycle, so move initialization of other fields above the cycle. - s/u_intXX_t/uintXX_t/g PR: kern/181690 Submitted by: Olivier Cochard-Labbé Sponsored by: Nginx, Inc. Modified: stable/9/sys/contrib/pf/net/pf_lb.c Directory Properties: stable/9/sys/ (props changed) stable/9/sys/contrib/pf/ (props changed) Modified: stable/9/sys/contrib/pf/net/pf_lb.c ============================================================================== --- stable/9/sys/contrib/pf/net/pf_lb.c Tue Oct 22 09:43:14 2013 (r256881) +++ stable/9/sys/contrib/pf/net/pf_lb.c Tue Oct 22 09:58:31 2013 (r256882) @@ -165,8 +165,8 @@ struct pf_rule *pf_match_translation(st struct pf_addr *, u_int16_t, struct pf_addr *, u_int16_t, int); int pf_get_sport(sa_family_t, u_int8_t, struct pf_rule *, - struct pf_addr *, struct pf_addr *, u_int16_t, - struct pf_addr *, u_int16_t*, u_int16_t, u_int16_t, + struct pf_addr *, uint16_t, struct pf_addr *, uint16_t, + struct pf_addr *, uint16_t*, uint16_t, uint16_t, struct pf_src_node **); #define mix(a,b,c) \ @@ -318,13 +318,13 @@ pf_match_translation(struct pf_pdesc *pd int pf_get_sport(sa_family_t af, u_int8_t proto, struct pf_rule *r, - struct pf_addr *saddr, struct pf_addr *daddr, u_int16_t dport, - struct pf_addr *naddr, u_int16_t *nport, u_int16_t low, u_int16_t high, - struct pf_src_node **sn) + struct pf_addr *saddr, uint16_t sport, struct pf_addr *daddr, + uint16_t dport, struct pf_addr *naddr, uint16_t *nport, uint16_t low, + uint16_t high, struct pf_src_node **sn) { struct pf_state_key_cmp key; struct pf_addr init_addr; - u_int16_t cut; + uint16_t cut; bzero(&init_addr, sizeof(init_addr)); if (pf_map_addr(af, r, saddr, naddr, &init_addr, sn)) @@ -335,34 +335,38 @@ pf_get_sport(sa_family_t af, u_int8_t pr high = 65535; } + bzero(&key,sizeof(key)); + key.af = af; + key.proto = proto; + key.port[0] = dport; + PF_ACPY(&key.addr[0], daddr, key.af); + do { - key.af = af; - key.proto = proto; - PF_ACPY(&key.addr[1], daddr, key.af); - PF_ACPY(&key.addr[0], naddr, key.af); - key.port[1] = dport; + PF_ACPY(&key.addr[1], naddr, key.af); /* * port search; start random, step; * similar 2 portloop in in_pcbbind */ if (!(proto == IPPROTO_TCP || proto == IPPROTO_UDP || - proto == IPPROTO_ICMP)) { - key.port[0] = dport; - if (pf_find_state_all(&key, PF_IN, NULL) == NULL) - return (0); - } else if (low == 0 && high == 0) { - key.port[0] = *nport; - if (pf_find_state_all(&key, PF_IN, NULL) == NULL) + proto == IPPROTO_ICMP) || (low == 0 && high == 0)) { + /* + * XXX bug: icmp state don't use the id on both sides. + * (traceroute -l through nat) + */ + key.port[1] = sport; + if (pf_find_state_all(&key, PF_IN, NULL) == NULL) { + *nport = sport; return (0); + } } else if (low == high) { - key.port[0] = htons(low); + key.port[1] = htons(low); if (pf_find_state_all(&key, PF_IN, NULL) == NULL) { *nport = htons(low); return (0); } } else { - u_int16_t tmp; + uint16_t tmp; if (low > high) { tmp = low; @@ -377,7 +381,7 @@ pf_get_sport(sa_family_t af, u_int8_t pr #endif /* low <= cut <= high */ for (tmp = cut; tmp <= high; ++(tmp)) { - key.port[0] = htons(tmp); + key.port[1] = htons(tmp); if (pf_find_state_all(&key, PF_IN, NULL) == #ifdef __FreeBSD__ NULL) { @@ -389,7 +393,7 @@ pf_get_sport(sa_family_t af, u_int8_t pr } } for (tmp = cut - 1; tmp >= low; --(tmp)) { - key.port[0] = htons(tmp); + key.port[1] = htons(tmp); if (pf_find_state_all(&key, PF_IN, NULL) == #ifdef __FreeBSD__ NULL) { @@ -655,8 +659,8 @@ pf_get_translation(struct pf_pdesc *pd, case PF_NORDR: return (NULL); case PF_NAT: - if (pf_get_sport(pd->af, pd->proto, r, saddr, - daddr, dport, naddr, nport, r->rpool.proxy_port[0], + if (pf_get_sport(pd->af, pd->proto, r, saddr, sport, daddr, + dport, naddr, nport, r->rpool.proxy_port[0], r->rpool.proxy_port[1], sn)) { DPFPRINTF(PF_DEBUG_MISC, ("pf: NAT proxy port allocation " From owner-svn-src-stable@FreeBSD.ORG Tue Oct 22 16:09:45 2013 Return-Path: Delivered-To: svn-src-stable@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [8.8.178.115]) (using TLSv1 with cipher ADH-AES256-SHA (256/256 bits)) (No client certificate requested) by hub.freebsd.org (Postfix) with ESMTP id A57C0F25; Tue, 22 Oct 2013 16:09:45 +0000 (UTC) (envelope-from cperciva@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:1900:2254:2068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mx1.freebsd.org (Postfix) with ESMTPS id 91AA62500; Tue, 22 Oct 2013 16:09:45 +0000 (UTC) Received: from svn.freebsd.org ([127.0.1.70]) by svn.freebsd.org (8.14.7/8.14.7) with ESMTP id r9MG9j9p096204; Tue, 22 Oct 2013 16:09:45 GMT (envelope-from cperciva@svn.freebsd.org) Received: (from cperciva@localhost) by svn.freebsd.org (8.14.7/8.14.5/Submit) id r9MG9iUu096182; Tue, 22 Oct 2013 16:09:44 GMT (envelope-from cperciva@svn.freebsd.org) Message-Id: <201310221609.r9MG9iUu096182@svn.freebsd.org> From: Colin Percival Date: Tue, 22 Oct 2013 16:09:44 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-stable@freebsd.org, svn-src-stable-10@freebsd.org Subject: svn commit: r256916 - in stable/10: etc etc/defaults share/man/man5 share/man/man8 sys/sys X-SVN-Group: stable-10 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-stable@freebsd.org X-Mailman-Version: 2.1.14 Precedence: list List-Id: SVN commit messages for all the -stable branches of the src tree List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 22 Oct 2013 16:09:45 -0000 Author: cperciva Date: Tue Oct 22 16:09:44 2013 New Revision: 256916 URL: http://svnweb.freebsd.org/changeset/base/256916 Log: MFC r256775,r256776: Add support for "first boot" rc.d scripts. Document this new functionality in rc.conf(5) and rc(8). Bump __FreeBSD_version so that ports can make use of this. Approved by: re (gjb) Modified: stable/10/etc/defaults/rc.conf stable/10/etc/rc stable/10/share/man/man5/rc.conf.5 stable/10/share/man/man8/rc.8 stable/10/sys/sys/param.h Directory Properties: stable/10/etc/ (props changed) stable/10/share/man/man5/ (props changed) stable/10/share/man/man8/ (props changed) stable/10/sys/ (props changed) Modified: stable/10/etc/defaults/rc.conf ============================================================================== --- stable/10/etc/defaults/rc.conf Tue Oct 22 15:53:29 2013 (r256915) +++ stable/10/etc/defaults/rc.conf Tue Oct 22 16:09:44 2013 (r256916) @@ -619,6 +619,9 @@ quotacheck_flags="-a" # Check all file s accounting_enable="NO" # Turn on process accounting (or NO). ibcs2_enable="NO" # Ibcs2 (SCO) emulation loaded at startup (or NO). ibcs2_loaders="coff" # List of additional Ibcs2 loaders (or NO). +firstboot_sentinel="/firstboot" # Scripts with "firstboot" keyword are run if + # this file exists. Should be on a R/W filesystem so + # the file can be deleted after the boot completes. # Emulation/compatibility services provided by /etc/rc.d/abi sysvipc_enable="NO" # Load System V IPC primitives at startup (or NO). Modified: stable/10/etc/rc ============================================================================== --- stable/10/etc/rc Tue Oct 22 15:53:29 2013 (r256915) +++ stable/10/etc/rc Tue Oct 22 16:09:44 2013 (r256916) @@ -82,10 +82,15 @@ if [ `/sbin/sysctl -n security.jail.jail fi fi +# If the firstboot sentinel doesn't exist, we want to skip firstboot scripts. +if ! [ -e ${firstboot_sentinel} ]; then + skip_firstboot="-s firstboot" +fi + # Do a first pass to get everything up to $early_late_divider so that # we can do a second pass that includes $local_startup directories # -files=`rcorder ${skip} /etc/rc.d/* 2>/dev/null` +files=`rcorder ${skip} ${skip_firstboot} /etc/rc.d/* 2>/dev/null` _rc_elem_done=' ' for _rc_elem in ${files}; do @@ -107,7 +112,13 @@ case ${local_startup} in *) find_local_scripts_new ;; esac -files=`rcorder ${skip} /etc/rc.d/* ${local_rc} 2>/dev/null` +# The firstboot sentinel might be on a newly mounted filesystem; look for it +# again and unset skip_firstboot if we find it. +if [ -e ${firstboot_sentinel} ]; then + skip_firstboot="" +fi + +files=`rcorder ${skip} ${skip_firstboot} /etc/rc.d/* ${local_rc} 2>/dev/null` for _rc_elem in ${files}; do case "$_rc_elem_done" in *" $_rc_elem "*) continue ;; @@ -116,6 +127,15 @@ for _rc_elem in ${files}; do run_rc_script ${_rc_elem} ${_boot} done +# Remove the firstboot sentinel, and reboot if it was requested. +if [ -e ${firstboot_sentinel} ]; then + rm ${firstboot_sentinel} + if [ -e ${firstboot_sentinel}-reboot ]; then + rm ${firstboot_sentinel}-reboot + kill -INT 1 + fi +fi + echo '' date exit 0 Modified: stable/10/share/man/man5/rc.conf.5 ============================================================================== --- stable/10/share/man/man5/rc.conf.5 Tue Oct 22 15:53:29 2013 (r256915) +++ stable/10/share/man/man5/rc.conf.5 Tue Oct 22 16:09:44 2013 (r256916) @@ -24,7 +24,7 @@ .\" .\" $FreeBSD$ .\" -.Dd October 12, 2013 +.Dd October 19, 2013 .Dt RC.CONF 5 .Os .Sh NAME @@ -3675,6 +3675,23 @@ and if is set to .Dq Li YES , this specifies a list of additional iBCS2 loaders to enable. +.It Va firstboot_sentinel +.Pq Vt str +This variable specifies the full path to a +.Dq first boot +sentinel file. +If a file exists with this path, +.Pa rc.d +scripts with the +.Dq firstboot +keyword will be run on startup and the sentinel file will be deleted +after the boot process completes. +The sentinel file must be located on a writable file system which is +mounted no later than +.Va early_late_divider +to function properly. +The default is +.Pa /firstboot . .It Va linux_enable .Pq Vt bool Set to Modified: stable/10/share/man/man8/rc.8 ============================================================================== --- stable/10/share/man/man8/rc.8 Tue Oct 22 15:53:29 2013 (r256915) +++ stable/10/share/man/man8/rc.8 Tue Oct 22 16:09:44 2013 (r256916) @@ -35,7 +35,7 @@ .\" @(#)rc.8 8.2 (Berkeley) 12/11/93 .\" $FreeBSD$ .\" -.Dd September 23, 2013 +.Dd October 19, 2013 .Dt RC 8 .Os .Sh NAME @@ -129,6 +129,13 @@ and add (only allow vnet-enabled jails) to the list of KEYWORDS to skip in .Xr rcorder 8 . .It +If the file +.Va ${firstboot_sentinel} +does not exist, add +.Dq Li firstboot +to the list of KEYWORDS to skip in +.Xr rcorder 8 . +.It Invoke .Xr rcorder 8 to order the files in @@ -156,6 +163,11 @@ Stop processing when the script that is .Va $early_late_divider has been run. .It +Check again to see if the file +.Va ${firstboot_sentinel} +exists (in case it is located on a newly mounted file system) +and adjust the list of KEYWORDs to skip appropriately. +.It Re-run .Xr rcorder 8 , this time including the scripts in the @@ -164,6 +176,13 @@ directories. Ignore everything up to the .Va $early_late_divider , then start executing the scripts as described above. +.It +If the file +.Va ${firstboot_sentinel} +exists, delete it. +If the file +.Va ${firstboot_sentinel}-reboot +also exists (because it was created by a script), then delete it and reboot. .El .Ss Operation of Nm rc.shutdown .Bl -enum Modified: stable/10/sys/sys/param.h ============================================================================== --- stable/10/sys/sys/param.h Tue Oct 22 15:53:29 2013 (r256915) +++ stable/10/sys/sys/param.h Tue Oct 22 16:09:44 2013 (r256916) @@ -58,7 +58,7 @@ * in the range 5 to 9. */ #undef __FreeBSD_version -#define __FreeBSD_version 1000500 /* Master, propagated to newvers */ +#define __FreeBSD_version 1000501 /* Master, propagated to newvers */ /* * __FreeBSD_kernel__ indicates that this system uses the kernel of FreeBSD, From owner-svn-src-stable@FreeBSD.ORG Tue Oct 22 16:13:17 2013 Return-Path: Delivered-To: svn-src-stable@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) (using TLSv1 with cipher ADH-AES256-SHA (256/256 bits)) (No client certificate requested) by hub.freebsd.org (Postfix) with ESMTP id DDB79251; Tue, 22 Oct 2013 16:13:16 +0000 (UTC) (envelope-from cperciva@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:1900:2254:2068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mx1.freebsd.org (Postfix) with ESMTPS id C9BAD2567; Tue, 22 Oct 2013 16:13:16 +0000 (UTC) Received: from svn.freebsd.org ([127.0.1.70]) by svn.freebsd.org (8.14.7/8.14.7) with ESMTP id r9MGDGSx099378; Tue, 22 Oct 2013 16:13:16 GMT (envelope-from cperciva@svn.freebsd.org) Received: (from cperciva@localhost) by svn.freebsd.org (8.14.7/8.14.5/Submit) id r9MGDF7w099373; Tue, 22 Oct 2013 16:13:15 GMT (envelope-from cperciva@svn.freebsd.org) Message-Id: <201310221613.r9MGDF7w099373@svn.freebsd.org> From: Colin Percival Date: Tue, 22 Oct 2013 16:13:15 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-stable@freebsd.org, svn-src-stable-9@freebsd.org Subject: svn commit: r256917 - in stable/9: etc etc/defaults share/man/man5 share/man/man8 sys/sys X-SVN-Group: stable-9 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-stable@freebsd.org X-Mailman-Version: 2.1.14 Precedence: list List-Id: SVN commit messages for all the -stable branches of the src tree List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 22 Oct 2013 16:13:17 -0000 Author: cperciva Date: Tue Oct 22 16:13:15 2013 New Revision: 256917 URL: http://svnweb.freebsd.org/changeset/base/256917 Log: MFC r256775,r256776: Add support for "first boot" rc.d scripts. Document this new functionality in rc.conf(5) and rc(8). Bump __FreeBSD_version so that ports can make use of this. Modified: stable/9/etc/defaults/rc.conf stable/9/etc/rc stable/9/share/man/man5/rc.conf.5 stable/9/share/man/man8/rc.8 stable/9/sys/sys/param.h Directory Properties: stable/9/etc/ (props changed) stable/9/share/man/man5/ (props changed) stable/9/share/man/man8/ (props changed) stable/9/sys/ (props changed) stable/9/sys/dev/ (props changed) stable/9/sys/sys/ (props changed) Modified: stable/9/etc/defaults/rc.conf ============================================================================== --- stable/9/etc/defaults/rc.conf Tue Oct 22 16:09:44 2013 (r256916) +++ stable/9/etc/defaults/rc.conf Tue Oct 22 16:13:15 2013 (r256917) @@ -613,6 +613,9 @@ quotacheck_flags="-a" # Check all file s accounting_enable="NO" # Turn on process accounting (or NO). ibcs2_enable="NO" # Ibcs2 (SCO) emulation loaded at startup (or NO). ibcs2_loaders="coff" # List of additional Ibcs2 loaders (or NO). +firstboot_sentinel="/firstboot" # Scripts with "firstboot" keyword are run if + # this file exists. Should be on a R/W filesystem so + # the file can be deleted after the boot completes. # Emulation/compatibility services provided by /etc/rc.d/abi sysvipc_enable="NO" # Load System V IPC primitives at startup (or NO). Modified: stable/9/etc/rc ============================================================================== --- stable/9/etc/rc Tue Oct 22 16:09:44 2013 (r256916) +++ stable/9/etc/rc Tue Oct 22 16:13:15 2013 (r256917) @@ -82,10 +82,15 @@ if [ `/sbin/sysctl -n security.jail.jail fi fi +# If the firstboot sentinel doesn't exist, we want to skip firstboot scripts. +if ! [ -e ${firstboot_sentinel} ]; then + skip_firstboot="-s firstboot" +fi + # Do a first pass to get everything up to $early_late_divider so that # we can do a second pass that includes $local_startup directories # -files=`rcorder ${skip} /etc/rc.d/* 2>/dev/null` +files=`rcorder ${skip} ${skip_firstboot} /etc/rc.d/* 2>/dev/null` _rc_elem_done=' ' for _rc_elem in ${files}; do @@ -107,7 +112,13 @@ case ${local_startup} in *) find_local_scripts_new ;; esac -files=`rcorder ${skip} /etc/rc.d/* ${local_rc} 2>/dev/null` +# The firstboot sentinel might be on a newly mounted filesystem; look for it +# again and unset skip_firstboot if we find it. +if [ -e ${firstboot_sentinel} ]; then + skip_firstboot="" +fi + +files=`rcorder ${skip} ${skip_firstboot} /etc/rc.d/* ${local_rc} 2>/dev/null` for _rc_elem in ${files}; do case "$_rc_elem_done" in *" $_rc_elem "*) continue ;; @@ -116,6 +127,15 @@ for _rc_elem in ${files}; do run_rc_script ${_rc_elem} ${_boot} done +# Remove the firstboot sentinel, and reboot if it was requested. +if [ -e ${firstboot_sentinel} ]; then + rm ${firstboot_sentinel} + if [ -e ${firstboot_sentinel}-reboot ]; then + rm ${firstboot_sentinel}-reboot + kill -INT 1 + fi +fi + echo '' date exit 0 Modified: stable/9/share/man/man5/rc.conf.5 ============================================================================== --- stable/9/share/man/man5/rc.conf.5 Tue Oct 22 16:09:44 2013 (r256916) +++ stable/9/share/man/man5/rc.conf.5 Tue Oct 22 16:13:15 2013 (r256917) @@ -24,7 +24,7 @@ .\" .\" $FreeBSD$ .\" -.Dd July 12, 2013 +.Dd October 19, 2013 .Dt RC.CONF 5 .Os .Sh NAME @@ -3629,6 +3629,23 @@ and if is set to .Dq Li YES , this specifies a list of additional iBCS2 loaders to enable. +.It Va firstboot_sentinel +.Pq Vt str +This variable specifies the full path to a +.Dq first boot +sentinel file. +If a file exists with this path, +.Pa rc.d +scripts with the +.Dq firstboot +keyword will be run on startup and the sentinel file will be deleted +after the boot process completes. +The sentinel file must be located on a writable file system which is +mounted no later than +.Va early_late_divider +to function properly. +The default is +.Pa /firstboot . .It Va linux_enable .Pq Vt bool Set to Modified: stable/9/share/man/man8/rc.8 ============================================================================== --- stable/9/share/man/man8/rc.8 Tue Oct 22 16:09:44 2013 (r256916) +++ stable/9/share/man/man8/rc.8 Tue Oct 22 16:13:15 2013 (r256917) @@ -35,7 +35,7 @@ .\" @(#)rc.8 8.2 (Berkeley) 12/11/93 .\" $FreeBSD$ .\" -.Dd November 17, 2009 +.Dd October 19, 2013 .Dt RC 8 .Os .Sh NAME @@ -129,6 +129,13 @@ and add (only allow vnet-enabled jails) to the list of KEYWORDS to skip in .Xr rcorder 8 . .It +If the file +.Va ${firstboot_sentinel} +does not exist, add +.Dq Li firstboot +to the list of KEYWORDS to skip in +.Xr rcorder 8 . +.It Invoke .Xr rcorder 8 to order the files in @@ -156,6 +163,11 @@ Stop processing when the script that is .Va $early_late_divider has been run. .It +Check again to see if the file +.Va ${firstboot_sentinel} +exists (in case it is located on a newly mounted file system) +and adjust the list of KEYWORDs to skip appropriately. +.It Re-run .Xr rcorder 8 , this time including the scripts in the @@ -164,6 +176,13 @@ directories. Ignore everything up to the .Va $early_late_divider , then start executing the scripts as described above. +.It +If the file +.Va ${firstboot_sentinel} +exists, delete it. +If the file +.Va ${firstboot_sentinel}-reboot +also exists (because it was created by a script), then delete it and reboot. .El .Ss Operation of Nm rc.shutdown .Bl -enum Modified: stable/9/sys/sys/param.h ============================================================================== --- stable/9/sys/sys/param.h Tue Oct 22 16:09:44 2013 (r256916) +++ stable/9/sys/sys/param.h Tue Oct 22 16:13:15 2013 (r256917) @@ -58,7 +58,7 @@ * in the range 5 to 9. */ #undef __FreeBSD_version -#define __FreeBSD_version 902503 /* Master, propagated to newvers */ +#define __FreeBSD_version 902504 /* Master, propagated to newvers */ /* * __FreeBSD_kernel__ indicates that this system uses the kernel of FreeBSD, From owner-svn-src-stable@FreeBSD.ORG Tue Oct 22 19:49:19 2013 Return-Path: Delivered-To: svn-src-stable@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [8.8.178.115]) (using TLSv1 with cipher ADH-AES256-SHA (256/256 bits)) (No client certificate requested) by hub.freebsd.org (Postfix) with ESMTP id BF81F956; Tue, 22 Oct 2013 19:49:19 +0000 (UTC) (envelope-from ambrisko@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:1900:2254:2068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mx1.freebsd.org (Postfix) with ESMTPS id ABCB0231A; Tue, 22 Oct 2013 19:49:19 +0000 (UTC) Received: from svn.freebsd.org ([127.0.1.70]) by svn.freebsd.org (8.14.7/8.14.7) with ESMTP id r9MJnJkZ015297; Tue, 22 Oct 2013 19:49:19 GMT (envelope-from ambrisko@svn.freebsd.org) Received: (from ambrisko@localhost) by svn.freebsd.org (8.14.7/8.14.5/Submit) id r9MJnJIt015296; Tue, 22 Oct 2013 19:49:19 GMT (envelope-from ambrisko@svn.freebsd.org) Message-Id: <201310221949.r9MJnJIt015296@svn.freebsd.org> From: Doug Ambrisko Date: Tue, 22 Oct 2013 19:49:19 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-stable@freebsd.org, svn-src-stable-9@freebsd.org Subject: svn commit: r256924 - stable/9/sys/dev/mfi X-SVN-Group: stable-9 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-stable@freebsd.org X-Mailman-Version: 2.1.14 Precedence: list List-Id: SVN commit messages for all the -stable branches of the src tree List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 22 Oct 2013 19:49:19 -0000 Author: ambrisko Date: Tue Oct 22 19:49:19 2013 New Revision: 256924 URL: http://svnweb.freebsd.org/changeset/base/256924 Log: MFC r255869: Add PCI device ID for MegaRAID Invader cards. This was the only change needed to make it work on my card. Modified: stable/9/sys/dev/mfi/mfi_pci.c Directory Properties: stable/9/sys/ (props changed) stable/9/sys/dev/ (props changed) Modified: stable/9/sys/dev/mfi/mfi_pci.c ============================================================================== --- stable/9/sys/dev/mfi/mfi_pci.c Tue Oct 22 18:55:52 2013 (r256923) +++ stable/9/sys/dev/mfi/mfi_pci.c Tue Oct 22 19:49:19 2013 (r256924) @@ -131,6 +131,7 @@ struct mfi_ident { {0x1000, 0x005b, 0x8086, 0x9265, MFI_FLAGS_SKINNY| MFI_FLAGS_TBOLT, "Intel (R) RAID Controller RS25DB080"}, {0x1000, 0x005b, 0x8086, 0x9285, MFI_FLAGS_SKINNY| MFI_FLAGS_TBOLT, "Intel (R) RAID Controller RS25NB008"}, {0x1000, 0x005b, 0xffff, 0xffff, MFI_FLAGS_SKINNY| MFI_FLAGS_TBOLT, "ThunderBolt"}, + {0x1000, 0x005d, 0xffff, 0xffff, MFI_FLAGS_SKINNY| MFI_FLAGS_TBOLT, "Invader"}, {0x1000, 0x0060, 0x1028, 0xffff, MFI_FLAGS_1078, "Dell PERC 6"}, {0x1000, 0x0060, 0xffff, 0xffff, MFI_FLAGS_1078, "LSI MegaSAS 1078"}, {0x1000, 0x0071, 0xffff, 0xffff, MFI_FLAGS_SKINNY, "Drake Skinny"}, From owner-svn-src-stable@FreeBSD.ORG Tue Oct 22 21:53:33 2013 Return-Path: Delivered-To: svn-src-stable@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [8.8.178.115]) (using TLSv1 with cipher ADH-AES256-SHA (256/256 bits)) (No client certificate requested) by hub.freebsd.org (Postfix) with ESMTP id 19EB259E; Tue, 22 Oct 2013 21:53:33 +0000 (UTC) (envelope-from cperciva@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:1900:2254:2068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mx1.freebsd.org (Postfix) with ESMTPS id 061A32B41; Tue, 22 Oct 2013 21:53:33 +0000 (UTC) Received: from svn.freebsd.org ([127.0.1.70]) by svn.freebsd.org (8.14.7/8.14.7) with ESMTP id r9MLrWwg066697; Tue, 22 Oct 2013 21:53:32 GMT (envelope-from cperciva@svn.freebsd.org) Received: (from cperciva@localhost) by svn.freebsd.org (8.14.7/8.14.5/Submit) id r9MLrW0i066696; Tue, 22 Oct 2013 21:53:32 GMT (envelope-from cperciva@svn.freebsd.org) Message-Id: <201310222153.r9MLrW0i066696@svn.freebsd.org> From: Colin Percival Date: Tue, 22 Oct 2013 21:53:32 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-stable@freebsd.org, svn-src-stable-10@freebsd.org Subject: svn commit: r256944 - stable/10 X-SVN-Group: stable-10 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-stable@freebsd.org X-Mailman-Version: 2.1.14 Precedence: list List-Id: SVN commit messages for all the -stable branches of the src tree List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 22 Oct 2013 21:53:33 -0000 Author: cperciva Date: Tue Oct 22 21:53:32 2013 New Revision: 256944 URL: http://svnweb.freebsd.org/changeset/base/256944 Log: MFC r256921: Thou shalt not leak build host state into the system being compiled. Approved by: re (gjb) Modified: stable/10/Makefile.inc1 (contents, props changed) Modified: stable/10/Makefile.inc1 ============================================================================== --- stable/10/Makefile.inc1 Tue Oct 22 21:51:07 2013 (r256943) +++ stable/10/Makefile.inc1 Tue Oct 22 21:53:32 2013 (r256944) @@ -128,8 +128,11 @@ OSRELDATE= 0 .endif .if !defined(VERSION) -VERSION!= uname -srp -VERSION+= ${OSRELDATE} +REVISION!= make -C ${.CURDIR}/release -V REVISION +BRANCH!= make -C ${.CURDIR}/release -V BRANCH +SRCRELDATE!= awk '/^\#define[[:space:]]*__FreeBSD_version/ { print $$3 }' \ + ${.CURDIR}/sys/sys/param.h +VERSION= FreeBSD ${REVISION}-${BRANCH} ${TARGET_ARCH} ${SRCRELDATE} .endif KNOWN_ARCHES?= amd64 arm armeb/arm armv6/arm i386 i386/pc98 ia64 mips mipsel/mips mips64el/mips mips64/mips mipsn32el/mips mipsn32/mips powerpc powerpc64/powerpc sparc64 From owner-svn-src-stable@FreeBSD.ORG Tue Oct 22 23:16:37 2013 Return-Path: Delivered-To: svn-src-stable@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [8.8.178.115]) (using TLSv1 with cipher ADH-AES256-SHA (256/256 bits)) (No client certificate requested) by hub.freebsd.org (Postfix) with ESMTP id CDF8CDE; Tue, 22 Oct 2013 23:16:37 +0000 (UTC) (envelope-from h.skuhra@gmail.com) Received: from mail-ea0-x230.google.com (mail-ea0-x230.google.com [IPv6:2a00:1450:4013:c01::230]) (using TLSv1 with cipher ECDHE-RSA-RC4-SHA (128/128 bits)) (No client certificate requested) by mx1.freebsd.org (Postfix) with ESMTPS id C23362FCE; Tue, 22 Oct 2013 23:16:36 +0000 (UTC) Received: by mail-ea0-f176.google.com with SMTP id q16so10658ead.7 for ; Tue, 22 Oct 2013 16:16:34 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=date:message-id:from:to:cc:subject:in-reply-to:references :user-agent:mime-version:content-type; bh=CNDlB8TAdXlKEuQ5fFcQBJBIIrJohee5DWhPfZQTSYM=; b=goFaMBl+1AOM61AhA/2kWnDKj+OewrdbLtg0i5dPTPcDWuSbB3mthtaSw9uJfjc8vM UmxTqODtfYVL0FpWmMPreh1RUchxLoFdFxxwnoOo0CQSSIoGv6mC8zNq3Ruew+fHpU70 kKIFQuDji9ohfHY+9eDq8FiAplsw37Jcm+Ol1aO9idi3NXouqhkIEx0QWJFvZ+jjpLaL WrkQo46/K+AnM5GxBhWxQJIGIAx2FoJfCdQBiu4jVhNEmR2ewnsxYtlVUlsmj1UaVghx D+ZOLKegqGFdnKM26Xwc20YJoSGjAgRf0NpuwA3IJl6wcxj0Oz1MY6YvkgCpqxP/DZwv BDkQ== X-Received: by 10.14.211.136 with SMTP id w8mr2818767eeo.80.1382483794587; Tue, 22 Oct 2013 16:16:34 -0700 (PDT) Received: from oslo.ath.cx ([2001:470:6f:44d:6146:eeae:ce98:ec5d]) by mx.google.com with ESMTPSA id s3sm62448114eeo.3.2013.10.22.16.16.32 for (version=TLSv1.2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Tue, 22 Oct 2013 16:16:33 -0700 (PDT) Date: Wed, 23 Oct 2013 01:15:58 +0200 Message-ID: <87fvrsx5g1.wl%h.skuhra@gmail.com> From: "Herbert J. Skuhra" To: Colin Percival Subject: Re: svn commit: r256944 - stable/10 In-Reply-To: <201310222153.r9MLrW0i066696@svn.freebsd.org> References: <201310222153.r9MLrW0i066696@svn.freebsd.org> User-Agent: Wanderlust/2.15.9 (Almost Unreal) SEMI-EPG/1.14.7 (Harue) FLIM/1.14.9 (=?ISO-8859-4?Q?Goj=F2?=) APEL/10.8 EasyPG/1.0.0 Emacs/24.3.50 (i686-pc-linux-gnu) MULE/6.0 (HANACHIRUSATO) MIME-Version: 1.0 (generated by SEMI-EPG 1.14.7 - "Harue") Content-Type: text/plain; charset=US-ASCII Cc: svn-src-stable@freebsd.org, svn-src-all@freebsd.org, src-committers@freebsd.org, svn-src-stable-10@freebsd.org X-BeenThere: svn-src-stable@freebsd.org X-Mailman-Version: 2.1.14 Precedence: list List-Id: SVN commit messages for all the -stable branches of the src tree List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 22 Oct 2013 23:16:37 -0000 On Tue, 22 Oct 2013 21:53:32 +0000 (UTC) Colin Percival wrote: > Author: cperciva > Date: Tue Oct 22 21:53:32 2013 > New Revision: 256944 > URL: http://svnweb.freebsd.org/changeset/base/256944 > > Log: > MFC r256921: > Thou shalt not leak build host state into the system being compiled. > > Approved by: re (gjb) > > Modified: > stable/10/Makefile.inc1 (contents, props changed) > > Modified: stable/10/Makefile.inc1 > ============================================================================== > --- stable/10/Makefile.inc1 Tue Oct 22 21:51:07 2013 (r256943) > +++ stable/10/Makefile.inc1 Tue Oct 22 21:53:32 2013 (r256944) > @@ -128,8 +128,11 @@ OSRELDATE= 0 > .endif > > .if !defined(VERSION) > -VERSION!= uname -srp > -VERSION+= ${OSRELDATE} > +REVISION!= make -C ${.CURDIR}/release -V REVISION > +BRANCH!= make -C ${.CURDIR}/release -V BRANCH > +SRCRELDATE!= awk '/^\#define[[:space:]]*__FreeBSD_version/ { print $$3 }' \ > + ${.CURDIR}/sys/sys/param.h > +VERSION= FreeBSD ${REVISION}-${BRANCH} ${TARGET_ARCH} ${SRCRELDATE} > .endif > > KNOWN_ARCHES?= amd64 arm armeb/arm armv6/arm i386 i386/pc98 ia64 mips mipsel/mips mips64el/mips mips64/mips mipsn32el/mips mipsn32/mips powerpc powerpc64/powerpc sparc64 # pwd /usr/src # make check-old >>> Checking for old files make[3]: chdir /usr/obj/usr/src/release: No such file or directory make[2]: "/usr/src/Makefile.inc1" line 131: warning: "make -C /usr/obj/usr/src/release -V REVISION" returned non-zero status make[3]: chdir /usr/obj/usr/src/release: No such file or directory make[2]: "/usr/src/Makefile.inc1" line 132: warning: "make -C /usr/obj/usr/src/release -V BRANCH" returned non-zero status awk: can't open file /usr/obj/usr/src/sys/sys/param.h source line number 1 make[2]: "/usr/src/Makefile.inc1" line 134: warning: "awk '/^#define[[:space:]]*__FreeBSD_version/ { print $3 }' /usr/obj/usr/src/sys/sys/param.h" returned non-zero status >>> Checking for old libraries make[3]: chdir /usr/obj/usr/src/release: No such file or directory make[2]: "/usr/src/Makefile.inc1" line 131: warning: "make -C /usr/obj/usr/src/release -V REVISION" returned non-zero status make[3]: chdir /usr/obj/usr/src/release: No such file or directory make[2]: "/usr/src/Makefile.inc1" line 132: warning: "make -C /usr/obj/usr/src/release -V BRANCH" returned non-zero status awk: can't open file /usr/obj/usr/src/sys/sys/param.h source line number 1 make[2]: "/usr/src/Makefile.inc1" line 134: warning: "awk '/^#define[[:space:]]*__FreeBSD_version/ { print $3 }' /usr/obj/usr/src/sys/sys/param.h" returned non-zero status >>> Checking for old directories make[3]: chdir /usr/obj/usr/src/release: No such file or directory make[2]: "/usr/src/Makefile.inc1" line 131: warning: "make -C /usr/obj/usr/src/release -V REVISION" returned non-zero status make[3]: chdir /usr/obj/usr/src/release: No such file or directory make[2]: "/usr/src/Makefile.inc1" line 132: warning: "make -C /usr/obj/usr/src/release -V BRANCH" returned non-zero status awk: can't open file /usr/obj/usr/src/sys/sys/param.h source line number 1 make[2]: "/usr/src/Makefile.inc1" line 134: warning: "awk '/^#define[[:space:]]*__FreeBSD_version/ { print $3 }' /usr/obj/usr/src/sys/sys/param.h" returned non-zero status -- Herbert From owner-svn-src-stable@FreeBSD.ORG Tue Oct 22 23:37:55 2013 Return-Path: Delivered-To: svn-src-stable@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) (using TLSv1 with cipher ADH-AES256-SHA (256/256 bits)) (No client certificate requested) by hub.freebsd.org (Postfix) with ESMTP id 6125343C; Tue, 22 Oct 2013 23:37:55 +0000 (UTC) (envelope-from gjb@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:1900:2254:2068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mx1.freebsd.org (Postfix) with ESMTPS id 4D17720E3; Tue, 22 Oct 2013 23:37:55 +0000 (UTC) Received: from svn.freebsd.org ([127.0.1.70]) by svn.freebsd.org (8.14.7/8.14.7) with ESMTP id r9MNbtt7003763; Tue, 22 Oct 2013 23:37:55 GMT (envelope-from gjb@svn.freebsd.org) Received: (from gjb@localhost) by svn.freebsd.org (8.14.7/8.14.5/Submit) id r9MNbtra003762; Tue, 22 Oct 2013 23:37:55 GMT (envelope-from gjb@svn.freebsd.org) Message-Id: <201310222337.r9MNbtra003762@svn.freebsd.org> From: Glen Barber Date: Tue, 22 Oct 2013 23:37:55 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-stable@freebsd.org, svn-src-stable-10@freebsd.org Subject: svn commit: r256947 - stable/10 X-SVN-Group: stable-10 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-stable@freebsd.org X-Mailman-Version: 2.1.14 Precedence: list List-Id: SVN commit messages for all the -stable branches of the src tree List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 22 Oct 2013 23:37:55 -0000 Author: gjb Date: Tue Oct 22 23:37:54 2013 New Revision: 256947 URL: http://svnweb.freebsd.org/changeset/base/256947 Log: Revert r256944, which does not quite get the src/ directory correct. Discussed with: cperciva Approved by: re (implicit) Pointyhat: gjb Modified: stable/10/Makefile.inc1 (contents, props changed) Modified: stable/10/Makefile.inc1 ============================================================================== --- stable/10/Makefile.inc1 Tue Oct 22 22:17:48 2013 (r256946) +++ stable/10/Makefile.inc1 Tue Oct 22 23:37:54 2013 (r256947) @@ -128,11 +128,8 @@ OSRELDATE= 0 .endif .if !defined(VERSION) -REVISION!= make -C ${.CURDIR}/release -V REVISION -BRANCH!= make -C ${.CURDIR}/release -V BRANCH -SRCRELDATE!= awk '/^\#define[[:space:]]*__FreeBSD_version/ { print $$3 }' \ - ${.CURDIR}/sys/sys/param.h -VERSION= FreeBSD ${REVISION}-${BRANCH} ${TARGET_ARCH} ${SRCRELDATE} +VERSION!= uname -srp +VERSION+= ${OSRELDATE} .endif KNOWN_ARCHES?= amd64 arm armeb/arm armv6/arm i386 i386/pc98 ia64 mips mipsel/mips mips64el/mips mips64/mips mipsn32el/mips mipsn32/mips powerpc powerpc64/powerpc sparc64 From owner-svn-src-stable@FreeBSD.ORG Tue Oct 22 23:38:48 2013 Return-Path: Delivered-To: svn-src-stable@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [8.8.178.115]) (using TLSv1 with cipher ADH-AES256-SHA (256/256 bits)) (No client certificate requested) by hub.freebsd.org (Postfix) with ESMTP id 3CA4A568; Tue, 22 Oct 2013 23:38:48 +0000 (UTC) (envelope-from gjb@FreeBSD.org) Received: from mail0.glenbarber.us (mail0.glenbarber.us [208.86.227.67]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mx1.freebsd.org (Postfix) with ESMTPS id 99B7820E9; Tue, 22 Oct 2013 23:38:47 +0000 (UTC) Received: from glenbarber.us (coral.nyi.net [96.47.64.130]) (using TLSv1 with cipher ECDHE-RSA-AES256-SHA (256/256 bits)) (Client did not present a certificate) (Authenticated sender: gjb) by mail0.glenbarber.us (Postfix) with ESMTPSA id A5D52DAA2; Tue, 22 Oct 2013 23:38:39 +0000 (UTC) DKIM-Filter: OpenDKIM Filter v2.8.3 mail0.glenbarber.us A5D52DAA2 Authentication-Results: mail0.glenbarber.us; dkim=none reason="no signature"; dkim-adsp=none Date: Tue, 22 Oct 2013 19:38:38 -0400 From: Glen Barber To: "Herbert J. Skuhra" Subject: Re: svn commit: r256944 - stable/10 Message-ID: <20131022233838.GM1833@glenbarber.us> References: <201310222153.r9MLrW0i066696@svn.freebsd.org> <87fvrsx5g1.wl%h.skuhra@gmail.com> MIME-Version: 1.0 Content-Type: multipart/signed; micalg=pgp-sha256; protocol="application/pgp-signature"; boundary="8m/hfNLtAhX2NvnO" Content-Disposition: inline In-Reply-To: <87fvrsx5g1.wl%h.skuhra@gmail.com> X-Operating-System: FreeBSD 11.0-CURRENT amd64 User-Agent: Mutt/1.5.21 (2010-09-15) Cc: svn-src-stable@freebsd.org, svn-src-all@freebsd.org, src-committers@freebsd.org, svn-src-stable-10@freebsd.org, Colin Percival X-BeenThere: svn-src-stable@freebsd.org X-Mailman-Version: 2.1.14 Precedence: list List-Id: SVN commit messages for all the -stable branches of the src tree List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 22 Oct 2013 23:38:48 -0000 --8m/hfNLtAhX2NvnO Content-Type: text/plain; charset=us-ascii Content-Disposition: inline Content-Transfer-Encoding: quoted-printable On Wed, Oct 23, 2013 at 01:15:58AM +0200, Herbert J. Skuhra wrote: > > Log: > > MFC r256921: > > Thou shalt not leak build host state into the system being compiled. > > =20 > > Approved by: re (gjb) > >=20 > > Modified: > > stable/10/Makefile.inc1 (contents, props changed) > >=20 Reverted with r256947. Sorry for the breakage. Glen --8m/hfNLtAhX2NvnO Content-Type: application/pgp-signature -----BEGIN PGP SIGNATURE----- Version: GnuPG v2.0.22 (FreeBSD) iQIcBAEBCAAGBQJSZwx9AAoJELls3eqvi17QuB4P/ibGz23HFkVTbY+udoGicGTc dMHEkqmMYdX8ypRpKsllpk8HDVXgXcNhOMNC8GtDUd1XvqrorAqMPNNwz3zqoBRq eX6V8aGpLwYAX8APW+dmbtmTt4etpc+ciMfB5vesiwkKRSzXj5P9jt4Y7b1IrajH 2jMfzWFH8obom6QEZSFfRA/kC6oIiT35DHfC9yvjYDRRAUpMLwBbZQQ1Zs4piW0O +Mr9Gx3/+q4SrTCLO1TVHygRzXfSu42a7VwbooDzMsNUH7MJ7wuso0+G/zhIuk1Y dT7sv4X0lVhDrjnu40Zsa+cXwz7m7f7zcNmeLr24h96/UhYTCxCaAS2/IFkkNG1G aUuVp9SQ9P8DCoTQ9/drptWErimBzoN9QYujEDGnjjxPtUtb88sRSj9mZ9cMBA+C odHkE4yUNv8uX6twNlpIavg/m8h6/byWLEV9RFdHh5DlkX7dYwzZpwShrWC9Zepg HOHJQFZUJ16T5kire5CcrjAinFuj6l+XuG1HHT1CTHV8YWaIEFjC9TwfFRwV3tmV ejqzS3l56xH+1W8XGvjqSlCik7cKnQCKTmEjNIcv+1/2FqYKpRNcei8YZ+DDe4i6 WOpqqkXD9cBW+exC6GOIwNylSRj74ZnMgb+eddwM/HGWgx0WhRZnSkNZ0RLp4euN /QLf3qfxkioPT1X58HcO =kZF0 -----END PGP SIGNATURE----- --8m/hfNLtAhX2NvnO-- From owner-svn-src-stable@FreeBSD.ORG Wed Oct 23 16:55:21 2013 Return-Path: Delivered-To: svn-src-stable@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) (using TLSv1 with cipher ADH-AES256-SHA (256/256 bits)) (No client certificate requested) by hub.freebsd.org (Postfix) with ESMTP id 961A9CE3; Wed, 23 Oct 2013 16:55:21 +0000 (UTC) (envelope-from jmg@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:1900:2254:2068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mx1.freebsd.org (Postfix) with ESMTPS id 806C62D77; Wed, 23 Oct 2013 16:55:21 +0000 (UTC) Received: from svn.freebsd.org ([127.0.1.70]) by svn.freebsd.org (8.14.7/8.14.7) with ESMTP id r9NGtLP0057394; Wed, 23 Oct 2013 16:55:21 GMT (envelope-from jmg@svn.freebsd.org) Received: (from jmg@localhost) by svn.freebsd.org (8.14.7/8.14.5/Submit) id r9NGtKvq057361; Wed, 23 Oct 2013 16:55:20 GMT (envelope-from jmg@svn.freebsd.org) Message-Id: <201310231655.r9NGtKvq057361@svn.freebsd.org> From: John-Mark Gurney Date: Wed, 23 Oct 2013 16:55:20 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-stable@freebsd.org, svn-src-stable-10@freebsd.org Subject: svn commit: r256982 - in stable/10: etc/defaults etc/rc.d etc/sendmail share/man/man8 X-SVN-Group: stable-10 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-stable@freebsd.org X-Mailman-Version: 2.1.14 Precedence: list List-Id: SVN commit messages for all the -stable branches of the src tree List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 23 Oct 2013 16:55:21 -0000 Author: jmg Date: Wed Oct 23 16:55:20 2013 New Revision: 256982 URL: http://svnweb.freebsd.org/changeset/base/256982 Log: MFC r256773: Enable the automatic creation of a certificate (if one does not exists) and enable the usage by sendmail if sendmail is enabled. Reviewed by: gshapiro Approved by: re (gjb) Modified: stable/10/etc/defaults/rc.conf stable/10/etc/rc.d/sendmail stable/10/etc/sendmail/freebsd.mc stable/10/share/man/man8/rc.sendmail.8 Directory Properties: stable/10/etc/ (props changed) stable/10/etc/rc.d/ (props changed) stable/10/share/man/man8/ (props changed) Modified: stable/10/etc/defaults/rc.conf ============================================================================== --- stable/10/etc/defaults/rc.conf Wed Oct 23 16:14:48 2013 (r256981) +++ stable/10/etc/defaults/rc.conf Wed Oct 23 16:55:20 2013 (r256982) @@ -573,6 +573,8 @@ sendmail_enable="NO" # Run the sendmail sendmail_pidfile="/var/run/sendmail.pid" # sendmail pid file sendmail_procname="/usr/sbin/sendmail" # sendmail process name sendmail_flags="-L sm-mta -bd -q30m" # Flags to sendmail (as a server) +sendmail_cert_create="YES" # Create a server certificate if none (YES/NO) +#sendmail_cert_cn="CN" # CN of the generate certificate sendmail_submit_enable="YES" # Start a localhost-only MTA for mail submission sendmail_submit_flags="-L sm-mta -bd -q30m -ODaemonPortOptions=Addr=localhost" # Flags for localhost-only MTA Modified: stable/10/etc/rc.d/sendmail ============================================================================== --- stable/10/etc/rc.d/sendmail Wed Oct 23 16:14:48 2013 (r256981) +++ stable/10/etc/rc.d/sendmail Wed Oct 23 16:55:20 2013 (r256982) @@ -24,6 +24,8 @@ command=${sendmail_program:-/usr/sbin/${ pidfile=${sendmail_pidfile:-/var/run/${name}.pid} procname=${sendmail_procname:-/usr/sbin/${name}} +CERTDIR=/etc/mail/certs + case ${sendmail_enable} in [Nn][Oo][Nn][Ee]) sendmail_enable="NO" @@ -44,6 +46,118 @@ if checkyesno sendmail_submit_enable; th sendmail_outbound_enable="NO" fi +sendmail_cert_create() +{ + cnname="${sendmail_cert_cn:-`hostname`}" + cnname="${cnname:-amnesiac}" + + # based upon: + # http://www.sendmail.org/~ca/email/other/cagreg.html + CAdir=`mktemp -d` && + certpass=`(date; ps ax ; hostname) | md5 -q` + + # make certificate authority + ( cd "$CAdir" && + chmod 700 "$CAdir" && + mkdir certs crl newcerts && + echo "01" > serial && + :> index.txt && + + cat <<-OPENSSL_CNF > openssl.cnf && + RANDFILE = $CAdir/.rnd + [ ca ] + default_ca = CA_default + [ CA_default ] + dir = . + certs = \$dir/certs # Where the issued certs are kept + crl_dir = \$dir/crl # Where the issued crl are kept + database = \$dir/index.txt # database index file. + new_certs_dir = \$dir/newcerts # default place for new certs. + certificate = \$dir/cacert.pem # The CA certificate + serial = \$dir/serial # The current serial number + crlnumber = \$dir/crlnumber # the current crl number + crl = \$dir/crl.pem # The current CRL + private_key = \$dir/cakey.pem + x509_extensions = usr_cert # The extentions to add to the cert + name_opt = ca_default # Subject Name options + cert_opt = ca_default # Certificate field options + default_days = 365 # how long to certify for + default_crl_days= 30 # how long before next CRL + default_md = default # use public key default MD + preserve = no # keep passed DN ordering + policy = policy_anything + [ policy_anything ] + countryName = optional + stateOrProvinceName = optional + localityName = optional + organizationName = optional + organizationalUnitName = optional + commonName = supplied + emailAddress = optional + [ req ] + default_bits = 2048 + default_keyfile = privkey.pem + distinguished_name = req_distinguished_name + attributes = req_attributes + x509_extensions = v3_ca # The extentions to add to the self signed cert + string_mask = utf8only + prompt = no + [ req_distinguished_name ] + countryName = XX + stateOrProvinceName = Some-state + localityName = Some-city + 0.organizationName = Some-org + CN = $cnname + [ req_attributes ] + challengePassword = foobar + unstructuredName = An optional company name + [ usr_cert ] + basicConstraints=CA:FALSE + nsComment = "OpenSSL Generated Certificate" + subjectKeyIdentifier=hash + authorityKeyIdentifier=keyid,issuer + [ v3_req ] + basicConstraints = CA:FALSE + keyUsage = nonRepudiation, digitalSignature, keyEncipherment + [ v3_ca ] + subjectKeyIdentifier=hash + authorityKeyIdentifier=keyid:always,issuer + basicConstraints = CA:true + OPENSSL_CNF + + # though we use a password, the key is discarded and never used + openssl req -batch -passout pass:"$certpass" -new -x509 \ + -keyout cakey.pem -out cacert.pem -days 3650 \ + -config openssl.cnf -newkey rsa:2048 >/dev/null 2>&1 && + + # make new certificate + openssl req -batch -nodes -new -x509 -keyout newkey.pem \ + -out newreq.pem -days 365 -config openssl.cnf \ + -newkey rsa:2048 >/dev/null 2>&1 && + + # sign certificate + openssl x509 -x509toreq -in newreq.pem -signkey newkey.pem \ + -out tmp.pem >/dev/null 2>&1 && + openssl ca -notext -config openssl.cnf \ + -out newcert.pem -keyfile cakey.pem -cert cacert.pem \ + -key "$certpass" -batch -infiles tmp.pem >/dev/null 2>&1 && + + mkdir -p "$CERTDIR" && + chmod 0755 "$CERTDIR" && + chmod 644 newcert.pem cacert.pem && + chmod 600 newkey.pem && + cp -p newcert.pem "$CERTDIR"/host.cert && + cp -p cacert.pem "$CERTDIR"/cacert.pem && + cp -p newkey.pem "$CERTDIR"/host.key && + ln -s cacert.pem "$CERTDIR"/`openssl x509 -hash -noout \ + -in cacert.pem`.0) + + retVal="$?" + rm -rf "$CAdir" + + return "$retVal" +} + sendmail_precmd() { # Die if there's pre-8.10 custom configuration file. This check is @@ -71,6 +185,17 @@ sendmail_precmd() /usr/bin/newaliases fi fi + + if checkyesno sendmail_cert_create && [ ! \( \ + -f "$CERTDIR/host.cert" -o -f "$CERTDIR/host.key" -o \ + -f "$CERTDIR/cacert.pem" \) ]; then + if ! openssl version >/dev/null 2>&1; then + warn "OpenSSL not available, but sendmail_cert_create is YES." + else + info Creating certificate for sendmail. + sendmail_cert_create + fi + fi } run_rc_command "$1" Modified: stable/10/etc/sendmail/freebsd.mc ============================================================================== --- stable/10/etc/sendmail/freebsd.mc Wed Oct 23 16:14:48 2013 (r256981) +++ stable/10/etc/sendmail/freebsd.mc Wed Oct 23 16:55:20 2013 (r256982) @@ -42,6 +42,11 @@ divert(-1) # /usr/share/sendmail/cf/README or # /usr/src/contrib/sendmail/cf/README # +# +# NOTE: If you enable RunAsUser, make sure that you adjust the permissions +# and owner of the SSL certificates and keys in /etc/mail/certs to be usable +# by that user. +# divert(0) VERSIONID(`$FreeBSD$') @@ -54,6 +59,16 @@ FEATURE(local_lmtp) FEATURE(mailertable, `hash -o /etc/mail/mailertable') FEATURE(virtusertable, `hash -o /etc/mail/virtusertable') +dnl Enable STARTTLS for receiving email. +define(`CERT_DIR', `/etc/mail/certs')dnl +define(`confSERVER_CERT', `CERT_DIR/host.cert')dnl +define(`confSERVER_KEY', `CERT_DIR/host.key')dnl +define(`confCLIENT_CERT', `CERT_DIR/host.cert')dnl +define(`confCLIENT_KEY', `CERT_DIR/host.key')dnl +define(`confCACERT', `CERT_DIR/cacert.pem')dnl +define(`confCACERT_PATH', `CERT_DIR')dnl +define(`confDH_PARAMETERS', `CERT_DIR/dh.param')dnl + dnl Uncomment to allow relaying based on your MX records. dnl NOTE: This can allow sites to use your server as a backup MX without dnl your permission. Modified: stable/10/share/man/man8/rc.sendmail.8 ============================================================================== --- stable/10/share/man/man8/rc.sendmail.8 Wed Oct 23 16:14:48 2013 (r256981) +++ stable/10/share/man/man8/rc.sendmail.8 Wed Oct 23 16:55:20 2013 (r256982) @@ -26,7 +26,7 @@ .\" .\" $FreeBSD$ .\" -.Dd March 30, 2002 +.Dd October 19, 2013 .Dt RC.SENDMAIL 8 .Os .Sh NAME @@ -119,6 +119,42 @@ The .Dq Li NONE option is deprecated and should not be used. It will be removed in a future release. +.It Va sendmail_cert_create +.Pq Vt str +If +.Va sendmail_enable +is set to +.Dq Li YES , +create a signed certificate +.Pa /etc/mail/certs/host.cert +representing +.Pa /etc/mail/certs/host.key +by the CA certificate in +.Pa /etc/mail/certs/cacert.pem . +This will enable connecting hosts to negotiate STARTTLS allowing incoming +email to be encrypted in transit. +.Xr sendmail 8 +needs to be configured to use these generated files. +The default configuration in +.Pa /etc/mail/freebsd.mc +has the required options in it. +.It Va sendmail_cert_cn +.Pq Vt str +If +.Va sendmail_enable +is set to +.Dq Li YES +and +.Va sendmail_cert_create +is set to +.Dq Li YES , +this is the Common Name (CN) of the certificate that will be created. +If +.Va sendmail_cert_cn +is not set, the system's hostname will be used. +If there is no hostname set, +.Dq Li amnesiac +will be used. .It Va sendmail_flags .Pq Vt str If From owner-svn-src-stable@FreeBSD.ORG Wed Oct 23 17:08:51 2013 Return-Path: Delivered-To: svn-src-stable@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [8.8.178.115]) (using TLSv1 with cipher ADH-AES256-SHA (256/256 bits)) (No client certificate requested) by hub.freebsd.org (Postfix) with ESMTP id 46A045A8; Wed, 23 Oct 2013 17:08:51 +0000 (UTC) (envelope-from mav@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:1900:2254:2068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mx1.freebsd.org (Postfix) with ESMTPS id 1941D2E2A; Wed, 23 Oct 2013 17:08:51 +0000 (UTC) Received: from svn.freebsd.org ([127.0.1.70]) by svn.freebsd.org (8.14.7/8.14.7) with ESMTP id r9NH8ovV061653; Wed, 23 Oct 2013 17:08:50 GMT (envelope-from mav@svn.freebsd.org) Received: (from mav@localhost) by svn.freebsd.org (8.14.7/8.14.5/Submit) id r9NH8oVP061652; Wed, 23 Oct 2013 17:08:50 GMT (envelope-from mav@svn.freebsd.org) Message-Id: <201310231708.r9NH8oVP061652@svn.freebsd.org> From: Alexander Motin Date: Wed, 23 Oct 2013 17:08:50 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-stable@freebsd.org, svn-src-stable-9@freebsd.org Subject: svn commit: r256988 - stable/9/sys/cam X-SVN-Group: stable-9 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-stable@freebsd.org X-Mailman-Version: 2.1.14 Precedence: list List-Id: SVN commit messages for all the -stable branches of the src tree List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 23 Oct 2013 17:08:51 -0000 Author: mav Date: Wed Oct 23 17:08:50 2013 New Revision: 256988 URL: http://svnweb.freebsd.org/changeset/base/256988 Log: MFC r256188: Close the race on path ID allocation in xpt_bus_register() if two buses are registered simultaneously. Due to topology unlock between the ID allocation and the bus registration there is a chance that two buses may get the same IDs. That is supposed reason of lock assertion panic in CAM during initial bus scanning after new iscsid initiates two sessions same time. Modified: stable/9/sys/cam/cam_xpt.c Directory Properties: stable/9/sys/ (props changed) Modified: stable/9/sys/cam/cam_xpt.c ============================================================================== --- stable/9/sys/cam/cam_xpt.c Wed Oct 23 17:04:09 2013 (r256987) +++ stable/9/sys/cam/cam_xpt.c Wed Oct 23 17:08:50 2013 (r256988) @@ -2450,7 +2450,7 @@ xptsetasyncbusfunc(struct cam_eb *bus, v struct ccb_setasync *csa = (struct ccb_setasync *)arg; xpt_compile_path(&path, /*periph*/NULL, - bus->sim->path_id, + bus->path_id, CAM_TARGET_WILDCARD, CAM_LUN_WILDCARD); xpt_setup_ccb(&cpi.ccb_h, &path, CAM_PRIORITY_NORMAL); @@ -3874,13 +3874,8 @@ xpt_bus_register(struct cam_sim *sim, de /* Couldn't satisfy request */ return (CAM_RESRC_UNAVAIL); } - if (strcmp(sim->sim_name, "xpt") != 0) { - sim->path_id = - xptpathid(sim->sim_name, sim->unit_number, sim->bus_id); - } TAILQ_INIT(&new_bus->et_entries); - new_bus->path_id = sim->path_id; cam_sim_hold(sim); new_bus->sim = sim; timevalclear(&new_bus->last_reset); @@ -3889,6 +3884,8 @@ xpt_bus_register(struct cam_sim *sim, de new_bus->generation = 0; xpt_lock_buses(); + sim->path_id = new_bus->path_id = + xptpathid(sim->sim_name, sim->unit_number, sim->bus_id); old_bus = TAILQ_FIRST(&xsoftc.xpt_busses); while (old_bus != NULL && old_bus->path_id < new_bus->path_id) @@ -3991,8 +3988,8 @@ xptnextfreepathid(void) path_id_t pathid; const char *strval; + mtx_assert(&xsoftc.xpt_topo_lock, MA_OWNED); pathid = 0; - xpt_lock_buses(); bus = TAILQ_FIRST(&xsoftc.xpt_busses); retry: /* Find an unoccupied pathid */ @@ -4001,7 +3998,6 @@ retry: pathid++; bus = TAILQ_NEXT(bus, links); } - xpt_unlock_buses(); /* * Ensure that this pathid is not reserved for @@ -4010,7 +4006,6 @@ retry: if (resource_string_value("scbus", pathid, "at", &strval) == 0) { ++pathid; /* Start the search over */ - xpt_lock_buses(); goto retry; } return (pathid); @@ -4026,6 +4021,8 @@ xptpathid(const char *sim_name, int sim_ pathid = CAM_XPT_PATH_ID; snprintf(buf, sizeof(buf), "%s%d", sim_name, sim_unit); + if (strcmp(buf, "xpt0") == 0 && sim_bus == 0) + return (pathid); i = 0; while ((resource_find_match(&i, &dname, &dunit, "at", buf)) == 0) { if (strcmp(dname, "scbus")) { From owner-svn-src-stable@FreeBSD.ORG Wed Oct 23 17:59:18 2013 Return-Path: Delivered-To: svn-src-stable@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) (using TLSv1 with cipher ADH-AES256-SHA (256/256 bits)) (No client certificate requested) by hub.freebsd.org (Postfix) with ESMTP id BB074377; Wed, 23 Oct 2013 17:59:18 +0000 (UTC) (envelope-from brooks@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:1900:2254:2068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mx1.freebsd.org (Postfix) with ESMTPS id 98D042178; Wed, 23 Oct 2013 17:59:18 +0000 (UTC) Received: from svn.freebsd.org ([127.0.1.70]) by svn.freebsd.org (8.14.7/8.14.7) with ESMTP id r9NHxIGO079905; Wed, 23 Oct 2013 17:59:18 GMT (envelope-from brooks@svn.freebsd.org) Received: (from brooks@localhost) by svn.freebsd.org (8.14.7/8.14.5/Submit) id r9NHxH40079900; Wed, 23 Oct 2013 17:59:17 GMT (envelope-from brooks@svn.freebsd.org) Message-Id: <201310231759.r9NHxH40079900@svn.freebsd.org> From: Brooks Davis Date: Wed, 23 Oct 2013 17:59:17 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-stable@freebsd.org, svn-src-stable-10@freebsd.org Subject: svn commit: r256996 - stable/10/contrib/mtree X-SVN-Group: stable-10 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-stable@freebsd.org X-Mailman-Version: 2.1.14 Precedence: list List-Id: SVN commit messages for all the -stable branches of the src tree List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 23 Oct 2013 17:59:18 -0000 Author: brooks Date: Wed Oct 23 17:59:17 2013 New Revision: 256996 URL: http://svnweb.freebsd.org/changeset/base/256996 Log: MFC r256687: Upgrade to the latest version of mtree from NetBSD. This revision re-removes the printing of size for non-regular files, supports type-less root (.) entries as seen in a couple ports, and corrects a bug in -N that caused expanded Subversion $FreeBSD$ strings in comments to be processed as /etc/group entries. Includes one trivial portability fix (including in three files) that has been committed upstream. Approved by: re (glebius) Modified: stable/10/contrib/mtree/compare.c stable/10/contrib/mtree/create.c stable/10/contrib/mtree/getid.c stable/10/contrib/mtree/spec.c Directory Properties: stable/10/contrib/mtree/ (props changed) Modified: stable/10/contrib/mtree/compare.c ============================================================================== --- stable/10/contrib/mtree/compare.c Wed Oct 23 17:55:35 2013 (r256995) +++ stable/10/contrib/mtree/compare.c Wed Oct 23 17:59:17 2013 (r256996) @@ -1,4 +1,4 @@ -/* $NetBSD: compare.c,v 1.55 2012/10/05 00:59:35 christos Exp $ */ +/* $NetBSD: compare.c,v 1.56 2013/09/09 23:27:43 christos Exp $ */ /*- * Copyright (c) 1989, 1993 @@ -38,7 +38,7 @@ #if 0 static char sccsid[] = "@(#)compare.c 8.1 (Berkeley) 6/6/93"; #else -__RCSID("$NetBSD: compare.c,v 1.55 2012/10/05 00:59:35 christos Exp $"); +__RCSID("$NetBSD: compare.c,v 1.56 2013/09/09 23:27:43 christos Exp $"); #endif #endif /* not lint */ @@ -47,6 +47,7 @@ __RCSID("$NetBSD: compare.c,v 1.55 2012/ #include #include +#include #include #include #include @@ -192,9 +193,9 @@ typeerr: LABEL; (s->type == F_BLOCK || s->type == F_CHAR) && s->st_rdev != p->fts_statp->st_rdev) { LABEL; - printf("%sdevice (%#llx, %#llx", - tab, (long long)s->st_rdev, - (long long)p->fts_statp->st_rdev); + printf("%sdevice (%#jx, %#jx", + tab, (uintmax_t)s->st_rdev, + (uintmax_t)p->fts_statp->st_rdev); if (uflag) { if ((unlink(p->fts_accpath) == -1) || (mknod(p->fts_accpath, @@ -283,9 +284,9 @@ typeerr: LABEL; } if (s->flags & F_SIZE && s->st_size != p->fts_statp->st_size) { LABEL; - printf("%ssize (%lld, %lld)\n", - tab, (long long)s->st_size, - (long long)p->fts_statp->st_size); + printf("%ssize (%ju, %ju)\n", + tab, (uintmax_t)s->st_size, + (uintmax_t)p->fts_statp->st_size); tab = "\t"; } /* Modified: stable/10/contrib/mtree/create.c ============================================================================== --- stable/10/contrib/mtree/create.c Wed Oct 23 17:55:35 2013 (r256995) +++ stable/10/contrib/mtree/create.c Wed Oct 23 17:59:17 2013 (r256996) @@ -1,4 +1,4 @@ -/* $NetBSD: create.c,v 1.69 2013/02/03 19:15:17 christos Exp $ */ +/* $NetBSD: create.c,v 1.71 2013/10/16 17:24:20 christos Exp $ */ /*- * Copyright (c) 1989, 1993 @@ -38,7 +38,7 @@ #if 0 static char sccsid[] = "@(#)create.c 8.1 (Berkeley) 6/6/93"; #else -__RCSID("$NetBSD: create.c,v 1.69 2013/02/03 19:15:17 christos Exp $"); +__RCSID("$NetBSD: create.c,v 1.71 2013/10/16 17:24:20 christos Exp $"); #endif #endif /* not lint */ @@ -53,6 +53,7 @@ __RCSID("$NetBSD: create.c,v 1.69 2013/0 #include #include #include +#include #include #include #include @@ -216,22 +217,22 @@ statf(int indent, FTSENT *p) p->fts_statp->st_mode & MBITS); if (keys & F_DEV && (S_ISBLK(p->fts_statp->st_mode) || S_ISCHR(p->fts_statp->st_mode))) - output(indent, &offset, "device=%#llx", - (long long)p->fts_statp->st_rdev); + output(indent, &offset, "device=%#jx", + (uintmax_t)p->fts_statp->st_rdev); if (keys & F_NLINK && p->fts_statp->st_nlink != 1) output(indent, &offset, "nlink=%u", p->fts_statp->st_nlink); if (keys & F_SIZE && - (flavor != F_NETBSD6 || S_ISREG(p->fts_statp->st_mode))) - output(indent, &offset, "size=%lld", - (long long)p->fts_statp->st_size); + (flavor == F_FREEBSD9 || S_ISREG(p->fts_statp->st_mode))) + output(indent, &offset, "size=%ju", + (uintmax_t)p->fts_statp->st_size); if (keys & F_TIME) #if defined(BSD4_4) && !defined(HAVE_NBTOOL_CONFIG_H) - output(indent, &offset, "time=%ld.%09ld", - (long)p->fts_statp->st_mtimespec.tv_sec, + output(indent, &offset, "time=%jd.%09ld", + (intmax_t)p->fts_statp->st_mtimespec.tv_sec, p->fts_statp->st_mtimespec.tv_nsec); #else - output(indent, &offset, "time=%ld.%09ld", - (long)p->fts_statp->st_mtime, (long)0); + output(indent, &offset, "time=%jd.%09ld", + (intmax_t)p->fts_statp->st_mtime, (long)0); #endif if (keys & F_CKSUM && S_ISREG(p->fts_statp->st_mode)) { if ((fd = open(p->fts_accpath, O_RDONLY, 0)) < 0 || Modified: stable/10/contrib/mtree/getid.c ============================================================================== --- stable/10/contrib/mtree/getid.c Wed Oct 23 17:55:35 2013 (r256995) +++ stable/10/contrib/mtree/getid.c Wed Oct 23 17:59:17 2013 (r256996) @@ -1,4 +1,4 @@ -/* $NetBSD: getid.c,v 1.7 2008/04/28 20:24:17 martin Exp $ */ +/* $NetBSD: getid.c,v 1.8 2013/10/16 17:27:42 christos Exp $ */ /* from: NetBSD: getpwent.c,v 1.48 2000/10/03 03:22:26 enami Exp */ /* from: NetBSD: getgrent.c,v 1.41 2002/01/12 23:51:30 lukem Exp */ @@ -65,7 +65,7 @@ #endif #include -__RCSID("$NetBSD: getid.c,v 1.7 2008/04/28 20:24:17 martin Exp $"); +__RCSID("$NetBSD: getid.c,v 1.8 2013/10/16 17:27:42 christos Exp $"); #include @@ -230,6 +230,9 @@ grscan(int search, gid_t gid, const char ; continue; } + /* skip comments */ + if (pwline[0] == '#') + continue; if (grmatchline(search, gid, name)) return 1; } @@ -371,6 +374,9 @@ pwscan(int search, uid_t uid, const char ; continue; } + /* skip comments */ + if (pwline[0] == '#') + continue; if (pwmatchline(search, uid, name)) return 1; } Modified: stable/10/contrib/mtree/spec.c ============================================================================== --- stable/10/contrib/mtree/spec.c Wed Oct 23 17:55:35 2013 (r256995) +++ stable/10/contrib/mtree/spec.c Wed Oct 23 17:59:17 2013 (r256996) @@ -1,4 +1,4 @@ -/* $NetBSD: spec.c,v 1.85 2012/12/20 16:43:16 christos Exp $ */ +/* $NetBSD: spec.c,v 1.87 2013/10/16 17:26:14 christos Exp $ */ /*- * Copyright (c) 1989, 1993 @@ -67,7 +67,7 @@ #if 0 static char sccsid[] = "@(#)spec.c 8.2 (Berkeley) 4/28/95"; #else -__RCSID("$NetBSD: spec.c,v 1.85 2012/12/20 16:43:16 christos Exp $"); +__RCSID("$NetBSD: spec.c,v 1.87 2013/10/16 17:26:14 christos Exp $"); #endif #endif /* not lint */ @@ -80,6 +80,7 @@ __RCSID("$NetBSD: spec.c,v 1.85 2012/12/ #include #include #include +#include #include #include #include @@ -217,6 +218,12 @@ noparent: mtree_err("no parent node"); /* * empty tree */ + /* + * Allow a bare "." root node by forcing it to + * type=dir for compatibility with FreeBSD. + */ + if (strcmp(centry->name, ".") == 0 && centry->type == 0) + centry->type = F_DIR; if (strcmp(centry->name, ".") != 0 || centry->type != F_DIR) mtree_err( @@ -350,16 +357,18 @@ dump_nodes(const char *dir, NODE *root, appendfield(pathlast, "mode=%#o", cur->st_mode); if (MATCHFLAG(F_DEV) && (cur->type == F_BLOCK || cur->type == F_CHAR)) - appendfield(pathlast, "device=%#llx", (long long)cur->st_rdev); + appendfield(pathlast, "device=%#jx", + (uintmax_t)cur->st_rdev); if (MATCHFLAG(F_NLINK)) appendfield(pathlast, "nlink=%d", cur->st_nlink); if (MATCHFLAG(F_SLINK)) appendfield(pathlast, "link=%s", vispath(cur->slink)); if (MATCHFLAG(F_SIZE)) - appendfield(pathlast, "size=%lld", (long long)cur->st_size); + appendfield(pathlast, "size=%ju", + (uintmax_t)cur->st_size); if (MATCHFLAG(F_TIME)) - appendfield(pathlast, "time=%lld.%09ld", - (long long)cur->st_mtimespec.tv_sec, + appendfield(pathlast, "time=%jd.%09ld", + (intmax_t)cur->st_mtimespec.tv_sec, cur->st_mtimespec.tv_nsec); if (MATCHFLAG(F_CKSUM)) appendfield(pathlast, "cksum=%lu", cur->cksum); From owner-svn-src-stable@FreeBSD.ORG Wed Oct 23 18:07:09 2013 Return-Path: Delivered-To: svn-src-stable@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) (using TLSv1 with cipher ADH-AES256-SHA (256/256 bits)) (No client certificate requested) by hub.freebsd.org (Postfix) with ESMTP id BB5C2A77; Wed, 23 Oct 2013 18:07:09 +0000 (UTC) (envelope-from bdrewery@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:1900:2254:2068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mx1.freebsd.org (Postfix) with ESMTPS id 990F4222B; Wed, 23 Oct 2013 18:07:09 +0000 (UTC) Received: from svn.freebsd.org ([127.0.1.70]) by svn.freebsd.org (8.14.7/8.14.7) with ESMTP id r9NI79eY083886; Wed, 23 Oct 2013 18:07:09 GMT (envelope-from bdrewery@svn.freebsd.org) Received: (from bdrewery@localhost) by svn.freebsd.org (8.14.7/8.14.5/Submit) id r9NI78EU083874; Wed, 23 Oct 2013 18:07:08 GMT (envelope-from bdrewery@svn.freebsd.org) Message-Id: <201310231807.r9NI78EU083874@svn.freebsd.org> From: Bryan Drewery Date: Wed, 23 Oct 2013 18:07:08 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-stable@freebsd.org, svn-src-stable-10@freebsd.org Subject: svn commit: r256998 - in stable/10: . lib/libyaml share/mk tools usr.sbin/pkg X-SVN-Group: stable-10 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-stable@freebsd.org X-Mailman-Version: 2.1.14 Precedence: list List-Id: SVN commit messages for all the -stable branches of the src tree List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 23 Oct 2013 18:07:09 -0000 Author: bdrewery (ports committer) Date: Wed Oct 23 18:07:07 2013 New Revision: 256998 URL: http://svnweb.freebsd.org/changeset/base/256998 Log: MFC r256450: Rename libbsdyml to libyaml, make private, and bump SHLIB_MAJOR to 1.0 Approved by: bapt Approved by: re (glebius) Deleted: stable/10/lib/libyaml/libbsdyml.3 Modified: stable/10/ObsoleteFiles.inc (contents, props changed) stable/10/UPDATING (contents, props changed) stable/10/lib/libyaml/Makefile stable/10/share/mk/bsd.libnames.mk stable/10/tools/make_libdeps.sh stable/10/usr.sbin/pkg/Makefile stable/10/usr.sbin/pkg/config.c Directory Properties: stable/10/lib/libyaml/ (props changed) stable/10/share/mk/ (props changed) stable/10/tools/ (props changed) stable/10/usr.sbin/pkg/ (props changed) Modified: stable/10/ObsoleteFiles.inc ============================================================================== --- stable/10/ObsoleteFiles.inc Wed Oct 23 17:59:46 2013 (r256997) +++ stable/10/ObsoleteFiles.inc Wed Oct 23 18:07:07 2013 (r256998) @@ -38,6 +38,17 @@ # xargs -n1 | sort | uniq -d; # done +# 20131014: libbsdyml becomes private +OLD_FILES+=usr/lib/libbsdyml.a +OLD_FILES+=usr/lib/libbsdyml.so +OLD_LIBS+=usr/lib/libbsdyml.so.0 +OLD_FILES+=usr/lib/libbsdyml_p.a +OLD_FILES+=usr/lib32/libbsdyml.a +OLD_FILES+=usr/lib32/libbsdyml.so +OLD_LIBS+=usr/lib32/libbsdyml.so.0 +OLD_FILES+=usr/lib32/libbsdyml_p.a +OLD_FILES+=usr/share/man/man3/libbsdyml.3.gz +OLD_FILES+=usr/include/bsdyml.h # 20131013: Removal of the ATF tools OLD_FILES+=etc/atf/FreeBSD.conf OLD_FILES+=etc/atf/atf-run.hooks Modified: stable/10/UPDATING ============================================================================== --- stable/10/UPDATING Wed Oct 23 17:59:46 2013 (r256997) +++ stable/10/UPDATING Wed Oct 23 18:07:07 2013 (r256998) @@ -16,6 +16,15 @@ from older versions of FreeBSD, try WITH stable/10, and then rebuild without this option. The bootstrap process from older version of current is a bit fragile. +20131014: + libbsdyml has been renamed to libyaml and moved to /usr/lib/private. + This will break ports-mgmt/pkg. Rebuild the port, or upgrade to pkg + 1.1.4_8 and verify bsdyml not linked in, before running "make + delete-old-libs": + # make -C /usr/ports/ports-mgmt/pkg build deinstall install clean + or + # pkg install pkg; ldd /usr/local/sbin/pkg | grep bsdyml + 20131010: The rc.d/jail script has been updated to support jail(8) configuration file. The "jail__*" rc.conf(5) variables Modified: stable/10/lib/libyaml/Makefile ============================================================================== --- stable/10/lib/libyaml/Makefile Wed Oct 23 17:59:46 2013 (r256997) +++ stable/10/lib/libyaml/Makefile Wed Oct 23 18:07:07 2013 (r256998) @@ -2,15 +2,13 @@ LIBYAML= ${.CURDIR}/../../contrib/libyaml -LIB= bsdyml -SHLIB_MAJOR= 0 -INCS= bsdyml.h +LIB= yaml +PRIVATELIB= true +SHLIB_MAJOR= 1 SRCS= api.c dumper.c emitter.c loader.c \ parser.c reader.c scanner.c writer.c -MAN= libbsdyml.3 .PATH: ${LIBYAML}/src ${LIBYAML}/include -CLEANFILES= bsdyml.h WARNS?= 1 CFLAGS+= -I${LIBYAML}/include \ @@ -18,7 +16,4 @@ CFLAGS+= -I${LIBYAML}/include \ -I${.CURDIR} \ -DHAVE_CONFIG_H -bsdyml.h: yaml.h - cp -f ${.ALLSRC} ${.TARGET} - .include Modified: stable/10/share/mk/bsd.libnames.mk ============================================================================== --- stable/10/share/mk/bsd.libnames.mk Wed Oct 23 17:59:46 2013 (r256997) +++ stable/10/share/mk/bsd.libnames.mk Wed Oct 23 18:07:07 2013 (r256998) @@ -21,7 +21,6 @@ LIBAVL?= ${DESTDIR}${LIBDIR}/libavl.a LIBBEGEMOT?= ${DESTDIR}${LIBDIR}/libbegemot.a LIBBLUETOOTH?= ${DESTDIR}${LIBDIR}/libbluetooth.a LIBBSDXML?= ${DESTDIR}${LIBDIR}/libbsdxml.a -LIBBSDYML?= ${DESTDIR}${LIBDIR}/libbsdyml.a LIBBSM?= ${DESTDIR}${LIBDIR}/libbsm.a LIBBSNMP?= ${DESTDIR}${LIBDIR}/libbsnmp.a LIBBZ2?= ${DESTDIR}${LIBDIR}/libbz2.a @@ -166,6 +165,7 @@ LIBWIND?= ${DESTDIR}${LIBDIR}/libwind.a LIBWRAP?= ${DESTDIR}${LIBDIR}/libwrap.a LIBXPG4?= ${DESTDIR}${LIBDIR}/libxpg4.a LIBY?= ${DESTDIR}${LIBDIR}/liby.a +LIBYAML?= ${DESTDIR}${LIBPRIVATEDIR}/libyaml.a LIBYPCLNT?= ${DESTDIR}${LIBDIR}/libypclnt.a LIBZ?= ${DESTDIR}${LIBDIR}/libz.a LIBZFS?= ${DESTDIR}${LIBDIR}/libzfs.a Modified: stable/10/tools/make_libdeps.sh ============================================================================== --- stable/10/tools/make_libdeps.sh Wed Oct 23 17:59:46 2013 (r256997) +++ stable/10/tools/make_libdeps.sh Wed Oct 23 18:07:07 2013 (r256998) @@ -48,7 +48,6 @@ sed -E -e's; ;! ;g' -e's;$;!;' -e's;-lbsdxml!;lib/libexpat;g' - -e's;-lbsdyml!;lib/libyaml;g' -e's;-lpthread!;lib/libthr;g' -e's;-lm!;lib/msun;g' -e's;-l(ncurses|termcap)!;lib/ncurses/ncurses;g' Modified: stable/10/usr.sbin/pkg/Makefile ============================================================================== --- stable/10/usr.sbin/pkg/Makefile Wed Oct 23 17:59:46 2013 (r256997) +++ stable/10/usr.sbin/pkg/Makefile Wed Oct 23 18:07:07 2013 (r256998) @@ -4,7 +4,10 @@ PROG= pkg SRCS= pkg.c dns_utils.c config.c NO_MAN= yes -DPADD= ${LIBARCHIVE} ${LIBELF} ${LIBFETCH} ${LIBBSDYML} ${LIBSBUF} -LDADD= -larchive -lelf -lfetch -lbsdyml -lsbuf +CFLAGS+=-I${.CURDIR}/../../contrib/libyaml/include +.PATH: ${.CURDIR}/../../contrib/libyaml/include +DPADD= ${LIBARCHIVE} ${LIBELF} ${LIBFETCH} ${LIBYAML} ${LIBSBUF} +LDADD= -larchive -lelf -lfetch -lyaml -lsbuf +USEPRIVATELIB= yaml .include Modified: stable/10/usr.sbin/pkg/config.c ============================================================================== --- stable/10/usr.sbin/pkg/config.c Wed Oct 23 17:59:46 2013 (r256997) +++ stable/10/usr.sbin/pkg/config.c Wed Oct 23 18:07:07 2013 (r256998) @@ -33,7 +33,7 @@ __FBSDID("$FreeBSD$"); #include #include -#include +#include #include #include #include From owner-svn-src-stable@FreeBSD.ORG Thu Oct 24 05:01:49 2013 Return-Path: Delivered-To: svn-src-stable@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) (using TLSv1 with cipher ADH-AES256-SHA (256/256 bits)) (No client certificate requested) by hub.freebsd.org (Postfix) with ESMTP id BC90E402; Thu, 24 Oct 2013 05:01:49 +0000 (UTC) (envelope-from delphij@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:1900:2254:2068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mx1.freebsd.org (Postfix) with ESMTPS id A90AD28F0; Thu, 24 Oct 2013 05:01:49 +0000 (UTC) Received: from svn.freebsd.org ([127.0.1.70]) by svn.freebsd.org (8.14.7/8.14.7) with ESMTP id r9O51nPn011293; Thu, 24 Oct 2013 05:01:49 GMT (envelope-from delphij@svn.freebsd.org) Received: (from delphij@localhost) by svn.freebsd.org (8.14.7/8.14.5/Submit) id r9O51nu7011292; Thu, 24 Oct 2013 05:01:49 GMT (envelope-from delphij@svn.freebsd.org) Message-Id: <201310240501.r9O51nu7011292@svn.freebsd.org> From: Xin LI Date: Thu, 24 Oct 2013 05:01:49 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-stable@freebsd.org, svn-src-stable-10@freebsd.org Subject: svn commit: r257039 - stable/10/lib/libc/iconv X-SVN-Group: stable-10 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-stable@freebsd.org X-Mailman-Version: 2.1.14 Precedence: list List-Id: SVN commit messages for all the -stable branches of the src tree List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 24 Oct 2013 05:01:49 -0000 Author: delphij Date: Thu Oct 24 05:01:49 2013 New Revision: 257039 URL: http://svnweb.freebsd.org/changeset/base/257039 Log: MFC r256833: Drop cm_lock before calling mapper_close, which in turn could call _citrus_mapper_close again and result in a deadlock otherwise. This is similar to NetBSD PR/24023 (fixed in their r1.5 of this file). PR: bin/182994 Submitted by: Fabian Keil Approved by: re (hrs) Modified: stable/10/lib/libc/iconv/citrus_mapper.c Directory Properties: stable/10/lib/libc/ (props changed) Modified: stable/10/lib/libc/iconv/citrus_mapper.c ============================================================================== --- stable/10/lib/libc/iconv/citrus_mapper.c Thu Oct 24 03:36:39 2013 (r257038) +++ stable/10/lib/libc/iconv/citrus_mapper.c Thu Oct 24 05:01:49 2013 (r257039) @@ -381,7 +381,9 @@ _citrus_mapper_close(struct _citrus_mapp _CITRUS_HASH_REMOVE(cm, cm_entry); free(cm->cm_key); } + UNLOCK(&cm_lock); mapper_close(cm); + return; quit: UNLOCK(&cm_lock); } From owner-svn-src-stable@FreeBSD.ORG Thu Oct 24 06:06:20 2013 Return-Path: Delivered-To: svn-src-stable@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) (using TLSv1 with cipher ADH-AES256-SHA (256/256 bits)) (No client certificate requested) by hub.freebsd.org (Postfix) with ESMTP id 211FE1F9; Thu, 24 Oct 2013 06:06:20 +0000 (UTC) (envelope-from hselasky@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:1900:2254:2068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mx1.freebsd.org (Postfix) with ESMTPS id F2CBF2B9E; Thu, 24 Oct 2013 06:06:19 +0000 (UTC) Received: from svn.freebsd.org ([127.0.1.70]) by svn.freebsd.org (8.14.7/8.14.7) with ESMTP id r9O66JJ5031929; Thu, 24 Oct 2013 06:06:19 GMT (envelope-from hselasky@svn.freebsd.org) Received: (from hselasky@localhost) by svn.freebsd.org (8.14.7/8.14.5/Submit) id r9O66HXB031913; Thu, 24 Oct 2013 06:06:17 GMT (envelope-from hselasky@svn.freebsd.org) Message-Id: <201310240606.r9O66HXB031913@svn.freebsd.org> From: Hans Petter Selasky Date: Thu, 24 Oct 2013 06:06:17 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-stable@freebsd.org, svn-src-stable-9@freebsd.org Subject: svn commit: r257040 - in stable/9/sys: dev/usb dev/usb/controller mips/cavium/usb X-SVN-Group: stable-9 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-stable@freebsd.org X-Mailman-Version: 2.1.14 Precedence: list List-Id: SVN commit messages for all the -stable branches of the src tree List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 24 Oct 2013 06:06:20 -0000 Author: hselasky Date: Thu Oct 24 06:06:17 2013 New Revision: 257040 URL: http://svnweb.freebsd.org/changeset/base/257040 Log: MFC r241082: Inherit USB mode from RootHUB port where the USB device is connected. Only RootHUB ports can be dual mode. Disallow OTG ports on external HUBs. This simplifies some checks in the USB controller drivers. Modified: stable/9/sys/dev/usb/controller/at91dci.c stable/9/sys/dev/usb/controller/atmegadci.c stable/9/sys/dev/usb/controller/avr32dci.c stable/9/sys/dev/usb/controller/ehci.c stable/9/sys/dev/usb/controller/musb_otg.c stable/9/sys/dev/usb/controller/ohci.c stable/9/sys/dev/usb/controller/uhci.c stable/9/sys/dev/usb/controller/uss820dci.c stable/9/sys/dev/usb/controller/xhci.c stable/9/sys/dev/usb/usb_hub.c stable/9/sys/mips/cavium/usb/octusb.c Directory Properties: stable/9/sys/ (props changed) stable/9/sys/dev/ (props changed) Modified: stable/9/sys/dev/usb/controller/at91dci.c ============================================================================== --- stable/9/sys/dev/usb/controller/at91dci.c Thu Oct 24 05:01:49 2013 (r257039) +++ stable/9/sys/dev/usb/controller/at91dci.c Thu Oct 24 06:06:17 2013 (r257040) @@ -2277,10 +2277,6 @@ at91dci_ep_init(struct usb_device *udev, if (udev->device_index != sc->sc_rt_addr) { - if (udev->flags.usb_mode != USB_MODE_DEVICE) { - /* not supported */ - return; - } if (udev->speed != USB_SPEED_FULL) { /* not supported */ return; Modified: stable/9/sys/dev/usb/controller/atmegadci.c ============================================================================== --- stable/9/sys/dev/usb/controller/atmegadci.c Thu Oct 24 05:01:49 2013 (r257039) +++ stable/9/sys/dev/usb/controller/atmegadci.c Thu Oct 24 06:06:17 2013 (r257040) @@ -2110,10 +2110,6 @@ atmegadci_ep_init(struct usb_device *ude if (udev->device_index != sc->sc_rt_addr) { - if (udev->flags.usb_mode != USB_MODE_DEVICE) { - /* not supported */ - return; - } if (udev->speed != USB_SPEED_FULL) { /* not supported */ return; Modified: stable/9/sys/dev/usb/controller/avr32dci.c ============================================================================== --- stable/9/sys/dev/usb/controller/avr32dci.c Thu Oct 24 05:01:49 2013 (r257039) +++ stable/9/sys/dev/usb/controller/avr32dci.c Thu Oct 24 06:06:17 2013 (r257040) @@ -2054,10 +2054,6 @@ avr32dci_ep_init(struct usb_device *udev if (udev->device_index != sc->sc_rt_addr) { - if (udev->flags.usb_mode != USB_MODE_DEVICE) { - /* not supported */ - return; - } if ((udev->speed != USB_SPEED_FULL) && (udev->speed != USB_SPEED_HIGH)) { /* not supported */ Modified: stable/9/sys/dev/usb/controller/ehci.c ============================================================================== --- stable/9/sys/dev/usb/controller/ehci.c Thu Oct 24 05:01:49 2013 (r257039) +++ stable/9/sys/dev/usb/controller/ehci.c Thu Oct 24 06:06:17 2013 (r257040) @@ -3705,10 +3705,6 @@ ehci_ep_init(struct usb_device *udev, st edesc->bEndpointAddress, udev->flags.usb_mode, sc->sc_addr); - if (udev->flags.usb_mode != USB_MODE_HOST) { - /* not supported */ - return; - } if (udev->device_index != sc->sc_addr) { if ((udev->speed != USB_SPEED_HIGH) && Modified: stable/9/sys/dev/usb/controller/musb_otg.c ============================================================================== --- stable/9/sys/dev/usb/controller/musb_otg.c Thu Oct 24 05:01:49 2013 (r257039) +++ stable/9/sys/dev/usb/controller/musb_otg.c Thu Oct 24 06:06:17 2013 (r257040) @@ -2746,10 +2746,6 @@ musbotg_ep_init(struct usb_device *udev, if (udev->device_index != sc->sc_rt_addr) { - if (udev->flags.usb_mode != USB_MODE_DEVICE) { - /* not supported */ - return; - } if ((udev->speed != USB_SPEED_FULL) && (udev->speed != USB_SPEED_HIGH)) { /* not supported */ Modified: stable/9/sys/dev/usb/controller/ohci.c ============================================================================== --- stable/9/sys/dev/usb/controller/ohci.c Thu Oct 24 05:01:49 2013 (r257039) +++ stable/9/sys/dev/usb/controller/ohci.c Thu Oct 24 06:06:17 2013 (r257040) @@ -2314,6 +2314,7 @@ ohci_roothub_exec(struct usb_device *ude } v = OREAD4(sc, OHCI_RH_PORT_STATUS(index)); DPRINTFN(9, "port status=0x%04x\n", v); + v &= ~UPS_PORT_MODE_DEVICE; /* force host mode */ USETW(sc->sc_hub_desc.ps.wPortStatus, v); USETW(sc->sc_hub_desc.ps.wPortChange, v >> 16); len = sizeof(sc->sc_hub_desc.ps); @@ -2550,10 +2551,6 @@ ohci_ep_init(struct usb_device *udev, st edesc->bEndpointAddress, udev->flags.usb_mode, sc->sc_addr); - if (udev->flags.usb_mode != USB_MODE_HOST) { - /* not supported */ - return; - } if (udev->device_index != sc->sc_addr) { switch (edesc->bmAttributes & UE_XFERTYPE) { case UE_CONTROL: Modified: stable/9/sys/dev/usb/controller/uhci.c ============================================================================== --- stable/9/sys/dev/usb/controller/uhci.c Thu Oct 24 05:01:49 2013 (r257039) +++ stable/9/sys/dev/usb/controller/uhci.c Thu Oct 24 06:06:17 2013 (r257040) @@ -3029,10 +3029,6 @@ uhci_ep_init(struct usb_device *udev, st edesc->bEndpointAddress, udev->flags.usb_mode, sc->sc_addr); - if (udev->flags.usb_mode != USB_MODE_HOST) { - /* not supported */ - return; - } if (udev->device_index != sc->sc_addr) { switch (edesc->bmAttributes & UE_XFERTYPE) { case UE_CONTROL: Modified: stable/9/sys/dev/usb/controller/uss820dci.c ============================================================================== --- stable/9/sys/dev/usb/controller/uss820dci.c Thu Oct 24 05:01:49 2013 (r257039) +++ stable/9/sys/dev/usb/controller/uss820dci.c Thu Oct 24 06:06:17 2013 (r257040) @@ -2331,10 +2331,6 @@ uss820dci_ep_init(struct usb_device *ude if (udev->device_index != sc->sc_rt_addr) { - if (udev->flags.usb_mode != USB_MODE_DEVICE) { - /* not supported */ - return; - } if (udev->speed != USB_SPEED_FULL) { /* not supported */ return; Modified: stable/9/sys/dev/usb/controller/xhci.c ============================================================================== --- stable/9/sys/dev/usb/controller/xhci.c Thu Oct 24 05:01:49 2013 (r257039) +++ stable/9/sys/dev/usb/controller/xhci.c Thu Oct 24 06:06:17 2013 (r257040) @@ -3742,10 +3742,6 @@ xhci_ep_init(struct usb_device *udev, st DPRINTFN(2, "endpoint=%p, addr=%d, endpt=%d, mode=%d\n", ep, udev->address, edesc->bEndpointAddress, udev->flags.usb_mode); - if (udev->flags.usb_mode != USB_MODE_HOST) { - /* not supported */ - return; - } if (udev->parent_hub == NULL) { /* root HUB has special endpoint handling */ return; Modified: stable/9/sys/dev/usb/usb_hub.c ============================================================================== --- stable/9/sys/dev/usb/usb_hub.c Thu Oct 24 05:01:49 2013 (r257039) +++ stable/9/sys/dev/usb/usb_hub.c Thu Oct 24 06:06:17 2013 (r257040) @@ -519,7 +519,10 @@ repeat: * * NOTE: This part is currently FreeBSD specific. */ - if (sc->sc_st.port_status & UPS_PORT_MODE_DEVICE) + if (udev->parent_hub != NULL) { + /* inherit mode from the parent HUB */ + mode = udev->parent_hub->flags.usb_mode; + } else if (sc->sc_st.port_status & UPS_PORT_MODE_DEVICE) mode = USB_MODE_DEVICE; else mode = USB_MODE_HOST; Modified: stable/9/sys/mips/cavium/usb/octusb.c ============================================================================== --- stable/9/sys/mips/cavium/usb/octusb.c Thu Oct 24 05:01:49 2013 (r257039) +++ stable/9/sys/mips/cavium/usb/octusb.c Thu Oct 24 06:06:17 2013 (r257040) @@ -1851,10 +1851,6 @@ octusb_ep_init(struct usb_device *udev, ep, udev->address, edesc->bEndpointAddress, udev->flags.usb_mode, sc->sc_addr); - if (udev->flags.usb_mode != USB_MODE_HOST) { - /* not supported */ - return; - } if (udev->device_index != sc->sc_addr) { switch (edesc->bmAttributes & UE_XFERTYPE) { case UE_CONTROL: From owner-svn-src-stable@FreeBSD.ORG Thu Oct 24 06:22:43 2013 Return-Path: Delivered-To: svn-src-stable@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [8.8.178.115]) (using TLSv1 with cipher ADH-AES256-SHA (256/256 bits)) (No client certificate requested) by hub.freebsd.org (Postfix) with ESMTP id EA1317B8; Thu, 24 Oct 2013 06:22:43 +0000 (UTC) (envelope-from hselasky@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:1900:2254:2068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mx1.freebsd.org (Postfix) with ESMTPS id C96962C94; Thu, 24 Oct 2013 06:22:43 +0000 (UTC) Received: from svn.freebsd.org ([127.0.1.70]) by svn.freebsd.org (8.14.7/8.14.7) with ESMTP id r9O6MhZa038740; Thu, 24 Oct 2013 06:22:43 GMT (envelope-from hselasky@svn.freebsd.org) Received: (from hselasky@localhost) by svn.freebsd.org (8.14.7/8.14.5/Submit) id r9O6Mh7s038738; Thu, 24 Oct 2013 06:22:43 GMT (envelope-from hselasky@svn.freebsd.org) Message-Id: <201310240622.r9O6Mh7s038738@svn.freebsd.org> From: Hans Petter Selasky Date: Thu, 24 Oct 2013 06:22:43 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-stable@freebsd.org, svn-src-stable-9@freebsd.org Subject: svn commit: r257041 - stable/9/sys/dev/usb/controller X-SVN-Group: stable-9 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-stable@freebsd.org X-Mailman-Version: 2.1.14 Precedence: list List-Id: SVN commit messages for all the -stable branches of the src tree List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 24 Oct 2013 06:22:44 -0000 Author: hselasky Date: Thu Oct 24 06:22:43 2013 New Revision: 257041 URL: http://svnweb.freebsd.org/changeset/base/257041 Log: MFC r252912, r254828 and r256548: Add host mode support to the Mentor Graphics USB OTG controller driver. PR: usb/181987 Modified: stable/9/sys/dev/usb/controller/musb_otg.c stable/9/sys/dev/usb/controller/musb_otg.h stable/9/sys/dev/usb/controller/musb_otg_atmelarm.c Directory Properties: stable/9/sys/ (props changed) stable/9/sys/dev/ (props changed) Modified: stable/9/sys/dev/usb/controller/musb_otg.c ============================================================================== --- stable/9/sys/dev/usb/controller/musb_otg.c Thu Oct 24 06:06:17 2013 (r257040) +++ stable/9/sys/dev/usb/controller/musb_otg.c Thu Oct 24 06:22:43 2013 (r257041) @@ -90,6 +90,8 @@ SYSCTL_INT(_hw_usb_musbotg, OID_AUTO, de &musbotgdebug, 0, "Debug level"); #endif +#define MAX_NAK_TO 16 + /* prototypes */ struct usb_bus_methods musbotg_bus_methods; @@ -98,17 +100,35 @@ struct usb_pipe_methods musbotg_device_c struct usb_pipe_methods musbotg_device_intr_methods; struct usb_pipe_methods musbotg_device_isoc_methods; -static musbotg_cmd_t musbotg_setup_rx; -static musbotg_cmd_t musbotg_setup_data_rx; -static musbotg_cmd_t musbotg_setup_data_tx; -static musbotg_cmd_t musbotg_setup_status; -static musbotg_cmd_t musbotg_data_rx; -static musbotg_cmd_t musbotg_data_tx; +/* Control transfers: Device mode */ +static musbotg_cmd_t musbotg_dev_ctrl_setup_rx; +static musbotg_cmd_t musbotg_dev_ctrl_data_rx; +static musbotg_cmd_t musbotg_dev_ctrl_data_tx; +static musbotg_cmd_t musbotg_dev_ctrl_status; + +/* Control transfers: Host mode */ +static musbotg_cmd_t musbotg_host_ctrl_setup_tx; +static musbotg_cmd_t musbotg_host_ctrl_data_rx; +static musbotg_cmd_t musbotg_host_ctrl_data_tx; +static musbotg_cmd_t musbotg_host_ctrl_status_rx; +static musbotg_cmd_t musbotg_host_ctrl_status_tx; + +/* Bulk, Interrupt, Isochronous: Device mode */ +static musbotg_cmd_t musbotg_dev_data_rx; +static musbotg_cmd_t musbotg_dev_data_tx; + +/* Bulk, Interrupt, Isochronous: Host mode */ +static musbotg_cmd_t musbotg_host_data_rx; +static musbotg_cmd_t musbotg_host_data_tx; + static void musbotg_device_done(struct usb_xfer *, usb_error_t); static void musbotg_do_poll(struct usb_bus *); static void musbotg_standard_done(struct usb_xfer *); static void musbotg_interrupt_poll(struct musbotg_softc *); static void musbotg_root_intr(struct musbotg_softc *); +static int musbotg_channel_alloc(struct musbotg_softc *, struct musbotg_td *td); +static void musbotg_channel_free(struct musbotg_softc *, struct musbotg_td *td); +static void musbotg_ep_int_set(struct musbotg_softc *sc, int channel, int on); /* * Here is a configuration that the chip supports. @@ -123,6 +143,64 @@ static const struct usb_hw_ep_profile mu } }; +static int +musbotg_channel_alloc(struct musbotg_softc *sc, struct musbotg_td *td) +{ + int ch; + int ep; + + ep = td->ep_no; + + /* In device mode each EP got its own channel */ + if (sc->sc_mode == MUSB2_DEVICE_MODE) { + musbotg_ep_int_set(sc, ep, 1); + return (ep); + } + + /* + * All control transactions go through EP0 + */ + if (ep == 0) { + if (sc->sc_channel_mask & (1 << 0)) + return (-1); + sc->sc_channel_mask |= (1 << 0); + musbotg_ep_int_set(sc, ep, 1); + return (0); + } + + for (ch = 1; ch < MUSB2_EP_MAX; ch++) { + if (!(sc->sc_channel_mask & (1 << ch))) { + sc->sc_channel_mask |= (1 << ch); + musbotg_ep_int_set(sc, ch, 1); + return (ch); + } + } + + DPRINTFN(-1, "No available channels. Mask: %04x\n", sc->sc_channel_mask); + + return (-1); +} + +static void +musbotg_channel_free(struct musbotg_softc *sc, struct musbotg_td *td) +{ + + DPRINTFN(1, "ep_no=%d\n", td->channel); + + if (sc->sc_mode == MUSB2_DEVICE_MODE) + return; + + if (td == NULL) + return; + if (td->channel == -1) + return; + + musbotg_ep_int_set(sc, td->channel, 0); + sc->sc_channel_mask &= ~(1 << td->channel); + + td->channel = -1; +} + static void musbotg_get_hw_ep_profile(struct usb_device *udev, const struct usb_hw_ep_profile **ppf, uint8_t ep_addr) @@ -213,6 +291,46 @@ musbotg_pull_down(struct musbotg_softc * } static void +musbotg_suspend_host(struct musbotg_softc *sc) +{ + uint8_t temp; + + if (sc->sc_flags.status_suspend) { + return; + } + + temp = MUSB2_READ_1(sc, MUSB2_REG_POWER); + temp |= MUSB2_MASK_SUSPMODE; + MUSB2_WRITE_1(sc, MUSB2_REG_POWER, temp); + sc->sc_flags.status_suspend = 1; +} + +static void +musbotg_wakeup_host(struct musbotg_softc *sc) +{ + uint8_t temp; + + if (!(sc->sc_flags.status_suspend)) { + return; + } + + temp = MUSB2_READ_1(sc, MUSB2_REG_POWER); + temp &= ~MUSB2_MASK_SUSPMODE; + temp |= MUSB2_MASK_RESUME; + MUSB2_WRITE_1(sc, MUSB2_REG_POWER, temp); + + /* wait 20 milliseconds */ + /* Wait for reset to complete. */ + usb_pause_mtx(&sc->sc_bus.bus_mtx, hz / 50); + + temp = MUSB2_READ_1(sc, MUSB2_REG_POWER); + temp &= ~MUSB2_MASK_RESUME; + MUSB2_WRITE_1(sc, MUSB2_REG_POWER, temp); + + sc->sc_flags.status_suspend = 0; +} + +static void musbotg_wakeup_peer(struct musbotg_softc *sc) { uint8_t temp; @@ -243,7 +361,7 @@ musbotg_set_address(struct musbotg_softc } static uint8_t -musbotg_setup_rx(struct musbotg_td *td) +musbotg_dev_ctrl_setup_rx(struct musbotg_td *td) { struct musbotg_softc *sc; struct usb_device_request req; @@ -253,6 +371,15 @@ musbotg_setup_rx(struct musbotg_td *td) /* get pointer to softc */ sc = MUSBOTG_PC2SC(td->pc); + if (td->channel == -1) + td->channel = musbotg_channel_alloc(sc, td); + + /* EP0 is busy, wait */ + if (td->channel == -1) + return (1); + + DPRINTFN(1, "ep_no=%d\n", td->channel); + /* select endpoint 0 */ MUSB2_WRITE_1(sc, MUSB2_REG_EPINDEX, 0); @@ -269,8 +396,10 @@ musbotg_setup_rx(struct musbotg_td *td) /* do not stall at this point */ td->did_stall = 1; /* wait for interrupt */ + DPRINTFN(0, "CSR0 DATAEND\n"); goto not_complete; } + if (csr & MUSB2_MASK_CSR0L_SENTSTALL) { /* clear SENTSTALL */ MUSB2_WRITE_1(sc, MUSB2_REG_TXCSRL, 0); @@ -289,6 +418,7 @@ musbotg_setup_rx(struct musbotg_td *td) sc->sc_ep0_busy = 0; } if (sc->sc_ep0_busy) { + DPRINTFN(0, "EP0 BUSY\n"); goto not_complete; } if (!(csr & MUSB2_MASK_CSR0L_RXPKTRDY)) { @@ -337,6 +467,8 @@ musbotg_setup_rx(struct musbotg_td *td) } else { sc->sc_dv_addr = 0xFF; } + + musbotg_channel_free(sc, td); return (0); /* complete */ not_complete: @@ -350,10 +482,117 @@ not_complete: return (1); /* not complete */ } +static uint8_t +musbotg_host_ctrl_setup_tx(struct musbotg_td *td) +{ + struct musbotg_softc *sc; + struct usb_device_request req; + uint8_t csr, csrh; + + /* get pointer to softc */ + sc = MUSBOTG_PC2SC(td->pc); + + if (td->channel == -1) + td->channel = musbotg_channel_alloc(sc, td); + + /* EP0 is busy, wait */ + if (td->channel == -1) + return (1); + + DPRINTFN(1, "ep_no=%d\n", td->channel); + + /* select endpoint 0 */ + MUSB2_WRITE_1(sc, MUSB2_REG_EPINDEX, 0); + + /* read out FIFO status */ + csr = MUSB2_READ_1(sc, MUSB2_REG_TXCSRL); + DPRINTFN(4, "csr=0x%02x\n", csr); + + /* Not ready yet yet */ + if (csr & MUSB2_MASK_CSR0L_TXPKTRDY) + return (1); + + /* Failed */ + if (csr & (MUSB2_MASK_CSR0L_RXSTALL | + MUSB2_MASK_CSR0L_ERROR)) + { + /* Clear status bit */ + MUSB2_WRITE_1(sc, MUSB2_REG_TXCSRL, 0); + DPRINTFN(1, "error bit set, csr=0x%02x\n", csr); + td->error = 1; + } + + if (csr & MUSB2_MASK_CSR0L_NAKTIMO) { + DPRINTFN(1, "NAK timeout\n"); + + if (csr & MUSB2_MASK_CSR0L_TXFIFONEMPTY) { + csrh = MUSB2_READ_1(sc, MUSB2_REG_TXCSRH); + csrh |= MUSB2_MASK_CSR0H_FFLUSH; + MUSB2_WRITE_1(sc, MUSB2_REG_TXCSRH, csrh); + csr = MUSB2_READ_1(sc, MUSB2_REG_TXCSRL); + if (csr & MUSB2_MASK_CSR0L_TXFIFONEMPTY) { + csrh = MUSB2_READ_1(sc, MUSB2_REG_TXCSRH); + csrh |= MUSB2_MASK_CSR0H_FFLUSH; + MUSB2_WRITE_1(sc, MUSB2_REG_TXCSRH, csrh); + csr = MUSB2_READ_1(sc, MUSB2_REG_TXCSRL); + } + } + + csr &= ~MUSB2_MASK_CSR0L_NAKTIMO; + MUSB2_WRITE_1(sc, MUSB2_REG_TXCSRL, csr); + + td->error = 1; + } + + if (td->error) { + musbotg_channel_free(sc, td); + return (0); + } + + /* Fifo is not empty and there is no NAK timeout */ + if (csr & MUSB2_MASK_CSR0L_TXPKTRDY) + return (1); + + /* check if we are complete */ + if (td->remainder == 0) { + /* we are complete */ + musbotg_channel_free(sc, td); + return (0); + } + + /* copy data into real buffer */ + usbd_copy_out(td->pc, 0, &req, sizeof(req)); + + /* send data */ + bus_space_write_multi_1(sc->sc_io_tag, sc->sc_io_hdl, + MUSB2_REG_EPFIFO(0), (void *)&req, sizeof(req)); + + /* update offset and remainder */ + td->offset += sizeof(req); + td->remainder -= sizeof(req); + + + MUSB2_WRITE_1(sc, MUSB2_REG_TXNAKLIMIT, MAX_NAK_TO); + MUSB2_WRITE_1(sc, MUSB2_REG_TXFADDR(0), td->dev_addr); + MUSB2_WRITE_1(sc, MUSB2_REG_TXHADDR(0), td->haddr); + MUSB2_WRITE_1(sc, MUSB2_REG_TXHUBPORT(0), td->hport); + MUSB2_WRITE_1(sc, MUSB2_REG_TXTI, td->transfer_type); + + /* write command */ + MUSB2_WRITE_1(sc, MUSB2_REG_TXCSRL, + MUSB2_MASK_CSR0L_TXPKTRDY | + MUSB2_MASK_CSR0L_SETUPPKT); + + /* Just to be consistent, not used above */ + td->transaction_started = 1; + + return (1); /* in progress */ +} + /* Control endpoint only data handling functions (RX/TX/SYNC) */ static uint8_t -musbotg_setup_data_rx(struct musbotg_td *td) +musbotg_dev_ctrl_data_rx(struct musbotg_td *td) { struct usb_page_search buf_res; struct musbotg_softc *sc; @@ -496,7 +735,7 @@ musbotg_setup_data_rx(struct musbotg_td } static uint8_t -musbotg_setup_data_tx(struct musbotg_td *td) +musbotg_dev_ctrl_data_tx(struct musbotg_td *td) { struct usb_page_search buf_res; struct musbotg_softc *sc; @@ -614,77 +853,943 @@ musbotg_setup_data_tx(struct musbotg_td } static uint8_t -musbotg_setup_status(struct musbotg_td *td) +musbotg_host_ctrl_data_rx(struct musbotg_td *td) { + struct usb_page_search buf_res; struct musbotg_softc *sc; + uint16_t count; uint8_t csr; + uint8_t got_short; /* get pointer to softc */ sc = MUSBOTG_PC2SC(td->pc); + if (td->channel == -1) + td->channel = musbotg_channel_alloc(sc, td); + + /* EP0 is busy, wait */ + if (td->channel == -1) + return (1); + + DPRINTFN(1, "ep_no=%d\n", td->channel); + /* select endpoint 0 */ MUSB2_WRITE_1(sc, MUSB2_REG_EPINDEX, 0); - if (sc->sc_ep0_busy) { - sc->sc_ep0_busy = 0; - sc->sc_ep0_cmd |= MUSB2_MASK_CSR0L_DATAEND; - MUSB2_WRITE_1(sc, MUSB2_REG_TXCSRL, sc->sc_ep0_cmd); - sc->sc_ep0_cmd = 0; - } /* read out FIFO status */ csr = MUSB2_READ_1(sc, MUSB2_REG_TXCSRL); DPRINTFN(4, "csr=0x%02x\n", csr); - if (csr & MUSB2_MASK_CSR0L_DATAEND) { - /* wait for interrupt */ - return (1); /* not complete */ + got_short = 0; + if (!td->transaction_started) { + td->transaction_started = 1; + + MUSB2_WRITE_1(sc, MUSB2_REG_RXNAKLIMIT, MAX_NAK_TO); + + MUSB2_WRITE_1(sc, MUSB2_REG_RXFADDR(0), + td->dev_addr); + MUSB2_WRITE_1(sc, MUSB2_REG_RXHADDR(0), td->haddr); + MUSB2_WRITE_1(sc, MUSB2_REG_RXHUBPORT(0), td->hport); + MUSB2_WRITE_1(sc, MUSB2_REG_RXTI, td->transfer_type); + + MUSB2_WRITE_1(sc, MUSB2_REG_TXCSRL, + MUSB2_MASK_CSR0L_REQPKT); + + return (1); + } + + if (csr & MUSB2_MASK_CSR0L_NAKTIMO) { + csr &= ~MUSB2_MASK_CSR0L_REQPKT; + MUSB2_WRITE_1(sc, MUSB2_REG_TXCSRL, csr); + + csr &= ~MUSB2_MASK_CSR0L_NAKTIMO; + MUSB2_WRITE_1(sc, MUSB2_REG_TXCSRL, csr); + + td->error = 1; + } + + /* Failed */ + if (csr & (MUSB2_MASK_CSR0L_RXSTALL | + MUSB2_MASK_CSR0L_ERROR)) + { + /* Clear status bit */ + MUSB2_WRITE_1(sc, MUSB2_REG_TXCSRL, 0); + DPRINTFN(1, "error bit set, csr=0x%02x\n", csr); + td->error = 1; + } + + if (td->error) { + musbotg_channel_free(sc, td); + return (0); /* we are complete */ + } + + if (!(csr & MUSB2_MASK_CSR0L_RXPKTRDY)) + return (1); /* not yet */ + + /* get the packet byte count */ + count = MUSB2_READ_2(sc, MUSB2_REG_RXCOUNT); + + /* verify the packet byte count */ + if (count != td->max_frame_size) { + if (count < td->max_frame_size) { + /* we have a short packet */ + td->short_pkt = 1; + got_short = 1; + } else { + /* invalid USB packet */ + td->error = 1; + musbotg_channel_free(sc, td); + return (0); /* we are complete */ + } + } + /* verify the packet byte count */ + if (count > td->remainder) { + /* invalid USB packet */ + td->error = 1; + musbotg_channel_free(sc, td); + return (0); /* we are complete */ + } + while (count > 0) { + uint32_t temp; + + usbd_get_page(td->pc, td->offset, &buf_res); + + /* get correct length */ + if (buf_res.length > count) { + buf_res.length = count; + } + /* check for unaligned memory address */ + if (USB_P2U(buf_res.buffer) & 3) { + + temp = count & ~3; + + if (temp) { + /* receive data 4 bytes at a time */ + bus_space_read_multi_4(sc->sc_io_tag, sc->sc_io_hdl, + MUSB2_REG_EPFIFO(0), sc->sc_bounce_buf, + temp / 4); + } + temp = count & 3; + if (temp) { + /* receive data 1 byte at a time */ + bus_space_read_multi_1(sc->sc_io_tag, sc->sc_io_hdl, + MUSB2_REG_EPFIFO(0), + (void *)(&sc->sc_bounce_buf[count / 4]), temp); + } + usbd_copy_in(td->pc, td->offset, + sc->sc_bounce_buf, count); + + /* update offset and remainder */ + td->offset += count; + td->remainder -= count; + break; + } + /* check if we can optimise */ + if (buf_res.length >= 4) { + + /* receive data 4 bytes at a time */ + bus_space_read_multi_4(sc->sc_io_tag, sc->sc_io_hdl, + MUSB2_REG_EPFIFO(0), buf_res.buffer, + buf_res.length / 4); + + temp = buf_res.length & ~3; + + /* update counters */ + count -= temp; + td->offset += temp; + td->remainder -= temp; + continue; + } + /* receive data */ + bus_space_read_multi_1(sc->sc_io_tag, sc->sc_io_hdl, + MUSB2_REG_EPFIFO(0), buf_res.buffer, buf_res.length); + + /* update counters */ + count -= buf_res.length; + td->offset += buf_res.length; + td->remainder -= buf_res.length; + } + + csr &= ~MUSB2_MASK_CSR0L_RXPKTRDY; + MUSB2_WRITE_1(sc, MUSB2_REG_TXCSRL, csr); + + /* check if we are complete */ + if ((td->remainder == 0) || got_short) { + if (td->short_pkt) { + /* we are complete */ + + musbotg_channel_free(sc, td); + return (0); + } + /* else need to receive a zero length packet */ + } + + td->transaction_started = 1; + MUSB2_WRITE_1(sc, MUSB2_REG_TXCSRL, + MUSB2_MASK_CSR0L_REQPKT); + + return (1); /* not complete */ +} + +static uint8_t +musbotg_host_ctrl_data_tx(struct musbotg_td *td) +{ + struct usb_page_search buf_res; + struct musbotg_softc *sc; + uint16_t count; + uint8_t csr, csrh; + + /* get pointer to softc */ + sc = MUSBOTG_PC2SC(td->pc); + + if (td->channel == -1) + td->channel = musbotg_channel_alloc(sc, td); + + /* No free EPs */ + if (td->channel == -1) + return (1); + + DPRINTFN(1, "ep_no=%d\n", td->channel); + + /* select endpoint */ + MUSB2_WRITE_1(sc, MUSB2_REG_EPINDEX, 0); + + /* read out FIFO status */ + csr = MUSB2_READ_1(sc, MUSB2_REG_TXCSRL); + DPRINTFN(4, "csr=0x%02x\n", csr); + + if (csr & (MUSB2_MASK_CSR0L_RXSTALL | + MUSB2_MASK_CSR0L_ERROR)) { + /* clear status bits */ + MUSB2_WRITE_1(sc, MUSB2_REG_TXCSRL, 0); + td->error = 1; + } + + if (csr & MUSB2_MASK_CSR0L_NAKTIMO ) { + + if (csr & MUSB2_MASK_CSR0L_TXFIFONEMPTY) { + csrh = MUSB2_READ_1(sc, MUSB2_REG_TXCSRH); + csrh |= MUSB2_MASK_CSR0H_FFLUSH; + MUSB2_WRITE_1(sc, MUSB2_REG_TXCSRH, csrh); + csr = MUSB2_READ_1(sc, MUSB2_REG_TXCSRL); + if (csr & MUSB2_MASK_CSR0L_TXFIFONEMPTY) { + csrh = MUSB2_READ_1(sc, MUSB2_REG_TXCSRH); + csrh |= MUSB2_MASK_CSR0H_FFLUSH; + MUSB2_WRITE_1(sc, MUSB2_REG_TXCSRH, csrh); + csr = MUSB2_READ_1(sc, MUSB2_REG_TXCSRL); + } + } + + csr &= ~MUSB2_MASK_CSR0L_NAKTIMO; + MUSB2_WRITE_1(sc, MUSB2_REG_TXCSRL, csr); + + td->error = 1; + } + + + if (td->error) { + musbotg_channel_free(sc, td); + return (0); /* complete */ + } + + /* + * Wait while FIFO is empty. + * Do not flush it because it will cause transactions + * with size more then packet size. It might upset + * some devices + */ + if (csr & MUSB2_MASK_CSR0L_TXFIFONEMPTY) + return (1); + + /* Packet still being processed */ + if (csr & MUSB2_MASK_CSR0L_TXPKTRDY) + return (1); + + if (td->transaction_started) { + /* check remainder */ + if (td->remainder == 0) { + if (td->short_pkt) { + musbotg_channel_free(sc, td); + return (0); /* complete */ + } + /* else we need to transmit a short packet */ + } + + /* We're not complete - more transactions required */ + td->transaction_started = 0; + } + + /* check for short packet */ + count = td->max_frame_size; + if (td->remainder < count) { + /* we have a short packet */ + td->short_pkt = 1; + count = td->remainder; + } + + while (count > 0) { + uint32_t temp; + + usbd_get_page(td->pc, td->offset, &buf_res); + + /* get correct length */ + if (buf_res.length > count) { + buf_res.length = count; + } + /* check for unaligned memory address */ + if (USB_P2U(buf_res.buffer) & 3) { + + usbd_copy_out(td->pc, td->offset, + sc->sc_bounce_buf, count); + + temp = count & ~3; + + if (temp) { + /* transmit data 4 bytes at a time */ + bus_space_write_multi_4(sc->sc_io_tag, + sc->sc_io_hdl, MUSB2_REG_EPFIFO(0), + sc->sc_bounce_buf, temp / 4); + } + temp = count & 3; + if (temp) { + /* receive data 1 byte at a time */ + bus_space_write_multi_1(sc->sc_io_tag, sc->sc_io_hdl, + MUSB2_REG_EPFIFO(0), + ((void *)&sc->sc_bounce_buf[count / 4]), temp); + } + /* update offset and remainder */ + td->offset += count; + td->remainder -= count; + break; + } + /* check if we can optimise */ + if (buf_res.length >= 4) { + + /* transmit data 4 bytes at a time */ + bus_space_write_multi_4(sc->sc_io_tag, sc->sc_io_hdl, + MUSB2_REG_EPFIFO(0), buf_res.buffer, + buf_res.length / 4); + + temp = buf_res.length & ~3; + + /* update counters */ + count -= temp; + td->offset += temp; + td->remainder -= temp; + continue; + } + /* transmit data */ + bus_space_write_multi_1(sc->sc_io_tag, sc->sc_io_hdl, + MUSB2_REG_EPFIFO(0), buf_res.buffer, + buf_res.length); + + /* update counters */ + count -= buf_res.length; + td->offset += buf_res.length; + td->remainder -= buf_res.length; + } + + /* Function address */ + MUSB2_WRITE_1(sc, MUSB2_REG_TXFADDR(0), td->dev_addr); + MUSB2_WRITE_1(sc, MUSB2_REG_TXHADDR(0), td->haddr); + MUSB2_WRITE_1(sc, MUSB2_REG_TXHUBPORT(0), td->hport); + MUSB2_WRITE_1(sc, MUSB2_REG_TXTI, td->transfer_type); + + /* TX NAK timeout */ + MUSB2_WRITE_1(sc, MUSB2_REG_TXNAKLIMIT, MAX_NAK_TO); + + /* write command */ + MUSB2_WRITE_1(sc, MUSB2_REG_TXCSRL, + MUSB2_MASK_CSR0L_TXPKTRDY); + + td->transaction_started = 1; + + return (1); /* not complete */ +} + +static uint8_t +musbotg_dev_ctrl_status(struct musbotg_td *td) +{ + struct musbotg_softc *sc; + uint8_t csr; + + /* get pointer to softc */ + sc = MUSBOTG_PC2SC(td->pc); + + /* select endpoint 0 */ + MUSB2_WRITE_1(sc, MUSB2_REG_EPINDEX, 0); + + if (sc->sc_ep0_busy) { + sc->sc_ep0_busy = 0; + sc->sc_ep0_cmd |= MUSB2_MASK_CSR0L_DATAEND; + MUSB2_WRITE_1(sc, MUSB2_REG_TXCSRL, sc->sc_ep0_cmd); + sc->sc_ep0_cmd = 0; + } + /* read out FIFO status */ + csr = MUSB2_READ_1(sc, MUSB2_REG_TXCSRL); + + DPRINTFN(4, "csr=0x%02x\n", csr); + + if (csr & MUSB2_MASK_CSR0L_DATAEND) { + /* wait for interrupt */ + return (1); /* not complete */ + } + if (sc->sc_dv_addr != 0xFF) { + /* write function address */ + musbotg_set_address(sc, sc->sc_dv_addr); + } + + musbotg_channel_free(sc, td); + return (0); /* complete */ +} + +static uint8_t +musbotg_host_ctrl_status_rx(struct musbotg_td *td) +{ + struct musbotg_softc *sc; + uint8_t csr, csrh; + + /* get pointer to softc */ + sc = MUSBOTG_PC2SC(td->pc); + + if (td->channel == -1) + td->channel = musbotg_channel_alloc(sc, td); + + /* EP0 is busy, wait */ + if (td->channel == -1) + return (1); + + DPRINTFN(1, "ep_no=%d\n", td->channel); + + /* select endpoint 0 */ + MUSB2_WRITE_1(sc, MUSB2_REG_EPINDEX, 0); + + if (!td->transaction_started) { + MUSB2_WRITE_1(sc, MUSB2_REG_RXFADDR(0), + td->dev_addr); + + MUSB2_WRITE_1(sc, MUSB2_REG_RXHADDR(0), td->haddr); + MUSB2_WRITE_1(sc, MUSB2_REG_RXHUBPORT(0), td->hport); + MUSB2_WRITE_1(sc, MUSB2_REG_RXTI, td->transfer_type); + + /* RX NAK timeout */ + MUSB2_WRITE_1(sc, MUSB2_REG_RXNAKLIMIT, MAX_NAK_TO); + + td->transaction_started = 1; + + /* Disable PING */ + csrh = MUSB2_READ_1(sc, MUSB2_REG_RXCSRH); + csrh |= MUSB2_MASK_CSR0H_PING_DIS; + MUSB2_WRITE_1(sc, MUSB2_REG_RXCSRH, csrh); + + /* write command */ + MUSB2_WRITE_1(sc, MUSB2_REG_TXCSRL, + MUSB2_MASK_CSR0L_STATUSPKT | + MUSB2_MASK_CSR0L_REQPKT); + + return (1); /* Just started */ + + } + + csr = MUSB2_READ_1(sc, MUSB2_REG_TXCSRL); + + DPRINTFN(4, "IN STATUS csr=0x%02x\n", csr); + + if (csr & MUSB2_MASK_CSR0L_RXPKTRDY) { + MUSB2_WRITE_1(sc, MUSB2_REG_TXCSRL, + MUSB2_MASK_CSR0L_RXPKTRDY_CLR); + musbotg_channel_free(sc, td); + return (0); /* complete */ + } + + if (csr & MUSB2_MASK_CSR0L_NAKTIMO) { + csr &= ~ (MUSB2_MASK_CSR0L_STATUSPKT | + MUSB2_MASK_CSR0L_REQPKT); + MUSB2_WRITE_1(sc, MUSB2_REG_TXCSRL, csr); + + csr &= ~MUSB2_MASK_CSR0L_NAKTIMO; + MUSB2_WRITE_1(sc, MUSB2_REG_TXCSRL, csr); + td->error = 1; + } + + /* Failed */ + if (csr & (MUSB2_MASK_CSR0L_RXSTALL | + MUSB2_MASK_CSR0L_ERROR)) + { + /* Clear status bit */ + MUSB2_WRITE_1(sc, MUSB2_REG_TXCSRL, 0); + DPRINTFN(1, "error bit set, csr=0x%02x\n", csr); + td->error = 1; + } + + if (td->error) { + musbotg_channel_free(sc, td); + return (0); + } + + return (1); /* Not ready yet */ +} + +static uint8_t +musbotg_host_ctrl_status_tx(struct musbotg_td *td) +{ + struct musbotg_softc *sc; + uint8_t csr; + + /* get pointer to softc */ + sc = MUSBOTG_PC2SC(td->pc); + + if (td->channel == -1) + td->channel = musbotg_channel_alloc(sc, td); + + /* EP0 is busy, wait */ + if (td->channel == -1) + return (1); + + DPRINTFN(1, "ep_no=%d/%d [%d@%d.%d/%02x]\n", td->channel, td->transaction_started, + td->dev_addr,td->haddr,td->hport, td->transfer_type); + + /* select endpoint 0 */ + MUSB2_WRITE_1(sc, MUSB2_REG_EPINDEX, 0); + + csr = MUSB2_READ_1(sc, MUSB2_REG_TXCSRL); + DPRINTFN(4, "csr=0x%02x\n", csr); + + /* Not yet */ + if (csr & MUSB2_MASK_CSR0L_TXPKTRDY) + return (1); + + /* Failed */ + if (csr & (MUSB2_MASK_CSR0L_RXSTALL | + MUSB2_MASK_CSR0L_ERROR)) + { + /* Clear status bit */ + MUSB2_WRITE_1(sc, MUSB2_REG_TXCSRL, 0); + DPRINTFN(1, "error bit set, csr=0x%02x\n", csr); + td->error = 1; + musbotg_channel_free(sc, td); + return (0); /* complete */ + } + + if (td->transaction_started) { + musbotg_channel_free(sc, td); + return (0); /* complete */ + } + + MUSB2_WRITE_1(sc, MUSB2_REG_RXCSRH, MUSB2_MASK_CSR0H_PING_DIS); + + MUSB2_WRITE_1(sc, MUSB2_REG_TXFADDR(0), td->dev_addr); + MUSB2_WRITE_1(sc, MUSB2_REG_TXHADDR(0), td->haddr); + MUSB2_WRITE_1(sc, MUSB2_REG_TXHUBPORT(0), td->hport); + MUSB2_WRITE_1(sc, MUSB2_REG_TXTI, td->transfer_type); + + /* TX NAK timeout */ + MUSB2_WRITE_1(sc, MUSB2_REG_TXNAKLIMIT, MAX_NAK_TO); + + td->transaction_started = 1; + + /* write command */ + MUSB2_WRITE_1(sc, MUSB2_REG_TXCSRL, + MUSB2_MASK_CSR0L_STATUSPKT | + MUSB2_MASK_CSR0L_TXPKTRDY); + + return (1); /* wait for interrupt */ +} + +static uint8_t +musbotg_dev_data_rx(struct musbotg_td *td) +{ + struct usb_page_search buf_res; + struct musbotg_softc *sc; + uint16_t count; + uint8_t csr; + uint8_t to; + uint8_t got_short; + + to = 8; /* don't loop forever! */ + got_short = 0; + + /* get pointer to softc */ + sc = MUSBOTG_PC2SC(td->pc); + + if (td->channel == -1) + td->channel = musbotg_channel_alloc(sc, td); + + /* EP0 is busy, wait */ + if (td->channel == -1) + return (1); + + /* select endpoint */ + MUSB2_WRITE_1(sc, MUSB2_REG_EPINDEX, td->channel); + +repeat: + /* read out FIFO status */ + csr = MUSB2_READ_1(sc, MUSB2_REG_RXCSRL); + + DPRINTFN(4, "csr=0x%02x\n", csr); + + /* clear overrun */ + if (csr & MUSB2_MASK_CSRL_RXOVERRUN) { + /* make sure we don't clear "RXPKTRDY" */ + MUSB2_WRITE_1(sc, MUSB2_REG_RXCSRL, + MUSB2_MASK_CSRL_RXPKTRDY); + } + + /* check status */ + if (!(csr & MUSB2_MASK_CSRL_RXPKTRDY)) + return (1); /* not complete */ + + /* get the packet byte count */ + count = MUSB2_READ_2(sc, MUSB2_REG_RXCOUNT); + + DPRINTFN(4, "count=0x%04x\n", count); + + /* + * Check for short or invalid packet: + */ + if (count != td->max_frame_size) { + if (count < td->max_frame_size) { + /* we have a short packet */ + td->short_pkt = 1; + got_short = 1; + } else { + /* invalid USB packet */ + td->error = 1; + musbotg_channel_free(sc, td); + return (0); /* we are complete */ + } + } + /* verify the packet byte count */ + if (count > td->remainder) { + /* invalid USB packet */ + td->error = 1; + musbotg_channel_free(sc, td); + return (0); /* we are complete */ + } + while (count > 0) { + uint32_t temp; + + usbd_get_page(td->pc, td->offset, &buf_res); + + /* get correct length */ + if (buf_res.length > count) { + buf_res.length = count; + } + /* check for unaligned memory address */ + if (USB_P2U(buf_res.buffer) & 3) { + + temp = count & ~3; + + if (temp) { + /* receive data 4 bytes at a time */ + bus_space_read_multi_4(sc->sc_io_tag, sc->sc_io_hdl, + MUSB2_REG_EPFIFO(td->channel), sc->sc_bounce_buf, + temp / 4); + } + temp = count & 3; + if (temp) { + /* receive data 1 byte at a time */ + bus_space_read_multi_1(sc->sc_io_tag, + sc->sc_io_hdl, MUSB2_REG_EPFIFO(td->channel), + ((void *)&sc->sc_bounce_buf[count / 4]), temp); *** DIFF OUTPUT TRUNCATED AT 1000 LINES *** From owner-svn-src-stable@FreeBSD.ORG Thu Oct 24 06:25:53 2013 Return-Path: Delivered-To: svn-src-stable@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) (using TLSv1 with cipher ADH-AES256-SHA (256/256 bits)) (No client certificate requested) by hub.freebsd.org (Postfix) with ESMTP id 70C53945; Thu, 24 Oct 2013 06:25:53 +0000 (UTC) (envelope-from hselasky@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:1900:2254:2068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mx1.freebsd.org (Postfix) with ESMTPS id 5E7132CB1; Thu, 24 Oct 2013 06:25:53 +0000 (UTC) Received: from svn.freebsd.org ([127.0.1.70]) by svn.freebsd.org (8.14.7/8.14.7) with ESMTP id r9O6Prw3039136; Thu, 24 Oct 2013 06:25:53 GMT (envelope-from hselasky@svn.freebsd.org) Received: (from hselasky@localhost) by svn.freebsd.org (8.14.7/8.14.5/Submit) id r9O6PrBB039134; Thu, 24 Oct 2013 06:25:53 GMT (envelope-from hselasky@svn.freebsd.org) Message-Id: <201310240625.r9O6PrBB039134@svn.freebsd.org> From: Hans Petter Selasky Date: Thu, 24 Oct 2013 06:25:53 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-stable@freebsd.org, svn-src-stable-9@freebsd.org Subject: svn commit: r257042 - in stable/9/sys/dev/usb: . wlan X-SVN-Group: stable-9 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-stable@freebsd.org X-Mailman-Version: 2.1.14 Precedence: list List-Id: SVN commit messages for all the -stable branches of the src tree List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 24 Oct 2013 06:25:53 -0000 Author: hselasky Date: Thu Oct 24 06:25:52 2013 New Revision: 257042 URL: http://svnweb.freebsd.org/changeset/base/257042 Log: MFC r256500: Add new USB ID. PR: usb/182936 Modified: stable/9/sys/dev/usb/usbdevs stable/9/sys/dev/usb/wlan/if_run.c Directory Properties: stable/9/sys/ (props changed) stable/9/sys/dev/ (props changed) Modified: stable/9/sys/dev/usb/usbdevs ============================================================================== --- stable/9/sys/dev/usb/usbdevs Thu Oct 24 06:22:43 2013 (r257041) +++ stable/9/sys/dev/usb/usbdevs Thu Oct 24 06:25:52 2013 (r257042) @@ -1228,6 +1228,7 @@ product BELKIN F5D8055V2 0x825b F5D8055 product BELKIN F5D9050V3 0x905b F5D9050 ver 3 Wireless Adapter product BELKIN2 F5U002 0x0002 F5U002 Parallel printer product BELKIN F6D4050V1 0x935a F6D4050 v1 +product BELKIN F6D4050V2 0x935b F6D4050 v2 /* Billionton products */ product BILLIONTON USB100 0x0986 USB100N 10/100 FastEthernet Modified: stable/9/sys/dev/usb/wlan/if_run.c ============================================================================== --- stable/9/sys/dev/usb/wlan/if_run.c Thu Oct 24 06:22:43 2013 (r257041) +++ stable/9/sys/dev/usb/wlan/if_run.c Thu Oct 24 06:25:52 2013 (r257042) @@ -147,6 +147,7 @@ static const STRUCT_USB_HOST_ID run_devs RUN_DEV(BELKIN, F5D8055), RUN_DEV(BELKIN, F5D8055V2), RUN_DEV(BELKIN, F6D4050V1), + RUN_DEV(BELKIN, F6D4050V2), RUN_DEV(BELKIN, RT2870_1), RUN_DEV(BELKIN, RT2870_2), RUN_DEV(CISCOLINKSYS, AE1000), From owner-svn-src-stable@FreeBSD.ORG Thu Oct 24 07:38:33 2013 Return-Path: Delivered-To: svn-src-stable@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) (using TLSv1 with cipher ADH-AES256-SHA (256/256 bits)) (No client certificate requested) by hub.freebsd.org (Postfix) with ESMTP id 6D2A6B63; Thu, 24 Oct 2013 07:38:33 +0000 (UTC) (envelope-from hselasky@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:1900:2254:2068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mx1.freebsd.org (Postfix) with ESMTPS id 4B5BA2111; Thu, 24 Oct 2013 07:38:33 +0000 (UTC) Received: from svn.freebsd.org ([127.0.1.70]) by svn.freebsd.org (8.14.7/8.14.7) with ESMTP id r9O7cXoI062594; Thu, 24 Oct 2013 07:38:33 GMT (envelope-from hselasky@svn.freebsd.org) Received: (from hselasky@localhost) by svn.freebsd.org (8.14.7/8.14.5/Submit) id r9O7cWvE062592; Thu, 24 Oct 2013 07:38:32 GMT (envelope-from hselasky@svn.freebsd.org) Message-Id: <201310240738.r9O7cWvE062592@svn.freebsd.org> From: Hans Petter Selasky Date: Thu, 24 Oct 2013 07:38:32 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-stable@freebsd.org, svn-src-stable-10@freebsd.org Subject: svn commit: r257043 - stable/10/sys/dev/usb/controller X-SVN-Group: stable-10 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-stable@freebsd.org X-Mailman-Version: 2.1.14 Precedence: list List-Id: SVN commit messages for all the -stable branches of the src tree List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 24 Oct 2013 07:38:33 -0000 Author: hselasky Date: Thu Oct 24 07:38:32 2013 New Revision: 257043 URL: http://svnweb.freebsd.org/changeset/base/257043 Log: MFC r256548: Correct programming of XXX_MAXP register. This register is 16-bit wide and not 8-bit. Fix support for isochronous transfers in USB host mode. Fix a whitespace while at it. PR: usb/181987 Approved by: re (Xin Li) Modified: stable/10/sys/dev/usb/controller/musb_otg.c stable/10/sys/dev/usb/controller/musb_otg.h Directory Properties: stable/10/sys/ (props changed) Modified: stable/10/sys/dev/usb/controller/musb_otg.c ============================================================================== --- stable/10/sys/dev/usb/controller/musb_otg.c Thu Oct 24 06:25:52 2013 (r257042) +++ stable/10/sys/dev/usb/controller/musb_otg.c Thu Oct 24 07:38:32 2013 (r257043) @@ -1661,7 +1661,7 @@ repeat: } /* Max packet size */ - MUSB2_WRITE_1(sc, MUSB2_REG_TXMAXP, td->max_packet); + MUSB2_WRITE_2(sc, MUSB2_REG_TXMAXP, td->reg_max_packet); /* write command */ MUSB2_WRITE_1(sc, MUSB2_REG_TXCSRL, @@ -1726,13 +1726,16 @@ repeat: td->hport); /* RX NAK timeout */ - MUSB2_WRITE_1(sc, MUSB2_REG_RXNAKLIMIT, MAX_NAK_TO); + if (td->transfer_type & MUSB2_MASK_TI_PROTO_ISOC) + MUSB2_WRITE_1(sc, MUSB2_REG_RXNAKLIMIT, 0); + else + MUSB2_WRITE_1(sc, MUSB2_REG_RXNAKLIMIT, MAX_NAK_TO); /* Protocol, speed, device endpoint */ MUSB2_WRITE_1(sc, MUSB2_REG_RXTI, td->transfer_type); /* Max packet size */ - MUSB2_WRITE_1(sc, MUSB2_REG_RXMAXP, td->max_packet); + MUSB2_WRITE_2(sc, MUSB2_REG_RXMAXP, td->reg_max_packet); /* Data Toggle */ csrh = MUSB2_READ_1(sc, MUSB2_REG_RXCSRH); @@ -1938,7 +1941,7 @@ musbotg_host_data_tx(struct musbotg_td * return (0); /* complete */ } - if (csr & MUSB2_MASK_CSRL_TXNAKTO ) { + if (csr & MUSB2_MASK_CSRL_TXNAKTO) { /* * Flush TX FIFO before clearing NAK TO */ @@ -2069,13 +2072,16 @@ musbotg_host_data_tx(struct musbotg_td * td->hport); /* TX NAK timeout */ - MUSB2_WRITE_1(sc, MUSB2_REG_TXNAKLIMIT, MAX_NAK_TO); + if (td->transfer_type & MUSB2_MASK_TI_PROTO_ISOC) + MUSB2_WRITE_1(sc, MUSB2_REG_TXNAKLIMIT, 0); + else + MUSB2_WRITE_1(sc, MUSB2_REG_TXNAKLIMIT, MAX_NAK_TO); /* Protocol, speed, device endpoint */ MUSB2_WRITE_1(sc, MUSB2_REG_TXTI, td->transfer_type); /* Max packet size */ - MUSB2_WRITE_1(sc, MUSB2_REG_TXMAXP, td->max_packet); + MUSB2_WRITE_2(sc, MUSB2_REG_TXMAXP, td->reg_max_packet); if (!td->transaction_started) { csrh = MUSB2_READ_1(sc, MUSB2_REG_TXCSRH); @@ -2406,7 +2412,6 @@ musbotg_setup_standard_chain(struct usb_ if (xfer->flags_int.usb_mode == USB_MODE_HOST) { speed = usbd_get_speed(xfer->xroot->udev); - xfer_type = xfer->endpoint->edesc->bmAttributes & UE_XFERTYPE; switch (speed) { case USB_SPEED_LOW: @@ -2444,7 +2449,6 @@ musbotg_setup_standard_chain(struct usb_ } temp.transfer_type |= ep_no; - td->max_packet = xfer->max_packet_size; td->toggle = xfer->endpoint->toggle_next; } @@ -2469,9 +2473,9 @@ musbotg_setup_standard_chain(struct usb_ x = 0; } - if (x != xfer->nframes) { - tx = 0; + tx = 0; + if (x != xfer->nframes) { if (xfer->endpointno & UE_DIR_IN) tx = 1; @@ -2532,9 +2536,14 @@ musbotg_setup_standard_chain(struct usb_ } else { - /* regular data transfer */ - - temp.short_pkt = (xfer->flags.force_short_xfer) ? 0 : 1; + if (xfer->flags_int.isochronous_xfr) { + /* isochronous data transfer */ + /* don't force short */ + temp.short_pkt = 1; + } else { + /* regular data transfer */ + temp.short_pkt = (xfer->flags.force_short_xfer ? 0 : 1); + } } musbotg_setup_standard_chain_sub(&temp); @@ -3158,7 +3167,12 @@ musbotg_init(struct musbotg_softc *sc) if (dynfifo) { if (frx && (temp <= nrx)) { - if (temp < 8) { + if (temp == 1) { + frx = 12; /* 4K */ + MUSB2_WRITE_1(sc, MUSB2_REG_RXFIFOSZ, + MUSB2_VAL_FIFOSZ_4096 | + MUSB2_MASK_FIFODB); + } else if (temp < 8) { frx = 10; /* 1K */ MUSB2_WRITE_1(sc, MUSB2_REG_RXFIFOSZ, MUSB2_VAL_FIFOSZ_512 | @@ -3175,7 +3189,12 @@ musbotg_init(struct musbotg_softc *sc) offset += (1 << frx); } if (ftx && (temp <= ntx)) { - if (temp < 8) { + if (temp == 1) { + ftx = 12; /* 4K */ + MUSB2_WRITE_1(sc, MUSB2_REG_TXFIFOSZ, + MUSB2_VAL_FIFOSZ_4096 | + MUSB2_MASK_FIFODB); + } else if (temp < 8) { ftx = 10; /* 1K */ MUSB2_WRITE_1(sc, MUSB2_REG_TXFIFOSZ, MUSB2_VAL_FIFOSZ_512 | @@ -4042,7 +4061,7 @@ musbotg_xfer_setup(struct usb_setup_para * reasonable dummies: */ parm->hc_max_packet_size = 0x400; - parm->hc_max_frame_size = 0x400; + parm->hc_max_frame_size = 0xc00; if ((parm->methods == &musbotg_device_isoc_methods) || (parm->methods == &musbotg_device_intr_methods)) @@ -4117,6 +4136,8 @@ musbotg_xfer_setup(struct usb_setup_para /* init TD */ td->max_frame_size = xfer->max_frame_size; + td->reg_max_packet = xfer->max_packet_size | + ((xfer->max_packet_count - 1) << 11); td->ep_no = ep_no; td->obj_next = last_obj; Modified: stable/10/sys/dev/usb/controller/musb_otg.h ============================================================================== --- stable/10/sys/dev/usb/controller/musb_otg.h Thu Oct 24 06:25:52 2013 (r257042) +++ stable/10/sys/dev/usb/controller/musb_otg.h Thu Oct 24 07:38:32 2013 (r257043) @@ -316,9 +316,9 @@ struct musbotg_td { uint32_t offset; uint32_t remainder; uint16_t max_frame_size; /* packet_size * mult */ + uint16_t reg_max_packet; uint8_t ep_no; uint8_t transfer_type; - uint8_t max_packet; uint8_t error:1; uint8_t alt_next:1; uint8_t short_pkt:1; From owner-svn-src-stable@FreeBSD.ORG Thu Oct 24 07:43:36 2013 Return-Path: Delivered-To: svn-src-stable@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) (using TLSv1 with cipher ADH-AES256-SHA (256/256 bits)) (No client certificate requested) by hub.freebsd.org (Postfix) with ESMTP id 28202D76; Thu, 24 Oct 2013 07:43:36 +0000 (UTC) (envelope-from hselasky@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:1900:2254:2068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mx1.freebsd.org (Postfix) with ESMTPS id 152392167; Thu, 24 Oct 2013 07:43:36 +0000 (UTC) Received: from svn.freebsd.org ([127.0.1.70]) by svn.freebsd.org (8.14.7/8.14.7) with ESMTP id r9O7hZTb065255; Thu, 24 Oct 2013 07:43:35 GMT (envelope-from hselasky@svn.freebsd.org) Received: (from hselasky@localhost) by svn.freebsd.org (8.14.7/8.14.5/Submit) id r9O7hZ7P065252; Thu, 24 Oct 2013 07:43:35 GMT (envelope-from hselasky@svn.freebsd.org) Message-Id: <201310240743.r9O7hZ7P065252@svn.freebsd.org> From: Hans Petter Selasky Date: Thu, 24 Oct 2013 07:43:35 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-stable@freebsd.org, svn-src-stable-10@freebsd.org Subject: svn commit: r257044 - in stable/10/sys/dev/usb: . wlan X-SVN-Group: stable-10 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-stable@freebsd.org X-Mailman-Version: 2.1.14 Precedence: list List-Id: SVN commit messages for all the -stable branches of the src tree List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 24 Oct 2013 07:43:36 -0000 Author: hselasky Date: Thu Oct 24 07:43:35 2013 New Revision: 257044 URL: http://svnweb.freebsd.org/changeset/base/257044 Log: MFC r256500: Add new USB ID. PR: usb/182936 Approved by: re (Xin LI) Obtainedrom: Modified: stable/10/sys/dev/usb/usbdevs stable/10/sys/dev/usb/wlan/if_run.c Directory Properties: stable/10/sys/ (props changed) Modified: stable/10/sys/dev/usb/usbdevs ============================================================================== --- stable/10/sys/dev/usb/usbdevs Thu Oct 24 07:38:32 2013 (r257043) +++ stable/10/sys/dev/usb/usbdevs Thu Oct 24 07:43:35 2013 (r257044) @@ -1259,6 +1259,7 @@ product BELKIN F5D8055V2 0x825b F5D8055 product BELKIN F5D9050V3 0x905b F5D9050 ver 3 Wireless Adapter product BELKIN2 F5U002 0x0002 F5U002 Parallel printer product BELKIN F6D4050V1 0x935a F6D4050 v1 +product BELKIN F6D4050V2 0x935b F6D4050 v2 /* Billionton products */ product BILLIONTON USB100 0x0986 USB100N 10/100 FastEthernet Modified: stable/10/sys/dev/usb/wlan/if_run.c ============================================================================== --- stable/10/sys/dev/usb/wlan/if_run.c Thu Oct 24 07:38:32 2013 (r257043) +++ stable/10/sys/dev/usb/wlan/if_run.c Thu Oct 24 07:43:35 2013 (r257044) @@ -147,6 +147,7 @@ static const STRUCT_USB_HOST_ID run_devs RUN_DEV(BELKIN, F5D8055), RUN_DEV(BELKIN, F5D8055V2), RUN_DEV(BELKIN, F6D4050V1), + RUN_DEV(BELKIN, F6D4050V2), RUN_DEV(BELKIN, RT2870_1), RUN_DEV(BELKIN, RT2870_2), RUN_DEV(CISCOLINKSYS, AE1000), From owner-svn-src-stable@FreeBSD.ORG Thu Oct 24 07:46:18 2013 Return-Path: Delivered-To: svn-src-stable@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) (using TLSv1 with cipher ADH-AES256-SHA (256/256 bits)) (No client certificate requested) by hub.freebsd.org (Postfix) with ESMTP id 718DAF2D; Thu, 24 Oct 2013 07:46:18 +0000 (UTC) (envelope-from hps@bitfrost.no) Received: from mta.bitpro.no (mta.bitpro.no [92.42.64.202]) by mx1.freebsd.org (Postfix) with ESMTP id 2C6B82188; Thu, 24 Oct 2013 07:46:18 +0000 (UTC) Received: from mail.lockless.no (mail.lockless.no [46.29.221.38]) by mta.bitpro.no (Postfix) with ESMTP id EE6EA7A531; Thu, 24 Oct 2013 09:46:15 +0200 (CEST) Received: from localhost (localhost [127.0.0.1]) by mail.lockless.no (Postfix) with ESMTP id 004338F6FD4; Thu, 24 Oct 2013 09:46:42 +0200 (CEST) X-Virus-Scanned: by amavisd-new-2.6.4 (20090625) (Debian) at lockless.no Received: from mail.lockless.no ([127.0.0.1]) by localhost (mail.lockless.no [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id w14EDUPw+Ksx; Thu, 24 Oct 2013 09:46:42 +0200 (CEST) Received: from laptop015.home.selasky.org (cm-176.74.213.204.customer.telag.net [176.74.213.204]) by mail.lockless.no (Postfix) with ESMTPSA id 254508F6FD3; Thu, 24 Oct 2013 09:46:42 +0200 (CEST) Message-ID: <5268D08D.6070701@bitfrost.no> Date: Thu, 24 Oct 2013 09:47:25 +0200 From: Hans Petter Selasky Organization: Bitfrost A/S User-Agent: Mozilla/5.0 (X11; FreeBSD amd64; rv:17.0) Gecko/20130522 Thunderbird/17.0.6 MIME-Version: 1.0 Subject: Re: svn commit: r257044 - in stable/10/sys/dev/usb: . wlan References: <201310240743.r9O7hZ7P065252@svn.freebsd.org> In-Reply-To: <201310240743.r9O7hZ7P065252@svn.freebsd.org> Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 7bit Cc: svn-src-stable@freebsd.org, svn-src-all@freebsd.org, src-committers@freebsd.org, svn-src-stable-10@freebsd.org X-BeenThere: svn-src-stable@freebsd.org X-Mailman-Version: 2.1.14 Precedence: list List-Id: SVN commit messages for all the -stable branches of the src tree List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 24 Oct 2013 07:46:18 -0000 On 10/24/13 09:43, Hans Petter Selasky wrote: > Author: hselasky > Date: Thu Oct 24 07:43:35 2013 > New Revision: 257044 > URL: http://svnweb.freebsd.org/changeset/base/257044 > > Log: > MFC r256500: > Add new USB ID. > > PR: usb/182936 > Approved by: re (Xin LI) > Obtainedrom: ^^^ this line was a minor "vi" accident :-) --HPS From owner-svn-src-stable@FreeBSD.ORG Thu Oct 24 10:31:03 2013 Return-Path: Delivered-To: svn-src-stable@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [8.8.178.115]) (using TLSv1 with cipher ADH-AES256-SHA (256/256 bits)) (No client certificate requested) by hub.freebsd.org (Postfix) with ESMTP id 89B93AAD; Thu, 24 Oct 2013 10:31:03 +0000 (UTC) (envelope-from mav@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:1900:2254:2068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mx1.freebsd.org (Postfix) with ESMTPS id 774BA20D6; Thu, 24 Oct 2013 10:31:03 +0000 (UTC) Received: from svn.freebsd.org ([127.0.1.70]) by svn.freebsd.org (8.14.7/8.14.7) with ESMTP id r9OAV3Vp022119; Thu, 24 Oct 2013 10:31:03 GMT (envelope-from mav@svn.freebsd.org) Received: (from mav@localhost) by svn.freebsd.org (8.14.7/8.14.5/Submit) id r9OAV3oS022118; Thu, 24 Oct 2013 10:31:03 GMT (envelope-from mav@svn.freebsd.org) Message-Id: <201310241031.r9OAV3oS022118@svn.freebsd.org> From: Alexander Motin Date: Thu, 24 Oct 2013 10:31:03 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-stable@freebsd.org, svn-src-stable-10@freebsd.org Subject: svn commit: r257047 - stable/10/sys/cam X-SVN-Group: stable-10 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-stable@freebsd.org X-Mailman-Version: 2.1.14 Precedence: list List-Id: SVN commit messages for all the -stable branches of the src tree List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 24 Oct 2013 10:31:03 -0000 Author: mav Date: Thu Oct 24 10:31:02 2013 New Revision: 257047 URL: http://svnweb.freebsd.org/changeset/base/257047 Log: MFC r256533: Unhide "Serial Number" lines from bootverbose. That information may be useful for system administration to have in hard copy (in logs) if one of several devices suddenly dies. Approved by: re (hrs) Modified: stable/10/sys/cam/cam_xpt.c Directory Properties: stable/10/sys/ (props changed) Modified: stable/10/sys/cam/cam_xpt.c ============================================================================== --- stable/10/sys/cam/cam_xpt.c Thu Oct 24 10:18:08 2013 (r257046) +++ stable/10/sys/cam/cam_xpt.c Thu Oct 24 10:31:02 2013 (r257047) @@ -1043,7 +1043,7 @@ xpt_announce_periph(struct cam_periph *p (struct sep_identify_data *)&path->device->ident_data); else printf("Unknown protocol device\n"); - if (bootverbose && path->device->serial_num_len > 0) { + if (path->device->serial_num_len > 0) { /* Don't wrap the screen - print only the first 60 chars */ printf("%s%d: Serial Number %.60s\n", periph->periph_name, periph->unit_number, path->device->serial_num); From owner-svn-src-stable@FreeBSD.ORG Thu Oct 24 10:31:54 2013 Return-Path: Delivered-To: svn-src-stable@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [8.8.178.115]) (using TLSv1 with cipher ADH-AES256-SHA (256/256 bits)) (No client certificate requested) by hub.freebsd.org (Postfix) with ESMTP id 32832BF9; Thu, 24 Oct 2013 10:31:54 +0000 (UTC) (envelope-from mav@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:1900:2254:2068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mx1.freebsd.org (Postfix) with ESMTPS id 2070420EA; Thu, 24 Oct 2013 10:31:54 +0000 (UTC) Received: from svn.freebsd.org ([127.0.1.70]) by svn.freebsd.org (8.14.7/8.14.7) with ESMTP id r9OAVrcO022251; Thu, 24 Oct 2013 10:31:53 GMT (envelope-from mav@svn.freebsd.org) Received: (from mav@localhost) by svn.freebsd.org (8.14.7/8.14.5/Submit) id r9OAVrYY022250; Thu, 24 Oct 2013 10:31:53 GMT (envelope-from mav@svn.freebsd.org) Message-Id: <201310241031.r9OAVrYY022250@svn.freebsd.org> From: Alexander Motin Date: Thu, 24 Oct 2013 10:31:53 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-stable@freebsd.org, svn-src-stable-9@freebsd.org Subject: svn commit: r257048 - stable/9/sys/cam X-SVN-Group: stable-9 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-stable@freebsd.org X-Mailman-Version: 2.1.14 Precedence: list List-Id: SVN commit messages for all the -stable branches of the src tree List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 24 Oct 2013 10:31:54 -0000 Author: mav Date: Thu Oct 24 10:31:53 2013 New Revision: 257048 URL: http://svnweb.freebsd.org/changeset/base/257048 Log: MFC r256533: Unhide "Serial Number" lines from bootverbose. That information may be useful for system administration to have in hard copy (in logs) if one of several devices suddenly dies. Modified: stable/9/sys/cam/cam_xpt.c Directory Properties: stable/9/sys/ (props changed) Modified: stable/9/sys/cam/cam_xpt.c ============================================================================== --- stable/9/sys/cam/cam_xpt.c Thu Oct 24 10:31:02 2013 (r257047) +++ stable/9/sys/cam/cam_xpt.c Thu Oct 24 10:31:53 2013 (r257048) @@ -1045,7 +1045,7 @@ xpt_announce_periph(struct cam_periph *p (struct sep_identify_data *)&path->device->ident_data); else printf("Unknown protocol device\n"); - if (bootverbose && path->device->serial_num_len > 0) { + if (path->device->serial_num_len > 0) { /* Don't wrap the screen - print only the first 60 chars */ printf("%s%d: Serial Number %.60s\n", periph->periph_name, periph->unit_number, path->device->serial_num); From owner-svn-src-stable@FreeBSD.ORG Thu Oct 24 10:34:17 2013 Return-Path: Delivered-To: svn-src-stable@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [8.8.178.115]) (using TLSv1 with cipher ADH-AES256-SHA (256/256 bits)) (No client certificate requested) by hub.freebsd.org (Postfix) with ESMTP id C3993FB6; Thu, 24 Oct 2013 10:34:17 +0000 (UTC) (envelope-from mav@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:1900:2254:2068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mx1.freebsd.org (Postfix) with ESMTPS id B09E9211E; Thu, 24 Oct 2013 10:34:17 +0000 (UTC) Received: from svn.freebsd.org ([127.0.1.70]) by svn.freebsd.org (8.14.7/8.14.7) with ESMTP id r9OAYHKE022778; Thu, 24 Oct 2013 10:34:17 GMT (envelope-from mav@svn.freebsd.org) Received: (from mav@localhost) by svn.freebsd.org (8.14.7/8.14.5/Submit) id r9OAYEvr022755; Thu, 24 Oct 2013 10:34:14 GMT (envelope-from mav@svn.freebsd.org) Message-Id: <201310241034.r9OAYEvr022755@svn.freebsd.org> From: Alexander Motin Date: Thu, 24 Oct 2013 10:34:14 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-stable@freebsd.org, svn-src-stable-9@freebsd.org Subject: svn commit: r257050 - in stable/9/sys/cam: . ata scsi X-SVN-Group: stable-9 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-stable@freebsd.org X-Mailman-Version: 2.1.14 Precedence: list List-Id: SVN commit messages for all the -stable branches of the src tree List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 24 Oct 2013 10:34:17 -0000 Author: mav Date: Thu Oct 24 10:34:13 2013 New Revision: 257050 URL: http://svnweb.freebsd.org/changeset/base/257050 Log: MFC r256552: Unify periph invalidation and destruction reporting. Print message containing device model and serial number on invalidation. Modified: stable/9/sys/cam/ata/ata_all.c stable/9/sys/cam/ata/ata_all.h stable/9/sys/cam/ata/ata_da.c stable/9/sys/cam/ata/ata_pmp.c stable/9/sys/cam/cam_periph.c stable/9/sys/cam/cam_periph.h stable/9/sys/cam/cam_xpt.c stable/9/sys/cam/cam_xpt_periph.h stable/9/sys/cam/scsi/scsi_all.c stable/9/sys/cam/scsi/scsi_all.h stable/9/sys/cam/scsi/scsi_cd.c stable/9/sys/cam/scsi/scsi_ch.c stable/9/sys/cam/scsi/scsi_da.c stable/9/sys/cam/scsi/scsi_enc.c stable/9/sys/cam/scsi/scsi_pass.c stable/9/sys/cam/scsi/scsi_pt.c stable/9/sys/cam/scsi/scsi_sa.c stable/9/sys/cam/scsi/scsi_sg.c Directory Properties: stable/9/sys/ (props changed) Modified: stable/9/sys/cam/ata/ata_all.c ============================================================================== --- stable/9/sys/cam/ata/ata_all.c Thu Oct 24 10:33:31 2013 (r257049) +++ stable/9/sys/cam/ata/ata_all.c Thu Oct 24 10:34:13 2013 (r257050) @@ -297,6 +297,18 @@ ata_print_ident(struct ata_params *ident } void +ata_print_ident_short(struct ata_params *ident_data) +{ + char product[48], revision[16]; + + cam_strvis(product, ident_data->model, sizeof(ident_data->model), + sizeof(product)); + cam_strvis(revision, ident_data->revision, sizeof(ident_data->revision), + sizeof(revision)); + printf("<%s %s>", product, revision); +} + +void semb_print_ident(struct sep_identify_data *ident_data) { char vendor[9], product[17], revision[5], fw[5], in[7], ins[5]; @@ -311,6 +323,18 @@ semb_print_ident(struct sep_identify_dat vendor, product, revision, fw, in, ins); } +void +semb_print_ident_short(struct sep_identify_data *ident_data) +{ + char vendor[9], product[17], revision[5], fw[5]; + + cam_strvis(vendor, ident_data->vendor_id, 8, sizeof(vendor)); + cam_strvis(product, ident_data->product_id, 16, sizeof(product)); + cam_strvis(revision, ident_data->product_rev, 4, sizeof(revision)); + cam_strvis(fw, ident_data->firmware_rev, 4, sizeof(fw)); + printf("<%s %s %s %s>", vendor, product, revision, fw); +} + uint32_t ata_logical_sector_size(struct ata_params *ident_data) { Modified: stable/9/sys/cam/ata/ata_all.h ============================================================================== --- stable/9/sys/cam/ata/ata_all.h Thu Oct 24 10:33:31 2013 (r257049) +++ stable/9/sys/cam/ata/ata_all.h Thu Oct 24 10:34:13 2013 (r257050) @@ -109,6 +109,7 @@ int ata_status_sbuf(struct ccb_ataio *at int ata_res_sbuf(struct ccb_ataio *ataio, struct sbuf *sb); void ata_print_ident(struct ata_params *ident_data); +void ata_print_ident_short(struct ata_params *ident_data); uint32_t ata_logical_sector_size(struct ata_params *ident_data); uint64_t ata_physical_sector_size(struct ata_params *ident_data); @@ -143,6 +144,7 @@ int ata_identify_match(caddr_t identbuff int ata_static_identify_match(caddr_t identbuffer, caddr_t table_entry); void semb_print_ident(struct sep_identify_data *ident_data); +void semb_print_ident_short(struct sep_identify_data *ident_data); void semb_receive_diagnostic_results(struct ccb_ataio *ataio, u_int32_t retries, void (*cbfcnp)(struct cam_periph *, union ccb*), Modified: stable/9/sys/cam/ata/ata_da.c ============================================================================== --- stable/9/sys/cam/ata/ata_da.c Thu Oct 24 10:33:31 2013 (r257049) +++ stable/9/sys/cam/ata/ata_da.c Thu Oct 24 10:34:13 2013 (r257050) @@ -912,7 +912,6 @@ adaoninvalidate(struct cam_periph *perip bioq_flush(&softc->trim_queue, NULL, ENXIO); disk_gone(softc->disk); - xpt_print(periph->path, "lost device\n"); } static void @@ -922,7 +921,6 @@ adacleanup(struct cam_periph *periph) softc = (struct ada_softc *)periph->softc; - xpt_print(periph->path, "removing device entry\n"); cam_periph_unlock(periph); /* Modified: stable/9/sys/cam/ata/ata_pmp.c ============================================================================== --- stable/9/sys/cam/ata/ata_pmp.c Thu Oct 24 10:33:31 2013 (r257049) +++ stable/9/sys/cam/ata/ata_pmp.c Thu Oct 24 10:34:13 2013 (r257050) @@ -241,7 +241,6 @@ pmponinvalidate(struct cam_periph *perip } } pmprelease(periph, -1); - xpt_print(periph->path, "lost device\n"); } static void @@ -251,7 +250,6 @@ pmpcleanup(struct cam_periph *periph) softc = (struct pmp_softc *)periph->softc; - xpt_print(periph->path, "removing device entry\n"); cam_periph_unlock(periph); /* Modified: stable/9/sys/cam/cam_periph.c ============================================================================== --- stable/9/sys/cam/cam_periph.c Thu Oct 24 10:33:31 2013 (r257049) +++ stable/9/sys/cam/cam_periph.c Thu Oct 24 10:34:13 2013 (r257050) @@ -586,6 +586,8 @@ cam_periph_invalidate(struct cam_periph return; CAM_DEBUG(periph->path, CAM_DEBUG_INFO, ("Periph invalidated\n")); + if (periph->flags & CAM_PERIPH_ANNOUNCED) + xpt_denounce_periph(periph); periph->flags |= CAM_PERIPH_INVALID; periph->flags &= ~CAM_PERIPH_NEW_DEV_FOUND; if (periph->periph_oninval != NULL) @@ -648,7 +650,10 @@ camperiphfree(struct cam_periph *periph) xpt_remove_periph(periph); xpt_unlock_buses(); - CAM_DEBUG(periph->path, CAM_DEBUG_INFO, ("Periph destroyed\n")); + if (periph->flags & CAM_PERIPH_ANNOUNCED) { + xpt_print(periph->path, "Periph destroyed\n"); + } else + CAM_DEBUG(periph->path, CAM_DEBUG_INFO, ("Periph destroyed\n")); if (periph->flags & CAM_PERIPH_NEW_DEV_FOUND) { union ccb ccb; Modified: stable/9/sys/cam/cam_periph.h ============================================================================== --- stable/9/sys/cam/cam_periph.h Thu Oct 24 10:33:31 2013 (r257049) +++ stable/9/sys/cam/cam_periph.h Thu Oct 24 10:34:13 2013 (r257050) @@ -121,6 +121,7 @@ struct cam_periph { #define CAM_PERIPH_NEW_DEV_FOUND 0x10 #define CAM_PERIPH_RECOVERY_INPROG 0x20 #define CAM_PERIPH_FREE 0x80 +#define CAM_PERIPH_ANNOUNCED 0x100 u_int32_t immediate_priority; u_int32_t refcount; SLIST_HEAD(, ccb_hdr) ccb_list; /* For "immediate" requests */ Modified: stable/9/sys/cam/cam_xpt.c ============================================================================== --- stable/9/sys/cam/cam_xpt.c Thu Oct 24 10:33:31 2013 (r257049) +++ stable/9/sys/cam/cam_xpt.c Thu Oct 24 10:34:13 2013 (r257050) @@ -1025,6 +1025,7 @@ xpt_announce_periph(struct cam_periph *p struct cam_path *path = periph->path; mtx_assert(periph->sim->mtx, MA_OWNED); + periph->flags |= CAM_PERIPH_ANNOUNCED; printf("%s%d at %s%d bus %d scbus%d target %d lun %d\n", periph->periph_name, periph->unit_number, @@ -1073,6 +1074,37 @@ xpt_announce_quirks(struct cam_periph *p } } +void +xpt_denounce_periph(struct cam_periph *periph) +{ + struct cam_path *path = periph->path; + + mtx_assert(periph->sim->mtx, MA_OWNED); + printf("%s%d at %s%d bus %d scbus%d target %d lun %d\n", + periph->periph_name, periph->unit_number, + path->bus->sim->sim_name, + path->bus->sim->unit_number, + path->bus->sim->bus_id, + path->bus->path_id, + path->target->target_id, + path->device->lun_id); + printf("%s%d: ", periph->periph_name, periph->unit_number); + if (path->device->protocol == PROTO_SCSI) + scsi_print_inquiry_short(&path->device->inq_data); + else if (path->device->protocol == PROTO_ATA || + path->device->protocol == PROTO_SATAPM) + ata_print_ident_short(&path->device->ident_data); + else if (path->device->protocol == PROTO_SEMB) + semb_print_ident_short( + (struct sep_identify_data *)&path->device->ident_data); + else + printf("Unknown protocol device"); + if (path->device->serial_num_len > 0) + printf(" s/n %.60s", path->device->serial_num); + printf(" detached\n"); +} + + int xpt_getattr(char *buf, size_t len, const char *attr, struct cam_path *path) { Modified: stable/9/sys/cam/cam_xpt_periph.h ============================================================================== --- stable/9/sys/cam/cam_xpt_periph.h Thu Oct 24 10:33:31 2013 (r257049) +++ stable/9/sys/cam/cam_xpt_periph.h Thu Oct 24 10:34:13 2013 (r257050) @@ -47,6 +47,7 @@ void xpt_announce_periph(struct cam_per char *announce_string); void xpt_announce_quirks(struct cam_periph *periph, int quirks, char *bit_string); +void xpt_denounce_periph(struct cam_periph *periph); #endif #endif /* _CAM_CAM_XPT_PERIPH_H */ Modified: stable/9/sys/cam/scsi/scsi_all.c ============================================================================== --- stable/9/sys/cam/scsi/scsi_all.c Thu Oct 24 10:33:31 2013 (r257049) +++ stable/9/sys/cam/scsi/scsi_all.c Thu Oct 24 10:34:13 2013 (r257050) @@ -5249,6 +5249,21 @@ scsi_print_inquiry(struct scsi_inquiry_d dtype, rstr, qtype); } +void +scsi_print_inquiry_short(struct scsi_inquiry_data *inq_data) +{ + char vendor[16], product[48], revision[16]; + + cam_strvis(vendor, inq_data->vendor, sizeof(inq_data->vendor), + sizeof(vendor)); + cam_strvis(product, inq_data->product, sizeof(inq_data->product), + sizeof(product)); + cam_strvis(revision, inq_data->revision, sizeof(inq_data->revision), + sizeof(revision)); + + printf("<%s %s %s>", vendor, product, revision); +} + /* * Table of syncrates that don't follow the "divisible by 4" * rule. This table will be expanded in future SCSI specs. Modified: stable/9/sys/cam/scsi/scsi_all.h ============================================================================== --- stable/9/sys/cam/scsi/scsi_all.h Thu Oct 24 10:33:31 2013 (r257049) +++ stable/9/sys/cam/scsi/scsi_all.h Thu Oct 24 10:34:13 2013 (r257050) @@ -2312,6 +2312,7 @@ char * scsi_cdb_string(u_int8_t *cdb_pt size_t len); void scsi_print_inquiry(struct scsi_inquiry_data *inq_data); +void scsi_print_inquiry_short(struct scsi_inquiry_data *inq_data); u_int scsi_calc_syncsrate(u_int period_factor); u_int scsi_calc_syncparam(u_int period); Modified: stable/9/sys/cam/scsi/scsi_cd.c ============================================================================== --- stable/9/sys/cam/scsi/scsi_cd.c Thu Oct 24 10:33:31 2013 (r257049) +++ stable/9/sys/cam/scsi/scsi_cd.c Thu Oct 24 10:34:13 2013 (r257050) @@ -428,7 +428,6 @@ cdoninvalidate(struct cam_periph *periph camq_remove(&softc->changer->devq, softc->pinfo.index); disk_gone(softc->disk); - xpt_print(periph->path, "lost device, %d refs\n", periph->refcount); } static void @@ -438,8 +437,6 @@ cdcleanup(struct cam_periph *periph) softc = (struct cd_softc *)periph->softc; - xpt_print(periph->path, "removing device entry\n"); - /* * In the queued, non-active case, the device in question * has already been removed from the changer run queue. Since this Modified: stable/9/sys/cam/scsi/scsi_ch.c ============================================================================== --- stable/9/sys/cam/scsi/scsi_ch.c Thu Oct 24 10:33:31 2013 (r257049) +++ stable/9/sys/cam/scsi/scsi_ch.c Thu Oct 24 10:34:13 2013 (r257050) @@ -306,9 +306,6 @@ choninvalidate(struct cam_periph *periph * when it has cleaned up its state. */ destroy_dev_sched_cb(softc->dev, chdevgonecb, periph); - - xpt_print(periph->path, "lost device\n"); - } static void @@ -318,8 +315,6 @@ chcleanup(struct cam_periph *periph) softc = (struct ch_softc *)periph->softc; - xpt_print(periph->path, "removing device entry\n"); - devstat_remove_entry(softc->device_stats); free(softc, M_DEVBUF); Modified: stable/9/sys/cam/scsi/scsi_da.c ============================================================================== --- stable/9/sys/cam/scsi/scsi_da.c Thu Oct 24 10:33:31 2013 (r257049) +++ stable/9/sys/cam/scsi/scsi_da.c Thu Oct 24 10:34:13 2013 (r257050) @@ -1561,9 +1561,6 @@ daoninvalidate(struct cam_periph *periph * done cleaning up its resources. */ disk_gone(softc->disk); - - xpt_print(periph->path, "lost device - %d outstanding, %d refs\n", - softc->outstanding_cmds, periph->refcount); } static void @@ -1573,7 +1570,6 @@ dacleanup(struct cam_periph *periph) softc = (struct da_softc *)periph->softc; - xpt_print(periph->path, "removing device entry\n"); cam_periph_unlock(periph); /* Modified: stable/9/sys/cam/scsi/scsi_enc.c ============================================================================== --- stable/9/sys/cam/scsi/scsi_enc.c Thu Oct 24 10:33:31 2013 (r257049) +++ stable/9/sys/cam/scsi/scsi_enc.c Thu Oct 24 10:34:13 2013 (r257050) @@ -178,8 +178,6 @@ enc_oninvalidate(struct cam_periph *peri callout_drain(&enc->status_updater); destroy_dev_sched_cb(enc->enc_dev, enc_devgonecb, periph); - - xpt_print(periph->path, "lost device\n"); } static void @@ -189,9 +187,6 @@ enc_dtor(struct cam_periph *periph) enc = periph->softc; - xpt_print(periph->path, "removing device entry\n"); - - /* If the sub-driver has a cleanup routine, call it */ if (enc->enc_vec.softc_cleanup != NULL) enc->enc_vec.softc_cleanup(enc); Modified: stable/9/sys/cam/scsi/scsi_pass.c ============================================================================== --- stable/9/sys/cam/scsi/scsi_pass.c Thu Oct 24 10:33:31 2013 (r257049) +++ stable/9/sys/cam/scsi/scsi_pass.c Thu Oct 24 10:34:13 2013 (r257050) @@ -207,11 +207,6 @@ passoninvalidate(struct cam_periph *peri * XXX Handle any transactions queued to the card * with XPT_ABORT_CCB. */ - - if (bootverbose) { - xpt_print(periph->path, "lost device\n"); - } - } static void @@ -221,8 +216,6 @@ passcleanup(struct cam_periph *periph) softc = (struct pass_softc *)periph->softc; - if (bootverbose) - xpt_print(periph->path, "removing device entry\n"); devstat_remove_entry(softc->device_stats); cam_periph_unlock(periph); Modified: stable/9/sys/cam/scsi/scsi_pt.c ============================================================================== --- stable/9/sys/cam/scsi/scsi_pt.c Thu Oct 24 10:33:31 2013 (r257049) +++ stable/9/sys/cam/scsi/scsi_pt.c Thu Oct 24 10:34:13 2013 (r257050) @@ -333,8 +333,6 @@ ptoninvalidate(struct cam_periph *periph * with XPT_ABORT_CCB. */ bioq_flush(&softc->bio_queue, NULL, ENXIO); - - xpt_print(periph->path, "lost device\n"); } static void @@ -344,7 +342,6 @@ ptdtor(struct cam_periph *periph) softc = (struct pt_softc *)periph->softc; - xpt_print(periph->path, "removing device entry\n"); devstat_remove_entry(softc->device_stats); cam_periph_unlock(periph); destroy_dev(softc->dev); Modified: stable/9/sys/cam/scsi/scsi_sa.c ============================================================================== --- stable/9/sys/cam/scsi/scsi_sa.c Thu Oct 24 10:33:31 2013 (r257049) +++ stable/9/sys/cam/scsi/scsi_sa.c Thu Oct 24 10:34:13 2013 (r257050) @@ -1377,9 +1377,6 @@ saoninvalidate(struct cam_periph *periph */ bioq_flush(&softc->bio_queue, NULL, ENXIO); softc->queue_count = 0; - - xpt_print(periph->path, "lost device\n"); - } static void @@ -1390,7 +1387,6 @@ sacleanup(struct cam_periph *periph) softc = (struct sa_softc *)periph->softc; - xpt_print(periph->path, "removing device entry\n"); devstat_remove_entry(softc->device_stats); cam_periph_unlock(periph); destroy_dev(softc->devs.ctl_dev); Modified: stable/9/sys/cam/scsi/scsi_sg.c ============================================================================== --- stable/9/sys/cam/scsi/scsi_sg.c Thu Oct 24 10:33:31 2013 (r257049) +++ stable/9/sys/cam/scsi/scsi_sg.c Thu Oct 24 10:34:13 2013 (r257050) @@ -238,9 +238,6 @@ sgoninvalidate(struct cam_periph *periph * with XPT_ABORT_CCB. */ - if (bootverbose) { - xpt_print(periph->path, "lost device\n"); - } } static void @@ -249,8 +246,6 @@ sgcleanup(struct cam_periph *periph) struct sg_softc *softc; softc = (struct sg_softc *)periph->softc; - if (bootverbose) - xpt_print(periph->path, "removing device entry\n"); devstat_remove_entry(softc->device_stats); From owner-svn-src-stable@FreeBSD.ORG Thu Oct 24 10:33:35 2013 Return-Path: Delivered-To: svn-src-stable@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [8.8.178.115]) (using TLSv1 with cipher ADH-AES256-SHA (256/256 bits)) (No client certificate requested) by hub.freebsd.org (Postfix) with ESMTP id 74B30E37; Thu, 24 Oct 2013 10:33:35 +0000 (UTC) (envelope-from mav@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:1900:2254:2068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mx1.freebsd.org (Postfix) with ESMTPS id 60FBB210E; Thu, 24 Oct 2013 10:33:35 +0000 (UTC) Received: from svn.freebsd.org ([127.0.1.70]) by svn.freebsd.org (8.14.7/8.14.7) with ESMTP id r9OAXZJK022639; Thu, 24 Oct 2013 10:33:35 GMT (envelope-from mav@svn.freebsd.org) Received: (from mav@localhost) by svn.freebsd.org (8.14.7/8.14.5/Submit) id r9OAXVgU022614; Thu, 24 Oct 2013 10:33:31 GMT (envelope-from mav@svn.freebsd.org) Message-Id: <201310241033.r9OAXVgU022614@svn.freebsd.org> From: Alexander Motin Date: Thu, 24 Oct 2013 10:33:31 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-stable@freebsd.org, svn-src-stable-10@freebsd.org Subject: svn commit: r257049 - in stable/10/sys/cam: . ata scsi X-SVN-Group: stable-10 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-stable@freebsd.org X-Mailman-Version: 2.1.14 Precedence: list List-Id: SVN commit messages for all the -stable branches of the src tree List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 24 Oct 2013 10:33:35 -0000 Author: mav Date: Thu Oct 24 10:33:31 2013 New Revision: 257049 URL: http://svnweb.freebsd.org/changeset/base/257049 Log: MFC r256552: Unify periph invalidation and destruction reporting. Print message containing device model and serial number on invalidation. Approved by: re (hrs) Modified: stable/10/sys/cam/ata/ata_all.c stable/10/sys/cam/ata/ata_all.h stable/10/sys/cam/ata/ata_da.c stable/10/sys/cam/ata/ata_pmp.c stable/10/sys/cam/cam_periph.c stable/10/sys/cam/cam_periph.h stable/10/sys/cam/cam_xpt.c stable/10/sys/cam/cam_xpt_periph.h stable/10/sys/cam/scsi/scsi_all.c stable/10/sys/cam/scsi/scsi_all.h stable/10/sys/cam/scsi/scsi_cd.c stable/10/sys/cam/scsi/scsi_ch.c stable/10/sys/cam/scsi/scsi_da.c stable/10/sys/cam/scsi/scsi_enc.c stable/10/sys/cam/scsi/scsi_pass.c stable/10/sys/cam/scsi/scsi_pt.c stable/10/sys/cam/scsi/scsi_sa.c stable/10/sys/cam/scsi/scsi_sg.c Directory Properties: stable/10/sys/ (props changed) Modified: stable/10/sys/cam/ata/ata_all.c ============================================================================== --- stable/10/sys/cam/ata/ata_all.c Thu Oct 24 10:31:53 2013 (r257048) +++ stable/10/sys/cam/ata/ata_all.c Thu Oct 24 10:33:31 2013 (r257049) @@ -297,6 +297,18 @@ ata_print_ident(struct ata_params *ident } void +ata_print_ident_short(struct ata_params *ident_data) +{ + char product[48], revision[16]; + + cam_strvis(product, ident_data->model, sizeof(ident_data->model), + sizeof(product)); + cam_strvis(revision, ident_data->revision, sizeof(ident_data->revision), + sizeof(revision)); + printf("<%s %s>", product, revision); +} + +void semb_print_ident(struct sep_identify_data *ident_data) { char vendor[9], product[17], revision[5], fw[5], in[7], ins[5]; @@ -311,6 +323,18 @@ semb_print_ident(struct sep_identify_dat vendor, product, revision, fw, in, ins); } +void +semb_print_ident_short(struct sep_identify_data *ident_data) +{ + char vendor[9], product[17], revision[5], fw[5]; + + cam_strvis(vendor, ident_data->vendor_id, 8, sizeof(vendor)); + cam_strvis(product, ident_data->product_id, 16, sizeof(product)); + cam_strvis(revision, ident_data->product_rev, 4, sizeof(revision)); + cam_strvis(fw, ident_data->firmware_rev, 4, sizeof(fw)); + printf("<%s %s %s %s>", vendor, product, revision, fw); +} + uint32_t ata_logical_sector_size(struct ata_params *ident_data) { Modified: stable/10/sys/cam/ata/ata_all.h ============================================================================== --- stable/10/sys/cam/ata/ata_all.h Thu Oct 24 10:31:53 2013 (r257048) +++ stable/10/sys/cam/ata/ata_all.h Thu Oct 24 10:33:31 2013 (r257049) @@ -109,6 +109,7 @@ int ata_status_sbuf(struct ccb_ataio *at int ata_res_sbuf(struct ccb_ataio *ataio, struct sbuf *sb); void ata_print_ident(struct ata_params *ident_data); +void ata_print_ident_short(struct ata_params *ident_data); uint32_t ata_logical_sector_size(struct ata_params *ident_data); uint64_t ata_physical_sector_size(struct ata_params *ident_data); @@ -143,6 +144,7 @@ int ata_identify_match(caddr_t identbuff int ata_static_identify_match(caddr_t identbuffer, caddr_t table_entry); void semb_print_ident(struct sep_identify_data *ident_data); +void semb_print_ident_short(struct sep_identify_data *ident_data); void semb_receive_diagnostic_results(struct ccb_ataio *ataio, u_int32_t retries, void (*cbfcnp)(struct cam_periph *, union ccb*), Modified: stable/10/sys/cam/ata/ata_da.c ============================================================================== --- stable/10/sys/cam/ata/ata_da.c Thu Oct 24 10:31:53 2013 (r257048) +++ stable/10/sys/cam/ata/ata_da.c Thu Oct 24 10:33:31 2013 (r257049) @@ -907,7 +907,6 @@ adaoninvalidate(struct cam_periph *perip bioq_flush(&softc->trim_queue, NULL, ENXIO); disk_gone(softc->disk); - xpt_print(periph->path, "lost device\n"); } static void @@ -917,7 +916,6 @@ adacleanup(struct cam_periph *periph) softc = (struct ada_softc *)periph->softc; - xpt_print(periph->path, "removing device entry\n"); cam_periph_unlock(periph); /* Modified: stable/10/sys/cam/ata/ata_pmp.c ============================================================================== --- stable/10/sys/cam/ata/ata_pmp.c Thu Oct 24 10:31:53 2013 (r257048) +++ stable/10/sys/cam/ata/ata_pmp.c Thu Oct 24 10:33:31 2013 (r257049) @@ -241,7 +241,6 @@ pmponinvalidate(struct cam_periph *perip } } pmprelease(periph, -1); - xpt_print(periph->path, "lost device\n"); } static void @@ -251,7 +250,6 @@ pmpcleanup(struct cam_periph *periph) softc = (struct pmp_softc *)periph->softc; - xpt_print(periph->path, "removing device entry\n"); cam_periph_unlock(periph); /* Modified: stable/10/sys/cam/cam_periph.c ============================================================================== --- stable/10/sys/cam/cam_periph.c Thu Oct 24 10:31:53 2013 (r257048) +++ stable/10/sys/cam/cam_periph.c Thu Oct 24 10:33:31 2013 (r257049) @@ -586,6 +586,8 @@ cam_periph_invalidate(struct cam_periph return; CAM_DEBUG(periph->path, CAM_DEBUG_INFO, ("Periph invalidated\n")); + if (periph->flags & CAM_PERIPH_ANNOUNCED) + xpt_denounce_periph(periph); periph->flags |= CAM_PERIPH_INVALID; periph->flags &= ~CAM_PERIPH_NEW_DEV_FOUND; if (periph->periph_oninval != NULL) @@ -648,7 +650,10 @@ camperiphfree(struct cam_periph *periph) xpt_remove_periph(periph); xpt_unlock_buses(); - CAM_DEBUG(periph->path, CAM_DEBUG_INFO, ("Periph destroyed\n")); + if (periph->flags & CAM_PERIPH_ANNOUNCED) { + xpt_print(periph->path, "Periph destroyed\n"); + } else + CAM_DEBUG(periph->path, CAM_DEBUG_INFO, ("Periph destroyed\n")); if (periph->flags & CAM_PERIPH_NEW_DEV_FOUND) { union ccb ccb; Modified: stable/10/sys/cam/cam_periph.h ============================================================================== --- stable/10/sys/cam/cam_periph.h Thu Oct 24 10:31:53 2013 (r257048) +++ stable/10/sys/cam/cam_periph.h Thu Oct 24 10:33:31 2013 (r257049) @@ -121,6 +121,7 @@ struct cam_periph { #define CAM_PERIPH_NEW_DEV_FOUND 0x10 #define CAM_PERIPH_RECOVERY_INPROG 0x20 #define CAM_PERIPH_FREE 0x80 +#define CAM_PERIPH_ANNOUNCED 0x100 u_int32_t immediate_priority; u_int32_t refcount; SLIST_HEAD(, ccb_hdr) ccb_list; /* For "immediate" requests */ Modified: stable/10/sys/cam/cam_xpt.c ============================================================================== --- stable/10/sys/cam/cam_xpt.c Thu Oct 24 10:31:53 2013 (r257048) +++ stable/10/sys/cam/cam_xpt.c Thu Oct 24 10:33:31 2013 (r257049) @@ -1023,6 +1023,7 @@ xpt_announce_periph(struct cam_periph *p struct cam_path *path = periph->path; mtx_assert(periph->sim->mtx, MA_OWNED); + periph->flags |= CAM_PERIPH_ANNOUNCED; printf("%s%d at %s%d bus %d scbus%d target %d lun %d\n", periph->periph_name, periph->unit_number, @@ -1071,6 +1072,37 @@ xpt_announce_quirks(struct cam_periph *p } } +void +xpt_denounce_periph(struct cam_periph *periph) +{ + struct cam_path *path = periph->path; + + mtx_assert(periph->sim->mtx, MA_OWNED); + printf("%s%d at %s%d bus %d scbus%d target %d lun %d\n", + periph->periph_name, periph->unit_number, + path->bus->sim->sim_name, + path->bus->sim->unit_number, + path->bus->sim->bus_id, + path->bus->path_id, + path->target->target_id, + path->device->lun_id); + printf("%s%d: ", periph->periph_name, periph->unit_number); + if (path->device->protocol == PROTO_SCSI) + scsi_print_inquiry_short(&path->device->inq_data); + else if (path->device->protocol == PROTO_ATA || + path->device->protocol == PROTO_SATAPM) + ata_print_ident_short(&path->device->ident_data); + else if (path->device->protocol == PROTO_SEMB) + semb_print_ident_short( + (struct sep_identify_data *)&path->device->ident_data); + else + printf("Unknown protocol device"); + if (path->device->serial_num_len > 0) + printf(" s/n %.60s", path->device->serial_num); + printf(" detached\n"); +} + + int xpt_getattr(char *buf, size_t len, const char *attr, struct cam_path *path) { Modified: stable/10/sys/cam/cam_xpt_periph.h ============================================================================== --- stable/10/sys/cam/cam_xpt_periph.h Thu Oct 24 10:31:53 2013 (r257048) +++ stable/10/sys/cam/cam_xpt_periph.h Thu Oct 24 10:33:31 2013 (r257049) @@ -47,6 +47,7 @@ void xpt_announce_periph(struct cam_per char *announce_string); void xpt_announce_quirks(struct cam_periph *periph, int quirks, char *bit_string); +void xpt_denounce_periph(struct cam_periph *periph); #endif #endif /* _CAM_CAM_XPT_PERIPH_H */ Modified: stable/10/sys/cam/scsi/scsi_all.c ============================================================================== --- stable/10/sys/cam/scsi/scsi_all.c Thu Oct 24 10:31:53 2013 (r257048) +++ stable/10/sys/cam/scsi/scsi_all.c Thu Oct 24 10:33:31 2013 (r257049) @@ -5249,6 +5249,21 @@ scsi_print_inquiry(struct scsi_inquiry_d dtype, rstr, qtype); } +void +scsi_print_inquiry_short(struct scsi_inquiry_data *inq_data) +{ + char vendor[16], product[48], revision[16]; + + cam_strvis(vendor, inq_data->vendor, sizeof(inq_data->vendor), + sizeof(vendor)); + cam_strvis(product, inq_data->product, sizeof(inq_data->product), + sizeof(product)); + cam_strvis(revision, inq_data->revision, sizeof(inq_data->revision), + sizeof(revision)); + + printf("<%s %s %s>", vendor, product, revision); +} + /* * Table of syncrates that don't follow the "divisible by 4" * rule. This table will be expanded in future SCSI specs. Modified: stable/10/sys/cam/scsi/scsi_all.h ============================================================================== --- stable/10/sys/cam/scsi/scsi_all.h Thu Oct 24 10:31:53 2013 (r257048) +++ stable/10/sys/cam/scsi/scsi_all.h Thu Oct 24 10:33:31 2013 (r257049) @@ -2313,6 +2313,7 @@ char * scsi_cdb_string(u_int8_t *cdb_pt size_t len); void scsi_print_inquiry(struct scsi_inquiry_data *inq_data); +void scsi_print_inquiry_short(struct scsi_inquiry_data *inq_data); u_int scsi_calc_syncsrate(u_int period_factor); u_int scsi_calc_syncparam(u_int period); Modified: stable/10/sys/cam/scsi/scsi_cd.c ============================================================================== --- stable/10/sys/cam/scsi/scsi_cd.c Thu Oct 24 10:31:53 2013 (r257048) +++ stable/10/sys/cam/scsi/scsi_cd.c Thu Oct 24 10:33:31 2013 (r257049) @@ -428,7 +428,6 @@ cdoninvalidate(struct cam_periph *periph camq_remove(&softc->changer->devq, softc->pinfo.index); disk_gone(softc->disk); - xpt_print(periph->path, "lost device, %d refs\n", periph->refcount); } static void @@ -438,8 +437,6 @@ cdcleanup(struct cam_periph *periph) softc = (struct cd_softc *)periph->softc; - xpt_print(periph->path, "removing device entry\n"); - /* * In the queued, non-active case, the device in question * has already been removed from the changer run queue. Since this Modified: stable/10/sys/cam/scsi/scsi_ch.c ============================================================================== --- stable/10/sys/cam/scsi/scsi_ch.c Thu Oct 24 10:31:53 2013 (r257048) +++ stable/10/sys/cam/scsi/scsi_ch.c Thu Oct 24 10:33:31 2013 (r257049) @@ -306,9 +306,6 @@ choninvalidate(struct cam_periph *periph * when it has cleaned up its state. */ destroy_dev_sched_cb(softc->dev, chdevgonecb, periph); - - xpt_print(periph->path, "lost device\n"); - } static void @@ -318,8 +315,6 @@ chcleanup(struct cam_periph *periph) softc = (struct ch_softc *)periph->softc; - xpt_print(periph->path, "removing device entry\n"); - devstat_remove_entry(softc->device_stats); free(softc, M_DEVBUF); Modified: stable/10/sys/cam/scsi/scsi_da.c ============================================================================== --- stable/10/sys/cam/scsi/scsi_da.c Thu Oct 24 10:31:53 2013 (r257048) +++ stable/10/sys/cam/scsi/scsi_da.c Thu Oct 24 10:33:31 2013 (r257049) @@ -1561,9 +1561,6 @@ daoninvalidate(struct cam_periph *periph * done cleaning up its resources. */ disk_gone(softc->disk); - - xpt_print(periph->path, "lost device - %d outstanding, %d refs\n", - softc->outstanding_cmds, periph->refcount); } static void @@ -1573,7 +1570,6 @@ dacleanup(struct cam_periph *periph) softc = (struct da_softc *)periph->softc; - xpt_print(periph->path, "removing device entry\n"); cam_periph_unlock(periph); /* Modified: stable/10/sys/cam/scsi/scsi_enc.c ============================================================================== --- stable/10/sys/cam/scsi/scsi_enc.c Thu Oct 24 10:31:53 2013 (r257048) +++ stable/10/sys/cam/scsi/scsi_enc.c Thu Oct 24 10:33:31 2013 (r257049) @@ -178,8 +178,6 @@ enc_oninvalidate(struct cam_periph *peri callout_drain(&enc->status_updater); destroy_dev_sched_cb(enc->enc_dev, enc_devgonecb, periph); - - xpt_print(periph->path, "lost device\n"); } static void @@ -189,9 +187,6 @@ enc_dtor(struct cam_periph *periph) enc = periph->softc; - xpt_print(periph->path, "removing device entry\n"); - - /* If the sub-driver has a cleanup routine, call it */ if (enc->enc_vec.softc_cleanup != NULL) enc->enc_vec.softc_cleanup(enc); Modified: stable/10/sys/cam/scsi/scsi_pass.c ============================================================================== --- stable/10/sys/cam/scsi/scsi_pass.c Thu Oct 24 10:31:53 2013 (r257048) +++ stable/10/sys/cam/scsi/scsi_pass.c Thu Oct 24 10:33:31 2013 (r257049) @@ -207,11 +207,6 @@ passoninvalidate(struct cam_periph *peri * XXX Handle any transactions queued to the card * with XPT_ABORT_CCB. */ - - if (bootverbose) { - xpt_print(periph->path, "lost device\n"); - } - } static void @@ -221,8 +216,6 @@ passcleanup(struct cam_periph *periph) softc = (struct pass_softc *)periph->softc; - if (bootverbose) - xpt_print(periph->path, "removing device entry\n"); devstat_remove_entry(softc->device_stats); cam_periph_unlock(periph); Modified: stable/10/sys/cam/scsi/scsi_pt.c ============================================================================== --- stable/10/sys/cam/scsi/scsi_pt.c Thu Oct 24 10:31:53 2013 (r257048) +++ stable/10/sys/cam/scsi/scsi_pt.c Thu Oct 24 10:33:31 2013 (r257049) @@ -333,8 +333,6 @@ ptoninvalidate(struct cam_periph *periph * with XPT_ABORT_CCB. */ bioq_flush(&softc->bio_queue, NULL, ENXIO); - - xpt_print(periph->path, "lost device\n"); } static void @@ -344,7 +342,6 @@ ptdtor(struct cam_periph *periph) softc = (struct pt_softc *)periph->softc; - xpt_print(periph->path, "removing device entry\n"); devstat_remove_entry(softc->device_stats); cam_periph_unlock(periph); destroy_dev(softc->dev); Modified: stable/10/sys/cam/scsi/scsi_sa.c ============================================================================== --- stable/10/sys/cam/scsi/scsi_sa.c Thu Oct 24 10:31:53 2013 (r257048) +++ stable/10/sys/cam/scsi/scsi_sa.c Thu Oct 24 10:33:31 2013 (r257049) @@ -1401,9 +1401,6 @@ saoninvalidate(struct cam_periph *periph */ bioq_flush(&softc->bio_queue, NULL, ENXIO); softc->queue_count = 0; - - xpt_print(periph->path, "lost device\n"); - } static void @@ -1414,7 +1411,6 @@ sacleanup(struct cam_periph *periph) softc = (struct sa_softc *)periph->softc; - xpt_print(periph->path, "removing device entry\n"); devstat_remove_entry(softc->device_stats); cam_periph_unlock(periph); destroy_dev(softc->devs.ctl_dev); Modified: stable/10/sys/cam/scsi/scsi_sg.c ============================================================================== --- stable/10/sys/cam/scsi/scsi_sg.c Thu Oct 24 10:31:53 2013 (r257048) +++ stable/10/sys/cam/scsi/scsi_sg.c Thu Oct 24 10:33:31 2013 (r257049) @@ -238,9 +238,6 @@ sgoninvalidate(struct cam_periph *periph * with XPT_ABORT_CCB. */ - if (bootverbose) { - xpt_print(periph->path, "lost device\n"); - } } static void @@ -249,8 +246,6 @@ sgcleanup(struct cam_periph *periph) struct sg_softc *softc; softc = (struct sg_softc *)periph->softc; - if (bootverbose) - xpt_print(periph->path, "removing device entry\n"); devstat_remove_entry(softc->device_stats); From owner-svn-src-stable@FreeBSD.ORG Thu Oct 24 10:53:36 2013 Return-Path: Delivered-To: svn-src-stable@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) (using TLSv1 with cipher ADH-AES256-SHA (256/256 bits)) (No client certificate requested) by hub.freebsd.org (Postfix) with ESMTP id 2CA87934; Thu, 24 Oct 2013 10:53:36 +0000 (UTC) (envelope-from bdrewery@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:1900:2254:2068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mx1.freebsd.org (Postfix) with ESMTPS id 15C3122E6; Thu, 24 Oct 2013 10:53:36 +0000 (UTC) Received: from svn.freebsd.org ([127.0.1.70]) by svn.freebsd.org (8.14.7/8.14.7) with ESMTP id r9OArZtr029145; Thu, 24 Oct 2013 10:53:35 GMT (envelope-from bdrewery@svn.freebsd.org) Received: (from bdrewery@localhost) by svn.freebsd.org (8.14.7/8.14.5/Submit) id r9OArZQh029144; Thu, 24 Oct 2013 10:53:35 GMT (envelope-from bdrewery@svn.freebsd.org) Message-Id: <201310241053.r9OArZQh029144@svn.freebsd.org> From: Bryan Drewery Date: Thu, 24 Oct 2013 10:53:35 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-stable@freebsd.org, svn-src-stable-9@freebsd.org Subject: svn commit: r257052 - stable/9 X-SVN-Group: stable-9 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-stable@freebsd.org X-Mailman-Version: 2.1.14 Precedence: list List-Id: SVN commit messages for all the -stable branches of the src tree List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 24 Oct 2013 10:53:36 -0000 Author: bdrewery (ports committer) Date: Thu Oct 24 10:53:35 2013 New Revision: 257052 URL: http://svnweb.freebsd.org/changeset/base/257052 Log: MFC r256842: Fix 'make delete-old-libs' and 'make check-libs' to delete .debug files created by WITH_DEBUG_FILES. Also cleanup .symbols files from the period between r244236 when .symbols were supported and r251512 when they were renamed to .debug. Only propose to delete a .debug file if the corresponding library itself was deleted already. Approved by: bapt Modified: stable/9/Makefile.inc1 (contents, props changed) Modified: stable/9/Makefile.inc1 ============================================================================== --- stable/9/Makefile.inc1 Thu Oct 24 10:49:55 2013 (r257051) +++ stable/9/Makefile.inc1 Thu Oct 24 10:53:35 2013 (r257052) @@ -1574,6 +1574,13 @@ delete-old-libs: chflags noschg "${DESTDIR}/$${file}" 2>/dev/null || true; \ rm ${RM_I} "${DESTDIR}/$${file}" <&3; \ fi; \ + for ext in debug symbols; do \ + if ! [ -e "${DESTDIR}/$${file}" ] && [ -f \ + "${DESTDIR}${DEBUGDIR}/$${file}.$${ext}" ]; then \ + rm ${RM_I} "${DESTDIR}${DEBUGDIR}/$${file}.$${ext}" \ + <&3; \ + fi; \ + done; \ done @echo ">>> Old libraries removed" @@ -1585,6 +1592,11 @@ check-old-libs: if [ -f "${DESTDIR}/$${file}" -o -L "${DESTDIR}/$${file}" ]; then \ echo "${DESTDIR}/$${file}"; \ fi; \ + for ext in debug symbols; do \ + if [ -f "${DESTDIR}${DEBUGDIR}/$${file}.$${ext}" ]; then \ + echo "${DESTDIR}${DEBUGDIR}/$${file}.$${ext}"; \ + fi; \ + done; \ done delete-old-dirs: From owner-svn-src-stable@FreeBSD.ORG Thu Oct 24 11:35:50 2013 Return-Path: Delivered-To: svn-src-stable@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [8.8.178.115]) (using TLSv1 with cipher ADH-AES256-SHA (256/256 bits)) (No client certificate requested) by hub.freebsd.org (Postfix) with ESMTP id D9D5EDF2; Thu, 24 Oct 2013 11:35:50 +0000 (UTC) (envelope-from bdrewery@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:1900:2254:2068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mx1.freebsd.org (Postfix) with ESMTPS id C77E22665; Thu, 24 Oct 2013 11:35:50 +0000 (UTC) Received: from svn.freebsd.org ([127.0.1.70]) by svn.freebsd.org (8.14.7/8.14.7) with ESMTP id r9OBZoaJ043194; Thu, 24 Oct 2013 11:35:50 GMT (envelope-from bdrewery@svn.freebsd.org) Received: (from bdrewery@localhost) by svn.freebsd.org (8.14.7/8.14.5/Submit) id r9OBZo8M043193; Thu, 24 Oct 2013 11:35:50 GMT (envelope-from bdrewery@svn.freebsd.org) Message-Id: <201310241135.r9OBZo8M043193@svn.freebsd.org> From: Bryan Drewery Date: Thu, 24 Oct 2013 11:35:50 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-stable@freebsd.org, svn-src-stable-10@freebsd.org Subject: svn commit: r257053 - stable/10 X-SVN-Group: stable-10 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-stable@freebsd.org X-Mailman-Version: 2.1.14 Precedence: list List-Id: SVN commit messages for all the -stable branches of the src tree List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 24 Oct 2013 11:35:50 -0000 Author: bdrewery (ports committer) Date: Thu Oct 24 11:35:50 2013 New Revision: 257053 URL: http://svnweb.freebsd.org/changeset/base/257053 Log: MFC r256842: Fix 'make delete-old-libs' and 'make check-libs' to delete .debug files created by WITH_DEBUG_FILES. Also cleanup .symbols files from the period between r244236 when .symbols were supported and r251512 when they were renamed to .debug. Only propose to delete a .debug file if the corresponding library itself was deleted already. Approved by: bapt Approved by: re (glebius) Modified: stable/10/Makefile.inc1 (contents, props changed) Modified: stable/10/Makefile.inc1 ============================================================================== --- stable/10/Makefile.inc1 Thu Oct 24 10:53:35 2013 (r257052) +++ stable/10/Makefile.inc1 Thu Oct 24 11:35:50 2013 (r257053) @@ -1722,6 +1722,13 @@ delete-old-libs: chflags noschg "${DESTDIR}/$${file}" 2>/dev/null || true; \ rm ${RM_I} "${DESTDIR}/$${file}" <&3; \ fi; \ + for ext in debug symbols; do \ + if ! [ -e "${DESTDIR}/$${file}" ] && [ -f \ + "${DESTDIR}${DEBUGDIR}/$${file}.$${ext}" ]; then \ + rm ${RM_I} "${DESTDIR}${DEBUGDIR}/$${file}.$${ext}" \ + <&3; \ + fi; \ + done; \ done @echo ">>> Old libraries removed" @@ -1733,6 +1740,11 @@ check-old-libs: if [ -f "${DESTDIR}/$${file}" -o -L "${DESTDIR}/$${file}" ]; then \ echo "${DESTDIR}/$${file}"; \ fi; \ + for ext in debug symbols; do \ + if [ -f "${DESTDIR}${DEBUGDIR}/$${file}.$${ext}" ]; then \ + echo "${DESTDIR}${DEBUGDIR}/$${file}.$${ext}"; \ + fi; \ + done; \ done delete-old-dirs: From owner-svn-src-stable@FreeBSD.ORG Thu Oct 24 15:21:21 2013 Return-Path: Delivered-To: svn-src-stable@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) (using TLSv1 with cipher ADH-AES256-SHA (256/256 bits)) (No client certificate requested) by hub.freebsd.org (Postfix) with ESMTP id 51EC29A7; Thu, 24 Oct 2013 15:21:21 +0000 (UTC) (envelope-from smh@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:1900:2254:2068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mx1.freebsd.org (Postfix) with ESMTPS id 3E40A2538; Thu, 24 Oct 2013 15:21:21 +0000 (UTC) Received: from svn.freebsd.org ([127.0.1.70]) by svn.freebsd.org (8.14.7/8.14.7) with ESMTP id r9OFLLfb020323; Thu, 24 Oct 2013 15:21:21 GMT (envelope-from smh@svn.freebsd.org) Received: (from smh@localhost) by svn.freebsd.org (8.14.7/8.14.5/Submit) id r9OFLLYW020322; Thu, 24 Oct 2013 15:21:21 GMT (envelope-from smh@svn.freebsd.org) Message-Id: <201310241521.r9OFLLYW020322@svn.freebsd.org> From: Steven Hartland Date: Thu, 24 Oct 2013 15:21:21 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-stable@freebsd.org, svn-src-stable-10@freebsd.org Subject: svn commit: r257058 - stable/10/sys/cddl/contrib/opensolaris/uts/common/fs/zfs X-SVN-Group: stable-10 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-stable@freebsd.org X-Mailman-Version: 2.1.14 Precedence: list List-Id: SVN commit messages for all the -stable branches of the src tree List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 24 Oct 2013 15:21:21 -0000 Author: smh Date: Thu Oct 24 15:21:20 2013 New Revision: 257058 URL: http://svnweb.freebsd.org/changeset/base/257058 Log: MFC r256889: Use the vdev's ashift to calculate the supported min block size passed to zio_compress_data(..) when compressing l2arc buffers. This eliminates L2ARC I/O errors, which resulted in very poor performance on vdev's configured with block size greater than 512b due to compression assuming a smaller min block size than the vdev supports. Approved by: re (glebius) Modified: stable/10/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/arc.c Directory Properties: stable/10/sys/ (props changed) stable/10/sys/cddl/contrib/opensolaris/ (props changed) Modified: stable/10/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/arc.c ============================================================================== --- stable/10/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/arc.c Thu Oct 24 15:11:30 2013 (r257057) +++ stable/10/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/arc.c Thu Oct 24 15:21:20 2013 (r257058) @@ -5147,7 +5147,7 @@ l2arc_compress_buf(l2arc_buf_hdr_t *l2hd len = l2hdr->b_asize; cdata = zio_data_buf_alloc(len); csize = zio_compress_data(ZIO_COMPRESS_LZ4, l2hdr->b_tmp_cdata, - cdata, l2hdr->b_asize, (size_t)SPA_MINBLOCKSIZE); + cdata, l2hdr->b_asize, (size_t)(1ULL << l2hdr->b_dev->l2ad_vdev->vdev_ashift)); if (csize == 0) { /* zero block, indicate that there's nothing to write */ From owner-svn-src-stable@FreeBSD.ORG Fri Oct 25 06:03:07 2013 Return-Path: Delivered-To: svn-src-stable@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) (using TLSv1 with cipher ADH-AES256-SHA (256/256 bits)) (No client certificate requested) by hub.freebsd.org (Postfix) with ESMTP id DF9B7F62; Fri, 25 Oct 2013 06:03:07 +0000 (UTC) (envelope-from mav@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:1900:2254:2068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mx1.freebsd.org (Postfix) with ESMTPS id CB7C12E11; Fri, 25 Oct 2013 06:03:07 +0000 (UTC) Received: from svn.freebsd.org ([127.0.1.70]) by svn.freebsd.org (8.14.7/8.14.7) with ESMTP id r9P637hH020308; Fri, 25 Oct 2013 06:03:07 GMT (envelope-from mav@svn.freebsd.org) Received: (from mav@localhost) by svn.freebsd.org (8.14.7/8.14.5/Submit) id r9P637Ul020307; Fri, 25 Oct 2013 06:03:07 GMT (envelope-from mav@svn.freebsd.org) Message-Id: <201310250603.r9P637Ul020307@svn.freebsd.org> From: Alexander Motin Date: Fri, 25 Oct 2013 06:03:07 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-stable@freebsd.org, svn-src-stable-9@freebsd.org Subject: svn commit: r257101 - stable/9/sbin/camcontrol X-SVN-Group: stable-9 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-stable@freebsd.org X-Mailman-Version: 2.1.14 Precedence: list List-Id: SVN commit messages for all the -stable branches of the src tree List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 25 Oct 2013 06:03:08 -0000 Author: mav Date: Fri Oct 25 06:03:07 2013 New Revision: 257101 URL: http://svnweb.freebsd.org/changeset/base/257101 Log: MFC r256317: Fix mode page length calculation to remove last garbage line from the `camcontrol mode daX -l` output. Modified: stable/9/sbin/camcontrol/modeedit.c Directory Properties: stable/9/sbin/camcontrol/ (props changed) Modified: stable/9/sbin/camcontrol/modeedit.c ============================================================================== --- stable/9/sbin/camcontrol/modeedit.c Fri Oct 25 05:33:04 2013 (r257100) +++ stable/9/sbin/camcontrol/modeedit.c Fri Oct 25 06:03:07 2013 (r257101) @@ -886,12 +886,12 @@ mode_list(struct cam_device *device, int timeout, data, sizeof(data)); mh = (struct scsi_mode_header_6 *)data; - len = mh->blk_desc_len; /* Skip block descriptors. */ + len = sizeof(*mh) + mh->blk_desc_len; /* Skip block descriptors. */ /* Iterate through the pages in the reply. */ while (len < mh->data_length) { /* Locate the next mode page header. */ mph = (struct scsi_mode_page_header *) - ((intptr_t)mh + sizeof(*mh) + len); + ((intptr_t)mh + len); mph->page_code &= SMS_PAGE_CODE; nameentry = nameentry_lookup(mph->page_code); From owner-svn-src-stable@FreeBSD.ORG Fri Oct 25 06:04:21 2013 Return-Path: Delivered-To: svn-src-stable@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) (using TLSv1 with cipher ADH-AES256-SHA (256/256 bits)) (No client certificate requested) by hub.freebsd.org (Postfix) with ESMTP id BBB67150; Fri, 25 Oct 2013 06:04:21 +0000 (UTC) (envelope-from mav@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:1900:2254:2068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mx1.freebsd.org (Postfix) with ESMTPS id A93982E1D; Fri, 25 Oct 2013 06:04:21 +0000 (UTC) Received: from svn.freebsd.org ([127.0.1.70]) by svn.freebsd.org (8.14.7/8.14.7) with ESMTP id r9P64Lie020638; Fri, 25 Oct 2013 06:04:21 GMT (envelope-from mav@svn.freebsd.org) Received: (from mav@localhost) by svn.freebsd.org (8.14.7/8.14.5/Submit) id r9P64LA6020637; Fri, 25 Oct 2013 06:04:21 GMT (envelope-from mav@svn.freebsd.org) Message-Id: <201310250604.r9P64LA6020637@svn.freebsd.org> From: Alexander Motin Date: Fri, 25 Oct 2013 06:04:21 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-stable@freebsd.org, svn-src-stable-8@freebsd.org Subject: svn commit: r257102 - stable/8/sbin/camcontrol X-SVN-Group: stable-8 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-stable@freebsd.org X-Mailman-Version: 2.1.14 Precedence: list List-Id: SVN commit messages for all the -stable branches of the src tree List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 25 Oct 2013 06:04:21 -0000 Author: mav Date: Fri Oct 25 06:04:21 2013 New Revision: 257102 URL: http://svnweb.freebsd.org/changeset/base/257102 Log: MFC r256317: Fix mode page length calculation to remove last garbage line from the `camcontrol mode daX -l` output. Modified: stable/8/sbin/camcontrol/modeedit.c Directory Properties: stable/8/sbin/camcontrol/ (props changed) Modified: stable/8/sbin/camcontrol/modeedit.c ============================================================================== --- stable/8/sbin/camcontrol/modeedit.c Fri Oct 25 06:03:07 2013 (r257101) +++ stable/8/sbin/camcontrol/modeedit.c Fri Oct 25 06:04:21 2013 (r257102) @@ -888,12 +888,12 @@ mode_list(struct cam_device *device, int timeout, data, sizeof(data)); mh = (struct scsi_mode_header_6 *)data; - len = mh->blk_desc_len; /* Skip block descriptors. */ + len = sizeof(*mh) + mh->blk_desc_len; /* Skip block descriptors. */ /* Iterate through the pages in the reply. */ while (len < mh->data_length) { /* Locate the next mode page header. */ mph = (struct scsi_mode_page_header *) - ((intptr_t)mh + sizeof(*mh) + len); + ((intptr_t)mh + len); mode_pars = MODE_PAGE_DATA(mph); mph->page_code &= SMS_PAGE_CODE; From owner-svn-src-stable@FreeBSD.ORG Fri Oct 25 06:47:01 2013 Return-Path: Delivered-To: svn-src-stable@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [8.8.178.115]) (using TLSv1 with cipher ADH-AES256-SHA (256/256 bits)) (No client certificate requested) by hub.freebsd.org (Postfix) with ESMTP id B18E8360; Fri, 25 Oct 2013 06:47:01 +0000 (UTC) (envelope-from hselasky@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:1900:2254:2068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mx1.freebsd.org (Postfix) with ESMTPS id 9E1C520BE; Fri, 25 Oct 2013 06:47:01 +0000 (UTC) Received: from svn.freebsd.org ([127.0.1.70]) by svn.freebsd.org (8.14.7/8.14.7) with ESMTP id r9P6l1I8035840; Fri, 25 Oct 2013 06:47:01 GMT (envelope-from hselasky@svn.freebsd.org) Received: (from hselasky@localhost) by svn.freebsd.org (8.14.7/8.14.5/Submit) id r9P6l1fW035839; Fri, 25 Oct 2013 06:47:01 GMT (envelope-from hselasky@svn.freebsd.org) Message-Id: <201310250647.r9P6l1fW035839@svn.freebsd.org> From: Hans Petter Selasky Date: Fri, 25 Oct 2013 06:47:01 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-stable@freebsd.org, svn-src-stable-8@freebsd.org Subject: svn commit: r257106 - stable/8/sys/dev/usb/controller X-SVN-Group: stable-8 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-stable@freebsd.org X-Mailman-Version: 2.1.14 Precedence: list List-Id: SVN commit messages for all the -stable branches of the src tree List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 25 Oct 2013 06:47:01 -0000 Author: hselasky Date: Fri Oct 25 06:47:01 2013 New Revision: 257106 URL: http://svnweb.freebsd.org/changeset/base/257106 Log: MFC r256750: Improve XHCI stability. When a command timeout happens, the command should be aborted else the command queue can stop. Refer to section "4.6.1.2" of the XHCI specification. Modified: stable/8/sys/dev/usb/controller/xhci.c Directory Properties: stable/8/sys/ (props changed) stable/8/sys/dev/ (props changed) stable/8/sys/dev/usb/ (props changed) Modified: stable/8/sys/dev/usb/controller/xhci.c ============================================================================== --- stable/8/sys/dev/usb/controller/xhci.c Fri Oct 25 06:37:43 2013 (r257105) +++ stable/8/sys/dev/usb/controller/xhci.c Fri Oct 25 06:47:01 2013 (r257106) @@ -1110,6 +1110,25 @@ xhci_do_command(struct xhci_softc *sc, s } if (err != 0) { DPRINTFN(0, "Command timeout!\n"); + + /* + * Try to abort the last command as per section + * 4.6.1.2 "Aborting a Command" of the XHCI + * specification: + */ + temp = XREAD4(sc, oper, XHCI_CRCR_LO); + XWRITE4(sc, oper, XHCI_CRCR_LO, temp | XHCI_CRCR_LO_CA); + + /* wait for abort event, if any */ + err = cv_timedwait(&sc->sc_cmd_cv, &sc->sc_bus.bus_mtx, hz / 16); + + if (err != 0 && xhci_interrupt_poll(sc) != 0) { + DPRINTF("Command was completed when polling\n"); + err = 0; + } + if (err != 0) { + DPRINTF("Command abort timeout!\n"); + } err = USB_ERR_TIMEOUT; trb->dwTrb2 = 0; trb->dwTrb3 = 0; From owner-svn-src-stable@FreeBSD.ORG Fri Oct 25 06:48:58 2013 Return-Path: Delivered-To: svn-src-stable@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [8.8.178.115]) (using TLSv1 with cipher ADH-AES256-SHA (256/256 bits)) (No client certificate requested) by hub.freebsd.org (Postfix) with ESMTP id 2D55B504; Fri, 25 Oct 2013 06:48:58 +0000 (UTC) (envelope-from hselasky@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:1900:2254:2068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mx1.freebsd.org (Postfix) with ESMTPS id 191EA20D3; Fri, 25 Oct 2013 06:48:58 +0000 (UTC) Received: from svn.freebsd.org ([127.0.1.70]) by svn.freebsd.org (8.14.7/8.14.7) with ESMTP id r9P6mvL6036095; Fri, 25 Oct 2013 06:48:57 GMT (envelope-from hselasky@svn.freebsd.org) Received: (from hselasky@localhost) by svn.freebsd.org (8.14.7/8.14.5/Submit) id r9P6mvni036094; Fri, 25 Oct 2013 06:48:57 GMT (envelope-from hselasky@svn.freebsd.org) Message-Id: <201310250648.r9P6mvni036094@svn.freebsd.org> From: Hans Petter Selasky Date: Fri, 25 Oct 2013 06:48:57 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-stable@freebsd.org, svn-src-stable-9@freebsd.org Subject: svn commit: r257107 - stable/9/sys/dev/usb/controller X-SVN-Group: stable-9 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-stable@freebsd.org X-Mailman-Version: 2.1.14 Precedence: list List-Id: SVN commit messages for all the -stable branches of the src tree List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 25 Oct 2013 06:48:58 -0000 Author: hselasky Date: Fri Oct 25 06:48:57 2013 New Revision: 257107 URL: http://svnweb.freebsd.org/changeset/base/257107 Log: MFC r256750: Improve XHCI stability. When a command timeout happens, the command should be aborted else the command queue can stop. Refer to section "4.6.1.2" of the XHCI specification. Modified: stable/9/sys/dev/usb/controller/xhci.c Directory Properties: stable/9/sys/ (props changed) stable/9/sys/dev/ (props changed) Modified: stable/9/sys/dev/usb/controller/xhci.c ============================================================================== --- stable/9/sys/dev/usb/controller/xhci.c Fri Oct 25 06:47:01 2013 (r257106) +++ stable/9/sys/dev/usb/controller/xhci.c Fri Oct 25 06:48:57 2013 (r257107) @@ -1110,6 +1110,25 @@ xhci_do_command(struct xhci_softc *sc, s } if (err != 0) { DPRINTFN(0, "Command timeout!\n"); + + /* + * Try to abort the last command as per section + * 4.6.1.2 "Aborting a Command" of the XHCI + * specification: + */ + temp = XREAD4(sc, oper, XHCI_CRCR_LO); + XWRITE4(sc, oper, XHCI_CRCR_LO, temp | XHCI_CRCR_LO_CA); + + /* wait for abort event, if any */ + err = cv_timedwait(&sc->sc_cmd_cv, &sc->sc_bus.bus_mtx, hz / 16); + + if (err != 0 && xhci_interrupt_poll(sc) != 0) { + DPRINTF("Command was completed when polling\n"); + err = 0; + } + if (err != 0) { + DPRINTF("Command abort timeout!\n"); + } err = USB_ERR_TIMEOUT; trb->dwTrb2 = 0; trb->dwTrb3 = 0; From owner-svn-src-stable@FreeBSD.ORG Fri Oct 25 10:20:20 2013 Return-Path: Delivered-To: svn-src-stable@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) (using TLSv1 with cipher ADH-AES256-SHA (256/256 bits)) (No client certificate requested) by hub.freebsd.org (Postfix) with ESMTP id 75EF59EA; Fri, 25 Oct 2013 10:20:20 +0000 (UTC) (envelope-from hselasky@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:1900:2254:2068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mx1.freebsd.org (Postfix) with ESMTPS id 627192BC0; Fri, 25 Oct 2013 10:20:20 +0000 (UTC) Received: from svn.freebsd.org ([127.0.1.70]) by svn.freebsd.org (8.14.7/8.14.7) with ESMTP id r9PAKKY2007638; Fri, 25 Oct 2013 10:20:20 GMT (envelope-from hselasky@svn.freebsd.org) Received: (from hselasky@localhost) by svn.freebsd.org (8.14.7/8.14.5/Submit) id r9PAKKPP007615; Fri, 25 Oct 2013 10:20:20 GMT (envelope-from hselasky@svn.freebsd.org) Message-Id: <201310251020.r9PAKKPP007615@svn.freebsd.org> From: Hans Petter Selasky Date: Fri, 25 Oct 2013 10:20:20 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-stable@freebsd.org, svn-src-stable-10@freebsd.org Subject: svn commit: r257110 - stable/10/sys/dev/usb/controller X-SVN-Group: stable-10 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-stable@freebsd.org X-Mailman-Version: 2.1.14 Precedence: list List-Id: SVN commit messages for all the -stable branches of the src tree List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 25 Oct 2013 10:20:20 -0000 Author: hselasky Date: Fri Oct 25 10:20:19 2013 New Revision: 257110 URL: http://svnweb.freebsd.org/changeset/base/257110 Log: MFC r256750: Improve XHCI stability. When a command timeout happens, the command should be aborted else the command queue can stop. Refer to section "4.6.1.2" of the XHCI specification. Approved by: re (glebius) Modified: stable/10/sys/dev/usb/controller/xhci.c Directory Properties: stable/10/sys/ (props changed) Modified: stable/10/sys/dev/usb/controller/xhci.c ============================================================================== --- stable/10/sys/dev/usb/controller/xhci.c Fri Oct 25 09:09:00 2013 (r257109) +++ stable/10/sys/dev/usb/controller/xhci.c Fri Oct 25 10:20:19 2013 (r257110) @@ -1144,6 +1144,25 @@ xhci_do_command(struct xhci_softc *sc, s } if (err != 0) { DPRINTFN(0, "Command timeout!\n"); + + /* + * Try to abort the last command as per section + * 4.6.1.2 "Aborting a Command" of the XHCI + * specification: + */ + temp = XREAD4(sc, oper, XHCI_CRCR_LO); + XWRITE4(sc, oper, XHCI_CRCR_LO, temp | XHCI_CRCR_LO_CA); + + /* wait for abort event, if any */ + err = cv_timedwait(&sc->sc_cmd_cv, &sc->sc_bus.bus_mtx, hz / 16); + + if (err != 0 && xhci_interrupt_poll(sc) != 0) { + DPRINTF("Command was completed when polling\n"); + err = 0; + } + if (err != 0) { + DPRINTF("Command abort timeout!\n"); + } err = USB_ERR_TIMEOUT; trb->dwTrb2 = 0; trb->dwTrb3 = 0; From owner-svn-src-stable@FreeBSD.ORG Fri Oct 25 13:25:50 2013 Return-Path: Delivered-To: svn-src-stable@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) (using TLSv1 with cipher ADH-AES256-SHA (256/256 bits)) (No client certificate requested) by hub.freebsd.org (Postfix) with ESMTP id 29952DE; Fri, 25 Oct 2013 13:25:50 +0000 (UTC) (envelope-from tijl@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:1900:2254:2068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mx1.freebsd.org (Postfix) with ESMTPS id 16ED026A1; Fri, 25 Oct 2013 13:25:50 +0000 (UTC) Received: from svn.freebsd.org ([127.0.1.70]) by svn.freebsd.org (8.14.7/8.14.7) with ESMTP id r9PDPnRs070556; Fri, 25 Oct 2013 13:25:49 GMT (envelope-from tijl@svn.freebsd.org) Received: (from tijl@localhost) by svn.freebsd.org (8.14.7/8.14.5/Submit) id r9PDPnM2070555; Fri, 25 Oct 2013 13:25:49 GMT (envelope-from tijl@svn.freebsd.org) Message-Id: <201310251325.r9PDPnM2070555@svn.freebsd.org> From: Tijl Coosemans Date: Fri, 25 Oct 2013 13:25:49 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-stable@freebsd.org, svn-src-stable-9@freebsd.org Subject: svn commit: r257112 - stable/9/include X-SVN-Group: stable-9 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-stable@freebsd.org X-Mailman-Version: 2.1.14 Precedence: list List-Id: SVN commit messages for all the -stable branches of the src tree List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 25 Oct 2013 13:25:50 -0000 Author: tijl Date: Fri Oct 25 13:25:49 2013 New Revision: 257112 URL: http://svnweb.freebsd.org/changeset/base/257112 Log: MFC r256925: Add a dummy statement to the beginning of the pthread_cleanup_pop() macro to allow a call of the macro to be labelled as in: label: pthread_cleanup_pop(); Reviewed by: imp Modified: stable/9/include/pthread.h Directory Properties: stable/9/include/ (props changed) Modified: stable/9/include/pthread.h ============================================================================== --- stable/9/include/pthread.h Fri Oct 25 11:44:39 2013 (r257111) +++ stable/9/include/pthread.h Fri Oct 25 13:25:49 2013 (r257112) @@ -175,6 +175,7 @@ int pthread_barrierattr_setpshared(pthr { #define pthread_cleanup_pop(execute) \ + (void)0; \ } \ __pthread_cleanup_pop_imp(execute); \ } From owner-svn-src-stable@FreeBSD.ORG Fri Oct 25 13:27:56 2013 Return-Path: Delivered-To: svn-src-stable@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [8.8.178.115]) (using TLSv1 with cipher ADH-AES256-SHA (256/256 bits)) (No client certificate requested) by hub.freebsd.org (Postfix) with ESMTP id 67B3F2CF; Fri, 25 Oct 2013 13:27:56 +0000 (UTC) (envelope-from tijl@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:1900:2254:2068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mx1.freebsd.org (Postfix) with ESMTPS id 5501F26C0; Fri, 25 Oct 2013 13:27:56 +0000 (UTC) Received: from svn.freebsd.org ([127.0.1.70]) by svn.freebsd.org (8.14.7/8.14.7) with ESMTP id r9PDRuOQ070823; Fri, 25 Oct 2013 13:27:56 GMT (envelope-from tijl@svn.freebsd.org) Received: (from tijl@localhost) by svn.freebsd.org (8.14.7/8.14.5/Submit) id r9PDRu4x070822; Fri, 25 Oct 2013 13:27:56 GMT (envelope-from tijl@svn.freebsd.org) Message-Id: <201310251327.r9PDRu4x070822@svn.freebsd.org> From: Tijl Coosemans Date: Fri, 25 Oct 2013 13:27:56 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-stable@freebsd.org, svn-src-stable-10@freebsd.org Subject: svn commit: r257113 - stable/10/include X-SVN-Group: stable-10 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-stable@freebsd.org X-Mailman-Version: 2.1.14 Precedence: list List-Id: SVN commit messages for all the -stable branches of the src tree List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 25 Oct 2013 13:27:56 -0000 Author: tijl Date: Fri Oct 25 13:27:55 2013 New Revision: 257113 URL: http://svnweb.freebsd.org/changeset/base/257113 Log: MFC r256925: Add a dummy statement to the beginning of the pthread_cleanup_pop() macro to allow a call of the macro to be labelled as in: label: pthread_cleanup_pop(); Reviewed by: imp Approved by: re (glebius) Modified: stable/10/include/pthread.h Directory Properties: stable/10/include/ (props changed) Modified: stable/10/include/pthread.h ============================================================================== --- stable/10/include/pthread.h Fri Oct 25 13:25:49 2013 (r257112) +++ stable/10/include/pthread.h Fri Oct 25 13:27:55 2013 (r257113) @@ -175,6 +175,7 @@ int pthread_barrierattr_setpshared(pthr { #define pthread_cleanup_pop(execute) \ + (void)0; \ } \ __pthread_cleanup_pop_imp(execute); \ } From owner-svn-src-stable@FreeBSD.ORG Fri Oct 25 15:44:01 2013 Return-Path: Delivered-To: svn-src-stable@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) (using TLSv1 with cipher ADH-AES256-SHA (256/256 bits)) (No client certificate requested) by hub.freebsd.org (Postfix) with ESMTP id 2A9302CA; Fri, 25 Oct 2013 15:44:01 +0000 (UTC) (envelope-from delphij@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:1900:2254:2068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mx1.freebsd.org (Postfix) with ESMTPS id 08CDA2EE0; Fri, 25 Oct 2013 15:44:01 +0000 (UTC) Received: from svn.freebsd.org ([127.0.1.70]) by svn.freebsd.org (8.14.7/8.14.7) with ESMTP id r9PFi1M2019052; Fri, 25 Oct 2013 15:44:01 GMT (envelope-from delphij@svn.freebsd.org) Received: (from delphij@localhost) by svn.freebsd.org (8.14.7/8.14.5/Submit) id r9PFhxMr018989; Fri, 25 Oct 2013 15:43:59 GMT (envelope-from delphij@svn.freebsd.org) Message-Id: <201310251543.r9PFhxMr018989@svn.freebsd.org> From: Xin LI Date: Fri, 25 Oct 2013 15:43:59 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-stable@freebsd.org, svn-src-stable-9@freebsd.org Subject: svn commit: r257119 - in stable/9/sys/cddl/contrib/opensolaris/uts/common/fs/zfs: . sys X-SVN-Group: stable-9 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-stable@freebsd.org X-Mailman-Version: 2.1.14 Precedence: list List-Id: SVN commit messages for all the -stable branches of the src tree List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 25 Oct 2013 15:44:01 -0000 Author: delphij Date: Fri Oct 25 15:43:59 2013 New Revision: 257119 URL: http://svnweb.freebsd.org/changeset/base/257119 Log: MFC r253816: MFV r253780: To quote Illumos #3875: The problem here is that if we ever end up in the error path, we drop the locks protecting access to the zfsvfs_t prior to forcibly unmounting the filesystem. Because z_os is NULL, any thread that had already picked up the zfsvfs_t and was sitting in ZFS_ENTER() when we dropped our locks in zfs_resume_fs() will now acquire the lock, attempt to use z_os, and panic. Illumos ZFS issues: 3875 panic in zfs_root() after failed rollback Modified: stable/9/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/dmu_objset.c stable/9/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/dmu_send.c stable/9/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/dsl_dataset.c stable/9/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/dmu_objset.h stable/9/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/dmu_send.h stable/9/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/dsl_dataset.h stable/9/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zfs_ioctl.c stable/9/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zfs_vfsops.c Directory Properties: stable/9/sys/ (props changed) stable/9/sys/cddl/contrib/opensolaris/ (props changed) Modified: stable/9/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/dmu_objset.c ============================================================================== --- stable/9/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/dmu_objset.c Fri Oct 25 15:37:58 2013 (r257118) +++ stable/9/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/dmu_objset.c Fri Oct 25 15:43:59 2013 (r257119) @@ -517,6 +517,38 @@ dmu_objset_rele(objset_t *os, void *tag) dsl_pool_rele(dp, tag); } +/* + * When we are called, os MUST refer to an objset associated with a dataset + * that is owned by 'tag'; that is, is held and long held by 'tag' and ds_owner + * == tag. We will then release and reacquire ownership of the dataset while + * holding the pool config_rwlock to avoid intervening namespace or ownership + * changes may occur. + * + * This exists solely to accommodate zfs_ioc_userspace_upgrade()'s desire to + * release the hold on its dataset and acquire a new one on the dataset of the + * same name so that it can be partially torn down and reconstructed. + */ +void +dmu_objset_refresh_ownership(objset_t *os, void *tag) +{ + dsl_pool_t *dp; + dsl_dataset_t *ds, *newds; + char name[MAXNAMELEN]; + + ds = os->os_dsl_dataset; + VERIFY3P(ds, !=, NULL); + VERIFY3P(ds->ds_owner, ==, tag); + VERIFY(dsl_dataset_long_held(ds)); + + dsl_dataset_name(ds, name); + dp = dmu_objset_pool(os); + dsl_pool_config_enter(dp, FTAG); + dmu_objset_disown(os, tag); + VERIFY0(dsl_dataset_own(dp, name, tag, &newds)); + VERIFY3P(newds, ==, os->os_dsl_dataset); + dsl_pool_config_exit(dp, FTAG); +} + void dmu_objset_disown(objset_t *os, void *tag) { Modified: stable/9/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/dmu_send.c ============================================================================== --- stable/9/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/dmu_send.c Fri Oct 25 15:37:58 2013 (r257118) +++ stable/9/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/dmu_send.c Fri Oct 25 15:43:59 2013 (r257119) @@ -1602,7 +1602,7 @@ dmu_recv_end_check(void *arg, dmu_tx_t * if (error != 0) return (error); error = dsl_dataset_clone_swap_check_impl(drc->drc_ds, - origin_head, drc->drc_force); + origin_head, drc->drc_force, drc->drc_owner, tx); if (error != 0) { dsl_dataset_rele(origin_head, FTAG); return (error); @@ -1654,6 +1654,9 @@ dmu_recv_end_sync(void *arg, dmu_tx_t *t dsl_dataset_rele(origin_head, FTAG); dsl_destroy_head_sync_impl(drc->drc_ds, tx); + + if (drc->drc_owner != NULL) + VERIFY3P(origin_head->ds_owner, ==, drc->drc_owner); } else { dsl_dataset_t *ds = drc->drc_ds; @@ -1752,8 +1755,10 @@ dmu_recv_new_end(dmu_recv_cookie_t *drc) } int -dmu_recv_end(dmu_recv_cookie_t *drc) +dmu_recv_end(dmu_recv_cookie_t *drc, void *owner) { + drc->drc_owner = owner; + if (drc->drc_newfs) return (dmu_recv_new_end(drc)); else Modified: stable/9/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/dsl_dataset.c ============================================================================== --- stable/9/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/dsl_dataset.c Fri Oct 25 15:37:58 2013 (r257118) +++ stable/9/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/dsl_dataset.c Fri Oct 25 15:43:59 2013 (r257119) @@ -1755,16 +1755,52 @@ dsl_dataset_rename_snapshot(const char * dsl_dataset_rename_snapshot_sync, &ddrsa, 1)); } +/* + * If we're doing an ownership handoff, we need to make sure that there is + * only one long hold on the dataset. We're not allowed to change anything here + * so we don't permanently release the long hold or regular hold here. We want + * to do this only when syncing to avoid the dataset unexpectedly going away + * when we release the long hold. + */ +static int +dsl_dataset_handoff_check(dsl_dataset_t *ds, void *owner, dmu_tx_t *tx) +{ + boolean_t held; + + if (!dmu_tx_is_syncing(tx)) + return (0); + + if (owner != NULL) { + VERIFY3P(ds->ds_owner, ==, owner); + dsl_dataset_long_rele(ds, owner); + } + + held = dsl_dataset_long_held(ds); + + if (owner != NULL) + dsl_dataset_long_hold(ds, owner); + + if (held) + return (SET_ERROR(EBUSY)); + + return (0); +} + +typedef struct dsl_dataset_rollback_arg { + const char *ddra_fsname; + void *ddra_owner; +} dsl_dataset_rollback_arg_t; + static int dsl_dataset_rollback_check(void *arg, dmu_tx_t *tx) { - const char *fsname = arg; + dsl_dataset_rollback_arg_t *ddra = arg; dsl_pool_t *dp = dmu_tx_pool(tx); dsl_dataset_t *ds; int64_t unused_refres_delta; int error; - error = dsl_dataset_hold(dp, fsname, FTAG, &ds); + error = dsl_dataset_hold(dp, ddra->ddra_fsname, FTAG, &ds); if (error != 0) return (error); @@ -1780,9 +1816,10 @@ dsl_dataset_rollback_check(void *arg, dm return (SET_ERROR(EINVAL)); } - if (dsl_dataset_long_held(ds)) { + error = dsl_dataset_handoff_check(ds, ddra->ddra_owner, tx); + if (error != 0) { dsl_dataset_rele(ds, FTAG); - return (SET_ERROR(EBUSY)); + return (error); } /* @@ -1819,12 +1856,12 @@ dsl_dataset_rollback_check(void *arg, dm static void dsl_dataset_rollback_sync(void *arg, dmu_tx_t *tx) { - const char *fsname = arg; + dsl_dataset_rollback_arg_t *ddra = arg; dsl_pool_t *dp = dmu_tx_pool(tx); dsl_dataset_t *ds, *clone; uint64_t cloneobj; - VERIFY0(dsl_dataset_hold(dp, fsname, FTAG, &ds)); + VERIFY0(dsl_dataset_hold(dp, ddra->ddra_fsname, FTAG, &ds)); cloneobj = dsl_dataset_create_sync(ds->ds_dir, "%rollback", ds->ds_prev, DS_CREATE_FLAG_NODIRTY, kcred, tx); @@ -1840,11 +1877,26 @@ dsl_dataset_rollback_sync(void *arg, dmu dsl_dataset_rele(ds, FTAG); } +/* + * If owner != NULL: + * + * - The existing dataset MUST be owned by the specified owner at entry + * - Upon return, dataset will still be held by the same owner, whether we + * succeed or not. + * + * This mode is required any time the existing filesystem is mounted. See + * notes above zfs_suspend_fs() for further details. + */ int -dsl_dataset_rollback(const char *fsname) +dsl_dataset_rollback(const char *fsname, void *owner) { + dsl_dataset_rollback_arg_t ddra; + + ddra.ddra_fsname = fsname; + ddra.ddra_owner = owner; + return (dsl_sync_task(fsname, dsl_dataset_rollback_check, - dsl_dataset_rollback_sync, (void *)fsname, 1)); + dsl_dataset_rollback_sync, (void *)&ddra, 1)); } struct promotenode { @@ -2362,7 +2414,7 @@ dsl_dataset_promote(const char *name, ch int dsl_dataset_clone_swap_check_impl(dsl_dataset_t *clone, - dsl_dataset_t *origin_head, boolean_t force) + dsl_dataset_t *origin_head, boolean_t force, void *owner, dmu_tx_t *tx) { int64_t unused_refres_delta; @@ -2391,7 +2443,7 @@ dsl_dataset_clone_swap_check_impl(dsl_da return (SET_ERROR(ETXTBSY)); /* origin_head should have no long holds (e.g. is not mounted) */ - if (dsl_dataset_long_held(origin_head)) + if (dsl_dataset_handoff_check(origin_head, owner, tx)) return (SET_ERROR(EBUSY)); /* check amount of any unconsumed refreservation */ Modified: stable/9/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/dmu_objset.h ============================================================================== --- stable/9/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/dmu_objset.h Fri Oct 25 15:37:58 2013 (r257118) +++ stable/9/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/dmu_objset.h Fri Oct 25 15:43:59 2013 (r257119) @@ -136,6 +136,7 @@ struct objset { int dmu_objset_hold(const char *name, void *tag, objset_t **osp); int dmu_objset_own(const char *name, dmu_objset_type_t type, boolean_t readonly, void *tag, objset_t **osp); +void dmu_objset_refresh_ownership(objset_t *os, void *tag); void dmu_objset_rele(objset_t *os, void *tag); void dmu_objset_disown(objset_t *os, void *tag); int dmu_objset_from_ds(struct dsl_dataset *ds, objset_t **osp); Modified: stable/9/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/dmu_send.h ============================================================================== --- stable/9/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/dmu_send.h Fri Oct 25 15:37:58 2013 (r257118) +++ stable/9/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/dmu_send.h Fri Oct 25 15:43:59 2013 (r257119) @@ -62,6 +62,7 @@ typedef struct dmu_recv_cookie { struct avl_tree *drc_guid_to_ds_map; zio_cksum_t drc_cksum; uint64_t drc_newsnapobj; + void *drc_owner; } dmu_recv_cookie_t; int dmu_recv_begin(char *tofs, char *tosnap, struct drr_begin *drrb, @@ -72,6 +73,6 @@ int dmu_recv_stream(dmu_recv_cookie_t *d int dmu_recv_stream(dmu_recv_cookie_t *drc, struct file *fp, offset_t *voffp, #endif int cleanup_fd, uint64_t *action_handlep); -int dmu_recv_end(dmu_recv_cookie_t *drc); +int dmu_recv_end(dmu_recv_cookie_t *drc, void *owner); #endif /* _DMU_SEND_H */ Modified: stable/9/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/dsl_dataset.h ============================================================================== --- stable/9/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/dsl_dataset.h Fri Oct 25 15:37:58 2013 (r257118) +++ stable/9/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/dsl_dataset.h Fri Oct 25 15:43:59 2013 (r257119) @@ -247,7 +247,7 @@ void dsl_dataset_long_rele(dsl_dataset_t boolean_t dsl_dataset_long_held(dsl_dataset_t *ds); int dsl_dataset_clone_swap_check_impl(dsl_dataset_t *clone, - dsl_dataset_t *origin_head, boolean_t force); + dsl_dataset_t *origin_head, boolean_t force, void *owner, dmu_tx_t *tx); void dsl_dataset_clone_swap_sync_impl(dsl_dataset_t *clone, dsl_dataset_t *origin_head, dmu_tx_t *tx); int dsl_dataset_snapshot_check_impl(dsl_dataset_t *ds, const char *snapname, @@ -264,7 +264,7 @@ int dsl_dataset_snap_lookup(dsl_dataset_ int dsl_dataset_snap_remove(dsl_dataset_t *ds, const char *name, dmu_tx_t *tx); void dsl_dataset_set_refreservation_sync_impl(dsl_dataset_t *ds, zprop_source_t source, uint64_t value, dmu_tx_t *tx); -int dsl_dataset_rollback(const char *fsname); +int dsl_dataset_rollback(const char *fsname, void *owner); #ifdef ZFS_DEBUG #define dprintf_ds(ds, fmt, ...) do { \ Modified: stable/9/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zfs_ioctl.c ============================================================================== --- stable/9/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zfs_ioctl.c Fri Oct 25 15:37:58 2013 (r257118) +++ stable/9/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zfs_ioctl.c Fri Oct 25 15:43:59 2013 (r257119) @@ -3568,13 +3568,13 @@ zfs_ioc_rollback(zfs_cmd_t *zc) if (error == 0) { int resume_err; - error = dsl_dataset_rollback(zc->zc_name); + error = dsl_dataset_rollback(zc->zc_name, zfsvfs); resume_err = zfs_resume_fs(zfsvfs, zc->zc_name); error = error ? error : resume_err; } VFS_RELE(zfsvfs->z_vfs); } else { - error = dsl_dataset_rollback(zc->zc_name); + error = dsl_dataset_rollback(zc->zc_name, NULL); } return (error); } @@ -4110,13 +4110,13 @@ zfs_ioc_recv(zfs_cmd_t *zc) * If the suspend fails, then the recv_end will * likely also fail, and clean up after itself. */ - end_err = dmu_recv_end(&drc); + end_err = dmu_recv_end(&drc, zfsvfs); if (error == 0) error = zfs_resume_fs(zfsvfs, tofs); error = error ? error : end_err; VFS_RELE(zfsvfs->z_vfs); } else { - error = dmu_recv_end(&drc); + error = dmu_recv_end(&drc, NULL); } } @@ -4607,8 +4607,11 @@ zfs_ioc_userspace_upgrade(zfs_cmd_t *zc) * objset_phys_t). Suspend/resume the fs will do that. */ error = zfs_suspend_fs(zfsvfs); - if (error == 0) + if (error == 0) { + dmu_objset_refresh_ownership(zfsvfs->z_os, + zfsvfs); error = zfs_resume_fs(zfsvfs, zc->zc_name); + } } if (error == 0) error = dmu_objset_userspace_upgrade(zfsvfs->z_os); Modified: stable/9/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zfs_vfsops.c ============================================================================== --- stable/9/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zfs_vfsops.c Fri Oct 25 15:37:58 2013 (r257118) +++ stable/9/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zfs_vfsops.c Fri Oct 25 15:43:59 2013 (r257119) @@ -2210,7 +2210,9 @@ zfs_fhtovp(vfs_t *vfsp, fid_t *fidp, int * Block out VOPs and close zfsvfs_t::z_os * * Note, if successful, then we return with the 'z_teardown_lock' and - * 'z_teardown_inactive_lock' write held. + * 'z_teardown_inactive_lock' write held. We leave ownership of the underlying + * dataset and objset intact so that they can be atomically handed off during + * a subsequent rollback or recv operation and the resume thereafter. */ int zfs_suspend_fs(zfsvfs_t *zfsvfs) @@ -2219,71 +2221,76 @@ zfs_suspend_fs(zfsvfs_t *zfsvfs) if ((error = zfsvfs_teardown(zfsvfs, B_FALSE)) != 0) return (error); - dmu_objset_disown(zfsvfs->z_os, zfsvfs); return (0); } /* - * Reopen zfsvfs_t::z_os and release VOPs. + * Rebuild SA and release VOPs. Note that ownership of the underlying dataset + * is an invariant across any of the operations that can be performed while the + * filesystem was suspended. Whether it succeeded or failed, the preconditions + * are the same: the relevant objset and associated dataset are owned by + * zfsvfs, held, and long held on entry. */ int zfs_resume_fs(zfsvfs_t *zfsvfs, const char *osname) { int err; + znode_t *zp; + uint64_t sa_obj = 0; ASSERT(RRW_WRITE_HELD(&zfsvfs->z_teardown_lock)); ASSERT(RW_WRITE_HELD(&zfsvfs->z_teardown_inactive_lock)); - err = dmu_objset_own(osname, DMU_OST_ZFS, B_FALSE, zfsvfs, - &zfsvfs->z_os); - if (err) { - zfsvfs->z_os = NULL; - } else { - znode_t *zp; - uint64_t sa_obj = 0; + /* + * We already own this, so just hold and rele it to update the + * objset_t, as the one we had before may have been evicted. + */ + VERIFY0(dmu_objset_hold(osname, zfsvfs, &zfsvfs->z_os)); + VERIFY3P(zfsvfs->z_os->os_dsl_dataset->ds_owner, ==, zfsvfs); + VERIFY(dsl_dataset_long_held(zfsvfs->z_os->os_dsl_dataset)); + dmu_objset_rele(zfsvfs->z_os, zfsvfs); - /* - * Make sure version hasn't changed - */ + /* + * Make sure version hasn't changed + */ - err = zfs_get_zplprop(zfsvfs->z_os, ZFS_PROP_VERSION, - &zfsvfs->z_version); + err = zfs_get_zplprop(zfsvfs->z_os, ZFS_PROP_VERSION, + &zfsvfs->z_version); - if (err) - goto bail; + if (err) + goto bail; - err = zap_lookup(zfsvfs->z_os, MASTER_NODE_OBJ, - ZFS_SA_ATTRS, 8, 1, &sa_obj); + err = zap_lookup(zfsvfs->z_os, MASTER_NODE_OBJ, + ZFS_SA_ATTRS, 8, 1, &sa_obj); - if (err && zfsvfs->z_version >= ZPL_VERSION_SA) - goto bail; + if (err && zfsvfs->z_version >= ZPL_VERSION_SA) + goto bail; - if ((err = sa_setup(zfsvfs->z_os, sa_obj, - zfs_attr_table, ZPL_END, &zfsvfs->z_attr_table)) != 0) - goto bail; + if ((err = sa_setup(zfsvfs->z_os, sa_obj, + zfs_attr_table, ZPL_END, &zfsvfs->z_attr_table)) != 0) + goto bail; - if (zfsvfs->z_version >= ZPL_VERSION_SA) - sa_register_update_callback(zfsvfs->z_os, - zfs_sa_upgrade); + if (zfsvfs->z_version >= ZPL_VERSION_SA) + sa_register_update_callback(zfsvfs->z_os, + zfs_sa_upgrade); - VERIFY(zfsvfs_setup(zfsvfs, B_FALSE) == 0); + VERIFY(zfsvfs_setup(zfsvfs, B_FALSE) == 0); - zfs_set_fuid_feature(zfsvfs); + zfs_set_fuid_feature(zfsvfs); - /* - * Attempt to re-establish all the active znodes with - * their dbufs. If a zfs_rezget() fails, then we'll let - * any potential callers discover that via ZFS_ENTER_VERIFY_VP - * when they try to use their znode. - */ - mutex_enter(&zfsvfs->z_znodes_lock); - for (zp = list_head(&zfsvfs->z_all_znodes); zp; - zp = list_next(&zfsvfs->z_all_znodes, zp)) { - (void) zfs_rezget(zp); - } - mutex_exit(&zfsvfs->z_znodes_lock); + /* + * Attempt to re-establish all the active znodes with + * their dbufs. If a zfs_rezget() fails, then we'll let + * any potential callers discover that via ZFS_ENTER_VERIFY_VP + * when they try to use their znode. + */ + mutex_enter(&zfsvfs->z_znodes_lock); + for (zp = list_head(&zfsvfs->z_all_znodes); zp; + zp = list_next(&zfsvfs->z_all_znodes, zp)) { + (void) zfs_rezget(zp); } + mutex_exit(&zfsvfs->z_znodes_lock); bail: /* release the VOPs */ @@ -2292,8 +2299,8 @@ bail: if (err) { /* - * Since we couldn't reopen zfsvfs::z_os, or - * setup the sa framework force unmount this file system. + * Since we couldn't setup the sa framework, try to force + * unmount this file system. */ if (vn_vfswlock(zfsvfs->z_vfs->vfs_vnodecovered) == 0) (void) dounmount(zfsvfs->z_vfs, MS_FORCE, curthread); From owner-svn-src-stable@FreeBSD.ORG Fri Oct 25 15:45:31 2013 Return-Path: Delivered-To: svn-src-stable@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [8.8.178.115]) (using TLSv1 with cipher ADH-AES256-SHA (256/256 bits)) (No client certificate requested) by hub.freebsd.org (Postfix) with ESMTP id 38475419; Fri, 25 Oct 2013 15:45:31 +0000 (UTC) (envelope-from delphij@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:1900:2254:2068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mx1.freebsd.org (Postfix) with ESMTPS id 14DE22EF1; Fri, 25 Oct 2013 15:45:31 +0000 (UTC) Received: from svn.freebsd.org ([127.0.1.70]) by svn.freebsd.org (8.14.7/8.14.7) with ESMTP id r9PFjVk2019320; Fri, 25 Oct 2013 15:45:31 GMT (envelope-from delphij@svn.freebsd.org) Received: (from delphij@localhost) by svn.freebsd.org (8.14.7/8.14.5/Submit) id r9PFjTZe019312; Fri, 25 Oct 2013 15:45:29 GMT (envelope-from delphij@svn.freebsd.org) Message-Id: <201310251545.r9PFjTZe019312@svn.freebsd.org> From: Xin LI Date: Fri, 25 Oct 2013 15:45:29 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-stable@freebsd.org, svn-src-stable-8@freebsd.org Subject: svn commit: r257120 - in stable/8/sys/cddl/contrib/opensolaris/uts/common/fs/zfs: . sys X-SVN-Group: stable-8 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-stable@freebsd.org X-Mailman-Version: 2.1.14 Precedence: list List-Id: SVN commit messages for all the -stable branches of the src tree List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 25 Oct 2013 15:45:31 -0000 Author: delphij Date: Fri Oct 25 15:45:29 2013 New Revision: 257120 URL: http://svnweb.freebsd.org/changeset/base/257120 Log: MFC r253816: MFV r253780: To quote Illumos #3875: The problem here is that if we ever end up in the error path, we drop the locks protecting access to the zfsvfs_t prior to forcibly unmounting the filesystem. Because z_os is NULL, any thread that had already picked up the zfsvfs_t and was sitting in ZFS_ENTER() when we dropped our locks in zfs_resume_fs() will now acquire the lock, attempt to use z_os, and panic. Illumos ZFS issues: 3875 panic in zfs_root() after failed rollback Modified: stable/8/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/dmu_objset.c stable/8/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/dmu_send.c stable/8/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/dsl_dataset.c stable/8/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/dmu_objset.h stable/8/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/dmu_send.h stable/8/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/dsl_dataset.h stable/8/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zfs_ioctl.c stable/8/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zfs_vfsops.c Directory Properties: stable/8/sys/ (props changed) stable/8/sys/cddl/ (props changed) stable/8/sys/cddl/contrib/opensolaris/ (props changed) Modified: stable/8/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/dmu_objset.c ============================================================================== --- stable/8/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/dmu_objset.c Fri Oct 25 15:43:59 2013 (r257119) +++ stable/8/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/dmu_objset.c Fri Oct 25 15:45:29 2013 (r257120) @@ -514,6 +514,38 @@ dmu_objset_rele(objset_t *os, void *tag) dsl_pool_rele(dp, tag); } +/* + * When we are called, os MUST refer to an objset associated with a dataset + * that is owned by 'tag'; that is, is held and long held by 'tag' and ds_owner + * == tag. We will then release and reacquire ownership of the dataset while + * holding the pool config_rwlock to avoid intervening namespace or ownership + * changes may occur. + * + * This exists solely to accommodate zfs_ioc_userspace_upgrade()'s desire to + * release the hold on its dataset and acquire a new one on the dataset of the + * same name so that it can be partially torn down and reconstructed. + */ +void +dmu_objset_refresh_ownership(objset_t *os, void *tag) +{ + dsl_pool_t *dp; + dsl_dataset_t *ds, *newds; + char name[MAXNAMELEN]; + + ds = os->os_dsl_dataset; + VERIFY3P(ds, !=, NULL); + VERIFY3P(ds->ds_owner, ==, tag); + VERIFY(dsl_dataset_long_held(ds)); + + dsl_dataset_name(ds, name); + dp = dmu_objset_pool(os); + dsl_pool_config_enter(dp, FTAG); + dmu_objset_disown(os, tag); + VERIFY0(dsl_dataset_own(dp, name, tag, &newds)); + VERIFY3P(newds, ==, os->os_dsl_dataset); + dsl_pool_config_exit(dp, FTAG); +} + void dmu_objset_disown(objset_t *os, void *tag) { Modified: stable/8/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/dmu_send.c ============================================================================== --- stable/8/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/dmu_send.c Fri Oct 25 15:43:59 2013 (r257119) +++ stable/8/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/dmu_send.c Fri Oct 25 15:45:29 2013 (r257120) @@ -1602,7 +1602,7 @@ dmu_recv_end_check(void *arg, dmu_tx_t * if (error != 0) return (error); error = dsl_dataset_clone_swap_check_impl(drc->drc_ds, - origin_head, drc->drc_force); + origin_head, drc->drc_force, drc->drc_owner, tx); if (error != 0) { dsl_dataset_rele(origin_head, FTAG); return (error); @@ -1654,6 +1654,9 @@ dmu_recv_end_sync(void *arg, dmu_tx_t *t dsl_dataset_rele(origin_head, FTAG); dsl_destroy_head_sync_impl(drc->drc_ds, tx); + + if (drc->drc_owner != NULL) + VERIFY3P(origin_head->ds_owner, ==, drc->drc_owner); } else { dsl_dataset_t *ds = drc->drc_ds; @@ -1752,8 +1755,10 @@ dmu_recv_new_end(dmu_recv_cookie_t *drc) } int -dmu_recv_end(dmu_recv_cookie_t *drc) +dmu_recv_end(dmu_recv_cookie_t *drc, void *owner) { + drc->drc_owner = owner; + if (drc->drc_newfs) return (dmu_recv_new_end(drc)); else Modified: stable/8/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/dsl_dataset.c ============================================================================== --- stable/8/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/dsl_dataset.c Fri Oct 25 15:43:59 2013 (r257119) +++ stable/8/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/dsl_dataset.c Fri Oct 25 15:45:29 2013 (r257120) @@ -1755,16 +1755,52 @@ dsl_dataset_rename_snapshot(const char * dsl_dataset_rename_snapshot_sync, &ddrsa, 1)); } +/* + * If we're doing an ownership handoff, we need to make sure that there is + * only one long hold on the dataset. We're not allowed to change anything here + * so we don't permanently release the long hold or regular hold here. We want + * to do this only when syncing to avoid the dataset unexpectedly going away + * when we release the long hold. + */ +static int +dsl_dataset_handoff_check(dsl_dataset_t *ds, void *owner, dmu_tx_t *tx) +{ + boolean_t held; + + if (!dmu_tx_is_syncing(tx)) + return (0); + + if (owner != NULL) { + VERIFY3P(ds->ds_owner, ==, owner); + dsl_dataset_long_rele(ds, owner); + } + + held = dsl_dataset_long_held(ds); + + if (owner != NULL) + dsl_dataset_long_hold(ds, owner); + + if (held) + return (SET_ERROR(EBUSY)); + + return (0); +} + +typedef struct dsl_dataset_rollback_arg { + const char *ddra_fsname; + void *ddra_owner; +} dsl_dataset_rollback_arg_t; + static int dsl_dataset_rollback_check(void *arg, dmu_tx_t *tx) { - const char *fsname = arg; + dsl_dataset_rollback_arg_t *ddra = arg; dsl_pool_t *dp = dmu_tx_pool(tx); dsl_dataset_t *ds; int64_t unused_refres_delta; int error; - error = dsl_dataset_hold(dp, fsname, FTAG, &ds); + error = dsl_dataset_hold(dp, ddra->ddra_fsname, FTAG, &ds); if (error != 0) return (error); @@ -1780,9 +1816,10 @@ dsl_dataset_rollback_check(void *arg, dm return (SET_ERROR(EINVAL)); } - if (dsl_dataset_long_held(ds)) { + error = dsl_dataset_handoff_check(ds, ddra->ddra_owner, tx); + if (error != 0) { dsl_dataset_rele(ds, FTAG); - return (SET_ERROR(EBUSY)); + return (error); } /* @@ -1819,12 +1856,12 @@ dsl_dataset_rollback_check(void *arg, dm static void dsl_dataset_rollback_sync(void *arg, dmu_tx_t *tx) { - const char *fsname = arg; + dsl_dataset_rollback_arg_t *ddra = arg; dsl_pool_t *dp = dmu_tx_pool(tx); dsl_dataset_t *ds, *clone; uint64_t cloneobj; - VERIFY0(dsl_dataset_hold(dp, fsname, FTAG, &ds)); + VERIFY0(dsl_dataset_hold(dp, ddra->ddra_fsname, FTAG, &ds)); cloneobj = dsl_dataset_create_sync(ds->ds_dir, "%rollback", ds->ds_prev, DS_CREATE_FLAG_NODIRTY, kcred, tx); @@ -1840,11 +1877,26 @@ dsl_dataset_rollback_sync(void *arg, dmu dsl_dataset_rele(ds, FTAG); } +/* + * If owner != NULL: + * + * - The existing dataset MUST be owned by the specified owner at entry + * - Upon return, dataset will still be held by the same owner, whether we + * succeed or not. + * + * This mode is required any time the existing filesystem is mounted. See + * notes above zfs_suspend_fs() for further details. + */ int -dsl_dataset_rollback(const char *fsname) +dsl_dataset_rollback(const char *fsname, void *owner) { + dsl_dataset_rollback_arg_t ddra; + + ddra.ddra_fsname = fsname; + ddra.ddra_owner = owner; + return (dsl_sync_task(fsname, dsl_dataset_rollback_check, - dsl_dataset_rollback_sync, (void *)fsname, 1)); + dsl_dataset_rollback_sync, (void *)&ddra, 1)); } struct promotenode { @@ -2362,7 +2414,7 @@ dsl_dataset_promote(const char *name, ch int dsl_dataset_clone_swap_check_impl(dsl_dataset_t *clone, - dsl_dataset_t *origin_head, boolean_t force) + dsl_dataset_t *origin_head, boolean_t force, void *owner, dmu_tx_t *tx) { int64_t unused_refres_delta; @@ -2391,7 +2443,7 @@ dsl_dataset_clone_swap_check_impl(dsl_da return (SET_ERROR(ETXTBSY)); /* origin_head should have no long holds (e.g. is not mounted) */ - if (dsl_dataset_long_held(origin_head)) + if (dsl_dataset_handoff_check(origin_head, owner, tx)) return (SET_ERROR(EBUSY)); /* check amount of any unconsumed refreservation */ Modified: stable/8/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/dmu_objset.h ============================================================================== --- stable/8/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/dmu_objset.h Fri Oct 25 15:43:59 2013 (r257119) +++ stable/8/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/dmu_objset.h Fri Oct 25 15:45:29 2013 (r257120) @@ -133,6 +133,7 @@ struct objset { int dmu_objset_hold(const char *name, void *tag, objset_t **osp); int dmu_objset_own(const char *name, dmu_objset_type_t type, boolean_t readonly, void *tag, objset_t **osp); +void dmu_objset_refresh_ownership(objset_t *os, void *tag); void dmu_objset_rele(objset_t *os, void *tag); void dmu_objset_disown(objset_t *os, void *tag); int dmu_objset_from_ds(struct dsl_dataset *ds, objset_t **osp); Modified: stable/8/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/dmu_send.h ============================================================================== --- stable/8/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/dmu_send.h Fri Oct 25 15:43:59 2013 (r257119) +++ stable/8/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/dmu_send.h Fri Oct 25 15:45:29 2013 (r257120) @@ -62,6 +62,7 @@ typedef struct dmu_recv_cookie { struct avl_tree *drc_guid_to_ds_map; zio_cksum_t drc_cksum; uint64_t drc_newsnapobj; + void *drc_owner; } dmu_recv_cookie_t; int dmu_recv_begin(char *tofs, char *tosnap, struct drr_begin *drrb, @@ -72,6 +73,6 @@ int dmu_recv_stream(dmu_recv_cookie_t *d int dmu_recv_stream(dmu_recv_cookie_t *drc, struct file *fp, offset_t *voffp, #endif int cleanup_fd, uint64_t *action_handlep); -int dmu_recv_end(dmu_recv_cookie_t *drc); +int dmu_recv_end(dmu_recv_cookie_t *drc, void *owner); #endif /* _DMU_SEND_H */ Modified: stable/8/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/dsl_dataset.h ============================================================================== --- stable/8/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/dsl_dataset.h Fri Oct 25 15:43:59 2013 (r257119) +++ stable/8/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/dsl_dataset.h Fri Oct 25 15:45:29 2013 (r257120) @@ -247,7 +247,7 @@ void dsl_dataset_long_rele(dsl_dataset_t boolean_t dsl_dataset_long_held(dsl_dataset_t *ds); int dsl_dataset_clone_swap_check_impl(dsl_dataset_t *clone, - dsl_dataset_t *origin_head, boolean_t force); + dsl_dataset_t *origin_head, boolean_t force, void *owner, dmu_tx_t *tx); void dsl_dataset_clone_swap_sync_impl(dsl_dataset_t *clone, dsl_dataset_t *origin_head, dmu_tx_t *tx); int dsl_dataset_snapshot_check_impl(dsl_dataset_t *ds, const char *snapname, @@ -264,7 +264,7 @@ int dsl_dataset_snap_lookup(dsl_dataset_ int dsl_dataset_snap_remove(dsl_dataset_t *ds, const char *name, dmu_tx_t *tx); void dsl_dataset_set_refreservation_sync_impl(dsl_dataset_t *ds, zprop_source_t source, uint64_t value, dmu_tx_t *tx); -int dsl_dataset_rollback(const char *fsname); +int dsl_dataset_rollback(const char *fsname, void *owner); #ifdef ZFS_DEBUG #define dprintf_ds(ds, fmt, ...) do { \ Modified: stable/8/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zfs_ioctl.c ============================================================================== --- stable/8/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zfs_ioctl.c Fri Oct 25 15:43:59 2013 (r257119) +++ stable/8/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zfs_ioctl.c Fri Oct 25 15:45:29 2013 (r257120) @@ -3568,13 +3568,13 @@ zfs_ioc_rollback(zfs_cmd_t *zc) if (error == 0) { int resume_err; - error = dsl_dataset_rollback(zc->zc_name); + error = dsl_dataset_rollback(zc->zc_name, zfsvfs); resume_err = zfs_resume_fs(zfsvfs, zc->zc_name); error = error ? error : resume_err; } VFS_RELE(zfsvfs->z_vfs); } else { - error = dsl_dataset_rollback(zc->zc_name); + error = dsl_dataset_rollback(zc->zc_name, NULL); } return (error); } @@ -4110,13 +4110,13 @@ zfs_ioc_recv(zfs_cmd_t *zc) * If the suspend fails, then the recv_end will * likely also fail, and clean up after itself. */ - end_err = dmu_recv_end(&drc); + end_err = dmu_recv_end(&drc, zfsvfs); if (error == 0) error = zfs_resume_fs(zfsvfs, tofs); error = error ? error : end_err; VFS_RELE(zfsvfs->z_vfs); } else { - error = dmu_recv_end(&drc); + error = dmu_recv_end(&drc, NULL); } } @@ -4607,8 +4607,11 @@ zfs_ioc_userspace_upgrade(zfs_cmd_t *zc) * objset_phys_t). Suspend/resume the fs will do that. */ error = zfs_suspend_fs(zfsvfs); - if (error == 0) + if (error == 0) { + dmu_objset_refresh_ownership(zfsvfs->z_os, + zfsvfs); error = zfs_resume_fs(zfsvfs, zc->zc_name); + } } if (error == 0) error = dmu_objset_userspace_upgrade(zfsvfs->z_os); Modified: stable/8/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zfs_vfsops.c ============================================================================== --- stable/8/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zfs_vfsops.c Fri Oct 25 15:43:59 2013 (r257119) +++ stable/8/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zfs_vfsops.c Fri Oct 25 15:45:29 2013 (r257120) @@ -2204,7 +2204,9 @@ zfs_fhtovp(vfs_t *vfsp, fid_t *fidp, vno * Block out VOPs and close zfsvfs_t::z_os * * Note, if successful, then we return with the 'z_teardown_lock' and - * 'z_teardown_inactive_lock' write held. + * 'z_teardown_inactive_lock' write held. We leave ownership of the underlying + * dataset and objset intact so that they can be atomically handed off during + * a subsequent rollback or recv operation and the resume thereafter. */ int zfs_suspend_fs(zfsvfs_t *zfsvfs) @@ -2213,71 +2215,76 @@ zfs_suspend_fs(zfsvfs_t *zfsvfs) if ((error = zfsvfs_teardown(zfsvfs, B_FALSE)) != 0) return (error); - dmu_objset_disown(zfsvfs->z_os, zfsvfs); return (0); } /* - * Reopen zfsvfs_t::z_os and release VOPs. + * Rebuild SA and release VOPs. Note that ownership of the underlying dataset + * is an invariant across any of the operations that can be performed while the + * filesystem was suspended. Whether it succeeded or failed, the preconditions + * are the same: the relevant objset and associated dataset are owned by + * zfsvfs, held, and long held on entry. */ int zfs_resume_fs(zfsvfs_t *zfsvfs, const char *osname) { int err; + znode_t *zp; + uint64_t sa_obj = 0; ASSERT(RRW_WRITE_HELD(&zfsvfs->z_teardown_lock)); ASSERT(RW_WRITE_HELD(&zfsvfs->z_teardown_inactive_lock)); - err = dmu_objset_own(osname, DMU_OST_ZFS, B_FALSE, zfsvfs, - &zfsvfs->z_os); - if (err) { - zfsvfs->z_os = NULL; - } else { - znode_t *zp; - uint64_t sa_obj = 0; + /* + * We already own this, so just hold and rele it to update the + * objset_t, as the one we had before may have been evicted. + */ + VERIFY0(dmu_objset_hold(osname, zfsvfs, &zfsvfs->z_os)); + VERIFY3P(zfsvfs->z_os->os_dsl_dataset->ds_owner, ==, zfsvfs); + VERIFY(dsl_dataset_long_held(zfsvfs->z_os->os_dsl_dataset)); + dmu_objset_rele(zfsvfs->z_os, zfsvfs); - /* - * Make sure version hasn't changed - */ + /* + * Make sure version hasn't changed + */ - err = zfs_get_zplprop(zfsvfs->z_os, ZFS_PROP_VERSION, - &zfsvfs->z_version); + err = zfs_get_zplprop(zfsvfs->z_os, ZFS_PROP_VERSION, + &zfsvfs->z_version); - if (err) - goto bail; + if (err) + goto bail; - err = zap_lookup(zfsvfs->z_os, MASTER_NODE_OBJ, - ZFS_SA_ATTRS, 8, 1, &sa_obj); + err = zap_lookup(zfsvfs->z_os, MASTER_NODE_OBJ, + ZFS_SA_ATTRS, 8, 1, &sa_obj); - if (err && zfsvfs->z_version >= ZPL_VERSION_SA) - goto bail; + if (err && zfsvfs->z_version >= ZPL_VERSION_SA) + goto bail; - if ((err = sa_setup(zfsvfs->z_os, sa_obj, - zfs_attr_table, ZPL_END, &zfsvfs->z_attr_table)) != 0) - goto bail; + if ((err = sa_setup(zfsvfs->z_os, sa_obj, + zfs_attr_table, ZPL_END, &zfsvfs->z_attr_table)) != 0) + goto bail; - if (zfsvfs->z_version >= ZPL_VERSION_SA) - sa_register_update_callback(zfsvfs->z_os, - zfs_sa_upgrade); + if (zfsvfs->z_version >= ZPL_VERSION_SA) + sa_register_update_callback(zfsvfs->z_os, + zfs_sa_upgrade); - VERIFY(zfsvfs_setup(zfsvfs, B_FALSE) == 0); + VERIFY(zfsvfs_setup(zfsvfs, B_FALSE) == 0); - zfs_set_fuid_feature(zfsvfs); + zfs_set_fuid_feature(zfsvfs); - /* - * Attempt to re-establish all the active znodes with - * their dbufs. If a zfs_rezget() fails, then we'll let - * any potential callers discover that via ZFS_ENTER_VERIFY_VP - * when they try to use their znode. - */ - mutex_enter(&zfsvfs->z_znodes_lock); - for (zp = list_head(&zfsvfs->z_all_znodes); zp; - zp = list_next(&zfsvfs->z_all_znodes, zp)) { - (void) zfs_rezget(zp); - } - mutex_exit(&zfsvfs->z_znodes_lock); + /* + * Attempt to re-establish all the active znodes with + * their dbufs. If a zfs_rezget() fails, then we'll let + * any potential callers discover that via ZFS_ENTER_VERIFY_VP + * when they try to use their znode. + */ + mutex_enter(&zfsvfs->z_znodes_lock); + for (zp = list_head(&zfsvfs->z_all_znodes); zp; + zp = list_next(&zfsvfs->z_all_znodes, zp)) { + (void) zfs_rezget(zp); } + mutex_exit(&zfsvfs->z_znodes_lock); bail: /* release the VOPs */ @@ -2286,8 +2293,8 @@ bail: if (err) { /* - * Since we couldn't reopen zfsvfs::z_os, or - * setup the sa framework force unmount this file system. + * Since we couldn't setup the sa framework, try to force + * unmount this file system. */ if (vn_vfswlock(zfsvfs->z_vfs->vfs_vnodecovered) == 0) (void) dounmount(zfsvfs->z_vfs, MS_FORCE, curthread); From owner-svn-src-stable@FreeBSD.ORG Fri Oct 25 16:31:29 2013 Return-Path: Delivered-To: svn-src-stable@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [8.8.178.115]) (using TLSv1 with cipher ADH-AES256-SHA (256/256 bits)) (No client certificate requested) by hub.freebsd.org (Postfix) with ESMTP id 48508ABD; Fri, 25 Oct 2013 16:31:29 +0000 (UTC) (envelope-from kib@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:1900:2254:2068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mx1.freebsd.org (Postfix) with ESMTPS id 350B32233; Fri, 25 Oct 2013 16:31:29 +0000 (UTC) Received: from svn.freebsd.org ([127.0.1.70]) by svn.freebsd.org (8.14.7/8.14.7) with ESMTP id r9PGVTUV036473; Fri, 25 Oct 2013 16:31:29 GMT (envelope-from kib@svn.freebsd.org) Received: (from kib@localhost) by svn.freebsd.org (8.14.7/8.14.5/Submit) id r9PGVTdf036472; Fri, 25 Oct 2013 16:31:29 GMT (envelope-from kib@svn.freebsd.org) Message-Id: <201310251631.r9PGVTdf036472@svn.freebsd.org> From: Konstantin Belousov Date: Fri, 25 Oct 2013 16:31:29 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-stable@freebsd.org, svn-src-stable-10@freebsd.org Subject: svn commit: r257121 - stable/10/sys/fs/devfs X-SVN-Group: stable-10 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-stable@freebsd.org X-Mailman-Version: 2.1.14 Precedence: list List-Id: SVN commit messages for all the -stable branches of the src tree List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 25 Oct 2013 16:31:29 -0000 Author: kib Date: Fri Oct 25 16:31:28 2013 New Revision: 257121 URL: http://svnweb.freebsd.org/changeset/base/257121 Log: MFC r256501: Remove two instances of ARGSUSED comment, and wrap lines nearby the code that is to be changed. Approved by: re (glebius) Modified: stable/10/sys/fs/devfs/devfs_vnops.c Directory Properties: stable/10/sys/ (props changed) Modified: stable/10/sys/fs/devfs/devfs_vnops.c ============================================================================== --- stable/10/sys/fs/devfs/devfs_vnops.c Fri Oct 25 15:45:29 2013 (r257120) +++ stable/10/sys/fs/devfs/devfs_vnops.c Fri Oct 25 16:31:28 2013 (r257121) @@ -1168,9 +1168,9 @@ devfs_print(struct vop_print_args *ap) return (0); } -/* ARGSUSED */ static int -devfs_read_f(struct file *fp, struct uio *uio, struct ucred *cred, int flags, struct thread *td) +devfs_read_f(struct file *fp, struct uio *uio, struct ucred *cred, + int flags, struct thread *td) { struct cdev *dev; int ioflag, error, ref; @@ -1643,9 +1643,9 @@ devfs_truncate_f(struct file *fp, off_t return (vnops.fo_truncate(fp, length, cred, td)); } -/* ARGSUSED */ static int -devfs_write_f(struct file *fp, struct uio *uio, struct ucred *cred, int flags, struct thread *td) +devfs_write_f(struct file *fp, struct uio *uio, struct ucred *cred, + int flags, struct thread *td) { struct cdev *dev; int error, ioflag, ref; From owner-svn-src-stable@FreeBSD.ORG Fri Oct 25 16:33:25 2013 Return-Path: Delivered-To: svn-src-stable@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) (using TLSv1 with cipher ADH-AES256-SHA (256/256 bits)) (No client certificate requested) by hub.freebsd.org (Postfix) with ESMTP id 3B40EC09; Fri, 25 Oct 2013 16:33:25 +0000 (UTC) (envelope-from kib@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:1900:2254:2068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mx1.freebsd.org (Postfix) with ESMTPS id 0E72F2243; Fri, 25 Oct 2013 16:33:25 +0000 (UTC) Received: from svn.freebsd.org ([127.0.1.70]) by svn.freebsd.org (8.14.7/8.14.7) with ESMTP id r9PGXOnT036775; Fri, 25 Oct 2013 16:33:24 GMT (envelope-from kib@svn.freebsd.org) Received: (from kib@localhost) by svn.freebsd.org (8.14.7/8.14.5/Submit) id r9PGXOdK036772; Fri, 25 Oct 2013 16:33:24 GMT (envelope-from kib@svn.freebsd.org) Message-Id: <201310251633.r9PGXOdK036772@svn.freebsd.org> From: Konstantin Belousov Date: Fri, 25 Oct 2013 16:33:24 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-stable@freebsd.org, svn-src-stable-10@freebsd.org Subject: svn commit: r257122 - in stable/10/sys: fs/devfs kern sys X-SVN-Group: stable-10 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-stable@freebsd.org X-Mailman-Version: 2.1.14 Precedence: list List-Id: SVN commit messages for all the -stable branches of the src tree List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 25 Oct 2013 16:33:25 -0000 Author: kib Date: Fri Oct 25 16:33:24 2013 New Revision: 257122 URL: http://svnweb.freebsd.org/changeset/base/257122 Log: MFC r256502: Similar to debug.iosize_max_clamp sysctl, introduce devfs_iosize_max_clamp sysctl, which allows/disables SSIZE_MAX-sized i/o requests on the devfs files. Approved by: re (glebius) Modified: stable/10/sys/fs/devfs/devfs_vnops.c stable/10/sys/kern/sys_generic.c stable/10/sys/sys/systm.h Directory Properties: stable/10/sys/ (props changed) Modified: stable/10/sys/fs/devfs/devfs_vnops.c ============================================================================== --- stable/10/sys/fs/devfs/devfs_vnops.c Fri Oct 25 16:31:28 2013 (r257121) +++ stable/10/sys/fs/devfs/devfs_vnops.c Fri Oct 25 16:33:24 2013 (r257122) @@ -1178,6 +1178,8 @@ devfs_read_f(struct file *fp, struct uio struct cdevsw *dsw; struct file *fpop; + if (uio->uio_resid > DEVFS_IOSIZE_MAX) + return (EINVAL); fpop = td->td_fpop; error = devfs_fp_check(fp, &dev, &dsw, &ref); if (error) @@ -1653,6 +1655,8 @@ devfs_write_f(struct file *fp, struct ui struct cdevsw *dsw; struct file *fpop; + if (uio->uio_resid > DEVFS_IOSIZE_MAX) + return (EINVAL); fpop = td->td_fpop; error = devfs_fp_check(fp, &dev, &dsw, &ref); if (error) Modified: stable/10/sys/kern/sys_generic.c ============================================================================== --- stable/10/sys/kern/sys_generic.c Fri Oct 25 16:31:28 2013 (r257121) +++ stable/10/sys/kern/sys_generic.c Fri Oct 25 16:33:24 2013 (r257122) @@ -78,6 +78,10 @@ __FBSDID("$FreeBSD$"); int iosize_max_clamp = 1; SYSCTL_INT(_debug, OID_AUTO, iosize_max_clamp, CTLFLAG_RW, &iosize_max_clamp, 0, "Clamp max i/o size to INT_MAX"); +int devfs_iosize_max_clamp = 1; +SYSCTL_INT(_debug, OID_AUTO, devfs_iosize_max_clamp, CTLFLAG_RW, + &devfs_iosize_max_clamp, 0, "Clamp max i/o size to INT_MAX for devices"); + /* * Assert that the return value of read(2) and write(2) syscalls fits * into a register. If not, an architecture will need to provide the Modified: stable/10/sys/sys/systm.h ============================================================================== --- stable/10/sys/sys/systm.h Fri Oct 25 16:31:28 2013 (r257121) +++ stable/10/sys/sys/systm.h Fri Oct 25 16:33:24 2013 (r257122) @@ -146,7 +146,9 @@ extern const void *zero_region; /* addre extern int unmapped_buf_allowed; extern int iosize_max_clamp; +extern int devfs_iosize_max_clamp; #define IOSIZE_MAX (iosize_max_clamp ? INT_MAX : SSIZE_MAX) +#define DEVFS_IOSIZE_MAX (devfs_iosize_max_clamp ? INT_MAX : SSIZE_MAX) /* * General function declarations. From owner-svn-src-stable@FreeBSD.ORG Fri Oct 25 16:36:17 2013 Return-Path: Delivered-To: svn-src-stable@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) (using TLSv1 with cipher ADH-AES256-SHA (256/256 bits)) (No client certificate requested) by hub.freebsd.org (Postfix) with ESMTP id 9EB30E32; Fri, 25 Oct 2013 16:36:17 +0000 (UTC) (envelope-from kib@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:1900:2254:2068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mx1.freebsd.org (Postfix) with ESMTPS id 71AED2259; Fri, 25 Oct 2013 16:36:17 +0000 (UTC) Received: from svn.freebsd.org ([127.0.1.70]) by svn.freebsd.org (8.14.7/8.14.7) with ESMTP id r9PGaHHW037213; Fri, 25 Oct 2013 16:36:17 GMT (envelope-from kib@svn.freebsd.org) Received: (from kib@localhost) by svn.freebsd.org (8.14.7/8.14.5/Submit) id r9PGaHT6037211; Fri, 25 Oct 2013 16:36:17 GMT (envelope-from kib@svn.freebsd.org) Message-Id: <201310251636.r9PGaHT6037211@svn.freebsd.org> From: Konstantin Belousov Date: Fri, 25 Oct 2013 16:36:17 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-stable@freebsd.org, svn-src-stable-10@freebsd.org Subject: svn commit: r257123 - in stable/10/sys: kern sys X-SVN-Group: stable-10 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-stable@freebsd.org X-Mailman-Version: 2.1.14 Precedence: list List-Id: SVN commit messages for all the -stable branches of the src tree List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 25 Oct 2013 16:36:17 -0000 Author: kib Date: Fri Oct 25 16:36:16 2013 New Revision: 257123 URL: http://svnweb.freebsd.org/changeset/base/257123 Log: MFC r256504: Add a sysctl kern.disallow_high_osrel which disables executing the images compiled on the world with higher major version number than the high version number of the booted kernel. Default to disable. Approved by: re (glebius) Modified: stable/10/sys/kern/kern_exec.c stable/10/sys/sys/param.h Directory Properties: stable/10/sys/ (props changed) Modified: stable/10/sys/kern/kern_exec.c ============================================================================== --- stable/10/sys/kern/kern_exec.c Fri Oct 25 16:33:24 2013 (r257122) +++ stable/10/sys/kern/kern_exec.c Fri Oct 25 16:36:16 2013 (r257123) @@ -123,6 +123,11 @@ u_long ps_arg_cache_limit = PAGE_SIZE / SYSCTL_ULONG(_kern, OID_AUTO, ps_arg_cache_limit, CTLFLAG_RW, &ps_arg_cache_limit, 0, ""); +static int disallow_high_osrel; +SYSCTL_INT(_kern, OID_AUTO, disallow_high_osrel, CTLFLAG_RW, + &disallow_high_osrel, 0, + "Disallow execution of binaries built for higher version of the world"); + static int map_at_zero = 0; TUNABLE_INT("security.bsd.map_at_zero", &map_at_zero); SYSCTL_INT(_security_bsd, OID_AUTO, map_at_zero, CTLFLAG_RW, &map_at_zero, 0, @@ -552,6 +557,15 @@ interpret: vn_fullpath(td, imgp->vp, &imgp->execpath, &imgp->freepath) != 0)) imgp->execpath = args->fname; + if (disallow_high_osrel && + P_OSREL_MAJOR(p->p_osrel) > P_OSREL_MAJOR(__FreeBSD_version)) { + error = ENOEXEC; + uprintf("Osrel %d for image %s too high\n", p->p_osrel, + imgp->execpath != NULL ? imgp->execpath : ""); + vn_lock(imgp->vp, LK_SHARED | LK_RETRY); + goto exec_fail_dealloc; + } + /* * Copy out strings (args and env) and initialize stack base */ Modified: stable/10/sys/sys/param.h ============================================================================== --- stable/10/sys/sys/param.h Fri Oct 25 16:33:24 2013 (r257122) +++ stable/10/sys/sys/param.h Fri Oct 25 16:36:16 2013 (r257123) @@ -80,6 +80,8 @@ #define P_OSREL_SIGWAIT 700000 #define P_OSREL_SIGSEGV 700004 #define P_OSREL_MAP_ANON 800104 + +#define P_OSREL_MAJOR(x) ((x) / 100000) #endif #ifndef LOCORE From owner-svn-src-stable@FreeBSD.ORG Fri Oct 25 16:49:33 2013 Return-Path: Delivered-To: svn-src-stable@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [8.8.178.115]) (using TLSv1 with cipher ADH-AES256-SHA (256/256 bits)) (No client certificate requested) by hub.freebsd.org (Postfix) with ESMTP id 4CBDF4C8; Fri, 25 Oct 2013 16:49:33 +0000 (UTC) (envelope-from kib@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:1900:2254:2068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mx1.freebsd.org (Postfix) with ESMTPS id 3A382230B; Fri, 25 Oct 2013 16:49:33 +0000 (UTC) Received: from svn.freebsd.org ([127.0.1.70]) by svn.freebsd.org (8.14.7/8.14.7) with ESMTP id r9PGnXYL041247; Fri, 25 Oct 2013 16:49:33 GMT (envelope-from kib@svn.freebsd.org) Received: (from kib@localhost) by svn.freebsd.org (8.14.7/8.14.5/Submit) id r9PGnX7B041246; Fri, 25 Oct 2013 16:49:33 GMT (envelope-from kib@svn.freebsd.org) Message-Id: <201310251649.r9PGnX7B041246@svn.freebsd.org> From: Konstantin Belousov Date: Fri, 25 Oct 2013 16:49:33 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-stable@freebsd.org, svn-src-stable-9@freebsd.org Subject: svn commit: r257124 - stable/9/sys/fs/devfs X-SVN-Group: stable-9 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-stable@freebsd.org X-Mailman-Version: 2.1.14 Precedence: list List-Id: SVN commit messages for all the -stable branches of the src tree List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 25 Oct 2013 16:49:33 -0000 Author: kib Date: Fri Oct 25 16:49:32 2013 New Revision: 257124 URL: http://svnweb.freebsd.org/changeset/base/257124 Log: MFC r256501: Remove two instances of ARGSUSED comment, and wrap lines nearby the code that is to be changed. Modified: stable/9/sys/fs/devfs/devfs_vnops.c Directory Properties: stable/9/sys/ (props changed) stable/9/sys/fs/ (props changed) Modified: stable/9/sys/fs/devfs/devfs_vnops.c ============================================================================== --- stable/9/sys/fs/devfs/devfs_vnops.c Fri Oct 25 16:36:16 2013 (r257123) +++ stable/9/sys/fs/devfs/devfs_vnops.c Fri Oct 25 16:49:32 2013 (r257124) @@ -1168,9 +1168,9 @@ devfs_print(struct vop_print_args *ap) return (0); } -/* ARGSUSED */ static int -devfs_read_f(struct file *fp, struct uio *uio, struct ucred *cred, int flags, struct thread *td) +devfs_read_f(struct file *fp, struct uio *uio, struct ucred *cred, + int flags, struct thread *td) { struct cdev *dev; int ioflag, error, ref; @@ -1643,9 +1643,9 @@ devfs_truncate_f(struct file *fp, off_t return (vnops.fo_truncate(fp, length, cred, td)); } -/* ARGSUSED */ static int -devfs_write_f(struct file *fp, struct uio *uio, struct ucred *cred, int flags, struct thread *td) +devfs_write_f(struct file *fp, struct uio *uio, struct ucred *cred, + int flags, struct thread *td) { struct cdev *dev; int error, ioflag, ref; From owner-svn-src-stable@FreeBSD.ORG Fri Oct 25 17:04:47 2013 Return-Path: Delivered-To: svn-src-stable@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) (using TLSv1 with cipher ADH-AES256-SHA (256/256 bits)) (No client certificate requested) by hub.freebsd.org (Postfix) with ESMTP id 79273AA3; Fri, 25 Oct 2013 17:04:47 +0000 (UTC) (envelope-from kib@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:1900:2254:2068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mx1.freebsd.org (Postfix) with ESMTPS id 4C59723DE; Fri, 25 Oct 2013 17:04:47 +0000 (UTC) Received: from svn.freebsd.org ([127.0.1.70]) by svn.freebsd.org (8.14.7/8.14.7) with ESMTP id r9PH4kXO047666; Fri, 25 Oct 2013 17:04:46 GMT (envelope-from kib@svn.freebsd.org) Received: (from kib@localhost) by svn.freebsd.org (8.14.7/8.14.5/Submit) id r9PH4kuN047662; Fri, 25 Oct 2013 17:04:46 GMT (envelope-from kib@svn.freebsd.org) Message-Id: <201310251704.r9PH4kuN047662@svn.freebsd.org> From: Konstantin Belousov Date: Fri, 25 Oct 2013 17:04:46 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-stable@freebsd.org, svn-src-stable-9@freebsd.org Subject: svn commit: r257125 - in stable/9/sys: fs/devfs kern sys X-SVN-Group: stable-9 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-stable@freebsd.org X-Mailman-Version: 2.1.14 Precedence: list List-Id: SVN commit messages for all the -stable branches of the src tree List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 25 Oct 2013 17:04:47 -0000 Author: kib Date: Fri Oct 25 17:04:46 2013 New Revision: 257125 URL: http://svnweb.freebsd.org/changeset/base/257125 Log: MFC r256502: Similar to debug.iosize_max_clamp sysctl, introduce devfs_iosize_max_clamp sysctl, which allows/disables SSIZE_MAX-sized i/o requests on the devfs files. Modified: stable/9/sys/fs/devfs/devfs_vnops.c stable/9/sys/kern/sys_generic.c stable/9/sys/sys/systm.h Directory Properties: stable/9/sys/ (props changed) stable/9/sys/fs/ (props changed) stable/9/sys/sys/ (props changed) Modified: stable/9/sys/fs/devfs/devfs_vnops.c ============================================================================== --- stable/9/sys/fs/devfs/devfs_vnops.c Fri Oct 25 16:49:32 2013 (r257124) +++ stable/9/sys/fs/devfs/devfs_vnops.c Fri Oct 25 17:04:46 2013 (r257125) @@ -49,6 +49,7 @@ #include #include #include +#include #include #include #include @@ -1178,6 +1179,8 @@ devfs_read_f(struct file *fp, struct uio struct cdevsw *dsw; struct file *fpop; + if (uio->uio_resid > DEVFS_IOSIZE_MAX) + return (EINVAL); fpop = td->td_fpop; error = devfs_fp_check(fp, &dev, &dsw, &ref); if (error) @@ -1653,6 +1656,8 @@ devfs_write_f(struct file *fp, struct ui struct cdevsw *dsw; struct file *fpop; + if (uio->uio_resid > DEVFS_IOSIZE_MAX) + return (EINVAL); fpop = td->td_fpop; error = devfs_fp_check(fp, &dev, &dsw, &ref); if (error) Modified: stable/9/sys/kern/sys_generic.c ============================================================================== --- stable/9/sys/kern/sys_generic.c Fri Oct 25 16:49:32 2013 (r257124) +++ stable/9/sys/kern/sys_generic.c Fri Oct 25 17:04:46 2013 (r257125) @@ -77,6 +77,10 @@ __FBSDID("$FreeBSD$"); int iosize_max_clamp = 1; SYSCTL_INT(_debug, OID_AUTO, iosize_max_clamp, CTLFLAG_RW, &iosize_max_clamp, 0, "Clamp max i/o size to INT_MAX"); +int devfs_iosize_max_clamp = 1; +SYSCTL_INT(_debug, OID_AUTO, devfs_iosize_max_clamp, CTLFLAG_RW, + &devfs_iosize_max_clamp, 0, "Clamp max i/o size to INT_MAX for devices"); + /* * Assert that the return value of read(2) and write(2) syscalls fits * into a register. If not, an architecture will need to provide the Modified: stable/9/sys/sys/systm.h ============================================================================== --- stable/9/sys/sys/systm.h Fri Oct 25 16:49:32 2013 (r257124) +++ stable/9/sys/sys/systm.h Fri Oct 25 17:04:46 2013 (r257125) @@ -138,7 +138,9 @@ extern const void *zero_region; /* addre extern int unmapped_buf_allowed; extern int iosize_max_clamp; +extern int devfs_iosize_max_clamp; #define IOSIZE_MAX (iosize_max_clamp ? INT_MAX : SSIZE_MAX) +#define DEVFS_IOSIZE_MAX (devfs_iosize_max_clamp ? INT_MAX : SSIZE_MAX) /* * General function declarations. From owner-svn-src-stable@FreeBSD.ORG Fri Oct 25 17:15:58 2013 Return-Path: Delivered-To: svn-src-stable@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) (using TLSv1 with cipher ADH-AES256-SHA (256/256 bits)) (No client certificate requested) by hub.freebsd.org (Postfix) with ESMTP id 0AF3C16C; Fri, 25 Oct 2013 17:15:58 +0000 (UTC) (envelope-from kib@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:1900:2254:2068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mx1.freebsd.org (Postfix) with ESMTPS id D122C248F; Fri, 25 Oct 2013 17:15:57 +0000 (UTC) Received: from svn.freebsd.org ([127.0.1.70]) by svn.freebsd.org (8.14.7/8.14.7) with ESMTP id r9PHFvWS054228; Fri, 25 Oct 2013 17:15:57 GMT (envelope-from kib@svn.freebsd.org) Received: (from kib@localhost) by svn.freebsd.org (8.14.7/8.14.5/Submit) id r9PHFvfG054225; Fri, 25 Oct 2013 17:15:57 GMT (envelope-from kib@svn.freebsd.org) Message-Id: <201310251715.r9PHFvfG054225@svn.freebsd.org> From: Konstantin Belousov Date: Fri, 25 Oct 2013 17:15:57 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-stable@freebsd.org, svn-src-stable-9@freebsd.org Subject: svn commit: r257126 - in stable/9/sys: kern sys X-SVN-Group: stable-9 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-stable@freebsd.org X-Mailman-Version: 2.1.14 Precedence: list List-Id: SVN commit messages for all the -stable branches of the src tree List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 25 Oct 2013 17:15:58 -0000 Author: kib Date: Fri Oct 25 17:15:57 2013 New Revision: 257126 URL: http://svnweb.freebsd.org/changeset/base/257126 Log: MFC r256504: Add a sysctl kern.disallow_high_osrel which disables executing the images compiled on the world with higher major version number than the high version number of the booted kernel. Default to disable. Modified: stable/9/sys/kern/kern_exec.c stable/9/sys/sys/param.h Directory Properties: stable/9/sys/ (props changed) stable/9/sys/sys/ (props changed) Modified: stable/9/sys/kern/kern_exec.c ============================================================================== --- stable/9/sys/kern/kern_exec.c Fri Oct 25 17:04:46 2013 (r257125) +++ stable/9/sys/kern/kern_exec.c Fri Oct 25 17:15:57 2013 (r257126) @@ -122,6 +122,11 @@ u_long ps_arg_cache_limit = PAGE_SIZE / SYSCTL_ULONG(_kern, OID_AUTO, ps_arg_cache_limit, CTLFLAG_RW, &ps_arg_cache_limit, 0, ""); +static int disallow_high_osrel; +SYSCTL_INT(_kern, OID_AUTO, disallow_high_osrel, CTLFLAG_RW, + &disallow_high_osrel, 0, + "Disallow execution of binaries built for higher version of the world"); + static int map_at_zero = 0; TUNABLE_INT("security.bsd.map_at_zero", &map_at_zero); SYSCTL_INT(_security_bsd, OID_AUTO, map_at_zero, CTLFLAG_RW, &map_at_zero, 0, @@ -558,6 +563,15 @@ interpret: vn_fullpath(td, imgp->vp, &imgp->execpath, &imgp->freepath) != 0)) imgp->execpath = args->fname; + if (disallow_high_osrel && + P_OSREL_MAJOR(p->p_osrel) > P_OSREL_MAJOR(__FreeBSD_version)) { + error = ENOEXEC; + uprintf("Osrel %d for image %s too high\n", p->p_osrel, + imgp->execpath != NULL ? imgp->execpath : ""); + vn_lock(imgp->vp, LK_SHARED | LK_RETRY); + goto exec_fail_dealloc; + } + /* * Copy out strings (args and env) and initialize stack base */ Modified: stable/9/sys/sys/param.h ============================================================================== --- stable/9/sys/sys/param.h Fri Oct 25 17:04:46 2013 (r257125) +++ stable/9/sys/sys/param.h Fri Oct 25 17:15:57 2013 (r257126) @@ -80,6 +80,8 @@ #define P_OSREL_SIGWAIT 700000 #define P_OSREL_SIGSEGV 700004 #define P_OSREL_MAP_ANON 800104 + +#define P_OSREL_MAJOR(x) ((x) / 100000) #endif #ifndef LOCORE From owner-svn-src-stable@FreeBSD.ORG Fri Oct 25 18:39:02 2013 Return-Path: Delivered-To: svn-src-stable@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) (using TLSv1 with cipher ADH-AES256-SHA (256/256 bits)) (No client certificate requested) by hub.freebsd.org (Postfix) with ESMTP id DE68DD59; Fri, 25 Oct 2013 18:39:01 +0000 (UTC) (envelope-from grehan@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:1900:2254:2068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mx1.freebsd.org (Postfix) with ESMTPS id BC4552957; Fri, 25 Oct 2013 18:39:01 +0000 (UTC) Received: from svn.freebsd.org ([127.0.1.70]) by svn.freebsd.org (8.14.7/8.14.7) with ESMTP id r9PId1vX081252; Fri, 25 Oct 2013 18:39:01 GMT (envelope-from grehan@svn.freebsd.org) Received: (from grehan@localhost) by svn.freebsd.org (8.14.7/8.14.5/Submit) id r9PId10v081250; Fri, 25 Oct 2013 18:39:01 GMT (envelope-from grehan@svn.freebsd.org) Message-Id: <201310251839.r9PId10v081250@svn.freebsd.org> From: Peter Grehan Date: Fri, 25 Oct 2013 18:39:01 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-stable@freebsd.org, svn-src-stable-10@freebsd.org Subject: svn commit: r257128 - stable/10/usr.sbin/bhyve X-SVN-Group: stable-10 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-stable@freebsd.org X-Mailman-Version: 2.1.14 Precedence: list List-Id: SVN commit messages for all the -stable branches of the src tree List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 25 Oct 2013 18:39:02 -0000 Author: grehan Date: Fri Oct 25 18:39:01 2013 New Revision: 257128 URL: http://svnweb.freebsd.org/changeset/base/257128 Log: MFC r256926, r257005 r256926 Fix AHCI ATAPI emulation when backed with /dev/cd0 - remove assumption that the backing file/device had 512-byte sectors - fix incorrect iovec size variable that would result in a buffer overrun when an o/s issued an i/o request with more s/g elements than the blockif api r257005 Export the block size capability to guests. - Use #defines for capability bits - Export the VTBLK_F_BLK_SIZE capability - Fix bug in calculating capacity: it is in 512-byte units, not the underlying sector size This allows virtio-blk to have backing devices with non 512-byte sector sizes e.g. /dev/cd0, and 4K-block harddrives. Approved by: re (glebius) Modified: stable/10/usr.sbin/bhyve/pci_ahci.c stable/10/usr.sbin/bhyve/pci_virtio_block.c Directory Properties: stable/10/usr.sbin/bhyve/ (props changed) Modified: stable/10/usr.sbin/bhyve/pci_ahci.c ============================================================================== --- stable/10/usr.sbin/bhyve/pci_ahci.c Fri Oct 25 18:38:44 2013 (r257127) +++ stable/10/usr.sbin/bhyve/pci_ahci.c Fri Oct 25 18:39:01 2013 (r257128) @@ -663,8 +663,7 @@ atapi_read_capacity(struct ahci_port *p, uint8_t buf[8]; uint64_t sectors; - sectors = blockif_size(p->bctx) / blockif_sectsz(p->bctx); - sectors >>= 2; + sectors = blockif_size(p->bctx) / 2048; be32enc(buf, sectors - 1); be32enc(buf + 4, 2048); cfis[4] = (cfis[4] & ~7) | ATA_I_CMD | ATA_I_IN; @@ -908,9 +907,9 @@ atapi_read(struct ahci_port *p, int slot /* * Build up the iovec based on the prdt */ - for (i = 0; i < hdr->prdtl; i++) { + for (i = 0; i < iovcnt; i++) { breq->br_iov[i].iov_base = paddr_guest2host(ahci_ctx(sc), - prdt->dba, prdt->dbc + 1); + prdt->dba, prdt->dbc + 1); breq->br_iov[i].iov_len = prdt->dbc + 1; aior->done += (prdt->dbc + 1); prdt++; Modified: stable/10/usr.sbin/bhyve/pci_virtio_block.c ============================================================================== --- stable/10/usr.sbin/bhyve/pci_virtio_block.c Fri Oct 25 18:38:44 2013 (r257127) +++ stable/10/usr.sbin/bhyve/pci_virtio_block.c Fri Oct 25 18:39:01 2013 (r257128) @@ -66,11 +66,16 @@ __FBSDID("$FreeBSD$"); #define VTBLK_BLK_ID_BYTES 20 +/* Capability bits */ +#define VTBLK_F_SEG_MAX (1 << 2) /* Maximum request segments */ +#define VTBLK_F_BLK_SIZE (1 << 6) /* cfg block size valid */ + /* * Host capabilities */ #define VTBLK_S_HOSTCAPS \ - ( 0x00000004 | /* host maximum request segments */ \ + ( VTBLK_F_SEG_MAX | \ + VTBLK_F_BLK_SIZE | \ VIRTIO_RING_F_INDIRECT_DESC ) /* indirect descriptors */ /* @@ -315,7 +320,7 @@ pci_vtblk_init(struct vmctx *ctx, struct digest[0], digest[1], digest[2], digest[3], digest[4], digest[5]); /* setup virtio block config space */ - sc->vbsc_cfg.vbc_capacity = size / sectsz; + sc->vbsc_cfg.vbc_capacity = size / DEV_BSIZE; /* 512-byte units */ sc->vbsc_cfg.vbc_seg_max = VTBLK_MAXSEGS; sc->vbsc_cfg.vbc_blk_size = sectsz; sc->vbsc_cfg.vbc_size_max = 0; /* not negotiated */ From owner-svn-src-stable@FreeBSD.ORG Fri Oct 25 21:27:36 2013 Return-Path: Delivered-To: svn-src-stable@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [8.8.178.115]) (using TLSv1 with cipher ADH-AES256-SHA (256/256 bits)) (No client certificate requested) by hub.freebsd.org (Postfix) with ESMTP id 78E5F71F; Fri, 25 Oct 2013 21:27:36 +0000 (UTC) (envelope-from gjb@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:1900:2254:2068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mx1.freebsd.org (Postfix) with ESMTPS id 6528C22BA; Fri, 25 Oct 2013 21:27:36 +0000 (UTC) Received: from svn.freebsd.org ([127.0.1.70]) by svn.freebsd.org (8.14.7/8.14.7) with ESMTP id r9PLRae0039589; Fri, 25 Oct 2013 21:27:36 GMT (envelope-from gjb@svn.freebsd.org) Received: (from gjb@localhost) by svn.freebsd.org (8.14.7/8.14.5/Submit) id r9PLRaAr039588; Fri, 25 Oct 2013 21:27:36 GMT (envelope-from gjb@svn.freebsd.org) Message-Id: <201310252127.r9PLRaAr039588@svn.freebsd.org> From: Glen Barber Date: Fri, 25 Oct 2013 21:27:36 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-stable@freebsd.org, svn-src-stable-10@freebsd.org Subject: svn commit: r257136 - stable/10 X-SVN-Group: stable-10 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-stable@freebsd.org X-Mailman-Version: 2.1.14 Precedence: list List-Id: SVN commit messages for all the -stable branches of the src tree List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 25 Oct 2013 21:27:36 -0000 Author: gjb Date: Fri Oct 25 21:27:35 2013 New Revision: 257136 URL: http://svnweb.freebsd.org/changeset/base/257136 Log: MFC r257079: Fix build host pollution by avoiding calling 'uname -srp' to determine values for 'VERSION'. Approved by: re (glebius) Modified: stable/10/Makefile.inc1 (contents, props changed) Modified: stable/10/Makefile.inc1 ============================================================================== --- stable/10/Makefile.inc1 Fri Oct 25 19:49:03 2013 (r257135) +++ stable/10/Makefile.inc1 Fri Oct 25 21:27:35 2013 (r257136) @@ -58,6 +58,7 @@ # use that new version. And the new (dynamically-linked) /bin/sh # will expect to find appropriate libraries in /lib and /libexec. # +SRCDIR?= ${.CURDIR} .if defined(SUBDIR_OVERRIDE) SUBDIR= ${SUBDIR_OVERRIDE} .else @@ -128,8 +129,11 @@ OSRELDATE= 0 .endif .if !defined(VERSION) -VERSION!= uname -srp -VERSION+= ${OSRELDATE} +REVISION!= make -C ${SRCDIR}/release -V REVISION +BRANCH!= make -C ${SRCDIR}/release -V BRANCH +SRCRELDATE!= awk '/^\#define[[:space:]]*__FreeBSD_version/ { print $$3 }' \ + ${SRCDIR}/sys/sys/param.h +VERSION= FreeBSD ${REVISION}-${BRANCH} ${TARGET_ARCH} ${SRCRELDATE} .endif KNOWN_ARCHES?= amd64 arm armeb/arm armv6/arm i386 i386/pc98 ia64 mips mipsel/mips mips64el/mips mips64/mips mipsn32el/mips mipsn32/mips powerpc powerpc64/powerpc sparc64 From owner-svn-src-stable@FreeBSD.ORG Fri Oct 25 23:43:51 2013 Return-Path: Delivered-To: svn-src-stable@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) (using TLSv1 with cipher ADH-AES256-SHA (256/256 bits)) (No client certificate requested) by hub.freebsd.org (Postfix) with ESMTP id E531AC01; Fri, 25 Oct 2013 23:43:50 +0000 (UTC) (envelope-from h.skuhra@gmail.com) Received: from mail-ea0-x22b.google.com (mail-ea0-x22b.google.com [IPv6:2a00:1450:4013:c01::22b]) (using TLSv1 with cipher ECDHE-RSA-RC4-SHA (128/128 bits)) (No client certificate requested) by mx1.freebsd.org (Postfix) with ESMTPS id DD0112A7F; Fri, 25 Oct 2013 23:43:49 +0000 (UTC) Received: by mail-ea0-f171.google.com with SMTP id n15so1025892ead.2 for ; Fri, 25 Oct 2013 16:43:46 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=date:message-id:from:to:cc:subject:in-reply-to:references :user-agent:mime-version:content-type; bh=OyEdcaDw0RcKsoBmnSMAibcFzZBdwKrQxDoYBkIXnUA=; b=aMLIW4vHzW6gZptpLsmBLh/ODgSZduIXEUuELmJ1V8vaKKMVRO5hqaVNmPzWP+qRNt ERXymHLC9C+gMerhLPzFPJt3cU7sOZ4DAdZXjypuW/Mj973TufPbgyn4yk7ClfCFIKc3 LPWPOox0g5CgBaC2g/+boeN+0yeDWFbQXo/csCMSu61n2tDmALzPKkEeLXJtMz6hV+xk t0RgabgYCc1JUyEWRdEz18cI9bdGAipWgLGI7FET/Cahqx6VkuQnfOLTQScK/1Wt4CSz iwR6lPIl5QFfApL32tgIsuaBZP1eF2hk2FgX8azKkMehT5Wa/IcGALMIlstA1O1wbvlV rz/A== X-Received: by 10.15.31.9 with SMTP id x9mr10534243eeu.53.1382744626692; Fri, 25 Oct 2013 16:43:46 -0700 (PDT) Received: from oslo.ath.cx ([2001:470:6f:44d:853b:b71c:22bd:ee23]) by mx.google.com with ESMTPSA id e13sm23766293eeu.4.2013.10.25.16.43.45 for (version=TLSv1.2 cipher=RC4-SHA bits=128/128); Fri, 25 Oct 2013 16:43:45 -0700 (PDT) Date: Sat, 26 Oct 2013 01:43:43 +0200 Message-ID: <86mwlw532o.wl%h.skuhra@gmail.com> From: "Herbert J. Skuhra" To: Glen Barber Subject: Re: svn commit: r257136 - stable/10 In-Reply-To: <201310252127.r9PLRaAr039588@svn.freebsd.org> References: <201310252127.r9PLRaAr039588@svn.freebsd.org> User-Agent: Wanderlust/2.15.9 (Almost Unreal) SEMI-EPG/1.14.7 (Harue) FLIM/1.14.9 (=?ISO-8859-4?Q?Goj=F2?=) APEL/10.8 EasyPG/1.0.0 Emacs/24.3.50 (i386-pc-freebsd10.0) MULE/6.0 (HANACHIRUSATO) MIME-Version: 1.0 (generated by SEMI-EPG 1.14.7 - "Harue") Content-Type: text/plain; charset=US-ASCII Cc: svn-src-stable@freebsd.org, svn-src-all@freebsd.org, src-committers@freebsd.org, svn-src-stable-10@freebsd.org X-BeenThere: svn-src-stable@freebsd.org X-Mailman-Version: 2.1.14 Precedence: list List-Id: SVN commit messages for all the -stable branches of the src tree List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 25 Oct 2013 23:43:51 -0000 Hi, On Fri, 25 Oct 2013 21:27:36 +0000 (UTC) Glen Barber wrote: > Author: gjb > Date: Fri Oct 25 21:27:35 2013 > New Revision: 257136 > URL: http://svnweb.freebsd.org/changeset/base/257136 > > Log: > MFC r257079: > Fix build host pollution by avoiding calling 'uname -srp' to > determine values for 'VERSION'. > > Approved by: re (glebius) > > Modified: > stable/10/Makefile.inc1 (contents, props changed) When running make (check|delete)-old I am still getting: >>> Checking for old files make[3]: chdir /usr/obj/usr/src/release: No such file or directory make[2]: "/usr/src/Makefile.inc1" line 132: warning: "make -C /usr/obj/usr/src/release -V REVISION" returned non-zero status make[3]: chdir /usr/obj/usr/src/release: No such file or directory make[2]: "/usr/src/Makefile.inc1" line 133: warning: "make -C /usr/obj/usr/src/release -V BRANCH" returned non-zero status awk: can't open file /usr/obj/usr/src/sys/sys/param.h source line number 1 make[2]: "/usr/src/Makefile.inc1" line 135: warning: "awk '/^#define[[:space:]]*__FreeBSD_version/ { print $3 }' /usr/obj/usr/src/sys/sys/param.h" returned non-zero status /usr/lib/libbsdyml.a /usr/lib/libbsdyml.so /usr/lib/libbsdyml_p.a /usr/share/man/man3/libbsdyml.3.gz /usr/include/bsdyml.h >>> Checking for old libraries make[3]: chdir /usr/obj/usr/src/release: No such file or directory make[2]: "/usr/src/Makefile.inc1" line 132: warning: "make -C /usr/obj/usr/src/release -V REVISION" returned non-zero status make[3]: chdir /usr/obj/usr/src/release: No such file or directory make[2]: "/usr/src/Makefile.inc1" line 133: warning: "make -C /usr/obj/usr/src/release -V BRANCH" returned non-zero status awk: can't open file /usr/obj/usr/src/sys/sys/param.h source line number 1 make[2]: "/usr/src/Makefile.inc1" line 135: warning: "awk '/^#define[[:space:]]*__FreeBSD_version/ { print $3 }' /usr/obj/usr/src/sys/sys/param.h" returned non-zero status /usr/lib/libbsdyml.so.0 >>> Checking for old directories make[3]: chdir /usr/obj/usr/src/release: No such file or directory make[2]: "/usr/src/Makefile.inc1" line 132: warning: "make -C /usr/obj/usr/src/release -V REVISION" returned non-zero status make[3]: chdir /usr/obj/usr/src/release: No such file or directory make[2]: "/usr/src/Makefile.inc1" line 133: warning: "make -C /usr/obj/usr/src/release -V BRANCH" returned non-zero status awk: can't open file /usr/obj/usr/src/sys/sys/param.h source line number 1 make[2]: "/usr/src/Makefile.inc1" line 135: warning: "awk '/^#define[[:space:]]*__FreeBSD_version/ { print $3 }' /usr/obj/usr/src/sys/sys/param.h" returned non-zero status /usr/share/doc/bind9 /usr/share/doc/bind9/arm /usr/share/doc/bind9/misc To remove old files and directories run 'make delete-old'. To remove old libraries run 'make delete-old-libs'. -- Herbert From owner-svn-src-stable@FreeBSD.ORG Sat Oct 26 00:05:19 2013 Return-Path: Delivered-To: svn-src-stable@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) (using TLSv1 with cipher ADH-AES256-SHA (256/256 bits)) (No client certificate requested) by hub.freebsd.org (Postfix) with ESMTP id EBCA2E8A; Sat, 26 Oct 2013 00:05:19 +0000 (UTC) (envelope-from gjb@FreeBSD.org) Received: from mail0.glenbarber.us (mail0.glenbarber.us [IPv6:2607:fc50:1:2300:1001:1001:1001:face]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mx1.freebsd.org (Postfix) with ESMTPS id BF6A42B61; Sat, 26 Oct 2013 00:05:19 +0000 (UTC) Received: from glenbarber.us (unknown [64.197.173.10]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) (Authenticated sender: gjb) by mail0.glenbarber.us (Postfix) with ESMTPSA id 2BCC6D41F; Sat, 26 Oct 2013 00:05:18 +0000 (UTC) DKIM-Filter: OpenDKIM Filter v2.8.3 mail0.glenbarber.us 2BCC6D41F Authentication-Results: mail0.glenbarber.us; dkim=none reason="no signature"; dkim-adsp=none Date: Fri, 25 Oct 2013 20:05:16 -0400 From: Glen Barber To: "Herbert J. Skuhra" Subject: Re: svn commit: r257136 - stable/10 Message-ID: <20131026000423.GA1740@glenbarber.us> References: <201310252127.r9PLRaAr039588@svn.freebsd.org> <86mwlw532o.wl%h.skuhra@gmail.com> MIME-Version: 1.0 Content-Type: multipart/signed; micalg=pgp-sha256; protocol="application/pgp-signature"; boundary="Fba/0zbH8Xs+Fj9o" Content-Disposition: inline In-Reply-To: <86mwlw532o.wl%h.skuhra@gmail.com> X-Operating-System: FreeBSD 11.0-CURRENT amd64 User-Agent: Mutt/1.5.22 (2013-10-16) Cc: svn-src-stable@freebsd.org, svn-src-all@freebsd.org, src-committers@freebsd.org, svn-src-stable-10@freebsd.org X-BeenThere: svn-src-stable@freebsd.org X-Mailman-Version: 2.1.14 Precedence: list List-Id: SVN commit messages for all the -stable branches of the src tree List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sat, 26 Oct 2013 00:05:20 -0000 --Fba/0zbH8Xs+Fj9o Content-Type: text/plain; charset=us-ascii Content-Disposition: inline Content-Transfer-Encoding: quoted-printable On Sat, Oct 26, 2013 at 01:43:43AM +0200, Herbert J. Skuhra wrote: > Hi, >=20 > On Fri, 25 Oct 2013 21:27:36 +0000 (UTC) > Glen Barber wrote: >=20 > > Author: gjb > > Date: Fri Oct 25 21:27:35 2013 > > New Revision: 257136 > > URL: http://svnweb.freebsd.org/changeset/base/257136 > >=20 > > Log: > > MFC r257079: > > Fix build host pollution by avoiding calling 'uname -srp' to > > determine values for 'VERSION'. > > =20 > > Approved by: re (glebius) > >=20 > > Modified: > > stable/10/Makefile.inc1 (contents, props changed) >=20 > When running make (check|delete)-old I am still getting: >=20 > >>> Checking for old files > make[3]: chdir /usr/obj/usr/src/release: No such file or directory > make[2]: "/usr/src/Makefile.inc1" line 132: warning: "make -C /usr/obj/us= r/src/release -V REVISION" returned non-zero status > make[3]: chdir /usr/obj/usr/src/release: No such file or directory > make[2]: "/usr/src/Makefile.inc1" line 133: warning: "make -C /usr/obj/us= r/src/release -V BRANCH" returned non-zero status > awk: can't open file /usr/obj/usr/src/sys/sys/param.h > source line number 1 > make[2]: "/usr/src/Makefile.inc1" line 135: warning: "awk '/^#define[[:sp= ace:]]*__FreeBSD_version/ { print $3 }' /usr/obj/usr/src/sys/sys/param.h" = returned non-zero status > /usr/lib/libbsdyml.a > /usr/lib/libbsdyml.so > /usr/lib/libbsdyml_p.a > /usr/share/man/man3/libbsdyml.3.gz > /usr/include/bsdyml.h > >>> Checking for old libraries > make[3]: chdir /usr/obj/usr/src/release: No such file or directory > make[2]: "/usr/src/Makefile.inc1" line 132: warning: "make -C /usr/obj/us= r/src/release -V REVISION" returned non-zero status > make[3]: chdir /usr/obj/usr/src/release: No such file or directory > make[2]: "/usr/src/Makefile.inc1" line 133: warning: "make -C /usr/obj/us= r/src/release -V BRANCH" returned non-zero status > awk: can't open file /usr/obj/usr/src/sys/sys/param.h > source line number 1 > make[2]: "/usr/src/Makefile.inc1" line 135: warning: "awk '/^#define[[:sp= ace:]]*__FreeBSD_version/ { print $3 }' /usr/obj/usr/src/sys/sys/param.h" = returned non-zero status > /usr/lib/libbsdyml.so.0 > >>> Checking for old directories > make[3]: chdir /usr/obj/usr/src/release: No such file or directory > make[2]: "/usr/src/Makefile.inc1" line 132: warning: "make -C /usr/obj/us= r/src/release -V REVISION" returned non-zero status > make[3]: chdir /usr/obj/usr/src/release: No such file or directory > make[2]: "/usr/src/Makefile.inc1" line 133: warning: "make -C /usr/obj/us= r/src/release -V BRANCH" returned non-zero status > awk: can't open file /usr/obj/usr/src/sys/sys/param.h > source line number 1 > make[2]: "/usr/src/Makefile.inc1" line 135: warning: "awk '/^#define[[:sp= ace:]]*__FreeBSD_version/ { print $3 }' /usr/obj/usr/src/sys/sys/param.h" = returned non-zero status > /usr/share/doc/bind9 > /usr/share/doc/bind9/arm > /usr/share/doc/bind9/misc > To remove old files and directories run 'make delete-old'. > To remove old libraries run 'make delete-old-libs'. >=20 This will be fixed after -BETA2. I realize the output is annoying, but in these cases, they are non-fatal warnings. It *is* very high on my priority list, but the fix right now is not clear. I'll follow up on -stable@ and -current@ shortly with a full explanation of why -BETA2 is taking so long, by the way, which is directly related to the update this commit makes, and why it is important in order to move forward with this change in the tree, versus reverting it (again). Glen --Fba/0zbH8Xs+Fj9o Content-Type: application/pgp-signature -----BEGIN PGP SIGNATURE----- Version: GnuPG v2.0.22 (FreeBSD) iQIbBAEBCAAGBQJSawc7AAoJELls3eqvi17Q+GIP9jFyswMXpPfyWFUa0M44W3Nd 6+jWNvEhUvZlJ8D7MmnsP9LihqvLhQR/LK5HQpQYVW1eyuTQ/msMsxWqqh+/vO6E zGabEX7Yzv0kQTuozoAlIU1AD8HHpHyLn8TMy0PBELzqehGuiIsxJsXSR45XDzQ9 f40i9c7Je/k2KSRGd29xcDxkjxinHvwehBZtSLNbWzFdKwyb5f0CUNEjGTu7bHAQ YMrZrT30nV39Ay0LVuDUHqqEzkBX1wMu+LEnMnFY3Xld/4CclpDOYaCzfX703cAF 0jzzjceHoQKxB9SPC51LzmEO8LfF+Vi5Z7Zxfw46BH6/U09btW75NB7KzdapYAJR OrFVZQf3ho0AfNrOCPkr1r2inTePpqTknbEjYNuz0x/B0YAUBriPUKdtJR50QeJm EwBBW5wENZ0e6Lx+nFwM/L0pTLLXeolvnK5lQirnonCL7E9eYb9XIHqp9bEy8Vz4 xWAjWyxrIGmqtqDSJvQO0brOfSyVj2m1YP3GKTZwbxWQwCinmx6F1jPuKKq6M66y zUl3stz9Aab/Pt/pmnDqj88QcBQ7u4pkmLALPm0Y4ud/ABng04ap9ztUUpAXBLIi TJlDe/sqU4MvBpbanPZJ9xqojAMGcwfDST+tH1D/LvOvQx5E+4ITxTLH3kKseAyg 37ZkqIkFPa13OY+y2cA= =kMO+ -----END PGP SIGNATURE----- --Fba/0zbH8Xs+Fj9o-- From owner-svn-src-stable@FreeBSD.ORG Sat Oct 26 08:34:36 2013 Return-Path: Delivered-To: svn-src-stable@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) (using TLSv1 with cipher ADH-AES256-SHA (256/256 bits)) (No client certificate requested) by hub.freebsd.org (Postfix) with ESMTP id 49FD030D; Sat, 26 Oct 2013 08:34:36 +0000 (UTC) (envelope-from cperciva@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:1900:2254:2068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mx1.freebsd.org (Postfix) with ESMTPS id 366F12F97; Sat, 26 Oct 2013 08:34:36 +0000 (UTC) Received: from svn.freebsd.org ([127.0.1.70]) by svn.freebsd.org (8.14.7/8.14.7) with ESMTP id r9Q8Ya86078348; Sat, 26 Oct 2013 08:34:36 GMT (envelope-from cperciva@svn.freebsd.org) Received: (from cperciva@localhost) by svn.freebsd.org (8.14.7/8.14.5/Submit) id r9Q8YaXL078347; Sat, 26 Oct 2013 08:34:36 GMT (envelope-from cperciva@svn.freebsd.org) Message-Id: <201310260834.r9Q8YaXL078347@svn.freebsd.org> From: Colin Percival Date: Sat, 26 Oct 2013 08:34:36 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-stable@freebsd.org, svn-src-stable-10@freebsd.org Subject: svn commit: r257153 - stable/10/usr.sbin/freebsd-update X-SVN-Group: stable-10 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-stable@freebsd.org X-Mailman-Version: 2.1.14 Precedence: list List-Id: SVN commit messages for all the -stable branches of the src tree List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sat, 26 Oct 2013 08:34:36 -0000 Author: cperciva Date: Sat Oct 26 08:34:35 2013 New Revision: 257153 URL: http://svnweb.freebsd.org/changeset/base/257153 Log: MFC r256646, r256767, r257038: When installing updates, install new directories first and remove old directories last. Allow ~ in file names so libtool droppings in contrib don't break updates. It has happened twice now, and is likely to happen again. Be more selective when filtering for lib*.so.N files. These are deleted at the end of the upgrade process, after warning users to upgrade any 3rd party software (e.g., from the ports tree) which might link to the libraries being removed. Approved by: re (gjb) Errata Notice: FreeBSD-EN-13:04.freebsd-update Modified: stable/10/usr.sbin/freebsd-update/freebsd-update.sh Directory Properties: stable/10/usr.sbin/freebsd-update/ (props changed) Modified: stable/10/usr.sbin/freebsd-update/freebsd-update.sh ============================================================================== --- stable/10/usr.sbin/freebsd-update/freebsd-update.sh Sat Oct 26 06:23:51 2013 (r257152) +++ stable/10/usr.sbin/freebsd-update/freebsd-update.sh Sat Oct 26 08:34:35 2013 (r257153) @@ -1200,7 +1200,7 @@ fetch_metadata_sanity () { # Some aliases to save space later: ${P} is a character which can # appear in a path; ${M} is the four numeric metadata fields; and # ${H} is a sha256 hash. - P="[-+./:=%@_[[:alnum:]]" + P="[-+./:=%@_[~[:alnum:]]" M="[0-9]+\|[0-9]+\|[0-9]+\|[0-9]+" H="[0-9a-f]{64}" @@ -2814,16 +2814,24 @@ Kernel updates have been installed. Ple # If we haven't already dealt with the world, deal with it. if ! [ -f $1/worlddone ]; then + # Create any necessary directories first + grep -vE '^/boot/' $1/INDEX-NEW | + grep -E '^[^|]+\|d\|' > INDEX-NEW + install_from_index INDEX-NEW || return 1 + # Install new shared libraries next grep -vE '^/boot/' $1/INDEX-NEW | - grep -E '/lib/.*\.so\.[0-9]+\|' > INDEX-NEW + grep -vE '^[^|]+\|d\|' | + grep -E '^[^|]*/lib/[^|]*\.so\.[0-9]+\|' > INDEX-NEW install_from_index INDEX-NEW || return 1 # Deal with everything else grep -vE '^/boot/' $1/INDEX-OLD | - grep -vE '/lib/.*\.so\.[0-9]+\|' > INDEX-OLD + grep -vE '^[^|]+\|d\|' | + grep -vE '^[^|]*/lib/[^|]*\.so\.[0-9]+\|' > INDEX-OLD grep -vE '^/boot/' $1/INDEX-NEW | - grep -vE '/lib/.*\.so\.[0-9]+\|' > INDEX-NEW + grep -vE '^[^|]+\|d\|' | + grep -vE '^[^|]*/lib/[^|]*\.so\.[0-9]+\|' > INDEX-NEW install_from_index INDEX-NEW || return 1 install_delete INDEX-OLD INDEX-NEW || return 1 @@ -2844,11 +2852,11 @@ Kernel updates have been installed. Ple # Do we need to ask the user to portupgrade now? grep -vE '^/boot/' $1/INDEX-NEW | - grep -E '/lib/.*\.so\.[0-9]+\|' | + grep -E '^[^|]*/lib/[^|]*\.so\.[0-9]+\|' | cut -f 1 -d '|' | sort > newfiles if grep -vE '^/boot/' $1/INDEX-OLD | - grep -E '/lib/.*\.so\.[0-9]+\|' | + grep -E '^[^|]*/lib/[^|]*\.so\.[0-9]+\|' | cut -f 1 -d '|' | sort | join -v 1 - newfiles | @@ -2868,9 +2876,18 @@ again to finish installing updates. # Remove old shared libraries grep -vE '^/boot/' $1/INDEX-NEW | - grep -E '/lib/.*\.so\.[0-9]+\|' > INDEX-NEW + grep -vE '^[^|]+\|d\|' | + grep -E '^[^|]*/lib/[^|]*\.so\.[0-9]+\|' > INDEX-NEW grep -vE '^/boot/' $1/INDEX-OLD | - grep -E '/lib/.*\.so\.[0-9]+\|' > INDEX-OLD + grep -vE '^[^|]+\|d\|' | + grep -E '^[^|]*/lib/[^|]*\.so\.[0-9]+\|' > INDEX-OLD + install_delete INDEX-OLD INDEX-NEW || return 1 + + # Remove old directories + grep -vE '^/boot/' $1/INDEX-OLD | + grep -E '^[^|]+\|d\|' > INDEX-OLD + grep -vE '^/boot/' $1/INDEX-OLD | + grep -E '^[^|]+\|d\|' > INDEX-OLD install_delete INDEX-OLD INDEX-NEW || return 1 # Remove temporary files From owner-svn-src-stable@FreeBSD.ORG Sat Oct 26 11:56:52 2013 Return-Path: Delivered-To: svn-src-stable@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [8.8.178.115]) (using TLSv1 with cipher ADH-AES256-SHA (256/256 bits)) (No client certificate requested) by hub.freebsd.org (Postfix) with ESMTP id 8A4B7309; Sat, 26 Oct 2013 11:56:52 +0000 (UTC) (envelope-from dim@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:1900:2254:2068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mx1.freebsd.org (Postfix) with ESMTPS id 78C512930; Sat, 26 Oct 2013 11:56:52 +0000 (UTC) Received: from svn.freebsd.org ([127.0.1.70]) by svn.freebsd.org (8.14.7/8.14.7) with ESMTP id r9QBuqjG045324; Sat, 26 Oct 2013 11:56:52 GMT (envelope-from dim@svn.freebsd.org) Received: (from dim@localhost) by svn.freebsd.org (8.14.7/8.14.5/Submit) id r9QBuqZi045323; Sat, 26 Oct 2013 11:56:52 GMT (envelope-from dim@svn.freebsd.org) Message-Id: <201310261156.r9QBuqZi045323@svn.freebsd.org> From: Dimitry Andric Date: Sat, 26 Oct 2013 11:56:52 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-stable@freebsd.org, svn-src-stable-9@freebsd.org Subject: svn commit: r257156 - stable/9/sys/dev/random X-SVN-Group: stable-9 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-stable@freebsd.org X-Mailman-Version: 2.1.14 Precedence: list List-Id: SVN commit messages for all the -stable branches of the src tree List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sat, 26 Oct 2013 11:56:52 -0000 Author: dim Date: Sat Oct 26 11:56:51 2013 New Revision: 257156 URL: http://svnweb.freebsd.org/changeset/base/257156 Log: MFC r256157: Now our binutils's assembler supports the Intel Random Number Generator extensions, we can change the .byte directives in sys/dev/random/ivy.c to plain 'rdrand' mnemonics. This already worked for clang users, but now it will also work for gcc users. Approved by: so (des) Modified: stable/9/sys/dev/random/ivy.c Directory Properties: stable/9/sys/ (props changed) Modified: stable/9/sys/dev/random/ivy.c ============================================================================== --- stable/9/sys/dev/random/ivy.c Sat Oct 26 08:38:21 2013 (r257155) +++ stable/9/sys/dev/random/ivy.c Sat Oct 26 11:56:51 2013 (r257156) @@ -64,12 +64,12 @@ ivy_rng_store(long *tmp) __asm __volatile( #ifdef __amd64__ - ".byte\t0x48,0x0f,0xc7,0xf0\n\t" /* rdrand %rax */ + "rdrand\t%%rax\n\t" "jnc\t1f\n\t" "movq\t%%rax,%1\n\t" "movl\t$8,%%eax\n" #else /* i386 */ - ".byte\t0x0f,0xc7,0xf0\n\t" /* rdrand %eax */ + "rdrand\t%%eax\n\t" "jnc\t1f\n\t" "movl\t%%eax,%1\n\t" "movl\t$4,%%eax\n" From owner-svn-src-stable@FreeBSD.ORG Sat Oct 26 15:10:59 2013 Return-Path: Delivered-To: svn-src-stable@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [8.8.178.115]) (using TLSv1 with cipher ADH-AES256-SHA (256/256 bits)) (No client certificate requested) by hub.freebsd.org (Postfix) with ESMTP id 68273548; Sat, 26 Oct 2013 15:10:59 +0000 (UTC) (envelope-from gjb@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:1900:2254:2068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mx1.freebsd.org (Postfix) with ESMTPS id 548882285; Sat, 26 Oct 2013 15:10:59 +0000 (UTC) Received: from svn.freebsd.org ([127.0.1.70]) by svn.freebsd.org (8.14.7/8.14.7) with ESMTP id r9QFAxuS013135; Sat, 26 Oct 2013 15:10:59 GMT (envelope-from gjb@svn.freebsd.org) Received: (from gjb@localhost) by svn.freebsd.org (8.14.7/8.14.5/Submit) id r9QFAxrw013134; Sat, 26 Oct 2013 15:10:59 GMT (envelope-from gjb@svn.freebsd.org) Message-Id: <201310261510.r9QFAxrw013134@svn.freebsd.org> From: Glen Barber Date: Sat, 26 Oct 2013 15:10:59 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-stable@freebsd.org, svn-src-stable-10@freebsd.org Subject: svn commit: r257166 - stable/10/sys/conf X-SVN-Group: stable-10 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-stable@freebsd.org X-Mailman-Version: 2.1.14 Precedence: list List-Id: SVN commit messages for all the -stable branches of the src tree List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sat, 26 Oct 2013 15:10:59 -0000 Author: gjb Date: Sat Oct 26 15:10:58 2013 New Revision: 257166 URL: http://svnweb.freebsd.org/changeset/base/257166 Log: Update stable/10 to BETA2 as part of the 10.0-RELEASE cycle. Approved by: re (implicit) Sponsored by: The FreeBSD Foundation Modified: stable/10/sys/conf/newvers.sh Modified: stable/10/sys/conf/newvers.sh ============================================================================== --- stable/10/sys/conf/newvers.sh Sat Oct 26 15:05:27 2013 (r257165) +++ stable/10/sys/conf/newvers.sh Sat Oct 26 15:10:58 2013 (r257166) @@ -32,7 +32,7 @@ TYPE="FreeBSD" REVISION="10.0" -BRANCH="BETA1" +BRANCH="BETA2" if [ "X${BRANCH_OVERRIDE}" != "X" ]; then BRANCH=${BRANCH_OVERRIDE} fi From owner-svn-src-stable@FreeBSD.ORG Sat Oct 26 19:02:41 2013 Return-Path: Delivered-To: svn-src-stable@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) (using TLSv1 with cipher ADH-AES256-SHA (256/256 bits)) (No client certificate requested) by hub.freebsd.org (Postfix) with ESMTP id 0154839E; Sat, 26 Oct 2013 19:02:40 +0000 (UTC) (envelope-from delphij@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:1900:2254:2068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mx1.freebsd.org (Postfix) with ESMTPS id E1C442DAF; Sat, 26 Oct 2013 19:02:40 +0000 (UTC) Received: from svn.freebsd.org ([127.0.1.70]) by svn.freebsd.org (8.14.7/8.14.7) with ESMTP id r9QJ2eku093159; Sat, 26 Oct 2013 19:02:40 GMT (envelope-from delphij@svn.freebsd.org) Received: (from delphij@localhost) by svn.freebsd.org (8.14.7/8.14.5/Submit) id r9QJ2eWo093147; Sat, 26 Oct 2013 19:02:40 GMT (envelope-from delphij@svn.freebsd.org) Message-Id: <201310261902.r9QJ2eWo093147@svn.freebsd.org> From: Xin LI Date: Sat, 26 Oct 2013 19:02:40 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-stable@freebsd.org, svn-src-stable-10@freebsd.org Subject: svn commit: r257187 - stable/10/sys/dev/oce X-SVN-Group: stable-10 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-stable@freebsd.org X-Mailman-Version: 2.1.14 Precedence: list List-Id: SVN commit messages for all the -stable branches of the src tree List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sat, 26 Oct 2013 19:02:41 -0000 Author: delphij Date: Sat Oct 26 19:02:39 2013 New Revision: 257187 URL: http://svnweb.freebsd.org/changeset/base/257187 Log: MFC r257007: Update driver to version 10.0.664.0. Many thanks to Emulex for their continued support of FreeBSD. Submitted by: Venkata Duvvuru Approved by: re (glebius) Modified: stable/10/sys/dev/oce/oce_hw.c stable/10/sys/dev/oce/oce_hw.h stable/10/sys/dev/oce/oce_if.c stable/10/sys/dev/oce/oce_if.h stable/10/sys/dev/oce/oce_mbox.c stable/10/sys/dev/oce/oce_queue.c stable/10/sys/dev/oce/oce_sysctl.c stable/10/sys/dev/oce/oce_util.c Directory Properties: stable/10/sys/ (props changed) Modified: stable/10/sys/dev/oce/oce_hw.c ============================================================================== --- stable/10/sys/dev/oce/oce_hw.c Sat Oct 26 18:59:58 2013 (r257186) +++ stable/10/sys/dev/oce/oce_hw.c Sat Oct 26 19:02:39 2013 (r257187) @@ -38,6 +38,7 @@ /* $FreeBSD$ */ + #include "oce_if.h" static int oce_POST(POCE_SOFTC sc); @@ -203,12 +204,16 @@ void oce_get_pci_capabilities(POCE_SOFTC { uint32_t val; - if (pci_find_cap(sc->dev, PCIY_PCIX, &val) == 0) { +#if __FreeBSD_version >= 1000000 + #define pci_find_extcap pci_find_cap +#endif + + if (pci_find_extcap(sc->dev, PCIY_PCIX, &val) == 0) { if (val != 0) sc->flags |= OCE_FLAGS_PCIX; } - if (pci_find_cap(sc->dev, PCIY_EXPRESS, &val) == 0) { + if (pci_find_extcap(sc->dev, PCIY_EXPRESS, &val) == 0) { if (val != 0) { uint16_t link_status = pci_read_config(sc->dev, val + 0x12, 2); @@ -219,12 +224,12 @@ void oce_get_pci_capabilities(POCE_SOFTC } } - if (pci_find_cap(sc->dev, PCIY_MSI, &val) == 0) { + if (pci_find_extcap(sc->dev, PCIY_MSI, &val) == 0) { if (val != 0) sc->flags |= OCE_FLAGS_MSI_CAPABLE; } - if (pci_find_cap(sc->dev, PCIY_MSIX, &val) == 0) { + if (pci_find_extcap(sc->dev, PCIY_MSIX, &val) == 0) { if (val != 0) { val = pci_msix_count(sc->dev); sc->flags |= OCE_FLAGS_MSIX_CAPABLE; @@ -386,6 +391,9 @@ oce_create_nw_interface(POCE_SOFTC sc) capab_flags &= ~MBX_RX_IFACE_FLAGS_PASS_L3L4_ERR; } + if (IS_SH(sc) || IS_XE201(sc)) + capab_flags |= MBX_RX_IFACE_FLAGS_MULTICAST; + /* enable capabilities controlled via driver startup parameters */ if (is_rss_enabled(sc)) capab_en_flags |= MBX_RX_IFACE_FLAGS_RSS; Modified: stable/10/sys/dev/oce/oce_hw.h ============================================================================== --- stable/10/sys/dev/oce/oce_hw.h Sat Oct 26 18:59:58 2013 (r257186) +++ stable/10/sys/dev/oce/oce_hw.h Sat Oct 26 19:02:39 2013 (r257187) @@ -59,6 +59,30 @@ #define INTR_EN 0x20000000 #define IMAGE_TRANSFER_SIZE (32 * 1024) /* 32K at a time */ + +/********* UE Status and Mask Registers ***/ +#define PCICFG_UE_STATUS_LOW 0xA0 +#define PCICFG_UE_STATUS_HIGH 0xA4 +#define PCICFG_UE_STATUS_LOW_MASK 0xA8 + +/* Lancer SLIPORT registers */ +#define SLIPORT_STATUS_OFFSET 0x404 +#define SLIPORT_CONTROL_OFFSET 0x408 +#define SLIPORT_ERROR1_OFFSET 0x40C +#define SLIPORT_ERROR2_OFFSET 0x410 +#define PHYSDEV_CONTROL_OFFSET 0x414 + +#define SLIPORT_STATUS_ERR_MASK 0x80000000 +#define SLIPORT_STATUS_DIP_MASK 0x02000000 +#define SLIPORT_STATUS_RN_MASK 0x01000000 +#define SLIPORT_STATUS_RDY_MASK 0x00800000 +#define SLI_PORT_CONTROL_IP_MASK 0x08000000 +#define PHYSDEV_CONTROL_FW_RESET_MASK 0x00000002 +#define PHYSDEV_CONTROL_DD_MASK 0x00000004 +#define PHYSDEV_CONTROL_INP_MASK 0x40000000 + +#define SLIPORT_ERROR_NO_RESOURCE1 0x2 +#define SLIPORT_ERROR_NO_RESOURCE2 0x9 /* CSR register offsets */ #define MPU_EP_CONTROL 0 #define MPU_EP_SEMAPHORE_BE3 0xac @@ -2079,7 +2103,8 @@ struct flash_file_hdr { uint32_t antidote; uint32_t num_imgs; uint8_t build[24]; - uint8_t rsvd[32]; + uint8_t asic_type_rev; + uint8_t rsvd[31]; }; struct image_hdr { @@ -3681,4 +3706,3 @@ enum OCE_QUEUE_RX_STATS { QUEUE_RX_BUFFER_ERRORS = 8, QUEUE_RX_N_WORDS = 10 }; - Modified: stable/10/sys/dev/oce/oce_if.c ============================================================================== --- stable/10/sys/dev/oce/oce_if.c Sat Oct 26 18:59:58 2013 (r257186) +++ stable/10/sys/dev/oce/oce_if.c Sat Oct 26 19:02:39 2013 (r257187) @@ -36,7 +36,6 @@ * Costa Mesa, CA 92626 */ - /* $FreeBSD$ */ #include "opt_inet6.h" @@ -44,6 +43,78 @@ #include "oce_if.h" +/* UE Status Low CSR */ +static char *ue_status_low_desc[] = { + "CEV", + "CTX", + "DBUF", + "ERX", + "Host", + "MPU", + "NDMA", + "PTC ", + "RDMA ", + "RXF ", + "RXIPS ", + "RXULP0 ", + "RXULP1 ", + "RXULP2 ", + "TIM ", + "TPOST ", + "TPRE ", + "TXIPS ", + "TXULP0 ", + "TXULP1 ", + "UC ", + "WDMA ", + "TXULP2 ", + "HOST1 ", + "P0_OB_LINK ", + "P1_OB_LINK ", + "HOST_GPIO ", + "MBOX ", + "AXGMAC0", + "AXGMAC1", + "JTAG", + "MPU_INTPEND" +}; + +/* UE Status High CSR */ +static char *ue_status_hi_desc[] = { + "LPCMEMHOST", + "MGMT_MAC", + "PCS0ONLINE", + "MPU_IRAM", + "PCS1ONLINE", + "PCTL0", + "PCTL1", + "PMEM", + "RR", + "TXPB", + "RXPP", + "XAUI", + "TXP", + "ARM", + "IPC", + "HOST2", + "HOST3", + "HOST4", + "HOST5", + "HOST6", + "HOST7", + "HOST8", + "HOST9", + "NETC", + "Unknown", + "Unknown", + "Unknown", + "Unknown", + "Unknown", + "Unknown", + "Unknown", + "Unknown" +}; + /* Driver entry points prototypes */ static int oce_probe(device_t dev); @@ -388,11 +459,11 @@ oce_ioctl(struct ifnet *ifp, u_long comm } if ((ifp->if_flags & IFF_PROMISC) && !sc->promisc) { - sc->promisc = TRUE; - oce_rxf_set_promiscuous(sc, sc->promisc); + if (!oce_rxf_set_promiscuous(sc, (1 | (1 << 1)))) + sc->promisc = TRUE; } else if (!(ifp->if_flags & IFF_PROMISC) && sc->promisc) { - sc->promisc = FALSE; - oce_rxf_set_promiscuous(sc, sc->promisc); + if (!oce_rxf_set_promiscuous(sc, 0)) + sc->promisc = FALSE; } break; @@ -862,10 +933,12 @@ retry: (m->m_pkthdr.csum_flags & CSUM_TCP) ? 1 : 0; nichdr->u0.s.num_wqe = num_wqes; nichdr->u0.s.total_length = m->m_pkthdr.len; + if (m->m_flags & M_VLANTAG) { nichdr->u0.s.vlan = 1; /*Vlan present*/ nichdr->u0.s.vlan_tag = m->m_pkthdr.ether_vtag; } + if (m->m_pkthdr.csum_flags & CSUM_TSO) { if (m->m_pkthdr.tso_segsz) { nichdr->u0.s.lso = 1; @@ -1156,6 +1229,18 @@ oce_wq_handler(void *arg) } +#if __FreeBSD_version >= 1000000 +static __inline void +drbr_stats_update(struct ifnet *ifp, int len, int mflags) +{ +#ifndef NO_SLOW_STATS + ifp->if_obytes += len; + if (mflags & M_MCAST) + ifp->if_omcasts++; +#endif +} +#endif + static int oce_multiq_transmit(struct ifnet *ifp, struct mbuf *m, struct oce_wq *wq) { @@ -1174,7 +1259,7 @@ oce_multiq_transmit(struct ifnet *ifp, s return status; } - if (m != NULL) { + if (m != NULL) { if ((status = drbr_enqueue(ifp, br, m)) != 0) return status; } @@ -1646,6 +1731,10 @@ oce_attach_ifp(POCE_SOFTC sc) sc->ifp->if_capenable = sc->ifp->if_capabilities; if_initbaudrate(sc->ifp, IF_Gbps(10)); +#if __FreeBSD_version >= 1000000 + sc->ifp->if_hw_tsomax = OCE_MAX_TSO_SIZE; +#endif + ether_ifattach(sc->ifp, sc->macaddr.mac_addr); return 0; @@ -1664,7 +1753,8 @@ oce_add_vlan(void *arg, struct ifnet *if sc->vlan_tag[vtag] = 1; sc->vlans_added++; - oce_vid_config(sc); + if (sc->vlans_added <= (sc->max_vlans + 1)) + oce_vid_config(sc); } @@ -1866,12 +1956,76 @@ done: } +static void oce_detect_hw_error(POCE_SOFTC sc) +{ + + uint32_t ue_low = 0, ue_high = 0, ue_low_mask = 0, ue_high_mask = 0; + uint32_t sliport_status = 0, sliport_err1 = 0, sliport_err2 = 0; + uint32_t i; + + if (sc->hw_error) + return; + + if (IS_XE201(sc)) { + sliport_status = OCE_READ_REG32(sc, db, SLIPORT_STATUS_OFFSET); + if (sliport_status & SLIPORT_STATUS_ERR_MASK) { + sliport_err1 = OCE_READ_REG32(sc, db, SLIPORT_ERROR1_OFFSET); + sliport_err2 = OCE_READ_REG32(sc, db, SLIPORT_ERROR2_OFFSET); + } + } else { + ue_low = OCE_READ_REG32(sc, devcfg, PCICFG_UE_STATUS_LOW); + ue_high = OCE_READ_REG32(sc, devcfg, PCICFG_UE_STATUS_HIGH); + ue_low_mask = OCE_READ_REG32(sc, devcfg, PCICFG_UE_STATUS_LOW_MASK); + ue_high_mask = OCE_READ_REG32(sc, devcfg, PCICFG_UE_STATUS_HI_MASK); + + ue_low = (ue_low & ~ue_low_mask); + ue_high = (ue_high & ~ue_high_mask); + } + + /* On certain platforms BE hardware can indicate spurious UEs. + * Allow the h/w to stop working completely in case of a real UE. + * Hence not setting the hw_error for UE detection. + */ + if (sliport_status & SLIPORT_STATUS_ERR_MASK) { + sc->hw_error = TRUE; + device_printf(sc->dev, "Error detected in the card\n"); + } + + if (sliport_status & SLIPORT_STATUS_ERR_MASK) { + device_printf(sc->dev, + "ERR: sliport status 0x%x\n", sliport_status); + device_printf(sc->dev, + "ERR: sliport error1 0x%x\n", sliport_err1); + device_printf(sc->dev, + "ERR: sliport error2 0x%x\n", sliport_err2); + } + + if (ue_low) { + for (i = 0; ue_low; ue_low >>= 1, i++) { + if (ue_low & 1) + device_printf(sc->dev, "UE: %s bit set\n", + ue_status_low_desc[i]); + } + } + + if (ue_high) { + for (i = 0; ue_high; ue_high >>= 1, i++) { + if (ue_high & 1) + device_printf(sc->dev, "UE: %s bit set\n", + ue_status_hi_desc[i]); + } + } + +} + + static void oce_local_timer(void *arg) { POCE_SOFTC sc = arg; int i = 0; + oce_detect_hw_error(sc); oce_refresh_nic_stats(sc); oce_refresh_queue_stats(sc); oce_mac_addr_set(sc); @@ -1890,7 +2044,7 @@ oce_local_timer(void *arg) /* NOTE : This should only be called holding * DEVICE_LOCK. -*/ + */ static void oce_if_deactivate(POCE_SOFTC sc) { @@ -2080,6 +2234,9 @@ setup_max_queues_want(POCE_SOFTC sc) (sc->flags & OCE_FLAGS_BE2)) { sc->nrqs = 1; sc->nwqs = 1; + } else { + sc->nrqs = MIN(OCE_NCPUS, sc->nrssqs) + 1; + sc->nwqs = MIN(OCE_NCPUS, sc->nrssqs); } } Modified: stable/10/sys/dev/oce/oce_if.h ============================================================================== --- stable/10/sys/dev/oce/oce_if.h Sat Oct 26 18:59:58 2013 (r257186) +++ stable/10/sys/dev/oce/oce_if.h Sat Oct 26 19:02:39 2013 (r257187) @@ -36,7 +36,6 @@ * Costa Mesa, CA 92626 */ - /* $FreeBSD$ */ #include @@ -88,7 +87,8 @@ #include "oce_hw.h" -#define COMPONENT_REVISION "4.6.95.0" +/* OCE device driver module component revision informaiton */ +#define COMPONENT_REVISION "10.0.664.0" /* OCE devices supported by this driver */ #define PCI_VENDOR_EMULEX 0x10df /* Emulex */ @@ -150,6 +150,7 @@ extern int mp_ncpus; /* system's total #define OCE_MAX_TX_ELEMENTS 29 #define OCE_MAX_TX_DESC 1024 #define OCE_MAX_TX_SIZE 65535 +#define OCE_MAX_TSO_SIZE (65535 - ETHER_HDR_LEN) #define OCE_MAX_RX_SIZE 4096 #define OCE_MAX_RQ_POSTS 255 #define OCE_DEFAULT_PROMISCUOUS 0 @@ -173,6 +174,7 @@ extern int mp_ncpus; /* system's total #define OCE_CAPAB_FLAGS (MBX_RX_IFACE_FLAGS_BROADCAST | \ MBX_RX_IFACE_FLAGS_UNTAGGED | \ MBX_RX_IFACE_FLAGS_PROMISCUOUS | \ + MBX_RX_IFACE_FLAGS_VLAN_PROMISCUOUS | \ MBX_RX_IFACE_FLAGS_MCAST_PROMISCUOUS | \ MBX_RX_IFACE_FLAGS_RSS | \ MBX_RX_IFACE_FLAGS_PASS_L3L4_ERR) @@ -863,7 +865,7 @@ typedef struct oce_softc { uint32_t if_cap_flags; uint32_t flow_control; - uint32_t promisc; + uint8_t promisc; struct oce_aic_obj aic_obj[OCE_MAX_EQ]; @@ -877,9 +879,11 @@ typedef struct oce_softc { struct oce_drv_stats oce_stats_info; struct callout timer; int8_t be3_native; + uint8_t hw_error; uint16_t qnq_debug_event; uint16_t qnqid; uint16_t pvid; + uint16_t max_vlans; } OCE_SOFTC, *POCE_SOFTC; @@ -1010,7 +1014,7 @@ int oce_config_vlan(POCE_SOFTC sc, uint3 uint32_t untagged, uint32_t enable_promisc); int oce_set_flow_control(POCE_SOFTC sc, uint32_t flow_control); int oce_config_nic_rss(POCE_SOFTC sc, uint32_t if_id, uint16_t enable_rss); -int oce_rxf_set_promiscuous(POCE_SOFTC sc, uint32_t enable); +int oce_rxf_set_promiscuous(POCE_SOFTC sc, uint8_t enable); int oce_set_common_iface_rx_filter(POCE_SOFTC sc, POCE_DMA_MEM sgl); int oce_get_link_status(POCE_SOFTC sc, struct link_status *link); int oce_mbox_get_nic_stats_v0(POCE_SOFTC sc, POCE_DMA_MEM pstats_dma_mem); Modified: stable/10/sys/dev/oce/oce_mbox.c ============================================================================== --- stable/10/sys/dev/oce/oce_mbox.c Sat Oct 26 18:59:58 2013 (r257186) +++ stable/10/sys/dev/oce/oce_mbox.c Sat Oct 26 19:02:39 2013 (r257187) @@ -36,11 +36,8 @@ * Costa Mesa, CA 92626 */ - - /* $FreeBSD$ */ - #include "oce_if.h" extern uint32_t sfp_vpd_dump_buffer[TRANSCEIVER_DATA_NUM_ELE]; @@ -281,8 +278,10 @@ oce_get_fw_version(POCE_SOFTC sc) if (!ret) ret = fwcmd->hdr.u0.rsp.status; if (ret) { - device_printf(sc->dev,"%s failed - cmd status: %d\n", - __FUNCTION__, ret); + device_printf(sc->dev, + "%s failed - cmd status: %d addi status: %d\n", + __FUNCTION__, ret, + fwcmd->hdr.u0.rsp.additional_status); goto error; } @@ -438,8 +437,10 @@ oce_read_mac_addr(POCE_SOFTC sc, uint32_ if (!ret) ret = fwcmd->hdr.u0.rsp.status; if (ret) { - device_printf(sc->dev,"%s failed - cmd status: %d\n", - __FUNCTION__, ret); + device_printf(sc->dev, + "%s failed - cmd status: %d addi status: %d\n", + __FUNCTION__, ret, + fwcmd->hdr.u0.rsp.additional_status); goto error; } @@ -481,25 +482,27 @@ oce_get_fw_config(POCE_SOFTC sc) if (!ret) ret = fwcmd->hdr.u0.rsp.status; if (ret) { - device_printf(sc->dev,"%s failed - cmd status: %d\n", - __FUNCTION__, ret); + device_printf(sc->dev, + "%s failed - cmd status: %d addi status: %d\n", + __FUNCTION__, ret, + fwcmd->hdr.u0.rsp.additional_status); goto error; } DW_SWAP(u32ptr(fwcmd), sizeof(struct mbx_common_query_fw_config)); - sc->config_number = fwcmd->params.rsp.config_number; - sc->asic_revision = fwcmd->params.rsp.asic_revision; - sc->port_id = fwcmd->params.rsp.port_id; - sc->function_mode = fwcmd->params.rsp.function_mode; - sc->function_caps = fwcmd->params.rsp.function_caps; + sc->config_number = HOST_32(fwcmd->params.rsp.config_number); + sc->asic_revision = HOST_32(fwcmd->params.rsp.asic_revision); + sc->port_id = HOST_32(fwcmd->params.rsp.port_id); + sc->function_mode = HOST_32(fwcmd->params.rsp.function_mode); + sc->function_caps = HOST_32(fwcmd->params.rsp.function_caps); if (fwcmd->params.rsp.ulp[0].ulp_mode & ULP_NIC_MODE) { - sc->max_tx_rings = fwcmd->params.rsp.ulp[0].nic_wq_tot; - sc->max_rx_rings = fwcmd->params.rsp.ulp[0].lro_rqid_tot; + sc->max_tx_rings = HOST_32(fwcmd->params.rsp.ulp[0].nic_wq_tot); + sc->max_rx_rings = HOST_32(fwcmd->params.rsp.ulp[0].lro_rqid_tot); } else { - sc->max_tx_rings = fwcmd->params.rsp.ulp[1].nic_wq_tot; - sc->max_rx_rings = fwcmd->params.rsp.ulp[1].lro_rqid_tot; + sc->max_tx_rings = HOST_32(fwcmd->params.rsp.ulp[1].nic_wq_tot); + sc->max_rx_rings = HOST_32(fwcmd->params.rsp.ulp[1].lro_rqid_tot); } error: @@ -561,15 +564,17 @@ oce_if_create(POCE_SOFTC sc, if (!rc) rc = fwcmd->hdr.u0.rsp.status; if (rc) { - device_printf(sc->dev,"%s failed - cmd status: %d\n", - __FUNCTION__, rc); + device_printf(sc->dev, + "%s failed - cmd status: %d addi status: %d\n", + __FUNCTION__, rc, + fwcmd->hdr.u0.rsp.additional_status); goto error; } - *if_id = LE_32(fwcmd->params.rsp.if_id); + *if_id = HOST_32(fwcmd->params.rsp.if_id); if (mac_addr != NULL) - sc->pmac_id = LE_32(fwcmd->params.rsp.pmac_id); + sc->pmac_id = HOST_32(fwcmd->params.rsp.pmac_id); error: return rc; } @@ -607,8 +612,10 @@ oce_if_del(POCE_SOFTC sc, uint32_t if_id if (!rc) rc = fwcmd->hdr.u0.rsp.status; if (rc) - device_printf(sc->dev,"%s failed - cmd status: %d\n", - __FUNCTION__, rc); + device_printf(sc->dev, + "%s failed - cmd status: %d addi status: %d\n", + __FUNCTION__, rc, + fwcmd->hdr.u0.rsp.additional_status); return rc; } @@ -630,7 +637,10 @@ oce_config_vlan(POCE_SOFTC sc, { struct oce_mbx mbx; struct mbx_common_config_vlan *fwcmd; - int rc; + int rc = 0; + + if (sc->vlans_added > sc->max_vlans) + goto vlan_promisc; bzero(&mbx, sizeof(struct oce_mbx)); fwcmd = (struct mbx_common_config_vlan *)&mbx.payload; @@ -659,9 +669,19 @@ oce_config_vlan(POCE_SOFTC sc, if (!rc) rc = fwcmd->hdr.u0.rsp.status; if (rc) - device_printf(sc->dev,"%s failed - cmd status: %d\n", - __FUNCTION__, rc); - return 0; + device_printf(sc->dev, + "%s failed - cmd status: %d addi status: %d\n", + __FUNCTION__, rc, + fwcmd->hdr.u0.rsp.additional_status); + + goto done; + +vlan_promisc: + /* Enable Vlan Promis */ + oce_rxf_set_promiscuous(sc, (1 << 1)); + device_printf(sc->dev,"Enabling Vlan Promisc Mode\n"); +done: + return rc; } @@ -702,8 +722,10 @@ oce_set_flow_control(POCE_SOFTC sc, uint if (!rc) rc = fwcmd->hdr.u0.rsp.status; if (rc) - device_printf(sc->dev,"%s failed - cmd status: %d\n", - __FUNCTION__, rc); + device_printf(sc->dev, + "%s failed - cmd status: %d addi status: %d\n", + __FUNCTION__, rc, + fwcmd->hdr.u0.rsp.additional_status); return rc; } @@ -802,8 +824,10 @@ oce_config_nic_rss(POCE_SOFTC sc, uint32 if (!rc) rc = fwcmd->hdr.u0.rsp.status; if (rc) - device_printf(sc->dev,"%s failed - cmd status: %d\n", - __FUNCTION__, rc); + device_printf(sc->dev, + "%s failed - cmd status: %d addi status: %d\n", + __FUNCTION__, rc, + fwcmd->hdr.u0.rsp.additional_status); } return rc; } @@ -818,7 +842,7 @@ oce_config_nic_rss(POCE_SOFTC sc, uint32 * This function uses the COMMON_SET_IFACE_RX_FILTER command instead. */ int -oce_rxf_set_promiscuous(POCE_SOFTC sc, uint32_t enable) +oce_rxf_set_promiscuous(POCE_SOFTC sc, uint8_t enable) { struct mbx_set_common_iface_rx_filter *fwcmd; int sz = sizeof(struct mbx_set_common_iface_rx_filter); @@ -836,10 +860,13 @@ oce_rxf_set_promiscuous(POCE_SOFTC sc, u req = &fwcmd->params.req; req->iface_flags_mask = MBX_RX_IFACE_FLAGS_PROMISCUOUS | MBX_RX_IFACE_FLAGS_VLAN_PROMISCUOUS; - if (enable) { - req->iface_flags = MBX_RX_IFACE_FLAGS_PROMISCUOUS | - MBX_RX_IFACE_FLAGS_VLAN_PROMISCUOUS; - } + /* Bit 0 Mac promisc, Bit 1 Vlan promisc */ + if (enable & 0x01) + req->iface_flags = MBX_RX_IFACE_FLAGS_PROMISCUOUS; + + if (enable & 0x02) + req->iface_flags = MBX_RX_IFACE_FLAGS_VLAN_PROMISCUOUS; + req->if_id = sc->if_id; rc = oce_set_common_iface_rx_filter(sc, &sgl); @@ -886,9 +913,11 @@ oce_set_common_iface_rx_filter(POCE_SOFT if (!rc) rc = fwcmd->hdr.u0.rsp.status; if (rc) - device_printf(sc->dev,"%s failed - cmd status: %d\n", - __FUNCTION__, rc); - return 0; + device_printf(sc->dev, + "%s failed - cmd status: %d addi status: %d\n", + __FUNCTION__, rc, + fwcmd->hdr.u0.rsp.additional_status); + return rc; } /** @@ -925,14 +954,16 @@ oce_get_link_status(POCE_SOFTC sc, struc if (!rc) rc = fwcmd->hdr.u0.rsp.status; if (rc) { - device_printf(sc->dev,"%s failed - cmd status: %d\n", - __FUNCTION__, rc); + device_printf(sc->dev, + "%s failed - cmd status: %d addi status: %d\n", + __FUNCTION__, rc, + fwcmd->hdr.u0.rsp.additional_status); goto error; } /* interpret response */ bcopy(&fwcmd->params.rsp, link, sizeof(struct link_status)); - link->logical_link_status = LE_32(link->logical_link_status); - link->qos_link_speed = LE_16(link->qos_link_speed); + link->logical_link_status = HOST_32(link->logical_link_status); + link->qos_link_speed = HOST_16(link->qos_link_speed); error: return rc; } @@ -978,8 +1009,10 @@ oce_mbox_get_nic_stats_v0(POCE_SOFTC sc, if (!rc) rc = fwcmd->hdr.u0.rsp.status; if (rc) - device_printf(sc->dev,"%s failed - cmd status: %d\n", - __FUNCTION__, rc); + device_printf(sc->dev, + "%s failed - cmd status: %d addi status: %d\n", + __FUNCTION__, rc, + fwcmd->hdr.u0.rsp.additional_status); return rc; } @@ -1028,8 +1061,10 @@ oce_mbox_get_nic_stats(POCE_SOFTC sc, PO if (!rc) rc = fwcmd->hdr.u0.rsp.status; if (rc) - device_printf(sc->dev,"%s failed - cmd status: %d\n", - __FUNCTION__, rc); + device_printf(sc->dev, + "%s failed - cmd status: %d addi status: %d\n", + __FUNCTION__, rc, + fwcmd->hdr.u0.rsp.additional_status); return rc; } @@ -1080,8 +1115,10 @@ oce_mbox_get_pport_stats(POCE_SOFTC sc, if (!rc) rc = fwcmd->hdr.u0.rsp.status; if (rc) - device_printf(sc->dev,"%s failed - cmd status: %d\n", - __FUNCTION__, rc); + device_printf(sc->dev, + "%s failed - cmd status: %d addi status: %d\n", + __FUNCTION__, rc, + fwcmd->hdr.u0.rsp.additional_status); return rc; } @@ -1133,8 +1170,10 @@ oce_mbox_get_vport_stats(POCE_SOFTC sc, if (!rc) rc = fwcmd->hdr.u0.rsp.status; if (rc) - device_printf(sc->dev,"%s failed - cmd status: %d\n", - __FUNCTION__, rc); + device_printf(sc->dev, + "%s failed - cmd status: %d addi status: %d\n", + __FUNCTION__, rc, + fwcmd->hdr.u0.rsp.additional_status); return rc; } @@ -1178,8 +1217,10 @@ oce_update_multicast(POCE_SOFTC sc, POCE if (!rc) rc = req->hdr.u0.rsp.status; if (rc) - device_printf(sc->dev,"%s failed - cmd status: %d\n", - __FUNCTION__, rc); + device_printf(sc->dev, + "%s failed - cmd status: %d addi status: %d\n", + __FUNCTION__, rc, + req->hdr.u0.rsp.additional_status); return rc; } @@ -1243,8 +1284,10 @@ oce_mbox_macaddr_add(POCE_SOFTC sc, uint if (!rc) rc = fwcmd->hdr.u0.rsp.status; if (rc) { - device_printf(sc->dev,"%s failed - cmd status: %d\n", - __FUNCTION__, rc); + device_printf(sc->dev, + "%s failed - cmd status: %d addi status: %d\n", + __FUNCTION__, rc, + fwcmd->hdr.u0.rsp.additional_status); goto error; } *pmac_id = fwcmd->params.rsp.pmac_id; @@ -1281,8 +1324,10 @@ oce_mbox_macaddr_del(POCE_SOFTC sc, uint if (!rc) rc = fwcmd->hdr.u0.rsp.status; if (rc) - device_printf(sc->dev,"%s failed - cmd status: %d\n", - __FUNCTION__, rc); + device_printf(sc->dev, + "%s failed - cmd status: %d addi status: %d\n", + __FUNCTION__, rc, + fwcmd->hdr.u0.rsp.additional_status); return rc; } @@ -1318,11 +1363,13 @@ oce_mbox_check_native_mode(POCE_SOFTC sc if (!rc) rc = fwcmd->hdr.u0.rsp.status; if (rc) { - device_printf(sc->dev,"%s failed - cmd status: %d\n", - __FUNCTION__, rc); + device_printf(sc->dev, + "%s failed - cmd status: %d addi status: %d\n", + __FUNCTION__, rc, + fwcmd->hdr.u0.rsp.additional_status); goto error; } - sc->be3_native = fwcmd->params.rsp.capability_flags + sc->be3_native = HOST_32(fwcmd->params.rsp.capability_flags) & CAP_BE3_NATIVE_ERX_API; error: @@ -1363,8 +1410,10 @@ oce_mbox_cmd_set_loopback(POCE_SOFTC sc, if (!rc) rc = fwcmd->hdr.u0.rsp.status; if (rc) - device_printf(sc->dev,"%s failed - cmd status: %d\n", - __FUNCTION__, rc); + device_printf(sc->dev, + "%s failed - cmd status: %d addi status: %d\n", + __FUNCTION__, rc, + fwcmd->hdr.u0.rsp.additional_status); return rc; @@ -1406,8 +1455,10 @@ oce_mbox_cmd_test_loopback(POCE_SOFTC sc if (!rc) rc = fwcmd->hdr.u0.rsp.status; if (rc) - device_printf(sc->dev,"%s failed - cmd status: %d\n", - __FUNCTION__, rc); + device_printf(sc->dev, + "%s failed - cmd status: %d addi status: %d\n", + __FUNCTION__, rc, + fwcmd->hdr.u0.rsp.additional_status); return rc; } @@ -1433,9 +1484,9 @@ oce_mbox_write_flashrom(POCE_SOFTC sc, u payload_len, OCE_MBX_VER_V0); - fwcmd->flash_op_type = optype; - fwcmd->flash_op_code = opcode; - fwcmd->data_buffer_size = num_bytes; + fwcmd->flash_op_type = LE_32(optype); + fwcmd->flash_op_code = LE_32(opcode); + fwcmd->data_buffer_size = LE_32(num_bytes); mbx.u0.s.embedded = 0; /*Non embeded*/ mbx.payload_length = payload_len; @@ -1451,8 +1502,10 @@ oce_mbox_write_flashrom(POCE_SOFTC sc, u if (!rc) rc = fwcmd->hdr.u0.rsp.status; if (rc) - device_printf(sc->dev,"%s failed - cmd status: %d\n", - __FUNCTION__, rc); + device_printf(sc->dev, + "%s failed - cmd status: %d addi status: %d\n", + __FUNCTION__, rc, + fwcmd->hdr.u0.rsp.additional_status); return rc; @@ -1497,8 +1550,10 @@ oce_mbox_get_flashrom_crc(POCE_SOFTC sc, if (!rc) rc = fwcmd->hdr.u0.rsp.status; if (rc) { - device_printf(sc->dev,"%s failed - cmd status: %d\n", - __FUNCTION__, rc); + device_printf(sc->dev, + "%s failed - cmd status: %d addi status: %d\n", + __FUNCTION__, rc, + fwcmd->hdr.u0.rsp.additional_status); goto error; } bcopy(fwcmd->data_buffer, flash_crc, 4); @@ -1532,18 +1587,20 @@ oce_mbox_get_phy_info(POCE_SOFTC sc, str if (!rc) rc = fwcmd->hdr.u0.rsp.status; if (rc) { - device_printf(sc->dev,"%s failed - cmd status: %d\n", - __FUNCTION__, rc); + device_printf(sc->dev, + "%s failed - cmd status: %d addi status: %d\n", + __FUNCTION__, rc, + fwcmd->hdr.u0.rsp.additional_status); goto error; } - phy_info->phy_type = fwcmd->params.rsp.phy_info.phy_type; + phy_info->phy_type = HOST_16(fwcmd->params.rsp.phy_info.phy_type); phy_info->interface_type = - fwcmd->params.rsp.phy_info.interface_type; + HOST_16(fwcmd->params.rsp.phy_info.interface_type); phy_info->auto_speeds_supported = - fwcmd->params.rsp.phy_info.auto_speeds_supported; + HOST_16(fwcmd->params.rsp.phy_info.auto_speeds_supported); phy_info->fixed_speeds_supported = - fwcmd->params.rsp.phy_info.fixed_speeds_supported; - phy_info->misc_params =fwcmd->params.rsp.phy_info.misc_params; + HOST_16(fwcmd->params.rsp.phy_info.fixed_speeds_supported); + phy_info->misc_params = HOST_32(fwcmd->params.rsp.phy_info.misc_params); error: return rc; @@ -1593,11 +1650,13 @@ oce_mbox_lancer_write_flashrom(POCE_SOFT if (!rc) rc = fwcmd->params.rsp.status; if (rc) { - device_printf(sc->dev,"%s failed - cmd status: %d\n", - __FUNCTION__, rc); + device_printf(sc->dev, + "%s failed - cmd status: %d addi status: %d\n", + __FUNCTION__, rc, + fwcmd->params.rsp.additional_status); goto error; } - *written_data = fwcmd->params.rsp.actual_write_length; + *written_data = HOST_32(fwcmd->params.rsp.actual_write_length); *additional_status = fwcmd->params.rsp.additional_status; error: return rc; @@ -1649,11 +1708,13 @@ oce_mbox_create_rq(struct oce_rq *rq) if (!rc) rc = fwcmd->hdr.u0.rsp.status; if (rc) { - device_printf(sc->dev,"%s failed - cmd status: %d\n", - __FUNCTION__, rc); + device_printf(sc->dev, + "%s failed - cmd status: %d addi status: %d\n", + __FUNCTION__, rc, + fwcmd->hdr.u0.rsp.additional_status); goto error; } - rq->rq_id = fwcmd->params.rsp.rq_id; + rq->rq_id = HOST_16(fwcmd->params.rsp.rq_id); rq->rss_cpuid = fwcmd->params.rsp.rss_cpuid; error: return rc; @@ -1673,15 +1734,17 @@ oce_mbox_create_wq(struct oce_wq *wq) bzero(&mbx, sizeof(struct oce_mbx)); fwcmd = (struct mbx_create_nic_wq *)&mbx.payload; - if (IS_XE201(sc)) { + if (IS_XE201(sc)) version = OCE_MBX_VER_V1; - fwcmd->params.req.if_id = sc->if_id; - } else if(IS_BE(sc)) + else if(IS_BE(sc)) IS_PROFILE_SUPER_NIC(sc) ? (version = OCE_MBX_VER_V2) : (version = OCE_MBX_VER_V0); else version = OCE_MBX_VER_V2; + if (version > OCE_MBX_VER_V0) + fwcmd->params.req.if_id = sc->if_id; + mbx_common_req_hdr_init(&fwcmd->hdr, 0, 0, MBX_SUBSYSTEM_NIC, NIC_CREATE_WQ, MBX_TIMEOUT_SEC, @@ -1703,13 +1766,15 @@ oce_mbox_create_wq(struct oce_wq *wq) if (!rc) rc = fwcmd->hdr.u0.rsp.status; if (rc) { - device_printf(sc->dev,"%s failed - cmd status: %d\n", - __FUNCTION__, rc); + device_printf(sc->dev, + "%s failed - cmd status: %d addi status: %d\n", + __FUNCTION__, rc, + fwcmd->hdr.u0.rsp.additional_status); goto error; } - wq->wq_id = LE_16(fwcmd->params.rsp.wq_id); + wq->wq_id = HOST_16(fwcmd->params.rsp.wq_id); if (version == OCE_MBX_VER_V2) - wq->db_offset = LE_32(fwcmd->params.rsp.db_offset); + wq->db_offset = HOST_32(fwcmd->params.rsp.db_offset); else wq->db_offset = PD_TXULP_DB; error: @@ -1754,11 +1819,13 @@ oce_mbox_create_eq(struct oce_eq *eq) if (!rc) rc = fwcmd->hdr.u0.rsp.status; if (rc) { - device_printf(sc->dev,"%s failed - cmd status: %d\n", - __FUNCTION__, rc); + device_printf(sc->dev, + "%s failed - cmd status: %d addi status: %d\n", + __FUNCTION__, rc, + fwcmd->hdr.u0.rsp.additional_status); goto error; } - eq->eq_id = LE_16(fwcmd->params.rsp.eq_id); + eq->eq_id = HOST_16(fwcmd->params.rsp.eq_id); error: return rc; } @@ -1832,11 +1899,13 @@ oce_mbox_cq_create(struct oce_cq *cq, ui if (!rc) rc = fwcmd->hdr.u0.rsp.status; if (rc) { - device_printf(sc->dev,"%s failed - cmd status: %d\n", - __FUNCTION__, rc); + device_printf(sc->dev, + "%s failed - cmd status: %d addi status: %d\n", + __FUNCTION__, rc, + fwcmd->hdr.u0.rsp.additional_status); goto error; } - cq->cq_id = LE_16(fwcmd->params.rsp.cq_id); + cq->cq_id = HOST_16(fwcmd->params.rsp.cq_id); error: return rc; @@ -1885,8 +1954,10 @@ oce_mbox_read_transrecv_data(POCE_SOFTC if (!rc) rc = fwcmd->hdr.u0.rsp.status; if (rc) { - device_printf(sc->dev,"%s failed - cmd status: %d\n", - __FUNCTION__, rc); + device_printf(sc->dev, + "%s failed - cmd status: %d addi status: %d\n", + __FUNCTION__, rc, + fwcmd->hdr.u0.rsp.additional_status); goto error; } if(fwcmd->params.rsp.page_num == PAGE_NUM_A0) @@ -1947,8 +2018,10 @@ oce_mbox_eqd_modify_periodic(POCE_SOFTC if (!rc) rc = fwcmd->hdr.u0.rsp.status; if (rc) - device_printf(sc->dev,"%s failed - cmd status: %d\n", - __FUNCTION__, rc); + device_printf(sc->dev, + "%s failed - cmd status: %d addi status: %d\n", *** DIFF OUTPUT TRUNCATED AT 1000 LINES *** From owner-svn-src-stable@FreeBSD.ORG Sat Oct 26 19:54:29 2013 Return-Path: Delivered-To: svn-src-stable@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [8.8.178.115]) (using TLSv1 with cipher ADH-AES256-SHA (256/256 bits)) (No client certificate requested) by hub.freebsd.org (Postfix) with ESMTP id 6ABF15A6; Sat, 26 Oct 2013 19:54:29 +0000 (UTC) (envelope-from delphij@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:1900:2254:2068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mx1.freebsd.org (Postfix) with ESMTPS id 574402FE8; Sat, 26 Oct 2013 19:54:29 +0000 (UTC) Received: from svn.freebsd.org ([127.0.1.70]) by svn.freebsd.org (8.14.7/8.14.7) with ESMTP id r9QJsTjN010730; Sat, 26 Oct 2013 19:54:29 GMT (envelope-from delphij@svn.freebsd.org) Received: (from delphij@localhost) by svn.freebsd.org (8.14.7/8.14.5/Submit) id r9QJsTjk010729; Sat, 26 Oct 2013 19:54:29 GMT (envelope-from delphij@svn.freebsd.org) Message-Id: <201310261954.r9QJsTjk010729@svn.freebsd.org> From: Xin LI Date: Sat, 26 Oct 2013 19:54:29 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-stable@freebsd.org, svn-src-stable-8@freebsd.org Subject: svn commit: r257192 - in stable: 8/usr.sbin/freebsd-update 9/usr.sbin/freebsd-update X-SVN-Group: stable-8 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-stable@freebsd.org X-Mailman-Version: 2.1.14 Precedence: list List-Id: SVN commit messages for all the -stable branches of the src tree List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sat, 26 Oct 2013 19:54:29 -0000 Author: delphij Date: Sat Oct 26 19:54:28 2013 New Revision: 257192 URL: http://svnweb.freebsd.org/changeset/base/257192 Log: MFC r256646, r256767, r257038: When installing updates, install new directories first and remove old directories last. Allow ~ in file names so libtool droppings in contrib don't break updates. It has happened twice now, and is likely to happen again. Be more selective when filtering for lib*.so.N files. These are deleted at the end of the upgrade process, after warning users to upgrade any 3rd party software (e.g., from the ports tree) which might link to the libraries being removed. Errata Notice: FreeBSD-EN-13:04.freebsd-update Modified: stable/8/usr.sbin/freebsd-update/freebsd-update.sh Directory Properties: stable/8/usr.sbin/freebsd-update/ (props changed) Changes in other areas also in this revision: Modified: stable/9/usr.sbin/freebsd-update/freebsd-update.sh Directory Properties: stable/9/usr.sbin/freebsd-update/ (props changed) Modified: stable/8/usr.sbin/freebsd-update/freebsd-update.sh ============================================================================== --- stable/8/usr.sbin/freebsd-update/freebsd-update.sh Sat Oct 26 19:50:40 2013 (r257191) +++ stable/8/usr.sbin/freebsd-update/freebsd-update.sh Sat Oct 26 19:54:28 2013 (r257192) @@ -1185,7 +1185,7 @@ fetch_metadata_sanity () { # Some aliases to save space later: ${P} is a character which can # appear in a path; ${M} is the four numeric metadata fields; and # ${H} is a sha256 hash. - P="[-+./:=%@_[[:alnum:]]" + P="[-+./:=%@_[~[:alnum:]]" M="[0-9]+\|[0-9]+\|[0-9]+\|[0-9]+" H="[0-9a-f]{64}" @@ -2765,16 +2765,24 @@ Kernel updates have been installed. Ple # If we haven't already dealt with the world, deal with it. if ! [ -f $1/worlddone ]; then + # Create any necessary directories first + grep -vE '^/boot/' $1/INDEX-NEW | + grep -E '^[^|]+\|d\|' > INDEX-NEW + install_from_index INDEX-NEW || return 1 + # Install new shared libraries next grep -vE '^/boot/' $1/INDEX-NEW | - grep -E '/lib/.*\.so\.[0-9]+\|' > INDEX-NEW + grep -vE '^[^|]+\|d\|' | + grep -E '^[^|]*/lib/[^|]*\.so\.[0-9]+\|' > INDEX-NEW install_from_index INDEX-NEW || return 1 # Deal with everything else grep -vE '^/boot/' $1/INDEX-OLD | - grep -vE '/lib/.*\.so\.[0-9]+\|' > INDEX-OLD + grep -vE '^[^|]+\|d\|' | + grep -vE '^[^|]*/lib/[^|]*\.so\.[0-9]+\|' > INDEX-OLD grep -vE '^/boot/' $1/INDEX-NEW | - grep -vE '/lib/.*\.so\.[0-9]+\|' > INDEX-NEW + grep -vE '^[^|]+\|d\|' | + grep -vE '^[^|]*/lib/[^|]*\.so\.[0-9]+\|' > INDEX-NEW install_from_index INDEX-NEW || return 1 install_delete INDEX-OLD INDEX-NEW || return 1 @@ -2795,11 +2803,11 @@ Kernel updates have been installed. Ple # Do we need to ask the user to portupgrade now? grep -vE '^/boot/' $1/INDEX-NEW | - grep -E '/lib/.*\.so\.[0-9]+\|' | + grep -E '^[^|]*/lib/[^|]*\.so\.[0-9]+\|' | cut -f 1 -d '|' | sort > newfiles if grep -vE '^/boot/' $1/INDEX-OLD | - grep -E '/lib/.*\.so\.[0-9]+\|' | + grep -E '^[^|]*/lib/[^|]*\.so\.[0-9]+\|' | cut -f 1 -d '|' | sort | join -v 1 - newfiles | @@ -2819,9 +2827,18 @@ again to finish installing updates. # Remove old shared libraries grep -vE '^/boot/' $1/INDEX-NEW | - grep -E '/lib/.*\.so\.[0-9]+\|' > INDEX-NEW + grep -vE '^[^|]+\|d\|' | + grep -E '^[^|]*/lib/[^|]*\.so\.[0-9]+\|' > INDEX-NEW grep -vE '^/boot/' $1/INDEX-OLD | - grep -E '/lib/.*\.so\.[0-9]+\|' > INDEX-OLD + grep -vE '^[^|]+\|d\|' | + grep -E '^[^|]*/lib/[^|]*\.so\.[0-9]+\|' > INDEX-OLD + install_delete INDEX-OLD INDEX-NEW || return 1 + + # Remove old directories + grep -vE '^/boot/' $1/INDEX-OLD | + grep -E '^[^|]+\|d\|' > INDEX-OLD + grep -vE '^/boot/' $1/INDEX-OLD | + grep -E '^[^|]+\|d\|' > INDEX-OLD install_delete INDEX-OLD INDEX-NEW || return 1 # Remove temporary files From owner-svn-src-stable@FreeBSD.ORG Sat Oct 26 19:54:29 2013 Return-Path: Delivered-To: svn-src-stable@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) (using TLSv1 with cipher ADH-AES256-SHA (256/256 bits)) (No client certificate requested) by hub.freebsd.org (Postfix) with ESMTP id 15C2D5A5; Sat, 26 Oct 2013 19:54:29 +0000 (UTC) (envelope-from delphij@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:1900:2254:2068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mx1.freebsd.org (Postfix) with ESMTPS id 01F542FE7; Sat, 26 Oct 2013 19:54:29 +0000 (UTC) Received: from svn.freebsd.org ([127.0.1.70]) by svn.freebsd.org (8.14.7/8.14.7) with ESMTP id r9QJsSJh010721; Sat, 26 Oct 2013 19:54:28 GMT (envelope-from delphij@svn.freebsd.org) Received: (from delphij@localhost) by svn.freebsd.org (8.14.7/8.14.5/Submit) id r9QJsSWh010720; Sat, 26 Oct 2013 19:54:28 GMT (envelope-from delphij@svn.freebsd.org) Message-Id: <201310261954.r9QJsSWh010720@svn.freebsd.org> From: Xin LI Date: Sat, 26 Oct 2013 19:54:28 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-stable@freebsd.org, svn-src-stable-9@freebsd.org Subject: svn commit: r257192 - in stable: 8/usr.sbin/freebsd-update 9/usr.sbin/freebsd-update X-SVN-Group: stable-9 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-stable@freebsd.org X-Mailman-Version: 2.1.14 Precedence: list List-Id: SVN commit messages for all the -stable branches of the src tree List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sat, 26 Oct 2013 19:54:29 -0000 Author: delphij Date: Sat Oct 26 19:54:28 2013 New Revision: 257192 URL: http://svnweb.freebsd.org/changeset/base/257192 Log: MFC r256646, r256767, r257038: When installing updates, install new directories first and remove old directories last. Allow ~ in file names so libtool droppings in contrib don't break updates. It has happened twice now, and is likely to happen again. Be more selective when filtering for lib*.so.N files. These are deleted at the end of the upgrade process, after warning users to upgrade any 3rd party software (e.g., from the ports tree) which might link to the libraries being removed. Errata Notice: FreeBSD-EN-13:04.freebsd-update Modified: stable/9/usr.sbin/freebsd-update/freebsd-update.sh Directory Properties: stable/9/usr.sbin/freebsd-update/ (props changed) Changes in other areas also in this revision: Modified: stable/8/usr.sbin/freebsd-update/freebsd-update.sh Directory Properties: stable/8/usr.sbin/freebsd-update/ (props changed) Modified: stable/9/usr.sbin/freebsd-update/freebsd-update.sh ============================================================================== --- stable/9/usr.sbin/freebsd-update/freebsd-update.sh Sat Oct 26 19:50:40 2013 (r257191) +++ stable/9/usr.sbin/freebsd-update/freebsd-update.sh Sat Oct 26 19:54:28 2013 (r257192) @@ -1200,7 +1200,7 @@ fetch_metadata_sanity () { # Some aliases to save space later: ${P} is a character which can # appear in a path; ${M} is the four numeric metadata fields; and # ${H} is a sha256 hash. - P="[-+./:=%@_[[:alnum:]]" + P="[-+./:=%@_[~[:alnum:]]" M="[0-9]+\|[0-9]+\|[0-9]+\|[0-9]+" H="[0-9a-f]{64}" @@ -2814,16 +2814,24 @@ Kernel updates have been installed. Ple # If we haven't already dealt with the world, deal with it. if ! [ -f $1/worlddone ]; then + # Create any necessary directories first + grep -vE '^/boot/' $1/INDEX-NEW | + grep -E '^[^|]+\|d\|' > INDEX-NEW + install_from_index INDEX-NEW || return 1 + # Install new shared libraries next grep -vE '^/boot/' $1/INDEX-NEW | - grep -E '/lib/.*\.so\.[0-9]+\|' > INDEX-NEW + grep -vE '^[^|]+\|d\|' | + grep -E '^[^|]*/lib/[^|]*\.so\.[0-9]+\|' > INDEX-NEW install_from_index INDEX-NEW || return 1 # Deal with everything else grep -vE '^/boot/' $1/INDEX-OLD | - grep -vE '/lib/.*\.so\.[0-9]+\|' > INDEX-OLD + grep -vE '^[^|]+\|d\|' | + grep -vE '^[^|]*/lib/[^|]*\.so\.[0-9]+\|' > INDEX-OLD grep -vE '^/boot/' $1/INDEX-NEW | - grep -vE '/lib/.*\.so\.[0-9]+\|' > INDEX-NEW + grep -vE '^[^|]+\|d\|' | + grep -vE '^[^|]*/lib/[^|]*\.so\.[0-9]+\|' > INDEX-NEW install_from_index INDEX-NEW || return 1 install_delete INDEX-OLD INDEX-NEW || return 1 @@ -2844,11 +2852,11 @@ Kernel updates have been installed. Ple # Do we need to ask the user to portupgrade now? grep -vE '^/boot/' $1/INDEX-NEW | - grep -E '/lib/.*\.so\.[0-9]+\|' | + grep -E '^[^|]*/lib/[^|]*\.so\.[0-9]+\|' | cut -f 1 -d '|' | sort > newfiles if grep -vE '^/boot/' $1/INDEX-OLD | - grep -E '/lib/.*\.so\.[0-9]+\|' | + grep -E '^[^|]*/lib/[^|]*\.so\.[0-9]+\|' | cut -f 1 -d '|' | sort | join -v 1 - newfiles | @@ -2868,9 +2876,18 @@ again to finish installing updates. # Remove old shared libraries grep -vE '^/boot/' $1/INDEX-NEW | - grep -E '/lib/.*\.so\.[0-9]+\|' > INDEX-NEW + grep -vE '^[^|]+\|d\|' | + grep -E '^[^|]*/lib/[^|]*\.so\.[0-9]+\|' > INDEX-NEW grep -vE '^/boot/' $1/INDEX-OLD | - grep -E '/lib/.*\.so\.[0-9]+\|' > INDEX-OLD + grep -vE '^[^|]+\|d\|' | + grep -E '^[^|]*/lib/[^|]*\.so\.[0-9]+\|' > INDEX-OLD + install_delete INDEX-OLD INDEX-NEW || return 1 + + # Remove old directories + grep -vE '^/boot/' $1/INDEX-OLD | + grep -E '^[^|]+\|d\|' > INDEX-OLD + grep -vE '^/boot/' $1/INDEX-OLD | + grep -E '^[^|]+\|d\|' > INDEX-OLD install_delete INDEX-OLD INDEX-NEW || return 1 # Remove temporary files