From owner-svn-src-user@FreeBSD.ORG Sun Jun 10 05:24:24 2012 Return-Path: Delivered-To: svn-src-user@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id E06FF106564A; Sun, 10 Jun 2012 05:24:24 +0000 (UTC) (envelope-from dougb@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id CC2488FC0C; Sun, 10 Jun 2012 05:24:24 +0000 (UTC) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.4/8.14.4) with ESMTP id q5A5OOJT074812; Sun, 10 Jun 2012 05:24:24 GMT (envelope-from dougb@svn.freebsd.org) Received: (from dougb@localhost) by svn.freebsd.org (8.14.4/8.14.4/Submit) id q5A5OOYG074810; Sun, 10 Jun 2012 05:24:24 GMT (envelope-from dougb@svn.freebsd.org) Message-Id: <201206100524.q5A5OOYG074810@svn.freebsd.org> From: Doug Barton Date: Sun, 10 Jun 2012 05:24:24 +0000 (UTC) To: src-committers@freebsd.org, svn-src-user@freebsd.org X-SVN-Group: user MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r236831 - user/dougb/portmaster X-BeenThere: svn-src-user@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "SVN commit messages for the experimental " user" src tree" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sun, 10 Jun 2012 05:24:25 -0000 Author: dougb Date: Sun Jun 10 05:24:24 2012 New Revision: 236831 URL: http://svn.freebsd.org/changeset/base/236831 Log: Add a test for background clean processes to finish before emptying directories in WRKDIRPREFIX Modified: user/dougb/portmaster/portmaster Modified: user/dougb/portmaster/portmaster ============================================================================== --- user/dougb/portmaster/portmaster Sun Jun 10 02:38:51 2012 (r236830) +++ user/dougb/portmaster/portmaster Sun Jun 10 05:24:24 2012 (r236831) @@ -155,8 +155,20 @@ parent_exit () { done if [ -n "$PM_WRKDIRPREFIX" ]; then + count=0 + while : ; do + pgrep -qf 'make clean NOCLEANDEPENDS=ncd' || break + count=$(( $count + 1 )) + if [ $count -eq 1 ]; then + echo "===>>> Waiting for background clean processes to finish" + elif [ $count -eq 10 ]; then + count=0 + fi + sleep 2 + done + pm_v "===>>> Removing empty directories from WRKDIRPREFIX" - find -d $PM_WRKDIRPREFIX -mindepth 1 -type d -empty -delete 2>/dev/null + find $PM_WRKDIRPREFIX -depth -mindepth 1 -type d -empty -delete 2>/dev/null fi case "$DISPLAY_LIST" in @@ -3876,9 +3888,9 @@ if [ -n "$MAKE_PACKAGE" ]; then fi if [ -z "$use_package" -a -z "$DONT_POST_CLEAN" ]; then - pm_sv Running \'make clean\' in the background + pm_v "===>>> Running 'make clean' in the background" (pm_make_s clean NOCLEANDEPENDS=ncd2 >/dev/null)& - echo '' + pm_v fi check_dependency_files $portdir $new_port From owner-svn-src-user@FreeBSD.ORG Sun Jun 10 07:15:13 2012 Return-Path: Delivered-To: svn-src-user@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [69.147.83.52]) by hub.freebsd.org (Postfix) with ESMTP id A88C01065675; Sun, 10 Jun 2012 07:15:13 +0000 (UTC) (envelope-from dougb@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id 940868FC0A; Sun, 10 Jun 2012 07:15:13 +0000 (UTC) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.4/8.14.4) with ESMTP id q5A7FDAj079697; Sun, 10 Jun 2012 07:15:13 GMT (envelope-from dougb@svn.freebsd.org) Received: (from dougb@localhost) by svn.freebsd.org (8.14.4/8.14.4/Submit) id q5A7FDXu079695; Sun, 10 Jun 2012 07:15:13 GMT (envelope-from dougb@svn.freebsd.org) Message-Id: <201206100715.q5A7FDXu079695@svn.freebsd.org> From: Doug Barton Date: Sun, 10 Jun 2012 07:15:13 +0000 (UTC) To: src-committers@freebsd.org, svn-src-user@freebsd.org X-SVN-Group: user MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r236836 - user/dougb/portmaster X-BeenThere: svn-src-user@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "SVN commit messages for the experimental " user" src tree" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sun, 10 Jun 2012 07:15:13 -0000 Author: dougb Date: Sun Jun 10 07:15:13 2012 New Revision: 236836 URL: http://svn.freebsd.org/changeset/base/236836 Log: Improve error handling for pm_mktemp. For some reason, exit called from within a function is not actually exiting, so handle this with a little more brute force. Modified: user/dougb/portmaster/portmaster Modified: user/dougb/portmaster/portmaster ============================================================================== --- user/dougb/portmaster/portmaster Sun Jun 10 06:44:19 2012 (r236835) +++ user/dougb/portmaster/portmaster Sun Jun 10 07:15:13 2012 (r236836) @@ -212,7 +212,11 @@ parent_exit () { else local new_pm_log - new_pm_log=`pm_mktemp pm_log` && mv $new_pm_log $PM_LOG + if new_pm_log=`pm_mktemp pm_log` ; then + mv $new_pm_log $PM_LOG + else + fail 'mktemp failed for pm_log' + fi fi [ -n "$PM_LOG" ] && date >> $PM_LOG fi @@ -297,8 +301,14 @@ pm_make () { ( unset -v CUR_DEPS INSTA unset -v PM_URB_LIST; /usr/bin/nice /usr/bin/make $PM_MAKE_ARGS $*; ); } pm_make_b () { /usr/bin/make $PM_MAKE_ARGS BEFOREPORTMK=bpm $*; } -pm_mktemp () { /usr/bin/mktemp -t f-${PM_PARENT_PID}-$1 || - fail "mktemp for $1 failed"; } +pm_mktemp () { + local f + if f=`/usr/bin/mktemp -t f-${PM_PARENT_PID}-$1 2>/dev/null` ; then + echo $f + else + return 1 + fi +} pm_unlink () { [ -e "$1" ] && /bin/unlink $1; } # Superuser versions for commands that need root privileges @@ -804,7 +814,8 @@ if [ "$$" -eq "$PM_PARENT_PID" ]; then if [ -n "$do_index_fetch" ] || [ ${index_time:-0} -ne `stat -f '%Um' ${PM_INDEX}.bz2 2>/dev/null` ]; then - dli=`mktemp -d ${TMPDIR}/d-${PM_PARENT_PID}-index` + dli=`/usr/bin/mktemp -d ${TMPDIR}/d-${PM_PARENT_PID}-index 2>/dev/null` || + fail "Could not create a temporary directory for index in $TMPDIR" if [ -n "$do_index_fetch" ]; then ift="$FETCHINDEX ${dli}/${INDEXFILE}.bz2 ${MASTER_SITE_INDEX}${INDEXFILE}.bz2" $ift || fail Could not perform $ift @@ -933,7 +944,7 @@ check_dependency_files () { *+*) ro_opd=`echo $ro_opd | sed 's#\+#\\\\+#g'` ;; esac # Always rely on the grep'ed dependencies instead of +REQUIRED_BY - grep_deps=`pm_mktemp grep-deps-${iport}` + grep_deps=`pm_mktemp grep-deps-${iport}` || fail "mktemp failed for grep-deps-${iport}" egrep -l "DEPORIGIN:($origin|$ro_opd)$" $pdb/*/+CONTENTS | strip_to_iport | sort -u > $grep_deps @@ -1013,7 +1024,7 @@ IFS=' contents=$1 ; origin=$2 ; n_port=$3 ; old_origin=$4 iport=${contents#$pdb/} ; iport=${iport%/+CONTENTS} - new_cont=`pm_mktemp contents-${iport}` + new_cont=`pm_mktemp contents-${iport}` || fail "mktemp failed for contents-${iport}" if [ -z "$delete" ]; then o_seen=':'; else o_seen=":${origin}:"; fi @@ -1311,7 +1322,7 @@ if [ -n "$CLEAN_DISTFILES" ]; then [ -n "$DISTDIR" ] || fail 'There is no DISTDIR to clean' # Set the file name here since we are usually called in a subshell - DI_FILES=`pm_mktemp DI-FILES` + DI_FILES=`pm_mktemp DI-FILES` || fail 'mktemp failed for DI-FILES' if [ -z "$PM_THOROUGH" ]; then read_distinfos @@ -2869,7 +2880,7 @@ make_config () { if [ "$$" -eq "$PM_PARENT_PID" -a -z "$SHOW_WORK" ]; then CUR_DEPS=':' ; DISPLAY_LIST='' ; INSTALLED_LIST='' - PM_DEPTH='' ; IPC_SAVE=`pm_mktemp IPC_SAVE` + PM_DEPTH='' ; IPC_SAVE=`pm_mktemp IPC_SAVE` || fail 'mktemp failed for IPC_SAVE' export CUR_DEPS DISPLAY_LIST INSTALLED_LIST PM_DEPTH IPC_SAVE if [ -n "$LOCALBASE" ]; then @@ -2945,7 +2956,7 @@ if [ "$$" -eq "$PM_PARENT_PID" -a -z "$S # Set the file name here so it's visible to the children [ -z "$DONT_SCRUB_DISTFILES" -a -z "$FETCH_ONLY" -a -z "$PM_PACKAGES" ] && - export DI_FILES=`pm_mktemp DI-FILES` + export DI_FILES=`pm_mktemp DI-FILES` || fail 'mktemp failed for DI-FILES' [ -n "$PM_URB" ] && multiport $PM_URB_IPORTS [ $# -gt 1 -a -z "$REPLACE_ORIGIN" ] && multiport "$@" @@ -3235,7 +3246,8 @@ if [ -z "$PM_INDEX_ONLY" -a -z "$PM_BUIL for file in $distfiles; do case "$file" in */*) file=`echo $file | sed s#/#_#g` ;; esac if ! ls ${TMPDIR}/f-${PM_PARENT_PID}-${file}-* >/dev/null 2>&1; then - pm_mktemp ${file}-${portdir#*/} >/dev/null + pm_mktemp ${file}-${portdir#*/} >/dev/null || + fail "mktemp failed for ${file}-${portdir#*/}" else DONT_FETCH=dont_fetch break @@ -3244,7 +3256,8 @@ if [ -z "$PM_INDEX_ONLY" -a -z "$PM_BUIL if [ -z "$DONT_FETCH" -a -n "$distfiles" ]; then echo "===>>> Launching 'make checksum' for $portdir in background" - fetchlog=`pm_mktemp fetchlog-${portdir#*/}` + fetchlog=`pm_mktemp fetchlog-${portdir#*/}` || + fail "mktemp failed for fetchlog-${portdir#*/}" (pm_make -DBATCH checksum >> $fetchlog 2>&1 && { rm -f ${TMPDIR}/f-${PM_PARENT_PID}-*-${portdir#*/}.*; exit 0; } allfiles=`pm_make -V ALLFILES` @@ -3473,7 +3486,7 @@ fetch_package () { dirlist=`echo ${TMPDIR}/f-${PM_PARENT_PID}-dl-${portdir%/*}\.*` if [ ! -r "$dirlist" ]; then pm_unlink $dirlist # JIC - dirlist=`pm_mktemp dl-${portdir%/*}` + dirlist=`pm_mktemp dl-${portdir%/*}` || fail "mktemp failed for dl-${portdir%/*}" fetch -q -o - ${sitepath} 2>/dev/null | sed -e "s#%2[cC]#,#g" -e "s#%2[bB]#+#g" > $dirlist fi @@ -3626,8 +3639,8 @@ if [ -z "$use_package" ]; then unset count fl_read if [ -n "$HIDE_BUILD" ]; then - port_log=`mktemp -t port_log-${PM_PARENT_PID}-${portdir#*/}` || - fail "mktemp for $1 failed" + port_log=`/usr/bin/mktemp -t port_log-${PM_PARENT_PID}-${portdir#*/}` || + fail "mktemp for port_log-${PM_PARENT_PID}-${portdir#*/} failed" port_log_args=">> $port_log 2>&1" echo "===>>> Logging build to $port_log" fi @@ -3649,7 +3662,7 @@ if [ -n "$upg_port" -o -n "$ro_upg_port" [ -z "$NO_BACKUP" ] && pm_pkg_create $pbu $UPGRADE_PORT if [ -n "$SAVE_SHARED" ]; then - ldconfig_out=`pm_mktemp ldconfig` + ldconfig_out=`pm_mktemp ldconfig` || fail 'mktemp for ldconfig failed' ldconfig -r | sed 's#.* ##' | grep -v ^$LOCALBASE_COMPAT > $ldconfig_out @@ -3687,7 +3700,8 @@ if [ -n "$upg_port" -o -n "$ro_upg_port" *" $portdir "*) preserve_port=`echo $portdir | sed 's#[-+/\.]#_#g'` eval preserve_port_files="\$${preserve_port}_files" - preserve_dir=`mktemp -d ${TMPDIR}/d-${PM_PARENT_PID}-${preserve_port}` + preserve_dir=`/usr/bin/mktemp -d ${TMPDIR}/d-${PM_PARENT_PID}-${preserve_port} 2>/dev/null` || + fail "Could not create a temporary directory for $preserve_port in $TMPDIR" for file in $preserve_port_files; do cp -p $file ${preserve_dir}/ || fail "Cannot copy $file, which is in \$${preserve_port}_files" @@ -3762,7 +3776,7 @@ for file in $preserve_port_files; do mv ${preserve_dir}/${file##*/} $file oldmd5="MD5:`md5 -q $file`" - new_cont=`pm_mktemp contents` + new_cont=`pm_mktemp contents` || fail 'mktemp failed for contents' while read left right; do case "$left" in @cwd) short_file="${file#${right}/}" ;; @@ -3841,7 +3855,7 @@ if [ -n "$distfiles" ]; then [ -n "$distinfo" ] || fail "No DISTINFO_FILE in $portdir" fi - dist_list_temp=`pm_mktemp dist_list` + dist_list_temp=`pm_mktemp dist_list` || fail 'mktemp failed for dist_list' echo '# Added by portmaster' > $dist_list_temp for file in $distfiles; do size=`grep "^SIZE (${ds}${file})" $distinfo` From owner-svn-src-user@FreeBSD.ORG Sun Jun 10 07:57:50 2012 Return-Path: Delivered-To: svn-src-user@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 0AC79106566B; Sun, 10 Jun 2012 07:57:50 +0000 (UTC) (envelope-from dougb@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id E01438FC14; Sun, 10 Jun 2012 07:57:49 +0000 (UTC) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.4/8.14.4) with ESMTP id q5A7vnIg081782; Sun, 10 Jun 2012 07:57:49 GMT (envelope-from dougb@svn.freebsd.org) Received: (from dougb@localhost) by svn.freebsd.org (8.14.4/8.14.4/Submit) id q5A7vn2L081780; Sun, 10 Jun 2012 07:57:49 GMT (envelope-from dougb@svn.freebsd.org) Message-Id: <201206100757.q5A7vn2L081780@svn.freebsd.org> From: Doug Barton Date: Sun, 10 Jun 2012 07:57:49 +0000 (UTC) To: src-committers@freebsd.org, svn-src-user@freebsd.org X-SVN-Group: user MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r236841 - user/dougb/portmaster X-BeenThere: svn-src-user@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "SVN commit messages for the experimental " user" src tree" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sun, 10 Jun 2012 07:57:50 -0000 Author: dougb Date: Sun Jun 10 07:57:49 2012 New Revision: 236841 URL: http://svn.freebsd.org/changeset/base/236841 Log: Add robust error handling for pm_cd_pd, to avoid the problem of exit not being called from a function. Fix an error handling fix for pm_mktemp from the previous commit Speed up the determination of WRKDIRPREFIX Modified: user/dougb/portmaster/portmaster Modified: user/dougb/portmaster/portmaster ============================================================================== --- user/dougb/portmaster/portmaster Sun Jun 10 07:40:43 2012 (r236840) +++ user/dougb/portmaster/portmaster Sun Jun 10 07:57:49 2012 (r236841) @@ -294,8 +294,7 @@ safe_exit () { pm_cd () { builtin cd $1 2>/dev/null || return 1; } pm_cd_pd () { [ -n "$PM_INDEX_ONLY" ] && return 2; - builtin cd $pd/$1 2>/dev/null || - fail "Cannot cd to port directory: $pd/$1"; } + builtin cd $pd/$1 2>/dev/null || return 1; } pm_kill () { /bin/kill $* >/dev/null 2>/dev/null; } pm_make () { ( unset -v CUR_DEPS INSTALLED_LIST PM_DEPTH build_l; unset -v PM_URB_LIST; @@ -1663,7 +1662,11 @@ check_for_updates () { echo " ===>>> New version available: $port_ver" [ -e "$pdb/$iport/+IGNOREME" ] && echo " ===>>> +IGNOREME file is present for $1" - pm_cd_pd $origin && check_state + if pm_cd_pd $origin ; then + check_state + else + fail "Cannot cd to port directory: $pd/$origin" + fi num_updates=$(( $num_updates + 1 )) else unset moved_npd @@ -1731,7 +1734,7 @@ pm_pkg_create () { if [ -z "$PM_INDEX_ONLY" ]; then local latest_link - pm_cd_pd $portdir + pm_cd_pd $portdir || fail "Cannot cd to port directory: $pd/$portdir" latest_link=`pm_make -V LATEST_LINK` cd ${1}/Latest $PM_SU_CMD ln -sf ../All/$pkg ${latest_link}.tbz @@ -1865,7 +1868,7 @@ set_distfiles_and_subdir () { [ -z "$dist_list_files" ] && find_dl_distfiles $1 if [ -d "$pd/$1" ]; then - pm_cd_pd $1 + pm_cd_pd $1 || fail "Cannot cd to port directory: $pd/$1" else return 1 fi @@ -2367,7 +2370,7 @@ gen_dep_list () { local list if [ -z "$PM_INDEX_ONLY" ]; then - pm_cd_pd $portdir + pm_cd_pd $portdir || fail "Cannot cd to port directory: $pd/$portdir" list=`pm_make $* | sort -u` else local temp_list l @@ -2870,7 +2873,7 @@ make_config () { config_type=config-conditional [ -n "$PM_FORCE_CONFIG" ] && config_type=config pm_sv Running \'make $config_type\' - pm_cd_pd $portdir + pm_cd_pd $portdir || fail "Cannot cd to port directory: $pd/$portdir" pm_make_s $config_type } @@ -2931,8 +2934,13 @@ if [ "$$" -eq "$PM_PARENT_PID" -a -z "$S NO_DEP_UPDATES=no_dep_updates ; build_l='' export NO_DEP_UPDATES build_l - [ -z "$PM_INDEX_ONLY" ] && - pm_cd_pd && PM_WRKDIRPREFIX=`pm_make_b -V WRKDIRPREFIX` && pm_cd - + if [ -z "$PM_INDEX_ONLY" ]; then + if pm_cd_pd Mk ; then + PM_WRKDIRPREFIX=`pm_make_b -V WRKDIRPREFIX` && pm_cd - + else + fail "Cannot cd to port directory: $pd/Mk" + fi + fi fi if [ -n "$PM_BUILD_ONLY_LIST" ]; then @@ -2955,8 +2963,13 @@ if [ "$$" -eq "$PM_PARENT_PID" -a -z "$S fi # Set the file name here so it's visible to the children - [ -z "$DONT_SCRUB_DISTFILES" -a -z "$FETCH_ONLY" -a -z "$PM_PACKAGES" ] && - export DI_FILES=`pm_mktemp DI-FILES` || fail 'mktemp failed for DI-FILES' + if [ -z "$DONT_SCRUB_DISTFILES" -a -z "$FETCH_ONLY" -a -z "$PM_PACKAGES" ]; then + if DI_FILES=`pm_mktemp DI-FILES` ; then + export DI_FILES + else + fail 'mktemp failed for DI-FILES' + fi + fi [ -n "$PM_URB" ] && multiport $PM_URB_IPORTS [ $# -gt 1 -a -z "$REPLACE_ORIGIN" ] && multiport "$@" @@ -3329,7 +3342,7 @@ fi # [ -n "$PM_FIRST_PASS" ] [ -z "$PM_BUILDING" ] && export PM_BUILDING=pmbuildingmain -pm_cd_pd $portdir +pm_cd_pd $portdir || fail "Cannot cd to port directory: $pd/$portdir" if [ -n "$PM_BUILD_ONLY_LIST" ]; then case "$build_only_dl_g" in @@ -3356,7 +3369,7 @@ if [ -z "$NO_DEP_UPDATES" ]; then dependency_check run-depends-list fi fi - pm_cd_pd $portdir + pm_cd_pd $portdir || fail "Cannot cd to port directory: $pd/$portdir" elif [ "$$" -eq "$PM_PARENT_PID" ]; then echo "===>>> All dependencies are up to date" echo '' @@ -3619,7 +3632,7 @@ if [ -z "$use_package" ]; then fi fi - pm_cd_pd $portdir + pm_cd_pd $portdir || fail "Cannot cd to port directory: $pd/$portdir" [ -z "$DONT_PRE_CLEAN" ] && { pm_make clean NOCLEANDEPENDS=ncd || fail 'make clean failed'; echo ''; } @@ -3713,13 +3726,13 @@ if [ -n "$upg_port" -o -n "$ro_upg_port" pm_pkg_delete_s -f $upg_port fi - pm_cd_pd $portdir + pm_cd_pd $portdir || fail "Cannot cd to port directory: $pd/$portdir" fi if [ -z "$PM_THOROUGH" -a -z "$NO_DEP_UPDATES" ]; then echo '' ; echo "===>>> Starting check for runtime dependencies" dependency_check run-depends-list - pm_cd_pd $portdir + pm_cd_pd $portdir || fail "Cannot cd to port directory: $pd/$portdir" fi if [ -n "$FETCH_ONLY" ]; then # Only reached here if using packages From owner-svn-src-user@FreeBSD.ORG Sun Jun 10 08:11:51 2012 Return-Path: Delivered-To: svn-src-user@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [69.147.83.52]) by hub.freebsd.org (Postfix) with ESMTP id B2A86106564A; Sun, 10 Jun 2012 08:11:51 +0000 (UTC) (envelope-from dougb@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id 9E2C18FC15; Sun, 10 Jun 2012 08:11:51 +0000 (UTC) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.4/8.14.4) with ESMTP id q5A8BptU082403; Sun, 10 Jun 2012 08:11:51 GMT (envelope-from dougb@svn.freebsd.org) Received: (from dougb@localhost) by svn.freebsd.org (8.14.4/8.14.4/Submit) id q5A8BpWd082401; Sun, 10 Jun 2012 08:11:51 GMT (envelope-from dougb@svn.freebsd.org) Message-Id: <201206100811.q5A8BpWd082401@svn.freebsd.org> From: Doug Barton Date: Sun, 10 Jun 2012 08:11:51 +0000 (UTC) To: src-committers@freebsd.org, svn-src-user@freebsd.org X-SVN-Group: user MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r236842 - user/dougb/portmaster X-BeenThere: svn-src-user@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "SVN commit messages for the experimental " user" src tree" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sun, 10 Jun 2012 08:11:51 -0000 Author: dougb Date: Sun Jun 10 08:11:51 2012 New Revision: 236842 URL: http://svn.freebsd.org/changeset/base/236842 Log: If the second argument to -o is something that is completely non-existent, properly report what the user typed in the error message. Reported by: avilla Modified: user/dougb/portmaster/portmaster Modified: user/dougb/portmaster/portmaster ============================================================================== --- user/dougb/portmaster/portmaster Sun Jun 10 07:57:49 2012 (r236841) +++ user/dougb/portmaster/portmaster Sun Jun 10 08:11:51 2012 (r236842) @@ -3113,7 +3113,11 @@ else find_glob_dirs $arg2 && ro_upg_port=${glob_dirs#$pdb/} unset glob_dirs fi - [ -n "$ro_upg_port" ] && ro_opd=`origin_from_pdb $ro_upg_port` + if [ -n "$ro_upg_port" ]; then + ro_opd=`origin_from_pdb $ro_upg_port` + else + ro_opd=$arg2 + fi esac unset arg2 From owner-svn-src-user@FreeBSD.ORG Sun Jun 10 08:30:48 2012 Return-Path: Delivered-To: svn-src-user@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 81A0F106564A; Sun, 10 Jun 2012 08:30:48 +0000 (UTC) (envelope-from dougb@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id 6D45B8FC08; Sun, 10 Jun 2012 08:30:48 +0000 (UTC) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.4/8.14.4) with ESMTP id q5A8Umh4083240; Sun, 10 Jun 2012 08:30:48 GMT (envelope-from dougb@svn.freebsd.org) Received: (from dougb@localhost) by svn.freebsd.org (8.14.4/8.14.4/Submit) id q5A8UmWj083238; Sun, 10 Jun 2012 08:30:48 GMT (envelope-from dougb@svn.freebsd.org) Message-Id: <201206100830.q5A8UmWj083238@svn.freebsd.org> From: Doug Barton Date: Sun, 10 Jun 2012 08:30:48 +0000 (UTC) To: src-committers@freebsd.org, svn-src-user@freebsd.org X-SVN-Group: user MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r236843 - user/dougb/portmaster X-BeenThere: svn-src-user@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "SVN commit messages for the experimental " user" src tree" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sun, 10 Jun 2012 08:30:48 -0000 Author: dougb Date: Sun Jun 10 08:30:47 2012 New Revision: 236843 URL: http://svn.freebsd.org/changeset/base/236843 Log: Give the (verbose) messages about cleaning up a little whitespace, and clarify what we are waiting for. Modified: user/dougb/portmaster/portmaster Modified: user/dougb/portmaster/portmaster ============================================================================== --- user/dougb/portmaster/portmaster Sun Jun 10 08:11:51 2012 (r236842) +++ user/dougb/portmaster/portmaster Sun Jun 10 08:30:47 2012 (r236843) @@ -155,12 +155,12 @@ parent_exit () { done if [ -n "$PM_WRKDIRPREFIX" ]; then - count=0 + pm_v ; count=0 while : ; do pgrep -qf 'make clean NOCLEANDEPENDS=ncd' || break count=$(( $count + 1 )) if [ $count -eq 1 ]; then - echo "===>>> Waiting for background clean processes to finish" + echo "===>>> Waiting for background 'make clean' processes to finish" elif [ $count -eq 10 ]; then count=0 fi From owner-svn-src-user@FreeBSD.ORG Sun Jun 10 08:34:05 2012 Return-Path: Delivered-To: svn-src-user@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 7E19A106566C; Sun, 10 Jun 2012 08:34:05 +0000 (UTC) (envelope-from dougb@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id 6A57A8FC12; Sun, 10 Jun 2012 08:34:05 +0000 (UTC) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.4/8.14.4) with ESMTP id q5A8Y5IZ083418; Sun, 10 Jun 2012 08:34:05 GMT (envelope-from dougb@svn.freebsd.org) Received: (from dougb@localhost) by svn.freebsd.org (8.14.4/8.14.4/Submit) id q5A8Y5vp083416; Sun, 10 Jun 2012 08:34:05 GMT (envelope-from dougb@svn.freebsd.org) Message-Id: <201206100834.q5A8Y5vp083416@svn.freebsd.org> From: Doug Barton Date: Sun, 10 Jun 2012 08:34:05 +0000 (UTC) To: src-committers@freebsd.org, svn-src-user@freebsd.org X-SVN-Group: user MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r236844 - user/dougb/portmaster X-BeenThere: svn-src-user@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "SVN commit messages for the experimental " user" src tree" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sun, 10 Jun 2012 08:34:05 -0000 Author: dougb Date: Sun Jun 10 08:34:04 2012 New Revision: 236844 URL: http://svn.freebsd.org/changeset/base/236844 Log: Make the new count variable in parent_exit local Modified: user/dougb/portmaster/portmaster Modified: user/dougb/portmaster/portmaster ============================================================================== --- user/dougb/portmaster/portmaster Sun Jun 10 08:30:47 2012 (r236843) +++ user/dougb/portmaster/portmaster Sun Jun 10 08:34:04 2012 (r236844) @@ -118,7 +118,7 @@ kill_bad_children () { } parent_exit () { - local need_kbc files f DISCARD show_list + local need_kbc files f count DISCARD show_list [ -s "$DI_FILES" ] && { grep -q '%%%%%%%%%%%%' $DI_FILES || need_kbc=need_kbc_dif; } From owner-svn-src-user@FreeBSD.ORG Sun Jun 10 16:46:58 2012 Return-Path: Delivered-To: svn-src-user@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [69.147.83.52]) by hub.freebsd.org (Postfix) with ESMTP id 6C640106566B; Sun, 10 Jun 2012 16:46:58 +0000 (UTC) (envelope-from alc@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id 3F2448FC18; Sun, 10 Jun 2012 16:46:58 +0000 (UTC) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.4/8.14.4) with ESMTP id q5AGkwtE008868; Sun, 10 Jun 2012 16:46:58 GMT (envelope-from alc@svn.freebsd.org) Received: (from alc@localhost) by svn.freebsd.org (8.14.4/8.14.4/Submit) id q5AGkwvs008867; Sun, 10 Jun 2012 16:46:58 GMT (envelope-from alc@svn.freebsd.org) Message-Id: <201206101646.q5AGkwvs008867@svn.freebsd.org> From: Alan Cox Date: Sun, 10 Jun 2012 16:46:58 +0000 (UTC) To: src-committers@freebsd.org, svn-src-user@freebsd.org X-SVN-Group: user MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r236855 - user/alc/pvh_global_lock X-BeenThere: svn-src-user@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "SVN commit messages for the experimental " user" src tree" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sun, 10 Jun 2012 16:46:58 -0000 Author: alc Date: Sun Jun 10 16:46:57 2012 New Revision: 236855 URL: http://svn.freebsd.org/changeset/base/236855 Log: Branch for developing and testing fine-grained PV list locking. Added: - copied from r236854, head/ Directory Properties: user/alc/pvh_global_lock/ (props changed) From owner-svn-src-user@FreeBSD.ORG Sun Jun 10 23:11:56 2012 Return-Path: Delivered-To: svn-src-user@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [69.147.83.52]) by hub.freebsd.org (Postfix) with ESMTP id A2D50106564A; Sun, 10 Jun 2012 23:11:56 +0000 (UTC) (envelope-from dougb@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id 8F8318FC19; Sun, 10 Jun 2012 23:11:56 +0000 (UTC) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.4/8.14.4) with ESMTP id q5ANBuYK027117; Sun, 10 Jun 2012 23:11:56 GMT (envelope-from dougb@svn.freebsd.org) Received: (from dougb@localhost) by svn.freebsd.org (8.14.4/8.14.4/Submit) id q5ANBuCE027115; Sun, 10 Jun 2012 23:11:56 GMT (envelope-from dougb@svn.freebsd.org) Message-Id: <201206102311.q5ANBuCE027115@svn.freebsd.org> From: Doug Barton Date: Sun, 10 Jun 2012 23:11:56 +0000 (UTC) To: src-committers@freebsd.org, svn-src-user@freebsd.org X-SVN-Group: user MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r236861 - user/dougb/portmaster X-BeenThere: svn-src-user@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "SVN commit messages for the experimental " user" src tree" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sun, 10 Jun 2012 23:11:56 -0000 Author: dougb Date: Sun Jun 10 23:11:56 2012 New Revision: 236861 URL: http://svn.freebsd.org/changeset/base/236861 Log: Remove the misguided r236841 Modified: user/dougb/portmaster/portmaster Modified: user/dougb/portmaster/portmaster ============================================================================== --- user/dougb/portmaster/portmaster Sun Jun 10 22:14:52 2012 (r236860) +++ user/dougb/portmaster/portmaster Sun Jun 10 23:11:56 2012 (r236861) @@ -294,7 +294,8 @@ safe_exit () { pm_cd () { builtin cd $1 2>/dev/null || return 1; } pm_cd_pd () { [ -n "$PM_INDEX_ONLY" ] && return 2; - builtin cd $pd/$1 2>/dev/null || return 1; } + builtin cd $pd/$1 2>/dev/null || + fail "Cannot cd to port directory: $pd/$1"; } pm_kill () { /bin/kill $* >/dev/null 2>/dev/null; } pm_make () { ( unset -v CUR_DEPS INSTALLED_LIST PM_DEPTH build_l; unset -v PM_URB_LIST; @@ -1662,11 +1663,7 @@ check_for_updates () { echo " ===>>> New version available: $port_ver" [ -e "$pdb/$iport/+IGNOREME" ] && echo " ===>>> +IGNOREME file is present for $1" - if pm_cd_pd $origin ; then - check_state - else - fail "Cannot cd to port directory: $pd/$origin" - fi + pm_cd_pd $origin && check_state num_updates=$(( $num_updates + 1 )) else unset moved_npd @@ -1734,7 +1731,7 @@ pm_pkg_create () { if [ -z "$PM_INDEX_ONLY" ]; then local latest_link - pm_cd_pd $portdir || fail "Cannot cd to port directory: $pd/$portdir" + pm_cd_pd $portdir latest_link=`pm_make -V LATEST_LINK` cd ${1}/Latest $PM_SU_CMD ln -sf ../All/$pkg ${latest_link}.tbz @@ -1868,7 +1865,7 @@ set_distfiles_and_subdir () { [ -z "$dist_list_files" ] && find_dl_distfiles $1 if [ -d "$pd/$1" ]; then - pm_cd_pd $1 || fail "Cannot cd to port directory: $pd/$1" + pm_cd_pd $1 else return 1 fi @@ -2370,7 +2367,7 @@ gen_dep_list () { local list if [ -z "$PM_INDEX_ONLY" ]; then - pm_cd_pd $portdir || fail "Cannot cd to port directory: $pd/$portdir" + pm_cd_pd $portdir list=`pm_make $* | sort -u` else local temp_list l @@ -2873,7 +2870,7 @@ make_config () { config_type=config-conditional [ -n "$PM_FORCE_CONFIG" ] && config_type=config pm_sv Running \'make $config_type\' - pm_cd_pd $portdir || fail "Cannot cd to port directory: $pd/$portdir" + pm_cd_pd $portdir pm_make_s $config_type } @@ -2934,13 +2931,7 @@ if [ "$$" -eq "$PM_PARENT_PID" -a -z "$S NO_DEP_UPDATES=no_dep_updates ; build_l='' export NO_DEP_UPDATES build_l - if [ -z "$PM_INDEX_ONLY" ]; then - if pm_cd_pd Mk ; then - PM_WRKDIRPREFIX=`pm_make_b -V WRKDIRPREFIX` && pm_cd - - else - fail "Cannot cd to port directory: $pd/Mk" - fi - fi + pm_cd_pd Mk && PM_WRKDIRPREFIX=`pm_make_b -V WRKDIRPREFIX` && pm_cd - fi if [ -n "$PM_BUILD_ONLY_LIST" ]; then @@ -3346,7 +3337,7 @@ fi # [ -n "$PM_FIRST_PASS" ] [ -z "$PM_BUILDING" ] && export PM_BUILDING=pmbuildingmain -pm_cd_pd $portdir || fail "Cannot cd to port directory: $pd/$portdir" +pm_cd_pd $portdir if [ -n "$PM_BUILD_ONLY_LIST" ]; then case "$build_only_dl_g" in @@ -3373,7 +3364,7 @@ if [ -z "$NO_DEP_UPDATES" ]; then dependency_check run-depends-list fi fi - pm_cd_pd $portdir || fail "Cannot cd to port directory: $pd/$portdir" + pm_cd_pd $portdir elif [ "$$" -eq "$PM_PARENT_PID" ]; then echo "===>>> All dependencies are up to date" echo '' @@ -3636,7 +3627,7 @@ if [ -z "$use_package" ]; then fi fi - pm_cd_pd $portdir || fail "Cannot cd to port directory: $pd/$portdir" + pm_cd_pd $portdir [ -z "$DONT_PRE_CLEAN" ] && { pm_make clean NOCLEANDEPENDS=ncd || fail 'make clean failed'; echo ''; } @@ -3730,13 +3721,13 @@ if [ -n "$upg_port" -o -n "$ro_upg_port" pm_pkg_delete_s -f $upg_port fi - pm_cd_pd $portdir || fail "Cannot cd to port directory: $pd/$portdir" + pm_cd_pd $portdir fi if [ -z "$PM_THOROUGH" -a -z "$NO_DEP_UPDATES" ]; then echo '' ; echo "===>>> Starting check for runtime dependencies" dependency_check run-depends-list - pm_cd_pd $portdir || fail "Cannot cd to port directory: $pd/$portdir" + pm_cd_pd $portdir fi if [ -n "$FETCH_ONLY" ]; then # Only reached here if using packages From owner-svn-src-user@FreeBSD.ORG Sun Jun 10 23:48:15 2012 Return-Path: Delivered-To: svn-src-user@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 73B0C106566B; Sun, 10 Jun 2012 23:48:15 +0000 (UTC) (envelope-from dougb@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id 5443E8FC17; Sun, 10 Jun 2012 23:48:15 +0000 (UTC) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.4/8.14.4) with ESMTP id q5ANmFYB028740; Sun, 10 Jun 2012 23:48:15 GMT (envelope-from dougb@svn.freebsd.org) Received: (from dougb@localhost) by svn.freebsd.org (8.14.4/8.14.4/Submit) id q5ANmFJQ028738; Sun, 10 Jun 2012 23:48:15 GMT (envelope-from dougb@svn.freebsd.org) Message-Id: <201206102348.q5ANmFJQ028738@svn.freebsd.org> From: Doug Barton Date: Sun, 10 Jun 2012 23:48:15 +0000 (UTC) To: src-committers@freebsd.org, svn-src-user@freebsd.org X-SVN-Group: user MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r236862 - user/dougb/portmaster X-BeenThere: svn-src-user@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "SVN commit messages for the experimental " user" src tree" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sun, 10 Jun 2012 23:48:15 -0000 Author: dougb Date: Sun Jun 10 23:48:14 2012 New Revision: 236862 URL: http://svn.freebsd.org/changeset/base/236862 Log: Apply a better solution to the pm_mktemp() problem Modified: user/dougb/portmaster/portmaster Modified: user/dougb/portmaster/portmaster ============================================================================== --- user/dougb/portmaster/portmaster Sun Jun 10 23:11:56 2012 (r236861) +++ user/dougb/portmaster/portmaster Sun Jun 10 23:48:14 2012 (r236862) @@ -210,13 +210,7 @@ parent_exit () { echo "===>>> Warning: $PM_LOG exists, but is not a regular file" unset PM_LOG else - local new_pm_log - - if new_pm_log=`pm_mktemp pm_log` ; then - mv $new_pm_log $PM_LOG - else - fail 'mktemp failed for pm_log' - fi + pm_mktemp pm_log ; mv $pm_mktemp_file $PM_LOG fi [ -n "$PM_LOG" ] && date >> $PM_LOG fi @@ -302,12 +296,8 @@ pm_make () { ( unset -v CUR_DEPS INSTA /usr/bin/nice /usr/bin/make $PM_MAKE_ARGS $*; ); } pm_make_b () { /usr/bin/make $PM_MAKE_ARGS BEFOREPORTMK=bpm $*; } pm_mktemp () { - local f - if f=`/usr/bin/mktemp -t f-${PM_PARENT_PID}-$1 2>/dev/null` ; then - echo $f - else - return 1 - fi + pm_mktemp_file=`/usr/bin/mktemp -t f-${PM_PARENT_PID}-$1 2>/dev/null` || + fail "mktemp for $1 failed" } pm_unlink () { [ -e "$1" ] && /bin/unlink $1; } @@ -944,7 +934,7 @@ check_dependency_files () { *+*) ro_opd=`echo $ro_opd | sed 's#\+#\\\\+#g'` ;; esac # Always rely on the grep'ed dependencies instead of +REQUIRED_BY - grep_deps=`pm_mktemp grep-deps-${iport}` || fail "mktemp failed for grep-deps-${iport}" + pm_mktemp grep-deps-${iport} ; grep_deps=$pm_mktemp_file egrep -l "DEPORIGIN:($origin|$ro_opd)$" $pdb/*/+CONTENTS | strip_to_iport | sort -u > $grep_deps @@ -1024,7 +1014,7 @@ IFS=' contents=$1 ; origin=$2 ; n_port=$3 ; old_origin=$4 iport=${contents#$pdb/} ; iport=${iport%/+CONTENTS} - new_cont=`pm_mktemp contents-${iport}` || fail "mktemp failed for contents-${iport}" + pm_mktemp contents-${iport} ; new_cont=$pm_mktemp_file if [ -z "$delete" ]; then o_seen=':'; else o_seen=":${origin}:"; fi @@ -1322,7 +1312,7 @@ if [ -n "$CLEAN_DISTFILES" ]; then [ -n "$DISTDIR" ] || fail 'There is no DISTDIR to clean' # Set the file name here since we are usually called in a subshell - DI_FILES=`pm_mktemp DI-FILES` || fail 'mktemp failed for DI-FILES' + pm_mktemp DI-FILES ; DI_FILES=$pm_mktemp_file if [ -z "$PM_THOROUGH" ]; then read_distinfos @@ -2880,7 +2870,7 @@ make_config () { if [ "$$" -eq "$PM_PARENT_PID" -a -z "$SHOW_WORK" ]; then CUR_DEPS=':' ; DISPLAY_LIST='' ; INSTALLED_LIST='' - PM_DEPTH='' ; IPC_SAVE=`pm_mktemp IPC_SAVE` || fail 'mktemp failed for IPC_SAVE' + PM_DEPTH='' ; pm_mktemp IPC_SAVE ; IPC_SAVE=$pm_mktemp_file export CUR_DEPS DISPLAY_LIST INSTALLED_LIST PM_DEPTH IPC_SAVE if [ -n "$LOCALBASE" ]; then @@ -2955,11 +2945,7 @@ if [ "$$" -eq "$PM_PARENT_PID" -a -z "$S # Set the file name here so it's visible to the children if [ -z "$DONT_SCRUB_DISTFILES" -a -z "$FETCH_ONLY" -a -z "$PM_PACKAGES" ]; then - if DI_FILES=`pm_mktemp DI-FILES` ; then - export DI_FILES - else - fail 'mktemp failed for DI-FILES' - fi + pm_mktemp DI-FILES ; DI_FILES=$pm_mktemp_file ; export DI_FILES fi [ -n "$PM_URB" ] && multiport $PM_URB_IPORTS @@ -3254,8 +3240,7 @@ if [ -z "$PM_INDEX_ONLY" -a -z "$PM_BUIL for file in $distfiles; do case "$file" in */*) file=`echo $file | sed s#/#_#g` ;; esac if ! ls ${TMPDIR}/f-${PM_PARENT_PID}-${file}-* >/dev/null 2>&1; then - pm_mktemp ${file}-${portdir#*/} >/dev/null || - fail "mktemp failed for ${file}-${portdir#*/}" + pm_mktemp ${file}-${portdir#*/} >/dev/null else DONT_FETCH=dont_fetch break @@ -3264,8 +3249,7 @@ if [ -z "$PM_INDEX_ONLY" -a -z "$PM_BUIL if [ -z "$DONT_FETCH" -a -n "$distfiles" ]; then echo "===>>> Launching 'make checksum' for $portdir in background" - fetchlog=`pm_mktemp fetchlog-${portdir#*/}` || - fail "mktemp failed for fetchlog-${portdir#*/}" + pm_mktemp fetchlog-${portdir#*/} ; fetchlog=$pm_mktemp_file (pm_make -DBATCH checksum >> $fetchlog 2>&1 && { rm -f ${TMPDIR}/f-${PM_PARENT_PID}-*-${portdir#*/}.*; exit 0; } allfiles=`pm_make -V ALLFILES` @@ -3494,7 +3478,7 @@ fetch_package () { dirlist=`echo ${TMPDIR}/f-${PM_PARENT_PID}-dl-${portdir%/*}\.*` if [ ! -r "$dirlist" ]; then pm_unlink $dirlist # JIC - dirlist=`pm_mktemp dl-${portdir%/*}` || fail "mktemp failed for dl-${portdir%/*}" + pm_mktemp dl-${portdir%/*} ; dirlist=$pm_mktemp_file fetch -q -o - ${sitepath} 2>/dev/null | sed -e "s#%2[cC]#,#g" -e "s#%2[bB]#+#g" > $dirlist fi @@ -3670,7 +3654,7 @@ if [ -n "$upg_port" -o -n "$ro_upg_port" [ -z "$NO_BACKUP" ] && pm_pkg_create $pbu $UPGRADE_PORT if [ -n "$SAVE_SHARED" ]; then - ldconfig_out=`pm_mktemp ldconfig` || fail 'mktemp for ldconfig failed' + pm_mktemp ldconfig ; ldconfig_out=$pm_mktemp_file ldconfig -r | sed 's#.* ##' | grep -v ^$LOCALBASE_COMPAT > $ldconfig_out @@ -3784,7 +3768,7 @@ for file in $preserve_port_files; do mv ${preserve_dir}/${file##*/} $file oldmd5="MD5:`md5 -q $file`" - new_cont=`pm_mktemp contents` || fail 'mktemp failed for contents' + pm_mktemp contents ; new_cont=$pm_mktemp_file while read left right; do case "$left" in @cwd) short_file="${file#${right}/}" ;; @@ -3863,7 +3847,7 @@ if [ -n "$distfiles" ]; then [ -n "$distinfo" ] || fail "No DISTINFO_FILE in $portdir" fi - dist_list_temp=`pm_mktemp dist_list` || fail 'mktemp failed for dist_list' + pm_mktemp dist_list ; dist_list_temp=$pm_mktemp_file echo '# Added by portmaster' > $dist_list_temp for file in $distfiles; do size=`grep "^SIZE (${ds}${file})" $distinfo` From owner-svn-src-user@FreeBSD.ORG Mon Jun 11 00:16:05 2012 Return-Path: Delivered-To: svn-src-user@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id CF65D106567C; Mon, 11 Jun 2012 00:16:05 +0000 (UTC) (envelope-from alc@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id B8E688FC18; Mon, 11 Jun 2012 00:16:05 +0000 (UTC) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.4/8.14.4) with ESMTP id q5B0G5Ml030008; Mon, 11 Jun 2012 00:16:05 GMT (envelope-from alc@svn.freebsd.org) Received: (from alc@localhost) by svn.freebsd.org (8.14.4/8.14.4/Submit) id q5B0G5QE030003; Mon, 11 Jun 2012 00:16:05 GMT (envelope-from alc@svn.freebsd.org) Message-Id: <201206110016.q5B0G5QE030003@svn.freebsd.org> From: Alan Cox Date: Mon, 11 Jun 2012 00:16:05 +0000 (UTC) To: src-committers@freebsd.org, svn-src-user@freebsd.org X-SVN-Group: user MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r236863 - in user/alc/pvh_global_lock/sys: amd64/amd64 amd64/include i386/i386 kern X-BeenThere: svn-src-user@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "SVN commit messages for the experimental " user" src tree" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 11 Jun 2012 00:16:05 -0000 Author: alc Date: Mon Jun 11 00:16:05 2012 New Revision: 236863 URL: http://svn.freebsd.org/changeset/base/236863 Log: Add PV chunk and list locking to the amd64 pmap, enabling concurrent execution of the following functions on different pmaps: pmap_change_wiring() pmap_copy() pmap_enter() pmap_enter_object() pmap_enter_quick() pmap_page_exists_quick() pmap_page_is_mapped() pmap_protect() pmap_remove() pmap_remove_pages() Still to do are: pmap_clear_modify() pmap_clear_reference() pmap_is_modified() pmap_is_referenced() pmap_page_wired_mappings() pmap_remove_all() pmap_remove_write() pmap_ts_referenced() Modified: user/alc/pvh_global_lock/sys/amd64/amd64/pmap.c user/alc/pvh_global_lock/sys/amd64/include/pmap.h user/alc/pvh_global_lock/sys/i386/i386/pmap.c user/alc/pvh_global_lock/sys/kern/subr_witness.c Modified: user/alc/pvh_global_lock/sys/amd64/amd64/pmap.c ============================================================================== --- user/alc/pvh_global_lock/sys/amd64/amd64/pmap.c Sun Jun 10 23:48:14 2012 (r236862) +++ user/alc/pvh_global_lock/sys/amd64/amd64/pmap.c Mon Jun 11 00:16:05 2012 (r236863) @@ -7,7 +7,7 @@ * All rights reserved. * Copyright (c) 2003 Peter Wemm * All rights reserved. - * Copyright (c) 2005-2010 Alan L. Cox + * Copyright (c) 2005-2012 Alan L. Cox * All rights reserved. * * This code is derived from software contributed to Berkeley by @@ -168,6 +168,12 @@ __FBSDID("$FreeBSD$"); #define pa_index(pa) ((pa) >> PDRSHIFT) #define pa_to_pvh(pa) (&pv_table[pa_index(pa)]) +#define NPV_LIST_MTX 16 + +#define PHYS_TO_PV_LIST_MTX(pa) (&pv_list_locks[pa_index(pa) % NPV_LIST_MTX]) + +#define VM_PAGE_TO_PV_LIST_MTX(m) PHYS_TO_PV_LIST_MTX(VM_PAGE_TO_PHYS(m)) + struct pmap kernel_pmap_store; vm_offset_t virtual_avail; /* VA of first avail page (after kernel bss) */ @@ -214,7 +220,8 @@ static struct { * Data for the pv entry allocation mechanism */ static TAILQ_HEAD(pch, pv_chunk) pv_chunks = TAILQ_HEAD_INITIALIZER(pv_chunks); -static long pv_entry_count; +static struct mtx pv_chunks_lock; +static struct mtx pv_list_locks[NPV_LIST_MTX]; static struct md_page *pv_table; /* @@ -231,6 +238,7 @@ static caddr_t crashdumpmap; static void free_pv_chunk(struct pv_chunk *pc); static void free_pv_entry(pmap_t pmap, pv_entry_t pv); static pv_entry_t get_pv_entry(pmap_t pmap, boolean_t try); +static void reserve_pv_entry(pmap_t pmap, int needed); static void pmap_pv_demote_pde(pmap_t pmap, vm_offset_t va, vm_paddr_t pa); static boolean_t pmap_pv_insert_pde(pmap_t pmap, vm_offset_t va, vm_paddr_t pa); static void pmap_pv_promote_pde(pmap_t pmap, vm_offset_t va, vm_paddr_t pa); @@ -267,7 +275,6 @@ static void pmap_remove_page(pmap_t pmap vm_page_t *free); static void pmap_remove_entry(struct pmap *pmap, vm_page_t m, vm_offset_t va); -static void pmap_insert_entry(pmap_t pmap, vm_offset_t va, vm_page_t m); static boolean_t pmap_try_insert_pv_entry(pmap_t pmap, vm_offset_t va, vm_page_t m); static void pmap_update_pde(pmap_t pmap, vm_offset_t va, pd_entry_t *pde, @@ -597,7 +604,7 @@ pmap_bootstrap(vm_paddr_t *firstaddr) /* * Initialize the global pv list lock. */ - rw_init(&pvh_global_lock, "pvh global"); + rw_init(&pvh_global_lock, "pv global"); /* * Reserve some special page table entries/VA space for temporary @@ -763,6 +770,18 @@ pmap_init(void) } /* + * Initialize the pv chunk list lock. + */ + mtx_init(&pv_chunks_lock, "pv chunk list", NULL, MTX_DEF); + + /* + * Initialize the pool of pv list locks. Unfortunately, a mtx_pool(9) + * can't be used because malloc(9) isn't initialized. + */ + for (i = 0; i < NPV_LIST_MTX; i++) + mtx_init(&pv_list_locks[i], "pv list", NULL, MTX_DEF); + + /* * Calculate the size of the pv head table for superpages. */ for (i = 0; phys_avail[i + 1]; i += 2); @@ -1669,9 +1688,9 @@ _pmap_allocpte(pmap_t pmap, vm_pindex_t VM_ALLOC_WIRED | VM_ALLOC_ZERO)) == NULL) { if (flags & M_WAITOK) { PMAP_UNLOCK(pmap); - rw_wunlock(&pvh_global_lock); + rw_runlock(&pvh_global_lock); VM_WAIT; - rw_wlock(&pvh_global_lock); + rw_rlock(&pvh_global_lock); PMAP_LOCK(pmap); } @@ -2023,6 +2042,7 @@ pv_to_chunk(pv_entry_t pv) static const uint64_t pc_freemask[_NPCM] = { PC_FREE0, PC_FREE1, PC_FREE2 }; +static long pv_entry_count; SYSCTL_LONG(_vm_pmap, OID_AUTO, pv_entry_count, CTLFLAG_RD, &pv_entry_count, 0, "Current number of pv entries"); @@ -2064,6 +2084,7 @@ pmap_pv_reclaim(pmap_t locked_pmap) struct pch newtail; struct pv_chunk *pc; struct md_page *pvh; + struct mtx *mtx; pd_entry_t *pde; pmap_t pmap; pt_entry_t *pte, tpte; @@ -2073,13 +2094,15 @@ pmap_pv_reclaim(pmap_t locked_pmap) uint64_t inuse; int bit, field, freed; - rw_assert(&pvh_global_lock, RA_WLOCKED); + rw_assert(&pvh_global_lock, RA_LOCKED); PMAP_LOCK_ASSERT(locked_pmap, MA_OWNED); pmap = NULL; free = m_pc = NULL; TAILQ_INIT(&newtail); + mtx_lock(&pv_chunks_lock); while ((pc = TAILQ_FIRST(&pv_chunks)) != NULL && free == NULL) { TAILQ_REMOVE(&pv_chunks, pc, pc_lru); + mtx_unlock(&pv_chunks_lock); if (pmap != pc->pc_pmap) { if (pmap != NULL) { pmap_invalidate_all(pmap); @@ -2093,6 +2116,7 @@ pmap_pv_reclaim(pmap_t locked_pmap) else if (pmap != locked_pmap && !PMAP_TRYLOCK(pmap)) { pmap = NULL; TAILQ_INSERT_TAIL(&newtail, pc, pc_lru); + mtx_lock(&pv_chunks_lock); continue; } } @@ -2121,6 +2145,8 @@ pmap_pv_reclaim(pmap_t locked_pmap) vm_page_dirty(m); if ((tpte & PG_A) != 0) vm_page_aflag_set(m, PGA_REFERENCED); + mtx = VM_PAGE_TO_PV_LIST_MTX(m); + mtx_lock(mtx); TAILQ_REMOVE(&m->md.pv_list, pv, pv_list); if (TAILQ_EMPTY(&m->md.pv_list) && (m->flags & PG_FICTITIOUS) == 0) { @@ -2130,6 +2156,7 @@ pmap_pv_reclaim(pmap_t locked_pmap) PGA_WRITEABLE); } } + mtx_unlock(mtx); pc->pc_map[field] |= 1UL << bit; pmap_unuse_pt(pmap, va, *pde, &free); freed++; @@ -2137,31 +2164,36 @@ pmap_pv_reclaim(pmap_t locked_pmap) } if (freed == 0) { TAILQ_INSERT_TAIL(&newtail, pc, pc_lru); + mtx_lock(&pv_chunks_lock); continue; } /* Every freed mapping is for a 4 KB page. */ pmap_resident_count_dec(pmap, freed); - PV_STAT(pv_entry_frees += freed); - PV_STAT(pv_entry_spare += freed); - pv_entry_count -= freed; + PV_STAT(atomic_add_long(&pv_entry_frees, freed)); + atomic_subtract_long(&pv_entry_count, freed); TAILQ_REMOVE(&pmap->pm_pvchunk, pc, pc_list); if (pc->pc_map[0] == PC_FREE0 && pc->pc_map[1] == PC_FREE1 && pc->pc_map[2] == PC_FREE2) { - PV_STAT(pv_entry_spare -= _NPCPV); - PV_STAT(pc_chunk_count--); - PV_STAT(pc_chunk_frees++); + PV_STAT(atomic_subtract_int(&pv_entry_spare, _NPCPV - + freed)); + PV_STAT(atomic_subtract_int(&pc_chunk_count, 1)); + PV_STAT(atomic_add_int(&pc_chunk_frees, 1)); /* Entire chunk is free; return it. */ m_pc = PHYS_TO_VM_PAGE(DMAP_TO_PHYS((vm_offset_t)pc)); dump_drop_page(m_pc->phys_addr); + mtx_lock(&pv_chunks_lock); break; } + PV_STAT(atomic_add_int(&pv_entry_spare, freed)); TAILQ_INSERT_HEAD(&pmap->pm_pvchunk, pc, pc_list); TAILQ_INSERT_TAIL(&newtail, pc, pc_lru); + mtx_lock(&pv_chunks_lock); /* One freed pv entry in locked_pmap is sufficient. */ if (pmap == locked_pmap) break; } TAILQ_CONCAT(&pv_chunks, &newtail, pc_lru); + mtx_unlock(&pv_chunks_lock); if (pmap != NULL) { pmap_invalidate_all(pmap); if (pmap != locked_pmap) @@ -2187,11 +2219,11 @@ free_pv_entry(pmap_t pmap, pv_entry_t pv struct pv_chunk *pc; int idx, field, bit; - rw_assert(&pvh_global_lock, RA_WLOCKED); + rw_assert(&pvh_global_lock, RA_LOCKED); PMAP_LOCK_ASSERT(pmap, MA_OWNED); - PV_STAT(pv_entry_frees++); - PV_STAT(pv_entry_spare++); - pv_entry_count--; + PV_STAT(atomic_add_long(&pv_entry_frees, 1)); + PV_STAT(atomic_add_int(&pv_entry_spare, 1)); + atomic_subtract_long(&pv_entry_count, 1); pc = pv_to_chunk(pv); idx = pv - &pc->pc_pventry[0]; field = idx / 64; @@ -2215,10 +2247,12 @@ free_pv_chunk(struct pv_chunk *pc) { vm_page_t m; + mtx_lock(&pv_chunks_lock); TAILQ_REMOVE(&pv_chunks, pc, pc_lru); - PV_STAT(pv_entry_spare -= _NPCPV); - PV_STAT(pc_chunk_count--); - PV_STAT(pc_chunk_frees++); + mtx_unlock(&pv_chunks_lock); + PV_STAT(atomic_subtract_int(&pv_entry_spare, _NPCPV)); + PV_STAT(atomic_subtract_int(&pc_chunk_count, 1)); + PV_STAT(atomic_add_int(&pc_chunk_frees, 1)); /* entire chunk is free, return it */ m = PHYS_TO_VM_PAGE(DMAP_TO_PHYS((vm_offset_t)pc)); dump_drop_page(m->phys_addr); @@ -2238,9 +2272,9 @@ get_pv_entry(pmap_t pmap, boolean_t try) struct pv_chunk *pc; vm_page_t m; - rw_assert(&pvh_global_lock, RA_WLOCKED); + rw_assert(&pvh_global_lock, RA_LOCKED); PMAP_LOCK_ASSERT(pmap, MA_OWNED); - PV_STAT(pv_entry_allocs++); + PV_STAT(atomic_add_long(&pv_entry_allocs, 1)); retry: pc = TAILQ_FIRST(&pmap->pm_pvchunk); if (pc != NULL) { @@ -2260,8 +2294,8 @@ retry: TAILQ_INSERT_TAIL(&pmap->pm_pvchunk, pc, pc_list); } - pv_entry_count++; - PV_STAT(pv_entry_spare--); + atomic_add_long(&pv_entry_count, 1); + PV_STAT(atomic_subtract_int(&pv_entry_spare, 1)); return (pv); } } @@ -2270,29 +2304,93 @@ retry: VM_ALLOC_WIRED); if (m == NULL) { if (try) { - PV_STAT(pc_chunk_tryfail++); + PV_STAT(atomic_add_int(&pc_chunk_tryfail, 1)); return (NULL); } m = pmap_pv_reclaim(pmap); if (m == NULL) goto retry; } - PV_STAT(pc_chunk_count++); - PV_STAT(pc_chunk_allocs++); + PV_STAT(atomic_add_int(&pc_chunk_count, 1)); + PV_STAT(atomic_add_int(&pc_chunk_allocs, 1)); dump_add_page(m->phys_addr); pc = (void *)PHYS_TO_DMAP(m->phys_addr); pc->pc_pmap = pmap; pc->pc_map[0] = PC_FREE0 & ~1ul; /* preallocated bit 0 */ pc->pc_map[1] = PC_FREE1; pc->pc_map[2] = PC_FREE2; + mtx_lock(&pv_chunks_lock); TAILQ_INSERT_TAIL(&pv_chunks, pc, pc_lru); + mtx_unlock(&pv_chunks_lock); pv = &pc->pc_pventry[0]; TAILQ_INSERT_HEAD(&pmap->pm_pvchunk, pc, pc_list); - pv_entry_count++; - PV_STAT(pv_entry_spare += _NPCPV - 1); + atomic_add_long(&pv_entry_count, 1); + PV_STAT(atomic_add_int(&pv_entry_spare, _NPCPV - 1)); return (pv); } +static int +bitcount64(uint64_t x) +{ + int count; + + count = 0; + while (x != 0) { + x = x & (x - 1); + count++; + } + return (count); +} + +/* + * Ensure that the number of spare PV entries in the specified pmap meets or + * exceeds the given count, "needed". + */ +static void +reserve_pv_entry(pmap_t pmap, int needed) +{ + struct pv_chunk *pc; + int free, total; + vm_page_t m; + + rw_assert(&pvh_global_lock, RA_LOCKED); + PMAP_ASSERT_LOCKED(pmap); +retry: + total = 0; + TAILQ_FOREACH(pc, &pmap->pm_pvchunk, pc_list) { + free = bitcount64(pc->pc_map[0] & PC_FREE0); + free += bitcount64(pc->pc_map[1] & PC_FREE1); + free += bitcount64(pc->pc_map[2] & PC_FREE2); + if (free == 0) + break; + total += free; + if (total >= needed) + break; + } + for (; total < needed; total += _NPCPV) { + m = vm_page_alloc(NULL, 0, VM_ALLOC_NORMAL | VM_ALLOC_NOOBJ | + VM_ALLOC_WIRED); + if (m == NULL) { + m = pmap_pv_reclaim(pmap); + if (m == NULL) + goto retry; + } + PV_STAT(atomic_add_int(&pc_chunk_count, 1)); + PV_STAT(atomic_add_int(&pc_chunk_allocs, 1)); + dump_add_page(m->phys_addr); + pc = (void *)PHYS_TO_DMAP(m->phys_addr); + pc->pc_pmap = pmap; + pc->pc_map[0] = PC_FREE0; + pc->pc_map[1] = PC_FREE1; + pc->pc_map[2] = PC_FREE2; + mtx_lock(&pv_chunks_lock); + TAILQ_INSERT_TAIL(&pv_chunks, pc, pc_lru); + mtx_unlock(&pv_chunks_lock); + TAILQ_INSERT_HEAD(&pmap->pm_pvchunk, pc, pc_list); + PV_STAT(atomic_add_int(&pv_entry_spare, _NPCPV)); + } +} + /* * First find and then remove the pv entry for the specified pmap and virtual * address from the specified pv list. Returns the pv entry if found and NULL @@ -2304,7 +2402,7 @@ pmap_pvh_remove(struct md_page *pvh, pma { pv_entry_t pv; - rw_assert(&pvh_global_lock, RA_WLOCKED); + rw_assert(&pvh_global_lock, RA_LOCKED); TAILQ_FOREACH(pv, &pvh->pv_list, pv_list) { if (pmap == PV_PMAP(pv) && va == pv->pv_va) { TAILQ_REMOVE(&pvh->pv_list, pv, pv_list); @@ -2323,20 +2421,25 @@ static void pmap_pv_demote_pde(pmap_t pmap, vm_offset_t va, vm_paddr_t pa) { struct md_page *pvh; + struct mtx *mtx; pv_entry_t pv; vm_offset_t va_last; vm_page_t m; - rw_assert(&pvh_global_lock, RA_WLOCKED); + rw_assert(&pvh_global_lock, RA_LOCKED); + PMAP_ASSERT_LOCKED(pmap); KASSERT((pa & PDRMASK) == 0, ("pmap_pv_demote_pde: pa is not 2mpage aligned")); + reserve_pv_entry(pmap, NPTEPG - 1); /* * Transfer the 2mpage's pv entry for this mapping to the first * page's pv list. */ - pvh = pa_to_pvh(pa); va = trunc_2mpage(va); + mtx = PHYS_TO_PV_LIST_MTX(pa); + mtx_lock(mtx); + pvh = pa_to_pvh(pa); pv = pmap_pvh_remove(pvh, pmap, va); KASSERT(pv != NULL, ("pmap_pv_demote_pde: pv not found")); m = PHYS_TO_VM_PAGE(pa); @@ -2347,9 +2450,13 @@ pmap_pv_demote_pde(pmap_t pmap, vm_offse m++; KASSERT((m->oflags & VPO_UNMANAGED) == 0, ("pmap_pv_demote_pde: page %p is not managed", m)); + mtx_assert(VM_PAGE_TO_PV_LIST_MTX(m), MA_OWNED); va += PAGE_SIZE; - pmap_insert_entry(pmap, va, m); + pv = get_pv_entry(pmap, FALSE); + pv->pv_va = va; + TAILQ_INSERT_TAIL(&m->md.pv_list, pv, pv_list); } while (va < va_last); + mtx_unlock(mtx); } /* @@ -2361,11 +2468,12 @@ static void pmap_pv_promote_pde(pmap_t pmap, vm_offset_t va, vm_paddr_t pa) { struct md_page *pvh; + struct mtx *mtx; pv_entry_t pv; vm_offset_t va_last; vm_page_t m; - rw_assert(&pvh_global_lock, RA_WLOCKED); + rw_assert(&pvh_global_lock, RA_LOCKED); KASSERT((pa & PDRMASK) == 0, ("pmap_pv_promote_pde: pa is not 2mpage aligned")); @@ -2373,11 +2481,13 @@ pmap_pv_promote_pde(pmap_t pmap, vm_offs * Transfer the first page's pv entry for this mapping to the * 2mpage's pv list. Aside from avoiding the cost of a call * to get_pv_entry(), a transfer avoids the possibility that - * get_pv_entry() calls pmap_collect() and that pmap_collect() + * get_pv_entry() calls pmap_pv_reclaim() and that pmap_pv_reclaim() * removes one of the mappings that is being promoted. */ - m = PHYS_TO_VM_PAGE(pa); va = trunc_2mpage(va); + mtx = PHYS_TO_PV_LIST_MTX(pa); + mtx_lock(mtx); + m = PHYS_TO_VM_PAGE(pa); pv = pmap_pvh_remove(&m->md, pmap, va); KASSERT(pv != NULL, ("pmap_pv_promote_pde: pv not found")); pvh = pa_to_pvh(pa); @@ -2389,6 +2499,7 @@ pmap_pv_promote_pde(pmap_t pmap, vm_offs va += PAGE_SIZE; pmap_pvh_free(&m->md, pmap, va); } while (va < va_last); + mtx_unlock(mtx); } /* @@ -2410,30 +2521,21 @@ static void pmap_remove_entry(pmap_t pmap, vm_page_t m, vm_offset_t va) { struct md_page *pvh; + struct mtx *mtx; + pv_entry_t pv; - rw_assert(&pvh_global_lock, RA_WLOCKED); - pmap_pvh_free(&m->md, pmap, va); + rw_assert(&pvh_global_lock, RA_LOCKED); + mtx = VM_PAGE_TO_PV_LIST_MTX(m); + mtx_lock(mtx); + pv = pmap_pvh_remove(&m->md, pmap, va); + KASSERT(pv != NULL, ("pmap_remove_entry: pv not found")); if (TAILQ_EMPTY(&m->md.pv_list) && (m->flags & PG_FICTITIOUS) == 0) { pvh = pa_to_pvh(VM_PAGE_TO_PHYS(m)); if (TAILQ_EMPTY(&pvh->pv_list)) vm_page_aflag_clear(m, PGA_WRITEABLE); } -} - -/* - * Create a pv entry for page at pa for - * (pmap, va). - */ -static void -pmap_insert_entry(pmap_t pmap, vm_offset_t va, vm_page_t m) -{ - pv_entry_t pv; - - rw_assert(&pvh_global_lock, RA_WLOCKED); - PMAP_LOCK_ASSERT(pmap, MA_OWNED); - pv = get_pv_entry(pmap, FALSE); - pv->pv_va = va; - TAILQ_INSERT_TAIL(&m->md.pv_list, pv, pv_list); + mtx_unlock(mtx); + free_pv_entry(pmap, pv); } /* @@ -2442,13 +2544,17 @@ pmap_insert_entry(pmap_t pmap, vm_offset static boolean_t pmap_try_insert_pv_entry(pmap_t pmap, vm_offset_t va, vm_page_t m) { + struct mtx *mtx; pv_entry_t pv; - rw_assert(&pvh_global_lock, RA_WLOCKED); + rw_assert(&pvh_global_lock, RA_LOCKED); PMAP_LOCK_ASSERT(pmap, MA_OWNED); if ((pv = get_pv_entry(pmap, TRUE)) != NULL) { pv->pv_va = va; + mtx = VM_PAGE_TO_PV_LIST_MTX(m); + mtx_lock(mtx); TAILQ_INSERT_TAIL(&m->md.pv_list, pv, pv_list); + mtx_unlock(mtx); return (TRUE); } else return (FALSE); @@ -2461,13 +2567,18 @@ static boolean_t pmap_pv_insert_pde(pmap_t pmap, vm_offset_t va, vm_paddr_t pa) { struct md_page *pvh; + struct mtx *mtx; pv_entry_t pv; - rw_assert(&pvh_global_lock, RA_WLOCKED); + rw_assert(&pvh_global_lock, RA_LOCKED); + PMAP_ASSERT_LOCKED(pmap); if ((pv = get_pv_entry(pmap, TRUE)) != NULL) { pv->pv_va = va; + mtx = PHYS_TO_PV_LIST_MTX(pa); + mtx_lock(mtx); pvh = pa_to_pvh(pa); TAILQ_INSERT_TAIL(&pvh->pv_list, pv, pv_list); + mtx_unlock(mtx); return (TRUE); } else return (FALSE); @@ -2588,7 +2699,7 @@ pmap_demote_pde(pmap_t pmap, pd_entry_t /* * Demote the pv entry. This depends on the earlier demotion * of the mapping. Specifically, the (re)creation of a per- - * page pv entry might trigger the execution of pmap_collect(), + * page pv entry might trigger the execution of pmap_pv_reclaim(), * which might reclaim a newly (re)created per-page pv entry * and destroy the associated mapping. In order to destroy * the mapping, the PDE must have already changed from mapping @@ -2597,7 +2708,7 @@ pmap_demote_pde(pmap_t pmap, pd_entry_t if ((oldpde & PG_MANAGED) != 0) pmap_pv_demote_pde(pmap, va, oldpde & PG_PS_FRAME); - pmap_pde_demotions++; + atomic_add_long(&pmap_pde_demotions, 1); CTR2(KTR_PMAP, "pmap_demote_pde: success for va %#lx" " in pmap %p", va, pmap); return (TRUE); @@ -2611,7 +2722,9 @@ pmap_remove_pde(pmap_t pmap, pd_entry_t vm_page_t *free) { struct md_page *pvh; + struct mtx *mtx; pd_entry_t oldpde; + pv_entry_t pv; vm_offset_t eva, va; vm_page_t m, mpte; @@ -2627,11 +2740,14 @@ pmap_remove_pde(pmap_t pmap, pd_entry_t * PG_G. */ if (oldpde & PG_G) - pmap_invalidate_page(kernel_pmap, sva); + pmap_invalidate_page(pmap, sva); pmap_resident_count_dec(pmap, NBPDR / PAGE_SIZE); if (oldpde & PG_MANAGED) { + mtx = PHYS_TO_PV_LIST_MTX(oldpde & PG_PS_FRAME); + mtx_lock(mtx); pvh = pa_to_pvh(oldpde & PG_PS_FRAME); - pmap_pvh_free(pvh, pmap, sva); + pv = pmap_pvh_remove(pvh, pmap, sva); + KASSERT(pv != NULL, ("pmap_remove_pde: pv not found")); eva = sva + NBPDR; for (va = sva, m = PHYS_TO_VM_PAGE(oldpde & PG_PS_FRAME); va < eva; va += PAGE_SIZE, m++) { @@ -2643,6 +2759,8 @@ pmap_remove_pde(pmap_t pmap, pd_entry_t TAILQ_EMPTY(&pvh->pv_list)) vm_page_aflag_clear(m, PGA_WRITEABLE); } + mtx_unlock(mtx); + free_pv_entry(pmap, pv); } if (pmap == kernel_pmap) { if (!pmap_demote_pde(pmap, pdq, sva)) @@ -2731,7 +2849,7 @@ pmap_remove(pmap_t pmap, vm_offset_t sva anyvalid = 0; - rw_wlock(&pvh_global_lock); + rw_rlock(&pvh_global_lock); PMAP_LOCK(pmap); /* @@ -2841,7 +2959,7 @@ pmap_remove(pmap_t pmap, vm_offset_t sva out: if (anyvalid) pmap_invalidate_all(pmap); - rw_wunlock(&pvh_global_lock); + rw_runlock(&pvh_global_lock); PMAP_UNLOCK(pmap); pmap_free_zero_pages(free); } @@ -3033,12 +3151,12 @@ resume: } else { if (!pv_lists_locked) { pv_lists_locked = TRUE; - if (!rw_try_wlock(&pvh_global_lock)) { + if (!rw_try_rlock(&pvh_global_lock)) { if (anychanged) pmap_invalidate_all( pmap); PMAP_UNLOCK(pmap); - rw_wlock(&pvh_global_lock); + rw_rlock(&pvh_global_lock); goto resume; } } @@ -3089,7 +3207,7 @@ retry: if (anychanged) pmap_invalidate_all(pmap); if (pv_lists_locked) - rw_wunlock(&pvh_global_lock); + rw_runlock(&pvh_global_lock); PMAP_UNLOCK(pmap); } @@ -3119,7 +3237,7 @@ pmap_promote_pde(pmap_t pmap, pd_entry_t setpde: newpde = *firstpte; if ((newpde & ((PG_FRAME & PDRMASK) | PG_A | PG_V)) != (PG_A | PG_V)) { - pmap_pde_p_failures++; + atomic_add_long(&pmap_pde_p_failures, 1); CTR2(KTR_PMAP, "pmap_promote_pde: failure for va %#lx" " in pmap %p", va, pmap); return; @@ -3144,7 +3262,7 @@ setpde: setpte: oldpte = *pte; if ((oldpte & (PG_FRAME | PG_A | PG_V)) != pa) { - pmap_pde_p_failures++; + atomic_add_long(&pmap_pde_p_failures, 1); CTR2(KTR_PMAP, "pmap_promote_pde: failure for va %#lx" " in pmap %p", va, pmap); return; @@ -3163,7 +3281,7 @@ setpte: " in pmap %p", oldpteva, pmap); } if ((oldpte & PG_PTE_PROMOTE) != (newpde & PG_PTE_PROMOTE)) { - pmap_pde_p_failures++; + atomic_add_long(&pmap_pde_p_failures, 1); CTR2(KTR_PMAP, "pmap_promote_pde: failure for va %#lx" " in pmap %p", va, pmap); return; @@ -3204,7 +3322,7 @@ setpte: else pde_store(pde, PG_PS | newpde); - pmap_pde_promotions++; + atomic_add_long(&pmap_pde_promotions, 1); CTR2(KTR_PMAP, "pmap_promote_pde: success for va %#lx" " in pmap %p", va, pmap); } @@ -3225,6 +3343,7 @@ void pmap_enter(pmap_t pmap, vm_offset_t va, vm_prot_t access, vm_page_t m, vm_prot_t prot, boolean_t wired) { + struct mtx *mtx; pd_entry_t *pde; pt_entry_t *pte; pt_entry_t newpte, origpte; @@ -3244,7 +3363,7 @@ pmap_enter(pmap_t pmap, vm_offset_t va, mpte = NULL; - rw_wlock(&pvh_global_lock); + rw_rlock(&pvh_global_lock); PMAP_LOCK(pmap); /* @@ -3306,7 +3425,10 @@ pmap_enter(pmap_t pmap, vm_offset_t va, pmap->pm_stats.wired_count--; if (origpte & PG_MANAGED) { om = PHYS_TO_VM_PAGE(opa); + mtx = PHYS_TO_PV_LIST_MTX(opa); + mtx_lock(mtx); pv = pmap_pvh_remove(&om->md, pmap, va); + mtx_unlock(mtx); } if (mpte != NULL) { mpte->wire_count--; @@ -3326,7 +3448,10 @@ pmap_enter(pmap_t pmap, vm_offset_t va, if (pv == NULL) pv = get_pv_entry(pmap, FALSE); pv->pv_va = va; + mtx = VM_PAGE_TO_PV_LIST_MTX(m); + mtx_lock(mtx); TAILQ_INSERT_TAIL(&m->md.pv_list, pv, pv_list); + mtx_unlock(mtx); pa |= PG_MANAGED; } else if (pv != NULL) free_pv_entry(pmap, pv); @@ -3380,11 +3505,15 @@ validate: if ((newpte & PG_RW) == 0) invlva = TRUE; } - if ((origpte & PG_MANAGED) != 0 && - TAILQ_EMPTY(&om->md.pv_list) && - ((om->flags & PG_FICTITIOUS) != 0 || - TAILQ_EMPTY(&pa_to_pvh(opa)->pv_list))) - vm_page_aflag_clear(om, PGA_WRITEABLE); + if ((origpte & PG_MANAGED) != 0) { + mtx = PHYS_TO_PV_LIST_MTX(opa); + mtx_lock(mtx); + if (TAILQ_EMPTY(&om->md.pv_list) && + ((om->flags & PG_FICTITIOUS) != 0 || + TAILQ_EMPTY(&pa_to_pvh(opa)->pv_list))) + vm_page_aflag_clear(om, PGA_WRITEABLE); + mtx_unlock(mtx); + } if (invlva) pmap_invalidate_page(pmap, va); } else @@ -3400,7 +3529,7 @@ validate: vm_reserv_level_iffullpop(m) == 0) pmap_promote_pde(pmap, pde, va); - rw_wunlock(&pvh_global_lock); + rw_runlock(&pvh_global_lock); PMAP_UNLOCK(pmap); } @@ -3416,7 +3545,7 @@ pmap_enter_pde(pmap_t pmap, vm_offset_t pd_entry_t *pde, newpde; vm_page_t free, mpde; - rw_assert(&pvh_global_lock, RA_WLOCKED); + rw_assert(&pvh_global_lock, RA_LOCKED); PMAP_LOCK_ASSERT(pmap, MA_OWNED); if ((mpde = pmap_allocpde(pmap, va, M_NOWAIT)) == NULL) { CTR2(KTR_PMAP, "pmap_enter_pde: failure for va %#lx" @@ -3467,7 +3596,7 @@ pmap_enter_pde(pmap_t pmap, vm_offset_t */ pde_store(pde, newpde); - pmap_pde_mappings++; + atomic_add_long(&pmap_pde_mappings, 1); CTR2(KTR_PMAP, "pmap_enter_pde: success for va %#lx" " in pmap %p", va, pmap); return (TRUE); @@ -3497,7 +3626,7 @@ pmap_enter_object(pmap_t pmap, vm_offset psize = atop(end - start); mpte = NULL; m = m_start; - rw_wlock(&pvh_global_lock); + rw_rlock(&pvh_global_lock); PMAP_LOCK(pmap); while (m != NULL && (diff = m->pindex - m_start->pindex) < psize) { va = start + ptoa(diff); @@ -3511,7 +3640,7 @@ pmap_enter_object(pmap_t pmap, vm_offset mpte); m = TAILQ_NEXT(m, listq); } - rw_wunlock(&pvh_global_lock); + rw_runlock(&pvh_global_lock); PMAP_UNLOCK(pmap); } @@ -3528,10 +3657,10 @@ void pmap_enter_quick(pmap_t pmap, vm_offset_t va, vm_page_t m, vm_prot_t prot) { - rw_wlock(&pvh_global_lock); + rw_rlock(&pvh_global_lock); PMAP_LOCK(pmap); (void)pmap_enter_quick_locked(pmap, va, m, prot, NULL); - rw_wunlock(&pvh_global_lock); + rw_runlock(&pvh_global_lock); PMAP_UNLOCK(pmap); } @@ -3546,7 +3675,7 @@ pmap_enter_quick_locked(pmap_t pmap, vm_ KASSERT(va < kmi.clean_sva || va >= kmi.clean_eva || (m->oflags & VPO_UNMANAGED) != 0, ("pmap_enter_quick_locked: managed mapping within the clean submap")); - rw_assert(&pvh_global_lock, RA_WLOCKED); + rw_assert(&pvh_global_lock, RA_LOCKED); PMAP_LOCK_ASSERT(pmap, MA_OWNED); /* @@ -3724,7 +3853,7 @@ pmap_object_init_pt(pmap_t pmap, vm_offs pde_store(pde, pa | PG_PS | PG_M | PG_A | PG_U | PG_RW | PG_V); pmap_resident_count_inc(pmap, NBPDR / PAGE_SIZE); - pmap_pde_mappings++; + atomic_add_long(&pmap_pde_mappings, 1); } else { /* Continue on if the PDE is already valid. */ pdpg->wire_count--; @@ -3750,9 +3879,9 @@ pmap_change_wiring(pmap_t pmap, vm_offse { pd_entry_t *pde; pt_entry_t *pte; - boolean_t are_queues_locked; + boolean_t pv_lists_locked; - are_queues_locked = FALSE; + pv_lists_locked = FALSE; /* * Wiring is not a hardware characteristic so there is no need to @@ -3763,11 +3892,11 @@ retry: pde = pmap_pde(pmap, va); if ((*pde & PG_PS) != 0) { if (!wired != ((*pde & PG_W) == 0)) { - if (!are_queues_locked) { - are_queues_locked = TRUE; - if (!rw_try_wlock(&pvh_global_lock)) { + if (!pv_lists_locked) { + pv_lists_locked = TRUE; + if (!rw_try_rlock(&pvh_global_lock)) { PMAP_UNLOCK(pmap); - rw_wlock(&pvh_global_lock); + rw_rlock(&pvh_global_lock); goto retry; } } @@ -3785,8 +3914,8 @@ retry: atomic_clear_long(pte, PG_W); } out: - if (are_queues_locked) - rw_wunlock(&pvh_global_lock); + if (pv_lists_locked) + rw_runlock(&pvh_global_lock); PMAP_UNLOCK(pmap); } @@ -3810,7 +3939,7 @@ pmap_copy(pmap_t dst_pmap, pmap_t src_pm if (dst_addr != src_addr) return; - rw_wlock(&pvh_global_lock); + rw_rlock(&pvh_global_lock); if (dst_pmap < src_pmap) { PMAP_LOCK(dst_pmap); PMAP_LOCK(src_pmap); @@ -3926,7 +4055,7 @@ pmap_copy(pmap_t dst_pmap, pmap_t src_pm } } out: - rw_wunlock(&pvh_global_lock); + rw_runlock(&pvh_global_lock); PMAP_UNLOCK(src_pmap); PMAP_UNLOCK(dst_pmap); } @@ -4000,6 +4129,7 @@ boolean_t pmap_page_exists_quick(pmap_t pmap, vm_page_t m) { struct md_page *pvh; + struct mtx *mtx; pv_entry_t pv; int loops = 0; boolean_t rv; @@ -4007,7 +4137,9 @@ pmap_page_exists_quick(pmap_t pmap, vm_p KASSERT((m->oflags & VPO_UNMANAGED) == 0, ("pmap_page_exists_quick: page %p is not managed", m)); rv = FALSE; - rw_wlock(&pvh_global_lock); + mtx = VM_PAGE_TO_PV_LIST_MTX(m); + rw_rlock(&pvh_global_lock); + mtx_lock(mtx); TAILQ_FOREACH(pv, &m->md.pv_list, pv_list) { if (PV_PMAP(pv) == pmap) { rv = TRUE; @@ -4029,7 +4161,8 @@ pmap_page_exists_quick(pmap_t pmap, vm_p break; } } - rw_wunlock(&pvh_global_lock); + mtx_unlock(mtx); + rw_runlock(&pvh_global_lock); return (rv); } @@ -4088,15 +4221,19 @@ pmap_pvh_wired_mappings(struct md_page * boolean_t pmap_page_is_mapped(vm_page_t m) { + struct mtx *mtx; boolean_t rv; if ((m->oflags & VPO_UNMANAGED) != 0) return (FALSE); - rw_wlock(&pvh_global_lock); + mtx = VM_PAGE_TO_PV_LIST_MTX(m); + rw_rlock(&pvh_global_lock); + mtx_lock(mtx); rv = !TAILQ_EMPTY(&m->md.pv_list) || ((m->flags & PG_FICTITIOUS) == 0 && !TAILQ_EMPTY(&pa_to_pvh(VM_PAGE_TO_PHYS(m))->pv_list)); - rw_wunlock(&pvh_global_lock); + mtx_unlock(mtx); + rw_runlock(&pvh_global_lock); return (rv); } @@ -4117,6 +4254,7 @@ pmap_remove_pages(pmap_t pmap) vm_page_t m, mpte, mt; pv_entry_t pv; struct md_page *pvh; + struct mtx *mtx; struct pv_chunk *pc, *npc; int field, idx; int64_t bit; @@ -4127,7 +4265,7 @@ pmap_remove_pages(pmap_t pmap) printf("warning: pmap_remove_pages called with non-current pmap\n"); return; } - rw_wlock(&pvh_global_lock); + rw_rlock(&pvh_global_lock); PMAP_LOCK(pmap); TAILQ_FOREACH_SAFE(pc, &pmap->pm_pvchunk, pc_list, npc) { allfree = 1; @@ -4176,7 +4314,7 @@ pmap_remove_pages(pmap_t pmap) pte_clear(pte); /* - * Update the vm_page_t clean/reference bits. + * Update the vm_page_t clean bits. */ if ((tpte & (PG_M | PG_RW)) == (PG_M | PG_RW)) { if ((tpte & PG_PS) != 0) { @@ -4187,12 +4325,14 @@ pmap_remove_pages(pmap_t pmap) } /* Mark free */ - PV_STAT(pv_entry_frees++); - PV_STAT(pv_entry_spare++); - pv_entry_count--; + PV_STAT(atomic_add_long(&pv_entry_frees, 1)); + PV_STAT(atomic_add_int(&pv_entry_spare, 1)); + atomic_subtract_long(&pv_entry_count, 1); pc->pc_map[field] |= bitmask; if ((tpte & PG_PS) != 0) { pmap_resident_count_dec(pmap, NBPDR / PAGE_SIZE); + mtx = PHYS_TO_PV_LIST_MTX(tpte & PG_PS_FRAME); + mtx_lock(mtx); pvh = pa_to_pvh(tpte & PG_PS_FRAME); TAILQ_REMOVE(&pvh->pv_list, pv, pv_list); if (TAILQ_EMPTY(&pvh->pv_list)) { @@ -4200,6 +4340,7 @@ pmap_remove_pages(pmap_t pmap) if (TAILQ_EMPTY(&mt->md.pv_list)) vm_page_aflag_clear(mt, PGA_WRITEABLE); } + mtx_unlock(mtx); mpte = pmap_lookup_pt_page(pmap, pv->pv_va); if (mpte != NULL) { pmap_remove_pt_page(pmap, mpte); @@ -4212,6 +4353,8 @@ pmap_remove_pages(pmap_t pmap) } } else { pmap_resident_count_dec(pmap, 1); + mtx = VM_PAGE_TO_PV_LIST_MTX(m); + mtx_lock(mtx); TAILQ_REMOVE(&m->md.pv_list, pv, pv_list); if (TAILQ_EMPTY(&m->md.pv_list) && (m->flags & PG_FICTITIOUS) == 0) { @@ -4219,6 +4362,7 @@ pmap_remove_pages(pmap_t pmap) if (TAILQ_EMPTY(&pvh->pv_list)) vm_page_aflag_clear(m, PGA_WRITEABLE); } + mtx_unlock(mtx); } pmap_unuse_pt(pmap, pv->pv_va, ptepde, &free); } @@ -4229,7 +4373,7 @@ pmap_remove_pages(pmap_t pmap) } } pmap_invalidate_all(pmap); - rw_wunlock(&pvh_global_lock); + rw_runlock(&pvh_global_lock); PMAP_UNLOCK(pmap); pmap_free_zero_pages(free); } @@ -4406,8 +4550,9 @@ small_mappings: pmap = PV_PMAP(pv); PMAP_LOCK(pmap); pde = pmap_pde(pmap, pv->pv_va); - KASSERT((*pde & PG_PS) == 0, ("pmap_clear_write: found" - " a 2mpage in page %p's pv list", m)); + KASSERT((*pde & PG_PS) == 0, + ("pmap_remove_write: found a 2mpage in page %p's pv list", + m)); pte = pmap_pde_to_pte(pde, pv->pv_va); retry: oldpte = *pte; Modified: user/alc/pvh_global_lock/sys/amd64/include/pmap.h ============================================================================== --- user/alc/pvh_global_lock/sys/amd64/include/pmap.h Sun Jun 10 23:48:14 2012 (r236862) +++ user/alc/pvh_global_lock/sys/amd64/include/pmap.h Mon Jun 11 00:16:05 2012 (r236863) @@ -264,6 +264,8 @@ typedef struct pmap *pmap_t; extern struct pmap kernel_pmap_store; #define kernel_pmap (&kernel_pmap_store) +#define PMAP_ASSERT_LOCKED(pmap) \ + mtx_assert(&(pmap)->pm_mtx, MA_OWNED) #define PMAP_LOCK(pmap) mtx_lock(&(pmap)->pm_mtx) #define PMAP_LOCK_ASSERT(pmap, type) \ mtx_assert(&(pmap)->pm_mtx, (type)) Modified: user/alc/pvh_global_lock/sys/i386/i386/pmap.c ============================================================================== --- user/alc/pvh_global_lock/sys/i386/i386/pmap.c Sun Jun 10 23:48:14 2012 (r236862) +++ user/alc/pvh_global_lock/sys/i386/i386/pmap.c Mon Jun 11 00:16:05 2012 (r236863) @@ -409,7 +409,7 @@ pmap_bootstrap(vm_paddr_t firstaddr) /* * Initialize the global pv list lock. */ - rw_init(&pvh_global_lock, "pvh global"); + rw_init(&pvh_global_lock, "pv global"); *** DIFF OUTPUT TRUNCATED AT 1000 LINES *** From owner-svn-src-user@FreeBSD.ORG Mon Jun 11 04:11:46 2012 Return-Path: Delivered-To: svn-src-user@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [69.147.83.52]) by hub.freebsd.org (Postfix) with ESMTP id E8472106566C; Mon, 11 Jun 2012 04:11:46 +0000 (UTC) (envelope-from dougb@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id D35CC8FC08; Mon, 11 Jun 2012 04:11:46 +0000 (UTC) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.4/8.14.4) with ESMTP id q5B4Bkub041269; Mon, 11 Jun 2012 04:11:46 GMT (envelope-from dougb@svn.freebsd.org) Received: (from dougb@localhost) by svn.freebsd.org (8.14.4/8.14.4/Submit) id q5B4BkwB041267; Mon, 11 Jun 2012 04:11:46 GMT (envelope-from dougb@svn.freebsd.org) Message-Id: <201206110411.q5B4BkwB041267@svn.freebsd.org> From: Doug Barton Date: Mon, 11 Jun 2012 04:11:46 +0000 (UTC) To: src-committers@freebsd.org, svn-src-user@freebsd.org X-SVN-Group: user MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r236868 - user/dougb/portmaster X-BeenThere: svn-src-user@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "SVN commit messages for the experimental " user" src tree" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 11 Jun 2012 04:11:47 -0000 Author: dougb Date: Mon Jun 11 04:11:46 2012 New Revision: 236868 URL: http://svn.freebsd.org/changeset/base/236868 Log: In iport_from_origin() work around pkg_info returning 0 even if there is no match In clean_build_only_list() remove ports that are already installed to prevent them from being spuriously removed. [1] Reported by: avilla [1] Modified: user/dougb/portmaster/portmaster Modified: user/dougb/portmaster/portmaster ============================================================================== --- user/dougb/portmaster/portmaster Mon Jun 11 03:10:15 2012 (r236867) +++ user/dougb/portmaster/portmaster Mon Jun 11 04:11:46 2012 (r236868) @@ -897,7 +897,7 @@ iport_from_origin () { if ! dir=`grep -l "@comment ORIGIN:${1}$" $pdb/${sn}*/+CONTENTS 2>/dev/null`; then if ! dir=`grep -l "@comment ORIGIN:${1}$" $pdb/*/+CONTENTS 2>/dev/null`; then - dir=`pkg_info -q -O $1` || return 1 + dir=`pkg_info -q -O $1` ; [ -n "$dir" ] || return 1 fi fi @@ -2351,6 +2351,15 @@ clean_build_only_list () { done build_only_dl_g=" `uniquify_list $temp_bodlg` " + unset temp_bodlg + + # We do not want already installed ports to end up on this list + for dep in $build_only_dl_g; do + iport_from_origin ${dep#$pd/} >/dev/null && continue + temp_bodlg="$temp_bodlg $dep" + done + + build_only_dl_g="$temp_bodlg " } gen_dep_list () { From owner-svn-src-user@FreeBSD.ORG Mon Jun 11 08:03:14 2012 Return-Path: Delivered-To: svn-src-user@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [69.147.83.52]) by hub.freebsd.org (Postfix) with ESMTP id F267510656D6; Mon, 11 Jun 2012 08:03:14 +0000 (UTC) (envelope-from dougb@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id DEF688FC14; Mon, 11 Jun 2012 08:03:14 +0000 (UTC) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.4/8.14.4) with ESMTP id q5B83ENt051869; Mon, 11 Jun 2012 08:03:14 GMT (envelope-from dougb@svn.freebsd.org) Received: (from dougb@localhost) by svn.freebsd.org (8.14.4/8.14.4/Submit) id q5B83ET8051867; Mon, 11 Jun 2012 08:03:14 GMT (envelope-from dougb@svn.freebsd.org) Message-Id: <201206110803.q5B83ET8051867@svn.freebsd.org> From: Doug Barton Date: Mon, 11 Jun 2012 08:03:14 +0000 (UTC) To: src-committers@freebsd.org, svn-src-user@freebsd.org X-SVN-Group: user MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r236881 - user/dougb/portmaster X-BeenThere: svn-src-user@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "SVN commit messages for the experimental " user" src tree" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 11 Jun 2012 08:03:15 -0000 Author: dougb Date: Mon Jun 11 08:03:14 2012 New Revision: 236881 URL: http://svn.freebsd.org/changeset/base/236881 Log: Move the test for installed ports on the build-only dep list to a better location, after the code that checks to see if any ports on the list are depended on. Also, we only want to disqualify an installed port if we're doing --delete-build-only. If the port is already installed and needs an update, --packages-build still applies. Modified: user/dougb/portmaster/portmaster Modified: user/dougb/portmaster/portmaster ============================================================================== --- user/dougb/portmaster/portmaster Mon Jun 11 07:44:16 2012 (r236880) +++ user/dougb/portmaster/portmaster Mon Jun 11 08:03:14 2012 (r236881) @@ -2351,15 +2351,6 @@ clean_build_only_list () { done build_only_dl_g=" `uniquify_list $temp_bodlg` " - unset temp_bodlg - - # We do not want already installed ports to end up on this list - for dep in $build_only_dl_g; do - iport_from_origin ${dep#$pd/} >/dev/null && continue - temp_bodlg="$temp_bodlg $dep" - done - - build_only_dl_g="$temp_bodlg " } gen_dep_list () { @@ -2625,8 +2616,10 @@ post_first_pass () { done for dep in $build_only_dl_g; do - grep -q "@comment DEPORIGIN:${dep#$pd/}$" $pdb/*/+CONTENTS || - temp_bodlg="$temp_bodlg $dep" + grep -q "@comment DEPORIGIN:${dep#$pd/}$" $pdb/*/+CONTENTS && continue + [ -n "$PM_DEL_BUILD_ONLY" ] && + iport_from_origin ${dep#$pd/} >/dev/null && continue + temp_bodlg="$temp_bodlg $dep" done build_only_dl_g=" `uniquify_list $temp_bodlg` " From owner-svn-src-user@FreeBSD.ORG Mon Jun 11 08:42:12 2012 Return-Path: Delivered-To: svn-src-user@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 334F7106566B; Mon, 11 Jun 2012 08:42:12 +0000 (UTC) (envelope-from dougb@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id 1F53E8FC16; Mon, 11 Jun 2012 08:42:12 +0000 (UTC) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.4/8.14.4) with ESMTP id q5B8gBxG053578; Mon, 11 Jun 2012 08:42:11 GMT (envelope-from dougb@svn.freebsd.org) Received: (from dougb@localhost) by svn.freebsd.org (8.14.4/8.14.4/Submit) id q5B8gB7P053576; Mon, 11 Jun 2012 08:42:11 GMT (envelope-from dougb@svn.freebsd.org) Message-Id: <201206110842.q5B8gB7P053576@svn.freebsd.org> From: Doug Barton Date: Mon, 11 Jun 2012 08:42:11 +0000 (UTC) To: src-committers@freebsd.org, svn-src-user@freebsd.org X-SVN-Group: user MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r236882 - user/dougb/portmaster X-BeenThere: svn-src-user@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "SVN commit messages for the experimental " user" src tree" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 11 Jun 2012 08:42:12 -0000 Author: dougb Date: Mon Jun 11 08:42:11 2012 New Revision: 236882 URL: http://svn.freebsd.org/changeset/base/236882 Log: Give a better error message if pm_mktemp() fails Add some whitespace after the message about removing empty directories Modified: user/dougb/portmaster/portmaster Modified: user/dougb/portmaster/portmaster ============================================================================== --- user/dougb/portmaster/portmaster Mon Jun 11 08:03:14 2012 (r236881) +++ user/dougb/portmaster/portmaster Mon Jun 11 08:42:11 2012 (r236882) @@ -59,7 +59,7 @@ version () { } fail () { - echo '' ; echo "===>>> $*" ; echo "===>>> Aborting update" + echo -e "\n===>>> $*" ; echo "===>>> Aborting update" [ "$$" -eq "$PM_PARENT_PID" ] && trap_exit fail safe_exit 1 } @@ -167,7 +167,7 @@ parent_exit () { sleep 2 done - pm_v "===>>> Removing empty directories from WRKDIRPREFIX" + pm_v "===>>> Removing empty directories from WRKDIRPREFIX" ; pm_v find $PM_WRKDIRPREFIX -depth -mindepth 1 -type d -empty -delete 2>/dev/null fi @@ -296,8 +296,8 @@ pm_make () { ( unset -v CUR_DEPS INSTA /usr/bin/nice /usr/bin/make $PM_MAKE_ARGS $*; ); } pm_make_b () { /usr/bin/make $PM_MAKE_ARGS BEFOREPORTMK=bpm $*; } pm_mktemp () { - pm_mktemp_file=`/usr/bin/mktemp -t f-${PM_PARENT_PID}-$1 2>/dev/null` || - fail "mktemp for $1 failed" + pm_mktemp_file=`/usr/bin/mktemp -t f-${PM_PARENT_PID}-$1 2>&1` || + fail "mktemp for $1 failed:\n ${pm_mktemp_file#mktemp: }" } pm_unlink () { [ -e "$1" ] && /bin/unlink $1; } From owner-svn-src-user@FreeBSD.ORG Mon Jun 11 08:52:21 2012 Return-Path: Delivered-To: svn-src-user@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id AC5D11065678; Mon, 11 Jun 2012 08:52:21 +0000 (UTC) (envelope-from dougb@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id 97ECA8FC14; Mon, 11 Jun 2012 08:52:21 +0000 (UTC) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.4/8.14.4) with ESMTP id q5B8qLTv054029; Mon, 11 Jun 2012 08:52:21 GMT (envelope-from dougb@svn.freebsd.org) Received: (from dougb@localhost) by svn.freebsd.org (8.14.4/8.14.4/Submit) id q5B8qLEI054027; Mon, 11 Jun 2012 08:52:21 GMT (envelope-from dougb@svn.freebsd.org) Message-Id: <201206110852.q5B8qLEI054027@svn.freebsd.org> From: Doug Barton Date: Mon, 11 Jun 2012 08:52:21 +0000 (UTC) To: src-committers@freebsd.org, svn-src-user@freebsd.org X-SVN-Group: user MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r236883 - user/dougb/portmaster X-BeenThere: svn-src-user@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "SVN commit messages for the experimental " user" src tree" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 11 Jun 2012 08:52:21 -0000 Author: dougb Date: Mon Jun 11 08:52:21 2012 New Revision: 236883 URL: http://svn.freebsd.org/changeset/base/236883 Log: In multiport(), count the number of ports in worklist_tmp, then use that for the first progress update. The number might get revised due to the user opting out of an update that matches a glob pattern, but it's better than doing 1/1, 2/2, etc. in the first pass. Modified: user/dougb/portmaster/portmaster Modified: user/dougb/portmaster/portmaster ============================================================================== --- user/dougb/portmaster/portmaster Mon Jun 11 08:42:11 2012 (r236882) +++ user/dougb/portmaster/portmaster Mon Jun 11 08:52:21 2012 (r236883) @@ -2730,6 +2730,7 @@ multiport () { esac done + numports=0 for port in $worklist_temp; do check_exclude $port || continue check_interactive $port || continue @@ -2753,6 +2754,8 @@ multiport () { fi fi + numports=$(( $numports + 1 )) + worklist="$worklist $port" portlist="${portlist}\t${port}\n" PM_MULTI_PORTS="${PM_MULTI_PORTS}${port}:" @@ -2784,7 +2787,7 @@ multiport () { [ -n "$PM_URB" ] && export PM_URB - numports=0 + num=0 for port in $worklist; do case "$port" in */*) origin=$port ;; @@ -2793,8 +2796,8 @@ multiport () { case "$PM_NEEDS_UPDATE" in *\ $origin\ *) continue ;; esac - numports=$(( $numports + 1 )) - init_term_printf "$port ${numports}/${numports}" + num=$(( $num + 1 )) + init_term_printf "$port ${num}/${numports}" ($0 $ARGS $port) || update_failed=update_failed . $IPC_SAVE [ -n "$update_failed" ] && fail "Update for $port failed" From owner-svn-src-user@FreeBSD.ORG Mon Jun 11 21:56:38 2012 Return-Path: Delivered-To: svn-src-user@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [69.147.83.52]) by hub.freebsd.org (Postfix) with ESMTP id 2852B106564A; Mon, 11 Jun 2012 21:56:38 +0000 (UTC) (envelope-from alc@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id 106F78FC1C; Mon, 11 Jun 2012 21:56:38 +0000 (UTC) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.4/8.14.4) with ESMTP id q5BLucIj012837; Mon, 11 Jun 2012 21:56:38 GMT (envelope-from alc@svn.freebsd.org) Received: (from alc@localhost) by svn.freebsd.org (8.14.4/8.14.4/Submit) id q5BLubWu012828; Mon, 11 Jun 2012 21:56:37 GMT (envelope-from alc@svn.freebsd.org) Message-Id: <201206112156.q5BLubWu012828@svn.freebsd.org> From: Alan Cox Date: Mon, 11 Jun 2012 21:56:37 +0000 (UTC) To: src-committers@freebsd.org, svn-src-user@freebsd.org X-SVN-Group: user MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r236934 - in user/alc/pvh_global_lock: . bin/rcp cddl/contrib/opensolaris/cmd/zdb cddl/contrib/opensolaris/cmd/zhack cddl/contrib/opensolaris/cmd/zpool cddl/contrib/opensolaris/cmd/ztes... X-BeenThere: svn-src-user@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "SVN commit messages for the experimental " user" src tree" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 11 Jun 2012 21:56:38 -0000 Author: alc Date: Mon Jun 11 21:56:37 2012 New Revision: 236934 URL: http://svn.freebsd.org/changeset/base/236934 Log: MFC r236933 Added: user/alc/pvh_global_lock/cddl/contrib/opensolaris/cmd/zhack/ - copied from r236933, head/cddl/contrib/opensolaris/cmd/zhack/ user/alc/pvh_global_lock/cddl/contrib/opensolaris/cmd/zpool/zpool-features.5 - copied unchanged from r236933, head/cddl/contrib/opensolaris/cmd/zpool/zpool-features.5 user/alc/pvh_global_lock/cddl/usr.sbin/zhack/ - copied from r236933, head/cddl/usr.sbin/zhack/ user/alc/pvh_global_lock/sys/cddl/contrib/opensolaris/common/nvpair/fnvpair.c - copied unchanged from r236933, head/sys/cddl/contrib/opensolaris/common/nvpair/fnvpair.c user/alc/pvh_global_lock/sys/cddl/contrib/opensolaris/common/zfs/zfeature_common.c - copied unchanged from r236933, head/sys/cddl/contrib/opensolaris/common/zfs/zfeature_common.c user/alc/pvh_global_lock/sys/cddl/contrib/opensolaris/common/zfs/zfeature_common.h - copied unchanged from r236933, head/sys/cddl/contrib/opensolaris/common/zfs/zfeature_common.h user/alc/pvh_global_lock/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/bptree.c - copied unchanged from r236933, head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/bptree.c user/alc/pvh_global_lock/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/bptree.h - copied unchanged from r236933, head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/bptree.h user/alc/pvh_global_lock/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/zfeature.h - copied unchanged from r236933, head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/zfeature.h user/alc/pvh_global_lock/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zfeature.c - copied unchanged from r236933, head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zfeature.c Modified: user/alc/pvh_global_lock/UPDATING user/alc/pvh_global_lock/bin/rcp/rcp.1 user/alc/pvh_global_lock/cddl/contrib/opensolaris/cmd/zdb/zdb.c user/alc/pvh_global_lock/cddl/contrib/opensolaris/cmd/zpool/zpool.8 user/alc/pvh_global_lock/cddl/contrib/opensolaris/cmd/zpool/zpool_main.c user/alc/pvh_global_lock/cddl/contrib/opensolaris/cmd/ztest/ztest.c user/alc/pvh_global_lock/cddl/contrib/opensolaris/lib/libnvpair/libnvpair.c user/alc/pvh_global_lock/cddl/contrib/opensolaris/lib/libzfs/common/libzfs.h user/alc/pvh_global_lock/cddl/contrib/opensolaris/lib/libzfs/common/libzfs_config.c user/alc/pvh_global_lock/cddl/contrib/opensolaris/lib/libzfs/common/libzfs_pool.c user/alc/pvh_global_lock/cddl/contrib/opensolaris/lib/libzfs/common/libzfs_status.c user/alc/pvh_global_lock/cddl/contrib/opensolaris/lib/libzfs/common/libzfs_util.c user/alc/pvh_global_lock/cddl/contrib/opensolaris/lib/libzpool/common/kernel.c user/alc/pvh_global_lock/cddl/lib/libnvpair/Makefile user/alc/pvh_global_lock/cddl/lib/libzfs/Makefile user/alc/pvh_global_lock/cddl/sbin/zpool/Makefile user/alc/pvh_global_lock/cddl/usr.bin/ztest/Makefile user/alc/pvh_global_lock/cddl/usr.sbin/Makefile user/alc/pvh_global_lock/gnu/lib/libsupc++/Version.map user/alc/pvh_global_lock/lib/libc/locale/setrunelocale.c user/alc/pvh_global_lock/lib/libcxxrt/Version.map user/alc/pvh_global_lock/libexec/rshd/rshd.8 user/alc/pvh_global_lock/sbin/hastd/synch.h user/alc/pvh_global_lock/sys/amd64/amd64/pmap.c user/alc/pvh_global_lock/sys/boot/zfs/zfsimpl.c user/alc/pvh_global_lock/sys/cddl/boot/zfs/zfsimpl.h user/alc/pvh_global_lock/sys/cddl/contrib/opensolaris/common/zfs/zpool_prop.c user/alc/pvh_global_lock/sys/cddl/contrib/opensolaris/uts/common/Makefile.files user/alc/pvh_global_lock/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/arc.c user/alc/pvh_global_lock/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/dbuf.c user/alc/pvh_global_lock/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/ddt.c user/alc/pvh_global_lock/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/dmu.c user/alc/pvh_global_lock/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/dmu_send.c user/alc/pvh_global_lock/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/dmu_traverse.c user/alc/pvh_global_lock/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/dmu_tx.c user/alc/pvh_global_lock/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/dnode.c user/alc/pvh_global_lock/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/dnode_sync.c user/alc/pvh_global_lock/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/dsl_dataset.c user/alc/pvh_global_lock/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/dsl_deleg.c user/alc/pvh_global_lock/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/dsl_pool.c user/alc/pvh_global_lock/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/dsl_scan.c user/alc/pvh_global_lock/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sa.c user/alc/pvh_global_lock/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/spa.c user/alc/pvh_global_lock/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/spa_config.c user/alc/pvh_global_lock/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/spa_misc.c user/alc/pvh_global_lock/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/dmu.h user/alc/pvh_global_lock/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/dmu_traverse.h user/alc/pvh_global_lock/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/dsl_dataset.h user/alc/pvh_global_lock/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/dsl_pool.h user/alc/pvh_global_lock/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/dsl_scan.h user/alc/pvh_global_lock/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/spa.h user/alc/pvh_global_lock/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/spa_impl.h user/alc/pvh_global_lock/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/vdev.h user/alc/pvh_global_lock/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/vdev_impl.h user/alc/pvh_global_lock/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/zap.h user/alc/pvh_global_lock/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/zio.h user/alc/pvh_global_lock/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/vdev.c user/alc/pvh_global_lock/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/vdev_label.c user/alc/pvh_global_lock/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zap.c user/alc/pvh_global_lock/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zap_micro.c user/alc/pvh_global_lock/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zfs_ioctl.c user/alc/pvh_global_lock/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zfs_vfsops.c user/alc/pvh_global_lock/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zio.c user/alc/pvh_global_lock/sys/cddl/contrib/opensolaris/uts/common/sys/fs/zfs.h user/alc/pvh_global_lock/sys/cddl/contrib/opensolaris/uts/common/sys/nvpair.h user/alc/pvh_global_lock/sys/dev/ath/if_ath_debug.c user/alc/pvh_global_lock/sys/dev/ath/if_ath_tx.c user/alc/pvh_global_lock/sys/dev/ath/if_ath_tx.h user/alc/pvh_global_lock/sys/dev/ath/if_ath_tx_ht.c user/alc/pvh_global_lock/sys/dev/ath/if_athvar.h user/alc/pvh_global_lock/sys/kern/kern_descrip.c user/alc/pvh_global_lock/sys/kern/subr_smp.c user/alc/pvh_global_lock/sys/kern/subr_trap.c user/alc/pvh_global_lock/sys/kern/sys_capability.c user/alc/pvh_global_lock/sys/kern/uipc_syscalls.c user/alc/pvh_global_lock/sys/kern/vfs_syscalls.c user/alc/pvh_global_lock/sys/libkern/iconv.c user/alc/pvh_global_lock/sys/modules/zfs/Makefile user/alc/pvh_global_lock/sys/net/if_bridge.c user/alc/pvh_global_lock/sys/sys/filedesc.h user/alc/pvh_global_lock/usr.bin/cut/cut.1 user/alc/pvh_global_lock/usr.bin/cut/cut.c user/alc/pvh_global_lock/usr.bin/find/find.1 user/alc/pvh_global_lock/usr.bin/login/login.1 user/alc/pvh_global_lock/usr.bin/passwd/passwd.1 user/alc/pvh_global_lock/usr.bin/rlogin/rlogin.1 user/alc/pvh_global_lock/usr.bin/rsh/rsh.1 Directory Properties: user/alc/pvh_global_lock/ (props changed) user/alc/pvh_global_lock/cddl/contrib/opensolaris/ (props changed) user/alc/pvh_global_lock/gnu/lib/ (props changed) user/alc/pvh_global_lock/lib/libc/ (props changed) user/alc/pvh_global_lock/sbin/ (props changed) user/alc/pvh_global_lock/sys/ (props changed) user/alc/pvh_global_lock/sys/boot/ (props changed) user/alc/pvh_global_lock/sys/cddl/contrib/opensolaris/ (props changed) Modified: user/alc/pvh_global_lock/UPDATING ============================================================================== --- user/alc/pvh_global_lock/UPDATING Mon Jun 11 21:44:24 2012 (r236933) +++ user/alc/pvh_global_lock/UPDATING Mon Jun 11 21:56:37 2012 (r236934) @@ -24,6 +24,17 @@ NOTE TO PEOPLE WHO THINK THAT FreeBSD 10 disable the most expensive debugging functionality run "ln -s 'abort:false,junk:false' /etc/malloc.conf".) +20120611: + A new version of ZFS (pool version 5000) has been merged to -HEAD. + Starting with this version the old system of ZFS pool versioning + is superseded by "feature flags". This concept enables forward + compatibility against certain future changes in functionality of ZFS + pools. The first read-only compatible "feature flag" for ZFS pools + is named "com.delphix:async_destroy". For more information + read the new zpool-features(5) manual page. + Please refer to the "ZFS notes" section of this file for information + on upgrading boot ZFS pools. + 20120417: The malloc(3) implementation embedded in libc now uses sources imported as contrib/jemalloc. The most disruptive API change is to Modified: user/alc/pvh_global_lock/bin/rcp/rcp.1 ============================================================================== --- user/alc/pvh_global_lock/bin/rcp/rcp.1 Mon Jun 11 21:44:24 2012 (r236933) +++ user/alc/pvh_global_lock/bin/rcp/rcp.1 Mon Jun 11 21:56:37 2012 (r236934) @@ -116,17 +116,11 @@ The .Nm utility handles third party copies, where neither source nor target files are on the current machine. -.Sh FILES -.Bl -tag -width ".Pa /etc/auth.conf" -compact -.It Pa /etc/auth.conf -configure authentication services -.El .Sh SEE ALSO .Xr cp 1 , .Xr ftp 1 , .Xr rlogin 1 , .Xr rsh 1 , -.Xr auth.conf 5 , .Xr hosts.equiv 5 .Sh HISTORY The Modified: user/alc/pvh_global_lock/cddl/contrib/opensolaris/cmd/zdb/zdb.c ============================================================================== --- user/alc/pvh_global_lock/cddl/contrib/opensolaris/cmd/zdb/zdb.c Mon Jun 11 21:44:24 2012 (r236933) +++ user/alc/pvh_global_lock/cddl/contrib/opensolaris/cmd/zdb/zdb.c Mon Jun 11 21:56:37 2012 (r236934) @@ -18,8 +18,10 @@ * * CDDL HEADER END */ + /* * Copyright (c) 2005, 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2012 by Delphix. All rights reserved. */ #include @@ -54,6 +56,7 @@ #include #include #include +#include #undef ZFS_MAXNAMELEN #undef verify #include @@ -63,7 +66,8 @@ #define ZDB_CHECKSUM_NAME(idx) ((idx) < ZIO_CHECKSUM_FUNCTIONS ? \ zio_checksum_table[(idx)].ci_name : "UNKNOWN") #define ZDB_OT_NAME(idx) ((idx) < DMU_OT_NUMTYPES ? \ - dmu_ot[(idx)].ot_name : "UNKNOWN") + dmu_ot[(idx)].ot_name : DMU_OT_IS_VALID(idx) ? \ + dmu_ot_byteswap[DMU_OT_BYTESWAP(idx)].ob_name : "UNKNOWN") #define ZDB_OT_TYPE(idx) ((idx) < DMU_OT_NUMTYPES ? (idx) : DMU_OT_NUMTYPES) #ifndef lint @@ -1088,7 +1092,7 @@ dump_dsl_dataset(objset_t *os, uint64_t ASSERT(size == sizeof (*ds)); crtime = ds->ds_creation_time; - zdb_nicenum(ds->ds_used_bytes, used); + zdb_nicenum(ds->ds_referenced_bytes, used); zdb_nicenum(ds->ds_compressed_bytes, compressed); zdb_nicenum(ds->ds_uncompressed_bytes, uncompressed); zdb_nicenum(ds->ds_unique_bytes, unique); @@ -1132,6 +1136,44 @@ dump_dsl_dataset(objset_t *os, uint64_t /* ARGSUSED */ static int +dump_bptree_cb(void *arg, const blkptr_t *bp, dmu_tx_t *tx) +{ + char blkbuf[BP_SPRINTF_LEN]; + + if (bp->blk_birth != 0) { + sprintf_blkptr(blkbuf, bp); + (void) printf("\t%s\n", blkbuf); + } + return (0); +} + +static void +dump_bptree(objset_t *os, uint64_t obj, char *name) +{ + char bytes[32]; + bptree_phys_t *bt; + dmu_buf_t *db; + + if (dump_opt['d'] < 3) + return; + + VERIFY3U(0, ==, dmu_bonus_hold(os, obj, FTAG, &db)); + bt = db->db_data; + zdb_nicenum(bt->bt_bytes, bytes); + (void) printf("\n %s: %llu datasets, %s\n", + name, (unsigned long long)(bt->bt_end - bt->bt_begin), bytes); + dmu_buf_rele(db, FTAG); + + if (dump_opt['d'] < 5) + return; + + (void) printf("\n"); + + (void) bptree_iterate(os, obj, B_FALSE, dump_bptree_cb, NULL, NULL); +} + +/* ARGSUSED */ +static int dump_bpobj_cb(void *arg, const blkptr_t *bp, dmu_tx_t *tx) { char blkbuf[BP_SPRINTF_LEN]; @@ -1883,11 +1925,13 @@ typedef struct zdb_blkstats { */ #define ZDB_OT_DEFERRED (DMU_OT_NUMTYPES + 0) #define ZDB_OT_DITTO (DMU_OT_NUMTYPES + 1) -#define ZDB_OT_TOTAL (DMU_OT_NUMTYPES + 2) +#define ZDB_OT_OTHER (DMU_OT_NUMTYPES + 2) +#define ZDB_OT_TOTAL (DMU_OT_NUMTYPES + 3) static char *zdb_ot_extname[] = { "deferred free", "dedup ditto", + "other", "Total", }; @@ -1968,9 +2012,10 @@ zdb_blkptr_cb(spa_t *spa, zilog_t *zilog type = BP_GET_TYPE(bp); - zdb_count_block(zcb, zilog, bp, type); + zdb_count_block(zcb, zilog, bp, + (type & DMU_OT_NEWTYPE) ? ZDB_OT_OTHER : type); - is_metadata = (BP_GET_LEVEL(bp) != 0 || dmu_ot[type].ot_metadata); + is_metadata = (BP_GET_LEVEL(bp) != 0 || DMU_OT_IS_METADATA(type)); if (dump_opt['c'] > 1 || (dump_opt['c'] && is_metadata)) { int ioerr; @@ -2197,6 +2242,12 @@ dump_block_stats(spa_t *spa) (void) bpobj_iterate_nofree(&spa->spa_dsl_pool->dp_free_bpobj, count_block_cb, &zcb, NULL); } + if (spa_feature_is_active(spa, + &spa_feature_table[SPA_FEATURE_ASYNC_DESTROY])) { + VERIFY3U(0, ==, bptree_iterate(spa->spa_meta_objset, + spa->spa_dsl_pool->dp_bptree_obj, B_FALSE, count_block_cb, + &zcb, NULL)); + } if (dump_opt['c'] > 1) flags |= TRAVERSE_PREFETCH_DATA; @@ -2373,7 +2424,7 @@ zdb_ddt_add_cb(spa_t *spa, zilog_t *zilo } if (BP_IS_HOLE(bp) || BP_GET_CHECKSUM(bp) == ZIO_CHECKSUM_OFF || - BP_GET_LEVEL(bp) > 0 || dmu_ot[BP_GET_TYPE(bp)].ot_metadata) + BP_GET_LEVEL(bp) > 0 || DMU_OT_IS_METADATA(BP_GET_TYPE(bp))) return (0); ddt_key_fill(&zdde_search.zdde_key, bp); @@ -2478,7 +2529,14 @@ dump_zpool(spa_t *spa) dump_bpobj(&spa->spa_deferred_bpobj, "Deferred frees"); if (spa_version(spa) >= SPA_VERSION_DEADLISTS) { dump_bpobj(&spa->spa_dsl_pool->dp_free_bpobj, - "Pool frees"); + "Pool snapshot frees"); + } + + if (spa_feature_is_active(spa, + &spa_feature_table[SPA_FEATURE_ASYNC_DESTROY])) { + dump_bptree(spa->spa_meta_objset, + spa->spa_dsl_pool->dp_bptree_obj, + "Pool dataset frees"); } dump_dtl(spa->spa_root_vdev, 0); } Copied: user/alc/pvh_global_lock/cddl/contrib/opensolaris/cmd/zpool/zpool-features.5 (from r236933, head/cddl/contrib/opensolaris/cmd/zpool/zpool-features.5) ============================================================================== --- /dev/null 00:00:00 1970 (empty, because file is newly added) +++ user/alc/pvh_global_lock/cddl/contrib/opensolaris/cmd/zpool/zpool-features.5 Mon Jun 11 21:56:37 2012 (r236934, copy of r236933, head/cddl/contrib/opensolaris/cmd/zpool/zpool-features.5) @@ -0,0 +1,174 @@ +'\" te +.\" Copyright (c) 2012, Martin Matuska . +.\" All Rights Reserved. +.\" +.\" The contents of this file are subject to the terms of the +.\" Common Development and Distribution License (the "License"). +.\" You may not use this file except in compliance with the License. +.\" +.\" You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE +.\" or http://www.opensolaris.org/os/licensing. +.\" See the License for the specific language governing permissions +.\" and limitations under the License. +.\" +.\" When distributing Covered Code, include this CDDL HEADER in each +.\" file and include the License file at usr/src/OPENSOLARIS.LICENSE. +.\" If applicable, add the following below this CDDL HEADER, with the +.\" fields enclosed by brackets "[]" replaced with your own identifying +.\" information: Portions Copyright [yyyy] [name of copyright owner] +.\" +.\" Copyright (c) 2012 by Delphix. All rights reserved. +.\" +.\" $FreeBSD$ +.\" +.Dd May 28, 2012 +.Dt ZPOOL-FEATURES 8 +.Os +.Sh NAME +.Nm zpool-features +.Nd ZFS pool feature descriptions +.Sh DESCRIPTION +ZFS pool on\-disk format versions are specified via "features" which replace +the old on\-disk format numbers (the last supported on\-disk format number is +28). +To enable a feature on a pool use the +.Xr zpool 8 +command to set the +.Sy feature@feature_name +property to +.Ar enabled . +.Pp +The pool format does not affect file system version compatibility or the ability +to send file systems between pools. +.Pp +Since most features can be enabled independently of each other the on\-disk +format of the pool is specified by the set of all features marked as +.Sy active +on the pool. If the pool was created by another software version this set may +include unsupported features. +.Ss Identifying features +Every feature has a guid of the form +.Sy com.example:feature_name . +The reverse DNS name ensures that the feature's guid is unique across all ZFS +implementations. When unsupported features are encountered on a pool they will +be identified by their guids. +Refer to the documentation for the ZFS implementation that created the pool +for information about those features. +.Pp +Each supported feature also has a short name. +By convention a feature's short name is the portion of its guid which follows +the ':' (e.g. +.Sy com.example:feature_name +would have the short name +.Sy feature_name ), +however a feature's short name may differ across ZFS implementations if +following the convention would result in name conflicts. +.Ss Feature states +Features can be in one of three states: +.Bl -tag +.It Sy active +This feature's on\-disk format changes are in effect on the pool. +Support for this feature is required to import the pool in read\-write mode. +If this feature is not read-only compatible, support is also required to +import the pool in read\-only mode (see "Read\-only compatibility"). +.It Sy enabled +An administrator has marked this feature as enabled on the pool, but the +feature's on\-disk format changes have not been made yet. +The pool can still be imported by software that does not support this feature, +but changes may be made to the on\-disk format at any time which will move +the feature to the +.Sy active +state. +Some features may support returning to the +.Sy enabled +state after becoming +.Sy active . +See feature\-specific documentation for details. +.It Sy disabled +This feature's on\-disk format changes have not been made and will not be made +unless an administrator moves the feature to the +.Sy enabled +state. +Features cannot be disabled once they have been enabled. +.El +The state of supported features is exposed through pool properties of the form +.Sy feature@short_name . +.Ss Read\-only compatibility +Some features may make on\-disk format changes that do not interfere with other +software's ability to read from the pool. +These features are referred to as "read\-only compatible". +If all unsupported features on a pool are read\-only compatible, the pool can +be imported in read\-only mode by setting the +.Sy readonly +property during import (see +.Xr zpool 8 +for details on importing pools). +.Ss Unsupported features +For each unsupported feature enabled on an imported pool a pool property +named +.Sy unsupported@feature_guid +will indicate why the import was allowed despite the unsupported feature. +Possible values for this property are: +.Bl -tag +.It Sy inactive +The feature is in the +.Sy enabled +state and therefore the pool's on\-disk format is still compatible with +software that does not support this feature. +.It Sy readonly +The feature is read\-only compatible and the pool has been imported in +read\-only mode. +.El +.Ss Feature dependencies +Some features depend on other features being enabled in order to function +properly. +Enabling a feature will automatically enable any features it depends on. +.Sh FEATURES +The following features are supported on this system: +.Bl -tag +.It Sy async_destroy +.Bl -column "READ\-ONLY COMPATIBLE" "com.delphix:async_destroy" +.It GUID Ta com.delphix:async_destroy +.It READ\-ONLY COMPATIBLE Ta yes +.It DEPENDENCIES Ta none +.El +.Pp +Destroying a file system requires traversing all of its data in order to +return its used space to the pool. +Without +.Sy async_destroy +the file system is not fully removed until all space has been reclaimed. +If the destroy operation is interrupted by a reboot or power outage the next +attempt to open the pool will need to complete the destroy operation +synchronously. +.Pp +When +.Sy async_destroy +is enabled the file system's data will be reclaimed by a background process, +allowing the destroy operation to complete without traversing the entire file +system. +The background process is able to resume interrupted destroys after the pool +has been opened, eliminating the need to finish interrupted destroys as part +of the open operation. +The amount of space remaining to be reclaimed by the background process is +available through the +.Sy freeing +property. +.Sh SEE ALSO +.Xr zpool 8 +.Sh AUTHORS +This manual page is a +.Xr mdoc 7 +reimplementation of the +.Tn illumos +manual page +.Em zpool-features(5) , +modified and customized for +.Fx +and licensed under the Common Development and Distribution License +.Pq Tn CDDL . +.Pp +The +.Xr mdoc 7 +implementation of this manual page was initially written by +.An Martin Matuska Aq mm@FreeBSD.org . Modified: user/alc/pvh_global_lock/cddl/contrib/opensolaris/cmd/zpool/zpool.8 ============================================================================== --- user/alc/pvh_global_lock/cddl/contrib/opensolaris/cmd/zpool/zpool.8 Mon Jun 11 21:44:24 2012 (r236933) +++ user/alc/pvh_global_lock/cddl/contrib/opensolaris/cmd/zpool/zpool.8 Mon Jun 11 21:56:37 2012 (r236934) @@ -1,5 +1,5 @@ '\" te -.\" Copyright (c) 2011, Martin Matuska . +.\" Copyright (c) 2012, Martin Matuska . .\" All Rights Reserved. .\" .\" The contents of this file are subject to the terms of the @@ -20,6 +20,7 @@ .\" Copyright (c) 2010, Sun Microsystems, Inc. All Rights Reserved. .\" Copyright 2011, Nexenta Systems, Inc. All Rights Reserved. .\" Copyright (c) 2011, Justin T. Gibbs +.\" Copyright (c) 2012 by Delphix. All Rights Reserved. .\" .\" $FreeBSD$ .\" @@ -47,7 +48,7 @@ .Op Ar device .Nm .Cm create -.Op Fl fn +.Op Fl fnd .Op Fl o Ar property Ns = Ns Ar value .Ar ... .Op Fl O Ar file-system-property Ns = Ns Ar value @@ -537,6 +538,16 @@ value of 1.76 indicates that 1.76 units for a description of the deduplication feature. .It Sy free Number of blocks within the pool that are not allocated. +.It Sy freeing +After a file system or snapshot is destroyed, the space it was using is +returned to the pool asynchronously. +.Sy freeing +is the amount of space remaining to be reclaimed. +Over time +.Sy freeing +will decrease while +.Sy free +increases. .It Sy expandsize This property has currently no value on FreeBSD. .It Sy guid @@ -552,11 +563,16 @@ or .Qq Sy UNAVAIL . .It Sy size Total size of the storage pool. +.It Sy unsupported@ Ns Ar feature_guid +Information about unsupported features that are enabled on the pool. +See +.Xr zpool-features 5 +for details. .It Sy used Amount of storage space used within the pool. .El .Pp -These space usage properties report actual physical space available to the +The space usage properties report actual physical space available to the storage pool. The physical space can be different from the total amount of space that any contained datasets can actually use. The amount of space used in a @@ -653,6 +669,11 @@ Setting it to the special value creates a temporary pool that is never cached, and the special value .Cm '' (empty string) uses the default location. +.It Sy comment Ns = Ns Ar text +A text string consisting of printable ASCII characters that will be stored +such that it is available even if the pool becomes faulted. +An administrator can provide additional information about a pool using this +property. .It Sy dedupditto Ns = Ns Ar number Threshold for the number of block ditto copies. If the reference count for a deduplicated block increases above this number, a new ditto copy of this block @@ -686,6 +707,17 @@ requests that have yet to be committed t .It Sy panic Prints out a message to the console and generates a system crash dump. .El +.It Sy feature@ Ns Ar feature_name Ns = Ns Sy enabled +The value of this property is the current state of +.Ar feature_name . +The only valid value when setting this property is +.Sy enabled +which moves +.Ar feature_name +to the enabled state. +See +.Xr zpool-features 5 +for details on feature states. .It Sy listsnaps Ns = Ns Cm on No | Cm off Controls whether information about snapshots associated with this pool is output when @@ -699,9 +731,9 @@ The current on-disk version of the pool. decreased. The preferred method of updating pools is with the .Qq Nm Cm upgrade command, though this property can be used when a specific version is needed -for backwards compatibility. This property can be any number between 1 and the -current version reported by -.Qo Ic zpool upgrade -v Qc . +for backwards compatibility. +Once feature flags is enabled on a pool this property will no longer have a +value. .El .Sh SUBCOMMANDS All subcommands that modify state are logged persistently to the pool in their @@ -810,7 +842,7 @@ do not actually discard any transactions .It Xo .Nm .Cm create -.Op Fl fn +.Op Fl fnd .Op Fl o Ar property Ns = Ns Ar value .Ar ... .Op Fl O Ar file-system-property Ns = Ns Ar value @@ -859,6 +891,10 @@ The mount point must not exist or must b root dataset cannot be mounted. This can be overridden with the .Fl m option. +.Pp +By default all supported features are enabled on the new pool unless the +.Fl d +option is specified. .Bl -tag -width indent .It Fl f Forces use of @@ -869,6 +905,17 @@ Not all devices can be overridden in thi Displays the configuration that would be used without actually creating the pool. The actual pool creation can still fail due to insufficient privileges or device sharing. +.It Fl d +Do not enable any features on the new pool. +Individual features can be enabled by setting their corresponding properties +to +.Sy enabled +with the +.Fl o +option. +See +.Xr zpool-features 5 +for details about feature properties. .It Xo .Fl o Ar property Ns = Ns Ar value .Op Fl o Ar property Ns = Ns Ar value @@ -1873,6 +1920,7 @@ Invalid command line options were specif .El .Sh SEE ALSO .Xr zfs 8 +.Xr zpool-features 5 .Sh AUTHORS This manual page is a .Xr mdoc 7 Modified: user/alc/pvh_global_lock/cddl/contrib/opensolaris/cmd/zpool/zpool_main.c ============================================================================== --- user/alc/pvh_global_lock/cddl/contrib/opensolaris/cmd/zpool/zpool_main.c Mon Jun 11 21:44:24 2012 (r236933) +++ user/alc/pvh_global_lock/cddl/contrib/opensolaris/cmd/zpool/zpool_main.c Mon Jun 11 21:56:37 2012 (r236934) @@ -54,6 +54,7 @@ #include "zpool_util.h" #include "zfs_comutil.h" +#include "zfeature_common.h" #include "statcommon.h" @@ -207,7 +208,7 @@ get_usage(zpool_help_t idx) { case HELP_CLEAR: return (gettext("\tclear [-nF] [device]\n")); case HELP_CREATE: - return (gettext("\tcreate [-fn] [-o property=value] ... \n" + return (gettext("\tcreate [-fnd] [-o property=value] ... \n" "\t [-O file-system-property=value] ... \n" "\t [-m mountpoint] [-R root] ...\n")); case HELP_DESTROY: @@ -339,6 +340,12 @@ usage(boolean_t requested) /* Iterate over all properties */ (void) zprop_iter(print_prop_cb, fp, B_FALSE, B_TRUE, ZFS_TYPE_POOL); + + (void) fprintf(fp, "\t%-15s ", "feature@..."); + (void) fprintf(fp, "YES disabled | enabled | active\n"); + + (void) fprintf(fp, gettext("\nThe feature@ properties must be " + "appended with a feature name.\nSee zpool-features(5).\n")); } /* @@ -405,12 +412,16 @@ add_prop_list(const char *propname, char proplist = *props; if (poolprop) { - if ((prop = zpool_name_to_prop(propname)) == ZPROP_INVAL) { + if ((prop = zpool_name_to_prop(propname)) == ZPROP_INVAL && + !zpool_prop_feature(propname)) { (void) fprintf(stderr, gettext("property '%s' is " "not a valid pool property\n"), propname); return (2); } - normnm = zpool_prop_to_name(prop); + if (zpool_prop_feature(propname)) + normnm = propname; + else + normnm = zpool_prop_to_name(prop); } else { if ((fprop = zfs_name_to_prop(propname)) != ZPROP_INVAL) { normnm = zfs_prop_to_name(fprop); @@ -701,7 +712,7 @@ errout: } /* - * zpool create [-fn] [-o property=value] ... + * zpool create [-fnd] [-o property=value] ... * [-O file-system-property=value] ... * [-R root] [-m mountpoint] ... * @@ -710,8 +721,10 @@ errout: * were to be created. * -R Create a pool under an alternate root * -m Set default mountpoint for the root dataset. By default it's - * '/' + * '/' * -o Set property=value. + * -d Don't automatically enable all supported pool features + * (individual features can be enabled with -o). * -O Set fsproperty=value in the pool's root file system * * Creates the named pool according to the given vdev specification. The @@ -724,6 +737,7 @@ zpool_do_create(int argc, char **argv) { boolean_t force = B_FALSE; boolean_t dryrun = B_FALSE; + boolean_t enable_all_pool_feat = B_TRUE; int c; nvlist_t *nvroot = NULL; char *poolname; @@ -735,7 +749,7 @@ zpool_do_create(int argc, char **argv) char *propval; /* check options */ - while ((c = getopt(argc, argv, ":fnR:m:o:O:")) != -1) { + while ((c = getopt(argc, argv, ":fndR:m:o:O:")) != -1) { switch (c) { case 'f': force = B_TRUE; @@ -743,6 +757,9 @@ zpool_do_create(int argc, char **argv) case 'n': dryrun = B_TRUE; break; + case 'd': + enable_all_pool_feat = B_FALSE; + break; case 'R': altroot = optarg; if (add_prop_list(zpool_prop_to_name( @@ -770,6 +787,21 @@ zpool_do_create(int argc, char **argv) if (add_prop_list(optarg, propval, &props, B_TRUE)) goto errout; + + /* + * If the user is creating a pool that doesn't support + * feature flags, don't enable any features. + */ + if (zpool_name_to_prop(optarg) == ZPOOL_PROP_VERSION) { + char *end; + u_longlong_t ver; + + ver = strtoull(propval, &end, 10); + if (*end == '\0' && + ver < SPA_VERSION_FEATURES) { + enable_all_pool_feat = B_FALSE; + } + } break; case 'O': if ((propval = strchr(optarg, '=')) == NULL) { @@ -835,7 +867,6 @@ zpool_do_create(int argc, char **argv) goto errout; } - if (altroot != NULL && altroot[0] != '/') { (void) fprintf(stderr, gettext("invalid alternate root '%s': " "must be an absolute path\n"), altroot); @@ -917,6 +948,27 @@ zpool_do_create(int argc, char **argv) /* * Hand off to libzfs. */ + if (enable_all_pool_feat) { + int i; + for (i = 0; i < SPA_FEATURES; i++) { + char propname[MAXPATHLEN]; + zfeature_info_t *feat = &spa_feature_table[i]; + + (void) snprintf(propname, sizeof (propname), + "feature@%s", feat->fi_uname); + + /* + * Skip feature if user specified it manually + * on the command line. + */ + if (nvlist_exists(props, propname)) + continue; + + if (add_prop_list(propname, ZFS_FEATURE_ENABLED, + &props, B_TRUE) != 0) + goto errout; + } + } if (zpool_create(g_zfs, poolname, nvroot, props, fsprops) == 0) { zfs_handle_t *pool = zfs_open(g_zfs, poolname, @@ -1249,6 +1301,10 @@ print_status_config(zpool_handle_t *zhp, (void) printf(gettext("newer version")); break; + case VDEV_AUX_UNSUP_FEAT: + (void) printf(gettext("unsupported feature(s)")); + break; + case VDEV_AUX_SPARED: verify(nvlist_lookup_uint64(nv, ZPOOL_CONFIG_GUID, &cb.cb_guid) == 0); @@ -1366,6 +1422,10 @@ print_import_config(const char *name, nv (void) printf(gettext("newer version")); break; + case VDEV_AUX_UNSUP_FEAT: + (void) printf(gettext("unsupported feature(s)")); + break; + case VDEV_AUX_ERR_EXCEEDED: (void) printf(gettext("too many errors")); break; @@ -1532,6 +1592,20 @@ show_import(nvlist_t *config) "incompatible version.\n")); break; + case ZPOOL_STATUS_UNSUP_FEAT_READ: + (void) printf(gettext("status: The pool uses the following " + "feature(s) not supported on this sytem:\n")); + zpool_print_unsup_feat(config); + break; + + case ZPOOL_STATUS_UNSUP_FEAT_WRITE: + (void) printf(gettext("status: The pool can only be accessed " + "in read-only mode on this system. It\n\tcannot be " + "accessed in read-write mode because it uses the " + "following\n\tfeature(s) not supported on this system:\n")); + zpool_print_unsup_feat(config); + break; + case ZPOOL_STATUS_HOSTID_MISMATCH: (void) printf(gettext(" status: The pool was last accessed by " "another system.\n")); @@ -1589,6 +1663,20 @@ show_import(nvlist_t *config) "newer\n\tsoftware, or recreate the pool from " "backup.\n")); break; + case ZPOOL_STATUS_UNSUP_FEAT_READ: + (void) printf(gettext("action: The pool cannot be " + "imported. Access the pool on a system that " + "supports\n\tthe required feature(s), or recreate " + "the pool from backup.\n")); + break; + case ZPOOL_STATUS_UNSUP_FEAT_WRITE: + (void) printf(gettext("action: The pool cannot be " + "imported in read-write mode. Import the pool " + "with\n" + "\t\"-o readonly=on\", access the pool on a system " + "that supports the\n\trequired feature(s), or " + "recreate the pool from backup.\n")); + break; case ZPOOL_STATUS_MISSING_DEV_R: case ZPOOL_STATUS_MISSING_DEV_NR: case ZPOOL_STATUS_BAD_GUID_SUM: @@ -1664,9 +1752,9 @@ do_import(nvlist_t *config, const char * ZPOOL_CONFIG_POOL_STATE, &state) == 0); verify(nvlist_lookup_uint64(config, ZPOOL_CONFIG_VERSION, &version) == 0); - if (version > SPA_VERSION) { + if (!SPA_VERSION_IS_SUPPORTED(version)) { (void) fprintf(stderr, gettext("cannot import '%s': pool " - "is formatted using a newer ZFS version\n"), name); + "is formatted using an unsupported ZFS version\n"), name); return (1); } else if (state != POOL_STATE_EXPORTED && !(flags & ZFS_IMPORT_ANY_HOST)) { @@ -2601,15 +2689,13 @@ static void print_header(list_cbdata_t *cb) { zprop_list_t *pl = cb->cb_proplist; + char headerbuf[ZPOOL_MAXPROPLEN]; const char *header; boolean_t first = B_TRUE; boolean_t right_justify; size_t width = 0; for (; pl != NULL; pl = pl->pl_next) { - if (pl->pl_prop == ZPROP_INVAL) - continue; - width = pl->pl_width; if (first && cb->cb_verbose) { /* @@ -2624,8 +2710,18 @@ print_header(list_cbdata_t *cb) else first = B_FALSE; - header = zpool_prop_column_name(pl->pl_prop); - right_justify = zpool_prop_align_right(pl->pl_prop); + right_justify = B_FALSE; + if (pl->pl_prop != ZPROP_INVAL) { + header = zpool_prop_column_name(pl->pl_prop); + right_justify = zpool_prop_align_right(pl->pl_prop); + } else { + int i; + + for (i = 0; pl->pl_user_prop[i] != '\0'; i++) + headerbuf[i] = toupper(pl->pl_user_prop[i]); + headerbuf[i] = '\0'; + header = headerbuf; + } if (pl->pl_next == NULL && !right_justify) (void) printf("%s", header); @@ -2685,6 +2781,11 @@ print_pool(zpool_handle_t *zhp, list_cbd propstr = property; right_justify = zpool_prop_align_right(pl->pl_prop); + } else if ((zpool_prop_feature(pl->pl_user_prop) || + zpool_prop_unsupported(pl->pl_user_prop)) && + zpool_prop_get_feature(zhp, pl->pl_user_prop, property, + sizeof (property)) == 0) { + propstr = property; } else { propstr = "-"; } @@ -4024,6 +4125,31 @@ status_callback(zpool_handle_t *zhp, voi "backup.\n")); break; + case ZPOOL_STATUS_UNSUP_FEAT_READ: + (void) printf(gettext("status: The pool cannot be accessed on " + "this system because it uses the\n\tfollowing feature(s) " + "not supported on this system:\n")); + zpool_print_unsup_feat(config); + (void) printf("\n"); + (void) printf(gettext("action: Access the pool from a system " + "that supports the required feature(s),\n\tor restore the " + "pool from backup.\n")); + break; + + case ZPOOL_STATUS_UNSUP_FEAT_WRITE: + (void) printf(gettext("status: The pool can only be accessed " + "in read-only mode on this system. It\n\tcannot be " + "accessed in read-write mode because it uses the " + "following\n\tfeature(s) not supported on this system:\n")); + zpool_print_unsup_feat(config); + (void) printf("\n"); + (void) printf(gettext("action: The pool cannot be accessed in " + "read-write mode. Import the pool with\n" + "\t\"-o readonly=on\", access the pool from a system that " + "supports the\n\trequired feature(s), or restore the " + "pool from backup.\n")); + break; + case ZPOOL_STATUS_FAULTED_DEV_R: (void) printf(gettext("status: One or more devices are " "faulted in response to persistent errors.\n\tSufficient " @@ -4274,7 +4400,8 @@ upgrade_cb(zpool_handle_t *zhp, void *ar verify(nvlist_lookup_uint64(config, ZPOOL_CONFIG_VERSION, &version) == 0); - if (!cbp->cb_newer && version < SPA_VERSION) { + if (!cbp->cb_newer && SPA_VERSION_IS_SUPPORTED(version) && + version != SPA_VERSION) { if (!cbp->cb_all) { if (cbp->cb_first) { (void) printf(gettext("The following pools are " @@ -4303,13 +4430,14 @@ upgrade_cb(zpool_handle_t *zhp, void *ar } } } - } else if (cbp->cb_newer && version > SPA_VERSION) { + } else if (cbp->cb_newer && !SPA_VERSION_IS_SUPPORTED(version)) { assert(!cbp->cb_all); if (cbp->cb_first) { (void) printf(gettext("The following pools are " - "formatted using a newer software version and\n" - "cannot be accessed on the current system.\n\n")); + "formatted using an unsupported software version " + "and\ncannot be accessed on the current " + "system.\n\n")); (void) printf(gettext("VER POOL\n")); (void) printf(gettext("--- ------------\n")); cbp->cb_first = B_FALSE; @@ -4397,8 +4525,8 @@ zpool_do_upgrade(int argc, char **argv) break; case 'V': cb.cb_version = strtoll(optarg, &end, 10); - if (*end != '\0' || cb.cb_version > SPA_VERSION || - cb.cb_version < SPA_VERSION_1) { + if (*end != '\0' || + !SPA_VERSION_IS_SUPPORTED(cb.cb_version)) { (void) fprintf(stderr, gettext("invalid version '%s'\n"), optarg); usage(B_FALSE); @@ -4443,8 +4571,8 @@ zpool_do_upgrade(int argc, char **argv) } } - (void) printf(gettext("This system is currently running " - "ZFS pool version %llu.\n\n"), SPA_VERSION); + (void) printf(gettext("This system supports ZFS pool feature " + "flags.\n\n")); cb.cb_first = B_TRUE; if (showversions) { (void) printf(gettext("The following versions are " @@ -4705,13 +4833,26 @@ get_callback(zpool_handle_t *zhp, void * pl == cbp->cb_proplist) continue; - if (zpool_get_prop(zhp, pl->pl_prop, - value, sizeof (value), &srctype) != 0) - continue; + if (pl->pl_prop == ZPROP_INVAL && + (zpool_prop_feature(pl->pl_user_prop) || + zpool_prop_unsupported(pl->pl_user_prop))) { + srctype = ZPROP_SRC_LOCAL; + + if (zpool_prop_get_feature(zhp, pl->pl_user_prop, + value, sizeof (value)) == 0) { + zprop_print_one_property(zpool_get_name(zhp), + cbp, pl->pl_user_prop, value, srctype, + NULL, NULL); + } + } else { + if (zpool_get_prop(zhp, pl->pl_prop, value, + sizeof (value), &srctype) != 0) + continue; - zprop_print_one_property(zpool_get_name(zhp), cbp, - zpool_prop_to_name(pl->pl_prop), value, srctype, NULL, - NULL); + zprop_print_one_property(zpool_get_name(zhp), cbp, + zpool_prop_to_name(pl->pl_prop), value, srctype, + NULL, NULL); + } } return (0); } @@ -4723,8 +4864,11 @@ zpool_do_get(int argc, char **argv) zprop_list_t fake_name = { 0 }; int ret; - if (argc < 3) + if (argc < 2) { + (void) fprintf(stderr, gettext("missing property " + "argument\n")); usage(B_FALSE); + } cb.cb_first = B_TRUE; cb.cb_sources = ZPROP_SRC_ALL; @@ -4734,7 +4878,7 @@ zpool_do_get(int argc, char **argv) cb.cb_columns[3] = GET_COL_SOURCE; cb.cb_type = ZFS_TYPE_POOL; - if (zprop_get_list(g_zfs, argv[1], &cb.cb_proplist, + if (zprop_get_list(g_zfs, argv[1], &cb.cb_proplist, ZFS_TYPE_POOL) != 0) usage(B_FALSE); Modified: user/alc/pvh_global_lock/cddl/contrib/opensolaris/cmd/ztest/ztest.c ============================================================================== --- user/alc/pvh_global_lock/cddl/contrib/opensolaris/cmd/ztest/ztest.c Mon Jun 11 21:44:24 2012 (r236933) +++ user/alc/pvh_global_lock/cddl/contrib/opensolaris/cmd/ztest/ztest.c Mon Jun 11 21:56:37 2012 (r236934) @@ -107,6 +107,7 @@ #include #include #include +#include #include #include #include @@ -5575,10 +5576,9 @@ make_random_props() { nvlist_t *props; - if (ztest_random(2) == 0) - return (NULL); - VERIFY(nvlist_alloc(&props, NV_UNIQUE_NAME, 0) == 0); + if (ztest_random(2) == 0) + return (props); VERIFY(nvlist_add_uint64(props, "autoreplace", 1) == 0); return (props); @@ -5609,6 +5609,12 @@ ztest_init(ztest_shared_t *zs) nvroot = make_vdev_root(NULL, NULL, ztest_opts.zo_vdev_size, 0, 0, ztest_opts.zo_raidz, zs->zs_mirrors, 1); props = make_random_props(); + for (int i = 0; i < SPA_FEATURES; i++) { + char buf[1024]; + (void) snprintf(buf, sizeof (buf), "feature@%s", + spa_feature_table[i].fi_uname); + VERIFY3U(0, ==, nvlist_add_uint64(props, buf, 0)); + } VERIFY3U(0, ==, spa_create(ztest_opts.zo_pool, nvroot, props, NULL, NULL)); nvlist_free(nvroot); @@ -5616,6 +5622,7 @@ ztest_init(ztest_shared_t *zs) VERIFY3U(0, ==, spa_open(ztest_opts.zo_pool, &spa, FTAG)); zs->zs_metaslab_sz = 1ULL << spa->spa_root_vdev->vdev_child[0]->vdev_ms_shift; + spa_close(spa, FTAG); kernel_fini(); @@ -5654,9 +5661,24 @@ setup_fds(void) ASSERT3U(fd, ==, ZTEST_FD_RAND); } +static int +shared_data_size(ztest_shared_hdr_t *hdr) +{ + int size; + + size = hdr->zh_hdr_size; + size += hdr->zh_opts_size; + size += hdr->zh_size; + size += hdr->zh_stats_size * hdr->zh_stats_count; + size += hdr->zh_ds_size * hdr->zh_ds_count; + + return (size); +} + *** DIFF OUTPUT TRUNCATED AT 1000 LINES *** From owner-svn-src-user@FreeBSD.ORG Tue Jun 12 01:14:00 2012 Return-Path: Delivered-To: svn-src-user@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 441A11065670; Tue, 12 Jun 2012 01:14:00 +0000 (UTC) (envelope-from jceel@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id 2D8328FC08; Tue, 12 Jun 2012 01:14:00 +0000 (UTC) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.4/8.14.4) with ESMTP id q5C1E0vh021262; Tue, 12 Jun 2012 01:14:00 GMT (envelope-from jceel@svn.freebsd.org) Received: (from jceel@localhost) by svn.freebsd.org (8.14.4/8.14.4/Submit) id q5C1DxAR021252; Tue, 12 Jun 2012 01:13:59 GMT (envelope-from jceel@svn.freebsd.org) Message-Id: <201206120113.q5C1DxAR021252@svn.freebsd.org> From: Jakub Wojciech Klama Date: Tue, 12 Jun 2012 01:13:59 +0000 (UTC) To: src-committers@freebsd.org, svn-src-user@freebsd.org X-SVN-Group: user MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r236939 - in user/jceel/soc2012_armv6/sys: arm/arm arm/conf arm/include arm/lpc boot/fdt/dts conf dev/fdt X-BeenThere: svn-src-user@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "SVN commit messages for the experimental " user" src tree" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 12 Jun 2012 01:14:00 -0000 Author: jceel Date: Tue Jun 12 01:13:59 2012 New Revision: 236939 URL: http://svn.freebsd.org/changeset/base/236939 Log: Refactored interrupt routing mechanism. Uses NEWBUS interface pic_if.m similar to powerpc implementation. It's organized in hierarchy where top-level interrupt controller is ARM core itself serving one IRQ. SoC interrupt controllers can bind handlers to this IRQ and provide more multiplexed IRQs to children. Example implementation includes LPC3250 interrupt controller (lpc_intc.c). It's not bug-free, but tested on LPC3250 (arm/lpc) port. Added: user/jceel/soc2012_armv6/sys/arm/arm/intrng.c user/jceel/soc2012_armv6/sys/arm/arm/pic_if.m Modified: user/jceel/soc2012_armv6/sys/arm/arm/nexus.c user/jceel/soc2012_armv6/sys/arm/conf/EA3250 user/jceel/soc2012_armv6/sys/arm/include/fdt.h user/jceel/soc2012_armv6/sys/arm/include/intr.h user/jceel/soc2012_armv6/sys/arm/lpc/lpc_intc.c user/jceel/soc2012_armv6/sys/arm/lpc/lpcreg.h user/jceel/soc2012_armv6/sys/boot/fdt/dts/ea3250.dts user/jceel/soc2012_armv6/sys/conf/files.arm user/jceel/soc2012_armv6/sys/conf/options.arm user/jceel/soc2012_armv6/sys/dev/fdt/fdt_common.c user/jceel/soc2012_armv6/sys/dev/fdt/fdtbus.c user/jceel/soc2012_armv6/sys/dev/fdt/simplebus.c Added: user/jceel/soc2012_armv6/sys/arm/arm/intrng.c ============================================================================== --- /dev/null 00:00:00 1970 (empty, because file is newly added) +++ user/jceel/soc2012_armv6/sys/arm/arm/intrng.c Tue Jun 12 01:13:59 2012 (r236939) @@ -0,0 +1,333 @@ +/*- + * Copyright (c) 2012 Jakub Wojciech Klama . + * 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. + * 3. All advertising materials mentioning features or use of this software + * must display the following acknowledgement: + * This product includes software developed by Mark Brinicombe + * for the NetBSD Project. + * 4. The name of the company nor the name of the author may be used to + * endorse or promote products derived from this software without specific + * prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``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. + * + */ + +#include +__FBSDID("$FreeBSD$"); +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include +#include + +#include "pic_if.h" + +#define IRQ_PIC_IDX(_irq) ((_irq >> 8) & 0xff) +#define IRQ_VECTOR_IDX(_irq) ((_irq) & 0xff) +#define IRQ_GEN(_pic, _irq) (((_pic) << 8) | ((_irq) & 0xff)) +#define CORE_PIC_IDX (0) +#define CORE_PIC_NODE (0xffffffff) + +#ifdef DEBUG +#define debugf(fmt, args...) do { printf("%s(): ", __func__); \ + printf(fmt,##args); } while (0) +#else +#define debugf(fmt, args...) +#endif + +typedef void (*mask_fn)(void *); + +struct arm_intr_controller { + device_t ic_dev; + phandle_t ic_node; + struct arm_intr_data ic_id; +}; + +struct arm_intr_handler { + device_t ih_dev; + int ih_intrcnt; + int ih_irq; + struct intr_event * ih_event; + struct arm_intr_controller *ih_pic; + struct arm_intr_controller *ih_self; +}; + +static void arm_mask_irq(void *); +static void arm_unmask_irq(void *); +static void arm_eoi(void *); + +static struct arm_intr_handler arm_intrs[NIRQ]; +static struct arm_intr_controller arm_pics[NPIC]; + +void +arm_dispatch_irq(device_t dev, struct trapframe *tf, int irq) +{ + struct arm_intr_handler *ih = NULL; + void *arg; + int i; + + debugf("pic %s, tf %p, irq %d\n", device_get_nameunit(dev), tf, irq); + + for (i = 0; arm_intrs[i].ih_dev != NULL; i++) { + if (arm_intrs[i].ih_pic->ic_dev == dev && + arm_intrs[i].ih_irq == irq) { + ih = &arm_intrs[i]; + break; + } + } + + if (ih == NULL) + panic("arm_dispatch_irq: unknown irq"); + + debugf("requested by %s\n", device_get_nameunit(ih->ih_dev)); + + arg = tf; + + /* XXX */ + for (i = 0; arm_pics[i].ic_dev != NULL; i++) + arm_pics[i].ic_id.tf = tf; + + ih->ih_intrcnt++; + if (intr_event_handle(ih->ih_event, tf) != 0) { + /* Stray IRQ */ + arm_mask_irq(ih); + } +} + +void arm_handler_execute(struct trapframe *, int); + +static struct arm_intr_handler * +arm_lookup_intr_handler(device_t pic, int irq) +{ + int i; + + for (i = 0; i < NIRQ; i++) { + if (arm_intrs[i].ih_pic != NULL && + arm_intrs[i].ih_pic->ic_dev == pic && + arm_intrs[i].ih_irq == irq) + return (&arm_intrs[i]); + + if (arm_intrs[i].ih_dev == NULL) + return (&arm_intrs[i]); + } + + return NULL; +} + +int +arm_fdt_map_irq(phandle_t ic, int irq) +{ + int i; + + debugf("ic %08x irq %d\n", ic, irq); + + if (ic == CORE_PIC_NODE) + return (IRQ_GEN(CORE_PIC_IDX, irq)); + + for (i = 0; arm_pics[i].ic_node != 0; i++) { + if (arm_pics[i].ic_node == ic) + return (IRQ_GEN(i, irq)); + } + + /* + * Interrupt controller is not registered yet, so + * we map a stub for it. 'i' is pointing to free + * first slot in arm_pics table. + */ + arm_pics[i].ic_node = ic; + return (IRQ_GEN(i, irq)); +} + +const char * +arm_describe_irq(int irq) +{ + struct arm_intr_controller *pic; + static char buffer[32]; + + pic = &arm_pics[IRQ_PIC_IDX(irq)]; + sprintf(buffer, "%s:%d", device_get_nameunit(pic->ic_dev), + IRQ_VECTOR_IDX(irq)); + + return (buffer); +} + +void +arm_register_pic(device_t dev) +{ + struct arm_intr_controller *ic = NULL; + phandle_t node; + int i; + + node = ofw_bus_get_node(dev); + + /* Find room for IC */ + for (i = 0; i < NPIC; i++) { + if (arm_pics[i].ic_dev != NULL) + continue; + + if (arm_pics[i].ic_node == node) { + ic = &arm_pics[i]; + break; + } + + if (arm_pics[i].ic_node == 0) { + ic = &arm_pics[i]; + break; + } + } + + if (ic == NULL) + panic("not enough room to register interrupt controller"); + + ic->ic_dev = dev; + ic->ic_node = node; + + debugf("device %s node %08x\n", device_get_nameunit(dev), ic->ic_node); + + device_printf(dev, "registered as interrupt controller\n"); +} + +void +arm_setup_irqhandler(device_t dev, driver_filter_t *filt, + void (*hand)(void*), void *arg, int irq, int flags, void **cookiep) +{ + struct arm_intr_controller *pic; + struct arm_intr_handler *ih; + struct arm_intr_data *id; + int error; + + if (irq < 0) + return; + + pic = &arm_pics[IRQ_PIC_IDX(irq)]; + ih = arm_lookup_intr_handler(pic->ic_dev, IRQ_VECTOR_IDX(irq)); + + debugf("setup irq %d on %s\n", IRQ_VECTOR_IDX(irq), + device_get_nameunit(pic->ic_dev)); + + debugf("pic %p, ih %p\n", pic, ih); + + if (ih->ih_event == NULL) { + error = intr_event_create(&ih->ih_event, (void *)ih, 0, irq, + (mask_fn)arm_mask_irq, (mask_fn)arm_unmask_irq, + arm_eoi, NULL, "intr%d:", irq); + + if (error) + return; + + ih->ih_dev = dev; + ih->ih_irq = IRQ_VECTOR_IDX(irq); + ih->ih_pic = pic; + + arm_unmask_irq(ih); + + debugf("self interrupt controller %p\n", ih->ih_self); +#if 0 + last_printed += + snprintf(intrnames + last_printed, + MAXCOMLEN + 1, + "irq%d: %s", irq, device_get_nameunit(dev)); + last_printed++; + intrcnt_tab[irq] = intrcnt_index; + intrcnt_index++; + +#endif + } + + if (flags & INTR_CONTROLLER) { + struct arm_intr_controller *pic = NULL; + int i; + for (i = 0; i < NPIC; i++) { + if (arm_pics[i].ic_dev == dev) + pic = &arm_pics[i]; + } + + id = &pic->ic_id; + id->arg = arg; + arg = id; + } + + intr_event_add_handler(ih->ih_event, device_get_nameunit(dev), filt, hand, arg, + intr_priority(flags), flags, cookiep); + + debugf("done\n"); +} + +int +arm_remove_irqhandler(int irq, void *cookie) +{ + /* + struct intr_event *event; + int error; + + event = intr_events[irq]; + arm_mask_irq(irq); + + error = intr_event_remove_handler(cookie); + + if (!TAILQ_EMPTY(&event->ie_handlers)) + arm_unmask_irq(irq); + return (error); + */ + return (ENXIO); +} + +void +arm_mask_irq(void *arg) +{ + struct arm_intr_handler *ih = (struct arm_intr_handler *)arg; + + PIC_MASK(ih->ih_pic->ic_dev, ih->ih_irq); +} + +void +arm_unmask_irq(void *arg) +{ + struct arm_intr_handler *ih = (struct arm_intr_handler *)arg; + + PIC_UNMASK(ih->ih_pic->ic_dev, ih->ih_irq); +} + +void +arm_eoi(void *arg) +{ + struct arm_intr_handler *ih = (struct arm_intr_handler *)arg; + + PIC_EOI(ih->ih_pic->ic_dev, ih->ih_irq); +} + +void dosoftints(void); +void +dosoftints(void) +{ +} + Modified: user/jceel/soc2012_armv6/sys/arm/arm/nexus.c ============================================================================== --- user/jceel/soc2012_armv6/sys/arm/arm/nexus.c Tue Jun 12 00:14:54 2012 (r236938) +++ user/jceel/soc2012_armv6/sys/arm/arm/nexus.c Tue Jun 12 01:13:59 2012 (r236939) @@ -61,6 +61,8 @@ __FBSDID("$FreeBSD$"); #include #include +#include "pic_if.h" + static MALLOC_DEFINE(M_NEXUSDEV, "nexusdev", "Nexus device"); struct nexus_device { @@ -70,6 +72,7 @@ struct nexus_device { #define DEVTONX(dev) ((struct nexus_device *)device_get_ivars(dev)) static struct rman mem_rman; +static device_t nexus_dev; static int nexus_probe(device_t); static int nexus_attach(device_t); @@ -82,6 +85,11 @@ static int nexus_activate_resource(devic static int nexus_setup_intr(device_t dev, device_t child, struct resource *res, int flags, driver_filter_t *filt, driver_intr_t *intr, void *arg, void **cookiep); static int nexus_teardown_intr(device_t, device_t, struct resource *, void *); +static void nexus_pic_config(device_t, int, enum intr_trigger, enum intr_polarity); +static void nexus_pic_mask(device_t, int); +static void nexus_pic_unmask(device_t, int); +static void nexus_pic_eoi(device_t, int); +void arm_handler_execute(struct trapframe *tf, int irqnb); static device_method_t nexus_methods[] = { /* Device interface */ @@ -94,6 +102,11 @@ static device_method_t nexus_methods[] = DEVMETHOD(bus_activate_resource, nexus_activate_resource), DEVMETHOD(bus_setup_intr, nexus_setup_intr), DEVMETHOD(bus_teardown_intr, nexus_teardown_intr), + /* Interrupt controller interface */ + DEVMETHOD(pic_config, nexus_pic_config), + DEVMETHOD(pic_mask, nexus_pic_mask), + DEVMETHOD(pic_unmask, nexus_pic_unmask), + DEVMETHOD(pic_eoi, nexus_pic_eoi), { 0, 0 } }; @@ -107,9 +120,8 @@ static devclass_t nexus_devclass; static int nexus_probe(device_t dev) { - device_quiet(dev); /* suppress attach message for neatness */ - + return (BUS_PROBE_DEFAULT); } @@ -121,7 +133,7 @@ nexus_setup_intr(device_t dev, device_t if ((rman_get_flags(res) & RF_SHAREABLE) == 0) flags |= INTR_EXCL; - arm_setup_irqhandler(device_get_nameunit(child), + arm_setup_irqhandler(child, filt, intr, arg, rman_get_start(res), flags, cookiep); return (0); } @@ -144,6 +156,10 @@ nexus_attach(device_t dev) if (rman_init(&mem_rman) || rman_manage_region(&mem_rman, 0, ~0)) panic("nexus_probe mem_rman"); + /* Register core interrupt controller */ + nexus_dev = dev; + arm_register_pic(dev); + /* * First, deal with the children we know about already */ @@ -250,4 +266,36 @@ nexus_activate_resource(device_t bus, de return (rman_activate_resource(r)); } +static void +nexus_pic_config(device_t bus, int irq, enum intr_trigger trig, + enum intr_polarity pol) +{ + /* unused */ +} + +static void +nexus_pic_mask(device_t bus, int irq) +{ + /* unused */ +} + +static void +nexus_pic_unmask(device_t bus, int irq) +{ + /* unused */ +} + +static void +nexus_pic_eoi(device_t bus, int irq) +{ + /* unused */ +} + +void +arm_handler_execute(struct trapframe *tf, int irqnb) +{ + /* Dispatch root interrupt from core */ + arm_dispatch_irq(nexus_dev, tf, 0); +} + DRIVER_MODULE(nexus, root, nexus_driver, nexus_devclass, 0, 0); Added: user/jceel/soc2012_armv6/sys/arm/arm/pic_if.m ============================================================================== --- /dev/null 00:00:00 1970 (empty, because file is newly added) +++ user/jceel/soc2012_armv6/sys/arm/arm/pic_if.m Tue Jun 12 01:13:59 2012 (r236939) @@ -0,0 +1,54 @@ +#- +# Copyright (c) 2012 Jakub Wojciech Klama +# 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. +# +# $FreeBSD$ +# + +#include + +INTERFACE pic; + +METHOD void config { + device_t dev; + int irq; + enum intr_trigger trig; + enum intr_polarity pol; +}; + +METHOD void eoi { + device_t dev; + int irq; +}; + +METHOD void mask { + device_t dev; + int irq; +}; + +METHOD void unmask { + device_t dev; + int irq; +}; + Modified: user/jceel/soc2012_armv6/sys/arm/conf/EA3250 ============================================================================== --- user/jceel/soc2012_armv6/sys/arm/conf/EA3250 Tue Jun 12 00:14:54 2012 (r236938) +++ user/jceel/soc2012_armv6/sys/arm/conf/EA3250 Tue Jun 12 01:13:59 2012 (r236939) @@ -25,6 +25,7 @@ options BOOTP options BOOTP_NFSROOT options BOOTP_NFSV3 options BOOTP_WIRED_TO=lpe0 +options ARM_INTRNG #options ROOTDEVNAME=\"ufs:/dev/da0a\" Modified: user/jceel/soc2012_armv6/sys/arm/include/fdt.h ============================================================================== --- user/jceel/soc2012_armv6/sys/arm/include/fdt.h Tue Jun 12 00:14:54 2012 (r236938) +++ user/jceel/soc2012_armv6/sys/arm/include/fdt.h Tue Jun 12 01:13:59 2012 (r236939) @@ -42,10 +42,11 @@ #include /* Max interrupt number */ -#define FDT_INTR_MAX NIRQ +#define FDT_INTR_MAX (0xffff) /* Map phandle/intpin pair to global IRQ number */ -#define FDT_MAP_IRQ(node, pin) (pin) +#define FDT_MAP_IRQ(node, pin) (arm_fdt_map_irq(node, pin)) +#define FDT_DESCRIBE_IRQ(irq) (arm_describe_irq(irq)) /* * Bus space tag. XXX endianess info needs to be derived from the blob. Modified: user/jceel/soc2012_armv6/sys/arm/include/intr.h ============================================================================== --- user/jceel/soc2012_armv6/sys/arm/include/intr.h Tue Jun 12 00:14:54 2012 (r236938) +++ user/jceel/soc2012_armv6/sys/arm/include/intr.h Tue Jun 12 01:13:59 2012 (r236939) @@ -39,6 +39,33 @@ #ifndef _MACHINE_INTR_H_ #define _MACHINE_INTR_H_ +#include +#include + +#include "opt_global.h" + +#if defined(ARM_INTRNG) + +#define NIRQ 255 +#define NPIC 16 +#define INTR_CONTROLLER INTR_MD1 + +struct arm_intr_data { + void * arg; + struct trapframe * tf; +}; + +int arm_fdt_map_irq(phandle_t ic, int irq); +const char *arm_describe_irq(int irq); +void arm_register_pic(device_t dev); +void arm_unregister_pic(device_t dev); +void arm_dispatch_irq(device_t dev, struct trapframe *tf, int irq); +void arm_setup_irqhandler(device_t dev, int (*)(void*), void (*)(void*), + void *, int, int, void **); +int arm_remove_irqhandler(int, void *); + +#else + /* XXX move to std.* files? */ #ifdef CPU_XSCALE_81342 #define NIRQ 128 @@ -56,8 +83,6 @@ #define NIRQ 32 #endif -#include - int arm_get_next_irq(int); void arm_mask_irq(uintptr_t); void arm_unmask_irq(uintptr_t); @@ -66,6 +91,8 @@ void arm_setup_irqhandler(const char *, int arm_remove_irqhandler(int, void *); extern void (*arm_post_filter)(void *); +#endif /* !ARM_INTRNG */ + void gic_init_secondary(void); #endif /* _MACHINE_INTR_H */ Modified: user/jceel/soc2012_armv6/sys/arm/lpc/lpc_intc.c ============================================================================== --- user/jceel/soc2012_armv6/sys/arm/lpc/lpc_intc.c Tue Jun 12 00:14:54 2012 (r236938) +++ user/jceel/soc2012_armv6/sys/arm/lpc/lpc_intc.c Tue Jun 12 01:13:59 2012 (r236939) @@ -47,22 +47,29 @@ __FBSDID("$FreeBSD$"); #include +#include "pic_if.h" + struct lpc_intc_softc { - struct resource * li_res; + device_t li_dev; + struct resource * li_mem_res; + struct resource * li_irq_res; bus_space_tag_t li_bst; bus_space_handle_t li_bsh; + void * li_intrhand; }; static int lpc_intc_probe(device_t); static int lpc_intc_attach(device_t); -static void lpc_intc_eoi(void *); - -static struct lpc_intc_softc *intc_softc = NULL; - -#define intc_read_4(reg) \ - bus_space_read_4(intc_softc->li_bst, intc_softc->li_bsh, reg) -#define intc_write_4(reg, val) \ - bus_space_write_4(intc_softc->li_bst, intc_softc->li_bsh, reg, val) +static int lpc_intc_intr(void *); +static void lpc_intc_config(device_t, int, enum intr_trigger, enum intr_polarity); +static void lpc_intc_mask(device_t, int); +static void lpc_intc_unmask(device_t, int); +static void lpc_intc_eoi(device_t, int); + +#define intc_read_4(_sc, _reg) \ + bus_space_read_4((_sc)->li_bst, (_sc)->li_bsh, _reg) +#define intc_write_4(_sc, _reg, _val) \ + bus_space_write_4((_sc)->li_bst, (_sc)->li_bsh, _reg, _val) static int lpc_intc_probe(device_t dev) @@ -81,144 +88,123 @@ lpc_intc_attach(device_t dev) struct lpc_intc_softc *sc = device_get_softc(dev); int rid = 0; - if (intc_softc) - return (ENXIO); - - sc->li_res = bus_alloc_resource_any(dev, SYS_RES_MEMORY, &rid, + sc->li_dev = dev; + sc->li_mem_res = bus_alloc_resource_any(dev, SYS_RES_MEMORY, &rid, RF_ACTIVE); - if (!sc->li_res) { - device_printf(dev, "could not alloc resources\n"); + if (!sc->li_mem_res) { + device_printf(dev, "could not alloc memory resource\n"); return (ENXIO); } - sc->li_bst = rman_get_bustag(sc->li_res); - sc->li_bsh = rman_get_bushandle(sc->li_res); - intc_softc = sc; - arm_post_filter = lpc_intc_eoi; + rid = 0; + sc->li_irq_res = bus_alloc_resource_any(dev, SYS_RES_IRQ, &rid, + RF_ACTIVE | RF_SHAREABLE); + if (!sc->li_irq_res) { + device_printf(dev, "could not alloc interrupt resource\n"); + return (ENXIO); // XXX + } - /* Clear interrupt status registers and disable all interrupts */ - intc_write_4(LPC_INTC_MIC_ER, 0); - intc_write_4(LPC_INTC_SIC1_ER, 0); - intc_write_4(LPC_INTC_SIC2_ER, 0); - intc_write_4(LPC_INTC_MIC_RSR, ~0); - intc_write_4(LPC_INTC_SIC1_RSR, ~0); - intc_write_4(LPC_INTC_SIC2_RSR, ~0); - return (0); -} + sc->li_bst = rman_get_bustag(sc->li_mem_res); + sc->li_bsh = rman_get_bushandle(sc->li_mem_res); -static device_method_t lpc_intc_methods[] = { - DEVMETHOD(device_probe, lpc_intc_probe), - DEVMETHOD(device_attach, lpc_intc_attach), - { 0, 0 } -}; + arm_register_pic(dev); -static driver_t lpc_intc_driver = { - "pic", - lpc_intc_methods, - sizeof(struct lpc_intc_softc), -}; - -static devclass_t lpc_intc_devclass; + if (bus_setup_intr(dev, sc->li_irq_res, INTR_TYPE_MISC | INTR_CONTROLLER, + lpc_intc_intr, NULL, sc, &sc->li_intrhand)) { + device_printf(dev, "could not setup interrupt handler\n"); + return (ENXIO); // XXX + } -DRIVER_MODULE(pic, simplebus, lpc_intc_driver, lpc_intc_devclass, 0, 0); + /* Clear interrupt status registers and disable all interrupts */ + intc_write_4(sc, LPC_INTC_ER, 0); + intc_write_4(sc, LPC_INTC_RSR, ~0); + return (0); +} -int -arm_get_next_irq(int last) +static int +lpc_intc_intr(void *arg) { + struct arm_intr_data *id = (struct arm_intr_data *)arg; + struct lpc_intc_softc *sc = (struct lpc_intc_softc *)id->arg; uint32_t value; int i; - /* IRQs 0-31 are mapped to LPC_INTC_MIC_SR */ - value = intc_read_4(LPC_INTC_MIC_SR); - for (i = 0; i < 32; i++) { - if (value & (1 << i)) - return (i); - } - - /* IRQs 32-63 are mapped to LPC_INTC_SIC1_SR */ - value = intc_read_4(LPC_INTC_SIC1_SR); + value = intc_read_4(sc, LPC_INTC_SR); for (i = 0; i < 32; i++) { if (value & (1 << i)) - return (i + 32); + arm_dispatch_irq(sc->li_dev, id->tf, i); } - /* IRQs 64-95 are mapped to LPC_INTC_SIC2_SR */ - value = intc_read_4(LPC_INTC_SIC2_SR); - for (i = 0; i < 32; i++) { - if (value & (1 << i)) - return (i + 64); - } + return (FILTER_HANDLED); +} - return (-1); +static void +lpc_intc_config(device_t dev, int irq, enum intr_trigger trig, + enum intr_polarity pol) +{ + /* no-op */ } -void -arm_mask_irq(uintptr_t nb) +static void +lpc_intc_mask(device_t dev, int irq) { - int reg; + struct lpc_intc_softc *sc = device_get_softc(dev); uint32_t value; - /* Make sure that interrupt isn't active already */ - lpc_intc_eoi((void *)nb); - - if (nb > 63) { - nb -= 64; - reg = LPC_INTC_SIC2_ER; - } else if (nb > 31) { - nb -= 32; - reg = LPC_INTC_SIC1_ER; - } else - reg = LPC_INTC_MIC_ER; + /* Make sure interrupt isn't active already */ + lpc_intc_eoi(dev, irq); /* Clear bit in ER register */ - value = intc_read_4(reg); - value &= ~(1 << nb); - intc_write_4(reg, value); + value = intc_read_4(sc, LPC_INTC_ER); + value &= ~(1 << irq); + intc_write_4(sc, LPC_INTC_ER, value); } -void -arm_unmask_irq(uintptr_t nb) +static void +lpc_intc_unmask(device_t dev, int irq) { - int reg; + struct lpc_intc_softc *sc = device_get_softc(dev); uint32_t value; - if (nb > 63) { - nb -= 64; - reg = LPC_INTC_SIC2_ER; - } else if (nb > 31) { - nb -= 32; - reg = LPC_INTC_SIC1_ER; - } else - reg = LPC_INTC_MIC_ER; - /* Set bit in ER register */ - value = intc_read_4(reg); - value |= (1 << nb); - intc_write_4(reg, value); + value = intc_read_4(sc, LPC_INTC_ER); + value |= (1 << irq); + intc_write_4(sc, LPC_INTC_ER, value); } static void -lpc_intc_eoi(void *data) +lpc_intc_eoi(device_t dev, int irq) { - int reg; - int nb = (int)data; + struct lpc_intc_softc *sc = device_get_softc(dev); uint32_t value; + + /* Set bit in RSR register */ + value = intc_read_4(sc, LPC_INTC_RSR); + value |= (1 << irq); + intc_write_4(sc, LPC_INTC_RSR, value); +} - if (nb > 63) { - nb -= 64; - reg = LPC_INTC_SIC2_RSR; - } else if (nb > 31) { - nb -= 32; - reg = LPC_INTC_SIC1_RSR; - } else - reg = LPC_INTC_MIC_RSR; +static device_method_t lpc_intc_methods[] = { + /* Device interface */ + DEVMETHOD(device_probe, lpc_intc_probe), + DEVMETHOD(device_attach, lpc_intc_attach), + /* Interrupt controller interface */ + DEVMETHOD(pic_config, lpc_intc_config), + DEVMETHOD(pic_mask, lpc_intc_mask), + DEVMETHOD(pic_unmask, lpc_intc_unmask), + DEVMETHOD(pic_eoi, lpc_intc_eoi), + { 0, 0 } +}; - /* Set bit in RSR register */ - value = intc_read_4(reg); - value |= (1 << nb); - intc_write_4(reg, value); +static driver_t lpc_intc_driver = { + "pic", + lpc_intc_methods, + sizeof(struct lpc_intc_softc), +}; -} +static devclass_t lpc_intc_devclass; + +DRIVER_MODULE(pic, simplebus, lpc_intc_driver, lpc_intc_devclass, 0, 0); struct fdt_fixup_entry fdt_fixup_table[] = { { NULL, NULL } @@ -228,8 +214,11 @@ static int fdt_pic_decode_ic(phandle_t node, pcell_t *intr, int *interrupt, int *trig, int *pol) { +#if 0 + // XXX if (!fdt_is_compatible(node, "lpc,pic")) return (ENXIO); +#endif *interrupt = fdt32_to_cpu(intr[0]); *trig = INTR_TRIGGER_CONFORM; Modified: user/jceel/soc2012_armv6/sys/arm/lpc/lpcreg.h ============================================================================== --- user/jceel/soc2012_armv6/sys/arm/lpc/lpcreg.h Tue Jun 12 00:14:54 2012 (r236938) +++ user/jceel/soc2012_armv6/sys/arm/lpc/lpcreg.h Tue Jun 12 01:13:59 2012 (r236939) @@ -37,24 +37,12 @@ * Interrupt controller (from UM10326: LPC32x0 User manual, page 87) */ -#define LPC_INTC_MIC_ER 0x0000 -#define LPC_INTC_MIC_RSR 0x0004 -#define LPC_INTC_MIC_SR 0x0008 -#define LPC_INTC_MIC_APR 0x000c -#define LPC_INTC_MIC_ATR 0x0010 -#define LPC_INTC_MIC_ITR 0x0014 -#define LPC_INTC_SIC1_ER 0x4000 -#define LPC_INTC_SIC1_RSR 0x4004 -#define LPC_INTC_SIC1_SR 0x4008 -#define LPC_INTC_SIC1_APR 0x400c -#define LPC_INTC_SIC1_ATR 0x4010 -#define LPC_INTC_SIC1_ITR 0x4014 -#define LPC_INTC_SIC2_ER 0x8000 -#define LPC_INTC_SIC2_RSR 0x8004 -#define LPC_INTC_SIC2_SR 0x8008 -#define LPC_INTC_SIC2_APR 0x800c -#define LPC_INTC_SIC2_ATR 0x8010 -#define LPC_INTC_SIC2_ITR 0x8014 +#define LPC_INTC_ER 0x0000 +#define LPC_INTC_RSR 0x0004 +#define LPC_INTC_SR 0x0008 +#define LPC_INTC_APR 0x000c +#define LPC_INTC_ATR 0x0010 +#define LPC_INTC_ITR 0x0014 /* Modified: user/jceel/soc2012_armv6/sys/boot/fdt/dts/ea3250.dts ============================================================================== --- user/jceel/soc2012_armv6/sys/boot/fdt/dts/ea3250.dts Tue Jun 12 00:14:54 2012 (r236938) +++ user/jceel/soc2012_armv6/sys/boot/fdt/dts/ea3250.dts Tue Jun 12 01:13:59 2012 (r236939) @@ -75,11 +75,30 @@ reg = <0x4000 0x4000>; }; - PIC: pic@8000 { + MIC: pic@8000 { interrupt-controller; #address-cells = <0>; #interrupt-cells = <1>; - reg = <0x8000 0xc000>; + reg = <0x8000 0x1000>; + interrupts = <0>; + compatible = "lpc,pic"; + }; + + SIC1: pic@c000 { + interrupt-controller; + #address-cells = <0>; + #interrupt-cells = <1>; + reg = <0xc000 0x1000>; + interrupts = <0>; + compatible = "lpc,pic"; + }; + + SIC2: pic@10000 { + interrupt-controller; + #address-cells = <0>; + #interrupt-cells = <1>; + reg = <0x10000 0x1000>; + interrupts = <0>; compatible = "lpc,pic"; }; @@ -88,14 +107,14 @@ reg = <0x44000 0x4000 0x4c000 0x4000>; interrupts = <16 17>; - interrupt-parent = <&PIC>; + interrupt-parent = <&MIC>; }; rtc@24000 { compatible = "lpc,rtc"; reg = <0x24000 0x4000>; - interrupts = <52>; - interrupt-parent = <&PIC>; + interrupts = <20>; + interrupt-parent = <&SIC1>; }; serial0: serial@14000 { @@ -105,7 +124,7 @@ reg-shift = <2>; clock-frequency = <0>; interrupts = <26>; - interrupt-parent = <&PIC>; + interrupt-parent = <&MIC>; }; serial1: serial@18000 { @@ -115,7 +134,7 @@ reg-shift = <2>; clock-frequency = <0>; interrupts = <25>; - interrupt-parent = <&PIC>; + interrupt-parent = <&MIC>; }; serial2: serial@80000 { @@ -125,7 +144,7 @@ reg-shift = <2>; clock-frequency = <13000000>; interrupts = <7>; - interrupt-parent = <&PIC>; + interrupt-parent = <&MIC>; }; serial3: serial@88000 { @@ -135,7 +154,7 @@ reg-shift = <2>; clock-frequency = <13000000>; interrupts = <8>; - interrupt-parent = <&PIC>; + interrupt-parent = <&MIC>; }; serial4: serial@90000 { @@ -145,7 +164,7 @@ clock-frequency = <13000000>; current-speed = <115200>; interrupts = <9>; - interrupt-parent = <&PIC>; + interrupt-parent = <&MIC>; }; serial5: serial@98000 { @@ -155,7 +174,7 @@ reg-shift = <2>; clock-frequency = <13000000>; interrupts = <10>; - interrupt-parent = <&PIC>; + interrupt-parent = <&MIC>; }; serial6: serial@1c000 { *** DIFF OUTPUT TRUNCATED AT 1000 LINES *** From owner-svn-src-user@FreeBSD.ORG Wed Jun 13 06:19:08 2012 Return-Path: Delivered-To: svn-src-user@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [69.147.83.52]) by hub.freebsd.org (Postfix) with ESMTP id E7FCE1065672; Wed, 13 Jun 2012 06:19:08 +0000 (UTC) (envelope-from dougb@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [69.147.83.44]) by mx1.freebsd.org (Postfix) with ESMTP id D47C98FC12; Wed, 13 Jun 2012 06:19:08 +0000 (UTC) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.4/8.14.4) with ESMTP id q5D6J8AX000778; Wed, 13 Jun 2012 06:19:08 GMT (envelope-from dougb@svn.freebsd.org) Received: (from dougb@localhost) by svn.freebsd.org (8.14.4/8.14.4/Submit) id q5D6J8GK000776; Wed, 13 Jun 2012 06:19:08 GMT (envelope-from dougb@svn.freebsd.org) Message-Id: <201206130619.q5D6J8GK000776@svn.freebsd.org> From: Doug Barton Date: Wed, 13 Jun 2012 06:19:08 +0000 (UTC) To: src-committers@freebsd.org, svn-src-user@freebsd.org X-SVN-Group: user MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r236996 - user/dougb/portmaster X-BeenThere: svn-src-user@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "SVN commit messages for the experimental " user" src tree" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 13 Jun 2012 06:19:09 -0000 Author: dougb Date: Wed Jun 13 06:19:08 2012 New Revision: 236996 URL: http://svn.freebsd.org/changeset/base/236996 Log: When calling trap_exit() in a child process we need to signal the parent(s) that we trap'ed so that the various post-run cleanups and updates can still happen properly. In a related change, in safe_exit() remove a shortcut from r214541 that was safe at the time, but isn't any longer because we now have more stuff happening after a run so we still need to update the parent even if the child fail'ed or trap'ed. When we're run by script(1) the parent process is going to be [sh], not $0, so go back to the less efficient but safer method of safeguarding the parent in kill_bad_children(). For -a remove a -v line that is redundant now with the new in-line term_printf() code. In the new in-line printing code for term_printf() use a simpler pattern to match $1 that also catches the following ... In multiport(), update the total number of ports after the first pass to account for ports given on the command line that turn out to be dependencies of other ports given on the command line, and print a summary with the number of parent ports and dependencies prior to the confirmation prompt. Modified: user/dougb/portmaster/portmaster Modified: user/dougb/portmaster/portmaster ============================================================================== --- user/dougb/portmaster/portmaster Wed Jun 13 05:47:24 2012 (r236995) +++ user/dougb/portmaster/portmaster Wed Jun 13 06:19:08 2012 (r236996) @@ -73,6 +73,8 @@ trap_exit () { fi if [ "$$" -eq "$PM_PARENT_PID" ]; then + . $IPC_SAVE + local n=0 while ps -axo pid,ppid,command | grep -v egrep | egrep -q "(make -DBATCH checksum|/fetch |\[sh\])"; do @@ -92,6 +94,14 @@ trap_exit () { fi [ -n "$logs" ] && echo '' fi + else + # Signal the parent if a child trap'ed, or read the file if we are + # an intermediate process. + if ! ls ${TMPDIR}/f-${PM_PARENT_PID}-TEAC\.* >/dev/null 2>&1; then + pm_mktemp TEAC # Trap Exit Already Called + else + . $IPC_SAVE + fi fi safe_exit 1 } @@ -109,8 +119,9 @@ kill_bad_children () { *'make -DBATCH checksum'*|*'/fetch '*|\[sh\]) pm_kill -9 $pid ;; esac ;; *) [ $pgid -eq $mypgid ] || continue + [ $pid -eq $PM_PARENT_PID ] && continue case "$command" in - *" $0 "*) [ $pid -ne $PM_PARENT_PID ] && pm_kill $pid ;; + *" $0 "*) pm_kill $pid ;; *'make -DBATCH checksum'*|*'/fetch '*|\[sh\]) pm_kill $pid ;; esac ;; esac @@ -249,8 +260,6 @@ safe_exit () { else [ -n "$grep_deps" ] && pm_unlink $grep_deps - [ -n "$1" ] && exit $1 - # Save state for the parent process to read back in if [ -z "$PM_FIRST_PASS" ]; then > $IPC_SAVE @@ -2223,7 +2232,7 @@ check_fetch_only () { term_printf () { case "$1" in '') [ -n "$PM_MULTI_PORTS" ] && echo -e "\n===>>> ${PM_PARENT_PORT}" ;; - *\>\>*) echo -e "\n===>>> ${PM_PARENT_PORT}${1}" ;; + *\(*) echo -e "\n===>>> ${PM_PARENT_PORT}${1}" ;; esac [ -n "$PM_NO_TERM_TITLE" ] && return @@ -2755,7 +2764,6 @@ multiport () { fi numports=$(( $numports + 1 )) - worklist="$worklist $port" portlist="${portlist}\t${port}\n" PM_MULTI_PORTS="${PM_MULTI_PORTS}${port}:" @@ -2807,6 +2815,8 @@ multiport () { *) numports=$(( $numports - 1 )) ;; esac done + numports=$num + PM_PARENT_PORT="Total parent ports: $numports Total dependencies:" if [ -n "$PM_URB" ]; then unset PM_URB ; PM_URB=pm_urb_post_first_pass @@ -2963,8 +2973,6 @@ all_first_pass () { local iport origin for iport in "$@"; do - pm_v "===>>> $iport" - case "$CUR_DEPS" in *:${iport}:*) continue ;; esac origin=`origin_from_pdb $iport` || { From owner-svn-src-user@FreeBSD.ORG Wed Jun 13 08:11:42 2012 Return-Path: Delivered-To: svn-src-user@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [69.147.83.52]) by hub.freebsd.org (Postfix) with ESMTP id 14CEB1065672; Wed, 13 Jun 2012 08:11:42 +0000 (UTC) (envelope-from dougb@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [69.147.83.44]) by mx1.freebsd.org (Postfix) with ESMTP id 00A628FC08; Wed, 13 Jun 2012 08:11:42 +0000 (UTC) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.4/8.14.4) with ESMTP id q5D8Bfpg005922; Wed, 13 Jun 2012 08:11:41 GMT (envelope-from dougb@svn.freebsd.org) Received: (from dougb@localhost) by svn.freebsd.org (8.14.4/8.14.4/Submit) id q5D8BfYY005920; Wed, 13 Jun 2012 08:11:41 GMT (envelope-from dougb@svn.freebsd.org) Message-Id: <201206130811.q5D8BfYY005920@svn.freebsd.org> From: Doug Barton Date: Wed, 13 Jun 2012 08:11:41 +0000 (UTC) To: src-committers@freebsd.org, svn-src-user@freebsd.org X-SVN-Group: user MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r237002 - user/dougb/portmaster X-BeenThere: svn-src-user@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "SVN commit messages for the experimental " user" src tree" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 13 Jun 2012 08:11:42 -0000 Author: dougb Date: Wed Jun 13 08:11:41 2012 New Revision: 237002 URL: http://svn.freebsd.org/changeset/base/237002 Log: Add code to detect dependency loops created by moving part of a port into another port, and CONFLICT'ing on previous versions of that port (ala textproc/p5-XML-SAX -> p5-XML-SAX-Base). When a loop is detected suggest that the user try pkg_updating. Modified: user/dougb/portmaster/portmaster Modified: user/dougb/portmaster/portmaster ============================================================================== --- user/dougb/portmaster/portmaster Wed Jun 13 08:00:32 2012 (r237001) +++ user/dougb/portmaster/portmaster Wed Jun 13 08:11:41 2012 (r237002) @@ -2495,11 +2495,18 @@ dependency_check () { confl_p=`pkg_info -I $glob 2>/dev/null` if [ -n "$confl_p" ]; then confl_p=${confl_p%% *} + d_port="$pd/`origin_from_pdb $confl_p`" + + if [ "${d_port#$pd/}" = "$portdir" ]; then + echo -e "\n===>>> $origin seems to depend on $portdir" + echo ' which looks like a dependency loop' + fail "Try pkg_updating $portdir" + fi + echo '' echo "===>>> The dependency for ${origin}" echo " seems to be handled by $confl_p" echo '' - d_port="$pd/`origin_from_pdb $confl_p`" fi done fi From owner-svn-src-user@FreeBSD.ORG Wed Jun 13 09:07:41 2012 Return-Path: Delivered-To: svn-src-user@freebsd.org Received: from mx1.freebsd.org (unknown [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id E1E13106566B; Wed, 13 Jun 2012 09:07:41 +0000 (UTC) (envelope-from dougb@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [69.147.83.44]) by mx1.freebsd.org (Postfix) with ESMTP id CD76F8FC12; Wed, 13 Jun 2012 09:07:41 +0000 (UTC) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.4/8.14.4) with ESMTP id q5D97fGC008478; Wed, 13 Jun 2012 09:07:41 GMT (envelope-from dougb@svn.freebsd.org) Received: (from dougb@localhost) by svn.freebsd.org (8.14.4/8.14.4/Submit) id q5D97fN3008476; Wed, 13 Jun 2012 09:07:41 GMT (envelope-from dougb@svn.freebsd.org) Message-Id: <201206130907.q5D97fN3008476@svn.freebsd.org> From: Doug Barton Date: Wed, 13 Jun 2012 09:07:41 +0000 (UTC) To: src-committers@freebsd.org, svn-src-user@freebsd.org X-SVN-Group: user MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r237003 - user/dougb/portmaster X-BeenThere: svn-src-user@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "SVN commit messages for the experimental " user" src tree" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 13 Jun 2012 09:07:42 -0000 Author: dougb Date: Wed Jun 13 09:07:41 2012 New Revision: 237003 URL: http://svn.freebsd.org/changeset/base/237003 Log: Remove one more too-verbose term_printf from -a Modified: user/dougb/portmaster/portmaster Modified: user/dougb/portmaster/portmaster ============================================================================== --- user/dougb/portmaster/portmaster Wed Jun 13 08:11:41 2012 (r237002) +++ user/dougb/portmaster/portmaster Wed Jun 13 09:07:41 2012 (r237003) @@ -2323,7 +2323,6 @@ update_port () { fi if [ -n "$UPDATE_ALL" ]; then - term_printf " (${num_of_deps})" echo -e "\n===>>> Returning to update check of installed ports\n" elif [ -n "$PM_URB" ]; then return 0 From owner-svn-src-user@FreeBSD.ORG Wed Jun 13 10:42:55 2012 Return-Path: Delivered-To: svn-src-user@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [69.147.83.52]) by hub.freebsd.org (Postfix) with ESMTP id D130A106566C; Wed, 13 Jun 2012 10:42:55 +0000 (UTC) (envelope-from dougb@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [69.147.83.44]) by mx1.freebsd.org (Postfix) with ESMTP id A23758FC0A; Wed, 13 Jun 2012 10:42:55 +0000 (UTC) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.4/8.14.4) with ESMTP id q5DAgt7d012849; Wed, 13 Jun 2012 10:42:55 GMT (envelope-from dougb@svn.freebsd.org) Received: (from dougb@localhost) by svn.freebsd.org (8.14.4/8.14.4/Submit) id q5DAgtxi012847; Wed, 13 Jun 2012 10:42:55 GMT (envelope-from dougb@svn.freebsd.org) Message-Id: <201206131042.q5DAgtxi012847@svn.freebsd.org> From: Doug Barton Date: Wed, 13 Jun 2012 10:42:55 +0000 (UTC) To: src-committers@freebsd.org, svn-src-user@freebsd.org X-SVN-Group: user MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r237004 - user/dougb/portmaster X-BeenThere: svn-src-user@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "SVN commit messages for the experimental " user" src tree" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 13 Jun 2012 10:42:55 -0000 Author: dougb Date: Wed Jun 13 10:42:55 2012 New Revision: 237004 URL: http://svn.freebsd.org/changeset/base/237004 Log: Revert r237003 since it is needed to restore the terminal title during a long delay between -a ports to update. Add a comment so I don't forget. Also restore part of r236996, match >> for the in-line term_printf() code, and add that pattern in post_first_pass() where it's needed to match. Adjust the summary message in multiport() to suit. Arguably this is a more elegant way to present the information anyway. Don't bother trying to delete empty directories in WRKDIRPREFIX if we are exiting abnormally, chances are there will be a work directory from the failed port. Modified: user/dougb/portmaster/portmaster Modified: user/dougb/portmaster/portmaster ============================================================================== --- user/dougb/portmaster/portmaster Wed Jun 13 09:07:41 2012 (r237003) +++ user/dougb/portmaster/portmaster Wed Jun 13 10:42:55 2012 (r237004) @@ -165,7 +165,7 @@ parent_exit () { /bin/unlink $f done - if [ -n "$PM_WRKDIRPREFIX" ]; then + if [ -n "$PM_WRKDIRPREFIX" -a -z "$1" ]; then pm_v ; count=0 while : ; do pgrep -qf 'make clean NOCLEANDEPENDS=ncd' || break @@ -2232,7 +2232,7 @@ check_fetch_only () { term_printf () { case "$1" in '') [ -n "$PM_MULTI_PORTS" ] && echo -e "\n===>>> ${PM_PARENT_PORT}" ;; - *\(*) echo -e "\n===>>> ${PM_PARENT_PORT}${1}" ;; + *\>\>*) echo -e "\n===>>> ${PM_PARENT_PORT}${1}" ;; esac [ -n "$PM_NO_TERM_TITLE" ] && return @@ -2323,6 +2323,8 @@ update_port () { fi if [ -n "$UPDATE_ALL" ]; then + # Fix terminal titlebar in case of a long delay between ports to update + term_printf " (${num_of_deps})" echo -e "\n===>>> Returning to update check of installed ports\n" elif [ -n "$PM_URB" ]; then return 0 @@ -2572,7 +2574,7 @@ post_first_pass () { local action if [ ${num_of_deps:-0} -gt 0 ]; then - term_printf " (${num_of_deps})" + term_printf " >> (${num_of_deps})" if [ -z "$PM_NO_CONFIRM" ]; then local answer @@ -2822,7 +2824,7 @@ multiport () { esac done numports=$num - PM_PARENT_PORT="Total parent ports: $numports Total dependencies:" + PM_PARENT_PORT="Total ports: $numports" if [ -n "$PM_URB" ]; then unset PM_URB ; PM_URB=pm_urb_post_first_pass From owner-svn-src-user@FreeBSD.ORG Thu Jun 14 07:12:41 2012 Return-Path: Delivered-To: svn-src-user@freebsd.org Received: from mx1.freebsd.org (unknown [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id EC326106566B; Thu, 14 Jun 2012 07:12:41 +0000 (UTC) (envelope-from alc@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [69.147.83.44]) by mx1.freebsd.org (Postfix) with ESMTP id BEB468FC08; Thu, 14 Jun 2012 07:12:41 +0000 (UTC) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.4/8.14.4) with ESMTP id q5E7CfUB077588; Thu, 14 Jun 2012 07:12:41 GMT (envelope-from alc@svn.freebsd.org) Received: (from alc@localhost) by svn.freebsd.org (8.14.4/8.14.4/Submit) id q5E7Cfsn077587; Thu, 14 Jun 2012 07:12:41 GMT (envelope-from alc@svn.freebsd.org) Message-Id: <201206140712.q5E7Cfsn077587@svn.freebsd.org> From: Alan Cox Date: Thu, 14 Jun 2012 07:12:41 +0000 (UTC) To: src-committers@freebsd.org, svn-src-user@freebsd.org X-SVN-Group: user MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r237052 - user/alc/superpages X-BeenThere: svn-src-user@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "SVN commit messages for the experimental " user" src tree" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 14 Jun 2012 07:12:42 -0000 Author: alc Date: Thu Jun 14 07:12:41 2012 New Revision: 237052 URL: http://svn.freebsd.org/changeset/base/237052 Log: Branch for developing and testing changes to the superpages support. Added: - copied from r237051, head/ Directory Properties: user/alc/superpages/ (props changed) From owner-svn-src-user@FreeBSD.ORG Thu Jun 14 10:35:24 2012 Return-Path: Delivered-To: svn-src-user@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [69.147.83.52]) by hub.freebsd.org (Postfix) with ESMTP id 211B9106566C; Thu, 14 Jun 2012 10:35:24 +0000 (UTC) (envelope-from andre@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [69.147.83.44]) by mx1.freebsd.org (Postfix) with ESMTP id 065808FC12; Thu, 14 Jun 2012 10:35:24 +0000 (UTC) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.4/8.14.4) with ESMTP id q5EAZNFk088748; Thu, 14 Jun 2012 10:35:23 GMT (envelope-from andre@svn.freebsd.org) Received: (from andre@localhost) by svn.freebsd.org (8.14.4/8.14.4/Submit) id q5EAZND6088734; Thu, 14 Jun 2012 10:35:23 GMT (envelope-from andre@svn.freebsd.org) Message-Id: <201206141035.q5EAZND6088734@svn.freebsd.org> From: Andre Oppermann Date: Thu, 14 Jun 2012 10:35:23 +0000 (UTC) To: src-committers@freebsd.org, svn-src-user@freebsd.org X-SVN-Group: user MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r237055 - in user/andre/tcp_workqueue/sys: . amd64/acpica amd64/amd64 amd64/conf amd64/include amd64/linux32 arm/arm arm/at91 arm/conf arm/econa arm/include arm/mv arm/mv/discovery arm/... X-BeenThere: svn-src-user@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "SVN commit messages for the experimental " user" src tree" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 14 Jun 2012 10:35:24 -0000 Author: andre Date: Thu Jun 14 10:35:21 2012 New Revision: 237055 URL: http://svn.freebsd.org/changeset/base/237055 Log: Integrate from HEAD. Added: user/andre/tcp_workqueue/sys/arm/at91/board_ethernut5.c - copied unchanged from r237004, head/sys/arm/at91/board_ethernut5.c user/andre/tcp_workqueue/sys/arm/at91/std.ethernut5 - copied unchanged from r237004, head/sys/arm/at91/std.ethernut5 user/andre/tcp_workqueue/sys/arm/conf/ETHERNUT5 - copied unchanged from r237004, head/sys/arm/conf/ETHERNUT5 user/andre/tcp_workqueue/sys/arm/conf/ETHERNUT5.hints - copied unchanged from r237004, head/sys/arm/conf/ETHERNUT5.hints user/andre/tcp_workqueue/sys/arm/conf/GUMSTIX-QEMU - copied unchanged from r237004, head/sys/arm/conf/GUMSTIX-QEMU user/andre/tcp_workqueue/sys/arm/conf/genboardid.awk - copied unchanged from r237004, head/sys/arm/conf/genboardid.awk user/andre/tcp_workqueue/sys/arm/conf/mach-types - copied unchanged from r237004, head/sys/arm/conf/mach-types user/andre/tcp_workqueue/sys/arm/mv/mv_localbus.c - copied unchanged from r237004, head/sys/arm/mv/mv_localbus.c user/andre/tcp_workqueue/sys/boot/fdt/dts/bindings-localbus.txt - copied unchanged from r237004, head/sys/boot/fdt/dts/bindings-localbus.txt user/andre/tcp_workqueue/sys/boot/fdt/dts/p2041rdb.dts - copied unchanged from r237004, head/sys/boot/fdt/dts/p2041rdb.dts user/andre/tcp_workqueue/sys/boot/fdt/dts/p2041si.dtsi - copied unchanged from r237004, head/sys/boot/fdt/dts/p2041si.dtsi user/andre/tcp_workqueue/sys/boot/fdt/dts/p3041si.dtsi - copied unchanged from r237004, head/sys/boot/fdt/dts/p3041si.dtsi user/andre/tcp_workqueue/sys/boot/fdt/dts/p5020ds.dts - copied unchanged from r237004, head/sys/boot/fdt/dts/p5020ds.dts user/andre/tcp_workqueue/sys/boot/fdt/dts/p5020si.dtsi - copied unchanged from r237004, head/sys/boot/fdt/dts/p5020si.dtsi user/andre/tcp_workqueue/sys/boot/i386/btx/lib/btxcsu.S - copied unchanged from r237004, head/sys/boot/i386/btx/lib/btxcsu.S user/andre/tcp_workqueue/sys/boot/i386/cdboot/cdboot.S - copied unchanged from r237004, head/sys/boot/i386/cdboot/cdboot.S user/andre/tcp_workqueue/sys/boot/i386/common/bootargs.h - copied unchanged from r237004, head/sys/boot/i386/common/bootargs.h user/andre/tcp_workqueue/sys/boot/pc98/btx/lib/btxcsu.S - copied unchanged from r237004, head/sys/boot/pc98/btx/lib/btxcsu.S user/andre/tcp_workqueue/sys/boot/pc98/cdboot/cdboot.S - copied unchanged from r237004, head/sys/boot/pc98/cdboot/cdboot.S user/andre/tcp_workqueue/sys/boot/sparc64/zfsboot/ - copied from r237004, head/sys/boot/sparc64/zfsboot/ user/andre/tcp_workqueue/sys/boot/sparc64/zfsloader/ - copied from r237004, head/sys/boot/sparc64/zfsloader/ user/andre/tcp_workqueue/sys/boot/zfs/devicename_stubs.c - copied unchanged from r237004, head/sys/boot/zfs/devicename_stubs.c user/andre/tcp_workqueue/sys/boot/zfs/libzfs.h - copied unchanged from r237004, head/sys/boot/zfs/libzfs.h user/andre/tcp_workqueue/sys/cam/scsi/scsi_enc.c - copied unchanged from r237004, head/sys/cam/scsi/scsi_enc.c user/andre/tcp_workqueue/sys/cam/scsi/scsi_enc.h - copied unchanged from r237004, head/sys/cam/scsi/scsi_enc.h user/andre/tcp_workqueue/sys/cam/scsi/scsi_enc_internal.h - copied unchanged from r237004, head/sys/cam/scsi/scsi_enc_internal.h user/andre/tcp_workqueue/sys/cam/scsi/scsi_enc_safte.c - copied unchanged from r237004, head/sys/cam/scsi/scsi_enc_safte.c user/andre/tcp_workqueue/sys/cam/scsi/scsi_enc_ses.c - copied unchanged from r237004, head/sys/cam/scsi/scsi_enc_ses.c user/andre/tcp_workqueue/sys/cddl/contrib/opensolaris/common/nvpair/fnvpair.c - copied unchanged from r237004, head/sys/cddl/contrib/opensolaris/common/nvpair/fnvpair.c user/andre/tcp_workqueue/sys/cddl/contrib/opensolaris/common/zfs/zfeature_common.c - copied unchanged from r237004, head/sys/cddl/contrib/opensolaris/common/zfs/zfeature_common.c user/andre/tcp_workqueue/sys/cddl/contrib/opensolaris/common/zfs/zfeature_common.h - copied unchanged from r237004, head/sys/cddl/contrib/opensolaris/common/zfs/zfeature_common.h user/andre/tcp_workqueue/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/bptree.c - copied unchanged from r237004, head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/bptree.c user/andre/tcp_workqueue/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/bptree.h - copied unchanged from r237004, head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/bptree.h user/andre/tcp_workqueue/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/zfeature.h - copied unchanged from r237004, head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/zfeature.h user/andre/tcp_workqueue/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zfeature.c - copied unchanged from r237004, head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zfeature.c user/andre/tcp_workqueue/sys/cddl/contrib/opensolaris/uts/mips/ - copied from r237004, head/sys/cddl/contrib/opensolaris/uts/mips/ user/andre/tcp_workqueue/sys/cddl/dev/dtrace/mips/ - copied from r237004, head/sys/cddl/dev/dtrace/mips/ user/andre/tcp_workqueue/sys/compat/linux/check_error.d - copied unchanged from r237004, head/sys/compat/linux/check_error.d user/andre/tcp_workqueue/sys/compat/linux/check_internal_locks.d - copied unchanged from r237004, head/sys/compat/linux/check_internal_locks.d user/andre/tcp_workqueue/sys/compat/linux/linux_dtrace.h - copied unchanged from r237004, head/sys/compat/linux/linux_dtrace.h user/andre/tcp_workqueue/sys/compat/linux/stats_timing.d - copied unchanged from r237004, head/sys/compat/linux/stats_timing.d user/andre/tcp_workqueue/sys/compat/linux/trace_futexes.d - copied unchanged from r237004, head/sys/compat/linux/trace_futexes.d user/andre/tcp_workqueue/sys/contrib/dev/acpica/compiler/aslsupport.l - copied unchanged from r237004, head/sys/contrib/dev/acpica/compiler/aslsupport.l user/andre/tcp_workqueue/sys/contrib/dev/acpica/compiler/preprocess.h - copied unchanged from r237004, head/sys/contrib/dev/acpica/compiler/preprocess.h user/andre/tcp_workqueue/sys/contrib/dev/acpica/compiler/prexpress.c - copied unchanged from r237004, head/sys/contrib/dev/acpica/compiler/prexpress.c user/andre/tcp_workqueue/sys/contrib/dev/acpica/compiler/prmacros.c - copied unchanged from r237004, head/sys/contrib/dev/acpica/compiler/prmacros.c user/andre/tcp_workqueue/sys/contrib/dev/acpica/compiler/prparser.l - copied unchanged from r237004, head/sys/contrib/dev/acpica/compiler/prparser.l user/andre/tcp_workqueue/sys/contrib/dev/acpica/compiler/prparser.y - copied unchanged from r237004, head/sys/contrib/dev/acpica/compiler/prparser.y user/andre/tcp_workqueue/sys/contrib/dev/acpica/compiler/prscan.c - copied unchanged from r237004, head/sys/contrib/dev/acpica/compiler/prscan.c user/andre/tcp_workqueue/sys/contrib/dev/acpica/compiler/prutils.c - copied unchanged from r237004, head/sys/contrib/dev/acpica/compiler/prutils.c user/andre/tcp_workqueue/sys/dev/agp/agp_i810.h - copied unchanged from r237004, head/sys/dev/agp/agp_i810.h user/andre/tcp_workqueue/sys/dev/ath/if_ath_beacon.c - copied unchanged from r237004, head/sys/dev/ath/if_ath_beacon.c user/andre/tcp_workqueue/sys/dev/ath/if_ath_beacon.h - copied unchanged from r237004, head/sys/dev/ath/if_ath_beacon.h user/andre/tcp_workqueue/sys/dev/ath/if_ath_rx.c - copied unchanged from r237004, head/sys/dev/ath/if_ath_rx.c user/andre/tcp_workqueue/sys/dev/ath/if_ath_rx.h - copied unchanged from r237004, head/sys/dev/ath/if_ath_rx.h user/andre/tcp_workqueue/sys/dev/ath/if_ath_tdma.c - copied unchanged from r237004, head/sys/dev/ath/if_ath_tdma.c user/andre/tcp_workqueue/sys/dev/ath/if_ath_tdma.h - copied unchanged from r237004, head/sys/dev/ath/if_ath_tdma.h user/andre/tcp_workqueue/sys/dev/ath/if_ath_tsf.h - copied unchanged from r237004, head/sys/dev/ath/if_ath_tsf.h user/andre/tcp_workqueue/sys/dev/drm2/ - copied from r237004, head/sys/dev/drm2/ user/andre/tcp_workqueue/sys/dev/etherswitch/ - copied from r237004, head/sys/dev/etherswitch/ user/andre/tcp_workqueue/sys/dev/fdt/fdt_slicer.c - copied unchanged from r237004, head/sys/dev/fdt/fdt_slicer.c user/andre/tcp_workqueue/sys/dev/filemon/ - copied from r237004, head/sys/dev/filemon/ user/andre/tcp_workqueue/sys/dev/gxemul/ - copied from r237004, head/sys/dev/gxemul/ user/andre/tcp_workqueue/sys/dev/hwpmc/hwpmc_octeon.c - copied unchanged from r237004, head/sys/dev/hwpmc/hwpmc_octeon.c user/andre/tcp_workqueue/sys/dev/hwpmc/hwpmc_soft.c - copied unchanged from r237004, head/sys/dev/hwpmc/hwpmc_soft.c user/andre/tcp_workqueue/sys/dev/hwpmc/hwpmc_soft.h - copied unchanged from r237004, head/sys/dev/hwpmc/hwpmc_soft.h user/andre/tcp_workqueue/sys/dev/iicbus/ds1374.c - copied unchanged from r237004, head/sys/dev/iicbus/ds1374.c user/andre/tcp_workqueue/sys/dev/iicbus/iicoc.c - copied unchanged from r237004, head/sys/dev/iicbus/iicoc.c user/andre/tcp_workqueue/sys/dev/iicbus/iicoc.h - copied unchanged from r237004, head/sys/dev/iicbus/iicoc.h user/andre/tcp_workqueue/sys/dev/iicbus/pcf8563.c - copied unchanged from r237004, head/sys/dev/iicbus/pcf8563.c user/andre/tcp_workqueue/sys/dev/iicbus/pcf8563reg.h - copied unchanged from r237004, head/sys/dev/iicbus/pcf8563reg.h user/andre/tcp_workqueue/sys/dev/mfi/mfi_syspd.c - copied unchanged from r237004, head/sys/dev/mfi/mfi_syspd.c user/andre/tcp_workqueue/sys/dev/mfi/mfi_tbolt.c - copied unchanged from r237004, head/sys/dev/mfi/mfi_tbolt.c user/andre/tcp_workqueue/sys/dev/mpt/mpilib/mpi_log_fc.h - copied unchanged from r237004, head/sys/dev/mpt/mpilib/mpi_log_fc.h user/andre/tcp_workqueue/sys/dev/mpt/mpilib/mpi_log_sas.h - copied unchanged from r237004, head/sys/dev/mpt/mpilib/mpi_log_sas.h user/andre/tcp_workqueue/sys/dev/nand/ - copied from r237004, head/sys/dev/nand/ user/andre/tcp_workqueue/sys/dev/netmap/netmap_mem1.c - copied unchanged from r237004, head/sys/dev/netmap/netmap_mem1.c user/andre/tcp_workqueue/sys/dev/netmap/netmap_mem2.c - copied unchanged from r237004, head/sys/dev/netmap/netmap_mem2.c user/andre/tcp_workqueue/sys/dev/ral/rt2860.c - copied unchanged from r237004, head/sys/dev/ral/rt2860.c user/andre/tcp_workqueue/sys/dev/ral/rt2860reg.h - copied unchanged from r237004, head/sys/dev/ral/rt2860reg.h user/andre/tcp_workqueue/sys/dev/ral/rt2860var.h - copied unchanged from r237004, head/sys/dev/ral/rt2860var.h user/andre/tcp_workqueue/sys/dev/uart/uart_cpu_x86.c - copied unchanged from r237004, head/sys/dev/uart/uart_cpu_x86.c user/andre/tcp_workqueue/sys/dev/usb/controller/ehci_fsl.c - copied unchanged from r237004, head/sys/dev/usb/controller/ehci_fsl.c user/andre/tcp_workqueue/sys/fs/nandfs/ - copied from r237004, head/sys/fs/nandfs/ user/andre/tcp_workqueue/sys/geom/geom_flashmap.c - copied unchanged from r237004, head/sys/geom/geom_flashmap.c user/andre/tcp_workqueue/sys/geom/raid/md_ddf.c - copied unchanged from r237004, head/sys/geom/raid/md_ddf.c user/andre/tcp_workqueue/sys/geom/raid/md_ddf.h - copied unchanged from r237004, head/sys/geom/raid/md_ddf.h user/andre/tcp_workqueue/sys/geom/raid/tr_raid5.c - copied unchanged from r237004, head/sys/geom/raid/tr_raid5.c user/andre/tcp_workqueue/sys/kern/kern_rangelock.c - copied unchanged from r237004, head/sys/kern/kern_rangelock.c user/andre/tcp_workqueue/sys/mips/atheros/ar71xx_fixup.c - copied unchanged from r237004, head/sys/mips/atheros/ar71xx_fixup.c user/andre/tcp_workqueue/sys/mips/atheros/ar71xx_fixup.h - copied unchanged from r237004, head/sys/mips/atheros/ar71xx_fixup.h user/andre/tcp_workqueue/sys/mips/cavium/octeon_pmc.c - copied unchanged from r237004, head/sys/mips/cavium/octeon_pmc.c user/andre/tcp_workqueue/sys/mips/conf/AP93 - copied unchanged from r237004, head/sys/mips/conf/AP93 user/andre/tcp_workqueue/sys/mips/conf/AP93.hints - copied unchanged from r237004, head/sys/mips/conf/AP93.hints user/andre/tcp_workqueue/sys/mips/conf/AP94 - copied unchanged from r237004, head/sys/mips/conf/AP94 user/andre/tcp_workqueue/sys/mips/conf/AP94.hints - copied unchanged from r237004, head/sys/mips/conf/AP94.hints user/andre/tcp_workqueue/sys/mips/conf/AP96 - copied unchanged from r237004, head/sys/mips/conf/AP96 user/andre/tcp_workqueue/sys/mips/conf/AP96.hints - copied unchanged from r237004, head/sys/mips/conf/AP96.hints user/andre/tcp_workqueue/sys/mips/conf/GXEMUL - copied unchanged from r237004, head/sys/mips/conf/GXEMUL user/andre/tcp_workqueue/sys/mips/conf/GXEMUL.hints - copied unchanged from r237004, head/sys/mips/conf/GXEMUL.hints user/andre/tcp_workqueue/sys/mips/conf/XLP.hints - copied unchanged from r237004, head/sys/mips/conf/XLP.hints user/andre/tcp_workqueue/sys/mips/gxemul/ - copied from r237004, head/sys/mips/gxemul/ user/andre/tcp_workqueue/sys/mips/nlm/board_cpld.c - copied unchanged from r237004, head/sys/mips/nlm/board_cpld.c user/andre/tcp_workqueue/sys/mips/nlm/board_eeprom.c - copied unchanged from r237004, head/sys/mips/nlm/board_eeprom.c user/andre/tcp_workqueue/sys/mips/nlm/dev/ - copied from r237004, head/sys/mips/nlm/dev/ user/andre/tcp_workqueue/sys/mips/nlm/hal/gbu.h - copied unchanged from r237004, head/sys/mips/nlm/hal/gbu.h user/andre/tcp_workqueue/sys/mips/nlm/hal/interlaken.h - copied unchanged from r237004, head/sys/mips/nlm/hal/interlaken.h user/andre/tcp_workqueue/sys/mips/nlm/hal/mdio.h - copied unchanged from r237004, head/sys/mips/nlm/hal/mdio.h user/andre/tcp_workqueue/sys/mips/nlm/hal/nae.h - copied unchanged from r237004, head/sys/mips/nlm/hal/nae.h user/andre/tcp_workqueue/sys/mips/nlm/hal/nlmsaelib.h - copied unchanged from r237004, head/sys/mips/nlm/hal/nlmsaelib.h user/andre/tcp_workqueue/sys/mips/nlm/hal/poe.h - copied unchanged from r237004, head/sys/mips/nlm/hal/poe.h user/andre/tcp_workqueue/sys/mips/nlm/hal/sgmii.h - copied unchanged from r237004, head/sys/mips/nlm/hal/sgmii.h user/andre/tcp_workqueue/sys/mips/nlm/hal/ucore_loader.h - copied unchanged from r237004, head/sys/mips/nlm/hal/ucore_loader.h user/andre/tcp_workqueue/sys/mips/nlm/hal/xaui.h - copied unchanged from r237004, head/sys/mips/nlm/hal/xaui.h user/andre/tcp_workqueue/sys/modules/drm2/ - copied from r237004, head/sys/modules/drm2/ user/andre/tcp_workqueue/sys/modules/filemon/ - copied from r237004, head/sys/modules/filemon/ user/andre/tcp_workqueue/sys/modules/nandfs/ - copied from r237004, head/sys/modules/nandfs/ user/andre/tcp_workqueue/sys/modules/nandsim/ - copied from r237004, head/sys/modules/nandsim/ user/andre/tcp_workqueue/sys/modules/netmap/ - copied from r237004, head/sys/modules/netmap/ user/andre/tcp_workqueue/sys/powerpc/booke/machdep_e500.c - copied unchanged from r237004, head/sys/powerpc/booke/machdep_e500.c user/andre/tcp_workqueue/sys/powerpc/booke/machdep_ppc4xx.c - copied unchanged from r237004, head/sys/powerpc/booke/machdep_ppc4xx.c user/andre/tcp_workqueue/sys/powerpc/include/machdep.h - copied unchanged from r237004, head/sys/powerpc/include/machdep.h user/andre/tcp_workqueue/sys/powerpc/mpc85xx/fsl_sdhc.c - copied unchanged from r237004, head/sys/powerpc/mpc85xx/fsl_sdhc.c user/andre/tcp_workqueue/sys/powerpc/mpc85xx/fsl_sdhc.h - copied unchanged from r237004, head/sys/powerpc/mpc85xx/fsl_sdhc.h user/andre/tcp_workqueue/sys/powerpc/powerpc/openpic_fdt.c - copied unchanged from r237004, head/sys/powerpc/powerpc/openpic_fdt.c user/andre/tcp_workqueue/sys/sys/rangelock.h - copied unchanged from r237004, head/sys/sys/rangelock.h user/andre/tcp_workqueue/sys/sys/slicer.h - copied unchanged from r237004, head/sys/sys/slicer.h user/andre/tcp_workqueue/sys/x86/acpica/acpi_wakeup.c - copied unchanged from r237004, head/sys/x86/acpica/acpi_wakeup.c user/andre/tcp_workqueue/sys/x86/include/legacyvar.h - copied unchanged from r237004, head/sys/x86/include/legacyvar.h user/andre/tcp_workqueue/sys/x86/x86/legacy.c - copied unchanged from r237004, head/sys/x86/x86/legacy.c Deleted: user/andre/tcp_workqueue/sys/amd64/acpica/acpi_switch.S user/andre/tcp_workqueue/sys/amd64/acpica/acpi_wakeup.c user/andre/tcp_workqueue/sys/amd64/amd64/legacy.c user/andre/tcp_workqueue/sys/amd64/include/legacyvar.h user/andre/tcp_workqueue/sys/boot/i386/btx/lib/btxcsu.s user/andre/tcp_workqueue/sys/boot/i386/cdboot/cdboot.s user/andre/tcp_workqueue/sys/boot/pc98/btx/lib/btxcsu.s user/andre/tcp_workqueue/sys/boot/pc98/cdboot/cdboot.s user/andre/tcp_workqueue/sys/cam/scsi/scsi_ses.c user/andre/tcp_workqueue/sys/dev/hwpmc/hwpmc_mips24k.h user/andre/tcp_workqueue/sys/dev/mpt/mpilib/mpi_inb.h user/andre/tcp_workqueue/sys/dev/netmap/head.diff user/andre/tcp_workqueue/sys/dev/uart/uart_cpu_amd64.c user/andre/tcp_workqueue/sys/dev/uart/uart_cpu_i386.c user/andre/tcp_workqueue/sys/i386/acpica/acpi_wakeup.c user/andre/tcp_workqueue/sys/i386/i386/legacy.c user/andre/tcp_workqueue/sys/i386/include/legacyvar.h user/andre/tcp_workqueue/sys/mips/nlm/intern_dev.c user/andre/tcp_workqueue/sys/mips/nlm/uart_pci_xlp.c user/andre/tcp_workqueue/sys/pc98/include/legacyvar.h user/andre/tcp_workqueue/sys/powerpc/mpc85xx/openpic_fdt.c user/andre/tcp_workqueue/sys/powerpc/powerpc/atomic.S Modified: user/andre/tcp_workqueue/sys/Makefile user/andre/tcp_workqueue/sys/amd64/acpica/acpi_machdep.c user/andre/tcp_workqueue/sys/amd64/acpica/acpi_wakecode.S user/andre/tcp_workqueue/sys/amd64/amd64/cpu_switch.S user/andre/tcp_workqueue/sys/amd64/amd64/fpu.c user/andre/tcp_workqueue/sys/amd64/amd64/genassym.c user/andre/tcp_workqueue/sys/amd64/amd64/identcpu.c user/andre/tcp_workqueue/sys/amd64/amd64/initcpu.c user/andre/tcp_workqueue/sys/amd64/amd64/machdep.c user/andre/tcp_workqueue/sys/amd64/amd64/minidump_machdep.c user/andre/tcp_workqueue/sys/amd64/amd64/mp_machdep.c user/andre/tcp_workqueue/sys/amd64/amd64/pmap.c user/andre/tcp_workqueue/sys/amd64/amd64/trap.c user/andre/tcp_workqueue/sys/amd64/conf/GENERIC user/andre/tcp_workqueue/sys/amd64/conf/NOTES user/andre/tcp_workqueue/sys/amd64/include/atomic.h user/andre/tcp_workqueue/sys/amd64/include/in_cksum.h user/andre/tcp_workqueue/sys/amd64/include/intr_machdep.h user/andre/tcp_workqueue/sys/amd64/include/pcb.h user/andre/tcp_workqueue/sys/amd64/include/pmap.h user/andre/tcp_workqueue/sys/amd64/include/pmc_mdep.h user/andre/tcp_workqueue/sys/amd64/include/proc.h user/andre/tcp_workqueue/sys/amd64/include/smp.h user/andre/tcp_workqueue/sys/amd64/include/vm.h user/andre/tcp_workqueue/sys/amd64/include/vmparam.h user/andre/tcp_workqueue/sys/amd64/linux32/linux.h user/andre/tcp_workqueue/sys/amd64/linux32/linux32_dummy.c user/andre/tcp_workqueue/sys/amd64/linux32/linux32_machdep.c user/andre/tcp_workqueue/sys/amd64/linux32/linux32_proto.h user/andre/tcp_workqueue/sys/amd64/linux32/linux32_syscall.h user/andre/tcp_workqueue/sys/amd64/linux32/linux32_syscalls.c user/andre/tcp_workqueue/sys/amd64/linux32/linux32_sysent.c user/andre/tcp_workqueue/sys/amd64/linux32/linux32_systrace_args.c user/andre/tcp_workqueue/sys/amd64/linux32/syscalls.master user/andre/tcp_workqueue/sys/arm/arm/bcopyinout_xscale.S user/andre/tcp_workqueue/sys/arm/arm/bootconfig.c user/andre/tcp_workqueue/sys/arm/arm/busdma_machdep.c user/andre/tcp_workqueue/sys/arm/arm/cpufunc.c user/andre/tcp_workqueue/sys/arm/arm/cpufunc_asm.S user/andre/tcp_workqueue/sys/arm/arm/cpufunc_asm_arm10.S user/andre/tcp_workqueue/sys/arm/arm/cpufunc_asm_arm11.S user/andre/tcp_workqueue/sys/arm/arm/cpufunc_asm_arm7tdmi.S user/andre/tcp_workqueue/sys/arm/arm/cpufunc_asm_arm8.S user/andre/tcp_workqueue/sys/arm/arm/cpufunc_asm_arm9.S user/andre/tcp_workqueue/sys/arm/arm/cpufunc_asm_armv4.S user/andre/tcp_workqueue/sys/arm/arm/cpufunc_asm_armv5.S user/andre/tcp_workqueue/sys/arm/arm/cpufunc_asm_sa1.S user/andre/tcp_workqueue/sys/arm/arm/cpufunc_asm_xscale.S user/andre/tcp_workqueue/sys/arm/arm/cpufunc_asm_xscale_c3.S user/andre/tcp_workqueue/sys/arm/arm/db_disasm.c user/andre/tcp_workqueue/sys/arm/arm/db_interface.c user/andre/tcp_workqueue/sys/arm/arm/db_trace.c user/andre/tcp_workqueue/sys/arm/arm/disassem.c user/andre/tcp_workqueue/sys/arm/arm/dump_machdep.c user/andre/tcp_workqueue/sys/arm/arm/elf_trampoline.c user/andre/tcp_workqueue/sys/arm/arm/exception.S user/andre/tcp_workqueue/sys/arm/arm/gdb_machdep.c user/andre/tcp_workqueue/sys/arm/arm/identcpu.c user/andre/tcp_workqueue/sys/arm/arm/in_cksum.c user/andre/tcp_workqueue/sys/arm/arm/intr.c user/andre/tcp_workqueue/sys/arm/arm/irq_dispatch.S user/andre/tcp_workqueue/sys/arm/arm/locore.S user/andre/tcp_workqueue/sys/arm/arm/machdep.c user/andre/tcp_workqueue/sys/arm/arm/mem.c user/andre/tcp_workqueue/sys/arm/arm/nexus.c user/andre/tcp_workqueue/sys/arm/arm/pmap.c user/andre/tcp_workqueue/sys/arm/arm/support.S user/andre/tcp_workqueue/sys/arm/arm/swtch.S user/andre/tcp_workqueue/sys/arm/arm/sys_machdep.c user/andre/tcp_workqueue/sys/arm/arm/trap.c user/andre/tcp_workqueue/sys/arm/arm/undefined.c user/andre/tcp_workqueue/sys/arm/arm/vectors.S user/andre/tcp_workqueue/sys/arm/arm/vm_machdep.c user/andre/tcp_workqueue/sys/arm/at91/at91.c user/andre/tcp_workqueue/sys/arm/at91/at91_machdep.c user/andre/tcp_workqueue/sys/arm/at91/at91_mci.c user/andre/tcp_workqueue/sys/arm/at91/at91_mcireg.h user/andre/tcp_workqueue/sys/arm/at91/at91_pio.c user/andre/tcp_workqueue/sys/arm/at91/at91_pio_rm9200.h user/andre/tcp_workqueue/sys/arm/at91/at91_pioreg.h user/andre/tcp_workqueue/sys/arm/at91/at91_piovar.h user/andre/tcp_workqueue/sys/arm/at91/at91_pit.c user/andre/tcp_workqueue/sys/arm/at91/at91_pitreg.h user/andre/tcp_workqueue/sys/arm/at91/at91_pmc.c user/andre/tcp_workqueue/sys/arm/at91/at91_pmcvar.h user/andre/tcp_workqueue/sys/arm/at91/at91_reset.S user/andre/tcp_workqueue/sys/arm/at91/at91_rst.c user/andre/tcp_workqueue/sys/arm/at91/at91_spi.c user/andre/tcp_workqueue/sys/arm/at91/at91_spireg.h user/andre/tcp_workqueue/sys/arm/at91/at91_ssc.c user/andre/tcp_workqueue/sys/arm/at91/at91_twi.c user/andre/tcp_workqueue/sys/arm/at91/at91_twireg.h user/andre/tcp_workqueue/sys/arm/at91/at91_wdt.c user/andre/tcp_workqueue/sys/arm/at91/at91_wdtreg.h user/andre/tcp_workqueue/sys/arm/at91/at91reg.h user/andre/tcp_workqueue/sys/arm/at91/at91rm9200.c user/andre/tcp_workqueue/sys/arm/at91/at91rm92reg.h user/andre/tcp_workqueue/sys/arm/at91/at91sam9260.c user/andre/tcp_workqueue/sys/arm/at91/at91sam9260reg.h user/andre/tcp_workqueue/sys/arm/at91/at91sam9g20.c user/andre/tcp_workqueue/sys/arm/at91/at91sam9g20reg.h user/andre/tcp_workqueue/sys/arm/at91/at91var.h user/andre/tcp_workqueue/sys/arm/at91/board_qila9g20.c user/andre/tcp_workqueue/sys/arm/at91/board_sam9g20ek.c user/andre/tcp_workqueue/sys/arm/at91/files.at91sam9 user/andre/tcp_workqueue/sys/arm/at91/if_ate.c user/andre/tcp_workqueue/sys/arm/at91/if_macb.c user/andre/tcp_workqueue/sys/arm/at91/std.hl200 user/andre/tcp_workqueue/sys/arm/at91/std.hl201 user/andre/tcp_workqueue/sys/arm/at91/std.kb920x user/andre/tcp_workqueue/sys/arm/at91/std.qila9g20 user/andre/tcp_workqueue/sys/arm/at91/std.sam9g20ek user/andre/tcp_workqueue/sys/arm/at91/uart_cpu_at91rm9200usart.c user/andre/tcp_workqueue/sys/arm/at91/uart_dev_at91usart.c user/andre/tcp_workqueue/sys/arm/conf/AVILA user/andre/tcp_workqueue/sys/arm/conf/BWCT user/andre/tcp_workqueue/sys/arm/conf/CAMBRIA user/andre/tcp_workqueue/sys/arm/conf/CNS11XXNAS user/andre/tcp_workqueue/sys/arm/conf/CRB user/andre/tcp_workqueue/sys/arm/conf/DB-78XXX user/andre/tcp_workqueue/sys/arm/conf/DB-88F5XXX user/andre/tcp_workqueue/sys/arm/conf/DB-88F6XXX user/andre/tcp_workqueue/sys/arm/conf/DOCKSTAR user/andre/tcp_workqueue/sys/arm/conf/EP80219 user/andre/tcp_workqueue/sys/arm/conf/GUMSTIX user/andre/tcp_workqueue/sys/arm/conf/HL200 user/andre/tcp_workqueue/sys/arm/conf/HL201 user/andre/tcp_workqueue/sys/arm/conf/IQ31244 user/andre/tcp_workqueue/sys/arm/conf/KB920X user/andre/tcp_workqueue/sys/arm/conf/LN2410SBC user/andre/tcp_workqueue/sys/arm/conf/NSLU user/andre/tcp_workqueue/sys/arm/conf/QILA9G20 user/andre/tcp_workqueue/sys/arm/conf/QILA9G20.hints user/andre/tcp_workqueue/sys/arm/conf/SAM9G20EK user/andre/tcp_workqueue/sys/arm/conf/SAM9G20EK.hints user/andre/tcp_workqueue/sys/arm/conf/SHEEVAPLUG user/andre/tcp_workqueue/sys/arm/conf/SIMICS user/andre/tcp_workqueue/sys/arm/conf/TS7800 user/andre/tcp_workqueue/sys/arm/econa/econa_machdep.c user/andre/tcp_workqueue/sys/arm/include/armreg.h user/andre/tcp_workqueue/sys/arm/include/asmacros.h user/andre/tcp_workqueue/sys/arm/include/atomic.h user/andre/tcp_workqueue/sys/arm/include/blockio.h user/andre/tcp_workqueue/sys/arm/include/cpu.h user/andre/tcp_workqueue/sys/arm/include/cpufunc.h user/andre/tcp_workqueue/sys/arm/include/elf.h user/andre/tcp_workqueue/sys/arm/include/endian.h user/andre/tcp_workqueue/sys/arm/include/fdt.h user/andre/tcp_workqueue/sys/arm/include/fp.h user/andre/tcp_workqueue/sys/arm/include/frame.h user/andre/tcp_workqueue/sys/arm/include/ieee.h user/andre/tcp_workqueue/sys/arm/include/in_cksum.h user/andre/tcp_workqueue/sys/arm/include/intr.h user/andre/tcp_workqueue/sys/arm/include/katelib.h user/andre/tcp_workqueue/sys/arm/include/kdb.h user/andre/tcp_workqueue/sys/arm/include/machdep.h user/andre/tcp_workqueue/sys/arm/include/param.h user/andre/tcp_workqueue/sys/arm/include/pcb.h user/andre/tcp_workqueue/sys/arm/include/pmap.h user/andre/tcp_workqueue/sys/arm/include/pmc_mdep.h user/andre/tcp_workqueue/sys/arm/include/profile.h user/andre/tcp_workqueue/sys/arm/include/pte.h user/andre/tcp_workqueue/sys/arm/include/resource.h user/andre/tcp_workqueue/sys/arm/include/stack.h user/andre/tcp_workqueue/sys/arm/include/sysarch.h user/andre/tcp_workqueue/sys/arm/include/vmparam.h user/andre/tcp_workqueue/sys/arm/mv/discovery/discovery.c user/andre/tcp_workqueue/sys/arm/mv/files.mv user/andre/tcp_workqueue/sys/arm/mv/mv_machdep.c user/andre/tcp_workqueue/sys/arm/mv/mvwin.h user/andre/tcp_workqueue/sys/arm/s3c2xx0/s3c2410reg.h user/andre/tcp_workqueue/sys/arm/s3c2xx0/s3c2440reg.h user/andre/tcp_workqueue/sys/arm/s3c2xx0/s3c24x0.c user/andre/tcp_workqueue/sys/arm/s3c2xx0/s3c24x0_machdep.c user/andre/tcp_workqueue/sys/arm/s3c2xx0/s3c24x0reg.h user/andre/tcp_workqueue/sys/arm/sa11x0/assabet_machdep.c user/andre/tcp_workqueue/sys/arm/sa11x0/sa11x0.c user/andre/tcp_workqueue/sys/arm/sa11x0/sa11x0_gpioreg.h user/andre/tcp_workqueue/sys/arm/sa11x0/sa11x0_io_asm.S user/andre/tcp_workqueue/sys/arm/sa11x0/sa11x0_irq.S user/andre/tcp_workqueue/sys/arm/sa11x0/sa11x0_ost.c user/andre/tcp_workqueue/sys/arm/sa11x0/sa11x0_ostreg.h user/andre/tcp_workqueue/sys/arm/sa11x0/sa11x0_var.h user/andre/tcp_workqueue/sys/arm/sa11x0/uart_dev_sa1110.c user/andre/tcp_workqueue/sys/arm/xscale/i80321/ep80219_machdep.c user/andre/tcp_workqueue/sys/arm/xscale/i80321/i80321.c user/andre/tcp_workqueue/sys/arm/xscale/i80321/i80321_aau.c user/andre/tcp_workqueue/sys/arm/xscale/i80321/i80321_dma.c user/andre/tcp_workqueue/sys/arm/xscale/i80321/i80321_intr.h user/andre/tcp_workqueue/sys/arm/xscale/i80321/i80321_pci.c user/andre/tcp_workqueue/sys/arm/xscale/i80321/i80321_space.c user/andre/tcp_workqueue/sys/arm/xscale/i80321/i80321_timer.c user/andre/tcp_workqueue/sys/arm/xscale/i80321/i80321reg.h user/andre/tcp_workqueue/sys/arm/xscale/i80321/iq31244_7seg.c user/andre/tcp_workqueue/sys/arm/xscale/i80321/iq31244_machdep.c user/andre/tcp_workqueue/sys/arm/xscale/i80321/iq80321.c user/andre/tcp_workqueue/sys/arm/xscale/i80321/obio.c user/andre/tcp_workqueue/sys/arm/xscale/i8134x/crb_machdep.c user/andre/tcp_workqueue/sys/arm/xscale/i8134x/i81342.c user/andre/tcp_workqueue/sys/arm/xscale/i8134x/i81342_mcu.c user/andre/tcp_workqueue/sys/arm/xscale/i8134x/i81342_pci.c user/andre/tcp_workqueue/sys/arm/xscale/i8134x/i81342_space.c user/andre/tcp_workqueue/sys/arm/xscale/i8134x/i81342reg.h user/andre/tcp_workqueue/sys/arm/xscale/i8134x/iq81342_7seg.c user/andre/tcp_workqueue/sys/arm/xscale/i8134x/obio.c user/andre/tcp_workqueue/sys/arm/xscale/i8134x/uart_cpu_i81342.c user/andre/tcp_workqueue/sys/arm/xscale/ixp425/avila_ata.c user/andre/tcp_workqueue/sys/arm/xscale/ixp425/avila_gpio.c user/andre/tcp_workqueue/sys/arm/xscale/ixp425/avila_machdep.c user/andre/tcp_workqueue/sys/arm/xscale/ixp425/cambria_exp_space.c user/andre/tcp_workqueue/sys/arm/xscale/ixp425/if_npe.c user/andre/tcp_workqueue/sys/arm/xscale/ixp425/if_npereg.h user/andre/tcp_workqueue/sys/arm/xscale/ixp425/ixp425.c user/andre/tcp_workqueue/sys/arm/xscale/ixp425/ixp425_iic.c user/andre/tcp_workqueue/sys/arm/xscale/ixp425/ixp425_npe.c user/andre/tcp_workqueue/sys/arm/xscale/ixp425/ixp425_npereg.h user/andre/tcp_workqueue/sys/arm/xscale/ixp425/ixp425_pci.c user/andre/tcp_workqueue/sys/arm/xscale/ixp425/ixp425_pci_space.c user/andre/tcp_workqueue/sys/arm/xscale/ixp425/ixp425_qmgr.c user/andre/tcp_workqueue/sys/arm/xscale/ixp425/ixp425_qmgr.h user/andre/tcp_workqueue/sys/arm/xscale/ixp425/ixp425reg.h user/andre/tcp_workqueue/sys/arm/xscale/ixp425/std.ixp425 user/andre/tcp_workqueue/sys/arm/xscale/ixp425/std.ixp435 user/andre/tcp_workqueue/sys/arm/xscale/pxa/if_smc_smi.c user/andre/tcp_workqueue/sys/arm/xscale/pxa/pxa_machdep.c user/andre/tcp_workqueue/sys/arm/xscale/pxa/pxareg.h user/andre/tcp_workqueue/sys/arm/xscale/pxa/uart_bus_pxa.c user/andre/tcp_workqueue/sys/boot/Makefile.sparc64 user/andre/tcp_workqueue/sys/boot/arm/at91/boot2/boot2.c user/andre/tcp_workqueue/sys/boot/arm/at91/libat91/at91rm9200.h user/andre/tcp_workqueue/sys/boot/arm/ixp425/boot2/boot2.c user/andre/tcp_workqueue/sys/boot/arm/uboot/Makefile user/andre/tcp_workqueue/sys/boot/arm/uboot/conf.c user/andre/tcp_workqueue/sys/boot/arm/uboot/ldscript.arm user/andre/tcp_workqueue/sys/boot/arm/uboot/start.S user/andre/tcp_workqueue/sys/boot/arm/uboot/version user/andre/tcp_workqueue/sys/boot/common/boot.c user/andre/tcp_workqueue/sys/boot/common/bootstrap.h user/andre/tcp_workqueue/sys/boot/common/crc32.c user/andre/tcp_workqueue/sys/boot/common/gpt.c user/andre/tcp_workqueue/sys/boot/common/loader.8 user/andre/tcp_workqueue/sys/boot/common/ufsread.c user/andre/tcp_workqueue/sys/boot/efi/Makefile.inc user/andre/tcp_workqueue/sys/boot/fdt/dts/db78100.dts user/andre/tcp_workqueue/sys/boot/fdt/dts/db88f6281.dts user/andre/tcp_workqueue/sys/boot/fdt/dts/p3041ds.dts user/andre/tcp_workqueue/sys/boot/fdt/dts/sheevaplug.dts user/andre/tcp_workqueue/sys/boot/fdt/fdt_loader_cmd.c user/andre/tcp_workqueue/sys/boot/forth/beastie.4th user/andre/tcp_workqueue/sys/boot/forth/beastie.4th.8 user/andre/tcp_workqueue/sys/boot/forth/brand.4th user/andre/tcp_workqueue/sys/boot/forth/brand.4th.8 user/andre/tcp_workqueue/sys/boot/forth/check-password.4th user/andre/tcp_workqueue/sys/boot/forth/check-password.4th.8 user/andre/tcp_workqueue/sys/boot/forth/color.4th user/andre/tcp_workqueue/sys/boot/forth/color.4th.8 user/andre/tcp_workqueue/sys/boot/forth/delay.4th user/andre/tcp_workqueue/sys/boot/forth/delay.4th.8 user/andre/tcp_workqueue/sys/boot/forth/loader.conf.5 user/andre/tcp_workqueue/sys/boot/forth/menu-commands.4th user/andre/tcp_workqueue/sys/boot/forth/menu.4th user/andre/tcp_workqueue/sys/boot/forth/menu.4th.8 user/andre/tcp_workqueue/sys/boot/forth/shortcuts.4th user/andre/tcp_workqueue/sys/boot/forth/version.4th user/andre/tcp_workqueue/sys/boot/forth/version.4th.8 user/andre/tcp_workqueue/sys/boot/i386/boot2/boot2.c user/andre/tcp_workqueue/sys/boot/i386/btx/btx/Makefile user/andre/tcp_workqueue/sys/boot/i386/btx/btx/btx.S user/andre/tcp_workqueue/sys/boot/i386/btx/btxldr/Makefile user/andre/tcp_workqueue/sys/boot/i386/btx/btxldr/btxldr.S user/andre/tcp_workqueue/sys/boot/i386/btx/lib/Makefile user/andre/tcp_workqueue/sys/boot/i386/cdboot/Makefile user/andre/tcp_workqueue/sys/boot/i386/efi/Makefile user/andre/tcp_workqueue/sys/boot/i386/efi/reloc.c user/andre/tcp_workqueue/sys/boot/i386/gptboot/gptboot.c user/andre/tcp_workqueue/sys/boot/i386/libi386/Makefile user/andre/tcp_workqueue/sys/boot/i386/libi386/biosdisk.c user/andre/tcp_workqueue/sys/boot/i386/libi386/biospnp.c user/andre/tcp_workqueue/sys/boot/i386/libi386/devicename.c user/andre/tcp_workqueue/sys/boot/i386/libi386/libi386.h user/andre/tcp_workqueue/sys/boot/i386/loader/Makefile user/andre/tcp_workqueue/sys/boot/i386/loader/conf.c user/andre/tcp_workqueue/sys/boot/i386/loader/main.c user/andre/tcp_workqueue/sys/boot/i386/pxeldr/Makefile user/andre/tcp_workqueue/sys/boot/i386/pxeldr/pxeldr.S user/andre/tcp_workqueue/sys/boot/i386/zfsboot/zfsboot.c user/andre/tcp_workqueue/sys/boot/ofw/libofw/Makefile user/andre/tcp_workqueue/sys/boot/ofw/libofw/devicename.c user/andre/tcp_workqueue/sys/boot/ofw/libofw/libofw.h user/andre/tcp_workqueue/sys/boot/ofw/libofw/ofw_disk.c user/andre/tcp_workqueue/sys/boot/pc98/boot2/boot2.c user/andre/tcp_workqueue/sys/boot/pc98/btx/btx/Makefile user/andre/tcp_workqueue/sys/boot/pc98/btx/btx/btx.S user/andre/tcp_workqueue/sys/boot/pc98/btx/btxldr/Makefile user/andre/tcp_workqueue/sys/boot/pc98/btx/btxldr/btxldr.S user/andre/tcp_workqueue/sys/boot/pc98/btx/lib/Makefile user/andre/tcp_workqueue/sys/boot/pc98/cdboot/Makefile user/andre/tcp_workqueue/sys/boot/pc98/libpc98/Makefile user/andre/tcp_workqueue/sys/boot/pc98/libpc98/biosdisk.c user/andre/tcp_workqueue/sys/boot/pc98/loader/main.c user/andre/tcp_workqueue/sys/boot/powerpc/boot1.chrp/boot1.c user/andre/tcp_workqueue/sys/boot/powerpc/ps3/start.S user/andre/tcp_workqueue/sys/boot/sparc64/Makefile user/andre/tcp_workqueue/sys/boot/sparc64/boot1/Makefile user/andre/tcp_workqueue/sys/boot/sparc64/boot1/boot1.c user/andre/tcp_workqueue/sys/boot/sparc64/loader/Makefile user/andre/tcp_workqueue/sys/boot/sparc64/loader/main.c user/andre/tcp_workqueue/sys/boot/uboot/common/metadata.c user/andre/tcp_workqueue/sys/boot/uboot/lib/Makefile user/andre/tcp_workqueue/sys/boot/uboot/lib/api_public.h user/andre/tcp_workqueue/sys/boot/uboot/lib/copy.c user/andre/tcp_workqueue/sys/boot/uboot/lib/devicename.c user/andre/tcp_workqueue/sys/boot/uboot/lib/disk.c user/andre/tcp_workqueue/sys/boot/uboot/lib/elf_freebsd.c user/andre/tcp_workqueue/sys/boot/uboot/lib/glue.c user/andre/tcp_workqueue/sys/boot/uboot/lib/libuboot.h user/andre/tcp_workqueue/sys/boot/zfs/zfs.c user/andre/tcp_workqueue/sys/boot/zfs/zfsimpl.c user/andre/tcp_workqueue/sys/cam/ata/ata_all.c user/andre/tcp_workqueue/sys/cam/ata/ata_all.h user/andre/tcp_workqueue/sys/cam/ata/ata_da.c user/andre/tcp_workqueue/sys/cam/ata/ata_pmp.c user/andre/tcp_workqueue/sys/cam/ata/ata_xpt.c user/andre/tcp_workqueue/sys/cam/cam.h user/andre/tcp_workqueue/sys/cam/cam_ccb.h user/andre/tcp_workqueue/sys/cam/cam_debug.h user/andre/tcp_workqueue/sys/cam/cam_periph.c user/andre/tcp_workqueue/sys/cam/cam_periph.h user/andre/tcp_workqueue/sys/cam/cam_sim.h user/andre/tcp_workqueue/sys/cam/cam_xpt.c user/andre/tcp_workqueue/sys/cam/cam_xpt.h user/andre/tcp_workqueue/sys/cam/cam_xpt_sim.h user/andre/tcp_workqueue/sys/cam/ctl/ctl.c user/andre/tcp_workqueue/sys/cam/ctl/ctl_backend.c user/andre/tcp_workqueue/sys/cam/ctl/ctl_cmd_table.c user/andre/tcp_workqueue/sys/cam/ctl/ctl_error.c user/andre/tcp_workqueue/sys/cam/ctl/ctl_frontend.c user/andre/tcp_workqueue/sys/cam/ctl/ctl_frontend_internal.c user/andre/tcp_workqueue/sys/cam/ctl/ctl_private.h user/andre/tcp_workqueue/sys/cam/ctl/scsi_ctl.c user/andre/tcp_workqueue/sys/cam/scsi/scsi_all.c user/andre/tcp_workqueue/sys/cam/scsi/scsi_all.h user/andre/tcp_workqueue/sys/cam/scsi/scsi_cd.c user/andre/tcp_workqueue/sys/cam/scsi/scsi_ch.c user/andre/tcp_workqueue/sys/cam/scsi/scsi_da.c user/andre/tcp_workqueue/sys/cam/scsi/scsi_pass.c user/andre/tcp_workqueue/sys/cam/scsi/scsi_pt.c user/andre/tcp_workqueue/sys/cam/scsi/scsi_sa.c user/andre/tcp_workqueue/sys/cam/scsi/scsi_ses.h user/andre/tcp_workqueue/sys/cam/scsi/scsi_sg.c user/andre/tcp_workqueue/sys/cam/scsi/scsi_target.c user/andre/tcp_workqueue/sys/cam/scsi/scsi_xpt.c user/andre/tcp_workqueue/sys/cddl/boot/zfs/zfsimpl.h user/andre/tcp_workqueue/sys/cddl/contrib/opensolaris/common/zfs/zpool_prop.c user/andre/tcp_workqueue/sys/cddl/contrib/opensolaris/uts/common/Makefile.files user/andre/tcp_workqueue/sys/cddl/contrib/opensolaris/uts/common/dtrace/dtrace.c user/andre/tcp_workqueue/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/arc.c user/andre/tcp_workqueue/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/dbuf.c user/andre/tcp_workqueue/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/ddt.c user/andre/tcp_workqueue/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/dmu.c user/andre/tcp_workqueue/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/dmu_send.c user/andre/tcp_workqueue/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/dmu_traverse.c user/andre/tcp_workqueue/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/dmu_tx.c user/andre/tcp_workqueue/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/dnode.c user/andre/tcp_workqueue/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/dnode_sync.c user/andre/tcp_workqueue/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/dsl_dataset.c user/andre/tcp_workqueue/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/dsl_deleg.c user/andre/tcp_workqueue/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/dsl_pool.c user/andre/tcp_workqueue/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/dsl_scan.c user/andre/tcp_workqueue/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sa.c user/andre/tcp_workqueue/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/spa.c user/andre/tcp_workqueue/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/spa_config.c user/andre/tcp_workqueue/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/spa_misc.c user/andre/tcp_workqueue/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/space_map.c user/andre/tcp_workqueue/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/dmu.h user/andre/tcp_workqueue/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/dmu_impl.h user/andre/tcp_workqueue/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/dmu_traverse.h user/andre/tcp_workqueue/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/dsl_dataset.h user/andre/tcp_workqueue/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/dsl_pool.h user/andre/tcp_workqueue/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/dsl_scan.h user/andre/tcp_workqueue/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/spa.h user/andre/tcp_workqueue/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/spa_impl.h user/andre/tcp_workqueue/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/vdev.h user/andre/tcp_workqueue/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/vdev_impl.h user/andre/tcp_workqueue/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/zap.h user/andre/tcp_workqueue/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/zio.h user/andre/tcp_workqueue/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/vdev.c user/andre/tcp_workqueue/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/vdev_disk.c user/andre/tcp_workqueue/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/vdev_file.c user/andre/tcp_workqueue/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/vdev_geom.c user/andre/tcp_workqueue/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/vdev_label.c user/andre/tcp_workqueue/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/vdev_mirror.c user/andre/tcp_workqueue/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/vdev_missing.c user/andre/tcp_workqueue/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/vdev_raidz.c user/andre/tcp_workqueue/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/vdev_root.c user/andre/tcp_workqueue/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zap.c user/andre/tcp_workqueue/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zap_micro.c user/andre/tcp_workqueue/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zfs_ioctl.c user/andre/tcp_workqueue/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zfs_vfsops.c user/andre/tcp_workqueue/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zfs_vnops.c user/andre/tcp_workqueue/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zfs_znode.c user/andre/tcp_workqueue/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zio.c user/andre/tcp_workqueue/sys/cddl/contrib/opensolaris/uts/common/sys/dtrace.h user/andre/tcp_workqueue/sys/cddl/contrib/opensolaris/uts/common/sys/fs/zfs.h user/andre/tcp_workqueue/sys/cddl/contrib/opensolaris/uts/common/sys/nvpair.h user/andre/tcp_workqueue/sys/cddl/dev/dtrace/amd64/dtrace_subr.c user/andre/tcp_workqueue/sys/cddl/dev/dtrace/dtrace_ioctl.c user/andre/tcp_workqueue/sys/cddl/dev/dtrace/i386/dtrace_subr.c user/andre/tcp_workqueue/sys/cddl/dev/lockstat/lockstat.c user/andre/tcp_workqueue/sys/cddl/dev/profile/profile.c user/andre/tcp_workqueue/sys/cddl/dev/sdt/sdt.c user/andre/tcp_workqueue/sys/compat/freebsd32/freebsd32.h user/andre/tcp_workqueue/sys/compat/freebsd32/freebsd32_misc.c user/andre/tcp_workqueue/sys/compat/freebsd32/freebsd32_proto.h user/andre/tcp_workqueue/sys/compat/freebsd32/freebsd32_syscall.h user/andre/tcp_workqueue/sys/compat/freebsd32/freebsd32_syscalls.c user/andre/tcp_workqueue/sys/compat/freebsd32/freebsd32_sysent.c user/andre/tcp_workqueue/sys/compat/freebsd32/freebsd32_systrace_args.c user/andre/tcp_workqueue/sys/compat/freebsd32/syscalls.master user/andre/tcp_workqueue/sys/compat/linux/linux_emul.c user/andre/tcp_workqueue/sys/compat/linux/linux_emul.h user/andre/tcp_workqueue/sys/compat/linux/linux_file.c user/andre/tcp_workqueue/sys/compat/linux/linux_fork.c user/andre/tcp_workqueue/sys/compat/linux/linux_futex.c user/andre/tcp_workqueue/sys/compat/linux/linux_mib.c user/andre/tcp_workqueue/sys/compat/linux/linux_misc.c user/andre/tcp_workqueue/sys/compat/linux/linux_sysctl.c user/andre/tcp_workqueue/sys/compat/linux/linux_time.c user/andre/tcp_workqueue/sys/compat/linux/linux_uid16.c user/andre/tcp_workqueue/sys/compat/linux/linux_util.c user/andre/tcp_workqueue/sys/compat/linux/linux_util.h user/andre/tcp_workqueue/sys/compat/ndis/subr_ntoskrnl.c user/andre/tcp_workqueue/sys/conf/NOTES user/andre/tcp_workqueue/sys/conf/files user/andre/tcp_workqueue/sys/conf/files.amd64 user/andre/tcp_workqueue/sys/conf/files.arm user/andre/tcp_workqueue/sys/conf/files.i386 user/andre/tcp_workqueue/sys/conf/files.ia64 user/andre/tcp_workqueue/sys/conf/files.mips user/andre/tcp_workqueue/sys/conf/files.pc98 user/andre/tcp_workqueue/sys/conf/files.powerpc user/andre/tcp_workqueue/sys/conf/files.sparc64 user/andre/tcp_workqueue/sys/conf/kern.mk user/andre/tcp_workqueue/sys/conf/kern.post.mk user/andre/tcp_workqueue/sys/conf/kern.pre.mk user/andre/tcp_workqueue/sys/conf/kmod.mk user/andre/tcp_workqueue/sys/conf/makeLINT.mk user/andre/tcp_workqueue/sys/conf/options user/andre/tcp_workqueue/sys/conf/options.amd64 user/andre/tcp_workqueue/sys/conf/options.arm user/andre/tcp_workqueue/sys/conf/options.i386 user/andre/tcp_workqueue/sys/conf/options.mips user/andre/tcp_workqueue/sys/conf/options.powerpc user/andre/tcp_workqueue/sys/contrib/dev/acpica/acpica_prep.sh user/andre/tcp_workqueue/sys/contrib/dev/acpica/changes.txt (contents, props changed) user/andre/tcp_workqueue/sys/contrib/dev/acpica/common/adfile.c user/andre/tcp_workqueue/sys/contrib/dev/acpica/common/adisasm.c user/andre/tcp_workqueue/sys/contrib/dev/acpica/common/adwalk.c user/andre/tcp_workqueue/sys/contrib/dev/acpica/common/dmextern.c user/andre/tcp_workqueue/sys/contrib/dev/acpica/common/getopt.c user/andre/tcp_workqueue/sys/contrib/dev/acpica/compiler/aslcodegen.c user/andre/tcp_workqueue/sys/contrib/dev/acpica/compiler/aslcompile.c user/andre/tcp_workqueue/sys/contrib/dev/acpica/compiler/aslcompiler.h user/andre/tcp_workqueue/sys/contrib/dev/acpica/compiler/aslcompiler.l user/andre/tcp_workqueue/sys/contrib/dev/acpica/compiler/aslcompiler.y user/andre/tcp_workqueue/sys/contrib/dev/acpica/compiler/aslerror.c user/andre/tcp_workqueue/sys/contrib/dev/acpica/compiler/aslfiles.c user/andre/tcp_workqueue/sys/contrib/dev/acpica/compiler/aslglobal.h user/andre/tcp_workqueue/sys/contrib/dev/acpica/compiler/aslmain.c user/andre/tcp_workqueue/sys/contrib/dev/acpica/compiler/aslmap.c user/andre/tcp_workqueue/sys/contrib/dev/acpica/compiler/aslmessages.h user/andre/tcp_workqueue/sys/contrib/dev/acpica/compiler/aslrestype1.c user/andre/tcp_workqueue/sys/contrib/dev/acpica/compiler/aslstartup.c user/andre/tcp_workqueue/sys/contrib/dev/acpica/compiler/asltypes.h user/andre/tcp_workqueue/sys/contrib/dev/acpica/compiler/aslutils.c user/andre/tcp_workqueue/sys/contrib/dev/acpica/compiler/dtcompile.c user/andre/tcp_workqueue/sys/contrib/dev/acpica/compiler/dtcompiler.h user/andre/tcp_workqueue/sys/contrib/dev/acpica/compiler/dtexpress.c user/andre/tcp_workqueue/sys/contrib/dev/acpica/compiler/dtio.c user/andre/tcp_workqueue/sys/contrib/dev/acpica/compiler/dtparser.y user/andre/tcp_workqueue/sys/contrib/dev/acpica/components/debugger/dbcmds.c user/andre/tcp_workqueue/sys/contrib/dev/acpica/components/debugger/dbdisply.c user/andre/tcp_workqueue/sys/contrib/dev/acpica/components/debugger/dbfileio.c user/andre/tcp_workqueue/sys/contrib/dev/acpica/components/debugger/dbstats.c user/andre/tcp_workqueue/sys/contrib/dev/acpica/components/debugger/dbutils.c user/andre/tcp_workqueue/sys/contrib/dev/acpica/components/dispatcher/dsfield.c user/andre/tcp_workqueue/sys/contrib/dev/acpica/components/events/evmisc.c user/andre/tcp_workqueue/sys/contrib/dev/acpica/components/events/evxface.c user/andre/tcp_workqueue/sys/contrib/dev/acpica/components/executer/exdump.c user/andre/tcp_workqueue/sys/contrib/dev/acpica/components/hardware/hwesleep.c user/andre/tcp_workqueue/sys/contrib/dev/acpica/components/hardware/hwsleep.c user/andre/tcp_workqueue/sys/contrib/dev/acpica/components/hardware/hwxfsleep.c user/andre/tcp_workqueue/sys/contrib/dev/acpica/components/namespace/nsdump.c user/andre/tcp_workqueue/sys/contrib/dev/acpica/components/namespace/nsdumpdv.c user/andre/tcp_workqueue/sys/contrib/dev/acpica/components/namespace/nspredef.c user/andre/tcp_workqueue/sys/contrib/dev/acpica/components/namespace/nsrepair.c user/andre/tcp_workqueue/sys/contrib/dev/acpica/components/namespace/nsutils.c user/andre/tcp_workqueue/sys/contrib/dev/acpica/components/parser/psargs.c user/andre/tcp_workqueue/sys/contrib/dev/acpica/components/tables/tbfadt.c user/andre/tcp_workqueue/sys/contrib/dev/acpica/components/tables/tbinstal.c user/andre/tcp_workqueue/sys/contrib/dev/acpica/components/tables/tbutils.c user/andre/tcp_workqueue/sys/contrib/dev/acpica/components/utilities/utdelete.c user/andre/tcp_workqueue/sys/contrib/dev/acpica/components/utilities/utglobal.c user/andre/tcp_workqueue/sys/contrib/dev/acpica/components/utilities/utmisc.c user/andre/tcp_workqueue/sys/contrib/dev/acpica/components/utilities/uttrack.c user/andre/tcp_workqueue/sys/contrib/dev/acpica/include/acglobal.h user/andre/tcp_workqueue/sys/contrib/dev/acpica/include/achware.h user/andre/tcp_workqueue/sys/contrib/dev/acpica/include/aclocal.h user/andre/tcp_workqueue/sys/contrib/dev/acpica/include/acnames.h user/andre/tcp_workqueue/sys/contrib/dev/acpica/include/acnamesp.h user/andre/tcp_workqueue/sys/contrib/dev/acpica/include/acobject.h user/andre/tcp_workqueue/sys/contrib/dev/acpica/include/acoutput.h user/andre/tcp_workqueue/sys/contrib/dev/acpica/include/acpiosxf.h user/andre/tcp_workqueue/sys/contrib/dev/acpica/include/acpixf.h user/andre/tcp_workqueue/sys/contrib/dev/acpica/include/actypes.h user/andre/tcp_workqueue/sys/contrib/dev/acpica/include/acutils.h user/andre/tcp_workqueue/sys/contrib/dev/acpica/os_specific/service_layers/osunixxf.c user/andre/tcp_workqueue/sys/contrib/dev/run/rt2870.fw.uu user/andre/tcp_workqueue/sys/contrib/pf/net/if_pfsync.c user/andre/tcp_workqueue/sys/contrib/pf/net/if_pfsync.h user/andre/tcp_workqueue/sys/contrib/pf/net/pf.c user/andre/tcp_workqueue/sys/contrib/pf/net/pf_ioctl.c user/andre/tcp_workqueue/sys/contrib/pf/net/pf_table.c user/andre/tcp_workqueue/sys/contrib/pf/net/pfvar.h user/andre/tcp_workqueue/sys/contrib/rdma/rdma_cma.c user/andre/tcp_workqueue/sys/ddb/db_main.c user/andre/tcp_workqueue/sys/dev/acpica/Osd/OsdSchedule.c user/andre/tcp_workqueue/sys/dev/acpica/Osd/OsdSynch.c user/andre/tcp_workqueue/sys/dev/acpica/acpi.c user/andre/tcp_workqueue/sys/dev/acpica/acpi_cpu.c user/andre/tcp_workqueue/sys/dev/acpica/acpi_ec.c user/andre/tcp_workqueue/sys/dev/acpica/acpi_pcib_acpi.c user/andre/tcp_workqueue/sys/dev/acpica/acpi_smbat.c user/andre/tcp_workqueue/sys/dev/acpica/acpivar.h user/andre/tcp_workqueue/sys/dev/ae/if_ae.c user/andre/tcp_workqueue/sys/dev/agp/agp.c user/andre/tcp_workqueue/sys/dev/agp/agp_i810.c user/andre/tcp_workqueue/sys/dev/agp/agp_if.m user/andre/tcp_workqueue/sys/dev/agp/agppriv.h user/andre/tcp_workqueue/sys/dev/agp/agpreg.h user/andre/tcp_workqueue/sys/dev/agp/agpvar.h user/andre/tcp_workqueue/sys/dev/ahci/ahci.c user/andre/tcp_workqueue/sys/dev/aic7xxx/aicasm/Makefile user/andre/tcp_workqueue/sys/dev/aic7xxx/aicasm/aicasm.c user/andre/tcp_workqueue/sys/dev/aic7xxx/aicasm/aicasm_symbol.c user/andre/tcp_workqueue/sys/dev/ale/if_ale.c user/andre/tcp_workqueue/sys/dev/ale/if_alevar.h user/andre/tcp_workqueue/sys/dev/amr/amr.c user/andre/tcp_workqueue/sys/dev/asr/asr.c user/andre/tcp_workqueue/sys/dev/ata/ata-all.c user/andre/tcp_workqueue/sys/dev/ata/ata-all.h user/andre/tcp_workqueue/sys/dev/ata/ata-card.c user/andre/tcp_workqueue/sys/dev/ata/ata-cbus.c user/andre/tcp_workqueue/sys/dev/ata/ata-disk.c user/andre/tcp_workqueue/sys/dev/ata/ata-pci.c user/andre/tcp_workqueue/sys/dev/ata/ata-pci.h user/andre/tcp_workqueue/sys/dev/ata/ata-queue.c user/andre/tcp_workqueue/sys/dev/ata/ata-raid.c user/andre/tcp_workqueue/sys/dev/ata/atapi-cam.c user/andre/tcp_workqueue/sys/dev/ata/atapi-cd.c user/andre/tcp_workqueue/sys/dev/ata/atapi-fd.c user/andre/tcp_workqueue/sys/dev/ata/atapi-tape.c user/andre/tcp_workqueue/sys/dev/ata/chipsets/ata-acard.c user/andre/tcp_workqueue/sys/dev/ata/chipsets/ata-acerlabs.c user/andre/tcp_workqueue/sys/dev/ata/chipsets/ata-adaptec.c user/andre/tcp_workqueue/sys/dev/ata/chipsets/ata-ahci.c user/andre/tcp_workqueue/sys/dev/ata/chipsets/ata-amd.c user/andre/tcp_workqueue/sys/dev/ata/chipsets/ata-ati.c user/andre/tcp_workqueue/sys/dev/ata/chipsets/ata-cyrix.c user/andre/tcp_workqueue/sys/dev/ata/chipsets/ata-highpoint.c user/andre/tcp_workqueue/sys/dev/ata/chipsets/ata-intel.c user/andre/tcp_workqueue/sys/dev/ata/chipsets/ata-ite.c user/andre/tcp_workqueue/sys/dev/ata/chipsets/ata-jmicron.c user/andre/tcp_workqueue/sys/dev/ata/chipsets/ata-marvell.c user/andre/tcp_workqueue/sys/dev/ata/chipsets/ata-national.c user/andre/tcp_workqueue/sys/dev/ata/chipsets/ata-nvidia.c user/andre/tcp_workqueue/sys/dev/ata/chipsets/ata-promise.c user/andre/tcp_workqueue/sys/dev/ata/chipsets/ata-serverworks.c user/andre/tcp_workqueue/sys/dev/ata/chipsets/ata-siliconimage.c user/andre/tcp_workqueue/sys/dev/ata/chipsets/ata-sis.c user/andre/tcp_workqueue/sys/dev/ata/chipsets/ata-via.c user/andre/tcp_workqueue/sys/dev/ath/ah_osdep.c user/andre/tcp_workqueue/sys/dev/ath/ah_osdep.h user/andre/tcp_workqueue/sys/dev/ath/ath_hal/ah.h user/andre/tcp_workqueue/sys/dev/ath/ath_hal/ah_decode.h user/andre/tcp_workqueue/sys/dev/ath/ath_hal/ah_eeprom_v4k.c user/andre/tcp_workqueue/sys/dev/ath/ath_hal/ah_internal.h user/andre/tcp_workqueue/sys/dev/ath/ath_hal/ar5210/ar5210.h user/andre/tcp_workqueue/sys/dev/ath/ath_hal/ar5210/ar5210_attach.c user/andre/tcp_workqueue/sys/dev/ath/ath_hal/ar5210/ar5210_misc.c user/andre/tcp_workqueue/sys/dev/ath/ath_hal/ar5210/ar5210_reset.c user/andre/tcp_workqueue/sys/dev/ath/ath_hal/ar5211/ar5211.h user/andre/tcp_workqueue/sys/dev/ath/ath_hal/ar5211/ar5211_attach.c user/andre/tcp_workqueue/sys/dev/ath/ath_hal/ar5211/ar5211_misc.c user/andre/tcp_workqueue/sys/dev/ath/ath_hal/ar5211/ar5211_reset.c user/andre/tcp_workqueue/sys/dev/ath/ath_hal/ar5212/ar5212.h user/andre/tcp_workqueue/sys/dev/ath/ath_hal/ar5212/ar5212_attach.c user/andre/tcp_workqueue/sys/dev/ath/ath_hal/ar5212/ar5212_misc.c user/andre/tcp_workqueue/sys/dev/ath/ath_hal/ar5212/ar5212_reset.c user/andre/tcp_workqueue/sys/dev/ath/ath_hal/ar5312/ar5312_reset.c user/andre/tcp_workqueue/sys/dev/ath/ath_hal/ar5416/ar5416.h user/andre/tcp_workqueue/sys/dev/ath/ath_hal/ar5416/ar5416_ani.c user/andre/tcp_workqueue/sys/dev/ath/ath_hal/ar5416/ar5416_attach.c user/andre/tcp_workqueue/sys/dev/ath/ath_hal/ar5416/ar5416_interrupts.c user/andre/tcp_workqueue/sys/dev/ath/ath_hal/ar5416/ar5416_misc.c user/andre/tcp_workqueue/sys/dev/ath/ath_hal/ar5416/ar5416_power.c user/andre/tcp_workqueue/sys/dev/ath/ath_hal/ar5416/ar5416_recv.c user/andre/tcp_workqueue/sys/dev/ath/ath_hal/ar5416/ar5416_reset.c user/andre/tcp_workqueue/sys/dev/ath/ath_hal/ar5416/ar5416_xmit.c user/andre/tcp_workqueue/sys/dev/ath/ath_hal/ar5416/ar5416phy.h user/andre/tcp_workqueue/sys/dev/ath/ath_hal/ar5416/ar5416reg.h user/andre/tcp_workqueue/sys/dev/ath/ath_hal/ar9002/ar9280_attach.c user/andre/tcp_workqueue/sys/dev/ath/ath_hal/ar9002/ar9285_attach.c user/andre/tcp_workqueue/sys/dev/ath/ath_hal/ar9002/ar9287_attach.c user/andre/tcp_workqueue/sys/dev/ath/if_ath.c user/andre/tcp_workqueue/sys/dev/ath/if_ath_debug.c user/andre/tcp_workqueue/sys/dev/ath/if_ath_debug.h user/andre/tcp_workqueue/sys/dev/ath/if_ath_misc.h user/andre/tcp_workqueue/sys/dev/ath/if_ath_pci.c user/andre/tcp_workqueue/sys/dev/ath/if_ath_sysctl.c user/andre/tcp_workqueue/sys/dev/ath/if_ath_tx.c user/andre/tcp_workqueue/sys/dev/ath/if_ath_tx.h user/andre/tcp_workqueue/sys/dev/ath/if_ath_tx_ht.c user/andre/tcp_workqueue/sys/dev/ath/if_athioctl.h user/andre/tcp_workqueue/sys/dev/ath/if_athvar.h user/andre/tcp_workqueue/sys/dev/atkbdc/atkbdc_isa.c user/andre/tcp_workqueue/sys/dev/atkbdc/psm.c user/andre/tcp_workqueue/sys/dev/bce/if_bce.c user/andre/tcp_workqueue/sys/dev/bce/if_bcereg.h user/andre/tcp_workqueue/sys/dev/bge/if_bge.c user/andre/tcp_workqueue/sys/dev/bge/if_bgereg.h user/andre/tcp_workqueue/sys/dev/bwi/bwimac.c user/andre/tcp_workqueue/sys/dev/bwi/bwiphy.c user/andre/tcp_workqueue/sys/dev/bwi/bwirf.c user/andre/tcp_workqueue/sys/dev/bwi/if_bwi.c user/andre/tcp_workqueue/sys/dev/bwi/if_bwi_pci.c user/andre/tcp_workqueue/sys/dev/cfi/cfi_core.c user/andre/tcp_workqueue/sys/dev/cfi/cfi_dev.c user/andre/tcp_workqueue/sys/dev/cfi/cfi_disk.c user/andre/tcp_workqueue/sys/dev/cfi/cfi_var.h user/andre/tcp_workqueue/sys/dev/cxgb/cxgb_adapter.h user/andre/tcp_workqueue/sys/dev/cxgb/cxgb_sge.c user/andre/tcp_workqueue/sys/dev/cxgbe/adapter.h user/andre/tcp_workqueue/sys/dev/cxgbe/t4_main.c user/andre/tcp_workqueue/sys/dev/cxgbe/t4_sge.c user/andre/tcp_workqueue/sys/dev/dc/if_dc.c user/andre/tcp_workqueue/sys/dev/dpt/dpt.h user/andre/tcp_workqueue/sys/dev/e1000/e1000_osdep.h user/andre/tcp_workqueue/sys/dev/e1000/if_em.c user/andre/tcp_workqueue/sys/dev/e1000/if_igb.c user/andre/tcp_workqueue/sys/dev/e1000/if_igb.h user/andre/tcp_workqueue/sys/dev/esp/ncr53c9x.c user/andre/tcp_workqueue/sys/dev/fb/s3_pci.c user/andre/tcp_workqueue/sys/dev/fb/vesa.c user/andre/tcp_workqueue/sys/dev/fb/vga.c user/andre/tcp_workqueue/sys/dev/fdt/fdt_common.h user/andre/tcp_workqueue/sys/dev/fdt/fdt_pci.c user/andre/tcp_workqueue/sys/dev/flash/at45d.c user/andre/tcp_workqueue/sys/dev/fxp/if_fxp.c user/andre/tcp_workqueue/sys/dev/fxp/if_fxpreg.h user/andre/tcp_workqueue/sys/dev/fxp/if_fxpvar.h user/andre/tcp_workqueue/sys/dev/gpio/gpioc.c user/andre/tcp_workqueue/sys/dev/hptiop/hptiop.c user/andre/tcp_workqueue/sys/dev/hptmv/entry.c user/andre/tcp_workqueue/sys/dev/hwpmc/hwpmc_amd.c user/andre/tcp_workqueue/sys/dev/hwpmc/hwpmc_arm.c user/andre/tcp_workqueue/sys/dev/hwpmc/hwpmc_core.c user/andre/tcp_workqueue/sys/dev/hwpmc/hwpmc_intel.c user/andre/tcp_workqueue/sys/dev/hwpmc/hwpmc_logging.c user/andre/tcp_workqueue/sys/dev/hwpmc/hwpmc_mips.c user/andre/tcp_workqueue/sys/dev/hwpmc/hwpmc_mips24k.c user/andre/tcp_workqueue/sys/dev/hwpmc/hwpmc_mod.c user/andre/tcp_workqueue/sys/dev/hwpmc/hwpmc_piv.c user/andre/tcp_workqueue/sys/dev/hwpmc/hwpmc_powerpc.c user/andre/tcp_workqueue/sys/dev/hwpmc/hwpmc_ppro.c user/andre/tcp_workqueue/sys/dev/hwpmc/hwpmc_tsc.c user/andre/tcp_workqueue/sys/dev/hwpmc/hwpmc_x86.c user/andre/tcp_workqueue/sys/dev/hwpmc/hwpmc_xscale.c user/andre/tcp_workqueue/sys/dev/hwpmc/pmc_events.h user/andre/tcp_workqueue/sys/dev/ipw/if_ipw.c user/andre/tcp_workqueue/sys/dev/isci/isci.h user/andre/tcp_workqueue/sys/dev/isci/isci_controller.c user/andre/tcp_workqueue/sys/dev/isci/isci_domain.c user/andre/tcp_workqueue/sys/dev/isci/isci_interrupt.c user/andre/tcp_workqueue/sys/dev/isci/isci_io_request.c user/andre/tcp_workqueue/sys/dev/isci/isci_remote_device.c user/andre/tcp_workqueue/sys/dev/isci/isci_task_request.c user/andre/tcp_workqueue/sys/dev/isci/scil/sati_inquiry.c user/andre/tcp_workqueue/sys/dev/isci/scil/sati_read_capacity.c user/andre/tcp_workqueue/sys/dev/iscsi/initiator/isc_subr.c user/andre/tcp_workqueue/sys/dev/iscsi/initiator/iscsi.c user/andre/tcp_workqueue/sys/dev/iscsi/initiator/iscsi_subr.c user/andre/tcp_workqueue/sys/dev/iscsi/initiator/iscsivar.h user/andre/tcp_workqueue/sys/dev/isp/isp.c user/andre/tcp_workqueue/sys/dev/isp/isp_freebsd.c user/andre/tcp_workqueue/sys/dev/isp/isp_freebsd.h user/andre/tcp_workqueue/sys/dev/isp/isp_pci.c user/andre/tcp_workqueue/sys/dev/isp/isp_sbus.c user/andre/tcp_workqueue/sys/dev/isp/ispvar.h user/andre/tcp_workqueue/sys/dev/iwi/if_iwi.c user/andre/tcp_workqueue/sys/dev/iwn/if_iwn.c user/andre/tcp_workqueue/sys/dev/ixgbe/ixgbe.c user/andre/tcp_workqueue/sys/dev/ixgbe/ixgbe.h user/andre/tcp_workqueue/sys/dev/jme/if_jme.c user/andre/tcp_workqueue/sys/dev/mfi/mfi.c user/andre/tcp_workqueue/sys/dev/mfi/mfi_cam.c user/andre/tcp_workqueue/sys/dev/mfi/mfi_debug.c user/andre/tcp_workqueue/sys/dev/mfi/mfi_disk.c user/andre/tcp_workqueue/sys/dev/mfi/mfi_ioctl.h user/andre/tcp_workqueue/sys/dev/mfi/mfi_linux.c user/andre/tcp_workqueue/sys/dev/mfi/mfi_pci.c user/andre/tcp_workqueue/sys/dev/mfi/mfireg.h user/andre/tcp_workqueue/sys/dev/mfi/mfivar.h user/andre/tcp_workqueue/sys/dev/mii/ciphy.c user/andre/tcp_workqueue/sys/dev/mii/miidevs user/andre/tcp_workqueue/sys/dev/mmc/mmc.c user/andre/tcp_workqueue/sys/dev/mmc/mmcbrvar.h user/andre/tcp_workqueue/sys/dev/mmc/mmcreg.h user/andre/tcp_workqueue/sys/dev/mmc/mmcsd.c user/andre/tcp_workqueue/sys/dev/mmc/mmcvar.h user/andre/tcp_workqueue/sys/dev/mpt/mpilib/mpi.h user/andre/tcp_workqueue/sys/dev/mpt/mpilib/mpi_cnfg.h user/andre/tcp_workqueue/sys/dev/mpt/mpilib/mpi_fc.h user/andre/tcp_workqueue/sys/dev/mpt/mpilib/mpi_init.h user/andre/tcp_workqueue/sys/dev/mpt/mpilib/mpi_ioc.h user/andre/tcp_workqueue/sys/dev/mpt/mpilib/mpi_lan.h user/andre/tcp_workqueue/sys/dev/mpt/mpilib/mpi_raid.h user/andre/tcp_workqueue/sys/dev/mpt/mpilib/mpi_sas.h user/andre/tcp_workqueue/sys/dev/mpt/mpilib/mpi_targ.h user/andre/tcp_workqueue/sys/dev/mpt/mpilib/mpi_tool.h user/andre/tcp_workqueue/sys/dev/mpt/mpilib/mpi_type.h user/andre/tcp_workqueue/sys/dev/mpt/mpt.h user/andre/tcp_workqueue/sys/dev/mpt/mpt_pci.c user/andre/tcp_workqueue/sys/dev/msk/if_msk.c user/andre/tcp_workqueue/sys/dev/mvs/mvs.c user/andre/tcp_workqueue/sys/dev/mvs/mvs.h user/andre/tcp_workqueue/sys/dev/mvs/mvs_soc.c user/andre/tcp_workqueue/sys/dev/mwl/if_mwl.c user/andre/tcp_workqueue/sys/dev/mwl/if_mwlvar.h user/andre/tcp_workqueue/sys/dev/mxge/eth_z8e.h user/andre/tcp_workqueue/sys/dev/mxge/ethp_z8e.h user/andre/tcp_workqueue/sys/dev/mxge/rss_eth_z8e.h user/andre/tcp_workqueue/sys/dev/mxge/rss_ethp_z8e.h user/andre/tcp_workqueue/sys/dev/netmap/if_re_netmap.h user/andre/tcp_workqueue/sys/dev/netmap/ixgbe_netmap.h user/andre/tcp_workqueue/sys/dev/netmap/netmap.c user/andre/tcp_workqueue/sys/dev/netmap/netmap_kern.h user/andre/tcp_workqueue/sys/dev/nxge/if_nxge.c user/andre/tcp_workqueue/sys/dev/pci/pci.c user/andre/tcp_workqueue/sys/dev/pci/vga_pci.c user/andre/tcp_workqueue/sys/dev/powermac_nvram/powermac_nvram.c user/andre/tcp_workqueue/sys/dev/puc/pucdata.c user/andre/tcp_workqueue/sys/dev/qlxgb/qla_os.c user/andre/tcp_workqueue/sys/dev/ral/if_ral_pci.c user/andre/tcp_workqueue/sys/dev/re/if_re.c user/andre/tcp_workqueue/sys/dev/sec/sec.c user/andre/tcp_workqueue/sys/dev/sec/sec.h user/andre/tcp_workqueue/sys/dev/sf/if_sf.c user/andre/tcp_workqueue/sys/dev/sfxge/sfxge_rx.c user/andre/tcp_workqueue/sys/dev/siis/siis.c user/andre/tcp_workqueue/sys/dev/smc/if_smc.c user/andre/tcp_workqueue/sys/dev/sound/pci/emu10kx.c user/andre/tcp_workqueue/sys/dev/sound/pci/hda/hdaa.c user/andre/tcp_workqueue/sys/dev/sound/pci/hda/hdac.c user/andre/tcp_workqueue/sys/dev/sound/pcm/sndstat.c user/andre/tcp_workqueue/sys/dev/sound/usb/uaudio.c user/andre/tcp_workqueue/sys/dev/sound/usb/uaudioreg.h user/andre/tcp_workqueue/sys/dev/sym/sym_conf.h user/andre/tcp_workqueue/sys/dev/sym/sym_hipd.c user/andre/tcp_workqueue/sys/dev/syscons/syscons.c user/andre/tcp_workqueue/sys/dev/tsec/if_tsec.c user/andre/tcp_workqueue/sys/dev/uart/uart_bus.h user/andre/tcp_workqueue/sys/dev/uart/uart_core.c user/andre/tcp_workqueue/sys/dev/uart/uart_if.m user/andre/tcp_workqueue/sys/dev/usb/controller/at91dci.c user/andre/tcp_workqueue/sys/dev/usb/controller/atmegadci.c user/andre/tcp_workqueue/sys/dev/usb/controller/avr32dci.c user/andre/tcp_workqueue/sys/dev/usb/controller/dwc_otg.c user/andre/tcp_workqueue/sys/dev/usb/controller/ehci.c user/andre/tcp_workqueue/sys/dev/usb/controller/ehci_pci.c user/andre/tcp_workqueue/sys/dev/usb/controller/musb_otg.c user/andre/tcp_workqueue/sys/dev/usb/controller/ohci.c user/andre/tcp_workqueue/sys/dev/usb/controller/uhci.c user/andre/tcp_workqueue/sys/dev/usb/controller/uss820dci.c user/andre/tcp_workqueue/sys/dev/usb/controller/xhci.c user/andre/tcp_workqueue/sys/dev/usb/input/atp.c user/andre/tcp_workqueue/sys/dev/usb/input/uep.c user/andre/tcp_workqueue/sys/dev/usb/input/uhid.c user/andre/tcp_workqueue/sys/dev/usb/input/ukbd.c user/andre/tcp_workqueue/sys/dev/usb/input/ums.c user/andre/tcp_workqueue/sys/dev/usb/misc/ufm.c user/andre/tcp_workqueue/sys/dev/usb/net/if_aue.c user/andre/tcp_workqueue/sys/dev/usb/net/if_axe.c user/andre/tcp_workqueue/sys/dev/usb/net/if_cdce.c user/andre/tcp_workqueue/sys/dev/usb/net/if_cue.c user/andre/tcp_workqueue/sys/dev/usb/net/if_ipheth.c user/andre/tcp_workqueue/sys/dev/usb/net/if_kue.c user/andre/tcp_workqueue/sys/dev/usb/net/if_rue.c user/andre/tcp_workqueue/sys/dev/usb/net/if_udav.c user/andre/tcp_workqueue/sys/dev/usb/net/if_usie.c user/andre/tcp_workqueue/sys/dev/usb/net/ruephy.c user/andre/tcp_workqueue/sys/dev/usb/net/uhso.c user/andre/tcp_workqueue/sys/dev/usb/serial/u3g.c user/andre/tcp_workqueue/sys/dev/usb/serial/ubsa.c user/andre/tcp_workqueue/sys/dev/usb/serial/uchcom.c user/andre/tcp_workqueue/sys/dev/usb/serial/ucycom.c user/andre/tcp_workqueue/sys/dev/usb/serial/ufoma.c user/andre/tcp_workqueue/sys/dev/usb/serial/ulpt.c user/andre/tcp_workqueue/sys/dev/usb/serial/umodem.c user/andre/tcp_workqueue/sys/dev/usb/serial/uplcom.c user/andre/tcp_workqueue/sys/dev/usb/serial/usb_serial.c user/andre/tcp_workqueue/sys/dev/usb/serial/usb_serial.h user/andre/tcp_workqueue/sys/dev/usb/storage/umass.c user/andre/tcp_workqueue/sys/dev/usb/storage/urio.c user/andre/tcp_workqueue/sys/dev/usb/storage/ustorage_fs.c user/andre/tcp_workqueue/sys/dev/usb/template/usb_template.c user/andre/tcp_workqueue/sys/dev/usb/usb.h user/andre/tcp_workqueue/sys/dev/usb/usb_busdma.c user/andre/tcp_workqueue/sys/dev/usb/usb_compat_linux.c user/andre/tcp_workqueue/sys/dev/usb/usb_controller.h user/andre/tcp_workqueue/sys/dev/usb/usb_dev.c user/andre/tcp_workqueue/sys/dev/usb/usb_device.c user/andre/tcp_workqueue/sys/dev/usb/usb_generic.c user/andre/tcp_workqueue/sys/dev/usb/usb_handle_request.c user/andre/tcp_workqueue/sys/dev/usb/usb_hid.c user/andre/tcp_workqueue/sys/dev/usb/usb_hub.c user/andre/tcp_workqueue/sys/dev/usb/usb_hub.h user/andre/tcp_workqueue/sys/dev/usb/usb_msctest.c user/andre/tcp_workqueue/sys/dev/usb/usb_request.c user/andre/tcp_workqueue/sys/dev/usb/usb_request.h user/andre/tcp_workqueue/sys/dev/usb/usb_transfer.c user/andre/tcp_workqueue/sys/dev/usb/usbdevs user/andre/tcp_workqueue/sys/dev/usb/usbdi.h user/andre/tcp_workqueue/sys/dev/usb/usbhid.h user/andre/tcp_workqueue/sys/dev/usb/wlan/if_rum.c user/andre/tcp_workqueue/sys/dev/usb/wlan/if_run.c user/andre/tcp_workqueue/sys/dev/usb/wlan/if_uath.c user/andre/tcp_workqueue/sys/dev/usb/wlan/if_upgt.c user/andre/tcp_workqueue/sys/dev/usb/wlan/if_ural.c user/andre/tcp_workqueue/sys/dev/usb/wlan/if_urtw.c user/andre/tcp_workqueue/sys/dev/usb/wlan/if_zyd.c user/andre/tcp_workqueue/sys/dev/virtio/balloon/virtio_balloon.c user/andre/tcp_workqueue/sys/dev/virtio/block/virtio_blk.c user/andre/tcp_workqueue/sys/dev/virtio/network/if_vtnet.c user/andre/tcp_workqueue/sys/dev/virtio/pci/virtio_pci.c user/andre/tcp_workqueue/sys/dev/virtio/virtio_ring.h user/andre/tcp_workqueue/sys/dev/virtio/virtqueue.c user/andre/tcp_workqueue/sys/dev/virtio/virtqueue.h user/andre/tcp_workqueue/sys/dev/vr/if_vr.c user/andre/tcp_workqueue/sys/dev/vr/if_vrreg.h user/andre/tcp_workqueue/sys/dev/vxge/vxgehal/vxgehal-channel.h user/andre/tcp_workqueue/sys/dev/wbwd/wbwd.c user/andre/tcp_workqueue/sys/dev/wpi/if_wpi.c user/andre/tcp_workqueue/sys/dev/xen/balloon/balloon.c user/andre/tcp_workqueue/sys/dev/xen/blkfront/blkfront.c user/andre/tcp_workqueue/sys/dev/xl/if_xl.c user/andre/tcp_workqueue/sys/fs/cd9660/cd9660_node.c user/andre/tcp_workqueue/sys/fs/coda/coda_subr.c user/andre/tcp_workqueue/sys/fs/ext2fs/ext2_inode.c user/andre/tcp_workqueue/sys/fs/ext2fs/ext2_lookup.c user/andre/tcp_workqueue/sys/fs/ext2fs/ext2_vfsops.c user/andre/tcp_workqueue/sys/fs/ext2fs/ext2_vnops.c user/andre/tcp_workqueue/sys/fs/hpfs/hpfs_vnops.c user/andre/tcp_workqueue/sys/fs/msdosfs/denode.h user/andre/tcp_workqueue/sys/fs/msdosfs/msdosfs_denode.c user/andre/tcp_workqueue/sys/fs/msdosfs/msdosfs_lookup.c user/andre/tcp_workqueue/sys/fs/msdosfs/msdosfs_vfsops.c user/andre/tcp_workqueue/sys/fs/msdosfs/msdosfs_vnops.c user/andre/tcp_workqueue/sys/fs/nfs/nfs_commonacl.c user/andre/tcp_workqueue/sys/fs/nfsclient/nfs_clbio.c user/andre/tcp_workqueue/sys/fs/nfsclient/nfs_clnode.c user/andre/tcp_workqueue/sys/fs/nfsclient/nfs_clsubs.c user/andre/tcp_workqueue/sys/fs/nfsclient/nfs_clvfsops.c user/andre/tcp_workqueue/sys/fs/nfsclient/nfs_clvnops.c user/andre/tcp_workqueue/sys/fs/nfsclient/nfsnode.h user/andre/tcp_workqueue/sys/fs/nfsserver/nfs_nfsdport.c user/andre/tcp_workqueue/sys/fs/nfsserver/nfs_nfsdstate.c user/andre/tcp_workqueue/sys/fs/ntfs/ntfs.h user/andre/tcp_workqueue/sys/fs/ntfs/ntfs_vnops.c user/andre/tcp_workqueue/sys/fs/nullfs/null_vnops.c user/andre/tcp_workqueue/sys/fs/smbfs/smbfs_node.c user/andre/tcp_workqueue/sys/fs/tmpfs/tmpfs.h user/andre/tcp_workqueue/sys/fs/tmpfs/tmpfs_subr.c user/andre/tcp_workqueue/sys/fs/tmpfs/tmpfs_vfsops.c user/andre/tcp_workqueue/sys/fs/tmpfs/tmpfs_vnops.c user/andre/tcp_workqueue/sys/fs/unionfs/union_subr.c user/andre/tcp_workqueue/sys/fs/unionfs/union_vfsops.c user/andre/tcp_workqueue/sys/fs/unionfs/union_vnops.c user/andre/tcp_workqueue/sys/gdb/gdb_main.c user/andre/tcp_workqueue/sys/geom/eli/g_eli_integrity.c user/andre/tcp_workqueue/sys/geom/geom_vfs.c user/andre/tcp_workqueue/sys/geom/label/g_label_ufs.c user/andre/tcp_workqueue/sys/geom/mirror/g_mirror.c user/andre/tcp_workqueue/sys/geom/mirror/g_mirror.h user/andre/tcp_workqueue/sys/geom/mirror/g_mirror_ctl.c user/andre/tcp_workqueue/sys/geom/multipath/g_multipath.c user/andre/tcp_workqueue/sys/geom/part/g_part.c user/andre/tcp_workqueue/sys/geom/part/g_part.h user/andre/tcp_workqueue/sys/geom/part/g_part_apm.c user/andre/tcp_workqueue/sys/geom/part/g_part_bsd.c user/andre/tcp_workqueue/sys/geom/part/g_part_gpt.c user/andre/tcp_workqueue/sys/geom/part/g_part_ldm.c user/andre/tcp_workqueue/sys/geom/part/g_part_mbr.c user/andre/tcp_workqueue/sys/geom/part/g_part_vtoc8.c user/andre/tcp_workqueue/sys/geom/raid/g_raid.c user/andre/tcp_workqueue/sys/geom/raid/g_raid.h user/andre/tcp_workqueue/sys/geom/raid/g_raid_ctl.c user/andre/tcp_workqueue/sys/geom/raid/g_raid_md_if.m user/andre/tcp_workqueue/sys/geom/raid/md_intel.c user/andre/tcp_workqueue/sys/geom/raid/md_jmicron.c user/andre/tcp_workqueue/sys/geom/raid/md_nvidia.c user/andre/tcp_workqueue/sys/geom/raid/md_promise.c user/andre/tcp_workqueue/sys/geom/raid/md_sii.c user/andre/tcp_workqueue/sys/geom/raid/tr_raid1.c user/andre/tcp_workqueue/sys/geom/raid/tr_raid1e.c user/andre/tcp_workqueue/sys/gnu/fs/reiserfs/reiserfs_inode.c user/andre/tcp_workqueue/sys/gnu/fs/reiserfs/reiserfs_vfsops.c user/andre/tcp_workqueue/sys/gnu/fs/xfs/FreeBSD/xfs_buf.c user/andre/tcp_workqueue/sys/i386/acpica/acpi_machdep.c user/andre/tcp_workqueue/sys/i386/acpica/acpi_wakecode.S user/andre/tcp_workqueue/sys/i386/conf/GENERIC user/andre/tcp_workqueue/sys/i386/conf/NOTES user/andre/tcp_workqueue/sys/i386/conf/XBOX user/andre/tcp_workqueue/sys/i386/conf/XEN user/andre/tcp_workqueue/sys/i386/i386/apic_vector.s user/andre/tcp_workqueue/sys/i386/i386/bios.c user/andre/tcp_workqueue/sys/i386/i386/genassym.c user/andre/tcp_workqueue/sys/i386/i386/identcpu.c user/andre/tcp_workqueue/sys/i386/i386/initcpu.c user/andre/tcp_workqueue/sys/i386/i386/machdep.c user/andre/tcp_workqueue/sys/i386/i386/minidump_machdep.c user/andre/tcp_workqueue/sys/i386/i386/mp_machdep.c user/andre/tcp_workqueue/sys/i386/i386/pmap.c user/andre/tcp_workqueue/sys/i386/i386/swtch.s user/andre/tcp_workqueue/sys/i386/i386/trap.c user/andre/tcp_workqueue/sys/i386/i386/vm86.c user/andre/tcp_workqueue/sys/i386/include/apicvar.h user/andre/tcp_workqueue/sys/i386/include/atomic.h user/andre/tcp_workqueue/sys/i386/include/bootinfo.h user/andre/tcp_workqueue/sys/i386/include/in_cksum.h user/andre/tcp_workqueue/sys/i386/include/intr_machdep.h user/andre/tcp_workqueue/sys/i386/include/md_var.h user/andre/tcp_workqueue/sys/i386/include/pcb.h user/andre/tcp_workqueue/sys/i386/include/pmap.h user/andre/tcp_workqueue/sys/i386/include/pmc_mdep.h user/andre/tcp_workqueue/sys/i386/include/proc.h user/andre/tcp_workqueue/sys/i386/include/smp.h user/andre/tcp_workqueue/sys/i386/include/vm.h user/andre/tcp_workqueue/sys/i386/linux/linux.h user/andre/tcp_workqueue/sys/i386/linux/linux_dummy.c user/andre/tcp_workqueue/sys/i386/linux/linux_machdep.c user/andre/tcp_workqueue/sys/i386/linux/linux_proto.h user/andre/tcp_workqueue/sys/i386/linux/linux_syscall.h user/andre/tcp_workqueue/sys/i386/linux/linux_syscalls.c user/andre/tcp_workqueue/sys/i386/linux/linux_sysent.c user/andre/tcp_workqueue/sys/i386/linux/linux_systrace_args.c user/andre/tcp_workqueue/sys/i386/linux/syscalls.master user/andre/tcp_workqueue/sys/i386/xbox/xboxfb.c user/andre/tcp_workqueue/sys/i386/xen/pmap.c user/andre/tcp_workqueue/sys/ia64/acpica/acpi_wakeup.c user/andre/tcp_workqueue/sys/ia64/conf/GENERIC user/andre/tcp_workqueue/sys/ia64/conf/SKI user/andre/tcp_workqueue/sys/ia64/ia64/nexus.c user/andre/tcp_workqueue/sys/ia64/ia64/pmap.c user/andre/tcp_workqueue/sys/ia64/include/in_cksum.h user/andre/tcp_workqueue/sys/ia64/include/pcb.h user/andre/tcp_workqueue/sys/kern/capabilities.conf user/andre/tcp_workqueue/sys/kern/init_main.c user/andre/tcp_workqueue/sys/kern/init_sysent.c user/andre/tcp_workqueue/sys/kern/kern_acct.c user/andre/tcp_workqueue/sys/kern/kern_clock.c user/andre/tcp_workqueue/sys/kern/kern_condvar.c user/andre/tcp_workqueue/sys/kern/kern_conf.c user/andre/tcp_workqueue/sys/kern/kern_descrip.c user/andre/tcp_workqueue/sys/kern/kern_event.c user/andre/tcp_workqueue/sys/kern/kern_exit.c user/andre/tcp_workqueue/sys/kern/kern_fork.c user/andre/tcp_workqueue/sys/kern/kern_jail.c user/andre/tcp_workqueue/sys/kern/kern_kthread.c user/andre/tcp_workqueue/sys/kern/kern_ktrace.c user/andre/tcp_workqueue/sys/kern/kern_linker.c user/andre/tcp_workqueue/sys/kern/kern_lock.c user/andre/tcp_workqueue/sys/kern/kern_mutex.c user/andre/tcp_workqueue/sys/kern/kern_pmc.c user/andre/tcp_workqueue/sys/kern/kern_proc.c user/andre/tcp_workqueue/sys/kern/kern_racct.c user/andre/tcp_workqueue/sys/kern/kern_rctl.c user/andre/tcp_workqueue/sys/kern/kern_rwlock.c user/andre/tcp_workqueue/sys/kern/kern_sdt.c user/andre/tcp_workqueue/sys/kern/kern_shutdown.c user/andre/tcp_workqueue/sys/kern/kern_sig.c user/andre/tcp_workqueue/sys/kern/kern_sx.c user/andre/tcp_workqueue/sys/kern/kern_synch.c user/andre/tcp_workqueue/sys/kern/kern_sysctl.c user/andre/tcp_workqueue/sys/kern/kern_thr.c user/andre/tcp_workqueue/sys/kern/kern_thread.c user/andre/tcp_workqueue/sys/kern/kern_timeout.c user/andre/tcp_workqueue/sys/kern/kern_umtx.c user/andre/tcp_workqueue/sys/kern/sched_4bsd.c user/andre/tcp_workqueue/sys/kern/sched_ule.c user/andre/tcp_workqueue/sys/kern/subr_acl_nfs4.c user/andre/tcp_workqueue/sys/kern/subr_bus.c user/andre/tcp_workqueue/sys/kern/subr_firmware.c user/andre/tcp_workqueue/sys/kern/subr_kdb.c user/andre/tcp_workqueue/sys/kern/subr_rman.c user/andre/tcp_workqueue/sys/kern/subr_sleepqueue.c user/andre/tcp_workqueue/sys/kern/subr_smp.c user/andre/tcp_workqueue/sys/kern/subr_syscall.c user/andre/tcp_workqueue/sys/kern/subr_trap.c user/andre/tcp_workqueue/sys/kern/subr_turnstile.c user/andre/tcp_workqueue/sys/kern/subr_uio.c user/andre/tcp_workqueue/sys/kern/subr_witness.c user/andre/tcp_workqueue/sys/kern/sys_capability.c user/andre/tcp_workqueue/sys/kern/sys_pipe.c user/andre/tcp_workqueue/sys/kern/syscalls.c user/andre/tcp_workqueue/sys/kern/syscalls.master user/andre/tcp_workqueue/sys/kern/systrace_args.c user/andre/tcp_workqueue/sys/kern/tty.c user/andre/tcp_workqueue/sys/kern/uipc_mqueue.c user/andre/tcp_workqueue/sys/kern/uipc_shm.c user/andre/tcp_workqueue/sys/kern/uipc_socket.c user/andre/tcp_workqueue/sys/kern/uipc_syscalls.c user/andre/tcp_workqueue/sys/kern/vfs_bio.c user/andre/tcp_workqueue/sys/kern/vfs_default.c user/andre/tcp_workqueue/sys/kern/vfs_mount.c user/andre/tcp_workqueue/sys/kern/vfs_subr.c user/andre/tcp_workqueue/sys/kern/vfs_syscalls.c user/andre/tcp_workqueue/sys/kern/vfs_vnops.c user/andre/tcp_workqueue/sys/libkern/crc32.c user/andre/tcp_workqueue/sys/libkern/iconv.c user/andre/tcp_workqueue/sys/libkern/iconv_ucs.c user/andre/tcp_workqueue/sys/mips/atheros/apb.c user/andre/tcp_workqueue/sys/mips/atheros/ar71xx_chip.c user/andre/tcp_workqueue/sys/mips/atheros/ar71xx_chip.h user/andre/tcp_workqueue/sys/mips/atheros/ar71xx_cpudef.h user/andre/tcp_workqueue/sys/mips/atheros/ar71xx_gpio.c user/andre/tcp_workqueue/sys/mips/atheros/ar71xx_pci.c user/andre/tcp_workqueue/sys/mips/atheros/ar71xxreg.h user/andre/tcp_workqueue/sys/mips/atheros/ar724x_chip.c user/andre/tcp_workqueue/sys/mips/atheros/ar724x_pci.c user/andre/tcp_workqueue/sys/mips/atheros/ar91xx_chip.c user/andre/tcp_workqueue/sys/mips/atheros/files.ar71xx user/andre/tcp_workqueue/sys/mips/atheros/if_arge.c user/andre/tcp_workqueue/sys/mips/atheros/if_argevar.h user/andre/tcp_workqueue/sys/mips/atheros/std.ar71xx user/andre/tcp_workqueue/sys/mips/cavium/cvmx_config.h user/andre/tcp_workqueue/sys/mips/cavium/files.octeon1 user/andre/tcp_workqueue/sys/mips/cavium/octeon_ebt3000_cf.c user/andre/tcp_workqueue/sys/mips/cavium/octeon_irq.h user/andre/tcp_workqueue/sys/mips/cavium/octeon_machdep.c user/andre/tcp_workqueue/sys/mips/cavium/std.octeon1 user/andre/tcp_workqueue/sys/mips/conf/AR71XX_BASE user/andre/tcp_workqueue/sys/mips/conf/AR91XX_BASE user/andre/tcp_workqueue/sys/mips/conf/OCTEON1 user/andre/tcp_workqueue/sys/mips/conf/RSPRO user/andre/tcp_workqueue/sys/mips/conf/RSPRO.hints user/andre/tcp_workqueue/sys/mips/conf/RT305X user/andre/tcp_workqueue/sys/mips/conf/SWARM user/andre/tcp_workqueue/sys/mips/conf/SWARM64 user/andre/tcp_workqueue/sys/mips/conf/SWARM64_SMP user/andre/tcp_workqueue/sys/mips/conf/SWARM_SMP user/andre/tcp_workqueue/sys/mips/conf/TP-WN1043ND user/andre/tcp_workqueue/sys/mips/conf/TP-WN1043ND.hints user/andre/tcp_workqueue/sys/mips/conf/XLP user/andre/tcp_workqueue/sys/mips/conf/XLP64 user/andre/tcp_workqueue/sys/mips/conf/XLPN32 user/andre/tcp_workqueue/sys/mips/conf/XLR user/andre/tcp_workqueue/sys/mips/conf/XLR64 user/andre/tcp_workqueue/sys/mips/conf/XLRN32 user/andre/tcp_workqueue/sys/mips/conf/std.XLP user/andre/tcp_workqueue/sys/mips/include/in_cksum.h user/andre/tcp_workqueue/sys/mips/include/param.h user/andre/tcp_workqueue/sys/mips/include/pcb.h user/andre/tcp_workqueue/sys/mips/include/pmap.h user/andre/tcp_workqueue/sys/mips/include/pmc_mdep.h user/andre/tcp_workqueue/sys/mips/include/vm.h user/andre/tcp_workqueue/sys/mips/mips/bus_space_generic.c user/andre/tcp_workqueue/sys/mips/mips/exception.S user/andre/tcp_workqueue/sys/mips/mips/intr_machdep.c user/andre/tcp_workqueue/sys/mips/mips/machdep.c user/andre/tcp_workqueue/sys/mips/mips/nexus.c user/andre/tcp_workqueue/sys/mips/mips/pmap.c user/andre/tcp_workqueue/sys/mips/mips/trap.c user/andre/tcp_workqueue/sys/mips/nlm/board.c user/andre/tcp_workqueue/sys/mips/nlm/board.h user/andre/tcp_workqueue/sys/mips/nlm/cms.c user/andre/tcp_workqueue/sys/mips/nlm/files.xlp user/andre/tcp_workqueue/sys/mips/nlm/hal/iomap.h user/andre/tcp_workqueue/sys/mips/nlm/hal/nlm_hal.c user/andre/tcp_workqueue/sys/mips/nlm/hal/pcibus.h user/andre/tcp_workqueue/sys/mips/nlm/hal/pic.h user/andre/tcp_workqueue/sys/mips/nlm/hal/sys.h user/andre/tcp_workqueue/sys/mips/nlm/intr_machdep.c user/andre/tcp_workqueue/sys/mips/nlm/mpreset.S user/andre/tcp_workqueue/sys/mips/nlm/msgring.h user/andre/tcp_workqueue/sys/mips/nlm/uart_cpu_xlp.c user/andre/tcp_workqueue/sys/mips/nlm/xlp.h user/andre/tcp_workqueue/sys/mips/nlm/xlp_machdep.c user/andre/tcp_workqueue/sys/mips/nlm/xlp_pci.c user/andre/tcp_workqueue/sys/mips/rmi/rootfs_list.txt user/andre/tcp_workqueue/sys/modules/Makefile user/andre/tcp_workqueue/sys/modules/aesni/Makefile user/andre/tcp_workqueue/sys/modules/agp/Makefile user/andre/tcp_workqueue/sys/modules/ath/Makefile user/andre/tcp_workqueue/sys/modules/bwi/Makefile user/andre/tcp_workqueue/sys/modules/cam/Makefile user/andre/tcp_workqueue/sys/modules/cxgb/cxgb/Makefile user/andre/tcp_workqueue/sys/modules/cyclic/Makefile user/andre/tcp_workqueue/sys/modules/dtrace/Makefile user/andre/tcp_workqueue/sys/modules/geom/geom_raid/Makefile user/andre/tcp_workqueue/sys/modules/hwpmc/Makefile user/andre/tcp_workqueue/sys/modules/ixgbe/Makefile user/andre/tcp_workqueue/sys/modules/linux/Makefile user/andre/tcp_workqueue/sys/modules/mfi/Makefile user/andre/tcp_workqueue/sys/modules/mlx4/Makefile user/andre/tcp_workqueue/sys/modules/mlx4ib/Makefile user/andre/tcp_workqueue/sys/modules/mlxen/Makefile user/andre/tcp_workqueue/sys/modules/mmcsd/Makefile user/andre/tcp_workqueue/sys/modules/mps/Makefile user/andre/tcp_workqueue/sys/modules/mthca/Makefile user/andre/tcp_workqueue/sys/modules/mwl/Makefile user/andre/tcp_workqueue/sys/modules/ral/Makefile user/andre/tcp_workqueue/sys/modules/uart/Makefile user/andre/tcp_workqueue/sys/modules/wpi/Makefile user/andre/tcp_workqueue/sys/modules/zfs/Makefile user/andre/tcp_workqueue/sys/net/bpf.c user/andre/tcp_workqueue/sys/net/bpf.h user/andre/tcp_workqueue/sys/net/bpf_buffer.c user/andre/tcp_workqueue/sys/net/bpf_buffer.h user/andre/tcp_workqueue/sys/net/bpfdesc.h user/andre/tcp_workqueue/sys/net/bridgestp.c user/andre/tcp_workqueue/sys/net/bridgestp.h user/andre/tcp_workqueue/sys/net/ieee8023ad_lacp.c user/andre/tcp_workqueue/sys/net/if.c user/andre/tcp_workqueue/sys/net/if.h user/andre/tcp_workqueue/sys/net/if_bridge.c user/andre/tcp_workqueue/sys/net/if_dl.h user/andre/tcp_workqueue/sys/net/if_gif.c user/andre/tcp_workqueue/sys/net/if_lagg.c user/andre/tcp_workqueue/sys/net/if_loop.c user/andre/tcp_workqueue/sys/net/if_media.h user/andre/tcp_workqueue/sys/net/if_tap.c user/andre/tcp_workqueue/sys/net/netmap.h user/andre/tcp_workqueue/sys/net/netmap_user.h user/andre/tcp_workqueue/sys/net/rtsock.c user/andre/tcp_workqueue/sys/net80211/ieee80211.c user/andre/tcp_workqueue/sys/net80211/ieee80211.h user/andre/tcp_workqueue/sys/net80211/ieee80211_action.c user/andre/tcp_workqueue/sys/net80211/ieee80211_alq.c user/andre/tcp_workqueue/sys/net80211/ieee80211_ddb.c user/andre/tcp_workqueue/sys/net80211/ieee80211_freebsd.c user/andre/tcp_workqueue/sys/net80211/ieee80211_ht.c user/andre/tcp_workqueue/sys/net80211/ieee80211_ht.h user/andre/tcp_workqueue/sys/net80211/ieee80211_hwmp.c user/andre/tcp_workqueue/sys/net80211/ieee80211_input.c user/andre/tcp_workqueue/sys/net80211/ieee80211_ioctl.h user/andre/tcp_workqueue/sys/net80211/ieee80211_mesh.c user/andre/tcp_workqueue/sys/net80211/ieee80211_mesh.h user/andre/tcp_workqueue/sys/net80211/ieee80211_node.c user/andre/tcp_workqueue/sys/net80211/ieee80211_node.h user/andre/tcp_workqueue/sys/net80211/ieee80211_output.c user/andre/tcp_workqueue/sys/net80211/ieee80211_proto.c user/andre/tcp_workqueue/sys/net80211/ieee80211_regdomain.c user/andre/tcp_workqueue/sys/net80211/ieee80211_sta.c user/andre/tcp_workqueue/sys/net80211/ieee80211_superg.c user/andre/tcp_workqueue/sys/net80211/ieee80211_var.h user/andre/tcp_workqueue/sys/netgraph/bluetooth/drivers/ubt/ng_ubt.c user/andre/tcp_workqueue/sys/netgraph/ng_ksocket.c user/andre/tcp_workqueue/sys/netgraph/ng_patch.c user/andre/tcp_workqueue/sys/netgraph/ng_source.c user/andre/tcp_workqueue/sys/netinet/in.c user/andre/tcp_workqueue/sys/netinet/in.h user/andre/tcp_workqueue/sys/netinet/in_pcb.c user/andre/tcp_workqueue/sys/netinet/in_pcb.h user/andre/tcp_workqueue/sys/netinet/ip.h user/andre/tcp_workqueue/sys/netinet/ip_carp.c user/andre/tcp_workqueue/sys/netinet/ip_fw.h user/andre/tcp_workqueue/sys/netinet/ip_input.c user/andre/tcp_workqueue/sys/netinet/ip_output.c user/andre/tcp_workqueue/sys/netinet/ipfw/ip_fw2.c user/andre/tcp_workqueue/sys/netinet/ipfw/ip_fw_private.h user/andre/tcp_workqueue/sys/netinet/ipfw/ip_fw_sockopt.c user/andre/tcp_workqueue/sys/netinet/ipfw/ip_fw_table.c user/andre/tcp_workqueue/sys/netinet/libalias/alias_sctp.h user/andre/tcp_workqueue/sys/netinet/libalias/libalias.3 user/andre/tcp_workqueue/sys/netinet/sctp.h user/andre/tcp_workqueue/sys/netinet/sctp_asconf.c user/andre/tcp_workqueue/sys/netinet/sctp_asconf.h user/andre/tcp_workqueue/sys/netinet/sctp_auth.c user/andre/tcp_workqueue/sys/netinet/sctp_auth.h user/andre/tcp_workqueue/sys/netinet/sctp_bsd_addr.c user/andre/tcp_workqueue/sys/netinet/sctp_bsd_addr.h user/andre/tcp_workqueue/sys/netinet/sctp_cc_functions.c user/andre/tcp_workqueue/sys/netinet/sctp_constants.h user/andre/tcp_workqueue/sys/netinet/sctp_crc32.c user/andre/tcp_workqueue/sys/netinet/sctp_crc32.h user/andre/tcp_workqueue/sys/netinet/sctp_dtrace_declare.h user/andre/tcp_workqueue/sys/netinet/sctp_dtrace_define.h user/andre/tcp_workqueue/sys/netinet/sctp_header.h user/andre/tcp_workqueue/sys/netinet/sctp_indata.c user/andre/tcp_workqueue/sys/netinet/sctp_indata.h user/andre/tcp_workqueue/sys/netinet/sctp_input.c user/andre/tcp_workqueue/sys/netinet/sctp_input.h user/andre/tcp_workqueue/sys/netinet/sctp_lock_bsd.h user/andre/tcp_workqueue/sys/netinet/sctp_os.h user/andre/tcp_workqueue/sys/netinet/sctp_os_bsd.h user/andre/tcp_workqueue/sys/netinet/sctp_output.c user/andre/tcp_workqueue/sys/netinet/sctp_output.h user/andre/tcp_workqueue/sys/netinet/sctp_pcb.c user/andre/tcp_workqueue/sys/netinet/sctp_pcb.h user/andre/tcp_workqueue/sys/netinet/sctp_peeloff.c user/andre/tcp_workqueue/sys/netinet/sctp_peeloff.h user/andre/tcp_workqueue/sys/netinet/sctp_ss_functions.c user/andre/tcp_workqueue/sys/netinet/sctp_structs.h user/andre/tcp_workqueue/sys/netinet/sctp_sysctl.c user/andre/tcp_workqueue/sys/netinet/sctp_sysctl.h user/andre/tcp_workqueue/sys/netinet/sctp_timer.c user/andre/tcp_workqueue/sys/netinet/sctp_timer.h user/andre/tcp_workqueue/sys/netinet/sctp_uio.h user/andre/tcp_workqueue/sys/netinet/sctp_usrreq.c user/andre/tcp_workqueue/sys/netinet/sctp_var.h user/andre/tcp_workqueue/sys/netinet/sctputil.c user/andre/tcp_workqueue/sys/netinet/sctputil.h user/andre/tcp_workqueue/sys/netinet/tcp_input.c user/andre/tcp_workqueue/sys/netinet/tcp_lro.c user/andre/tcp_workqueue/sys/netinet/tcp_lro.h user/andre/tcp_workqueue/sys/netinet/tcp_output.c user/andre/tcp_workqueue/sys/netinet/tcp_subr.c user/andre/tcp_workqueue/sys/netinet/tcp_syncache.c user/andre/tcp_workqueue/sys/netinet/tcp_timewait.c user/andre/tcp_workqueue/sys/netinet/tcp_var.h user/andre/tcp_workqueue/sys/netinet/udp_usrreq.c user/andre/tcp_workqueue/sys/netinet/udp_var.h user/andre/tcp_workqueue/sys/netinet6/icmp6.c user/andre/tcp_workqueue/sys/netinet6/in6.c user/andre/tcp_workqueue/sys/netinet6/in6.h user/andre/tcp_workqueue/sys/netinet6/in6_cksum.c user/andre/tcp_workqueue/sys/netinet6/in6_pcb.c user/andre/tcp_workqueue/sys/netinet6/in6_src.c user/andre/tcp_workqueue/sys/netinet6/ip6_forward.c user/andre/tcp_workqueue/sys/netinet6/ip6_input.c user/andre/tcp_workqueue/sys/netinet6/ip6_ipsec.c user/andre/tcp_workqueue/sys/netinet6/ip6_output.c user/andre/tcp_workqueue/sys/netinet6/ip6_var.h user/andre/tcp_workqueue/sys/netinet6/nd6.c user/andre/tcp_workqueue/sys/netinet6/route6.c user/andre/tcp_workqueue/sys/netinet6/scope6.c user/andre/tcp_workqueue/sys/netinet6/scope6_var.h user/andre/tcp_workqueue/sys/netinet6/sctp6_usrreq.c user/andre/tcp_workqueue/sys/netinet6/sctp6_var.h user/andre/tcp_workqueue/sys/netinet6/udp6_usrreq.c user/andre/tcp_workqueue/sys/netncp/ncp_nls.h user/andre/tcp_workqueue/sys/nfsclient/nfs_bio.c user/andre/tcp_workqueue/sys/nfsclient/nfs_node.c user/andre/tcp_workqueue/sys/nfsclient/nfs_subs.c user/andre/tcp_workqueue/sys/nfsclient/nfs_vfsops.c user/andre/tcp_workqueue/sys/nfsclient/nfs_vnops.c user/andre/tcp_workqueue/sys/nfsclient/nfsnode.h user/andre/tcp_workqueue/sys/ofed/drivers/infiniband/core/addr.c user/andre/tcp_workqueue/sys/ofed/drivers/infiniband/core/cma.c user/andre/tcp_workqueue/sys/ofed/drivers/infiniband/ulp/ipoib/ipoib_cm.c user/andre/tcp_workqueue/sys/ofed/drivers/infiniband/ulp/ipoib/ipoib_ib.c user/andre/tcp_workqueue/sys/ofed/drivers/infiniband/ulp/ipoib/ipoib_main.c user/andre/tcp_workqueue/sys/ofed/drivers/net/mlx4/en_frag.c user/andre/tcp_workqueue/sys/ofed/drivers/net/mlx4/en_netdev.c user/andre/tcp_workqueue/sys/ofed/drivers/net/mlx4/en_port.c user/andre/tcp_workqueue/sys/ofed/drivers/net/mlx4/en_port.h user/andre/tcp_workqueue/sys/ofed/drivers/net/mlx4/en_rx.c user/andre/tcp_workqueue/sys/ofed/include/linux/in.h user/andre/tcp_workqueue/sys/ofed/include/linux/in6.h user/andre/tcp_workqueue/sys/ofed/include/linux/io.h user/andre/tcp_workqueue/sys/ofed/include/linux/page.h user/andre/tcp_workqueue/sys/ofed/include/net/ip.h user/andre/tcp_workqueue/sys/ofed/include/net/ipv6.h user/andre/tcp_workqueue/sys/pc98/conf/GENERIC user/andre/tcp_workqueue/sys/pc98/pc98/machdep.c user/andre/tcp_workqueue/sys/pci/intpm.c user/andre/tcp_workqueue/sys/powerpc/aim/machdep.c user/andre/tcp_workqueue/sys/powerpc/aim/mmu_oea.c user/andre/tcp_workqueue/sys/powerpc/aim/mmu_oea64.c user/andre/tcp_workqueue/sys/powerpc/aim/moea64_native.c user/andre/tcp_workqueue/sys/powerpc/aim/slb.c user/andre/tcp_workqueue/sys/powerpc/aim/swtch32.S user/andre/tcp_workqueue/sys/powerpc/aim/swtch64.S user/andre/tcp_workqueue/sys/powerpc/booke/locore.S user/andre/tcp_workqueue/sys/powerpc/booke/machdep.c user/andre/tcp_workqueue/sys/powerpc/booke/platform_bare.c user/andre/tcp_workqueue/sys/powerpc/booke/pmap.c user/andre/tcp_workqueue/sys/powerpc/conf/GENERIC user/andre/tcp_workqueue/sys/powerpc/conf/GENERIC64 user/andre/tcp_workqueue/sys/powerpc/conf/MPC85XX user/andre/tcp_workqueue/sys/powerpc/conf/NOTES user/andre/tcp_workqueue/sys/powerpc/include/atomic.h user/andre/tcp_workqueue/sys/powerpc/include/cpu.h user/andre/tcp_workqueue/sys/powerpc/include/cpufunc.h user/andre/tcp_workqueue/sys/powerpc/include/hid.h user/andre/tcp_workqueue/sys/powerpc/include/in_cksum.h user/andre/tcp_workqueue/sys/powerpc/include/pcpu.h user/andre/tcp_workqueue/sys/powerpc/include/pio.h user/andre/tcp_workqueue/sys/powerpc/include/pmap.h user/andre/tcp_workqueue/sys/powerpc/include/pmc_mdep.h user/andre/tcp_workqueue/sys/powerpc/include/profile.h user/andre/tcp_workqueue/sys/powerpc/include/psl.h user/andre/tcp_workqueue/sys/powerpc/include/pte.h user/andre/tcp_workqueue/sys/powerpc/include/spr.h user/andre/tcp_workqueue/sys/powerpc/include/tlb.h user/andre/tcp_workqueue/sys/powerpc/include/trap.h user/andre/tcp_workqueue/sys/powerpc/include/trap_aim.h user/andre/tcp_workqueue/sys/powerpc/include/trap_booke.h user/andre/tcp_workqueue/sys/powerpc/include/ucontext.h user/andre/tcp_workqueue/sys/powerpc/include/vm.h user/andre/tcp_workqueue/sys/powerpc/include/vmparam.h user/andre/tcp_workqueue/sys/powerpc/mpc85xx/i2c.c user/andre/tcp_workqueue/sys/powerpc/mpc85xx/lbc.c user/andre/tcp_workqueue/sys/powerpc/mpc85xx/lbc.h user/andre/tcp_workqueue/sys/powerpc/mpc85xx/mpc85xx.c user/andre/tcp_workqueue/sys/powerpc/mpc85xx/pci_fdt.c user/andre/tcp_workqueue/sys/powerpc/powerpc/bus_machdep.c user/andre/tcp_workqueue/sys/powerpc/powerpc/cpu.c user/andre/tcp_workqueue/sys/powerpc/powerpc/db_trace.c user/andre/tcp_workqueue/sys/powerpc/powerpc/exec_machdep.c user/andre/tcp_workqueue/sys/powerpc/powerpc/gdb_machdep.c user/andre/tcp_workqueue/sys/powerpc/powerpc/genassym.c user/andre/tcp_workqueue/sys/powerpc/powerpc/mmu_if.m user/andre/tcp_workqueue/sys/powerpc/powerpc/platform.c user/andre/tcp_workqueue/sys/powerpc/powerpc/pmap_dispatch.c user/andre/tcp_workqueue/sys/security/mac/mac_net.c user/andre/tcp_workqueue/sys/security/mac/mac_syscalls.c user/andre/tcp_workqueue/sys/security/mac_mls/mac_mls.c user/andre/tcp_workqueue/sys/sparc64/conf/GENERIC user/andre/tcp_workqueue/sys/sparc64/include/in_cksum.h user/andre/tcp_workqueue/sys/sparc64/include/intr_machdep.h user/andre/tcp_workqueue/sys/sparc64/include/pcb.h user/andre/tcp_workqueue/sys/sparc64/include/pmap.h user/andre/tcp_workqueue/sys/sparc64/pci/fire.c user/andre/tcp_workqueue/sys/sparc64/pci/firereg.h user/andre/tcp_workqueue/sys/sparc64/sparc64/intr_machdep.c user/andre/tcp_workqueue/sys/sparc64/sparc64/machdep.c user/andre/tcp_workqueue/sys/sparc64/sparc64/pmap.c user/andre/tcp_workqueue/sys/sparc64/sparc64/trap.c user/andre/tcp_workqueue/sys/sparc64/sparc64/tsb.c user/andre/tcp_workqueue/sys/sys/agpio.h user/andre/tcp_workqueue/sys/sys/apm.h user/andre/tcp_workqueue/sys/sys/ata.h user/andre/tcp_workqueue/sys/sys/buf.h user/andre/tcp_workqueue/sys/sys/bus.h user/andre/tcp_workqueue/sys/sys/callout.h user/andre/tcp_workqueue/sys/sys/cdefs.h user/andre/tcp_workqueue/sys/sys/conf.h user/andre/tcp_workqueue/sys/sys/disklabel.h user/andre/tcp_workqueue/sys/sys/diskmbr.h user/andre/tcp_workqueue/sys/sys/elf_common.h user/andre/tcp_workqueue/sys/sys/event.h user/andre/tcp_workqueue/sys/sys/filedesc.h user/andre/tcp_workqueue/sys/sys/gpt.h user/andre/tcp_workqueue/sys/sys/iconv.h user/andre/tcp_workqueue/sys/sys/kdb.h user/andre/tcp_workqueue/sys/sys/kernel.h user/andre/tcp_workqueue/sys/sys/ktrace.h user/andre/tcp_workqueue/sys/sys/libkern.h user/andre/tcp_workqueue/sys/sys/mbuf.h user/andre/tcp_workqueue/sys/sys/mman.h user/andre/tcp_workqueue/sys/sys/mount.h user/andre/tcp_workqueue/sys/sys/param.h user/andre/tcp_workqueue/sys/sys/pmc.h user/andre/tcp_workqueue/sys/sys/pmckern.h user/andre/tcp_workqueue/sys/sys/pmclog.h user/andre/tcp_workqueue/sys/sys/proc.h user/andre/tcp_workqueue/sys/sys/sdt.h user/andre/tcp_workqueue/sys/sys/signal.h user/andre/tcp_workqueue/sys/sys/smp.h user/andre/tcp_workqueue/sys/sys/syscall.h user/andre/tcp_workqueue/sys/sys/syscall.mk user/andre/tcp_workqueue/sys/sys/syscallsubr.h user/andre/tcp_workqueue/sys/sys/sysctl.h user/andre/tcp_workqueue/sys/sys/sysproto.h user/andre/tcp_workqueue/sys/sys/systm.h user/andre/tcp_workqueue/sys/sys/ucontext.h user/andre/tcp_workqueue/sys/sys/umtx.h user/andre/tcp_workqueue/sys/sys/user.h user/andre/tcp_workqueue/sys/sys/vnode.h user/andre/tcp_workqueue/sys/sys/vtoc.h user/andre/tcp_workqueue/sys/ufs/ffs/ffs_balloc.c user/andre/tcp_workqueue/sys/ufs/ffs/ffs_extern.h user/andre/tcp_workqueue/sys/ufs/ffs/ffs_inode.c user/andre/tcp_workqueue/sys/ufs/ffs/ffs_rawread.c user/andre/tcp_workqueue/sys/ufs/ffs/ffs_snapshot.c user/andre/tcp_workqueue/sys/ufs/ffs/ffs_softdep.c user/andre/tcp_workqueue/sys/ufs/ffs/ffs_vfsops.c user/andre/tcp_workqueue/sys/ufs/ffs/ffs_vnops.c user/andre/tcp_workqueue/sys/ufs/ufs/quota.h user/andre/tcp_workqueue/sys/ufs/ufs/ufs_extattr.c user/andre/tcp_workqueue/sys/ufs/ufs/ufs_inode.c user/andre/tcp_workqueue/sys/ufs/ufs/ufs_lookup.c user/andre/tcp_workqueue/sys/ufs/ufs/ufs_quota.c user/andre/tcp_workqueue/sys/ufs/ufs/ufs_vnops.c user/andre/tcp_workqueue/sys/ufs/ufs/ufsmount.h user/andre/tcp_workqueue/sys/vm/device_pager.c user/andre/tcp_workqueue/sys/vm/uma_core.c user/andre/tcp_workqueue/sys/vm/vm.h user/andre/tcp_workqueue/sys/vm/vm_fault.c user/andre/tcp_workqueue/sys/vm/vm_map.c user/andre/tcp_workqueue/sys/vm/vm_map.h user/andre/tcp_workqueue/sys/vm/vm_mmap.c user/andre/tcp_workqueue/sys/vm/vm_page.c user/andre/tcp_workqueue/sys/vm/vm_page.h user/andre/tcp_workqueue/sys/vm/vm_pageout.c user/andre/tcp_workqueue/sys/vm/vm_pager.c user/andre/tcp_workqueue/sys/vm/vm_pager.h user/andre/tcp_workqueue/sys/vm/vm_phys.c user/andre/tcp_workqueue/sys/vm/vm_phys.h user/andre/tcp_workqueue/sys/vm/vm_reserv.c user/andre/tcp_workqueue/sys/vm/vnode_pager.c user/andre/tcp_workqueue/sys/x86/acpica/madt.c user/andre/tcp_workqueue/sys/x86/include/_limits.h user/andre/tcp_workqueue/sys/x86/include/_stdint.h user/andre/tcp_workqueue/sys/x86/include/_types.h user/andre/tcp_workqueue/sys/x86/include/endian.h user/andre/tcp_workqueue/sys/x86/include/float.h user/andre/tcp_workqueue/sys/x86/include/mca.h user/andre/tcp_workqueue/sys/x86/include/ptrace.h user/andre/tcp_workqueue/sys/x86/include/segments.h user/andre/tcp_workqueue/sys/x86/include/specialreg.h user/andre/tcp_workqueue/sys/x86/isa/isa_dma.c user/andre/tcp_workqueue/sys/x86/pci/pci_bus.c user/andre/tcp_workqueue/sys/x86/x86/dump_machdep.c user/andre/tcp_workqueue/sys/x86/x86/intr_machdep.c user/andre/tcp_workqueue/sys/x86/x86/mca.c user/andre/tcp_workqueue/sys/x86/x86/mptable_pci.c Directory Properties: user/andre/tcp_workqueue/sys/ (props changed) user/andre/tcp_workqueue/sys/boot/ (props changed) user/andre/tcp_workqueue/sys/boot/i386/efi/ (props changed) user/andre/tcp_workqueue/sys/boot/powerpc/boot1.chrp/ (props changed) user/andre/tcp_workqueue/sys/cddl/contrib/opensolaris/ (props changed) user/andre/tcp_workqueue/sys/conf/ (props changed) user/andre/tcp_workqueue/sys/contrib/dev/acpica/ (props changed) user/andre/tcp_workqueue/sys/contrib/dev/acpica/common/ (props changed) user/andre/tcp_workqueue/sys/contrib/dev/acpica/compiler/ (props changed) user/andre/tcp_workqueue/sys/contrib/dev/acpica/components/debugger/ (props changed) user/andre/tcp_workqueue/sys/contrib/dev/acpica/components/dispatcher/ (props changed) user/andre/tcp_workqueue/sys/contrib/dev/acpica/components/events/ (props changed) user/andre/tcp_workqueue/sys/contrib/dev/acpica/components/executer/ (props changed) user/andre/tcp_workqueue/sys/contrib/dev/acpica/components/hardware/ (props changed) user/andre/tcp_workqueue/sys/contrib/dev/acpica/components/namespace/ (props changed) user/andre/tcp_workqueue/sys/contrib/dev/acpica/components/parser/ (props changed) user/andre/tcp_workqueue/sys/contrib/dev/acpica/components/tables/ (props changed) user/andre/tcp_workqueue/sys/contrib/dev/acpica/components/utilities/ (props changed) user/andre/tcp_workqueue/sys/contrib/dev/acpica/include/ (props changed) user/andre/tcp_workqueue/sys/contrib/dev/acpica/os_specific/ (props changed) user/andre/tcp_workqueue/sys/contrib/pf/ (props changed) Modified: user/andre/tcp_workqueue/sys/Makefile ============================================================================== --- user/andre/tcp_workqueue/sys/Makefile Thu Jun 14 07:51:37 2012 (r237054) +++ user/andre/tcp_workqueue/sys/Makefile Thu Jun 14 10:35:21 2012 (r237055) @@ -11,7 +11,7 @@ SUBDIR= boot CSCOPEDIRS= boot bsm cam cddl compat conf contrib crypto ddb dev fs gdb \ geom gnu isa kern libkern modules net net80211 netatalk \ netgraph netinet netinet6 netipsec netipx netnatm netncp \ - netsmb nfs nfsclient nfsserver nlm opencrypto \ + netsmb nfs nfsclient nfsserver nlm ofed opencrypto \ pci rpc security sys ufs vm xdr xen ${CSCOPE_ARCHDIR} .if !defined(CSCOPE_ARCHDIR) .if defined(ALL_ARCH) Modified: user/andre/tcp_workqueue/sys/amd64/acpica/acpi_machdep.c ============================================================================== --- user/andre/tcp_workqueue/sys/amd64/acpica/acpi_machdep.c Thu Jun 14 07:51:37 2012 (r237054) +++ user/andre/tcp_workqueue/sys/amd64/acpica/acpi_machdep.c Thu Jun 14 10:35:21 2012 (r237055) @@ -44,8 +44,6 @@ __FBSDID("$FreeBSD$"); #include -SYSCTL_DECL(_debug_acpi); - int acpi_resume_beep; TUNABLE_INT("debug.acpi.resume_beep", &acpi_resume_beep); SYSCTL_INT(_debug_acpi, OID_AUTO, resume_beep, CTLFLAG_RW, &acpi_resume_beep, Modified: user/andre/tcp_workqueue/sys/amd64/acpica/acpi_wakecode.S ============================================================================== --- user/andre/tcp_workqueue/sys/amd64/acpica/acpi_wakecode.S Thu Jun 14 07:51:37 2012 (r237054) +++ user/andre/tcp_workqueue/sys/amd64/acpica/acpi_wakecode.S Thu Jun 14 10:35:21 2012 (r237055) @@ -219,10 +219,15 @@ wakeup_64: mov $bootdata64 - bootgdt, %eax mov %ax, %ds - /* Restore arguments and return. */ - movq wakeup_kpml4 - wakeup_start(%rbx), %rdi - movq wakeup_ctx - wakeup_start(%rbx), %rsi - movq wakeup_retaddr - wakeup_start(%rbx), %rax + /* Restore arguments. */ + movq wakeup_cr3 - wakeup_start(%rbx), %rsi + movq wakeup_pcb - wakeup_start(%rbx), %rdi + movq wakeup_ret - wakeup_start(%rbx), %rax + + /* Restore GDT. */ + lgdt wakeup_gdt - wakeup_start(%rbx) + + /* Jump to return address. */ jmp *%rax .data @@ -268,34 +273,15 @@ bootgdtdesc: .long bootgdt - wakeup_start /* Offset plus %ds << 4 */ ALIGN_DATA -wakeup_retaddr: +wakeup_cr4: /* not used */ .quad 0 -wakeup_kpml4: - .quad 0 - -wakeup_ctx: +wakeup_cr3: .quad 0 wakeup_pcb: .quad 0 -wakeup_fpusave: +wakeup_ret: .quad 0 wakeup_gdt: .word 0 .quad 0 - - ALIGN_DATA -wakeup_efer: - .quad 0 -wakeup_star: - .quad 0 -wakeup_lstar: - .quad 0 -wakeup_cstar: - .quad 0 -wakeup_sfmask: - .quad 0 -wakeup_xsmask: - .quad 0 -wakeup_cpu: - .long 0 dummy: Modified: user/andre/tcp_workqueue/sys/amd64/amd64/cpu_switch.S ============================================================================== --- user/andre/tcp_workqueue/sys/amd64/amd64/cpu_switch.S Thu Jun 14 07:51:37 2012 (r237054) +++ user/andre/tcp_workqueue/sys/amd64/amd64/cpu_switch.S Thu Jun 14 10:35:21 2012 (r237055) @@ -357,6 +357,30 @@ ENTRY(savectx) rdmsr movl %eax,PCB_KGSBASE(%rdi) movl %edx,PCB_KGSBASE+4(%rdi) + movl $MSR_EFER,%ecx + rdmsr + movl %eax,PCB_EFER(%rdi) + movl %edx,PCB_EFER+4(%rdi) + movl $MSR_STAR,%ecx + rdmsr + movl %eax,PCB_STAR(%rdi) + movl %edx,PCB_STAR+4(%rdi) + movl $MSR_LSTAR,%ecx + rdmsr + movl %eax,PCB_LSTAR(%rdi) + movl %edx,PCB_LSTAR+4(%rdi) + movl $MSR_CSTAR,%ecx + rdmsr + movl %eax,PCB_CSTAR(%rdi) + movl %edx,PCB_CSTAR+4(%rdi) + movl $MSR_SF_MASK,%ecx + rdmsr + movl %eax,PCB_SFMASK(%rdi) + movl %edx,PCB_SFMASK+4(%rdi) + movl xsave_mask,%eax + movl %eax,PCB_XSMASK(%rdi) + movl xsave_mask+4,%eax + movl %eax,PCB_XSMASK+4(%rdi) sgdt PCB_GDT(%rdi) sidt PCB_IDT(%rdi) @@ -370,6 +394,141 @@ ENTRY(savectx) END(savectx) /* + * resumectx(pcb in %rdi, cr3 in %rsi) + * Resuming processor state from pcb. + */ +ENTRY(resumectx) + /* Switch to KPML4phys. */ + movq %rsi,%cr3 + + /* Force kernel segment registers. */ + movl $KDSEL,%eax + movw %ax,%ds + movw %ax,%es + movw %ax,%ss + movl $KUF32SEL,%eax + movw %ax,%fs + movl $KUG32SEL,%eax + movw %ax,%gs + + movl $MSR_FSBASE,%ecx + movl PCB_FSBASE(%rdi),%eax + movl 4 + PCB_FSBASE(%rdi),%edx + wrmsr + movl $MSR_GSBASE,%ecx + movl PCB_GSBASE(%rdi),%eax + movl 4 + PCB_GSBASE(%rdi),%edx + wrmsr + movl $MSR_KGSBASE,%ecx + movl PCB_KGSBASE(%rdi),%eax + movl 4 + PCB_KGSBASE(%rdi),%edx + wrmsr + + /* Restore EFER. */ + movl $MSR_EFER,%ecx + movl PCB_EFER(%rdi),%eax + wrmsr + + /* Restore fast syscall stuff. */ + movl $MSR_STAR,%ecx + movl PCB_STAR(%rdi),%eax + movl 4 + PCB_STAR(%rdi),%edx + wrmsr + movl $MSR_LSTAR,%ecx + movl PCB_LSTAR(%rdi),%eax + movl 4 + PCB_LSTAR(%rdi),%edx + wrmsr + movl $MSR_CSTAR,%ecx + movl PCB_CSTAR(%rdi),%eax + movl 4 + PCB_CSTAR(%rdi),%edx + wrmsr + movl $MSR_SF_MASK,%ecx + movl PCB_SFMASK(%rdi),%eax + wrmsr + + /* Restore CR0 except for FPU mode. */ + movq PCB_CR0(%rdi),%rax + andq $~(CR0_EM | CR0_TS),%rax + movq %rax,%cr0 + + /* Restore CR2, CR4 and CR3. */ + movq PCB_CR2(%rdi),%rax + movq %rax,%cr2 + movq PCB_CR4(%rdi),%rax + movq %rax,%cr4 + movq PCB_CR3(%rdi),%rax + movq %rax,%cr3 + + /* Restore descriptor tables. */ + lidt PCB_IDT(%rdi) + lldt PCB_LDT(%rdi) + +#define SDT_SYSTSS 9 +#define SDT_SYSBSY 11 + + /* Clear "task busy" bit and reload TR. */ + movq PCPU(TSS),%rax + andb $(~SDT_SYSBSY | SDT_SYSTSS),5(%rax) + movw PCB_TR(%rdi),%ax + ltr %ax + +#undef SDT_SYSTSS +#undef SDT_SYSBSY + + /* Restore debug registers. */ + movq PCB_DR0(%rdi),%rax + movq %rax,%dr0 + movq PCB_DR1(%rdi),%rax + movq %rax,%dr1 + movq PCB_DR2(%rdi),%rax + movq %rax,%dr2 + movq PCB_DR3(%rdi),%rax + movq %rax,%dr3 + movq PCB_DR6(%rdi),%rax + movq %rax,%dr6 + movq PCB_DR7(%rdi),%rax + movq %rax,%dr7 + + /* Restore FPU state. */ + fninit + movq PCB_FPUSUSPEND(%rdi),%rbx + movq PCB_XSMASK(%rdi),%rax + testq %rax,%rax + jz 1f + movq %rax,%rdx + shrq $32,%rdx + movl $XCR0,%ecx +/* xsetbv */ + .byte 0x0f, 0x01, 0xd1 +/* xrstor (%rbx) */ + .byte 0x0f, 0xae, 0x2b + jmp 2f +1: + fxrstor (%rbx) +2: + + /* Reload CR0. */ + movq PCB_CR0(%rdi),%rax + movq %rax,%cr0 + + /* Restore other callee saved registers. */ + movq PCB_R15(%rdi),%r15 + movq PCB_R14(%rdi),%r14 + movq PCB_R13(%rdi),%r13 + movq PCB_R12(%rdi),%r12 + movq PCB_RBP(%rdi),%rbp + movq PCB_RSP(%rdi),%rsp + movq PCB_RBX(%rdi),%rbx + + /* Restore return address. */ + movq PCB_RIP(%rdi),%rax + movq %rax,(%rsp) + + xorl %eax,%eax + ret +END(resumectx) + +/* * Wrapper around fpusave to care about TS0_CR. */ ENTRY(ctx_fpusave) Modified: user/andre/tcp_workqueue/sys/amd64/amd64/fpu.c ============================================================================== --- user/andre/tcp_workqueue/sys/amd64/amd64/fpu.c Thu Jun 14 07:51:37 2012 (r237054) +++ user/andre/tcp_workqueue/sys/amd64/amd64/fpu.c Thu Jun 14 10:35:21 2012 (r237055) @@ -141,7 +141,7 @@ CTASSERT(sizeof(struct savefpu_ymm) == 8 /* * This requirement is to make it easier for asm code to calculate * offset of the fpu save area from the pcb address. FPU save area - * must by 64-bytes aligned. + * must be 64-byte aligned. */ CTASSERT(sizeof(struct pcb) % XSAVE_AREA_ALIGN == 0); Modified: user/andre/tcp_workqueue/sys/amd64/amd64/genassym.c ============================================================================== --- user/andre/tcp_workqueue/sys/amd64/amd64/genassym.c Thu Jun 14 07:51:37 2012 (r237054) +++ user/andre/tcp_workqueue/sys/amd64/amd64/genassym.c Thu Jun 14 10:35:21 2012 (r237055) @@ -157,6 +157,13 @@ ASSYM(PCB_TSSP, offsetof(struct pcb, pcb ASSYM(PCB_SAVEFPU, offsetof(struct pcb, pcb_save)); ASSYM(PCB_SAVEFPU_SIZE, sizeof(struct savefpu)); ASSYM(PCB_USERFPU, sizeof(struct pcb)); +ASSYM(PCB_EFER, offsetof(struct pcb, pcb_efer)); +ASSYM(PCB_STAR, offsetof(struct pcb, pcb_star)); +ASSYM(PCB_LSTAR, offsetof(struct pcb, pcb_lstar)); +ASSYM(PCB_CSTAR, offsetof(struct pcb, pcb_cstar)); +ASSYM(PCB_SFMASK, offsetof(struct pcb, pcb_sfmask)); +ASSYM(PCB_XSMASK, offsetof(struct pcb, pcb_xsmask)); +ASSYM(PCB_FPUSUSPEND, offsetof(struct pcb, pcb_fpususpend)); ASSYM(PCB_SIZE, sizeof(struct pcb)); ASSYM(PCB_FULL_IRET, PCB_FULL_IRET); ASSYM(PCB_DBREGS, PCB_DBREGS); Modified: user/andre/tcp_workqueue/sys/amd64/amd64/identcpu.c ============================================================================== --- user/andre/tcp_workqueue/sys/amd64/amd64/identcpu.c Thu Jun 14 07:51:37 2012 (r237054) +++ user/andre/tcp_workqueue/sys/amd64/amd64/identcpu.c Thu Jun 14 10:35:21 2012 (r237055) @@ -303,7 +303,7 @@ printcpuinfo(void) "\034OSXSAVE" /* OS-Enabled State Management*/ "\035AVX" /* Advanced Vector Extensions */ "\036F16C" /* Half-precision conversions */ - "\037" + "\037RDRAND" /* RDRAND Instruction */ "\040HV" /* Hypervisor */ ); } Modified: user/andre/tcp_workqueue/sys/amd64/amd64/initcpu.c ============================================================================== --- user/andre/tcp_workqueue/sys/amd64/amd64/initcpu.c Thu Jun 14 07:51:37 2012 (r237054) +++ user/andre/tcp_workqueue/sys/amd64/amd64/initcpu.c Thu Jun 14 10:35:21 2012 (r237055) @@ -79,6 +79,27 @@ SYSCTL_UINT(_hw, OID_AUTO, via_feature_r SYSCTL_UINT(_hw, OID_AUTO, via_feature_xcrypt, CTLFLAG_RD, &via_feature_xcrypt, 0, "VIA xcrypt feature available in CPU"); +static void +init_amd(void) +{ + + /* + * Work around Erratum 721 for Family 10h and 12h processors. + * These processors may incorrectly update the stack pointer + * after a long series of push and/or near-call instructions, + * or a long series of pop and/or near-return instructions. + * + * http://support.amd.com/us/Processor_TechDocs/41322_10h_Rev_Gd.pdf + * http://support.amd.com/us/Processor_TechDocs/44739_12h_Rev_Gd.pdf + */ + switch (CPUID_TO_FAMILY(cpu_id)) { + case 0x10: + case 0x12: + wrmsr(0xc0011029, rdmsr(0xc0011029) | 1); + break; + } +} + /* * Initialize special VIA features */ @@ -135,8 +156,14 @@ initializecpu(void) wrmsr(MSR_EFER, msr); pg_nx = PG_NX; } - if (cpu_vendor_id == CPU_VENDOR_CENTAUR) + switch (cpu_vendor_id) { + case CPU_VENDOR_AMD: + init_amd(); + break; + case CPU_VENDOR_CENTAUR: init_via(); + break; + } } void Modified: user/andre/tcp_workqueue/sys/amd64/amd64/machdep.c ============================================================================== --- user/andre/tcp_workqueue/sys/amd64/amd64/machdep.c Thu Jun 14 07:51:37 2012 (r237054) +++ user/andre/tcp_workqueue/sys/amd64/amd64/machdep.c Thu Jun 14 10:35:21 2012 (r237055) @@ -295,6 +295,11 @@ cpu_startup(dummy) vm_pager_bufferinit(); cpu_setregs(); + + /* + * Add BSP as an interrupt target. + */ + intr_add_cpu(0); } /* Modified: user/andre/tcp_workqueue/sys/amd64/amd64/minidump_machdep.c ============================================================================== --- user/andre/tcp_workqueue/sys/amd64/amd64/minidump_machdep.c Thu Jun 14 07:51:37 2012 (r237054) +++ user/andre/tcp_workqueue/sys/amd64/amd64/minidump_machdep.c Thu Jun 14 10:35:21 2012 (r237055) @@ -37,9 +37,7 @@ __FBSDID("$FreeBSD$"); #include #include #include -#ifdef SW_WATCHDOG #include -#endif #include #include #include @@ -177,9 +175,9 @@ blk_write(struct dumperinfo *di, char *p report_progress(progress, dumpsize); counter &= (1<<24) - 1; } -#ifdef SW_WATCHDOG + wdog_kern_pat(WD_LASTVAL); -#endif + if (ptr) { error = dump_write(di, ptr, 0, dumplo, len); if (error) Modified: user/andre/tcp_workqueue/sys/amd64/amd64/mp_machdep.c ============================================================================== --- user/andre/tcp_workqueue/sys/amd64/amd64/mp_machdep.c Thu Jun 14 07:51:37 2012 (r237054) +++ user/andre/tcp_workqueue/sys/amd64/amd64/mp_machdep.c Thu Jun 14 10:35:21 2012 (r237055) @@ -100,7 +100,6 @@ void *dpcpu; struct pcb stoppcbs[MAXCPU]; struct pcb **susppcbs; -void **suspfpusave; /* Variables needed for SMP tlb shootdown. */ vm_offset_t smp_tlb_addr1; @@ -785,8 +784,6 @@ init_secondary(void) * We tell the I/O APIC code about all the CPUs we want to receive * interrupts. If we don't want certain CPUs to receive IRQs we * can simply not tell the I/O APIC code about them in this function. - * We also do not tell it about the BSP since it tells itself about - * the BSP internally to work with UP kernels and on UP machines. */ static void set_interrupt_apic_ids(void) @@ -797,8 +794,6 @@ set_interrupt_apic_ids(void) apic_id = cpu_apic_ids[i]; if (apic_id == -1) continue; - if (cpu_info[apic_id].cpu_bsp) - continue; if (cpu_info[apic_id].cpu_disabled) continue; @@ -986,6 +981,60 @@ start_ap(int apic_id) /* used as a watchpoint to signal AP startup */ cpus = mp_naps; + ipi_startup(apic_id, vector); + + /* Wait up to 5 seconds for it to start. */ + for (ms = 0; ms < 5000; ms++) { + if (mp_naps > cpus) + return 1; /* return SUCCESS */ + DELAY(1000); + } + return 0; /* return FAILURE */ +} + +#ifdef COUNT_XINVLTLB_HITS +u_int xhits_gbl[MAXCPU]; +u_int xhits_pg[MAXCPU]; +u_int xhits_rng[MAXCPU]; +static SYSCTL_NODE(_debug, OID_AUTO, xhits, CTLFLAG_RW, 0, ""); +SYSCTL_OPAQUE(_debug_xhits, OID_AUTO, global, CTLFLAG_RW, &xhits_gbl, + sizeof(xhits_gbl), "IU", ""); +SYSCTL_OPAQUE(_debug_xhits, OID_AUTO, page, CTLFLAG_RW, &xhits_pg, + sizeof(xhits_pg), "IU", ""); +SYSCTL_OPAQUE(_debug_xhits, OID_AUTO, range, CTLFLAG_RW, &xhits_rng, + sizeof(xhits_rng), "IU", ""); + +u_int ipi_global; +u_int ipi_page; +u_int ipi_range; +u_int ipi_range_size; +SYSCTL_UINT(_debug_xhits, OID_AUTO, ipi_global, CTLFLAG_RW, &ipi_global, 0, ""); +SYSCTL_UINT(_debug_xhits, OID_AUTO, ipi_page, CTLFLAG_RW, &ipi_page, 0, ""); +SYSCTL_UINT(_debug_xhits, OID_AUTO, ipi_range, CTLFLAG_RW, &ipi_range, 0, ""); +SYSCTL_UINT(_debug_xhits, OID_AUTO, ipi_range_size, CTLFLAG_RW, + &ipi_range_size, 0, ""); + +u_int ipi_masked_global; +u_int ipi_masked_page; +u_int ipi_masked_range; +u_int ipi_masked_range_size; +SYSCTL_UINT(_debug_xhits, OID_AUTO, ipi_masked_global, CTLFLAG_RW, + &ipi_masked_global, 0, ""); +SYSCTL_UINT(_debug_xhits, OID_AUTO, ipi_masked_page, CTLFLAG_RW, + &ipi_masked_page, 0, ""); +SYSCTL_UINT(_debug_xhits, OID_AUTO, ipi_masked_range, CTLFLAG_RW, + &ipi_masked_range, 0, ""); +SYSCTL_UINT(_debug_xhits, OID_AUTO, ipi_masked_range_size, CTLFLAG_RW, + &ipi_masked_range_size, 0, ""); +#endif /* COUNT_XINVLTLB_HITS */ + +/* + * Init and startup IPI. + */ +void +ipi_startup(int apic_id, int vector) +{ + /* * first we do an INIT/RESET IPI this INIT IPI might be run, reseting * and running the target CPU. OR this INIT IPI might be latched (P5 @@ -1036,52 +1085,8 @@ start_ap(int apic_id) vector, apic_id); lapic_ipi_wait(-1); DELAY(200); /* wait ~200uS */ - - /* Wait up to 5 seconds for it to start. */ - for (ms = 0; ms < 5000; ms++) { - if (mp_naps > cpus) - return 1; /* return SUCCESS */ - DELAY(1000); - } - return 0; /* return FAILURE */ } -#ifdef COUNT_XINVLTLB_HITS -u_int xhits_gbl[MAXCPU]; -u_int xhits_pg[MAXCPU]; -u_int xhits_rng[MAXCPU]; -static SYSCTL_NODE(_debug, OID_AUTO, xhits, CTLFLAG_RW, 0, ""); -SYSCTL_OPAQUE(_debug_xhits, OID_AUTO, global, CTLFLAG_RW, &xhits_gbl, - sizeof(xhits_gbl), "IU", ""); -SYSCTL_OPAQUE(_debug_xhits, OID_AUTO, page, CTLFLAG_RW, &xhits_pg, - sizeof(xhits_pg), "IU", ""); -SYSCTL_OPAQUE(_debug_xhits, OID_AUTO, range, CTLFLAG_RW, &xhits_rng, - sizeof(xhits_rng), "IU", ""); - -u_int ipi_global; -u_int ipi_page; -u_int ipi_range; -u_int ipi_range_size; -SYSCTL_UINT(_debug_xhits, OID_AUTO, ipi_global, CTLFLAG_RW, &ipi_global, 0, ""); -SYSCTL_UINT(_debug_xhits, OID_AUTO, ipi_page, CTLFLAG_RW, &ipi_page, 0, ""); -SYSCTL_UINT(_debug_xhits, OID_AUTO, ipi_range, CTLFLAG_RW, &ipi_range, 0, ""); -SYSCTL_UINT(_debug_xhits, OID_AUTO, ipi_range_size, CTLFLAG_RW, - &ipi_range_size, 0, ""); - -u_int ipi_masked_global; -u_int ipi_masked_page; -u_int ipi_masked_range; -u_int ipi_masked_range_size; -SYSCTL_UINT(_debug_xhits, OID_AUTO, ipi_masked_global, CTLFLAG_RW, - &ipi_masked_global, 0, ""); -SYSCTL_UINT(_debug_xhits, OID_AUTO, ipi_masked_page, CTLFLAG_RW, - &ipi_masked_page, 0, ""); -SYSCTL_UINT(_debug_xhits, OID_AUTO, ipi_masked_range, CTLFLAG_RW, - &ipi_masked_range, 0, ""); -SYSCTL_UINT(_debug_xhits, OID_AUTO, ipi_masked_range_size, CTLFLAG_RW, - &ipi_masked_range_size, 0, ""); -#endif /* COUNT_XINVLTLB_HITS */ - /* * Send an IPI to specified CPU handling the bitmap logic. */ @@ -1419,14 +1424,20 @@ cpususpend_handler(void) cpu = PCPU_GET(cpuid); if (savectx(susppcbs[cpu])) { - ctx_fpusave(suspfpusave[cpu]); + ctx_fpusave(susppcbs[cpu]->pcb_fpususpend); wbinvd(); - CPU_SET_ATOMIC(cpu, &stopped_cpus); + CPU_SET_ATOMIC(cpu, &suspended_cpus); } else { pmap_init_pat(); +#if 0 load_cr3(susppcbs[cpu]->pcb_cr3); +#endif + initializecpu(); PCPU_SET(switchtime, 0); PCPU_SET(switchticks, ticks); + + /* Indicate that we are resumed */ + CPU_CLR_ATOMIC(cpu, &suspended_cpus); } /* Wait for resume */ @@ -1434,7 +1445,6 @@ cpususpend_handler(void) ia32_pause(); CPU_CLR_ATOMIC(cpu, &started_cpus); - CPU_CLR_ATOMIC(cpu, &stopped_cpus); /* Resume MCA and local APIC */ mca_resume(); @@ -1474,6 +1484,8 @@ mp_ipi_intrcnt(void *dummy) intrcnt_add(buf, &ipi_invlrng_counts[i]); snprintf(buf, sizeof(buf), "cpu%d:invlpg", i); intrcnt_add(buf, &ipi_invlpg_counts[i]); + snprintf(buf, sizeof(buf), "cpu%d:invlcache", i); + intrcnt_add(buf, &ipi_invlcache_counts[i]); snprintf(buf, sizeof(buf), "cpu%d:preempt", i); intrcnt_add(buf, &ipi_preempt_counts[i]); snprintf(buf, sizeof(buf), "cpu%d:ast", i); Modified: user/andre/tcp_workqueue/sys/amd64/amd64/pmap.c ============================================================================== --- user/andre/tcp_workqueue/sys/amd64/amd64/pmap.c Thu Jun 14 07:51:37 2012 (r237054) +++ user/andre/tcp_workqueue/sys/amd64/amd64/pmap.c Thu Jun 14 10:35:21 2012 (r237055) @@ -117,6 +117,7 @@ __FBSDID("$FreeBSD$"); #include #include #include +#include #include #include #include @@ -148,10 +149,6 @@ __FBSDID("$FreeBSD$"); #include #endif -#ifndef PMAP_SHPGPERPROC -#define PMAP_SHPGPERPROC 200 -#endif - #if !defined(DIAGNOSTIC) #ifdef __GNUC_GNU_INLINE__ #define PMAP_INLINE __attribute__((__gnu_inline__)) inline @@ -162,7 +159,6 @@ __FBSDID("$FreeBSD$"); #define PMAP_INLINE #endif -#define PV_STATS #ifdef PV_STATS #define PV_STAT(x) do { x ; } while (0) #else @@ -204,11 +200,22 @@ static u_int64_t DMPDphys; /* phys addr static u_int64_t DMPDPphys; /* phys addr of direct mapped level 3 */ /* + * Isolate the global pv list lock from data and other locks to prevent false + * sharing within the cache. + */ +static struct { + struct rwlock lock; + char padding[CACHE_LINE_SIZE - sizeof(struct rwlock)]; +} pvh_global __aligned(CACHE_LINE_SIZE); + +#define pvh_global_lock pvh_global.lock + +/* * Data for the pv entry allocation mechanism */ -static int pv_entry_count = 0, pv_entry_max = 0, pv_entry_high_water = 0; +static TAILQ_HEAD(pch, pv_chunk) pv_chunks = TAILQ_HEAD_INITIALIZER(pv_chunks); +static long pv_entry_count; static struct md_page *pv_table; -static int shpgperproc = PMAP_SHPGPERPROC; /* * All those kernel PT submaps that BSD is so fond of @@ -221,8 +228,9 @@ caddr_t CADDR1 = 0; */ static caddr_t crashdumpmap; +static void free_pv_chunk(struct pv_chunk *pc); static void free_pv_entry(pmap_t pmap, pv_entry_t pv); -static pv_entry_t get_pv_entry(pmap_t locked_pmap, int try); +static pv_entry_t get_pv_entry(pmap_t pmap, boolean_t try); static void pmap_pv_demote_pde(pmap_t pmap, vm_offset_t va, vm_paddr_t pa); static boolean_t pmap_pv_insert_pde(pmap_t pmap, vm_offset_t va, vm_paddr_t pa); static void pmap_pv_promote_pde(pmap_t pmap, vm_offset_t va, vm_paddr_t pa); @@ -586,6 +594,11 @@ pmap_bootstrap(vm_paddr_t *firstaddr) CPU_FILL(&kernel_pmap->pm_active); /* don't allow deactivation */ TAILQ_INIT(&kernel_pmap->pm_pvchunk); + /* + * Initialize the global pv list lock. + */ + rw_init(&pvh_global_lock, "pvh global"); + /* * Reserve some special page table entries/VA space for temporary * mapping of pages. @@ -731,16 +744,6 @@ pmap_init(void) } /* - * Initialize the address space (zone) for the pv entries. Set a - * high water mark so that the system can recover from excessive - * numbers of pv entries. - */ - TUNABLE_INT_FETCH("vm.pmap.shpgperproc", &shpgperproc); - pv_entry_max = shpgperproc * maxproc + cnt.v_page_count; - TUNABLE_INT_FETCH("vm.pmap.pv_entries", &pv_entry_max); - pv_entry_high_water = 9 * (pv_entry_max / 10); - - /* * If the kernel is running in a virtual machine on an AMD Family 10h * processor, then it must assume that MCA is enabled by the virtual * machine monitor. @@ -775,36 +778,6 @@ pmap_init(void) TAILQ_INIT(&pv_table[i].pv_list); } -static int -pmap_pventry_proc(SYSCTL_HANDLER_ARGS) -{ - int error; - - error = sysctl_handle_int(oidp, oidp->oid_arg1, oidp->oid_arg2, req); - if (error == 0 && req->newptr) { - shpgperproc = (pv_entry_max - cnt.v_page_count) / maxproc; - pv_entry_high_water = 9 * (pv_entry_max / 10); - } - return (error); -} -SYSCTL_PROC(_vm_pmap, OID_AUTO, pv_entry_max, CTLTYPE_INT|CTLFLAG_RW, - &pv_entry_max, 0, pmap_pventry_proc, "IU", "Max number of PV entries"); - -static int -pmap_shpgperproc_proc(SYSCTL_HANDLER_ARGS) -{ - int error; - - error = sysctl_handle_int(oidp, oidp->oid_arg1, oidp->oid_arg2, req); - if (error == 0 && req->newptr) { - pv_entry_max = shpgperproc * maxproc + cnt.v_page_count; - pv_entry_high_water = 9 * (pv_entry_max / 10); - } - return (error); -} -SYSCTL_PROC(_vm_pmap, OID_AUTO, shpgperproc, CTLTYPE_INT|CTLFLAG_RW, - &shpgperproc, 0, pmap_shpgperproc_proc, "IU", "Page share factor per proc"); - static SYSCTL_NODE(_vm_pmap, OID_AUTO, pde, CTLFLAG_RD, 0, "2MB page mapping counters"); @@ -1696,9 +1669,9 @@ _pmap_allocpte(pmap_t pmap, vm_pindex_t VM_ALLOC_WIRED | VM_ALLOC_ZERO)) == NULL) { if (flags & M_WAITOK) { PMAP_UNLOCK(pmap); - vm_page_unlock_queues(); + rw_wunlock(&pvh_global_lock); VM_WAIT; - vm_page_lock_queues(); + rw_wlock(&pvh_global_lock); PMAP_LOCK(pmap); } @@ -2039,7 +2012,7 @@ static __inline struct pv_chunk * pv_to_chunk(pv_entry_t pv) { - return (struct pv_chunk *)((uintptr_t)pv & ~(uintptr_t)PAGE_MASK); + return ((struct pv_chunk *)((uintptr_t)pv & ~(uintptr_t)PAGE_MASK)); } #define PV_PMAP(pv) (pv_to_chunk(pv)->pc_pmap) @@ -2048,9 +2021,9 @@ pv_to_chunk(pv_entry_t pv) #define PC_FREE1 0xfffffffffffffffful #define PC_FREE2 0x000000fffffffffful -static uint64_t pc_freemask[_NPCM] = { PC_FREE0, PC_FREE1, PC_FREE2 }; +static const uint64_t pc_freemask[_NPCM] = { PC_FREE0, PC_FREE1, PC_FREE2 }; -SYSCTL_INT(_vm_pmap, OID_AUTO, pv_entry_count, CTLFLAG_RD, &pv_entry_count, 0, +SYSCTL_LONG(_vm_pmap, OID_AUTO, pv_entry_count, CTLFLAG_RD, &pv_entry_count, 0, "Current number of pv entries"); #ifdef PV_STATS @@ -2074,85 +2047,147 @@ SYSCTL_LONG(_vm_pmap, OID_AUTO, pv_entry "Current number of pv entry allocs"); SYSCTL_INT(_vm_pmap, OID_AUTO, pv_entry_spare, CTLFLAG_RD, &pv_entry_spare, 0, "Current number of spare pv entries"); - -static int pmap_collect_inactive, pmap_collect_active; - -SYSCTL_INT(_vm_pmap, OID_AUTO, pmap_collect_inactive, CTLFLAG_RD, &pmap_collect_inactive, 0, - "Current number times pmap_collect called on inactive queue"); -SYSCTL_INT(_vm_pmap, OID_AUTO, pmap_collect_active, CTLFLAG_RD, &pmap_collect_active, 0, - "Current number times pmap_collect called on active queue"); #endif /* * We are in a serious low memory condition. Resort to * drastic measures to free some pages so we can allocate - * another pv entry chunk. This is normally called to - * unmap inactive pages, and if necessary, active pages. + * another pv entry chunk. * * We do not, however, unmap 2mpages because subsequent accesses will * allocate per-page pv entries until repromotion occurs, thereby * exacerbating the shortage of free pv entries. */ -static void -pmap_collect(pmap_t locked_pmap, struct vpgqueues *vpq) +static vm_page_t +pmap_pv_reclaim(pmap_t locked_pmap) { + struct pch newtail; + struct pv_chunk *pc; + struct md_page *pvh; pd_entry_t *pde; pmap_t pmap; pt_entry_t *pte, tpte; - pv_entry_t next_pv, pv; + pv_entry_t pv; vm_offset_t va; - vm_page_t m, free; - - TAILQ_FOREACH(m, &vpq->pl, pageq) { - if ((m->flags & PG_MARKER) != 0 || m->hold_count || m->busy) - continue; - TAILQ_FOREACH_SAFE(pv, &m->md.pv_list, pv_list, next_pv) { - va = pv->pv_va; - pmap = PV_PMAP(pv); + vm_page_t free, m, m_pc; + uint64_t inuse; + int bit, field, freed; + + rw_assert(&pvh_global_lock, RA_WLOCKED); + PMAP_LOCK_ASSERT(locked_pmap, MA_OWNED); + pmap = NULL; + free = m_pc = NULL; + TAILQ_INIT(&newtail); + while ((pc = TAILQ_FIRST(&pv_chunks)) != NULL && free == NULL) { + TAILQ_REMOVE(&pv_chunks, pc, pc_lru); + if (pmap != pc->pc_pmap) { + if (pmap != NULL) { + pmap_invalidate_all(pmap); + if (pmap != locked_pmap) + PMAP_UNLOCK(pmap); + } + pmap = pc->pc_pmap; /* Avoid deadlock and lock recursion. */ if (pmap > locked_pmap) PMAP_LOCK(pmap); - else if (pmap != locked_pmap && !PMAP_TRYLOCK(pmap)) + else if (pmap != locked_pmap && !PMAP_TRYLOCK(pmap)) { + pmap = NULL; + TAILQ_INSERT_TAIL(&newtail, pc, pc_lru); continue; - pmap_resident_count_dec(pmap, 1); - pde = pmap_pde(pmap, va); - KASSERT((*pde & PG_PS) == 0, ("pmap_collect: found" - " a 2mpage in page %p's pv list", m)); - pte = pmap_pde_to_pte(pde, va); - tpte = pte_load_clear(pte); - KASSERT((tpte & PG_W) == 0, - ("pmap_collect: wired pte %#lx", tpte)); - if (tpte & PG_A) - vm_page_aflag_set(m, PGA_REFERENCED); - if ((tpte & (PG_M | PG_RW)) == (PG_M | PG_RW)) - vm_page_dirty(m); - free = NULL; - pmap_unuse_pt(pmap, va, *pde, &free); - pmap_invalidate_page(pmap, va); - pmap_free_zero_pages(free); - TAILQ_REMOVE(&m->md.pv_list, pv, pv_list); - free_pv_entry(pmap, pv); - if (pmap != locked_pmap) - PMAP_UNLOCK(pmap); + } } - if (TAILQ_EMPTY(&m->md.pv_list) && - TAILQ_EMPTY(&pa_to_pvh(VM_PAGE_TO_PHYS(m))->pv_list)) - vm_page_aflag_clear(m, PGA_WRITEABLE); + + /* + * Destroy every non-wired, 4 KB page mapping in the chunk. + */ + freed = 0; + for (field = 0; field < _NPCM; field++) { + for (inuse = ~pc->pc_map[field] & pc_freemask[field]; + inuse != 0; inuse &= ~(1UL << bit)) { + bit = bsfq(inuse); + pv = &pc->pc_pventry[field * 64 + bit]; + va = pv->pv_va; + pde = pmap_pde(pmap, va); + if ((*pde & PG_PS) != 0) + continue; + pte = pmap_pde_to_pte(pde, va); + if ((*pte & PG_W) != 0) + continue; + tpte = pte_load_clear(pte); + if ((tpte & PG_G) != 0) + pmap_invalidate_page(pmap, va); + m = PHYS_TO_VM_PAGE(tpte & PG_FRAME); + if ((tpte & (PG_M | PG_RW)) == (PG_M | PG_RW)) + vm_page_dirty(m); + if ((tpte & PG_A) != 0) + vm_page_aflag_set(m, PGA_REFERENCED); + TAILQ_REMOVE(&m->md.pv_list, pv, pv_list); + if (TAILQ_EMPTY(&m->md.pv_list) && + (m->flags & PG_FICTITIOUS) == 0) { + pvh = pa_to_pvh(VM_PAGE_TO_PHYS(m)); + if (TAILQ_EMPTY(&pvh->pv_list)) { + vm_page_aflag_clear(m, + PGA_WRITEABLE); + } + } + pc->pc_map[field] |= 1UL << bit; + pmap_unuse_pt(pmap, va, *pde, &free); + freed++; + } + } + if (freed == 0) { + TAILQ_INSERT_TAIL(&newtail, pc, pc_lru); + continue; + } + /* Every freed mapping is for a 4 KB page. */ + pmap_resident_count_dec(pmap, freed); + PV_STAT(pv_entry_frees += freed); + PV_STAT(pv_entry_spare += freed); + pv_entry_count -= freed; + TAILQ_REMOVE(&pmap->pm_pvchunk, pc, pc_list); + if (pc->pc_map[0] == PC_FREE0 && pc->pc_map[1] == PC_FREE1 && + pc->pc_map[2] == PC_FREE2) { + PV_STAT(pv_entry_spare -= _NPCPV); + PV_STAT(pc_chunk_count--); + PV_STAT(pc_chunk_frees++); + /* Entire chunk is free; return it. */ + m_pc = PHYS_TO_VM_PAGE(DMAP_TO_PHYS((vm_offset_t)pc)); + dump_drop_page(m_pc->phys_addr); + break; + } + TAILQ_INSERT_HEAD(&pmap->pm_pvchunk, pc, pc_list); + TAILQ_INSERT_TAIL(&newtail, pc, pc_lru); + /* One freed pv entry in locked_pmap is sufficient. */ + if (pmap == locked_pmap) + break; + } + TAILQ_CONCAT(&pv_chunks, &newtail, pc_lru); + if (pmap != NULL) { + pmap_invalidate_all(pmap); + if (pmap != locked_pmap) + PMAP_UNLOCK(pmap); } + if (m_pc == NULL && free != NULL) { + m_pc = free; + free = m_pc->right; + /* Recycle a freed page table page. */ + m_pc->wire_count = 1; + atomic_add_int(&cnt.v_wire_count, 1); + } + pmap_free_zero_pages(free); + return (m_pc); } - /* * free the pv_entry back to the free list */ static void free_pv_entry(pmap_t pmap, pv_entry_t pv) { - vm_page_t m; struct pv_chunk *pc; int idx, field, bit; - mtx_assert(&vm_page_queue_mtx, MA_OWNED); + rw_assert(&pvh_global_lock, RA_WLOCKED); PMAP_LOCK_ASSERT(pmap, MA_OWNED); PV_STAT(pv_entry_frees++); PV_STAT(pv_entry_spare++); @@ -2162,13 +2197,25 @@ free_pv_entry(pmap_t pmap, pv_entry_t pv field = idx / 64; bit = idx % 64; pc->pc_map[field] |= 1ul << bit; - /* move to head of list */ - TAILQ_REMOVE(&pmap->pm_pvchunk, pc, pc_list); if (pc->pc_map[0] != PC_FREE0 || pc->pc_map[1] != PC_FREE1 || pc->pc_map[2] != PC_FREE2) { - TAILQ_INSERT_HEAD(&pmap->pm_pvchunk, pc, pc_list); + /* 98% of the time, pc is already at the head of the list. */ + if (__predict_false(pc != TAILQ_FIRST(&pmap->pm_pvchunk))) { + TAILQ_REMOVE(&pmap->pm_pvchunk, pc, pc_list); + TAILQ_INSERT_HEAD(&pmap->pm_pvchunk, pc, pc_list); + } return; } + TAILQ_REMOVE(&pmap->pm_pvchunk, pc, pc_list); + free_pv_chunk(pc); +} + +static void +free_pv_chunk(struct pv_chunk *pc) +{ + vm_page_t m; + + TAILQ_REMOVE(&pv_chunks, pc, pc_lru); PV_STAT(pv_entry_spare -= _NPCPV); PV_STAT(pc_chunk_count--); PV_STAT(pc_chunk_frees++); @@ -2184,26 +2231,16 @@ free_pv_entry(pmap_t pmap, pv_entry_t pv * when needed. */ static pv_entry_t -get_pv_entry(pmap_t pmap, int try) +get_pv_entry(pmap_t pmap, boolean_t try) { - static const struct timeval printinterval = { 60, 0 }; - static struct timeval lastprint; - struct vpgqueues *pq; int bit, field; pv_entry_t pv; struct pv_chunk *pc; vm_page_t m; + rw_assert(&pvh_global_lock, RA_WLOCKED); PMAP_LOCK_ASSERT(pmap, MA_OWNED); - mtx_assert(&vm_page_queue_mtx, MA_OWNED); PV_STAT(pv_entry_allocs++); - pv_entry_count++; - if (pv_entry_count > pv_entry_high_water) - if (ratecheck(&lastprint, &printinterval)) - printf("Approaching the limit on PV entries, consider " - "increasing either the vm.pmap.shpgperproc or the " - "vm.pmap.pv_entry_max sysctl.\n"); - pq = NULL; retry: pc = TAILQ_FIRST(&pmap->pm_pvchunk); if (pc != NULL) { @@ -2220,37 +2257,25 @@ retry: if (pc->pc_map[0] == 0 && pc->pc_map[1] == 0 && pc->pc_map[2] == 0) { TAILQ_REMOVE(&pmap->pm_pvchunk, pc, pc_list); - TAILQ_INSERT_TAIL(&pmap->pm_pvchunk, pc, pc_list); + TAILQ_INSERT_TAIL(&pmap->pm_pvchunk, pc, + pc_list); } + pv_entry_count++; PV_STAT(pv_entry_spare--); return (pv); } } /* No free items, allocate another chunk */ - m = vm_page_alloc(NULL, 0, (pq == &vm_page_queues[PQ_ACTIVE] ? - VM_ALLOC_SYSTEM : VM_ALLOC_NORMAL) | VM_ALLOC_NOOBJ | + m = vm_page_alloc(NULL, 0, VM_ALLOC_NORMAL | VM_ALLOC_NOOBJ | VM_ALLOC_WIRED); if (m == NULL) { if (try) { - pv_entry_count--; PV_STAT(pc_chunk_tryfail++); *** DIFF OUTPUT TRUNCATED AT 1000 LINES *** From owner-svn-src-user@FreeBSD.ORG Thu Jun 14 10:48:42 2012 Return-Path: Delivered-To: svn-src-user@freebsd.org Received: from mx1.freebsd.org (unknown [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id CECEA106564A; Thu, 14 Jun 2012 10:48:42 +0000 (UTC) (envelope-from andre@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [69.147.83.44]) by mx1.freebsd.org (Postfix) with ESMTP id B83AE8FC16; Thu, 14 Jun 2012 10:48:42 +0000 (UTC) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.4/8.14.4) with ESMTP id q5EAmgTm089387; Thu, 14 Jun 2012 10:48:42 GMT (envelope-from andre@svn.freebsd.org) Received: (from andre@localhost) by svn.freebsd.org (8.14.4/8.14.4/Submit) id q5EAmgbl089361; Thu, 14 Jun 2012 10:48:42 GMT (envelope-from andre@svn.freebsd.org) Message-Id: <201206141048.q5EAmgbl089361@svn.freebsd.org> From: Andre Oppermann Date: Thu, 14 Jun 2012 10:48:42 +0000 (UTC) To: src-committers@freebsd.org, svn-src-user@freebsd.org X-SVN-Group: user MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r237056 - in user/andre/tcp_workqueue/sys: amd64/acpica amd64/amd64 amd64/include arm/arm arm/at91 arm/econa arm/include arm/mv arm/s3c2xx0 arm/sa11x0 arm/xscale/ixp425 arm/xscale/pxa c... X-BeenThere: svn-src-user@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "SVN commit messages for the experimental " user" src tree" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 14 Jun 2012 10:48:42 -0000 Author: andre Date: Thu Jun 14 10:48:41 2012 New Revision: 237056 URL: http://svn.freebsd.org/changeset/base/237056 Log: Integrate from HEAD @r237055. Modified: user/andre/tcp_workqueue/sys/amd64/acpica/acpi_wakecode.S user/andre/tcp_workqueue/sys/amd64/amd64/cpu_switch.S user/andre/tcp_workqueue/sys/amd64/amd64/mp_machdep.c user/andre/tcp_workqueue/sys/amd64/include/pcb.h user/andre/tcp_workqueue/sys/arm/arm/machdep.c user/andre/tcp_workqueue/sys/arm/at91/at91_machdep.c user/andre/tcp_workqueue/sys/arm/econa/econa_machdep.c user/andre/tcp_workqueue/sys/arm/include/machdep.h user/andre/tcp_workqueue/sys/arm/mv/mv_machdep.c user/andre/tcp_workqueue/sys/arm/mv/std.mv user/andre/tcp_workqueue/sys/arm/s3c2xx0/s3c24x0_machdep.c user/andre/tcp_workqueue/sys/arm/sa11x0/assabet_machdep.c user/andre/tcp_workqueue/sys/arm/xscale/ixp425/avila_machdep.c user/andre/tcp_workqueue/sys/arm/xscale/pxa/pxa_machdep.c user/andre/tcp_workqueue/sys/conf/options.arm user/andre/tcp_workqueue/sys/dev/ath/if_ath.c user/andre/tcp_workqueue/sys/dev/ath/if_ath_sysctl.c user/andre/tcp_workqueue/sys/dev/ath/if_ath_tx.c user/andre/tcp_workqueue/sys/dev/ath/if_athvar.h user/andre/tcp_workqueue/sys/dev/pci/pci_pci.c user/andre/tcp_workqueue/sys/i386/acpica/acpi_wakecode.S user/andre/tcp_workqueue/sys/i386/i386/swtch.s user/andre/tcp_workqueue/sys/i386/include/pcb.h user/andre/tcp_workqueue/sys/kern/kern_descrip.c user/andre/tcp_workqueue/sys/kern/uipc_usrreq.c user/andre/tcp_workqueue/sys/kern/vfs_syscalls.c user/andre/tcp_workqueue/sys/netinet/libalias/libalias.3 user/andre/tcp_workqueue/sys/netinet/sctp_indata.c user/andre/tcp_workqueue/sys/netinet/sctp_indata.h user/andre/tcp_workqueue/sys/netinet/sctp_input.c user/andre/tcp_workqueue/sys/netinet/sctp_input.h user/andre/tcp_workqueue/sys/netinet/sctp_output.c user/andre/tcp_workqueue/sys/netinet/sctp_output.h user/andre/tcp_workqueue/sys/netinet/sctputil.c user/andre/tcp_workqueue/sys/netinet/sctputil.h user/andre/tcp_workqueue/sys/netinet6/sctp6_usrreq.c user/andre/tcp_workqueue/sys/netsmb/smb_dev.c user/andre/tcp_workqueue/sys/sys/cdefs.h user/andre/tcp_workqueue/sys/sys/filedesc.h user/andre/tcp_workqueue/sys/x86/acpica/acpi_wakeup.c Directory Properties: user/andre/tcp_workqueue/sys/ (props changed) user/andre/tcp_workqueue/sys/conf/ (props changed) Modified: user/andre/tcp_workqueue/sys/amd64/acpica/acpi_wakecode.S ============================================================================== --- user/andre/tcp_workqueue/sys/amd64/acpica/acpi_wakecode.S Thu Jun 14 10:35:21 2012 (r237055) +++ user/andre/tcp_workqueue/sys/amd64/acpica/acpi_wakecode.S Thu Jun 14 10:48:41 2012 (r237056) @@ -220,7 +220,6 @@ wakeup_64: mov %ax, %ds /* Restore arguments. */ - movq wakeup_cr3 - wakeup_start(%rbx), %rsi movq wakeup_pcb - wakeup_start(%rbx), %rdi movq wakeup_ret - wakeup_start(%rbx), %rax @@ -273,10 +272,6 @@ bootgdtdesc: .long bootgdt - wakeup_start /* Offset plus %ds << 4 */ ALIGN_DATA -wakeup_cr4: /* not used */ - .quad 0 -wakeup_cr3: - .quad 0 wakeup_pcb: .quad 0 wakeup_ret: Modified: user/andre/tcp_workqueue/sys/amd64/amd64/cpu_switch.S ============================================================================== --- user/andre/tcp_workqueue/sys/amd64/amd64/cpu_switch.S Thu Jun 14 10:35:21 2012 (r237055) +++ user/andre/tcp_workqueue/sys/amd64/amd64/cpu_switch.S Thu Jun 14 10:48:41 2012 (r237056) @@ -394,12 +394,13 @@ ENTRY(savectx) END(savectx) /* - * resumectx(pcb in %rdi, cr3 in %rsi) + * resumectx(pcb) * Resuming processor state from pcb. */ ENTRY(resumectx) /* Switch to KPML4phys. */ - movq %rsi,%cr3 + movq KPML4phys,%rax + movq %rax,%cr3 /* Force kernel segment registers. */ movl $KDSEL,%eax Modified: user/andre/tcp_workqueue/sys/amd64/amd64/mp_machdep.c ============================================================================== --- user/andre/tcp_workqueue/sys/amd64/amd64/mp_machdep.c Thu Jun 14 10:35:21 2012 (r237055) +++ user/andre/tcp_workqueue/sys/amd64/amd64/mp_machdep.c Thu Jun 14 10:48:41 2012 (r237056) @@ -1429,9 +1429,6 @@ cpususpend_handler(void) CPU_SET_ATOMIC(cpu, &suspended_cpus); } else { pmap_init_pat(); -#if 0 - load_cr3(susppcbs[cpu]->pcb_cr3); -#endif initializecpu(); PCPU_SET(switchtime, 0); PCPU_SET(switchticks, ticks); Modified: user/andre/tcp_workqueue/sys/amd64/include/pcb.h ============================================================================== --- user/andre/tcp_workqueue/sys/amd64/include/pcb.h Thu Jun 14 10:35:21 2012 (r237055) +++ user/andre/tcp_workqueue/sys/amd64/include/pcb.h Thu Jun 14 10:48:41 2012 (r237056) @@ -100,7 +100,7 @@ struct pcb { register_t pcb_xsmask; /* fpu context for suspend/resume */ - void * pcb_fpususpend; + void *pcb_fpususpend; struct savefpu *pcb_save; Modified: user/andre/tcp_workqueue/sys/arm/arm/machdep.c ============================================================================== --- user/andre/tcp_workqueue/sys/arm/arm/machdep.c Thu Jun 14 10:35:21 2012 (r237055) +++ user/andre/tcp_workqueue/sys/arm/arm/machdep.c Thu Jun 14 10:48:41 2012 (r237056) @@ -80,6 +80,7 @@ __FBSDID("$FreeBSD$"); #include #include +#include #include #include #include @@ -110,6 +111,20 @@ extern int *end; extern vm_offset_t ksym_start, ksym_end; #endif +#if defined(LINUX_BOOT_ABI) +#define LBABI_MAX_BANKS 10 + +uint32_t board_id; +struct arm_lbabi_tag *atag_list; +uint32_t revision; +uint64_t serial; +char linux_command_line[LBABI_MAX_COMMAND_LINE + 1]; +char atags[LBABI_MAX_COMMAND_LINE * 2]; +uint32_t memstart[LBABI_MAX_BANKS]; +uint32_t memsize[LBABI_MAX_BANKS]; +uint32_t membanks; +#endif + void sendsig(catcher, ksi, mask) sig_t catcher; @@ -663,10 +678,51 @@ makectx(struct trapframe *tf, struct pcb } /* + * Make a standard dump_avail array. Can't make the phys_avail + * since we need to do that after we call pmap_bootstrap, but this + * is needed before pmap_boostrap. + * + * ARM_USE_SMALL_ALLOC uses dump_avail, so it must be filled before + * calling pmap_bootstrap. + */ +void +arm_dump_avail_init(vm_offset_t memsize, size_t max) +{ +#ifdef LINUX_BOOT_ABI + /* + * Linux boot loader passes us the actual banks of memory, so use them + * to construct the dump_avail array. + */ + if (membanks > 0) + { + int i, j; + + if (max < (membanks + 1) * 2) + panic("dump_avail[%d] too small for %d banks\n", + max, membanks); + for (j = 0, i = 0; i < membanks; i++) { + dump_avail[j++] = round_page(memstart[i]); + dump_avail[j++] = trunc_page(memstart[i] + memsize[i]); + } + dump_avail[j++] = 0; + dump_avail[j++] = 0; + return; + } +#endif + if (max < 4) + panic("dump_avail too small\n"); + + dump_avail[0] = round_page(PHYSADDR); + dump_avail[1] = trunc_page(PHYSADDR + memsize); + dump_avail[2] = 0; + dump_avail[3] = 0; +} + +/* * Fake up a boot descriptor table */ vm_offset_t -fake_preload_metadata(void) +fake_preload_metadata(struct arm_boot_params *abp __unused) { #ifdef DDB vm_offset_t zstart = 0, zend = 0; @@ -712,6 +768,139 @@ fake_preload_metadata(void) return (lastaddr); } +#if defined(LINUX_BOOT_ABI) +vm_offset_t +linux_parse_boot_param(struct arm_boot_params *abp) +{ + struct arm_lbabi_tag *walker; + + /* + * Linux boot ABI: r0 = 0, r1 is the board type (!= 0) and r2 + * is atags or dtb pointer. If all of these aren't satisfied, + * then punt. + */ + if (!(abp->abp_r0 == 0 && abp->abp_r1 != 0 && abp->abp_r2 != 0)) + return 0; + + board_id = abp->abp_r1; + walker = (struct arm_lbabi_tag *) + (abp->abp_r2 + KERNVIRTADDR - KERNPHYSADDR); + + /* xxx - Need to also look for binary device tree */ + if (ATAG_TAG(walker) != ATAG_CORE) + return 0; + + atag_list = walker; + while (ATAG_TAG(walker) != ATAG_NONE) { + switch (ATAG_TAG(walker)) { + case ATAG_CORE: + break; + case ATAG_MEM: + if (membanks < LBABI_MAX_BANKS) { + memstart[membanks] = walker->u.tag_mem.start; + memsize[membanks] = walker->u.tag_mem.size; + } + membanks++; + break; + case ATAG_INITRD2: + break; + case ATAG_SERIAL: + serial = walker->u.tag_sn.low | + ((uint64_t)walker->u.tag_sn.high << 32); + break; + case ATAG_REVISION: + revision = walker->u.tag_rev.rev; + break; + case ATAG_CMDLINE: + /* XXX open question: Parse this for boothowto? */ + bcopy(walker->u.tag_cmd.command, linux_command_line, + ATAG_SIZE(walker)); + break; + default: + break; + } + walker = ATAG_NEXT(walker); + } + + /* Save a copy for later */ + bcopy(atag_list, atags, + (char *)walker - (char *)atag_list + ATAG_SIZE(walker)); + + return fake_preload_metadata(abp); +} +#endif + +#if defined(FREEBSD_BOOT_LOADER) +vm_offset_t +freebsd_parse_boot_param(struct arm_boot_params *abp) +{ + vm_offset_t lastaddr = 0; + void *mdp; + void *kmdp; + + /* + * Mask metadata pointer: it is supposed to be on page boundary. If + * the first argument (mdp) doesn't point to a valid address the + * bootloader must have passed us something else than the metadata + * ptr, so we give up. Also give up if we cannot find metadta section + * the loader creates that we get all this data out of. + */ + + if ((mdp = (void *)(abp->abp_r0 & ~PAGE_MASK)) == NULL) + return 0; + preload_metadata = mdp; + kmdp = preload_search_by_type("elf kernel"); + if (kmdp == NULL) + return 0; + + boothowto = MD_FETCH(kmdp, MODINFOMD_HOWTO, int); + kern_envp = MD_FETCH(kmdp, MODINFOMD_ENVP, char *); + lastaddr = MD_FETCH(kmdp, MODINFOMD_KERNEND, vm_offset_t); +#ifdef DDB + ksym_start = MD_FETCH(kmdp, MODINFOMD_SSYM, uintptr_t); + ksym_end = MD_FETCH(kmdp, MODINFOMD_ESYM, uintptr_t); +#endif + preload_addr_relocate = KERNVIRTADDR - KERNPHYSADDR; + return lastaddr; +} +#endif + +vm_offset_t +default_parse_boot_param(struct arm_boot_params *abp) +{ + vm_offset_t lastaddr; + +#if defined(LINUX_BOOT_ABI) + if ((lastaddr = linux_parse_boot_param(abp)) != 0) + return lastaddr; +#endif +#if defined(FREEBSD_BOOT_LOADER) + if ((lastaddr = freebsd_parse_boot_param(abp)) != 0) + return lastaddr; +#endif + /* Fall back to hardcoded metadata. */ + lastaddr = fake_preload_metadata(abp); + + return lastaddr; +} + +/* + * Stub version of the boot parameter parsing routine. We are + * called early in initarm, before even VM has been initialized. + * This routine needs to preserve any data that the boot loader + * has passed in before the kernel starts to grow past the end + * of the BSS, traditionally the place boot-loaders put this data. + * + * Since this is called so early, things that depend on the vm system + * being setup (including access to some SoC's serial ports), about + * all that can be done in this routine is to copy the arguments. + * + * This is the default boot parameter parsing routine. Individual + * kernels/boards can override this weak function with one of their + * own. We just fake metadata... + */ +__weak_reference(default_parse_boot_param, parse_boot_param); + /* * Initialize proc0 */ Modified: user/andre/tcp_workqueue/sys/arm/at91/at91_machdep.c ============================================================================== --- user/andre/tcp_workqueue/sys/arm/at91/at91_machdep.c Thu Jun 14 10:35:21 2012 (r237055) +++ user/andre/tcp_workqueue/sys/arm/at91/at91_machdep.c Thu Jun 14 10:48:41 2012 (r237056) @@ -392,8 +392,8 @@ initarm(struct arm_boot_params *abp) uint32_t memsize; vm_offset_t lastaddr; + lastaddr = parse_boot_param(abp); set_cpufuncs(); - lastaddr = fake_preload_metadata(); pcpu_init(pcpup, 0, sizeof(struct pcpu)); PCPU_SET(curthread, &thread0); @@ -552,19 +552,8 @@ initarm(struct arm_boot_params *abp) arm_vector_init(ARM_VECTORS_HIGH, ARM_VEC_ALL); pmap_curmaxkvaddr = afterkern + L1_S_SIZE * (KERNEL_PT_KERN_NUM - 1); - - /* - * ARM_USE_SMALL_ALLOC uses dump_avail, so it must be filled before - * calling pmap_bootstrap. - */ - dump_avail[0] = PHYSADDR; - dump_avail[1] = PHYSADDR + memsize; - dump_avail[2] = 0; - dump_avail[3] = 0; - - pmap_bootstrap(freemempos, - KERNVIRTADDR + 3 * memsize, - &kernel_l1pt); + arm_dump_avail_init(memsize, sizeof(dump_avail)/sizeof(dump_avail[0])); + pmap_bootstrap(freemempos, KERNVIRTADDR + 3 * memsize, &kernel_l1pt); msgbufp = (void*)msgbufpv.pv_va; msgbufinit(msgbufp, msgbufsize); mutex_init(); Modified: user/andre/tcp_workqueue/sys/arm/econa/econa_machdep.c ============================================================================== --- user/andre/tcp_workqueue/sys/arm/econa/econa_machdep.c Thu Jun 14 10:35:21 2012 (r237055) +++ user/andre/tcp_workqueue/sys/arm/econa/econa_machdep.c Thu Jun 14 10:48:41 2012 (r237056) @@ -194,9 +194,8 @@ initarm(struct arm_boot_params *abp) int mem_info; boothowto = RB_VERBOSE; - + lastaddr = parse_boot_param(abp); set_cpufuncs(); - lastaddr = fake_preload_metadata(); pcpu_init(pcpup, 0, sizeof(struct pcpu)); PCPU_SET(curthread, &thread0); @@ -343,19 +342,8 @@ initarm(struct arm_boot_params *abp) arm_vector_init(ARM_VECTORS_HIGH, ARM_VEC_ALL); pmap_curmaxkvaddr = afterkern + L1_S_SIZE * (KERNEL_PT_KERN_NUM - 1); - - /* - * ARM_USE_SMALL_ALLOC uses dump_avail, so it must be filled before - * calling pmap_bootstrap. - */ - dump_avail[0] = PHYSADDR; - dump_avail[1] = PHYSADDR + memsize; - dump_avail[2] = 0; - dump_avail[3] = 0; - - pmap_bootstrap(freemempos, - KERNVIRTADDR + 3 * memsize, - &kernel_l1pt); + arm_dump_avail_init(memsize, sizeof(dump_avail) / sizeof(dump_avail[0])); + pmap_bootstrap(freemempos, KERNVIRTADDR + 3 * memsize, &kernel_l1pt); msgbufp = (void*)msgbufpv.pv_va; msgbufinit(msgbufp, msgbufsize); Modified: user/andre/tcp_workqueue/sys/arm/include/machdep.h ============================================================================== --- user/andre/tcp_workqueue/sys/arm/include/machdep.h Thu Jun 14 10:35:21 2012 (r237055) +++ user/andre/tcp_workqueue/sys/arm/include/machdep.h Thu Jun 14 10:48:41 2012 (r237056) @@ -6,11 +6,21 @@ /* misc prototypes used by the many arm machdeps */ void arm_lock_cache_line(vm_offset_t); -vm_offset_t fake_preload_metadata(void); void init_proc0(vm_offset_t kstack); void halt(void); void data_abort_handler(trapframe_t *); void prefetch_abort_handler(trapframe_t *); void undefinedinstruction_bounce(trapframe_t *); +/* Early boot related helper functions */ +struct arm_boot_params; +vm_offset_t default_parse_boot_param(struct arm_boot_params *abp); +vm_offset_t freebsd_parse_boot_param(struct arm_boot_params *abp); +vm_offset_t linux_parse_boot_param(struct arm_boot_params *abp); +vm_offset_t fake_preload_metadata(struct arm_boot_params *abp); +vm_offset_t parse_boot_param(struct arm_boot_params *abp); + +/* Setup standard arrays */ +void arm_dump_avail_init( vm_offset_t memsize, size_t max); + #endif /* !_MACHINE_MACHDEP_H_ */ Modified: user/andre/tcp_workqueue/sys/arm/mv/mv_machdep.c ============================================================================== --- user/andre/tcp_workqueue/sys/arm/mv/mv_machdep.c Thu Jun 14 10:35:21 2012 (r237055) +++ user/andre/tcp_workqueue/sys/arm/mv/mv_machdep.c Thu Jun 14 10:48:41 2012 (r237056) @@ -311,47 +311,22 @@ initarm(struct arm_boot_params *abp) vm_offset_t dtbp, freemempos, l2_start, lastaddr; uint32_t memsize, l2size; void *kmdp; - void *mdp; u_int l1pagetable; int i = 0, j = 0, err_devmap = 0; - mdp = (void *)abp->abp_r0; - kmdp = NULL; - lastaddr = 0; + lastaddr = parse_boot_param(abp); memsize = 0; - dtbp = (vm_offset_t)NULL; - set_cpufuncs(); /* - * Mask metadata pointer: it is supposed to be on page boundary. If - * the first argument (mdp) doesn't point to a valid address the - * bootloader must have passed us something else than the metadata - * ptr... In this case we want to fall back to some built-in settings. - */ - mdp = (void *)((uint32_t)mdp & ~PAGE_MASK); - - /* Parse metadata and fetch parameters */ - if (mdp != NULL) { - preload_metadata = mdp; - kmdp = preload_search_by_type("elf kernel"); - if (kmdp != NULL) { - boothowto = MD_FETCH(kmdp, MODINFOMD_HOWTO, int); - kern_envp = MD_FETCH(kmdp, MODINFOMD_ENVP, char *); - dtbp = MD_FETCH(kmdp, MODINFOMD_DTBP, vm_offset_t); - lastaddr = MD_FETCH(kmdp, MODINFOMD_KERNEND, - vm_offset_t); -#ifdef DDB - ksym_start = MD_FETCH(kmdp, MODINFOMD_SSYM, uintptr_t); - ksym_end = MD_FETCH(kmdp, MODINFOMD_ESYM, uintptr_t); -#endif - } - - preload_addr_relocate = KERNVIRTADDR - KERNPHYSADDR; - } else { - /* Fall back to hardcoded metadata. */ - lastaddr = fake_preload_metadata(); - } + * Find the dtb passed in by the boot loader. + */ + kmdp = preload_search_by_type("elf kernel"); + if (kmdp != NULL) + dtbp = MD_FETCH(kmdp, MODINFOMD_DTBP, vm_offset_t); + else + dtbp = (vm_offset_t)NULL; + #if defined(FDT_DTB_STATIC) /* @@ -577,12 +552,7 @@ initarm(struct arm_boot_params *abp) init_proc0(kernelstack.pv_va); arm_vector_init(ARM_VECTORS_HIGH, ARM_VEC_ALL); - - dump_avail[0] = 0; - dump_avail[1] = memsize; - dump_avail[2] = 0; - dump_avail[3] = 0; - + arm_dump_avail_init(memsize, sizeof(dump_avail) / sizeof(dump_avail[0])); pmap_bootstrap(freemempos, pmap_bootstrap_lastaddr, &kernel_l1pt); msgbufp = (void *)msgbufpv.pv_va; msgbufinit(msgbufp, msgbufsize); Modified: user/andre/tcp_workqueue/sys/arm/mv/std.mv ============================================================================== --- user/andre/tcp_workqueue/sys/arm/mv/std.mv Thu Jun 14 10:35:21 2012 (r237055) +++ user/andre/tcp_workqueue/sys/arm/mv/std.mv Thu Jun 14 10:48:41 2012 (r237056) @@ -3,3 +3,4 @@ files "../mv/files.mv" cpu CPU_ARM9E makeoptions CONF_CFLAGS="-march=armv5te" +options FREEBSD_BOOT_LOADER Modified: user/andre/tcp_workqueue/sys/arm/s3c2xx0/s3c24x0_machdep.c ============================================================================== --- user/andre/tcp_workqueue/sys/arm/s3c2xx0/s3c24x0_machdep.c Thu Jun 14 10:35:21 2012 (r237055) +++ user/andre/tcp_workqueue/sys/arm/s3c2xx0/s3c24x0_machdep.c Thu Jun 14 10:48:41 2012 (r237056) @@ -244,10 +244,9 @@ initarm(struct arm_boot_params *abp) int i; uint32_t memsize; + boothowto = 0; /* Likely not needed */ + lastaddr = parse_boot_param(abp); i = 0; - - boothowto = 0; - set_cpufuncs(); cpufuncs.cf_sleep = s3c24x0_sleep; lastaddr = fake_preload_metadata(); @@ -410,18 +409,8 @@ initarm(struct arm_boot_params *abp) arm_vector_init(ARM_VECTORS_HIGH, ARM_VEC_ALL); pmap_curmaxkvaddr = afterkern + 0x100000 * (KERNEL_PT_KERN_NUM - 1); - /* - * ARM_USE_SMALL_ALLOC uses dump_avail, so it must be filled before - * calling pmap_bootstrap. - */ - dump_avail[0] = PHYSADDR; - dump_avail[1] = PHYSADDR + memsize; - dump_avail[2] = 0; - dump_avail[3] = 0; - - pmap_bootstrap(freemempos, - KERNVIRTADDR + 3 * memsize, - &kernel_l1pt); + arm_dump_avail_init(memsize, sizeof(dump_avail) / sizeof(dump_avail[0])); + pmap_bootstrap(freemempos, KERNVIRTADDR + 3 * memsize, &kernel_l1pt); msgbufp = (void*)msgbufpv.pv_va; msgbufinit(msgbufp, msgbufsize); mutex_init(); Modified: user/andre/tcp_workqueue/sys/arm/sa11x0/assabet_machdep.c ============================================================================== --- user/andre/tcp_workqueue/sys/arm/sa11x0/assabet_machdep.c Thu Jun 14 10:35:21 2012 (r237055) +++ user/andre/tcp_workqueue/sys/arm/sa11x0/assabet_machdep.c Thu Jun 14 10:48:41 2012 (r237056) @@ -215,10 +215,10 @@ initarm(struct arm_boot_params *abp) uint32_t memsize = 32 * 1024 * 1024; sa1110_uart_vaddr = SACOM1_VBASE; - boothowto = RB_VERBOSE | RB_SINGLE; + boothowto = RB_VERBOSE | RB_SINGLE; /* Default value */ + lastaddr = parse_boot_param(abp); cninit(); set_cpufuncs(); - lastaddr = fake_preload_metadata(); physmem = memsize / PAGE_SIZE; pc = &__pcpu; pcpu_init(pc, 0, sizeof(struct pcpu)); Modified: user/andre/tcp_workqueue/sys/arm/xscale/ixp425/avila_machdep.c ============================================================================== --- user/andre/tcp_workqueue/sys/arm/xscale/ixp425/avila_machdep.c Thu Jun 14 10:35:21 2012 (r237055) +++ user/andre/tcp_workqueue/sys/arm/xscale/ixp425/avila_machdep.c Thu Jun 14 10:48:41 2012 (r237056) @@ -446,11 +446,7 @@ initarm(struct arm_boot_params *abp) arm_vector_init(ARM_VECTORS_HIGH, ARM_VEC_ALL); pmap_curmaxkvaddr = afterkern + PAGE_SIZE; - dump_avail[0] = PHYSADDR; - dump_avail[1] = PHYSADDR + memsize; - dump_avail[2] = 0; - dump_avail[3] = 0; - + arm_dump_avail_init(memsize, sizeof(dump_avail) / sizeof(dump_avail[0])); pmap_bootstrap(pmap_curmaxkvaddr, 0xd0000000, &kernel_l1pt); msgbufp = (void*)msgbufpv.pv_va; msgbufinit(msgbufp, msgbufsize); Modified: user/andre/tcp_workqueue/sys/arm/xscale/pxa/pxa_machdep.c ============================================================================== --- user/andre/tcp_workqueue/sys/arm/xscale/pxa/pxa_machdep.c Thu Jun 14 10:35:21 2012 (r237055) +++ user/andre/tcp_workqueue/sys/arm/xscale/pxa/pxa_machdep.c Thu Jun 14 10:48:41 2012 (r237056) @@ -174,8 +174,8 @@ initarm(struct arm_boot_params *abp) int i, j; uint32_t memsize[PXA2X0_SDRAM_BANKS], memstart[PXA2X0_SDRAM_BANKS]; - lastaddr = parse_boot_param(abp); set_cpufuncs(); + lastaddr = fake_preload_metadata(); pcpu_init(pcpup, 0, sizeof(struct pcpu)); PCPU_SET(curthread, &thread0); Modified: user/andre/tcp_workqueue/sys/conf/options.arm ============================================================================== --- user/andre/tcp_workqueue/sys/conf/options.arm Thu Jun 14 10:35:21 2012 (r237055) +++ user/andre/tcp_workqueue/sys/conf/options.arm Thu Jun 14 10:48:41 2012 (r237056) @@ -16,9 +16,11 @@ CPU_XSCALE_IXP425 opt_global.h CPU_XSCALE_IXP435 opt_global.h CPU_XSCALE_PXA2X0 opt_global.h FLASHADDR opt_global.h +FREEBSD_BOOT_LOADER opt_global.h IXP4XX_FLASH_SIZE opt_global.h KERNPHYSADDR opt_global.h KERNVIRTADDR opt_global.h +LINUX_BOOT_ABI opt_global.h LOADERRAMADDR opt_global.h PHYSADDR opt_global.h QEMU_WORKAROUNDS opt_global.h Modified: user/andre/tcp_workqueue/sys/dev/ath/if_ath.c ============================================================================== --- user/andre/tcp_workqueue/sys/dev/ath/if_ath.c Thu Jun 14 10:35:21 2012 (r237055) +++ user/andre/tcp_workqueue/sys/dev/ath/if_ath.c Thu Jun 14 10:48:41 2012 (r237056) @@ -524,7 +524,9 @@ ath_attach(u_int16_t devid, struct ath_s | IEEE80211_C_SHPREAMBLE /* short preamble supported */ | IEEE80211_C_SHSLOT /* short slot time supported */ | IEEE80211_C_WPA /* capable of WPA1+WPA2 */ +#ifndef ATH_ENABLE_11N | IEEE80211_C_BGSCAN /* capable of bg scanning */ +#endif | IEEE80211_C_TXFRAG /* handle tx frags */ #ifdef ATH_ENABLE_DFS | IEEE80211_C_DFS /* Enable radar detection */ @@ -660,12 +662,6 @@ ath_attach(u_int16_t devid, struct ath_s (void) ath_hal_settxchainmask(sc->sc_ah, tx_chainmask); } - /* - * The if_ath 11n support is completely not ready for normal use. - * Enabling this option will likely break everything and everything. - * Don't think of doing that unless you know what you're doing. - */ - #ifdef ATH_ENABLE_11N /* * Query HT capabilities @@ -2239,8 +2235,22 @@ _ath_getbuf_locked(struct ath_softc *sc, if (bf != NULL && (bf->bf_flags & ATH_BUF_BUSY) == 0) { if (btype == ATH_BUFTYPE_MGMT) TAILQ_REMOVE(&sc->sc_txbuf_mgmt, bf, bf_list); - else + else { TAILQ_REMOVE(&sc->sc_txbuf, bf, bf_list); + sc->sc_txbuf_cnt--; + + /* + * This shuldn't happen; however just to be + * safe print a warning and fudge the txbuf + * count. + */ + if (sc->sc_txbuf_cnt < 0) { + device_printf(sc->sc_dev, + "%s: sc_txbuf_cnt < 0?\n", + __func__); + sc->sc_txbuf_cnt = 0; + } + } } else bf = NULL; @@ -2367,6 +2377,7 @@ ath_start(struct ifnet *ifp) "%s: sc_inreset_cnt > 0; bailing\n", __func__); ATH_PCU_UNLOCK(sc); IF_LOCK(&ifp->if_snd); + sc->sc_stats.ast_tx_qstop++; ifp->if_drv_flags |= IFF_DRV_OACTIVE; IF_UNLOCK(&ifp->if_snd); return; @@ -2375,6 +2386,17 @@ ath_start(struct ifnet *ifp) ATH_PCU_UNLOCK(sc); for (;;) { + ATH_TXBUF_LOCK(sc); + if (sc->sc_txbuf_cnt <= sc->sc_txq_data_minfree) { + /* XXX increment counter? */ + ATH_TXBUF_UNLOCK(sc); + IF_LOCK(&ifp->if_snd); + ifp->if_drv_flags |= IFF_DRV_OACTIVE; + IF_UNLOCK(&ifp->if_snd); + break; + } + ATH_TXBUF_UNLOCK(sc); + /* * Grab a TX buffer and associated resources. */ @@ -2883,6 +2905,7 @@ ath_desc_alloc(struct ath_softc *sc) ath_descdma_cleanup(sc, &sc->sc_rxdma, &sc->sc_rxbuf); return error; } + sc->sc_txbuf_cnt = ath_txbuf; error = ath_descdma_setup(sc, &sc->sc_txdma_mgmt, &sc->sc_txbuf_mgmt, "tx_mgmt", ath_txbuf_mgmt, ATH_TXDESC); @@ -3686,8 +3709,17 @@ ath_returnbuf_tail(struct ath_softc *sc, if (bf->bf_flags & ATH_BUF_MGMT) TAILQ_INSERT_TAIL(&sc->sc_txbuf_mgmt, bf, bf_list); - else + else { TAILQ_INSERT_TAIL(&sc->sc_txbuf, bf, bf_list); + sc->sc_txbuf_cnt++; + if (sc->sc_txbuf_cnt > ath_txbuf) { + device_printf(sc->sc_dev, + "%s: sc_txbuf_cnt > %d?\n", + __func__, + ath_txbuf); + sc->sc_txbuf_cnt = ath_txbuf; + } + } } void @@ -3698,8 +3730,17 @@ ath_returnbuf_head(struct ath_softc *sc, if (bf->bf_flags & ATH_BUF_MGMT) TAILQ_INSERT_HEAD(&sc->sc_txbuf_mgmt, bf, bf_list); - else + else { TAILQ_INSERT_HEAD(&sc->sc_txbuf, bf, bf_list); + sc->sc_txbuf_cnt++; + if (sc->sc_txbuf_cnt > ATH_TXBUF) { + device_printf(sc->sc_dev, + "%s: sc_txbuf_cnt > %d?\n", + __func__, + ATH_TXBUF); + sc->sc_txbuf_cnt = ATH_TXBUF; + } + } } /* Modified: user/andre/tcp_workqueue/sys/dev/ath/if_ath_sysctl.c ============================================================================== --- user/andre/tcp_workqueue/sys/dev/ath/if_ath_sysctl.c Thu Jun 14 10:35:21 2012 (r237055) +++ user/andre/tcp_workqueue/sys/dev/ath/if_ath_sysctl.c Thu Jun 14 10:48:41 2012 (r237056) @@ -374,8 +374,8 @@ ath_sysctl_txagg(SYSCTL_HANDLER_ARGS) t++; } ATH_TXBUF_UNLOCK(sc); - printf("Total TX buffers: %d; Total TX buffers busy: %d\n", - t, i); + printf("Total TX buffers: %d; Total TX buffers busy: %d (%d)\n", + t, i, sc->sc_txbuf_cnt); i = t = 0; ATH_TXBUF_LOCK(sc); @@ -620,12 +620,11 @@ ath_sysctlattach(struct ath_softc *sc) "tid_hwq_hi", CTLFLAG_RW, &sc->sc_tid_hwq_hi, 0, ""); -#if 0 SYSCTL_ADD_INT(ctx, SYSCTL_CHILDREN(tree), OID_AUTO, "txq_data_minfree", CTLFLAG_RW, &sc->sc_txq_data_minfree, 0, "Minimum free buffers before adding a data frame" " to the TX queue"); -#endif + SYSCTL_ADD_INT(ctx, SYSCTL_CHILDREN(tree), OID_AUTO, "txq_mcastq_maxdepth", CTLFLAG_RW, &sc->sc_txq_mcastq_maxdepth, 0, Modified: user/andre/tcp_workqueue/sys/dev/ath/if_ath_tx.c ============================================================================== --- user/andre/tcp_workqueue/sys/dev/ath/if_ath_tx.c Thu Jun 14 10:35:21 2012 (r237055) +++ user/andre/tcp_workqueue/sys/dev/ath/if_ath_tx.c Thu Jun 14 10:48:41 2012 (r237056) @@ -1308,7 +1308,28 @@ ath_tx_normal_setup(struct ath_softc *sc return EIO; } - /* Check if the TXQ wouldn't match what the hardware TXQ is! */ + /* + * There are two known scenarios where the frame AC doesn't match + * what the destination TXQ is. + * + * + non-QoS frames (eg management?) that the net80211 stack has + * assigned a higher AC to, but since it's a non-QoS TID, it's + * being thrown into TID 16. TID 16 gets the AC_BE queue. + * It's quite possible that management frames should just be + * direct dispatched to hardware rather than go via the software + * queue; that should be investigated in the future. There are + * some specific scenarios where this doesn't make sense, mostly + * surrounding ADDBA request/response - hence why that is special + * cased. + * + * + Multicast frames going into the VAP mcast queue. That shows up + * as "TXQ 11". + * + * This driver should eventually support separate TID and TXQ locking, + * allowing for arbitrary AC frames to appear on arbitrary software + * queues, being queued to the "correct" hardware queue when needed. + */ +#if 0 if (txq != sc->sc_ac2q[pri]) { device_printf(sc->sc_dev, "%s: txq=%p (%d), pri=%d, pri txq=%p (%d)\n", @@ -1319,6 +1340,7 @@ ath_tx_normal_setup(struct ath_softc *sc sc->sc_ac2q[pri], sc->sc_ac2q[pri]->axq_qnum); } +#endif /* * Calculate miscellaneous flags. Modified: user/andre/tcp_workqueue/sys/dev/ath/if_athvar.h ============================================================================== --- user/andre/tcp_workqueue/sys/dev/ath/if_athvar.h Thu Jun 14 10:35:21 2012 (r237055) +++ user/andre/tcp_workqueue/sys/dev/ath/if_athvar.h Thu Jun 14 10:48:41 2012 (r237056) @@ -211,15 +211,16 @@ struct ath_buf { /* This state is kept to support software retries and aggregation */ struct { - int bfs_seqno; /* sequence number of this packet */ - int bfs_retries; /* retry count */ - uint16_t bfs_tid; /* packet TID (or TID_MAX for no QoS) */ - uint16_t bfs_pri; /* packet AC priority */ - struct ath_txq *bfs_txq; /* eventual dest hardware TXQ */ - uint16_t bfs_pktdur; /* packet duration (at current rate?) */ - uint16_t bfs_nframes; /* number of frames in aggregate */ + uint16_t bfs_seqno; /* sequence number of this packet */ uint16_t bfs_ndelim; /* number of delims for padding */ + uint8_t bfs_retries; /* retry count */ + uint8_t bfs_tid; /* packet TID (or TID_MAX for no QoS) */ + uint8_t bfs_nframes; /* number of frames in aggregate */ + uint8_t bfs_pri; /* packet AC priority */ + + struct ath_txq *bfs_txq; /* eventual dest hardware TXQ */ + u_int32_t bfs_aggr:1, /* part of aggregate? */ bfs_aggrburst:1, /* part of aggregate burst? */ bfs_isretried:1, /* retried frame? */ @@ -501,6 +502,7 @@ struct ath_softc { struct ath_descdma sc_txdma; /* TX descriptors */ ath_bufhead sc_txbuf; /* transmit buffer */ + int sc_txbuf_cnt; /* how many buffers avail */ struct ath_descdma sc_txdma_mgmt; /* mgmt TX descriptors */ ath_bufhead sc_txbuf_mgmt; /* mgmt transmit buffer */ struct mtx sc_txbuflock; /* txbuf lock */ Modified: user/andre/tcp_workqueue/sys/dev/pci/pci_pci.c ============================================================================== --- user/andre/tcp_workqueue/sys/dev/pci/pci_pci.c Thu Jun 14 10:35:21 2012 (r237055) +++ user/andre/tcp_workqueue/sys/dev/pci/pci_pci.c Thu Jun 14 10:48:41 2012 (r237056) @@ -893,9 +893,9 @@ pcib_grow_window(struct pcib_softc *sc, if (start < rman_get_start(w->res)) { if (rman_first_free_region(&w->rman, &start_free, &end_free) != 0 || start_free != rman_get_start(w->res)) - end_free = rman_get_start(w->res) - 1; + end_free = rman_get_start(w->res); if (end_free > end) - end_free = end; + end_free = end + 1; /* Move end_free down until it is properly aligned. */ end_free &= ~(align - 1); @@ -913,7 +913,7 @@ pcib_grow_window(struct pcib_softc *sc, if (bootverbose) printf("\tfront candidate range: %#lx-%#lx\n", front, end_free); - front &= (1ul << w->step) - 1; + front &= ~(1ul << w->step) - 1; front = rman_get_start(w->res) - front; } else front = 0; Modified: user/andre/tcp_workqueue/sys/i386/acpica/acpi_wakecode.S ============================================================================== --- user/andre/tcp_workqueue/sys/i386/acpica/acpi_wakecode.S Thu Jun 14 10:35:21 2012 (r237055) +++ user/andre/tcp_workqueue/sys/i386/acpica/acpi_wakecode.S Thu Jun 14 10:48:41 2012 (r237056) @@ -142,8 +142,8 @@ wakeup_32: mov %ax, %ds /* Get PCB and return address. */ - movl wakeup_pcb - wakeup_start(%ebx), %esi - movl wakeup_ret - wakeup_start(%ebx), %edi + movl wakeup_pcb - wakeup_start(%ebx), %ecx + movl wakeup_ret - wakeup_start(%ebx), %edx /* Restore CR4 and CR3. */ movl wakeup_cr4 - wakeup_start(%ebx), %eax @@ -166,7 +166,7 @@ wakeup_32: jmp 1f 1: /* Jump to return address. */ - jmp *%edi + jmp *%edx .data Modified: user/andre/tcp_workqueue/sys/i386/i386/swtch.s ============================================================================== --- user/andre/tcp_workqueue/sys/i386/i386/swtch.s Thu Jun 14 10:35:21 2012 (r237055) +++ user/andre/tcp_workqueue/sys/i386/i386/swtch.s Thu Jun 14 10:48:41 2012 (r237056) @@ -460,13 +460,10 @@ ENTRY(savectx) END(savectx) /* - * resumectx(pcb in %esi) + * resumectx(pcb) __fastcall * Resuming processor state from pcb. */ ENTRY(resumectx) - /* Fetch PCB. */ - movl %esi,%ecx - /* Restore GDT. */ lgdt PCB_GDT(%ecx) Modified: user/andre/tcp_workqueue/sys/i386/include/pcb.h ============================================================================== --- user/andre/tcp_workqueue/sys/i386/include/pcb.h Thu Jun 14 10:35:21 2012 (r237055) +++ user/andre/tcp_workqueue/sys/i386/include/pcb.h Thu Jun 14 10:48:41 2012 (r237056) @@ -97,7 +97,7 @@ struct trapframe; void makectx(struct trapframe *, struct pcb *); int savectx(struct pcb *) __returns_twice; -void resumectx(struct pcb *); +void resumectx(struct pcb *) __fastcall; #endif #endif /* _I386_PCB_H_ */ Modified: user/andre/tcp_workqueue/sys/kern/kern_descrip.c ============================================================================== --- user/andre/tcp_workqueue/sys/kern/kern_descrip.c Thu Jun 14 10:35:21 2012 (r237055) +++ user/andre/tcp_workqueue/sys/kern/kern_descrip.c Thu Jun 14 10:48:41 2012 (r237056) @@ -119,7 +119,7 @@ static int closefp(struct filedesc *fdp, static int do_dup(struct thread *td, int flags, int old, int new, register_t *retval); static int fd_first_free(struct filedesc *, int, int); -static int fd_last_used(struct filedesc *, int, int); +static int fd_last_used(struct filedesc *, int); static void fdgrowtable(struct filedesc *, int); static void fdunused(struct filedesc *fdp, int fd); static void fdused(struct filedesc *fdp, int fd); @@ -189,8 +189,9 @@ void (*mq_fdclose)(struct thread *td, in static struct mtx fdesc_mtx; /* - * Find the first zero bit in the given bitmap, starting at low and not - * exceeding size - 1. + * If low >= size, just return low. Otherwise find the first zero bit in the + * given bitmap, starting at low and not exceeding size - 1. Return size if + * not found. */ static int fd_first_free(struct filedesc *fdp, int low, int size) @@ -216,19 +217,16 @@ fd_first_free(struct filedesc *fdp, int } /* - * Find the highest non-zero bit in the given bitmap, starting at low and - * not exceeding size - 1. + * Find the highest non-zero bit in the given bitmap, starting at 0 and + * not exceeding size - 1. Return -1 if not found. */ static int -fd_last_used(struct filedesc *fdp, int low, int size) +fd_last_used(struct filedesc *fdp, int size) { NDSLOTTYPE *map = fdp->fd_map; NDSLOTTYPE mask; int off, minoff; - if (low >= size) - return (-1); - off = NDSLOT(size); if (size % NDENTRIES) { mask = ~(~(NDSLOTTYPE)0 << (size % NDENTRIES)); @@ -236,16 +234,16 @@ fd_last_used(struct filedesc *fdp, int l return (off * NDENTRIES + flsl(mask) - 1); --off; } - for (minoff = NDSLOT(low); off >= minoff; --off) + for (minoff = NDSLOT(0); off >= minoff; --off) if (map[off] != 0) return (off * NDENTRIES + flsl(map[off]) - 1); - return (low - 1); + return (-1); } static int fdisused(struct filedesc *fdp, int fd) { - KASSERT((unsigned int)fd < fdp->fd_nfiles, + KASSERT(fd >= 0 && fd < fdp->fd_nfiles, ("file descriptor %d out of range (0, %d)", fd, fdp->fd_nfiles)); return ((fdp->fd_map[NDSLOT(fd)] & NDBIT(fd)) != 0); } @@ -285,7 +283,7 @@ fdunused(struct filedesc *fdp, int fd) if (fd < fdp->fd_freefile) fdp->fd_freefile = fd; if (fd == fdp->fd_lastfile) - fdp->fd_lastfile = fd_last_used(fdp, 0, fd); + fdp->fd_lastfile = fd_last_used(fdp, fd); } /* @@ -435,7 +433,7 @@ fdtofp(int fd, struct filedesc *fdp) FILEDESC_LOCK_ASSERT(fdp); - if ((unsigned)fd >= fdp->fd_nfiles) + if (fd < 0 || fd >= fdp->fd_nfiles) return (NULL); return (fdp->fd_ofiles[fd]); @@ -679,7 +677,7 @@ kern_fcntl(struct thread *td, int fd, in vfslocked = 0; /* Check for race with close */ FILEDESC_SLOCK(fdp); - if ((unsigned) fd >= fdp->fd_nfiles || + if (fd < 0 || fd >= fdp->fd_nfiles || fp != fdp->fd_ofiles[fd]) { FILEDESC_SUNLOCK(fdp); flp->l_whence = SEEK_SET; @@ -1199,7 +1197,7 @@ kern_close(td, fd) AUDIT_SYSCLOSE(td, fd); FILEDESC_XLOCK(fdp); - if ((unsigned)fd >= fdp->fd_nfiles || + if (fd < 0 || fd >= fdp->fd_nfiles || (fp = fdp->fd_ofiles[fd]) == NULL) { FILEDESC_XUNLOCK(fdp); return (EBADF); @@ -1461,7 +1459,7 @@ fdalloc(struct thread *td, int minfd, in { struct proc *p = td->td_proc; struct filedesc *fdp = p->p_fd; - int fd = -1, maxfd; + int fd = -1, maxfd, allocfd; #ifdef RACCT int error; #endif @@ -1476,32 +1474,33 @@ fdalloc(struct thread *td, int minfd, in PROC_UNLOCK(p); /* - * Search the bitmap for a free descriptor. If none is found, try - * to grow the file table. Keep at it until we either get a file - * descriptor or run into process or system limits. + * Search the bitmap for a free descriptor starting at minfd. + * If none is found, grow the file table. */ - for (;;) { - fd = fd_first_free(fdp, minfd, fdp->fd_nfiles); - if (fd >= maxfd) - return (EMFILE); - if (fd < fdp->fd_nfiles) - break; + fd = fd_first_free(fdp, minfd, fdp->fd_nfiles); + if (fd >= maxfd) + return (EMFILE); + if (fd >= fdp->fd_nfiles) { + allocfd = min(fd * 2, maxfd); #ifdef RACCT PROC_LOCK(p); - error = racct_set(p, RACCT_NOFILE, - min(fdp->fd_nfiles * 2, maxfd)); + error = racct_set(p, RACCT_NOFILE, allocfd); PROC_UNLOCK(p); if (error != 0) return (EMFILE); #endif - fdgrowtable(fdp, min(fdp->fd_nfiles * 2, maxfd)); + /* + * fd is already equal to first free descriptor >= minfd, so + * we only need to grow the table and we are done. + */ + fdgrowtable(fdp, allocfd); } /* * Perform some sanity checks, then mark the file descriptor as * used and return it to the caller. */ *** DIFF OUTPUT TRUNCATED AT 1000 LINES *** From owner-svn-src-user@FreeBSD.ORG Thu Jun 14 12:31:51 2012 Return-Path: Delivered-To: svn-src-user@freebsd.org Received: from mx1.freebsd.org (unknown [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 75ED8106564A; Thu, 14 Jun 2012 12:31:51 +0000 (UTC) (envelope-from andre@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [69.147.83.44]) by mx1.freebsd.org (Postfix) with ESMTP id 61B228FC15; Thu, 14 Jun 2012 12:31:51 +0000 (UTC) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.4/8.14.4) with ESMTP id q5ECVpUv094236; Thu, 14 Jun 2012 12:31:51 GMT (envelope-from andre@svn.freebsd.org) Received: (from andre@localhost) by svn.freebsd.org (8.14.4/8.14.4/Submit) id q5ECVpov094234; Thu, 14 Jun 2012 12:31:51 GMT (envelope-from andre@svn.freebsd.org) Message-Id: <201206141231.q5ECVpov094234@svn.freebsd.org> From: Andre Oppermann Date: Thu, 14 Jun 2012 12:31:51 +0000 (UTC) To: src-committers@freebsd.org, svn-src-user@freebsd.org X-SVN-Group: user MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r237062 - user/andre/tcp_workqueue/sys/netinet X-BeenThere: svn-src-user@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "SVN commit messages for the experimental " user" src tree" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 14 Jun 2012 12:31:51 -0000 Author: andre Date: Thu Jun 14 12:31:50 2012 New Revision: 237062 URL: http://svn.freebsd.org/changeset/base/237062 Log: Fix mismerge from last integrate. Modified: user/andre/tcp_workqueue/sys/netinet/tcp_subr.c Modified: user/andre/tcp_workqueue/sys/netinet/tcp_subr.c ============================================================================== --- user/andre/tcp_workqueue/sys/netinet/tcp_subr.c Thu Jun 14 12:28:43 2012 (r237061) +++ user/andre/tcp_workqueue/sys/netinet/tcp_subr.c Thu Jun 14 12:31:50 2012 (r237062) @@ -1672,7 +1672,6 @@ tcp_mtudisc(struct inpcb *inp, int mtuof { struct tcpcb *tp; struct socket *so; - int mtu; INP_WLOCK_ASSERT(inp); if ((inp->inp_flags & INP_TIMEWAIT) || From owner-svn-src-user@FreeBSD.ORG Thu Jun 14 12:38:52 2012 Return-Path: Delivered-To: svn-src-user@freebsd.org Received: from mx1.freebsd.org (unknown [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 2955C1065674; Thu, 14 Jun 2012 12:38:52 +0000 (UTC) (envelope-from andre@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [69.147.83.44]) by mx1.freebsd.org (Postfix) with ESMTP id 160578FC1F; Thu, 14 Jun 2012 12:38:52 +0000 (UTC) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.4/8.14.4) with ESMTP id q5ECcpP9094606; Thu, 14 Jun 2012 12:38:51 GMT (envelope-from andre@svn.freebsd.org) Received: (from andre@localhost) by svn.freebsd.org (8.14.4/8.14.4/Submit) id q5ECcpJm094604; Thu, 14 Jun 2012 12:38:51 GMT (envelope-from andre@svn.freebsd.org) Message-Id: <201206141238.q5ECcpJm094604@svn.freebsd.org> From: Andre Oppermann Date: Thu, 14 Jun 2012 12:38:51 +0000 (UTC) To: src-committers@freebsd.org, svn-src-user@freebsd.org X-SVN-Group: user MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r237064 - user/andre/tcp_workqueue/sys/netinet X-BeenThere: svn-src-user@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "SVN commit messages for the experimental " user" src tree" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 14 Jun 2012 12:38:52 -0000 Author: andre Date: Thu Jun 14 12:38:51 2012 New Revision: 237064 URL: http://svn.freebsd.org/changeset/base/237064 Log: Add SACK_PERMIT to the list of TCP options that are switched off after retransmitting a SYN three times. Modified: user/andre/tcp_workqueue/sys/netinet/tcp_timer.c Modified: user/andre/tcp_workqueue/sys/netinet/tcp_timer.c ============================================================================== --- user/andre/tcp_workqueue/sys/netinet/tcp_timer.c Thu Jun 14 12:37:41 2012 (r237063) +++ user/andre/tcp_workqueue/sys/netinet/tcp_timer.c Thu Jun 14 12:38:51 2012 (r237064) @@ -566,7 +566,7 @@ tcp_timer_rexmt(void * xtp) * unknown-to-them TCP options. */ if ((tp->t_state == TCPS_SYN_SENT) && (tp->t_rxtshift == 3)) - tp->t_flags &= ~(TF_REQ_SCALE|TF_REQ_TSTMP); + tp->t_flags &= ~(TF_REQ_SCALE|TF_REQ_TSTMP|TF_SACK_PERMIT); /* * If we backed off this far, our srtt estimate is probably bogus. * Clobber it so we'll take the next rtt measurement as our srtt; From owner-svn-src-user@FreeBSD.ORG Thu Jun 14 16:53:09 2012 Return-Path: Delivered-To: svn-src-user@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [69.147.83.52]) by hub.freebsd.org (Postfix) with ESMTP id 8B86A106571C; Thu, 14 Jun 2012 16:53:09 +0000 (UTC) (envelope-from alc@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [69.147.83.44]) by mx1.freebsd.org (Postfix) with ESMTP id 74E878FC1A; Thu, 14 Jun 2012 16:53:09 +0000 (UTC) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.4/8.14.4) with ESMTP id q5EGr9QP006831; Thu, 14 Jun 2012 16:53:09 GMT (envelope-from alc@svn.freebsd.org) Received: (from alc@localhost) by svn.freebsd.org (8.14.4/8.14.4/Submit) id q5EGr9kP006824; Thu, 14 Jun 2012 16:53:09 GMT (envelope-from alc@svn.freebsd.org) Message-Id: <201206141653.q5EGr9kP006824@svn.freebsd.org> From: Alan Cox Date: Thu, 14 Jun 2012 16:53:09 +0000 (UTC) To: src-committers@freebsd.org, svn-src-user@freebsd.org X-SVN-Group: user MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r237083 - in user/alc/superpages/sys: amd64/amd64 amd64/include vm X-BeenThere: svn-src-user@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "SVN commit messages for the experimental " user" src tree" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 14 Jun 2012 16:53:09 -0000 Author: alc Date: Thu Jun 14 16:53:08 2012 New Revision: 237083 URL: http://svn.freebsd.org/changeset/base/237083 Log: Speed up the destruction of superpage mappings on amd64 by eliminating the frequent need for pmap_remove_pages() and pmap_remove_pde() to access each struct vm_page that makes up a superpage. This is accomplished through a combination of two changes: 1) Replace PGA_WRITEABLE with an exact count of write mappings at both the 4KB and 2MB granularity so that pmap_remove_pages() and pmap_remove_pde() must no longer access each struct vm_page in order to clear PGA_WRITEABLE. (These counts are stored in space that was previously lost to alignment in struct md_page, so struct vm_page is no larger.) 2) Call vm_page_dirty() during promotion of write mappings rather than pmap_remove_pages() and pmap_remove_pde(). Each struct vm_page is already accessed on promotion, so adding a call to vm_page_dirty() shouldn't result in additional cache misses. For "buildworld", this reduces the average running time of pmap_remove_pages() by 23%. Modified: user/alc/superpages/sys/amd64/amd64/pmap.c user/alc/superpages/sys/amd64/include/pmap.h user/alc/superpages/sys/vm/swap_pager.c user/alc/superpages/sys/vm/vm_page.c user/alc/superpages/sys/vm/vm_pageout.c user/alc/superpages/sys/vm/vnode_pager.c Modified: user/alc/superpages/sys/amd64/amd64/pmap.c ============================================================================== --- user/alc/superpages/sys/amd64/amd64/pmap.c Thu Jun 14 16:25:10 2012 (r237082) +++ user/alc/superpages/sys/amd64/amd64/pmap.c Thu Jun 14 16:53:08 2012 (r237083) @@ -231,9 +231,11 @@ static caddr_t crashdumpmap; static void free_pv_chunk(struct pv_chunk *pc); static void free_pv_entry(pmap_t pmap, pv_entry_t pv); static pv_entry_t get_pv_entry(pmap_t pmap, boolean_t try); -static void pmap_pv_demote_pde(pmap_t pmap, vm_offset_t va, vm_paddr_t pa); -static boolean_t pmap_pv_insert_pde(pmap_t pmap, vm_offset_t va, vm_paddr_t pa); -static void pmap_pv_promote_pde(pmap_t pmap, vm_offset_t va, vm_paddr_t pa); +static void pmap_pv_demote_pde(pmap_t pmap, vm_offset_t va, pd_entry_t pde); +static boolean_t pmap_pv_insert_pde(pmap_t pmap, vm_offset_t va, + pd_entry_t pde); +static void pmap_pv_promote_pde(pmap_t pmap, vm_offset_t va, + pd_entry_t pde); static void pmap_pvh_free(struct md_page *pvh, pmap_t pmap, vm_offset_t va); static pv_entry_t pmap_pvh_remove(struct md_page *pvh, pmap_t pmap, vm_offset_t va); @@ -265,11 +267,8 @@ static int pmap_remove_pte(pmap_t pmap, static void pmap_remove_pt_page(pmap_t pmap, vm_page_t mpte); static void pmap_remove_page(pmap_t pmap, vm_offset_t va, pd_entry_t *pde, vm_page_t *free); -static void pmap_remove_entry(struct pmap *pmap, vm_page_t m, - vm_offset_t va); -static void pmap_insert_entry(pmap_t pmap, vm_offset_t va, vm_page_t m); static boolean_t pmap_try_insert_pv_entry(pmap_t pmap, vm_offset_t va, - vm_page_t m); + vm_page_t m, boolean_t write_mapping); static void pmap_update_pde(pmap_t pmap, vm_offset_t va, pd_entry_t *pde, pd_entry_t newpde); static void pmap_update_pde_invalidate(vm_offset_t va, pd_entry_t newpde); @@ -2063,7 +2062,6 @@ pmap_pv_reclaim(pmap_t locked_pmap) { struct pch newtail; struct pv_chunk *pc; - struct md_page *pvh; pd_entry_t *pde; pmap_t pmap; pt_entry_t *pte, tpte; @@ -2117,19 +2115,15 @@ pmap_pv_reclaim(pmap_t locked_pmap) if ((tpte & PG_G) != 0) pmap_invalidate_page(pmap, va); m = PHYS_TO_VM_PAGE(tpte & PG_FRAME); - if ((tpte & (PG_M | PG_RW)) == (PG_M | PG_RW)) - vm_page_dirty(m); if ((tpte & PG_A) != 0) vm_page_aflag_set(m, PGA_REFERENCED); - TAILQ_REMOVE(&m->md.pv_list, pv, pv_list); - if (TAILQ_EMPTY(&m->md.pv_list) && - (m->flags & PG_FICTITIOUS) == 0) { - pvh = pa_to_pvh(VM_PAGE_TO_PHYS(m)); - if (TAILQ_EMPTY(&pvh->pv_list)) { - vm_page_aflag_clear(m, - PGA_WRITEABLE); - } + if ((tpte & PG_RW) != 0) { + if ((tpte & PG_M) != 0) + vm_page_dirty(m); + atomic_subtract_int( + &m->md.write_mappings, 1); } + TAILQ_REMOVE(&m->md.pv_list, pv, pv_list); pc->pc_map[field] |= 1UL << bit; pmap_unuse_pt(pmap, va, *pde, &free); freed++; @@ -2320,7 +2314,7 @@ pmap_pvh_remove(struct md_page *pvh, pma * entries for each of the 4KB page mappings. */ static void -pmap_pv_demote_pde(pmap_t pmap, vm_offset_t va, vm_paddr_t pa) +pmap_pv_demote_pde(pmap_t pmap, vm_offset_t va, pd_entry_t pde) { struct md_page *pvh; pv_entry_t pv; @@ -2328,19 +2322,23 @@ pmap_pv_demote_pde(pmap_t pmap, vm_offse vm_page_t m; rw_assert(&pvh_global_lock, RA_WLOCKED); - KASSERT((pa & PDRMASK) == 0, - ("pmap_pv_demote_pde: pa is not 2mpage aligned")); + KASSERT((pde & PG_MANAGED) != 0, + ("pmap_pv_demote_pde: pde is not managed")); /* * Transfer the 2mpage's pv entry for this mapping to the first - * page's pv list. + * page's pv list. Decrement the 2mpage's write mappings only + * after the page's write mappings are incremented so that both + * counts are never simultaneously zero for any page. */ - pvh = pa_to_pvh(pa); + pvh = pa_to_pvh(pde & PG_PS_FRAME); va = trunc_2mpage(va); pv = pmap_pvh_remove(pvh, pmap, va); KASSERT(pv != NULL, ("pmap_pv_demote_pde: pv not found")); - m = PHYS_TO_VM_PAGE(pa); + m = PHYS_TO_VM_PAGE(pde & PG_PS_FRAME); TAILQ_INSERT_TAIL(&m->md.pv_list, pv, pv_list); + if ((pde & PG_RW) != 0) + atomic_add_int(&m->md.write_mappings, 1); /* Instantiate the remaining NPTEPG - 1 pv entries. */ va_last = va + NBPDR - PAGE_SIZE; do { @@ -2348,8 +2346,16 @@ pmap_pv_demote_pde(pmap_t pmap, vm_offse KASSERT((m->oflags & VPO_UNMANAGED) == 0, ("pmap_pv_demote_pde: page %p is not managed", m)); va += PAGE_SIZE; - pmap_insert_entry(pmap, va, m); + pv = get_pv_entry(pmap, FALSE); + pv->pv_va = va; + TAILQ_INSERT_TAIL(&m->md.pv_list, pv, pv_list); + if ((pde & PG_RW) != 0) + atomic_add_int(&m->md.write_mappings, 1); } while (va < va_last); + if ((pde & PG_RW) != 0) + atomic_subtract_int(&pvh->write_mappings, 1); + KASSERT(!TAILQ_EMPTY(&pvh->pv_list) || pvh->write_mappings == 0, + ("pmap_pv_demote_pde: pvh %p has invalid write mappings", pvh)); } /* @@ -2358,7 +2364,7 @@ pmap_pv_demote_pde(pmap_t pmap, vm_offse * for the 2MB page mapping. */ static void -pmap_pv_promote_pde(pmap_t pmap, vm_offset_t va, vm_paddr_t pa) +pmap_pv_promote_pde(pmap_t pmap, vm_offset_t va, pd_entry_t pde) { struct md_page *pvh; pv_entry_t pv; @@ -2366,27 +2372,43 @@ pmap_pv_promote_pde(pmap_t pmap, vm_offs vm_page_t m; rw_assert(&pvh_global_lock, RA_WLOCKED); - KASSERT((pa & PDRMASK) == 0, - ("pmap_pv_promote_pde: pa is not 2mpage aligned")); + KASSERT((pde & PG_MANAGED) != 0, + ("pmap_pv_promote_pde: pde is not managed")); /* * Transfer the first page's pv entry for this mapping to the * 2mpage's pv list. Aside from avoiding the cost of a call * to get_pv_entry(), a transfer avoids the possibility that - * get_pv_entry() calls pmap_collect() and that pmap_collect() + * get_pv_entry() calls pmap_pv_reclaim() and that pmap_pv_reclaim() * removes one of the mappings that is being promoted. */ - m = PHYS_TO_VM_PAGE(pa); + m = PHYS_TO_VM_PAGE(pde & PG_PS_FRAME); va = trunc_2mpage(va); pv = pmap_pvh_remove(&m->md, pmap, va); KASSERT(pv != NULL, ("pmap_pv_promote_pde: pv not found")); - pvh = pa_to_pvh(pa); + pvh = pa_to_pvh(pde & PG_PS_FRAME); TAILQ_INSERT_TAIL(&pvh->pv_list, pv, pv_list); + if ((pde & PG_RW) != 0) { + /* + * Decrement the page's write mappings only after the + * 2mpage's write mappings are incremented so that both + * counts are never simultaneously zero for any page. + */ + atomic_add_int(&pvh->write_mappings, 1); + vm_page_dirty(m); + atomic_subtract_int(&m->md.write_mappings, 1); + } + KASSERT(!TAILQ_EMPTY(&m->md.pv_list) || m->md.write_mappings == 0, + ("pmap_pv_promote_pde: page %p has invalid write mappings", m)); /* Free the remaining NPTEPG - 1 pv entries. */ va_last = va + NBPDR - PAGE_SIZE; do { m++; va += PAGE_SIZE; + if ((pde & PG_RW) != 0) { + vm_page_dirty(m); + atomic_subtract_int(&m->md.write_mappings, 1); + } pmap_pvh_free(&m->md, pmap, va); } while (va < va_last); } @@ -2403,44 +2425,17 @@ pmap_pvh_free(struct md_page *pvh, pmap_ pv = pmap_pvh_remove(pvh, pmap, va); KASSERT(pv != NULL, ("pmap_pvh_free: pv not found")); + KASSERT(!TAILQ_EMPTY(&pvh->pv_list) || pvh->write_mappings == 0, + ("pmap_pvh_free: pvh %p has invalid write mappings", pvh)); free_pv_entry(pmap, pv); } -static void -pmap_remove_entry(pmap_t pmap, vm_page_t m, vm_offset_t va) -{ - struct md_page *pvh; - - rw_assert(&pvh_global_lock, RA_WLOCKED); - pmap_pvh_free(&m->md, pmap, va); - if (TAILQ_EMPTY(&m->md.pv_list) && (m->flags & PG_FICTITIOUS) == 0) { - pvh = pa_to_pvh(VM_PAGE_TO_PHYS(m)); - if (TAILQ_EMPTY(&pvh->pv_list)) - vm_page_aflag_clear(m, PGA_WRITEABLE); - } -} - -/* - * Create a pv entry for page at pa for - * (pmap, va). - */ -static void -pmap_insert_entry(pmap_t pmap, vm_offset_t va, vm_page_t m) -{ - pv_entry_t pv; - - rw_assert(&pvh_global_lock, RA_WLOCKED); - PMAP_LOCK_ASSERT(pmap, MA_OWNED); - pv = get_pv_entry(pmap, FALSE); - pv->pv_va = va; - TAILQ_INSERT_TAIL(&m->md.pv_list, pv, pv_list); -} - /* * Conditionally create a pv entry. */ static boolean_t -pmap_try_insert_pv_entry(pmap_t pmap, vm_offset_t va, vm_page_t m) +pmap_try_insert_pv_entry(pmap_t pmap, vm_offset_t va, vm_page_t m, + boolean_t write_mapping) { pv_entry_t pv; @@ -2449,6 +2444,8 @@ pmap_try_insert_pv_entry(pmap_t pmap, vm if ((pv = get_pv_entry(pmap, TRUE)) != NULL) { pv->pv_va = va; TAILQ_INSERT_TAIL(&m->md.pv_list, pv, pv_list); + if (write_mapping) + atomic_add_int(&m->md.write_mappings, 1); return (TRUE); } else return (FALSE); @@ -2458,7 +2455,7 @@ pmap_try_insert_pv_entry(pmap_t pmap, vm * Create the pv entry for a 2MB page mapping. */ static boolean_t -pmap_pv_insert_pde(pmap_t pmap, vm_offset_t va, vm_paddr_t pa) +pmap_pv_insert_pde(pmap_t pmap, vm_offset_t va, pd_entry_t pde) { struct md_page *pvh; pv_entry_t pv; @@ -2466,8 +2463,10 @@ pmap_pv_insert_pde(pmap_t pmap, vm_offse rw_assert(&pvh_global_lock, RA_WLOCKED); if ((pv = get_pv_entry(pmap, TRUE)) != NULL) { pv->pv_va = va; - pvh = pa_to_pvh(pa); + pvh = pa_to_pvh(pde & PG_PS_FRAME); TAILQ_INSERT_TAIL(&pvh->pv_list, pv, pv_list); + if ((pde & PG_RW) != 0) + atomic_add_int(&pvh->write_mappings, 1); return (TRUE); } else return (FALSE); @@ -2595,7 +2594,7 @@ pmap_demote_pde(pmap_t pmap, pd_entry_t * the 2mpage to referencing the page table page. */ if ((oldpde & PG_MANAGED) != 0) - pmap_pv_demote_pde(pmap, va, oldpde & PG_PS_FRAME); + pmap_pv_demote_pde(pmap, va, oldpde); pmap_pde_demotions++; CTR2(KTR_PMAP, "pmap_demote_pde: success for va %#lx" @@ -2627,22 +2626,25 @@ pmap_remove_pde(pmap_t pmap, pd_entry_t * PG_G. */ if (oldpde & PG_G) - pmap_invalidate_page(kernel_pmap, sva); + pmap_invalidate_page(pmap, sva); pmap_resident_count_dec(pmap, NBPDR / PAGE_SIZE); if (oldpde & PG_MANAGED) { - pvh = pa_to_pvh(oldpde & PG_PS_FRAME); - pmap_pvh_free(pvh, pmap, sva); eva = sva + NBPDR; for (va = sva, m = PHYS_TO_VM_PAGE(oldpde & PG_PS_FRAME); va < eva; va += PAGE_SIZE, m++) { if ((oldpde & (PG_M | PG_RW)) == (PG_M | PG_RW)) - vm_page_dirty(m); + KASSERT(m->dirty == VM_PAGE_BITS_ALL, + ("pmap_remove_pde: not dirty")); if (oldpde & PG_A) vm_page_aflag_set(m, PGA_REFERENCED); - if (TAILQ_EMPTY(&m->md.pv_list) && - TAILQ_EMPTY(&pvh->pv_list)) - vm_page_aflag_clear(m, PGA_WRITEABLE); } + pvh = pa_to_pvh(oldpde & PG_PS_FRAME); + if ((oldpde & PG_RW) != 0) { + KASSERT((oldpde & PG_M) != 0, + ("pmap_remove_pde: oldpde is missing PG_M")); + atomic_subtract_int(&pvh->write_mappings, 1); + } + pmap_pvh_free(pvh, pmap, sva); } if (pmap == kernel_pmap) { if (!pmap_demote_pde(pmap, pdq, sva)) @@ -2679,11 +2681,14 @@ pmap_remove_pte(pmap_t pmap, pt_entry_t pmap_resident_count_dec(pmap, 1); if (oldpte & PG_MANAGED) { m = PHYS_TO_VM_PAGE(oldpte & PG_FRAME); - if ((oldpte & (PG_M | PG_RW)) == (PG_M | PG_RW)) - vm_page_dirty(m); if (oldpte & PG_A) vm_page_aflag_set(m, PGA_REFERENCED); - pmap_remove_entry(pmap, m, va); + if ((oldpte & PG_RW) != 0) { + if ((oldpte & PG_M) != 0) + vm_page_dirty(m); + atomic_subtract_int(&m->md.write_mappings, 1); + } + pmap_pvh_free(&m->md, pmap, va); } return (pmap_unuse_pt(pmap, va, ptepde, free)); } @@ -2885,6 +2890,8 @@ pmap_remove_all(vm_page_t m) (void)pmap_demote_pde(pmap, pde, va); PMAP_UNLOCK(pmap); } + KASSERT(pvh->write_mappings == 0, + ("pmap_remove_all: pvh %p has invalid write mappings", pvh)); small_mappings: while ((pv = TAILQ_FIRST(&m->md.pv_list)) != NULL) { pmap = PV_PMAP(pv); @@ -2899,19 +2906,19 @@ small_mappings: pmap->pm_stats.wired_count--; if (tpte & PG_A) vm_page_aflag_set(m, PGA_REFERENCED); - - /* - * Update the vm_page_t clean and reference bits. - */ - if ((tpte & (PG_M | PG_RW)) == (PG_M | PG_RW)) - vm_page_dirty(m); + if ((tpte & PG_RW) != 0) { + if ((tpte & PG_M) != 0) + vm_page_dirty(m); + atomic_subtract_int(&m->md.write_mappings, 1); + } pmap_unuse_pt(pmap, pv->pv_va, *pde, &free); pmap_invalidate_page(pmap, pv->pv_va); TAILQ_REMOVE(&m->md.pv_list, pv, pv_list); free_pv_entry(pmap, pv); PMAP_UNLOCK(pmap); } - vm_page_aflag_clear(m, PGA_WRITEABLE); + KASSERT(m->md.write_mappings == 0, + ("pmap_remove_all: page %p has invalid write mappings", m)); rw_wunlock(&pvh_global_lock); pmap_free_zero_pages(free); } @@ -2938,7 +2945,8 @@ retry: for (va = sva, m = PHYS_TO_VM_PAGE(oldpde & PG_PS_FRAME); va < eva; va += PAGE_SIZE, m++) if ((oldpde & (PG_M | PG_RW)) == (PG_M | PG_RW)) - vm_page_dirty(m); + KASSERT(m->dirty == VM_PAGE_BITS_ALL, + ("pmap_protect_pde: not dirty")); } if ((prot & VM_PROT_WRITE) == 0) newpde &= ~(PG_RW | PG_M); @@ -2947,6 +2955,9 @@ retry: if (newpde != oldpde) { if (!atomic_cmpset_long(pde, oldpde, newpde)) goto retry; + if ((newpde & (PG_MANAGED | PG_RW)) == PG_MANAGED && + (oldpde & (PG_MANAGED | PG_RW)) == (PG_MANAGED | PG_RW)) + atomic_subtract_int(&pa_to_pvh(oldpde & PG_PS_FRAME)->write_mappings, 1); if (oldpde & PG_G) pmap_invalidate_page(pmap, sva); else @@ -3079,6 +3090,11 @@ retry: if (pbits != obits) { if (!atomic_cmpset_long(pte, obits, pbits)) goto retry; + if ((pbits & (PG_MANAGED | PG_RW)) == PG_MANAGED && + (obits & (PG_MANAGED | PG_RW)) == (PG_MANAGED | PG_RW)) { + m = PHYS_TO_VM_PAGE(obits & PG_FRAME); + atomic_subtract_int(&m->md.write_mappings, 1); + } if (obits & PG_G) pmap_invalidate_page(pmap, sva); else @@ -3132,6 +3148,10 @@ setpde: if (!atomic_cmpset_long(firstpte, newpde, newpde & ~PG_RW)) goto setpde; newpde &= ~PG_RW; + if (newpde & PG_MANAGED) { + vm_page_t m = PHYS_TO_VM_PAGE(newpde & PG_FRAME); + atomic_subtract_int(&m->md.write_mappings, 1); + } } /* @@ -3157,6 +3177,10 @@ setpte: if (!atomic_cmpset_long(pte, oldpte, oldpte & ~PG_RW)) goto setpte; oldpte &= ~PG_RW; + if (oldpte & PG_MANAGED) { + vm_page_t m = PHYS_TO_VM_PAGE(oldpte & PG_FRAME); + atomic_subtract_int(&m->md.write_mappings, 1); + } oldpteva = (oldpte & PG_FRAME & PDRMASK) | (va & ~PDRMASK); CTR2(KTR_PMAP, "pmap_promote_pde: protect for va %#lx" @@ -3188,7 +3212,7 @@ setpte: * Promote the pv entries. */ if ((newpde & PG_MANAGED) != 0) - pmap_pv_promote_pde(pmap, va, newpde & PG_PS_FRAME); + pmap_pv_promote_pde(pmap, va, newpde); /* * Propagate the PAT index to its proper position. @@ -3345,7 +3369,7 @@ validate: if ((prot & VM_PROT_WRITE) != 0) { newpte |= PG_RW; if ((newpte & PG_MANAGED) != 0) - vm_page_aflag_set(m, PGA_WRITEABLE); + atomic_add_int(&m->md.write_mappings, 1); } if ((prot & VM_PROT_EXECUTE) == 0) newpte |= pg_nx; @@ -3380,11 +3404,10 @@ validate: if ((newpte & PG_RW) == 0) invlva = TRUE; } - if ((origpte & PG_MANAGED) != 0 && - TAILQ_EMPTY(&om->md.pv_list) && - ((om->flags & PG_FICTITIOUS) != 0 || - TAILQ_EMPTY(&pa_to_pvh(opa)->pv_list))) - vm_page_aflag_clear(om, PGA_WRITEABLE); + if ((origpte & (PG_MANAGED | PG_RW)) == (PG_MANAGED | PG_RW)) + atomic_subtract_int(&om->md.write_mappings, 1); + if (TAILQ_EMPTY(&om->md.pv_list)) + KASSERT(om->md.write_mappings == 0, ("pmap_enter: xx2 %d", om->md.write_mappings)); if (invlva) pmap_invalidate_page(pmap, va); } else @@ -3603,7 +3626,7 @@ pmap_enter_quick_locked(pmap_t pmap, vm_ * Enter on the PV list if part of our managed memory. */ if ((m->oflags & VPO_UNMANAGED) == 0 && - !pmap_try_insert_pv_entry(pmap, va, m)) { + !pmap_try_insert_pv_entry(pmap, va, m, FALSE)) { if (mpte != NULL) { free = NULL; if (pmap_unwire_pte_hold(pmap, va, mpte, &free)) { @@ -3861,8 +3884,7 @@ pmap_copy(pmap_t dst_pmap, pmap_t src_pm PHYS_TO_DMAP(VM_PAGE_TO_PHYS(dstmpde)); pde = &pde[pmap_pde_index(addr)]; if (*pde == 0 && ((srcptepaddr & PG_MANAGED) == 0 || - pmap_pv_insert_pde(dst_pmap, addr, srcptepaddr & - PG_PS_FRAME))) { + pmap_pv_insert_pde(dst_pmap, addr, srcptepaddr))) { *pde = srcptepaddr & ~PG_W; pmap_resident_count_inc(dst_pmap, NBPDR / PAGE_SIZE); } else @@ -3899,7 +3921,8 @@ pmap_copy(pmap_t dst_pmap, pmap_t src_pm dst_pte = &dst_pte[pmap_pte_index(addr)]; if (*dst_pte == 0 && pmap_try_insert_pv_entry(dst_pmap, addr, - PHYS_TO_VM_PAGE(ptetemp & PG_FRAME))) { + PHYS_TO_VM_PAGE(ptetemp & PG_FRAME), + (ptetemp & PG_RW) != 0)) { /* * Clear the wired, modified, and * accessed (referenced) bits @@ -4096,11 +4119,32 @@ pmap_page_is_mapped(vm_page_t m) rv = !TAILQ_EMPTY(&m->md.pv_list) || ((m->flags & PG_FICTITIOUS) == 0 && !TAILQ_EMPTY(&pa_to_pvh(VM_PAGE_TO_PHYS(m))->pv_list)); + if (!rv) { + KASSERT(m->md.write_mappings == 0, ("pmap_page_is_mapped: xx2 %d", m->md.write_mappings)); + if ((m->flags & PG_FICTITIOUS) == 0) + KASSERT(pa_to_pvh(VM_PAGE_TO_PHYS(m))->write_mappings == 0, + ("pmap_page_is_mapped: xx1")); + } rw_wunlock(&pvh_global_lock); return (rv); } /* + * XXX + */ +boolean_t +pmap_page_is_write_mapped(vm_page_t m) +{ + + if ((m->oflags & VPO_UNMANAGED) != 0) + return (FALSE); + return (m->md.write_mappings != 0 || + ((m->flags & PG_FICTITIOUS) == 0 && + pa_to_pvh(VM_PAGE_TO_PHYS(m))->write_mappings != 0)); + +} + +/* * Remove all pages from specified address space * this aids process exit speeds. Also, this code * is special cased for current process only, but @@ -4175,17 +4219,6 @@ pmap_remove_pages(pmap_t pmap) pte_clear(pte); - /* - * Update the vm_page_t clean/reference bits. - */ - if ((tpte & (PG_M | PG_RW)) == (PG_M | PG_RW)) { - if ((tpte & PG_PS) != 0) { - for (mt = m; mt < &m[NBPDR / PAGE_SIZE]; mt++) - vm_page_dirty(mt); - } else - vm_page_dirty(m); - } - /* Mark free */ PV_STAT(pv_entry_frees++); PV_STAT(pv_entry_spare++); @@ -4195,12 +4228,16 @@ pmap_remove_pages(pmap_t pmap) pmap_resident_count_dec(pmap, NBPDR / PAGE_SIZE); pvh = pa_to_pvh(tpte & PG_PS_FRAME); TAILQ_REMOVE(&pvh->pv_list, pv, pv_list); - if (TAILQ_EMPTY(&pvh->pv_list)) { + if ((tpte & PG_RW) != 0) { + KASSERT((tpte & PG_M) != 0, + ("pmap_remove_pages: not PG_M")); for (mt = m; mt < &m[NBPDR / PAGE_SIZE]; mt++) - if ((mt->aflags & PGA_WRITEABLE) != 0 && - TAILQ_EMPTY(&mt->md.pv_list)) - vm_page_aflag_clear(mt, PGA_WRITEABLE); + KASSERT(mt->dirty == VM_PAGE_BITS_ALL, + ("pmap_remove_pages: not dirty")); + atomic_subtract_int(&pvh->write_mappings, 1); } + if (TAILQ_EMPTY(&pvh->pv_list)) + KASSERT(pvh->write_mappings == 0, ("pmap_remove_pages: xx1 %d", pvh->write_mappings)); mpte = pmap_lookup_pt_page(pmap, pv->pv_va); if (mpte != NULL) { pmap_remove_pt_page(pmap, mpte); @@ -4214,13 +4251,13 @@ pmap_remove_pages(pmap_t pmap) } else { pmap_resident_count_dec(pmap, 1); TAILQ_REMOVE(&m->md.pv_list, pv, pv_list); - if ((m->aflags & PGA_WRITEABLE) != 0 && - TAILQ_EMPTY(&m->md.pv_list) && - (m->flags & PG_FICTITIOUS) == 0) { - pvh = pa_to_pvh(VM_PAGE_TO_PHYS(m)); - if (TAILQ_EMPTY(&pvh->pv_list)) - vm_page_aflag_clear(m, PGA_WRITEABLE); + if ((tpte & PG_RW) != 0) { + if ((tpte & PG_M) != 0) + vm_page_dirty(m); + atomic_subtract_int(&m->md.write_mappings, 1); } + if (TAILQ_EMPTY(&m->md.pv_list)) + KASSERT(m->md.write_mappings == 0, ("pmap_remove_pages: xx2 %d", m->md.write_mappings)); } pmap_unuse_pt(pmap, pv->pv_va, ptepde, &free); } @@ -4257,7 +4294,9 @@ pmap_is_modified(vm_page_t m) */ VM_OBJECT_LOCK_ASSERT(m->object, MA_OWNED); if ((m->oflags & VPO_BUSY) == 0 && - (m->aflags & PGA_WRITEABLE) == 0) + m->md.write_mappings == 0 && + ((m->flags & PG_FICTITIOUS) != 0 || + pa_to_pvh(VM_PAGE_TO_PHYS(m))->write_mappings == 0)) return (FALSE); rw_wlock(&pvh_global_lock); rv = pmap_is_modified_pvh(&m->md) || @@ -4388,7 +4427,9 @@ pmap_remove_write(vm_page_t m) */ VM_OBJECT_LOCK_ASSERT(m->object, MA_OWNED); if ((m->oflags & VPO_BUSY) == 0 && - (m->aflags & PGA_WRITEABLE) == 0) + m->md.write_mappings == 0 && + ((m->flags & PG_FICTITIOUS) != 0 || + pa_to_pvh(VM_PAGE_TO_PHYS(m))->write_mappings == 0)) return; rw_wlock(&pvh_global_lock); if ((m->flags & PG_FICTITIOUS) != 0) @@ -4403,6 +4444,7 @@ pmap_remove_write(vm_page_t m) (void)pmap_demote_pde(pmap, pde, va); PMAP_UNLOCK(pmap); } + KASSERT(pvh->write_mappings == 0, ("pmap_remove_all: xx1")); small_mappings: TAILQ_FOREACH(pv, &m->md.pv_list, pv_list) { pmap = PV_PMAP(pv); @@ -4419,11 +4461,12 @@ retry: goto retry; if ((oldpte & PG_M) != 0) vm_page_dirty(m); + atomic_subtract_int(&m->md.write_mappings, 1); pmap_invalidate_page(pmap, pv->pv_va); } PMAP_UNLOCK(pmap); } - vm_page_aflag_clear(m, PGA_WRITEABLE); + KASSERT(m->md.write_mappings == 0, ("pmap_remove_write: xx2")); rw_wunlock(&pvh_global_lock); } @@ -4538,7 +4581,9 @@ pmap_clear_modify(vm_page_t m) * If the object containing the page is locked and the page is not * VPO_BUSY, then PGA_WRITEABLE cannot be concurrently set. */ - if ((m->aflags & PGA_WRITEABLE) == 0) + if (m->md.write_mappings == 0 && + ((m->flags & PG_FICTITIOUS) != 0 || + pa_to_pvh(VM_PAGE_TO_PHYS(m))->write_mappings == 0)) return; rw_wlock(&pvh_global_lock); if ((m->flags & PG_FICTITIOUS) != 0) @@ -4568,6 +4613,7 @@ pmap_clear_modify(vm_page_t m) oldpte & ~(PG_M | PG_RW))) oldpte = *pte; vm_page_dirty(m); + atomic_subtract_int(&m->md.write_mappings, 1); pmap_invalidate_page(pmap, va); } } Modified: user/alc/superpages/sys/amd64/include/pmap.h ============================================================================== --- user/alc/superpages/sys/amd64/include/pmap.h Thu Jun 14 16:25:10 2012 (r237082) +++ user/alc/superpages/sys/amd64/include/pmap.h Thu Jun 14 16:53:08 2012 (r237083) @@ -241,6 +241,7 @@ struct pv_chunk; struct md_page { TAILQ_HEAD(,pv_entry) pv_list; + int write_mappings; int pat_mode; }; @@ -323,6 +324,7 @@ void *pmap_mapbios(vm_paddr_t, vm_size_t void *pmap_mapdev(vm_paddr_t, vm_size_t); void *pmap_mapdev_attr(vm_paddr_t, vm_size_t, int); boolean_t pmap_page_is_mapped(vm_page_t m); +boolean_t pmap_page_is_write_mapped(vm_page_t m); void pmap_page_set_memattr(vm_page_t m, vm_memattr_t ma); void pmap_unmapdev(vm_offset_t, vm_size_t); void pmap_invalidate_page(pmap_t, vm_offset_t); Modified: user/alc/superpages/sys/vm/swap_pager.c ============================================================================== --- user/alc/superpages/sys/vm/swap_pager.c Thu Jun 14 16:25:10 2012 (r237082) +++ user/alc/superpages/sys/vm/swap_pager.c Thu Jun 14 16:53:08 2012 (r237083) @@ -1593,7 +1593,7 @@ swp_pager_async_iodone(struct buf *bp) * status, then finish the I/O ( which decrements the * busy count and possibly wakes waiter's up ). */ - KASSERT((m->aflags & PGA_WRITEABLE) == 0, + KASSERT(!pmap_page_is_write_mapped(m), ("swp_pager_async_iodone: page %p is not write" " protected", m)); vm_page_undirty(m); Modified: user/alc/superpages/sys/vm/vm_page.c ============================================================================== --- user/alc/superpages/sys/vm/vm_page.c Thu Jun 14 16:25:10 2012 (r237082) +++ user/alc/superpages/sys/vm/vm_page.c Thu Jun 14 16:53:08 2012 (r237083) @@ -930,7 +930,7 @@ vm_page_insert(vm_page_t m, vm_object_t * Since we are inserting a new and possibly dirty page, * update the object's OBJ_MIGHTBEDIRTY flag. */ - if (m->aflags & PGA_WRITEABLE) + if (pmap_page_is_write_mapped(m)) vm_object_set_writeable_dirty(object); } @@ -2679,7 +2679,7 @@ vm_page_clear_dirty_mask(vm_page_t m, vm * set by a concurrent pmap operation. */ VM_OBJECT_LOCK_ASSERT(m->object, MA_OWNED); - if ((m->oflags & VPO_BUSY) == 0 && (m->aflags & PGA_WRITEABLE) == 0) + if ((m->oflags & VPO_BUSY) == 0 && !pmap_page_is_write_mapped(m)) m->dirty &= ~pagebits; else { /* Modified: user/alc/superpages/sys/vm/vm_pageout.c ============================================================================== --- user/alc/superpages/sys/vm/vm_pageout.c Thu Jun 14 16:25:10 2012 (r237082) +++ user/alc/superpages/sys/vm/vm_pageout.c Thu Jun 14 16:53:08 2012 (r237083) @@ -503,7 +503,7 @@ vm_pageout_flush(vm_page_t *mc, int coun vm_page_t mt = mc[i]; KASSERT(pageout_status[i] == VM_PAGER_PEND || - (mt->aflags & PGA_WRITEABLE) == 0, + !pmap_page_is_write_mapped(mt), ("vm_pageout_flush: page %p is not write protected", mt)); switch (pageout_status[i]) { case VM_PAGER_OK: @@ -899,7 +899,7 @@ rescan0: * be updated. */ if (m->dirty != VM_PAGE_BITS_ALL && - (m->aflags & PGA_WRITEABLE) != 0) { + pmap_page_is_write_mapped(m)) { /* * Avoid a race condition: Unless write access is * removed from the page, another processor could Modified: user/alc/superpages/sys/vm/vnode_pager.c ============================================================================== --- user/alc/superpages/sys/vm/vnode_pager.c Thu Jun 14 16:25:10 2012 (r237082) +++ user/alc/superpages/sys/vm/vnode_pager.c Thu Jun 14 16:53:08 2012 (r237083) @@ -1146,7 +1146,7 @@ vnode_pager_generic_putpages(struct vnod m = ma[ncount - 1]; KASSERT(m->busy > 0, ("vnode_pager_generic_putpages: page %p is not busy", m)); - KASSERT((m->aflags & PGA_WRITEABLE) == 0, + KASSERT(!pmap_page_is_write_mapped(m), ("vnode_pager_generic_putpages: page %p is not read-only", m)); vm_page_clear_dirty(m, pgoff, PAGE_SIZE - pgoff); From owner-svn-src-user@FreeBSD.ORG Thu Jun 14 17:54:53 2012 Return-Path: Delivered-To: svn-src-user@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [69.147.83.52]) by hub.freebsd.org (Postfix) with ESMTP id 519D3106564A; Thu, 14 Jun 2012 17:54:53 +0000 (UTC) (envelope-from alc@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [69.147.83.44]) by mx1.freebsd.org (Postfix) with ESMTP id 380098FC08; Thu, 14 Jun 2012 17:54:53 +0000 (UTC) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.4/8.14.4) with ESMTP id q5EHsr2Y009763; Thu, 14 Jun 2012 17:54:53 GMT (envelope-from alc@svn.freebsd.org) Received: (from alc@localhost) by svn.freebsd.org (8.14.4/8.14.4/Submit) id q5EHsqAa009752; Thu, 14 Jun 2012 17:54:52 GMT (envelope-from alc@svn.freebsd.org) Message-Id: <201206141754.q5EHsqAa009752@svn.freebsd.org> From: Alan Cox Date: Thu, 14 Jun 2012 17:54:52 +0000 (UTC) To: src-committers@freebsd.org, svn-src-user@freebsd.org X-SVN-Group: user MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r237087 - in user/alc/superpages: lib/libc/gen libexec/rtld-elf sys/amd64/amd64 sys/arm/include sys/dev/usb sys/dev/usb/quirk sys/geom/part sys/kern sys/sys X-BeenThere: svn-src-user@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "SVN commit messages for the experimental " user" src tree" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 14 Jun 2012 17:54:53 -0000 Author: alc Date: Thu Jun 14 17:54:52 2012 New Revision: 237087 URL: http://svn.freebsd.org/changeset/base/237087 Log: MFC r237086 Loop back fixes to comments and a KASSERT(). Added: user/alc/superpages/sys/arm/include/atags.h - copied unchanged from r237086, head/sys/arm/include/atags.h Modified: user/alc/superpages/lib/libc/gen/fstab.c user/alc/superpages/libexec/rtld-elf/map_object.c user/alc/superpages/sys/amd64/amd64/pmap.c user/alc/superpages/sys/dev/usb/quirk/usb_quirk.c user/alc/superpages/sys/dev/usb/usbdevs user/alc/superpages/sys/geom/part/g_part_gpt.c user/alc/superpages/sys/kern/kern_descrip.c user/alc/superpages/sys/kern/kern_event.c user/alc/superpages/sys/sys/filedesc.h Directory Properties: user/alc/superpages/ (props changed) user/alc/superpages/lib/libc/ (props changed) user/alc/superpages/sys/ (props changed) Modified: user/alc/superpages/lib/libc/gen/fstab.c ============================================================================== --- user/alc/superpages/lib/libc/gen/fstab.c Thu Jun 14 17:47:54 2012 (r237086) +++ user/alc/superpages/lib/libc/gen/fstab.c Thu Jun 14 17:54:52 2012 (r237087) @@ -39,6 +39,7 @@ __FBSDID("$FreeBSD$"); #include #include +#include #include #include #include @@ -246,6 +247,8 @@ getfsfile(name) int setfsent() { + int fd; + if (_fs_fp) { rewind(_fs_fp); LineNo = 0; @@ -257,11 +260,18 @@ setfsent() else setfstab(getenv("PATH_FSTAB")); } - if ((_fs_fp = fopen(path_fstab, "r")) != NULL) { + fd = _open(path_fstab, O_RDONLY | O_CLOEXEC); + if (fd == -1) { + error(errno); + return (0); + } + _fs_fp = fdopen(fd, "r"); + if (_fs_fp != NULL) { LineNo = 0; return(1); } error(errno); + _close(fd); return(0); } Modified: user/alc/superpages/libexec/rtld-elf/map_object.c ============================================================================== --- user/alc/superpages/libexec/rtld-elf/map_object.c Thu Jun 14 17:47:54 2012 (r237086) +++ user/alc/superpages/libexec/rtld-elf/map_object.c Thu Jun 14 17:54:52 2012 (r237087) @@ -38,7 +38,7 @@ #include "debug.h" #include "rtld.h" -static Elf_Ehdr *get_elf_header (int, const char *); +static Elf_Ehdr *get_elf_header(int, const char *); static int convert_prot(int); /* Elf flags -> mmap protection */ static int convert_flags(int); /* Elf flags -> mmap flags */ @@ -121,7 +121,7 @@ map_object(int fd, const char *path, con if ((segs[nsegs]->p_align & (PAGE_SIZE - 1)) != 0) { _rtld_error("%s: PT_LOAD segment %d not page-aligned", path, nsegs); - return NULL; + goto error; } break; @@ -161,12 +161,12 @@ map_object(int fd, const char *path, con } if (phdyn == NULL) { _rtld_error("%s: object is not dynamically-linked", path); - return NULL; + goto error; } if (nsegs < 0) { _rtld_error("%s: too few PT_LOAD segments", path); - return NULL; + goto error; } /* @@ -183,13 +183,12 @@ map_object(int fd, const char *path, con if (mapbase == (caddr_t) -1) { _rtld_error("%s: mmap of entire address space failed: %s", path, rtld_strerror(errno)); - return NULL; + goto error; } if (base_addr != NULL && mapbase != base_addr) { _rtld_error("%s: mmap returned wrong address: wanted %p, got %p", path, base_addr, mapbase); - munmap(mapbase, mapsize); - return NULL; + goto error1; } for (i = 0; i <= nsegs; i++) { @@ -201,10 +200,10 @@ map_object(int fd, const char *path, con data_prot = convert_prot(segs[i]->p_flags); data_flags = convert_flags(segs[i]->p_flags) | MAP_FIXED; if (mmap(data_addr, data_vlimit - data_vaddr, data_prot, - data_flags, fd, data_offset) == (caddr_t) -1) { + data_flags | MAP_PREFAULT_READ, fd, data_offset) == (caddr_t) -1) { _rtld_error("%s: mmap of data failed: %s", path, rtld_strerror(errno)); - return NULL; + goto error1; } /* Do BSS setup */ @@ -221,7 +220,7 @@ map_object(int fd, const char *path, con mprotect(clear_page, PAGE_SIZE, data_prot|PROT_WRITE)) { _rtld_error("%s: mprotect failed: %s", path, rtld_strerror(errno)); - return NULL; + goto error1; } memset(clear_addr, 0, nclear); @@ -240,7 +239,7 @@ map_object(int fd, const char *path, con data_flags | MAP_ANON, -1, 0) == (caddr_t)-1) { _rtld_error("%s: mmap of bss failed: %s", path, rtld_strerror(errno)); - return NULL; + goto error1; } } } @@ -273,7 +272,7 @@ map_object(int fd, const char *path, con if (obj->phdr == NULL) { obj_free(obj); _rtld_error("%s: cannot allocate program header", path); - return NULL; + goto error1; } memcpy((char *)obj->phdr, (char *)hdr + hdr->e_phoff, phsize); obj->phdr_alloc = true; @@ -293,63 +292,72 @@ map_object(int fd, const char *path, con obj->relro_page = obj->relocbase + trunc_page(relro_page); obj->relro_size = round_page(relro_size); - return obj; + munmap(hdr, PAGE_SIZE); + return (obj); + +error1: + munmap(mapbase, mapsize); +error: + munmap(hdr, PAGE_SIZE); + return (NULL); } static Elf_Ehdr * -get_elf_header (int fd, const char *path) +get_elf_header(int fd, const char *path) { - static union { - Elf_Ehdr hdr; - char buf[PAGE_SIZE]; - } u; - ssize_t nbytes; - - if ((nbytes = pread(fd, u.buf, PAGE_SIZE, 0)) == -1) { - _rtld_error("%s: read error: %s", path, rtld_strerror(errno)); - return NULL; - } - - /* Make sure the file is valid */ - if (nbytes < (ssize_t)sizeof(Elf_Ehdr) || !IS_ELF(u.hdr)) { - _rtld_error("%s: invalid file format", path); - return NULL; - } - if (u.hdr.e_ident[EI_CLASS] != ELF_TARG_CLASS - || u.hdr.e_ident[EI_DATA] != ELF_TARG_DATA) { - _rtld_error("%s: unsupported file layout", path); - return NULL; - } - if (u.hdr.e_ident[EI_VERSION] != EV_CURRENT - || u.hdr.e_version != EV_CURRENT) { - _rtld_error("%s: unsupported file version", path); - return NULL; - } - if (u.hdr.e_type != ET_EXEC && u.hdr.e_type != ET_DYN) { - _rtld_error("%s: unsupported file type", path); - return NULL; - } - if (u.hdr.e_machine != ELF_TARG_MACH) { - _rtld_error("%s: unsupported machine", path); - return NULL; - } + Elf_Ehdr *hdr; - /* - * We rely on the program header being in the first page. This is - * not strictly required by the ABI specification, but it seems to - * always true in practice. And, it simplifies things considerably. - */ - if (u.hdr.e_phentsize != sizeof(Elf_Phdr)) { - _rtld_error( - "%s: invalid shared object: e_phentsize != sizeof(Elf_Phdr)", path); - return NULL; - } - if (u.hdr.e_phoff + u.hdr.e_phnum * sizeof(Elf_Phdr) > (size_t)nbytes) { - _rtld_error("%s: program header too large", path); - return NULL; - } + hdr = mmap(NULL, PAGE_SIZE, PROT_READ, MAP_PRIVATE | MAP_PREFAULT_READ, + fd, 0); + if (hdr == (Elf_Ehdr *)MAP_FAILED) { + _rtld_error("%s: read error: %s", path, rtld_strerror(errno)); + return (NULL); + } + + /* Make sure the file is valid */ + if (!IS_ELF(*hdr)) { + _rtld_error("%s: invalid file format", path); + goto error; + } + if (hdr->e_ident[EI_CLASS] != ELF_TARG_CLASS || + hdr->e_ident[EI_DATA] != ELF_TARG_DATA) { + _rtld_error("%s: unsupported file layout", path); + goto error; + } + if (hdr->e_ident[EI_VERSION] != EV_CURRENT || + hdr->e_version != EV_CURRENT) { + _rtld_error("%s: unsupported file version", path); + goto error; + } + if (hdr->e_type != ET_EXEC && hdr->e_type != ET_DYN) { + _rtld_error("%s: unsupported file type", path); + goto error; + } + if (hdr->e_machine != ELF_TARG_MACH) { + _rtld_error("%s: unsupported machine", path); + goto error; + } - return (&u.hdr); + /* + * We rely on the program header being in the first page. This is + * not strictly required by the ABI specification, but it seems to + * always true in practice. And, it simplifies things considerably. + */ + if (hdr->e_phentsize != sizeof(Elf_Phdr)) { + _rtld_error( + "%s: invalid shared object: e_phentsize != sizeof(Elf_Phdr)", path); + goto error; + } + if (hdr->e_phoff + hdr->e_phnum * sizeof(Elf_Phdr) > + (size_t)PAGE_SIZE) { + _rtld_error("%s: program header too large", path); + goto error; + } + return (hdr); + +error: + munmap(hdr, PAGE_SIZE); + return (NULL); } void Modified: user/alc/superpages/sys/amd64/amd64/pmap.c ============================================================================== --- user/alc/superpages/sys/amd64/amd64/pmap.c Thu Jun 14 17:47:54 2012 (r237086) +++ user/alc/superpages/sys/amd64/amd64/pmap.c Thu Jun 14 17:54:52 2012 (r237087) @@ -2587,7 +2587,7 @@ pmap_demote_pde(pmap_t pmap, pd_entry_t /* * Demote the pv entry. This depends on the earlier demotion * of the mapping. Specifically, the (re)creation of a per- - * page pv entry might trigger the execution of pmap_collect(), + * page pv entry might trigger the execution of pmap_pv_reclaim(), * which might reclaim a newly (re)created per-page pv entry * and destroy the associated mapping. In order to destroy * the mapping, the PDE must have already changed from mapping @@ -4450,8 +4450,9 @@ small_mappings: pmap = PV_PMAP(pv); PMAP_LOCK(pmap); pde = pmap_pde(pmap, pv->pv_va); - KASSERT((*pde & PG_PS) == 0, ("pmap_clear_write: found" - " a 2mpage in page %p's pv list", m)); + KASSERT((*pde & PG_PS) == 0, + ("pmap_remove_write: found a 2mpage in page %p's pv list", + m)); pte = pmap_pde_to_pte(pde, pv->pv_va); retry: oldpte = *pte; Copied: user/alc/superpages/sys/arm/include/atags.h (from r237086, head/sys/arm/include/atags.h) ============================================================================== --- /dev/null 00:00:00 1970 (empty, because file is newly added) +++ user/alc/superpages/sys/arm/include/atags.h Thu Jun 14 17:54:52 2012 (r237087, copy of r237086, head/sys/arm/include/atags.h) @@ -0,0 +1,129 @@ +/*- + * Copyright (c) 2012 M. Warner Losh. + * 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. + * + * $FreeBSD$ + */ + +#ifndef __MACHINE_ATAGS_H__ +#define __MACHINE_ATAGS_H__ + +/* + * Linux boot ABI compatable ATAG definitions. All these structures + * assume tight packing, but since they are all uint32_t's, I've not + * bothered to do the usual alignment dance. + */ + +#define LBABI_MAX_COMMAND_LINE 1024 + +struct arm_lbabi_header +{ + uint32_t size; /* Size of this node, including header */ + uint32_t tag; /* Node type */ +}; + +#define ATAG_NONE 0x00000000 /* End of atags list */ +#define ATAG_CORE 0x54410001 /* List must start with ATAG_CORE */ +#define ATAG_MEM 0x54410002 /* Multiple ATAG_MEM nodes possible */ +#define ATAG_VIDEOTEXT 0x54410003 /* Video parameters */ +#define ATAG_RAMDISK 0x54410004 /* Describes the ramdisk parameters */ +#define ATAG_INITRD 0x54410005 /* Deprecated ramdisk -- used va not pa */ +#define ATAG_INITRD2 0x54420005 /* compressed ramdisk image */ +#define ATAG_SERIAL 0x54410006 /* 64-bits of serial number */ +#define ATAG_REVISION 0x54410007 /* Board revision */ +#define ATAG_VIDEOLFB 0x54410008 /* vesafb framebuffer */ +#define ATAG_CMDLINE 0x54410009 /* Command line */ + +/* + * ATAG_CORE data + */ +struct arm_lbabi_core +{ + uint32_t flags; /* bit 0 == read-only */ + uint32_t pagesize; + uint32_t rootdev; +}; + +/* + * ATAG_MEM data -- Can be more than one to describe different + * banks. + */ +struct arm_lbabi_mem32 +{ + uint32_t size; + uint32_t start; /* start of physical memory */ +}; + +/* + * ATAG_INITRD2 - Compressed ramdisk image details + */ +struct arm_lbabi_initrd +{ + uint32_t start; /* pa of start */ + uint32_t size; /* How big the ram disk is */ +}; + +/* + * ATAG_SERIAL - serial number + */ +struct arm_lbabi_serial_number +{ + uint32_t low; + uint32_t high; +}; + +/* + * ATAG_REVISION - board revision + */ +struct arm_lbabi_revision +{ + uint32_t rev; +}; + +/* + * ATAG_CMDLINE - Command line from uboot + */ +struct arm_lbabi_command_line +{ + char command[1]; /* Minimum command length */ +}; + +struct arm_lbabi_tag +{ + struct arm_lbabi_header tag_hdr; + union { + struct arm_lbabi_core tag_core; + struct arm_lbabi_mem32 tag_mem; + struct arm_lbabi_initrd tag_initrd; + struct arm_lbabi_serial_number tag_sn; + struct arm_lbabi_revision tag_rev; + struct arm_lbabi_command_line tag_cmd; + } u; +}; + +#define ATAG_TAG(a) (a)->tag_hdr.tag +#define ATAG_SIZE(a) (a)->tag_hdr.size +#define ATAG_NEXT(a) (struct arm_lbabi_tag *)((char *)(a) + ATAG_SIZE(a)) + +#endif /* __MACHINE_ATAGS_H__ */ Modified: user/alc/superpages/sys/dev/usb/quirk/usb_quirk.c ============================================================================== --- user/alc/superpages/sys/dev/usb/quirk/usb_quirk.c Thu Jun 14 17:47:54 2012 (r237086) +++ user/alc/superpages/sys/dev/usb/quirk/usb_quirk.c Thu Jun 14 17:54:52 2012 (r237087) @@ -454,7 +454,13 @@ static struct usb_quirk_entry usb_quirks USB_QUIRK(ROLAND, SD20, 0x0000, 0xffff, UQ_AU_VENDOR_CLASS), USB_QUIRK(ROLAND, SD80, 0x0000, 0xffff, UQ_AU_VENDOR_CLASS), USB_QUIRK(ROLAND, UA700, 0x0000, 0xffff, UQ_AU_VENDOR_CLASS), + USB_QUIRK(EGO, M4U, 0x0000, 0xffff, UQ_SINGLE_CMD_MIDI), + USB_QUIRK(LOGILINK, U2M, 0x0000, 0xffff, UQ_SINGLE_CMD_MIDI), USB_QUIRK(MEDELI, DD305, 0x0000, 0xffff, UQ_SINGLE_CMD_MIDI, UQ_MATCH_VENDOR_ONLY), + USB_QUIRK(REDOCTANE, GHMIDI, 0x0000, 0xffff, UQ_SINGLE_CMD_MIDI), + USB_QUIRK(TEXTECH, U2M_1, 0x0000, 0xffff, UQ_SINGLE_CMD_MIDI), + USB_QUIRK(TEXTECH, U2M_2, 0x0000, 0xffff, UQ_SINGLE_CMD_MIDI), + USB_QUIRK(WCH2, U2M, 0x0000, 0xffff, UQ_SINGLE_CMD_MIDI), /* * Quirks for manufacturers which USB devices does not respond Modified: user/alc/superpages/sys/dev/usb/usbdevs ============================================================================== --- user/alc/superpages/sys/dev/usb/usbdevs Thu Jun 14 17:47:54 2012 (r237086) +++ user/alc/superpages/sys/dev/usb/usbdevs Thu Jun 14 17:54:52 2012 (r237087) @@ -487,6 +487,7 @@ vendor BROADCOM 0x0a5c Broadcom vendor GREENHOUSE 0x0a6b GREENHOUSE vendor MEDELI 0x0a67 Medeli vendor GEOCAST 0x0a79 Geocast Network Systems +vendor EGO 0x0a92 EGO systems vendor IDQUANTIQUE 0x0aba id Quantique vendor ZYDAS 0x0ace Zydas Technology Corporation vendor NEODIO 0x0aec Neodio @@ -611,6 +612,7 @@ vendor INITIO 0x13fd Initio Corporation vendor EMTEC 0x13fe Emtec vendor NOVATEL 0x1410 Novatel Wireless vendor MERLIN 0x1416 Merlin +vendor REDOCTANE 0x1430 RedOctane vendor WISTRONNEWEB 0x1435 Wistron NeWeb vendor RADIOSHACK 0x1453 Radio Shack vendor HUAWEI3COM 0x1472 Huawei-3Com @@ -633,6 +635,7 @@ vendor FIBERLINE 0x1582 Fiberline vendor SPARKLAN 0x15a9 SparkLAN vendor SOUNDGRAPH 0x15c2 Soundgraph, Inc. vendor AMIT2 0x15c5 AMIT +vendor TEXTECH 0x15ca Textech International Ltd. vendor SOHOWARE 0x15e8 SOHOware vendor UMAX 0x1606 UMAX Data Systems vendor INSIDEOUT 0x1608 Inside Out Networks @@ -723,6 +726,7 @@ vendor MARVELL 0x9e88 Marvell Technolog vendor 3COM3 0xa727 3Com vendor DATAAPEX 0xdaae DataApex vendor HP2 0xf003 Hewlett Packard +vendor LOGILINK 0xfc08 LogiLink vendor USRP 0xfffe GNU Radio USRP /* @@ -1472,6 +1476,10 @@ product EGALAX TPANEL 0x0001 Touch Pane product EGALAX TPANEL2 0x0002 Touch Panel product EGALAX2 TPANEL 0x0001 Touch Panel +/* EGO Products */ +product EGO DUMMY 0x0000 Dummy Product +product EGO M4U 0x1020 ESI M4U + /* Eicon Networks */ product EICON DIVA852 0x4905 Diva 852 ISDN TA @@ -2090,6 +2098,10 @@ product LINKSYS4 WUSB54GCV3 0x0077 WUSB5 product LINKSYS4 RT3070 0x0078 RT3070 product LINKSYS4 WUSB600NV2 0x0079 WUSB600N v2 +/* Logilink products */ +product LOGILINK DUMMY 0x0000 Dummy product +product LOGILINK U2M 0x0101 LogiLink USB MIDI Cable + /* Logitech products */ product LOGITECH M2452 0x0203 M2452 keyboard product LOGITECH M4848 0x0301 M4848 mouse @@ -2813,6 +2825,10 @@ product REALTEK RTL8187B_0 0x8189 RTL818 product REALTEK RTL8187B_1 0x8197 RTL8187B Wireless Adapter product REALTEK RTL8187B_2 0x8198 RTL8187B Wireless Adapter +/* RedOctane products */ +product REDOCTANE DUMMY 0x0000 Dummy product +product REDOCTANE GHMIDI 0x474b GH MIDI INTERFACE + /* Renesas products */ product RENESAS RX610 0x0053 RX610 RX-Stick @@ -3249,6 +3265,11 @@ product SYNTECH CYPHERLAB100 0x1000 Ciph /* Teclast products */ product TECLAST TLC300 0x3203 USB Media Player +/* TexTech products */ +product TEXTECH DUMMY 0x0000 Dummy product +product TEXTECH U2M_1 0x0101 Textech USB MIDI cable +product TEXTECH U2M_2 0x1806 Textech USB MIDI cable + /* Supra products */ product DIAMOND2 SUPRAEXPRESS56K 0x07da Supra Express 56K modem product DIAMOND2 SUPRA2890 0x0b4a SupraMax 2890 56K Modem @@ -3421,7 +3442,9 @@ product WAVESENSE JAZZ 0xaaaa Jazz bloo /* WCH products */ product WCH CH341SER 0x5523 CH341/CH340 USB-Serial Bridge +product WCH2 DUMMY 0x0000 Dummy product product WCH2 CH341SER 0x7523 CH341/CH340 USB-Serial Bridge +product WCH2 U2M 0X752d CH345 USB2.0-MIDI /* Western Digital products */ product WESTERN COMBO 0x0200 Firewire USB Combo Modified: user/alc/superpages/sys/geom/part/g_part_gpt.c ============================================================================== --- user/alc/superpages/sys/geom/part/g_part_gpt.c Thu Jun 14 17:47:54 2012 (r237086) +++ user/alc/superpages/sys/geom/part/g_part_gpt.c Thu Jun 14 17:54:52 2012 (r237087) @@ -341,9 +341,6 @@ gpt_update_bootcamp(struct g_part_table disable: table->bootcamp = 0; - bzero(table->mbr + DOSPARTOFF, DOSPARTSIZE * NDOSPART); - gpt_write_mbr_entry(table->mbr, 0, 0xee, 1ull, - MIN(table->lba[GPT_ELT_SECHDR], UINT32_MAX)); } static struct gpt_hdr * @@ -589,10 +586,6 @@ g_part_gpt_bootcode(struct g_part_table codesz = MIN(codesz, gpp->gpp_codesize); if (codesz > 0) bcopy(gpp->gpp_codeptr, table->mbr, codesz); - - /* Mark the PMBR active since some BIOS require it. */ - if (!table->bootcamp) - table->mbr[DOSPARTOFF] = 0x80; /* status */ return (0); } @@ -601,7 +594,6 @@ g_part_gpt_create(struct g_part_table *b { struct g_provider *pp; struct g_part_gpt_table *table; - quad_t last; size_t tblsz; /* We don't nest, which means that our depth should be 0. */ @@ -617,11 +609,6 @@ g_part_gpt_create(struct g_part_table *b pp->sectorsize) return (ENOSPC); - last = (pp->mediasize / pp->sectorsize) - 1; - - le16enc(table->mbr + DOSMAGICOFFSET, DOSMAGIC); - gpt_write_mbr_entry(table->mbr, 0, 0xee, 1, MIN(last, UINT32_MAX)); - /* Allocate space for the header */ table->hdr = g_malloc(sizeof(struct gpt_hdr), M_WAITOK | M_ZERO); @@ -1047,6 +1034,16 @@ g_part_gpt_write(struct g_part_table *ba if (table->bootcamp) gpt_update_bootcamp(basetable); + /* Update partition entries in the PMBR if Boot Camp disabled. */ + if (!table->bootcamp) { + bzero(table->mbr + DOSPARTOFF, DOSPARTSIZE * NDOSPART); + gpt_write_mbr_entry(table->mbr, 0, 0xee, 1, + MIN(pp->mediasize / pp->sectorsize - 1, UINT32_MAX)); + /* Mark the PMBR active since some BIOS require it. */ + table->mbr[DOSPARTOFF] = 0x80; + } + le16enc(table->mbr + DOSMAGICOFFSET, DOSMAGIC); + /* Write the PMBR */ buf = g_malloc(pp->sectorsize, M_WAITOK | M_ZERO); bcopy(table->mbr, buf, MBRSIZE); Modified: user/alc/superpages/sys/kern/kern_descrip.c ============================================================================== --- user/alc/superpages/sys/kern/kern_descrip.c Thu Jun 14 17:47:54 2012 (r237086) +++ user/alc/superpages/sys/kern/kern_descrip.c Thu Jun 14 17:54:52 2012 (r237087) @@ -102,7 +102,7 @@ __FBSDID("$FreeBSD$"); static MALLOC_DEFINE(M_FILEDESC, "filedesc", "Open file descriptor table"); static MALLOC_DEFINE(M_FILEDESC_TO_LEADER, "filedesc_to_leader", - "file desc to leader structures"); + "file desc to leader structures"); static MALLOC_DEFINE(M_SIGIO, "sigio", "sigio structures"); MALLOC_DECLARE(M_FADVISE); @@ -114,22 +114,21 @@ static uma_zone_t file_zone; #define DUP_FIXED 0x1 /* Force fixed allocation */ #define DUP_FCNTL 0x2 /* fcntl()-style errors */ -static int closefp(struct filedesc *fdp, int fd, struct file *fp, - struct thread *td); -static int do_dup(struct thread *td, int flags, int old, int new, +static int closefp(struct filedesc *fdp, int fd, struct file *fp, + struct thread *td, int holdleaders); +static int do_dup(struct thread *td, int flags, int old, int new, register_t *retval); -static int fd_first_free(struct filedesc *, int, int); -static int fd_last_used(struct filedesc *, int); -static void fdgrowtable(struct filedesc *, int); -static void fdunused(struct filedesc *fdp, int fd); -static void fdused(struct filedesc *fdp, int fd); -static int fill_vnode_info(struct vnode *vp, struct kinfo_file *kif); -static int fill_socket_info(struct socket *so, struct kinfo_file *kif); -static int fill_pts_info(struct tty *tp, struct kinfo_file *kif); -static int fill_pipe_info(struct pipe *pi, struct kinfo_file *kif); -static int fill_procdesc_info(struct procdesc *pdp, - struct kinfo_file *kif); -static int fill_shm_info(struct file *fp, struct kinfo_file *kif); +static int fd_first_free(struct filedesc *fdp, int low, int size); +static int fd_last_used(struct filedesc *fdp, int size); +static void fdgrowtable(struct filedesc *fdp, int nfd); +static void fdunused(struct filedesc *fdp, int fd); +static void fdused(struct filedesc *fdp, int fd); +static int fill_pipe_info(struct pipe *pi, struct kinfo_file *kif); +static int fill_procdesc_info(struct procdesc *pdp, struct kinfo_file *kif); +static int fill_pts_info(struct tty *tp, struct kinfo_file *kif); +static int fill_shm_info(struct file *fp, struct kinfo_file *kif); +static int fill_socket_info(struct socket *so, struct kinfo_file *kif); +static int fill_vnode_info(struct vnode *vp, struct kinfo_file *kif); /* * A process is initially started out with NDFILE descriptors stored within @@ -183,10 +182,10 @@ struct filedesc0 { */ volatile int openfiles; /* actual number of open files */ struct mtx sigio_lock; /* mtx to protect pointers to sigio */ -void (*mq_fdclose)(struct thread *td, int fd, struct file *fp); +void (*mq_fdclose)(struct thread *td, int fd, struct file *fp); /* A mutex to protect the association between a proc and filedesc. */ -static struct mtx fdesc_mtx; +static struct mtx fdesc_mtx; /* * If low >= size, just return low. Otherwise find the first zero bit in the @@ -243,8 +242,12 @@ fd_last_used(struct filedesc *fdp, int s static int fdisused(struct filedesc *fdp, int fd) { - KASSERT(fd >= 0 && fd < fdp->fd_nfiles, - ("file descriptor %d out of range (0, %d)", fd, fdp->fd_nfiles)); + + FILEDESC_LOCK_ASSERT(fdp); + + KASSERT(fd >= 0 && fd < fdp->fd_nfiles, + ("file descriptor %d out of range (0, %d)", fd, fdp->fd_nfiles)); + return ((fdp->fd_map[NDSLOT(fd)] & NDBIT(fd)) != 0); } @@ -256,8 +259,8 @@ fdused(struct filedesc *fdp, int fd) { FILEDESC_XLOCK_ASSERT(fdp); - KASSERT(!fdisused(fdp, fd), - ("fd already used")); + + KASSERT(!fdisused(fdp, fd), ("fd=%d is already used", fd)); fdp->fd_map[NDSLOT(fd)] |= NDBIT(fd); if (fd > fdp->fd_lastfile) @@ -274,10 +277,9 @@ fdunused(struct filedesc *fdp, int fd) { FILEDESC_XLOCK_ASSERT(fdp); - KASSERT(fdisused(fdp, fd), - ("fd is already unused")); - KASSERT(fdp->fd_ofiles[fd] == NULL, - ("fd is still in use")); + + KASSERT(fdisused(fdp, fd), ("fd=%d is already unused", fd)); + KASSERT(fdp->fd_ofiles[fd] == NULL, ("fd=%d is still in use", fd)); fdp->fd_map[NDSLOT(fd)] &= ~NDBIT(fd); if (fd < fdp->fd_freefile) @@ -427,23 +429,13 @@ sys_fcntl(struct thread *td, struct fcnt return (error); } -static inline struct file * -fdtofp(int fd, struct filedesc *fdp) -{ - - FILEDESC_LOCK_ASSERT(fdp); - - if (fd < 0 || fd >= fdp->fd_nfiles) - return (NULL); - - return (fdp->fd_ofiles[fd]); -} - static inline int fdunwrap(int fd, cap_rights_t rights, struct filedesc *fdp, struct file **fpp) { - *fpp = fdtofp(fd, fdp); + FILEDESC_LOCK_ASSERT(fdp); + + *fpp = fget_locked(fdp, fd); if (*fpp == NULL) return (EBADF); @@ -492,7 +484,7 @@ kern_fcntl(struct thread *td, int fd, in case F_GETFD: FILEDESC_SLOCK(fdp); - if ((fp = fdtofp(fd, fdp)) == NULL) { + if ((fp = fget_locked(fdp, fd)) == NULL) { FILEDESC_SUNLOCK(fdp); error = EBADF; break; @@ -504,7 +496,7 @@ kern_fcntl(struct thread *td, int fd, in case F_SETFD: FILEDESC_XLOCK(fdp); - if ((fp = fdtofp(fd, fdp)) == NULL) { + if ((fp = fget_locked(fdp, fd)) == NULL) { FILEDESC_XUNLOCK(fdp); error = EBADF; break; @@ -677,8 +669,7 @@ kern_fcntl(struct thread *td, int fd, in vfslocked = 0; /* Check for race with close */ FILEDESC_SLOCK(fdp); - if (fd < 0 || fd >= fdp->fd_nfiles || - fp != fdp->fd_ofiles[fd]) { + if (fget_locked(fdp, fd) != fp) { FILEDESC_SUNLOCK(fdp); flp->l_whence = SEEK_SET; flp->l_start = 0; @@ -686,7 +677,7 @@ kern_fcntl(struct thread *td, int fd, in flp->l_type = F_UNLCK; vfslocked = VFS_LOCK_GIANT(vp->v_mount); (void) VOP_ADVLOCK(vp, (caddr_t)p->p_leader, - F_UNLCK, flp, F_POSIX); + F_UNLCK, flp, F_POSIX); VFS_UNLOCK_GIANT(vfslocked); vfslocked = 0; } else @@ -743,7 +734,7 @@ kern_fcntl(struct thread *td, int fd, in /* FALLTHROUGH */ case F_READAHEAD: FILEDESC_SLOCK(fdp); - if ((fp = fdtofp(fd, fdp)) == NULL) { + if ((fp = fget_locked(fdp, fd)) == NULL) { FILEDESC_SUNLOCK(fdp); error = EBADF; break; @@ -820,7 +811,7 @@ do_dup(struct thread *td, int flags, int return (flags & DUP_FCNTL ? EINVAL : EBADF); FILEDESC_XLOCK(fdp); - if (old >= fdp->fd_nfiles || fdp->fd_ofiles[old] == NULL) { + if (fget_locked(fdp, old) == NULL) { FILEDESC_XUNLOCK(fdp); return (EBADF); } @@ -885,7 +876,7 @@ do_dup(struct thread *td, int flags, int *retval = new; if (delfp != NULL) { - (void) closefp(fdp, new, delfp, td); + (void) closefp(fdp, new, delfp, td, 1); /* closefp() drops the FILEDESC lock for us. */ } else { FILEDESC_XUNLOCK(fdp); @@ -1117,22 +1108,24 @@ fgetown(sigiop) * Function drops the filedesc lock on return. */ static int -closefp(struct filedesc *fdp, int fd, struct file *fp, struct thread *td) +closefp(struct filedesc *fdp, int fd, struct file *fp, struct thread *td, + int holdleaders) { struct file *fp_object; - int error, holdleaders; + int error; FILEDESC_XLOCK_ASSERT(fdp); - if (td->td_proc->p_fdtol != NULL) { - /* - * Ask fdfree() to sleep to ensure that all relevant - * process leaders can be traversed in closef(). - */ - fdp->fd_holdleaderscount++; - holdleaders = 1; - } else { - holdleaders = 0; + if (holdleaders) { + if (td->td_proc->p_fdtol != NULL) { + /* + * Ask fdfree() to sleep to ensure that all relevant + * process leaders can be traversed in closef(). + */ + fdp->fd_holdleaderscount++; + } else { + holdleaders = 0; + } } /* @@ -1197,8 +1190,7 @@ kern_close(td, fd) AUDIT_SYSCLOSE(td, fd); FILEDESC_XLOCK(fdp); - if (fd < 0 || fd >= fdp->fd_nfiles || - (fp = fdp->fd_ofiles[fd]) == NULL) { + if ((fp = fget_locked(fdp, fd)) == NULL) { FILEDESC_XUNLOCK(fdp); return (EBADF); } @@ -1207,7 +1199,7 @@ kern_close(td, fd) fdunused(fdp, fd); /* closefp() drops the FILEDESC lock for us. */ - return (closefp(fdp, fd, fp, td)); + return (closefp(fdp, fd, fp, td, 1)); } /* @@ -1370,6 +1362,7 @@ sys_fpathconf(struct thread *td, struct vp = fp->f_vnode; if (vp != NULL) { int vfslocked; + vfslocked = VFS_LOCK_GIANT(vp->v_mount); vn_lock(vp, LK_SHARED | LK_RETRY); error = VOP_PATHCONF(vp, uap->name, td->td_retval); @@ -1380,7 +1373,7 @@ sys_fpathconf(struct thread *td, struct error = EINVAL; } else { td->td_retval[0] = PIPE_BUF; - error = 0; + error = 0; } } else { error = EOPNOTSUPP; @@ -1834,11 +1827,8 @@ fdfree(struct thread *td) vp = fp->f_vnode; locked = VFS_LOCK_GIANT(vp->v_mount); (void) VOP_ADVLOCK(vp, - (caddr_t)td->td_proc-> - p_leader, - F_UNLCK, - &lf, - F_POSIX); + (caddr_t)td->td_proc->p_leader, F_UNLCK, + &lf, F_POSIX); VFS_UNLOCK_GIANT(locked); FILEDESC_XLOCK(fdp); fdrop(fp, td); @@ -2027,6 +2017,7 @@ void fdcloseexec(struct thread *td) { struct filedesc *fdp; + struct file *fp; int i; /* Certain daemons might not have file descriptors. */ @@ -2034,31 +2025,20 @@ fdcloseexec(struct thread *td) if (fdp == NULL) return; - FILEDESC_XLOCK(fdp); - /* * We cannot cache fd_ofiles or fd_ofileflags since operations * may block and rip them out from under us. */ + FILEDESC_XLOCK(fdp); for (i = 0; i <= fdp->fd_lastfile; i++) { - if (fdp->fd_ofiles[i] != NULL && - (fdp->fd_ofiles[i]->f_type == DTYPE_MQUEUE || + fp = fdp->fd_ofiles[i]; + if (fp != NULL && (fp->f_type == DTYPE_MQUEUE || (fdp->fd_ofileflags[i] & UF_EXCLOSE))) { - struct file *fp; - - knote_fdclose(td, i); - /* - * NULL-out descriptor prior to close to avoid - * a race while close blocks. - */ - fp = fdp->fd_ofiles[i]; fdp->fd_ofiles[i] = NULL; fdp->fd_ofileflags[i] = 0; fdunused(fdp, i); - if (fp->f_type == DTYPE_MQUEUE) - mq_fdclose(td, i, fp); - FILEDESC_XUNLOCK(fdp); - (void) closef(fp, td); + (void) closefp(fdp, i, fp, td, 0); + /* closefp() drops the FILEDESC lock. */ FILEDESC_XLOCK(fdp); } } @@ -2123,6 +2103,9 @@ closef(struct file *fp, struct thread *t struct filedesc *fdp; struct file *fp_object; + fdp = td->td_proc->p_fd; + FILEDESC_UNLOCK_ASSERT(fdp); + /* * POSIX record locking dictates that any close releases ALL * locks owned by this process. This is handled by setting @@ -2139,7 +2122,7 @@ closef(struct file *fp, struct thread *t * node, not the capability itself. */ (void)cap_funwrap(fp, 0, &fp_object); - if ((fp_object->f_type == DTYPE_VNODE) && (td != NULL)) { + if (fp_object->f_type == DTYPE_VNODE && td != NULL) { int vfslocked; vp = fp_object->f_vnode; @@ -2150,7 +2133,7 @@ closef(struct file *fp, struct thread *t lf.l_len = 0; lf.l_type = F_UNLCK; (void) VOP_ADVLOCK(vp, (caddr_t)td->td_proc->p_leader, - F_UNLCK, &lf, F_POSIX); + F_UNLCK, &lf, F_POSIX); } fdtol = td->td_proc->p_fdtol; if (fdtol != NULL) { @@ -2158,7 +2141,6 @@ closef(struct file *fp, struct thread *t * Handle special case where file descriptor table is * shared between multiple process leaders. */ - fdp = td->td_proc->p_fd; FILEDESC_XLOCK(fdp); for (fdtol = fdtol->fdl_next; fdtol != td->td_proc->p_fdtol; @@ -2174,8 +2156,8 @@ closef(struct file *fp, struct thread *t lf.l_type = F_UNLCK; vp = fp_object->f_vnode; (void) VOP_ADVLOCK(vp, - (caddr_t)fdtol->fdl_leader, - F_UNLCK, &lf, F_POSIX); + (caddr_t)fdtol->fdl_leader, F_UNLCK, &lf, + F_POSIX); FILEDESC_XLOCK(fdp); fdtol->fdl_holdcount--; if (fdtol->fdl_holdcount == 0 && @@ -2602,8 +2584,7 @@ dupfdopen(struct thread *td, struct file * closed, then reject. */ FILEDESC_XLOCK(fdp); - if (dfd < 0 || dfd >= fdp->fd_nfiles || - (fp = fdp->fd_ofiles[dfd]) == NULL) { + if ((fp = fget_locked(fdp, dfd)) == NULL) { FILEDESC_XUNLOCK(fdp); return (EBADF); } Modified: user/alc/superpages/sys/kern/kern_event.c ============================================================================== --- user/alc/superpages/sys/kern/kern_event.c Thu Jun 14 17:47:54 2012 (r237086) +++ user/alc/superpages/sys/kern/kern_event.c Thu Jun 14 17:54:52 2012 (r237087) @@ -692,7 +692,7 @@ sys_kqueue(struct thread *td, struct kqu if (error) goto done2; - /* An extra reference on `nfp' has been held for us by falloc(). */ + /* An extra reference on `fp' has been held for us by falloc(). */ kq = malloc(sizeof *kq, M_KQUEUE, M_WAITOK | M_ZERO); mtx_init(&kq->kq_lock, "kqueue", NULL, MTX_DEF|MTX_DUPOK); TAILQ_INIT(&kq->kq_head); Modified: user/alc/superpages/sys/sys/filedesc.h ============================================================================== --- user/alc/superpages/sys/sys/filedesc.h Thu Jun 14 17:47:54 2012 (r237086) +++ user/alc/superpages/sys/sys/filedesc.h Thu Jun 14 17:54:52 2012 (r237087) @@ -105,6 +105,7 @@ struct filedesc_to_leader { SX_NOTRECURSED) #define FILEDESC_XLOCK_ASSERT(fdp) sx_assert(&(fdp)->fd_sx, SX_XLOCKED | \ SX_NOTRECURSED) +#define FILEDESC_UNLOCK_ASSERT(fdp) sx_assert(&(fdp)->fd_sx, SX_UNLOCKED) struct thread; @@ -141,7 +142,12 @@ static __inline struct file * fget_locked(struct filedesc *fdp, int fd) { - return ((unsigned int)fd >= fdp->fd_nfiles ? NULL : fdp->fd_ofiles[fd]); + FILEDESC_LOCK_ASSERT(fdp); + + if (fd < 0 || fd >= fdp->fd_nfiles) + return (NULL); + + return (fdp->fd_ofiles[fd]); } #endif /* _KERNEL */ From owner-svn-src-user@FreeBSD.ORG Fri Jun 15 05:57:40 2012 Return-Path: Delivered-To: svn-src-user@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [69.147.83.52]) by hub.freebsd.org (Postfix) with ESMTP id C99D1106564A; Fri, 15 Jun 2012 05:57:40 +0000 (UTC) (envelope-from dougb@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [69.147.83.44]) by mx1.freebsd.org (Postfix) with ESMTP id B58D08FC14; Fri, 15 Jun 2012 05:57:40 +0000 (UTC) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.4/8.14.4) with ESMTP id q5F5veLR046553; Fri, 15 Jun 2012 05:57:40 GMT (envelope-from dougb@svn.freebsd.org) Received: (from dougb@localhost) by svn.freebsd.org (8.14.4/8.14.4/Submit) id q5F5vevB046551; Fri, 15 Jun 2012 05:57:40 GMT (envelope-from dougb@svn.freebsd.org) Message-Id: <201206150557.q5F5vevB046551@svn.freebsd.org> From: Doug Barton Date: Fri, 15 Jun 2012 05:57:40 +0000 (UTC) To: src-committers@freebsd.org, svn-src-user@freebsd.org X-SVN-Group: user MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r237111 - user/dougb/portmaster X-BeenThere: svn-src-user@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "SVN commit messages for the experimental " user" src tree" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 15 Jun 2012 05:57:40 -0000 Author: dougb Date: Fri Jun 15 05:57:40 2012 New Revision: 237111 URL: http://svn.freebsd.org/changeset/base/237111 Log: pgrep is unsafe to use in older versions of FreeBSD Modified: user/dougb/portmaster/portmaster Modified: user/dougb/portmaster/portmaster ============================================================================== --- user/dougb/portmaster/portmaster Fri Jun 15 03:57:16 2012 (r237110) +++ user/dougb/portmaster/portmaster Fri Jun 15 05:57:40 2012 (r237111) @@ -168,7 +168,7 @@ parent_exit () { if [ -n "$PM_WRKDIRPREFIX" -a -z "$1" ]; then pm_v ; count=0 while : ; do - pgrep -qf 'make clean NOCLEANDEPENDS=ncd' || break + ps axww | grep '[m]ake clean NOCLEANDEPENDS=ncd' >/dev/null || break count=$(( $count + 1 )) if [ $count -eq 1 ]; then echo "===>>> Waiting for background 'make clean' processes to finish" From owner-svn-src-user@FreeBSD.ORG Fri Jun 15 06:00:57 2012 Return-Path: Delivered-To: svn-src-user@freebsd.org Received: from mx1.freebsd.org (unknown [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 785F0106564A; Fri, 15 Jun 2012 06:00:57 +0000 (UTC) (envelope-from alc@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [69.147.83.44]) by mx1.freebsd.org (Postfix) with ESMTP id 623358FC1C; Fri, 15 Jun 2012 06:00:57 +0000 (UTC) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.4/8.14.4) with ESMTP id q5F60vSZ046738; Fri, 15 Jun 2012 06:00:57 GMT (envelope-from alc@svn.freebsd.org) Received: (from alc@localhost) by svn.freebsd.org (8.14.4/8.14.4/Submit) id q5F60vI9046730; Fri, 15 Jun 2012 06:00:57 GMT (envelope-from alc@svn.freebsd.org) Message-Id: <201206150600.q5F60vI9046730@svn.freebsd.org> From: Alan Cox Date: Fri, 15 Jun 2012 06:00:57 +0000 (UTC) To: src-committers@freebsd.org, svn-src-user@freebsd.org X-SVN-Group: user MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r237112 - in user/alc/superpages/sys: arm/include i386/include ia64/include mips/include powerpc/include sparc64/include vm X-BeenThere: svn-src-user@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "SVN commit messages for the experimental " user" src tree" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 15 Jun 2012 06:00:57 -0000 Author: alc Date: Fri Jun 15 06:00:56 2012 New Revision: 237112 URL: http://svn.freebsd.org/changeset/base/237112 Log: Add pmap_page_is_write_mapped() to the non-amd64 architectures. Modified: user/alc/superpages/sys/arm/include/pmap.h user/alc/superpages/sys/i386/include/pmap.h user/alc/superpages/sys/ia64/include/pmap.h user/alc/superpages/sys/mips/include/pmap.h user/alc/superpages/sys/powerpc/include/pmap.h user/alc/superpages/sys/sparc64/include/pmap.h user/alc/superpages/sys/vm/pmap.h Modified: user/alc/superpages/sys/arm/include/pmap.h ============================================================================== --- user/alc/superpages/sys/arm/include/pmap.h Fri Jun 15 05:57:40 2012 (r237111) +++ user/alc/superpages/sys/arm/include/pmap.h Fri Jun 15 06:00:56 2012 (r237112) @@ -78,6 +78,7 @@ #define pmap_page_get_memattr(m) VM_MEMATTR_DEFAULT #define pmap_page_is_mapped(m) (!TAILQ_EMPTY(&(m)->md.pv_list)) +#define pmap_page_is_write_mapped(m) (((m)->aflags & PGA_WRITEABLE) != 0) #define pmap_page_set_memattr(m, ma) (void)0 /* Modified: user/alc/superpages/sys/i386/include/pmap.h ============================================================================== --- user/alc/superpages/sys/i386/include/pmap.h Fri Jun 15 05:57:40 2012 (r237111) +++ user/alc/superpages/sys/i386/include/pmap.h Fri Jun 15 06:00:56 2012 (r237112) @@ -498,6 +498,7 @@ extern vm_offset_t virtual_avail; extern vm_offset_t virtual_end; #define pmap_page_get_memattr(m) ((vm_memattr_t)(m)->md.pat_mode) +#define pmap_page_is_write_mapped(m) (((m)->aflags & PGA_WRITEABLE) != 0) #define pmap_unmapbios(va, sz) pmap_unmapdev((va), (sz)) /* Modified: user/alc/superpages/sys/ia64/include/pmap.h ============================================================================== --- user/alc/superpages/sys/ia64/include/pmap.h Fri Jun 15 05:57:40 2012 (r237111) +++ user/alc/superpages/sys/ia64/include/pmap.h Fri Jun 15 06:00:56 2012 (r237112) @@ -118,6 +118,7 @@ extern int pmap_vhpt_log2size; #define pmap_page_get_memattr(m) ((m)->md.memattr) #define pmap_page_is_mapped(m) (!TAILQ_EMPTY(&(m)->md.pv_list)) +#define pmap_page_is_write_mapped(m) (((m)->aflags & PGA_WRITEABLE) != 0) #define pmap_mapbios(pa, sz) pmap_mapdev(pa, sz) #define pmap_unmapbios(va, sz) pmap_unmapdev(va, sz) Modified: user/alc/superpages/sys/mips/include/pmap.h ============================================================================== --- user/alc/superpages/sys/mips/include/pmap.h Fri Jun 15 05:57:40 2012 (r237111) +++ user/alc/superpages/sys/mips/include/pmap.h Fri Jun 15 06:00:56 2012 (r237112) @@ -151,6 +151,7 @@ extern vm_paddr_t dump_avail[PHYS_AVAIL_ #define pmap_page_get_memattr(m) VM_MEMATTR_DEFAULT #define pmap_page_is_mapped(m) (!TAILQ_EMPTY(&(m)->md.pv_list)) +#define pmap_page_is_write_mapped(m) (((m)->aflags & PGA_WRITEABLE) != 0) #define pmap_page_set_memattr(m, ma) (void)0 void pmap_bootstrap(void); Modified: user/alc/superpages/sys/powerpc/include/pmap.h ============================================================================== --- user/alc/superpages/sys/powerpc/include/pmap.h Fri Jun 15 05:57:40 2012 (r237111) +++ user/alc/superpages/sys/powerpc/include/pmap.h Fri Jun 15 06:00:56 2012 (r237112) @@ -223,6 +223,8 @@ extern struct pmap kernel_pmap_store; #define PMAP_TRYLOCK(pmap) mtx_trylock(&(pmap)->pm_mtx) #define PMAP_UNLOCK(pmap) mtx_unlock(&(pmap)->pm_mtx) +#define pmap_page_is_write_mapped(m) (((m)->aflags & PGA_WRITEABLE) != 0) + void pmap_bootstrap(vm_offset_t, vm_offset_t); void pmap_kenter(vm_offset_t va, vm_paddr_t pa); void pmap_kenter_attr(vm_offset_t va, vm_offset_t pa, vm_memattr_t); Modified: user/alc/superpages/sys/sparc64/include/pmap.h ============================================================================== --- user/alc/superpages/sys/sparc64/include/pmap.h Fri Jun 15 05:57:40 2012 (r237111) +++ user/alc/superpages/sys/sparc64/include/pmap.h Fri Jun 15 06:00:56 2012 (r237112) @@ -80,6 +80,7 @@ struct pmap { #define PMAP_UNLOCK(pmap) mtx_unlock(&(pmap)->pm_mtx) #define pmap_page_get_memattr(m) VM_MEMATTR_DEFAULT +#define pmap_page_is_write_mapped(m) (((m)->aflags & PGA_WRITEABLE) != 0) #define pmap_page_set_memattr(m, ma) (void)0 void pmap_bootstrap(u_int cpu_impl); Modified: user/alc/superpages/sys/vm/pmap.h ============================================================================== --- user/alc/superpages/sys/vm/pmap.h Fri Jun 15 05:57:40 2012 (r237111) +++ user/alc/superpages/sys/vm/pmap.h Fri Jun 15 06:00:56 2012 (r237112) @@ -80,10 +80,11 @@ struct pmap_statistics { typedef struct pmap_statistics *pmap_statistics_t; /* - * Each machine dependent implementation is expected to provide: + * Each machine-dependent implementation is required to provide: * * vm_memattr_t pmap_page_get_memattr(vm_page_t); * boolean_t pmap_page_is_mapped(vm_page_t); + * boolean_t pmap_page_is_write_mapped(vm_page_t); * void pmap_page_set_memattr(vm_page_t, vm_memattr_t); */ #include From owner-svn-src-user@FreeBSD.ORG Fri Jun 15 07:38:56 2012 Return-Path: Delivered-To: svn-src-user@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [69.147.83.52]) by hub.freebsd.org (Postfix) with ESMTP id D831510656AE; Fri, 15 Jun 2012 07:38:56 +0000 (UTC) (envelope-from andre@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [69.147.83.44]) by mx1.freebsd.org (Postfix) with ESMTP id C424A8FC0C; Fri, 15 Jun 2012 07:38:56 +0000 (UTC) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.4/8.14.4) with ESMTP id q5F7cuks052138; Fri, 15 Jun 2012 07:38:56 GMT (envelope-from andre@svn.freebsd.org) Received: (from andre@localhost) by svn.freebsd.org (8.14.4/8.14.4/Submit) id q5F7cuPQ052134; Fri, 15 Jun 2012 07:38:56 GMT (envelope-from andre@svn.freebsd.org) Message-Id: <201206150738.q5F7cuPQ052134@svn.freebsd.org> From: Andre Oppermann Date: Fri, 15 Jun 2012 07:38:56 +0000 (UTC) To: src-committers@freebsd.org, svn-src-user@freebsd.org X-SVN-Group: user MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r237120 - user/andre/tcp_workqueue/sys/netinet X-BeenThere: svn-src-user@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "SVN commit messages for the experimental " user" src tree" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 15 Jun 2012 07:38:57 -0000 Author: andre Date: Fri Jun 15 07:38:56 2012 New Revision: 237120 URL: http://svn.freebsd.org/changeset/base/237120 Log: Update comment to reflect the change made in r237064. Modified: user/andre/tcp_workqueue/sys/netinet/tcp_timer.c Modified: user/andre/tcp_workqueue/sys/netinet/tcp_timer.c ============================================================================== --- user/andre/tcp_workqueue/sys/netinet/tcp_timer.c Fri Jun 15 07:38:21 2012 (r237119) +++ user/andre/tcp_workqueue/sys/netinet/tcp_timer.c Fri Jun 15 07:38:56 2012 (r237120) @@ -559,7 +559,7 @@ tcp_timer_rexmt(void * xtp) TCPT_RANGESET(tp->t_rxtcur, rexmt, tp->t_rttmin, TCPTV_REXMTMAX); /* - * Disable rfc1323 if we haven't got any response to + * Disable rfc1323 and SACK if we haven't got any response to * our third SYN to work-around some broken terminal servers * (most of which have hopefully been retired) that have bad VJ * header compression code which trashes TCP segments containing From owner-svn-src-user@FreeBSD.ORG Fri Jun 15 07:42:45 2012 Return-Path: Delivered-To: svn-src-user@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [69.147.83.52]) by hub.freebsd.org (Postfix) with ESMTP id 1D2DE106564A; Fri, 15 Jun 2012 07:42:45 +0000 (UTC) (envelope-from andre@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [69.147.83.44]) by mx1.freebsd.org (Postfix) with ESMTP id 094868FC15; Fri, 15 Jun 2012 07:42:45 +0000 (UTC) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.4/8.14.4) with ESMTP id q5F7gip7052465; Fri, 15 Jun 2012 07:42:44 GMT (envelope-from andre@svn.freebsd.org) Received: (from andre@localhost) by svn.freebsd.org (8.14.4/8.14.4/Submit) id q5F7giAF052463; Fri, 15 Jun 2012 07:42:44 GMT (envelope-from andre@svn.freebsd.org) Message-Id: <201206150742.q5F7giAF052463@svn.freebsd.org> From: Andre Oppermann Date: Fri, 15 Jun 2012 07:42:44 +0000 (UTC) To: src-committers@freebsd.org, svn-src-user@freebsd.org X-SVN-Group: user MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r237121 - user/andre/tcp_workqueue/sys/netinet X-BeenThere: svn-src-user@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "SVN commit messages for the experimental " user" src tree" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 15 Jun 2012 07:42:45 -0000 Author: andre Date: Fri Jun 15 07:42:44 2012 New Revision: 237121 URL: http://svn.freebsd.org/changeset/base/237121 Log: Remove bogus 'else' in #ifdef that prevented the rttvar from being reset on retransmit for IPv6 sessions. Modified: user/andre/tcp_workqueue/sys/netinet/tcp_timer.c Modified: user/andre/tcp_workqueue/sys/netinet/tcp_timer.c ============================================================================== --- user/andre/tcp_workqueue/sys/netinet/tcp_timer.c Fri Jun 15 07:38:56 2012 (r237120) +++ user/andre/tcp_workqueue/sys/netinet/tcp_timer.c Fri Jun 15 07:42:44 2012 (r237121) @@ -577,7 +577,6 @@ tcp_timer_rexmt(void * xtp) #ifdef INET6 if ((tp->t_inpcb->inp_vflag & INP_IPV6) != 0) in6_losing(tp->t_inpcb); - else #endif tp->t_rttvar += (tp->t_srtt >> TCP_RTT_SHIFT); tp->t_srtt = 0; From owner-svn-src-user@FreeBSD.ORG Fri Jun 15 07:52:21 2012 Return-Path: Delivered-To: svn-src-user@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [69.147.83.52]) by hub.freebsd.org (Postfix) with ESMTP id 5977B106564A; Fri, 15 Jun 2012 07:52:21 +0000 (UTC) (envelope-from andre@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [69.147.83.44]) by mx1.freebsd.org (Postfix) with ESMTP id 455928FC0C; Fri, 15 Jun 2012 07:52:21 +0000 (UTC) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.4/8.14.4) with ESMTP id q5F7qLdh053187; Fri, 15 Jun 2012 07:52:21 GMT (envelope-from andre@svn.freebsd.org) Received: (from andre@localhost) by svn.freebsd.org (8.14.4/8.14.4/Submit) id q5F7qLw1053184; Fri, 15 Jun 2012 07:52:21 GMT (envelope-from andre@svn.freebsd.org) Message-Id: <201206150752.q5F7qLw1053184@svn.freebsd.org> From: Andre Oppermann Date: Fri, 15 Jun 2012 07:52:21 +0000 (UTC) To: src-committers@freebsd.org, svn-src-user@freebsd.org X-SVN-Group: user MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r237123 - user/andre/tcp_workqueue/sys/netinet X-BeenThere: svn-src-user@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "SVN commit messages for the experimental " user" src tree" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 15 Jun 2012 07:52:21 -0000 Author: andre Date: Fri Jun 15 07:52:20 2012 New Revision: 237123 URL: http://svn.freebsd.org/changeset/base/237123 Log: When retransmitting SYN in TCPS_SYN_SENT state use TCPTV_RTOBASE, the default retransmit timeout, as base to calculate the backoff time until next try instead of the TCP_REXMTVAL() macro which only works correctly when we already have measured an actual RTT+RTTVAR. Before it would cause the first retransmit at RTOBASE, the next four at the same time (!) about 200ms later, and then another one again RTOBASE later. XXXAO: More testing required to confirm fully RFC compliant behavior. Modified: user/andre/tcp_workqueue/sys/netinet/tcp_timer.c Modified: user/andre/tcp_workqueue/sys/netinet/tcp_timer.c ============================================================================== --- user/andre/tcp_workqueue/sys/netinet/tcp_timer.c Fri Jun 15 07:50:26 2012 (r237122) +++ user/andre/tcp_workqueue/sys/netinet/tcp_timer.c Fri Jun 15 07:52:20 2012 (r237123) @@ -553,7 +553,7 @@ tcp_timer_rexmt(void * xtp) tp->t_flags &= ~TF_PREVVALID; TCPSTAT_INC(tcps_rexmttimeo); if (tp->t_state == TCPS_SYN_SENT) - rexmt = TCP_REXMTVAL(tp) * tcp_syn_backoff[tp->t_rxtshift]; + rexmt = TCPTV_RTOBASE * tcp_syn_backoff[tp->t_rxtshift]; else rexmt = TCP_REXMTVAL(tp) * tcp_backoff[tp->t_rxtshift]; TCPT_RANGESET(tp->t_rxtcur, rexmt, From owner-svn-src-user@FreeBSD.ORG Fri Jun 15 08:03:22 2012 Return-Path: Delivered-To: svn-src-user@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [69.147.83.52]) by hub.freebsd.org (Postfix) with ESMTP id 6E77A1065689; Fri, 15 Jun 2012 08:03:22 +0000 (UTC) (envelope-from andre@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [69.147.83.44]) by mx1.freebsd.org (Postfix) with ESMTP id 59F2D8FC16; Fri, 15 Jun 2012 08:03:22 +0000 (UTC) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.4/8.14.4) with ESMTP id q5F83MEA054035; Fri, 15 Jun 2012 08:03:22 GMT (envelope-from andre@svn.freebsd.org) Received: (from andre@localhost) by svn.freebsd.org (8.14.4/8.14.4/Submit) id q5F83M6D054032; Fri, 15 Jun 2012 08:03:22 GMT (envelope-from andre@svn.freebsd.org) Message-Id: <201206150803.q5F83M6D054032@svn.freebsd.org> From: Andre Oppermann Date: Fri, 15 Jun 2012 08:03:22 +0000 (UTC) To: src-committers@freebsd.org, svn-src-user@freebsd.org X-SVN-Group: user MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r237126 - user/andre/tcp_workqueue/sys/netinet X-BeenThere: svn-src-user@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "SVN commit messages for the experimental " user" src tree" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 15 Jun 2012 08:03:22 -0000 Author: andre Date: Fri Jun 15 08:03:21 2012 New Revision: 237126 URL: http://svn.freebsd.org/changeset/base/237126 Log: For retransmits of SYN|ACK from the syncache use the more aggressive and dedicated tcp_syn_backoff[] retransmit schedule instead of the tcp_backoff[] schedule for established connections. Modified: user/andre/tcp_workqueue/sys/netinet/tcp_syncache.c user/andre/tcp_workqueue/sys/netinet/tcp_timer.h Modified: user/andre/tcp_workqueue/sys/netinet/tcp_syncache.c ============================================================================== --- user/andre/tcp_workqueue/sys/netinet/tcp_syncache.c Fri Jun 15 08:01:16 2012 (r237125) +++ user/andre/tcp_workqueue/sys/netinet/tcp_syncache.c Fri Jun 15 08:03:21 2012 (r237126) @@ -379,7 +379,7 @@ static void syncache_timeout(struct syncache *sc, struct syncache_head *sch, int docallout) { sc->sc_rxttime = ticks + - TCPTV_RTOBASE * (tcp_backoff[sc->sc_rxmits]); + TCPTV_RTOBASE * (tcp_syn_backoff[sc->sc_rxmits]); sc->sc_rxmits++; if (TSTMP_LT(sc->sc_rxttime, sch->sch_nextc)) { sch->sch_nextc = sc->sc_rxttime; Modified: user/andre/tcp_workqueue/sys/netinet/tcp_timer.h ============================================================================== --- user/andre/tcp_workqueue/sys/netinet/tcp_timer.h Fri Jun 15 08:01:16 2012 (r237125) +++ user/andre/tcp_workqueue/sys/netinet/tcp_timer.h Fri Jun 15 08:03:21 2012 (r237126) @@ -170,6 +170,7 @@ extern int tcp_rexmit_slop; extern int tcp_msl; extern int tcp_ttl; /* time to live for TCP segs */ extern int tcp_backoff[]; +extern int tcp_syn_backoff[]; extern int tcp_finwait2_timeout; extern int tcp_fast_finwait2_recycle; From owner-svn-src-user@FreeBSD.ORG Fri Jun 15 08:04:48 2012 Return-Path: Delivered-To: svn-src-user@freebsd.org Received: from mx1.freebsd.org (unknown [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 74733106564A; Fri, 15 Jun 2012 08:04:48 +0000 (UTC) (envelope-from andre@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [69.147.83.44]) by mx1.freebsd.org (Postfix) with ESMTP id 5FCD18FC1A; Fri, 15 Jun 2012 08:04:48 +0000 (UTC) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.4/8.14.4) with ESMTP id q5F84m23054174; Fri, 15 Jun 2012 08:04:48 GMT (envelope-from andre@svn.freebsd.org) Received: (from andre@localhost) by svn.freebsd.org (8.14.4/8.14.4/Submit) id q5F84mxt054172; Fri, 15 Jun 2012 08:04:48 GMT (envelope-from andre@svn.freebsd.org) Message-Id: <201206150804.q5F84mxt054172@svn.freebsd.org> From: Andre Oppermann Date: Fri, 15 Jun 2012 08:04:48 +0000 (UTC) To: src-committers@freebsd.org, svn-src-user@freebsd.org X-SVN-Group: user MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r237127 - user/andre/tcp_workqueue/sys/netinet X-BeenThere: svn-src-user@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "SVN commit messages for the experimental " user" src tree" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 15 Jun 2012 08:04:48 -0000 Author: andre Date: Fri Jun 15 08:04:47 2012 New Revision: 237127 URL: http://svn.freebsd.org/changeset/base/237127 Log: Better readability of TCPT_RANGESET() macro. Modified: user/andre/tcp_workqueue/sys/netinet/tcp_timer.h Modified: user/andre/tcp_workqueue/sys/netinet/tcp_timer.h ============================================================================== --- user/andre/tcp_workqueue/sys/netinet/tcp_timer.h Fri Jun 15 08:03:21 2012 (r237126) +++ user/andre/tcp_workqueue/sys/netinet/tcp_timer.h Fri Jun 15 08:04:47 2012 (r237127) @@ -128,12 +128,12 @@ static const char *tcptimers[] = /* * Force a time value to be in a certain range. */ -#define TCPT_RANGESET(tv, value, tvmin, tvmax) do { \ - (tv) = (value) + tcp_rexmit_slop; \ - if ((u_long)(tv) < (u_long)(tvmin)) \ - (tv) = (tvmin); \ - if ((u_long)(tv) > (u_long)(tvmax)) \ - (tv) = (tvmax); \ +#define TCPT_RANGESET(tv, value, tvmin, tvmax) do { \ + (tv) = (value) + tcp_rexmit_slop; \ + if ((u_long)(tv) < (u_long)(tvmin)) \ + (tv) = (tvmin); \ + if ((u_long)(tv) > (u_long)(tvmax)) \ + (tv) = (tvmax); \ } while(0) #ifdef _KERNEL From owner-svn-src-user@FreeBSD.ORG Fri Jun 15 08:10:15 2012 Return-Path: Delivered-To: svn-src-user@freebsd.org Received: from mx1.freebsd.org (unknown [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 18EFE1065679; Fri, 15 Jun 2012 08:10:15 +0000 (UTC) (envelope-from andre@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [69.147.83.44]) by mx1.freebsd.org (Postfix) with ESMTP id 054358FC1F; Fri, 15 Jun 2012 08:10:15 +0000 (UTC) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.4/8.14.4) with ESMTP id q5F8AELj054583; Fri, 15 Jun 2012 08:10:14 GMT (envelope-from andre@svn.freebsd.org) Received: (from andre@localhost) by svn.freebsd.org (8.14.4/8.14.4/Submit) id q5F8AEwe054581; Fri, 15 Jun 2012 08:10:14 GMT (envelope-from andre@svn.freebsd.org) Message-Id: <201206150810.q5F8AEwe054581@svn.freebsd.org> From: Andre Oppermann Date: Fri, 15 Jun 2012 08:10:14 +0000 (UTC) To: src-committers@freebsd.org, svn-src-user@freebsd.org X-SVN-Group: user MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r237128 - user/andre/tcp_workqueue/sys/netinet X-BeenThere: svn-src-user@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "SVN commit messages for the experimental " user" src tree" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 15 Jun 2012 08:10:15 -0000 Author: andre Date: Fri Jun 15 08:10:14 2012 New Revision: 237128 URL: http://svn.freebsd.org/changeset/base/237128 Log: Change the SYN retransmit schedule to be less aggressive and more smooth. It still tries far too often and long to establish a connection before giving up and signalling the application. Modified: user/andre/tcp_workqueue/sys/netinet/tcp_timer.c Modified: user/andre/tcp_workqueue/sys/netinet/tcp_timer.c ============================================================================== --- user/andre/tcp_workqueue/sys/netinet/tcp_timer.c Fri Jun 15 08:04:47 2012 (r237127) +++ user/andre/tcp_workqueue/sys/netinet/tcp_timer.c Fri Jun 15 08:10:14 2012 (r237128) @@ -147,7 +147,7 @@ tcp_slowtimo(void) } int tcp_syn_backoff[TCP_MAXRXTSHIFT + 1] = - { 1, 1, 1, 1, 1, 2, 4, 8, 16, 32, 64, 64, 64 }; + { 1, 1, 2, 2, 4, 4, 8, 8, 16, 16, 32, 32, 64 }; int tcp_backoff[TCP_MAXRXTSHIFT + 1] = { 1, 2, 4, 8, 16, 32, 64, 128, 256, 512, 512, 512, 512 }; From owner-svn-src-user@FreeBSD.ORG Fri Jun 15 17:16:42 2012 Return-Path: Delivered-To: svn-src-user@freebsd.org Received: from mx1.freebsd.org (unknown [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 2CE6D106564A; Fri, 15 Jun 2012 17:16:42 +0000 (UTC) (envelope-from alc@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [69.147.83.44]) by mx1.freebsd.org (Postfix) with ESMTP id 194958FC15; Fri, 15 Jun 2012 17:16:42 +0000 (UTC) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.4/8.14.4) with ESMTP id q5FHGfSX094042; Fri, 15 Jun 2012 17:16:41 GMT (envelope-from alc@svn.freebsd.org) Received: (from alc@localhost) by svn.freebsd.org (8.14.4/8.14.4/Submit) id q5FHGfKx094040; Fri, 15 Jun 2012 17:16:41 GMT (envelope-from alc@svn.freebsd.org) Message-Id: <201206151716.q5FHGfKx094040@svn.freebsd.org> From: Alan Cox Date: Fri, 15 Jun 2012 17:16:41 +0000 (UTC) To: src-committers@freebsd.org, svn-src-user@freebsd.org X-SVN-Group: user MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r237139 - user/alc/superpages/sys/vm X-BeenThere: svn-src-user@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "SVN commit messages for the experimental " user" src tree" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 15 Jun 2012 17:16:42 -0000 Author: alc Date: Fri Jun 15 17:16:41 2012 New Revision: 237139 URL: http://svn.freebsd.org/changeset/base/237139 Log: Now that pmap_page_is_write_mapped() may be more than an inlined Boolean test, restrict pmap_page_is_write_mapped() calls to only the necessary cases, i.e., OBJT_VNODE. Modified: user/alc/superpages/sys/vm/vm_page.c Modified: user/alc/superpages/sys/vm/vm_page.c ============================================================================== --- user/alc/superpages/sys/vm/vm_page.c Fri Jun 15 17:01:12 2012 (r237138) +++ user/alc/superpages/sys/vm/vm_page.c Fri Jun 15 17:16:41 2012 (r237139) @@ -930,7 +930,7 @@ vm_page_insert(vm_page_t m, vm_object_t * Since we are inserting a new and possibly dirty page, * update the object's OBJ_MIGHTBEDIRTY flag. */ - if (pmap_page_is_write_mapped(m)) + if (object->type == OBJT_VNODE && pmap_page_is_write_mapped(m)) vm_object_set_writeable_dirty(object); } From owner-svn-src-user@FreeBSD.ORG Fri Jun 15 21:48:18 2012 Return-Path: Delivered-To: svn-src-user@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 2FCFD106564A; Fri, 15 Jun 2012 21:48:18 +0000 (UTC) (envelope-from alc@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id 1B8108FC19; Fri, 15 Jun 2012 21:48:18 +0000 (UTC) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.4/8.14.4) with ESMTP id q5FLmHKn005455; Fri, 15 Jun 2012 21:48:17 GMT (envelope-from alc@svn.freebsd.org) Received: (from alc@localhost) by svn.freebsd.org (8.14.4/8.14.4/Submit) id q5FLmHbF005453; Fri, 15 Jun 2012 21:48:17 GMT (envelope-from alc@svn.freebsd.org) Message-Id: <201206152148.q5FLmHbF005453@svn.freebsd.org> From: Alan Cox Date: Fri, 15 Jun 2012 21:48:17 +0000 (UTC) To: src-committers@freebsd.org, svn-src-user@freebsd.org X-SVN-Group: user MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r237147 - user/alc/superpages/sys/amd64/include X-BeenThere: svn-src-user@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "SVN commit messages for the experimental " user" src tree" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 15 Jun 2012 21:48:18 -0000 Author: alc Date: Fri Jun 15 21:48:17 2012 New Revision: 237147 URL: http://svn.freebsd.org/changeset/base/237147 Log: Write mappings will never be negative. Submitted by: kib Modified: user/alc/superpages/sys/amd64/include/pmap.h Modified: user/alc/superpages/sys/amd64/include/pmap.h ============================================================================== --- user/alc/superpages/sys/amd64/include/pmap.h Fri Jun 15 21:45:24 2012 (r237146) +++ user/alc/superpages/sys/amd64/include/pmap.h Fri Jun 15 21:48:17 2012 (r237147) @@ -241,7 +241,7 @@ struct pv_chunk; struct md_page { TAILQ_HEAD(,pv_entry) pv_list; - int write_mappings; + u_int write_mappings; int pat_mode; }; From owner-svn-src-user@FreeBSD.ORG Sat Jun 16 17:05:10 2012 Return-Path: Delivered-To: svn-src-user@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id D7241106566C; Sat, 16 Jun 2012 17:05:10 +0000 (UTC) (envelope-from attilio@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id BC7C08FC18; Sat, 16 Jun 2012 17:05:10 +0000 (UTC) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.4/8.14.4) with ESMTP id q5GH5AIl055900; Sat, 16 Jun 2012 17:05:10 GMT (envelope-from attilio@svn.freebsd.org) Received: (from attilio@localhost) by svn.freebsd.org (8.14.4/8.14.4/Submit) id q5GH5A5w055890; Sat, 16 Jun 2012 17:05:10 GMT (envelope-from attilio@svn.freebsd.org) Message-Id: <201206161705.q5GH5A5w055890@svn.freebsd.org> From: Attilio Rao Date: Sat, 16 Jun 2012 17:05:10 +0000 (UTC) To: src-committers@freebsd.org, svn-src-user@freebsd.org X-SVN-Group: user MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r237166 - in user/attilio/vmcontention: . bin/rcp cddl/contrib/opensolaris/cmd/zdb cddl/contrib/opensolaris/cmd/zhack cddl/contrib/opensolaris/cmd/zpool cddl/contrib/opensolaris/cmd/zte... X-BeenThere: svn-src-user@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "SVN commit messages for the experimental " user" src tree" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sat, 16 Jun 2012 17:05:11 -0000 Author: attilio Date: Sat Jun 16 17:05:09 2012 New Revision: 237166 URL: http://svn.freebsd.org/changeset/base/237166 Log: MFC Added: user/attilio/vmcontention/cddl/contrib/opensolaris/cmd/zhack/ - copied from r237165, head/cddl/contrib/opensolaris/cmd/zhack/ user/attilio/vmcontention/cddl/contrib/opensolaris/cmd/zpool/zpool-features.5 - copied unchanged from r237165, head/cddl/contrib/opensolaris/cmd/zpool/zpool-features.5 user/attilio/vmcontention/cddl/usr.sbin/zhack/ - copied from r237165, head/cddl/usr.sbin/zhack/ user/attilio/vmcontention/sys/arm/include/atags.h - copied unchanged from r237165, head/sys/arm/include/atags.h user/attilio/vmcontention/sys/cddl/contrib/opensolaris/common/nvpair/fnvpair.c - copied unchanged from r237165, head/sys/cddl/contrib/opensolaris/common/nvpair/fnvpair.c user/attilio/vmcontention/sys/cddl/contrib/opensolaris/common/zfs/zfeature_common.c - copied unchanged from r237165, head/sys/cddl/contrib/opensolaris/common/zfs/zfeature_common.c user/attilio/vmcontention/sys/cddl/contrib/opensolaris/common/zfs/zfeature_common.h - copied unchanged from r237165, head/sys/cddl/contrib/opensolaris/common/zfs/zfeature_common.h user/attilio/vmcontention/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/bptree.c - copied unchanged from r237165, head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/bptree.c user/attilio/vmcontention/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/bptree.h - copied unchanged from r237165, head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/bptree.h user/attilio/vmcontention/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/zfeature.h - copied unchanged from r237165, head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/zfeature.h user/attilio/vmcontention/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zfeature.c - copied unchanged from r237165, head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zfeature.c user/attilio/vmcontention/sys/x86/acpica/acpi_wakeup.c - copied unchanged from r237165, head/sys/x86/acpica/acpi_wakeup.c user/attilio/vmcontention/tools/regression/usr.bin/make/variables/modifier_t/ - copied from r237165, head/tools/regression/usr.bin/make/variables/modifier_t/ user/attilio/vmcontention/tools/tools/ath/athaggrstats/ - copied from r237165, head/tools/tools/ath/athaggrstats/ Deleted: user/attilio/vmcontention/etc/auth.conf user/attilio/vmcontention/lib/libutil/auth.3 user/attilio/vmcontention/lib/libutil/auth.conf.5 user/attilio/vmcontention/sys/amd64/acpica/acpi_switch.S user/attilio/vmcontention/sys/amd64/acpica/acpi_wakeup.c user/attilio/vmcontention/sys/arm/at91/files.at91sam9 user/attilio/vmcontention/sys/i386/acpica/acpi_wakeup.c Modified: user/attilio/vmcontention/Makefile.inc1 user/attilio/vmcontention/ObsoleteFiles.inc user/attilio/vmcontention/UPDATING user/attilio/vmcontention/bin/rcp/rcp.1 user/attilio/vmcontention/cddl/contrib/opensolaris/cmd/zdb/zdb.c user/attilio/vmcontention/cddl/contrib/opensolaris/cmd/zpool/zpool.8 user/attilio/vmcontention/cddl/contrib/opensolaris/cmd/zpool/zpool_main.c user/attilio/vmcontention/cddl/contrib/opensolaris/cmd/ztest/ztest.c user/attilio/vmcontention/cddl/contrib/opensolaris/lib/libnvpair/libnvpair.c user/attilio/vmcontention/cddl/contrib/opensolaris/lib/libzfs/common/libzfs.h user/attilio/vmcontention/cddl/contrib/opensolaris/lib/libzfs/common/libzfs_config.c user/attilio/vmcontention/cddl/contrib/opensolaris/lib/libzfs/common/libzfs_dataset.c user/attilio/vmcontention/cddl/contrib/opensolaris/lib/libzfs/common/libzfs_pool.c user/attilio/vmcontention/cddl/contrib/opensolaris/lib/libzfs/common/libzfs_status.c user/attilio/vmcontention/cddl/contrib/opensolaris/lib/libzfs/common/libzfs_util.c user/attilio/vmcontention/cddl/contrib/opensolaris/lib/libzpool/common/kernel.c user/attilio/vmcontention/cddl/lib/libnvpair/Makefile user/attilio/vmcontention/cddl/lib/libzfs/Makefile user/attilio/vmcontention/cddl/sbin/zpool/Makefile user/attilio/vmcontention/cddl/usr.bin/ztest/Makefile user/attilio/vmcontention/cddl/usr.sbin/Makefile user/attilio/vmcontention/contrib/gcc/config/arm/freebsd.h user/attilio/vmcontention/contrib/libstdc++/include/bits/locale_facets.tcc user/attilio/vmcontention/contrib/libstdc++/include/bits/stl_bvector.h user/attilio/vmcontention/contrib/libstdc++/include/bits/stl_deque.h user/attilio/vmcontention/contrib/libstdc++/include/bits/stl_list.h user/attilio/vmcontention/contrib/libstdc++/include/bits/stl_map.h user/attilio/vmcontention/contrib/libstdc++/include/bits/stl_multimap.h user/attilio/vmcontention/contrib/libstdc++/include/bits/stl_multiset.h user/attilio/vmcontention/contrib/libstdc++/include/bits/stl_set.h user/attilio/vmcontention/contrib/libstdc++/include/bits/stl_tree.h user/attilio/vmcontention/contrib/libstdc++/include/bits/stl_vector.h user/attilio/vmcontention/etc/Makefile user/attilio/vmcontention/gnu/lib/libgomp/config.h user/attilio/vmcontention/gnu/lib/libstdc++/config.h user/attilio/vmcontention/gnu/lib/libsupc++/Version.map user/attilio/vmcontention/include/paths.h user/attilio/vmcontention/lib/libc/arm/Symbol.map user/attilio/vmcontention/lib/libc/gen/fstab.c user/attilio/vmcontention/lib/libc/gen/getnetgrent.c user/attilio/vmcontention/lib/libc/gen/signal.3 user/attilio/vmcontention/lib/libc/locale/setrunelocale.c user/attilio/vmcontention/lib/libc/stdlib/getopt_long.c user/attilio/vmcontention/lib/libcrypt/Makefile user/attilio/vmcontention/lib/libcrypt/crypt.3 user/attilio/vmcontention/lib/libcrypt/crypt.c user/attilio/vmcontention/lib/libcxxrt/Version.map user/attilio/vmcontention/lib/libgssapi/gss_accept_sec_context.3 user/attilio/vmcontention/lib/libgssapi/gss_acquire_cred.3 user/attilio/vmcontention/lib/libgssapi/gss_add_cred.3 user/attilio/vmcontention/lib/libgssapi/gss_add_oid_set_member.3 user/attilio/vmcontention/lib/libgssapi/gss_canonicalize_name.3 user/attilio/vmcontention/lib/libgssapi/gss_compare_name.3 user/attilio/vmcontention/lib/libgssapi/gss_context_time.3 user/attilio/vmcontention/lib/libgssapi/gss_create_empty_oid_set.3 user/attilio/vmcontention/lib/libgssapi/gss_delete_sec_context.3 user/attilio/vmcontention/lib/libgssapi/gss_display_name.3 user/attilio/vmcontention/lib/libgssapi/gss_display_status.3 user/attilio/vmcontention/lib/libgssapi/gss_duplicate_name.3 user/attilio/vmcontention/lib/libgssapi/gss_export_name.3 user/attilio/vmcontention/lib/libgssapi/gss_export_sec_context.3 user/attilio/vmcontention/lib/libgssapi/gss_get_mic.3 user/attilio/vmcontention/lib/libgssapi/gss_import_name.3 user/attilio/vmcontention/lib/libgssapi/gss_import_sec_context.3 user/attilio/vmcontention/lib/libgssapi/gss_indicate_mechs.3 user/attilio/vmcontention/lib/libgssapi/gss_init_sec_context.3 user/attilio/vmcontention/lib/libgssapi/gss_inquire_context.3 user/attilio/vmcontention/lib/libgssapi/gss_inquire_cred.3 user/attilio/vmcontention/lib/libgssapi/gss_inquire_cred_by_mech.3 user/attilio/vmcontention/lib/libgssapi/gss_inquire_mechs_for_name.3 user/attilio/vmcontention/lib/libgssapi/gss_inquire_names_for_mech.3 user/attilio/vmcontention/lib/libgssapi/gss_process_context_token.3 user/attilio/vmcontention/lib/libgssapi/gss_release_buffer.3 user/attilio/vmcontention/lib/libgssapi/gss_release_cred.3 user/attilio/vmcontention/lib/libgssapi/gss_release_name.3 user/attilio/vmcontention/lib/libgssapi/gss_release_oid_set.3 user/attilio/vmcontention/lib/libgssapi/gss_test_oid_set_member.3 user/attilio/vmcontention/lib/libgssapi/gss_unwrap.3 user/attilio/vmcontention/lib/libgssapi/gss_verify_mic.3 user/attilio/vmcontention/lib/libgssapi/gss_wrap.3 user/attilio/vmcontention/lib/libgssapi/gss_wrap_size_limit.3 user/attilio/vmcontention/lib/libgssapi/gssapi.3 user/attilio/vmcontention/lib/libgssapi/mech.5 user/attilio/vmcontention/lib/libkiconv/Makefile user/attilio/vmcontention/lib/libusb/Makefile user/attilio/vmcontention/lib/libusb/libusb10.c user/attilio/vmcontention/lib/libusb/libusb10_io.c user/attilio/vmcontention/lib/libutil/Makefile user/attilio/vmcontention/lib/libutil/auth.c user/attilio/vmcontention/lib/libutil/login.conf.5 user/attilio/vmcontention/lib/libutil/property.3 user/attilio/vmcontention/libexec/rshd/rshd.8 user/attilio/vmcontention/libexec/rtld-elf/map_object.c user/attilio/vmcontention/release/picobsd/tinyware/passwd/passwd.c user/attilio/vmcontention/sbin/devfs/devfs.8 user/attilio/vmcontention/sbin/fsck_ffs/suj.c user/attilio/vmcontention/sbin/hastd/synch.h user/attilio/vmcontention/sbin/ipfw/ipfw.8 user/attilio/vmcontention/sbin/natd/natd.8 user/attilio/vmcontention/share/examples/csh/dot.cshrc user/attilio/vmcontention/share/examples/etc/README.examples user/attilio/vmcontention/share/examples/mdoc/example.4 user/attilio/vmcontention/share/man/man4/ip.4 user/attilio/vmcontention/share/man/man4/mac_lomac.4 user/attilio/vmcontention/share/man/man9/rmlock.9 user/attilio/vmcontention/share/misc/committers-src.dot user/attilio/vmcontention/share/mk/bsd.lib.mk user/attilio/vmcontention/share/mk/bsd.own.mk user/attilio/vmcontention/sys/amd64/acpica/acpi_wakecode.S user/attilio/vmcontention/sys/amd64/amd64/cpu_switch.S user/attilio/vmcontention/sys/amd64/amd64/genassym.c user/attilio/vmcontention/sys/amd64/amd64/mp_machdep.c user/attilio/vmcontention/sys/amd64/amd64/pmap.c user/attilio/vmcontention/sys/amd64/amd64/trap.c user/attilio/vmcontention/sys/amd64/conf/GENERIC user/attilio/vmcontention/sys/amd64/include/pcb.h user/attilio/vmcontention/sys/amd64/include/smp.h user/attilio/vmcontention/sys/arm/arm/bcopyinout_xscale.S user/attilio/vmcontention/sys/arm/arm/bootconfig.c user/attilio/vmcontention/sys/arm/arm/busdma_machdep.c user/attilio/vmcontention/sys/arm/arm/cpufunc.c user/attilio/vmcontention/sys/arm/arm/cpufunc_asm.S user/attilio/vmcontention/sys/arm/arm/cpufunc_asm_arm10.S user/attilio/vmcontention/sys/arm/arm/cpufunc_asm_arm11.S user/attilio/vmcontention/sys/arm/arm/cpufunc_asm_arm7tdmi.S user/attilio/vmcontention/sys/arm/arm/cpufunc_asm_arm8.S user/attilio/vmcontention/sys/arm/arm/cpufunc_asm_arm9.S user/attilio/vmcontention/sys/arm/arm/cpufunc_asm_armv4.S user/attilio/vmcontention/sys/arm/arm/cpufunc_asm_armv5.S user/attilio/vmcontention/sys/arm/arm/cpufunc_asm_sa1.S user/attilio/vmcontention/sys/arm/arm/cpufunc_asm_xscale.S user/attilio/vmcontention/sys/arm/arm/cpufunc_asm_xscale_c3.S user/attilio/vmcontention/sys/arm/arm/db_disasm.c user/attilio/vmcontention/sys/arm/arm/db_interface.c user/attilio/vmcontention/sys/arm/arm/db_trace.c user/attilio/vmcontention/sys/arm/arm/disassem.c user/attilio/vmcontention/sys/arm/arm/dump_machdep.c user/attilio/vmcontention/sys/arm/arm/elf_trampoline.c user/attilio/vmcontention/sys/arm/arm/exception.S user/attilio/vmcontention/sys/arm/arm/gdb_machdep.c user/attilio/vmcontention/sys/arm/arm/in_cksum.c user/attilio/vmcontention/sys/arm/arm/intr.c user/attilio/vmcontention/sys/arm/arm/irq_dispatch.S user/attilio/vmcontention/sys/arm/arm/machdep.c user/attilio/vmcontention/sys/arm/arm/mem.c user/attilio/vmcontention/sys/arm/arm/nexus.c user/attilio/vmcontention/sys/arm/arm/pmap.c user/attilio/vmcontention/sys/arm/arm/support.S user/attilio/vmcontention/sys/arm/arm/swtch.S user/attilio/vmcontention/sys/arm/arm/sys_machdep.c user/attilio/vmcontention/sys/arm/arm/trap.c user/attilio/vmcontention/sys/arm/arm/undefined.c user/attilio/vmcontention/sys/arm/arm/vectors.S user/attilio/vmcontention/sys/arm/arm/vm_machdep.c user/attilio/vmcontention/sys/arm/at91/at91.c user/attilio/vmcontention/sys/arm/at91/at91_machdep.c user/attilio/vmcontention/sys/arm/at91/at91_mci.c user/attilio/vmcontention/sys/arm/at91/at91_pio.c user/attilio/vmcontention/sys/arm/at91/at91_pio_rm9200.h user/attilio/vmcontention/sys/arm/at91/at91_pit.c user/attilio/vmcontention/sys/arm/at91/at91_pitreg.h user/attilio/vmcontention/sys/arm/at91/at91_pmcvar.h user/attilio/vmcontention/sys/arm/at91/at91_reset.S user/attilio/vmcontention/sys/arm/at91/at91_rst.c user/attilio/vmcontention/sys/arm/at91/at91_ssc.c user/attilio/vmcontention/sys/arm/at91/at91_st.c user/attilio/vmcontention/sys/arm/at91/at91_wdtreg.h user/attilio/vmcontention/sys/arm/at91/at91rm9200.c user/attilio/vmcontention/sys/arm/at91/at91rm92reg.h user/attilio/vmcontention/sys/arm/at91/at91sam9260reg.h user/attilio/vmcontention/sys/arm/at91/at91sam9g20.c user/attilio/vmcontention/sys/arm/at91/at91sam9g20reg.h user/attilio/vmcontention/sys/arm/at91/at91var.h user/attilio/vmcontention/sys/arm/at91/board_qila9g20.c user/attilio/vmcontention/sys/arm/at91/board_sam9g20ek.c user/attilio/vmcontention/sys/arm/at91/files.at91 user/attilio/vmcontention/sys/arm/at91/if_macb.c user/attilio/vmcontention/sys/arm/at91/std.at91 user/attilio/vmcontention/sys/arm/at91/std.at91sam9 user/attilio/vmcontention/sys/arm/at91/uart_cpu_at91rm9200usart.c user/attilio/vmcontention/sys/arm/conf/AVILA user/attilio/vmcontention/sys/arm/conf/BWCT user/attilio/vmcontention/sys/arm/conf/CAMBRIA user/attilio/vmcontention/sys/arm/conf/CNS11XXNAS user/attilio/vmcontention/sys/arm/conf/CRB user/attilio/vmcontention/sys/arm/conf/EP80219 user/attilio/vmcontention/sys/arm/conf/GUMSTIX user/attilio/vmcontention/sys/arm/conf/GUMSTIX-QEMU user/attilio/vmcontention/sys/arm/conf/HL200 user/attilio/vmcontention/sys/arm/conf/HL201 user/attilio/vmcontention/sys/arm/conf/IQ31244 user/attilio/vmcontention/sys/arm/conf/KB920X user/attilio/vmcontention/sys/arm/conf/LN2410SBC user/attilio/vmcontention/sys/arm/conf/NSLU user/attilio/vmcontention/sys/arm/conf/QILA9G20 user/attilio/vmcontention/sys/arm/conf/QILA9G20.hints user/attilio/vmcontention/sys/arm/conf/SAM9G20EK user/attilio/vmcontention/sys/arm/conf/SAM9G20EK.hints user/attilio/vmcontention/sys/arm/conf/SIMICS user/attilio/vmcontention/sys/arm/econa/econa_machdep.c user/attilio/vmcontention/sys/arm/include/armreg.h user/attilio/vmcontention/sys/arm/include/asmacros.h user/attilio/vmcontention/sys/arm/include/atomic.h user/attilio/vmcontention/sys/arm/include/blockio.h user/attilio/vmcontention/sys/arm/include/cpufunc.h user/attilio/vmcontention/sys/arm/include/elf.h user/attilio/vmcontention/sys/arm/include/endian.h user/attilio/vmcontention/sys/arm/include/fdt.h user/attilio/vmcontention/sys/arm/include/fp.h user/attilio/vmcontention/sys/arm/include/frame.h user/attilio/vmcontention/sys/arm/include/ieee.h user/attilio/vmcontention/sys/arm/include/in_cksum.h user/attilio/vmcontention/sys/arm/include/intr.h user/attilio/vmcontention/sys/arm/include/katelib.h user/attilio/vmcontention/sys/arm/include/machdep.h user/attilio/vmcontention/sys/arm/include/param.h user/attilio/vmcontention/sys/arm/include/pmap.h user/attilio/vmcontention/sys/arm/include/pmc_mdep.h user/attilio/vmcontention/sys/arm/include/profile.h user/attilio/vmcontention/sys/arm/include/pte.h user/attilio/vmcontention/sys/arm/include/resource.h user/attilio/vmcontention/sys/arm/include/stack.h user/attilio/vmcontention/sys/arm/include/vmparam.h user/attilio/vmcontention/sys/arm/mv/mv_machdep.c user/attilio/vmcontention/sys/arm/mv/mvwin.h user/attilio/vmcontention/sys/arm/mv/std.mv user/attilio/vmcontention/sys/arm/s3c2xx0/s3c2410reg.h user/attilio/vmcontention/sys/arm/s3c2xx0/s3c2440reg.h user/attilio/vmcontention/sys/arm/s3c2xx0/s3c24x0.c user/attilio/vmcontention/sys/arm/s3c2xx0/s3c24x0_machdep.c user/attilio/vmcontention/sys/arm/s3c2xx0/s3c24x0reg.h user/attilio/vmcontention/sys/arm/sa11x0/assabet_machdep.c user/attilio/vmcontention/sys/arm/sa11x0/sa11x0.c user/attilio/vmcontention/sys/arm/sa11x0/sa11x0_gpioreg.h user/attilio/vmcontention/sys/arm/sa11x0/sa11x0_io_asm.S user/attilio/vmcontention/sys/arm/sa11x0/sa11x0_irq.S user/attilio/vmcontention/sys/arm/sa11x0/sa11x0_ost.c user/attilio/vmcontention/sys/arm/sa11x0/sa11x0_ostreg.h user/attilio/vmcontention/sys/arm/sa11x0/sa11x0_var.h user/attilio/vmcontention/sys/arm/sa11x0/uart_dev_sa1110.c user/attilio/vmcontention/sys/arm/xscale/i80321/ep80219_machdep.c user/attilio/vmcontention/sys/arm/xscale/i80321/i80321.c user/attilio/vmcontention/sys/arm/xscale/i80321/i80321_aau.c user/attilio/vmcontention/sys/arm/xscale/i80321/i80321_dma.c user/attilio/vmcontention/sys/arm/xscale/i80321/i80321_intr.h user/attilio/vmcontention/sys/arm/xscale/i80321/i80321_pci.c user/attilio/vmcontention/sys/arm/xscale/i80321/i80321_space.c user/attilio/vmcontention/sys/arm/xscale/i80321/i80321_timer.c user/attilio/vmcontention/sys/arm/xscale/i80321/i80321reg.h user/attilio/vmcontention/sys/arm/xscale/i80321/iq31244_7seg.c user/attilio/vmcontention/sys/arm/xscale/i80321/iq31244_machdep.c user/attilio/vmcontention/sys/arm/xscale/i80321/iq80321.c user/attilio/vmcontention/sys/arm/xscale/i80321/obio.c user/attilio/vmcontention/sys/arm/xscale/i8134x/crb_machdep.c user/attilio/vmcontention/sys/arm/xscale/i8134x/i81342.c user/attilio/vmcontention/sys/arm/xscale/i8134x/i81342_mcu.c user/attilio/vmcontention/sys/arm/xscale/i8134x/i81342_pci.c user/attilio/vmcontention/sys/arm/xscale/i8134x/i81342_space.c user/attilio/vmcontention/sys/arm/xscale/i8134x/i81342reg.h user/attilio/vmcontention/sys/arm/xscale/i8134x/iq81342_7seg.c user/attilio/vmcontention/sys/arm/xscale/i8134x/obio.c user/attilio/vmcontention/sys/arm/xscale/i8134x/uart_cpu_i81342.c user/attilio/vmcontention/sys/arm/xscale/ixp425/avila_ata.c user/attilio/vmcontention/sys/arm/xscale/ixp425/avila_gpio.c user/attilio/vmcontention/sys/arm/xscale/ixp425/avila_machdep.c user/attilio/vmcontention/sys/arm/xscale/ixp425/cambria_exp_space.c user/attilio/vmcontention/sys/arm/xscale/ixp425/if_npe.c user/attilio/vmcontention/sys/arm/xscale/ixp425/if_npereg.h user/attilio/vmcontention/sys/arm/xscale/ixp425/ixp425.c user/attilio/vmcontention/sys/arm/xscale/ixp425/ixp425_iic.c user/attilio/vmcontention/sys/arm/xscale/ixp425/ixp425_npe.c user/attilio/vmcontention/sys/arm/xscale/ixp425/ixp425_npereg.h user/attilio/vmcontention/sys/arm/xscale/ixp425/ixp425_pci.c user/attilio/vmcontention/sys/arm/xscale/ixp425/ixp425_pci_space.c user/attilio/vmcontention/sys/arm/xscale/ixp425/ixp425_qmgr.c user/attilio/vmcontention/sys/arm/xscale/ixp425/ixp425_qmgr.h user/attilio/vmcontention/sys/arm/xscale/ixp425/ixp425reg.h user/attilio/vmcontention/sys/arm/xscale/pxa/if_smc_smi.c user/attilio/vmcontention/sys/arm/xscale/pxa/pxa_machdep.c user/attilio/vmcontention/sys/arm/xscale/pxa/pxareg.h user/attilio/vmcontention/sys/boot/zfs/zfsimpl.c user/attilio/vmcontention/sys/cam/ata/ata_da.c user/attilio/vmcontention/sys/cam/ata/ata_xpt.c user/attilio/vmcontention/sys/cam/cam.h user/attilio/vmcontention/sys/cam/cam_periph.c user/attilio/vmcontention/sys/cam/cam_periph.h user/attilio/vmcontention/sys/cam/scsi/scsi_all.c user/attilio/vmcontention/sys/cam/scsi/scsi_all.h user/attilio/vmcontention/sys/cam/scsi/scsi_da.c user/attilio/vmcontention/sys/cam/scsi/scsi_pass.c user/attilio/vmcontention/sys/cam/scsi/scsi_xpt.c user/attilio/vmcontention/sys/cddl/boot/zfs/zfsimpl.h user/attilio/vmcontention/sys/cddl/contrib/opensolaris/common/zfs/zpool_prop.c user/attilio/vmcontention/sys/cddl/contrib/opensolaris/uts/common/Makefile.files user/attilio/vmcontention/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/arc.c user/attilio/vmcontention/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/dbuf.c user/attilio/vmcontention/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/ddt.c user/attilio/vmcontention/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/dmu.c user/attilio/vmcontention/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/dmu_send.c user/attilio/vmcontention/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/dmu_traverse.c user/attilio/vmcontention/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/dmu_tx.c user/attilio/vmcontention/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/dnode.c user/attilio/vmcontention/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/dnode_sync.c user/attilio/vmcontention/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/dsl_dataset.c user/attilio/vmcontention/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/dsl_deleg.c user/attilio/vmcontention/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/dsl_pool.c user/attilio/vmcontention/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/dsl_scan.c user/attilio/vmcontention/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sa.c user/attilio/vmcontention/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/spa.c user/attilio/vmcontention/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/spa_config.c user/attilio/vmcontention/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/spa_misc.c user/attilio/vmcontention/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/dmu.h user/attilio/vmcontention/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/dmu_traverse.h user/attilio/vmcontention/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/dsl_dataset.h user/attilio/vmcontention/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/dsl_pool.h user/attilio/vmcontention/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/dsl_scan.h user/attilio/vmcontention/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/spa.h user/attilio/vmcontention/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/spa_impl.h user/attilio/vmcontention/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/vdev.h user/attilio/vmcontention/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/vdev_impl.h user/attilio/vmcontention/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/zap.h user/attilio/vmcontention/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/zio.h user/attilio/vmcontention/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/vdev.c user/attilio/vmcontention/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/vdev_label.c user/attilio/vmcontention/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zap.c user/attilio/vmcontention/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zap_micro.c user/attilio/vmcontention/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zfs_ioctl.c user/attilio/vmcontention/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zfs_vfsops.c user/attilio/vmcontention/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zio.c user/attilio/vmcontention/sys/cddl/contrib/opensolaris/uts/common/sys/fs/zfs.h user/attilio/vmcontention/sys/cddl/contrib/opensolaris/uts/common/sys/nvpair.h user/attilio/vmcontention/sys/conf/files.amd64 user/attilio/vmcontention/sys/conf/files.i386 user/attilio/vmcontention/sys/conf/kern.post.mk user/attilio/vmcontention/sys/conf/options.arm user/attilio/vmcontention/sys/dev/acpica/acpivar.h user/attilio/vmcontention/sys/dev/ahci/ahci.c user/attilio/vmcontention/sys/dev/ata/ata-all.c user/attilio/vmcontention/sys/dev/ata/chipsets/ata-ite.c user/attilio/vmcontention/sys/dev/ath/ath_hal/ah_desc.h user/attilio/vmcontention/sys/dev/ath/if_ath.c user/attilio/vmcontention/sys/dev/ath/if_ath_debug.c user/attilio/vmcontention/sys/dev/ath/if_ath_misc.h user/attilio/vmcontention/sys/dev/ath/if_ath_sysctl.c user/attilio/vmcontention/sys/dev/ath/if_ath_tx.c user/attilio/vmcontention/sys/dev/ath/if_ath_tx.h user/attilio/vmcontention/sys/dev/ath/if_ath_tx_ht.c user/attilio/vmcontention/sys/dev/ath/if_athioctl.h user/attilio/vmcontention/sys/dev/ath/if_athvar.h user/attilio/vmcontention/sys/dev/drm2/i915/i915_gem.c user/attilio/vmcontention/sys/dev/hwpmc/hwpmc_arm.c user/attilio/vmcontention/sys/dev/isp/isp_pci.c user/attilio/vmcontention/sys/dev/ixgbe/ixgbe.c user/attilio/vmcontention/sys/dev/mvs/mvs.c user/attilio/vmcontention/sys/dev/mvs/mvs.h user/attilio/vmcontention/sys/dev/mvs/mvs_soc.c user/attilio/vmcontention/sys/dev/pci/pci_pci.c user/attilio/vmcontention/sys/dev/puc/pucdata.c user/attilio/vmcontention/sys/dev/siis/siis.c user/attilio/vmcontention/sys/dev/sym/sym_conf.h user/attilio/vmcontention/sys/dev/sym/sym_hipd.c user/attilio/vmcontention/sys/dev/usb/quirk/usb_quirk.c user/attilio/vmcontention/sys/dev/usb/serial/uftdi.c user/attilio/vmcontention/sys/dev/usb/serial/uftdi_reg.h user/attilio/vmcontention/sys/dev/usb/usbdevs user/attilio/vmcontention/sys/geom/part/g_part_gpt.c user/attilio/vmcontention/sys/i386/acpica/acpi_wakecode.S user/attilio/vmcontention/sys/i386/conf/GENERIC user/attilio/vmcontention/sys/i386/i386/mp_machdep.c user/attilio/vmcontention/sys/i386/i386/swtch.s user/attilio/vmcontention/sys/i386/include/pcb.h user/attilio/vmcontention/sys/i386/include/smp.h user/attilio/vmcontention/sys/kern/kern_descrip.c user/attilio/vmcontention/sys/kern/kern_event.c user/attilio/vmcontention/sys/kern/subr_smp.c user/attilio/vmcontention/sys/kern/subr_trap.c user/attilio/vmcontention/sys/kern/sys_capability.c user/attilio/vmcontention/sys/kern/tty.c user/attilio/vmcontention/sys/kern/uipc_syscalls.c user/attilio/vmcontention/sys/kern/uipc_usrreq.c user/attilio/vmcontention/sys/kern/vfs_default.c user/attilio/vmcontention/sys/kern/vfs_syscalls.c user/attilio/vmcontention/sys/kern/vfs_vnops.c user/attilio/vmcontention/sys/libkern/iconv.c user/attilio/vmcontention/sys/mips/rmi/rootfs_list.txt user/attilio/vmcontention/sys/modules/zfs/Makefile user/attilio/vmcontention/sys/net/bpf.c user/attilio/vmcontention/sys/net/if.h user/attilio/vmcontention/sys/net/if_bridge.c user/attilio/vmcontention/sys/net/if_gif.c user/attilio/vmcontention/sys/netgraph/netflow/netflow_v9.c user/attilio/vmcontention/sys/netgraph/netflow/ng_netflow.c user/attilio/vmcontention/sys/netinet/in.h user/attilio/vmcontention/sys/netinet/in_pcb.c user/attilio/vmcontention/sys/netinet/in_pcb.h user/attilio/vmcontention/sys/netinet/ip_input.c user/attilio/vmcontention/sys/netinet/ip_output.c user/attilio/vmcontention/sys/netinet/ipfw/ip_fw_table.c user/attilio/vmcontention/sys/netinet/libalias/libalias.3 user/attilio/vmcontention/sys/netinet/sctp_indata.c user/attilio/vmcontention/sys/netinet/sctp_indata.h user/attilio/vmcontention/sys/netinet/sctp_input.c user/attilio/vmcontention/sys/netinet/sctp_input.h user/attilio/vmcontention/sys/netinet/sctp_output.c user/attilio/vmcontention/sys/netinet/sctp_output.h user/attilio/vmcontention/sys/netinet/sctputil.c user/attilio/vmcontention/sys/netinet/sctputil.h user/attilio/vmcontention/sys/netinet/udp_usrreq.c user/attilio/vmcontention/sys/netinet6/ip6_input.c user/attilio/vmcontention/sys/netinet6/sctp6_usrreq.c user/attilio/vmcontention/sys/netsmb/smb_dev.c user/attilio/vmcontention/sys/sys/cdefs.h user/attilio/vmcontention/sys/sys/filedesc.h user/attilio/vmcontention/sys/sys/kernel.h user/attilio/vmcontention/sys/sys/smp.h user/attilio/vmcontention/sys/sys/vnode.h user/attilio/vmcontention/sys/ufs/ffs/ffs_softdep.c user/attilio/vmcontention/sys/vm/vm_map.c user/attilio/vmcontention/tools/regression/bin/sh/builtins/wait3.0 user/attilio/vmcontention/tools/tools/ath/Makefile user/attilio/vmcontention/tools/tools/ath/athdebug/athdebug.c user/attilio/vmcontention/tools/tools/net80211/wlanstats/main.c user/attilio/vmcontention/usr.bin/calendar/calendars/calendar.freebsd user/attilio/vmcontention/usr.bin/cut/cut.1 user/attilio/vmcontention/usr.bin/cut/cut.c user/attilio/vmcontention/usr.bin/find/find.1 user/attilio/vmcontention/usr.bin/login/login.1 user/attilio/vmcontention/usr.bin/passwd/passwd.1 user/attilio/vmcontention/usr.bin/rlogin/rlogin.1 user/attilio/vmcontention/usr.bin/rsh/rsh.1 user/attilio/vmcontention/usr.bin/sort/coll.c user/attilio/vmcontention/usr.bin/sort/sort.h user/attilio/vmcontention/usr.bin/touch/touch.1 user/attilio/vmcontention/usr.bin/touch/touch.c user/attilio/vmcontention/usr.sbin/apmd/apmd.8 user/attilio/vmcontention/usr.sbin/flowctl/flowctl.8 user/attilio/vmcontention/usr.sbin/flowctl/flowctl.c user/attilio/vmcontention/usr.sbin/newsyslog/newsyslog.conf.5 Directory Properties: user/attilio/vmcontention/ (props changed) user/attilio/vmcontention/cddl/contrib/opensolaris/ (props changed) user/attilio/vmcontention/contrib/gcc/ (props changed) user/attilio/vmcontention/contrib/libstdc++/ (props changed) user/attilio/vmcontention/gnu/lib/ (props changed) user/attilio/vmcontention/lib/libc/ (props changed) user/attilio/vmcontention/lib/libutil/ (props changed) user/attilio/vmcontention/sbin/ (props changed) user/attilio/vmcontention/sbin/ipfw/ (props changed) user/attilio/vmcontention/share/man/man4/ (props changed) user/attilio/vmcontention/sys/ (props changed) user/attilio/vmcontention/sys/boot/ (props changed) user/attilio/vmcontention/sys/cddl/contrib/opensolaris/ (props changed) user/attilio/vmcontention/sys/conf/ (props changed) user/attilio/vmcontention/usr.bin/calendar/ (props changed) Modified: user/attilio/vmcontention/Makefile.inc1 ============================================================================== --- user/attilio/vmcontention/Makefile.inc1 Sat Jun 16 16:51:42 2012 (r237165) +++ user/attilio/vmcontention/Makefile.inc1 Sat Jun 16 17:05:09 2012 (r237166) @@ -15,6 +15,7 @@ # -DNO_WWWUPDATE do not update www in ${MAKE} update # -DNO_CTF do not run the DTrace CTF conversion tools on built objects # LOCAL_DIRS="list of dirs" to add additional dirs to the SUBDIR list +# LOCAL_LIB_DIRS="list of dirs" to add additional dirs to libraries target # LOCAL_TOOL_DIRS="list of dirs" to add additional dirs to the build-tools # list # TARGET="machine" to crossbuild world for a different machine type @@ -88,7 +89,7 @@ SUBDIR+=etc # These are last, since it is nice to at least get the base system # rebuilt before you do them. -.for _DIR in ${LOCAL_DIRS} +.for _DIR in ${LOCAL_LIB_DIRS} ${LOCAL_DIRS} .if exists(${.CURDIR}/${_DIR}/Makefile) SUBDIR+= ${_DIR} .endif @@ -1273,6 +1274,11 @@ _ofed_lib= contrib/ofed/usr.lib/ .endif _generic_libs= ${_cddl_lib} gnu/lib ${_kerberos5_lib} lib ${_secure_lib} usr.bin/lex/lib ${_ofed_lib} +.for _DIR in ${LOCAL_LIB_DIRS} +.if exists(${.CURDIR}/${_DIR}/Makefile) +_generic_libs+= ${_DIR} +.endif +.endfor lib/libopie__L lib/libtacplus__L: lib/libmd__L Modified: user/attilio/vmcontention/ObsoleteFiles.inc ============================================================================== --- user/attilio/vmcontention/ObsoleteFiles.inc Sat Jun 16 16:51:42 2012 (r237165) +++ user/attilio/vmcontention/ObsoleteFiles.inc Sat Jun 16 17:05:09 2012 (r237166) @@ -38,8 +38,13 @@ # xargs -n1 | sort | uniq -d; # done +# 20120613: auth.conf removed +OLD_FILES+=etc/auth.conf +OLD_FILES+=usr/share/examples/etc/auth.conf +OLD_FILES+=usr/share/man/man3/auth.3.gz +OLD_FILES+=usr/share/man/man5/auth.conf.5.gz # 20120530: kde pam lives now in ports -OLD_FILES+=/etc/pam.d/kde +OLD_FILES+=etc/pam.d/kde # 20120505: new clang import installed a redundant internal header OLD_FILES+=usr/include/clang/3.1/stdalign.h # 20120428: MD2 removed from libmd Modified: user/attilio/vmcontention/UPDATING ============================================================================== --- user/attilio/vmcontention/UPDATING Sat Jun 16 16:51:42 2012 (r237165) +++ user/attilio/vmcontention/UPDATING Sat Jun 16 17:05:09 2012 (r237166) @@ -24,6 +24,17 @@ NOTE TO PEOPLE WHO THINK THAT FreeBSD 10 disable the most expensive debugging functionality run "ln -s 'abort:false,junk:false' /etc/malloc.conf".) +20120611: + A new version of ZFS (pool version 5000) has been merged to -HEAD. + Starting with this version the old system of ZFS pool versioning + is superseded by "feature flags". This concept enables forward + compatibility against certain future changes in functionality of ZFS + pools. The first read-only compatible "feature flag" for ZFS pools + is named "com.delphix:async_destroy". For more information + read the new zpool-features(5) manual page. + Please refer to the "ZFS notes" section of this file for information + on upgrading boot ZFS pools. + 20120417: The malloc(3) implementation embedded in libc now uses sources imported as contrib/jemalloc. The most disruptive API change is to Modified: user/attilio/vmcontention/bin/rcp/rcp.1 ============================================================================== --- user/attilio/vmcontention/bin/rcp/rcp.1 Sat Jun 16 16:51:42 2012 (r237165) +++ user/attilio/vmcontention/bin/rcp/rcp.1 Sat Jun 16 17:05:09 2012 (r237166) @@ -116,17 +116,11 @@ The .Nm utility handles third party copies, where neither source nor target files are on the current machine. -.Sh FILES -.Bl -tag -width ".Pa /etc/auth.conf" -compact -.It Pa /etc/auth.conf -configure authentication services -.El .Sh SEE ALSO .Xr cp 1 , .Xr ftp 1 , .Xr rlogin 1 , .Xr rsh 1 , -.Xr auth.conf 5 , .Xr hosts.equiv 5 .Sh HISTORY The Modified: user/attilio/vmcontention/cddl/contrib/opensolaris/cmd/zdb/zdb.c ============================================================================== --- user/attilio/vmcontention/cddl/contrib/opensolaris/cmd/zdb/zdb.c Sat Jun 16 16:51:42 2012 (r237165) +++ user/attilio/vmcontention/cddl/contrib/opensolaris/cmd/zdb/zdb.c Sat Jun 16 17:05:09 2012 (r237166) @@ -18,8 +18,10 @@ * * CDDL HEADER END */ + /* * Copyright (c) 2005, 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2012 by Delphix. All rights reserved. */ #include @@ -54,6 +56,7 @@ #include #include #include +#include #undef ZFS_MAXNAMELEN #undef verify #include @@ -63,7 +66,8 @@ #define ZDB_CHECKSUM_NAME(idx) ((idx) < ZIO_CHECKSUM_FUNCTIONS ? \ zio_checksum_table[(idx)].ci_name : "UNKNOWN") #define ZDB_OT_NAME(idx) ((idx) < DMU_OT_NUMTYPES ? \ - dmu_ot[(idx)].ot_name : "UNKNOWN") + dmu_ot[(idx)].ot_name : DMU_OT_IS_VALID(idx) ? \ + dmu_ot_byteswap[DMU_OT_BYTESWAP(idx)].ob_name : "UNKNOWN") #define ZDB_OT_TYPE(idx) ((idx) < DMU_OT_NUMTYPES ? (idx) : DMU_OT_NUMTYPES) #ifndef lint @@ -1088,7 +1092,7 @@ dump_dsl_dataset(objset_t *os, uint64_t ASSERT(size == sizeof (*ds)); crtime = ds->ds_creation_time; - zdb_nicenum(ds->ds_used_bytes, used); + zdb_nicenum(ds->ds_referenced_bytes, used); zdb_nicenum(ds->ds_compressed_bytes, compressed); zdb_nicenum(ds->ds_uncompressed_bytes, uncompressed); zdb_nicenum(ds->ds_unique_bytes, unique); @@ -1132,6 +1136,44 @@ dump_dsl_dataset(objset_t *os, uint64_t /* ARGSUSED */ static int +dump_bptree_cb(void *arg, const blkptr_t *bp, dmu_tx_t *tx) +{ + char blkbuf[BP_SPRINTF_LEN]; + + if (bp->blk_birth != 0) { + sprintf_blkptr(blkbuf, bp); + (void) printf("\t%s\n", blkbuf); + } + return (0); +} + +static void +dump_bptree(objset_t *os, uint64_t obj, char *name) +{ + char bytes[32]; + bptree_phys_t *bt; + dmu_buf_t *db; + + if (dump_opt['d'] < 3) + return; + + VERIFY3U(0, ==, dmu_bonus_hold(os, obj, FTAG, &db)); + bt = db->db_data; + zdb_nicenum(bt->bt_bytes, bytes); + (void) printf("\n %s: %llu datasets, %s\n", + name, (unsigned long long)(bt->bt_end - bt->bt_begin), bytes); + dmu_buf_rele(db, FTAG); + + if (dump_opt['d'] < 5) + return; + + (void) printf("\n"); + + (void) bptree_iterate(os, obj, B_FALSE, dump_bptree_cb, NULL, NULL); +} + +/* ARGSUSED */ +static int dump_bpobj_cb(void *arg, const blkptr_t *bp, dmu_tx_t *tx) { char blkbuf[BP_SPRINTF_LEN]; @@ -1883,11 +1925,13 @@ typedef struct zdb_blkstats { */ #define ZDB_OT_DEFERRED (DMU_OT_NUMTYPES + 0) #define ZDB_OT_DITTO (DMU_OT_NUMTYPES + 1) -#define ZDB_OT_TOTAL (DMU_OT_NUMTYPES + 2) +#define ZDB_OT_OTHER (DMU_OT_NUMTYPES + 2) +#define ZDB_OT_TOTAL (DMU_OT_NUMTYPES + 3) static char *zdb_ot_extname[] = { "deferred free", "dedup ditto", + "other", "Total", }; @@ -1968,9 +2012,10 @@ zdb_blkptr_cb(spa_t *spa, zilog_t *zilog type = BP_GET_TYPE(bp); - zdb_count_block(zcb, zilog, bp, type); + zdb_count_block(zcb, zilog, bp, + (type & DMU_OT_NEWTYPE) ? ZDB_OT_OTHER : type); - is_metadata = (BP_GET_LEVEL(bp) != 0 || dmu_ot[type].ot_metadata); + is_metadata = (BP_GET_LEVEL(bp) != 0 || DMU_OT_IS_METADATA(type)); if (dump_opt['c'] > 1 || (dump_opt['c'] && is_metadata)) { int ioerr; @@ -2197,6 +2242,12 @@ dump_block_stats(spa_t *spa) (void) bpobj_iterate_nofree(&spa->spa_dsl_pool->dp_free_bpobj, count_block_cb, &zcb, NULL); } + if (spa_feature_is_active(spa, + &spa_feature_table[SPA_FEATURE_ASYNC_DESTROY])) { + VERIFY3U(0, ==, bptree_iterate(spa->spa_meta_objset, + spa->spa_dsl_pool->dp_bptree_obj, B_FALSE, count_block_cb, + &zcb, NULL)); + } if (dump_opt['c'] > 1) flags |= TRAVERSE_PREFETCH_DATA; @@ -2373,7 +2424,7 @@ zdb_ddt_add_cb(spa_t *spa, zilog_t *zilo } if (BP_IS_HOLE(bp) || BP_GET_CHECKSUM(bp) == ZIO_CHECKSUM_OFF || - BP_GET_LEVEL(bp) > 0 || dmu_ot[BP_GET_TYPE(bp)].ot_metadata) + BP_GET_LEVEL(bp) > 0 || DMU_OT_IS_METADATA(BP_GET_TYPE(bp))) return (0); ddt_key_fill(&zdde_search.zdde_key, bp); @@ -2478,7 +2529,14 @@ dump_zpool(spa_t *spa) dump_bpobj(&spa->spa_deferred_bpobj, "Deferred frees"); if (spa_version(spa) >= SPA_VERSION_DEADLISTS) { dump_bpobj(&spa->spa_dsl_pool->dp_free_bpobj, - "Pool frees"); + "Pool snapshot frees"); + } + + if (spa_feature_is_active(spa, + &spa_feature_table[SPA_FEATURE_ASYNC_DESTROY])) { + dump_bptree(spa->spa_meta_objset, + spa->spa_dsl_pool->dp_bptree_obj, + "Pool dataset frees"); } dump_dtl(spa->spa_root_vdev, 0); } Copied: user/attilio/vmcontention/cddl/contrib/opensolaris/cmd/zpool/zpool-features.5 (from r237165, head/cddl/contrib/opensolaris/cmd/zpool/zpool-features.5) ============================================================================== --- /dev/null 00:00:00 1970 (empty, because file is newly added) +++ user/attilio/vmcontention/cddl/contrib/opensolaris/cmd/zpool/zpool-features.5 Sat Jun 16 17:05:09 2012 (r237166, copy of r237165, head/cddl/contrib/opensolaris/cmd/zpool/zpool-features.5) @@ -0,0 +1,174 @@ +'\" te +.\" Copyright (c) 2012, Martin Matuska . +.\" All Rights Reserved. +.\" +.\" The contents of this file are subject to the terms of the +.\" Common Development and Distribution License (the "License"). +.\" You may not use this file except in compliance with the License. +.\" +.\" You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE +.\" or http://www.opensolaris.org/os/licensing. +.\" See the License for the specific language governing permissions +.\" and limitations under the License. +.\" +.\" When distributing Covered Code, include this CDDL HEADER in each +.\" file and include the License file at usr/src/OPENSOLARIS.LICENSE. +.\" If applicable, add the following below this CDDL HEADER, with the +.\" fields enclosed by brackets "[]" replaced with your own identifying +.\" information: Portions Copyright [yyyy] [name of copyright owner] +.\" +.\" Copyright (c) 2012 by Delphix. All rights reserved. +.\" +.\" $FreeBSD$ +.\" +.Dd May 28, 2012 +.Dt ZPOOL-FEATURES 8 +.Os +.Sh NAME +.Nm zpool-features +.Nd ZFS pool feature descriptions +.Sh DESCRIPTION +ZFS pool on\-disk format versions are specified via "features" which replace +the old on\-disk format numbers (the last supported on\-disk format number is +28). +To enable a feature on a pool use the +.Xr zpool 8 +command to set the +.Sy feature@feature_name +property to +.Ar enabled . +.Pp +The pool format does not affect file system version compatibility or the ability +to send file systems between pools. +.Pp +Since most features can be enabled independently of each other the on\-disk +format of the pool is specified by the set of all features marked as +.Sy active +on the pool. If the pool was created by another software version this set may +include unsupported features. +.Ss Identifying features +Every feature has a guid of the form +.Sy com.example:feature_name . +The reverse DNS name ensures that the feature's guid is unique across all ZFS +implementations. When unsupported features are encountered on a pool they will +be identified by their guids. +Refer to the documentation for the ZFS implementation that created the pool +for information about those features. +.Pp +Each supported feature also has a short name. +By convention a feature's short name is the portion of its guid which follows +the ':' (e.g. +.Sy com.example:feature_name +would have the short name +.Sy feature_name ), +however a feature's short name may differ across ZFS implementations if +following the convention would result in name conflicts. +.Ss Feature states +Features can be in one of three states: +.Bl -tag +.It Sy active +This feature's on\-disk format changes are in effect on the pool. +Support for this feature is required to import the pool in read\-write mode. +If this feature is not read-only compatible, support is also required to +import the pool in read\-only mode (see "Read\-only compatibility"). +.It Sy enabled +An administrator has marked this feature as enabled on the pool, but the +feature's on\-disk format changes have not been made yet. +The pool can still be imported by software that does not support this feature, +but changes may be made to the on\-disk format at any time which will move +the feature to the +.Sy active +state. +Some features may support returning to the +.Sy enabled +state after becoming +.Sy active . +See feature\-specific documentation for details. +.It Sy disabled +This feature's on\-disk format changes have not been made and will not be made +unless an administrator moves the feature to the +.Sy enabled +state. +Features cannot be disabled once they have been enabled. +.El +The state of supported features is exposed through pool properties of the form +.Sy feature@short_name . +.Ss Read\-only compatibility +Some features may make on\-disk format changes that do not interfere with other +software's ability to read from the pool. +These features are referred to as "read\-only compatible". +If all unsupported features on a pool are read\-only compatible, the pool can +be imported in read\-only mode by setting the +.Sy readonly +property during import (see +.Xr zpool 8 +for details on importing pools). +.Ss Unsupported features +For each unsupported feature enabled on an imported pool a pool property +named +.Sy unsupported@feature_guid +will indicate why the import was allowed despite the unsupported feature. +Possible values for this property are: +.Bl -tag +.It Sy inactive +The feature is in the +.Sy enabled +state and therefore the pool's on\-disk format is still compatible with +software that does not support this feature. +.It Sy readonly +The feature is read\-only compatible and the pool has been imported in +read\-only mode. +.El +.Ss Feature dependencies +Some features depend on other features being enabled in order to function +properly. +Enabling a feature will automatically enable any features it depends on. +.Sh FEATURES +The following features are supported on this system: +.Bl -tag +.It Sy async_destroy +.Bl -column "READ\-ONLY COMPATIBLE" "com.delphix:async_destroy" +.It GUID Ta com.delphix:async_destroy +.It READ\-ONLY COMPATIBLE Ta yes +.It DEPENDENCIES Ta none +.El +.Pp +Destroying a file system requires traversing all of its data in order to +return its used space to the pool. +Without +.Sy async_destroy +the file system is not fully removed until all space has been reclaimed. +If the destroy operation is interrupted by a reboot or power outage the next +attempt to open the pool will need to complete the destroy operation +synchronously. +.Pp +When +.Sy async_destroy +is enabled the file system's data will be reclaimed by a background process, +allowing the destroy operation to complete without traversing the entire file +system. +The background process is able to resume interrupted destroys after the pool +has been opened, eliminating the need to finish interrupted destroys as part +of the open operation. +The amount of space remaining to be reclaimed by the background process is +available through the +.Sy freeing +property. +.Sh SEE ALSO +.Xr zpool 8 +.Sh AUTHORS +This manual page is a +.Xr mdoc 7 +reimplementation of the +.Tn illumos +manual page +.Em zpool-features(5) , +modified and customized for +.Fx +and licensed under the Common Development and Distribution License +.Pq Tn CDDL . +.Pp +The +.Xr mdoc 7 +implementation of this manual page was initially written by +.An Martin Matuska Aq mm@FreeBSD.org . Modified: user/attilio/vmcontention/cddl/contrib/opensolaris/cmd/zpool/zpool.8 ============================================================================== --- user/attilio/vmcontention/cddl/contrib/opensolaris/cmd/zpool/zpool.8 Sat Jun 16 16:51:42 2012 (r237165) +++ user/attilio/vmcontention/cddl/contrib/opensolaris/cmd/zpool/zpool.8 Sat Jun 16 17:05:09 2012 (r237166) @@ -1,5 +1,5 @@ '\" te -.\" Copyright (c) 2011, Martin Matuska . +.\" Copyright (c) 2012, Martin Matuska . .\" All Rights Reserved. .\" .\" The contents of this file are subject to the terms of the @@ -20,6 +20,7 @@ .\" Copyright (c) 2010, Sun Microsystems, Inc. All Rights Reserved. .\" Copyright 2011, Nexenta Systems, Inc. All Rights Reserved. .\" Copyright (c) 2011, Justin T. Gibbs +.\" Copyright (c) 2012 by Delphix. All Rights Reserved. .\" .\" $FreeBSD$ .\" @@ -47,7 +48,7 @@ .Op Ar device .Nm .Cm create -.Op Fl fn +.Op Fl fnd .Op Fl o Ar property Ns = Ns Ar value .Ar ... .Op Fl O Ar file-system-property Ns = Ns Ar value @@ -189,7 +190,7 @@ for information on managing datasets. A .Qq virtual device .Pq No vdev -describes a single device or a collection of devices organized according to +describes a single device or a collection of devices organized according to certain performance and fault characteristics. The following virtual devices are supported: .Bl -tag @@ -237,7 +238,7 @@ A group can have single-, double- , or triple parity, meaning that the .No raidz group can sustain one, two, or three failures, respectively, without -losing any data. The +losing any data. The .Sy raidz1 No vdev type specifies a single-parity .No raidz @@ -287,7 +288,7 @@ writes are load-balanced between devices .No raidz .No vdev types are not supported for the intent log. For more information, -see the +see the .Qq Sx Intent Log section. .It Sy cache @@ -309,13 +310,13 @@ A pool can have any number of virtual de (known as .Qq root .No vdev Ns s). -Data is dynamically distributed across all top-level devices to balance data +Data is dynamically distributed across all top-level devices to balance data among devices. As new virtual devices are added, .Tn ZFS automatically places data on the newly available devices. .Pp Virtual devices are specified one at a time on the command line, separated by -whitespace. The keywords +whitespace. The keywords .Qq mirror and .Qq raidz @@ -428,7 +429,7 @@ allows devices to be associated with poo .Qq hot spares . These devices are not actively used in the pool, but when an active device fails, it is automatically replaced by a hot spare. To create a pool with hot -spares, specify a +spares, specify a .Qq spare .No vdev with any number of devices. For example, @@ -458,7 +459,7 @@ pools. .Pp Spares cannot replace log devices. .Ss Intent Log -The +The .Tn ZFS Intent Log .Pq Tn ZIL @@ -537,6 +538,16 @@ value of 1.76 indicates that 1.76 units for a description of the deduplication feature. .It Sy free Number of blocks within the pool that are not allocated. +.It Sy freeing +After a file system or snapshot is destroyed, the space it was using is +returned to the pool asynchronously. +.Sy freeing +is the amount of space remaining to be reclaimed. +Over time +.Sy freeing +will decrease while +.Sy free +increases. .It Sy expandsize This property has currently no value on FreeBSD. .It Sy guid @@ -552,11 +563,16 @@ or .Qq Sy UNAVAIL . .It Sy size Total size of the storage pool. +.It Sy unsupported@ Ns Ar feature_guid +Information about unsupported features that are enabled on the pool. +See +.Xr zpool-features 5 +for details. .It Sy used Amount of storage space used within the pool. .El .Pp -These space usage properties report actual physical space available to the +The space usage properties report actual physical space available to the storage pool. The physical space can be different from the total amount of space that any contained datasets can actually use. The amount of space used in a @@ -582,7 +598,7 @@ the typical paths are not valid. .Sy altroot is not a persistent property. It is valid only while the system is up. Setting -.Sy altroot +.Sy altroot defaults to using .Cm cachefile=none , though this may be overridden using an explicit setting. @@ -627,9 +643,9 @@ This property can also be referred to by .It Sy autoreplace Ns = Ns Cm on No | Cm off Controls automatic device replacement. If set to .Qq Cm off , -device replacement must be initiated by the administrator by using the +device replacement must be initiated by the administrator by using the .Qq Nm Cm replace -command. If set to +command. If set to .Qq Cm on , any new device, found in the same physical location as a device that previously belonged to the pool, is @@ -650,13 +666,18 @@ pool configuration in a different locati .Qq Nm Cm import Fl c . Setting it to the special value .Qq Cm none -creates a temporary pool that is never cached, and the special value +creates a temporary pool that is never cached, and the special value .Cm '' (empty string) uses the default location. +.It Sy comment Ns = Ns Ar text +A text string consisting of printable ASCII characters that will be stored +such that it is available even if the pool becomes faulted. +An administrator can provide additional information about a pool using this +property. .It Sy dedupditto Ns = Ns Ar number Threshold for the number of block ditto copies. If the reference count for a deduplicated block increases above this number, a new ditto copy of this block -is automatically stored. Deafult setting is +is automatically stored. Default setting is .Cm 0 . .It Sy delegation Ns = Ns Cm on No | Cm off Controls whether a non-privileged user is granted access based on the dataset @@ -686,6 +707,17 @@ requests that have yet to be committed t .It Sy panic Prints out a message to the console and generates a system crash dump. .El +.It Sy feature@ Ns Ar feature_name Ns = Ns Sy enabled +The value of this property is the current state of +.Ar feature_name . +The only valid value when setting this property is +.Sy enabled +which moves +.Ar feature_name +to the enabled state. +See +.Xr zpool-features 5 +for details on feature states. .It Sy listsnaps Ns = Ns Cm on No | Cm off Controls whether information about snapshots associated with this pool is output when @@ -699,9 +731,9 @@ The current on-disk version of the pool. decreased. The preferred method of updating pools is with the .Qq Nm Cm upgrade command, though this property can be used when a specific version is needed -for backwards compatibility. This property can be any number between 1 and the -current version reported by -.Qo Ic zpool upgrade -v Qc . +for backwards compatibility. +Once feature flags is enabled on a pool this property will no longer have a +value. .El .Sh SUBCOMMANDS All subcommands that modify state are logged persistently to the pool in their @@ -810,7 +842,7 @@ do not actually discard any transactions .It Xo .Nm .Cm create -.Op Fl fn +.Op Fl fnd .Op Fl o Ar property Ns = Ns Ar value .Ar ... .Op Fl O Ar file-system-property Ns = Ns Ar value @@ -859,9 +891,13 @@ The mount point must not exist or must b root dataset cannot be mounted. This can be overridden with the .Fl m option. +.Pp +By default all supported features are enabled on the new pool unless the +.Fl d +option is specified. .Bl -tag -width indent .It Fl f -Forces use of +Forces use of .Ar vdev Ns s, even if they appear in use or specify a conflicting replication level. Not all devices can be overridden in this manner. @@ -869,6 +905,17 @@ Not all devices can be overridden in thi Displays the configuration that would be used without actually creating the pool. The actual pool creation can still fail due to insufficient privileges or device sharing. +.It Fl d +Do not enable any features on the new pool. +Individual features can be enabled by setting their corresponding properties +to +.Sy enabled +with the +.Fl o +option. +See +.Xr zpool-features 5 +for details about feature properties. .It Xo .Fl o Ar property Ns = Ns Ar value .Op Fl o Ar property Ns = Ns Ar value @@ -897,7 +944,7 @@ or .Qq Cm altroot Ns Pa /pool if .Sy altroot -is specified. The mount point must be an absolute path, +is specified. The mount point must be an absolute path, .Qq Cm legacy , or .Qq Cm none . @@ -1234,7 +1281,7 @@ seconds until .Sy Ctrl-C is pressed. If no .Ar pools -are specified, statistics for every pool in the system is shown. If +are specified, statistics for every pool in the system is shown. If .Ar count is specified, the command exits after .Ar count @@ -1292,7 +1339,7 @@ When given an interval, the output is pr .Ar interval seconds until .Sy Ctrl-C -is pressed. If +is pressed. If .Ar count is specified, the command exits after .Ar count @@ -1301,6 +1348,8 @@ reports are printed. .It Fl H Scripted mode. Do not display headers, and separate fields by a single tab instead of arbitrary space. +.It Fl v +Show more detailed information. .It Fl o Ar property Ns Op , Ns Ar ... Comma-separated list of properties to display. See the .Qq Sx Properties @@ -1396,7 +1445,7 @@ This is equivalent to attaching waiting for it to resilver, and then detaching .Ar old_device . .Pp -The size of +The size of .Ar new_device must be greater than or equal to the minimum size of all the devices in a mirror or @@ -1407,7 +1456,7 @@ configuration. is required if the pool is not redundant. If .Ar new_device is not specified, it defaults to -.Ar old_device . +.Ar old_device . This form of replacement is useful after an existing disk has failed and has been physically replaced. In this case, the new disk may have the same .Pa /dev @@ -1494,12 +1543,12 @@ unless overridden by a device specificat .Pp When using a .Ar device -argument, +argument, .Cm split -includes the specified device(s) in a new pool and, should any devices remain +includes the specified device(s) in a new pool and, should any devices remain unspecified, assigns the last device in each mirror .No vdev -to that pool, as it does normally. If you are uncertain about the outcome of a +to that pool, as it does normally. If you are uncertain about the outcome of a .Cm split command, use the .Fl n @@ -1552,7 +1601,7 @@ When given an interval, the output is pr .Ar interval seconds until .Sy Ctrl-C -is pressed. If +is pressed. If .Ar count is specified, the command exits after .Ar count @@ -1873,6 +1922,7 @@ Invalid command line options were specif .El .Sh SEE ALSO .Xr zfs 8 +.Xr zpool-features 5 .Sh AUTHORS This manual page is a .Xr mdoc 7 Modified: user/attilio/vmcontention/cddl/contrib/opensolaris/cmd/zpool/zpool_main.c ============================================================================== --- user/attilio/vmcontention/cddl/contrib/opensolaris/cmd/zpool/zpool_main.c Sat Jun 16 16:51:42 2012 (r237165) +++ user/attilio/vmcontention/cddl/contrib/opensolaris/cmd/zpool/zpool_main.c Sat Jun 16 17:05:09 2012 (r237166) @@ -54,6 +54,7 @@ #include "zpool_util.h" #include "zfs_comutil.h" +#include "zfeature_common.h" #include "statcommon.h" @@ -207,7 +208,7 @@ get_usage(zpool_help_t idx) { case HELP_CLEAR: return (gettext("\tclear [-nF] [device]\n")); case HELP_CREATE: - return (gettext("\tcreate [-fn] [-o property=value] ... \n" + return (gettext("\tcreate [-fnd] [-o property=value] ... \n" "\t [-O file-system-property=value] ... \n" "\t [-m mountpoint] [-R root] ...\n")); case HELP_DESTROY: @@ -234,7 +235,7 @@ get_usage(zpool_help_t idx) { case HELP_LABELCLEAR: return (gettext("\tlabelclear [-f] \n")); case HELP_LIST: - return (gettext("\tlist [-H] [-o property[,...]] " + return (gettext("\tlist [-Hv] [-o property[,...]] " "[-T d|u] [pool] ... [interval [count]]\n")); case HELP_OFFLINE: return (gettext("\toffline [-t] ...\n")); @@ -339,6 +340,12 @@ usage(boolean_t requested) /* Iterate over all properties */ (void) zprop_iter(print_prop_cb, fp, B_FALSE, B_TRUE, ZFS_TYPE_POOL); + + (void) fprintf(fp, "\t%-15s ", "feature@..."); + (void) fprintf(fp, "YES disabled | enabled | active\n"); + + (void) fprintf(fp, gettext("\nThe feature@ properties must be " + "appended with a feature name.\nSee zpool-features(5).\n")); } /* @@ -405,12 +412,16 @@ add_prop_list(const char *propname, char proplist = *props; if (poolprop) { - if ((prop = zpool_name_to_prop(propname)) == ZPROP_INVAL) { + if ((prop = zpool_name_to_prop(propname)) == ZPROP_INVAL && + !zpool_prop_feature(propname)) { (void) fprintf(stderr, gettext("property '%s' is " "not a valid pool property\n"), propname); return (2); } - normnm = zpool_prop_to_name(prop); + if (zpool_prop_feature(propname)) + normnm = propname; + else + normnm = zpool_prop_to_name(prop); } else { if ((fprop = zfs_name_to_prop(propname)) != ZPROP_INVAL) { normnm = zfs_prop_to_name(fprop); @@ -701,7 +712,7 @@ errout: } /* - * zpool create [-fn] [-o property=value] ... + * zpool create [-fnd] [-o property=value] ... * [-O file-system-property=value] ... * [-R root] [-m mountpoint] ... * @@ -710,8 +721,10 @@ errout: * were to be created. * -R Create a pool under an alternate root * -m Set default mountpoint for the root dataset. By default it's - * '/' + * '/' * -o Set property=value. + * -d Don't automatically enable all supported pool features + * (individual features can be enabled with -o). * -O Set fsproperty=value in the pool's root file system * * Creates the named pool according to the given vdev specification. The @@ -724,6 +737,7 @@ zpool_do_create(int argc, char **argv) { boolean_t force = B_FALSE; boolean_t dryrun = B_FALSE; + boolean_t enable_all_pool_feat = B_TRUE; int c; nvlist_t *nvroot = NULL; char *poolname; @@ -735,7 +749,7 @@ zpool_do_create(int argc, char **argv) char *propval; /* check options */ - while ((c = getopt(argc, argv, ":fnR:m:o:O:")) != -1) { + while ((c = getopt(argc, argv, ":fndR:m:o:O:")) != -1) { switch (c) { case 'f': force = B_TRUE; @@ -743,6 +757,9 @@ zpool_do_create(int argc, char **argv) case 'n': dryrun = B_TRUE; break; + case 'd': + enable_all_pool_feat = B_FALSE; + break; case 'R': altroot = optarg; if (add_prop_list(zpool_prop_to_name( @@ -770,6 +787,21 @@ zpool_do_create(int argc, char **argv) if (add_prop_list(optarg, propval, &props, B_TRUE)) goto errout; + + /* + * If the user is creating a pool that doesn't support + * feature flags, don't enable any features. + */ + if (zpool_name_to_prop(optarg) == ZPOOL_PROP_VERSION) { + char *end; + u_longlong_t ver; + + ver = strtoull(propval, &end, 10); + if (*end == '\0' && + ver < SPA_VERSION_FEATURES) { + enable_all_pool_feat = B_FALSE; + } + } break; case 'O': if ((propval = strchr(optarg, '=')) == NULL) { @@ -835,7 +867,6 @@ zpool_do_create(int argc, char **argv) goto errout; } - if (altroot != NULL && altroot[0] != '/') { (void) fprintf(stderr, gettext("invalid alternate root '%s': " "must be an absolute path\n"), altroot); @@ -917,6 +948,27 @@ zpool_do_create(int argc, char **argv) /* * Hand off to libzfs. */ + if (enable_all_pool_feat) { + int i; + for (i = 0; i < SPA_FEATURES; i++) { + char propname[MAXPATHLEN]; + zfeature_info_t *feat = &spa_feature_table[i]; + + (void) snprintf(propname, sizeof (propname), + "feature@%s", feat->fi_uname); + + /* + * Skip feature if user specified it manually + * on the command line. + */ + if (nvlist_exists(props, propname)) + continue; + + if (add_prop_list(propname, ZFS_FEATURE_ENABLED, + &props, B_TRUE) != 0) + goto errout; + } + } if (zpool_create(g_zfs, poolname, nvroot, props, fsprops) == 0) { zfs_handle_t *pool = zfs_open(g_zfs, poolname, @@ -1249,6 +1301,10 @@ print_status_config(zpool_handle_t *zhp, (void) printf(gettext("newer version")); break; + case VDEV_AUX_UNSUP_FEAT: + (void) printf(gettext("unsupported feature(s)")); + break; + case VDEV_AUX_SPARED: verify(nvlist_lookup_uint64(nv, ZPOOL_CONFIG_GUID, &cb.cb_guid) == 0); @@ -1366,6 +1422,10 @@ print_import_config(const char *name, nv (void) printf(gettext("newer version")); break; + case VDEV_AUX_UNSUP_FEAT: + (void) printf(gettext("unsupported feature(s)")); + break; + case VDEV_AUX_ERR_EXCEEDED: (void) printf(gettext("too many errors")); break; @@ -1532,6 +1592,20 @@ show_import(nvlist_t *config) "incompatible version.\n")); break; + case ZPOOL_STATUS_UNSUP_FEAT_READ: + (void) printf(gettext("status: The pool uses the following " + "feature(s) not supported on this sytem:\n")); + zpool_print_unsup_feat(config); + break; + + case ZPOOL_STATUS_UNSUP_FEAT_WRITE: + (void) printf(gettext("status: The pool can only be accessed " + "in read-only mode on this system. It\n\tcannot be " + "accessed in read-write mode because it uses the " + "following\n\tfeature(s) not supported on this system:\n")); + zpool_print_unsup_feat(config); + break; + case ZPOOL_STATUS_HOSTID_MISMATCH: (void) printf(gettext(" status: The pool was last accessed by " "another system.\n")); @@ -1589,6 +1663,20 @@ show_import(nvlist_t *config) "newer\n\tsoftware, or recreate the pool from " "backup.\n")); break; + case ZPOOL_STATUS_UNSUP_FEAT_READ: + (void) printf(gettext("action: The pool cannot be " + "imported. Access the pool on a system that " + "supports\n\tthe required feature(s), or recreate " + "the pool from backup.\n")); + break; + case ZPOOL_STATUS_UNSUP_FEAT_WRITE: + (void) printf(gettext("action: The pool cannot be " + "imported in read-write mode. Import the pool " + "with\n" + "\t\"-o readonly=on\", access the pool on a system " + "that supports the\n\trequired feature(s), or " + "recreate the pool from backup.\n")); + break; case ZPOOL_STATUS_MISSING_DEV_R: case ZPOOL_STATUS_MISSING_DEV_NR: case ZPOOL_STATUS_BAD_GUID_SUM: @@ -1664,9 +1752,9 @@ do_import(nvlist_t *config, const char * ZPOOL_CONFIG_POOL_STATE, &state) == 0); verify(nvlist_lookup_uint64(config, ZPOOL_CONFIG_VERSION, &version) == 0); - if (version > SPA_VERSION) { + if (!SPA_VERSION_IS_SUPPORTED(version)) { (void) fprintf(stderr, gettext("cannot import '%s': pool " - "is formatted using a newer ZFS version\n"), name); + "is formatted using an unsupported ZFS version\n"), name); return (1); } else if (state != POOL_STATE_EXPORTED && !(flags & ZFS_IMPORT_ANY_HOST)) { @@ -2601,15 +2689,13 @@ static void print_header(list_cbdata_t *cb) { zprop_list_t *pl = cb->cb_proplist; + char headerbuf[ZPOOL_MAXPROPLEN]; const char *header; boolean_t first = B_TRUE; boolean_t right_justify; size_t width = 0; for (; pl != NULL; pl = pl->pl_next) { - if (pl->pl_prop == ZPROP_INVAL) - continue; - width = pl->pl_width; if (first && cb->cb_verbose) { /* @@ -2624,8 +2710,18 @@ print_header(list_cbdata_t *cb) *** DIFF OUTPUT TRUNCATED AT 1000 LINES ***